aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJon Simons <jon@jonsimons.org>2017-07-19 17:23:16 -0400
committerAndreas Schneider <asn@cryptomilk.org>2018-06-28 09:06:30 +0200
commitd4a4ce4d44a9c4431dd9884fbfc458e70c9a5eb5 (patch)
tree07f617187e204a6950422bbeff34e21c31b17825
parent7a2624dee44018980a499943f1db044f7a3802f7 (diff)
downloadlibssh-d4a4ce4d44a9c4431dd9884fbfc458e70c9a5eb5.tar.gz
libssh-d4a4ce4d44a9c4431dd9884fbfc458e70c9a5eb5.tar.xz
libssh-d4a4ce4d44a9c4431dd9884fbfc458e70c9a5eb5.zip
chacha: use a cipher cleanup callback
With this change there is less code specific to the chacha20-poly1305 cipher found in src/wrapper.c. Signed-off-by: Jon Simons <jon@jonsimons.org> Reviewed-by: Andreas Schneider <asn@cryptomilk.org>
-rw-r--r--src/chachapoly.c7
-rw-r--r--src/wrapper.c3
2 files changed, 6 insertions, 4 deletions
diff --git a/src/chachapoly.c b/src/chachapoly.c
index f3319b62..12600e85 100644
--- a/src/chachapoly.c
+++ b/src/chachapoly.c
@@ -187,6 +187,10 @@ static int chacha20_poly1305_aead_decrypt(struct ssh_cipher_struct *cipher,
return SSH_OK;
}
+static void chacha20_cleanup(struct ssh_cipher_struct *cipher) {
+ SAFE_FREE(cipher->chacha20_schedule);
+}
+
const struct ssh_cipher_struct chacha20poly1305_cipher = {
.name = "chacha20-poly1305@openssh.com",
.blocksize = 8,
@@ -198,5 +202,6 @@ const struct ssh_cipher_struct chacha20poly1305_cipher = {
.set_decrypt_key = chacha20_set_encrypt_key,
.aead_encrypt = chacha20_poly1305_aead_encrypt,
.aead_decrypt_length = chacha20_poly1305_aead_decrypt_length,
- .aead_decrypt = chacha20_poly1305_aead_decrypt
+ .aead_decrypt = chacha20_poly1305_aead_decrypt,
+ .cleanup = chacha20_cleanup
};
diff --git a/src/wrapper.c b/src/wrapper.c
index 5bf5cee5..7d771030 100644
--- a/src/wrapper.c
+++ b/src/wrapper.c
@@ -128,9 +128,6 @@ void ssh_cipher_clear(struct ssh_cipher_struct *cipher){
if (cipher->cleanup != NULL) {
cipher->cleanup(cipher);
}
- if (cipher->chacha20_schedule != NULL){
- SAFE_FREE(cipher->chacha20_schedule);
- }
}
static void cipher_free(struct ssh_cipher_struct *cipher) {