libhashkit/aes: keep API compatible
[awesomized/libmemcached] / src / libhashkit / encrypt.cc
index c5a49a10d02a8411409b35dbd66b18124bebcbf7..effa299fbf7c0f396b2d840490a519ffcd74b289 100644 (file)
@@ -1,6 +1,6 @@
 /*
     +--------------------------------------------------------------------+
-    | libmemcached - C/C++ Client Library for memcached                  |
+    | libmemcached-awesome - C/C++ Client Library for memcached          |
     +--------------------------------------------------------------------+
     | Redistribution and use in source and binary forms, with or without |
     | modification, are permitted under the terms of the BSD license.    |
 
 #include "libhashkit/common.h"
 
+#ifdef HAVE_OPENSSL_CRYPTO
+#  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 HAVE_OPENSSL_CRYPTO
+  return aes_encrypt((encryption_context_t *) kit->_key,
+                     (const unsigned char *) source, source_length);
+#else
+  return aes_encrypt((aes_key_t *) kit->_key, 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 HAVE_OPENSSL_CRYPTO
+  return aes_decrypt((encryption_context_t *) kit->_key,
+                     (const unsigned char *) source, source_length);
+#else
+  return aes_decrypt((aes_key_t *)kit->_key, source, source_length);
+#endif
 }
 
+#ifdef HAVE_OPENSSL_CRYPTO
+bool hashkit_key(hashkit_st *kit, const char *key, const size_t key_length) {
+  kit->_key = (encryption_context_t *) malloc(sizeof(encryption_context_t));
+  ((encryption_context_t *) kit->_key)->encryption_context = EVP_CIPHER_CTX_new();
+  ((encryption_context_t *) kit->_key)->decryption_context = EVP_CIPHER_CTX_new();
+  if (((encryption_context_t *) kit->_key)->encryption_context == NULL
+      || ((encryption_context_t *) kit->_key)->decryption_context == NULL)
+  {
+    return false;
+  }
+  return aes_initialize((const unsigned char *) key, key_length,
+                        (encryption_context_t *) kit->_key);
+}
+#else
 bool hashkit_key(hashkit_st *kit, const char *key, const size_t key_length) {
   if (kit->_key) {
     free(kit->_key);
@@ -32,3 +61,4 @@ bool hashkit_key(hashkit_st *kit, const char *key, const size_t key_length) {
 
   return bool(kit->_key);
 }
+#endif