summaryrefslogtreecommitdiffstats
path: root/freebsd/sys/crypto
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2019-01-21 09:45:46 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2019-01-21 10:00:40 +0100
commitaec8db05b216a102e334d131b7a71f1514b04679 (patch)
treef9343da918ce3585a1ce469d53d4d54d79ca8cc6 /freebsd/sys/crypto
parentdpaa: Use if_transmit instead of legacy if_start (diff)
downloadrtems-libbsd-aec8db05b216a102e334d131b7a71f1514b04679.tar.bz2
Update to FreeBSD stable/12 2019-01-16
Git mirror commit 4ff7d8141f665693dd8b17090d410604888f1e9a. Update #3472.
Diffstat (limited to 'freebsd/sys/crypto')
-rw-r--r--freebsd/sys/crypto/chacha20/chacha.c2
-rw-r--r--freebsd/sys/crypto/chacha20/chacha.h11
-rw-r--r--freebsd/sys/crypto/rijndael/rijndael-api-fst.c31
3 files changed, 18 insertions, 26 deletions
diff --git a/freebsd/sys/crypto/chacha20/chacha.c b/freebsd/sys/crypto/chacha20/chacha.c
index 154726c2..3ce5310a 100644
--- a/freebsd/sys/crypto/chacha20/chacha.c
+++ b/freebsd/sys/crypto/chacha20/chacha.c
@@ -130,10 +130,8 @@ chacha_encrypt_bytes(chacha_ctx *x,const u8 *m,u8 *c,u_int bytes)
for (;;) {
if (bytes < 64) {
-#ifndef KEYSTREAM_ONLY
for (i = 0;i < bytes;++i) tmp[i] = m[i];
m = tmp;
-#endif
ctarget = c;
c = tmp;
}
diff --git a/freebsd/sys/crypto/chacha20/chacha.h b/freebsd/sys/crypto/chacha20/chacha.h
index 73548331..e67cc812 100644
--- a/freebsd/sys/crypto/chacha20/chacha.h
+++ b/freebsd/sys/crypto/chacha20/chacha.h
@@ -12,7 +12,10 @@ Public domain.
#define CHACHA_H
#include <sys/types.h>
-#include <crypto/chacha20/_chacha.h>
+
+struct chacha_ctx {
+ u_int input[16];
+};
#define CHACHA_MINKEYLEN 16
#define CHACHA_NONCELEN 8
@@ -20,10 +23,10 @@ Public domain.
#define CHACHA_STATELEN (CHACHA_NONCELEN+CHACHA_CTRLEN)
#define CHACHA_BLOCKLEN 64
-#ifdef CHACHA_EMBED
-#define LOCAL static
-#else
+#ifdef _KERNEL
#define LOCAL
+#else
+#define LOCAL static
#endif
LOCAL void chacha_keysetup(struct chacha_ctx *x, const u_char *k, u_int kbits);
diff --git a/freebsd/sys/crypto/rijndael/rijndael-api-fst.c b/freebsd/sys/crypto/rijndael/rijndael-api-fst.c
index 30816c80..1ae535a5 100644
--- a/freebsd/sys/crypto/rijndael/rijndael-api-fst.c
+++ b/freebsd/sys/crypto/rijndael/rijndael-api-fst.c
@@ -38,6 +38,7 @@ typedef u_int8_t BYTE;
int rijndael_makeKey(keyInstance *key, BYTE direction, int keyLen,
const char *keyMaterial) {
+ u_int8_t cipherKey[RIJNDAEL_MAXKB];
if (key == NULL) {
return BAD_KEY_INSTANCE;
@@ -60,12 +61,13 @@ int rijndael_makeKey(keyInstance *key, BYTE direction, int keyLen,
}
/* initialize key schedule: */
+ memcpy(cipherKey, key->keyMaterial, keyLen/8);
if (direction == DIR_ENCRYPT) {
- key->Nr = rijndaelKeySetupEnc(key->rk, key->keyMaterial, keyLen);
+ key->Nr = rijndaelKeySetupEnc(key->rk, cipherKey, keyLen);
} else {
- key->Nr = rijndaelKeySetupDec(key->rk, key->keyMaterial, keyLen);
+ key->Nr = rijndaelKeySetupDec(key->rk, cipherKey, keyLen);
}
- rijndaelKeySetupEnc(key->ek, key->keyMaterial, keyLen);
+ rijndaelKeySetupEnc(key->ek, cipherKey, keyLen);
return TRUE;
}
@@ -186,7 +188,6 @@ int rijndael_blockEncrypt(cipherInstance *cipher, keyInstance *key,
return BAD_CIPHER_STATE;
}
- explicit_bzero(block, sizeof(block));
return 128*numBlocks;
}
@@ -259,7 +260,6 @@ int rijndael_padEncrypt(cipherInstance *cipher, keyInstance *key,
return BAD_CIPHER_STATE;
}
- explicit_bzero(block, sizeof(block));
return 16*(numBlocks + 1);
}
@@ -359,13 +359,12 @@ int rijndael_blockDecrypt(cipherInstance *cipher, keyInstance *key,
return BAD_CIPHER_STATE;
}
- explicit_bzero(block, sizeof(block));
return 128*numBlocks;
}
int rijndael_padDecrypt(cipherInstance *cipher, keyInstance *key,
const BYTE *input, int inputOctets, BYTE *outBuffer) {
- int i, numBlocks, padLen, rval;
+ int i, numBlocks, padLen;
u_int8_t block[16];
u_int32_t iv[4];
@@ -395,13 +394,11 @@ int rijndael_padDecrypt(cipherInstance *cipher, keyInstance *key,
rijndaelDecrypt(key->rk, key->Nr, input, block);
padLen = block[15];
if (padLen >= 16) {
- rval = BAD_DATA;
- goto out;
+ return BAD_DATA;
}
for (i = 16 - padLen; i < 16; i++) {
if (block[i] != padLen) {
- rval = BAD_DATA;
- goto out;
+ return BAD_DATA;
}
}
memcpy(outBuffer, block, 16 - padLen);
@@ -429,13 +426,11 @@ int rijndael_padDecrypt(cipherInstance *cipher, keyInstance *key,
((u_int32_t*)block)[3] ^= iv[3];
padLen = block[15];
if (padLen <= 0 || padLen > 16) {
- rval = BAD_DATA;
- goto out;
+ return BAD_DATA;
}
for (i = 16 - padLen; i < 16; i++) {
if (block[i] != padLen) {
- rval = BAD_DATA;
- goto out;
+ return BAD_DATA;
}
}
memcpy(outBuffer, block, 16 - padLen);
@@ -445,9 +440,5 @@ int rijndael_padDecrypt(cipherInstance *cipher, keyInstance *key,
return BAD_CIPHER_STATE;
}
- rval = 16*numBlocks - padLen;
-
-out:
- explicit_bzero(block, sizeof(block));
- return rval;
+ return 16*numBlocks - padLen;
}