Kernel version lost the counter argument to chacha_ivsetup that I'll
need for Chacha20 use in the IPsec stack.
This change is a NO-OP.
OK?
---
sys/crypto/chacha_private.h | 8 ++++----
sys/crypto/xform.c | 1 +
sys/dev/rnd.c | 8 ++++----
3 files changed, 9 insertions(+), 8 deletions(-)
diff --git sys/crypto/chacha_private.h sys/crypto/chacha_private.h
index 66b57c5..662c074 100644
--- sys/crypto/chacha_private.h
+++ sys/crypto/chacha_private.h
@@ -48,11 +48,11 @@ typedef struct
static const char sigma[16] = "expand 32-byte k";
static const char tau[16] = "expand 16-byte k";
static void
-chacha_keysetup(chacha_ctx *x,const u8 *k,u32 kbits,u32 ivbits)
+chacha_keysetup(chacha_ctx *x,const u8 *k,u32 kbits)
{
const char *constants;
x->input[4] = U8TO32_LITTLE(k + 0);
x->input[5] = U8TO32_LITTLE(k + 4);
@@ -73,14 +73,14 @@ chacha_keysetup(chacha_ctx *x,const u8 *k,u32 kbits,u32
ivbits)
x->input[2] = U8TO32_LITTLE(constants + 8);
x->input[3] = U8TO32_LITTLE(constants + 12);
}
static void
-chacha_ivsetup(chacha_ctx *x,const u8 *iv)
+chacha_ivsetup(chacha_ctx *x, const u8 *iv, const u8 *counter)
{
- x->input[12] = 0;
- x->input[13] = 0;
+ x->input[12] = counter == NULL ? 0 : U8TO32_LITTLE(counter + 0);
+ x->input[13] = counter == NULL ? 0 : U8TO32_LITTLE(counter + 4);
x->input[14] = U8TO32_LITTLE(iv + 0);
x->input[15] = U8TO32_LITTLE(iv + 4);
}
static void
diff --git sys/crypto/xform.c sys/crypto/xform.c
index 1dbe054..84b762b 100644
--- sys/crypto/xform.c
+++ sys/crypto/xform.c
@@ -56,10 +56,11 @@
#include <crypto/cast.h>
#include <crypto/rijndael.h>
#include <crypto/cryptodev.h>
#include <crypto/xform.h>
#include <crypto/gmac.h>
+#include <crypto/chachapoly.h>
extern void des_ecb3_encrypt(caddr_t, caddr_t, caddr_t, caddr_t, caddr_t, int);
extern void des_ecb_encrypt(caddr_t, caddr_t, caddr_t, int);
int des_set_key(void *, caddr_t);
diff --git sys/dev/rnd.c sys/dev/rnd.c
index 58f12ed..eda81ed 100644
--- sys/dev/rnd.c
+++ sys/dev/rnd.c
@@ -566,12 +566,12 @@ static inline void _rs_rekey(u_char *dat, size_t datlen);
static inline void
_rs_init(u_char *buf, size_t n)
{
KASSERT(n >= KEYSZ + IVSZ);
- chacha_keysetup(&rs, buf, KEYSZ * 8, 0);
- chacha_ivsetup(&rs, buf + KEYSZ);
+ chacha_keysetup(&rs, buf, KEYSZ * 8);
+ chacha_ivsetup(&rs, buf + KEYSZ, NULL);
}
static void
_rs_seed(u_char *buf, size_t n)
{
@@ -831,12 +831,12 @@ randomread(dev_t dev, struct uio *uio, int ioflag)
return 0;
buf = malloc(POOLBYTES, M_TEMP, M_WAITOK);
if (total > ARC4_MAIN_MAX_BYTES) {
arc4random_buf(lbuf, sizeof(lbuf));
- chacha_keysetup(&lctx, lbuf, KEYSZ * 8, 0);
- chacha_ivsetup(&lctx, lbuf + KEYSZ);
+ chacha_keysetup(&lctx, lbuf, KEYSZ * 8);
+ chacha_ivsetup(&lctx, lbuf + KEYSZ, NULL);
explicit_bzero(lbuf, sizeof(lbuf));
myctx = 1;
}
while (ret == 0 && uio->uio_resid > 0) {
--
2.6.2