aboutsummaryrefslogtreecommitdiff
path: root/sys/crypto/chacha20
diff options
context:
space:
mode:
authorConrad Meyer <cem@FreeBSD.org>2018-03-16 07:11:53 +0000
committerConrad Meyer <cem@FreeBSD.org>2018-03-16 07:11:53 +0000
commit27cb8d849f17dfeafa8358fde586878a0b9d3879 (patch)
tree023b1cdf3de42f780180c1aa0a90f2f50a796411 /sys/crypto/chacha20
parent5d3b36666b2830ec739ab143fca85655d389c340 (diff)
downloadsrc-27cb8d849f17dfeafa8358fde586878a0b9d3879.tar.gz
src-27cb8d849f17dfeafa8358fde586878a0b9d3879.zip
Garbage collect unused chacha20 code
Two copies of chacha20 were imported into the tree on Apr 15 2017 (r316982) and Apr 16 2017 (r317015). Only the latter is actually used by anything, so just go ahead and garbage collect the unused version while it's still only in CURRENT. I'm not making any judgement on which implementation is better. If I pulled the wrong one, feel free to swap the existing implementation out and replace it with the other code (conforming to the API that actually gets used in randomdev, of course). We only need one generic implementation. Sponsored by: Dell EMC Isilon
Notes
Notes: svn path=/head/; revision=331049
Diffstat (limited to 'sys/crypto/chacha20')
-rw-r--r--sys/crypto/chacha20/chacha20.c209
-rw-r--r--sys/crypto/chacha20/chacha20.h53
2 files changed, 0 insertions, 262 deletions
diff --git a/sys/crypto/chacha20/chacha20.c b/sys/crypto/chacha20/chacha20.c
deleted file mode 100644
index 4efab0604e7b..000000000000
--- a/sys/crypto/chacha20/chacha20.c
+++ /dev/null
@@ -1,209 +0,0 @@
-/*-
- * Copyright (c) 2017 Dag-Erling Smørgrav
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#ifdef _KERNEL
-#include <sys/param.h>
-#include <sys/kernel.h>
-#include <sys/libkern.h>
-#include <sys/module.h>
-#include <sys/syslog.h>
-#include <sys/systm.h>
-#else
-#include <stdint.h>
-#include <string.h>
-#endif
-
-#include <sys/endian.h>
-
-
-#include <crypto/chacha20/chacha20.h>
-
-#define rol32(x, n) \
- ((x) << ((n) & 0x1f) | (x) >> (-(n) & 0x1f))
-
-#define CHACHA_QR(x, a, b, c, d) \
- do { \
- x[a] = x[a] + x[b]; x[d] = rol32(x[d] ^ x[a], 16); \
- x[c] = x[c] + x[d]; x[b] = rol32(x[b] ^ x[c], 12); \
- x[a] = x[a] + x[b]; x[d] = rol32(x[d] ^ x[a], 8); \
- x[c] = x[c] + x[d]; x[b] = rol32(x[b] ^ x[c], 7); \
- } while (0)
-
-static const char magic128[] = "expand 16-byte k";
-static const char magic256[] = "expand 32-byte k";
-
-/*
- * Fill the state array with 16 bytes of magic and 32 bytes of key,
- * repeating the key if necessary. The 8-byte stream position and the
- * 8-byte nonce are initialized to all-zeroes.
- */
-void
-chacha20_init(chacha20_ctx *ctx, const uint8_t *key, size_t keylen)
-{
-
- memset(ctx, 0, sizeof *ctx);
- if (keylen == 32) {
- /* magic */
- ctx->state[ 0] = le32dec(magic256 + 0);
- ctx->state[ 1] = le32dec(magic256 + 4);
- ctx->state[ 2] = le32dec(magic256 + 8);
- ctx->state[ 3] = le32dec(magic256 + 12);
- /* first half of key */
- ctx->state[ 4] = le32dec(key + 0);
- ctx->state[ 5] = le32dec(key + 4);
- ctx->state[ 6] = le32dec(key + 8);
- ctx->state[ 7] = le32dec(key + 12);
- /* second half of key */
- ctx->state[ 8] = le32dec(key + 16);
- ctx->state[ 9] = le32dec(key + 20);
- ctx->state[10] = le32dec(key + 24);
- ctx->state[11] = le32dec(key + 28);
- } else {
- /* magic */
- ctx->state[ 0] = le32dec(magic128 + 0);
- ctx->state[ 1] = le32dec(magic128 + 4);
- ctx->state[ 2] = le32dec(magic128 + 8);
- ctx->state[ 3] = le32dec(magic128 + 12);
- /* first half of key */
- ctx->state[ 4] = le32dec(key + 0);
- ctx->state[ 5] = le32dec(key + 4);
- ctx->state[ 6] = le32dec(key + 8);
- ctx->state[ 7] = le32dec(key + 12);
- /* repeat first half of key */
- ctx->state[ 8] = le32dec(key + 0);
- ctx->state[ 9] = le32dec(key + 4);
- ctx->state[10] = le32dec(key + 8);
- ctx->state[11] = le32dec(key + 12);
- }
-}
-
-/*
- * Reset the stream position and load a new nonce.
- */
-void
-chacha20_reset(chacha20_ctx *ctx, const uint8_t *nonce)
-{
-
- /* reset stream counter */
- ctx->state[12] = 0;
- ctx->state[13] = 0;
- /* copy nonce */
- ctx->state[14] = le32dec(nonce + 0);
- ctx->state[15] = le32dec(nonce + 4);
-}
-
-/*
- * Encryption: generate a block of keystream, xor it with the plaintext to
- * produce the ciphertext, and increment the stream position. If vpt is
- * NULL, simply copy the requested keystream to the output buffer.
- */
-size_t
-chacha20_encrypt(chacha20_ctx *ctx, const void *vpt, uint8_t *ct, size_t len)
-{
- const uint8_t *pt = vpt;
- uint32_t mix[16];
- uint8_t ks[64];
- unsigned int b, i;
-
- len -= len % sizeof ks;
- for (b = 0; b < len; b += sizeof ks) {
- memcpy(mix, ctx->state, sizeof mix);
- for (i = 0; i < 20; i += 2) {
- CHACHA_QR(mix, 0, 4, 8, 12);
- CHACHA_QR(mix, 1, 5, 9, 13);
- CHACHA_QR(mix, 2, 6, 10, 14);
- CHACHA_QR(mix, 3, 7, 11, 15);
- CHACHA_QR(mix, 0, 5, 10, 15);
- CHACHA_QR(mix, 1, 6, 11, 12);
- CHACHA_QR(mix, 2, 7, 8, 13);
- CHACHA_QR(mix, 3, 4, 9, 14);
- }
- for (i = 0; i < 16; ++i)
- le32enc(ks + i * 4, ctx->state[i] + mix[i]);
- if (pt == NULL) {
- memcpy(ct, ks, sizeof ks);
- ct += sizeof ks;
- } else {
- for (i = 0; i < 64 && i < len; ++i)
- *ct++ = *pt++ ^ ks[i];
- }
- if (++ctx->state[12] == 0)
- ++ctx->state[13];
- }
- return (len);
-}
-
-/*
- * Decryption: identical to encryption.
- */
-size_t
-chacha20_decrypt(chacha20_ctx *ctx, const uint8_t *ct, void *vpt, size_t len)
-{
-
- return (chacha20_encrypt(ctx, ct, vpt, len));
-}
-
-/*
- * Wipe our state.
- */
-void
-chacha20_finish(chacha20_ctx *ctx)
-{
-
- memset(ctx, 0, sizeof *ctx);
-}
-
-#ifdef _KERNEL
-
-static int
-chacha20_modevent(module_t mod, int evtype, void *unused)
-{
-
- switch (evtype) {
- case MOD_LOAD:
- return (0);
- case MOD_UNLOAD:
- return (0);
- default:
- return (EOPNOTSUPP);
- }
-}
-
-static moduledata_t chacha20_mod = {
- "chacha20",
- chacha20_modevent,
- 0
-};
-
-DECLARE_MODULE(chacha20, chacha20_mod, SI_SUB_DRIVERS, SI_ORDER_FIRST);
-MODULE_VERSION(chacha20, 1);
-#endif
diff --git a/sys/crypto/chacha20/chacha20.h b/sys/crypto/chacha20/chacha20.h
deleted file mode 100644
index e6495f844b0f..000000000000
--- a/sys/crypto/chacha20/chacha20.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*-
- * Copyright (c) 2017 Dag-Erling Smørgrav
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD$
- */
-
-#ifndef SYS_CRYPTO_CHACHA20_H_INCLUDED
-#define SYS_CRYPTO_CHACHA20_H_INCLUDED
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct {
- uint32_t state[16];
-} chacha20_ctx;
-
-void chacha20_init(chacha20_ctx *, const uint8_t *, size_t);
-void chacha20_reset(chacha20_ctx *, const uint8_t *);
-size_t chacha20_encrypt(chacha20_ctx *, const void *, uint8_t *, size_t);
-size_t chacha20_decrypt(chacha20_ctx *, const uint8_t *, void *, size_t);
-void chacha20_finish(chacha20_ctx *);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif