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

Reply via email to