tony2001                Fri Sep  8 20:09:08 2006 UTC

  Modified files:              
    /php-src/ext/openssl        openssl.c 
  Log:
  implement feature request #38731 (openssl_pkey_new does not support DSA key 
generation)
  patch by marci at balabit dot hu
  
  
http://cvs.php.net/viewvc.cgi/php-src/ext/openssl/openssl.c?r1=1.121&r2=1.122&diff_format=u
Index: php-src/ext/openssl/openssl.c
diff -u php-src/ext/openssl/openssl.c:1.121 php-src/ext/openssl/openssl.c:1.122
--- php-src/ext/openssl/openssl.c:1.121 Thu Sep  7 14:16:53 2006
+++ php-src/ext/openssl/openssl.c       Fri Sep  8 20:09:07 2006
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: openssl.c,v 1.121 2006/09/07 14:16:53 iliaa Exp $ */
+/* $Id: openssl.c,v 1.122 2006/09/08 20:09:07 tony2001 Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -1963,9 +1963,27 @@
        if ((req->priv_key = EVP_PKEY_new()) != NULL) {
                switch(req->priv_key_type) {
                        case OPENSSL_KEYTYPE_RSA:
-                               if (EVP_PKEY_assign_RSA(req->priv_key, 
RSA_generate_key(req->priv_key_bits, 0x10001, NULL, NULL)))
+                               if (EVP_PKEY_assign_RSA(req->priv_key, 
RSA_generate_key(req->priv_key_bits, 0x10001, NULL, NULL))) {
                                        return_val = req->priv_key;
+                               }
+                               break;
+#ifndef NO_DSA
+                       case OPENSSL_KEYTYPE_DSA:
+                               {
+                                       DSA *dsapar = 
DSA_generate_parameters(req->priv_key_bits, NULL, 0, NULL, NULL, NULL, NULL);
+                                       if (dsapar) {
+                                               DSA_set_method(dsapar, 
DSA_get_default_method());
+                                               if (DSA_generate_key(dsapar)) {
+                                                       if 
(EVP_PKEY_assign_DSA(req->priv_key, dsapar)) {
+                                                               return_val = 
req->priv_key;
+                                                       }
+                                               } else {
+                                                       DSA_free(dsapar);
+                                               }
+                                       }
+                               }
                                break;
+#endif
                        default:
                                php_error_docref(NULL TSRMLS_CC, E_WARNING, 
"Unsupported private key type");
                }

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to