cinap_lenrekadd hg and python4bb9e2215 years agoHistory
769 lines · 27.5 KB · C
RawDownload
    return PyString_FromStringAndSize((const char *)digest, self->digestsize);} PyDoc_STRVAR(SHA512_hexdigest__doc__,"Return the digest value as a string of hexadecimal digits."); static PyObject *SHA512_hexdigest(SHAobject *self, PyObject *unused){    unsigned char digest[SHA_DIGESTSIZE];    SHAobject temp;    PyObject *retval;    char *hex_digest;    int i, j;     /* Get the raw (binary) digest value */    SHAcopy(self, &temp);    sha512_final(digest, &temp);     /* Create a new string */    retval = PyString_FromStringAndSize(NULL, self->digestsize * 2);    if (!retval)	    return NULL;    hex_digest = PyString_AsString(retval);    if (!hex_digest) {	    Py_DECREF(retval);	    return NULL;    }     /* Make hex version of the digest */    for (i=j=0; i<self->digestsize; i++) {        char c;        c = (digest[i] >> 4) & 0xf;	c = (c>9) ? c+'a'-10 : c + '0';        hex_digest[j++] = c;        c = (digest[i] & 0xf);	c = (c>9) ? c+'a'-10 : c + '0';        hex_digest[j++] = c;    }    return retval;} PyDoc_STRVAR(SHA512_update__doc__,"Update this hash object's state with the provided string."); static PyObject *SHA512_update(SHAobject *self, PyObject *args){    unsigned char *cp;    int len;     if (!PyArg_ParseTuple(args, "s#:update", &cp, &len))        return NULL;     sha512_update(self, cp, len);     Py_INCREF(Py_None);    return Py_None;} static PyMethodDef SHA_methods[] = {    {"copy",	  (PyCFunction)SHA512_copy,      METH_NOARGS, SHA512_copy__doc__},    {"digest",	  (PyCFunction)SHA512_digest,    METH_NOARGS, SHA512_digest__doc__},    {"hexdigest", (PyCFunction)SHA512_hexdigest, METH_NOARGS, SHA512_hexdigest__doc__},    {"update",	  (PyCFunction)SHA512_update,    METH_VARARGS, SHA512_update__doc__},    {NULL,	  NULL}		/* sentinel */}; static PyObject *SHA512_get_block_size(PyObject *self, void *closure){    return PyInt_FromLong(SHA_BLOCKSIZE);} static PyObject *SHA512_get_name(PyObject *self, void *closure){    if (((SHAobject *)self)->digestsize == 64)        return PyString_FromStringAndSize("SHA512", 6);    else        return PyString_FromStringAndSize("SHA384", 6);} static PyGetSetDef SHA_getseters[] = {    {"block_size",     (getter)SHA512_get_block_size, NULL,     NULL,     NULL},    {"name",     (getter)SHA512_get_name, NULL,     NULL,     NULL},    {NULL}  /* Sentinel */}; static PyMemberDef SHA_members[] = {    {"digest_size", T_INT, offsetof(SHAobject, digestsize), READONLY, NULL},    /* the old md5 and sha modules support 'digest_size' as in PEP 247.     * the old sha module also supported 'digestsize'.  ugh. */    {"digestsize", T_INT, offsetof(SHAobject, digestsize), READONLY, NULL},    {NULL}  /* Sentinel */}; static PyTypeObject SHA384type = {    PyObject_HEAD_INIT(NULL)    0,			/*ob_size*/    "_sha512.sha384",	/*tp_name*/    sizeof(SHAobject),	/*tp_size*/    0,			/*tp_itemsize*/    /* methods */    SHA512_dealloc,	/*tp_dealloc*/    0,			/*tp_print*/    0,          	/*tp_getattr*/    0,                  /*tp_setattr*/    0,                  /*tp_compare*/    0,                  /*tp_repr*/    0,                  /*tp_as_number*/    0,                  /*tp_as_sequence*/    0,                  /*tp_as_mapping*/    0,                  /*tp_hash*/    0,                  /*tp_call*/    0,                  /*tp_str*/    0,                  /*tp_getattro*/    0,                  /*tp_setattro*/    0,                  /*tp_as_buffer*/    Py_TPFLAGS_DEFAULT, /*tp_flags*/    0,                  /*tp_doc*/    0,                  /*tp_traverse*/    0,			/*tp_clear*/    0,			/*tp_richcompare*/    0,			/*tp_weaklistoffset*/    0,			/*tp_iter*/    0,			/*tp_iternext*/    SHA_methods,	/* tp_methods */    SHA_members,	/* tp_members */    SHA_getseters,      /* tp_getset */}; static PyTypeObject SHA512type = {    PyObject_HEAD_INIT(NULL)    0,			/*ob_size*/    "_sha512.sha512",	/*tp_name*/    sizeof(SHAobject),	/*tp_size*/    0,			/*tp_itemsize*/    /* methods */    SHA512_dealloc,	/*tp_dealloc*/    0,			/*tp_print*/    0,          	/*tp_getattr*/    0,                  /*tp_setattr*/    0,                  /*tp_compare*/    0,                  /*tp_repr*/    0,                  /*tp_as_number*/    0,                  /*tp_as_sequence*/    0,                  /*tp_as_mapping*/    0,                  /*tp_hash*/    0,                  /*tp_call*/    0,                  /*tp_str*/    0,                  /*tp_getattro*/    0,                  /*tp_setattro*/    0,                  /*tp_as_buffer*/    Py_TPFLAGS_DEFAULT, /*tp_flags*/    0,                  /*tp_doc*/    0,                  /*tp_traverse*/    0,			/*tp_clear*/    0,			/*tp_richcompare*/    0,			/*tp_weaklistoffset*/    0,			/*tp_iter*/    0,			/*tp_iternext*/    SHA_methods,	/* tp_methods */    SHA_members,	/* tp_members */    SHA_getseters,      /* tp_getset */};  /* The single module-level function: new() */ PyDoc_STRVAR(SHA512_new__doc__,"Return a new SHA-512 hash object; optionally initialized with a string."); static PyObject *SHA512_new(PyObject *self, PyObject *args, PyObject *kwdict){    static char *kwlist[] = {"string", NULL};    SHAobject *new;    unsigned char *cp = NULL;    int len;     if (!PyArg_ParseTupleAndKeywords(args, kwdict, "|s#:new", kwlist,                                     &cp, &len)) {        return NULL;    }     if ((new = newSHA512object()) == NULL)        return NULL;     sha512_init(new);     if (PyErr_Occurred()) {        Py_DECREF(new);        return NULL;    }    if (cp)        sha512_update(new, cp, len);     return (PyObject *)new;} PyDoc_STRVAR(SHA384_new__doc__,"Return a new SHA-384 hash object; optionally initialized with a string."); static PyObject *SHA384_new(PyObject *self, PyObject *args, PyObject *kwdict){    static char *kwlist[] = {"string", NULL};    SHAobject *new;    unsigned char *cp = NULL;    int len;     if (!PyArg_ParseTupleAndKeywords(args, kwdict, "|s#:new", kwlist,                                     &cp, &len)) {        return NULL;    }     if ((new = newSHA384object()) == NULL)        return NULL;     sha384_init(new);     if (PyErr_Occurred()) {        Py_DECREF(new);        return NULL;    }    if (cp)        sha512_update(new, cp, len);     return (PyObject *)new;}  /* List of functions exported by this module */ static struct PyMethodDef SHA_functions[] = {    {"sha512", (PyCFunction)SHA512_new, METH_VARARGS|METH_KEYWORDS, SHA512_new__doc__},    {"sha384", (PyCFunction)SHA384_new, METH_VARARGS|METH_KEYWORDS, SHA384_new__doc__},    {NULL,	NULL}		 /* Sentinel */};  /* Initialize this module. */ #define insint(n,v) { PyModule_AddIntConstant(m,n,v); } PyMODINIT_FUNCinit_sha512(void){    PyObject *m;     SHA384type.ob_type = &PyType_Type;    if (PyType_Ready(&SHA384type) < 0)        return;    SHA512type.ob_type = &PyType_Type;    if (PyType_Ready(&SHA512type) < 0)        return;    m = Py_InitModule("_sha512", SHA_functions);    if (m == NULL)	return;} #endif

Lines 501–769 of 769. Previous lines