summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikos Mavrogiannopoulos <nmav@gnutls.org>2020-03-30 08:03:55 +0000
committerNikos Mavrogiannopoulos <nmav@gnutls.org>2020-03-30 08:03:55 +0000
commitde9d244f955d6858cc03006a36cd23656e74442e (patch)
treeed1d80922b05b2deaaabf9f2dc0b11e259df2586
parentad595778169067344bc06e327fd22a203f3b4ec5 (diff)
parent55a3cb0fa4b46c52b610125e080fae306dbf355d (diff)
downloadgnutls-de9d244f955d6858cc03006a36cd23656e74442e.tar.gz
Merge branch 'fix-padlock' into 'master'
Fix padlock accelerated code Closes #930 See merge request gnutls/gnutls!1226
-rw-r--r--lib/accelerated/x86/aes-padlock.c8
-rw-r--r--lib/accelerated/x86/sha-padlock.c3
2 files changed, 7 insertions, 4 deletions
diff --git a/lib/accelerated/x86/aes-padlock.c b/lib/accelerated/x86/aes-padlock.c
index f10b5c555d..018764bc67 100644
--- a/lib/accelerated/x86/aes-padlock.c
+++ b/lib/accelerated/x86/aes-padlock.c
@@ -119,13 +119,14 @@ padlock_aes_cbc_encrypt(void *_ctx, const void *src, size_t src_size,
{
struct padlock_ctx *ctx = _ctx;
struct padlock_cipher_data *pce;
+ int ret = 1;
pce = ALIGN16(&ctx->expanded_key);
if (src_size > 0)
- padlock_cbc_encrypt(dst, src, pce, src_size);
+ ret = padlock_cbc_encrypt(dst, src, pce, src_size);
- return 0;
+ return ret ? 0 : GNUTLS_E_ENCRYPTION_FAILED;
}
@@ -135,13 +136,14 @@ padlock_aes_cbc_decrypt(void *_ctx, const void *src, size_t src_size,
{
struct padlock_ctx *ctx = _ctx;
struct padlock_cipher_data *pcd;
+ int ret = 1;
pcd = ALIGN16(&ctx->expanded_key);
if (src_size > 0)
padlock_cbc_encrypt(dst, src, pcd, src_size);
- return 0;
+ return ret ? 0 : GNUTLS_E_ENCRYPTION_FAILED;
}
static void aes_deinit(void *_ctx)
diff --git a/lib/accelerated/x86/sha-padlock.c b/lib/accelerated/x86/sha-padlock.c
index e878ebe310..1030d4f63e 100644
--- a/lib/accelerated/x86/sha-padlock.c
+++ b/lib/accelerated/x86/sha-padlock.c
@@ -331,6 +331,8 @@ int wrap_padlock_hash_fast(gnutls_digest_algorithm_t algo,
const void *text, size_t text_size,
void *digest)
{
+ if (text_size == 0 && text == NULL)
+ text = digest;
if (algo == GNUTLS_DIG_SHA1) {
uint32_t iv[5] = {
0x67452301UL,
@@ -362,7 +364,6 @@ int wrap_padlock_hash_fast(gnutls_digest_algorithm_t algo,
wrap_padlock_hash_update(&ctx, text, text_size);
wrap_padlock_hash_output(&ctx, digest, ctx.length);
- wrap_padlock_hash_deinit(&ctx);
}
return 0;