/*
+--------------------------------------------------------------------+
- | 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->_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 HAVE_OPENSSL_CRYPTO
+ 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 HAVE_OPENSSL_CRYPTO
+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