NETTLE: nettle/{aes.h,memxor.h,gcm.h,ccm.h}
authorStefan Metzmacher <metze@samba.org>
Wed, 12 Aug 2015 11:26:47 +0000 (13:26 +0200)
committerStefan Metzmacher <metze@samba.org>
Tue, 4 Oct 2016 09:48:38 +0000 (11:48 +0200)
lib/crypto/aes.h
lib/crypto/wscript_build
lib/crypto/wscript_configure

index df762624becdbf5f86440cac2554f6779a74f84c..d7746ec7f20c7ddb9f16850e882cb12ba0d9f163 100644 (file)
 #ifndef LIB_CRYPTO_AES_H
 #define LIB_CRYPTO_AES_H 1
 
-#if CRYPTO_AES_USE_OPENSSL
+#if CRYPTO_AES_USE_NETTLE
+#include <nettle/aes.h>
+#include <nettle/memxor.h>
+
+#define SAMBA_AES_CBC_ENCRYPT 1
+#define SAMBA_AES_CFB8_ENCRYPT 1
+
+typedef struct aes_ctx AES_KEY;
+
+#define AES_set_encrypt_key(userkey, bits, key) \
+       aes_set_encrypt_key(key, bits/8, userkey)
+#define AES_set_decrypt_key(userkey, bits, key) aes_set_decrypt_key(key, bits/8, userkey)
+#define AES_encrypt(src, dst, key) aes_encrypt(key, AES_BLOCK_SIZE, dst, src)
+#define AES_decrypt(src, dst, key) aes_decrypt(key, AES_BLOCK_SIZE, dst, src)
+#define AES_cbc_encrypt samba_AES_cbc_encrypt
+#define AES_cfb8_encrypt samba_AES_cfb8_encrypt
+
+#define AES_ENCRYPT 1
+#define AES_DECRYPT 0
+
+void AES_cbc_encrypt(const unsigned char *, unsigned char *,
+                    const unsigned long, const AES_KEY *,
+                    unsigned char *, int);
+
+void AES_cfb8_encrypt(const unsigned char *in, unsigned char *out,
+                     unsigned long size, const AES_KEY *key,
+                     unsigned char *iv, int forward_encrypt);
+
+#define aes_cfb8_encrypt(in, out, size, key, iv, forward_encrypt) \
+       AES_cfb8_encrypt(in, out, size, key, iv, forward_encrypt)
+
+#define aes_block_xor(in1, in2, out) memxor3(out, in1, in2, AES_BLOCK_SIZE)
+
+#elif CRYPTO_AES_USE_OPENSSL
 #include <openssl/aes.h>
 
 #define SAMBA_AES_BLOCK_XOR 1
index 5c782519f49c6b6ff6ebe9f1e4267e573572a625..f6108046888b354e1ce2f6be0b9b6a3d90611249 100644 (file)
@@ -13,6 +13,8 @@ elif not bld.CONFIG_SET('HAVE_SYS_MD5_H') and not bld.CONFIG_SET('HAVE_COMMONCRY
 
 if bld.CONFIG_SET('CRYPTO_USE_OPENSSL') or bld.CONFIG_SET('CRYPTO_AES_USE_OPENSSL'):
        extra_deps += ' crypto'
+if bld.CONFIG_SET('CRYPTO_AES_USE_NETTLE'):
+       extra_deps += ' nettle'
 extra_source += ' samba_crypto.c'
 
 bld.SAMBA_SUBSYSTEM('LIBCRYPTO',
index 97291be78e1c0472eff170fa2f05c49a03bf1098..89f2912bbaf432afdbc747db887cb614f0a08410 100644 (file)
@@ -18,3 +18,10 @@ if conf.CHECK_FUNCS_IN('EVP_CipherInit_ex', 'crypto', headers='openssl/evp.h'):
     conf.DEFINE('CRYPTO_USE_OPENSSL', 1)
 if conf.CHECK_FUNCS_IN('AES_set_encrypt_key', 'crypto', headers='openssl/aes.h'):
     conf.DEFINE('CRYPTO_AES_USE_OPENSSL', 1)
+
+if conf.CHECK_FUNCS_IN('gcm_aes_set_key gcm_aes128_set_key', 'nettle', headers='nettle/gcm.h'):
+    conf.DEFINE('CRYPTO_GCM_USE_NETTLE', 1)
+if conf.CHECK_FUNCS_IN('ccm_aes128_set_key', 'nettle', headers='nettle/ccm.h'):
+    conf.DEFINE('CRYPTO_CCM_USE_NETTLE', 1)
+if conf.CHECK_FUNCS_IN('aes_set_encrypt_key', 'nettle', headers='nettle/aes.h'):
+    conf.DEFINE('CRYPTO_AES_USE_NETTLE', 1)