Add possibility to use libcrypto for encryption
[awesomized/libmemcached] / src / libhashkit / encrypt.cc
index 6446c0188a390fc5ec110a904688780a52cb510d..dbc051ae2d5e81c9f8b3f4d41763c274bf9adba2 100644 (file)
 
 #include "libhashkit/common.h"
 
+#ifdef WITH_OPENSSL
+#  include <openssl/evp.h>
+#endif
+
 hashkit_string_st *hashkit_encrypt(hashkit_st *kit, const char *source, size_t source_length) {
-  return aes_encrypt(static_cast<aes_key_t *>(kit->_key), source, source_length);
+#ifdef WITH_OPENSSL
+  return aes_encrypt((encryption_context_t *) kit->_cryptographic_context,
+                     (const unsigned char *) source, source_length);
+#else
+  return aes_encrypt((aes_key_t *) kit->_cryptographic_context, source,
+                     source_length);
+#endif
 }
 
 hashkit_string_st *hashkit_decrypt(hashkit_st *kit, const char *source, size_t source_length) {
-  return aes_decrypt(static_cast<aes_key_t *>(kit->_key), source, source_length);
+#ifdef WITH_OPENSSL
+  return aes_decrypt((encryption_context_t *) kit->_cryptographic_context,
+                     (const unsigned char *) source, source_length);
+#else
+  return aes_decrypt((aes_key_t *)kit->_cryptographic_context, source, source_length);
+#endif
 }
 
+#ifdef WITH_OPENSSL
+bool hashkit_key(hashkit_st *kit, const char *key, const size_t key_length) {
+  kit->_cryptographic_context = (encryption_context_t *) malloc(sizeof(encryption_context_t));
+  ((encryption_context_t *) kit->_cryptographic_context)->encryption_context = EVP_CIPHER_CTX_new();
+  ((encryption_context_t *) kit->_cryptographic_context)->decryption_context = EVP_CIPHER_CTX_new();
+  if (((encryption_context_t *) kit->_cryptographic_context)->encryption_context == NULL
+      || ((encryption_context_t *) kit->_cryptographic_context)->decryption_context == NULL)
+  {
+    return false;
+  }
+  return aes_initialize((const unsigned char *) key, key_length,
+                        (encryption_context_t *) kit->_cryptographic_context);
+}
+#else
 bool hashkit_key(hashkit_st *kit, const char *key, const size_t key_length) {
-  if (kit->_key) {
-    free(kit->_key);
+  if (kit->_cryptographic_context) {
+    free(kit->_cryptographic_context);
   }
 
-  kit->_key = aes_create_key(key, key_length);
+  kit->_cryptographic_context = aes_create_key(key, key_length);
 
-  return bool(kit->_key);
+  return bool(kit->_cryptographic_context);
 }
+#endif
\ No newline at end of file