Hi!

I've added blowfish cfb64 wrapper to the openssl-ext, 
patch is attached.

Feel free to comment on the code, it's my first time
coding in a php ext so I might have done some mistakes.

Would be great if it got included in the std. php so I don't need
to patch the release myself anymore :)

-- 
Thomas
--- openssl.c.orig      Tue Jul 30 15:46:53 2002
+++ openssl.c   Tue Jul 30 23:58:28 2002
@@ -41,6 +41,7 @@
 #include <openssl/conf.h>
 #include <openssl/e_os.h>
 #include <openssl/rand.h>
+#include <openssl/blowfish.h>
 
 #define DEFAULT_KEY_LENGTH     512
 #define MIN_KEY_LENGTH         384
@@ -107,6 +108,10 @@
        PHP_FE(openssl_public_encrypt,     arg2_force_ref)
        PHP_FE(openssl_public_decrypt,     arg2_force_ref)
 
+/* blowfish funcs */
+       PHP_FE(openssl_bf_cfb64_encrypt, NULL)
+       PHP_FE(openssl_bf_cfb64_decrypt, NULL)
+
        PHP_FE(openssl_error_string, NULL)
        {NULL, NULL, NULL}
 };
@@ -605,6 +610,79 @@
        return SUCCESS;
 }
 /* }}} */
+
+
+
+/* {{{ Blowfish functions */
+
+/* {{{ proto mixed openssl_bf_cfb64_encrypt(string plaindata, string key)
+   Encrypts with blowfish, cfb64, added by Thomas Langås, [EMAIL PROTECTED] */
+PHP_FUNCTION(openssl_bf_cfb64_encrypt)
+{
+       char *plaindata;
+       int plaindata_len;
+       char *key;
+       int key_len;
+       unsigned char *cryptdata;
+
+       unsigned char ivec[8];  
+       BF_KEY bfkey;
+       int num = 0;
+
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &plaindata, 
+&plaindata_len, &key, &key_len) == FAILURE)
+               RETURN_FALSE;
+
+       /* Compile the key, save in bfkey */
+       BF_set_key(&bfkey, key_len, key);
+
+       /* Allocate enough for encrypted data, and reset it */
+       cryptdata = (unsigned char *) malloc(plaindata_len * 2);
+       memset(cryptdata, 0, plaindata_len*2);
+
+       /* Encrypt data, save in cryptdata */
+       memset(ivec, 0, 8);
+       BF_cfb64_encrypt(plaindata, cryptdata, plaindata_len, &bfkey, ivec, &num, 
+BF_ENCRYPT);
+
+       RETURN_STRING(cryptdata, 1);
+}
+/* }}} */
+
+/* {{{ proto mixed openssl_bf_cfb64_decrypt(string cryptdata, string key)
+   Decrypts with blowfish, cfb64, added by Thomas Langås, [EMAIL PROTECTED] */
+PHP_FUNCTION(openssl_bf_cfb64_decrypt)
+{
+       char *cryptdata;
+       int cryptdata_len;
+       char *key;
+       int key_len;
+       unsigned char *plaindata;
+
+       unsigned char ivec[8];
+       BF_KEY bfkey;
+       int num = 0;
+
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &cryptdata, 
+&cryptdata_len, &key, &key_len) == FAILURE)
+               RETURN_FALSE;
+
+       /* Compile the key, save in bfkey */
+       BF_set_key(&bfkey, key_len, key);
+
+       /* Allocate enough for decrypted data, and reset it */
+       plaindata = (unsigned char *) malloc(cryptdata_len+2);
+       memset(plaindata, 0, cryptdata_len+2);
+
+       /* Decrypt data, save in plaindata */
+       memset(ivec, 0, 8);
+       BF_cfb64_encrypt(cryptdata, plaindata, cryptdata_len, &bfkey, ivec, &num, 
+BF_DECRYPT);
+
+       RETURN_STRING(plaindata, 1);
+}
+/* }}} */
+
+/* }}} */
+
+
+
 
 /* {{{ x509 cert functions */
 
--- php_openssl.h.orig  Tue Dec 11 16:30:02 2001
+++ php_openssl.h       Tue Jul 30 19:36:59 2002
@@ -65,6 +65,9 @@
 PHP_FUNCTION(openssl_csr_export_to_file);
 PHP_FUNCTION(openssl_csr_sign);
 
+PHP_FUNCTION(openssl_bf_cfb64_encrypt);
+PHP_FUNCTION(openssl_bf_cfb64_decrypt);
+
 #else
 
 #define phpext_openssl_ptr NULL

-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to