Add possibility to use libcrypto for encryption
[awesomized/libmemcached] / src / libhashkit / aes.h
1 /*
2 +--------------------------------------------------------------------+
3 | libmemcached-awesome - C/C++ Client Library for memcached |
4 +--------------------------------------------------------------------+
5 | Redistribution and use in source and binary forms, with or without |
6 | modification, are permitted under the terms of the BSD license. |
7 | You should have received a copy of the license in a bundled file |
8 | named LICENSE; in case you did not receive a copy you can review |
9 | the terms online at: https://opensource.org/licenses/BSD-3-Clause |
10 +--------------------------------------------------------------------+
11 | Copyright (c) 2006-2014 Brian Aker https://datadifferential.com/ |
12 | Copyright (c) 2020-2021 Michael Wallner https://awesome.co/ |
13 +--------------------------------------------------------------------+
14 */
15
16 #pragma once
17
18 #ifdef WITH_OPENSSL
19
20 #include <openssl/evp.h>
21
22 typedef struct encryption_context {
23 EVP_CIPHER_CTX *encryption_context;
24 EVP_CIPHER_CTX *decryption_context;
25 } encryption_context_t;
26
27 hashkit_string_st *aes_encrypt(encryption_context_t *crypto_context, const unsigned char *source,
28 size_t source_length);
29
30 hashkit_string_st *aes_decrypt(encryption_context_t *crypto_context, const unsigned char *source,
31 size_t source_length);
32
33 bool aes_initialize(const unsigned char *key, const size_t key_length,
34 encryption_context_t *crypto_context);
35
36 encryption_context_t *aes_clone_cryptographic_context(encryption_context_t *source);
37 #else
38
39 struct aes_key_t;
40
41 hashkit_string_st *aes_encrypt(aes_key_t *_aes_key, const char *source, size_t source_length);
42
43 hashkit_string_st *aes_decrypt(aes_key_t *_aes_key, const char *source, size_t source_length);
44
45 aes_key_t *aes_create_key(const char *key, const size_t key_length);
46
47 aes_key_t *aes_clone_key(aes_key_t *_aes_key);
48 #endif