summaryrefslogtreecommitdiff
path: root/cipher/serpent.c
diff options
context:
space:
mode:
authorNIIBE Yutaka <gniibe@fsij.org>2021-04-02 09:49:06 +0900
committerNIIBE Yutaka <gniibe@fsij.org>2021-04-02 10:14:02 +0900
commit840713de1a685920b6b1e1379902d545eccc74cf (patch)
treeba26ee123c1afd7a85738b78da92198bc65d963c /cipher/serpent.c
parentaaa30381eac3cdb49a21e279b2d89ef6e695a138 (diff)
downloadlibgcrypt-840713de1a685920b6b1e1379902d545eccc74cf.tar.gz
cipher: Return GPG_ERR_INV_KEYLEN when wrong key length.
* cipher/idea.c (do_setkey): Return GPG_ERR_INV_KEYLEN. * cipher/rfc2268.c (setkey_core): Likewise. * cipher/serpent.c (serpent_setkey_internal): Likewise. (serpent_setkey): Likewise. -- Reported-by: Guido Vranken <guidovranken@gmail.com> Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
Diffstat (limited to 'cipher/serpent.c')
-rw-r--r--cipher/serpent.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/cipher/serpent.c b/cipher/serpent.c
index 3c5eed2c..d2f7f16e 100644
--- a/cipher/serpent.c
+++ b/cipher/serpent.c
@@ -732,12 +732,15 @@ serpent_subkeys_generate (serpent_key_t key, serpent_subkeys_t subkeys)
}
/* Initialize CONTEXT with the key KEY of KEY_LENGTH bits. */
-static void
+static gcry_err_code_t
serpent_setkey_internal (serpent_context_t *context,
const byte *key, unsigned int key_length)
{
serpent_key_t key_prepared;
+ if (key_length > 32)
+ return GPG_ERR_INV_KEYLEN;
+
serpent_key_prepare (key, key_length, key_prepared);
serpent_subkeys_generate (key_prepared, context->keys);
@@ -758,6 +761,7 @@ serpent_setkey_internal (serpent_context_t *context,
#endif
wipememory (key_prepared, sizeof(key_prepared));
+ return 0;
}
/* Initialize CTX with the key KEY of KEY_LENGTH bytes. */
@@ -791,7 +795,7 @@ serpent_setkey (void *ctx,
if (serpent_test_ret)
ret = GPG_ERR_SELFTEST_FAILED;
else
- serpent_setkey_internal (context, key, key_length);
+ ret = serpent_setkey_internal (context, key, key_length);
return ret;
}