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