summaryrefslogtreecommitdiff
path: root/crypto
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2026-02-10 08:31:09 -0800
committerLinus Torvalds <torvalds@linux-foundation.org>2026-02-10 08:31:09 -0800
commit13d83ea9d81ddcb08b46377dcc9de6e5df1248d1 (patch)
treee863bf9addc6cd4c1295683da69bb0b6020edd18 /crypto
parent35149653ee29d925ea0c2b5ca0eacf0af32be34f (diff)
parentffd42b6d0420c4be97cc28fd1bb5f4c29e286e98 (diff)
Merge tag 'libcrypto-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ebiggers/linux
Pull crypto library updates from Eric Biggers: - Add support for verifying ML-DSA signatures. ML-DSA (Module-Lattice-Based Digital Signature Algorithm) is a recently-standardized post-quantum (quantum-resistant) signature algorithm. It was known as Dilithium pre-standardization. The first use case in the kernel will be module signing. But there are also other users of RSA and ECDSA signatures in the kernel that might want to upgrade to ML-DSA eventually. - Improve the AES library: - Make the AES key expansion and single block encryption and decryption functions use the architecture-optimized AES code. Enable these optimizations by default. - Support preparing an AES key for encryption-only, using about half as much memory as a bidirectional key. - Replace the existing two generic implementations of AES with a single one. - Simplify how Adiantum message hashing is implemented. Remove the "nhpoly1305" crypto_shash in favor of direct lib/crypto/ support for NH hashing, and enable optimizations by default. * tag 'libcrypto-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ebiggers/linux: (53 commits) lib/crypto: mldsa: Clarify the documentation for mldsa_verify() slightly lib/crypto: aes: Drop 'volatile' from aes_sbox and aes_inv_sbox lib/crypto: aes: Remove old AES en/decryption functions lib/crypto: aesgcm: Use new AES library API lib/crypto: aescfb: Use new AES library API crypto: omap - Use new AES library API crypto: inside-secure - Use new AES library API crypto: drbg - Use new AES library API crypto: crypto4xx - Use new AES library API crypto: chelsio - Use new AES library API crypto: ccp - Use new AES library API crypto: x86/aes-gcm - Use new AES library API crypto: arm64/ghash - Use new AES library API crypto: arm/ghash - Use new AES library API staging: rtl8723bs: core: Use new AES library API net: phy: mscc: macsec: Use new AES library API chelsio: Use new AES library API Bluetooth: SMP: Use new AES library API crypto: x86/aes - Remove the superseded AES-NI crypto_cipher lib/crypto: x86/aes: Add AES-NI optimization ...
Diffstat (limited to 'crypto')
-rw-r--r--crypto/Kconfig31
-rw-r--r--crypto/Makefile5
-rw-r--r--crypto/adiantum.c442
-rw-r--r--crypto/aegis.h2
-rw-r--r--crypto/aes.c66
-rw-r--r--crypto/aes_generic.c1320
-rw-r--r--crypto/aes_ti.c83
-rw-r--r--crypto/crypto_user.c2
-rw-r--r--crypto/df_sp80090a.c30
-rw-r--r--crypto/drbg.c12
-rw-r--r--crypto/nhpoly1305.c255
-rw-r--r--crypto/testmgr.c49
-rw-r--r--crypto/testmgr.h1372
13 files changed, 356 insertions, 3313 deletions
diff --git a/crypto/Kconfig b/crypto/Kconfig
index 2e5b195b1b06..db6b0c2fb50e 100644
--- a/crypto/Kconfig
+++ b/crypto/Kconfig
@@ -366,27 +366,6 @@ config CRYPTO_AES
The AES specifies three key sizes: 128, 192 and 256 bits
-config CRYPTO_AES_TI
- tristate "AES (Advanced Encryption Standard) (fixed time)"
- select CRYPTO_ALGAPI
- select CRYPTO_LIB_AES
- help
- AES cipher algorithms (Rijndael)(FIPS-197, ISO/IEC 18033-3)
-
- This is a generic implementation of AES that attempts to eliminate
- data dependent latencies as much as possible without affecting
- performance too much. It is intended for use by the generic CCM
- and GCM drivers, and other CTR or CMAC/XCBC based modes that rely
- solely on encryption (although decryption is supported as well, but
- with a more dramatic performance hit)
-
- Instead of using 16 lookup tables of 1 KB each, (8 for encryption and
- 8 for decryption), this implementation only uses just two S-boxes of
- 256 bytes each, and attempts to eliminate data dependent latencies by
- prefetching the entire table into the cache at the start of each
- block. Interrupts are also disabled to avoid races where cachelines
- are evicted when the CPU is interrupted to do something else.
-
config CRYPTO_ANUBIS
tristate "Anubis"
depends on CRYPTO_USER_API_ENABLE_OBSOLETE
@@ -601,9 +580,9 @@ menu "Length-preserving ciphers and modes"
config CRYPTO_ADIANTUM
tristate "Adiantum"
select CRYPTO_CHACHA20
+ select CRYPTO_LIB_NH
select CRYPTO_LIB_POLY1305
select CRYPTO_LIB_POLY1305_GENERIC
- select CRYPTO_NHPOLY1305
select CRYPTO_MANAGER
help
Adiantum tweakable, length-preserving encryption mode
@@ -759,12 +738,6 @@ config CRYPTO_XTS
implementation currently can't handle a sectorsize which is not a
multiple of 16 bytes.
-config CRYPTO_NHPOLY1305
- tristate
- select CRYPTO_HASH
- select CRYPTO_LIB_POLY1305
- select CRYPTO_LIB_POLY1305_GENERIC
-
endmenu
menu "AEAD (authenticated encryption with associated data) ciphers"
@@ -772,7 +745,7 @@ menu "AEAD (authenticated encryption with associated data) ciphers"
config CRYPTO_AEGIS128
tristate "AEGIS-128"
select CRYPTO_AEAD
- select CRYPTO_AES # for AES S-box tables
+ select CRYPTO_LIB_AES # for AES S-box tables
help
AEGIS-128 AEAD algorithm
diff --git a/crypto/Makefile b/crypto/Makefile
index 16a35649dd91..65a2c3478814 100644
--- a/crypto/Makefile
+++ b/crypto/Makefile
@@ -94,7 +94,6 @@ obj-$(CONFIG_CRYPTO_CTR) += ctr.o
obj-$(CONFIG_CRYPTO_XCTR) += xctr.o
obj-$(CONFIG_CRYPTO_HCTR2) += hctr2.o
obj-$(CONFIG_CRYPTO_ADIANTUM) += adiantum.o
-obj-$(CONFIG_CRYPTO_NHPOLY1305) += nhpoly1305.o
obj-$(CONFIG_CRYPTO_GCM) += gcm.o
obj-$(CONFIG_CRYPTO_CCM) += ccm.o
obj-$(CONFIG_CRYPTO_CHACHA20POLY1305) += chacha20poly1305.o
@@ -131,11 +130,9 @@ obj-$(CONFIG_CRYPTO_TWOFISH) += twofish_generic.o
obj-$(CONFIG_CRYPTO_TWOFISH_COMMON) += twofish_common.o
obj-$(CONFIG_CRYPTO_SERPENT) += serpent_generic.o
CFLAGS_serpent_generic.o := $(call cc-option,-fsched-pressure) # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79149
-obj-$(CONFIG_CRYPTO_AES) += aes_generic.o
-CFLAGS_aes_generic.o := $(call cc-option,-fno-code-hoisting) # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83356
+obj-$(CONFIG_CRYPTO_AES) += aes.o
obj-$(CONFIG_CRYPTO_SM4) += sm4.o
obj-$(CONFIG_CRYPTO_SM4_GENERIC) += sm4_generic.o
-obj-$(CONFIG_CRYPTO_AES_TI) += aes_ti.o
obj-$(CONFIG_CRYPTO_CAMELLIA) += camellia_generic.o
obj-$(CONFIG_CRYPTO_CAST_COMMON) += cast_common.o
obj-$(CONFIG_CRYPTO_CAST5) += cast5_generic.o
diff --git a/crypto/adiantum.c b/crypto/adiantum.c
index a6bca877c3c7..5ddf585abb66 100644
--- a/crypto/adiantum.c
+++ b/crypto/adiantum.c
@@ -20,23 +20,14 @@
*
* - Stream cipher: XChaCha12 or XChaCha20
* - Block cipher: any with a 128-bit block size and 256-bit key
- *
- * This implementation doesn't currently allow other ε-∆U hash functions, i.e.
- * HPolyC is not supported. This is because Adiantum is ~20% faster than HPolyC
- * but still provably as secure, and also the ε-∆U hash function of HBSH is
- * formally defined to take two inputs (tweak, message) which makes it difficult
- * to wrap with the crypto_shash API. Rather, some details need to be handled
- * here. Nevertheless, if needed in the future, support for other ε-∆U hash
- * functions could be added here.
*/
#include <crypto/b128ops.h>
#include <crypto/chacha.h>
#include <crypto/internal/cipher.h>
-#include <crypto/internal/hash.h>
#include <crypto/internal/poly1305.h>
#include <crypto/internal/skcipher.h>
-#include <crypto/nhpoly1305.h>
+#include <crypto/nh.h>
#include <crypto/scatterwalk.h>
#include <linux/module.h>
@@ -50,7 +41,7 @@
#define BLOCKCIPHER_KEY_SIZE 32
/* Size of the hash key (K_H) in bytes */
-#define HASH_KEY_SIZE (POLY1305_BLOCK_SIZE + NHPOLY1305_KEY_SIZE)
+#define HASH_KEY_SIZE (2 * POLY1305_BLOCK_SIZE + NH_KEY_BYTES)
/*
* The specification allows variable-length tweaks, but Linux's crypto API
@@ -64,43 +55,40 @@
struct adiantum_instance_ctx {
struct crypto_skcipher_spawn streamcipher_spawn;
struct crypto_cipher_spawn blockcipher_spawn;
- struct crypto_shash_spawn hash_spawn;
};
struct adiantum_tfm_ctx {
struct crypto_skcipher *streamcipher;
struct crypto_cipher *blockcipher;
- struct crypto_shash *hash;
struct poly1305_core_key header_hash_key;
+ struct poly1305_core_key msg_poly_key;
+ u32 nh_key[NH_KEY_WORDS];
};
-struct adiantum_request_ctx {
+struct nhpoly1305_ctx {
+ /* Running total of polynomial evaluation */
+ struct poly1305_state poly_state;
+
+ /* Partial block buffer */
+ u8 buffer[NH_MESSAGE_UNIT];
+ unsigned int buflen;
/*
- * Buffer for right-hand part of data, i.e.
- *
- * P_L => P_M => C_M => C_R when encrypting, or
- * C_R => C_M => P_M => P_L when decrypting.
- *
- * Also used to build the IV for the stream cipher.
+ * Number of bytes remaining until the current NH message reaches
+ * NH_MESSAGE_BYTES. When nonzero, 'nh_hash' holds the partial NH hash.
*/
- union {
- u8 bytes[XCHACHA_IV_SIZE];
- __le32 words[XCHACHA_IV_SIZE / sizeof(__le32)];
- le128 bignum; /* interpret as element of Z/(2^{128}Z) */
- } rbuf;
+ unsigned int nh_remaining;
- bool enc; /* true if encrypting, false if decrypting */
+ __le64 nh_hash[NH_NUM_PASSES];
+};
+struct adiantum_request_ctx {
/*
- * The result of the Poly1305 ε-∆U hash function applied to
- * (bulk length, tweak)
+ * skcipher sub-request size is unknown at compile-time, so it needs to
+ * go after the members with known sizes.
*/
- le128 header_hash;
-
- /* Sub-requests, must be last */
union {
- struct shash_desc hash_desc;
+ struct nhpoly1305_ctx hash_ctx;
struct skcipher_request streamcipher_req;
} u;
};
@@ -170,12 +158,11 @@ static int adiantum_setkey(struct crypto_skcipher *tfm, const u8 *key,
/* Set the hash key (K_H) */
poly1305_core_setkey(&tctx->header_hash_key, keyp);
keyp += POLY1305_BLOCK_SIZE;
-
- crypto_shash_clear_flags(tctx->hash, CRYPTO_TFM_REQ_MASK);
- crypto_shash_set_flags(tctx->hash, crypto_skcipher_get_flags(tfm) &
- CRYPTO_TFM_REQ_MASK);
- err = crypto_shash_setkey(tctx->hash, keyp, NHPOLY1305_KEY_SIZE);
- keyp += NHPOLY1305_KEY_SIZE;
+ poly1305_core_setkey(&tctx->msg_poly_key, keyp);
+ keyp += POLY1305_BLOCK_SIZE;
+ for (int i = 0; i < NH_KEY_WORDS; i++)
+ tctx->nh_key[i] = get_unaligned_le32(&keyp[i * 4]);
+ keyp += NH_KEY_BYTES;
WARN_ON(keyp != &data->derived_keys[ARRAY_SIZE(data->derived_keys)]);
out:
kfree_sensitive(data);
@@ -206,7 +193,7 @@ static inline void le128_sub(le128 *r, const le128 *v1, const le128 *v2)
/*
* Apply the Poly1305 ε-∆U hash function to (bulk length, tweak) and save the
- * result to rctx->header_hash. This is the calculation
+ * result to @out. This is the calculation
*
* H_T ← Poly1305_{K_T}(bin_{128}(|L|) || T)
*
@@ -216,11 +203,10 @@ static inline void le128_sub(le128 *r, const le128 *v1, const le128 *v2)
* inputs only) taken over the left-hand part (the "bulk") of the message, to
* give the overall Adiantum hash of the (tweak, left-hand part) pair.
*/
-static void adiantum_hash_header(struct skcipher_request *req)
+static void adiantum_hash_header(struct skcipher_request *req, le128 *out)
{
struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
const struct adiantum_tfm_ctx *tctx = crypto_skcipher_ctx(tfm);
- struct adiantum_request_ctx *rctx = skcipher_request_ctx(req);
const unsigned int bulk_len = req->cryptlen - BLOCKCIPHER_BLOCK_SIZE;
struct {
__le64 message_bits;
@@ -240,99 +226,143 @@ static void adiantum_hash_header(struct skcipher_request *req)
poly1305_core_blocks(&state, &tctx->header_hash_key, req->iv,
TWEAK_SIZE / POLY1305_BLOCK_SIZE, 1);
- poly1305_core_emit(&state, NULL, &rctx->header_hash);
+ poly1305_core_emit(&state, NULL, out);
}
-/* Hash the left-hand part (the "bulk") of the message using NHPoly1305 */
-static int adiantum_hash_message(struct skcipher_request *req,
- struct scatterlist *sgl, unsigned int nents,
- le128 *digest)
+/* Pass the next NH hash value through Poly1305 */
+static void process_nh_hash_value(struct nhpoly1305_ctx *ctx,
+ const struct adiantum_tfm_ctx *key)
{
- struct adiantum_request_ctx *rctx = skcipher_request_ctx(req);
- const unsigned int bulk_len = req->cryptlen - BLOCKCIPHER_BLOCK_SIZE;
- struct shash_desc *hash_desc = &rctx->u.hash_desc;
- struct sg_mapping_iter miter;
- unsigned int i, n;
- int err;
+ static_assert(NH_HASH_BYTES % POLY1305_BLOCK_SIZE == 0);
- err = crypto_shash_init(hash_desc);
- if (err)
- return err;
+ poly1305_core_blocks(&ctx->poly_state, &key->msg_poly_key, ctx->nh_hash,
+ NH_HASH_BYTES / POLY1305_BLOCK_SIZE, 1);
+}
- sg_miter_start(&miter, sgl, nents, SG_MITER_FROM_SG | SG_MITER_ATOMIC);
- for (i = 0; i < bulk_len; i += n) {
- sg_miter_next(&miter);
- n = min_t(unsigned int, miter.length, bulk_len - i);
- err = crypto_shash_update(hash_desc, miter.addr, n);
- if (err)
- break;
- }
- sg_miter_stop(&miter);
- if (err)
- return err;
+/*
+ * Feed the next portion of the message data, as a whole number of 16-byte
+ * "NH message units", through NH and Poly1305. Each NH hash is taken over
+ * 1024 bytes, except possibly the final one which is taken over a multiple of
+ * 16 bytes up to 1024. Also, in the case where data is passed in misaligned
+ * chunks, we combine partial hashes; the end result is the same either way.
+ */
+static void nhpoly1305_units(struct nhpoly1305_ctx *ctx,
+ const struct adiantum_tfm_ctx *key,
+ const u8 *data, size_t len)
+{
+ do {
+ unsigned int bytes;
+
+ if (ctx->nh_remaining == 0) {
+ /* Starting a new NH message */
+ bytes = min(len, NH_MESSAGE_BYTES);
+ nh(key->nh_key, data, bytes, ctx->nh_hash);
+ ctx->nh_remaining = NH_MESSAGE_BYTES - bytes;
+ } else {
+ /* Continuing a previous NH message */
+ __le64 tmp_hash[NH_NUM_PASSES];
+ unsigned int pos;
+
+ pos = NH_MESSAGE_BYTES - ctx->nh_remaining;
+ bytes = min(len, ctx->nh_remaining);
+ nh(&key->nh_key[pos / 4], data, bytes, tmp_hash);
+ for (int i = 0; i < NH_NUM_PASSES; i++)
+ le64_add_cpu(&ctx->nh_hash[i],
+ le64_to_cpu(tmp_hash[i]));
+ ctx->nh_remaining -= bytes;
+ }
+ if (ctx->nh_remaining == 0)
+ process_nh_hash_value(ctx, key);
+ data += bytes;
+ len -= bytes;
+ } while (len);
+}
- return crypto_shash_final(hash_desc, (u8 *)digest);
+static void nhpoly1305_init(struct nhpoly1305_ctx *ctx)
+{
+ poly1305_core_init(&ctx->poly_state);
+ ctx->buflen = 0;
+ ctx->nh_remaining = 0;
}
-/* Continue Adiantum encryption/decryption after the stream cipher step */
-static int adiantum_finish(struct skcipher_request *req)
+static void nhpoly1305_update(struct nhpoly1305_ctx *ctx,
+ const struct adiantum_tfm_ctx *key,
+ const u8 *data, size_t len)
{
- struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
- const struct adiantum_tfm_ctx *tctx = crypto_skcipher_ctx(tfm);
- struct adiantum_request_ctx *rctx = skcipher_request_ctx(req);
- const unsigned int bulk_len = req->cryptlen - BLOCKCIPHER_BLOCK_SIZE;
- struct scatterlist *dst = req->dst;
- const unsigned int dst_nents = sg_nents(dst);
- le128 digest;
- int err;
+ unsigned int bytes;
+
+ if (ctx->buflen) {
+ bytes = min(len, (int)NH_MESSAGE_UNIT - ctx->buflen);
+ memcpy(&ctx->buffer[ctx->buflen], data, bytes);
+ ctx->buflen += bytes;
+ if (ctx->buflen < NH_MESSAGE_UNIT)
+ return;
+ nhpoly1305_units(ctx, key, ctx->buffer, NH_MESSAGE_UNIT);
+ ctx->buflen = 0;
+ data += bytes;
+ len -= bytes;
+ }
- /* If decrypting, decrypt C_M with the block cipher to get P_M */
- if (!rctx->enc)
- crypto_cipher_decrypt_one(tctx->blockcipher, rctx->rbuf.bytes,
- rctx->rbuf.bytes);
+ if (len >= NH_MESSAGE_UNIT) {
+ bytes = round_down(len, NH_MESSAGE_UNIT);
+ nhpoly1305_units(ctx, key, data, bytes);
+ data += bytes;
+ len -= bytes;
+ }
- /*
- * Second hash step
- * enc: C_R = C_M - H_{K_H}(T, C_L)
- * dec: P_R = P_M - H_{K_H}(T, P_L)
- */
- rctx->u.hash_desc.tfm = tctx->hash;
- le128_sub(&rctx->rbuf.bignum, &rctx->rbuf.bignum, &rctx->header_hash);
- if (dst_nents == 1 && dst->offset + req->cryptlen <= PAGE_SIZE) {
- /* Fast path for single-page destination */
- struct page *page = sg_page(dst);
- void *virt = kmap_local_page(page) + dst->offset;
+ if (len) {
+ memcpy(ctx->buffer, data, len);
+ ctx->buflen = len;
+ }
+}
- err = crypto_shash_digest(&rctx->u.hash_desc, virt, bulk_len,
- (u8 *)&digest);
- if (err) {
- kunmap_local(virt);
- return err;
- }
- le128_sub(&rctx->rbuf.bignum, &rctx->rbuf.bignum, &digest);
- memcpy(virt + bulk_len, &rctx->rbuf.bignum, sizeof(le128));
- flush_dcache_page(page);
- kunmap_local(virt);
- } else {
- /* Slow path that works for any destination scatterlist */
- err = adiantum_hash_message(req, dst, dst_nents, &digest);
- if (err)
- return err;
- le128_sub(&rctx->rbuf.bignum, &rctx->rbuf.bignum, &digest);
- scatterwalk_map_and_copy(&rctx->rbuf.bignum, dst,
- bulk_len, sizeof(le128), 1);
+static void nhpoly1305_final(struct nhpoly1305_ctx *ctx,
+ const struct adiantum_tfm_ctx *key, le128 *out)
+{
+ if (ctx->buflen) {
+ memset(&ctx->buffer[ctx->buflen], 0,
+ NH_MESSAGE_UNIT - ctx->buflen);
+ nhpoly1305_units(ctx, key, ctx->buffer, NH_MESSAGE_UNIT);
}
- return 0;
+
+ if (ctx->nh_remaining)
+ process_nh_hash_value(ctx, key);
+
+ poly1305_core_emit(&ctx->poly_state, NULL, out);
}
-static void adiantum_streamcipher_done(void *data, int err)
+/*
+ * Hash the left-hand part (the "bulk") of the message as follows:
+ *
+ * H_L ← Poly1305_{K_L}(NH_{K_N}(pad_{128}(L)))
+ *
+ * See section 6.4 of the Adiantum paper. This is an ε-almost-∆-universal
+ * (ε-∆U) hash function for equal-length inputs over Z/(2^{128}Z), where the "∆"
+ * operation is addition. It hashes 1024-byte chunks of the input with the NH
+ * hash function, reducing the input length by 32x. The resulting NH hashes are
+ * evaluated as a polynomial in GF(2^{130}-5), like in the Poly1305 MAC. Note
+ * that the polynomial evaluation by itself would suffice to achieve the ε-∆U
+ * property; NH is used for performance since it's much faster than Poly1305.
+ */
+static void adiantum_hash_message(struct skcipher_request *req,
+ struct scatterlist *sgl, le128 *out)
{
- struct skcipher_request *req = data;
+ struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
+ const struct adiantum_tfm_ctx *tctx = crypto_skcipher_ctx(tfm);
+ struct adiantum_request_ctx *rctx = skcipher_request_ctx(req);
+ unsigned int len = req->cryptlen - BLOCKCIPHER_BLOCK_SIZE;
+ struct scatter_walk walk;
- if (!err)
- err = adiantum_finish(req);
+ nhpoly1305_init(&rctx->u.hash_ctx);
+ scatterwalk_start(&walk, sgl);
+ while (len) {
+ unsigned int n = scatterwalk_next(&walk, len);
- skcipher_request_complete(req, err);
+ nhpoly1305_update(&rctx->u.hash_ctx, tctx, walk.addr, n);
+ scatterwalk_done_src(&walk, n);
+ len -= n;
+ }
+ nhpoly1305_final(&rctx->u.hash_ctx, tctx, out);
}
static int adiantum_crypt(struct skcipher_request *req, bool enc)
@@ -341,55 +371,63 @@ static int adiantum_crypt(struct skcipher_request *req, bool enc)
const struct adiantum_tfm_ctx *tctx = crypto_skcipher_ctx(tfm);
struct adiantum_request_ctx *rctx = skcipher_request_ctx(req);
const unsigned int bulk_len = req->cryptlen - BLOCKCIPHER_BLOCK_SIZE;
- struct scatterlist *src = req->src;
- const unsigned int src_nents = sg_nents(src);
+ struct scatterlist *src = req->src, *dst = req->dst;
+ /*
+ * Buffer for right-hand part of data, i.e.
+ *
+ * P_L => P_M => C_M => C_R when encrypting, or
+ * C_R => C_M => P_M => P_L when decrypting.
+ *
+ * Also used to build the IV for the stream cipher.
+ */
+ union {
+ u8 bytes[XCHACHA_IV_SIZE];
+ __le32 words[XCHACHA_IV_SIZE / sizeof(__le32)];
+ le128 bignum; /* interpret as element of Z/(2^{128}Z) */
+ } rbuf;
+ le128 header_hash, msg_hash;
unsigned int stream_len;
- le128 digest;
int err;
if (req->cryptlen < BLOCKCIPHER_BLOCK_SIZE)
return -EINVAL;
- rctx->enc = enc;
-
/*
* First hash step
* enc: P_M = P_R + H_{K_H}(T, P_L)
* dec: C_M = C_R + H_{K_H}(T, C_L)
*/
- adiantum_hash_header(req);
- rctx->u.hash_desc.tfm = tctx->hash;
- if (src_nents == 1 && src->offset + req->cryptlen <= PAGE_SIZE) {
+ adiantum_hash_header(req, &header_hash);
+ if (src->length >= req->cryptlen &&
+ src->offset + req->cryptlen <= PAGE_SIZE) {
/* Fast path for single-page source */
void *virt = kmap_local_page(sg_page(src)) + src->offset;
- err = crypto_shash_digest(&rctx->u.hash_desc, virt, bulk_len,
- (u8 *)&digest);
- memcpy(&rctx->rbuf.bignum, virt + bulk_len, sizeof(le128));
+ nhpoly1305_init(&rctx->u.hash_ctx);
+ nhpoly1305_update(&rctx->u.hash_ctx, tctx, virt, bulk_len);
+ nhpoly1305_final(&rctx->u.hash_ctx, tctx, &msg_hash);
+ memcpy(&rbuf.bignum, virt + bulk_len, sizeof(le128));
kunmap_local(virt);
} else {
/* Slow path that works for any source scatterlist */
- err = adiantum_hash_message(req, src, src_nents, &digest);
- scatterwalk_map_and_copy(&rctx->rbuf.bignum, src,
- bulk_len, sizeof(le128), 0);
+ adiantum_hash_message(req, src, &msg_hash);
+ memcpy_from_sglist(&rbuf.bignum, src, bulk_len, sizeof(le128));
}
- if (err)
- return err;
- le128_add(&rctx->rbuf.bignum, &rctx->rbuf.bignum, &rctx->header_hash);
- le128_add(&rctx->rbuf.bignum, &rctx->rbuf.bignum, &digest);
+ le128_add(&rbuf.bignum, &rbuf.bignum, &header_hash);
+ le128_add(&rbuf.bignum, &rbuf.bignum, &msg_hash);
/* If encrypting, encrypt P_M with the block cipher to get C_M */
if (enc)
- crypto_cipher_encrypt_one(tctx->blockcipher, rctx->rbuf.bytes,
- rctx->rbuf.bytes);
+ crypto_cipher_encrypt_one(tctx->blockcipher, rbuf.bytes,
+ rbuf.bytes);
/* Initialize the rest of the XChaCha IV (first part is C_M) */
BUILD_BUG_ON(BLOCKCIPHER_BLOCK_SIZE != 16);
BUILD_BUG_ON(XCHACHA_IV_SIZE != 32); /* nonce || stream position */
- rctx->rbuf.words[4] = cpu_to_le32(1);
- rctx->rbuf.words[5] = 0;
- rctx->rbuf.words[6] = 0;
- rctx->rbuf.words[7] = 0;
+ rbuf.words[4] = cpu_to_le32(1);
+ rbuf.words[5] = 0;
+ rbuf.words[6] = 0;
+ rbuf.words[7] = 0;
/*
* XChaCha needs to be done on all the data except the last 16 bytes;
@@ -406,12 +444,44 @@ static int adiantum_crypt(struct skcipher_request *req, bool enc)
skcipher_request_set_tfm(&rctx->u.streamcipher_req, tctx->streamcipher);
skcipher_request_set_crypt(&rctx->u.streamcipher_req, req->src,
- req->dst, stream_len, &rctx->rbuf);
+ req->dst, stream_len, &rbuf);
skcipher_request_set_callback(&rctx->u.streamcipher_req,
- req->base.flags,
- adiantum_streamcipher_done, req);
- return crypto_skcipher_encrypt(&rctx->u.streamcipher_req) ?:
- adiantum_finish(req);
+ req->base.flags, NULL, NULL);
+ err = crypto_skcipher_encrypt(&rctx->u.streamcipher_req);
+ if (err)
+ return err;
+
+ /* If decrypting, decrypt C_M with the block cipher to get P_M */
+ if (!enc)
+ crypto_cipher_decrypt_one(tctx->blockcipher, rbuf.bytes,
+ rbuf.bytes);
+
+ /*
+ * Second hash step
+ * enc: C_R = C_M - H_{K_H}(T, C_L)
+ * dec: P_R = P_M - H_{K_H}(T, P_L)
+ */
+ le128_sub(&rbuf.bignum, &rbuf.bignum, &header_hash);
+ if (dst->length >= req->cryptlen &&
+ dst->offset + req->cryptlen <= PAGE_SIZE) {
+ /* Fast path for single-page destination */
+ struct page *page = sg_page(dst);
+ void *virt = kmap_local_page(page) + dst->offset;
+
+ nhpoly1305_init(&rctx->u.hash_ctx);
+ nhpoly1305_update(&rctx->u.hash_ctx, tctx, virt, bulk_len);
+ nhpoly1305_final(&rctx->u.hash_ctx, tctx, &msg_hash);
+ le128_sub(&rbuf.bignum, &rbuf.bignum, &msg_hash);
+ memcpy(virt + bulk_len, &rbuf.bignum, sizeof(le128));
+ flush_dcache_page(page);
+ kunmap_local(virt);
+ } else {
+ /* Slow path that works for any destination scatterlist */
+ adiantum_hash_message(req, dst, &msg_hash);
+ le128_sub(&rbuf.bignum, &rbuf.bignum, &msg_hash);
+ memcpy_to_sglist(dst, bulk_len, &rbuf.bignum, sizeof(le128));
+ }
+ return 0;
}
static int adiantum_encrypt(struct skcipher_request *req)
@@ -431,8 +501,6 @@ static int adiantum_init_tfm(struct crypto_skcipher *tfm)
struct adiantum_tfm_ctx *tctx = crypto_skcipher_ctx(tfm);
struct crypto_skcipher *streamcipher;
struct crypto_cipher *blockcipher;
- struct crypto_shash *hash;
- unsigned int subreq_size;
int err;
streamcipher = crypto_spawn_skcipher(&ictx->streamcipher_spawn);
@@ -445,32 +513,18 @@ static int adiantum_init_tfm(struct crypto_skcipher *tfm)
goto err_free_streamcipher;
}
- hash = crypto_spawn_shash(&ictx->hash_spawn);
- if (IS_ERR(hash)) {
- err = PTR_ERR(hash);
- goto err_free_blockcipher;
- }
-
tctx->streamcipher = streamcipher;
tctx->blockcipher = blockcipher;
- tctx->hash = hash;
BUILD_BUG_ON(offsetofend(struct adiantum_request_ctx, u) !=
sizeof(struct adiantum_request_ctx));
- subreq_size = max(sizeof_field(struct adiantum_request_ctx,
- u.hash_desc) +
- crypto_shash_descsize(hash),
- sizeof_field(struct adiantum_request_ctx,
- u.streamcipher_req) +
- crypto_skcipher_reqsize(streamcipher));
-
- crypto_skcipher_set_reqsize(tfm,
- offsetof(struct adiantum_request_ctx, u) +
- subreq_size);
+ crypto_skcipher_set_reqsize(
+ tfm, max(sizeof(struct adiantum_request_ctx),
+ offsetofend(struct adiantum_request_ctx,
+ u.streamcipher_req) +
+ crypto_skcipher_reqsize(streamcipher)));
return 0;
-err_free_blockcipher:
- crypto_free_cipher(blockcipher);
err_free_streamcipher:
crypto_free_skcipher(streamcipher);
return err;
@@ -482,7 +536,6 @@ static void adiantum_exit_tfm(struct crypto_skcipher *tfm)
crypto_free_skcipher(tctx->streamcipher);
crypto_free_cipher(tctx->blockcipher);
- crypto_free_shash(tctx->hash);
}
static void adiantum_free_instance(struct skcipher_instance *inst)
@@ -491,7 +544,6 @@ static void adiantum_free_instance(struct skcipher_instance *inst)
crypto_drop_skcipher(&ictx->streamcipher_spawn);
crypto_drop_cipher(&ictx->blockcipher_spawn);
- crypto_drop_shash(&ictx->hash_spawn);
kfree(inst);
}
@@ -499,9 +551,9 @@ static void adiantum_free_instance(struct skcipher_instance *inst)
* Check for a supported set of inner algorithms.
* See the comment at the beginning of this file.
*/
-static bool adiantum_supported_algorithms(struct skcipher_alg_common *streamcipher_alg,
- struct crypto_alg *blockcipher_alg,
- struct shash_alg *hash_alg)
+static bool
+adiantum_supported_algorithms(struct skcipher_alg_common *streamcipher_alg,
+ struct crypto_alg *blockcipher_alg)
{
if (strcmp(streamcipher_alg->base.cra_name, "xchacha12") != 0 &&
strcmp(streamcipher_alg->base.cra_name, "xchacha20") != 0)
@@ -513,21 +565,16 @@ static bool adiantum_supported_algorithms(struct skcipher_alg_common *streamciph
if (blockcipher_alg->cra_blocksize != BLOCKCIPHER_BLOCK_SIZE)
return false;
- if (strcmp(hash_alg->base.cra_name, "nhpoly1305") != 0)
- return false;
-
return true;
}
static int adiantum_create(struct crypto_template *tmpl, struct rtattr **tb)
{
u32 mask;
- const char *nhpoly1305_name;
struct skcipher_instance *inst;
struct adiantum_instance_ctx *ictx;
struct skcipher_alg_common *streamcipher_alg;
struct crypto_alg *blockcipher_alg;
- struct shash_alg *hash_alg;
int err;
err = crypto_check_attr_type(tb, CRYPTO_ALG_TYPE_SKCIPHER, &mask);
@@ -542,7 +589,8 @@ static int adiantum_create(struct crypto_template *tmpl, struct rtattr **tb)
/* Stream cipher, e.g. "xchacha12" */
err = crypto_grab_skcipher(&ictx->streamcipher_spawn,
skcipher_crypto_instance(inst),
- crypto_attr_alg_name(tb[1]), 0, mask);
+ crypto_attr_alg_name(tb[1]), 0,
+ mask | CRYPTO_ALG_ASYNC /* sync only */);
if (err)
goto err_free_inst;
streamcipher_alg = crypto_spawn_skcipher_alg_common(&ictx->streamcipher_spawn);
@@ -555,23 +603,21 @@ static int adiantum_create(struct crypto_template *tmpl, struct rtattr **tb)
goto err_free_inst;
blockcipher_alg = crypto_spawn_cipher_alg(&ictx->blockcipher_spawn);
- /* NHPoly1305 ε-∆U hash function */
- nhpoly1305_name = crypto_attr_alg_name(tb[3]);
- if (nhpoly1305_name == ERR_PTR(-ENOENT))
- nhpoly1305_name = "nhpoly1305";
- err = crypto_grab_shash(&ictx->hash_spawn,
- skcipher_crypto_instance(inst),
- nhpoly1305_name, 0, mask);
- if (err)
+ /*
+ * Originally there was an optional third parameter, for requesting a
+ * specific implementation of "nhpoly1305" for message hashing. This is
+ * no longer supported. The best implementation is just always used.
+ */
+ if (crypto_attr_alg_name(tb[3]) != ERR_PTR(-ENOENT)) {
+ err = -ENOENT;
goto err_free_inst;
- hash_alg = crypto_spawn_shash_alg(&ictx->hash_spawn);
+ }
/* Check the set of algorithms */
- if (!adiantum_supported_algorithms(streamcipher_alg, blockcipher_alg,
- hash_alg)) {
- pr_warn("Unsupported Adiantum instantiation: (%s,%s,%s)\n",
+ if (!adiantum_supported_algorithms(streamcipher_alg, blockcipher_alg)) {
+ pr_warn("Unsupported Adiantum instantiation: (%s,%s)\n",
streamcipher_alg->base.cra_name,
- blockcipher_alg->cra_name, hash_alg->base.cra_name);
+ blockcipher_alg->cra_name);
err = -EINVAL;
goto err_free_inst;
}
@@ -584,10 +630,8 @@ static int adiantum_create(struct crypto_template *tmpl, struct rtattr **tb)
blockcipher_alg->cra_name) >= CRYPTO_MAX_ALG_NAME)
goto err_free_inst;
if (snprintf(inst->alg.base.cra_driver_name, CRYPTO_MAX_ALG_NAME,
- "adiantum(%s,%s,%s)",
- streamcipher_alg->base.cra_driver_name,
- blockcipher_alg->cra_driver_name,
- hash_alg->base.cra_driver_name) >= CRYPTO_MAX_ALG_NAME)
+ "adiantum(%s,%s)", streamcipher_alg->base.cra_driver_name,
+ blockcipher_alg->cra_driver_name) >= CRYPTO_MAX_ALG_NAME)
goto err_free_inst;
inst->alg.base.cra_blocksize = BLOCKCIPHER_BLOCK_SIZE;
@@ -596,12 +640,12 @@ static int adiantum_create(struct crypto_template *tmpl, struct rtattr **tb)
/*
* The block cipher is only invoked once per message, so for long
* messages (e.g. sectors for disk encryption) its performance doesn't
- * matter as much as that of the stream cipher and hash function. Thus,
- * weigh the block cipher's ->cra_priority less.
+ * matter as much as that of the stream cipher. Thus, weigh the block
+ * cipher's ->cra_priority less.
*/
inst->alg.base.cra_priority = (4 * streamcipher_alg->base.cra_priority +
- 2 * hash_alg->base.cra_priority +
- blockcipher_alg->cra_priority) / 7;
+ blockcipher_alg->cra_priority) /
+ 5;
inst->alg.setkey = adiantum_setkey;
inst->alg.encrypt = adiantum_encrypt;
@@ -622,7 +666,7 @@ err_free_inst:
return err;
}
-/* adiantum(streamcipher_name, blockcipher_name [, nhpoly1305_name]) */
+/* adiantum(streamcipher_name, blockcipher_name) */
static struct crypto_template adiantum_tmpl = {
.name = "adiantum",
.create = adiantum_create,
diff --git a/crypto/aegis.h b/crypto/aegis.h
index 6ef9c174c973..ffcf8e85ea69 100644
--- a/crypto/aegis.h
+++ b/crypto/aegis.h
@@ -62,7 +62,7 @@ static __always_inline void crypto_aegis_aesenc(union aegis_block *dst,
const union aegis_block *key)
{
const u8 *s = src->bytes;
- const u32 *t = crypto_ft_tab[0];
+ const u32 *t = aes_enc_tab;
u32 d0, d1, d2, d3;
d0 = t[s[ 0]] ^ rol32(t[s[ 5]], 8) ^ rol32(t[s[10]], 16) ^ rol32(t[s[15]], 24);
diff --git a/crypto/aes.c b/crypto/aes.c
new file mode 100644
index 000000000000..ae8385df0ce5
--- /dev/null
+++ b/crypto/aes.c
@@ -0,0 +1,66 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Crypto API support for AES block cipher
+ *
+ * Copyright 2026 Google LLC
+ */
+
+#include <crypto/aes.h>
+#include <crypto/algapi.h>
+#include <linux/module.h>
+
+static_assert(__alignof__(struct aes_key) <= CRYPTO_MINALIGN);
+
+static int crypto_aes_setkey(struct crypto_tfm *tfm, const u8 *in_key,
+ unsigned int key_len)
+{
+ struct aes_key *key = crypto_tfm_ctx(tfm);
+
+ return aes_preparekey(key, in_key, key_len);
+}
+
+static void crypto_aes_encrypt(struct crypto_tfm *tfm, u8 *out, const u8 *in)
+{
+ const struct aes_key *key = crypto_tfm_ctx(tfm);
+
+ aes_encrypt(key, out, in);
+}
+
+static void crypto_aes_decrypt(struct crypto_tfm *tfm, u8 *out, const u8 *in)
+{
+ const struct aes_key *key = crypto_tfm_ctx(tfm);
+
+ aes_decrypt(key, out, in);
+}
+
+static struct crypto_alg alg = {
+ .cra_name = "aes",
+ .cra_driver_name = "aes-lib",
+ .cra_priority = 100,
+ .cra_flags = CRYPTO_ALG_TYPE_CIPHER,
+ .cra_blocksize = AES_BLOCK_SIZE,
+ .cra_ctxsize = sizeof(struct aes_key),
+ .cra_module = THIS_MODULE,
+ .cra_u = { .cipher = { .cia_min_keysize = AES_MIN_KEY_SIZE,
+ .cia_max_keysize = AES_MAX_KEY_SIZE,
+ .cia_setkey = crypto_aes_setkey,
+ .cia_encrypt = crypto_aes_encrypt,
+ .cia_decrypt = crypto_aes_decrypt } }
+};
+
+static int __init crypto_aes_mod_init(void)
+{
+ return crypto_register_alg(&alg);
+}
+module_init(crypto_aes_mod_init);
+
+static void __exit crypto_aes_mod_exit(void)
+{
+ crypto_unregister_alg(&alg);
+}
+module_exit(crypto_aes_mod_exit);
+
+MODULE_DESCRIPTION("Crypto API support for AES block cipher");
+MODULE_LICENSE("GPL");
+MODULE_ALIAS_CRYPTO("aes");
+MODULE_ALIAS_CRYPTO("aes-lib");
diff --git a/crypto/aes_generic.c b/crypto/aes_generic.c
deleted file mode 100644
index 85d2e78c8ef2..000000000000
--- a/crypto/aes_generic.c
+++ /dev/null
@@ -1,1320 +0,0 @@
-/*
- * Cryptographic API.
- *
- * AES Cipher Algorithm.
- *
- * Based on Brian Gladman's code.
- *
- * Linux developers:
- * Alexander Kjeldaas <astor@fast.no>
- * Herbert Valerio Riedel <hvr@hvrlab.org>
- * Kyle McMartin <kyle@debian.org>
- * Adam J. Richter <adam@yggdrasil.com> (conversion to 2.5 API).
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * ---------------------------------------------------------------------------
- * Copyright (c) 2002, Dr Brian Gladman <brg@gladman.me.uk>, Worcester, UK.
- * All rights reserved.
- *
- * LICENSE TERMS
- *
- * The free distribution and use of this software in both source and binary
- * form is allowed (with or without changes) provided that:
- *
- * 1. distributions of this source code include the above copyright
- * notice, this list of conditions and the following disclaimer;
- *
- * 2. distributions in binary form include the above copyright
- * notice, this list of conditions and the following disclaimer
- * in the documentation and/or other associated materials;
- *
- * 3. the copyright holder's name is not used to endorse products
- * built using this software without specific written permission.
- *
- * ALTERNATIVELY, provided that this notice is retained in full, this product
- * may be distributed under the terms of the GNU General Public License (GPL),
- * in which case the provisions of the GPL apply INSTEAD OF those given above.
- *
- * DISCLAIMER
- *
- * This software is provided 'as is' with no explicit or implied warranties
- * in respect of its properties, including, but not limited to, correctness
- * and/or fitness for purpose.
- * ---------------------------------------------------------------------------
- */
-
-#include <crypto/aes.h>
-#include <crypto/algapi.h>
-#include <linux/module.h>
-#include <linux/init.h>
-#include <linux/types.h>
-#include <linux/errno.h>
-#include <asm/byteorder.h>
-#include <linux/unaligned.h>
-
-static inline u8 byte(const u32 x, const unsigned n)
-{
- return x >> (n << 3);
-}
-
-/* cacheline-aligned to facilitate prefetching into cache */
-__visible const u32 crypto_ft_tab[4][256] ____cacheline_aligned = {
- {
- 0xa56363c6, 0x847c7cf8, 0x997777ee, 0x8d7b7bf6,
- 0x0df2f2ff, 0xbd6b6bd6, 0xb16f6fde, 0x54c5c591,
- 0x50303060, 0x03010102, 0xa96767ce, 0x7d2b2b56,
- 0x19fefee7, 0x62d7d7b5, 0xe6abab4d, 0x9a7676ec,
- 0x45caca8f, 0x9d82821f, 0x40c9c989, 0x877d7dfa,
- 0x15fafaef, 0xeb5959b2, 0xc947478e, 0x0bf0f0fb,
- 0xecadad41, 0x67d4d4b3, 0xfda2a25f, 0xeaafaf45,
- 0xbf9c9c23, 0xf7a4a453, 0x967272e4, 0x5bc0c09b,
- 0xc2b7b775, 0x1cfdfde1, 0xae93933d, 0x6a26264c,
- 0x5a36366c, 0x413f3f7e, 0x02f7f7f5, 0x4fcccc83,
- 0x5c343468, 0xf4a5a551, 0x34e5e5d1, 0x08f1f1f9,
- 0x937171e2, 0x73d8d8ab, 0x53313162, 0x3f15152a,
- 0x0c040408, 0x52c7c795, 0x65232346, 0x5ec3c39d,
- 0x28181830, 0xa1969637, 0x0f05050a, 0xb59a9a2f,
- 0x0907070e, 0x36121224, 0x9b80801b, 0x3de2e2df,
- 0x26ebebcd, 0x6927274e, 0xcdb2b27f, 0x9f7575ea,
- 0x1b090912, 0x9e83831d, 0x742c2c58, 0x2e1a1a34,
- 0x2d1b1b36, 0xb26e6edc, 0xee5a5ab4, 0xfba0a05b,
- 0xf65252a4, 0x4d3b3b76, 0x61d6d6b7, 0xceb3b37d,
- 0x7b292952, 0x3ee3e3dd, 0x712f2f5e, 0x97848413,
- 0xf55353a6, 0x68d1d1b9, 0x00000000, 0x2cededc1,
- 0x60202040, 0x1ffcfce3, 0xc8b1b179, 0xed5b5bb6,
- 0xbe6a6ad4, 0x46cbcb8d, 0xd9bebe67, 0x4b393972,
- 0xde4a4a94, 0xd44c4c98, 0xe85858b0, 0x4acfcf85,
- 0x6bd0d0bb, 0x2aefefc5, 0xe5aaaa4f, 0x16fbfbed,
- 0xc5434386, 0xd74d4d9a, 0x55333366, 0x94858511,
- 0xcf45458a, 0x10f9f9e9, 0x06020204, 0x817f7ffe,
- 0xf05050a0, 0x443c3c78, 0xba9f9f25, 0xe3a8a84b,
- 0xf35151a2, 0xfea3a35d, 0xc0404080, 0x8a8f8f05,
- 0xad92923f, 0xbc9d9d21, 0x48383870, 0x04f5f5f1,
- 0xdfbcbc63, 0xc1b6b677, 0x75dadaaf, 0x63212142,
- 0x30101020, 0x1affffe5, 0x0ef3f3fd, 0x6dd2d2bf,
- 0x4ccdcd81, 0x140c0c18, 0x35131326, 0x2fececc3,
- 0xe15f5fbe, 0xa2979735, 0xcc444488, 0x3917172e,
- 0x57c4c493, 0xf2a7a755, 0x827e7efc, 0x473d3d7a,
- 0xac6464c8, 0xe75d5dba, 0x2b191932, 0x957373e6,
- 0xa06060c0, 0x98818119, 0xd14f4f9e, 0x7fdcdca3,
- 0x66222244, 0x7e2a2a54, 0xab90903b, 0x8388880b,
- 0xca46468c, 0x29eeeec7, 0xd3b8b86b, 0x3c141428,
- 0x79dedea7, 0xe25e5ebc, 0x1d0b0b16, 0x76dbdbad,
- 0x3be0e0db, 0x56323264, 0x4e3a3a74, 0x1e0a0a14,
- 0xdb494992, 0x0a06060c, 0x6c242448, 0xe45c5cb8,
- 0x5dc2c29f, 0x6ed3d3bd, 0xefacac43, 0xa66262c4,
- 0xa8919139, 0xa4959531, 0x37e4e4d3, 0x8b7979f2,
- 0x32e7e7d5, 0x43c8c88b, 0x5937376e, 0xb76d6dda,
- 0x8c8d8d01, 0x64d5d5b1, 0xd24e4e9c, 0xe0a9a949,
- 0xb46c6cd8, 0xfa5656ac, 0x07f4f4f3, 0x25eaeacf,
- 0xaf6565ca, 0x8e7a7af4, 0xe9aeae47, 0x18080810,
- 0xd5baba6f, 0x887878f0, 0x6f25254a, 0x722e2e5c,
- 0x241c1c38, 0xf1a6a657, 0xc7b4b473, 0x51c6c697,
- 0x23e8e8cb, 0x7cdddda1, 0x9c7474e8, 0x211f1f3e,
- 0xdd4b4b96, 0xdcbdbd61, 0x868b8b0d, 0x858a8a0f,
- 0x907070e0, 0x423e3e7c, 0xc4b5b571, 0xaa6666cc,
- 0xd8484890, 0x05030306, 0x01f6f6f7, 0x120e0e1c,
- 0xa36161c2, 0x5f35356a, 0xf95757ae, 0xd0b9b969,
- 0x91868617, 0x58c1c199, 0x271d1d3a, 0xb99e9e27,
- 0x38e1e1d9, 0x13f8f8eb, 0xb398982b, 0x33111122,
- 0xbb6969d2, 0x70d9d9a9, 0x898e8e07, 0xa7949433,
- 0xb69b9b2d, 0x221e1e3c, 0x92878715, 0x20e9e9c9,
- 0x49cece87, 0xff5555aa, 0x78282850, 0x7adfdfa5,
- 0x8f8c8c03, 0xf8a1a159, 0x80898909, 0x170d0d1a,
- 0xdabfbf65, 0x31e6e6d7, 0xc6424284, 0xb86868d0,
- 0xc3414182, 0xb0999929, 0x772d2d5a, 0x110f0f1e,
- 0xcbb0b07b, 0xfc5454a8, 0xd6bbbb6d, 0x3a16162c,
- }, {
- 0x6363c6a5, 0x7c7cf884, 0x7777ee99, 0x7b7bf68d,
- 0xf2f2ff0d, 0x6b6bd6bd, 0x6f6fdeb1, 0xc5c59154,
- 0x30306050, 0x01010203, 0x6767cea9, 0x2b2b567d,
- 0xfefee719, 0xd7d7b562, 0xabab4de6, 0x7676ec9a,
- 0xcaca8f45, 0x82821f9d, 0xc9c98940, 0x7d7dfa87,
- 0xfafaef15, 0x5959b2eb, 0x47478ec9, 0xf0f0fb0b,
- 0xadad41ec, 0xd4d4b367, 0xa2a25ffd, 0xafaf45ea,
- 0x9c9c23bf, 0xa4a453f7, 0x7272e496, 0xc0c09b5b,
- 0xb7b775c2, 0xfdfde11c, 0x93933dae, 0x26264c6a,
- 0x36366c5a, 0x3f3f7e41, 0xf7f7f502, 0xcccc834f,
- 0x3434685c, 0xa5a551f4, 0xe5e5d134, 0xf1f1f908,
- 0x7171e293, 0xd8d8ab73, 0x31316253, 0x15152a3f,
- 0x0404080c, 0xc7c79552, 0x23234665, 0xc3c39d5e,
- 0x18183028, 0x969637a1, 0x05050a0f, 0x9a9a2fb5,
- 0x07070e09, 0x12122436, 0x80801b9b, 0xe2e2df3d,
- 0xebebcd26, 0x27274e69, 0xb2b27fcd, 0x7575ea9f,
- 0x0909121b, 0x83831d9e, 0x2c2c5874, 0x1a1a342e,
- 0x1b1b362d, 0x6e6edcb2, 0x5a5ab4ee, 0xa0a05bfb,
- 0x5252a4f6, 0x3b3b764d, 0xd6d6b761, 0xb3b37dce,
- 0x2929527b, 0xe3e3dd3e, 0x2f2f5e71, 0x84841397,
- 0x5353a6f5, 0xd1d1b968, 0x00000000, 0xededc12c,
- 0x20204060, 0xfcfce31f, 0xb1b179c8, 0x5b5bb6ed,
- 0x6a6ad4be, 0xcbcb8d46, 0xbebe67d9, 0x3939724b,
- 0x4a4a94de, 0x4c4c98d4, 0x5858b0e8, 0xcfcf854a,
- 0xd0d0bb6b, 0xefefc52a, 0xaaaa4fe5, 0xfbfbed16,
- 0x434386c5, 0x4d4d9ad7, 0x33336655, 0x85851194,
- 0x45458acf, 0xf9f9e910, 0x02020406, 0x7f7ffe81,
- 0x5050a0f0, 0x3c3c7844, 0x9f9f25ba, 0xa8a84be3,
- 0x5151a2f3, 0xa3a35dfe, 0x404080c0, 0x8f8f058a,
- 0x92923fad, 0x9d9d21bc, 0x38387048, 0xf5f5f104,
- 0xbcbc63df, 0xb6b677c1, 0xdadaaf75, 0x21214263,
- 0x10102030, 0xffffe51a, 0xf3f3fd0e, 0xd2d2bf6d,
- 0xcdcd814c, 0x0c0c1814, 0x13132635, 0xececc32f,
- 0x5f5fbee1, 0x979735a2, 0x444488cc, 0x17172e39,
- 0xc4c49357, 0xa7a755f2, 0x7e7efc82, 0x3d3d7a47,
- 0x6464c8ac, 0x5d5dbae7, 0x1919322b, 0x7373e695,
- 0x6060c0a0, 0x81811998, 0x4f4f9ed1, 0xdcdca37f,
- 0x22224466, 0x2a2a547e, 0x90903bab, 0x88880b83,
- 0x46468cca, 0xeeeec729, 0xb8b86bd3, 0x1414283c,
- 0xdedea779, 0x5e5ebce2, 0x0b0b161d, 0xdbdbad76,
- 0xe0e0db3b, 0x32326456, 0x3a3a744e, 0x0a0a141e,
- 0x494992db, 0x06060c0a, 0x2424486c, 0x5c5cb8e4,
- 0xc2c29f5d, 0xd3d3bd6e, 0xacac43ef, 0x6262c4a6,
- 0x919139a8, 0x959531a4, 0xe4e4d337, 0x7979f28b,
- 0xe7e7d532, 0xc8c88b43, 0x37376e59, 0x6d6ddab7,
- 0x8d8d018c, 0xd5d5b164, 0x4e4e9cd2, 0xa9a949e0,
- 0x6c6cd8b4, 0x5656acfa, 0xf4f4f307, 0xeaeacf25,
- 0x6565caaf, 0x7a7af48e, 0xaeae47e9, 0x08081018,
- 0xbaba6fd5, 0x7878f088, 0x25254a6f, 0x2e2e5c72,
- 0x1c1c3824, 0xa6a657f1, 0xb4b473c7, 0xc6c69751,
- 0xe8e8cb23, 0xdddda17c, 0x7474e89c, 0x1f1f3e21,
- 0x4b4b96dd, 0xbdbd61dc, 0x8b8b0d86, 0x8a8a0f85,
- 0x7070e090, 0x3e3e7c42, 0xb5b571c4, 0x6666ccaa,
- 0x484890d8, 0x03030605, 0xf6f6f701, 0x0e0e1c12,
- 0x6161c2a3, 0x35356a5f, 0x5757aef9, 0xb9b969d0,
- 0x86861791, 0xc1c19958, 0x1d1d3a27, 0x9e9e27b9,
- 0xe1e1d938, 0xf8f8eb13, 0x98982bb3, 0x11112233,
- 0x6969d2bb, 0xd9d9a970, 0x8e8e0789, 0x949433a7,
- 0x9b9b2db6, 0x1e1e3c22, 0x87871592, 0xe9e9c920,
- 0xcece8749, 0x5555aaff, 0x28285078, 0xdfdfa57a,
- 0x8c8c038f, 0xa1a159f8, 0x89890980, 0x0d0d1a17,
- 0xbfbf65da, 0xe6e6d731, 0x424284c6, 0x6868d0b8,
- 0x414182c3, 0x999929b0, 0x2d2d5a77, 0x0f0f1e11,
- 0xb0b07bcb, 0x5454a8fc, 0xbbbb6dd6, 0x16162c3a,
- }, {
- 0x63c6a563, 0x7cf8847c, 0x77ee9977, 0x7bf68d7b,
- 0xf2ff0df2, 0x6bd6bd6b, 0x6fdeb16f, 0xc59154c5,
- 0x30605030, 0x01020301, 0x67cea967, 0x2b567d2b,
- 0xfee719fe, 0xd7b562d7, 0xab4de6ab, 0x76ec9a76,
- 0xca8f45ca, 0x821f9d82, 0xc98940c9, 0x7dfa877d,
- 0xfaef15fa, 0x59b2eb59, 0x478ec947, 0xf0fb0bf0,
- 0xad41ecad, 0xd4b367d4, 0xa25ffda2, 0xaf45eaaf,
- 0x9c23bf9c, 0xa453f7a4, 0x72e49672, 0xc09b5bc0,
- 0xb775c2b7, 0xfde11cfd, 0x933dae93, 0x264c6a26,
- 0x366c5a36, 0x3f7e413f, 0xf7f502f7, 0xcc834fcc,
- 0x34685c34, 0xa551f4a5, 0xe5d134e5, 0xf1f908f1,
- 0x71e29371, 0xd8ab73d8, 0x31625331, 0x152a3f15,
- 0x04080c04, 0xc79552c7, 0x23466523, 0xc39d5ec3,
- 0x18302818, 0x9637a196, 0x050a0f05, 0x9a2fb59a,
- 0x070e0907, 0x12243612, 0x801b9b80, 0xe2df3de2,
- 0xebcd26eb, 0x274e6927, 0xb27fcdb2, 0x75ea9f75,
- 0x09121b09, 0x831d9e83, 0x2c58742c, 0x1a342e1a,
- 0x1b362d1b, 0x6edcb26e, 0x5ab4ee5a, 0xa05bfba0,
- 0x52a4f652, 0x3b764d3b, 0xd6b761d6, 0xb37dceb3,
- 0x29527b29, 0xe3dd3ee3, 0x2f5e712f, 0x84139784,
- 0x53a6f553, 0xd1b968d1, 0x00000000, 0xedc12ced,
- 0x20406020, 0xfce31ffc, 0xb179c8b1, 0x5bb6ed5b,
- 0x6ad4be6a, 0xcb8d46cb, 0xbe67d9be, 0x39724b39,
- 0x4a94de4a, 0x4c98d44c, 0x58b0e858, 0xcf854acf,
- 0xd0bb6bd0, 0xefc52aef, 0xaa4fe5aa, 0xfbed16fb,
- 0x4386c543, 0x4d9ad74d, 0x33665533, 0x85119485,
- 0x458acf45, 0xf9e910f9, 0x02040602, 0x7ffe817f,
- 0x50a0f050, 0x3c78443c, 0x9f25ba9f, 0xa84be3a8,
- 0x51a2f351, 0xa35dfea3, 0x4080c040, 0x8f058a8f,
- 0x923fad92, 0x9d21bc9d, 0x38704838, 0xf5f104f5,
- 0xbc63dfbc, 0xb677c1b6, 0xdaaf75da, 0x21426321,
- 0x10203010, 0xffe51aff, 0xf3fd0ef3, 0xd2bf6dd2,
- 0xcd814ccd, 0x0c18140c, 0x13263513, 0xecc32fec,
- 0x5fbee15f, 0x9735a297, 0x4488cc44, 0x172e3917,
- 0xc49357c4, 0xa755f2a7, 0x7efc827e, 0x3d7a473d,
- 0x64c8ac64, 0x5dbae75d, 0x19322b19, 0x73e69573,
- 0x60c0a060, 0x81199881, 0x4f9ed14f, 0xdca37fdc,
- 0x22446622, 0x2a547e2a, 0x903bab90, 0x880b8388,
- 0x468cca46, 0xeec729ee, 0xb86bd3b8, 0x14283c14,
- 0xdea779de, 0x5ebce25e, 0x0b161d0b, 0xdbad76db,
- 0xe0db3be0, 0x32645632, 0x3a744e3a, 0x0a141e0a,
- 0x4992db49, 0x060c0a06, 0x24486c24, 0x5cb8e45c,
- 0xc29f5dc2, 0xd3bd6ed3, 0xac43efac, 0x62c4a662,
- 0x9139a891, 0x9531a495, 0xe4d337e4, 0x79f28b79,
- 0xe7d532e7, 0xc88b43c8, 0x376e5937, 0x6ddab76d,
- 0x8d018c8d, 0xd5b164d5, 0x4e9cd24e, 0xa949e0a9,
- 0x6cd8b46c, 0x56acfa56, 0xf4f307f4, 0xeacf25ea,
- 0x65caaf65, 0x7af48e7a, 0xae47e9ae, 0x08101808,
- 0xba6fd5ba, 0x78f08878, 0x254a6f25, 0x2e5c722e,
- 0x1c38241c, 0xa657f1a6, 0xb473c7b4, 0xc69751c6,
- 0xe8cb23e8, 0xdda17cdd, 0x74e89c74, 0x1f3e211f,
- 0x4b96dd4b, 0xbd61dcbd, 0x8b0d868b, 0x8a0f858a,
- 0x70e09070, 0x3e7c423e, 0xb571c4b5, 0x66ccaa66,
- 0x4890d848, 0x03060503, 0xf6f701f6, 0x0e1c120e,
- 0x61c2a361, 0x356a5f35, 0x57aef957, 0xb969d0b9,
- 0x86179186, 0xc19958c1, 0x1d3a271d, 0x9e27b99e,
- 0xe1d938e1, 0xf8eb13f8, 0x982bb398, 0x11223311,
- 0x69d2bb69, 0xd9a970d9, 0x8e07898e, 0x9433a794,
- 0x9b2db69b, 0x1e3c221e, 0x87159287, 0xe9c920e9,
- 0xce8749ce, 0x55aaff55, 0x28507828, 0xdfa57adf,
- 0x8c038f8c, 0xa159f8a1, 0x89098089, 0x0d1a170d,
- 0xbf65dabf, 0xe6d731e6, 0x4284c642, 0x68d0b868,
- 0x4182c341, 0x9929b099, 0x2d5a772d, 0x0f1e110f,
- 0xb07bcbb0, 0x54a8fc54, 0xbb6dd6bb, 0x162c3a16,
- }, {
- 0xc6a56363, 0xf8847c7c, 0xee997777, 0xf68d7b7b,
- 0xff0df2f2, 0xd6bd6b6b, 0xdeb16f6f, 0x9154c5c5,
- 0x60503030, 0x02030101, 0xcea96767, 0x567d2b2b,
- 0xe719fefe, 0xb562d7d7, 0x4de6abab, 0xec9a7676,
- 0x8f45caca, 0x1f9d8282, 0x8940c9c9, 0xfa877d7d,
- 0xef15fafa, 0xb2eb5959, 0x8ec94747, 0xfb0bf0f0,
- 0x41ecadad, 0xb367d4d4, 0x5ffda2a2, 0x45eaafaf,
- 0x23bf9c9c, 0x53f7a4a4, 0xe4967272, 0x9b5bc0c0,
- 0x75c2b7b7, 0xe11cfdfd, 0x3dae9393, 0x4c6a2626,
- 0x6c5a3636, 0x7e413f3f, 0xf502f7f7, 0x834fcccc,
- 0x685c3434, 0x51f4a5a5, 0xd134e5e5, 0xf908f1f1,
- 0xe2937171, 0xab73d8d8, 0x62533131, 0x2a3f1515,
- 0x080c0404, 0x9552c7c7, 0x46652323, 0x9d5ec3c3,
- 0x30281818, 0x37a19696, 0x0a0f0505, 0x2fb59a9a,
- 0x0e090707, 0x24361212, 0x1b9b8080, 0xdf3de2e2,
- 0xcd26ebeb, 0x4e692727, 0x7fcdb2b2, 0xea9f7575,
- 0x121b0909, 0x1d9e8383, 0x58742c2c, 0x342e1a1a,
- 0x362d1b1b, 0xdcb26e6e, 0xb4ee5a5a, 0x5bfba0a0,
- 0xa4f65252, 0x764d3b3b, 0xb761d6d6, 0x7dceb3b3,
- 0x527b2929, 0xdd3ee3e3, 0x5e712f2f, 0x13978484,
- 0xa6f55353, 0xb968d1d1, 0x00000000, 0xc12ceded,
- 0x40602020, 0xe31ffcfc, 0x79c8b1b1, 0xb6ed5b5b,
- 0xd4be6a6a, 0x8d46cbcb, 0x67d9bebe, 0x724b3939,
- 0x94de4a4a, 0x98d44c4c, 0xb0e85858, 0x854acfcf,
- 0xbb6bd0d0, 0xc52aefef, 0x4fe5aaaa, 0xed16fbfb,
- 0x86c54343, 0x9ad74d4d, 0x66553333, 0x11948585,
- 0x8acf4545, 0xe910f9f9, 0x04060202, 0xfe817f7f,
- 0xa0f05050, 0x78443c3c, 0x25ba9f9f, 0x4be3a8a8,
- 0xa2f35151, 0x5dfea3a3, 0x80c04040, 0x058a8f8f,
- 0x3fad9292, 0x21bc9d9d, 0x70483838, 0xf104f5f5,
- 0x63dfbcbc, 0x77c1b6b6, 0xaf75dada, 0x42632121,
- 0x20301010, 0xe51affff, 0xfd0ef3f3, 0xbf6dd2d2,
- 0x814ccdcd, 0x18140c0c, 0x26351313, 0xc32fecec,
- 0xbee15f5f, 0x35a29797, 0x88cc4444, 0x2e391717,
- 0x9357c4c4, 0x55f2a7a7, 0xfc827e7e, 0x7a473d3d,
- 0xc8ac6464, 0xbae75d5d, 0x322b1919, 0xe6957373,
- 0xc0a06060, 0x19988181, 0x9ed14f4f, 0xa37fdcdc,
- 0x44662222, 0x547e2a2a, 0x3bab9090, 0x0b838888,
- 0x8cca4646, 0xc729eeee, 0x6bd3b8b8, 0x283c1414,
- 0xa779dede, 0xbce25e5e, 0x161d0b0b, 0xad76dbdb,
- 0xdb3be0e0, 0x64563232, 0x744e3a3a, 0x141e0a0a,
- 0x92db4949, 0x0c0a0606, 0x486c2424, 0xb8e45c5c,
- 0x9f5dc2c2, 0xbd6ed3d3, 0x43efacac, 0xc4a66262,
- 0x39a89191, 0x31a49595, 0xd337e4e4, 0xf28b7979,
- 0xd532e7e7, 0x8b43c8c8, 0x6e593737, 0xdab76d6d,
- 0x018c8d8d, 0xb164d5d5, 0x9cd24e4e, 0x49e0a9a9,
- 0xd8b46c6c, 0xacfa5656, 0xf307f4f4, 0xcf25eaea,
- 0xcaaf6565, 0xf48e7a7a, 0x47e9aeae, 0x10180808,
- 0x6fd5baba, 0xf0887878, 0x4a6f2525, 0x5c722e2e,
- 0x38241c1c, 0x57f1a6a6, 0x73c7b4b4, 0x9751c6c6,
- 0xcb23e8e8, 0xa17cdddd, 0xe89c7474, 0x3e211f1f,
- 0x96dd4b4b, 0x61dcbdbd, 0x0d868b8b, 0x0f858a8a,
- 0xe0907070, 0x7c423e3e, 0x71c4b5b5, 0xccaa6666,
- 0x90d84848, 0x06050303, 0xf701f6f6, 0x1c120e0e,
- 0xc2a36161, 0x6a5f3535, 0xaef95757, 0x69d0b9b9,
- 0x17918686, 0x9958c1c1, 0x3a271d1d, 0x27b99e9e,
- 0xd938e1e1, 0xeb13f8f8, 0x2bb39898, 0x22331111,
- 0xd2bb6969, 0xa970d9d9, 0x07898e8e, 0x33a79494,
- 0x2db69b9b, 0x3c221e1e, 0x15928787, 0xc920e9e9,
- 0x8749cece, 0xaaff5555, 0x50782828, 0xa57adfdf,
- 0x038f8c8c, 0x59f8a1a1, 0x09808989, 0x1a170d0d,
- 0x65dabfbf, 0xd731e6e6, 0x84c64242, 0xd0b86868,
- 0x82c34141, 0x29b09999, 0x5a772d2d, 0x1e110f0f,
- 0x7bcbb0b0, 0xa8fc5454, 0x6dd6bbbb, 0x2c3a1616,
- }
-};
-
-static const u32 crypto_fl_tab[4][256] ____cacheline_aligned = {
- {
- 0x00000063, 0x0000007c, 0x00000077, 0x0000007b,
- 0x000000f2, 0x0000006b, 0x0000006f, 0x000000c5,
- 0x00000030, 0x00000001, 0x00000067, 0x0000002b,
- 0x000000fe, 0x000000d7, 0x000000ab, 0x00000076,
- 0x000000ca, 0x00000082, 0x000000c9, 0x0000007d,
- 0x000000fa, 0x00000059, 0x00000047, 0x000000f0,
- 0x000000ad, 0x000000d4, 0x000000a2, 0x000000af,
- 0x0000009c, 0x000000a4, 0x00000072, 0x000000c0,
- 0x000000b7, 0x000000fd, 0x00000093, 0x00000026,
- 0x00000036, 0x0000003f, 0x000000f7, 0x000000cc,
- 0x00000034, 0x000000a5, 0x000000e5, 0x000000f1,
- 0x00000071, 0x000000d8, 0x00000031, 0x00000015,
- 0x00000004, 0x000000c7, 0x00000023, 0x000000c3,
- 0x00000018, 0x00000096, 0x00000005, 0x0000009a,
- 0x00000007, 0x00000012, 0x00000080, 0x000000e2,
- 0x000000eb, 0x00000027, 0x000000b2, 0x00000075,
- 0x00000009, 0x00000083, 0x0000002c, 0x0000001a,
- 0x0000001b, 0x0000006e, 0x0000005a, 0x000000a0,
- 0x00000052, 0x0000003b, 0x000000d6, 0x000000b3,
- 0x00000029, 0x000000e3, 0x0000002f, 0x00000084,
- 0x00000053, 0x000000d1, 0x00000000, 0x000000ed,
- 0x00000020, 0x000000fc, 0x000000b1, 0x0000005b,
- 0x0000006a, 0x000000cb, 0x000000be, 0x00000039,
- 0x0000004a, 0x0000004c, 0x00000058, 0x000000cf,
- 0x000000d0, 0x000000ef, 0x000000aa, 0x000000fb,
- 0x00000043, 0x0000004d, 0x00000033, 0x00000085,
- 0x00000045, 0x000000f9, 0x00000002, 0x0000007f,
- 0x00000050, 0x0000003c, 0x0000009f, 0x000000a8,
- 0x00000051, 0x000000a3, 0x00000040, 0x0000008f,
- 0x00000092, 0x0000009d, 0x00000038, 0x000000f5,
- 0x000000bc, 0x000000b6, 0x000000da, 0x00000021,
- 0x00000010, 0x000000ff, 0x000000f3, 0x000000d2,
- 0x000000cd, 0x0000000c, 0x00000013, 0x000000ec,
- 0x0000005f, 0x00000097, 0x00000044, 0x00000017,
- 0x000000c4, 0x000000a7, 0x0000007e, 0x0000003d,
- 0x00000064, 0x0000005d, 0x00000019, 0x00000073,
- 0x00000060, 0x00000081, 0x0000004f, 0x000000dc,
- 0x00000022, 0x0000002a, 0x00000090, 0x00000088,
- 0x00000046, 0x000000ee, 0x000000b8, 0x00000014,
- 0x000000de, 0x0000005e, 0x0000000b, 0x000000db,
- 0x000000e0, 0x00000032, 0x0000003a, 0x0000000a,
- 0x00000049, 0x00000006, 0x00000024, 0x0000005c,
- 0x000000c2, 0x000000d3, 0x000000ac, 0x00000062,
- 0x00000091, 0x00000095, 0x000000e4, 0x00000079,
- 0x000000e7, 0x000000c8, 0x00000037, 0x0000006d,
- 0x0000008d, 0x000000d5, 0x0000004e, 0x000000a9,
- 0x0000006c, 0x00000056, 0x000000f4, 0x000000ea,
- 0x00000065, 0x0000007a, 0x000000ae, 0x00000008,
- 0x000000ba, 0x00000078, 0x00000025, 0x0000002e,
- 0x0000001c, 0x000000a6, 0x000000b4, 0x000000c6,
- 0x000000e8, 0x000000dd, 0x00000074, 0x0000001f,
- 0x0000004b, 0x000000bd, 0x0000008b, 0x0000008a,
- 0x00000070, 0x0000003e, 0x000000b5, 0x00000066,
- 0x00000048, 0x00000003, 0x000000f6, 0x0000000e,
- 0x00000061, 0x00000035, 0x00000057, 0x000000b9,
- 0x00000086, 0x000000c1, 0x0000001d, 0x0000009e,
- 0x000000e1, 0x000000f8, 0x00000098, 0x00000011,
- 0x00000069, 0x000000d9, 0x0000008e, 0x00000094,
- 0x0000009b, 0x0000001e, 0x00000087, 0x000000e9,
- 0x000000ce, 0x00000055, 0x00000028, 0x000000df,
- 0x0000008c, 0x000000a1, 0x00000089, 0x0000000d,
- 0x000000bf, 0x000000e6, 0x00000042, 0x00000068,
- 0x00000041, 0x00000099, 0x0000002d, 0x0000000f,
- 0x000000b0, 0x00000054, 0x000000bb, 0x00000016,
- }, {
- 0x00006300, 0x00007c00, 0x00007700, 0x00007b00,
- 0x0000f200, 0x00006b00, 0x00006f00, 0x0000c500,
- 0x00003000, 0x00000100, 0x00006700, 0x00002b00,
- 0x0000fe00, 0x0000d700, 0x0000ab00, 0x00007600,
- 0x0000ca00, 0x00008200, 0x0000c900, 0x00007d00,
- 0x0000fa00, 0x00005900, 0x00004700, 0x0000f000,
- 0x0000ad00, 0x0000d400, 0x0000a200, 0x0000af00,
- 0x00009c00, 0x0000a400, 0x00007200, 0x0000c000,
- 0x0000b700, 0x0000fd00, 0x00009300, 0x00002600,
- 0x00003600, 0x00003f00, 0x0000f700, 0x0000cc00,
- 0x00003400, 0x0000a500, 0x0000e500, 0x0000f100,
- 0x00007100, 0x0000d800, 0x00003100, 0x00001500,
- 0x00000400, 0x0000c700, 0x00002300, 0x0000c300,
- 0x00001800, 0x00009600, 0x00000500, 0x00009a00,
- 0x00000700, 0x00001200, 0x00008000, 0x0000e200,
- 0x0000eb00, 0x00002700, 0x0000b200, 0x00007500,
- 0x00000900, 0x00008300, 0x00002c00, 0x00001a00,
- 0x00001b00, 0x00006e00, 0x00005a00, 0x0000a000,
- 0x00005200, 0x00003b00, 0x0000d600, 0x0000b300,
- 0x00002900, 0x0000e300, 0x00002f00, 0x00008400,
- 0x00005300, 0x0000d100, 0x00000000, 0x0000ed00,
- 0x00002000, 0x0000fc00, 0x0000b100, 0x00005b00,
- 0x00006a00, 0x0000cb00, 0x0000be00, 0x00003900,
- 0x00004a00, 0x00004c00, 0x00005800, 0x0000cf00,
- 0x0000d000, 0x0000ef00, 0x0000aa00, 0x0000fb00,
- 0x00004300, 0x00004d00, 0x00003300, 0x00008500,
- 0x00004500, 0x0000f900, 0x00000200, 0x00007f00,
- 0x00005000, 0x00003c00, 0x00009f00, 0x0000a800,
- 0x00005100, 0x0000a300, 0x00004000, 0x00008f00,
- 0x00009200, 0x00009d00, 0x00003800, 0x0000f500,
- 0x0000bc00, 0x0000b600, 0x0000da00, 0x00002100,
- 0x00001000, 0x0000ff00, 0x0000f300, 0x0000d200,
- 0x0000cd00, 0x00000c00, 0x00001300, 0x0000ec00,
- 0x00005f00, 0x00009700, 0x00004400, 0x00001700,
- 0x0000c400, 0x0000a700, 0x00007e00, 0x00003d00,
- 0x00006400, 0x00005d00, 0x00001900, 0x00007300,
- 0x00006000, 0x00008100, 0x00004f00, 0x0000dc00,
- 0x00002200, 0x00002a00, 0x00009000, 0x00008800,
- 0x00004600, 0x0000ee00, 0x0000b800, 0x00001400,
- 0x0000de00, 0x00005e00, 0x00000b00, 0x0000db00,
- 0x0000e000, 0x00003200, 0x00003a00, 0x00000a00,
- 0x00004900, 0x00000600, 0x00002400, 0x00005c00,
- 0x0000c200, 0x0000d300, 0x0000ac00, 0x00006200,
- 0x00009100, 0x00009500, 0x0000e400, 0x00007900,
- 0x0000e700, 0x0000c800, 0x00003700, 0x00006d00,
- 0x00008d00, 0x0000d500, 0x00004e00, 0x0000a900,
- 0x00006c00, 0x00005600, 0x0000f400, 0x0000ea00,
- 0x00006500, 0x00007a00, 0x0000ae00, 0x00000800,
- 0x0000ba00, 0x00007800, 0x00002500, 0x00002e00,
- 0x00001c00, 0x0000a600, 0x0000b400, 0x0000c600,
- 0x0000e800, 0x0000dd00, 0x00007400, 0x00001f00,
- 0x00004b00, 0x0000bd00, 0x00008b00, 0x00008a00,
- 0x00007000, 0x00003e00, 0x0000b500, 0x00006600,
- 0x00004800, 0x00000300, 0x0000f600, 0x00000e00,
- 0x00006100, 0x00003500, 0x00005700, 0x0000b900,
- 0x00008600, 0x0000c100, 0x00001d00, 0x00009e00,
- 0x0000e100, 0x0000f800, 0x00009800, 0x00001100,
- 0x00006900, 0x0000d900, 0x00008e00, 0x00009400,
- 0x00009b00, 0x00001e00, 0x00008700, 0x0000e900,
- 0x0000ce00, 0x00005500, 0x00002800, 0x0000df00,
- 0x00008c00, 0x0000a100, 0x00008900, 0x00000d00,
- 0x0000bf00, 0x0000e600, 0x00004200, 0x00006800,
- 0x00004100, 0x00009900, 0x00002d00, 0x00000f00,
- 0x0000b000, 0x00005400, 0x0000bb00, 0x00001600,
- }, {
- 0x00630000, 0x007c0000, 0x00770000, 0x007b0000,
- 0x00f20000, 0x006b0000, 0x006f0000, 0x00c50000,
- 0x00300000, 0x00010000, 0x00670000, 0x002b0000,
- 0x00fe0000, 0x00d70000, 0x00ab0000, 0x00760000,
- 0x00ca0000, 0x00820000, 0x00c90000, 0x007d0000,
- 0x00fa0000, 0x00590000, 0x00470000, 0x00f00000,
- 0x00ad0000, 0x00d40000, 0x00a20000, 0x00af0000,
- 0x009c0000, 0x00a40000, 0x00720000, 0x00c00000,
- 0x00b70000, 0x00fd0000, 0x00930000, 0x00260000,
- 0x00360000, 0x003f0000, 0x00f70000, 0x00cc0000,
- 0x00340000, 0x00a50000, 0x00e50000, 0x00f10000,
- 0x00710000, 0x00d80000, 0x00310000, 0x00150000,
- 0x00040000, 0x00c70000, 0x00230000, 0x00c30000,
- 0x00180000, 0x00960000, 0x00050000, 0x009a0000,
- 0x00070000, 0x00120000, 0x00800000, 0x00e20000,
- 0x00eb0000, 0x00270000, 0x00b20000, 0x00750000,
- 0x00090000, 0x00830000, 0x002c0000, 0x001a0000,
- 0x001b0000, 0x006e0000, 0x005a0000, 0x00a00000,
- 0x00520000, 0x003b0000, 0x00d60000, 0x00b30000,
- 0x00290000, 0x00e30000, 0x002f0000, 0x00840000,
- 0x00530000, 0x00d10000, 0x00000000, 0x00ed0000,
- 0x00200000, 0x00fc0000, 0x00b10000, 0x005b0000,
- 0x006a0000, 0x00cb0000, 0x00be0000, 0x00390000,
- 0x004a0000, 0x004c0000, 0x00580000, 0x00cf0000,
- 0x00d00000, 0x00ef0000, 0x00aa0000, 0x00fb0000,
- 0x00430000, 0x004d0000, 0x00330000, 0x00850000,
- 0x00450000, 0x00f90000, 0x00020000, 0x007f0000,
- 0x00500000, 0x003c0000, 0x009f0000, 0x00a80000,
- 0x00510000, 0x00a30000, 0x00400000, 0x008f0000,
- 0x00920000, 0x009d0000, 0x00380000, 0x00f50000,
- 0x00bc0000, 0x00b60000, 0x00da0000, 0x00210000,
- 0x00100000, 0x00ff0000, 0x00f30000, 0x00d20000,
- 0x00cd0000, 0x000c0000, 0x00130000, 0x00ec0000,
- 0x005f0000, 0x00970000, 0x00440000, 0x00170000,
- 0x00c40000, 0x00a70000, 0x007e0000, 0x003d0000,
- 0x00640000, 0x005d0000, 0x00190000, 0x00730000,
- 0x00600000, 0x00810000, 0x004f0000, 0x00dc0000,
- 0x00220000, 0x002a0000, 0x00900000, 0x00880000,
- 0x00460000, 0x00ee0000, 0x00b80000, 0x00140000,
- 0x00de0000, 0x005e0000, 0x000b0000, 0x00db0000,
- 0x00e00000, 0x00320000, 0x003a0000, 0x000a0000,
- 0x00490000, 0x00060000, 0x00240000, 0x005c0000,
- 0x00c20000, 0x00d30000, 0x00ac0000, 0x00620000,
- 0x00910000, 0x00950000, 0x00e40000, 0x00790000,
- 0x00e70000, 0x00c80000, 0x00370000, 0x006d0000,
- 0x008d0000, 0x00d50000, 0x004e0000, 0x00a90000,
- 0x006c0000, 0x00560000, 0x00f40000, 0x00ea0000,
- 0x00650000, 0x007a0000, 0x00ae0000, 0x00080000,
- 0x00ba0000, 0x00780000, 0x00250000, 0x002e0000,
- 0x001c0000, 0x00a60000, 0x00b40000, 0x00c60000,
- 0x00e80000, 0x00dd0000, 0x00740000, 0x001f0000,
- 0x004b0000, 0x00bd0000, 0x008b0000, 0x008a0000,
- 0x00700000, 0x003e0000, 0x00b50000, 0x00660000,
- 0x00480000, 0x00030000, 0x00f60000, 0x000e0000,
- 0x00610000, 0x00350000, 0x00570000, 0x00b90000,
- 0x00860000, 0x00c10000, 0x001d0000, 0x009e0000,
- 0x00e10000, 0x00f80000, 0x00980000, 0x00110000,
- 0x00690000, 0x00d90000, 0x008e0000, 0x00940000,
- 0x009b0000, 0x001e0000, 0x00870000, 0x00e90000,
- 0x00ce0000, 0x00550000, 0x00280000, 0x00df0000,
- 0x008c0000, 0x00a10000, 0x00890000, 0x000d0000,
- 0x00bf0000, 0x00e60000, 0x00420000, 0x00680000,
- 0x00410000, 0x00990000, 0x002d0000, 0x000f0000,
- 0x00b00000, 0x00540000, 0x00bb0000, 0x00160000,
- }, {
- 0x63000000, 0x7c000000, 0x77000000, 0x7b000000,
- 0xf2000000, 0x6b000000, 0x6f000000, 0xc5000000,
- 0x30000000, 0x01000000, 0x67000000, 0x2b000000,
- 0xfe000000, 0xd7000000, 0xab000000, 0x76000000,
- 0xca000000, 0x82000000, 0xc9000000, 0x7d000000,
- 0xfa000000, 0x59000000, 0x47000000, 0xf0000000,
- 0xad000000, 0xd4000000, 0xa2000000, 0xaf000000,
- 0x9c000000, 0xa4000000, 0x72000000, 0xc0000000,
- 0xb7000000, 0xfd000000, 0x93000000, 0x26000000,
- 0x36000000, 0x3f000000, 0xf7000000, 0xcc000000,
- 0x34000000, 0xa5000000, 0xe5000000, 0xf1000000,
- 0x71000000, 0xd8000000, 0x31000000, 0x15000000,
- 0x04000000, 0xc7000000, 0x23000000, 0xc3000000,
- 0x18000000, 0x96000000, 0x05000000, 0x9a000000,
- 0x07000000, 0x12000000, 0x80000000, 0xe2000000,
- 0xeb000000, 0x27000000, 0xb2000000, 0x75000000,
- 0x09000000, 0x83000000, 0x2c000000, 0x1a000000,
- 0x1b000000, 0x6e000000, 0x5a000000, 0xa0000000,
- 0x52000000, 0x3b000000, 0xd6000000, 0xb3000000,
- 0x29000000, 0xe3000000, 0x2f000000, 0x84000000,
- 0x53000000, 0xd1000000, 0x00000000, 0xed000000,
- 0x20000000, 0xfc000000, 0xb1000000, 0x5b000000,
- 0x6a000000, 0xcb000000, 0xbe000000, 0x39000000,
- 0x4a000000, 0x4c000000, 0x58000000, 0xcf000000,
- 0xd0000000, 0xef000000, 0xaa000000, 0xfb000000,
- 0x43000000, 0x4d000000, 0x33000000, 0x85000000,
- 0x45000000, 0xf9000000, 0x02000000, 0x7f000000,
- 0x50000000, 0x3c000000, 0x9f000000, 0xa8000000,
- 0x51000000, 0xa3000000, 0x40000000, 0x8f000000,
- 0x92000000, 0x9d000000, 0x38000000, 0xf5000000,
- 0xbc000000, 0xb6000000, 0xda000000, 0x21000000,
- 0x10000000, 0xff000000, 0xf3000000, 0xd2000000,
- 0xcd000000, 0x0c000000, 0x13000000, 0xec000000,
- 0x5f000000, 0x97000000, 0x44000000, 0x17000000,
- 0xc4000000, 0xa7000000, 0x7e000000, 0x3d000000,
- 0x64000000, 0x5d000000, 0x19000000, 0x73000000,
- 0x60000000, 0x81000000, 0x4f000000, 0xdc000000,
- 0x22000000, 0x2a000000, 0x90000000, 0x88000000,
- 0x46000000, 0xee000000, 0xb8000000, 0x14000000,
- 0xde000000, 0x5e000000, 0x0b000000, 0xdb000000,
- 0xe0000000, 0x32000000, 0x3a000000, 0x0a000000,
- 0x49000000, 0x06000000, 0x24000000, 0x5c000000,
- 0xc2000000, 0xd3000000, 0xac000000, 0x62000000,
- 0x91000000, 0x95000000, 0xe4000000, 0x79000000,
- 0xe7000000, 0xc8000000, 0x37000000, 0x6d000000,
- 0x8d000000, 0xd5000000, 0x4e000000, 0xa9000000,
- 0x6c000000, 0x56000000, 0xf4000000, 0xea000000,
- 0x65000000, 0x7a000000, 0xae000000, 0x08000000,
- 0xba000000, 0x78000000, 0x25000000, 0x2e000000,
- 0x1c000000, 0xa6000000, 0xb4000000, 0xc6000000,
- 0xe8000000, 0xdd000000, 0x74000000, 0x1f000000,
- 0x4b000000, 0xbd000000, 0x8b000000, 0x8a000000,
- 0x70000000, 0x3e000000, 0xb5000000, 0x66000000,
- 0x48000000, 0x03000000, 0xf6000000, 0x0e000000,
- 0x61000000, 0x35000000, 0x57000000, 0xb9000000,
- 0x86000000, 0xc1000000, 0x1d000000, 0x9e000000,
- 0xe1000000, 0xf8000000, 0x98000000, 0x11000000,
- 0x69000000, 0xd9000000, 0x8e000000, 0x94000000,
- 0x9b000000, 0x1e000000, 0x87000000, 0xe9000000,
- 0xce000000, 0x55000000, 0x28000000, 0xdf000000,
- 0x8c000000, 0xa1000000, 0x89000000, 0x0d000000,
- 0xbf000000, 0xe6000000, 0x42000000, 0x68000000,
- 0x41000000, 0x99000000, 0x2d000000, 0x0f000000,
- 0xb0000000, 0x54000000, 0xbb000000, 0x16000000,
- }
-};
-
-__visible const u32 crypto_it_tab[4][256] ____cacheline_aligned = {
- {
- 0x50a7f451, 0x5365417e, 0xc3a4171a, 0x965e273a,
- 0xcb6bab3b, 0xf1459d1f, 0xab58faac, 0x9303e34b,
- 0x55fa3020, 0xf66d76ad, 0x9176cc88, 0x254c02f5,
- 0xfcd7e54f, 0xd7cb2ac5, 0x80443526, 0x8fa362b5,
- 0x495ab1de, 0x671bba25, 0x980eea45, 0xe1c0fe5d,
- 0x02752fc3, 0x12f04c81, 0xa397468d, 0xc6f9d36b,
- 0xe75f8f03, 0x959c9215, 0xeb7a6dbf, 0xda595295,
- 0x2d83bed4, 0xd3217458, 0x2969e049, 0x44c8c98e,
- 0x6a89c275, 0x78798ef4, 0x6b3e5899, 0xdd71b927,
- 0xb64fe1be, 0x17ad88f0, 0x66ac20c9, 0xb43ace7d,
- 0x184adf63, 0x82311ae5, 0x60335197, 0x457f5362,
- 0xe07764b1, 0x84ae6bbb, 0x1ca081fe, 0x942b08f9,
- 0x58684870, 0x19fd458f, 0x876cde94, 0xb7f87b52,
- 0x23d373ab, 0xe2024b72, 0x578f1fe3, 0x2aab5566,
- 0x0728ebb2, 0x03c2b52f, 0x9a7bc586, 0xa50837d3,
- 0xf2872830, 0xb2a5bf23, 0xba6a0302, 0x5c8216ed,
- 0x2b1ccf8a, 0x92b479a7, 0xf0f207f3, 0xa1e2694e,
- 0xcdf4da65, 0xd5be0506, 0x1f6234d1, 0x8afea6c4,
- 0x9d532e34, 0xa055f3a2, 0x32e18a05, 0x75ebf6a4,
- 0x39ec830b, 0xaaef6040, 0x069f715e, 0x51106ebd,
- 0xf98a213e, 0x3d06dd96, 0xae053edd, 0x46bde64d,
- 0xb58d5491, 0x055dc471, 0x6fd40604, 0xff155060,
- 0x24fb9819, 0x97e9bdd6, 0xcc434089, 0x779ed967,
- 0xbd42e8b0, 0x888b8907, 0x385b19e7, 0xdbeec879,
- 0x470a7ca1, 0xe90f427c, 0xc91e84f8, 0x00000000,
- 0x83868009, 0x48ed2b32, 0xac70111e, 0x4e725a6c,
- 0xfbff0efd, 0x5638850f, 0x1ed5ae3d, 0x27392d36,
- 0x64d90f0a, 0x21a65c68, 0xd1545b9b, 0x3a2e3624,
- 0xb1670a0c, 0x0fe75793, 0xd296eeb4, 0x9e919b1b,
- 0x4fc5c080, 0xa220dc61, 0x694b775a, 0x161a121c,
- 0x0aba93e2, 0xe52aa0c0, 0x43e0223c, 0x1d171b12,
- 0x0b0d090e, 0xadc78bf2, 0xb9a8b62d, 0xc8a91e14,
- 0x8519f157, 0x4c0775af, 0xbbdd99ee, 0xfd607fa3,
- 0x9f2601f7, 0xbcf5725c, 0xc53b6644, 0x347efb5b,
- 0x7629438b, 0xdcc623cb, 0x68fcedb6, 0x63f1e4b8,
- 0xcadc31d7, 0x10856342, 0x40229713, 0x2011c684,
- 0x7d244a85, 0xf83dbbd2, 0x1132f9ae, 0x6da129c7,
- 0x4b2f9e1d, 0xf330b2dc, 0xec52860d, 0xd0e3c177,
- 0x6c16b32b, 0x99b970a9, 0xfa489411, 0x2264e947,
- 0xc48cfca8, 0x1a3ff0a0, 0xd82c7d56, 0xef903322,
- 0xc74e4987, 0xc1d138d9, 0xfea2ca8c, 0x360bd498,
- 0xcf81f5a6, 0x28de7aa5, 0x268eb7da, 0xa4bfad3f,
- 0xe49d3a2c, 0x0d927850, 0x9bcc5f6a, 0x62467e54,
- 0xc2138df6, 0xe8b8d890, 0x5ef7392e, 0xf5afc382,
- 0xbe805d9f, 0x7c93d069, 0xa92dd56f, 0xb31225cf,
- 0x3b99acc8, 0xa77d1810, 0x6e639ce8, 0x7bbb3bdb,
- 0x097826cd, 0xf418596e, 0x01b79aec, 0xa89a4f83,
- 0x656e95e6, 0x7ee6ffaa, 0x08cfbc21, 0xe6e815ef,
- 0xd99be7ba, 0xce366f4a, 0xd4099fea, 0xd67cb029,
- 0xafb2a431, 0x31233f2a, 0x3094a5c6, 0xc066a235,
- 0x37bc4e74, 0xa6ca82fc, 0xb0d090e0, 0x15d8a733,
- 0x4a9804f1, 0xf7daec41, 0x0e50cd7f, 0x2ff69117,
- 0x8dd64d76, 0x4db0ef43, 0x544daacc, 0xdf0496e4,
- 0xe3b5d19e, 0x1b886a4c, 0xb81f2cc1, 0x7f516546,
- 0x04ea5e9d, 0x5d358c01, 0x737487fa, 0x2e410bfb,
- 0x5a1d67b3, 0x52d2db92, 0x335610e9, 0x1347d66d,
- 0x8c61d79a, 0x7a0ca137, 0x8e14f859, 0x893c13eb,
- 0xee27a9ce, 0x35c961b7, 0xede51ce1, 0x3cb1477a,
- 0x59dfd29c, 0x3f73f255, 0x79ce1418, 0xbf37c773,
- 0xeacdf753, 0x5baafd5f, 0x146f3ddf, 0x86db4478,
- 0x81f3afca, 0x3ec468b9, 0x2c342438, 0x5f40a3c2,
- 0x72c31d16, 0x0c25e2bc, 0x8b493c28, 0x41950dff,
- 0x7101a839, 0xdeb30c08, 0x9ce4b4d8, 0x90c15664,
- 0x6184cb7b, 0x70b632d5, 0x745c6c48, 0x4257b8d0,
- }, {
- 0xa7f45150, 0x65417e53, 0xa4171ac3, 0x5e273a96,
- 0x6bab3bcb, 0x459d1ff1, 0x58faacab, 0x03e34b93,
- 0xfa302055, 0x6d76adf6, 0x76cc8891, 0x4c02f525,
- 0xd7e54ffc, 0xcb2ac5d7, 0x44352680, 0xa362b58f,
- 0x5ab1de49, 0x1bba2567, 0x0eea4598, 0xc0fe5de1,
- 0x752fc302, 0xf04c8112, 0x97468da3, 0xf9d36bc6,
- 0x5f8f03e7, 0x9c921595, 0x7a6dbfeb, 0x595295da,
- 0x83bed42d, 0x217458d3, 0x69e04929, 0xc8c98e44,
- 0x89c2756a, 0x798ef478, 0x3e58996b, 0x71b927dd,
- 0x4fe1beb6, 0xad88f017, 0xac20c966, 0x3ace7db4,
- 0x4adf6318, 0x311ae582, 0x33519760, 0x7f536245,
- 0x7764b1e0, 0xae6bbb84, 0xa081fe1c, 0x2b08f994,
- 0x68487058, 0xfd458f19, 0x6cde9487, 0xf87b52b7,
- 0xd373ab23, 0x024b72e2, 0x8f1fe357, 0xab55662a,
- 0x28ebb207, 0xc2b52f03, 0x7bc5869a, 0x0837d3a5,
- 0x872830f2, 0xa5bf23b2, 0x6a0302ba, 0x8216ed5c,
- 0x1ccf8a2b, 0xb479a792, 0xf207f3f0, 0xe2694ea1,
- 0xf4da65cd, 0xbe0506d5, 0x6234d11f, 0xfea6c48a,
- 0x532e349d, 0x55f3a2a0, 0xe18a0532, 0xebf6a475,
- 0xec830b39, 0xef6040aa, 0x9f715e06, 0x106ebd51,
- 0x8a213ef9, 0x06dd963d, 0x053eddae, 0xbde64d46,
- 0x8d5491b5, 0x5dc47105, 0xd406046f, 0x155060ff,
- 0xfb981924, 0xe9bdd697, 0x434089cc, 0x9ed96777,
- 0x42e8b0bd, 0x8b890788, 0x5b19e738, 0xeec879db,
- 0x0a7ca147, 0x0f427ce9, 0x1e84f8c9, 0x00000000,
- 0x86800983, 0xed2b3248, 0x70111eac, 0x725a6c4e,
- 0xff0efdfb, 0x38850f56, 0xd5ae3d1e, 0x392d3627,
- 0xd90f0a64, 0xa65c6821, 0x545b9bd1, 0x2e36243a,
- 0x670a0cb1, 0xe757930f, 0x96eeb4d2, 0x919b1b9e,
- 0xc5c0804f, 0x20dc61a2, 0x4b775a69, 0x1a121c16,
- 0xba93e20a, 0x2aa0c0e5, 0xe0223c43, 0x171b121d,
- 0x0d090e0b, 0xc78bf2ad, 0xa8b62db9, 0xa91e14c8,
- 0x19f15785, 0x0775af4c, 0xdd99eebb, 0x607fa3fd,
- 0x2601f79f, 0xf5725cbc, 0x3b6644c5, 0x7efb5b34,
- 0x29438b76, 0xc623cbdc, 0xfcedb668, 0xf1e4b863,
- 0xdc31d7ca, 0x85634210, 0x22971340, 0x11c68420,
- 0x244a857d, 0x3dbbd2f8, 0x32f9ae11, 0xa129c76d,
- 0x2f9e1d4b, 0x30b2dcf3, 0x52860dec, 0xe3c177d0,
- 0x16b32b6c, 0xb970a999, 0x489411fa, 0x64e94722,
- 0x8cfca8c4, 0x3ff0a01a, 0x2c7d56d8, 0x903322ef,
- 0x4e4987c7, 0xd138d9c1, 0xa2ca8cfe, 0x0bd49836,
- 0x81f5a6cf, 0xde7aa528, 0x8eb7da26, 0xbfad3fa4,
- 0x9d3a2ce4, 0x9278500d, 0xcc5f6a9b, 0x467e5462,
- 0x138df6c2, 0xb8d890e8, 0xf7392e5e, 0xafc382f5,
- 0x805d9fbe, 0x93d0697c, 0x2dd56fa9, 0x1225cfb3,
- 0x99acc83b, 0x7d1810a7, 0x639ce86e, 0xbb3bdb7b,
- 0x7826cd09, 0x18596ef4, 0xb79aec01, 0x9a4f83a8,
- 0x6e95e665, 0xe6ffaa7e, 0xcfbc2108, 0xe815efe6,
- 0x9be7bad9, 0x366f4ace, 0x099fead4, 0x7cb029d6,
- 0xb2a431af, 0x233f2a31, 0x94a5c630, 0x66a235c0,
- 0xbc4e7437, 0xca82fca6, 0xd090e0b0, 0xd8a73315,
- 0x9804f14a, 0xdaec41f7, 0x50cd7f0e, 0xf691172f,
- 0xd64d768d, 0xb0ef434d, 0x4daacc54, 0x0496e4df,
- 0xb5d19ee3, 0x886a4c1b, 0x1f2cc1b8, 0x5165467f,
- 0xea5e9d04, 0x358c015d, 0x7487fa73, 0x410bfb2e,
- 0x1d67b35a, 0xd2db9252, 0x5610e933, 0x47d66d13,
- 0x61d79a8c, 0x0ca1377a, 0x14f8598e, 0x3c13eb89,
- 0x27a9ceee, 0xc961b735, 0xe51ce1ed, 0xb1477a3c,
- 0xdfd29c59, 0x73f2553f, 0xce141879, 0x37c773bf,
- 0xcdf753ea, 0xaafd5f5b, 0x6f3ddf14, 0xdb447886,
- 0xf3afca81, 0xc468b93e, 0x3424382c, 0x40a3c25f,
- 0xc31d1672, 0x25e2bc0c, 0x493c288b, 0x950dff41,
- 0x01a83971, 0xb30c08de, 0xe4b4d89c, 0xc1566490,
- 0x84cb7b61, 0xb632d570, 0x5c6c4874, 0x57b8d042,
- }, {
- 0xf45150a7, 0x417e5365, 0x171ac3a4, 0x273a965e,
- 0xab3bcb6b, 0x9d1ff145, 0xfaacab58, 0xe34b9303,
- 0x302055fa, 0x76adf66d, 0xcc889176, 0x02f5254c,
- 0xe54ffcd7, 0x2ac5d7cb, 0x35268044, 0x62b58fa3,
- 0xb1de495a, 0xba25671b, 0xea45980e, 0xfe5de1c0,
- 0x2fc30275, 0x4c8112f0, 0x468da397, 0xd36bc6f9,
- 0x8f03e75f, 0x9215959c, 0x6dbfeb7a, 0x5295da59,
- 0xbed42d83, 0x7458d321, 0xe0492969, 0xc98e44c8,
- 0xc2756a89, 0x8ef47879, 0x58996b3e, 0xb927dd71,
- 0xe1beb64f, 0x88f017ad, 0x20c966ac, 0xce7db43a,
- 0xdf63184a, 0x1ae58231, 0x51976033, 0x5362457f,
- 0x64b1e077, 0x6bbb84ae, 0x81fe1ca0, 0x08f9942b,
- 0x48705868, 0x458f19fd, 0xde94876c, 0x7b52b7f8,
- 0x73ab23d3, 0x4b72e202, 0x1fe3578f, 0x55662aab,
- 0xebb20728, 0xb52f03c2, 0xc5869a7b, 0x37d3a508,
- 0x2830f287, 0xbf23b2a5, 0x0302ba6a, 0x16ed5c82,
- 0xcf8a2b1c, 0x79a792b4, 0x07f3f0f2, 0x694ea1e2,
- 0xda65cdf4, 0x0506d5be, 0x34d11f62, 0xa6c48afe,
- 0x2e349d53, 0xf3a2a055, 0x8a0532e1, 0xf6a475eb,
- 0x830b39ec, 0x6040aaef, 0x715e069f, 0x6ebd5110,
- 0x213ef98a, 0xdd963d06, 0x3eddae05, 0xe64d46bd,
- 0x5491b58d, 0xc471055d, 0x06046fd4, 0x5060ff15,
- 0x981924fb, 0xbdd697e9, 0x4089cc43, 0xd967779e,
- 0xe8b0bd42, 0x8907888b, 0x19e7385b, 0xc879dbee,
- 0x7ca1470a, 0x427ce90f, 0x84f8c91e, 0x00000000,
- 0x80098386, 0x2b3248ed, 0x111eac70, 0x5a6c4e72,
- 0x0efdfbff, 0x850f5638, 0xae3d1ed5, 0x2d362739,
- 0x0f0a64d9, 0x5c6821a6, 0x5b9bd154, 0x36243a2e,
- 0x0a0cb167, 0x57930fe7, 0xeeb4d296, 0x9b1b9e91,
- 0xc0804fc5, 0xdc61a220, 0x775a694b, 0x121c161a,
- 0x93e20aba, 0xa0c0e52a, 0x223c43e0, 0x1b121d17,
- 0x090e0b0d, 0x8bf2adc7, 0xb62db9a8, 0x1e14c8a9,
- 0xf1578519, 0x75af4c07, 0x99eebbdd, 0x7fa3fd60,
- 0x01f79f26, 0x725cbcf5, 0x6644c53b, 0xfb5b347e,
- 0x438b7629, 0x23cbdcc6, 0xedb668fc, 0xe4b863f1,
- 0x31d7cadc, 0x63421085, 0x97134022, 0xc6842011,
- 0x4a857d24, 0xbbd2f83d, 0xf9ae1132, 0x29c76da1,
- 0x9e1d4b2f, 0xb2dcf330, 0x860dec52, 0xc177d0e3,
- 0xb32b6c16, 0x70a999b9, 0x9411fa48, 0xe9472264,
- 0xfca8c48c, 0xf0a01a3f, 0x7d56d82c, 0x3322ef90,
- 0x4987c74e, 0x38d9c1d1, 0xca8cfea2, 0xd498360b,
- 0xf5a6cf81, 0x7aa528de, 0xb7da268e, 0xad3fa4bf,
- 0x3a2ce49d, 0x78500d92, 0x5f6a9bcc, 0x7e546246,
- 0x8df6c213, 0xd890e8b8, 0x392e5ef7, 0xc382f5af,
- 0x5d9fbe80, 0xd0697c93, 0xd56fa92d, 0x25cfb312,
- 0xacc83b99, 0x1810a77d, 0x9ce86e63, 0x3bdb7bbb,
- 0x26cd0978, 0x596ef418, 0x9aec01b7, 0x4f83a89a,
- 0x95e6656e, 0xffaa7ee6, 0xbc2108cf, 0x15efe6e8,
- 0xe7bad99b, 0x6f4ace36, 0x9fead409, 0xb029d67c,
- 0xa431afb2, 0x3f2a3123, 0xa5c63094, 0xa235c066,
- 0x4e7437bc, 0x82fca6ca, 0x90e0b0d0, 0xa73315d8,
- 0x04f14a98, 0xec41f7da, 0xcd7f0e50, 0x91172ff6,
- 0x4d768dd6, 0xef434db0, 0xaacc544d, 0x96e4df04,
- 0xd19ee3b5, 0x6a4c1b88, 0x2cc1b81f, 0x65467f51,
- 0x5e9d04ea, 0x8c015d35, 0x87fa7374, 0x0bfb2e41,
- 0x67b35a1d, 0xdb9252d2, 0x10e93356, 0xd66d1347,
- 0xd79a8c61, 0xa1377a0c, 0xf8598e14, 0x13eb893c,
- 0xa9ceee27, 0x61b735c9, 0x1ce1ede5, 0x477a3cb1,
- 0xd29c59df, 0xf2553f73, 0x141879ce, 0xc773bf37,
- 0xf753eacd, 0xfd5f5baa, 0x3ddf146f, 0x447886db,
- 0xafca81f3, 0x68b93ec4, 0x24382c34, 0xa3c25f40,
- 0x1d1672c3, 0xe2bc0c25, 0x3c288b49, 0x0dff4195,
- 0xa8397101, 0x0c08deb3, 0xb4d89ce4, 0x566490c1,
- 0xcb7b6184, 0x32d570b6, 0x6c48745c, 0xb8d04257,
- }, {
- 0x5150a7f4, 0x7e536541, 0x1ac3a417, 0x3a965e27,
- 0x3bcb6bab, 0x1ff1459d, 0xacab58fa, 0x4b9303e3,
- 0x2055fa30, 0xadf66d76, 0x889176cc, 0xf5254c02,
- 0x4ffcd7e5, 0xc5d7cb2a, 0x26804435, 0xb58fa362,
- 0xde495ab1, 0x25671bba, 0x45980eea, 0x5de1c0fe,
- 0xc302752f, 0x8112f04c, 0x8da39746, 0x6bc6f9d3,
- 0x03e75f8f, 0x15959c92, 0xbfeb7a6d, 0x95da5952,
- 0xd42d83be, 0x58d32174, 0x492969e0, 0x8e44c8c9,
- 0x756a89c2, 0xf478798e, 0x996b3e58, 0x27dd71b9,
- 0xbeb64fe1, 0xf017ad88, 0xc966ac20, 0x7db43ace,
- 0x63184adf, 0xe582311a, 0x97603351, 0x62457f53,
- 0xb1e07764, 0xbb84ae6b, 0xfe1ca081, 0xf9942b08,
- 0x70586848, 0x8f19fd45, 0x94876cde, 0x52b7f87b,
- 0xab23d373, 0x72e2024b, 0xe3578f1f, 0x662aab55,
- 0xb20728eb, 0x2f03c2b5, 0x869a7bc5, 0xd3a50837,
- 0x30f28728, 0x23b2a5bf, 0x02ba6a03, 0xed5c8216,
- 0x8a2b1ccf, 0xa792b479, 0xf3f0f207, 0x4ea1e269,
- 0x65cdf4da, 0x06d5be05, 0xd11f6234, 0xc48afea6,
- 0x349d532e, 0xa2a055f3, 0x0532e18a, 0xa475ebf6,
- 0x0b39ec83, 0x40aaef60, 0x5e069f71, 0xbd51106e,
- 0x3ef98a21, 0x963d06dd, 0xddae053e, 0x4d46bde6,
- 0x91b58d54, 0x71055dc4, 0x046fd406, 0x60ff1550,
- 0x1924fb98, 0xd697e9bd, 0x89cc4340, 0x67779ed9,
- 0xb0bd42e8, 0x07888b89, 0xe7385b19, 0x79dbeec8,
- 0xa1470a7c, 0x7ce90f42, 0xf8c91e84, 0x00000000,
- 0x09838680, 0x3248ed2b, 0x1eac7011, 0x6c4e725a,
- 0xfdfbff0e, 0x0f563885, 0x3d1ed5ae, 0x3627392d,
- 0x0a64d90f, 0x6821a65c, 0x9bd1545b, 0x243a2e36,
- 0x0cb1670a, 0x930fe757, 0xb4d296ee, 0x1b9e919b,
- 0x804fc5c0, 0x61a220dc, 0x5a694b77, 0x1c161a12,
- 0xe20aba93, 0xc0e52aa0, 0x3c43e022, 0x121d171b,
- 0x0e0b0d09, 0xf2adc78b, 0x2db9a8b6, 0x14c8a91e,
- 0x578519f1, 0xaf4c0775, 0xeebbdd99, 0xa3fd607f,
- 0xf79f2601, 0x5cbcf572, 0x44c53b66, 0x5b347efb,
- 0x8b762943, 0xcbdcc623, 0xb668fced, 0xb863f1e4,
- 0xd7cadc31, 0x42108563, 0x13402297, 0x842011c6,
- 0x857d244a, 0xd2f83dbb, 0xae1132f9, 0xc76da129,
- 0x1d4b2f9e, 0xdcf330b2, 0x0dec5286, 0x77d0e3c1,
- 0x2b6c16b3, 0xa999b970, 0x11fa4894, 0x472264e9,
- 0xa8c48cfc, 0xa01a3ff0, 0x56d82c7d, 0x22ef9033,
- 0x87c74e49, 0xd9c1d138, 0x8cfea2ca, 0x98360bd4,
- 0xa6cf81f5, 0xa528de7a, 0xda268eb7, 0x3fa4bfad,
- 0x2ce49d3a, 0x500d9278, 0x6a9bcc5f, 0x5462467e,
- 0xf6c2138d, 0x90e8b8d8, 0x2e5ef739, 0x82f5afc3,
- 0x9fbe805d, 0x697c93d0, 0x6fa92dd5, 0xcfb31225,
- 0xc83b99ac, 0x10a77d18, 0xe86e639c, 0xdb7bbb3b,
- 0xcd097826, 0x6ef41859, 0xec01b79a, 0x83a89a4f,
- 0xe6656e95, 0xaa7ee6ff, 0x2108cfbc, 0xefe6e815,
- 0xbad99be7, 0x4ace366f, 0xead4099f, 0x29d67cb0,
- 0x31afb2a4, 0x2a31233f, 0xc63094a5, 0x35c066a2,
- 0x7437bc4e, 0xfca6ca82, 0xe0b0d090, 0x3315d8a7,
- 0xf14a9804, 0x41f7daec, 0x7f0e50cd, 0x172ff691,
- 0x768dd64d, 0x434db0ef, 0xcc544daa, 0xe4df0496,
- 0x9ee3b5d1, 0x4c1b886a, 0xc1b81f2c, 0x467f5165,
- 0x9d04ea5e, 0x015d358c, 0xfa737487, 0xfb2e410b,
- 0xb35a1d67, 0x9252d2db, 0xe9335610, 0x6d1347d6,
- 0x9a8c61d7, 0x377a0ca1, 0x598e14f8, 0xeb893c13,
- 0xceee27a9, 0xb735c961, 0xe1ede51c, 0x7a3cb147,
- 0x9c59dfd2, 0x553f73f2, 0x1879ce14, 0x73bf37c7,
- 0x53eacdf7, 0x5f5baafd, 0xdf146f3d, 0x7886db44,
- 0xca81f3af, 0xb93ec468, 0x382c3424, 0xc25f40a3,
- 0x1672c31d, 0xbc0c25e2, 0x288b493c, 0xff41950d,
- 0x397101a8, 0x08deb30c, 0xd89ce4b4, 0x6490c156,
- 0x7b6184cb, 0xd570b632, 0x48745c6c, 0xd04257b8,
- }
-};
-
-static const u32 crypto_il_tab[4][256] ____cacheline_aligned = {
- {
- 0x00000052, 0x00000009, 0x0000006a, 0x000000d5,
- 0x00000030, 0x00000036, 0x000000a5, 0x00000038,
- 0x000000bf, 0x00000040, 0x000000a3, 0x0000009e,
- 0x00000081, 0x000000f3, 0x000000d7, 0x000000fb,
- 0x0000007c, 0x000000e3, 0x00000039, 0x00000082,
- 0x0000009b, 0x0000002f, 0x000000ff, 0x00000087,
- 0x00000034, 0x0000008e, 0x00000043, 0x00000044,
- 0x000000c4, 0x000000de, 0x000000e9, 0x000000cb,
- 0x00000054, 0x0000007b, 0x00000094, 0x00000032,
- 0x000000a6, 0x000000c2, 0x00000023, 0x0000003d,
- 0x000000ee, 0x0000004c, 0x00000095, 0x0000000b,
- 0x00000042, 0x000000fa, 0x000000c3, 0x0000004e,
- 0x00000008, 0x0000002e, 0x000000a1, 0x00000066,
- 0x00000028, 0x000000d9, 0x00000024, 0x000000b2,
- 0x00000076, 0x0000005b, 0x000000a2, 0x00000049,
- 0x0000006d, 0x0000008b, 0x000000d1, 0x00000025,
- 0x00000072, 0x000000f8, 0x000000f6, 0x00000064,
- 0x00000086, 0x00000068, 0x00000098, 0x00000016,
- 0x000000d4, 0x000000a4, 0x0000005c, 0x000000cc,
- 0x0000005d, 0x00000065, 0x000000b6, 0x00000092,
- 0x0000006c, 0x00000070, 0x00000048, 0x00000050,
- 0x000000fd, 0x000000ed, 0x000000b9, 0x000000da,
- 0x0000005e, 0x00000015, 0x00000046, 0x00000057,
- 0x000000a7, 0x0000008d, 0x0000009d, 0x00000084,
- 0x00000090, 0x000000d8, 0x000000ab, 0x00000000,
- 0x0000008c, 0x000000bc, 0x000000d3, 0x0000000a,
- 0x000000f7, 0x000000e4, 0x00000058, 0x00000005,
- 0x000000b8, 0x000000b3, 0x00000045, 0x00000006,
- 0x000000d0, 0x0000002c, 0x0000001e, 0x0000008f,
- 0x000000ca, 0x0000003f, 0x0000000f, 0x00000002,
- 0x000000c1, 0x000000af, 0x000000bd, 0x00000003,
- 0x00000001, 0x00000013, 0x0000008a, 0x0000006b,
- 0x0000003a, 0x00000091, 0x00000011, 0x00000041,
- 0x0000004f, 0x00000067, 0x000000dc, 0x000000ea,
- 0x00000097, 0x000000f2, 0x000000cf, 0x000000ce,
- 0x000000f0, 0x000000b4, 0x000000e6, 0x00000073,
- 0x00000096, 0x000000ac, 0x00000074, 0x00000022,
- 0x000000e7, 0x000000ad, 0x00000035, 0x00000085,
- 0x000000e2, 0x000000f9, 0x00000037, 0x000000e8,
- 0x0000001c, 0x00000075, 0x000000df, 0x0000006e,
- 0x00000047, 0x000000f1, 0x0000001a, 0x00000071,
- 0x0000001d, 0x00000029, 0x000000c5, 0x00000089,
- 0x0000006f, 0x000000b7, 0x00000062, 0x0000000e,
- 0x000000aa, 0x00000018, 0x000000be, 0x0000001b,
- 0x000000fc, 0x00000056, 0x0000003e, 0x0000004b,
- 0x000000c6, 0x000000d2, 0x00000079, 0x00000020,
- 0x0000009a, 0x000000db, 0x000000c0, 0x000000fe,
- 0x00000078, 0x000000cd, 0x0000005a, 0x000000f4,
- 0x0000001f, 0x000000dd, 0x000000a8, 0x00000033,
- 0x00000088, 0x00000007, 0x000000c7, 0x00000031,
- 0x000000b1, 0x00000012, 0x00000010, 0x00000059,
- 0x00000027, 0x00000080, 0x000000ec, 0x0000005f,
- 0x00000060, 0x00000051, 0x0000007f, 0x000000a9,
- 0x00000019, 0x000000b5, 0x0000004a, 0x0000000d,
- 0x0000002d, 0x000000e5, 0x0000007a, 0x0000009f,
- 0x00000093, 0x000000c9, 0x0000009c, 0x000000ef,
- 0x000000a0, 0x000000e0, 0x0000003b, 0x0000004d,
- 0x000000ae, 0x0000002a, 0x000000f5, 0x000000b0,
- 0x000000c8, 0x000000eb, 0x000000bb, 0x0000003c,
- 0x00000083, 0x00000053, 0x00000099, 0x00000061,
- 0x00000017, 0x0000002b, 0x00000004, 0x0000007e,
- 0x000000ba, 0x00000077, 0x000000d6, 0x00000026,
- 0x000000e1, 0x00000069, 0x00000014, 0x00000063,
- 0x00000055, 0x00000021, 0x0000000c, 0x0000007d,
- }, {
- 0x00005200, 0x00000900, 0x00006a00, 0x0000d500,
- 0x00003000, 0x00003600, 0x0000a500, 0x00003800,
- 0x0000bf00, 0x00004000, 0x0000a300, 0x00009e00,
- 0x00008100, 0x0000f300, 0x0000d700, 0x0000fb00,
- 0x00007c00, 0x0000e300, 0x00003900, 0x00008200,
- 0x00009b00, 0x00002f00, 0x0000ff00, 0x00008700,
- 0x00003400, 0x00008e00, 0x00004300, 0x00004400,
- 0x0000c400, 0x0000de00, 0x0000e900, 0x0000cb00,
- 0x00005400, 0x00007b00, 0x00009400, 0x00003200,
- 0x0000a600, 0x0000c200, 0x00002300, 0x00003d00,
- 0x0000ee00, 0x00004c00, 0x00009500, 0x00000b00,
- 0x00004200, 0x0000fa00, 0x0000c300, 0x00004e00,
- 0x00000800, 0x00002e00, 0x0000a100, 0x00006600,
- 0x00002800, 0x0000d900, 0x00002400, 0x0000b200,
- 0x00007600, 0x00005b00, 0x0000a200, 0x00004900,
- 0x00006d00, 0x00008b00, 0x0000d100, 0x00002500,
- 0x00007200, 0x0000f800, 0x0000f600, 0x00006400,
- 0x00008600, 0x00006800, 0x00009800, 0x00001600,
- 0x0000d400, 0x0000a400, 0x00005c00, 0x0000cc00,
- 0x00005d00, 0x00006500, 0x0000b600, 0x00009200,
- 0x00006c00, 0x00007000, 0x00004800, 0x00005000,
- 0x0000fd00, 0x0000ed00, 0x0000b900, 0x0000da00,
- 0x00005e00, 0x00001500, 0x00004600, 0x00005700,
- 0x0000a700, 0x00008d00, 0x00009d00, 0x00008400,
- 0x00009000, 0x0000d800, 0x0000ab00, 0x00000000,
- 0x00008c00, 0x0000bc00, 0x0000d300, 0x00000a00,
- 0x0000f700, 0x0000e400, 0x00005800, 0x00000500,
- 0x0000b800, 0x0000b300, 0x00004500, 0x00000600,
- 0x0000d000, 0x00002c00, 0x00001e00, 0x00008f00,
- 0x0000ca00, 0x00003f00, 0x00000f00, 0x00000200,
- 0x0000c100, 0x0000af00, 0x0000bd00, 0x00000300,
- 0x00000100, 0x00001300, 0x00008a00, 0x00006b00,
- 0x00003a00, 0x00009100, 0x00001100, 0x00004100,
- 0x00004f00, 0x00006700, 0x0000dc00, 0x0000ea00,
- 0x00009700, 0x0000f200, 0x0000cf00, 0x0000ce00,
- 0x0000f000, 0x0000b400, 0x0000e600, 0x00007300,
- 0x00009600, 0x0000ac00, 0x00007400, 0x00002200,
- 0x0000e700, 0x0000ad00, 0x00003500, 0x00008500,
- 0x0000e200, 0x0000f900, 0x00003700, 0x0000e800,
- 0x00001c00, 0x00007500, 0x0000df00, 0x00006e00,
- 0x00004700, 0x0000f100, 0x00001a00, 0x00007100,
- 0x00001d00, 0x00002900, 0x0000c500, 0x00008900,
- 0x00006f00, 0x0000b700, 0x00006200, 0x00000e00,
- 0x0000aa00, 0x00001800, 0x0000be00, 0x00001b00,
- 0x0000fc00, 0x00005600, 0x00003e00, 0x00004b00,
- 0x0000c600, 0x0000d200, 0x00007900, 0x00002000,
- 0x00009a00, 0x0000db00, 0x0000c000, 0x0000fe00,
- 0x00007800, 0x0000cd00, 0x00005a00, 0x0000f400,
- 0x00001f00, 0x0000dd00, 0x0000a800, 0x00003300,
- 0x00008800, 0x00000700, 0x0000c700, 0x00003100,
- 0x0000b100, 0x00001200, 0x00001000, 0x00005900,
- 0x00002700, 0x00008000, 0x0000ec00, 0x00005f00,
- 0x00006000, 0x00005100, 0x00007f00, 0x0000a900,
- 0x00001900, 0x0000b500, 0x00004a00, 0x00000d00,
- 0x00002d00, 0x0000e500, 0x00007a00, 0x00009f00,
- 0x00009300, 0x0000c900, 0x00009c00, 0x0000ef00,
- 0x0000a000, 0x0000e000, 0x00003b00, 0x00004d00,
- 0x0000ae00, 0x00002a00, 0x0000f500, 0x0000b000,
- 0x0000c800, 0x0000eb00, 0x0000bb00, 0x00003c00,
- 0x00008300, 0x00005300, 0x00009900, 0x00006100,
- 0x00001700, 0x00002b00, 0x00000400, 0x00007e00,
- 0x0000ba00, 0x00007700, 0x0000d600, 0x00002600,
- 0x0000e100, 0x00006900, 0x00001400, 0x00006300,
- 0x00005500, 0x00002100, 0x00000c00, 0x00007d00,
- }, {
- 0x00520000, 0x00090000, 0x006a0000, 0x00d50000,
- 0x00300000, 0x00360000, 0x00a50000, 0x00380000,
- 0x00bf0000, 0x00400000, 0x00a30000, 0x009e0000,
- 0x00810000, 0x00f30000, 0x00d70000, 0x00fb0000,
- 0x007c0000, 0x00e30000, 0x00390000, 0x00820000,
- 0x009b0000, 0x002f0000, 0x00ff0000, 0x00870000,
- 0x00340000, 0x008e0000, 0x00430000, 0x00440000,
- 0x00c40000, 0x00de0000, 0x00e90000, 0x00cb0000,
- 0x00540000, 0x007b0000, 0x00940000, 0x00320000,
- 0x00a60000, 0x00c20000, 0x00230000, 0x003d0000,
- 0x00ee0000, 0x004c0000, 0x00950000, 0x000b0000,
- 0x00420000, 0x00fa0000, 0x00c30000, 0x004e0000,
- 0x00080000, 0x002e0000, 0x00a10000, 0x00660000,
- 0x00280000, 0x00d90000, 0x00240000, 0x00b20000,
- 0x00760000, 0x005b0000, 0x00a20000, 0x00490000,
- 0x006d0000, 0x008b0000, 0x00d10000, 0x00250000,
- 0x00720000, 0x00f80000, 0x00f60000, 0x00640000,
- 0x00860000, 0x00680000, 0x00980000, 0x00160000,
- 0x00d40000, 0x00a40000, 0x005c0000, 0x00cc0000,
- 0x005d0000, 0x00650000, 0x00b60000, 0x00920000,
- 0x006c0000, 0x00700000, 0x00480000, 0x00500000,
- 0x00fd0000, 0x00ed0000, 0x00b90000, 0x00da0000,
- 0x005e0000, 0x00150000, 0x00460000, 0x00570000,
- 0x00a70000, 0x008d0000, 0x009d0000, 0x00840000,
- 0x00900000, 0x00d80000, 0x00ab0000, 0x00000000,
- 0x008c0000, 0x00bc0000, 0x00d30000, 0x000a0000,
- 0x00f70000, 0x00e40000, 0x00580000, 0x00050000,
- 0x00b80000, 0x00b30000, 0x00450000, 0x00060000,
- 0x00d00000, 0x002c0000, 0x001e0000, 0x008f0000,
- 0x00ca0000, 0x003f0000, 0x000f0000, 0x00020000,
- 0x00c10000, 0x00af0000, 0x00bd0000, 0x00030000,
- 0x00010000, 0x00130000, 0x008a0000, 0x006b0000,
- 0x003a0000, 0x00910000, 0x00110000, 0x00410000,
- 0x004f0000, 0x00670000, 0x00dc0000, 0x00ea0000,
- 0x00970000, 0x00f20000, 0x00cf0000, 0x00ce0000,
- 0x00f00000, 0x00b40000, 0x00e60000, 0x00730000,
- 0x00960000, 0x00ac0000, 0x00740000, 0x00220000,
- 0x00e70000, 0x00ad0000, 0x00350000, 0x00850000,
- 0x00e20000, 0x00f90000, 0x00370000, 0x00e80000,
- 0x001c0000, 0x00750000, 0x00df0000, 0x006e0000,
- 0x00470000, 0x00f10000, 0x001a0000, 0x00710000,
- 0x001d0000, 0x00290000, 0x00c50000, 0x00890000,
- 0x006f0000, 0x00b70000, 0x00620000, 0x000e0000,
- 0x00aa0000, 0x00180000, 0x00be0000, 0x001b0000,
- 0x00fc0000, 0x00560000, 0x003e0000, 0x004b0000,
- 0x00c60000, 0x00d20000, 0x00790000, 0x00200000,
- 0x009a0000, 0x00db0000, 0x00c00000, 0x00fe0000,
- 0x00780000, 0x00cd0000, 0x005a0000, 0x00f40000,
- 0x001f0000, 0x00dd0000, 0x00a80000, 0x00330000,
- 0x00880000, 0x00070000, 0x00c70000, 0x00310000,
- 0x00b10000, 0x00120000, 0x00100000, 0x00590000,
- 0x00270000, 0x00800000, 0x00ec0000, 0x005f0000,
- 0x00600000, 0x00510000, 0x007f0000, 0x00a90000,
- 0x00190000, 0x00b50000, 0x004a0000, 0x000d0000,
- 0x002d0000, 0x00e50000, 0x007a0000, 0x009f0000,
- 0x00930000, 0x00c90000, 0x009c0000, 0x00ef0000,
- 0x00a00000, 0x00e00000, 0x003b0000, 0x004d0000,
- 0x00ae0000, 0x002a0000, 0x00f50000, 0x00b00000,
- 0x00c80000, 0x00eb0000, 0x00bb0000, 0x003c0000,
- 0x00830000, 0x00530000, 0x00990000, 0x00610000,
- 0x00170000, 0x002b0000, 0x00040000, 0x007e0000,
- 0x00ba0000, 0x00770000, 0x00d60000, 0x00260000,
- 0x00e10000, 0x00690000, 0x00140000, 0x00630000,
- 0x00550000, 0x00210000, 0x000c0000, 0x007d0000,
- }, {
- 0x52000000, 0x09000000, 0x6a000000, 0xd5000000,
- 0x30000000, 0x36000000, 0xa5000000, 0x38000000,
- 0xbf000000, 0x40000000, 0xa3000000, 0x9e000000,
- 0x81000000, 0xf3000000, 0xd7000000, 0xfb000000,
- 0x7c000000, 0xe3000000, 0x39000000, 0x82000000,
- 0x9b000000, 0x2f000000, 0xff000000, 0x87000000,
- 0x34000000, 0x8e000000, 0x43000000, 0x44000000,
- 0xc4000000, 0xde000000, 0xe9000000, 0xcb000000,
- 0x54000000, 0x7b000000, 0x94000000, 0x32000000,
- 0xa6000000, 0xc2000000, 0x23000000, 0x3d000000,
- 0xee000000, 0x4c000000, 0x95000000, 0x0b000000,
- 0x42000000, 0xfa000000, 0xc3000000, 0x4e000000,
- 0x08000000, 0x2e000000, 0xa1000000, 0x66000000,
- 0x28000000, 0xd9000000, 0x24000000, 0xb2000000,
- 0x76000000, 0x5b000000, 0xa2000000, 0x49000000,
- 0x6d000000, 0x8b000000, 0xd1000000, 0x25000000,
- 0x72000000, 0xf8000000, 0xf6000000, 0x64000000,
- 0x86000000, 0x68000000, 0x98000000, 0x16000000,
- 0xd4000000, 0xa4000000, 0x5c000000, 0xcc000000,
- 0x5d000000, 0x65000000, 0xb6000000, 0x92000000,
- 0x6c000000, 0x70000000, 0x48000000, 0x50000000,
- 0xfd000000, 0xed000000, 0xb9000000, 0xda000000,
- 0x5e000000, 0x15000000, 0x46000000, 0x57000000,
- 0xa7000000, 0x8d000000, 0x9d000000, 0x84000000,
- 0x90000000, 0xd8000000, 0xab000000, 0x00000000,
- 0x8c000000, 0xbc000000, 0xd3000000, 0x0a000000,
- 0xf7000000, 0xe4000000, 0x58000000, 0x05000000,
- 0xb8000000, 0xb3000000, 0x45000000, 0x06000000,
- 0xd0000000, 0x2c000000, 0x1e000000, 0x8f000000,
- 0xca000000, 0x3f000000, 0x0f000000, 0x02000000,
- 0xc1000000, 0xaf000000, 0xbd000000, 0x03000000,
- 0x01000000, 0x13000000, 0x8a000000, 0x6b000000,
- 0x3a000000, 0x91000000, 0x11000000, 0x41000000,
- 0x4f000000, 0x67000000, 0xdc000000, 0xea000000,
- 0x97000000, 0xf2000000, 0xcf000000, 0xce000000,
- 0xf0000000, 0xb4000000, 0xe6000000, 0x73000000,
- 0x96000000, 0xac000000, 0x74000000, 0x22000000,
- 0xe7000000, 0xad000000, 0x35000000, 0x85000000,
- 0xe2000000, 0xf9000000, 0x37000000, 0xe8000000,
- 0x1c000000, 0x75000000, 0xdf000000, 0x6e000000,
- 0x47000000, 0xf1000000, 0x1a000000, 0x71000000,
- 0x1d000000, 0x29000000, 0xc5000000, 0x89000000,
- 0x6f000000, 0xb7000000, 0x62000000, 0x0e000000,
- 0xaa000000, 0x18000000, 0xbe000000, 0x1b000000,
- 0xfc000000, 0x56000000, 0x3e000000, 0x4b000000,
- 0xc6000000, 0xd2000000, 0x79000000, 0x20000000,
- 0x9a000000, 0xdb000000, 0xc0000000, 0xfe000000,
- 0x78000000, 0xcd000000, 0x5a000000, 0xf4000000,
- 0x1f000000, 0xdd000000, 0xa8000000, 0x33000000,
- 0x88000000, 0x07000000, 0xc7000000, 0x31000000,
- 0xb1000000, 0x12000000, 0x10000000, 0x59000000,
- 0x27000000, 0x80000000, 0xec000000, 0x5f000000,
- 0x60000000, 0x51000000, 0x7f000000, 0xa9000000,
- 0x19000000, 0xb5000000, 0x4a000000, 0x0d000000,
- 0x2d000000, 0xe5000000, 0x7a000000, 0x9f000000,
- 0x93000000, 0xc9000000, 0x9c000000, 0xef000000,
- 0xa0000000, 0xe0000000, 0x3b000000, 0x4d000000,
- 0xae000000, 0x2a000000, 0xf5000000, 0xb0000000,
- 0xc8000000, 0xeb000000, 0xbb000000, 0x3c000000,
- 0x83000000, 0x53000000, 0x99000000, 0x61000000,
- 0x17000000, 0x2b000000, 0x04000000, 0x7e000000,
- 0xba000000, 0x77000000, 0xd6000000, 0x26000000,
- 0xe1000000, 0x69000000, 0x14000000, 0x63000000,
- 0x55000000, 0x21000000, 0x0c000000, 0x7d000000,
- }
-};
-
-EXPORT_SYMBOL_GPL(crypto_ft_tab);
-EXPORT_SYMBOL_GPL(crypto_it_tab);
-
-/**
- * crypto_aes_set_key - Set the AES key.
- * @tfm: The %crypto_tfm that is used in the context.
- * @in_key: The input key.
- * @key_len: The size of the key.
- *
- * This function uses aes_expand_key() to expand the key. &crypto_aes_ctx
- * _must_ be the private data embedded in @tfm which is retrieved with
- * crypto_tfm_ctx().
- *
- * Return: 0 on success; -EINVAL on failure (only happens for bad key lengths)
- */
-int crypto_aes_set_key(struct crypto_tfm *tfm, const u8 *in_key,
- unsigned int key_len)
-{
- struct crypto_aes_ctx *ctx = crypto_tfm_ctx(tfm);
-
- return aes_expandkey(ctx, in_key, key_len);
-}
-EXPORT_SYMBOL_GPL(crypto_aes_set_key);
-
-/* encrypt a block of text */
-
-#define f_rn(bo, bi, n, k) do { \
- bo[n] = crypto_ft_tab[0][byte(bi[n], 0)] ^ \
- crypto_ft_tab[1][byte(bi[(n + 1) & 3], 1)] ^ \
- crypto_ft_tab[2][byte(bi[(n + 2) & 3], 2)] ^ \
- crypto_ft_tab[3][byte(bi[(n + 3) & 3], 3)] ^ *(k + n); \
-} while (0)
-
-#define f_nround(bo, bi, k) do {\
- f_rn(bo, bi, 0, k); \
- f_rn(bo, bi, 1, k); \
- f_rn(bo, bi, 2, k); \
- f_rn(bo, bi, 3, k); \
- k += 4; \
-} while (0)
-
-#define f_rl(bo, bi, n, k) do { \
- bo[n] = crypto_fl_tab[0][byte(bi[n], 0)] ^ \
- crypto_fl_tab[1][byte(bi[(n + 1) & 3], 1)] ^ \
- crypto_fl_tab[2][byte(bi[(n + 2) & 3], 2)] ^ \
- crypto_fl_tab[3][byte(bi[(n + 3) & 3], 3)] ^ *(k + n); \
-} while (0)
-
-#define f_lround(bo, bi, k) do {\
- f_rl(bo, bi, 0, k); \
- f_rl(bo, bi, 1, k); \
- f_rl(bo, bi, 2, k); \
- f_rl(bo, bi, 3, k); \
-} while (0)
-
-static void crypto_aes_encrypt(struct crypto_tfm *tfm, u8 *out, const u8 *in)
-{
- const struct crypto_aes_ctx *ctx = crypto_tfm_ctx(tfm);
- u32 b0[4], b1[4];
- const u32 *kp = ctx->key_enc + 4;
- const int key_len = ctx->key_length;
-
- b0[0] = ctx->key_enc[0] ^ get_unaligned_le32(in);
- b0[1] = ctx->key_enc[1] ^ get_unaligned_le32(in + 4);
- b0[2] = ctx->key_enc[2] ^ get_unaligned_le32(in + 8);
- b0[3] = ctx->key_enc[3] ^ get_unaligned_le32(in + 12);
-
- if (key_len > 24) {
- f_nround(b1, b0, kp);
- f_nround(b0, b1, kp);
- }
-
- if (key_len > 16) {
- f_nround(b1, b0, kp);
- f_nround(b0, b1, kp);
- }
-
- f_nround(b1, b0, kp);
- f_nround(b0, b1, kp);
- f_nround(b1, b0, kp);
- f_nround(b0, b1, kp);
- f_nround(b1, b0, kp);
- f_nround(b0, b1, kp);
- f_nround(b1, b0, kp);
- f_nround(b0, b1, kp);
- f_nround(b1, b0, kp);
- f_lround(b0, b1, kp);
-
- put_unaligned_le32(b0[0], out);
- put_unaligned_le32(b0[1], out + 4);
- put_unaligned_le32(b0[2], out + 8);
- put_unaligned_le32(b0[3], out + 12);
-}
-
-/* decrypt a block of text */
-
-#define i_rn(bo, bi, n, k) do { \
- bo[n] = crypto_it_tab[0][byte(bi[n], 0)] ^ \
- crypto_it_tab[1][byte(bi[(n + 3) & 3], 1)] ^ \
- crypto_it_tab[2][byte(bi[(n + 2) & 3], 2)] ^ \
- crypto_it_tab[3][byte(bi[(n + 1) & 3], 3)] ^ *(k + n); \
-} while (0)
-
-#define i_nround(bo, bi, k) do {\
- i_rn(bo, bi, 0, k); \
- i_rn(bo, bi, 1, k); \
- i_rn(bo, bi, 2, k); \
- i_rn(bo, bi, 3, k); \
- k += 4; \
-} while (0)
-
-#define i_rl(bo, bi, n, k) do { \
- bo[n] = crypto_il_tab[0][byte(bi[n], 0)] ^ \
- crypto_il_tab[1][byte(bi[(n + 3) & 3], 1)] ^ \
- crypto_il_tab[2][byte(bi[(n + 2) & 3], 2)] ^ \
- crypto_il_tab[3][byte(bi[(n + 1) & 3], 3)] ^ *(k + n); \
-} while (0)
-
-#define i_lround(bo, bi, k) do {\
- i_rl(bo, bi, 0, k); \
- i_rl(bo, bi, 1, k); \
- i_rl(bo, bi, 2, k); \
- i_rl(bo, bi, 3, k); \
-} while (0)
-
-static void crypto_aes_decrypt(struct crypto_tfm *tfm, u8 *out, const u8 *in)
-{
- const struct crypto_aes_ctx *ctx = crypto_tfm_ctx(tfm);
- u32 b0[4], b1[4];
- const int key_len = ctx->key_length;
- const u32 *kp = ctx->key_dec + 4;
-
- b0[0] = ctx->key_dec[0] ^ get_unaligned_le32(in);
- b0[1] = ctx->key_dec[1] ^ get_unaligned_le32(in + 4);
- b0[2] = ctx->key_dec[2] ^ get_unaligned_le32(in + 8);
- b0[3] = ctx->key_dec[3] ^ get_unaligned_le32(in + 12);
-
- if (key_len > 24) {
- i_nround(b1, b0, kp);
- i_nround(b0, b1, kp);
- }
-
- if (key_len > 16) {
- i_nround(b1, b0, kp);
- i_nround(b0, b1, kp);
- }
-
- i_nround(b1, b0, kp);
- i_nround(b0, b1, kp);
- i_nround(b1, b0, kp);
- i_nround(b0, b1, kp);
- i_nround(b1, b0, kp);
- i_nround(b0, b1, kp);
- i_nround(b1, b0, kp);
- i_nround(b0, b1, kp);
- i_nround(b1, b0, kp);
- i_lround(b0, b1, kp);
-
- put_unaligned_le32(b0[0], out);
- put_unaligned_le32(b0[1], out + 4);
- put_unaligned_le32(b0[2], out + 8);
- put_unaligned_le32(b0[3], out + 12);
-}
-
-static struct crypto_alg aes_alg = {
- .cra_name = "aes",
- .cra_driver_name = "aes-generic",
- .cra_priority = 100,
- .cra_flags = CRYPTO_ALG_TYPE_CIPHER,
- .cra_blocksize = AES_BLOCK_SIZE,
- .cra_ctxsize = sizeof(struct crypto_aes_ctx),
- .cra_module = THIS_MODULE,
- .cra_u = {
- .cipher = {
- .cia_min_keysize = AES_MIN_KEY_SIZE,
- .cia_max_keysize = AES_MAX_KEY_SIZE,
- .cia_setkey = crypto_aes_set_key,
- .cia_encrypt = crypto_aes_encrypt,
- .cia_decrypt = crypto_aes_decrypt
- }
- }
-};
-
-static int __init aes_init(void)
-{
- return crypto_register_alg(&aes_alg);
-}
-
-static void __exit aes_fini(void)
-{
- crypto_unregister_alg(&aes_alg);
-}
-
-module_init(aes_init);
-module_exit(aes_fini);
-
-MODULE_DESCRIPTION("Rijndael (AES) Cipher Algorithm");
-MODULE_LICENSE("Dual BSD/GPL");
-MODULE_ALIAS_CRYPTO("aes");
-MODULE_ALIAS_CRYPTO("aes-generic");
diff --git a/crypto/aes_ti.c b/crypto/aes_ti.c
deleted file mode 100644
index a3b342f92fab..000000000000
--- a/crypto/aes_ti.c
+++ /dev/null
@@ -1,83 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-/*
- * Scalar fixed time AES core transform
- *
- * Copyright (C) 2017 Linaro Ltd <ard.biesheuvel@linaro.org>
- */
-
-#include <crypto/aes.h>
-#include <crypto/algapi.h>
-#include <linux/module.h>
-
-static int aesti_set_key(struct crypto_tfm *tfm, const u8 *in_key,
- unsigned int key_len)
-{
- struct crypto_aes_ctx *ctx = crypto_tfm_ctx(tfm);
-
- return aes_expandkey(ctx, in_key, key_len);
-}
-
-static void aesti_encrypt(struct crypto_tfm *tfm, u8 *out, const u8 *in)
-{
- const struct crypto_aes_ctx *ctx = crypto_tfm_ctx(tfm);
- unsigned long flags;
-
- /*
- * Temporarily disable interrupts to avoid races where cachelines are
- * evicted when the CPU is interrupted to do something else.
- */
- local_irq_save(flags);
-
- aes_encrypt(ctx, out, in);
-
- local_irq_restore(flags);
-}
-
-static void aesti_decrypt(struct crypto_tfm *tfm, u8 *out, const u8 *in)
-{
- const struct crypto_aes_ctx *ctx = crypto_tfm_ctx(tfm);
- unsigned long flags;
-
- /*
- * Temporarily disable interrupts to avoid races where cachelines are
- * evicted when the CPU is interrupted to do something else.
- */
- local_irq_save(flags);
-
- aes_decrypt(ctx, out, in);
-
- local_irq_restore(flags);
-}
-
-static struct crypto_alg aes_alg = {
- .cra_name = "aes",
- .cra_driver_name = "aes-fixed-time",
- .cra_priority = 100 + 1,
- .cra_flags = CRYPTO_ALG_TYPE_CIPHER,
- .cra_blocksize = AES_BLOCK_SIZE,
- .cra_ctxsize = sizeof(struct crypto_aes_ctx),
- .cra_module = THIS_MODULE,
-
- .cra_cipher.cia_min_keysize = AES_MIN_KEY_SIZE,
- .cra_cipher.cia_max_keysize = AES_MAX_KEY_SIZE,
- .cra_cipher.cia_setkey = aesti_set_key,
- .cra_cipher.cia_encrypt = aesti_encrypt,
- .cra_cipher.cia_decrypt = aesti_decrypt
-};
-
-static int __init aes_init(void)
-{
- return crypto_register_alg(&aes_alg);
-}
-
-static void __exit aes_fini(void)
-{
- crypto_unregister_alg(&aes_alg);
-}
-
-module_init(aes_init);
-module_exit(aes_fini);
-
-MODULE_DESCRIPTION("Generic fixed time AES");
-MODULE_AUTHOR("Ard Biesheuvel <ard.biesheuvel@linaro.org>");
-MODULE_LICENSE("GPL v2");
diff --git a/crypto/crypto_user.c b/crypto/crypto_user.c
index aad429bef03e..3187e0d276f9 100644
--- a/crypto/crypto_user.c
+++ b/crypto/crypto_user.c
@@ -293,7 +293,7 @@ static int crypto_del_alg(struct sk_buff *skb, struct nlmsghdr *nlh,
if (!alg)
return -ENOENT;
- /* We can not unregister core algorithms such as aes-generic.
+ /* We can not unregister core algorithms such as aes.
* We would loose the reference in the crypto_alg_list to this algorithm
* if we try to unregister. Unregistering such an algorithm without
* removing the module is not possible, so we restrict to crypto
diff --git a/crypto/df_sp80090a.c b/crypto/df_sp80090a.c
index dc63b31a93fc..b8134be6f7ad 100644
--- a/crypto/df_sp80090a.c
+++ b/crypto/df_sp80090a.c
@@ -14,27 +14,17 @@
#include <crypto/df_sp80090a.h>
#include <crypto/internal/drbg.h>
-static void drbg_kcapi_symsetkey(struct crypto_aes_ctx *aesctx,
- const unsigned char *key,
- u8 keylen);
-static void drbg_kcapi_symsetkey(struct crypto_aes_ctx *aesctx,
- const unsigned char *key, u8 keylen)
-{
- aes_expandkey(aesctx, key, keylen);
-}
-
-static void drbg_kcapi_sym(struct crypto_aes_ctx *aesctx,
- unsigned char *outval,
+static void drbg_kcapi_sym(struct aes_enckey *aeskey, unsigned char *outval,
const struct drbg_string *in, u8 blocklen_bytes)
{
/* there is only component in *in */
BUG_ON(in->len < blocklen_bytes);
- aes_encrypt(aesctx, outval, in->buf);
+ aes_encrypt(aeskey, outval, in->buf);
}
/* BCC function for CTR DRBG as defined in 10.4.3 */
-static void drbg_ctr_bcc(struct crypto_aes_ctx *aesctx,
+static void drbg_ctr_bcc(struct aes_enckey *aeskey,
unsigned char *out, const unsigned char *key,
struct list_head *in,
u8 blocklen_bytes,
@@ -47,7 +37,7 @@ static void drbg_ctr_bcc(struct crypto_aes_ctx *aesctx,
drbg_string_fill(&data, out, blocklen_bytes);
/* 10.4.3 step 2 / 4 */
- drbg_kcapi_symsetkey(aesctx, key, keylen);
+ aes_prepareenckey(aeskey, key, keylen);
list_for_each_entry(curr, in, list) {
const unsigned char *pos = curr->buf;
size_t len = curr->len;
@@ -56,7 +46,7 @@ static void drbg_ctr_bcc(struct crypto_aes_ctx *aesctx,
/* 10.4.3 step 4.2 */
if (blocklen_bytes == cnt) {
cnt = 0;
- drbg_kcapi_sym(aesctx, out, &data, blocklen_bytes);
+ drbg_kcapi_sym(aeskey, out, &data, blocklen_bytes);
}
out[cnt] ^= *pos;
pos++;
@@ -66,7 +56,7 @@ static void drbg_ctr_bcc(struct crypto_aes_ctx *aesctx,
}
/* 10.4.3 step 4.2 for last block */
if (cnt)
- drbg_kcapi_sym(aesctx, out, &data, blocklen_bytes);
+ drbg_kcapi_sym(aeskey, out, &data, blocklen_bytes);
}
/*
@@ -110,7 +100,7 @@ static void drbg_ctr_bcc(struct crypto_aes_ctx *aesctx,
*/
/* Derivation Function for CTR DRBG as defined in 10.4.2 */
-int crypto_drbg_ctr_df(struct crypto_aes_ctx *aesctx,
+int crypto_drbg_ctr_df(struct aes_enckey *aeskey,
unsigned char *df_data, size_t bytes_to_return,
struct list_head *seedlist,
u8 blocklen_bytes,
@@ -187,7 +177,7 @@ int crypto_drbg_ctr_df(struct crypto_aes_ctx *aesctx,
*/
drbg_cpu_to_be32(i, iv);
/* 10.4.2 step 9.2 -- BCC and concatenation with temp */
- drbg_ctr_bcc(aesctx, temp + templen, K, &bcc_list,
+ drbg_ctr_bcc(aeskey, temp + templen, K, &bcc_list,
blocklen_bytes, keylen);
/* 10.4.2 step 9.3 */
i++;
@@ -201,7 +191,7 @@ int crypto_drbg_ctr_df(struct crypto_aes_ctx *aesctx,
/* 10.4.2 step 12: overwriting of outval is implemented in next step */
/* 10.4.2 step 13 */
- drbg_kcapi_symsetkey(aesctx, temp, keylen);
+ aes_prepareenckey(aeskey, temp, keylen);
while (generated_len < bytes_to_return) {
short blocklen = 0;
/*
@@ -209,7 +199,7 @@ int crypto_drbg_ctr_df(struct crypto_aes_ctx *aesctx,
* implicit as the key is only drbg_blocklen in size based on
* the implementation of the cipher function callback
*/
- drbg_kcapi_sym(aesctx, X, &cipherin, blocklen_bytes);
+ drbg_kcapi_sym(aeskey, X, &cipherin, blocklen_bytes);
blocklen = (blocklen_bytes <
(bytes_to_return - generated_len)) ?
blocklen_bytes :
diff --git a/crypto/drbg.c b/crypto/drbg.c
index 1d433dae9955..85cc4549bd58 100644
--- a/crypto/drbg.c
+++ b/crypto/drbg.c
@@ -1505,9 +1505,9 @@ static int drbg_kcapi_hash(struct drbg_state *drbg, unsigned char *outval,
#ifdef CONFIG_CRYPTO_DRBG_CTR
static int drbg_fini_sym_kernel(struct drbg_state *drbg)
{
- struct crypto_aes_ctx *aesctx = (struct crypto_aes_ctx *)drbg->priv_data;
+ struct aes_enckey *aeskey = drbg->priv_data;
- kfree(aesctx);
+ kfree(aeskey);
drbg->priv_data = NULL;
if (drbg->ctr_handle)
@@ -1526,16 +1526,16 @@ static int drbg_fini_sym_kernel(struct drbg_state *drbg)
static int drbg_init_sym_kernel(struct drbg_state *drbg)
{
- struct crypto_aes_ctx *aesctx;
+ struct aes_enckey *aeskey;
struct crypto_skcipher *sk_tfm;
struct skcipher_request *req;
unsigned int alignmask;
char ctr_name[CRYPTO_MAX_ALG_NAME];
- aesctx = kzalloc(sizeof(*aesctx), GFP_KERNEL);
- if (!aesctx)
+ aeskey = kzalloc(sizeof(*aeskey), GFP_KERNEL);
+ if (!aeskey)
return -ENOMEM;
- drbg->priv_data = aesctx;
+ drbg->priv_data = aeskey;
if (snprintf(ctr_name, CRYPTO_MAX_ALG_NAME, "ctr(%s)",
drbg->core->backend_cra_name) >= CRYPTO_MAX_ALG_NAME) {
diff --git a/crypto/nhpoly1305.c b/crypto/nhpoly1305.c
deleted file mode 100644
index 2b648615b5ec..000000000000
--- a/crypto/nhpoly1305.c
+++ /dev/null
@@ -1,255 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/*
- * NHPoly1305 - ε-almost-∆-universal hash function for Adiantum
- *
- * Copyright 2018 Google LLC
- */
-
-/*
- * "NHPoly1305" is the main component of Adiantum hashing.
- * Specifically, it is the calculation
- *
- * H_L ← Poly1305_{K_L}(NH_{K_N}(pad_{128}(L)))
- *
- * from the procedure in section 6.4 of the Adiantum paper [1]. It is an
- * ε-almost-∆-universal (ε-∆U) hash function for equal-length inputs over
- * Z/(2^{128}Z), where the "∆" operation is addition. It hashes 1024-byte
- * chunks of the input with the NH hash function [2], reducing the input length
- * by 32x. The resulting NH digests are evaluated as a polynomial in
- * GF(2^{130}-5), like in the Poly1305 MAC [3]. Note that the polynomial
- * evaluation by itself would suffice to achieve the ε-∆U property; NH is used
- * for performance since it's over twice as fast as Poly1305.
- *
- * This is *not* a cryptographic hash function; do not use it as such!
- *
- * [1] Adiantum: length-preserving encryption for entry-level processors
- * (https://eprint.iacr.org/2018/720.pdf)
- * [2] UMAC: Fast and Secure Message Authentication
- * (https://fastcrypto.org/umac/umac_proc.pdf)
- * [3] The Poly1305-AES message-authentication code
- * (https://cr.yp.to/mac/poly1305-20050329.pdf)
- */
-
-#include <linux/unaligned.h>
-#include <crypto/algapi.h>
-#include <crypto/internal/hash.h>
-#include <crypto/internal/poly1305.h>
-#include <crypto/nhpoly1305.h>
-#include <linux/crypto.h>
-#include <linux/kernel.h>
-#include <linux/module.h>
-
-static void nh_generic(const u32 *key, const u8 *message, size_t message_len,
- __le64 hash[NH_NUM_PASSES])
-{
- u64 sums[4] = { 0, 0, 0, 0 };
-
- BUILD_BUG_ON(NH_PAIR_STRIDE != 2);
- BUILD_BUG_ON(NH_NUM_PASSES != 4);
-
- while (message_len) {
- u32 m0 = get_unaligned_le32(message + 0);
- u32 m1 = get_unaligned_le32(message + 4);
- u32 m2 = get_unaligned_le32(message + 8);
- u32 m3 = get_unaligned_le32(message + 12);
-
- sums[0] += (u64)(u32)(m0 + key[ 0]) * (u32)(m2 + key[ 2]);
- sums[1] += (u64)(u32)(m0 + key[ 4]) * (u32)(m2 + key[ 6]);
- sums[2] += (u64)(u32)(m0 + key[ 8]) * (u32)(m2 + key[10]);
- sums[3] += (u64)(u32)(m0 + key[12]) * (u32)(m2 + key[14]);
- sums[0] += (u64)(u32)(m1 + key[ 1]) * (u32)(m3 + key[ 3]);
- sums[1] += (u64)(u32)(m1 + key[ 5]) * (u32)(m3 + key[ 7]);
- sums[2] += (u64)(u32)(m1 + key[ 9]) * (u32)(m3 + key[11]);
- sums[3] += (u64)(u32)(m1 + key[13]) * (u32)(m3 + key[15]);
- key += NH_MESSAGE_UNIT / sizeof(key[0]);
- message += NH_MESSAGE_UNIT;
- message_len -= NH_MESSAGE_UNIT;
- }
-
- hash[0] = cpu_to_le64(sums[0]);
- hash[1] = cpu_to_le64(sums[1]);
- hash[2] = cpu_to_le64(sums[2]);
- hash[3] = cpu_to_le64(sums[3]);
-}
-
-/* Pass the next NH hash value through Poly1305 */
-static void process_nh_hash_value(struct nhpoly1305_state *state,
- const struct nhpoly1305_key *key)
-{
- BUILD_BUG_ON(NH_HASH_BYTES % POLY1305_BLOCK_SIZE != 0);
-
- poly1305_core_blocks(&state->poly_state, &key->poly_key, state->nh_hash,
- NH_HASH_BYTES / POLY1305_BLOCK_SIZE, 1);
-}
-
-/*
- * Feed the next portion of the source data, as a whole number of 16-byte
- * "NH message units", through NH and Poly1305. Each NH hash is taken over
- * 1024 bytes, except possibly the final one which is taken over a multiple of
- * 16 bytes up to 1024. Also, in the case where data is passed in misaligned
- * chunks, we combine partial hashes; the end result is the same either way.
- */
-static void nhpoly1305_units(struct nhpoly1305_state *state,
- const struct nhpoly1305_key *key,
- const u8 *src, unsigned int srclen, nh_t nh_fn)
-{
- do {
- unsigned int bytes;
-
- if (state->nh_remaining == 0) {
- /* Starting a new NH message */
- bytes = min_t(unsigned int, srclen, NH_MESSAGE_BYTES);
- nh_fn(key->nh_key, src, bytes, state->nh_hash);
- state->nh_remaining = NH_MESSAGE_BYTES - bytes;
- } else {
- /* Continuing a previous NH message */
- __le64 tmp_hash[NH_NUM_PASSES];
- unsigned int pos;
- int i;
-
- pos = NH_MESSAGE_BYTES - state->nh_remaining;
- bytes = min(srclen, state->nh_remaining);
- nh_fn(&key->nh_key[pos / 4], src, bytes, tmp_hash);
- for (i = 0; i < NH_NUM_PASSES; i++)
- le64_add_cpu(&state->nh_hash[i],
- le64_to_cpu(tmp_hash[i]));
- state->nh_remaining -= bytes;
- }
- if (state->nh_remaining == 0)
- process_nh_hash_value(state, key);
- src += bytes;
- srclen -= bytes;
- } while (srclen);
-}
-
-int crypto_nhpoly1305_setkey(struct crypto_shash *tfm,
- const u8 *key, unsigned int keylen)
-{
- struct nhpoly1305_key *ctx = crypto_shash_ctx(tfm);
- int i;
-
- if (keylen != NHPOLY1305_KEY_SIZE)
- return -EINVAL;
-
- poly1305_core_setkey(&ctx->poly_key, key);
- key += POLY1305_BLOCK_SIZE;
-
- for (i = 0; i < NH_KEY_WORDS; i++)
- ctx->nh_key[i] = get_unaligned_le32(key + i * sizeof(u32));
-
- return 0;
-}
-EXPORT_SYMBOL(crypto_nhpoly1305_setkey);
-
-int crypto_nhpoly1305_init(struct shash_desc *desc)
-{
- struct nhpoly1305_state *state = shash_desc_ctx(desc);
-
- poly1305_core_init(&state->poly_state);
- state->buflen = 0;
- state->nh_remaining = 0;
- return 0;
-}
-EXPORT_SYMBOL(crypto_nhpoly1305_init);
-
-int crypto_nhpoly1305_update_helper(struct shash_desc *desc,
- const u8 *src, unsigned int srclen,
- nh_t nh_fn)
-{
- struct nhpoly1305_state *state = shash_desc_ctx(desc);
- const struct nhpoly1305_key *key = crypto_shash_ctx(desc->tfm);
- unsigned int bytes;
-
- if (state->buflen) {
- bytes = min(srclen, (int)NH_MESSAGE_UNIT - state->buflen);
- memcpy(&state->buffer[state->buflen], src, bytes);
- state->buflen += bytes;
- if (state->buflen < NH_MESSAGE_UNIT)
- return 0;
- nhpoly1305_units(state, key, state->buffer, NH_MESSAGE_UNIT,
- nh_fn);
- state->buflen = 0;
- src += bytes;
- srclen -= bytes;
- }
-
- if (srclen >= NH_MESSAGE_UNIT) {
- bytes = round_down(srclen, NH_MESSAGE_UNIT);
- nhpoly1305_units(state, key, src, bytes, nh_fn);
- src += bytes;
- srclen -= bytes;
- }
-
- if (srclen) {
- memcpy(state->buffer, src, srclen);
- state->buflen = srclen;
- }
- return 0;
-}
-EXPORT_SYMBOL(crypto_nhpoly1305_update_helper);
-
-int crypto_nhpoly1305_update(struct shash_desc *desc,
- const u8 *src, unsigned int srclen)
-{
- return crypto_nhpoly1305_update_helper(desc, src, srclen, nh_generic);
-}
-EXPORT_SYMBOL(crypto_nhpoly1305_update);
-
-int crypto_nhpoly1305_final_helper(struct shash_desc *desc, u8 *dst, nh_t nh_fn)
-{
- struct nhpoly1305_state *state = shash_desc_ctx(desc);
- const struct nhpoly1305_key *key = crypto_shash_ctx(desc->tfm);
-
- if (state->buflen) {
- memset(&state->buffer[state->buflen], 0,
- NH_MESSAGE_UNIT - state->buflen);
- nhpoly1305_units(state, key, state->buffer, NH_MESSAGE_UNIT,
- nh_fn);
- }
-
- if (state->nh_remaining)
- process_nh_hash_value(state, key);
-
- poly1305_core_emit(&state->poly_state, NULL, dst);
- return 0;
-}
-EXPORT_SYMBOL(crypto_nhpoly1305_final_helper);
-
-int crypto_nhpoly1305_final(struct shash_desc *desc, u8 *dst)
-{
- return crypto_nhpoly1305_final_helper(desc, dst, nh_generic);
-}
-EXPORT_SYMBOL(crypto_nhpoly1305_final);
-
-static struct shash_alg nhpoly1305_alg = {
- .base.cra_name = "nhpoly1305",
- .base.cra_driver_name = "nhpoly1305-generic",
- .base.cra_priority = 100,
- .base.cra_ctxsize = sizeof(struct nhpoly1305_key),
- .base.cra_module = THIS_MODULE,
- .digestsize = POLY1305_DIGEST_SIZE,
- .init = crypto_nhpoly1305_init,
- .update = crypto_nhpoly1305_update,
- .final = crypto_nhpoly1305_final,
- .setkey = crypto_nhpoly1305_setkey,
- .descsize = sizeof(struct nhpoly1305_state),
-};
-
-static int __init nhpoly1305_mod_init(void)
-{
- return crypto_register_shash(&nhpoly1305_alg);
-}
-
-static void __exit nhpoly1305_mod_exit(void)
-{
- crypto_unregister_shash(&nhpoly1305_alg);
-}
-
-module_init(nhpoly1305_mod_init);
-module_exit(nhpoly1305_mod_exit);
-
-MODULE_DESCRIPTION("NHPoly1305 ε-almost-∆-universal hash function");
-MODULE_LICENSE("GPL v2");
-MODULE_AUTHOR("Eric Biggers <ebiggers@google.com>");
-MODULE_ALIAS_CRYPTO("nhpoly1305");
-MODULE_ALIAS_CRYPTO("nhpoly1305-generic");
diff --git a/crypto/testmgr.c b/crypto/testmgr.c
index a302be53896d..cbc049d697a1 100644
--- a/crypto/testmgr.c
+++ b/crypto/testmgr.c
@@ -4061,14 +4061,14 @@ static int alg_test_null(const struct alg_test_desc *desc,
static const struct alg_test_desc alg_test_descs[] = {
{
.alg = "adiantum(xchacha12,aes)",
- .generic_driver = "adiantum(xchacha12-lib,aes-generic,nhpoly1305-generic)",
+ .generic_driver = "adiantum(xchacha12-lib,aes-lib)",
.test = alg_test_skcipher,
.suite = {
.cipher = __VECS(adiantum_xchacha12_aes_tv_template)
},
}, {
.alg = "adiantum(xchacha20,aes)",
- .generic_driver = "adiantum(xchacha20-lib,aes-generic,nhpoly1305-generic)",
+ .generic_driver = "adiantum(xchacha20-lib,aes-lib)",
.test = alg_test_skcipher,
.suite = {
.cipher = __VECS(adiantum_xchacha20_aes_tv_template)
@@ -4088,7 +4088,7 @@ static const struct alg_test_desc alg_test_descs[] = {
}
}, {
.alg = "authenc(hmac(sha1),cbc(aes))",
- .generic_driver = "authenc(hmac-sha1-lib,cbc(aes-generic))",
+ .generic_driver = "authenc(hmac-sha1-lib,cbc(aes-lib))",
.test = alg_test_aead,
.fips_allowed = 1,
.suite = {
@@ -4139,7 +4139,7 @@ static const struct alg_test_desc alg_test_descs[] = {
}
}, {
.alg = "authenc(hmac(sha256),cbc(aes))",
- .generic_driver = "authenc(hmac-sha256-lib,cbc(aes-generic))",
+ .generic_driver = "authenc(hmac-sha256-lib,cbc(aes-lib))",
.test = alg_test_aead,
.fips_allowed = 1,
.suite = {
@@ -4165,7 +4165,7 @@ static const struct alg_test_desc alg_test_descs[] = {
.fips_allowed = 1,
}, {
.alg = "authenc(hmac(sha256),cts(cbc(aes)))",
- .generic_driver = "authenc(hmac-sha256-lib,cts(cbc(aes-generic)))",
+ .generic_driver = "authenc(hmac-sha256-lib,cts(cbc(aes-lib)))",
.test = alg_test_aead,
.suite = {
.aead = __VECS(krb5_test_aes128_cts_hmac_sha256_128)
@@ -4194,7 +4194,7 @@ static const struct alg_test_desc alg_test_descs[] = {
.fips_allowed = 1,
}, {
.alg = "authenc(hmac(sha384),cts(cbc(aes)))",
- .generic_driver = "authenc(hmac-sha384-lib,cts(cbc(aes-generic)))",
+ .generic_driver = "authenc(hmac-sha384-lib,cts(cbc(aes-lib)))",
.test = alg_test_aead,
.suite = {
.aead = __VECS(krb5_test_aes256_cts_hmac_sha384_192)
@@ -4205,7 +4205,7 @@ static const struct alg_test_desc alg_test_descs[] = {
.fips_allowed = 1,
}, {
.alg = "authenc(hmac(sha512),cbc(aes))",
- .generic_driver = "authenc(hmac-sha512-lib,cbc(aes-generic))",
+ .generic_driver = "authenc(hmac-sha512-lib,cbc(aes-lib))",
.fips_allowed = 1,
.test = alg_test_aead,
.suite = {
@@ -4267,6 +4267,7 @@ static const struct alg_test_desc alg_test_descs[] = {
}
}, {
.alg = "cbc(aes)",
+ .generic_driver = "cbc(aes-lib)",
.test = alg_test_skcipher,
.fips_allowed = 1,
.suite = {
@@ -4362,6 +4363,7 @@ static const struct alg_test_desc alg_test_descs[] = {
}, {
#endif
.alg = "cbcmac(aes)",
+ .generic_driver = "cbcmac(aes-lib)",
.test = alg_test_hash,
.suite = {
.hash = __VECS(aes_cbcmac_tv_template)
@@ -4374,7 +4376,7 @@ static const struct alg_test_desc alg_test_descs[] = {
}
}, {
.alg = "ccm(aes)",
- .generic_driver = "ccm_base(ctr(aes-generic),cbcmac(aes-generic))",
+ .generic_driver = "ccm_base(ctr(aes-lib),cbcmac(aes-lib))",
.test = alg_test_aead,
.fips_allowed = 1,
.suite = {
@@ -4402,6 +4404,7 @@ static const struct alg_test_desc alg_test_descs[] = {
},
}, {
.alg = "cmac(aes)",
+ .generic_driver = "cmac(aes-lib)",
.fips_allowed = 1,
.test = alg_test_hash,
.suite = {
@@ -4443,6 +4446,7 @@ static const struct alg_test_desc alg_test_descs[] = {
}
}, {
.alg = "ctr(aes)",
+ .generic_driver = "ctr(aes-lib)",
.test = alg_test_skcipher,
.fips_allowed = 1,
.suite = {
@@ -4533,6 +4537,7 @@ static const struct alg_test_desc alg_test_descs[] = {
}, {
#endif
.alg = "cts(cbc(aes))",
+ .generic_driver = "cts(cbc(aes-lib))",
.test = alg_test_skcipher,
.fips_allowed = 1,
.suite = {
@@ -4689,6 +4694,7 @@ static const struct alg_test_desc alg_test_descs[] = {
.test = alg_test_null,
}, {
.alg = "ecb(aes)",
+ .generic_driver = "ecb(aes-lib)",
.test = alg_test_skcipher,
.fips_allowed = 1,
.suite = {
@@ -4881,7 +4887,7 @@ static const struct alg_test_desc alg_test_descs[] = {
}
}, {
.alg = "essiv(authenc(hmac(sha256),cbc(aes)),sha256)",
- .generic_driver = "essiv(authenc(hmac-sha256-lib,cbc(aes-generic)),sha256-lib)",
+ .generic_driver = "essiv(authenc(hmac-sha256-lib,cbc(aes-lib)),sha256-lib)",
.test = alg_test_aead,
.fips_allowed = 1,
.suite = {
@@ -4889,7 +4895,7 @@ static const struct alg_test_desc alg_test_descs[] = {
}
}, {
.alg = "essiv(cbc(aes),sha256)",
- .generic_driver = "essiv(cbc(aes-generic),sha256-lib)",
+ .generic_driver = "essiv(cbc(aes-lib),sha256-lib)",
.test = alg_test_skcipher,
.fips_allowed = 1,
.suite = {
@@ -4934,7 +4940,7 @@ static const struct alg_test_desc alg_test_descs[] = {
}, {
#endif /* CONFIG_CRYPTO_DH_RFC7919_GROUPS */
.alg = "gcm(aes)",
- .generic_driver = "gcm_base(ctr(aes-generic),ghash-generic)",
+ .generic_driver = "gcm_base(ctr(aes-lib),ghash-generic)",
.test = alg_test_aead,
.fips_allowed = 1,
.suite = {
@@ -4962,7 +4968,7 @@ static const struct alg_test_desc alg_test_descs[] = {
}
}, {
.alg = "hctr2(aes)",
- .generic_driver = "hctr2_base(xctr(aes-generic),polyval-lib)",
+ .generic_driver = "hctr2_base(xctr(aes-lib),polyval-lib)",
.test = alg_test_skcipher,
.suite = {
.cipher = __VECS(aes_hctr2_tv_template)
@@ -5080,7 +5086,7 @@ static const struct alg_test_desc alg_test_descs[] = {
.suite.aead = __VECS(krb5_test_camellia_cts_cmac)
}, {
.alg = "lrw(aes)",
- .generic_driver = "lrw(ecb(aes-generic))",
+ .generic_driver = "lrw(ecb(aes-lib))",
.test = alg_test_skcipher,
.suite = {
.cipher = __VECS(aes_lrw_tv_template)
@@ -5173,12 +5179,6 @@ static const struct alg_test_desc alg_test_descs[] = {
.hash = __VECS(michael_mic_tv_template)
}
}, {
- .alg = "nhpoly1305",
- .test = alg_test_hash,
- .suite = {
- .hash = __VECS(nhpoly1305_tv_template)
- }
- }, {
.alg = "p1363(ecdsa-nist-p192)",
.test = alg_test_null,
}, {
@@ -5275,6 +5275,7 @@ static const struct alg_test_desc alg_test_descs[] = {
.fips_allowed = 1,
}, {
.alg = "rfc3686(ctr(aes))",
+ .generic_driver = "rfc3686(ctr(aes-lib))",
.test = alg_test_skcipher,
.fips_allowed = 1,
.suite = {
@@ -5288,7 +5289,7 @@ static const struct alg_test_desc alg_test_descs[] = {
}
}, {
.alg = "rfc4106(gcm(aes))",
- .generic_driver = "rfc4106(gcm_base(ctr(aes-generic),ghash-generic))",
+ .generic_driver = "rfc4106(gcm_base(ctr(aes-lib),ghash-generic))",
.test = alg_test_aead,
.fips_allowed = 1,
.suite = {
@@ -5300,7 +5301,7 @@ static const struct alg_test_desc alg_test_descs[] = {
}
}, {
.alg = "rfc4309(ccm(aes))",
- .generic_driver = "rfc4309(ccm_base(ctr(aes-generic),cbcmac(aes-generic)))",
+ .generic_driver = "rfc4309(ccm_base(ctr(aes-lib),cbcmac(aes-lib)))",
.test = alg_test_aead,
.fips_allowed = 1,
.suite = {
@@ -5312,7 +5313,7 @@ static const struct alg_test_desc alg_test_descs[] = {
}
}, {
.alg = "rfc4543(gcm(aes))",
- .generic_driver = "rfc4543(gcm_base(ctr(aes-generic),ghash-generic))",
+ .generic_driver = "rfc4543(gcm_base(ctr(aes-lib),ghash-generic))",
.test = alg_test_aead,
.suite = {
.aead = {
@@ -5489,6 +5490,7 @@ static const struct alg_test_desc alg_test_descs[] = {
}
}, {
.alg = "xcbc(aes)",
+ .generic_driver = "xcbc(aes-lib)",
.test = alg_test_hash,
.suite = {
.hash = __VECS(aes_xcbc128_tv_template)
@@ -5515,13 +5517,14 @@ static const struct alg_test_desc alg_test_descs[] = {
},
}, {
.alg = "xctr(aes)",
+ .generic_driver = "xctr(aes-lib)",
.test = alg_test_skcipher,
.suite = {
.cipher = __VECS(aes_xctr_tv_template)
}
}, {
.alg = "xts(aes)",
- .generic_driver = "xts(ecb(aes-generic))",
+ .generic_driver = "xts(ecb(aes-lib))",
.test = alg_test_skcipher,
.fips_allowed = 1,
.suite = {
diff --git a/crypto/testmgr.h b/crypto/testmgr.h
index 80bf5f1b67a6..1a3329e1c325 100644
--- a/crypto/testmgr.h
+++ b/crypto/testmgr.h
@@ -7599,1378 +7599,6 @@ static const struct hash_testvec hmac_sha3_512_tv_template[] = {
},
};
-/* NHPoly1305 test vectors from https://github.com/google/adiantum */
-static const struct hash_testvec nhpoly1305_tv_template[] = {
- {
- .key = "\xd2\x5d\x4c\xdd\x8d\x2b\x7f\x7a"
- "\xd9\xbe\x71\xec\xd1\x83\x52\xe3"
- "\xe1\xad\xd7\x5c\x0a\x75\x9d\xec"
- "\x1d\x13\x7e\x5d\x71\x07\xc9\xe4"
- "\x57\x2d\x44\x68\xcf\xd8\xd6\xc5"
- "\x39\x69\x7d\x32\x75\x51\x4f\x7e"
- "\xb2\x4c\xc6\x90\x51\x6e\xd9\xd6"
- "\xa5\x8b\x2d\xf1\x94\xf9\xf7\x5e"
- "\x2c\x84\x7b\x41\x0f\x88\x50\x89"
- "\x30\xd9\xa1\x38\x46\x6c\xc0\x4f"
- "\xe8\xdf\xdc\x66\xab\x24\x43\x41"
- "\x91\x55\x29\x65\x86\x28\x5e\x45"
- "\xd5\x2d\xb7\x80\x08\x9a\xc3\xd4"
- "\x9a\x77\x0a\xd4\xef\x3e\xe6\x3f"
- "\x6f\x2f\x9b\x3a\x7d\x12\x1e\x80"
- "\x6c\x44\xa2\x25\xe1\xf6\x60\xe9"
- "\x0d\xaf\xc5\x3c\xa5\x79\xae\x64"
- "\xbc\xa0\x39\xa3\x4d\x10\xe5\x4d"
- "\xd5\xe7\x89\x7a\x13\xee\x06\x78"
- "\xdc\xa4\xdc\x14\x27\xe6\x49\x38"
- "\xd0\xe0\x45\x25\x36\xc5\xf4\x79"
- "\x2e\x9a\x98\x04\xe4\x2b\x46\x52"
- "\x7c\x33\xca\xe2\x56\x51\x50\xe2"
- "\xa5\x9a\xae\x18\x6a\x13\xf8\xd2"
- "\x21\x31\x66\x02\xe2\xda\x8d\x7e"
- "\x41\x19\xb2\x61\xee\x48\x8f\xf1"
- "\x65\x24\x2e\x1e\x68\xce\x05\xd9"
- "\x2a\xcf\xa5\x3a\x57\xdd\x35\x91"
- "\x93\x01\xca\x95\xfc\x2b\x36\x04"
- "\xe6\x96\x97\x28\xf6\x31\xfe\xa3"
- "\x9d\xf6\x6a\x1e\x80\x8d\xdc\xec"
- "\xaf\x66\x11\x13\x02\x88\xd5\x27"
- "\x33\xb4\x1a\xcd\xa3\xf6\xde\x31"
- "\x8e\xc0\x0e\x6c\xd8\x5a\x97\x5e"
- "\xdd\xfd\x60\x69\x38\x46\x3f\x90"
- "\x5e\x97\xd3\x32\x76\xc7\x82\x49"
- "\xfe\xba\x06\x5f\x2f\xa2\xfd\xff"
- "\x80\x05\x40\xe4\x33\x03\xfb\x10"
- "\xc0\xde\x65\x8c\xc9\x8d\x3a\x9d"
- "\xb5\x7b\x36\x4b\xb5\x0c\xcf\x00"
- "\x9c\x87\xe4\x49\xad\x90\xda\x4a"
- "\xdd\xbd\xff\xe2\x32\x57\xd6\x78"
- "\x36\x39\x6c\xd3\x5b\x9b\x88\x59"
- "\x2d\xf0\x46\xe4\x13\x0e\x2b\x35"
- "\x0d\x0f\x73\x8a\x4f\x26\x84\x75"
- "\x88\x3c\xc5\x58\x66\x18\x1a\xb4"
- "\x64\x51\x34\x27\x1b\xa4\x11\xc9"
- "\x6d\x91\x8a\xfa\x32\x60\x9d\xd7"
- "\x87\xe5\xaa\x43\x72\xf8\xda\xd1"
- "\x48\x44\x13\x61\xdc\x8c\x76\x17"
- "\x0c\x85\x4e\xf3\xdd\xa2\x42\xd2"
- "\x74\xc1\x30\x1b\xeb\x35\x31\x29"
- "\x5b\xd7\x4c\x94\x46\x35\xa1\x23"
- "\x50\xf2\xa2\x8e\x7e\x4f\x23\x4f"
- "\x51\xff\xe2\xc9\xa3\x7d\x56\x8b"
- "\x41\xf2\xd0\xc5\x57\x7e\x59\xac"
- "\xbb\x65\xf3\xfe\xf7\x17\xef\x63"
- "\x7c\x6f\x23\xdd\x22\x8e\xed\x84"
- "\x0e\x3b\x09\xb3\xf3\xf4\x8f\xcd"
- "\x37\xa8\xe1\xa7\x30\xdb\xb1\xa2"
- "\x9c\xa2\xdf\x34\x17\x3e\x68\x44"
- "\xd0\xde\x03\x50\xd1\x48\x6b\x20"
- "\xe2\x63\x45\xa5\xea\x87\xc2\x42"
- "\x95\x03\x49\x05\xed\xe0\x90\x29"
- "\x1a\xb8\xcf\x9b\x43\xcf\x29\x7a"
- "\x63\x17\x41\x9f\xe0\xc9\x10\xfd"
- "\x2c\x56\x8c\x08\x55\xb4\xa9\x27"
- "\x0f\x23\xb1\x05\x6a\x12\x46\xc7"
- "\xe1\xfe\x28\x93\x93\xd7\x2f\xdc"
- "\x98\x30\xdb\x75\x8a\xbe\x97\x7a"
- "\x02\xfb\x8c\xba\xbe\x25\x09\xbe"
- "\xce\xcb\xa2\xef\x79\x4d\x0e\x9d"
- "\x1b\x9d\xb6\x39\x34\x38\xfa\x07"
- "\xec\xe8\xfc\x32\x85\x1d\xf7\x85"
- "\x63\xc3\x3c\xc0\x02\x75\xd7\x3f"
- "\xb2\x68\x60\x66\x65\x81\xc6\xb1"
- "\x42\x65\x4b\x4b\x28\xd7\xc7\xaa"
- "\x9b\xd2\xdc\x1b\x01\xe0\x26\x39"
- "\x01\xc1\x52\x14\xd1\x3f\xb7\xe6"
- "\x61\x41\xc7\x93\xd2\xa2\x67\xc6"
- "\xf7\x11\xb5\xf5\xea\xdd\x19\xfb"
- "\x4d\x21\x12\xd6\x7d\xf1\x10\xb0"
- "\x89\x07\xc7\x5a\x52\x73\x70\x2f"
- "\x32\xef\x65\x2b\x12\xb2\xf0\xf5"
- "\x20\xe0\x90\x59\x7e\x64\xf1\x4c"
- "\x41\xb3\xa5\x91\x08\xe6\x5e\x5f"
- "\x05\x56\x76\xb4\xb0\xcd\x70\x53"
- "\x10\x48\x9c\xff\xc2\x69\x55\x24"
- "\x87\xef\x84\xea\xfb\xa7\xbf\xa0"
- "\x91\x04\xad\x4f\x8b\x57\x54\x4b"
- "\xb6\xe9\xd1\xac\x37\x2f\x1d\x2e"
- "\xab\xa5\xa4\xe8\xff\xfb\xd9\x39"
- "\x2f\xb7\xac\xd1\xfe\x0b\x9a\x80"
- "\x0f\xb6\xf4\x36\x39\x90\x51\xe3"
- "\x0a\x2f\xb6\x45\x76\x89\xcd\x61"
- "\xfe\x48\x5f\x75\x1d\x13\x00\x62"
- "\x80\x24\x47\xe7\xbc\x37\xd7\xe3"
- "\x15\xe8\x68\x22\xaf\x80\x6f\x4b"
- "\xa8\x9f\x01\x10\x48\x14\xc3\x02"
- "\x52\xd2\xc7\x75\x9b\x52\x6d\x30"
- "\xac\x13\x85\xc8\xf7\xa3\x58\x4b"
- "\x49\xf7\x1c\x45\x55\x8c\x39\x9a"
- "\x99\x6d\x97\x27\x27\xe6\xab\xdd"
- "\x2c\x42\x1b\x35\xdd\x9d\x73\xbb"
- "\x6c\xf3\x64\xf1\xfb\xb9\xf7\xe6"
- "\x4a\x3c\xc0\x92\xc0\x2e\xb7\x1a"
- "\xbe\xab\xb3\x5a\xe5\xea\xb1\x48"
- "\x58\x13\x53\x90\xfd\xc3\x8e\x54"
- "\xf9\x18\x16\x73\xe8\xcb\x6d\x39"
- "\x0e\xd7\xe0\xfe\xb6\x9f\x43\x97"
- "\xe8\xd0\x85\x56\x83\x3e\x98\x68"
- "\x7f\xbd\x95\xa8\x9a\x61\x21\x8f"
- "\x06\x98\x34\xa6\xc8\xd6\x1d\xf3"
- "\x3d\x43\xa4\x9a\x8c\xe5\xd3\x5a"
- "\x32\xa2\x04\x22\xa4\x19\x1a\x46"
- "\x42\x7e\x4d\xe5\xe0\xe6\x0e\xca"
- "\xd5\x58\x9d\x2c\xaf\xda\x33\x5c"
- "\xb0\x79\x9e\xc9\xfc\xca\xf0\x2f"
- "\xa8\xb2\x77\xeb\x7a\xa2\xdd\x37"
- "\x35\x83\x07\xd6\x02\x1a\xb6\x6c"
- "\x24\xe2\x59\x08\x0e\xfd\x3e\x46"
- "\xec\x40\x93\xf4\x00\x26\x4f\x2a"
- "\xff\x47\x2f\xeb\x02\x92\x26\x5b"
- "\x53\x17\xc2\x8d\x2a\xc7\xa3\x1b"
- "\xcd\xbc\xa7\xe8\xd1\x76\xe3\x80"
- "\x21\xca\x5d\x3b\xe4\x9c\x8f\xa9"
- "\x5b\x7f\x29\x7f\x7c\xd8\xed\x6d"
- "\x8c\xb2\x86\x85\xe7\x77\xf2\x85"
- "\xab\x38\xa9\x9d\xc1\x4e\xc5\x64"
- "\x33\x73\x8b\x59\x03\xad\x05\xdf"
- "\x25\x98\x31\xde\xef\x13\xf1\x9b"
- "\x3c\x91\x9d\x7b\xb1\xfa\xe6\xbf"
- "\x5b\xed\xa5\x55\xe6\xea\x6c\x74"
- "\xf4\xb9\xe4\x45\x64\x72\x81\xc2"
- "\x4c\x28\xd4\xcd\xac\xe2\xde\xf9"
- "\xeb\x5c\xeb\x61\x60\x5a\xe5\x28",
- .ksize = 1088,
- .plaintext = "",
- .psize = 0,
- .digest = "\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00",
- }, {
- .key = "\x29\x21\x43\xcb\xcb\x13\x07\xde"
- "\xbf\x48\xdf\x8a\x7f\xa2\x84\xde"
- "\x72\x23\x9d\xf5\xf0\x07\xf2\x4c"
- "\x20\x3a\x93\xb9\xcd\x5d\xfe\xcb"
- "\x99\x2c\x2b\x58\xc6\x50\x5f\x94"
- "\x56\xc3\x7c\x0d\x02\x3f\xb8\x5e"
- "\x7b\xc0\x6c\x51\x34\x76\xc0\x0e"
- "\xc6\x22\xc8\x9e\x92\xa0\x21\xc9"
- "\x85\x5c\x7c\xf8\xe2\x64\x47\xc9"
- "\xe4\xa2\x57\x93\xf8\xa2\x69\xcd"
- "\x62\x98\x99\xf4\xd7\x7b\x14\xb1"
- "\xd8\x05\xff\x04\x15\xc9\xe1\x6e"
- "\x9b\xe6\x50\x6b\x0b\x3f\x22\x1f"
- "\x08\xde\x0c\x5b\x08\x7e\xc6\x2f"
- "\x6c\xed\xd6\xb2\x15\xa4\xb3\xf9"
- "\xa7\x46\x38\x2a\xea\x69\xa5\xde"
- "\x02\xc3\x96\x89\x4d\x55\x3b\xed"
- "\x3d\x3a\x85\x77\xbf\x97\x45\x5c"
- "\x9e\x02\x69\xe2\x1b\x68\xbe\x96"
- "\xfb\x64\x6f\x0f\xf6\x06\x40\x67"
- "\xfa\x04\xe3\x55\xfa\xbe\xa4\x60"
- "\xef\x21\x66\x97\xe6\x9d\x5c\x1f"
- "\x62\x37\xaa\x31\xde\xe4\x9c\x28"
- "\x95\xe0\x22\x86\xf4\x4d\xf3\x07"
- "\xfd\x5f\x3a\x54\x2c\x51\x80\x71"
- "\xba\x78\x69\x5b\x65\xab\x1f\x81"
- "\xed\x3b\xff\x34\xa3\xfb\xbc\x73"
- "\x66\x7d\x13\x7f\xdf\x6e\xe2\xe2"
- "\xeb\x4f\x6c\xda\x7d\x33\x57\xd0"
- "\xd3\x7c\x95\x4f\x33\x58\x21\xc7"
- "\xc0\xe5\x6f\x42\x26\xc6\x1f\x5e"
- "\x85\x1b\x98\x9a\xa2\x1e\x55\x77"
- "\x23\xdf\x81\x5e\x79\x55\x05\xfc"
- "\xfb\xda\xee\xba\x5a\xba\xf7\x77"
- "\x7f\x0e\xd3\xe1\x37\xfe\x8d\x2b"
- "\xd5\x3f\xfb\xd0\xc0\x3c\x0b\x3f"
- "\xcf\x3c\x14\xcf\xfb\x46\x72\x4c"
- "\x1f\x39\xe2\xda\x03\x71\x6d\x23"
- "\xef\x93\xcd\x39\xd9\x37\x80\x4d"
- "\x65\x61\xd1\x2c\x03\xa9\x47\x72"
- "\x4d\x1e\x0e\x16\x33\x0f\x21\x17"
- "\xec\x92\xea\x6f\x37\x22\xa4\xd8"
- "\x03\x33\x9e\xd8\x03\x69\x9a\xe8"
- "\xb2\x57\xaf\x78\x99\x05\x12\xab"
- "\x48\x90\x80\xf0\x12\x9b\x20\x64"
- "\x7a\x1d\x47\x5f\xba\x3c\xf9\xc3"
- "\x0a\x0d\x8d\xa1\xf9\x1b\x82\x13"
- "\x3e\x0d\xec\x0a\x83\xc0\x65\xe1"
- "\xe9\x95\xff\x97\xd6\xf2\xe4\xd5"
- "\x86\xc0\x1f\x29\x27\x63\xd7\xde"
- "\xb7\x0a\x07\x99\x04\x2d\xa3\x89"
- "\xa2\x43\xcf\xf3\xe1\x43\xac\x4a"
- "\x06\x97\xd0\x05\x4f\x87\xfa\xf9"
- "\x9b\xbf\x52\x70\xbd\xbc\x6c\xf3"
- "\x03\x13\x60\x41\x28\x09\xec\xcc"
- "\xb1\x1a\xec\xd6\xfb\x6f\x2a\x89"
- "\x5d\x0b\x53\x9c\x59\xc1\x84\x21"
- "\x33\x51\x47\x19\x31\x9c\xd4\x0a"
- "\x4d\x04\xec\x50\x90\x61\xbd\xbc"
- "\x7e\xc8\xd9\x6c\x98\x1d\x45\x41"
- "\x17\x5e\x97\x1c\xc5\xa8\xe8\xea"
- "\x46\x58\x53\xf7\x17\xd5\xad\x11"
- "\xc8\x54\xf5\x7a\x33\x90\xf5\x19"
- "\xba\x36\xb4\xfc\x52\xa5\x72\x3d"
- "\x14\xbb\x55\xa7\xe9\xe3\x12\xf7"
- "\x1c\x30\xa2\x82\x03\xbf\x53\x91"
- "\x2e\x60\x41\x9f\x5b\x69\x39\xf6"
- "\x4d\xc8\xf8\x46\x7a\x7f\xa4\x98"
- "\x36\xff\x06\xcb\xca\xe7\x33\xf2"
- "\xc0\x4a\xf4\x3c\x14\x44\x5f\x6b"
- "\x75\xef\x02\x36\x75\x08\x14\xfd"
- "\x10\x8e\xa5\x58\xd0\x30\x46\x49"
- "\xaf\x3a\xf8\x40\x3d\x35\xdb\x84"
- "\x11\x2e\x97\x6a\xb7\x87\x7f\xad"
- "\xf1\xfa\xa5\x63\x60\xd8\x5e\xbf"
- "\x41\x78\x49\xcf\x77\xbb\x56\xbb"
- "\x7d\x01\x67\x05\x22\xc8\x8f\x41"
- "\xba\x81\xd2\xca\x2c\x38\xac\x76"
- "\x06\xc1\x1a\xc2\xce\xac\x90\x67"
- "\x57\x3e\x20\x12\x5b\xd9\x97\x58"
- "\x65\x05\xb7\x04\x61\x7e\xd8\x3a"
- "\xbf\x55\x3b\x13\xe9\x34\x5a\x37"
- "\x36\xcb\x94\x45\xc5\x32\xb3\xa0"
- "\x0c\x3e\x49\xc5\xd3\xed\xa7\xf0"
- "\x1c\x69\xcc\xea\xcc\x83\xc9\x16"
- "\x95\x72\x4b\xf4\x89\xd5\xb9\x10"
- "\xf6\x2d\x60\x15\xea\x3c\x06\x66"
- "\x9f\x82\xad\x17\xce\xd2\xa4\x48"
- "\x7c\x65\xd9\xf8\x02\x4d\x9b\x4c"
- "\x89\x06\x3a\x34\x85\x48\x89\x86"
- "\xf9\x24\xa9\x54\x72\xdb\x44\x95"
- "\xc7\x44\x1c\x19\x11\x4c\x04\xdc"
- "\x13\xb9\x67\xc8\xc3\x3a\x6a\x50"
- "\xfa\xd1\xfb\xe1\x88\xb6\xf1\xa3"
- "\xc5\x3b\xdc\x38\x45\x16\x26\x02"
- "\x3b\xb8\x8f\x8b\x58\x7d\x23\x04"
- "\x50\x6b\x81\x9f\xae\x66\xac\x6f"
- "\xcf\x2a\x9d\xf1\xfd\x1d\x57\x07"
- "\xbe\x58\xeb\x77\x0c\xe3\xc2\x19"
- "\x14\x74\x1b\x51\x1c\x4f\x41\xf3"
- "\x32\x89\xb3\xe7\xde\x62\xf6\x5f"
- "\xc7\x6a\x4a\x2a\x5b\x0f\x5f\x87"
- "\x9c\x08\xb9\x02\x88\xc8\x29\xb7"
- "\x94\x52\xfa\x52\xfe\xaa\x50\x10"
- "\xba\x48\x75\x5e\x11\x1b\xe6\x39"
- "\xd7\x82\x2c\x87\xf1\x1e\xa4\x38"
- "\x72\x3e\x51\xe7\xd8\x3e\x5b\x7b"
- "\x31\x16\x89\xba\xd6\xad\x18\x5e"
- "\xba\xf8\x12\xb3\xf4\x6c\x47\x30"
- "\xc0\x38\x58\xb3\x10\x8d\x58\x5d"
- "\xb4\xfb\x19\x7e\x41\xc3\x66\xb8"
- "\xd6\x72\x84\xe1\x1a\xc2\x71\x4c"
- "\x0d\x4a\x21\x7a\xab\xa2\xc0\x36"
- "\x15\xc5\xe9\x46\xd7\x29\x17\x76"
- "\x5e\x47\x36\x7f\x72\x05\xa7\xcc"
- "\x36\x63\xf9\x47\x7d\xe6\x07\x3c"
- "\x8b\x79\x1d\x96\x61\x8d\x90\x65"
- "\x7c\xf5\xeb\x4e\x6e\x09\x59\x6d"
- "\x62\x50\x1b\x0f\xe0\xdc\x78\xf2"
- "\x5b\x83\x1a\xa1\x11\x75\xfd\x18"
- "\xd7\xe2\x8d\x65\x14\x21\xce\xbe"
- "\xb5\x87\xe3\x0a\xda\x24\x0a\x64"
- "\xa9\x9f\x03\x8d\x46\x5d\x24\x1a"
- "\x8a\x0c\x42\x01\xca\xb1\x5f\x7c"
- "\xa5\xac\x32\x4a\xb8\x07\x91\x18"
- "\x6f\xb0\x71\x3c\xc9\xb1\xa8\xf8"
- "\x5f\x69\xa5\xa1\xca\x9e\x7a\xaa"
- "\xac\xe9\xc7\x47\x41\x75\x25\xc3"
- "\x73\xe2\x0b\xdd\x6d\x52\x71\xbe"
- "\xc5\xdc\xb4\xe7\x01\x26\x53\x77"
- "\x86\x90\x85\x68\x6b\x7b\x03\x53"
- "\xda\x52\x52\x51\x68\xc8\xf3\xec"
- "\x6c\xd5\x03\x7a\xa3\x0e\xb4\x02"
- "\x5f\x1a\xab\xee\xca\x67\x29\x7b"
- "\xbd\x96\x59\xb3\x8b\x32\x7a\x92"
- "\x9f\xd8\x25\x2b\xdf\xc0\x4c\xda",
- .ksize = 1088,
- .plaintext = "\xbc\xda\x81\xa8\x78\x79\x1c\xbf"
- "\x77\x53\xba\x4c\x30\x5b\xb8\x33",
- .psize = 16,
- .digest = "\x04\xbf\x7f\x6a\xce\x72\xea\x6a"
- "\x79\xdb\xb0\xc9\x60\xf6\x12\xcc",
- }, {
- .key = "\x2e\x77\x1e\x2c\x63\x76\x34\x3f"
- "\x71\x08\x4f\x5a\xe3\x3d\x74\x56"
- "\xc7\x98\x46\x52\xe5\x8a\xba\x0d"
- "\x72\x41\x11\x15\x14\x72\x50\x8a"
- "\xd5\xec\x60\x09\xdd\x71\xcc\xb9"
- "\x59\x81\x65\x2d\x9e\x50\x18\xf3"
- "\x32\xf3\xf1\xe7\x01\x82\x1c\xad"
- "\x88\xa0\x21\x0c\x4b\x80\x5e\x62"
- "\xfc\x81\xec\x52\xaa\xe4\xa5\x86"
- "\xc2\xe6\x03\x11\xdc\x66\x09\x86"
- "\x3c\x3b\xf0\x59\x0f\xb3\xf7\x44"
- "\x24\xb7\x88\xc5\xfc\xc8\x77\x9f"
- "\x8c\x44\xc4\x11\x55\xce\x7a\xa3"
- "\xe0\xa2\xb8\xbf\xb5\x3d\x07\x2c"
- "\x32\xb6\x6c\xfc\xb4\x42\x95\x95"
- "\x98\x32\x81\xc4\xe7\xe2\xd9\x6a"
- "\x87\xf4\xf4\x1e\x74\x7c\xb5\xcd"
- "\x51\x45\x68\x38\x51\xdb\x30\x74"
- "\x11\xe0\xaa\xae\x19\x8f\x15\x55"
- "\xdd\x47\x4a\x35\xb9\x0c\xb4\x4e"
- "\xa9\xce\x2f\xfa\x8f\xc1\x8a\x5e"
- "\x5b\xec\xa5\x81\x3b\xb3\x43\x06"
- "\x24\x81\xf4\x24\xe2\x21\xfa\xcb"
- "\x49\xa8\xf8\xbd\x31\x4a\x5b\x2d"
- "\x64\x0a\x07\xf0\x80\xc9\x0d\x81"
- "\x14\x58\x54\x2b\xba\x22\x31\xba"
- "\xef\x66\xc9\x49\x69\x69\x83\x0d"
- "\xf2\xf9\x80\x9d\x30\x36\xfb\xe3"
- "\xc0\x72\x2b\xcc\x5a\x81\x2c\x5d"
- "\x3b\x5e\xf8\x2b\xd3\x14\x28\x73"
- "\xf9\x1c\x70\xe6\xd8\xbb\xac\x30"
- "\xf9\xd9\xa0\xe2\x33\x7c\x33\x34"
- "\xa5\x6a\x77\x6d\xd5\xaf\xf4\xf3"
- "\xc7\xb3\x0e\x83\x3d\xcb\x01\xcc"
- "\x81\xc0\xf9\x4a\xae\x36\x92\xf7"
- "\x69\x7b\x65\x01\xc3\xc8\xb8\xae"
- "\x16\xd8\x30\xbb\xba\x6d\x78\x6e"
- "\x0d\xf0\x7d\x84\xb7\x87\xda\x28"
- "\x7a\x18\x10\x0b\x29\xec\x29\xf3"
- "\xb0\x7b\xa1\x28\xbf\xbc\x2b\x2c"
- "\x92\x2c\x16\xfb\x02\x39\xf9\xa6"
- "\xa2\x15\x05\xa6\x72\x10\xbc\x62"
- "\x4a\x6e\xb8\xb5\x5d\x59\xae\x3c"
- "\x32\xd3\x68\xd7\x8e\x5a\xcd\x1b"
- "\xef\xf6\xa7\x5e\x10\x51\x15\x4b"
- "\x2c\xe3\xba\x70\x4f\x2c\xa0\x1c"
- "\x7b\x97\xd7\xb2\xa5\x05\x17\xcc"
- "\xf7\x3a\x29\x6f\xd5\x4b\xb8\x24"
- "\xf4\x65\x95\x12\xc0\x86\xd1\x64"
- "\x81\xdf\x46\x55\x0d\x22\x06\x77"
- "\xd8\xca\x8d\xc8\x87\xc3\xfa\xb9"
- "\xe1\x98\x94\xe6\x7b\xed\x65\x66"
- "\x0e\xc7\x25\x15\xee\x4a\xe6\x7e"
- "\xea\x1b\x58\xee\x96\xa0\x75\x9a"
- "\xa3\x00\x9e\x42\xc2\x26\x20\x8c"
- "\x3d\x22\x1f\x94\x3e\x74\x43\x72"
- "\xe9\x1d\xa6\xa1\x6c\xa7\xb8\x03"
- "\xdf\xb9\x7a\xaf\xe9\xe9\x3b\xfe"
- "\xdf\x91\xc1\x01\xa8\xba\x5d\x29"
- "\xa5\xe0\x98\x9b\x13\xe5\x13\x11"
- "\x7c\x04\x3a\xe8\x44\x7e\x78\xfc"
- "\xd6\x96\xa8\xbc\x7d\xc1\x89\x3d"
- "\x75\x64\xa9\x0e\x86\x33\xfb\x73"
- "\xf7\x15\xbc\x2c\x9a\x3f\x29\xce"
- "\x1c\x9d\x10\x4e\x85\xe1\x77\x41"
- "\x01\xe2\xbc\x88\xec\x81\xef\xc2"
- "\x6a\xed\x4f\xf7\xdf\xac\x10\x71"
- "\x94\xed\x71\xa4\x01\xd4\xd6\xbe"
- "\xfe\x3e\xc3\x92\x6a\xf2\x2b\xb5"
- "\xab\x15\x96\xb7\x88\x2c\xc2\xe1"
- "\xb0\x04\x22\xe7\x3d\xa9\xc9\x7d"
- "\x2c\x7c\x21\xff\x97\x86\x6b\x0c"
- "\x2b\x5b\xe0\xb6\x48\x74\x8f\x24"
- "\xef\x8e\xdd\x0f\x2a\x5f\xff\x33"
- "\xf4\x8e\xc5\xeb\x9c\xd7\x2a\x45"
- "\xf3\x50\xf1\xc0\x91\x8f\xc7\xf9"
- "\x97\xc1\x3c\x9c\xf4\xed\x8a\x23"
- "\x61\x5b\x40\x1a\x09\xee\x23\xa8"
- "\x7c\x7a\x96\xe1\x31\x55\x3d\x12"
- "\x04\x1f\x21\x78\x72\xf0\x0f\xa5"
- "\x80\x58\x7c\x2f\x37\xb5\x67\x24"
- "\x2f\xce\xf9\xf6\x86\x9f\xb3\x34"
- "\x0c\xfe\x0a\xaf\x27\xe6\x5e\x0a"
- "\x21\x44\x68\xe1\x5d\x84\x25\xae"
- "\x2c\x5a\x94\x66\x9a\x3f\x0e\x5a"
- "\xd0\x60\x2a\xd5\x3a\x4e\x2f\x40"
- "\x87\xe9\x27\x3e\xee\x92\xe1\x07"
- "\x22\x43\x52\xed\x67\x49\x13\xdd"
- "\x68\xd7\x54\xc2\x76\x72\x7e\x75"
- "\xaf\x24\x98\x5c\xe8\x22\xaa\x35"
- "\x0f\x9a\x1c\x4c\x0b\x43\x68\x99"
- "\x45\xdd\xbf\x82\xa5\x6f\x0a\xef"
- "\x44\x90\x85\xe7\x57\x23\x22\x41"
- "\x2e\xda\x24\x28\x65\x7f\x96\x85"
- "\x9f\x4b\x0d\x43\xb9\xa8\xbd\x84"
- "\xad\x0b\x09\xcc\x2c\x4a\x0c\xec"
- "\x71\x58\xba\xf1\xfc\x49\x4c\xca"
- "\x5c\x5d\xb2\x77\x0c\x99\xae\x1c"
- "\xce\x70\x05\x5b\x73\x6b\x7c\x28"
- "\x3b\xeb\x21\x3f\xa3\x71\xe1\x6a"
- "\xf4\x87\xd0\xbf\x73\xaa\x0b\x0b"
- "\xed\x70\xb3\xd4\xa3\xca\x76\x3a"
- "\xdb\xfa\xd8\x08\x95\xec\xac\x59"
- "\xd0\x79\x90\xc2\x33\x7b\xcc\x28"
- "\x65\xb6\x5f\x92\xc4\xac\x23\x40"
- "\xd1\x20\x44\x1f\xd7\x29\xab\x46"
- "\x79\x32\xc6\x8f\x79\xe5\xaa\x2c"
- "\xa6\x76\x70\x3a\x9e\x46\x3f\x8c"
- "\x1a\x89\x32\x28\x61\x5c\xcf\x93"
- "\x1e\xde\x9e\x98\xbe\x06\x30\x23"
- "\xc4\x8b\xda\x1c\xd1\x67\x46\x93"
- "\x9d\x41\xa2\x8c\x03\x22\xbd\x55"
- "\x7e\x91\x51\x13\xdc\xcf\x5c\x1e"
- "\xcb\x5d\xfb\x14\x16\x1a\x44\x56"
- "\x27\x77\xfd\xed\x7d\xbd\xd1\x49"
- "\x7f\x0d\xc3\x59\x48\x6b\x3c\x02"
- "\x6b\xb5\xd0\x83\xd5\x81\x29\xe7"
- "\xe0\xc9\x36\x23\x8d\x41\x33\x77"
- "\xff\x5f\x54\xde\x4d\x3f\xd2\x4e"
- "\xb6\x4d\xdd\x85\xf8\x9b\x20\x7d"
- "\x39\x27\x68\x63\xd3\x8e\x61\x39"
- "\xfa\xe1\xc3\x04\x74\x27\x5a\x34"
- "\x7f\xec\x59\x2d\xc5\x6e\x54\x23"
- "\xf5\x7b\x4b\xbe\x58\x2b\xf2\x81"
- "\x93\x63\xcc\x13\xd9\x90\xbb\x6a"
- "\x41\x03\x8d\x95\xeb\xbb\x5d\x06"
- "\x38\x4c\x0e\xd6\xa9\x5b\x84\x97"
- "\x3e\x64\x72\xe9\x96\x07\x0f\x73"
- "\x6e\xc6\x3b\x32\xbe\xac\x13\x14"
- "\xd0\x0a\x17\x5f\xb9\x9c\x3e\x34"
- "\xd9\xec\xd6\x8f\x89\xbf\x1e\xd3"
- "\xda\x80\xb2\x29\xff\x28\x96\xb3"
- "\x46\x50\x5b\x15\x80\x97\xee\x1f"
- "\x6c\xd8\xe8\xe0\xbd\x09\xe7\x20"
- "\x8c\x23\x8e\xd9\xbb\x92\xfa\x82"
- "\xaa\x0f\xb5\xf8\x78\x60\x11\xf0",
- .ksize = 1088,
- .plaintext = "\x0b\xb2\x31\x2d\xad\xfe\xce\xf9"
- "\xec\x5d\x3d\x64\x5f\x3f\x75\x43"
- "\x05\x5b\x97",
- .psize = 19,
- .digest = "\x5f\x02\xae\x65\x6c\x13\x21\x67"
- "\x77\x9e\xc4\x43\x58\x68\xde\x8f",
- }, {
- .key = "\x65\x4d\xe3\xf8\xd2\x4c\xac\x28"
- "\x68\xf5\xb3\x81\x71\x4b\xa1\xfa"
- "\x04\x0e\xd3\x81\x36\xbe\x0c\x81"
- "\x5e\xaf\xbc\x3a\xa4\xc0\x8e\x8b"
- "\x55\x63\xd3\x52\x97\x88\xd6\x19"
- "\xbc\x96\xdf\x49\xff\x04\x63\xf5"
- "\x0c\x11\x13\xaa\x9e\x1f\x5a\xf7"
- "\xdd\xbd\x37\x80\xc3\xd0\xbe\xa7"
- "\x05\xc8\x3c\x98\x1e\x05\x3c\x84"
- "\x39\x61\xc4\xed\xed\x71\x1b\xc4"
- "\x74\x45\x2c\xa1\x56\x70\x97\xfd"
- "\x44\x18\x07\x7d\xca\x60\x1f\x73"
- "\x3b\x6d\x21\xcb\x61\x87\x70\x25"
- "\x46\x21\xf1\x1f\x21\x91\x31\x2d"
- "\x5d\xcc\xb7\xd1\x84\x3e\x3d\xdb"
- "\x03\x53\x2a\x82\xa6\x9a\x95\xbc"
- "\x1a\x1e\x0a\x5e\x07\x43\xab\x43"
- "\xaf\x92\x82\x06\x91\x04\x09\xf4"
- "\x17\x0a\x9a\x2c\x54\xdb\xb8\xf4"
- "\xd0\xf0\x10\x66\x24\x8d\xcd\xda"
- "\xfe\x0e\x45\x9d\x6f\xc4\x4e\xf4"
- "\x96\xaf\x13\xdc\xa9\xd4\x8c\xc4"
- "\xc8\x57\x39\x3c\xc2\xd3\x0a\x76"
- "\x4a\x1f\x75\x83\x44\xc7\xd1\x39"
- "\xd8\xb5\x41\xba\x73\x87\xfa\x96"
- "\xc7\x18\x53\xfb\x9b\xda\xa0\x97"
- "\x1d\xee\x60\x85\x9e\x14\xc3\xce"
- "\xc4\x05\x29\x3b\x95\x30\xa3\xd1"
- "\x9f\x82\x6a\x04\xf5\xa7\x75\x57"
- "\x82\x04\xfe\x71\x51\x71\xb1\x49"
- "\x50\xf8\xe0\x96\xf1\xfa\xa8\x88"
- "\x3f\xa0\x86\x20\xd4\x60\x79\x59"
- "\x17\x2d\xd1\x09\xf4\xec\x05\x57"
- "\xcf\x62\x7e\x0e\x7e\x60\x78\xe6"
- "\x08\x60\x29\xd8\xd5\x08\x1a\x24"
- "\xc4\x6c\x24\xe7\x92\x08\x3d\x8a"
- "\x98\x7a\xcf\x99\x0a\x65\x0e\xdc"
- "\x8c\x8a\xbe\x92\x82\x91\xcc\x62"
- "\x30\xb6\xf4\x3f\xc6\x8a\x7f\x12"
- "\x4a\x8a\x49\xfa\x3f\x5c\xd4\x5a"
- "\xa6\x82\xa3\xe6\xaa\x34\x76\xb2"
- "\xab\x0a\x30\xef\x6c\x77\x58\x3f"
- "\x05\x6b\xcc\x5c\xae\xdc\xd7\xb9"
- "\x51\x7e\x8d\x32\x5b\x24\x25\xbe"
- "\x2b\x24\x01\xcf\x80\xda\x16\xd8"
- "\x90\x72\x2c\xad\x34\x8d\x0c\x74"
- "\x02\xcb\xfd\xcf\x6e\xef\x97\xb5"
- "\x4c\xf2\x68\xca\xde\x43\x9e\x8a"
- "\xc5\x5f\x31\x7f\x14\x71\x38\xec"
- "\xbd\x98\xe5\x71\xc4\xb5\xdb\xef"
- "\x59\xd2\xca\xc0\xc1\x86\x75\x01"
- "\xd4\x15\x0d\x6f\xa4\xf7\x7b\x37"
- "\x47\xda\x18\x93\x63\xda\xbe\x9e"
- "\x07\xfb\xb2\x83\xd5\xc4\x34\x55"
- "\xee\x73\xa1\x42\x96\xf9\x66\x41"
- "\xa4\xcc\xd2\x93\x6e\xe1\x0a\xbb"
- "\xd2\xdd\x18\x23\xe6\x6b\x98\x0b"
- "\x8a\x83\x59\x2c\xc3\xa6\x59\x5b"
- "\x01\x22\x59\xf7\xdc\xb0\x87\x7e"
- "\xdb\x7d\xf4\x71\x41\xab\xbd\xee"
- "\x79\xbe\x3c\x01\x76\x0b\x2d\x0a"
- "\x42\xc9\x77\x8c\xbb\x54\x95\x60"
- "\x43\x2e\xe0\x17\x52\xbd\x90\xc9"
- "\xc2\x2c\xdd\x90\x24\x22\x76\x40"
- "\x5c\xb9\x41\xc9\xa1\xd5\xbd\xe3"
- "\x44\xe0\xa4\xab\xcc\xb8\xe2\x32"
- "\x02\x15\x04\x1f\x8c\xec\x5d\x14"
- "\xac\x18\xaa\xef\x6e\x33\x19\x6e"
- "\xde\xfe\x19\xdb\xeb\x61\xca\x18"
- "\xad\xd8\x3d\xbf\x09\x11\xc7\xa5"
- "\x86\x0b\x0f\xe5\x3e\xde\xe8\xd9"
- "\x0a\x69\x9e\x4c\x20\xff\xf9\xc5"
- "\xfa\xf8\xf3\x7f\xa5\x01\x4b\x5e"
- "\x0f\xf0\x3b\x68\xf0\x46\x8c\x2a"
- "\x7a\xc1\x8f\xa0\xfe\x6a\x5b\x44"
- "\x70\x5c\xcc\x92\x2c\x6f\x0f\xbd"
- "\x25\x3e\xb7\x8e\x73\x58\xda\xc9"
- "\xa5\xaa\x9e\xf3\x9b\xfd\x37\x3e"
- "\xe2\x88\xa4\x7b\xc8\x5c\xa8\x93"
- "\x0e\xe7\x9a\x9c\x2e\x95\x18\x9f"
- "\xc8\x45\x0c\x88\x9e\x53\x4f\x3a"
- "\x76\xc1\x35\xfa\x17\xd8\xac\xa0"
- "\x0c\x2d\x47\x2e\x4f\x69\x9b\xf7"
- "\xd0\xb6\x96\x0c\x19\xb3\x08\x01"
- "\x65\x7a\x1f\xc7\x31\x86\xdb\xc8"
- "\xc1\x99\x8f\xf8\x08\x4a\x9d\x23"
- "\x22\xa8\xcf\x27\x01\x01\x88\x93"
- "\x9c\x86\x45\xbd\xe0\x51\xca\x52"
- "\x84\xba\xfe\x03\xf7\xda\xc5\xce"
- "\x3e\x77\x75\x86\xaf\x84\xc8\x05"
- "\x44\x01\x0f\x02\xf3\x58\xb0\x06"
- "\x5a\xd7\x12\x30\x8d\xdf\x1f\x1f"
- "\x0a\xe6\xd2\xea\xf6\x3a\x7a\x99"
- "\x63\xe8\xd2\xc1\x4a\x45\x8b\x40"
- "\x4d\x0a\xa9\x76\x92\xb3\xda\x87"
- "\x36\x33\xf0\x78\xc3\x2f\x5f\x02"
- "\x1a\x6a\x2c\x32\xcd\x76\xbf\xbd"
- "\x5a\x26\x20\x28\x8c\x8c\xbc\x52"
- "\x3d\x0a\xc9\xcb\xab\xa4\x21\xb0"
- "\x54\x40\x81\x44\xc7\xd6\x1c\x11"
- "\x44\xc6\x02\x92\x14\x5a\xbf\x1a"
- "\x09\x8a\x18\xad\xcd\x64\x3d\x53"
- "\x4a\xb6\xa5\x1b\x57\x0e\xef\xe0"
- "\x8c\x44\x5f\x7d\xbd\x6c\xfd\x60"
- "\xae\x02\x24\xb6\x99\xdd\x8c\xaf"
- "\x59\x39\x75\x3c\xd1\x54\x7b\x86"
- "\xcc\x99\xd9\x28\x0c\xb0\x94\x62"
- "\xf9\x51\xd1\x19\x96\x2d\x66\xf5"
- "\x55\xcf\x9e\x59\xe2\x6b\x2c\x08"
- "\xc0\x54\x48\x24\x45\xc3\x8c\x73"
- "\xea\x27\x6e\x66\x7d\x1d\x0e\x6e"
- "\x13\xe8\x56\x65\x3a\xb0\x81\x5c"
- "\xf0\xe8\xd8\x00\x6b\xcd\x8f\xad"
- "\xdd\x53\xf3\xa4\x6c\x43\xd6\x31"
- "\xaf\xd2\x76\x1e\x91\x12\xdb\x3c"
- "\x8c\xc2\x81\xf0\x49\xdb\xe2\x6b"
- "\x76\x62\x0a\x04\xe4\xaa\x8a\x7c"
- "\x08\x0b\x5d\xd0\xee\x1d\xfb\xc4"
- "\x02\x75\x42\xd6\xba\xa7\x22\xa8"
- "\x47\x29\xb7\x85\x6d\x93\x3a\xdb"
- "\x00\x53\x0b\xa2\xeb\xf8\xfe\x01"
- "\x6f\x8a\x31\xd6\x17\x05\x6f\x67"
- "\x88\x95\x32\xfe\x4f\xa6\x4b\xf8"
- "\x03\xe4\xcd\x9a\x18\xe8\x4e\x2d"
- "\xf7\x97\x9a\x0c\x7d\x9f\x7e\x44"
- "\x69\x51\xe0\x32\x6b\x62\x86\x8f"
- "\xa6\x8e\x0b\x21\x96\xe5\xaf\x77"
- "\xc0\x83\xdf\xa5\x0e\xd0\xa1\x04"
- "\xaf\xc1\x10\xcb\x5a\x40\xe4\xe3"
- "\x38\x7e\x07\xe8\x4d\xfa\xed\xc5"
- "\xf0\x37\xdf\xbb\x8a\xcf\x3d\xdc"
- "\x61\xd2\xc6\x2b\xff\x07\xc9\x2f"
- "\x0c\x2d\x5c\x07\xa8\x35\x6a\xfc"
- "\xae\x09\x03\x45\x74\x51\x4d\xc4"
- "\xb8\x23\x87\x4a\x99\x27\x20\x87"
- "\x62\x44\x0a\x4a\xce\x78\x47\x22",
- .ksize = 1088,
- .plaintext = "\x8e\xb0\x4c\xde\x9c\x4a\x04\x5a"
- "\xf6\xa9\x7f\x45\x25\xa5\x7b\x3a"
- "\xbc\x4d\x73\x39\x81\xb5\xbd\x3d"
- "\x21\x6f\xd7\x37\x50\x3c\x7b\x28"
- "\xd1\x03\x3a\x17\xed\x7b\x7c\x2a"
- "\x16\xbc\xdf\x19\x89\x52\x71\x31"
- "\xb6\xc0\xfd\xb5\xd3\xba\x96\x99"
- "\xb6\x34\x0b\xd0\x99\x93\xfc\x1a"
- "\x01\x3c\x85\xc6\x9b\x78\x5c\x8b"
- "\xfe\xae\xd2\xbf\xb2\x6f\xf9\xed"
- "\xc8\x25\x17\xfe\x10\x3b\x7d\xda"
- "\xf4\x8d\x35\x4b\x7c\x7b\x82\xe7"
- "\xc2\xb3\xee\x60\x4a\x03\x86\xc9"
- "\x4e\xb5\xc4\xbe\xd2\xbd\x66\xf1"
- "\x13\xf1\x09\xab\x5d\xca\x63\x1f"
- "\xfc\xfb\x57\x2a\xfc\xca\x66\xd8"
- "\x77\x84\x38\x23\x1d\xac\xd3\xb3"
- "\x7a\xad\x4c\x70\xfa\x9c\xc9\x61"
- "\xa6\x1b\xba\x33\x4b\x4e\x33\xec"
- "\xa0\xa1\x64\x39\x40\x05\x1c\xc2"
- "\x3f\x49\x9d\xae\xf2\xc5\xf2\xc5"
- "\xfe\xe8\xf4\xc2\xf9\x96\x2d\x28"
- "\x92\x30\x44\xbc\xd2\x7f\xe1\x6e"
- "\x62\x02\x8f\x3d\x1c\x80\xda\x0e"
- "\x6a\x90\x7e\x75\xff\xec\x3e\xc4"
- "\xcd\x16\x34\x3b\x05\x6d\x4d\x20"
- "\x1c\x7b\xf5\x57\x4f\xfa\x3d\xac"
- "\xd0\x13\x55\xe8\xb3\xe1\x1b\x78"
- "\x30\xe6\x9f\x84\xd4\x69\xd1\x08"
- "\x12\x77\xa7\x4a\xbd\xc0\xf2\xd2"
- "\x78\xdd\xa3\x81\x12\xcb\x6c\x14"
- "\x90\x61\xe2\x84\xc6\x2b\x16\xcc"
- "\x40\x99\x50\x88\x01\x09\x64\x4f"
- "\x0a\x80\xbe\x61\xae\x46\xc9\x0a"
- "\x5d\xe0\xfb\x72\x7a\x1a\xdd\x61"
- "\x63\x20\x05\xa0\x4a\xf0\x60\x69"
- "\x7f\x92\xbc\xbf\x4e\x39\x4d\xdd"
- "\x74\xd1\xb7\xc0\x5a\x34\xb7\xae"
- "\x76\x65\x2e\xbc\x36\xb9\x04\x95"
- "\x42\xe9\x6f\xca\x78\xb3\x72\x07"
- "\xa3\xba\x02\x94\x67\x4c\xb1\xd7"
- "\xe9\x30\x0d\xf0\x3b\xb8\x10\x6d"
- "\xea\x2b\x21\xbf\x74\x59\x82\x97"
- "\x85\xaa\xf1\xd7\x54\x39\xeb\x05"
- "\xbd\xf3\x40\xa0\x97\xe6\x74\xfe"
- "\xb4\x82\x5b\xb1\x36\xcb\xe8\x0d"
- "\xce\x14\xd9\xdf\xf1\x94\x22\xcd"
- "\xd6\x00\xba\x04\x4c\x05\x0c\xc0"
- "\xd1\x5a\xeb\x52\xd5\xa8\x8e\xc8"
- "\x97\xa1\xaa\xc1\xea\xc1\xbe\x7c"
- "\x36\xb3\x36\xa0\xc6\x76\x66\xc5"
- "\xe2\xaf\xd6\x5c\xe2\xdb\x2c\xb3"
- "\x6c\xb9\x99\x7f\xff\x9f\x03\x24"
- "\xe1\x51\x44\x66\xd8\x0c\x5d\x7f"
- "\x5c\x85\x22\x2a\xcf\x6d\x79\x28"
- "\xab\x98\x01\x72\xfe\x80\x87\x5f"
- "\x46\xba\xef\x81\x24\xee\xbf\xb0"
- "\x24\x74\xa3\x65\x97\x12\xc4\xaf"
- "\x8b\xa0\x39\xda\x8a\x7e\x74\x6e"
- "\x1b\x42\xb4\x44\x37\xfc\x59\xfd"
- "\x86\xed\xfb\x8c\x66\x33\xda\x63"
- "\x75\xeb\xe1\xa4\x85\x4f\x50\x8f"
- "\x83\x66\x0d\xd3\x37\xfa\xe6\x9c"
- "\x4f\x30\x87\x35\x18\xe3\x0b\xb7"
- "\x6e\x64\x54\xcd\x70\xb3\xde\x54"
- "\xb7\x1d\xe6\x4c\x4d\x55\x12\x12"
- "\xaf\x5f\x7f\x5e\xee\x9d\xe8\x8e"
- "\x32\x9d\x4e\x75\xeb\xc6\xdd\xaa"
- "\x48\x82\xa4\x3f\x3c\xd7\xd3\xa8"
- "\x63\x9e\x64\xfe\xe3\x97\x00\x62"
- "\xe5\x40\x5d\xc3\xad\x72\xe1\x28"
- "\x18\x50\xb7\x75\xef\xcd\x23\xbf"
- "\x3f\xc0\x51\x36\xf8\x41\xc3\x08"
- "\xcb\xf1\x8d\x38\x34\xbd\x48\x45"
- "\x75\xed\xbc\x65\x7b\xb5\x0c\x9b"
- "\xd7\x67\x7d\x27\xb4\xc4\x80\xd7"
- "\xa9\xb9\xc7\x4a\x97\xaa\xda\xc8"
- "\x3c\x74\xcf\x36\x8f\xe4\x41\xe3"
- "\xd4\xd3\x26\xa7\xf3\x23\x9d\x8f"
- "\x6c\x20\x05\x32\x3e\xe0\xc3\xc8"
- "\x56\x3f\xa7\x09\xb7\xfb\xc7\xf7"
- "\xbe\x2a\xdd\x0f\x06\x7b\x0d\xdd"
- "\xb0\xb4\x86\x17\xfd\xb9\x04\xe5"
- "\xc0\x64\x5d\xad\x2a\x36\x38\xdb"
- "\x24\xaf\x5b\xff\xca\xf9\x41\xe8"
- "\xf9\x2f\x1e\x5e\xf9\xf5\xd5\xf2"
- "\xb2\x88\xca\xc9\xa1\x31\xe2\xe8"
- "\x10\x95\x65\xbf\xf1\x11\x61\x7a"
- "\x30\x1a\x54\x90\xea\xd2\x30\xf6"
- "\xa5\xad\x60\xf9\x4d\x84\x21\x1b"
- "\xe4\x42\x22\xc8\x12\x4b\xb0\x58"
- "\x3e\x9c\x2d\x32\x95\x0a\x8e\xb0"
- "\x0a\x7e\x77\x2f\xe8\x97\x31\x6a"
- "\xf5\x59\xb4\x26\xe6\x37\x12\xc9"
- "\xcb\xa0\x58\x33\x6f\xd5\x55\x55"
- "\x3c\xa1\x33\xb1\x0b\x7e\x2e\xb4"
- "\x43\x2a\x84\x39\xf0\x9c\xf4\x69"
- "\x4f\x1e\x79\xa6\x15\x1b\x87\xbb"
- "\xdb\x9b\xe0\xf1\x0b\xba\xe3\x6e"
- "\xcc\x2f\x49\x19\x22\x29\xfc\x71"
- "\xbb\x77\x38\x18\x61\xaf\x85\x76"
- "\xeb\xd1\x09\xcc\x86\x04\x20\x9a"
- "\x66\x53\x2f\x44\x8b\xc6\xa3\xd2"
- "\x5f\xc7\x79\x82\x66\xa8\x6e\x75"
- "\x7d\x94\xd1\x86\x75\x0f\xa5\x4f"
- "\x3c\x7a\x33\xce\xd1\x6e\x9d\x7b"
- "\x1f\x91\x37\xb8\x37\x80\xfb\xe0"
- "\x52\x26\xd0\x9a\xd4\x48\x02\x41"
- "\x05\xe3\x5a\x94\xf1\x65\x61\x19"
- "\xb8\x88\x4e\x2b\xea\xba\x8b\x58"
- "\x8b\x42\x01\x00\xa8\xfe\x00\x5c"
- "\xfe\x1c\xee\x31\x15\x69\xfa\xb3"
- "\x9b\x5f\x22\x8e\x0d\x2c\xe3\xa5"
- "\x21\xb9\x99\x8a\x8e\x94\x5a\xef"
- "\x13\x3e\x99\x96\x79\x6e\xd5\x42"
- "\x36\x03\xa9\xe2\xca\x65\x4e\x8a"
- "\x8a\x30\xd2\x7d\x74\xe7\xf0\xaa"
- "\x23\x26\xdd\xcb\x82\x39\xfc\x9d"
- "\x51\x76\x21\x80\xa2\xbe\x93\x03"
- "\x47\xb0\xc1\xb6\xdc\x63\xfd\x9f"
- "\xca\x9d\xa5\xca\x27\x85\xe2\xd8"
- "\x15\x5b\x7e\x14\x7a\xc4\x89\xcc"
- "\x74\x14\x4b\x46\xd2\xce\xac\x39"
- "\x6b\x6a\x5a\xa4\x0e\xe3\x7b\x15"
- "\x94\x4b\x0f\x74\xcb\x0c\x7f\xa9"
- "\xbe\x09\x39\xa3\xdd\x56\x5c\xc7"
- "\x99\x56\x65\x39\xf4\x0b\x7d\x87"
- "\xec\xaa\xe3\x4d\x22\x65\x39\x4e",
- .psize = 1024,
- .digest = "\x64\x3a\xbc\xc3\x3f\x74\x40\x51"
- "\x6e\x56\x01\x1a\x51\xec\x36\xde",
- }, {
- .key = "\x1b\x82\x2e\x1b\x17\x23\xb9\x6d"
- "\xdc\x9c\xda\x99\x07\xe3\x5f\xd8"
- "\xd2\xf8\x43\x80\x8d\x86\x7d\x80"
- "\x1a\xd0\xcc\x13\xb9\x11\x05\x3f"
- "\x7e\xcf\x7e\x80\x0e\xd8\x25\x48"
- "\x8b\xaa\x63\x83\x92\xd0\x72\xf5"
- "\x4f\x67\x7e\x50\x18\x25\xa4\xd1"
- "\xe0\x7e\x1e\xba\xd8\xa7\x6e\xdb"
- "\x1a\xcc\x0d\xfe\x9f\x6d\x22\x35"
- "\xe1\xe6\xe0\xa8\x7b\x9c\xb1\x66"
- "\xa3\xf8\xff\x4d\x90\x84\x28\xbc"
- "\xdc\x19\xc7\x91\x49\xfc\xf6\x33"
- "\xc9\x6e\x65\x7f\x28\x6f\x68\x2e"
- "\xdf\x1a\x75\xe9\xc2\x0c\x96\xb9"
- "\x31\x22\xc4\x07\xc6\x0a\x2f\xfd"
- "\x36\x06\x5f\x5c\xc5\xb1\x3a\xf4"
- "\x5e\x48\xa4\x45\x2b\x88\xa7\xee"
- "\xa9\x8b\x52\xcc\x99\xd9\x2f\xb8"
- "\xa4\x58\x0a\x13\xeb\x71\x5a\xfa"
- "\xe5\x5e\xbe\xf2\x64\xad\x75\xbc"
- "\x0b\x5b\x34\x13\x3b\x23\x13\x9a"
- "\x69\x30\x1e\x9a\xb8\x03\xb8\x8b"
- "\x3e\x46\x18\x6d\x38\xd9\xb3\xd8"
- "\xbf\xf1\xd0\x28\xe6\x51\x57\x80"
- "\x5e\x99\xfb\xd0\xce\x1e\x83\xf7"
- "\xe9\x07\x5a\x63\xa9\xef\xce\xa5"
- "\xfb\x3f\x37\x17\xfc\x0b\x37\x0e"
- "\xbb\x4b\x21\x62\xb7\x83\x0e\xa9"
- "\x9e\xb0\xc4\xad\x47\xbe\x35\xe7"
- "\x51\xb2\xf2\xac\x2b\x65\x7b\x48"
- "\xe3\x3f\x5f\xb6\x09\x04\x0c\x58"
- "\xce\x99\xa9\x15\x2f\x4e\xc1\xf2"
- "\x24\x48\xc0\xd8\x6c\xd3\x76\x17"
- "\x83\x5d\xe6\xe3\xfd\x01\x8e\xf7"
- "\x42\xa5\x04\x29\x30\xdf\xf9\x00"
- "\x4a\xdc\x71\x22\x1a\x33\x15\xb6"
- "\xd7\x72\xfb\x9a\xb8\xeb\x2b\x38"
- "\xea\xa8\x61\xa8\x90\x11\x9d\x73"
- "\x2e\x6c\xce\x81\x54\x5a\x9f\xcd"
- "\xcf\xd5\xbd\x26\x5d\x66\xdb\xfb"
- "\xdc\x1e\x7c\x10\xfe\x58\x82\x10"
- "\x16\x24\x01\xce\x67\x55\x51\xd1"
- "\xdd\x6b\x44\xa3\x20\x8e\xa9\xa6"
- "\x06\xa8\x29\x77\x6e\x00\x38\x5b"
- "\xde\x4d\x58\xd8\x1f\x34\xdf\xf9"
- "\x2c\xac\x3e\xad\xfb\x92\x0d\x72"
- "\x39\xa4\xac\x44\x10\xc0\x43\xc4"
- "\xa4\x77\x3b\xfc\xc4\x0d\x37\xd3"
- "\x05\x84\xda\x53\x71\xf8\x80\xd3"
- "\x34\x44\xdb\x09\xb4\x2b\x8e\xe3"
- "\x00\x75\x50\x9e\x43\x22\x00\x0b"
- "\x7c\x70\xab\xd4\x41\xf1\x93\xcd"
- "\x25\x2d\x84\x74\xb5\xf2\x92\xcd"
- "\x0a\x28\xea\x9a\x49\x02\x96\xcb"
- "\x85\x9e\x2f\x33\x03\x86\x1d\xdc"
- "\x1d\x31\xd5\xfc\x9d\xaa\xc5\xe9"
- "\x9a\xc4\x57\xf5\x35\xed\xf4\x4b"
- "\x3d\x34\xc2\x29\x13\x86\x36\x42"
- "\x5d\xbf\x90\x86\x13\x77\xe5\xc3"
- "\x62\xb4\xfe\x0b\x70\x39\x35\x65"
- "\x02\xea\xf6\xce\x57\x0c\xbb\x74"
- "\x29\xe3\xfd\x60\x90\xfd\x10\x38"
- "\xd5\x4e\x86\xbd\x37\x70\xf0\x97"
- "\xa6\xab\x3b\x83\x64\x52\xca\x66"
- "\x2f\xf9\xa4\xca\x3a\x55\x6b\xb0"
- "\xe8\x3a\x34\xdb\x9e\x48\x50\x2f"
- "\x3b\xef\xfd\x08\x2d\x5f\xc1\x37"
- "\x5d\xbe\x73\xe4\xd8\xe9\xac\xca"
- "\x8a\xaa\x48\x7c\x5c\xf4\xa6\x96"
- "\x5f\xfa\x70\xa6\xb7\x8b\x50\xcb"
- "\xa6\xf5\xa9\xbd\x7b\x75\x4c\x22"
- "\x0b\x19\x40\x2e\xc9\x39\x39\x32"
- "\x83\x03\xa8\xa4\x98\xe6\x8e\x16"
- "\xb9\xde\x08\xc5\xfc\xbf\xad\x39"
- "\xa8\xc7\x93\x6c\x6f\x23\xaf\xc1"
- "\xab\xe1\xdf\xbb\x39\xae\x93\x29"
- "\x0e\x7d\x80\x8d\x3e\x65\xf3\xfd"
- "\x96\x06\x65\x90\xa1\x28\x64\x4b"
- "\x69\xf9\xa8\x84\x27\x50\xfc\x87"
- "\xf7\xbf\x55\x8e\x56\x13\x58\x7b"
- "\x85\xb4\x6a\x72\x0f\x40\xf1\x4f"
- "\x83\x81\x1f\x76\xde\x15\x64\x7a"
- "\x7a\x80\xe4\xc7\x5e\x63\x01\x91"
- "\xd7\x6b\xea\x0b\x9b\xa2\x99\x3b"
- "\x6c\x88\xd8\xfd\x59\x3c\x8d\x22"
- "\x86\x56\xbe\xab\xa1\x37\x08\x01"
- "\x50\x85\x69\x29\xee\x9f\xdf\x21"
- "\x3e\x20\x20\xf5\xb0\xbb\x6b\xd0"
- "\x9c\x41\x38\xec\x54\x6f\x2d\xbd"
- "\x0f\xe1\xbd\xf1\x2b\x6e\x60\x56"
- "\x29\xe5\x7a\x70\x1c\xe2\xfc\x97"
- "\x82\x68\x67\xd9\x3d\x1f\xfb\xd8"
- "\x07\x9f\xbf\x96\x74\xba\x6a\x0e"
- "\x10\x48\x20\xd8\x13\x1e\xb5\x44"
- "\xf2\xcc\xb1\x8b\xfb\xbb\xec\xd7"
- "\x37\x70\x1f\x7c\x55\xd2\x4b\xb9"
- "\xfd\x70\x5e\xa3\x91\x73\x63\x52"
- "\x13\x47\x5a\x06\xfb\x01\x67\xa5"
- "\xc0\xd0\x49\x19\x56\x66\x9a\x77"
- "\x64\xaf\x8c\x25\x91\x52\x87\x0e"
- "\x18\xf3\x5f\x97\xfd\x71\x13\xf8"
- "\x05\xa5\x39\xcc\x65\xd3\xcc\x63"
- "\x5b\xdb\x5f\x7e\x5f\x6e\xad\xc4"
- "\xf4\xa0\xc5\xc2\x2b\x4d\x97\x38"
- "\x4f\xbc\xfa\x33\x17\xb4\x47\xb9"
- "\x43\x24\x15\x8d\xd2\xed\x80\x68"
- "\x84\xdb\x04\x80\xca\x5e\x6a\x35"
- "\x2c\x2c\xe7\xc5\x03\x5f\x54\xb0"
- "\x5e\x4f\x1d\x40\x54\x3d\x78\x9a"
- "\xac\xda\x80\x27\x4d\x15\x4c\x1a"
- "\x6e\x80\xc9\xc4\x3b\x84\x0e\xd9"
- "\x2e\x93\x01\x8c\xc3\xc8\x91\x4b"
- "\xb3\xaa\x07\x04\x68\x5b\x93\xa5"
- "\xe7\xc4\x9d\xe7\x07\xee\xf5\x3b"
- "\x40\x89\xcc\x60\x34\x9d\xb4\x06"
- "\x1b\xef\x92\xe6\xc1\x2a\x7d\x0f"
- "\x81\xaa\x56\xe3\xd7\xed\xa7\xd4"
- "\xa7\x3a\x49\xc4\xad\x81\x5c\x83"
- "\x55\x8e\x91\x54\xb7\x7d\x65\xa5"
- "\x06\x16\xd5\x9a\x16\xc1\xb0\xa2"
- "\x06\xd8\x98\x47\x73\x7e\x73\xa0"
- "\xb8\x23\xb1\x52\xbf\x68\x74\x5d"
- "\x0b\xcb\xfa\x8c\x46\xe3\x24\xe6"
- "\xab\xd4\x69\x8d\x8c\xf2\x8a\x59"
- "\xbe\x48\x46\x50\x8c\x9a\xe8\xe3"
- "\x31\x55\x0a\x06\xed\x4f\xf8\xb7"
- "\x4f\xe3\x85\x17\x30\xbd\xd5\x20"
- "\xe7\x5b\xb2\x32\xcf\x6b\x16\x44"
- "\xd2\xf5\x7e\xd7\xd1\x2f\xee\x64"
- "\x3e\x9d\x10\xef\x27\x35\x43\x64"
- "\x67\xfb\x7a\x7b\xe0\x62\x31\x9a"
- "\x4d\xdf\xa5\xab\xc0\x20\xbb\x01"
- "\xe9\x7b\x54\xf1\xde\xb2\x79\x50"
- "\x6c\x4b\x91\xdb\x7f\xbb\x50\xc1"
- "\x55\x44\x38\x9a\xe0\x9f\xe8\x29"
- "\x6f\x15\xf8\x4e\xa6\xec\xa0\x60",
- .ksize = 1088,
- .plaintext = "\x15\x68\x9e\x2f\xad\x15\x52\xdf"
- "\xf0\x42\x62\x24\x2a\x2d\xea\xbf"
- "\xc7\xf3\xb4\x1a\xf5\xed\xb2\x08"
- "\x15\x60\x1c\x00\x77\xbf\x0b\x0e"
- "\xb7\x2c\xcf\x32\x3a\xc7\x01\x77"
- "\xef\xa6\x75\xd0\x29\xc7\x68\x20"
- "\xb2\x92\x25\xbf\x12\x34\xe9\xa4"
- "\xfd\x32\x7b\x3f\x7c\xbd\xa5\x02"
- "\x38\x41\xde\xc9\xc1\x09\xd9\xfc"
- "\x6e\x78\x22\x83\x18\xf7\x50\x8d"
- "\x8f\x9c\x2d\x02\xa5\x30\xac\xff"
- "\xea\x63\x2e\x80\x37\x83\xb0\x58"
- "\xda\x2f\xef\x21\x55\xba\x7b\xb1"
- "\xb6\xed\xf5\xd2\x4d\xaa\x8c\xa9"
- "\xdd\xdb\x0f\xb4\xce\xc1\x9a\xb1"
- "\xc1\xdc\xbd\xab\x86\xc2\xdf\x0b"
- "\xe1\x2c\xf9\xbe\xf6\xd8\xda\x62"
- "\x72\xdd\x98\x09\x52\xc0\xc4\xb6"
- "\x7b\x17\x5c\xf5\xd8\x4b\x88\xd6"
- "\x6b\xbf\x84\x4a\x3f\xf5\x4d\xd2"
- "\x94\xe2\x9c\xff\xc7\x3c\xd9\xc8"
- "\x37\x38\xbc\x8c\xf3\xe7\xb7\xd0"
- "\x1d\x78\xc4\x39\x07\xc8\x5e\x79"
- "\xb6\x5a\x90\x5b\x6e\x97\xc9\xd4"
- "\x82\x9c\xf3\x83\x7a\xe7\x97\xfc"
- "\x1d\xbb\xef\xdb\xce\xe0\x82\xad"
- "\xca\x07\x6c\x54\x62\x6f\x81\xe6"
- "\x7a\x5a\x96\x6e\x80\x3a\xa2\x37"
- "\x6f\xc6\xa4\x29\xc3\x9e\x19\x94"
- "\x9f\xb0\x3e\x38\xfb\x3c\x2b\x7d"
- "\xaa\xb8\x74\xda\x54\x23\x51\x12"
- "\x4b\x96\x36\x8f\x91\x4f\x19\x37"
- "\x83\xc9\xdd\xc7\x1a\x32\x2d\xab"
- "\xc7\x89\xe2\x07\x47\x6c\xe8\xa6"
- "\x70\x6b\x8e\x0c\xda\x5c\x6a\x59"
- "\x27\x33\x0e\xe1\xe1\x20\xe8\xc8"
- "\xae\xdc\xd0\xe3\x6d\xa8\xa6\x06"
- "\x41\xb4\xd4\xd4\xcf\x91\x3e\x06"
- "\xb0\x9a\xf7\xf1\xaa\xa6\x23\x92"
- "\x10\x86\xf0\x94\xd1\x7c\x2e\x07"
- "\x30\xfb\xc5\xd8\xf3\x12\xa9\xe8"
- "\x22\x1c\x97\x1a\xad\x96\xb0\xa1"
- "\x72\x6a\x6b\xb4\xfd\xf7\xe8\xfa"
- "\xe2\x74\xd8\x65\x8d\x35\x17\x4b"
- "\x00\x23\x5c\x8c\x70\xad\x71\xa2"
- "\xca\xc5\x6c\x59\xbf\xb4\xc0\x6d"
- "\x86\x98\x3e\x19\x5a\x90\x92\xb1"
- "\x66\x57\x6a\x91\x68\x7c\xbc\xf3"
- "\xf1\xdb\x94\xf8\x48\xf1\x36\xd8"
- "\x78\xac\x1c\xa9\xcc\xd6\x27\xba"
- "\x91\x54\x22\xf5\xe6\x05\x3f\xcc"
- "\xc2\x8f\x2c\x3b\x2b\xc3\x2b\x2b"
- "\x3b\xb8\xb6\x29\xb7\x2f\x94\xb6"
- "\x7b\xfc\x94\x3e\xd0\x7a\x41\x59"
- "\x7b\x1f\x9a\x09\xa6\xed\x4a\x82"
- "\x9d\x34\x1c\xbd\x4e\x1c\x3a\x66"
- "\x80\x74\x0e\x9a\x4f\x55\x54\x47"
- "\x16\xba\x2a\x0a\x03\x35\x99\xa3"
- "\x5c\x63\x8d\xa2\x72\x8b\x17\x15"
- "\x68\x39\x73\xeb\xec\xf2\xe8\xf5"
- "\x95\x32\x27\xd6\xc4\xfe\xb0\x51"
- "\xd5\x0c\x50\xc5\xcd\x6d\x16\xb3"
- "\xa3\x1e\x95\x69\xad\x78\x95\x06"
- "\xb9\x46\xf2\x6d\x24\x5a\x99\x76"
- "\x73\x6a\x91\xa6\xac\x12\xe1\x28"
- "\x79\xbc\x08\x4e\x97\x00\x98\x63"
- "\x07\x1c\x4e\xd1\x68\xf3\xb3\x81"
- "\xa8\xa6\x5f\xf1\x01\xc9\xc1\xaf"
- "\x3a\x96\xf9\x9d\xb5\x5a\x5f\x8f"
- "\x7e\xc1\x7e\x77\x0a\x40\xc8\x8e"
- "\xfc\x0e\xed\xe1\x0d\xb0\xe5\x5e"
- "\x5e\x6f\xf5\x7f\xab\x33\x7d\xcd"
- "\xf0\x09\x4b\xb2\x11\x37\xdc\x65"
- "\x97\x32\x62\x71\x3a\x29\x54\xb9"
- "\xc7\xa4\xbf\x75\x0f\xf9\x40\xa9"
- "\x8d\xd7\x8b\xa7\xe0\x9a\xbe\x15"
- "\xc6\xda\xd8\x00\x14\x69\x1a\xaf"
- "\x5f\x79\xc3\xf5\xbb\x6c\x2a\x9d"
- "\xdd\x3c\x5f\x97\x21\xe1\x3a\x03"
- "\x84\x6a\xe9\x76\x11\x1f\xd3\xd5"
- "\xf0\x54\x20\x4d\xc2\x91\xc3\xa4"
- "\x36\x25\xbe\x1b\x2a\x06\xb7\xf3"
- "\xd1\xd0\x55\x29\x81\x4c\x83\xa3"
- "\xa6\x84\x1e\x5c\xd1\xd0\x6c\x90"
- "\xa4\x11\xf0\xd7\x63\x6a\x48\x05"
- "\xbc\x48\x18\x53\xcd\xb0\x8d\xdb"
- "\xdc\xfe\x55\x11\x5c\x51\xb3\xab"
- "\xab\x63\x3e\x31\x5a\x8b\x93\x63"
- "\x34\xa9\xba\x2b\x69\x1a\xc0\xe3"
- "\xcb\x41\xbc\xd7\xf5\x7f\x82\x3e"
- "\x01\xa3\x3c\x72\xf4\xfe\xdf\xbe"
- "\xb1\x67\x17\x2b\x37\x60\x0d\xca"
- "\x6f\xc3\x94\x2c\xd2\x92\x6d\x9d"
- "\x75\x18\x77\xaa\x29\x38\x96\xed"
- "\x0e\x20\x70\x92\xd5\xd0\xb4\x00"
- "\xc0\x31\xf2\xc9\x43\x0e\x75\x1d"
- "\x4b\x64\xf2\x1f\xf2\x29\x6c\x7b"
- "\x7f\xec\x59\x7d\x8c\x0d\xd4\xd3"
- "\xac\x53\x4c\xa3\xde\x42\x92\x95"
- "\x6d\xa3\x4f\xd0\xe6\x3d\xe7\xec"
- "\x7a\x4d\x68\xf1\xfe\x67\x66\x09"
- "\x83\x22\xb1\x98\x43\x8c\xab\xb8"
- "\x45\xe6\x6d\xdf\x5e\x50\x71\xce"
- "\xf5\x4e\x40\x93\x2b\xfa\x86\x0e"
- "\xe8\x30\xbd\x82\xcc\x1c\x9c\x5f"
- "\xad\xfd\x08\x31\xbe\x52\xe7\xe6"
- "\xf2\x06\x01\x62\x25\x15\x99\x74"
- "\x33\x51\x52\x57\x3f\x57\x87\x61"
- "\xb9\x7f\x29\x3d\xcd\x92\x5e\xa6"
- "\x5c\x3b\xf1\xed\x5f\xeb\x82\xed"
- "\x56\x7b\x61\xe7\xfd\x02\x47\x0e"
- "\x2a\x15\xa4\xce\x43\x86\x9b\xe1"
- "\x2b\x4c\x2a\xd9\x42\x97\xf7\x9a"
- "\xe5\x47\x46\x48\xd3\x55\x6f\x4d"
- "\xd9\xeb\x4b\xdd\x7b\x21\x2f\xb3"
- "\xa8\x36\x28\xdf\xca\xf1\xf6\xd9"
- "\x10\xf6\x1c\xfd\x2e\x0c\x27\xe0"
- "\x01\xb3\xff\x6d\x47\x08\x4d\xd4"
- "\x00\x25\xee\x55\x4a\xe9\xe8\x5b"
- "\xd8\xf7\x56\x12\xd4\x50\xb2\xe5"
- "\x51\x6f\x34\x63\x69\xd2\x4e\x96"
- "\x4e\xbc\x79\xbf\x18\xae\xc6\x13"
- "\x80\x92\x77\xb0\xb4\x0f\x29\x94"
- "\x6f\x4c\xbb\x53\x11\x36\xc3\x9f"
- "\x42\x8e\x96\x8a\x91\xc8\xe9\xfc"
- "\xfe\xbf\x7c\x2d\x6f\xf9\xb8\x44"
- "\x89\x1b\x09\x53\x0a\x2a\x92\xc3"
- "\x54\x7a\x3a\xf9\xe2\xe4\x75\x87"
- "\xa0\x5e\x4b\x03\x7a\x0d\x8a\xf4"
- "\x55\x59\x94\x2b\x63\x96\x0e\xf5",
- .psize = 1040,
- .digest = "\xb5\xb9\x08\xb3\x24\x3e\x03\xf0"
- "\xd6\x0b\x57\xbc\x0a\x6d\x89\x59",
- }, {
- .key = "\xf6\x34\x42\x71\x35\x52\x8b\x58"
- "\x02\x3a\x8e\x4a\x8d\x41\x13\xe9"
- "\x7f\xba\xb9\x55\x9d\x73\x4d\xf8"
- "\x3f\x5d\x73\x15\xff\xd3\x9e\x7f"
- "\x20\x2a\x6a\xa8\xd1\xf0\x8f\x12"
- "\x6b\x02\xd8\x6c\xde\xba\x80\x22"
- "\x19\x37\xc8\xd0\x4e\x89\x17\x7c"
- "\x7c\xdd\x88\xfd\x41\xc0\x04\xb7"
- "\x1d\xac\x19\xe3\x20\xc7\x16\xcf"
- "\x58\xee\x1d\x7a\x61\x69\xa9\x12"
- "\x4b\xef\x4f\xb6\x38\xdd\x78\xf8"
- "\x28\xee\x70\x08\xc7\x7c\xcc\xc8"
- "\x1e\x41\xf5\x80\x86\x70\xd0\xf0"
- "\xa3\x87\x6b\x0a\x00\xd2\x41\x28"
- "\x74\x26\xf1\x24\xf3\xd0\x28\x77"
- "\xd7\xcd\xf6\x2d\x61\xf4\xa2\x13"
- "\x77\xb4\x6f\xa0\xf4\xfb\xd6\xb5"
- "\x38\x9d\x5a\x0c\x51\xaf\xad\x63"
- "\x27\x67\x8c\x01\xea\x42\x1a\x66"
- "\xda\x16\x7c\x3c\x30\x0c\x66\x53"
- "\x1c\x88\xa4\x5c\xb2\xe3\x78\x0a"
- "\x13\x05\x6d\xe2\xaf\xb3\xe4\x75"
- "\x00\x99\x58\xee\x76\x09\x64\xaa"
- "\xbb\x2e\xb1\x81\xec\xd8\x0e\xd3"
- "\x0c\x33\x5d\xb7\x98\xef\x36\xb6"
- "\xd2\x65\x69\x41\x70\x12\xdc\x25"
- "\x41\x03\x99\x81\x41\x19\x62\x13"
- "\xd1\x0a\x29\xc5\x8c\xe0\x4c\xf3"
- "\xd6\xef\x4c\xf4\x1d\x83\x2e\x6d"
- "\x8e\x14\x87\xed\x80\xe0\xaa\xd3"
- "\x08\x04\x73\x1a\x84\x40\xf5\x64"
- "\xbd\x61\x32\x65\x40\x42\xfb\xb0"
- "\x40\xf6\x40\x8d\xc7\x7f\x14\xd0"
- "\x83\x99\xaa\x36\x7e\x60\xc6\xbf"
- "\x13\x8a\xf9\x21\xe4\x7e\x68\x87"
- "\xf3\x33\x86\xb4\xe0\x23\x7e\x0a"
- "\x21\xb1\xf5\xad\x67\x3c\x9c\x9d"
- "\x09\xab\xaf\x5f\xba\xe0\xd0\x82"
- "\x48\x22\x70\xb5\x6d\x53\xd6\x0e"
- "\xde\x64\x92\x41\xb0\xd3\xfb\xda"
- "\x21\xfe\xab\xea\x20\xc4\x03\x58"
- "\x18\x2e\x7d\x2f\x03\xa9\x47\x66"
- "\xdf\x7b\xa4\x6b\x34\x6b\x55\x9c"
- "\x4f\xd7\x9c\x47\xfb\xa9\x42\xec"
- "\x5a\x12\xfd\xfe\x76\xa0\x92\x9d"
- "\xfe\x1e\x16\xdd\x24\x2a\xe4\x27"
- "\xd5\xa9\xf2\x05\x4f\x83\xa2\xaf"
- "\xfe\xee\x83\x7a\xad\xde\xdf\x9a"
- "\x80\xd5\x81\x14\x93\x16\x7e\x46"
- "\x47\xc2\x14\xef\x49\x6e\xb9\xdb"
- "\x40\xe8\x06\x6f\x9c\x2a\xfd\x62"
- "\x06\x46\xfd\x15\x1d\x36\x61\x6f"
- "\x77\x77\x5e\x64\xce\x78\x1b\x85"
- "\xbf\x50\x9a\xfd\x67\xa6\x1a\x65"
- "\xad\x5b\x33\x30\xf1\x71\xaa\xd9"
- "\x23\x0d\x92\x24\x5f\xae\x57\xb0"
- "\x24\x37\x0a\x94\x12\xfb\xb5\xb1"
- "\xd3\xb8\x1d\x12\x29\xb0\x80\x24"
- "\x2d\x47\x9f\x96\x1f\x95\xf1\xb1"
- "\xda\x35\xf6\x29\xe0\xe1\x23\x96"
- "\xc7\xe8\x22\x9b\x7c\xac\xf9\x41"
- "\x39\x01\xe5\x73\x15\x5e\x99\xec"
- "\xb4\xc1\xf4\xe7\xa7\x97\x6a\xd5"
- "\x90\x9a\xa0\x1d\xf3\x5a\x8b\x5f"
- "\xdf\x01\x52\xa4\x93\x31\x97\xb0"
- "\x93\x24\xb5\xbc\xb2\x14\x24\x98"
- "\x4a\x8f\x19\x85\xc3\x2d\x0f\x74"
- "\x9d\x16\x13\x80\x5e\x59\x62\x62"
- "\x25\xe0\xd1\x2f\x64\xef\xba\xac"
- "\xcd\x09\x07\x15\x8a\xcf\x73\xb5"
- "\x8b\xc9\xd8\x24\xb0\x53\xd5\x6f"
- "\xe1\x2b\x77\xb1\xc5\xe4\xa7\x0e"
- "\x18\x45\xab\x36\x03\x59\xa8\xbd"
- "\x43\xf0\xd8\x2c\x1a\x69\x96\xbb"
- "\x13\xdf\x6c\x33\x77\xdf\x25\x34"
- "\x5b\xa5\x5b\x8c\xf9\x51\x05\xd4"
- "\x8b\x8b\x44\x87\x49\xfc\xa0\x8f"
- "\x45\x15\x5b\x40\x42\xc4\x09\x92"
- "\x98\x0c\x4d\xf4\x26\x37\x1b\x13"
- "\x76\x01\x93\x8d\x4f\xe6\xed\x18"
- "\xd0\x79\x7b\x3f\x44\x50\xcb\xee"
- "\xf7\x4a\xc9\x9e\xe0\x96\x74\xa7"
- "\xe6\x93\xb2\x53\xca\x55\xa8\xdc"
- "\x1e\x68\x07\x87\xb7\x2e\xc1\x08"
- "\xb2\xa4\x5b\xaf\xc6\xdb\x5c\x66"
- "\x41\x1c\x51\xd9\xb0\x07\x00\x0d"
- "\xf0\x4c\xdc\x93\xde\xa9\x1e\x8e"
- "\xd3\x22\x62\xd8\x8b\x88\x2c\xea"
- "\x5e\xf1\x6e\x14\x40\xc7\xbe\xaa"
- "\x42\x28\xd0\x26\x30\x78\x01\x9b"
- "\x83\x07\xbc\x94\xc7\x57\xa2\x9f"
- "\x03\x07\xff\x16\xff\x3c\x6e\x48"
- "\x0a\xd0\xdd\x4c\xf6\x64\x9a\xf1"
- "\xcd\x30\x12\x82\x2c\x38\xd3\x26"
- "\x83\xdb\xab\x3e\xc6\xf8\xe6\xfa"
- "\x77\x0a\x78\x82\x75\xf8\x63\x51"
- "\x59\xd0\x8d\x24\x9f\x25\xe6\xa3"
- "\x4c\xbc\x34\xfc\xe3\x10\xc7\x62"
- "\xd4\x23\xc8\x3d\xa7\xc6\xa6\x0a"
- "\x4f\x7e\x29\x9d\x6d\xbe\xb5\xf1"
- "\xdf\xa4\x53\xfa\xc0\x23\x0f\x37"
- "\x84\x68\xd0\xb5\xc8\xc6\xae\xf8"
- "\xb7\x8d\xb3\x16\xfe\x8f\x87\xad"
- "\xd0\xc1\x08\xee\x12\x1c\x9b\x1d"
- "\x90\xf8\xd1\x63\xa4\x92\x3c\xf0"
- "\xc7\x34\xd8\xf1\x14\xed\xa3\xbc"
- "\x17\x7e\xd4\x62\x42\x54\x57\x2c"
- "\x3e\x7a\x35\x35\x17\x0f\x0b\x7f"
- "\x81\xa1\x3f\xd0\xcd\xc8\x3b\x96"
- "\xe9\xe0\x4a\x04\xe1\xb6\x3c\xa1"
- "\xd6\xca\xc4\xbd\xb6\xb5\x95\x34"
- "\x12\x9d\xc5\x96\xf2\xdf\xba\x54"
- "\x76\xd1\xb2\x6b\x3b\x39\xe0\xb9"
- "\x18\x62\xfb\xf7\xfc\x12\xf1\x5f"
- "\x7e\xc7\xe3\x59\x4c\xa6\xc2\x3d"
- "\x40\x15\xf9\xa3\x95\x64\x4c\x74"
- "\x8b\x73\x77\x33\x07\xa7\x04\x1d"
- "\x33\x5a\x7e\x8f\xbd\x86\x01\x4f"
- "\x3e\xb9\x27\x6f\xe2\x41\xf7\x09"
- "\x67\xfd\x29\x28\xc5\xe4\xf6\x18"
- "\x4c\x1b\x49\xb2\x9c\x5b\xf6\x81"
- "\x4f\xbb\x5c\xcc\x0b\xdf\x84\x23"
- "\x58\xd6\x28\x34\x93\x3a\x25\x97"
- "\xdf\xb2\xc3\x9e\x97\x38\x0b\x7d"
- "\x10\xb3\x54\x35\x23\x8c\x64\xee"
- "\xf0\xd8\x66\xff\x8b\x22\xd2\x5b"
- "\x05\x16\x3c\x89\xf7\xb1\x75\xaf"
- "\xc0\xae\x6a\x4f\x3f\xaf\x9a\xf4"
- "\xf4\x9a\x24\xd9\x80\x82\xc0\x12"
- "\xde\x96\xd1\xbe\x15\x0b\x8d\x6a"
- "\xd7\x12\xe4\x85\x9f\x83\xc9\xc3"
- "\xff\x0b\xb5\xaf\x3b\xd8\x6d\x67"
- "\x81\x45\xe6\xac\xec\xc1\x7b\x16"
- "\x18\x0a\xce\x4b\xc0\x2e\x76\xbc"
- "\x1b\xfa\xb4\x34\xb8\xfc\x3e\xc8"
- "\x5d\x90\x71\x6d\x7a\x79\xef\x06",
- .ksize = 1088,
- .plaintext = "\xaa\x5d\x54\xcb\xea\x1e\x46\x0f"
- "\x45\x87\x70\x51\x8a\x66\x7a\x33"
- "\xb4\x18\xff\xa9\x82\xf9\x45\x4b"
- "\x93\xae\x2e\x7f\xab\x98\xfe\xbf"
- "\x01\xee\xe5\xa0\x37\x8f\x57\xa6"
- "\xb0\x76\x0d\xa4\xd6\x28\x2b\x5d"
- "\xe1\x03\xd6\x1c\x6f\x34\x0d\xe7"
- "\x61\x2d\x2e\xe5\xae\x5d\x47\xc7"
- "\x80\x4b\x18\x8f\xa8\x99\xbc\x28"
- "\xed\x1d\x9d\x86\x7d\xd7\x41\xd1"
- "\xe0\x2b\xe1\x8c\x93\x2a\xa7\x80"
- "\xe1\x07\xa0\xa9\x9f\x8c\x8d\x1a"
- "\x55\xfc\x6b\x24\x7a\xbd\x3e\x51"
- "\x68\x4b\x26\x59\xc8\xa7\x16\xd9"
- "\xb9\x61\x13\xde\x8b\x63\x1c\xf6"
- "\x60\x01\xfb\x08\xb3\x5b\x0a\xbf"
- "\x34\x73\xda\x87\x87\x3d\x6f\x97"
- "\x4a\x0c\xa3\x58\x20\xa2\xc0\x81"
- "\x5b\x8c\xef\xa9\xc2\x01\x1e\x64"
- "\x83\x8c\xbc\x03\xb6\xd0\x29\x9f"
- "\x54\xe2\xce\x8b\xc2\x07\x85\x78"
- "\x25\x38\x96\x4c\xb4\xbe\x17\x4a"
- "\x65\xa6\xfa\x52\x9d\x66\x9d\x65"
- "\x4a\xd1\x01\x01\xf0\xcb\x13\xcc"
- "\xa5\x82\xf3\xf2\x66\xcd\x3f\x9d"
- "\xd1\xaa\xe4\x67\xea\xf2\xad\x88"
- "\x56\x76\xa7\x9b\x59\x3c\xb1\x5d"
- "\x78\xfd\x69\x79\x74\x78\x43\x26"
- "\x7b\xde\x3f\xf1\xf5\x4e\x14\xd9"
- "\x15\xf5\x75\xb5\x2e\x19\xf3\x0c"
- "\x48\x72\xd6\x71\x6d\x03\x6e\xaa"
- "\xa7\x08\xf9\xaa\x70\xa3\x0f\x4d"
- "\x12\x8a\xdd\xe3\x39\x73\x7e\xa7"
- "\xea\x1f\x6d\x06\x26\x2a\xf2\xc5"
- "\x52\xb4\xbf\xfd\x52\x0c\x06\x60"
- "\x90\xd1\xb2\x7b\x56\xae\xac\x58"
- "\x5a\x6b\x50\x2a\xf5\xe0\x30\x3c"
- "\x2a\x98\x0f\x1b\x5b\x0a\x84\x6c"
- "\x31\xae\x92\xe2\xd4\xbb\x7f\x59"
- "\x26\x10\xb9\x89\x37\x68\x26\xbf"
- "\x41\xc8\x49\xc4\x70\x35\x7d\xff"
- "\x2d\x7f\xf6\x8a\x93\x68\x8c\x78"
- "\x0d\x53\xce\x7d\xff\x7d\xfb\xae"
- "\x13\x1b\x75\xc4\x78\xd7\x71\xd8"
- "\xea\xd3\xf4\x9d\x95\x64\x8e\xb4"
- "\xde\xb8\xe4\xa6\x68\xc8\xae\x73"
- "\x58\xaf\xa8\xb0\x5a\x20\xde\x87"
- "\x43\xb9\x0f\xe3\xad\x41\x4b\xd5"
- "\xb7\xad\x16\x00\xa6\xff\xf6\x74"
- "\xbf\x8c\x9f\xb3\x58\x1b\xb6\x55"
- "\xa9\x90\x56\x28\xf0\xb5\x13\x4e"
- "\x9e\xf7\x25\x86\xe0\x07\x7b\x98"
- "\xd8\x60\x5d\x38\x95\x3c\xe4\x22"
- "\x16\x2f\xb2\xa2\xaf\xe8\x90\x17"
- "\xec\x11\x83\x1a\xf4\xa9\x26\xda"
- "\x39\x72\xf5\x94\x61\x05\x51\xec"
- "\xa8\x30\x8b\x2c\x13\xd0\x72\xac"
- "\xb9\xd2\xa0\x4c\x4b\x78\xe8\x6e"
- "\x04\x85\xe9\x04\x49\x82\x91\xff"
- "\x89\xe5\xab\x4c\xaa\x37\x03\x12"
- "\xca\x8b\x74\x10\xfd\x9e\xd9\x7b"
- "\xcb\xdb\x82\x6e\xce\x2e\x33\x39"
- "\xce\xd2\x84\x6e\x34\x71\x51\x6e"
- "\x0d\xd6\x01\x87\xc7\xfa\x0a\xd3"
- "\xad\x36\xf3\x4c\x9f\x96\x5e\x62"
- "\x62\x54\xc3\x03\x78\xd6\xab\xdd"
- "\x89\x73\x55\x25\x30\xf8\xa7\xe6"
- "\x4f\x11\x0c\x7c\x0a\xa1\x2b\x7b"
- "\x3d\x0d\xde\x81\xd4\x9d\x0b\xae"
- "\xdf\x00\xf9\x4c\xb6\x90\x8e\x16"
- "\xcb\x11\xc8\xd1\x2e\x73\x13\x75"
- "\x75\x3e\xaa\xf5\xee\x02\xb3\x18"
- "\xa6\x2d\xf5\x3b\x51\xd1\x1f\x47"
- "\x6b\x2c\xdb\xc4\x10\xe0\xc8\xba"
- "\x9d\xac\xb1\x9d\x75\xd5\x41\x0e"
- "\x7e\xbe\x18\x5b\xa4\x1f\xf8\x22"
- "\x4c\xc1\x68\xda\x6d\x51\x34\x6c"
- "\x19\x59\xec\xb5\xb1\xec\xa7\x03"
- "\xca\x54\x99\x63\x05\x6c\xb1\xac"
- "\x9c\x31\xd6\xdb\xba\x7b\x14\x12"
- "\x7a\xc3\x2f\xbf\x8d\xdc\x37\x46"
- "\xdb\xd2\xbc\xd4\x2f\xab\x30\xd5"
- "\xed\x34\x99\x8e\x83\x3e\xbe\x4c"
- "\x86\x79\x58\xe0\x33\x8d\x9a\xb8"
- "\xa9\xa6\x90\x46\xa2\x02\xb8\xdd"
- "\xf5\xf9\x1a\x5c\x8c\x01\xaa\x6e"
- "\xb4\x22\x12\xf5\x0c\x1b\x9b\x7a"
- "\xc3\x80\xf3\x06\x00\x5f\x30\xd5"
- "\x06\xdb\x7d\x82\xc2\xd4\x0b\x4c"
- "\x5f\xe9\xc5\xf5\xdf\x97\x12\xbf"
- "\x56\xaf\x9b\x69\xcd\xee\x30\xb4"
- "\xa8\x71\xff\x3e\x7d\x73\x7a\xb4"
- "\x0d\xa5\x46\x7a\xf3\xf4\x15\x87"
- "\x5d\x93\x2b\x8c\x37\x64\xb5\xdd"
- "\x48\xd1\xe5\x8c\xae\xd4\xf1\x76"
- "\xda\xf4\xba\x9e\x25\x0e\xad\xa3"
- "\x0d\x08\x7c\xa8\x82\x16\x8d\x90"
- "\x56\x40\x16\x84\xe7\x22\x53\x3a"
- "\x58\xbc\xb9\x8f\x33\xc8\xc2\x84"
- "\x22\xe6\x0d\xe7\xb3\xdc\x5d\xdf"
- "\xd7\x2a\x36\xe4\x16\x06\x07\xd2"
- "\x97\x60\xb2\xf5\x5e\x14\xc9\xfd"
- "\x8b\x05\xd1\xce\xee\x9a\x65\x99"
- "\xb7\xae\x19\xb7\xc8\xbc\xd5\xa2"
- "\x7b\x95\xe1\xcc\xba\x0d\xdc\x8a"
- "\x1d\x59\x52\x50\xaa\x16\x02\x82"
- "\xdf\x61\x33\x2e\x44\xce\x49\xc7"
- "\xe5\xc6\x2e\x76\xcf\x80\x52\xf0"
- "\x3d\x17\x34\x47\x3f\xd3\x80\x48"
- "\xa2\xba\xd5\xc7\x7b\x02\x28\xdb"
- "\xac\x44\xc7\x6e\x05\x5c\xc2\x79"
- "\xb3\x7d\x6a\x47\x77\x66\xf1\x38"
- "\xf0\xf5\x4f\x27\x1a\x31\xca\x6c"
- "\x72\x95\x92\x8e\x3f\xb0\xec\x1d"
- "\xc7\x2a\xff\x73\xee\xdf\x55\x80"
- "\x93\xd2\xbd\x34\xd3\x9f\x00\x51"
- "\xfb\x2e\x41\xba\x6c\x5a\x7c\x17"
- "\x7f\xe6\x70\xac\x8d\x39\x3f\x77"
- "\xe2\x23\xac\x8f\x72\x4e\xe4\x53"
- "\xcc\xf1\x1b\xf1\x35\xfe\x52\xa4"
- "\xd6\xb8\x40\x6b\xc1\xfd\xa0\xa1"
- "\xf5\x46\x65\xc2\x50\xbb\x43\xe2"
- "\xd1\x43\x28\x34\x74\xf5\x87\xa0"
- "\xf2\x5e\x27\x3b\x59\x2b\x3e\x49"
- "\xdf\x46\xee\xaf\x71\xd7\x32\x36"
- "\xc7\x14\x0b\x58\x6e\x3e\x2d\x41"
- "\xfa\x75\x66\x3a\x54\xe0\xb2\xb9"
- "\xaf\xdd\x04\x80\x15\x19\x3f\x6f"
- "\xce\x12\xb4\xd8\xe8\x89\x3c\x05"
- "\x30\xeb\xf3\x3d\xcd\x27\xec\xdc"
- "\x56\x70\x12\xcf\x78\x2b\x77\xbf"
- "\x22\xf0\x1b\x17\x9c\xcc\xd6\x1b"
- "\x2d\x3d\xa0\x3b\xd8\xc9\x70\xa4"
- "\x7a\x3e\x07\xb9\x06\xc3\xfa\xb0"
- "\x33\xee\xc1\xd8\xf6\xe0\xf0\xb2"
- "\x61\x12\x69\xb0\x5f\x28\x99\xda"
- "\xc3\x61\x48\xfa\x07\x16\x03\xc4"
- "\xa8\xe1\x3c\xe8\x0e\x64\x15\x30"
- "\xc1\x9d\x84\x2f\x73\x98\x0e\x3a"
- "\xf2\x86\x21\xa4\x9e\x1d\xb5\x86"
- "\x16\xdb\x2b\x9a\x06\x64\x8e\x79"
- "\x8d\x76\x3e\xc3\xc2\x64\x44\xe3"
- "\xda\xbc\x1a\x52\xd7\x61\x03\x65"
- "\x54\x32\x77\x01\xed\x9d\x8a\x43"
- "\x25\x24\xe3\xc1\xbe\xb8\x2f\xcb"
- "\x89\x14\x64\xab\xf6\xa0\x6e\x02"
- "\x57\xe4\x7d\xa9\x4e\x9a\x03\x36"
- "\xad\xf1\xb1\xfc\x0b\xe6\x79\x51"
- "\x9f\x81\x77\xc4\x14\x78\x9d\xbf"
- "\xb6\xd6\xa3\x8c\xba\x0b\x26\xe7"
- "\xc8\xb9\x5c\xcc\xe1\x5f\xd5\xc6"
- "\xc4\xca\xc2\xa3\x45\xba\x94\x13"
- "\xb2\x8f\xc3\x54\x01\x09\xe7\x8b"
- "\xda\x2a\x0a\x11\x02\x43\xcb\x57"
- "\xc9\xcc\xb5\x5c\xab\xc4\xec\x54"
- "\x00\x06\x34\xe1\x6e\x03\x89\x7c"
- "\xc6\xfb\x6a\xc7\x60\x43\xd6\xc5"
- "\xb5\x68\x72\x89\x8f\x42\xc3\x74"
- "\xbd\x25\xaa\x9f\x67\xb5\xdf\x26"
- "\x20\xe8\xb7\x01\x3c\xe4\x77\xce"
- "\xc4\x65\xa7\x23\x79\xea\x33\xc7"
- "\x82\x14\x5c\x82\xf2\x4e\x3d\xf6"
- "\xc6\x4a\x0e\x29\xbb\xec\x44\xcd"
- "\x2f\xd1\x4f\x21\x71\xa9\xce\x0f"
- "\x5c\xf2\x72\x5c\x08\x2e\x21\xd2"
- "\xc3\x29\x13\xd8\xac\xc3\xda\x13"
- "\x1a\x9d\xa7\x71\x1d\x27\x1d\x27"
- "\x1d\xea\xab\x44\x79\xad\xe5\xeb"
- "\xef\x1f\x22\x0a\x44\x4f\xcb\x87"
- "\xa7\x58\x71\x0e\x66\xf8\x60\xbf"
- "\x60\x74\x4a\xb4\xec\x2e\xfe\xd3"
- "\xf5\xb8\xfe\x46\x08\x50\x99\x6c"
- "\x66\xa5\xa8\x34\x44\xb5\xe5\xf0"
- "\xdd\x2c\x67\x4e\x35\x96\x8e\x67"
- "\x48\x3f\x5f\x37\x44\x60\x51\x2e"
- "\x14\x91\x5e\x57\xc3\x0e\x79\x77"
- "\x2f\x03\xf4\xe2\x1c\x72\xbf\x85"
- "\x5d\xd3\x17\xdf\x6c\xc5\x70\x24"
- "\x42\xdf\x51\x4e\x2a\xb2\xd2\x5b"
- "\x9e\x69\x83\x41\x11\xfe\x73\x22"
- "\xde\x8a\x9e\xd8\x8a\xfb\x20\x38"
- "\xd8\x47\x6f\xd5\xed\x8f\x41\xfd"
- "\x13\x7a\x18\x03\x7d\x0f\xcd\x7d"
- "\xa6\x7d\x31\x9e\xf1\x8f\x30\xa3"
- "\x8b\x4c\x24\xb7\xf5\x48\xd7\xd9"
- "\x12\xe7\x84\x97\x5c\x31\x6d\xfb"
- "\xdf\xf3\xd3\xd1\xd5\x0c\x30\x06"
- "\x01\x6a\xbc\x6c\x78\x7b\xa6\x50"
- "\xfa\x0f\x3c\x42\x2d\xa5\xa3\x3b"
- "\xcf\x62\x50\xff\x71\x6d\xe7\xda"
- "\x27\xab\xc6\x67\x16\x65\x68\x64"
- "\xc7\xd5\x5f\x81\xa9\xf6\x65\xb3"
- "\x5e\x43\x91\x16\xcd\x3d\x55\x37"
- "\x55\xb3\xf0\x28\xc5\x54\x19\xc0"
- "\xe0\xd6\x2a\x61\xd4\xc8\x72\x51"
- "\xe9\xa1\x7b\x48\x21\xad\x44\x09"
- "\xe4\x01\x61\x3c\x8a\x5b\xf9\xa1"
- "\x6e\x1b\xdf\xc0\x04\xa8\x8b\xf2"
- "\x21\xbe\x34\x7b\xfc\xa1\xcd\xc9"
- "\xa9\x96\xf4\xa4\x4c\xf7\x4e\x8f"
- "\x84\xcc\xd3\xa8\x92\x77\x8f\x36"
- "\xe2\x2e\x8c\x33\xe8\x84\xa6\x0c"
- "\x6c\x8a\xda\x14\x32\xc2\x96\xff"
- "\xc6\x4a\xc2\x9b\x30\x7f\xd1\x29"
- "\xc0\xd5\x78\x41\x00\x80\x80\x03"
- "\x2a\xb1\xde\x26\x03\x48\x49\xee"
- "\x57\x14\x76\x51\x3c\x36\x5d\x0a"
- "\x5c\x9f\xe8\xd8\x53\xdb\x4f\xd4"
- "\x38\xbf\x66\xc9\x75\x12\x18\x75"
- "\x34\x2d\x93\x22\x96\x51\x24\x6e"
- "\x4e\xd9\x30\xea\x67\xff\x92\x1c"
- "\x16\x26\xe9\xb5\x33\xab\x8c\x22"
- "\x47\xdb\xa0\x2c\x08\xf0\x12\x69"
- "\x7e\x93\x52\xda\xa5\xe5\xca\xc1"
- "\x0f\x55\x2a\xbd\x09\x30\x88\x1b"
- "\x9c\xc6\x9f\xe6\xdb\xa6\x92\xeb"
- "\xf4\xbd\x5c\xc4\xdb\xc6\x71\x09"
- "\xab\x5e\x48\x0c\xed\x6f\xda\x8e"
- "\x8d\x0c\x98\x71\x7d\x10\xd0\x9c"
- "\x20\x9b\x79\x53\x26\x5d\xb9\x85"
- "\x8a\x31\xb8\xc5\x1c\x97\xde\x88"
- "\x61\x55\x7f\x7c\x21\x06\xea\xc4"
- "\x5f\xaf\xf2\xf0\xd5\x5e\x7d\xb4"
- "\x6e\xcf\xe9\xae\x1b\x0e\x11\x80"
- "\xc1\x9a\x74\x7e\x52\x6f\xa0\xb7"
- "\x24\xcd\x8d\x0a\x11\x40\x63\x72"
- "\xfa\xe2\xc5\xb3\x94\xef\x29\xa2"
- "\x1a\x23\x43\x04\x37\x55\x0d\xe9"
- "\x83\xb2\x29\x51\x49\x64\xa0\xbd"
- "\xde\x73\xfd\xa5\x7c\x95\x70\x62"
- "\x58\xdc\xe2\xd0\xbf\x98\xf5\x8a"
- "\x6a\xfd\xce\xa8\x0e\x42\x2a\xeb"
- "\xd2\xff\x83\x27\x53\x5c\xa0\x6e"
- "\x93\xef\xe2\xb9\x5d\x35\xd6\x98"
- "\xf6\x71\x19\x7a\x54\xa1\xa7\xe8"
- "\x09\xfe\xf6\x9e\xc7\xbd\x3e\x29"
- "\xbd\x6b\x17\xf4\xe7\x3e\x10\x5c"
- "\xc1\xd2\x59\x4f\x4b\x12\x1a\x5b"
- "\x50\x80\x59\xb9\xec\x13\x66\xa8"
- "\xd2\x31\x7b\x6a\x61\x22\xdd\x7d"
- "\x61\xee\x87\x16\x46\x9f\xf9\xc7"
- "\x41\xee\x74\xf8\xd0\x96\x2c\x76"
- "\x2a\xac\x7d\x6e\x9f\x0e\x7f\x95"
- "\xfe\x50\x16\xb2\x23\xca\x62\xd5"
- "\x68\xcf\x07\x3f\x3f\x97\x85\x2a"
- "\x0c\x25\x45\xba\xdb\x32\xcb\x83"
- "\x8c\x4f\xe0\x6d\x9a\x99\xf9\xc9"
- "\xda\xd4\x19\x31\xc1\x7c\x6d\xd9"
- "\x9c\x56\xd3\xec\xc1\x81\x4c\xed"
- "\x28\x9d\x87\xeb\x19\xd7\x1a\x4f"
- "\x04\x6a\xcb\x1f\xcf\x1f\xa2\x16"
- "\xfc\x2a\x0d\xa1\x14\x2d\xfa\xc5"
- "\x5a\xd2\xc5\xf9\x19\x7c\x20\x1f"
- "\x2d\x10\xc0\x66\x7c\xd9\x2d\xe5"
- "\x88\x70\x59\xa7\x85\xd5\x2e\x7c"
- "\x5c\xe3\xb7\x12\xd6\x97\x3f\x29",
- .psize = 2048,
- .digest = "\x37\x90\x92\xc2\xeb\x01\x87\xd9"
- "\x95\xc7\x91\xc3\x17\x8b\x38\x52",
- }
-};
-
-
/*
* DES test vectors.
*/