Here's the corrected patch. Scott.
On Sun, 30 Mar 2003, Derick Rethans wrote: > On Sun, 30 Mar 2003, scott wrote: > > > I've created a patch for the modification I've made to the OpenSSL > > extension. > > > > The patch modifies the openssl_sign() function to accept a fourth > > parameter, which specifies the hashing algorithm to use. > > Looks fine, but can you please post the whole patch (including headers) > and in 'Unified diff format' (add -u to 'cvs diff')? > > regards, > Derick > > -- > "my other box is your windows PC" > ------------------------------------------------------------------------- > Derick Rethans http://derickrethans.nl/ > PHP Magazine - PHP Magazine for Professionals http://php-mag.net/ > ------------------------------------------------------------------------- >
--- openssl.c 2003-03-30 16:20:19.000000000 -0500 +++ openssl.c.modified 2003-03-30 16:14:50.000000000 -0500 @@ -44,6 +44,10 @@ #define DEFAULT_KEY_LENGTH 512 #define MIN_KEY_LENGTH 384 +#define OPENSSL_ALGO_SHA1 1 +#define OPENSSL_ALGO_MD5 2 +#define OPENSSL_ALGO_MD4 3 +#define OPENSSL_ALGO_MD2 4 #define DEBUG_SMIME 0 @@ -553,6 +557,12 @@ REGISTER_LONG_CONSTANT("X509_PURPOSE_ANY", X509_PURPOSE_ANY, CONST_CS|CONST_PERSISTENT); #endif + /* signature algotithm constants */ + REGISTER_LONG_CONSTANT("OPENSSL_ALGO_SHA1", OPENSSL_ALGO_SHA1, CONST_CS|CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("OPENSSL_ALGO_MD5", OPENSSL_ALGO_MD5, CONST_CS|CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("OPENSSL_ALGO_MD4", OPENSSL_ALGO_MD4, CONST_CS|CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("OPENSSL_ALGO_MD2", OPENSSL_ALGO_MD2, CONST_CS|CONST_PERSISTENT); + /* flags for S/MIME */ REGISTER_LONG_CONSTANT("PKCS7_DETACHED", PKCS7_DETACHED, CONST_CS|CONST_PERSISTENT); REGISTER_LONG_CONSTANT("PKCS7_TEXT", PKCS7_TEXT, CONST_CS|CONST_PERSISTENT); @@ -2713,8 +2723,10 @@ long keyresource = -1; char * data; int data_len; EVP_MD_CTX md_ctx; + long signature_algo = OPENSSL_ALGO_SHA1; + EVP_MD *mdtype; - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "szz", &data, &data_len, &signature, &key) == FAILURE) + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "szz|l", &data, &data_len, &signature, &key, &signature_algo) == FAILURE) return; pkey = php_openssl_evp_from_zval(&key, 0, "", 0, &keyresource TSRMLS_CC); @@ -2726,7 +2738,23 @@ siglen = EVP_PKEY_size(pkey); sigbuf = emalloc(siglen + 1); - EVP_SignInit(&md_ctx, EVP_sha1()); + switch(signature_algo) + { + case OPENSSL_ALGO_SHA1: + mdtype = EVP_sha1(); + break; + case OPENSSL_ALGO_MD5: + mdtype = EVP_md5(); + break; + case OPENSSL_ALGO_MD4: + mdtype = EVP_md4(); + break; + case OPENSSL_ALGO_MD2: + mdtype = EVP_md2(); + break; + } + + EVP_SignInit(&md_ctx, mdtype); EVP_SignUpdate(&md_ctx, data, data_len); if (EVP_SignFinal (&md_ctx, sigbuf, &siglen, pkey)) { zval_dtor(signature);
-- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php