diff options
-rw-r--r-- | pow/POW-0.7/POW.c | 137 | ||||
-rw-r--r-- | pow/POW-0.7/setup.py | 6 |
2 files changed, 100 insertions, 43 deletions
diff --git a/pow/POW-0.7/POW.c b/pow/POW-0.7/POW.c index f1bdf4f4..facaf1ef 100644 --- a/pow/POW-0.7/POW.c +++ b/pow/POW-0.7/POW.c @@ -36,6 +36,7 @@ #include <Python.h> +#include <openssl/opensslconf.h> #include <openssl/crypto.h> #include <openssl/rand.h> #include <openssl/asn1.h> @@ -49,10 +50,11 @@ #include <openssl/md2.h> #include <openssl/sha.h> #include <openssl/hmac.h> +#include <openssl/ripemd.h> #include <time.h> -// semetric ciphers +// Symmetric ciphers #define DES_ECB 1 #define DES_EDE 2 #define DES_EDE3 3 @@ -116,29 +118,31 @@ #define X509_CERTIFICATE 7 #define X_X509_CRL 8 //X509_CRL already used by OpenSSL library -// asymmetric ciphers +// Asymmetric ciphers #define RSA_CIPHER 1 #define DSA_CIPHER 2 #define DH_CIPHER 3 -#define NO_DSA -#define NO_DH +//#define NO_DSA +//#define NO_DH -// digests +// Digests #define MD2_DIGEST 1 #define MD5_DIGEST 2 #define SHA_DIGEST 3 #define SHA1_DIGEST 4 #define RIPEMD160_DIGEST 5 +#define SHA256_DIGEST 6 +#define SHA512_DIGEST 7 -//object format +// Object format #define SHORTNAME_FORMAT 1 #define LONGNAME_FORMAT 2 -//output format +// Output format #define PEM_FORMAT 1 #define DER_FORMAT 2 -//object check functions +// Object check functions #define X_X509_Check(op) ((op)->ob_type == &x509type) #define X_X509_store_Check(op) ((op)->ob_type == &x509_storetype) #define X_X509_crl_Check(op) ((op)->ob_type == &x509_crltype) @@ -258,9 +262,9 @@ typedef struct { SSL *ssl; SSL_CTX *ctx; } ssl_object; -/*========== C stucts ==========*/ +/*========== C structs ==========*/ -/*========== helper funcitons ==========*/ +/*========== helper functions ==========*/ /* Simple function to install a constant in the module name space. @@ -298,12 +302,12 @@ error: Generate an encrypion envelope. Saves a lot of space having thie case statement in one place. */ -static EVP_CIPHER * +static const EVP_CIPHER * evp_cipher_factory(int cipher_type) { switch(cipher_type) { -#ifndef NO_DES +#ifndef OPENSSL_NO_DES case DES_ECB: return EVP_des_ecb(); case DES_EDE: return EVP_des_ede(); case DES_EDE3: return EVP_des_ede3(); @@ -318,36 +322,36 @@ evp_cipher_factory(int cipher_type) case DES_EDE3_CBC: return EVP_des_ede3_cbc(); case DESX_CBC: return EVP_desx_cbc(); #endif -#ifndef NO_RC4 +#ifndef OPENSSL_NO_RC4 case RC4: return EVP_rc4(); case RC4_40: return EVP_rc4_40(); #endif -#ifndef NO_IDEA +#ifndef OPENSSL_NO_IDEA case IDEA_ECB: return EVP_idea_ecb(); case IDEA_CFB: return EVP_idea_cfb(); case IDEA_OFB: return EVP_idea_ofb(); case IDEA_CBC: return EVP_idea_cbc(); #endif -#ifndef NO_RC2 +#ifndef OPENSSL_NO_RC2 case RC2_ECB: return EVP_rc2_ecb(); case RC2_CBC: return EVP_rc2_cbc(); case RC2_40_CBC: return EVP_rc2_40_cbc(); case RC2_CFB: return EVP_rc2_cfb(); case RC2_OFB: return EVP_rc2_ofb(); #endif -#ifndef NO_BF +#ifndef OPENSSL_NO_BF case BF_ECB: return EVP_bf_ecb(); case BF_CBC: return EVP_bf_cbc(); case BF_CFB: return EVP_bf_cfb(); case BF_OFB: return EVP_bf_ofb(); #endif -#ifndef NO_CAST5 +#ifndef OPENSSL_NO_CAST5 case CAST5_ECB: return EVP_cast5_ecb(); case CAST5_CBC: return EVP_cast5_cbc(); case CAST5_CFB: return EVP_cast5_cfb(); case CAST5_OFB: return EVP_cast5_ofb(); #endif -#ifndef NO_RC5_32_12_16 +#ifndef OPENSSL_NO_RC5 case RC5_32_12_16_CBC: return EVP_rc5_32_12_16_cbc(); case RC5_32_12_16_CFB: return EVP_rc5_32_12_16_cfb(); case RC5_32_12_16_ECB: return EVP_rc5_32_12_16_ecb(); @@ -587,7 +591,7 @@ X509_object_der_read(char *src, int len) self->x509 = X509_new(); - if( !(d2i_X509( &self->x509, &ptr, len ) ) ) + if( !(d2i_X509( &self->x509, (const unsigned char **) &ptr, len ) ) ) { PyErr_SetString( SSLErrorObject, "could not load PEM encoded certificate" ); goto error; } return self; @@ -772,6 +776,8 @@ static char X509_object_sign__doc__[] = " <member><constant>SHA_DIGEST</constant></member>\n" " <member><constant>SHA1_DIGEST</constant></member>\n" " <member><constant>RIPEMD160_DIGEST</constant></member>\n" +" <member><constant>SHA256_DIGEST</constant></member>\n" +" <member><constant>SHA512_DIGEST</constant></member>\n" " </simplelist>\n" " </body>\n" "</method>\n" @@ -829,6 +835,18 @@ X509_object_sign(x509_object *self, PyObject *args) { PyErr_SetString( SSLErrorObject, "could not sign certificate" ); goto error; } break; } + case SHA256_DIGEST: + { + if (!X509_sign(self->x509, pkey, EVP_sha256() ) ) + { PyErr_SetString( SSLErrorObject, "could not sign certificate" ); goto error; } + break; + } + case SHA512_DIGEST: + { + if (!X509_sign(self->x509, pkey, EVP_sha512() ) ) + { PyErr_SetString( SSLErrorObject, "could not sign certificate" ); goto error; } + break; + } } return Py_BuildValue(""); @@ -2057,7 +2075,7 @@ x509_crl_object_der_read(char *src, int len) self->crl = X509_CRL_new(); - if( !(d2i_X509_CRL( &self->crl, &ptr, len ) ) ) + if( !(d2i_X509_CRL( &self->crl, (const unsigned char **) &ptr, len ) ) ) { PyErr_SetString( SSLErrorObject, "could not load PEM encoded CRL" ); goto error; } return self; @@ -2434,8 +2452,9 @@ static char x509_crl_object_set_revoked__doc__[] = static X509_REVOKED * X509_REVOKED_dup(X509_REVOKED *rev) { - return((X509_REVOKED *)ASN1_dup((int (*)())i2d_X509_REVOKED, - (char *(*)())d2i_X509_REVOKED,(char *)rev)); + return((X509_REVOKED *)ASN1_dup((i2d_of_void *) i2d_X509_REVOKED, + (d2i_of_void *) d2i_X509_REVOKED, + (char *) rev)); } static PyObject * @@ -2820,6 +2839,8 @@ static char x509_crl_object_sign__doc__[] = " <member><constant>SHA_DIGEST</constant></member>\n" " <member><constant>SHA1_DIGEST</constant></member>\n" " <member><constant>RIPEMD160_DIGEST</constant></member>\n" +" <member><constant>SHA256_DIGEST</constant></member>\n" +" <member><constant>SHA512_DIGEST</constant></member>\n" " </simplelist>\n" " </body>\n" "</method>\n" @@ -2876,6 +2897,18 @@ x509_crl_object_sign(x509_crl_object *self, PyObject *args) { PyErr_SetString( SSLErrorObject, "could not sign certificate" ); goto error; } break; } + case SHA256_DIGEST: + { + if (!X509_CRL_sign(self->crl, pkey, EVP_sha256() ) ) + { PyErr_SetString( SSLErrorObject, "could not sign certificate" ); goto error; } + break; + } + case SHA512_DIGEST: + { + if (!X509_CRL_sign(self->crl, pkey, EVP_sha512() ) ) + { PyErr_SetString( SSLErrorObject, "could not sign certificate" ); goto error; } + break; + } } return Py_BuildValue(""); @@ -4586,7 +4619,7 @@ asymmetric_object_der_read(int key_type, char *src, int len) { case RSA_PUBLIC_KEY: { - if( !(self->cipher = d2i_RSAPublicKey( NULL, &ptr, len ) ) ) + if( !(self->cipher = d2i_RSAPublicKey( NULL, (const unsigned char **) &ptr, len ) ) ) { PyErr_SetString( SSLErrorObject, "could not load public key" ); goto error; } self->key_type = RSA_PUBLIC_KEY; @@ -4595,7 +4628,7 @@ asymmetric_object_der_read(int key_type, char *src, int len) } case RSA_PRIVATE_KEY: { - if( !(self->cipher = d2i_RSAPrivateKey( NULL, &ptr, len ) ) ) + if( !(self->cipher = d2i_RSAPrivateKey( NULL, (const unsigned char **) &ptr, len ) ) ) { PyErr_SetString( SSLErrorObject, "could not load private key" ); goto error; } self->key_type = RSA_PRIVATE_KEY; @@ -5036,6 +5069,8 @@ static char asymmetric_object_sign__doc__[] = " <member><constant>SHA_DIGEST</constant></member>\n" " <member><constant>SHA1_DIGEST</constant></member>\n" " <member><constant>RIPEMD160_DIGEST</constant></member>\n" +" <member><constant>SHA256_DIGEST</constant></member>\n" +" <member><constant>SHA512_DIGEST</constant></member>\n" " </simplelist>\n" " <para>\n" " If the procedure was successful, a string containing the signed\n" @@ -5073,6 +5108,10 @@ asymmetric_object_sign(asymmetric_object *self, PyObject *args) { digest_nid = NID_sha1; digest_len = SHA_DIGEST_LENGTH; break; } case RIPEMD160_DIGEST: { digest_nid = NID_ripemd160; digest_len = RIPEMD160_DIGEST_LENGTH; break; } + case SHA256_DIGEST: + { digest_nid = NID_sha256; digest_len = SHA256_DIGEST_LENGTH; break; } + case SHA512_DIGEST: + { digest_nid = NID_sha512; digest_len = SHA512_DIGEST_LENGTH; break; } default: { PyErr_SetString( SSLErrorObject, "unsupported digest" ); goto error; } } @@ -5146,6 +5185,8 @@ static char asymmetric_object_verify__doc__[] = " <member><constant>SHA_DIGEST</constant></member>\n" " <member><constant>SHA1_DIGEST</constant></member>\n" " <member><constant>RIPEMD160_DIGEST</constant></member>\n" +" <member><constant>SHA256_DIGEST</constant></member>\n" +" <member><constant>SHA512_DIGEST</constant></member>\n" " </simplelist>\n" " <para>\n" " If the procedure was successful, 1 is returned, otherwise 0 is\n" @@ -5175,6 +5216,10 @@ asymmetric_object_verify(asymmetric_object *self, PyObject *args) { digest_len = SHA_DIGEST_LENGTH; digest_nid = NID_sha1; break; } case RIPEMD160_DIGEST: { digest_len = RIPEMD160_DIGEST_LENGTH; digest_nid = NID_ripemd160; break; } + case SHA256_DIGEST: + { digest_len = SHA_DIGEST_LENGTH; digest_nid = NID_sha256; break; } + case SHA512_DIGEST: + { digest_len = SHA_DIGEST_LENGTH; digest_nid = NID_sha512; break; } default: { PyErr_SetString( SSLErrorObject, "unsupported digest" ); goto error; } } @@ -5309,7 +5354,7 @@ static PyObject * symmetric_object_encrypt_init(symmetric_object *self, PyObject *args) { char *key=NULL, *iv=NULL, nulliv [] = ""; - EVP_CIPHER *cipher=NULL; + const EVP_CIPHER *cipher=NULL; if (!PyArg_ParseTuple(args, "s|s", &key, &iv)) goto error; @@ -5353,7 +5398,7 @@ static PyObject * symmetric_object_decrypt_init(symmetric_object *self, PyObject *args) { char *key=NULL, *iv=NULL, nulliv [] = ""; - EVP_CIPHER *cipher=NULL; + const EVP_CIPHER *cipher=NULL; if (!PyArg_ParseTuple(args, "s|s", &key, &iv)) goto error; @@ -5577,6 +5622,10 @@ digest_object_new(int digest_type) { self->digest_type = SHA1_DIGEST; EVP_DigestInit( &self->digest_ctx, EVP_sha1() ); break; } case RIPEMD160_DIGEST: { self->digest_type = RIPEMD160_DIGEST; EVP_DigestInit( &self->digest_ctx, EVP_ripemd160() ); break; } + case SHA256_DIGEST: + { self->digest_type = SHA256_DIGEST; EVP_DigestInit( &self->digest_ctx, EVP_sha256() ); break; } + case SHA512_DIGEST: + { self->digest_type = SHA512_DIGEST; EVP_DigestInit( &self->digest_ctx, EVP_sha512() ); break; } default: { PyErr_SetString( SSLErrorObject, "unsupported digest" ); goto error; } } @@ -5777,7 +5826,7 @@ static hmac_object * hmac_object_new(int digest_type, char *key, int key_len) { hmac_object *self=NULL; - EVP_MD *md=NULL; + const EVP_MD *md=NULL; self = PyObject_New( hmac_object, &hmactype ); if (self == NULL) @@ -5795,6 +5844,10 @@ hmac_object_new(int digest_type, char *key, int key_len) { md = EVP_sha1(); break; } case RIPEMD160_DIGEST: { md = EVP_ripemd160(); break; } + case SHA256_DIGEST: + { md = EVP_sha256(); break; } + case SHA512_DIGEST: + { md = EVP_sha512(); break; } default: { PyErr_SetString( SSLErrorObject, "unsupported digest" ); goto error; } } @@ -6142,6 +6195,8 @@ static char pow_module_new_digest__doc__[] = " <member><constant>SHA_DIGEST</constant></member>\n" " <member><constant>SHA1_DIGEST</constant></member>\n" " <member><constant>RIPEMD160_DIGEST</constant></member>\n" +" <member><constant>SHA256_DIGEST</constant></member>\n" +" <member><constant>SHA512_DIGEST</constant></member>\n" " </simplelist>\n" " </body>\n" "</constructor>\n" @@ -6181,6 +6236,8 @@ static char pow_module_new_hmac__doc__[] = " <member><constant>SHA_DIGEST</constant></member>\n" " <member><constant>SHA1_DIGEST</constant></member>\n" " <member><constant>RIPEMD160_DIGEST</constant></member>\n" +" <member><constant>SHA256_DIGEST</constant></member>\n" +" <member><constant>SHA512_DIGEST</constant></member>\n" " </simplelist>\n" " </body>\n" "</constructor>\n" @@ -7001,15 +7058,15 @@ init_POW(void) install_int_const( d, "SHORTNAME_FORMAT", SHORTNAME_FORMAT ); // PEM encoded types -#ifndef NO_RSA +#ifndef OPENSSL_NO_RSA install_int_const( d, "RSA_PUBLIC_KEY", RSA_PUBLIC_KEY ); install_int_const( d, "RSA_PRIVATE_KEY", RSA_PRIVATE_KEY ); #endif -#ifndef NO_DSA +#ifndef OPENSSL_NO_DSA install_int_const( d, "DSA_PUBLIC_KEY", DSA_PUBLIC_KEY ); install_int_const( d, "DSA_PRIVATE_KEY", DSA_PRIVATE_KEY ); #endif -#ifndef NO_DH +#ifndef OPENSSL_NO_DH install_int_const( d, "DH_PUBLIC_KEY", DH_PUBLIC_KEY ); install_int_const( d, "DH_PRIVATE_KEY", DH_PRIVATE_KEY ); #endif @@ -7017,18 +7074,18 @@ init_POW(void) install_int_const( d, "X509_CRL", X_X509_CRL ); // asymmetric ciphers -#ifndef NO_RSA +#ifndef OPENSSL_NO_RSA install_int_const( d, "RSA_CIPHER", RSA_CIPHER ); #endif -#ifndef NO_DSA +#ifndef OPENSSL_NO_DSA install_int_const( d, "DSA_CIPHER", DSA_CIPHER ); #endif -#ifndef NO_DH +#ifndef OPENSSL_NO_DH install_int_const( d, "DH_CIPHER", DH_CIPHER ); #endif // symmetric ciphers -#ifndef NO_DES +#ifndef OPENSSL_NO_DES install_int_const( d, "DES_ECB", DES_ECB ); install_int_const( d, "DES_EDE", DES_EDE ); install_int_const( d, "DES_EDE3", DES_EDE3 ); @@ -7043,24 +7100,24 @@ init_POW(void) install_int_const( d, "DES_EDE3_CBC", DES_EDE3_CBC ); install_int_const( d, "DESX_CBC", DESX_CBC ); #endif -#ifndef NO_RC4 +#ifndef OPENSSL_NO_RC4 install_int_const( d, "RC4", RC4 ); install_int_const( d, "RC4_40", RC4_40 ); #endif -#ifndef NO_IDEA +#ifndef OPENSSL_NO_IDEA install_int_const( d, "IDEA_ECB", IDEA_ECB ); install_int_const( d, "IDEA_CFB", IDEA_CFB ); install_int_const( d, "IDEA_OFB", IDEA_OFB ); install_int_const( d, "IDEA_CBC", IDEA_CBC ); #endif -#ifndef NO_RC2 +#ifndef OPENSSL_NO_RC2 install_int_const( d, "RC2_ECB", RC2_ECB ); install_int_const( d, "RC2_CBC", RC2_CBC ); install_int_const( d, "RC2_40_CBC", RC2_40_CBC ); install_int_const( d, "RC2_CFB", RC2_CFB ); install_int_const( d, "RC2_OFB", RC2_OFB ); #endif -#ifndef NO_BF +#ifndef OPENSSL_NO_BF install_int_const( d, "BF_ECB", BF_ECB ); install_int_const( d, "BF_CBC", BF_CBC ); install_int_const( d, "BF_CFB", BF_CFB ); @@ -7070,7 +7127,7 @@ init_POW(void) install_int_const( d, "CAST5_CBC", CAST5_CBC ); install_int_const( d, "CAST5_CFB", CAST5_CFB ); install_int_const( d, "CAST5_OFB", CAST5_OFB ); -#ifndef NO_RC5_32_12_16 +#ifndef OPENSSL_NO_RC5 install_int_const( d, "RC5_32_12_16_CBC", RC5_32_12_16_CBC ); install_int_const( d, "RC5_32_12_16_CFB", RC5_32_12_16_CFB ); install_int_const( d, "RC5_32_12_16_ECB", RC5_32_12_16_ECB ); @@ -7083,6 +7140,8 @@ init_POW(void) install_int_const( d, "SHA_DIGEST", SHA_DIGEST ); install_int_const( d, "SHA1_DIGEST", SHA1_DIGEST ); install_int_const( d, "RIPEMD160_DIGEST", RIPEMD160_DIGEST ); + install_int_const( d, "SHA256_DIGEST", SHA256_DIGEST ); + install_int_const( d, "SHA512_DIGEST", SHA512_DIGEST ); // general name install_int_const( d, "GEN_OTHERNAME", GEN_OTHERNAME ); diff --git a/pow/POW-0.7/setup.py b/pow/POW-0.7/setup.py index 04f77ceb..d92e8cd4 100644 --- a/pow/POW-0.7/setup.py +++ b/pow/POW-0.7/setup.py @@ -14,9 +14,8 @@ print 'writing oid module' oidinfo.dumpoids('lib/_oids.py') library_dirs = [ "../../openssl/openssl-0.9.8e" ] -include_dirs = [ library_dirs[0] + "include" ] +include_dirs = [ library_dirs[0] + "/include" ] libraries = [ "ssl", "crypto" ] -define_macros= [ ("NO_RC5_32_12_16", 1) ] setup(name='POW', version='0.7', @@ -32,8 +31,7 @@ setup(name='POW', ['POW.c'], libraries=libraries, library_dirs=library_dirs, - include_dirs=include_dirs, - define_macros=define_macros) + include_dirs=include_dirs) ]) os.remove('lib/_objects.py') |