Ignore:
Timestamp:
Mar 19, 2014, 11:31:01 PM (11 years ago)
Author:
dmik
Message:

python: Merge vendor 2.7.6 to trunk.

Location:
python/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • python/trunk

  • python/trunk/Modules/sha512module.c

    r2 r391  
    2424/* Endianness testing and definitions */
    2525#define TestEndianness(variable) {int i=1; variable=PCT_BIG_ENDIAN;\
    26         if (*((char*)&i)==1) variable=PCT_LITTLE_ENDIAN;}
     26        if (*((char*)&i)==1) variable=PCT_LITTLE_ENDIAN;}
    2727
    2828#define PCT_LITTLE_ENDIAN 1
     
    3434
    3535#if SIZEOF_INT == 4
    36 typedef unsigned int SHA_INT32; /* 32-bit integer */
    37 typedef unsigned PY_LONG_LONG SHA_INT64;        /* 64-bit integer */
     36typedef unsigned int SHA_INT32; /* 32-bit integer */
     37typedef unsigned PY_LONG_LONG SHA_INT64;        /* 64-bit integer */
    3838#else
    3939/* not defined. compilation will die. */
     
    4949typedef struct {
    5050    PyObject_HEAD
    51     SHA_INT64 digest[8];                /* Message digest */
    52     SHA_INT32 count_lo, count_hi;       /* 64-bit bit count */
    53     SHA_BYTE data[SHA_BLOCKSIZE];       /* SHA data buffer */
     51    SHA_INT64 digest[8];                /* Message digest */
     52    SHA_INT32 count_lo, count_hi;       /* 64-bit bit count */
     53    SHA_BYTE data[SHA_BLOCKSIZE];       /* SHA data buffer */
    5454    int Endianness;
    55     int local;                          /* unprocessed amount in data */
     55    int local;                          /* unprocessed amount in data */
    5656    int digestsize;
    5757} SHAobject;
     
    6565
    6666    if ( Endianness == PCT_BIG_ENDIAN )
    67         return;
     67        return;
    6868
    6969    byteCount /= sizeof(*buffer);
     
    7171        value = *buffer;
    7272
    73                 ((unsigned char*)buffer)[0] = (unsigned char)(value >> 56) & 0xff;
    74                 ((unsigned char*)buffer)[1] = (unsigned char)(value >> 48) & 0xff;
    75                 ((unsigned char*)buffer)[2] = (unsigned char)(value >> 40) & 0xff;
    76                 ((unsigned char*)buffer)[3] = (unsigned char)(value >> 32) & 0xff;
    77                 ((unsigned char*)buffer)[4] = (unsigned char)(value >> 24) & 0xff;
    78                 ((unsigned char*)buffer)[5] = (unsigned char)(value >> 16) & 0xff;
    79                 ((unsigned char*)buffer)[6] = (unsigned char)(value >>  8) & 0xff;
    80                 ((unsigned char*)buffer)[7] = (unsigned char)(value      ) & 0xff;
    81        
    82                 buffer++;
     73                ((unsigned char*)buffer)[0] = (unsigned char)(value >> 56) & 0xff;
     74                ((unsigned char*)buffer)[1] = (unsigned char)(value >> 48) & 0xff;
     75                ((unsigned char*)buffer)[2] = (unsigned char)(value >> 40) & 0xff;
     76                ((unsigned char*)buffer)[3] = (unsigned char)(value >> 32) & 0xff;
     77                ((unsigned char*)buffer)[4] = (unsigned char)(value >> 24) & 0xff;
     78                ((unsigned char*)buffer)[5] = (unsigned char)(value >> 16) & 0xff;
     79                ((unsigned char*)buffer)[6] = (unsigned char)(value >>  8) & 0xff;
     80                ((unsigned char*)buffer)[7] = (unsigned char)(value      ) & 0xff;
     81
     82                buffer++;
    8383    }
    8484}
     
    125125      ((x)<<((unsigned PY_LONG_LONG)(64-((y) & 63))))) & Py_ULL(0xFFFFFFFFFFFFFFFF))
    126126#define Ch(x,y,z)       (z ^ (x & (y ^ z)))
    127 #define Maj(x,y,z)      (((x | y) & z) | (x & y)) 
     127#define Maj(x,y,z)      (((x | y) & z) | (x & y))
    128128#define S(x, n)         ROR64((x),(n))
    129129#define R(x, n)         (((x) & Py_ULL(0xFFFFFFFFFFFFFFFF)) >> ((unsigned PY_LONG_LONG)n))
     
    144144
    145145    for (i = 16; i < 80; ++i) {
    146                 W[i] = Gamma1(W[i - 2]) + W[i - 7] + Gamma0(W[i - 15]) + W[i - 16];
     146                W[i] = Gamma1(W[i - 2]) + W[i - 7] + Gamma0(W[i - 15]) + W[i - 16];
    147147    }
    148148    for (i = 0; i < 8; ++i) {
     
    238238    RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],79,Py_ULL(0x6c44198c4a475817));
    239239
    240 #undef RND     
    241    
     240#undef RND
     241
    242242    /* feedback */
    243243    for (i = 0; i < 8; i++) {
     
    341341    ((SHA_BYTE *) sha_info->data)[count++] = 0x80;
    342342    if (count > SHA_BLOCKSIZE - 16) {
    343         memset(((SHA_BYTE *) sha_info->data) + count, 0,
    344                SHA_BLOCKSIZE - count);
    345         sha512_transform(sha_info);
    346         memset((SHA_BYTE *) sha_info->data, 0, SHA_BLOCKSIZE - 16);
     343        memset(((SHA_BYTE *) sha_info->data) + count, 0,
     344               SHA_BLOCKSIZE - count);
     345        sha512_transform(sha_info);
     346        memset((SHA_BYTE *) sha_info->data, 0, SHA_BLOCKSIZE - 16);
    347347    }
    348348    else {
    349         memset(((SHA_BYTE *) sha_info->data) + count, 0,
    350                SHA_BLOCKSIZE - 16 - count);
     349        memset(((SHA_BYTE *) sha_info->data) + count, 0,
     350               SHA_BLOCKSIZE - 16 - count);
    351351    }
    352352
     
    521521    retval = PyString_FromStringAndSize(NULL, self->digestsize * 2);
    522522    if (!retval)
    523             return NULL;
     523            return NULL;
    524524    hex_digest = PyString_AsString(retval);
    525525    if (!hex_digest) {
    526             Py_DECREF(retval);
    527             return NULL;
     526            Py_DECREF(retval);
     527            return NULL;
    528528    }
    529529
     
    532532        char c;
    533533        c = (digest[i] >> 4) & 0xf;
    534         c = (c>9) ? c+'a'-10 : c + '0';
     534        c = (c>9) ? c+'a'-10 : c + '0';
    535535        hex_digest[j++] = c;
    536536        c = (digest[i] & 0xf);
    537         c = (c>9) ? c+'a'-10 : c + '0';
     537        c = (c>9) ? c+'a'-10 : c + '0';
    538538        hex_digest[j++] = c;
    539539    }
     
    547547SHA512_update(SHAobject *self, PyObject *args)
    548548{
    549     unsigned char *cp;
    550     int len;
    551 
    552     if (!PyArg_ParseTuple(args, "s#:update", &cp, &len))
     549    Py_buffer buf;
     550
     551    if (!PyArg_ParseTuple(args, "s*:update", &buf))
    553552        return NULL;
    554553
    555     sha512_update(self, cp, len);
    556 
    557     Py_INCREF(Py_None);
    558     return Py_None;
     554    sha512_update(self, buf.buf, buf.len);
     555
     556    PyBuffer_Release(&buf);
     557    Py_RETURN_NONE;
    559558}
    560559
    561560static PyMethodDef SHA_methods[] = {
    562     {"copy",      (PyCFunction)SHA512_copy,      METH_NOARGS, SHA512_copy__doc__},
    563     {"digest",    (PyCFunction)SHA512_digest,    METH_NOARGS, SHA512_digest__doc__},
     561    {"copy",      (PyCFunction)SHA512_copy,      METH_NOARGS, SHA512_copy__doc__},
     562    {"digest",    (PyCFunction)SHA512_digest,    METH_NOARGS, SHA512_digest__doc__},
    564563    {"hexdigest", (PyCFunction)SHA512_hexdigest, METH_NOARGS, SHA512_hexdigest__doc__},
    565     {"update",    (PyCFunction)SHA512_update,    METH_VARARGS, SHA512_update__doc__},
    566     {NULL,        NULL}         /* sentinel */
     564    {"update",    (PyCFunction)SHA512_update,    METH_VARARGS, SHA512_update__doc__},
     565    {NULL,        NULL}         /* sentinel */
    567566};
    568567
     
    604603static PyTypeObject SHA384type = {
    605604    PyVarObject_HEAD_INIT(NULL, 0)
    606     "_sha512.sha384",   /*tp_name*/
    607     sizeof(SHAobject),  /*tp_size*/
    608     0,                  /*tp_itemsize*/
     605    "_sha512.sha384",   /*tp_name*/
     606    sizeof(SHAobject),  /*tp_size*/
     607    0,                  /*tp_itemsize*/
    609608    /* methods */
    610     SHA512_dealloc,     /*tp_dealloc*/
    611     0,                  /*tp_print*/
    612     0,                  /*tp_getattr*/
     609    SHA512_dealloc,     /*tp_dealloc*/
     610    0,                  /*tp_print*/
     611    0,                  /*tp_getattr*/
    613612    0,                  /*tp_setattr*/
    614613    0,                  /*tp_compare*/
     
    626625    0,                  /*tp_doc*/
    627626    0,                  /*tp_traverse*/
    628     0,                  /*tp_clear*/
    629     0,                  /*tp_richcompare*/
    630     0,                  /*tp_weaklistoffset*/
    631     0,                  /*tp_iter*/
    632     0,                  /*tp_iternext*/
    633     SHA_methods,        /* tp_methods */
    634     SHA_members,        /* tp_members */
     627    0,                  /*tp_clear*/
     628    0,                  /*tp_richcompare*/
     629    0,                  /*tp_weaklistoffset*/
     630    0,                  /*tp_iter*/
     631    0,                  /*tp_iternext*/
     632    SHA_methods,        /* tp_methods */
     633    SHA_members,        /* tp_members */
    635634    SHA_getseters,      /* tp_getset */
    636635};
     
    638637static PyTypeObject SHA512type = {
    639638    PyVarObject_HEAD_INIT(NULL, 0)
    640     "_sha512.sha512",   /*tp_name*/
    641     sizeof(SHAobject),  /*tp_size*/
    642     0,                  /*tp_itemsize*/
     639    "_sha512.sha512",   /*tp_name*/
     640    sizeof(SHAobject),  /*tp_size*/
     641    0,                  /*tp_itemsize*/
    643642    /* methods */
    644     SHA512_dealloc,     /*tp_dealloc*/
    645     0,                  /*tp_print*/
    646     0,                  /*tp_getattr*/
     643    SHA512_dealloc,     /*tp_dealloc*/
     644    0,                  /*tp_print*/
     645    0,                  /*tp_getattr*/
    647646    0,                  /*tp_setattr*/
    648647    0,                  /*tp_compare*/
     
    660659    0,                  /*tp_doc*/
    661660    0,                  /*tp_traverse*/
    662     0,                  /*tp_clear*/
    663     0,                  /*tp_richcompare*/
    664     0,                  /*tp_weaklistoffset*/
    665     0,                  /*tp_iter*/
    666     0,                  /*tp_iternext*/
    667     SHA_methods,        /* tp_methods */
    668     SHA_members,        /* tp_members */
     661    0,                  /*tp_clear*/
     662    0,                  /*tp_richcompare*/
     663    0,                  /*tp_weaklistoffset*/
     664    0,                  /*tp_iter*/
     665    0,                  /*tp_iternext*/
     666    SHA_methods,        /* tp_methods */
     667    SHA_members,        /* tp_members */
    669668    SHA_getseters,      /* tp_getset */
    670669};
     
    681680    static char *kwlist[] = {"string", NULL};
    682681    SHAobject *new;
    683     unsigned char *cp = NULL;
    684     int len;
    685 
    686     if (!PyArg_ParseTupleAndKeywords(args, kwdict, "|s#:new", kwlist,
    687                                      &cp, &len)) {
     682    Py_buffer buf = { 0 };
     683
     684    if (!PyArg_ParseTupleAndKeywords(args, kwdict, "|s*:new", kwlist,
     685                                     &buf)) {
    688686        return NULL;
    689687    }
    690688
    691     if ((new = newSHA512object()) == NULL)
     689    if ((new = newSHA512object()) == NULL) {
     690        PyBuffer_Release(&buf);
    692691        return NULL;
     692    }
    693693
    694694    sha512_init(new);
     
    696696    if (PyErr_Occurred()) {
    697697        Py_DECREF(new);
     698        PyBuffer_Release(&buf);
    698699        return NULL;
    699700    }
    700     if (cp)
    701         sha512_update(new, cp, len);
     701    if (buf.len > 0) {
     702        sha512_update(new, buf.buf, buf.len);
     703    }
     704    PyBuffer_Release(&buf);
    702705
    703706    return (PyObject *)new;
     
    712715    static char *kwlist[] = {"string", NULL};
    713716    SHAobject *new;
    714     unsigned char *cp = NULL;
    715     int len;
    716 
    717     if (!PyArg_ParseTupleAndKeywords(args, kwdict, "|s#:new", kwlist,
    718                                      &cp, &len)) {
     717    Py_buffer buf = { 0 };
     718
     719    if (!PyArg_ParseTupleAndKeywords(args, kwdict, "|s*:new", kwlist,
     720                                     &buf)) {
    719721        return NULL;
    720722    }
    721723
    722     if ((new = newSHA384object()) == NULL)
     724    if ((new = newSHA384object()) == NULL) {
     725        PyBuffer_Release(&buf);
    723726        return NULL;
     727    }
    724728
    725729    sha384_init(new);
     
    727731    if (PyErr_Occurred()) {
    728732        Py_DECREF(new);
     733        PyBuffer_Release(&buf);
    729734        return NULL;
    730735    }
    731     if (cp)
    732         sha512_update(new, cp, len);
     736    if (buf.len > 0) {
     737        sha512_update(new, buf.buf, buf.len);
     738    }
     739    PyBuffer_Release(&buf);
    733740
    734741    return (PyObject *)new;
     
    741748    {"sha512", (PyCFunction)SHA512_new, METH_VARARGS|METH_KEYWORDS, SHA512_new__doc__},
    742749    {"sha384", (PyCFunction)SHA384_new, METH_VARARGS|METH_KEYWORDS, SHA384_new__doc__},
    743     {NULL,      NULL}            /* Sentinel */
     750    {NULL,      NULL}            /* Sentinel */
    744751};
    745752
     
    762769    m = Py_InitModule("_sha512", SHA_functions);
    763770    if (m == NULL)
    764         return;
     771        return;
    765772}
    766773
Note: See TracChangeset for help on using the changeset viewer.