summaryrefslogtreecommitdiff
path: root/fat-ppc.c
diff options
context:
space:
mode:
authorNiels Möller <nisse@lysator.liu.se>2020-11-28 15:45:13 +0100
committerNiels Möller <nisse@lysator.liu.se>2020-11-28 15:45:13 +0100
commit7078859c239f1f9e1d61995ef0546f54af07a34a (patch)
tree74ba2d2b046c66a5706e8393380bf927f3b888be /fat-ppc.c
parent0e1fc52851be58fe4a06410556f62da47154c3c7 (diff)
parent44090d258f3b059ef29a0f76013a5b97c4d696a4 (diff)
downloadnettle-7078859c239f1f9e1d61995ef0546f54af07a34a.tar.gz
Merge branch 'ppc-gcm' into master-updates
Diffstat (limited to 'fat-ppc.c')
-rw-r--r--fat-ppc.c36
1 files changed, 35 insertions, 1 deletions
diff --git a/fat-ppc.c b/fat-ppc.c
index 28397473..8d4a703d 100644
--- a/fat-ppc.c
+++ b/fat-ppc.c
@@ -62,6 +62,7 @@
#include "aes-internal.h"
#include "chacha-internal.h"
#include "gcm.h"
+#include "gcm-internal.h"
#include "fat-setup.h"
/* Defines from arch/powerpc/include/uapi/asm/cputable.h in Linux kernel */
@@ -110,7 +111,7 @@ get_ppc_features (struct ppc_features *features)
{
#if defined(_AIX)
features->have_crypto_ext
- = _system_configuration.implementation >= 0x10000u;
+ = _system_configuration.implementation >= 0x10000u;
features->have_altivec = _system_configuration.vmx_version > 1;
#else
unsigned long hwcap = 0;
@@ -149,6 +150,16 @@ DECLARE_FAT_FUNC(_nettle_aes_decrypt, aes_crypt_internal_func)
DECLARE_FAT_FUNC_VAR(aes_decrypt, aes_crypt_internal_func, c)
DECLARE_FAT_FUNC_VAR(aes_decrypt, aes_crypt_internal_func, ppc64)
+#if GCM_TABLE_BITS == 8
+DECLARE_FAT_FUNC(_nettle_gcm_init_key, gcm_init_key_func)
+DECLARE_FAT_FUNC_VAR(gcm_init_key, gcm_init_key_func, c)
+DECLARE_FAT_FUNC_VAR(gcm_init_key, gcm_init_key_func, ppc64)
+
+DECLARE_FAT_FUNC(_nettle_gcm_hash, gcm_hash_func)
+DECLARE_FAT_FUNC_VAR(gcm_hash, gcm_hash_func, c)
+DECLARE_FAT_FUNC_VAR(gcm_hash, gcm_hash_func, ppc64)
+#endif /* GCM_TABLE_BITS == 8 */
+
DECLARE_FAT_FUNC(_nettle_chacha_core, chacha_core_func)
DECLARE_FAT_FUNC_VAR(chacha_core, chacha_core_func, c);
DECLARE_FAT_FUNC_VAR(chacha_core, chacha_core_func, altivec);
@@ -180,11 +191,23 @@ fat_init (void)
fprintf (stderr, "libnettle: enabling arch 2.07 code.\n");
_nettle_aes_encrypt_vec = _nettle_aes_encrypt_ppc64;
_nettle_aes_decrypt_vec = _nettle_aes_decrypt_ppc64;
+#if GCM_TABLE_BITS == 8
+ /* Make sure _nettle_gcm_init_key_vec function is compatible
+ with _nettle_gcm_hash_vec function e.g. _nettle_gcm_init_key_c()
+ fills gcm_key table with values that are incompatible with
+ _nettle_gcm_hash_ppc64() */
+ _nettle_gcm_init_key_vec = _nettle_gcm_init_key_ppc64;
+ _nettle_gcm_hash_vec = _nettle_gcm_hash_ppc64;
+#endif /* GCM_TABLE_BITS == 8 */
}
else
{
_nettle_aes_encrypt_vec = _nettle_aes_encrypt_c;
_nettle_aes_decrypt_vec = _nettle_aes_decrypt_c;
+#if GCM_TABLE_BITS == 8
+ _nettle_gcm_init_key_vec = _nettle_gcm_init_key_c;
+ _nettle_gcm_hash_vec = _nettle_gcm_hash_c;
+#endif /* GCM_TABLE_BITS == 8 */
}
if (features.have_altivec)
{
@@ -216,6 +239,17 @@ DEFINE_FAT_FUNC(_nettle_aes_decrypt, void,
const uint8_t *src),
(rounds, keys, T, length, dst, src))
+#if GCM_TABLE_BITS == 8
+DEFINE_FAT_FUNC(_nettle_gcm_init_key, void,
+ (union nettle_block16 *table),
+ (table))
+
+DEFINE_FAT_FUNC(_nettle_gcm_hash, void,
+ (const struct gcm_key *key, union nettle_block16 *x,
+ size_t length, const uint8_t *data),
+ (key, x, length, data))
+#endif /* GCM_TABLE_BITS == 8 */
+
DEFINE_FAT_FUNC(_nettle_chacha_core, void,
(uint32_t *dst, const uint32_t *src, unsigned rounds),
(dst, src, rounds))