From 3b38beae4913121962004a094d64b29030a1ba28 Mon Sep 17 00:00:00 2001 From: bcook <> Date: Wed, 9 Dec 2015 14:07:55 +0000 Subject: Change the counter argument for CRYPTO_chacha_20 to be 64-bits on all platforms. The recently-added EVP_aead_chacha20_poly1305_ietf() function, which implements informational RFC 7539, "ChaCha20 and Poly1305 for IETF Protocols", needs a 64-bit counter to avoid truncation on 32-bit platforms. The existing TLS ChaCha20-Poly1305 ciphersuite is not impacted by this, but making this change requires an ABI bump. ok jsing@, "Looks sane" beck@ --- src/lib/libcrypto/chacha/chacha.c | 6 +++--- src/lib/libcrypto/chacha/chacha.h | 5 +++-- src/lib/libssl/src/crypto/chacha/chacha.c | 6 +++--- src/lib/libssl/src/crypto/chacha/chacha.h | 5 +++-- 4 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/lib/libcrypto/chacha/chacha.c b/src/lib/libcrypto/chacha/chacha.c index b8422306fa..0c384ab88a 100644 --- a/src/lib/libcrypto/chacha/chacha.c +++ b/src/lib/libcrypto/chacha/chacha.c @@ -1,4 +1,4 @@ -/* $OpenBSD: chacha.c,v 1.6 2014/07/08 14:30:23 bcook Exp $ */ +/* $OpenBSD: chacha.c,v 1.7 2015/12/09 14:07:55 bcook Exp $ */ /* * Copyright (c) 2014 Joel Sing * @@ -57,7 +57,7 @@ ChaCha(ChaCha_ctx *ctx, unsigned char *out, const unsigned char *in, size_t len) void CRYPTO_chacha_20(unsigned char *out, const unsigned char *in, size_t len, - const unsigned char key[32], const unsigned char iv[8], size_t counter) + const unsigned char key[32], const unsigned char iv[8], uint64_t counter) { struct chacha_ctx ctx; @@ -70,7 +70,7 @@ CRYPTO_chacha_20(unsigned char *out, const unsigned char *in, size_t len, chacha_ivsetup(&ctx, iv, NULL); if (counter != 0) { ctx.input[12] = (uint32_t)counter; - ctx.input[13] = (uint32_t)(((uint64_t)counter) >> 32); + ctx.input[13] = (uint32_t)(counter >> 32); } chacha_encrypt_bytes(&ctx, in, out, (uint32_t)len); diff --git a/src/lib/libcrypto/chacha/chacha.h b/src/lib/libcrypto/chacha/chacha.h index 8af5ef856f..8d94e626f8 100644 --- a/src/lib/libcrypto/chacha/chacha.h +++ b/src/lib/libcrypto/chacha/chacha.h @@ -1,4 +1,4 @@ -/* $OpenBSD: chacha.h,v 1.6 2014/07/25 14:04:51 jsing Exp $ */ +/* $OpenBSD: chacha.h,v 1.7 2015/12/09 14:07:55 bcook Exp $ */ /* * Copyright (c) 2014 Joel Sing * @@ -25,6 +25,7 @@ #endif #include +#include #ifdef __cplusplus extern "C" { @@ -44,7 +45,7 @@ void ChaCha(ChaCha_ctx *ctx, unsigned char *out, const unsigned char *in, size_t len); void CRYPTO_chacha_20(unsigned char *out, const unsigned char *in, size_t len, - const unsigned char key[32], const unsigned char iv[8], size_t counter); + const unsigned char key[32], const unsigned char iv[8], uint64_t counter); #ifdef __cplusplus } diff --git a/src/lib/libssl/src/crypto/chacha/chacha.c b/src/lib/libssl/src/crypto/chacha/chacha.c index b8422306fa..0c384ab88a 100644 --- a/src/lib/libssl/src/crypto/chacha/chacha.c +++ b/src/lib/libssl/src/crypto/chacha/chacha.c @@ -1,4 +1,4 @@ -/* $OpenBSD: chacha.c,v 1.6 2014/07/08 14:30:23 bcook Exp $ */ +/* $OpenBSD: chacha.c,v 1.7 2015/12/09 14:07:55 bcook Exp $ */ /* * Copyright (c) 2014 Joel Sing * @@ -57,7 +57,7 @@ ChaCha(ChaCha_ctx *ctx, unsigned char *out, const unsigned char *in, size_t len) void CRYPTO_chacha_20(unsigned char *out, const unsigned char *in, size_t len, - const unsigned char key[32], const unsigned char iv[8], size_t counter) + const unsigned char key[32], const unsigned char iv[8], uint64_t counter) { struct chacha_ctx ctx; @@ -70,7 +70,7 @@ CRYPTO_chacha_20(unsigned char *out, const unsigned char *in, size_t len, chacha_ivsetup(&ctx, iv, NULL); if (counter != 0) { ctx.input[12] = (uint32_t)counter; - ctx.input[13] = (uint32_t)(((uint64_t)counter) >> 32); + ctx.input[13] = (uint32_t)(counter >> 32); } chacha_encrypt_bytes(&ctx, in, out, (uint32_t)len); diff --git a/src/lib/libssl/src/crypto/chacha/chacha.h b/src/lib/libssl/src/crypto/chacha/chacha.h index 8af5ef856f..8d94e626f8 100644 --- a/src/lib/libssl/src/crypto/chacha/chacha.h +++ b/src/lib/libssl/src/crypto/chacha/chacha.h @@ -1,4 +1,4 @@ -/* $OpenBSD: chacha.h,v 1.6 2014/07/25 14:04:51 jsing Exp $ */ +/* $OpenBSD: chacha.h,v 1.7 2015/12/09 14:07:55 bcook Exp $ */ /* * Copyright (c) 2014 Joel Sing * @@ -25,6 +25,7 @@ #endif #include +#include #ifdef __cplusplus extern "C" { @@ -44,7 +45,7 @@ void ChaCha(ChaCha_ctx *ctx, unsigned char *out, const unsigned char *in, size_t len); void CRYPTO_chacha_20(unsigned char *out, const unsigned char *in, size_t len, - const unsigned char key[32], const unsigned char iv[8], size_t counter); + const unsigned char key[32], const unsigned char iv[8], uint64_t counter); #ifdef __cplusplus } -- cgit v1.2.3-55-g6feb