cvs: php4 /ext/openssl openssl.c
| From: | Derick Rethans | Date: | Sun, 30 Mar 2003 22:25:22 +0000 |
| Subject: | cvs: php4 /ext/openssl openssl.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-19864@lists.php.net to get a copy of this message | ||
derick Sun Mar 30 17:25:22 2003 EDT
Modified files:
/php4/ext/openssl openssl.c
Log:
- Added optional parameter to openssl_sign() to specify the hashing
algorithm to use. (Patch by Scott <scott@planetscott.ca>)
@- Added optional parameter to openssl_sign() to specify the hashing
@ algorithm to use. (scott@planetscott.ca, Derick)
Index: php4/ext/openssl/openssl.c
diff -u php4/ext/openssl/openssl.c:1.70 php4/ext/openssl/openssl.c:1.71
--- php4/ext/openssl/openssl.c:1.70 Sat Mar 15 08:29:34 2003
+++ php4/ext/openssl/openssl.c Sun Mar 30 17:25:22 2003
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: openssl.c,v 1.70 2003/03/15 13:29:34 wez Exp $ */
+/* $Id: openssl.c,v 1.71 2003/03/30 22:25:22 derick Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -45,6 +45,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
@@ -565,6 +569,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);
@@ -2795,8 +2805,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);
@@ -2808,7 +2820,22 @@
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);