Changeset 388 for python/vendor/current/Modules/sha256module.c
- Timestamp:
- Mar 19, 2014, 11:11:30 AM (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
python/vendor/current/Modules/sha256module.c
r2 r388 23 23 /* Endianness testing and definitions */ 24 24 #define TestEndianness(variable) {int i=1; variable=PCT_BIG_ENDIAN;\ 25 25 if (*((char*)&i)==1) variable=PCT_LITTLE_ENDIAN;} 26 26 27 27 #define PCT_LITTLE_ENDIAN 1 … … 33 33 34 34 #if SIZEOF_INT == 4 35 typedef unsigned int SHA_INT32; 35 typedef unsigned int SHA_INT32; /* 32-bit integer */ 36 36 #else 37 37 /* not defined. compilation will die. */ … … 47 47 typedef struct { 48 48 PyObject_HEAD 49 SHA_INT32 digest[8]; 50 SHA_INT32 count_lo, count_hi; 51 SHA_BYTE data[SHA_BLOCKSIZE]; 49 SHA_INT32 digest[8]; /* Message digest */ 50 SHA_INT32 count_lo, count_hi; /* 64-bit bit count */ 51 SHA_BYTE data[SHA_BLOCKSIZE]; /* SHA data buffer */ 52 52 int Endianness; 53 int local; 53 int local; /* unprocessed amount in data */ 54 54 int digestsize; 55 55 } SHAobject; … … 63 63 64 64 if ( Endianness == PCT_BIG_ENDIAN ) 65 65 return; 66 66 67 67 byteCount /= sizeof(*buffer); … … 115 115 ((unsigned long)(x)<<(unsigned long)(32-((y)&31)))) & 0xFFFFFFFFUL) 116 116 #define Ch(x,y,z) (z ^ (x & (y ^ z))) 117 #define Maj(x,y,z) (((x | y) & z) | (x & y)) 117 #define Maj(x,y,z) (((x | y) & z) | (x & y)) 118 118 #define S(x, n) ROR((x),(n)) 119 119 #define R(x, n) (((x)&0xFFFFFFFFUL)>>(n)) … … 128 128 { 129 129 int i; 130 130 SHA_INT32 S[8], W[64], t0, t1; 131 131 132 132 memcpy(W, sha_info->data, sizeof(sha_info->data)); … … 134 134 135 135 for (i = 16; i < 64; ++i) { 136 136 W[i] = Gamma1(W[i - 2]) + W[i - 7] + Gamma0(W[i - 15]) + W[i - 16]; 137 137 } 138 138 for (i = 0; i < 8; ++i) { … … 212 212 RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],63,0xc67178f2); 213 213 214 #undef RND 215 214 #undef RND 215 216 216 /* feedback */ 217 217 for (i = 0; i < 8; i++) { … … 315 315 ((SHA_BYTE *) sha_info->data)[count++] = 0x80; 316 316 if (count > SHA_BLOCKSIZE - 8) { 317 318 319 320 317 memset(((SHA_BYTE *) sha_info->data) + count, 0, 318 SHA_BLOCKSIZE - count); 319 sha_transform(sha_info); 320 memset((SHA_BYTE *) sha_info->data, 0, SHA_BLOCKSIZE - 8); 321 321 } 322 322 else { 323 324 323 memset(((SHA_BYTE *) sha_info->data) + count, 0, 324 SHA_BLOCKSIZE - 8 - count); 325 325 } 326 326 … … 455 455 retval = PyString_FromStringAndSize(NULL, self->digestsize * 2); 456 456 if (!retval) 457 457 return NULL; 458 458 hex_digest = PyString_AsString(retval); 459 459 if (!hex_digest) { 460 461 460 Py_DECREF(retval); 461 return NULL; 462 462 } 463 463 … … 466 466 char c; 467 467 c = (digest[i] >> 4) & 0xf; 468 468 c = (c>9) ? c+'a'-10 : c + '0'; 469 469 hex_digest[j++] = c; 470 470 c = (digest[i] & 0xf); 471 471 c = (c>9) ? c+'a'-10 : c + '0'; 472 472 hex_digest[j++] = c; 473 473 } … … 481 481 SHA256_update(SHAobject *self, PyObject *args) 482 482 { 483 unsigned char *cp; 484 int len; 485 486 if (!PyArg_ParseTuple(args, "s#:update", &cp, &len)) 483 Py_buffer buf; 484 485 if (!PyArg_ParseTuple(args, "s*:update", &buf)) 487 486 return NULL; 488 487 489 sha_update(self, cp,len);490 491 Py _INCREF(Py_None);492 return Py_None;488 sha_update(self, buf.buf, buf.len); 489 490 PyBuffer_Release(&buf); 491 Py_RETURN_NONE; 493 492 } 494 493 495 494 static PyMethodDef SHA_methods[] = { 496 {"copy", 497 {"digest", 495 {"copy", (PyCFunction)SHA256_copy, METH_NOARGS, SHA256_copy__doc__}, 496 {"digest", (PyCFunction)SHA256_digest, METH_NOARGS, SHA256_digest__doc__}, 498 497 {"hexdigest", (PyCFunction)SHA256_hexdigest, METH_NOARGS, SHA256_hexdigest__doc__}, 499 {"update", 500 {NULL, NULL}/* sentinel */498 {"update", (PyCFunction)SHA256_update, METH_VARARGS, SHA256_update__doc__}, 499 {NULL, NULL} /* sentinel */ 501 500 }; 502 501 … … 538 537 static PyTypeObject SHA224type = { 539 538 PyVarObject_HEAD_INIT(NULL, 0) 540 "_sha256.sha224", 541 sizeof(SHAobject), 542 0, 539 "_sha256.sha224", /*tp_name*/ 540 sizeof(SHAobject), /*tp_size*/ 541 0, /*tp_itemsize*/ 543 542 /* methods */ 544 SHA_dealloc, 545 0, 546 0, 543 SHA_dealloc, /*tp_dealloc*/ 544 0, /*tp_print*/ 545 0, /*tp_getattr*/ 547 546 0, /*tp_setattr*/ 548 547 0, /*tp_compare*/ … … 560 559 0, /*tp_doc*/ 561 560 0, /*tp_traverse*/ 562 0, 563 0, 564 0, 565 0, 566 0, 567 SHA_methods, 568 SHA_members, 561 0, /*tp_clear*/ 562 0, /*tp_richcompare*/ 563 0, /*tp_weaklistoffset*/ 564 0, /*tp_iter*/ 565 0, /*tp_iternext*/ 566 SHA_methods, /* tp_methods */ 567 SHA_members, /* tp_members */ 569 568 SHA_getseters, /* tp_getset */ 570 569 }; … … 572 571 static PyTypeObject SHA256type = { 573 572 PyVarObject_HEAD_INIT(NULL, 0) 574 "_sha256.sha256", 575 sizeof(SHAobject), 576 0, 573 "_sha256.sha256", /*tp_name*/ 574 sizeof(SHAobject), /*tp_size*/ 575 0, /*tp_itemsize*/ 577 576 /* methods */ 578 SHA_dealloc, 579 0, 580 0, 577 SHA_dealloc, /*tp_dealloc*/ 578 0, /*tp_print*/ 579 0, /*tp_getattr*/ 581 580 0, /*tp_setattr*/ 582 581 0, /*tp_compare*/ … … 594 593 0, /*tp_doc*/ 595 594 0, /*tp_traverse*/ 596 0, 597 0, 598 0, 599 0, 600 0, 601 SHA_methods, 602 SHA_members, 595 0, /*tp_clear*/ 596 0, /*tp_richcompare*/ 597 0, /*tp_weaklistoffset*/ 598 0, /*tp_iter*/ 599 0, /*tp_iternext*/ 600 SHA_methods, /* tp_methods */ 601 SHA_members, /* tp_members */ 603 602 SHA_getseters, /* tp_getset */ 604 603 }; … … 615 614 static char *kwlist[] = {"string", NULL}; 616 615 SHAobject *new; 617 unsigned char *cp = NULL; 618 int len; 619 620 if (!PyArg_ParseTupleAndKeywords(args, kwdict, "|s#:new", kwlist, 621 &cp, &len)) { 616 Py_buffer buf = { 0 }; 617 618 if (!PyArg_ParseTupleAndKeywords(args, kwdict, "|s*:new", kwlist, 619 &buf)) { 622 620 return NULL; 623 621 } 624 622 625 if ((new = newSHA256object()) == NULL) 623 if ((new = newSHA256object()) == NULL) { 624 PyBuffer_Release(&buf); 626 625 return NULL; 626 } 627 627 628 628 sha_init(new); … … 630 630 if (PyErr_Occurred()) { 631 631 Py_DECREF(new); 632 PyBuffer_Release(&buf); 632 633 return NULL; 633 634 } 634 if (cp) 635 sha_update(new, cp, len); 635 if (buf.len > 0) { 636 sha_update(new, buf.buf, buf.len); 637 } 638 PyBuffer_Release(&buf); 636 639 637 640 return (PyObject *)new; … … 646 649 static char *kwlist[] = {"string", NULL}; 647 650 SHAobject *new; 648 unsigned char *cp = NULL; 649 int len; 650 651 if (!PyArg_ParseTupleAndKeywords(args, kwdict, "|s#:new", kwlist, 652 &cp, &len)) { 651 Py_buffer buf = { 0 }; 652 653 if (!PyArg_ParseTupleAndKeywords(args, kwdict, "|s*:new", kwlist, 654 &buf)) { 653 655 return NULL; 654 656 } 655 657 656 if ((new = newSHA224object()) == NULL) 658 if ((new = newSHA224object()) == NULL) { 659 PyBuffer_Release(&buf); 657 660 return NULL; 661 } 658 662 659 663 sha224_init(new); … … 661 665 if (PyErr_Occurred()) { 662 666 Py_DECREF(new); 667 PyBuffer_Release(&buf); 663 668 return NULL; 664 669 } 665 if (cp) 666 sha_update(new, cp, len); 670 if (buf.len > 0) { 671 sha_update(new, buf.buf, buf.len); 672 } 673 PyBuffer_Release(&buf); 667 674 668 675 return (PyObject *)new; … … 675 682 {"sha256", (PyCFunction)SHA256_new, METH_VARARGS|METH_KEYWORDS, SHA256_new__doc__}, 676 683 {"sha224", (PyCFunction)SHA224_new, METH_VARARGS|METH_KEYWORDS, SHA224_new__doc__}, 677 {NULL, NULL}/* Sentinel */684 {NULL, NULL} /* Sentinel */ 678 685 }; 679 686 … … 696 703 m = Py_InitModule("_sha256", SHA_functions); 697 704 if (m == NULL) 698 699 } 705 return; 706 }
Note:
See TracChangeset
for help on using the changeset viewer.