From 315d2a4e674d0b7115574645cb51f968420ebb34 Mon Sep 17 00:00:00 2001 From: Damien Miller Date: Fri, 28 Oct 2016 14:34:07 +1100 Subject: Unbreak AES-CTR ciphers on old (~0.9.8) OpenSSL ok dtucker@ --- cipher.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'cipher.c') diff --git a/cipher.c b/cipher.c index 747b59bf..2def333b 100644 --- a/cipher.c +++ b/cipher.c @@ -617,7 +617,7 @@ cipher_get_keyiv(struct sshcipher_ctx *cc, u_char *iv, u_int len) return SSH_ERR_INVALID_ARGUMENT; #ifndef OPENSSL_HAVE_EVPCTR if (c->evptype == evp_aes_128_ctr) - ssh_aes_ctr_iv(&cc->evp, 0, iv, len); + ssh_aes_ctr_iv(cc->evp, 0, iv, len); else #endif if (cipher_authlen(c)) { @@ -659,6 +659,12 @@ cipher_set_keyiv(struct sshcipher_ctx *cc, const u_char *iv) evplen = EVP_CIPHER_CTX_iv_length(cc->evp); if (evplen <= 0) return SSH_ERR_LIBCRYPTO_ERROR; +#ifndef OPENSSL_HAVE_EVPCTR + /* XXX iv arg is const, but ssh_aes_ctr_iv isn't */ + if (c->evptype == evp_aes_128_ctr) + ssh_aes_ctr_iv(cc->evp, 1, (u_char *)iv, evplen); + else +#endif if (cipher_authlen(c)) { /* XXX iv arg is const, but EVP_CIPHER_CTX_ctrl isn't */ if (!EVP_CIPHER_CTX_ctrl(cc->evp, -- cgit v1.2.1