summaryrefslogtreecommitdiff
path: root/cipher.c
diff options
context:
space:
mode:
authorDamien Miller <djm@mindrot.org>2016-10-28 14:34:07 +1100
committerDamien Miller <djm@mindrot.org>2016-10-28 14:34:56 +1100
commit315d2a4e674d0b7115574645cb51f968420ebb34 (patch)
treed7c716d0cf80232062f3db237fe2d380f3b16e03 /cipher.c
parenta9ff3950b8e80ff971b4d44bbce96df27aed28af (diff)
downloadopenssh-git-315d2a4e674d0b7115574645cb51f968420ebb34.tar.gz
Unbreak AES-CTR ciphers on old (~0.9.8) OpenSSL
ok dtucker@
Diffstat (limited to 'cipher.c')
-rw-r--r--cipher.c8
1 files changed, 7 insertions, 1 deletions
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,