PROV: Move AES_CCM specialisation away from common cipher header
authorRichard Levitte <levitte@openssl.org>
Wed, 11 Dec 2019 12:11:34 +0000 (13:11 +0100)
committerRichard Levitte <levitte@openssl.org>
Thu, 12 Dec 2019 13:59:24 +0000 (14:59 +0100)
The AES_CCM specialisation was defined in the common cipher header
providers/implementations/include/prov/ciphercommon_ccm.h, when it
should in fact be in a local providers/implementations/ciphers/
header.

Reviewed-by: Shane Lontis <shane.lontis@oracle.com>
(Merged from https://github.com/openssl/openssl/pull/10606)

providers/implementations/ciphers/cipher_aes.h
providers/implementations/ciphers/cipher_aes_ccm.c
providers/implementations/ciphers/cipher_aes_ccm.h [new file with mode: 0644]
providers/implementations/ciphers/cipher_aes_ccm_hw.c
providers/implementations/include/prov/ciphercommon_ccm.h

index d00fab13efd409ccf846a34c0fc8a6cea4dd4476..f05ff1b7d5cb23e8e7cae6ea2d459e540ebe9553 100644 (file)
@@ -59,4 +59,3 @@ const PROV_CIPHER_HW *PROV_CIPHER_HW_aes_cfb128(size_t keybits);
 const PROV_CIPHER_HW *PROV_CIPHER_HW_aes_cfb1(size_t keybits);
 const PROV_CIPHER_HW *PROV_CIPHER_HW_aes_cfb8(size_t keybits);
 const PROV_CIPHER_HW *PROV_CIPHER_HW_aes_ctr(size_t keybits);
-
index b6655143d958279aca28688b8078383b5e2b5ce3..c800d1284d0bf2e333f1ba33db25079583e7aa1a 100644 (file)
@@ -9,8 +9,7 @@
 
 /* Dispatch functions for AES CCM mode */
 
-#include "prov/ciphercommon.h"
-#include "prov/ciphercommon_ccm.h"
+#include "cipher_aes_ccm.h"
 #include "prov/implementations.h"
 
 static void *aes_ccm_newctx(void *provctx, size_t keybits)
diff --git a/providers/implementations/ciphers/cipher_aes_ccm.h b/providers/implementations/ciphers/cipher_aes_ccm.h
new file mode 100644 (file)
index 0000000..a0dc4b6
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2019 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License").  You may not use
+ * this file except in compliance with the License.  You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <openssl/aes.h>
+#include "prov/ciphercommon.h"
+#include "prov/ciphercommon_ccm.h"
+
+typedef struct prov_aes_ccm_ctx_st {
+    PROV_CCM_CTX base;         /* Must be first */
+    union {
+        OSSL_UNION_ALIGN;
+        /*-
+         * Padding is chosen so that s390x.kmac.k overlaps with ks.ks and
+         * fc with ks.ks.rounds. Remember that on s390x, an AES_KEY's
+         * rounds field is used to store the function code and that the key
+         * schedule is not stored (if aes hardware support is detected).
+         */
+        struct {
+            unsigned char pad[16];
+            AES_KEY ks;
+        } ks;
+#if defined(OPENSSL_CPUID_OBJ) && defined(__s390__)
+        struct {
+            S390X_KMAC_PARAMS kmac;
+            unsigned long long blocks;
+            union {
+                unsigned long long g[2];
+                unsigned char b[AES_BLOCK_SIZE];
+            } nonce;
+            union {
+                unsigned long long g[2];
+                unsigned char b[AES_BLOCK_SIZE];
+            } buf;
+            unsigned char dummy_pad[168];
+            unsigned int fc;   /* fc has same offset as ks.ks.rounds */
+        } s390x;
+#endif /* defined(OPENSSL_CPUID_OBJ) && defined(__s390__) */
+    } ccm;
+} PROV_AES_CCM_CTX;
+
+const PROV_CCM_HW *PROV_AES_HW_ccm(size_t keylen);
index 0b1e50163b29a292a3a030921ba451787fc7857c..5f4accdb54c8d3c2005953bdf50567c3dab3e543 100644 (file)
@@ -9,8 +9,7 @@
 
 /* AES CCM mode */
 
-#include "prov/ciphercommon.h"
-#include "prov/ciphercommon_ccm.h"
+#include "cipher_aes_ccm.h"
 
 #define AES_HW_CCM_SET_KEY_FN(fn_set_enc_key, fn_blk, fn_ccm_enc, fn_ccm_dec)  \
     fn_set_enc_key(key, keylen * 8, &actx->ccm.ks.ks);                         \
index 0c2af15d54f37f58edfcb761e0e5d660ac2e1a5c..7059789fd171e83b644b73b46b82a7ad8f308dd0 100644 (file)
@@ -37,46 +37,13 @@ typedef struct prov_ccm_st {
     size_t keylen;
     size_t tls_aad_len;        /* TLS AAD length */
     size_t tls_aad_pad_sz;
-    unsigned char iv[AES_BLOCK_SIZE];
-    unsigned char buf[AES_BLOCK_SIZE];
+    unsigned char iv[GENERIC_BLOCK_SIZE];
+    unsigned char buf[GENERIC_BLOCK_SIZE];
     CCM128_CONTEXT ccm_ctx;
     ccm128_f str;
     const PROV_CCM_HW *hw;     /* hardware specific methods  */
 } PROV_CCM_CTX;
 
-typedef struct prov_aes_ccm_ctx_st {
-    PROV_CCM_CTX base;         /* Must be first */
-    union {
-        OSSL_UNION_ALIGN;
-        /*-
-         * Padding is chosen so that s390x.kmac.k overlaps with ks.ks and
-         * fc with ks.ks.rounds. Remember that on s390x, an AES_KEY's
-         * rounds field is used to store the function code and that the key
-         * schedule is not stored (if aes hardware support is detected).
-         */
-        struct {
-            unsigned char pad[16];
-            AES_KEY ks;
-        } ks;
-#if defined(OPENSSL_CPUID_OBJ) && defined(__s390__)
-        struct {
-            S390X_KMAC_PARAMS kmac;
-            unsigned long long blocks;
-            union {
-                unsigned long long g[2];
-                unsigned char b[AES_BLOCK_SIZE];
-            } nonce;
-            union {
-                unsigned long long g[2];
-                unsigned char b[AES_BLOCK_SIZE];
-            } buf;
-            unsigned char dummy_pad[168];
-            unsigned int fc;   /* fc has same offset as ks.ks.rounds */
-        } s390x;
-#endif /* defined(OPENSSL_CPUID_OBJ) && defined(__s390__) */
-    } ccm;
-} PROV_AES_CCM_CTX;
-
 PROV_CIPHER_FUNC(int, CCM_cipher, (PROV_CCM_CTX *ctx, unsigned char *out,      \
                                    size_t *padlen, const unsigned char *in,    \
                                    size_t len));
@@ -111,8 +78,6 @@ struct prov_ccm_hw_st {
     OSSL_CCM_gettag_fn gettag;
 };
 
-const PROV_CCM_HW *PROV_AES_HW_ccm(size_t keylen);
-
 OSSL_OP_cipher_encrypt_init_fn ccm_einit;
 OSSL_OP_cipher_decrypt_init_fn ccm_dinit;
 OSSL_OP_cipher_get_ctx_params_fn ccm_get_ctx_params;