From 14aaf883d93fb2e321ef1fe25f687fb7b62ef8fe Mon Sep 17 00:00:00 2001 From: Andy Polyakov Date: Wed, 16 Jul 2014 08:03:34 +0200 Subject: Engage GHASH for PowerISA 2.07. --- crypto/modes/gcm128.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'crypto/modes/gcm128.c') diff --git a/crypto/modes/gcm128.c b/crypto/modes/gcm128.c index 19cbcf5572..c8c906c821 100644 --- a/crypto/modes/gcm128.c +++ b/crypto/modes/gcm128.c @@ -700,6 +700,13 @@ extern unsigned int OPENSSL_sparcv9cap_P[]; void gcm_init_vis3(u128 Htable[16],const u64 Xi[2]); void gcm_gmult_vis3(u64 Xi[2],const u128 Htable[16]); void gcm_ghash_vis3(u64 Xi[2],const u128 Htable[16],const u8 *inp,size_t len); +#elif defined(OPENSSL_CPUID_OBJ) && (defined(__powerpc__) || defined(__ppc__) || defined(_ARCH_PPC)) +# define GHASH_ASM_PPC +# define GCM_FUNCREF_4BIT +extern unsigned int OPENSSL_ppccap_P[]; +void gcm_init_p8(u128 Htable[16],const u64 Xi[2]); +void gcm_gmult_p8(u64 Xi[2],const u128 Htable[16]); +void gcm_ghash_p8(u64 Xi[2],const u128 Htable[16],const u8 *inp,size_t len); # endif #endif @@ -803,6 +810,16 @@ void CRYPTO_gcm128_init(GCM128_CONTEXT *ctx,void *key,block128_f block) ctx->gmult = gcm_gmult_4bit; ctx->ghash = gcm_ghash_4bit; } +# elif defined(GHASH_ASM_PPC) + if (OPENSSL_ppccap_P[0] & (1<<2)) { + gcm_init_p8(ctx->Htable,ctx->H.u); + ctx->gmult = gcm_gmult_p8; + ctx->ghash = gcm_ghash_p8; + } else { + gcm_init_4bit(ctx->Htable,ctx->H.u); + ctx->gmult = gcm_gmult_4bit; + ctx->ghash = gcm_ghash_4bit; + } # else gcm_init_4bit(ctx->Htable,ctx->H.u); # endif -- cgit v1.2.3