aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2012-10-04 12:06:34 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2012-10-04 12:06:34 -0400
commitd66e6737d454553e1e62109d8298ede5351178a4 (patch)
treec28b205045935b111527f461d2b114daa26e4fb8
parent612a9aab56a93533e76e3ad91642db7033e03b69 (diff)
parentc9f97a27ceee84998999bf3341e6d5d207b05539 (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6
Pull crypto update from Herbert Xu: - Optimised AES/SHA1 for ARM. - IPsec ESN support in talitos and caam. - x86_64/avx implementation of cast5/cast6. - Add/use multi-algorithm registration helpers where possible. - Added IBM Power7+ in-Nest support. - Misc fixes. Fix up trivial conflicts in crypto/Kconfig due to the sparc64 crypto config options being added next to the new ARM ones. [ Side note: cut-and-paste duplicate help texts make those conflicts harder to read than necessary, thanks to git being smart about minimizing conflicts and maximizing the common parts... ] * git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6: (71 commits) crypto: x86/glue_helper - fix storing of new IV in CBC encryption crypto: cast5/avx - fix storing of new IV in CBC encryption crypto: tcrypt - add missing tests for camellia and ghash crypto: testmgr - make test_aead also test 'dst != src' code paths crypto: testmgr - make test_skcipher also test 'dst != src' code paths crypto: testmgr - add test vectors for CTR mode IV increasement crypto: testmgr - add test vectors for partial ctr(cast5) and ctr(cast6) crypto: testmgr - allow non-multi page and multi page skcipher tests from same test template crypto: caam - increase TRNG clocks per sample crypto, tcrypt: remove local_bh_disable/enable() around local_irq_disable/enable() crypto: tegra-aes - fix error return code crypto: crypto4xx - fix error return code crypto: hifn_795x - fix error return code crypto: ux500 - fix error return code crypto: caam - fix error IDs for SEC v5.x RNG4 hwrng: mxc-rnga - Access data via structure hwrng: mxc-rnga - Adapt clocks to new i.mx clock framework crypto: caam - add IPsec ESN support crypto: 842 - remove .cra_list initialization Revert "[CRYPTO] cast6: inline bloat--" ...
-rw-r--r--MAINTAINERS12
-rw-r--r--arch/arm/Makefile1
-rw-r--r--arch/arm/crypto/Makefile9
-rw-r--r--arch/arm/crypto/aes-armv4.S1112
-rw-r--r--arch/arm/crypto/aes_glue.c108
-rw-r--r--arch/arm/crypto/sha1-armv4-large.S503
-rw-r--r--arch/arm/crypto/sha1_glue.c179
-rw-r--r--arch/powerpc/configs/ppc64_defconfig3
-rw-r--r--arch/powerpc/configs/pseries_defconfig3
-rw-r--r--arch/powerpc/kernel/prom_init.c4
-rw-r--r--arch/s390/crypto/aes_s390.c5
-rw-r--r--arch/s390/crypto/des_s390.c10
-rw-r--r--arch/s390/crypto/ghash_s390.c1
-rw-r--r--arch/x86/crypto/Makefile4
-rw-r--r--arch/x86/crypto/aes_glue.c1
-rw-r--r--arch/x86/crypto/aesni-intel_glue.c258
-rw-r--r--arch/x86/crypto/blowfish_glue.c4
-rw-r--r--arch/x86/crypto/camellia_glue.c1382
-rw-r--r--arch/x86/crypto/cast5-avx-x86_64-asm_64.S376
-rw-r--r--arch/x86/crypto/cast5_avx_glue.c530
-rw-r--r--arch/x86/crypto/cast6-avx-x86_64-asm_64.S383
-rw-r--r--arch/x86/crypto/cast6_avx_glue.c648
-rw-r--r--arch/x86/crypto/ghash-clmulni-intel_glue.c2
-rw-r--r--arch/x86/crypto/glue_helper.c2
-rw-r--r--arch/x86/crypto/salsa20_glue.c1
-rw-r--r--arch/x86/crypto/serpent_avx_glue.c10
-rw-r--r--arch/x86/crypto/serpent_sse2_glue.c10
-rw-r--r--arch/x86/crypto/twofish-avx-x86_64-asm_64.S227
-rw-r--r--arch/x86/crypto/twofish_avx_glue.c10
-rw-r--r--arch/x86/crypto/twofish_glue.c1
-rw-r--r--arch/x86/crypto/twofish_glue_3way.c5
-rw-r--r--crypto/842.c182
-rw-r--r--crypto/Kconfig75
-rw-r--r--crypto/Makefile5
-rw-r--r--crypto/aes_generic.c1
-rw-r--r--crypto/ansi_cprng.c63
-rw-r--r--crypto/anubis.c1
-rw-r--r--crypto/blowfish_generic.c1
-rw-r--r--crypto/camellia_generic.c1
-rw-r--r--crypto/cast5_generic.c (renamed from crypto/cast5.c)80
-rw-r--r--crypto/cast6_generic.c (renamed from crypto/cast6.c)73
-rw-r--r--crypto/crypto_null.c57
-rw-r--r--crypto/crypto_user.c2
-rw-r--r--crypto/deflate.c1
-rw-r--r--crypto/des_generic.c25
-rw-r--r--crypto/fcrypt.c1
-rw-r--r--crypto/ghash-generic.c1
-rw-r--r--crypto/khazad.c1
-rw-r--r--crypto/krng.c1
-rw-r--r--crypto/lzo.c1
-rw-r--r--crypto/salsa20_generic.c1
-rw-r--r--crypto/seed.c1
-rw-r--r--crypto/serpent_generic.c53
-rw-r--r--crypto/sha256_generic.c25
-rw-r--r--crypto/sha512_generic.c20
-rw-r--r--crypto/shash.c36
-rw-r--r--crypto/tcrypt.c95
-rw-r--r--crypto/tcrypt.h1
-rw-r--r--crypto/tea.c41
-rw-r--r--crypto/testmgr.c472
-rw-r--r--crypto/testmgr.h3525
-rw-r--r--crypto/tgr192.c38
-rw-r--r--crypto/twofish_generic.c1
-rw-r--r--crypto/vmac.c10
-rw-r--r--crypto/wp512.c39
-rw-r--r--drivers/char/hw_random/mxc-rnga.c108
-rw-r--r--drivers/char/hw_random/octeon-rng.c17
-rw-r--r--drivers/crypto/Kconfig22
-rw-r--r--drivers/crypto/amcc/crypto4xx_core.c1
-rw-r--r--drivers/crypto/atmel-aes.c7
-rw-r--r--drivers/crypto/atmel-sha.c5
-rw-r--r--drivers/crypto/atmel-tdes.c6
-rw-r--r--drivers/crypto/caam/caamalg.c51
-rw-r--r--drivers/crypto/caam/caamhash.c22
-rw-r--r--drivers/crypto/caam/caamrng.c9
-rw-r--r--drivers/crypto/caam/compat.h1
-rw-r--r--drivers/crypto/caam/ctrl.c6
-rw-r--r--drivers/crypto/caam/error.c2
-rw-r--r--drivers/crypto/caam/key_gen.c4
-rw-r--r--drivers/crypto/geode-aes.c18
-rw-r--r--drivers/crypto/hifn_795x.c5
-rw-r--r--drivers/crypto/nx/Kconfig26
-rw-r--r--drivers/crypto/nx/Makefile5
-rw-r--r--drivers/crypto/nx/nx-842.c1617
-rw-r--r--drivers/crypto/nx/nx-aes-cbc.c1
-rw-r--r--drivers/crypto/nx/nx-aes-ccm.c2
-rw-r--r--drivers/crypto/nx/nx-aes-ctr.c2
-rw-r--r--drivers/crypto/nx/nx-aes-ecb.c1
-rw-r--r--drivers/crypto/nx/nx-aes-gcm.c2
-rw-r--r--drivers/crypto/omap-aes.c1
-rw-r--r--drivers/crypto/padlock-aes.c3
-rw-r--r--drivers/crypto/s5p-sss.c1
-rw-r--r--drivers/crypto/talitos.c442
-rw-r--r--drivers/crypto/tegra-aes.c3
-rw-r--r--drivers/crypto/ux500/cryp/cryp_core.c1
-rw-r--r--drivers/crypto/ux500/hash/hash_core.c1
-rw-r--r--include/crypto/cast5.h27
-rw-r--r--include/crypto/cast6.h28
-rw-r--r--include/crypto/internal/hash.h2
-rw-r--r--include/linux/nx842.h11
100 files changed, 11457 insertions, 1737 deletions
diff --git a/MAINTAINERS b/MAINTAINERS
index d919e3d4a0d..f883fc1b1b4 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -3438,6 +3438,18 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/aegl/linux.git
3438S: Maintained 3438S: Maintained
3439F: arch/ia64/ 3439F: arch/ia64/
3440 3440
3441IBM Power in-Nest Crypto Acceleration
3442M: Kent Yoder <key@linux.vnet.ibm.com>
3443L: linux-crypto@vger.kernel.org
3444S: Supported
3445F: drivers/crypto/nx/
3446
3447IBM Power 842 compression accelerator
3448M: Robert Jennings <rcj@linux.vnet.ibm.com>
3449S: Supported
3450F: drivers/crypto/nx/nx-842.c
3451F: include/linux/nx842.h
3452
3441IBM Power Linux RAID adapter 3453IBM Power Linux RAID adapter
3442M: Brian King <brking@us.ibm.com> 3454M: Brian King <brking@us.ibm.com>
3443S: Supported 3455S: Supported
diff --git a/arch/arm/Makefile b/arch/arm/Makefile
index 770da51242c..b86e57ef146 100644
--- a/arch/arm/Makefile
+++ b/arch/arm/Makefile
@@ -254,6 +254,7 @@ core-$(CONFIG_VFP) += arch/arm/vfp/
254# If we have a machine-specific directory, then include it in the build. 254# If we have a machine-specific directory, then include it in the build.
255core-y += arch/arm/kernel/ arch/arm/mm/ arch/arm/common/ 255core-y += arch/arm/kernel/ arch/arm/mm/ arch/arm/common/
256core-y += arch/arm/net/ 256core-y += arch/arm/net/
257core-y += arch/arm/crypto/
257core-y += $(machdirs) $(platdirs) 258core-y += $(machdirs) $(platdirs)
258 259
259drivers-$(CONFIG_OPROFILE) += arch/arm/oprofile/ 260drivers-$(CONFIG_OPROFILE) += arch/arm/oprofile/
diff --git a/arch/arm/crypto/Makefile b/arch/arm/crypto/Makefile
new file mode 100644
index 00000000000..a2c83851bc9
--- /dev/null
+++ b/arch/arm/crypto/Makefile
@@ -0,0 +1,9 @@
1#
2# Arch-specific CryptoAPI modules.
3#
4
5obj-$(CONFIG_CRYPTO_AES_ARM) += aes-arm.o
6obj-$(CONFIG_CRYPTO_SHA1_ARM) += sha1-arm.o
7
8aes-arm-y := aes-armv4.o aes_glue.o
9sha1-arm-y := sha1-armv4-large.o sha1_glue.o
diff --git a/arch/arm/crypto/aes-armv4.S b/arch/arm/crypto/aes-armv4.S
new file mode 100644
index 00000000000..e59b1d505d6
--- /dev/null
+++ b/arch/arm/crypto/aes-armv4.S
@@ -0,0 +1,1112 @@
1#define __ARM_ARCH__ __LINUX_ARM_ARCH__
2@ ====================================================================
3@ Written by Andy Polyakov <appro@fy.chalmers.se> for the OpenSSL
4@ project. The module is, however, dual licensed under OpenSSL and
5@ CRYPTOGAMS licenses depending on where you obtain it. For further
6@ details see http://www.openssl.org/~appro/cryptogams/.
7@ ====================================================================
8
9@ AES for ARMv4
10
11@ January 2007.
12@
13@ Code uses single 1K S-box and is >2 times faster than code generated
14@ by gcc-3.4.1. This is thanks to unique feature of ARMv4 ISA, which
15@ allows to merge logical or arithmetic operation with shift or rotate
16@ in one instruction and emit combined result every cycle. The module
17@ is endian-neutral. The performance is ~42 cycles/byte for 128-bit
18@ key [on single-issue Xscale PXA250 core].
19
20@ May 2007.
21@
22@ AES_set_[en|de]crypt_key is added.
23
24@ July 2010.
25@
26@ Rescheduling for dual-issue pipeline resulted in 12% improvement on
27@ Cortex A8 core and ~25 cycles per byte processed with 128-bit key.
28
29@ February 2011.
30@
31@ Profiler-assisted and platform-specific optimization resulted in 16%
32@ improvement on Cortex A8 core and ~21.5 cycles per byte.
33
34@ A little glue here to select the correct code below for the ARM CPU
35@ that is being targetted.
36
37.text
38.code 32
39
40.type AES_Te,%object
41.align 5
42AES_Te:
43.word 0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d
44.word 0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554
45.word 0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d
46.word 0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a
47.word 0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87
48.word 0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b
49.word 0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea
50.word 0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b
51.word 0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a
52.word 0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f
53.word 0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108
54.word 0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f
55.word 0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e
56.word 0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab5
57.word 0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d
58.word 0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f
59.word 0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e
60.word 0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb
61.word 0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce
62.word 0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x13848497
63.word 0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c
64.word 0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed
65.word 0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b
66.word 0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a
67.word 0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16
68.word 0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594
69.word 0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81
70.word 0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3
71.word 0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a
72.word 0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504
73.word 0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163
74.word 0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d
75.word 0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f
76.word 0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739
77.word 0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47
78.word 0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395
79.word 0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f
80.word 0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883
81.word 0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c
82.word 0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76
83.word 0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e
84.word 0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4
85.word 0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6
86.word 0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b
87.word 0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7
88.word 0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0
89.word 0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25
90.word 0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818
91.word 0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72
92.word 0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651
93.word 0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21
94.word 0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85
95.word 0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa
96.word 0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12
97.word 0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0
98.word 0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9
99.word 0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133
100.word 0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7
101.word 0x2d9b9bb6, 0x3c1e1e22, 0x15878792, 0xc9e9e920
102.word 0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a
103.word 0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17
104.word 0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8
105.word 0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11
106.word 0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a
107@ Te4[256]
108.byte 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5
109.byte 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76
110.byte 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0
111.byte 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0
112.byte 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc
113.byte 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15
114.byte 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a
115.byte 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75
116.byte 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0
117.byte 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84
118.byte 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b
119.byte 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf
120.byte 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85
121.byte 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8
122.byte 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5
123.byte 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2
124.byte 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17
125.byte 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73
126.byte 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88
127.byte 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb
128.byte 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c
129.byte 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79
130.byte 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9
131.byte 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08
132.byte 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6
133.byte 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a
134.byte 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e
135.byte 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e
136.byte 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94
137.byte 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf
138.byte 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68
139.byte 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16
140@ rcon[]
141.word 0x01000000, 0x02000000, 0x04000000, 0x08000000
142.word 0x10000000, 0x20000000, 0x40000000, 0x80000000
143.word 0x1B000000, 0x36000000, 0, 0, 0, 0, 0, 0
144.size AES_Te,.-AES_Te
145
146@ void AES_encrypt(const unsigned char *in, unsigned char *out,
147@ const AES_KEY *key) {
148.global AES_encrypt
149.type AES_encrypt,%function
150.align 5
151AES_encrypt:
152 sub r3,pc,#8 @ AES_encrypt
153 stmdb sp!,{r1,r4-r12,lr}
154 mov r12,r0 @ inp
155 mov r11,r2
156 sub r10,r3,#AES_encrypt-AES_Te @ Te
157#if __ARM_ARCH__<7
158 ldrb r0,[r12,#3] @ load input data in endian-neutral
159 ldrb r4,[r12,#2] @ manner...
160 ldrb r5,[r12,#1]
161 ldrb r6,[r12,#0]
162 orr r0,r0,r4,lsl#8
163 ldrb r1,[r12,#7]
164 orr r0,r0,r5,lsl#16
165 ldrb r4,[r12,#6]
166 orr r0,r0,r6,lsl#24
167 ldrb r5,[r12,#5]
168 ldrb r6,[r12,#4]
169 orr r1,r1,r4,lsl#8
170 ldrb r2,[r12,#11]
171 orr r1,r1,r5,lsl#16
172 ldrb r4,[r12,#10]
173 orr r1,r1,r6,lsl#24
174 ldrb r5,[r12,#9]
175 ldrb r6,[r12,#8]
176 orr r2,r2,r4,lsl#8
177 ldrb r3,[r12,#15]
178 orr r2,r2,r5,lsl#16
179 ldrb r4,[r12,#14]
180 orr r2,r2,r6,lsl#24
181 ldrb r5,[r12,#13]
182 ldrb r6,[r12,#12]
183 orr r3,r3,r4,lsl#8
184 orr r3,r3,r5,lsl#16
185 orr r3,r3,r6,lsl#24
186#else
187 ldr r0,[r12,#0]
188 ldr r1,[r12,#4]
189 ldr r2,[r12,#8]
190 ldr r3,[r12,#12]
191#ifdef __ARMEL__
192 rev r0,r0
193 rev r1,r1
194 rev r2,r2
195 rev r3,r3
196#endif
197#endif
198 bl _armv4_AES_encrypt
199
200 ldr r12,[sp],#4 @ pop out
201#if __ARM_ARCH__>=7
202#ifdef __ARMEL__
203 rev r0,r0
204 rev r1,r1
205 rev r2,r2
206 rev r3,r3
207#endif
208 str r0,[r12,#0]
209 str r1,[r12,#4]
210 str r2,[r12,#8]
211 str r3,[r12,#12]
212#else
213 mov r4,r0,lsr#24 @ write output in endian-neutral
214 mov r5,r0,lsr#16 @ manner...
215 mov r6,r0,lsr#8
216 strb r4,[r12,#0]
217 strb r5,[r12,#1]
218 mov r4,r1,lsr#24
219 strb r6,[r12,#2]
220 mov r5,r1,lsr#16
221 strb r0,[r12,#3]
222 mov r6,r1,lsr#8
223 strb r4,[r12,#4]
224 strb r5,[r12,#5]
225 mov r4,r2,lsr#24
226 strb r6,[r12,#6]
227 mov r5,r2,lsr#16
228 strb r1,[r12,#7]
229 mov r6,r2,lsr#8
230 strb r4,[r12,#8]
231 strb r5,[r12,#9]
232 mov r4,r3,lsr#24
233 strb r6,[r12,#10]
234 mov r5,r3,lsr#16
235 strb r2,[r12,#11]
236 mov r6,r3,lsr#8
237 strb r4,[r12,#12]
238 strb r5,[r12,#13]
239 strb r6,[r12,#14]
240 strb r3,[r12,#15]
241#endif
242#if __ARM_ARCH__>=5
243 ldmia sp!,{r4-r12,pc}
244#else
245 ldmia sp!,{r4-r12,lr}
246 tst lr,#1
247 moveq pc,lr @ be binary compatible with V4, yet
248 .word 0xe12fff1e @ interoperable with Thumb ISA:-)
249#endif
250.size AES_encrypt,.-AES_encrypt
251
252.type _armv4_AES_encrypt,%function
253.align 2
254_armv4_AES_encrypt:
255 str lr,[sp,#-4]! @ push lr
256 ldmia r11!,{r4-r7}
257 eor r0,r0,r4
258 ldr r12,[r11,#240-16]
259 eor r1,r1,r5
260 eor r2,r2,r6
261 eor r3,r3,r7
262 sub r12,r12,#1
263 mov lr,#255
264
265 and r7,lr,r0
266 and r8,lr,r0,lsr#8
267 and r9,lr,r0,lsr#16
268 mov r0,r0,lsr#24
269.Lenc_loop:
270 ldr r4,[r10,r7,lsl#2] @ Te3[s0>>0]
271 and r7,lr,r1,lsr#16 @ i0
272 ldr r5,[r10,r8,lsl#2] @ Te2[s0>>8]
273 and r8,lr,r1
274 ldr r6,[r10,r9,lsl#2] @ Te1[s0>>16]
275 and r9,lr,r1,lsr#8
276 ldr r0,[r10,r0,lsl#2] @ Te0[s0>>24]
277 mov r1,r1,lsr#24
278
279 ldr r7,[r10,r7,lsl#2] @ Te1[s1>>16]
280 ldr r8,[r10,r8,lsl#2] @ Te3[s1>>0]
281 ldr r9,[r10,r9,lsl#2] @ Te2[s1>>8]
282 eor r0,r0,r7,ror#8
283 ldr r1,[r10,r1,lsl#2] @ Te0[s1>>24]
284 and r7,lr,r2,lsr#8 @ i0
285 eor r5,r5,r8,ror#8
286 and r8,lr,r2,lsr#16 @ i1
287 eor r6,r6,r9,ror#8
288 and r9,lr,r2
289 ldr r7,[r10,r7,lsl#2] @ Te2[s2>>8]
290 eor r1,r1,r4,ror#24
291 ldr r8,[r10,r8,lsl#2] @ Te1[s2>>16]
292 mov r2,r2,lsr#24
293
294 ldr r9,[r10,r9,lsl#2] @ Te3[s2>>0]
295 eor r0,r0,r7,ror#16
296 ldr r2,[r10,r2,lsl#2] @ Te0[s2>>24]
297 and r7,lr,r3 @ i0
298 eor r1,r1,r8,ror#8
299 and r8,lr,r3,lsr#8 @ i1
300 eor r6,r6,r9,ror#16
301 and r9,lr,r3,lsr#16 @ i2
302 ldr r7,[r10,r7,lsl#2] @ Te3[s3>>0]
303 eor r2,r2,r5,ror#16
304 ldr r8,[r10,r8,lsl#2] @ Te2[s3>>8]
305 mov r3,r3,lsr#24
306
307 ldr r9,[r10,r9,lsl#2] @ Te1[s3>>16]
308 eor r0,r0,r7,ror#24
309 ldr r7,[r11],#16
310 eor r1,r1,r8,ror#16
311 ldr r3,[r10,r3,lsl#2] @ Te0[s3>>24]
312 eor r2,r2,r9,ror#8
313 ldr r4,[r11,#-12]
314 eor r3,r3,r6,ror#8
315
316 ldr r5,[r11,#-8]
317 eor r0,r0,r7
318 ldr r6,[r11,#-4]
319 and r7,lr,r0
320 eor r1,r1,r4
321 and r8,lr,r0,lsr#8
322 eor r2,r2,r5
323 and r9,lr,r0,lsr#16
324 eor r3,r3,r6
325 mov r0,r0,lsr#24
326
327 subs r12,r12,#1
328 bne .Lenc_loop
329
330 add r10,r10,#2
331
332 ldrb r4,[r10,r7,lsl#2] @ Te4[s0>>0]
333 and r7,lr,r1,lsr#16 @ i0
334 ldrb r5,[r10,r8,lsl#2] @ Te4[s0>>8]
335 and r8,lr,r1
336 ldrb r6,[r10,r9,lsl#2] @ Te4[s0>>16]
337 and r9,lr,r1,lsr#8
338 ldrb r0,[r10,r0,lsl#2] @ Te4[s0>>24]
339 mov r1,r1,lsr#24
340
341 ldrb r7,[r10,r7,lsl#2] @ Te4[s1>>16]
342 ldrb r8,[r10,r8,lsl#2] @ Te4[s1>>0]
343 ldrb r9,[r10,r9,lsl#2] @ Te4[s1>>8]
344 eor r0,r7,r0,lsl#8
345 ldrb r1,[r10,r1,lsl#2] @ Te4[s1>>24]
346 and r7,lr,r2,lsr#8 @ i0
347 eor r5,r8,r5,lsl#8
348 and r8,lr,r2,lsr#16 @ i1
349 eor r6,r9,r6,lsl#8
350 and r9,lr,r2
351 ldrb r7,[r10,r7,lsl#2] @ Te4[s2>>8]
352 eor r1,r4,r1,lsl#24
353 ldrb r8,[r10,r8,lsl#2] @ Te4[s2>>16]
354 mov r2,r2,lsr#24
355
356 ldrb r9,[r10,r9,lsl#2] @ Te4[s2>>0]
357 eor r0,r7,r0,lsl#8
358 ldrb r2,[r10,r2,lsl#2] @ Te4[s2>>24]
359 and r7,lr,r3 @ i0
360 eor r1,r1,r8,lsl#16
361 and r8,lr,r3,lsr#8 @ i1
362 eor r6,r9,r6,lsl#8
363 and r9,lr,r3,lsr#16 @ i2
364 ldrb r7,[r10,r7,lsl#2] @ Te4[s3>>0]
365 eor r2,r5,r2,lsl#24
366 ldrb r8,[r10,r8,lsl#2] @ Te4[s3>>8]
367 mov r3,r3,lsr#24
368
369 ldrb r9,[r10,r9,lsl#2] @ Te4[s3>>16]
370 eor r0,r7,r0,lsl#8
371 ldr r7,[r11,#0]
372 ldrb r3,[r10,r3,lsl#2] @ Te4[s3>>24]
373 eor r1,r1,r8,lsl#8
374 ldr r4,[r11,#4]
375 eor r2,r2,r9,lsl#16
376 ldr r5,[r11,#8]
377 eor r3,r6,r3,lsl#24
378 ldr r6,[r11,#12]
379
380 eor r0,r0,r7
381 eor r1,r1,r4
382 eor r2,r2,r5
383 eor r3,r3,r6
384
385 sub r10,r10,#2
386 ldr pc,[sp],#4 @ pop and return
387.size _armv4_AES_encrypt,.-_armv4_AES_encrypt
388
389.global private_AES_set_encrypt_key
390.type private_AES_set_encrypt_key,%function
391.align 5
392private_AES_set_encrypt_key:
393_armv4_AES_set_encrypt_key:
394 sub r3,pc,#8 @ AES_set_encrypt_key
395 teq r0,#0
396 moveq r0,#-1
397 beq .Labrt
398 teq r2,#0
399 moveq r0,#-1
400 beq .Labrt
401
402 teq r1,#128
403 beq .Lok
404 teq r1,#192
405 beq .Lok
406 teq r1,#256
407 movne r0,#-1
408 bne .Labrt
409
410.Lok: stmdb sp!,{r4-r12,lr}
411 sub r10,r3,#_armv4_AES_set_encrypt_key-AES_Te-1024 @ Te4
412
413 mov r12,r0 @ inp
414 mov lr,r1 @ bits
415 mov r11,r2 @ key
416
417#if __ARM_ARCH__<7
418 ldrb r0,[r12,#3] @ load input data in endian-neutral
419 ldrb r4,[r12,#2] @ manner...
420 ldrb r5,[r12,#1]
421 ldrb r6,[r12,#0]
422 orr r0,r0,r4,lsl#8
423 ldrb r1,[r12,#7]
424 orr r0,r0,r5,lsl#16
425 ldrb r4,[r12,#6]
426 orr r0,r0,r6,lsl#24
427 ldrb r5,[r12,#5]
428 ldrb r6,[r12,#4]
429 orr r1,r1,r4,lsl#8
430 ldrb r2,[r12,#11]
431 orr r1,r1,r5,lsl#16
432 ldrb r4,[r12,#10]
433 orr r1,r1,r6,lsl#24
434 ldrb r5,[r12,#9]
435 ldrb r6,[r12,#8]
436 orr r2,r2,r4,lsl#8
437 ldrb r3,[r12,#15]
438 orr r2,r2,r5,lsl#16
439 ldrb r4,[r12,#14]
440 orr r2,r2,r6,lsl#24
441 ldrb r5,[r12,#13]
442 ldrb r6,[r12,#12]
443 orr r3,r3,r4,lsl#8
444 str r0,[r11],#16
445 orr r3,r3,r5,lsl#16
446 str r1,[r11,#-12]
447 orr r3,r3,r6,lsl#24
448 str r2,[r11,#-8]
449 str r3,[r11,#-4]
450#else
451 ldr r0,[r12,#0]
452 ldr r1,[r12,#4]
453 ldr r2,[r12,#8]
454 ldr r3,[r12,#12]
455#ifdef __ARMEL__
456 rev r0,r0
457 rev r1,r1
458 rev r2,r2
459 rev r3,r3
460#endif
461 str r0,[r11],#16
462 str r1,[r11,#-12]
463 str r2,[r11,#-8]
464 str r3,[r11,#-4]
465#endif
466
467 teq lr,#128
468 bne .Lnot128
469 mov r12,#10
470 str r12,[r11,#240-16]
471 add r6,r10,#256 @ rcon
472 mov lr,#255
473
474.L128_loop:
475 and r5,lr,r3,lsr#24
476 and r7,lr,r3,lsr#16
477 ldrb r5,[r10,r5]
478 and r8,lr,r3,lsr#8
479 ldrb r7,[r10,r7]
480 and r9,lr,r3
481 ldrb r8,[r10,r8]
482 orr r5,r5,r7,lsl#24
483 ldrb r9,[r10,r9]
484 orr r5,r5,r8,lsl#16
485 ldr r4,[r6],#4 @ rcon[i++]
486 orr r5,r5,r9,lsl#8
487 eor r5,r5,r4
488 eor r0,r0,r5 @ rk[4]=rk[0]^...
489 eor r1,r1,r0 @ rk[5]=rk[1]^rk[4]
490 str r0,[r11],#16
491 eor r2,r2,r1 @ rk[6]=rk[2]^rk[5]
492 str r1,[r11,#-12]
493 eor r3,r3,r2 @ rk[7]=rk[3]^rk[6]
494 str r2,[r11,#-8]
495 subs r12,r12,#1
496 str r3,[r11,#-4]
497 bne .L128_loop
498 sub r2,r11,#176
499 b .Ldone
500
501.Lnot128:
502#if __ARM_ARCH__<7
503 ldrb r8,[r12,#19]
504 ldrb r4,[r12,#18]
505 ldrb r5,[r12,#17]
506 ldrb r6,[r12,#16]
507 orr r8,r8,r4,lsl#8
508 ldrb r9,[r12,#23]
509 orr r8,r8,r5,lsl#16
510 ldrb r4,[r12,#22]
511 orr r8,r8,r6,lsl#24
512 ldrb r5,[r12,#21]
513 ldrb r6,[r12,#20]
514 orr r9,r9,r4,lsl#8
515 orr r9,r9,r5,lsl#16
516 str r8,[r11],#8
517 orr r9,r9,r6,lsl#24
518 str r9,[r11,#-4]
519#else
520 ldr r8,[r12,#16]
521 ldr r9,[r12,#20]
522#ifdef __ARMEL__
523 rev r8,r8
524 rev r9,r9
525#endif
526 str r8,[r11],#8
527 str r9,[r11,#-4]
528#endif
529
530 teq lr,#192
531 bne .Lnot192
532 mov r12,#12
533 str r12,[r11,#240-24]
534 add r6,r10,#256 @ rcon
535 mov lr,#255
536 mov r12,#8
537
538.L192_loop:
539 and r5,lr,r9,lsr#24
540 and r7,lr,r9,lsr#16
541 ldrb r5,[r10,r5]
542 and r8,lr,r9,lsr#8
543 ldrb r7,[r10,r7]
544 and r9,lr,r9
545 ldrb r8,[r10,r8]
546 orr r5,r5,r7,lsl#24
547 ldrb r9,[r10,r9]
548 orr r5,r5,r8,lsl#16
549 ldr r4,[r6],#4 @ rcon[i++]
550 orr r5,r5,r9,lsl#8
551 eor r9,r5,r4
552 eor r0,r0,r9 @ rk[6]=rk[0]^...
553 eor r1,r1,r0 @ rk[7]=rk[1]^rk[6]
554 str r0,[r11],#24
555 eor r2,r2,r1 @ rk[8]=rk[2]^rk[7]
556 str r1,[r11,#-20]
557 eor r3,r3,r2 @ rk[9]=rk[3]^rk[8]
558 str r2,[r11,#-16]
559 subs r12,r12,#1
560 str r3,[r11,#-12]
561 subeq r2,r11,#216
562 beq .Ldone
563
564 ldr r7,[r11,#-32]
565 ldr r8,[r11,#-28]
566 eor r7,r7,r3 @ rk[10]=rk[4]^rk[9]
567 eor r9,r8,r7 @ rk[11]=rk[5]^rk[10]
568 str r7,[r11,#-8]
569 str r9,[r11,#-4]
570 b .L192_loop
571
572.Lnot192:
573#if __ARM_ARCH__<7
574 ldrb r8,[r12,#27]
575 ldrb r4,[r12,#26]
576 ldrb r5,[r12,#25]
577 ldrb r6,[r12,#24]
578 orr r8,r8,r4,lsl#8
579 ldrb r9,[r12,#31]
580 orr r8,r8,r5,lsl#16
581 ldrb r4,[r12,#30]
582 orr r8,r8,r6,lsl#24
583 ldrb r5,[r12,#29]
584 ldrb r6,[r12,#28]
585 orr r9,r9,r4,lsl#8
586 orr r9,r9,r5,lsl#16
587 str r8,[r11],#8
588 orr r9,r9,r6,lsl#24
589 str r9,[r11,#-4]
590#else
591 ldr r8,[r12,#24]
592 ldr r9,[r12,#28]
593#ifdef __ARMEL__
594 rev r8,r8
595 rev r9,r9
596#endif
597 str r8,[r11],#8
598 str r9,[r11,#-4]
599#endif
600
601 mov r12,#14
602 str r12,[r11,#240-32]
603 add r6,r10,#256 @ rcon
604 mov lr,#255
605 mov r12,#7
606
607.L256_loop:
608 and r5,lr,r9,lsr#24
609 and r7,lr,r9,lsr#16
610 ldrb r5,[r10,r5]
611 and r8,lr,r9,lsr#8
612 ldrb r7,[r10,r7]
613 and r9,lr,r9
614 ldrb r8,[r10,r8]
615 orr r5,r5,r7,lsl#24
616 ldrb r9,[r10,r9]
617 orr r5,r5,r8,lsl#16
618 ldr r4,[r6],#4 @ rcon[i++]
619 orr r5,r5,r9,lsl#8
620 eor r9,r5,r4
621 eor r0,r0,r9 @ rk[8]=rk[0]^...
622 eor r1,r1,r0 @ rk[9]=rk[1]^rk[8]
623 str r0,[r11],#32
624 eor r2,r2,r1 @ rk[10]=rk[2]^rk[9]
625 str r1,[r11,#-28]
626 eor r3,r3,r2 @ rk[11]=rk[3]^rk[10]
627 str r2,[r11,#-24]
628 subs r12,r12,#1
629 str r3,[r11,#-20]
630 subeq r2,r11,#256
631 beq .Ldone
632
633 and r5,lr,r3
634 and r7,lr,r3,lsr#8
635 ldrb r5,[r10,r5]
636 and r8,lr,r3,lsr#16
637 ldrb r7,[r10,r7]
638 and r9,lr,r3,lsr#24
639 ldrb r8,[r10,r8]
640 orr r5,r5,r7,lsl#8
641 ldrb r9,[r10,r9]
642 orr r5,r5,r8,lsl#16
643 ldr r4,[r11,#-48]
644 orr r5,r5,r9,lsl#24
645
646 ldr r7,[r11,#-44]
647 ldr r8,[r11,#-40]
648 eor r4,r4,r5 @ rk[12]=rk[4]^...
649 ldr r9,[r11,#-36]
650 eor r7,r7,r4 @ rk[13]=rk[5]^rk[12]
651 str r4,[r11,#-16]
652 eor r8,r8,r7 @ rk[14]=rk[6]^rk[13]
653 str r7,[r11,#-12]
654 eor r9,r9,r8 @ rk[15]=rk[7]^rk[14]
655 str r8,[r11,#-8]
656 str r9,[r11,#-4]
657 b .L256_loop
658
659.Ldone: mov r0,#0
660 ldmia sp!,{r4-r12,lr}
661.Labrt: tst lr,#1
662 moveq pc,lr @ be binary compatible with V4, yet
663 .word 0xe12fff1e @ interoperable with Thumb ISA:-)
664.size private_AES_set_encrypt_key,.-private_AES_set_encrypt_key
665
666.global private_AES_set_decrypt_key
667.type private_AES_set_decrypt_key,%function
668.align 5
669private_AES_set_decrypt_key:
670 str lr,[sp,#-4]! @ push lr
671#if 0
672 @ kernel does both of these in setkey so optimise this bit out by
673 @ expecting the key to already have the enc_key work done (see aes_glue.c)
674 bl _armv4_AES_set_encrypt_key
675#else
676 mov r0,#0
677#endif
678 teq r0,#0
679 ldrne lr,[sp],#4 @ pop lr
680 bne .Labrt
681
682 stmdb sp!,{r4-r12}
683
684 ldr r12,[r2,#240] @ AES_set_encrypt_key preserves r2,
685 mov r11,r2 @ which is AES_KEY *key
686 mov r7,r2
687 add r8,r2,r12,lsl#4
688
689.Linv: ldr r0,[r7]
690 ldr r1,[r7,#4]
691 ldr r2,[r7,#8]
692 ldr r3,[r7,#12]
693 ldr r4,[r8]
694 ldr r5,[r8,#4]
695 ldr r6,[r8,#8]
696 ldr r9,[r8,#12]
697 str r0,[r8],#-16
698 str r1,[r8,#16+4]
699 str r2,[r8,#16+8]
700 str r3,[r8,#16+12]
701 str r4,[r7],#16
702 str r5,[r7,#-12]
703 str r6,[r7,#-8]
704 str r9,[r7,#-4]
705 teq r7,r8
706 bne .Linv
707 ldr r0,[r11,#16]! @ prefetch tp1
708 mov r7,#0x80
709 mov r8,#0x1b
710 orr r7,r7,#0x8000
711 orr r8,r8,#0x1b00
712 orr r7,r7,r7,lsl#16
713 orr r8,r8,r8,lsl#16
714 sub r12,r12,#1
715 mvn r9,r7
716 mov r12,r12,lsl#2 @ (rounds-1)*4
717
718.Lmix: and r4,r0,r7
719 and r1,r0,r9
720 sub r4,r4,r4,lsr#7
721 and r4,r4,r8
722 eor r1,r4,r1,lsl#1 @ tp2
723
724 and r4,r1,r7
725 and r2,r1,r9
726 sub r4,r4,r4,lsr#7
727 and r4,r4,r8
728 eor r2,r4,r2,lsl#1 @ tp4
729
730 and r4,r2,r7
731 and r3,r2,r9
732 sub r4,r4,r4,lsr#7
733 and r4,r4,r8
734 eor r3,r4,r3,lsl#1 @ tp8
735
736 eor r4,r1,r2
737 eor r5,r0,r3 @ tp9
738 eor r4,r4,r3 @ tpe
739 eor r4,r4,r1,ror#24
740 eor r4,r4,r5,ror#24 @ ^= ROTATE(tpb=tp9^tp2,8)
741 eor r4,r4,r2,ror#16
742 eor r4,r4,r5,ror#16 @ ^= ROTATE(tpd=tp9^tp4,16)
743 eor r4,r4,r5,ror#8 @ ^= ROTATE(tp9,24)
744
745 ldr r0,[r11,#4] @ prefetch tp1
746 str r4,[r11],#4
747 subs r12,r12,#1
748 bne .Lmix
749
750 mov r0,#0
751#if __ARM_ARCH__>=5
752 ldmia sp!,{r4-r12,pc}
753#else
754 ldmia sp!,{r4-r12,lr}
755 tst lr,#1
756 moveq pc,lr @ be binary compatible with V4, yet
757 .word 0xe12fff1e @ interoperable with Thumb ISA:-)
758#endif
759.size private_AES_set_decrypt_key,.-private_AES_set_decrypt_key
760
761.type AES_Td,%object
762.align 5
763AES_Td:
764.word 0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96
765.word 0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393
766.word 0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25
767.word 0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f
768.word 0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1
769.word 0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6
770.word 0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da
771.word 0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844
772.word 0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd
773.word 0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4
774.word 0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45
775.word 0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94
776.word 0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7
777.word 0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a
778.word 0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5
779.word 0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c
780.word 0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1
781.word 0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a
782.word 0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75
783.word 0x0b83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051
784.word 0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46
785.word 0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff
786.word 0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77
787.word 0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb
788.word 0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000
789.word 0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e
790.word 0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927
791.word 0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a
792.word 0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e
793.word 0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16
794.word 0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d
795.word 0x0e090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8
796.word 0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd
797.word 0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34
798.word 0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163
799.word 0xd731dcca, 0x42638510, 0x13972240, 0x84c61120
800.word 0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d
801.word 0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0
802.word 0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422
803.word 0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef
804.word 0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36
805.word 0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4
806.word 0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662
807.word 0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5
808.word 0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3
809.word 0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b
810.word 0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8
811.word 0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6
812.word 0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6
813.word 0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0
814.word 0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815
815.word 0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f
816.word 0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df
817.word 0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f
818.word 0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e
819.word 0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713
820.word 0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89
821.word 0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c
822.word 0x9cd2df59, 0x55f2733f, 0x1814ce79, 0x73c737bf
823.word 0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86
824.word 0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f
825.word 0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541
826.word 0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190
827.word 0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742
828@ Td4[256]
829.byte 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38
830.byte 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb
831.byte 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87
832.byte 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb
833.byte 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d
834.byte 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e
835.byte 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2
836.byte 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25
837.byte 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16
838.byte 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92
839.byte 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda
840.byte 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84
841.byte 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a
842.byte 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06
843.byte 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02
844.byte 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b
845.byte 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea
846.byte 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73
847.byte 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85
848.byte 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e
849.byte 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89
850.byte 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b
851.byte 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20
852.byte 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4
853.byte 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31
854.byte 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f
855.byte 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d
856.byte 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef
857.byte 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0
858.byte 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61
859.byte 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26
860.byte 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d
861.size AES_Td,.-AES_Td
862
863@ void AES_decrypt(const unsigned char *in, unsigned char *out,
864@ const AES_KEY *key) {
865.global AES_decrypt
866.type AES_decrypt,%function
867.align 5
868AES_decrypt:
869 sub r3,pc,#8 @ AES_decrypt
870 stmdb sp!,{r1,r4-r12,lr}
871 mov r12,r0 @ inp
872 mov r11,r2
873 sub r10,r3,#AES_decrypt-AES_Td @ Td
874#if __ARM_ARCH__<7
875 ldrb r0,[r12,#3] @ load input data in endian-neutral
876 ldrb r4,[r12,#2] @ manner...
877 ldrb r5,[r12,#1]
878 ldrb r6,[r12,#0]
879 orr r0,r0,r4,lsl#8
880 ldrb r1,[r12,#7]
881 orr r0,r0,r5,lsl#16
882 ldrb r4,[r12,#6]
883 orr r0,r0,r6,lsl#24
884 ldrb r5,[r12,#5]
885 ldrb r6,[r12,#4]
886 orr r1,r1,r4,lsl#8
887 ldrb r2,[r12,#11]
888 orr r1,r1,r5,lsl#16
889 ldrb r4,[r12,#10]
890 orr r1,r1,r6,lsl#24
891 ldrb r5,[r12,#9]
892 ldrb r6,[r12,#8]
893 orr r2,r2,r4,lsl#8
894 ldrb r3,[r12,#15]
895 orr r2,r2,r5,lsl#16
896 ldrb r4,[r12,#14]
897 orr r2,r2,r6,lsl#24
898 ldrb r5,[r12,#13]
899 ldrb r6,[r12,#12]
900 orr r3,r3,r4,lsl#8
901 orr r3,r3,r5,lsl#16
902 orr r3,r3,r6,lsl#24
903#else
904 ldr r0,[r12,#0]
905 ldr r1,[r12,#4]
906 ldr r2,[r12,#8]
907 ldr r3,[r12,#12]
908#ifdef __ARMEL__
909 rev r0,r0
910 rev r1,r1
911 rev r2,r2
912 rev r3,r3
913#endif
914#endif
915 bl _armv4_AES_decrypt
916
917 ldr r12,[sp],#4 @ pop out
918#if __ARM_ARCH__>=7
919#ifdef __ARMEL__
920 rev r0,r0
921 rev r1,r1
922 rev r2,r2
923 rev r3,r3
924#endif
925 str r0,[r12,#0]
926 str r1,[r12,#4]
927 str r2,[r12,#8]
928 str r3,[r12,#12]
929#else
930 mov r4,r0,lsr#24 @ write output in endian-neutral
931 mov r5,r0,lsr#16 @ manner...
932 mov r6,r0,lsr#8
933 strb r4,[r12,#0]
934 strb r5,[r12,#1]
935 mov r4,r1,lsr#24
936 strb r6,[r12,#2]
937 mov r5,r1,lsr#16
938 strb r0,[r12,#3]
939 mov r6,r1,lsr#8
940 strb r4,[r12,#4]
941 strb r5,[r12,#5]
942 mov r4,r2,lsr#24
943 strb r6,[r12,#6]
944 mov r5,r2,lsr#16
945 strb r1,[r12,#7]
946 mov r6,r2,lsr#8
947 strb r4,[r12,#8]
948 strb r5,[r12,#9]
949 mov r4,r3,lsr#24
950 strb r6,[r12,#10]
951 mov r5,r3,lsr#16
952 strb r2,[r12,#11]
953 mov r6,r3,lsr#8
954 strb r4,[r12,#12]
955 strb r5,[r12,#13]
956 strb r6,[r12,#14]
957 strb r3,[r12,#15]
958#endif
959#if __ARM_ARCH__>=5
960 ldmia sp!,{r4-r12,pc}
961#else
962 ldmia sp!,{r4-r12,lr}
963 tst lr,#1
964 moveq pc,lr @ be binary compatible with V4, yet
965 .word 0xe12fff1e @ interoperable with Thumb ISA:-)
966#endif
967.size AES_decrypt,.-AES_decrypt
968
969.type _armv4_AES_decrypt,%function
970.align 2
971_armv4_AES_decrypt:
972 str lr,[sp,#-4]! @ push lr
973 ldmia r11!,{r4-r7}
974 eor r0,r0,r4
975 ldr r12,[r11,#240-16]
976 eor r1,r1,r5
977 eor r2,r2,r6
978 eor r3,r3,r7
979 sub r12,r12,#1
980 mov lr,#255
981
982 and r7,lr,r0,lsr#16
983 and r8,lr,r0,lsr#8
984 and r9,lr,r0
985 mov r0,r0,lsr#24
986.Ldec_loop:
987 ldr r4,[r10,r7,lsl#2] @ Td1[s0>>16]
988 and r7,lr,r1 @ i0
989 ldr r5,[r10,r8,lsl#2] @ Td2[s0>>8]
990 and r8,lr,r1,lsr#16
991 ldr r6,[r10,r9,lsl#2] @ Td3[s0>>0]
992 and r9,lr,r1,lsr#8
993 ldr r0,[r10,r0,lsl#2] @ Td0[s0>>24]
994 mov r1,r1,lsr#24
995
996 ldr r7,[r10,r7,lsl#2] @ Td3[s1>>0]
997 ldr r8,[r10,r8,lsl#2] @ Td1[s1>>16]
998 ldr r9,[r10,r9,lsl#2] @ Td2[s1>>8]
999 eor r0,r0,r7,ror#24
1000 ldr r1,[r10,r1,lsl#2] @ Td0[s1>>24]
1001 and r7,lr,r2,lsr#8 @ i0
1002 eor r5,r8,r5,ror#8
1003 and r8,lr,r2 @ i1
1004 eor r6,r9,r6,ror#8
1005 and r9,lr,r2,lsr#16
1006 ldr r7,[r10,r7,lsl#2] @ Td2[s2>>8]
1007 eor r1,r1,r4,ror#8
1008 ldr r8,[r10,r8,lsl#2] @ Td3[s2>>0]
1009 mov r2,r2,lsr#24
1010
1011 ldr r9,[r10,r9,lsl#2] @ Td1[s2>>16]
1012 eor r0,r0,r7,ror#16
1013 ldr r2,[r10,r2,lsl#2] @ Td0[s2>>24]
1014 and r7,lr,r3,lsr#16 @ i0
1015 eor r1,r1,r8,ror#24
1016 and r8,lr,r3,lsr#8 @ i1
1017 eor r6,r9,r6,ror#8
1018 and r9,lr,r3 @ i2
1019 ldr r7,[r10,r7,lsl#2] @ Td1[s3>>16]
1020 eor r2,r2,r5,ror#8
1021 ldr r8,[r10,r8,lsl#2] @ Td2[s3>>8]
1022 mov r3,r3,lsr#24
1023
1024 ldr r9,[r10,r9,lsl#2] @ Td3[s3>>0]
1025 eor r0,r0,r7,ror#8
1026 ldr r7,[r11],#16
1027 eor r1,r1,r8,ror#16
1028 ldr r3,[r10,r3,lsl#2] @ Td0[s3>>24]
1029 eor r2,r2,r9,ror#24
1030
1031 ldr r4,[r11,#-12]
1032 eor r0,r0,r7
1033 ldr r5,[r11,#-8]
1034 eor r3,r3,r6,ror#8
1035 ldr r6,[r11,#-4]
1036 and r7,lr,r0,lsr#16
1037 eor r1,r1,r4
1038 and r8,lr,r0,lsr#8
1039 eor r2,r2,r5
1040 and r9,lr,r0
1041 eor r3,r3,r6
1042 mov r0,r0,lsr#24
1043
1044 subs r12,r12,#1
1045 bne .Ldec_loop
1046
1047 add r10,r10,#1024
1048
1049 ldr r5,[r10,#0] @ prefetch Td4
1050 ldr r6,[r10,#32]
1051 ldr r4,[r10,#64]
1052 ldr r5,[r10,#96]
1053 ldr r6,[r10,#128]
1054 ldr r4,[r10,#160]
1055 ldr r5,[r10,#192]
1056 ldr r6,[r10,#224]
1057
1058 ldrb r0,[r10,r0] @ Td4[s0>>24]
1059 ldrb r4,[r10,r7] @ Td4[s0>>16]
1060 and r7,lr,r1 @ i0
1061 ldrb r5,[r10,r8] @ Td4[s0>>8]
1062 and r8,lr,r1,lsr#16
1063 ldrb r6,[r10,r9] @ Td4[s0>>0]
1064 and r9,lr,r1,lsr#8
1065
1066 ldrb r7,[r10,r7] @ Td4[s1>>0]
1067 ldrb r1,[r10,r1,lsr#24] @ Td4[s1>>24]
1068 ldrb r8,[r10,r8] @ Td4[s1>>16]
1069 eor r0,r7,r0,lsl#24
1070 ldrb r9,[r10,r9] @ Td4[s1>>8]
1071 eor r1,r4,r1,lsl#8
1072 and r7,lr,r2,lsr#8 @ i0
1073 eor r5,r5,r8,lsl#8
1074 and r8,lr,r2 @ i1
1075 ldrb r7,[r10,r7] @ Td4[s2>>8]
1076 eor r6,r6,r9,lsl#8
1077 ldrb r8,[r10,r8] @ Td4[s2>>0]
1078 and r9,lr,r2,lsr#16
1079
1080 ldrb r2,[r10,r2,lsr#24] @ Td4[s2>>24]
1081 eor r0,r0,r7,lsl#8
1082 ldrb r9,[r10,r9] @ Td4[s2>>16]
1083 eor r1,r8,r1,lsl#16
1084 and r7,lr,r3,lsr#16 @ i0
1085 eor r2,r5,r2,lsl#16
1086 and r8,lr,r3,lsr#8 @ i1
1087 ldrb r7,[r10,r7] @ Td4[s3>>16]
1088 eor r6,r6,r9,lsl#16
1089 ldrb r8,[r10,r8] @ Td4[s3>>8]
1090 and r9,lr,r3 @ i2
1091
1092 ldrb r9,[r10,r9] @ Td4[s3>>0]
1093 ldrb r3,[r10,r3,lsr#24] @ Td4[s3>>24]
1094 eor r0,r0,r7,lsl#16
1095 ldr r7,[r11,#0]
1096 eor r1,r1,r8,lsl#8
1097 ldr r4,[r11,#4]
1098 eor r2,r9,r2,lsl#8
1099 ldr r5,[r11,#8]
1100 eor r3,r6,r3,lsl#24
1101 ldr r6,[r11,#12]
1102
1103 eor r0,r0,r7
1104 eor r1,r1,r4
1105 eor r2,r2,r5
1106 eor r3,r3,r6
1107
1108 sub r10,r10,#1024
1109 ldr pc,[sp],#4 @ pop and return
1110.size _armv4_AES_decrypt,.-_armv4_AES_decrypt
1111.asciz "AES for ARMv4, CRYPTOGAMS by <appro@openssl.org>"
1112.align 2
diff --git a/arch/arm/crypto/aes_glue.c b/arch/arm/crypto/aes_glue.c
new file mode 100644
index 00000000000..59f7877ead6
--- /dev/null
+++ b/arch/arm/crypto/aes_glue.c
@@ -0,0 +1,108 @@
1/*
2 * Glue Code for the asm optimized version of the AES Cipher Algorithm
3 */
4
5#include <linux/module.h>
6#include <linux/crypto.h>
7#include <crypto/aes.h>
8
9#define AES_MAXNR 14
10
11typedef struct {
12 unsigned int rd_key[4 *(AES_MAXNR + 1)];
13 int rounds;
14} AES_KEY;
15
16struct AES_CTX {
17 AES_KEY enc_key;
18 AES_KEY dec_key;
19};
20
21asmlinkage void AES_encrypt(const u8 *in, u8 *out, AES_KEY *ctx);
22asmlinkage void AES_decrypt(const u8 *in, u8 *out, AES_KEY *ctx);
23asmlinkage int private_AES_set_decrypt_key(const unsigned char *userKey, const int bits, AES_KEY *key);
24asmlinkage int private_AES_set_encrypt_key(const unsigned char *userKey, const int bits, AES_KEY *key);
25
26static void aes_encrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src)
27{
28 struct AES_CTX *ctx = crypto_tfm_ctx(tfm);
29 AES_encrypt(src, dst, &ctx->enc_key);
30}
31
32static void aes_decrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src)
33{
34 struct AES_CTX *ctx = crypto_tfm_ctx(tfm);
35 AES_decrypt(src, dst, &ctx->dec_key);
36}
37
38static int aes_set_key(struct crypto_tfm *tfm, const u8 *in_key,
39 unsigned int key_len)
40{
41 struct AES_CTX *ctx = crypto_tfm_ctx(tfm);
42
43 switch (key_len) {
44 case AES_KEYSIZE_128:
45 key_len = 128;
46 break;
47 case AES_KEYSIZE_192:
48 key_len = 192;
49 break;
50 case AES_KEYSIZE_256:
51 key_len = 256;
52 break;
53 default:
54 tfm->crt_flags |= CRYPTO_TFM_RES_BAD_KEY_LEN;
55 return -EINVAL;
56 }
57
58 if (private_AES_set_encrypt_key(in_key, key_len, &ctx->enc_key) == -1) {
59 tfm->crt_flags |= CRYPTO_TFM_RES_BAD_KEY_LEN;
60 return -EINVAL;
61 }
62 /* private_AES_set_decrypt_key expects an encryption key as input */
63 ctx->dec_key = ctx->enc_key;
64 if (private_AES_set_decrypt_key(in_key, key_len, &ctx->dec_key) == -1) {
65 tfm->crt_flags |= CRYPTO_TFM_RES_BAD_KEY_LEN;
66 return -EINVAL;
67 }
68 return 0;
69}
70
71static struct crypto_alg aes_alg = {
72 .cra_name = "aes",
73 .cra_driver_name = "aes-asm",
74 .cra_priority = 200,
75 .cra_flags = CRYPTO_ALG_TYPE_CIPHER,
76 .cra_blocksize = AES_BLOCK_SIZE,
77 .cra_ctxsize = sizeof(struct AES_CTX),
78 .cra_module = THIS_MODULE,
79 .cra_list = LIST_HEAD_INIT(aes_alg.cra_list),
80 .cra_u = {
81 .cipher = {
82 .cia_min_keysize = AES_MIN_KEY_SIZE,
83 .cia_max_keysize = AES_MAX_KEY_SIZE,
84 .cia_setkey = aes_set_key,
85 .cia_encrypt = aes_encrypt,
86 .cia_decrypt = aes_decrypt
87 }
88 }
89};
90
91static int __init aes_init(void)
92{
93 return crypto_register_alg(&aes_alg);
94}
95
96static void __exit aes_fini(void)
97{
98 crypto_unregister_alg(&aes_alg);
99}
100
101module_init(aes_init);
102module_exit(aes_fini);
103
104MODULE_DESCRIPTION("Rijndael (AES) Cipher Algorithm (ASM)");
105MODULE_LICENSE("GPL");
106MODULE_ALIAS("aes");
107MODULE_ALIAS("aes-asm");
108MODULE_AUTHOR("David McCullough <ucdevel@gmail.com>");
diff --git a/arch/arm/crypto/sha1-armv4-large.S b/arch/arm/crypto/sha1-armv4-large.S
new file mode 100644
index 00000000000..7050ab133b9
--- /dev/null
+++ b/arch/arm/crypto/sha1-armv4-large.S
@@ -0,0 +1,503 @@
1#define __ARM_ARCH__ __LINUX_ARM_ARCH__
2@ ====================================================================
3@ Written by Andy Polyakov <appro@fy.chalmers.se> for the OpenSSL
4@ project. The module is, however, dual licensed under OpenSSL and
5@ CRYPTOGAMS licenses depending on where you obtain it. For further
6@ details see http://www.openssl.org/~appro/cryptogams/.
7@ ====================================================================
8
9@ sha1_block procedure for ARMv4.
10@
11@ January 2007.
12
13@ Size/performance trade-off
14@ ====================================================================
15@ impl size in bytes comp cycles[*] measured performance
16@ ====================================================================
17@ thumb 304 3212 4420
18@ armv4-small 392/+29% 1958/+64% 2250/+96%
19@ armv4-compact 740/+89% 1552/+26% 1840/+22%
20@ armv4-large 1420/+92% 1307/+19% 1370/+34%[***]
21@ full unroll ~5100/+260% ~1260/+4% ~1300/+5%
22@ ====================================================================
23@ thumb = same as 'small' but in Thumb instructions[**] and
24@ with recurring code in two private functions;
25@ small = detached Xload/update, loops are folded;
26@ compact = detached Xload/update, 5x unroll;
27@ large = interleaved Xload/update, 5x unroll;
28@ full unroll = interleaved Xload/update, full unroll, estimated[!];
29@
30@ [*] Manually counted instructions in "grand" loop body. Measured
31@ performance is affected by prologue and epilogue overhead,
32@ i-cache availability, branch penalties, etc.
33@ [**] While each Thumb instruction is twice smaller, they are not as
34@ diverse as ARM ones: e.g., there are only two arithmetic
35@ instructions with 3 arguments, no [fixed] rotate, addressing
36@ modes are limited. As result it takes more instructions to do
37@ the same job in Thumb, therefore the code is never twice as
38@ small and always slower.
39@ [***] which is also ~35% better than compiler generated code. Dual-
40@ issue Cortex A8 core was measured to process input block in
41@ ~990 cycles.
42
43@ August 2010.
44@
45@ Rescheduling for dual-issue pipeline resulted in 13% improvement on
46@ Cortex A8 core and in absolute terms ~870 cycles per input block
47@ [or 13.6 cycles per byte].
48
49@ February 2011.
50@
51@ Profiler-assisted and platform-specific optimization resulted in 10%
52@ improvement on Cortex A8 core and 12.2 cycles per byte.
53
54.text
55
56.global sha1_block_data_order
57.type sha1_block_data_order,%function
58
59.align 2
60sha1_block_data_order:
61 stmdb sp!,{r4-r12,lr}
62 add r2,r1,r2,lsl#6 @ r2 to point at the end of r1
63 ldmia r0,{r3,r4,r5,r6,r7}
64.Lloop:
65 ldr r8,.LK_00_19
66 mov r14,sp
67 sub sp,sp,#15*4
68 mov r5,r5,ror#30
69 mov r6,r6,ror#30
70 mov r7,r7,ror#30 @ [6]
71.L_00_15:
72#if __ARM_ARCH__<7
73 ldrb r10,[r1,#2]
74 ldrb r9,[r1,#3]
75 ldrb r11,[r1,#1]
76 add r7,r8,r7,ror#2 @ E+=K_00_19
77 ldrb r12,[r1],#4
78 orr r9,r9,r10,lsl#8
79 eor r10,r5,r6 @ F_xx_xx
80 orr r9,r9,r11,lsl#16
81 add r7,r7,r3,ror#27 @ E+=ROR(A,27)
82 orr r9,r9,r12,lsl#24
83#else
84 ldr r9,[r1],#4 @ handles unaligned
85 add r7,r8,r7,ror#2 @ E+=K_00_19
86 eor r10,r5,r6 @ F_xx_xx
87 add r7,r7,r3,ror#27 @ E+=ROR(A,27)
88#ifdef __ARMEL__
89 rev r9,r9 @ byte swap
90#endif
91#endif
92 and r10,r4,r10,ror#2
93 add r7,r7,r9 @ E+=X[i]
94 eor r10,r10,r6,ror#2 @ F_00_19(B,C,D)
95 str r9,[r14,#-4]!
96 add r7,r7,r10 @ E+=F_00_19(B,C,D)
97#if __ARM_ARCH__<7
98 ldrb r10,[r1,#2]
99 ldrb r9,[r1,#3]
100 ldrb r11,[r1,#1]
101 add r6,r8,r6,ror#2 @ E+=K_00_19
102 ldrb r12,[r1],#4
103 orr r9,r9,r10,lsl#8
104 eor r10,r4,r5 @ F_xx_xx
105 orr r9,r9,r11,lsl#16
106 add r6,r6,r7,ror#27 @ E+=ROR(A,27)
107 orr r9,r9,r12,lsl#24
108#else
109 ldr r9,[r1],#4 @ handles unaligned
110 add r6,r8,r6,ror#2 @ E+=K_00_19
111 eor r10,r4,r5 @ F_xx_xx
112 add r6,r6,r7,ror#27 @ E+=ROR(A,27)
113#ifdef __ARMEL__
114 rev r9,r9 @ byte swap
115#endif
116#endif
117 and r10,r3,r10,ror#2
118 add r6,r6,r9 @ E+=X[i]
119 eor r10,r10,r5,ror#2 @ F_00_19(B,C,D)
120 str r9,[r14,#-4]!
121 add r6,r6,r10 @ E+=F_00_19(B,C,D)
122#if __ARM_ARCH__<7
123 ldrb r10,[r1,#2]
124 ldrb r9,[r1,#3]
125 ldrb r11,[r1,#1]
126 add r5,r8,r5,ror#2 @ E+=K_00_19
127 ldrb r12,[r1],#4
128 orr r9,r9,r10,lsl#8
129 eor r10,r3,r4 @ F_xx_xx
130 orr r9,r9,r11,lsl#16
131 add r5,r5,r6,ror#27 @ E+=ROR(A,27)
132 orr r9,r9,r12,lsl#24
133#else
134 ldr r9,[r1],#4 @ handles unaligned
135 add r5,r8,r5,ror#2 @ E+=K_00_19
136 eor r10,r3,r4 @ F_xx_xx
137 add r5,r5,r6,ror#27 @ E+=ROR(A,27)
138#ifdef __ARMEL__
139 rev r9,r9 @ byte swap
140#endif
141#endif
142 and r10,r7,r10,ror#2
143 add r5,r5,r9 @ E+=X[i]
144 eor r10,r10,r4,ror#2 @ F_00_19(B,C,D)
145 str r9,[r14,#-4]!
146 add r5,r5,r10 @ E+=F_00_19(B,C,D)
147#if __ARM_ARCH__<7
148 ldrb r10,[r1,#2]
149 ldrb r9,[r1,#3]
150 ldrb r11,[r1,#1]
151 add r4,r8,r4,ror#2 @ E+=K_00_19
152 ldrb r12,[r1],#4
153 orr r9,r9,r10,lsl#8
154 eor r10,r7,r3 @ F_xx_xx
155 orr r9,r9,r11,lsl#16
156 add r4,r4,r5,ror#27 @ E+=ROR(A,27)
157 orr r9,r9,r12,lsl#24
158#else
159 ldr r9,[r1],#4 @ handles unaligned
160 add r4,r8,r4,ror#2 @ E+=K_00_19
161 eor r10,r7,r3 @ F_xx_xx
162 add r4,r4,r5,ror#27 @ E+=ROR(A,27)
163#ifdef __ARMEL__
164 rev r9,r9 @ byte swap
165#endif
166#endif
167 and r10,r6,r10,ror#2
168 add r4,r4,r9 @ E+=X[i]
169 eor r10,r10,r3,ror#2 @ F_00_19(B,C,D)
170 str r9,[r14,#-4]!
171 add r4,r4,r10 @ E+=F_00_19(B,C,D)
172#if __ARM_ARCH__<7
173 ldrb r10,[r1,#2]
174 ldrb r9,[r1,#3]
175 ldrb r11,[r1,#1]
176 add r3,r8,r3,ror#2 @ E+=K_00_19
177 ldrb r12,[r1],#4
178 orr r9,r9,r10,lsl#8
179 eor r10,r6,r7 @ F_xx_xx
180 orr r9,r9,r11,lsl#16
181 add r3,r3,r4,ror#27 @ E+=ROR(A,27)
182 orr r9,r9,r12,lsl#24
183#else
184 ldr r9,[r1],#4 @ handles unaligned
185 add r3,r8,r3,ror#2 @ E+=K_00_19
186 eor r10,r6,r7 @ F_xx_xx
187 add r3,r3,r4,ror#27 @ E+=ROR(A,27)
188#ifdef __ARMEL__
189 rev r9,r9 @ byte swap
190#endif
191#endif
192 and r10,r5,r10,ror#2
193 add r3,r3,r9 @ E+=X[i]
194 eor r10,r10,r7,ror#2 @ F_00_19(B,C,D)
195 str r9,[r14,#-4]!
196 add r3,r3,r10 @ E+=F_00_19(B,C,D)
197 teq r14,sp
198 bne .L_00_15 @ [((11+4)*5+2)*3]
199#if __ARM_ARCH__<7
200 ldrb r10,[r1,#2]
201 ldrb r9,[r1,#3]
202 ldrb r11,[r1,#1]
203 add r7,r8,r7,ror#2 @ E+=K_00_19
204 ldrb r12,[r1],#4
205 orr r9,r9,r10,lsl#8
206 eor r10,r5,r6 @ F_xx_xx
207 orr r9,r9,r11,lsl#16
208 add r7,r7,r3,ror#27 @ E+=ROR(A,27)
209 orr r9,r9,r12,lsl#24
210#else
211 ldr r9,[r1],#4 @ handles unaligned
212 add r7,r8,r7,ror#2 @ E+=K_00_19
213 eor r10,r5,r6 @ F_xx_xx
214 add r7,r7,r3,ror#27 @ E+=ROR(A,27)
215#ifdef __ARMEL__
216 rev r9,r9 @ byte swap
217#endif
218#endif
219 and r10,r4,r10,ror#2
220 add r7,r7,r9 @ E+=X[i]
221 eor r10,r10,r6,ror#2 @ F_00_19(B,C,D)
222 str r9,[r14,#-4]!
223 add r7,r7,r10 @ E+=F_00_19(B,C,D)
224 ldr r9,[r14,#15*4]
225 ldr r10,[r14,#13*4]
226 ldr r11,[r14,#7*4]
227 add r6,r8,r6,ror#2 @ E+=K_xx_xx
228 ldr r12,[r14,#2*4]
229 eor r9,r9,r10
230 eor r11,r11,r12 @ 1 cycle stall
231 eor r10,r4,r5 @ F_xx_xx
232 mov r9,r9,ror#31
233 add r6,r6,r7,ror#27 @ E+=ROR(A,27)
234 eor r9,r9,r11,ror#31
235 str r9,[r14,#-4]!
236 and r10,r3,r10,ror#2 @ F_xx_xx
237 @ F_xx_xx
238 add r6,r6,r9 @ E+=X[i]
239 eor r10,r10,r5,ror#2 @ F_00_19(B,C,D)
240 add r6,r6,r10 @ E+=F_00_19(B,C,D)
241 ldr r9,[r14,#15*4]
242 ldr r10,[r14,#13*4]
243 ldr r11,[r14,#7*4]
244 add r5,r8,r5,ror#2 @ E+=K_xx_xx
245 ldr r12,[r14,#2*4]
246 eor r9,r9,r10
247 eor r11,r11,r12 @ 1 cycle stall
248 eor r10,r3,r4 @ F_xx_xx
249 mov r9,r9,ror#31
250 add r5,r5,r6,ror#27 @ E+=ROR(A,27)
251 eor r9,r9,r11,ror#31
252 str r9,[r14,#-4]!
253 and r10,r7,r10,ror#2 @ F_xx_xx
254 @ F_xx_xx
255 add r5,r5,r9 @ E+=X[i]
256 eor r10,r10,r4,ror#2 @ F_00_19(B,C,D)
257 add r5,r5,r10 @ E+=F_00_19(B,C,D)
258 ldr r9,[r14,#15*4]
259 ldr r10,[r14,#13*4]
260 ldr r11,[r14,#7*4]
261 add r4,r8,r4,ror#2 @ E+=K_xx_xx
262 ldr r12,[r14,#2*4]
263 eor r9,r9,r10
264 eor r11,r11,r12 @ 1 cycle stall
265 eor r10,r7,r3 @ F_xx_xx
266 mov r9,r9,ror#31
267 add r4,r4,r5,ror#27 @ E+=ROR(A,27)
268 eor r9,r9,r11,ror#31
269 str r9,[r14,#-4]!
270 and r10,r6,r10,ror#2 @ F_xx_xx
271 @ F_xx_xx
272 add r4,r4,r9 @ E+=X[i]
273 eor r10,r10,r3,ror#2 @ F_00_19(B,C,D)
274 add r4,r4,r10 @ E+=F_00_19(B,C,D)
275 ldr r9,[r14,#15*4]
276 ldr r10,[r14,#13*4]
277 ldr r11,[r14,#7*4]
278 add r3,r8,r3,ror#2 @ E+=K_xx_xx
279 ldr r12,[r14,#2*4]
280 eor r9,r9,r10
281 eor r11,r11,r12 @ 1 cycle stall
282 eor r10,r6,r7 @ F_xx_xx
283 mov r9,r9,ror#31
284 add r3,r3,r4,ror#27 @ E+=ROR(A,27)
285 eor r9,r9,r11,ror#31
286 str r9,[r14,#-4]!
287 and r10,r5,r10,ror#2 @ F_xx_xx
288 @ F_xx_xx
289 add r3,r3,r9 @ E+=X[i]
290 eor r10,r10,r7,ror#2 @ F_00_19(B,C,D)
291 add r3,r3,r10 @ E+=F_00_19(B,C,D)
292
293 ldr r8,.LK_20_39 @ [+15+16*4]
294 sub sp,sp,#25*4
295 cmn sp,#0 @ [+3], clear carry to denote 20_39
296.L_20_39_or_60_79:
297 ldr r9,[r14,#15*4]
298 ldr r10,[r14,#13*4]
299 ldr r11,[r14,#7*4]
300 add r7,r8,r7,ror#2 @ E+=K_xx_xx
301 ldr r12,[r14,#2*4]
302 eor r9,r9,r10
303 eor r11,r11,r12 @ 1 cycle stall
304 eor r10,r5,r6 @ F_xx_xx
305 mov r9,r9,ror#31
306 add r7,r7,r3,ror#27 @ E+=ROR(A,27)
307 eor r9,r9,r11,ror#31
308 str r9,[r14,#-4]!
309 eor r10,r4,r10,ror#2 @ F_xx_xx
310 @ F_xx_xx
311 add r7,r7,r9 @ E+=X[i]
312 add r7,r7,r10 @ E+=F_20_39(B,C,D)
313 ldr r9,[r14,#15*4]
314 ldr r10,[r14,#13*4]
315 ldr r11,[r14,#7*4]
316 add r6,r8,r6,ror#2 @ E+=K_xx_xx
317 ldr r12,[r14,#2*4]
318 eor r9,r9,r10
319 eor r11,r11,r12 @ 1 cycle stall
320 eor r10,r4,r5 @ F_xx_xx
321 mov r9,r9,ror#31
322 add r6,r6,r7,ror#27 @ E+=ROR(A,27)
323 eor r9,r9,r11,ror#31
324 str r9,[r14,#-4]!
325 eor r10,r3,r10,ror#2 @ F_xx_xx
326 @ F_xx_xx
327 add r6,r6,r9 @ E+=X[i]
328 add r6,r6,r10 @ E+=F_20_39(B,C,D)
329 ldr r9,[r14,#15*4]
330 ldr r10,[r14,#13*4]
331 ldr r11,[r14,#7*4]
332 add r5,r8,r5,ror#2 @ E+=K_xx_xx
333 ldr r12,[r14,#2*4]
334 eor r9,r9,r10
335 eor r11,r11,r12 @ 1 cycle stall
336 eor r10,r3,r4 @ F_xx_xx
337 mov r9,r9,ror#31
338 add r5,r5,r6,ror#27 @ E+=ROR(A,27)
339 eor r9,r9,r11,ror#31
340 str r9,[r14,#-4]!
341 eor r10,r7,r10,ror#2 @ F_xx_xx
342 @ F_xx_xx
343 add r5,r5,r9 @ E+=X[i]
344 add r5,r5,r10 @ E+=F_20_39(B,C,D)
345 ldr r9,[r14,#15*4]
346 ldr r10,[r14,#13*4]
347 ldr r11,[r14,#7*4]
348 add r4,r8,r4,ror#2 @ E+=K_xx_xx
349 ldr r12,[r14,#2*4]
350 eor r9,r9,r10
351 eor r11,r11,r12 @ 1 cycle stall
352 eor r10,r7,r3 @ F_xx_xx
353 mov r9,r9,ror#31
354 add r4,r4,r5,ror#27 @ E+=ROR(A,27)
355 eor r9,r9,r11,ror#31
356 str r9,[r14,#-4]!
357 eor r10,r6,r10,ror#2 @ F_xx_xx
358 @ F_xx_xx
359 add r4,r4,r9 @ E+=X[i]
360 add r4,r4,r10 @ E+=F_20_39(B,C,D)
361 ldr r9,[r14,#15*4]
362 ldr r10,[r14,#13*4]
363 ldr r11,[r14,#7*4]
364 add r3,r8,r3,ror#2 @ E+=K_xx_xx
365 ldr r12,[r14,#2*4]
366 eor r9,r9,r10
367 eor r11,r11,r12 @ 1 cycle stall
368 eor r10,r6,r7 @ F_xx_xx
369 mov r9,r9,ror#31
370 add r3,r3,r4,ror#27 @ E+=ROR(A,27)
371 eor r9,r9,r11,ror#31
372 str r9,[r14,#-4]!
373 eor r10,r5,r10,ror#2 @ F_xx_xx
374 @ F_xx_xx
375 add r3,r3,r9 @ E+=X[i]
376 add r3,r3,r10 @ E+=F_20_39(B,C,D)
377 teq r14,sp @ preserve carry
378 bne .L_20_39_or_60_79 @ [+((12+3)*5+2)*4]
379 bcs .L_done @ [+((12+3)*5+2)*4], spare 300 bytes
380
381 ldr r8,.LK_40_59
382 sub sp,sp,#20*4 @ [+2]
383.L_40_59:
384 ldr r9,[r14,#15*4]
385 ldr r10,[r14,#13*4]
386 ldr r11,[r14,#7*4]
387 add r7,r8,r7,ror#2 @ E+=K_xx_xx
388 ldr r12,[r14,#2*4]
389 eor r9,r9,r10
390 eor r11,r11,r12 @ 1 cycle stall
391 eor r10,r5,r6 @ F_xx_xx
392 mov r9,r9,ror#31
393 add r7,r7,r3,ror#27 @ E+=ROR(A,27)
394 eor r9,r9,r11,ror#31
395 str r9,[r14,#-4]!
396 and r10,r4,r10,ror#2 @ F_xx_xx
397 and r11,r5,r6 @ F_xx_xx
398 add r7,r7,r9 @ E+=X[i]
399 add r7,r7,r10 @ E+=F_40_59(B,C,D)
400 add r7,r7,r11,ror#2
401 ldr r9,[r14,#15*4]
402 ldr r10,[r14,#13*4]
403 ldr r11,[r14,#7*4]
404 add r6,r8,r6,ror#2 @ E+=K_xx_xx
405 ldr r12,[r14,#2*4]
406 eor r9,r9,r10
407 eor r11,r11,r12 @ 1 cycle stall
408 eor r10,r4,r5 @ F_xx_xx
409 mov r9,r9,ror#31
410 add r6,r6,r7,ror#27 @ E+=ROR(A,27)
411 eor r9,r9,r11,ror#31
412 str r9,[r14,#-4]!
413 and r10,r3,r10,ror#2 @ F_xx_xx
414 and r11,r4,r5 @ F_xx_xx
415 add r6,r6,r9 @ E+=X[i]
416 add r6,r6,r10 @ E+=F_40_59(B,C,D)
417 add r6,r6,r11,ror#2
418 ldr r9,[r14,#15*4]
419 ldr r10,[r14,#13*4]
420 ldr r11,[r14,#7*4]
421 add r5,r8,r5,ror#2 @ E+=K_xx_xx
422 ldr r12,[r14,#2*4]
423 eor r9,r9,r10
424 eor r11,r11,r12 @ 1 cycle stall
425 eor r10,r3,r4 @ F_xx_xx
426 mov r9,r9,ror#31
427 add r5,r5,r6,ror#27 @ E+=ROR(A,27)
428 eor r9,r9,r11,ror#31
429 str r9,[r14,#-4]!
430 and r10,r7,r10,ror#2 @ F_xx_xx
431 and r11,r3,r4 @ F_xx_xx
432 add r5,r5,r9 @ E+=X[i]
433 add r5,r5,r10 @ E+=F_40_59(B,C,D)
434 add r5,r5,r11,ror#2
435 ldr r9,[r14,#15*4]
436 ldr r10,[r14,#13*4]
437 ldr r11,[r14,#7*4]
438 add r4,r8,r4,ror#2 @ E+=K_xx_xx
439 ldr r12,[r14,#2*4]
440 eor r9,r9,r10
441 eor r11,r11,r12 @ 1 cycle stall
442 eor r10,r7,r3 @ F_xx_xx
443 mov r9,r9,ror#31
444 add r4,r4,r5,ror#27 @ E+=ROR(A,27)
445 eor r9,r9,r11,ror#31
446 str r9,[r14,#-4]!
447 and r10,r6,r10,ror#2 @ F_xx_xx
448 and r11,r7,r3 @ F_xx_xx
449 add r4,r4,r9 @ E+=X[i]
450 add r4,r4,r10 @ E+=F_40_59(B,C,D)
451 add r4,r4,r11,ror#2
452 ldr r9,[r14,#15*4]
453 ldr r10,[r14,#13*4]
454 ldr r11,[r14,#7*4]
455 add r3,r8,r3,ror#2 @ E+=K_xx_xx
456 ldr r12,[r14,#2*4]
457 eor r9,r9,r10
458 eor r11,r11,r12 @ 1 cycle stall
459 eor r10,r6,r7 @ F_xx_xx
460 mov r9,r9,ror#31
461 add r3,r3,r4,ror#27 @ E+=ROR(A,27)
462 eor r9,r9,r11,ror#31
463 str r9,[r14,#-4]!
464 and r10,r5,r10,ror#2 @ F_xx_xx
465 and r11,r6,r7 @ F_xx_xx
466 add r3,r3,r9 @ E+=X[i]
467 add r3,r3,r10 @ E+=F_40_59(B,C,D)
468 add r3,r3,r11,ror#2
469 teq r14,sp
470 bne .L_40_59 @ [+((12+5)*5+2)*4]
471
472 ldr r8,.LK_60_79
473 sub sp,sp,#20*4
474 cmp sp,#0 @ set carry to denote 60_79
475 b .L_20_39_or_60_79 @ [+4], spare 300 bytes
476.L_done:
477 add sp,sp,#80*4 @ "deallocate" stack frame
478 ldmia r0,{r8,r9,r10,r11,r12}
479 add r3,r8,r3
480 add r4,r9,r4
481 add r5,r10,r5,ror#2
482 add r6,r11,r6,ror#2
483 add r7,r12,r7,ror#2
484 stmia r0,{r3,r4,r5,r6,r7}
485 teq r1,r2
486 bne .Lloop @ [+18], total 1307
487
488#if __ARM_ARCH__>=5
489 ldmia sp!,{r4-r12,pc}
490#else
491 ldmia sp!,{r4-r12,lr}
492 tst lr,#1
493 moveq pc,lr @ be binary compatible with V4, yet
494 .word 0xe12fff1e @ interoperable with Thumb ISA:-)
495#endif
496.align 2
497.LK_00_19: .word 0x5a827999
498.LK_20_39: .word 0x6ed9eba1
499.LK_40_59: .word 0x8f1bbcdc
500.LK_60_79: .word 0xca62c1d6
501.size sha1_block_data_order,.-sha1_block_data_order
502.asciz "SHA1 block transform for ARMv4, CRYPTOGAMS by <appro@openssl.org>"
503.align 2
diff --git a/arch/arm/crypto/sha1_glue.c b/arch/arm/crypto/sha1_glue.c
new file mode 100644
index 00000000000..76cd976230b
--- /dev/null
+++ b/arch/arm/crypto/sha1_glue.c
@@ -0,0 +1,179 @@
1/*
2 * Cryptographic API.
3 * Glue code for the SHA1 Secure Hash Algorithm assembler implementation
4 *
5 * This file is based on sha1_generic.c and sha1_ssse3_glue.c
6 *
7 * Copyright (c) Alan Smithee.
8 * Copyright (c) Andrew McDonald <andrew@mcdonald.org.uk>
9 * Copyright (c) Jean-Francois Dive <jef@linuxbe.org>
10 * Copyright (c) Mathias Krause <minipli@googlemail.com>
11 *
12 * This program is free software; you can redistribute it and/or modify it
13 * under the terms of the GNU General Public License as published by the Free
14 * Software Foundation; either version 2 of the License, or (at your option)
15 * any later version.
16 *
17 */
18
19#include <crypto/internal/hash.h>
20#include <linux/init.h>
21#include <linux/module.h>
22#include <linux/cryptohash.h>
23#include <linux/types.h>
24#include <crypto/sha.h>
25#include <asm/byteorder.h>
26
27struct SHA1_CTX {
28 uint32_t h0,h1,h2,h3,h4;
29 u64 count;
30 u8 data[SHA1_BLOCK_SIZE];
31};
32
33asmlinkage void sha1_block_data_order(struct SHA1_CTX *digest,
34 const unsigned char *data, unsigned int rounds);
35
36
37static int sha1_init(struct shash_desc *desc)
38{
39 struct SHA1_CTX *sctx = shash_desc_ctx(desc);
40 memset(sctx, 0, sizeof(*sctx));
41 sctx->h0 = SHA1_H0;
42 sctx->h1 = SHA1_H1;
43 sctx->h2 = SHA1_H2;
44 sctx->h3 = SHA1_H3;
45 sctx->h4 = SHA1_H4;
46 return 0;
47}
48
49
50static int __sha1_update(struct SHA1_CTX *sctx, const u8 *data,
51 unsigned int len, unsigned int partial)
52{
53 unsigned int done = 0;
54
55 sctx->count += len;
56
57 if (partial) {
58 done = SHA1_BLOCK_SIZE - partial;
59 memcpy(sctx->data + partial, data, done);
60 sha1_block_data_order(sctx, sctx->data, 1);
61 }
62
63 if (len - done >= SHA1_BLOCK_SIZE) {
64 const unsigned int rounds = (len - done) / SHA1_BLOCK_SIZE;
65 sha1_block_data_order(sctx, data + done, rounds);
66 done += rounds * SHA1_BLOCK_SIZE;
67 }
68
69 memcpy(sctx->data, data + done, len - done);
70 return 0;
71}
72
73
74static int sha1_update(struct shash_desc *desc, const u8 *data,
75 unsigned int len)
76{
77 struct SHA1_CTX *sctx = shash_desc_ctx(desc);
78 unsigned int partial = sctx->count % SHA1_BLOCK_SIZE;
79 int res;
80
81 /* Handle the fast case right here */
82 if (partial + len < SHA1_BLOCK_SIZE) {
83 sctx->count += len;
84 memcpy(sctx->data + partial, data, len);
85 return 0;
86 }
87 res = __sha1_update(sctx, data, len, partial);
88 return res;
89}
90
91
92/* Add padding and return the message digest. */
93static int sha1_final(struct shash_desc *desc, u8 *out)
94{
95 struct SHA1_CTX *sctx = shash_desc_ctx(desc);
96 unsigned int i, index, padlen;
97 __be32 *dst = (__be32 *)out;
98 __be64 bits;
99 static const u8 padding[SHA1_BLOCK_SIZE] = { 0x80, };
100
101 bits = cpu_to_be64(sctx->count << 3);
102
103 /* Pad out to 56 mod 64 and append length */
104 index = sctx->count % SHA1_BLOCK_SIZE;
105 padlen = (index < 56) ? (56 - index) : ((SHA1_BLOCK_SIZE+56) - index);
106 /* We need to fill a whole block for __sha1_update() */
107 if (padlen <= 56) {
108 sctx->count += padlen;
109 memcpy(sctx->data + index, padding, padlen);
110 } else {
111 __sha1_update(sctx, padding, padlen, index);
112 }
113 __sha1_update(sctx, (const u8 *)&bits, sizeof(bits), 56);
114
115 /* Store state in digest */
116 for (i = 0; i < 5; i++)
117 dst[i] = cpu_to_be32(((u32 *)sctx)[i]);
118
119 /* Wipe context */
120 memset(sctx, 0, sizeof(*sctx));
121 return 0;
122}
123
124
125static int sha1_export(struct shash_desc *desc, void *out)
126{
127 struct SHA1_CTX *sctx = shash_desc_ctx(desc);
128 memcpy(out, sctx, sizeof(*sctx));
129 return 0;
130}
131
132
133static int sha1_import(struct shash_desc *desc, const void *in)
134{
135 struct SHA1_CTX *sctx = shash_desc_ctx(desc);
136 memcpy(sctx, in, sizeof(*sctx));
137 return 0;
138}
139
140
141static struct shash_alg alg = {
142 .digestsize = SHA1_DIGEST_SIZE,
143 .init = sha1_init,
144 .update = sha1_update,
145 .final = sha1_final,
146 .export = sha1_export,
147 .import = sha1_import,
148 .descsize = sizeof(struct SHA1_CTX),
149 .statesize = sizeof(struct SHA1_CTX),
150 .base = {
151 .cra_name = "sha1",
152 .cra_driver_name= "sha1-asm",
153 .cra_priority = 150,
154 .cra_flags = CRYPTO_ALG_TYPE_SHASH,
155 .cra_blocksize = SHA1_BLOCK_SIZE,
156 .cra_module = THIS_MODULE,
157 }
158};
159
160
161static int __init sha1_mod_init(void)
162{
163 return crypto_register_shash(&alg);
164}
165
166
167static void __exit sha1_mod_fini(void)
168{
169 crypto_unregister_shash(&alg);
170}
171
172
173module_init(sha1_mod_init);
174module_exit(sha1_mod_fini);
175
176MODULE_LICENSE("GPL");
177MODULE_DESCRIPTION("SHA1 Secure Hash Algorithm (ARM)");
178MODULE_ALIAS("sha1");
179MODULE_AUTHOR("David McCullough <ucdevel@gmail.com>");
diff --git a/arch/powerpc/configs/ppc64_defconfig b/arch/powerpc/configs/ppc64_defconfig
index 06b56245d78..de7c4c53f5c 100644
--- a/arch/powerpc/configs/ppc64_defconfig
+++ b/arch/powerpc/configs/ppc64_defconfig
@@ -486,7 +486,8 @@ CONFIG_CRYPTO_TWOFISH=m
486CONFIG_CRYPTO_LZO=m 486CONFIG_CRYPTO_LZO=m
487# CONFIG_CRYPTO_ANSI_CPRNG is not set 487# CONFIG_CRYPTO_ANSI_CPRNG is not set
488CONFIG_CRYPTO_HW=y 488CONFIG_CRYPTO_HW=y
489CONFIG_CRYPTO_DEV_NX=m 489CONFIG_CRYPTO_DEV_NX=y
490CONFIG_CRYPTO_DEV_NX_ENCRYPT=m
490CONFIG_VIRTUALIZATION=y 491CONFIG_VIRTUALIZATION=y
491CONFIG_KVM_BOOK3S_64=m 492CONFIG_KVM_BOOK3S_64=m
492CONFIG_KVM_BOOK3S_64_HV=y 493CONFIG_KVM_BOOK3S_64_HV=y
diff --git a/arch/powerpc/configs/pseries_defconfig b/arch/powerpc/configs/pseries_defconfig
index 1f65b3c9b59..9f4a9368f51 100644
--- a/arch/powerpc/configs/pseries_defconfig
+++ b/arch/powerpc/configs/pseries_defconfig
@@ -369,7 +369,8 @@ CONFIG_CRYPTO_TWOFISH=m
369CONFIG_CRYPTO_LZO=m 369CONFIG_CRYPTO_LZO=m
370# CONFIG_CRYPTO_ANSI_CPRNG is not set 370# CONFIG_CRYPTO_ANSI_CPRNG is not set
371CONFIG_CRYPTO_HW=y 371CONFIG_CRYPTO_HW=y
372CONFIG_CRYPTO_DEV_NX=m 372CONFIG_CRYPTO_DEV_NX=y
373CONFIG_CRYPTO_DEV_NX_ENCRYPT=m
373CONFIG_VIRTUALIZATION=y 374CONFIG_VIRTUALIZATION=y
374CONFIG_KVM_BOOK3S_64=m 375CONFIG_KVM_BOOK3S_64=m
375CONFIG_KVM_BOOK3S_64_HV=y 376CONFIG_KVM_BOOK3S_64_HV=y
diff --git a/arch/powerpc/kernel/prom_init.c b/arch/powerpc/kernel/prom_init.c
index e144498bcdd..47834a3f493 100644
--- a/arch/powerpc/kernel/prom_init.c
+++ b/arch/powerpc/kernel/prom_init.c
@@ -705,6 +705,7 @@ static void __init early_cmdline_parse(void)
705#endif 705#endif
706#define OV5_TYPE1_AFFINITY 0x80 /* Type 1 NUMA affinity */ 706#define OV5_TYPE1_AFFINITY 0x80 /* Type 1 NUMA affinity */
707#define OV5_PFO_HW_RNG 0x80 /* PFO Random Number Generator */ 707#define OV5_PFO_HW_RNG 0x80 /* PFO Random Number Generator */
708#define OV5_PFO_HW_842 0x40 /* PFO Compression Accelerator */
708#define OV5_PFO_HW_ENCR 0x20 /* PFO Encryption Accelerator */ 709#define OV5_PFO_HW_ENCR 0x20 /* PFO Encryption Accelerator */
709 710
710/* Option Vector 6: IBM PAPR hints */ 711/* Option Vector 6: IBM PAPR hints */
@@ -774,8 +775,7 @@ static unsigned char ibm_architecture_vec[] = {
774 0, 775 0,
775 0, 776 0,
776 0, 777 0,
777 OV5_PFO_HW_RNG | OV5_PFO_HW_ENCR, 778 OV5_PFO_HW_RNG | OV5_PFO_HW_ENCR | OV5_PFO_HW_842,
778
779 /* option vector 6: IBM PAPR hints */ 779 /* option vector 6: IBM PAPR hints */
780 4 - 2, /* length */ 780 4 - 2, /* length */
781 0, 781 0,
diff --git a/arch/s390/crypto/aes_s390.c b/arch/s390/crypto/aes_s390.c
index e402a9dd4ed..da3c1a7dcd8 100644
--- a/arch/s390/crypto/aes_s390.c
+++ b/arch/s390/crypto/aes_s390.c
@@ -216,7 +216,6 @@ static struct crypto_alg aes_alg = {
216 .cra_blocksize = AES_BLOCK_SIZE, 216 .cra_blocksize = AES_BLOCK_SIZE,
217 .cra_ctxsize = sizeof(struct s390_aes_ctx), 217 .cra_ctxsize = sizeof(struct s390_aes_ctx),
218 .cra_module = THIS_MODULE, 218 .cra_module = THIS_MODULE,
219 .cra_list = LIST_HEAD_INIT(aes_alg.cra_list),
220 .cra_init = fallback_init_cip, 219 .cra_init = fallback_init_cip,
221 .cra_exit = fallback_exit_cip, 220 .cra_exit = fallback_exit_cip,
222 .cra_u = { 221 .cra_u = {
@@ -398,7 +397,6 @@ static struct crypto_alg ecb_aes_alg = {
398 .cra_ctxsize = sizeof(struct s390_aes_ctx), 397 .cra_ctxsize = sizeof(struct s390_aes_ctx),
399 .cra_type = &crypto_blkcipher_type, 398 .cra_type = &crypto_blkcipher_type,
400 .cra_module = THIS_MODULE, 399 .cra_module = THIS_MODULE,
401 .cra_list = LIST_HEAD_INIT(ecb_aes_alg.cra_list),
402 .cra_init = fallback_init_blk, 400 .cra_init = fallback_init_blk,
403 .cra_exit = fallback_exit_blk, 401 .cra_exit = fallback_exit_blk,
404 .cra_u = { 402 .cra_u = {
@@ -508,7 +506,6 @@ static struct crypto_alg cbc_aes_alg = {
508 .cra_ctxsize = sizeof(struct s390_aes_ctx), 506 .cra_ctxsize = sizeof(struct s390_aes_ctx),
509 .cra_type = &crypto_blkcipher_type, 507 .cra_type = &crypto_blkcipher_type,
510 .cra_module = THIS_MODULE, 508 .cra_module = THIS_MODULE,
511 .cra_list = LIST_HEAD_INIT(cbc_aes_alg.cra_list),
512 .cra_init = fallback_init_blk, 509 .cra_init = fallback_init_blk,
513 .cra_exit = fallback_exit_blk, 510 .cra_exit = fallback_exit_blk,
514 .cra_u = { 511 .cra_u = {
@@ -710,7 +707,6 @@ static struct crypto_alg xts_aes_alg = {
710 .cra_ctxsize = sizeof(struct s390_xts_ctx), 707 .cra_ctxsize = sizeof(struct s390_xts_ctx),
711 .cra_type = &crypto_blkcipher_type, 708 .cra_type = &crypto_blkcipher_type,
712 .cra_module = THIS_MODULE, 709 .cra_module = THIS_MODULE,
713 .cra_list = LIST_HEAD_INIT(xts_aes_alg.cra_list),
714 .cra_init = xts_fallback_init, 710 .cra_init = xts_fallback_init,
715 .cra_exit = xts_fallback_exit, 711 .cra_exit = xts_fallback_exit,
716 .cra_u = { 712 .cra_u = {
@@ -832,7 +828,6 @@ static struct crypto_alg ctr_aes_alg = {
832 .cra_ctxsize = sizeof(struct s390_aes_ctx), 828 .cra_ctxsize = sizeof(struct s390_aes_ctx),
833 .cra_type = &crypto_blkcipher_type, 829 .cra_type = &crypto_blkcipher_type,
834 .cra_module = THIS_MODULE, 830 .cra_module = THIS_MODULE,
835 .cra_list = LIST_HEAD_INIT(ctr_aes_alg.cra_list),
836 .cra_u = { 831 .cra_u = {
837 .blkcipher = { 832 .blkcipher = {
838 .min_keysize = AES_MIN_KEY_SIZE, 833 .min_keysize = AES_MIN_KEY_SIZE,
diff --git a/arch/s390/crypto/des_s390.c b/arch/s390/crypto/des_s390.c
index 1eaa371ca3e..b49fb96f420 100644
--- a/arch/s390/crypto/des_s390.c
+++ b/arch/s390/crypto/des_s390.c
@@ -70,7 +70,6 @@ static struct crypto_alg des_alg = {
70 .cra_blocksize = DES_BLOCK_SIZE, 70 .cra_blocksize = DES_BLOCK_SIZE,
71 .cra_ctxsize = sizeof(struct s390_des_ctx), 71 .cra_ctxsize = sizeof(struct s390_des_ctx),
72 .cra_module = THIS_MODULE, 72 .cra_module = THIS_MODULE,
73 .cra_list = LIST_HEAD_INIT(des_alg.cra_list),
74 .cra_u = { 73 .cra_u = {
75 .cipher = { 74 .cipher = {
76 .cia_min_keysize = DES_KEY_SIZE, 75 .cia_min_keysize = DES_KEY_SIZE,
@@ -163,7 +162,6 @@ static struct crypto_alg ecb_des_alg = {
163 .cra_ctxsize = sizeof(struct s390_des_ctx), 162 .cra_ctxsize = sizeof(struct s390_des_ctx),
164 .cra_type = &crypto_blkcipher_type, 163 .cra_type = &crypto_blkcipher_type,
165 .cra_module = THIS_MODULE, 164 .cra_module = THIS_MODULE,
166 .cra_list = LIST_HEAD_INIT(ecb_des_alg.cra_list),
167 .cra_u = { 165 .cra_u = {
168 .blkcipher = { 166 .blkcipher = {
169 .min_keysize = DES_KEY_SIZE, 167 .min_keysize = DES_KEY_SIZE,
@@ -206,7 +204,6 @@ static struct crypto_alg cbc_des_alg = {
206 .cra_ctxsize = sizeof(struct s390_des_ctx), 204 .cra_ctxsize = sizeof(struct s390_des_ctx),
207 .cra_type = &crypto_blkcipher_type, 205 .cra_type = &crypto_blkcipher_type,
208 .cra_module = THIS_MODULE, 206 .cra_module = THIS_MODULE,
209 .cra_list = LIST_HEAD_INIT(cbc_des_alg.cra_list),
210 .cra_u = { 207 .cra_u = {
211 .blkcipher = { 208 .blkcipher = {
212 .min_keysize = DES_KEY_SIZE, 209 .min_keysize = DES_KEY_SIZE,
@@ -271,7 +268,6 @@ static struct crypto_alg des3_alg = {
271 .cra_blocksize = DES_BLOCK_SIZE, 268 .cra_blocksize = DES_BLOCK_SIZE,
272 .cra_ctxsize = sizeof(struct s390_des_ctx), 269 .cra_ctxsize = sizeof(struct s390_des_ctx),
273 .cra_module = THIS_MODULE, 270 .cra_module = THIS_MODULE,
274 .cra_list = LIST_HEAD_INIT(des3_alg.cra_list),
275 .cra_u = { 271 .cra_u = {
276 .cipher = { 272 .cipher = {
277 .cia_min_keysize = DES3_KEY_SIZE, 273 .cia_min_keysize = DES3_KEY_SIZE,
@@ -314,8 +310,6 @@ static struct crypto_alg ecb_des3_alg = {
314 .cra_ctxsize = sizeof(struct s390_des_ctx), 310 .cra_ctxsize = sizeof(struct s390_des_ctx),
315 .cra_type = &crypto_blkcipher_type, 311 .cra_type = &crypto_blkcipher_type,
316 .cra_module = THIS_MODULE, 312 .cra_module = THIS_MODULE,
317 .cra_list = LIST_HEAD_INIT(
318 ecb_des3_alg.cra_list),
319 .cra_u = { 313 .cra_u = {
320 .blkcipher = { 314 .blkcipher = {
321 .min_keysize = DES3_KEY_SIZE, 315 .min_keysize = DES3_KEY_SIZE,
@@ -358,8 +352,6 @@ static struct crypto_alg cbc_des3_alg = {
358 .cra_ctxsize = sizeof(struct s390_des_ctx), 352 .cra_ctxsize = sizeof(struct s390_des_ctx),
359 .cra_type = &crypto_blkcipher_type, 353 .cra_type = &crypto_blkcipher_type,
360 .cra_module = THIS_MODULE, 354 .cra_module = THIS_MODULE,
361 .cra_list = LIST_HEAD_INIT(
362 cbc_des3_alg.cra_list),
363 .cra_u = { 355 .cra_u = {
364 .blkcipher = { 356 .blkcipher = {
365 .min_keysize = DES3_KEY_SIZE, 357 .min_keysize = DES3_KEY_SIZE,
@@ -452,7 +444,6 @@ static struct crypto_alg ctr_des_alg = {
452 .cra_ctxsize = sizeof(struct s390_des_ctx), 444 .cra_ctxsize = sizeof(struct s390_des_ctx),
453 .cra_type = &crypto_blkcipher_type, 445 .cra_type = &crypto_blkcipher_type,
454 .cra_module = THIS_MODULE, 446 .cra_module = THIS_MODULE,
455 .cra_list = LIST_HEAD_INIT(ctr_des_alg.cra_list),
456 .cra_u = { 447 .cra_u = {
457 .blkcipher = { 448 .blkcipher = {
458 .min_keysize = DES_KEY_SIZE, 449 .min_keysize = DES_KEY_SIZE,
@@ -496,7 +487,6 @@ static struct crypto_alg ctr_des3_alg = {
496 .cra_ctxsize = sizeof(struct s390_des_ctx), 487 .cra_ctxsize = sizeof(struct s390_des_ctx),
497 .cra_type = &crypto_blkcipher_type, 488 .cra_type = &crypto_blkcipher_type,
498 .cra_module = THIS_MODULE, 489 .cra_module = THIS_MODULE,
499 .cra_list = LIST_HEAD_INIT(ctr_des3_alg.cra_list),
500 .cra_u = { 490 .cra_u = {
501 .blkcipher = { 491 .blkcipher = {
502 .min_keysize = DES3_KEY_SIZE, 492 .min_keysize = DES3_KEY_SIZE,
diff --git a/arch/s390/crypto/ghash_s390.c b/arch/s390/crypto/ghash_s390.c
index b1bd170f24b..1ebd3a15cca 100644
--- a/arch/s390/crypto/ghash_s390.c
+++ b/arch/s390/crypto/ghash_s390.c
@@ -135,7 +135,6 @@ static struct shash_alg ghash_alg = {
135 .cra_blocksize = GHASH_BLOCK_SIZE, 135 .cra_blocksize = GHASH_BLOCK_SIZE,
136 .cra_ctxsize = sizeof(struct ghash_ctx), 136 .cra_ctxsize = sizeof(struct ghash_ctx),
137 .cra_module = THIS_MODULE, 137 .cra_module = THIS_MODULE,
138 .cra_list = LIST_HEAD_INIT(ghash_alg.base.cra_list),
139 }, 138 },
140}; 139};
141 140
diff --git a/arch/x86/crypto/Makefile b/arch/x86/crypto/Makefile
index e908e5de82d..5bacb4a226a 100644
--- a/arch/x86/crypto/Makefile
+++ b/arch/x86/crypto/Makefile
@@ -12,6 +12,8 @@ obj-$(CONFIG_CRYPTO_SERPENT_SSE2_586) += serpent-sse2-i586.o
12 12
13obj-$(CONFIG_CRYPTO_AES_X86_64) += aes-x86_64.o 13obj-$(CONFIG_CRYPTO_AES_X86_64) += aes-x86_64.o
14obj-$(CONFIG_CRYPTO_CAMELLIA_X86_64) += camellia-x86_64.o 14obj-$(CONFIG_CRYPTO_CAMELLIA_X86_64) += camellia-x86_64.o
15obj-$(CONFIG_CRYPTO_CAST5_AVX_X86_64) += cast5-avx-x86_64.o
16obj-$(CONFIG_CRYPTO_CAST6_AVX_X86_64) += cast6-avx-x86_64.o
15obj-$(CONFIG_CRYPTO_BLOWFISH_X86_64) += blowfish-x86_64.o 17obj-$(CONFIG_CRYPTO_BLOWFISH_X86_64) += blowfish-x86_64.o
16obj-$(CONFIG_CRYPTO_TWOFISH_X86_64) += twofish-x86_64.o 18obj-$(CONFIG_CRYPTO_TWOFISH_X86_64) += twofish-x86_64.o
17obj-$(CONFIG_CRYPTO_TWOFISH_X86_64_3WAY) += twofish-x86_64-3way.o 19obj-$(CONFIG_CRYPTO_TWOFISH_X86_64_3WAY) += twofish-x86_64-3way.o
@@ -32,6 +34,8 @@ serpent-sse2-i586-y := serpent-sse2-i586-asm_32.o serpent_sse2_glue.o
32 34
33aes-x86_64-y := aes-x86_64-asm_64.o aes_glue.o 35aes-x86_64-y := aes-x86_64-asm_64.o aes_glue.o
34camellia-x86_64-y := camellia-x86_64-asm_64.o camellia_glue.o 36camellia-x86_64-y := camellia-x86_64-asm_64.o camellia_glue.o
37cast5-avx-x86_64-y := cast5-avx-x86_64-asm_64.o cast5_avx_glue.o
38cast6-avx-x86_64-y := cast6-avx-x86_64-asm_64.o cast6_avx_glue.o
35blowfish-x86_64-y := blowfish-x86_64-asm_64.o blowfish_glue.o 39blowfish-x86_64-y := blowfish-x86_64-asm_64.o blowfish_glue.o
36twofish-x86_64-y := twofish-x86_64-asm_64.o twofish_glue.o 40twofish-x86_64-y := twofish-x86_64-asm_64.o twofish_glue.o
37twofish-x86_64-3way-y := twofish-x86_64-asm_64-3way.o twofish_glue_3way.o 41twofish-x86_64-3way-y := twofish-x86_64-asm_64-3way.o twofish_glue_3way.o
diff --git a/arch/x86/crypto/aes_glue.c b/arch/x86/crypto/aes_glue.c
index 59b37deb8c8..aafe8ce0d65 100644
--- a/arch/x86/crypto/aes_glue.c
+++ b/arch/x86/crypto/aes_glue.c
@@ -40,7 +40,6 @@ static struct crypto_alg aes_alg = {
40 .cra_blocksize = AES_BLOCK_SIZE, 40 .cra_blocksize = AES_BLOCK_SIZE,
41 .cra_ctxsize = sizeof(struct crypto_aes_ctx), 41 .cra_ctxsize = sizeof(struct crypto_aes_ctx),
42 .cra_module = THIS_MODULE, 42 .cra_module = THIS_MODULE,
43 .cra_list = LIST_HEAD_INIT(aes_alg.cra_list),
44 .cra_u = { 43 .cra_u = {
45 .cipher = { 44 .cipher = {
46 .cia_min_keysize = AES_MIN_KEY_SIZE, 45 .cia_min_keysize = AES_MIN_KEY_SIZE,
diff --git a/arch/x86/crypto/aesni-intel_glue.c b/arch/x86/crypto/aesni-intel_glue.c
index 34fdcff4d2c..7c04d0da709 100644
--- a/arch/x86/crypto/aesni-intel_glue.c
+++ b/arch/x86/crypto/aesni-intel_glue.c
@@ -28,6 +28,9 @@
28#include <crypto/aes.h> 28#include <crypto/aes.h>
29#include <crypto/cryptd.h> 29#include <crypto/cryptd.h>
30#include <crypto/ctr.h> 30#include <crypto/ctr.h>
31#include <crypto/b128ops.h>
32#include <crypto/lrw.h>
33#include <crypto/xts.h>
31#include <asm/cpu_device_id.h> 34#include <asm/cpu_device_id.h>
32#include <asm/i387.h> 35#include <asm/i387.h>
33#include <asm/crypto/aes.h> 36#include <asm/crypto/aes.h>
@@ -41,18 +44,10 @@
41#define HAS_CTR 44#define HAS_CTR
42#endif 45#endif
43 46
44#if defined(CONFIG_CRYPTO_LRW) || defined(CONFIG_CRYPTO_LRW_MODULE)
45#define HAS_LRW
46#endif
47
48#if defined(CONFIG_CRYPTO_PCBC) || defined(CONFIG_CRYPTO_PCBC_MODULE) 47#if defined(CONFIG_CRYPTO_PCBC) || defined(CONFIG_CRYPTO_PCBC_MODULE)
49#define HAS_PCBC 48#define HAS_PCBC
50#endif 49#endif
51 50
52#if defined(CONFIG_CRYPTO_XTS) || defined(CONFIG_CRYPTO_XTS_MODULE)
53#define HAS_XTS
54#endif
55
56/* This data is stored at the end of the crypto_tfm struct. 51/* This data is stored at the end of the crypto_tfm struct.
57 * It's a type of per "session" data storage location. 52 * It's a type of per "session" data storage location.
58 * This needs to be 16 byte aligned. 53 * This needs to be 16 byte aligned.
@@ -79,6 +74,16 @@ struct aesni_hash_subkey_req_data {
79#define AES_BLOCK_MASK (~(AES_BLOCK_SIZE-1)) 74#define AES_BLOCK_MASK (~(AES_BLOCK_SIZE-1))
80#define RFC4106_HASH_SUBKEY_SIZE 16 75#define RFC4106_HASH_SUBKEY_SIZE 16
81 76
77struct aesni_lrw_ctx {
78 struct lrw_table_ctx lrw_table;
79 u8 raw_aes_ctx[sizeof(struct crypto_aes_ctx) + AESNI_ALIGN - 1];
80};
81
82struct aesni_xts_ctx {
83 u8 raw_tweak_ctx[sizeof(struct crypto_aes_ctx) + AESNI_ALIGN - 1];
84 u8 raw_crypt_ctx[sizeof(struct crypto_aes_ctx) + AESNI_ALIGN - 1];
85};
86
82asmlinkage int aesni_set_key(struct crypto_aes_ctx *ctx, const u8 *in_key, 87asmlinkage int aesni_set_key(struct crypto_aes_ctx *ctx, const u8 *in_key,
83 unsigned int key_len); 88 unsigned int key_len);
84asmlinkage void aesni_enc(struct crypto_aes_ctx *ctx, u8 *out, 89asmlinkage void aesni_enc(struct crypto_aes_ctx *ctx, u8 *out,
@@ -398,13 +403,6 @@ static int ablk_rfc3686_ctr_init(struct crypto_tfm *tfm)
398#endif 403#endif
399#endif 404#endif
400 405
401#ifdef HAS_LRW
402static int ablk_lrw_init(struct crypto_tfm *tfm)
403{
404 return ablk_init_common(tfm, "fpu(lrw(__driver-aes-aesni))");
405}
406#endif
407
408#ifdef HAS_PCBC 406#ifdef HAS_PCBC
409static int ablk_pcbc_init(struct crypto_tfm *tfm) 407static int ablk_pcbc_init(struct crypto_tfm *tfm)
410{ 408{
@@ -412,12 +410,160 @@ static int ablk_pcbc_init(struct crypto_tfm *tfm)
412} 410}
413#endif 411#endif
414 412
415#ifdef HAS_XTS 413static void lrw_xts_encrypt_callback(void *ctx, u8 *blks, unsigned int nbytes)
416static int ablk_xts_init(struct crypto_tfm *tfm)
417{ 414{
418 return ablk_init_common(tfm, "fpu(xts(__driver-aes-aesni))"); 415 aesni_ecb_enc(ctx, blks, blks, nbytes);
416}
417
418static void lrw_xts_decrypt_callback(void *ctx, u8 *blks, unsigned int nbytes)
419{
420 aesni_ecb_dec(ctx, blks, blks, nbytes);
421}
422
423static int lrw_aesni_setkey(struct crypto_tfm *tfm, const u8 *key,
424 unsigned int keylen)
425{
426 struct aesni_lrw_ctx *ctx = crypto_tfm_ctx(tfm);
427 int err;
428
429 err = aes_set_key_common(tfm, ctx->raw_aes_ctx, key,
430 keylen - AES_BLOCK_SIZE);
431 if (err)
432 return err;
433
434 return lrw_init_table(&ctx->lrw_table, key + keylen - AES_BLOCK_SIZE);
435}
436
437static void lrw_aesni_exit_tfm(struct crypto_tfm *tfm)
438{
439 struct aesni_lrw_ctx *ctx = crypto_tfm_ctx(tfm);
440
441 lrw_free_table(&ctx->lrw_table);
442}
443
444static int lrw_encrypt(struct blkcipher_desc *desc, struct scatterlist *dst,
445 struct scatterlist *src, unsigned int nbytes)
446{
447 struct aesni_lrw_ctx *ctx = crypto_blkcipher_ctx(desc->tfm);
448 be128 buf[8];
449 struct lrw_crypt_req req = {
450 .tbuf = buf,
451 .tbuflen = sizeof(buf),
452
453 .table_ctx = &ctx->lrw_table,
454 .crypt_ctx = aes_ctx(ctx->raw_aes_ctx),
455 .crypt_fn = lrw_xts_encrypt_callback,
456 };
457 int ret;
458
459 desc->flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP;
460
461 kernel_fpu_begin();
462 ret = lrw_crypt(desc, dst, src, nbytes, &req);
463 kernel_fpu_end();
464
465 return ret;
466}
467
468static int lrw_decrypt(struct blkcipher_desc *desc, struct scatterlist *dst,
469 struct scatterlist *src, unsigned int nbytes)
470{
471 struct aesni_lrw_ctx *ctx = crypto_blkcipher_ctx(desc->tfm);
472 be128 buf[8];
473 struct lrw_crypt_req req = {
474 .tbuf = buf,
475 .tbuflen = sizeof(buf),
476
477 .table_ctx = &ctx->lrw_table,
478 .crypt_ctx = aes_ctx(ctx->raw_aes_ctx),
479 .crypt_fn = lrw_xts_decrypt_callback,
480 };
481 int ret;
482
483 desc->flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP;
484
485 kernel_fpu_begin();
486 ret = lrw_crypt(desc, dst, src, nbytes, &req);
487 kernel_fpu_end();
488
489 return ret;
490}
491
492static int xts_aesni_setkey(struct crypto_tfm *tfm, const u8 *key,
493 unsigned int keylen)
494{
495 struct aesni_xts_ctx *ctx = crypto_tfm_ctx(tfm);
496 u32 *flags = &tfm->crt_flags;
497 int err;
498
499 /* key consists of keys of equal size concatenated, therefore
500 * the length must be even
501 */
502 if (keylen % 2) {
503 *flags |= CRYPTO_TFM_RES_BAD_KEY_LEN;
504 return -EINVAL;
505 }
506
507 /* first half of xts-key is for crypt */
508 err = aes_set_key_common(tfm, ctx->raw_crypt_ctx, key, keylen / 2);
509 if (err)
510 return err;
511
512 /* second half of xts-key is for tweak */
513 return aes_set_key_common(tfm, ctx->raw_tweak_ctx, key + keylen / 2,
514 keylen / 2);
515}
516
517
518static int xts_encrypt(struct blkcipher_desc *desc, struct scatterlist *dst,
519 struct scatterlist *src, unsigned int nbytes)
520{
521 struct aesni_xts_ctx *ctx = crypto_blkcipher_ctx(desc->tfm);
522 be128 buf[8];
523 struct xts_crypt_req req = {
524 .tbuf = buf,
525 .tbuflen = sizeof(buf),
526
527 .tweak_ctx = aes_ctx(ctx->raw_tweak_ctx),
528 .tweak_fn = XTS_TWEAK_CAST(aesni_enc),
529 .crypt_ctx = aes_ctx(ctx->raw_crypt_ctx),
530 .crypt_fn = lrw_xts_encrypt_callback,
531 };
532 int ret;
533
534 desc->flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP;
535
536 kernel_fpu_begin();
537 ret = xts_crypt(desc, dst, src, nbytes, &req);
538 kernel_fpu_end();
539
540 return ret;
541}
542
543static int xts_decrypt(struct blkcipher_desc *desc, struct scatterlist *dst,
544 struct scatterlist *src, unsigned int nbytes)
545{
546 struct aesni_xts_ctx *ctx = crypto_blkcipher_ctx(desc->tfm);
547 be128 buf[8];
548 struct xts_crypt_req req = {
549 .tbuf = buf,
550 .tbuflen = sizeof(buf),
551
552 .tweak_ctx = aes_ctx(ctx->raw_tweak_ctx),
553 .tweak_fn = XTS_TWEAK_CAST(aesni_enc),
554 .crypt_ctx = aes_ctx(ctx->raw_crypt_ctx),
555 .crypt_fn = lrw_xts_decrypt_callback,
556 };
557 int ret;
558
559 desc->flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP;
560
561 kernel_fpu_begin();
562 ret = xts_crypt(desc, dst, src, nbytes, &req);
563 kernel_fpu_end();
564
565 return ret;
419} 566}
420#endif
421 567
422#ifdef CONFIG_X86_64 568#ifdef CONFIG_X86_64
423static int rfc4106_init(struct crypto_tfm *tfm) 569static int rfc4106_init(struct crypto_tfm *tfm)
@@ -1035,10 +1181,10 @@ static struct crypto_alg aesni_algs[] = { {
1035 }, 1181 },
1036#endif 1182#endif
1037#endif 1183#endif
1038#ifdef HAS_LRW 1184#ifdef HAS_PCBC
1039}, { 1185}, {
1040 .cra_name = "lrw(aes)", 1186 .cra_name = "pcbc(aes)",
1041 .cra_driver_name = "lrw-aes-aesni", 1187 .cra_driver_name = "pcbc-aes-aesni",
1042 .cra_priority = 400, 1188 .cra_priority = 400,
1043 .cra_flags = CRYPTO_ALG_TYPE_ABLKCIPHER | CRYPTO_ALG_ASYNC, 1189 .cra_flags = CRYPTO_ALG_TYPE_ABLKCIPHER | CRYPTO_ALG_ASYNC,
1044 .cra_blocksize = AES_BLOCK_SIZE, 1190 .cra_blocksize = AES_BLOCK_SIZE,
@@ -1046,12 +1192,12 @@ static struct crypto_alg aesni_algs[] = { {
1046 .cra_alignmask = 0, 1192 .cra_alignmask = 0,
1047 .cra_type = &crypto_ablkcipher_type, 1193 .cra_type = &crypto_ablkcipher_type,
1048 .cra_module = THIS_MODULE, 1194 .cra_module = THIS_MODULE,
1049 .cra_init = ablk_lrw_init, 1195 .cra_init = ablk_pcbc_init,
1050 .cra_exit = ablk_exit, 1196 .cra_exit = ablk_exit,
1051 .cra_u = { 1197 .cra_u = {
1052 .ablkcipher = { 1198 .ablkcipher = {
1053 .min_keysize = AES_MIN_KEY_SIZE + AES_BLOCK_SIZE, 1199 .min_keysize = AES_MIN_KEY_SIZE,
1054 .max_keysize = AES_MAX_KEY_SIZE + AES_BLOCK_SIZE, 1200 .max_keysize = AES_MAX_KEY_SIZE,
1055 .ivsize = AES_BLOCK_SIZE, 1201 .ivsize = AES_BLOCK_SIZE,
1056 .setkey = ablk_set_key, 1202 .setkey = ablk_set_key,
1057 .encrypt = ablk_encrypt, 1203 .encrypt = ablk_encrypt,
@@ -1059,10 +1205,50 @@ static struct crypto_alg aesni_algs[] = { {
1059 }, 1205 },
1060 }, 1206 },
1061#endif 1207#endif
1062#ifdef HAS_PCBC
1063}, { 1208}, {
1064 .cra_name = "pcbc(aes)", 1209 .cra_name = "__lrw-aes-aesni",
1065 .cra_driver_name = "pcbc-aes-aesni", 1210 .cra_driver_name = "__driver-lrw-aes-aesni",
1211 .cra_priority = 0,
1212 .cra_flags = CRYPTO_ALG_TYPE_BLKCIPHER,
1213 .cra_blocksize = AES_BLOCK_SIZE,
1214 .cra_ctxsize = sizeof(struct aesni_lrw_ctx),
1215 .cra_alignmask = 0,
1216 .cra_type = &crypto_blkcipher_type,
1217 .cra_module = THIS_MODULE,
1218 .cra_exit = lrw_aesni_exit_tfm,
1219 .cra_u = {
1220 .blkcipher = {
1221 .min_keysize = AES_MIN_KEY_SIZE + AES_BLOCK_SIZE,
1222 .max_keysize = AES_MAX_KEY_SIZE + AES_BLOCK_SIZE,
1223 .ivsize = AES_BLOCK_SIZE,
1224 .setkey = lrw_aesni_setkey,
1225 .encrypt = lrw_encrypt,
1226 .decrypt = lrw_decrypt,
1227 },
1228 },
1229}, {
1230 .cra_name = "__xts-aes-aesni",
1231 .cra_driver_name = "__driver-xts-aes-aesni",
1232 .cra_priority = 0,
1233 .cra_flags = CRYPTO_ALG_TYPE_BLKCIPHER,
1234 .cra_blocksize = AES_BLOCK_SIZE,
1235 .cra_ctxsize = sizeof(struct aesni_xts_ctx),
1236 .cra_alignmask = 0,
1237 .cra_type = &crypto_blkcipher_type,
1238 .cra_module = THIS_MODULE,
1239 .cra_u = {
1240 .blkcipher = {
1241 .min_keysize = 2 * AES_MIN_KEY_SIZE,
1242 .max_keysize = 2 * AES_MAX_KEY_SIZE,
1243 .ivsize = AES_BLOCK_SIZE,
1244 .setkey = xts_aesni_setkey,
1245 .encrypt = xts_encrypt,
1246 .decrypt = xts_decrypt,
1247 },
1248 },
1249}, {
1250 .cra_name = "lrw(aes)",
1251 .cra_driver_name = "lrw-aes-aesni",
1066 .cra_priority = 400, 1252 .cra_priority = 400,
1067 .cra_flags = CRYPTO_ALG_TYPE_ABLKCIPHER | CRYPTO_ALG_ASYNC, 1253 .cra_flags = CRYPTO_ALG_TYPE_ABLKCIPHER | CRYPTO_ALG_ASYNC,
1068 .cra_blocksize = AES_BLOCK_SIZE, 1254 .cra_blocksize = AES_BLOCK_SIZE,
@@ -1070,20 +1256,18 @@ static struct crypto_alg aesni_algs[] = { {
1070 .cra_alignmask = 0, 1256 .cra_alignmask = 0,
1071 .cra_type = &crypto_ablkcipher_type, 1257 .cra_type = &crypto_ablkcipher_type,
1072 .cra_module = THIS_MODULE, 1258 .cra_module = THIS_MODULE,
1073 .cra_init = ablk_pcbc_init, 1259 .cra_init = ablk_init,
1074 .cra_exit = ablk_exit, 1260 .cra_exit = ablk_exit,
1075 .cra_u = { 1261 .cra_u = {
1076 .ablkcipher = { 1262 .ablkcipher = {
1077 .min_keysize = AES_MIN_KEY_SIZE, 1263 .min_keysize = AES_MIN_KEY_SIZE + AES_BLOCK_SIZE,
1078 .max_keysize = AES_MAX_KEY_SIZE, 1264 .max_keysize = AES_MAX_KEY_SIZE + AES_BLOCK_SIZE,
1079 .ivsize = AES_BLOCK_SIZE, 1265 .ivsize = AES_BLOCK_SIZE,
1080 .setkey = ablk_set_key, 1266 .setkey = ablk_set_key,
1081 .encrypt = ablk_encrypt, 1267 .encrypt = ablk_encrypt,
1082 .decrypt = ablk_decrypt, 1268 .decrypt = ablk_decrypt,
1083 }, 1269 },
1084 }, 1270 },
1085#endif
1086#ifdef HAS_XTS
1087}, { 1271}, {
1088 .cra_name = "xts(aes)", 1272 .cra_name = "xts(aes)",
1089 .cra_driver_name = "xts-aes-aesni", 1273 .cra_driver_name = "xts-aes-aesni",
@@ -1094,7 +1278,7 @@ static struct crypto_alg aesni_algs[] = { {
1094 .cra_alignmask = 0, 1278 .cra_alignmask = 0,
1095 .cra_type = &crypto_ablkcipher_type, 1279 .cra_type = &crypto_ablkcipher_type,
1096 .cra_module = THIS_MODULE, 1280 .cra_module = THIS_MODULE,
1097 .cra_init = ablk_xts_init, 1281 .cra_init = ablk_init,
1098 .cra_exit = ablk_exit, 1282 .cra_exit = ablk_exit,
1099 .cra_u = { 1283 .cra_u = {
1100 .ablkcipher = { 1284 .ablkcipher = {
@@ -1106,7 +1290,6 @@ static struct crypto_alg aesni_algs[] = { {
1106 .decrypt = ablk_decrypt, 1290 .decrypt = ablk_decrypt,
1107 }, 1291 },
1108 }, 1292 },
1109#endif
1110} }; 1293} };
1111 1294
1112 1295
@@ -1118,7 +1301,7 @@ MODULE_DEVICE_TABLE(x86cpu, aesni_cpu_id);
1118 1301
1119static int __init aesni_init(void) 1302static int __init aesni_init(void)
1120{ 1303{
1121 int err, i; 1304 int err;
1122 1305
1123 if (!x86_match_cpu(aesni_cpu_id)) 1306 if (!x86_match_cpu(aesni_cpu_id))
1124 return -ENODEV; 1307 return -ENODEV;
@@ -1127,9 +1310,6 @@ static int __init aesni_init(void)
1127 if (err) 1310 if (err)
1128 return err; 1311 return err;
1129 1312
1130 for (i = 0; i < ARRAY_SIZE(aesni_algs); i++)
1131 INIT_LIST_HEAD(&aesni_algs[i].cra_list);
1132
1133 return crypto_register_algs(aesni_algs, ARRAY_SIZE(aesni_algs)); 1313 return crypto_register_algs(aesni_algs, ARRAY_SIZE(aesni_algs));
1134} 1314}
1135 1315
diff --git a/arch/x86/crypto/blowfish_glue.c b/arch/x86/crypto/blowfish_glue.c
index 7967474de8f..50ec333b70e 100644
--- a/arch/x86/crypto/blowfish_glue.c
+++ b/arch/x86/crypto/blowfish_glue.c
@@ -367,7 +367,6 @@ static struct crypto_alg bf_algs[4] = { {
367 .cra_ctxsize = sizeof(struct bf_ctx), 367 .cra_ctxsize = sizeof(struct bf_ctx),
368 .cra_alignmask = 0, 368 .cra_alignmask = 0,
369 .cra_module = THIS_MODULE, 369 .cra_module = THIS_MODULE,
370 .cra_list = LIST_HEAD_INIT(bf_algs[0].cra_list),
371 .cra_u = { 370 .cra_u = {
372 .cipher = { 371 .cipher = {
373 .cia_min_keysize = BF_MIN_KEY_SIZE, 372 .cia_min_keysize = BF_MIN_KEY_SIZE,
@@ -387,7 +386,6 @@ static struct crypto_alg bf_algs[4] = { {
387 .cra_alignmask = 0, 386 .cra_alignmask = 0,
388 .cra_type = &crypto_blkcipher_type, 387 .cra_type = &crypto_blkcipher_type,
389 .cra_module = THIS_MODULE, 388 .cra_module = THIS_MODULE,
390 .cra_list = LIST_HEAD_INIT(bf_algs[1].cra_list),
391 .cra_u = { 389 .cra_u = {
392 .blkcipher = { 390 .blkcipher = {
393 .min_keysize = BF_MIN_KEY_SIZE, 391 .min_keysize = BF_MIN_KEY_SIZE,
@@ -407,7 +405,6 @@ static struct crypto_alg bf_algs[4] = { {
407 .cra_alignmask = 0, 405 .cra_alignmask = 0,
408 .cra_type = &crypto_blkcipher_type, 406 .cra_type = &crypto_blkcipher_type,
409 .cra_module = THIS_MODULE, 407 .cra_module = THIS_MODULE,
410 .cra_list = LIST_HEAD_INIT(bf_algs[2].cra_list),
411 .cra_u = { 408 .cra_u = {
412 .blkcipher = { 409 .blkcipher = {
413 .min_keysize = BF_MIN_KEY_SIZE, 410 .min_keysize = BF_MIN_KEY_SIZE,
@@ -428,7 +425,6 @@ static struct crypto_alg bf_algs[4] = { {
428 .cra_alignmask = 0, 425 .cra_alignmask = 0,
429 .cra_type = &crypto_blkcipher_type, 426 .cra_type = &crypto_blkcipher_type,
430 .cra_module = THIS_MODULE, 427 .cra_module = THIS_MODULE,
431 .cra_list = LIST_HEAD_INIT(bf_algs[3].cra_list),
432 .cra_u = { 428 .cra_u = {
433 .blkcipher = { 429 .blkcipher = {
434 .min_keysize = BF_MIN_KEY_SIZE, 430 .min_keysize = BF_MIN_KEY_SIZE,
diff --git a/arch/x86/crypto/camellia_glue.c b/arch/x86/crypto/camellia_glue.c
index eeb2b3b743e..42ffd2bbab5 100644
--- a/arch/x86/crypto/camellia_glue.c
+++ b/arch/x86/crypto/camellia_glue.c
@@ -92,715 +92,715 @@ static void camellia_decrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src)
92 92
93/* camellia sboxes */ 93/* camellia sboxes */
94const u64 camellia_sp10011110[256] = { 94const u64 camellia_sp10011110[256] = {
95 0x7000007070707000, 0x8200008282828200, 0x2c00002c2c2c2c00, 95 0x7000007070707000ULL, 0x8200008282828200ULL, 0x2c00002c2c2c2c00ULL,
96 0xec0000ecececec00, 0xb30000b3b3b3b300, 0x2700002727272700, 96 0xec0000ecececec00ULL, 0xb30000b3b3b3b300ULL, 0x2700002727272700ULL,
97 0xc00000c0c0c0c000, 0xe50000e5e5e5e500, 0xe40000e4e4e4e400, 97 0xc00000c0c0c0c000ULL, 0xe50000e5e5e5e500ULL, 0xe40000e4e4e4e400ULL,
98 0x8500008585858500, 0x5700005757575700, 0x3500003535353500, 98 0x8500008585858500ULL, 0x5700005757575700ULL, 0x3500003535353500ULL,
99 0xea0000eaeaeaea00, 0x0c00000c0c0c0c00, 0xae0000aeaeaeae00, 99 0xea0000eaeaeaea00ULL, 0x0c00000c0c0c0c00ULL, 0xae0000aeaeaeae00ULL,
100 0x4100004141414100, 0x2300002323232300, 0xef0000efefefef00, 100 0x4100004141414100ULL, 0x2300002323232300ULL, 0xef0000efefefef00ULL,
101 0x6b00006b6b6b6b00, 0x9300009393939300, 0x4500004545454500, 101 0x6b00006b6b6b6b00ULL, 0x9300009393939300ULL, 0x4500004545454500ULL,
102 0x1900001919191900, 0xa50000a5a5a5a500, 0x2100002121212100, 102 0x1900001919191900ULL, 0xa50000a5a5a5a500ULL, 0x2100002121212100ULL,
103 0xed0000edededed00, 0x0e00000e0e0e0e00, 0x4f00004f4f4f4f00, 103 0xed0000edededed00ULL, 0x0e00000e0e0e0e00ULL, 0x4f00004f4f4f4f00ULL,
104 0x4e00004e4e4e4e00, 0x1d00001d1d1d1d00, 0x6500006565656500, 104 0x4e00004e4e4e4e00ULL, 0x1d00001d1d1d1d00ULL, 0x6500006565656500ULL,
105 0x9200009292929200, 0xbd0000bdbdbdbd00, 0x8600008686868600, 105 0x9200009292929200ULL, 0xbd0000bdbdbdbd00ULL, 0x8600008686868600ULL,
106 0xb80000b8b8b8b800, 0xaf0000afafafaf00, 0x8f00008f8f8f8f00, 106 0xb80000b8b8b8b800ULL, 0xaf0000afafafaf00ULL, 0x8f00008f8f8f8f00ULL,
107 0x7c00007c7c7c7c00, 0xeb0000ebebebeb00, 0x1f00001f1f1f1f00, 107 0x7c00007c7c7c7c00ULL, 0xeb0000ebebebeb00ULL, 0x1f00001f1f1f1f00ULL,
108 0xce0000cececece00, 0x3e00003e3e3e3e00, 0x3000003030303000, 108 0xce0000cececece00ULL, 0x3e00003e3e3e3e00ULL, 0x3000003030303000ULL,
109 0xdc0000dcdcdcdc00, 0x5f00005f5f5f5f00, 0x5e00005e5e5e5e00, 109 0xdc0000dcdcdcdc00ULL, 0x5f00005f5f5f5f00ULL, 0x5e00005e5e5e5e00ULL,
110 0xc50000c5c5c5c500, 0x0b00000b0b0b0b00, 0x1a00001a1a1a1a00, 110 0xc50000c5c5c5c500ULL, 0x0b00000b0b0b0b00ULL, 0x1a00001a1a1a1a00ULL,
111 0xa60000a6a6a6a600, 0xe10000e1e1e1e100, 0x3900003939393900, 111 0xa60000a6a6a6a600ULL, 0xe10000e1e1e1e100ULL, 0x3900003939393900ULL,
112 0xca0000cacacaca00, 0xd50000d5d5d5d500, 0x4700004747474700, 112 0xca0000cacacaca00ULL, 0xd50000d5d5d5d500ULL, 0x4700004747474700ULL,
113 0x5d00005d5d5d5d00, 0x3d00003d3d3d3d00, 0xd90000d9d9d9d900, 113 0x5d00005d5d5d5d00ULL, 0x3d00003d3d3d3d00ULL, 0xd90000d9d9d9d900ULL,
114 0x0100000101010100, 0x5a00005a5a5a5a00, 0xd60000d6d6d6d600, 114 0x0100000101010100ULL, 0x5a00005a5a5a5a00ULL, 0xd60000d6d6d6d600ULL,
115 0x5100005151515100, 0x5600005656565600, 0x6c00006c6c6c6c00, 115 0x5100005151515100ULL, 0x5600005656565600ULL, 0x6c00006c6c6c6c00ULL,
116 0x4d00004d4d4d4d00, 0x8b00008b8b8b8b00, 0x0d00000d0d0d0d00, 116 0x4d00004d4d4d4d00ULL, 0x8b00008b8b8b8b00ULL, 0x0d00000d0d0d0d00ULL,
117 0x9a00009a9a9a9a00, 0x6600006666666600, 0xfb0000fbfbfbfb00, 117 0x9a00009a9a9a9a00ULL, 0x6600006666666600ULL, 0xfb0000fbfbfbfb00ULL,
118 0xcc0000cccccccc00, 0xb00000b0b0b0b000, 0x2d00002d2d2d2d00, 118 0xcc0000cccccccc00ULL, 0xb00000b0b0b0b000ULL, 0x2d00002d2d2d2d00ULL,
119 0x7400007474747400, 0x1200001212121200, 0x2b00002b2b2b2b00, 119 0x7400007474747400ULL, 0x1200001212121200ULL, 0x2b00002b2b2b2b00ULL,
120 0x2000002020202000, 0xf00000f0f0f0f000, 0xb10000b1b1b1b100, 120 0x2000002020202000ULL, 0xf00000f0f0f0f000ULL, 0xb10000b1b1b1b100ULL,
121 0x8400008484848400, 0x9900009999999900, 0xdf0000dfdfdfdf00, 121 0x8400008484848400ULL, 0x9900009999999900ULL, 0xdf0000dfdfdfdf00ULL,
122 0x4c00004c4c4c4c00, 0xcb0000cbcbcbcb00, 0xc20000c2c2c2c200, 122 0x4c00004c4c4c4c00ULL, 0xcb0000cbcbcbcb00ULL, 0xc20000c2c2c2c200ULL,
123 0x3400003434343400, 0x7e00007e7e7e7e00, 0x7600007676767600, 123 0x3400003434343400ULL, 0x7e00007e7e7e7e00ULL, 0x7600007676767600ULL,
124 0x0500000505050500, 0x6d00006d6d6d6d00, 0xb70000b7b7b7b700, 124 0x0500000505050500ULL, 0x6d00006d6d6d6d00ULL, 0xb70000b7b7b7b700ULL,
125 0xa90000a9a9a9a900, 0x3100003131313100, 0xd10000d1d1d1d100, 125 0xa90000a9a9a9a900ULL, 0x3100003131313100ULL, 0xd10000d1d1d1d100ULL,
126 0x1700001717171700, 0x0400000404040400, 0xd70000d7d7d7d700, 126 0x1700001717171700ULL, 0x0400000404040400ULL, 0xd70000d7d7d7d700ULL,
127 0x1400001414141400, 0x5800005858585800, 0x3a00003a3a3a3a00, 127 0x1400001414141400ULL, 0x5800005858585800ULL, 0x3a00003a3a3a3a00ULL,
128 0x6100006161616100, 0xde0000dededede00, 0x1b00001b1b1b1b00, 128 0x6100006161616100ULL, 0xde0000dededede00ULL, 0x1b00001b1b1b1b00ULL,
129 0x1100001111111100, 0x1c00001c1c1c1c00, 0x3200003232323200, 129 0x1100001111111100ULL, 0x1c00001c1c1c1c00ULL, 0x3200003232323200ULL,
130 0x0f00000f0f0f0f00, 0x9c00009c9c9c9c00, 0x1600001616161600, 130 0x0f00000f0f0f0f00ULL, 0x9c00009c9c9c9c00ULL, 0x1600001616161600ULL,
131 0x5300005353535300, 0x1800001818181800, 0xf20000f2f2f2f200, 131 0x5300005353535300ULL, 0x1800001818181800ULL, 0xf20000f2f2f2f200ULL,
132 0x2200002222222200, 0xfe0000fefefefe00, 0x4400004444444400, 132 0x2200002222222200ULL, 0xfe0000fefefefe00ULL, 0x4400004444444400ULL,
133 0xcf0000cfcfcfcf00, 0xb20000b2b2b2b200, 0xc30000c3c3c3c300, 133 0xcf0000cfcfcfcf00ULL, 0xb20000b2b2b2b200ULL, 0xc30000c3c3c3c300ULL,
134 0xb50000b5b5b5b500, 0x7a00007a7a7a7a00, 0x9100009191919100, 134 0xb50000b5b5b5b500ULL, 0x7a00007a7a7a7a00ULL, 0x9100009191919100ULL,
135 0x2400002424242400, 0x0800000808080800, 0xe80000e8e8e8e800, 135 0x2400002424242400ULL, 0x0800000808080800ULL, 0xe80000e8e8e8e800ULL,
136 0xa80000a8a8a8a800, 0x6000006060606000, 0xfc0000fcfcfcfc00, 136 0xa80000a8a8a8a800ULL, 0x6000006060606000ULL, 0xfc0000fcfcfcfc00ULL,
137 0x6900006969696900, 0x5000005050505000, 0xaa0000aaaaaaaa00, 137 0x6900006969696900ULL, 0x5000005050505000ULL, 0xaa0000aaaaaaaa00ULL,
138 0xd00000d0d0d0d000, 0xa00000a0a0a0a000, 0x7d00007d7d7d7d00, 138 0xd00000d0d0d0d000ULL, 0xa00000a0a0a0a000ULL, 0x7d00007d7d7d7d00ULL,
139 0xa10000a1a1a1a100, 0x8900008989898900, 0x6200006262626200, 139 0xa10000a1a1a1a100ULL, 0x8900008989898900ULL, 0x6200006262626200ULL,
140 0x9700009797979700, 0x5400005454545400, 0x5b00005b5b5b5b00, 140 0x9700009797979700ULL, 0x5400005454545400ULL, 0x5b00005b5b5b5b00ULL,
141 0x1e00001e1e1e1e00, 0x9500009595959500, 0xe00000e0e0e0e000, 141 0x1e00001e1e1e1e00ULL, 0x9500009595959500ULL, 0xe00000e0e0e0e000ULL,
142 0xff0000ffffffff00, 0x6400006464646400, 0xd20000d2d2d2d200, 142 0xff0000ffffffff00ULL, 0x6400006464646400ULL, 0xd20000d2d2d2d200ULL,
143 0x1000001010101000, 0xc40000c4c4c4c400, 0x0000000000000000, 143 0x1000001010101000ULL, 0xc40000c4c4c4c400ULL, 0x0000000000000000ULL,
144 0x4800004848484800, 0xa30000a3a3a3a300, 0xf70000f7f7f7f700, 144 0x4800004848484800ULL, 0xa30000a3a3a3a300ULL, 0xf70000f7f7f7f700ULL,
145 0x7500007575757500, 0xdb0000dbdbdbdb00, 0x8a00008a8a8a8a00, 145 0x7500007575757500ULL, 0xdb0000dbdbdbdb00ULL, 0x8a00008a8a8a8a00ULL,
146 0x0300000303030300, 0xe60000e6e6e6e600, 0xda0000dadadada00, 146 0x0300000303030300ULL, 0xe60000e6e6e6e600ULL, 0xda0000dadadada00ULL,
147 0x0900000909090900, 0x3f00003f3f3f3f00, 0xdd0000dddddddd00, 147 0x0900000909090900ULL, 0x3f00003f3f3f3f00ULL, 0xdd0000dddddddd00ULL,
148 0x9400009494949400, 0x8700008787878700, 0x5c00005c5c5c5c00, 148 0x9400009494949400ULL, 0x8700008787878700ULL, 0x5c00005c5c5c5c00ULL,
149 0x8300008383838300, 0x0200000202020200, 0xcd0000cdcdcdcd00, 149 0x8300008383838300ULL, 0x0200000202020200ULL, 0xcd0000cdcdcdcd00ULL,
150 0x4a00004a4a4a4a00, 0x9000009090909000, 0x3300003333333300, 150 0x4a00004a4a4a4a00ULL, 0x9000009090909000ULL, 0x3300003333333300ULL,
151 0x7300007373737300, 0x6700006767676700, 0xf60000f6f6f6f600, 151 0x7300007373737300ULL, 0x6700006767676700ULL, 0xf60000f6f6f6f600ULL,
152 0xf30000f3f3f3f300, 0x9d00009d9d9d9d00, 0x7f00007f7f7f7f00, 152 0xf30000f3f3f3f300ULL, 0x9d00009d9d9d9d00ULL, 0x7f00007f7f7f7f00ULL,
153 0xbf0000bfbfbfbf00, 0xe20000e2e2e2e200, 0x5200005252525200, 153 0xbf0000bfbfbfbf00ULL, 0xe20000e2e2e2e200ULL, 0x5200005252525200ULL,
154 0x9b00009b9b9b9b00, 0xd80000d8d8d8d800, 0x2600002626262600, 154 0x9b00009b9b9b9b00ULL, 0xd80000d8d8d8d800ULL, 0x2600002626262600ULL,
155 0xc80000c8c8c8c800, 0x3700003737373700, 0xc60000c6c6c6c600, 155 0xc80000c8c8c8c800ULL, 0x3700003737373700ULL, 0xc60000c6c6c6c600ULL,
156 0x3b00003b3b3b3b00, 0x8100008181818100, 0x9600009696969600, 156 0x3b00003b3b3b3b00ULL, 0x8100008181818100ULL, 0x9600009696969600ULL,
157 0x6f00006f6f6f6f00, 0x4b00004b4b4b4b00, 0x1300001313131300, 157 0x6f00006f6f6f6f00ULL, 0x4b00004b4b4b4b00ULL, 0x1300001313131300ULL,
158 0xbe0000bebebebe00, 0x6300006363636300, 0x2e00002e2e2e2e00, 158 0xbe0000bebebebe00ULL, 0x6300006363636300ULL, 0x2e00002e2e2e2e00ULL,
159 0xe90000e9e9e9e900, 0x7900007979797900, 0xa70000a7a7a7a700, 159 0xe90000e9e9e9e900ULL, 0x7900007979797900ULL, 0xa70000a7a7a7a700ULL,
160 0x8c00008c8c8c8c00, 0x9f00009f9f9f9f00, 0x6e00006e6e6e6e00, 160 0x8c00008c8c8c8c00ULL, 0x9f00009f9f9f9f00ULL, 0x6e00006e6e6e6e00ULL,
161 0xbc0000bcbcbcbc00, 0x8e00008e8e8e8e00, 0x2900002929292900, 161 0xbc0000bcbcbcbc00ULL, 0x8e00008e8e8e8e00ULL, 0x2900002929292900ULL,
162 0xf50000f5f5f5f500, 0xf90000f9f9f9f900, 0xb60000b6b6b6b600, 162 0xf50000f5f5f5f500ULL, 0xf90000f9f9f9f900ULL, 0xb60000b6b6b6b600ULL,
163 0x2f00002f2f2f2f00, 0xfd0000fdfdfdfd00, 0xb40000b4b4b4b400, 163 0x2f00002f2f2f2f00ULL, 0xfd0000fdfdfdfd00ULL, 0xb40000b4b4b4b400ULL,
164 0x5900005959595900, 0x7800007878787800, 0x9800009898989800, 164 0x5900005959595900ULL, 0x7800007878787800ULL, 0x9800009898989800ULL,
165 0x0600000606060600, 0x6a00006a6a6a6a00, 0xe70000e7e7e7e700, 165 0x0600000606060600ULL, 0x6a00006a6a6a6a00ULL, 0xe70000e7e7e7e700ULL,
166 0x4600004646464600, 0x7100007171717100, 0xba0000babababa00, 166 0x4600004646464600ULL, 0x7100007171717100ULL, 0xba0000babababa00ULL,
167 0xd40000d4d4d4d400, 0x2500002525252500, 0xab0000abababab00, 167 0xd40000d4d4d4d400ULL, 0x2500002525252500ULL, 0xab0000abababab00ULL,
168 0x4200004242424200, 0x8800008888888800, 0xa20000a2a2a2a200, 168 0x4200004242424200ULL, 0x8800008888888800ULL, 0xa20000a2a2a2a200ULL,
169 0x8d00008d8d8d8d00, 0xfa0000fafafafa00, 0x7200007272727200, 169 0x8d00008d8d8d8d00ULL, 0xfa0000fafafafa00ULL, 0x7200007272727200ULL,
170 0x0700000707070700, 0xb90000b9b9b9b900, 0x5500005555555500, 170 0x0700000707070700ULL, 0xb90000b9b9b9b900ULL, 0x5500005555555500ULL,
171 0xf80000f8f8f8f800, 0xee0000eeeeeeee00, 0xac0000acacacac00, 171 0xf80000f8f8f8f800ULL, 0xee0000eeeeeeee00ULL, 0xac0000acacacac00ULL,
172 0x0a00000a0a0a0a00, 0x3600003636363600, 0x4900004949494900, 172 0x0a00000a0a0a0a00ULL, 0x3600003636363600ULL, 0x4900004949494900ULL,
173 0x2a00002a2a2a2a00, 0x6800006868686800, 0x3c00003c3c3c3c00, 173 0x2a00002a2a2a2a00ULL, 0x6800006868686800ULL, 0x3c00003c3c3c3c00ULL,
174 0x3800003838383800, 0xf10000f1f1f1f100, 0xa40000a4a4a4a400, 174 0x3800003838383800ULL, 0xf10000f1f1f1f100ULL, 0xa40000a4a4a4a400ULL,
175 0x4000004040404000, 0x2800002828282800, 0xd30000d3d3d3d300, 175 0x4000004040404000ULL, 0x2800002828282800ULL, 0xd30000d3d3d3d300ULL,
176 0x7b00007b7b7b7b00, 0xbb0000bbbbbbbb00, 0xc90000c9c9c9c900, 176 0x7b00007b7b7b7b00ULL, 0xbb0000bbbbbbbb00ULL, 0xc90000c9c9c9c900ULL,
177 0x4300004343434300, 0xc10000c1c1c1c100, 0x1500001515151500, 177 0x4300004343434300ULL, 0xc10000c1c1c1c100ULL, 0x1500001515151500ULL,
178 0xe30000e3e3e3e300, 0xad0000adadadad00, 0xf40000f4f4f4f400, 178 0xe30000e3e3e3e300ULL, 0xad0000adadadad00ULL, 0xf40000f4f4f4f400ULL,
179 0x7700007777777700, 0xc70000c7c7c7c700, 0x8000008080808000, 179 0x7700007777777700ULL, 0xc70000c7c7c7c700ULL, 0x8000008080808000ULL,
180 0x9e00009e9e9e9e00, 180 0x9e00009e9e9e9e00ULL,
181}; 181};
182 182
183const u64 camellia_sp22000222[256] = { 183const u64 camellia_sp22000222[256] = {
184 0xe0e0000000e0e0e0, 0x0505000000050505, 0x5858000000585858, 184 0xe0e0000000e0e0e0ULL, 0x0505000000050505ULL, 0x5858000000585858ULL,
185 0xd9d9000000d9d9d9, 0x6767000000676767, 0x4e4e0000004e4e4e, 185 0xd9d9000000d9d9d9ULL, 0x6767000000676767ULL, 0x4e4e0000004e4e4eULL,
186 0x8181000000818181, 0xcbcb000000cbcbcb, 0xc9c9000000c9c9c9, 186 0x8181000000818181ULL, 0xcbcb000000cbcbcbULL, 0xc9c9000000c9c9c9ULL,
187 0x0b0b0000000b0b0b, 0xaeae000000aeaeae, 0x6a6a0000006a6a6a, 187 0x0b0b0000000b0b0bULL, 0xaeae000000aeaeaeULL, 0x6a6a0000006a6a6aULL,
188 0xd5d5000000d5d5d5, 0x1818000000181818, 0x5d5d0000005d5d5d, 188 0xd5d5000000d5d5d5ULL, 0x1818000000181818ULL, 0x5d5d0000005d5d5dULL,
189 0x8282000000828282, 0x4646000000464646, 0xdfdf000000dfdfdf, 189 0x8282000000828282ULL, 0x4646000000464646ULL, 0xdfdf000000dfdfdfULL,
190 0xd6d6000000d6d6d6, 0x2727000000272727, 0x8a8a0000008a8a8a, 190 0xd6d6000000d6d6d6ULL, 0x2727000000272727ULL, 0x8a8a0000008a8a8aULL,
191 0x3232000000323232, 0x4b4b0000004b4b4b, 0x4242000000424242, 191 0x3232000000323232ULL, 0x4b4b0000004b4b4bULL, 0x4242000000424242ULL,
192 0xdbdb000000dbdbdb, 0x1c1c0000001c1c1c, 0x9e9e0000009e9e9e, 192 0xdbdb000000dbdbdbULL, 0x1c1c0000001c1c1cULL, 0x9e9e0000009e9e9eULL,
193 0x9c9c0000009c9c9c, 0x3a3a0000003a3a3a, 0xcaca000000cacaca, 193 0x9c9c0000009c9c9cULL, 0x3a3a0000003a3a3aULL, 0xcaca000000cacacaULL,
194 0x2525000000252525, 0x7b7b0000007b7b7b, 0x0d0d0000000d0d0d, 194 0x2525000000252525ULL, 0x7b7b0000007b7b7bULL, 0x0d0d0000000d0d0dULL,
195 0x7171000000717171, 0x5f5f0000005f5f5f, 0x1f1f0000001f1f1f, 195 0x7171000000717171ULL, 0x5f5f0000005f5f5fULL, 0x1f1f0000001f1f1fULL,
196 0xf8f8000000f8f8f8, 0xd7d7000000d7d7d7, 0x3e3e0000003e3e3e, 196 0xf8f8000000f8f8f8ULL, 0xd7d7000000d7d7d7ULL, 0x3e3e0000003e3e3eULL,
197 0x9d9d0000009d9d9d, 0x7c7c0000007c7c7c, 0x6060000000606060, 197 0x9d9d0000009d9d9dULL, 0x7c7c0000007c7c7cULL, 0x6060000000606060ULL,
198 0xb9b9000000b9b9b9, 0xbebe000000bebebe, 0xbcbc000000bcbcbc, 198 0xb9b9000000b9b9b9ULL, 0xbebe000000bebebeULL, 0xbcbc000000bcbcbcULL,
199 0x8b8b0000008b8b8b, 0x1616000000161616, 0x3434000000343434, 199 0x8b8b0000008b8b8bULL, 0x1616000000161616ULL, 0x3434000000343434ULL,
200 0x4d4d0000004d4d4d, 0xc3c3000000c3c3c3, 0x7272000000727272, 200 0x4d4d0000004d4d4dULL, 0xc3c3000000c3c3c3ULL, 0x7272000000727272ULL,
201 0x9595000000959595, 0xabab000000ababab, 0x8e8e0000008e8e8e, 201 0x9595000000959595ULL, 0xabab000000abababULL, 0x8e8e0000008e8e8eULL,
202 0xbaba000000bababa, 0x7a7a0000007a7a7a, 0xb3b3000000b3b3b3, 202 0xbaba000000bababaULL, 0x7a7a0000007a7a7aULL, 0xb3b3000000b3b3b3ULL,
203 0x0202000000020202, 0xb4b4000000b4b4b4, 0xadad000000adadad, 203 0x0202000000020202ULL, 0xb4b4000000b4b4b4ULL, 0xadad000000adadadULL,
204 0xa2a2000000a2a2a2, 0xacac000000acacac, 0xd8d8000000d8d8d8, 204 0xa2a2000000a2a2a2ULL, 0xacac000000acacacULL, 0xd8d8000000d8d8d8ULL,
205 0x9a9a0000009a9a9a, 0x1717000000171717, 0x1a1a0000001a1a1a, 205 0x9a9a0000009a9a9aULL, 0x1717000000171717ULL, 0x1a1a0000001a1a1aULL,
206 0x3535000000353535, 0xcccc000000cccccc, 0xf7f7000000f7f7f7, 206 0x3535000000353535ULL, 0xcccc000000ccccccULL, 0xf7f7000000f7f7f7ULL,
207 0x9999000000999999, 0x6161000000616161, 0x5a5a0000005a5a5a, 207 0x9999000000999999ULL, 0x6161000000616161ULL, 0x5a5a0000005a5a5aULL,
208 0xe8e8000000e8e8e8, 0x2424000000242424, 0x5656000000565656, 208 0xe8e8000000e8e8e8ULL, 0x2424000000242424ULL, 0x5656000000565656ULL,
209 0x4040000000404040, 0xe1e1000000e1e1e1, 0x6363000000636363, 209 0x4040000000404040ULL, 0xe1e1000000e1e1e1ULL, 0x6363000000636363ULL,
210 0x0909000000090909, 0x3333000000333333, 0xbfbf000000bfbfbf, 210 0x0909000000090909ULL, 0x3333000000333333ULL, 0xbfbf000000bfbfbfULL,
211 0x9898000000989898, 0x9797000000979797, 0x8585000000858585, 211 0x9898000000989898ULL, 0x9797000000979797ULL, 0x8585000000858585ULL,
212 0x6868000000686868, 0xfcfc000000fcfcfc, 0xecec000000ececec, 212 0x6868000000686868ULL, 0xfcfc000000fcfcfcULL, 0xecec000000ecececULL,
213 0x0a0a0000000a0a0a, 0xdada000000dadada, 0x6f6f0000006f6f6f, 213 0x0a0a0000000a0a0aULL, 0xdada000000dadadaULL, 0x6f6f0000006f6f6fULL,
214 0x5353000000535353, 0x6262000000626262, 0xa3a3000000a3a3a3, 214 0x5353000000535353ULL, 0x6262000000626262ULL, 0xa3a3000000a3a3a3ULL,
215 0x2e2e0000002e2e2e, 0x0808000000080808, 0xafaf000000afafaf, 215 0x2e2e0000002e2e2eULL, 0x0808000000080808ULL, 0xafaf000000afafafULL,
216 0x2828000000282828, 0xb0b0000000b0b0b0, 0x7474000000747474, 216 0x2828000000282828ULL, 0xb0b0000000b0b0b0ULL, 0x7474000000747474ULL,
217 0xc2c2000000c2c2c2, 0xbdbd000000bdbdbd, 0x3636000000363636, 217 0xc2c2000000c2c2c2ULL, 0xbdbd000000bdbdbdULL, 0x3636000000363636ULL,
218 0x2222000000222222, 0x3838000000383838, 0x6464000000646464, 218 0x2222000000222222ULL, 0x3838000000383838ULL, 0x6464000000646464ULL,
219 0x1e1e0000001e1e1e, 0x3939000000393939, 0x2c2c0000002c2c2c, 219 0x1e1e0000001e1e1eULL, 0x3939000000393939ULL, 0x2c2c0000002c2c2cULL,
220 0xa6a6000000a6a6a6, 0x3030000000303030, 0xe5e5000000e5e5e5, 220 0xa6a6000000a6a6a6ULL, 0x3030000000303030ULL, 0xe5e5000000e5e5e5ULL,
221 0x4444000000444444, 0xfdfd000000fdfdfd, 0x8888000000888888, 221 0x4444000000444444ULL, 0xfdfd000000fdfdfdULL, 0x8888000000888888ULL,
222 0x9f9f0000009f9f9f, 0x6565000000656565, 0x8787000000878787, 222 0x9f9f0000009f9f9fULL, 0x6565000000656565ULL, 0x8787000000878787ULL,
223 0x6b6b0000006b6b6b, 0xf4f4000000f4f4f4, 0x2323000000232323, 223 0x6b6b0000006b6b6bULL, 0xf4f4000000f4f4f4ULL, 0x2323000000232323ULL,
224 0x4848000000484848, 0x1010000000101010, 0xd1d1000000d1d1d1, 224 0x4848000000484848ULL, 0x1010000000101010ULL, 0xd1d1000000d1d1d1ULL,
225 0x5151000000515151, 0xc0c0000000c0c0c0, 0xf9f9000000f9f9f9, 225 0x5151000000515151ULL, 0xc0c0000000c0c0c0ULL, 0xf9f9000000f9f9f9ULL,
226 0xd2d2000000d2d2d2, 0xa0a0000000a0a0a0, 0x5555000000555555, 226 0xd2d2000000d2d2d2ULL, 0xa0a0000000a0a0a0ULL, 0x5555000000555555ULL,
227 0xa1a1000000a1a1a1, 0x4141000000414141, 0xfafa000000fafafa, 227 0xa1a1000000a1a1a1ULL, 0x4141000000414141ULL, 0xfafa000000fafafaULL,
228 0x4343000000434343, 0x1313000000131313, 0xc4c4000000c4c4c4, 228 0x4343000000434343ULL, 0x1313000000131313ULL, 0xc4c4000000c4c4c4ULL,
229 0x2f2f0000002f2f2f, 0xa8a8000000a8a8a8, 0xb6b6000000b6b6b6, 229 0x2f2f0000002f2f2fULL, 0xa8a8000000a8a8a8ULL, 0xb6b6000000b6b6b6ULL,
230 0x3c3c0000003c3c3c, 0x2b2b0000002b2b2b, 0xc1c1000000c1c1c1, 230 0x3c3c0000003c3c3cULL, 0x2b2b0000002b2b2bULL, 0xc1c1000000c1c1c1ULL,
231 0xffff000000ffffff, 0xc8c8000000c8c8c8, 0xa5a5000000a5a5a5, 231 0xffff000000ffffffULL, 0xc8c8000000c8c8c8ULL, 0xa5a5000000a5a5a5ULL,
232 0x2020000000202020, 0x8989000000898989, 0x0000000000000000, 232 0x2020000000202020ULL, 0x8989000000898989ULL, 0x0000000000000000ULL,
233 0x9090000000909090, 0x4747000000474747, 0xefef000000efefef, 233 0x9090000000909090ULL, 0x4747000000474747ULL, 0xefef000000efefefULL,
234 0xeaea000000eaeaea, 0xb7b7000000b7b7b7, 0x1515000000151515, 234 0xeaea000000eaeaeaULL, 0xb7b7000000b7b7b7ULL, 0x1515000000151515ULL,
235 0x0606000000060606, 0xcdcd000000cdcdcd, 0xb5b5000000b5b5b5, 235 0x0606000000060606ULL, 0xcdcd000000cdcdcdULL, 0xb5b5000000b5b5b5ULL,
236 0x1212000000121212, 0x7e7e0000007e7e7e, 0xbbbb000000bbbbbb, 236 0x1212000000121212ULL, 0x7e7e0000007e7e7eULL, 0xbbbb000000bbbbbbULL,
237 0x2929000000292929, 0x0f0f0000000f0f0f, 0xb8b8000000b8b8b8, 237 0x2929000000292929ULL, 0x0f0f0000000f0f0fULL, 0xb8b8000000b8b8b8ULL,
238 0x0707000000070707, 0x0404000000040404, 0x9b9b0000009b9b9b, 238 0x0707000000070707ULL, 0x0404000000040404ULL, 0x9b9b0000009b9b9bULL,
239 0x9494000000949494, 0x2121000000212121, 0x6666000000666666, 239 0x9494000000949494ULL, 0x2121000000212121ULL, 0x6666000000666666ULL,
240 0xe6e6000000e6e6e6, 0xcece000000cecece, 0xeded000000ededed, 240 0xe6e6000000e6e6e6ULL, 0xcece000000cececeULL, 0xeded000000edededULL,
241 0xe7e7000000e7e7e7, 0x3b3b0000003b3b3b, 0xfefe000000fefefe, 241 0xe7e7000000e7e7e7ULL, 0x3b3b0000003b3b3bULL, 0xfefe000000fefefeULL,
242 0x7f7f0000007f7f7f, 0xc5c5000000c5c5c5, 0xa4a4000000a4a4a4, 242 0x7f7f0000007f7f7fULL, 0xc5c5000000c5c5c5ULL, 0xa4a4000000a4a4a4ULL,
243 0x3737000000373737, 0xb1b1000000b1b1b1, 0x4c4c0000004c4c4c, 243 0x3737000000373737ULL, 0xb1b1000000b1b1b1ULL, 0x4c4c0000004c4c4cULL,
244 0x9191000000919191, 0x6e6e0000006e6e6e, 0x8d8d0000008d8d8d, 244 0x9191000000919191ULL, 0x6e6e0000006e6e6eULL, 0x8d8d0000008d8d8dULL,
245 0x7676000000767676, 0x0303000000030303, 0x2d2d0000002d2d2d, 245 0x7676000000767676ULL, 0x0303000000030303ULL, 0x2d2d0000002d2d2dULL,
246 0xdede000000dedede, 0x9696000000969696, 0x2626000000262626, 246 0xdede000000dededeULL, 0x9696000000969696ULL, 0x2626000000262626ULL,
247 0x7d7d0000007d7d7d, 0xc6c6000000c6c6c6, 0x5c5c0000005c5c5c, 247 0x7d7d0000007d7d7dULL, 0xc6c6000000c6c6c6ULL, 0x5c5c0000005c5c5cULL,
248 0xd3d3000000d3d3d3, 0xf2f2000000f2f2f2, 0x4f4f0000004f4f4f, 248 0xd3d3000000d3d3d3ULL, 0xf2f2000000f2f2f2ULL, 0x4f4f0000004f4f4fULL,
249 0x1919000000191919, 0x3f3f0000003f3f3f, 0xdcdc000000dcdcdc, 249 0x1919000000191919ULL, 0x3f3f0000003f3f3fULL, 0xdcdc000000dcdcdcULL,
250 0x7979000000797979, 0x1d1d0000001d1d1d, 0x5252000000525252, 250 0x7979000000797979ULL, 0x1d1d0000001d1d1dULL, 0x5252000000525252ULL,
251 0xebeb000000ebebeb, 0xf3f3000000f3f3f3, 0x6d6d0000006d6d6d, 251 0xebeb000000ebebebULL, 0xf3f3000000f3f3f3ULL, 0x6d6d0000006d6d6dULL,
252 0x5e5e0000005e5e5e, 0xfbfb000000fbfbfb, 0x6969000000696969, 252 0x5e5e0000005e5e5eULL, 0xfbfb000000fbfbfbULL, 0x6969000000696969ULL,
253 0xb2b2000000b2b2b2, 0xf0f0000000f0f0f0, 0x3131000000313131, 253 0xb2b2000000b2b2b2ULL, 0xf0f0000000f0f0f0ULL, 0x3131000000313131ULL,
254 0x0c0c0000000c0c0c, 0xd4d4000000d4d4d4, 0xcfcf000000cfcfcf, 254 0x0c0c0000000c0c0cULL, 0xd4d4000000d4d4d4ULL, 0xcfcf000000cfcfcfULL,
255 0x8c8c0000008c8c8c, 0xe2e2000000e2e2e2, 0x7575000000757575, 255 0x8c8c0000008c8c8cULL, 0xe2e2000000e2e2e2ULL, 0x7575000000757575ULL,
256 0xa9a9000000a9a9a9, 0x4a4a0000004a4a4a, 0x5757000000575757, 256 0xa9a9000000a9a9a9ULL, 0x4a4a0000004a4a4aULL, 0x5757000000575757ULL,
257 0x8484000000848484, 0x1111000000111111, 0x4545000000454545, 257 0x8484000000848484ULL, 0x1111000000111111ULL, 0x4545000000454545ULL,
258 0x1b1b0000001b1b1b, 0xf5f5000000f5f5f5, 0xe4e4000000e4e4e4, 258 0x1b1b0000001b1b1bULL, 0xf5f5000000f5f5f5ULL, 0xe4e4000000e4e4e4ULL,
259 0x0e0e0000000e0e0e, 0x7373000000737373, 0xaaaa000000aaaaaa, 259 0x0e0e0000000e0e0eULL, 0x7373000000737373ULL, 0xaaaa000000aaaaaaULL,
260 0xf1f1000000f1f1f1, 0xdddd000000dddddd, 0x5959000000595959, 260 0xf1f1000000f1f1f1ULL, 0xdddd000000ddddddULL, 0x5959000000595959ULL,
261 0x1414000000141414, 0x6c6c0000006c6c6c, 0x9292000000929292, 261 0x1414000000141414ULL, 0x6c6c0000006c6c6cULL, 0x9292000000929292ULL,
262 0x5454000000545454, 0xd0d0000000d0d0d0, 0x7878000000787878, 262 0x5454000000545454ULL, 0xd0d0000000d0d0d0ULL, 0x7878000000787878ULL,
263 0x7070000000707070, 0xe3e3000000e3e3e3, 0x4949000000494949, 263 0x7070000000707070ULL, 0xe3e3000000e3e3e3ULL, 0x4949000000494949ULL,
264 0x8080000000808080, 0x5050000000505050, 0xa7a7000000a7a7a7, 264 0x8080000000808080ULL, 0x5050000000505050ULL, 0xa7a7000000a7a7a7ULL,
265 0xf6f6000000f6f6f6, 0x7777000000777777, 0x9393000000939393, 265 0xf6f6000000f6f6f6ULL, 0x7777000000777777ULL, 0x9393000000939393ULL,
266 0x8686000000868686, 0x8383000000838383, 0x2a2a0000002a2a2a, 266 0x8686000000868686ULL, 0x8383000000838383ULL, 0x2a2a0000002a2a2aULL,
267 0xc7c7000000c7c7c7, 0x5b5b0000005b5b5b, 0xe9e9000000e9e9e9, 267 0xc7c7000000c7c7c7ULL, 0x5b5b0000005b5b5bULL, 0xe9e9000000e9e9e9ULL,
268 0xeeee000000eeeeee, 0x8f8f0000008f8f8f, 0x0101000000010101, 268 0xeeee000000eeeeeeULL, 0x8f8f0000008f8f8fULL, 0x0101000000010101ULL,
269 0x3d3d0000003d3d3d, 269 0x3d3d0000003d3d3dULL,
270}; 270};
271 271
272const u64 camellia_sp03303033[256] = { 272const u64 camellia_sp03303033[256] = {
273 0x0038380038003838, 0x0041410041004141, 0x0016160016001616, 273 0x0038380038003838ULL, 0x0041410041004141ULL, 0x0016160016001616ULL,
274 0x0076760076007676, 0x00d9d900d900d9d9, 0x0093930093009393, 274 0x0076760076007676ULL, 0x00d9d900d900d9d9ULL, 0x0093930093009393ULL,
275 0x0060600060006060, 0x00f2f200f200f2f2, 0x0072720072007272, 275 0x0060600060006060ULL, 0x00f2f200f200f2f2ULL, 0x0072720072007272ULL,
276 0x00c2c200c200c2c2, 0x00abab00ab00abab, 0x009a9a009a009a9a, 276 0x00c2c200c200c2c2ULL, 0x00abab00ab00ababULL, 0x009a9a009a009a9aULL,
277 0x0075750075007575, 0x0006060006000606, 0x0057570057005757, 277 0x0075750075007575ULL, 0x0006060006000606ULL, 0x0057570057005757ULL,
278 0x00a0a000a000a0a0, 0x0091910091009191, 0x00f7f700f700f7f7, 278 0x00a0a000a000a0a0ULL, 0x0091910091009191ULL, 0x00f7f700f700f7f7ULL,
279 0x00b5b500b500b5b5, 0x00c9c900c900c9c9, 0x00a2a200a200a2a2, 279 0x00b5b500b500b5b5ULL, 0x00c9c900c900c9c9ULL, 0x00a2a200a200a2a2ULL,
280 0x008c8c008c008c8c, 0x00d2d200d200d2d2, 0x0090900090009090, 280 0x008c8c008c008c8cULL, 0x00d2d200d200d2d2ULL, 0x0090900090009090ULL,
281 0x00f6f600f600f6f6, 0x0007070007000707, 0x00a7a700a700a7a7, 281 0x00f6f600f600f6f6ULL, 0x0007070007000707ULL, 0x00a7a700a700a7a7ULL,
282 0x0027270027002727, 0x008e8e008e008e8e, 0x00b2b200b200b2b2, 282 0x0027270027002727ULL, 0x008e8e008e008e8eULL, 0x00b2b200b200b2b2ULL,
283 0x0049490049004949, 0x00dede00de00dede, 0x0043430043004343, 283 0x0049490049004949ULL, 0x00dede00de00dedeULL, 0x0043430043004343ULL,
284 0x005c5c005c005c5c, 0x00d7d700d700d7d7, 0x00c7c700c700c7c7, 284 0x005c5c005c005c5cULL, 0x00d7d700d700d7d7ULL, 0x00c7c700c700c7c7ULL,
285 0x003e3e003e003e3e, 0x00f5f500f500f5f5, 0x008f8f008f008f8f, 285 0x003e3e003e003e3eULL, 0x00f5f500f500f5f5ULL, 0x008f8f008f008f8fULL,
286 0x0067670067006767, 0x001f1f001f001f1f, 0x0018180018001818, 286 0x0067670067006767ULL, 0x001f1f001f001f1fULL, 0x0018180018001818ULL,
287 0x006e6e006e006e6e, 0x00afaf00af00afaf, 0x002f2f002f002f2f, 287 0x006e6e006e006e6eULL, 0x00afaf00af00afafULL, 0x002f2f002f002f2fULL,
288 0x00e2e200e200e2e2, 0x0085850085008585, 0x000d0d000d000d0d, 288 0x00e2e200e200e2e2ULL, 0x0085850085008585ULL, 0x000d0d000d000d0dULL,
289 0x0053530053005353, 0x00f0f000f000f0f0, 0x009c9c009c009c9c, 289 0x0053530053005353ULL, 0x00f0f000f000f0f0ULL, 0x009c9c009c009c9cULL,
290 0x0065650065006565, 0x00eaea00ea00eaea, 0x00a3a300a300a3a3, 290 0x0065650065006565ULL, 0x00eaea00ea00eaeaULL, 0x00a3a300a300a3a3ULL,
291 0x00aeae00ae00aeae, 0x009e9e009e009e9e, 0x00ecec00ec00ecec, 291 0x00aeae00ae00aeaeULL, 0x009e9e009e009e9eULL, 0x00ecec00ec00ececULL,
292 0x0080800080008080, 0x002d2d002d002d2d, 0x006b6b006b006b6b, 292 0x0080800080008080ULL, 0x002d2d002d002d2dULL, 0x006b6b006b006b6bULL,
293 0x00a8a800a800a8a8, 0x002b2b002b002b2b, 0x0036360036003636, 293 0x00a8a800a800a8a8ULL, 0x002b2b002b002b2bULL, 0x0036360036003636ULL,
294 0x00a6a600a600a6a6, 0x00c5c500c500c5c5, 0x0086860086008686, 294 0x00a6a600a600a6a6ULL, 0x00c5c500c500c5c5ULL, 0x0086860086008686ULL,
295 0x004d4d004d004d4d, 0x0033330033003333, 0x00fdfd00fd00fdfd, 295 0x004d4d004d004d4dULL, 0x0033330033003333ULL, 0x00fdfd00fd00fdfdULL,
296 0x0066660066006666, 0x0058580058005858, 0x0096960096009696, 296 0x0066660066006666ULL, 0x0058580058005858ULL, 0x0096960096009696ULL,
297 0x003a3a003a003a3a, 0x0009090009000909, 0x0095950095009595, 297 0x003a3a003a003a3aULL, 0x0009090009000909ULL, 0x0095950095009595ULL,
298 0x0010100010001010, 0x0078780078007878, 0x00d8d800d800d8d8, 298 0x0010100010001010ULL, 0x0078780078007878ULL, 0x00d8d800d800d8d8ULL,
299 0x0042420042004242, 0x00cccc00cc00cccc, 0x00efef00ef00efef, 299 0x0042420042004242ULL, 0x00cccc00cc00ccccULL, 0x00efef00ef00efefULL,
300 0x0026260026002626, 0x00e5e500e500e5e5, 0x0061610061006161, 300 0x0026260026002626ULL, 0x00e5e500e500e5e5ULL, 0x0061610061006161ULL,
301 0x001a1a001a001a1a, 0x003f3f003f003f3f, 0x003b3b003b003b3b, 301 0x001a1a001a001a1aULL, 0x003f3f003f003f3fULL, 0x003b3b003b003b3bULL,
302 0x0082820082008282, 0x00b6b600b600b6b6, 0x00dbdb00db00dbdb, 302 0x0082820082008282ULL, 0x00b6b600b600b6b6ULL, 0x00dbdb00db00dbdbULL,
303 0x00d4d400d400d4d4, 0x0098980098009898, 0x00e8e800e800e8e8, 303 0x00d4d400d400d4d4ULL, 0x0098980098009898ULL, 0x00e8e800e800e8e8ULL,
304 0x008b8b008b008b8b, 0x0002020002000202, 0x00ebeb00eb00ebeb, 304 0x008b8b008b008b8bULL, 0x0002020002000202ULL, 0x00ebeb00eb00ebebULL,
305 0x000a0a000a000a0a, 0x002c2c002c002c2c, 0x001d1d001d001d1d, 305 0x000a0a000a000a0aULL, 0x002c2c002c002c2cULL, 0x001d1d001d001d1dULL,
306 0x00b0b000b000b0b0, 0x006f6f006f006f6f, 0x008d8d008d008d8d, 306 0x00b0b000b000b0b0ULL, 0x006f6f006f006f6fULL, 0x008d8d008d008d8dULL,
307 0x0088880088008888, 0x000e0e000e000e0e, 0x0019190019001919, 307 0x0088880088008888ULL, 0x000e0e000e000e0eULL, 0x0019190019001919ULL,
308 0x0087870087008787, 0x004e4e004e004e4e, 0x000b0b000b000b0b, 308 0x0087870087008787ULL, 0x004e4e004e004e4eULL, 0x000b0b000b000b0bULL,
309 0x00a9a900a900a9a9, 0x000c0c000c000c0c, 0x0079790079007979, 309 0x00a9a900a900a9a9ULL, 0x000c0c000c000c0cULL, 0x0079790079007979ULL,
310 0x0011110011001111, 0x007f7f007f007f7f, 0x0022220022002222, 310 0x0011110011001111ULL, 0x007f7f007f007f7fULL, 0x0022220022002222ULL,
311 0x00e7e700e700e7e7, 0x0059590059005959, 0x00e1e100e100e1e1, 311 0x00e7e700e700e7e7ULL, 0x0059590059005959ULL, 0x00e1e100e100e1e1ULL,
312 0x00dada00da00dada, 0x003d3d003d003d3d, 0x00c8c800c800c8c8, 312 0x00dada00da00dadaULL, 0x003d3d003d003d3dULL, 0x00c8c800c800c8c8ULL,
313 0x0012120012001212, 0x0004040004000404, 0x0074740074007474, 313 0x0012120012001212ULL, 0x0004040004000404ULL, 0x0074740074007474ULL,
314 0x0054540054005454, 0x0030300030003030, 0x007e7e007e007e7e, 314 0x0054540054005454ULL, 0x0030300030003030ULL, 0x007e7e007e007e7eULL,
315 0x00b4b400b400b4b4, 0x0028280028002828, 0x0055550055005555, 315 0x00b4b400b400b4b4ULL, 0x0028280028002828ULL, 0x0055550055005555ULL,
316 0x0068680068006868, 0x0050500050005050, 0x00bebe00be00bebe, 316 0x0068680068006868ULL, 0x0050500050005050ULL, 0x00bebe00be00bebeULL,
317 0x00d0d000d000d0d0, 0x00c4c400c400c4c4, 0x0031310031003131, 317 0x00d0d000d000d0d0ULL, 0x00c4c400c400c4c4ULL, 0x0031310031003131ULL,
318 0x00cbcb00cb00cbcb, 0x002a2a002a002a2a, 0x00adad00ad00adad, 318 0x00cbcb00cb00cbcbULL, 0x002a2a002a002a2aULL, 0x00adad00ad00adadULL,
319 0x000f0f000f000f0f, 0x00caca00ca00caca, 0x0070700070007070, 319 0x000f0f000f000f0fULL, 0x00caca00ca00cacaULL, 0x0070700070007070ULL,
320 0x00ffff00ff00ffff, 0x0032320032003232, 0x0069690069006969, 320 0x00ffff00ff00ffffULL, 0x0032320032003232ULL, 0x0069690069006969ULL,
321 0x0008080008000808, 0x0062620062006262, 0x0000000000000000, 321 0x0008080008000808ULL, 0x0062620062006262ULL, 0x0000000000000000ULL,
322 0x0024240024002424, 0x00d1d100d100d1d1, 0x00fbfb00fb00fbfb, 322 0x0024240024002424ULL, 0x00d1d100d100d1d1ULL, 0x00fbfb00fb00fbfbULL,
323 0x00baba00ba00baba, 0x00eded00ed00eded, 0x0045450045004545, 323 0x00baba00ba00babaULL, 0x00eded00ed00ededULL, 0x0045450045004545ULL,
324 0x0081810081008181, 0x0073730073007373, 0x006d6d006d006d6d, 324 0x0081810081008181ULL, 0x0073730073007373ULL, 0x006d6d006d006d6dULL,
325 0x0084840084008484, 0x009f9f009f009f9f, 0x00eeee00ee00eeee, 325 0x0084840084008484ULL, 0x009f9f009f009f9fULL, 0x00eeee00ee00eeeeULL,
326 0x004a4a004a004a4a, 0x00c3c300c300c3c3, 0x002e2e002e002e2e, 326 0x004a4a004a004a4aULL, 0x00c3c300c300c3c3ULL, 0x002e2e002e002e2eULL,
327 0x00c1c100c100c1c1, 0x0001010001000101, 0x00e6e600e600e6e6, 327 0x00c1c100c100c1c1ULL, 0x0001010001000101ULL, 0x00e6e600e600e6e6ULL,
328 0x0025250025002525, 0x0048480048004848, 0x0099990099009999, 328 0x0025250025002525ULL, 0x0048480048004848ULL, 0x0099990099009999ULL,
329 0x00b9b900b900b9b9, 0x00b3b300b300b3b3, 0x007b7b007b007b7b, 329 0x00b9b900b900b9b9ULL, 0x00b3b300b300b3b3ULL, 0x007b7b007b007b7bULL,
330 0x00f9f900f900f9f9, 0x00cece00ce00cece, 0x00bfbf00bf00bfbf, 330 0x00f9f900f900f9f9ULL, 0x00cece00ce00ceceULL, 0x00bfbf00bf00bfbfULL,
331 0x00dfdf00df00dfdf, 0x0071710071007171, 0x0029290029002929, 331 0x00dfdf00df00dfdfULL, 0x0071710071007171ULL, 0x0029290029002929ULL,
332 0x00cdcd00cd00cdcd, 0x006c6c006c006c6c, 0x0013130013001313, 332 0x00cdcd00cd00cdcdULL, 0x006c6c006c006c6cULL, 0x0013130013001313ULL,
333 0x0064640064006464, 0x009b9b009b009b9b, 0x0063630063006363, 333 0x0064640064006464ULL, 0x009b9b009b009b9bULL, 0x0063630063006363ULL,
334 0x009d9d009d009d9d, 0x00c0c000c000c0c0, 0x004b4b004b004b4b, 334 0x009d9d009d009d9dULL, 0x00c0c000c000c0c0ULL, 0x004b4b004b004b4bULL,
335 0x00b7b700b700b7b7, 0x00a5a500a500a5a5, 0x0089890089008989, 335 0x00b7b700b700b7b7ULL, 0x00a5a500a500a5a5ULL, 0x0089890089008989ULL,
336 0x005f5f005f005f5f, 0x00b1b100b100b1b1, 0x0017170017001717, 336 0x005f5f005f005f5fULL, 0x00b1b100b100b1b1ULL, 0x0017170017001717ULL,
337 0x00f4f400f400f4f4, 0x00bcbc00bc00bcbc, 0x00d3d300d300d3d3, 337 0x00f4f400f400f4f4ULL, 0x00bcbc00bc00bcbcULL, 0x00d3d300d300d3d3ULL,
338 0x0046460046004646, 0x00cfcf00cf00cfcf, 0x0037370037003737, 338 0x0046460046004646ULL, 0x00cfcf00cf00cfcfULL, 0x0037370037003737ULL,
339 0x005e5e005e005e5e, 0x0047470047004747, 0x0094940094009494, 339 0x005e5e005e005e5eULL, 0x0047470047004747ULL, 0x0094940094009494ULL,
340 0x00fafa00fa00fafa, 0x00fcfc00fc00fcfc, 0x005b5b005b005b5b, 340 0x00fafa00fa00fafaULL, 0x00fcfc00fc00fcfcULL, 0x005b5b005b005b5bULL,
341 0x0097970097009797, 0x00fefe00fe00fefe, 0x005a5a005a005a5a, 341 0x0097970097009797ULL, 0x00fefe00fe00fefeULL, 0x005a5a005a005a5aULL,
342 0x00acac00ac00acac, 0x003c3c003c003c3c, 0x004c4c004c004c4c, 342 0x00acac00ac00acacULL, 0x003c3c003c003c3cULL, 0x004c4c004c004c4cULL,
343 0x0003030003000303, 0x0035350035003535, 0x00f3f300f300f3f3, 343 0x0003030003000303ULL, 0x0035350035003535ULL, 0x00f3f300f300f3f3ULL,
344 0x0023230023002323, 0x00b8b800b800b8b8, 0x005d5d005d005d5d, 344 0x0023230023002323ULL, 0x00b8b800b800b8b8ULL, 0x005d5d005d005d5dULL,
345 0x006a6a006a006a6a, 0x0092920092009292, 0x00d5d500d500d5d5, 345 0x006a6a006a006a6aULL, 0x0092920092009292ULL, 0x00d5d500d500d5d5ULL,
346 0x0021210021002121, 0x0044440044004444, 0x0051510051005151, 346 0x0021210021002121ULL, 0x0044440044004444ULL, 0x0051510051005151ULL,
347 0x00c6c600c600c6c6, 0x007d7d007d007d7d, 0x0039390039003939, 347 0x00c6c600c600c6c6ULL, 0x007d7d007d007d7dULL, 0x0039390039003939ULL,
348 0x0083830083008383, 0x00dcdc00dc00dcdc, 0x00aaaa00aa00aaaa, 348 0x0083830083008383ULL, 0x00dcdc00dc00dcdcULL, 0x00aaaa00aa00aaaaULL,
349 0x007c7c007c007c7c, 0x0077770077007777, 0x0056560056005656, 349 0x007c7c007c007c7cULL, 0x0077770077007777ULL, 0x0056560056005656ULL,
350 0x0005050005000505, 0x001b1b001b001b1b, 0x00a4a400a400a4a4, 350 0x0005050005000505ULL, 0x001b1b001b001b1bULL, 0x00a4a400a400a4a4ULL,
351 0x0015150015001515, 0x0034340034003434, 0x001e1e001e001e1e, 351 0x0015150015001515ULL, 0x0034340034003434ULL, 0x001e1e001e001e1eULL,
352 0x001c1c001c001c1c, 0x00f8f800f800f8f8, 0x0052520052005252, 352 0x001c1c001c001c1cULL, 0x00f8f800f800f8f8ULL, 0x0052520052005252ULL,
353 0x0020200020002020, 0x0014140014001414, 0x00e9e900e900e9e9, 353 0x0020200020002020ULL, 0x0014140014001414ULL, 0x00e9e900e900e9e9ULL,
354 0x00bdbd00bd00bdbd, 0x00dddd00dd00dddd, 0x00e4e400e400e4e4, 354 0x00bdbd00bd00bdbdULL, 0x00dddd00dd00ddddULL, 0x00e4e400e400e4e4ULL,
355 0x00a1a100a100a1a1, 0x00e0e000e000e0e0, 0x008a8a008a008a8a, 355 0x00a1a100a100a1a1ULL, 0x00e0e000e000e0e0ULL, 0x008a8a008a008a8aULL,
356 0x00f1f100f100f1f1, 0x00d6d600d600d6d6, 0x007a7a007a007a7a, 356 0x00f1f100f100f1f1ULL, 0x00d6d600d600d6d6ULL, 0x007a7a007a007a7aULL,
357 0x00bbbb00bb00bbbb, 0x00e3e300e300e3e3, 0x0040400040004040, 357 0x00bbbb00bb00bbbbULL, 0x00e3e300e300e3e3ULL, 0x0040400040004040ULL,
358 0x004f4f004f004f4f, 358 0x004f4f004f004f4fULL,
359}; 359};
360 360
361const u64 camellia_sp00444404[256] = { 361const u64 camellia_sp00444404[256] = {
362 0x0000707070700070, 0x00002c2c2c2c002c, 0x0000b3b3b3b300b3, 362 0x0000707070700070ULL, 0x00002c2c2c2c002cULL, 0x0000b3b3b3b300b3ULL,
363 0x0000c0c0c0c000c0, 0x0000e4e4e4e400e4, 0x0000575757570057, 363 0x0000c0c0c0c000c0ULL, 0x0000e4e4e4e400e4ULL, 0x0000575757570057ULL,
364 0x0000eaeaeaea00ea, 0x0000aeaeaeae00ae, 0x0000232323230023, 364 0x0000eaeaeaea00eaULL, 0x0000aeaeaeae00aeULL, 0x0000232323230023ULL,
365 0x00006b6b6b6b006b, 0x0000454545450045, 0x0000a5a5a5a500a5, 365 0x00006b6b6b6b006bULL, 0x0000454545450045ULL, 0x0000a5a5a5a500a5ULL,
366 0x0000edededed00ed, 0x00004f4f4f4f004f, 0x00001d1d1d1d001d, 366 0x0000edededed00edULL, 0x00004f4f4f4f004fULL, 0x00001d1d1d1d001dULL,
367 0x0000929292920092, 0x0000868686860086, 0x0000afafafaf00af, 367 0x0000929292920092ULL, 0x0000868686860086ULL, 0x0000afafafaf00afULL,
368 0x00007c7c7c7c007c, 0x00001f1f1f1f001f, 0x00003e3e3e3e003e, 368 0x00007c7c7c7c007cULL, 0x00001f1f1f1f001fULL, 0x00003e3e3e3e003eULL,
369 0x0000dcdcdcdc00dc, 0x00005e5e5e5e005e, 0x00000b0b0b0b000b, 369 0x0000dcdcdcdc00dcULL, 0x00005e5e5e5e005eULL, 0x00000b0b0b0b000bULL,
370 0x0000a6a6a6a600a6, 0x0000393939390039, 0x0000d5d5d5d500d5, 370 0x0000a6a6a6a600a6ULL, 0x0000393939390039ULL, 0x0000d5d5d5d500d5ULL,
371 0x00005d5d5d5d005d, 0x0000d9d9d9d900d9, 0x00005a5a5a5a005a, 371 0x00005d5d5d5d005dULL, 0x0000d9d9d9d900d9ULL, 0x00005a5a5a5a005aULL,
372 0x0000515151510051, 0x00006c6c6c6c006c, 0x00008b8b8b8b008b, 372 0x0000515151510051ULL, 0x00006c6c6c6c006cULL, 0x00008b8b8b8b008bULL,
373 0x00009a9a9a9a009a, 0x0000fbfbfbfb00fb, 0x0000b0b0b0b000b0, 373 0x00009a9a9a9a009aULL, 0x0000fbfbfbfb00fbULL, 0x0000b0b0b0b000b0ULL,
374 0x0000747474740074, 0x00002b2b2b2b002b, 0x0000f0f0f0f000f0, 374 0x0000747474740074ULL, 0x00002b2b2b2b002bULL, 0x0000f0f0f0f000f0ULL,
375 0x0000848484840084, 0x0000dfdfdfdf00df, 0x0000cbcbcbcb00cb, 375 0x0000848484840084ULL, 0x0000dfdfdfdf00dfULL, 0x0000cbcbcbcb00cbULL,
376 0x0000343434340034, 0x0000767676760076, 0x00006d6d6d6d006d, 376 0x0000343434340034ULL, 0x0000767676760076ULL, 0x00006d6d6d6d006dULL,
377 0x0000a9a9a9a900a9, 0x0000d1d1d1d100d1, 0x0000040404040004, 377 0x0000a9a9a9a900a9ULL, 0x0000d1d1d1d100d1ULL, 0x0000040404040004ULL,
378 0x0000141414140014, 0x00003a3a3a3a003a, 0x0000dededede00de, 378 0x0000141414140014ULL, 0x00003a3a3a3a003aULL, 0x0000dededede00deULL,
379 0x0000111111110011, 0x0000323232320032, 0x00009c9c9c9c009c, 379 0x0000111111110011ULL, 0x0000323232320032ULL, 0x00009c9c9c9c009cULL,
380 0x0000535353530053, 0x0000f2f2f2f200f2, 0x0000fefefefe00fe, 380 0x0000535353530053ULL, 0x0000f2f2f2f200f2ULL, 0x0000fefefefe00feULL,
381 0x0000cfcfcfcf00cf, 0x0000c3c3c3c300c3, 0x00007a7a7a7a007a, 381 0x0000cfcfcfcf00cfULL, 0x0000c3c3c3c300c3ULL, 0x00007a7a7a7a007aULL,
382 0x0000242424240024, 0x0000e8e8e8e800e8, 0x0000606060600060, 382 0x0000242424240024ULL, 0x0000e8e8e8e800e8ULL, 0x0000606060600060ULL,
383 0x0000696969690069, 0x0000aaaaaaaa00aa, 0x0000a0a0a0a000a0, 383 0x0000696969690069ULL, 0x0000aaaaaaaa00aaULL, 0x0000a0a0a0a000a0ULL,
384 0x0000a1a1a1a100a1, 0x0000626262620062, 0x0000545454540054, 384 0x0000a1a1a1a100a1ULL, 0x0000626262620062ULL, 0x0000545454540054ULL,
385 0x00001e1e1e1e001e, 0x0000e0e0e0e000e0, 0x0000646464640064, 385 0x00001e1e1e1e001eULL, 0x0000e0e0e0e000e0ULL, 0x0000646464640064ULL,
386 0x0000101010100010, 0x0000000000000000, 0x0000a3a3a3a300a3, 386 0x0000101010100010ULL, 0x0000000000000000ULL, 0x0000a3a3a3a300a3ULL,
387 0x0000757575750075, 0x00008a8a8a8a008a, 0x0000e6e6e6e600e6, 387 0x0000757575750075ULL, 0x00008a8a8a8a008aULL, 0x0000e6e6e6e600e6ULL,
388 0x0000090909090009, 0x0000dddddddd00dd, 0x0000878787870087, 388 0x0000090909090009ULL, 0x0000dddddddd00ddULL, 0x0000878787870087ULL,
389 0x0000838383830083, 0x0000cdcdcdcd00cd, 0x0000909090900090, 389 0x0000838383830083ULL, 0x0000cdcdcdcd00cdULL, 0x0000909090900090ULL,
390 0x0000737373730073, 0x0000f6f6f6f600f6, 0x00009d9d9d9d009d, 390 0x0000737373730073ULL, 0x0000f6f6f6f600f6ULL, 0x00009d9d9d9d009dULL,
391 0x0000bfbfbfbf00bf, 0x0000525252520052, 0x0000d8d8d8d800d8, 391 0x0000bfbfbfbf00bfULL, 0x0000525252520052ULL, 0x0000d8d8d8d800d8ULL,
392 0x0000c8c8c8c800c8, 0x0000c6c6c6c600c6, 0x0000818181810081, 392 0x0000c8c8c8c800c8ULL, 0x0000c6c6c6c600c6ULL, 0x0000818181810081ULL,
393 0x00006f6f6f6f006f, 0x0000131313130013, 0x0000636363630063, 393 0x00006f6f6f6f006fULL, 0x0000131313130013ULL, 0x0000636363630063ULL,
394 0x0000e9e9e9e900e9, 0x0000a7a7a7a700a7, 0x00009f9f9f9f009f, 394 0x0000e9e9e9e900e9ULL, 0x0000a7a7a7a700a7ULL, 0x00009f9f9f9f009fULL,
395 0x0000bcbcbcbc00bc, 0x0000292929290029, 0x0000f9f9f9f900f9, 395 0x0000bcbcbcbc00bcULL, 0x0000292929290029ULL, 0x0000f9f9f9f900f9ULL,
396 0x00002f2f2f2f002f, 0x0000b4b4b4b400b4, 0x0000787878780078, 396 0x00002f2f2f2f002fULL, 0x0000b4b4b4b400b4ULL, 0x0000787878780078ULL,
397 0x0000060606060006, 0x0000e7e7e7e700e7, 0x0000717171710071, 397 0x0000060606060006ULL, 0x0000e7e7e7e700e7ULL, 0x0000717171710071ULL,
398 0x0000d4d4d4d400d4, 0x0000abababab00ab, 0x0000888888880088, 398 0x0000d4d4d4d400d4ULL, 0x0000abababab00abULL, 0x0000888888880088ULL,
399 0x00008d8d8d8d008d, 0x0000727272720072, 0x0000b9b9b9b900b9, 399 0x00008d8d8d8d008dULL, 0x0000727272720072ULL, 0x0000b9b9b9b900b9ULL,
400 0x0000f8f8f8f800f8, 0x0000acacacac00ac, 0x0000363636360036, 400 0x0000f8f8f8f800f8ULL, 0x0000acacacac00acULL, 0x0000363636360036ULL,
401 0x00002a2a2a2a002a, 0x00003c3c3c3c003c, 0x0000f1f1f1f100f1, 401 0x00002a2a2a2a002aULL, 0x00003c3c3c3c003cULL, 0x0000f1f1f1f100f1ULL,
402 0x0000404040400040, 0x0000d3d3d3d300d3, 0x0000bbbbbbbb00bb, 402 0x0000404040400040ULL, 0x0000d3d3d3d300d3ULL, 0x0000bbbbbbbb00bbULL,
403 0x0000434343430043, 0x0000151515150015, 0x0000adadadad00ad, 403 0x0000434343430043ULL, 0x0000151515150015ULL, 0x0000adadadad00adULL,
404 0x0000777777770077, 0x0000808080800080, 0x0000828282820082, 404 0x0000777777770077ULL, 0x0000808080800080ULL, 0x0000828282820082ULL,
405 0x0000ecececec00ec, 0x0000272727270027, 0x0000e5e5e5e500e5, 405 0x0000ecececec00ecULL, 0x0000272727270027ULL, 0x0000e5e5e5e500e5ULL,
406 0x0000858585850085, 0x0000353535350035, 0x00000c0c0c0c000c, 406 0x0000858585850085ULL, 0x0000353535350035ULL, 0x00000c0c0c0c000cULL,
407 0x0000414141410041, 0x0000efefefef00ef, 0x0000939393930093, 407 0x0000414141410041ULL, 0x0000efefefef00efULL, 0x0000939393930093ULL,
408 0x0000191919190019, 0x0000212121210021, 0x00000e0e0e0e000e, 408 0x0000191919190019ULL, 0x0000212121210021ULL, 0x00000e0e0e0e000eULL,
409 0x00004e4e4e4e004e, 0x0000656565650065, 0x0000bdbdbdbd00bd, 409 0x00004e4e4e4e004eULL, 0x0000656565650065ULL, 0x0000bdbdbdbd00bdULL,
410 0x0000b8b8b8b800b8, 0x00008f8f8f8f008f, 0x0000ebebebeb00eb, 410 0x0000b8b8b8b800b8ULL, 0x00008f8f8f8f008fULL, 0x0000ebebebeb00ebULL,
411 0x0000cececece00ce, 0x0000303030300030, 0x00005f5f5f5f005f, 411 0x0000cececece00ceULL, 0x0000303030300030ULL, 0x00005f5f5f5f005fULL,
412 0x0000c5c5c5c500c5, 0x00001a1a1a1a001a, 0x0000e1e1e1e100e1, 412 0x0000c5c5c5c500c5ULL, 0x00001a1a1a1a001aULL, 0x0000e1e1e1e100e1ULL,
413 0x0000cacacaca00ca, 0x0000474747470047, 0x00003d3d3d3d003d, 413 0x0000cacacaca00caULL, 0x0000474747470047ULL, 0x00003d3d3d3d003dULL,
414 0x0000010101010001, 0x0000d6d6d6d600d6, 0x0000565656560056, 414 0x0000010101010001ULL, 0x0000d6d6d6d600d6ULL, 0x0000565656560056ULL,
415 0x00004d4d4d4d004d, 0x00000d0d0d0d000d, 0x0000666666660066, 415 0x00004d4d4d4d004dULL, 0x00000d0d0d0d000dULL, 0x0000666666660066ULL,
416 0x0000cccccccc00cc, 0x00002d2d2d2d002d, 0x0000121212120012, 416 0x0000cccccccc00ccULL, 0x00002d2d2d2d002dULL, 0x0000121212120012ULL,
417 0x0000202020200020, 0x0000b1b1b1b100b1, 0x0000999999990099, 417 0x0000202020200020ULL, 0x0000b1b1b1b100b1ULL, 0x0000999999990099ULL,
418 0x00004c4c4c4c004c, 0x0000c2c2c2c200c2, 0x00007e7e7e7e007e, 418 0x00004c4c4c4c004cULL, 0x0000c2c2c2c200c2ULL, 0x00007e7e7e7e007eULL,
419 0x0000050505050005, 0x0000b7b7b7b700b7, 0x0000313131310031, 419 0x0000050505050005ULL, 0x0000b7b7b7b700b7ULL, 0x0000313131310031ULL,
420 0x0000171717170017, 0x0000d7d7d7d700d7, 0x0000585858580058, 420 0x0000171717170017ULL, 0x0000d7d7d7d700d7ULL, 0x0000585858580058ULL,
421 0x0000616161610061, 0x00001b1b1b1b001b, 0x00001c1c1c1c001c, 421 0x0000616161610061ULL, 0x00001b1b1b1b001bULL, 0x00001c1c1c1c001cULL,
422 0x00000f0f0f0f000f, 0x0000161616160016, 0x0000181818180018, 422 0x00000f0f0f0f000fULL, 0x0000161616160016ULL, 0x0000181818180018ULL,
423 0x0000222222220022, 0x0000444444440044, 0x0000b2b2b2b200b2, 423 0x0000222222220022ULL, 0x0000444444440044ULL, 0x0000b2b2b2b200b2ULL,
424 0x0000b5b5b5b500b5, 0x0000919191910091, 0x0000080808080008, 424 0x0000b5b5b5b500b5ULL, 0x0000919191910091ULL, 0x0000080808080008ULL,
425 0x0000a8a8a8a800a8, 0x0000fcfcfcfc00fc, 0x0000505050500050, 425 0x0000a8a8a8a800a8ULL, 0x0000fcfcfcfc00fcULL, 0x0000505050500050ULL,
426 0x0000d0d0d0d000d0, 0x00007d7d7d7d007d, 0x0000898989890089, 426 0x0000d0d0d0d000d0ULL, 0x00007d7d7d7d007dULL, 0x0000898989890089ULL,
427 0x0000979797970097, 0x00005b5b5b5b005b, 0x0000959595950095, 427 0x0000979797970097ULL, 0x00005b5b5b5b005bULL, 0x0000959595950095ULL,
428 0x0000ffffffff00ff, 0x0000d2d2d2d200d2, 0x0000c4c4c4c400c4, 428 0x0000ffffffff00ffULL, 0x0000d2d2d2d200d2ULL, 0x0000c4c4c4c400c4ULL,
429 0x0000484848480048, 0x0000f7f7f7f700f7, 0x0000dbdbdbdb00db, 429 0x0000484848480048ULL, 0x0000f7f7f7f700f7ULL, 0x0000dbdbdbdb00dbULL,
430 0x0000030303030003, 0x0000dadadada00da, 0x00003f3f3f3f003f, 430 0x0000030303030003ULL, 0x0000dadadada00daULL, 0x00003f3f3f3f003fULL,
431 0x0000949494940094, 0x00005c5c5c5c005c, 0x0000020202020002, 431 0x0000949494940094ULL, 0x00005c5c5c5c005cULL, 0x0000020202020002ULL,
432 0x00004a4a4a4a004a, 0x0000333333330033, 0x0000676767670067, 432 0x00004a4a4a4a004aULL, 0x0000333333330033ULL, 0x0000676767670067ULL,
433 0x0000f3f3f3f300f3, 0x00007f7f7f7f007f, 0x0000e2e2e2e200e2, 433 0x0000f3f3f3f300f3ULL, 0x00007f7f7f7f007fULL, 0x0000e2e2e2e200e2ULL,
434 0x00009b9b9b9b009b, 0x0000262626260026, 0x0000373737370037, 434 0x00009b9b9b9b009bULL, 0x0000262626260026ULL, 0x0000373737370037ULL,
435 0x00003b3b3b3b003b, 0x0000969696960096, 0x00004b4b4b4b004b, 435 0x00003b3b3b3b003bULL, 0x0000969696960096ULL, 0x00004b4b4b4b004bULL,
436 0x0000bebebebe00be, 0x00002e2e2e2e002e, 0x0000797979790079, 436 0x0000bebebebe00beULL, 0x00002e2e2e2e002eULL, 0x0000797979790079ULL,
437 0x00008c8c8c8c008c, 0x00006e6e6e6e006e, 0x00008e8e8e8e008e, 437 0x00008c8c8c8c008cULL, 0x00006e6e6e6e006eULL, 0x00008e8e8e8e008eULL,
438 0x0000f5f5f5f500f5, 0x0000b6b6b6b600b6, 0x0000fdfdfdfd00fd, 438 0x0000f5f5f5f500f5ULL, 0x0000b6b6b6b600b6ULL, 0x0000fdfdfdfd00fdULL,
439 0x0000595959590059, 0x0000989898980098, 0x00006a6a6a6a006a, 439 0x0000595959590059ULL, 0x0000989898980098ULL, 0x00006a6a6a6a006aULL,
440 0x0000464646460046, 0x0000babababa00ba, 0x0000252525250025, 440 0x0000464646460046ULL, 0x0000babababa00baULL, 0x0000252525250025ULL,
441 0x0000424242420042, 0x0000a2a2a2a200a2, 0x0000fafafafa00fa, 441 0x0000424242420042ULL, 0x0000a2a2a2a200a2ULL, 0x0000fafafafa00faULL,
442 0x0000070707070007, 0x0000555555550055, 0x0000eeeeeeee00ee, 442 0x0000070707070007ULL, 0x0000555555550055ULL, 0x0000eeeeeeee00eeULL,
443 0x00000a0a0a0a000a, 0x0000494949490049, 0x0000686868680068, 443 0x00000a0a0a0a000aULL, 0x0000494949490049ULL, 0x0000686868680068ULL,
444 0x0000383838380038, 0x0000a4a4a4a400a4, 0x0000282828280028, 444 0x0000383838380038ULL, 0x0000a4a4a4a400a4ULL, 0x0000282828280028ULL,
445 0x00007b7b7b7b007b, 0x0000c9c9c9c900c9, 0x0000c1c1c1c100c1, 445 0x00007b7b7b7b007bULL, 0x0000c9c9c9c900c9ULL, 0x0000c1c1c1c100c1ULL,
446 0x0000e3e3e3e300e3, 0x0000f4f4f4f400f4, 0x0000c7c7c7c700c7, 446 0x0000e3e3e3e300e3ULL, 0x0000f4f4f4f400f4ULL, 0x0000c7c7c7c700c7ULL,
447 0x00009e9e9e9e009e, 447 0x00009e9e9e9e009eULL,
448}; 448};
449 449
450const u64 camellia_sp02220222[256] = { 450const u64 camellia_sp02220222[256] = {
451 0x00e0e0e000e0e0e0, 0x0005050500050505, 0x0058585800585858, 451 0x00e0e0e000e0e0e0ULL, 0x0005050500050505ULL, 0x0058585800585858ULL,
452 0x00d9d9d900d9d9d9, 0x0067676700676767, 0x004e4e4e004e4e4e, 452 0x00d9d9d900d9d9d9ULL, 0x0067676700676767ULL, 0x004e4e4e004e4e4eULL,
453 0x0081818100818181, 0x00cbcbcb00cbcbcb, 0x00c9c9c900c9c9c9, 453 0x0081818100818181ULL, 0x00cbcbcb00cbcbcbULL, 0x00c9c9c900c9c9c9ULL,
454 0x000b0b0b000b0b0b, 0x00aeaeae00aeaeae, 0x006a6a6a006a6a6a, 454 0x000b0b0b000b0b0bULL, 0x00aeaeae00aeaeaeULL, 0x006a6a6a006a6a6aULL,
455 0x00d5d5d500d5d5d5, 0x0018181800181818, 0x005d5d5d005d5d5d, 455 0x00d5d5d500d5d5d5ULL, 0x0018181800181818ULL, 0x005d5d5d005d5d5dULL,
456 0x0082828200828282, 0x0046464600464646, 0x00dfdfdf00dfdfdf, 456 0x0082828200828282ULL, 0x0046464600464646ULL, 0x00dfdfdf00dfdfdfULL,
457 0x00d6d6d600d6d6d6, 0x0027272700272727, 0x008a8a8a008a8a8a, 457 0x00d6d6d600d6d6d6ULL, 0x0027272700272727ULL, 0x008a8a8a008a8a8aULL,
458 0x0032323200323232, 0x004b4b4b004b4b4b, 0x0042424200424242, 458 0x0032323200323232ULL, 0x004b4b4b004b4b4bULL, 0x0042424200424242ULL,
459 0x00dbdbdb00dbdbdb, 0x001c1c1c001c1c1c, 0x009e9e9e009e9e9e, 459 0x00dbdbdb00dbdbdbULL, 0x001c1c1c001c1c1cULL, 0x009e9e9e009e9e9eULL,
460 0x009c9c9c009c9c9c, 0x003a3a3a003a3a3a, 0x00cacaca00cacaca, 460 0x009c9c9c009c9c9cULL, 0x003a3a3a003a3a3aULL, 0x00cacaca00cacacaULL,
461 0x0025252500252525, 0x007b7b7b007b7b7b, 0x000d0d0d000d0d0d, 461 0x0025252500252525ULL, 0x007b7b7b007b7b7bULL, 0x000d0d0d000d0d0dULL,
462 0x0071717100717171, 0x005f5f5f005f5f5f, 0x001f1f1f001f1f1f, 462 0x0071717100717171ULL, 0x005f5f5f005f5f5fULL, 0x001f1f1f001f1f1fULL,
463 0x00f8f8f800f8f8f8, 0x00d7d7d700d7d7d7, 0x003e3e3e003e3e3e, 463 0x00f8f8f800f8f8f8ULL, 0x00d7d7d700d7d7d7ULL, 0x003e3e3e003e3e3eULL,
464 0x009d9d9d009d9d9d, 0x007c7c7c007c7c7c, 0x0060606000606060, 464 0x009d9d9d009d9d9dULL, 0x007c7c7c007c7c7cULL, 0x0060606000606060ULL,
465 0x00b9b9b900b9b9b9, 0x00bebebe00bebebe, 0x00bcbcbc00bcbcbc, 465 0x00b9b9b900b9b9b9ULL, 0x00bebebe00bebebeULL, 0x00bcbcbc00bcbcbcULL,
466 0x008b8b8b008b8b8b, 0x0016161600161616, 0x0034343400343434, 466 0x008b8b8b008b8b8bULL, 0x0016161600161616ULL, 0x0034343400343434ULL,
467 0x004d4d4d004d4d4d, 0x00c3c3c300c3c3c3, 0x0072727200727272, 467 0x004d4d4d004d4d4dULL, 0x00c3c3c300c3c3c3ULL, 0x0072727200727272ULL,
468 0x0095959500959595, 0x00ababab00ababab, 0x008e8e8e008e8e8e, 468 0x0095959500959595ULL, 0x00ababab00abababULL, 0x008e8e8e008e8e8eULL,
469 0x00bababa00bababa, 0x007a7a7a007a7a7a, 0x00b3b3b300b3b3b3, 469 0x00bababa00bababaULL, 0x007a7a7a007a7a7aULL, 0x00b3b3b300b3b3b3ULL,
470 0x0002020200020202, 0x00b4b4b400b4b4b4, 0x00adadad00adadad, 470 0x0002020200020202ULL, 0x00b4b4b400b4b4b4ULL, 0x00adadad00adadadULL,
471 0x00a2a2a200a2a2a2, 0x00acacac00acacac, 0x00d8d8d800d8d8d8, 471 0x00a2a2a200a2a2a2ULL, 0x00acacac00acacacULL, 0x00d8d8d800d8d8d8ULL,
472 0x009a9a9a009a9a9a, 0x0017171700171717, 0x001a1a1a001a1a1a, 472 0x009a9a9a009a9a9aULL, 0x0017171700171717ULL, 0x001a1a1a001a1a1aULL,
473 0x0035353500353535, 0x00cccccc00cccccc, 0x00f7f7f700f7f7f7, 473 0x0035353500353535ULL, 0x00cccccc00ccccccULL, 0x00f7f7f700f7f7f7ULL,
474 0x0099999900999999, 0x0061616100616161, 0x005a5a5a005a5a5a, 474 0x0099999900999999ULL, 0x0061616100616161ULL, 0x005a5a5a005a5a5aULL,
475 0x00e8e8e800e8e8e8, 0x0024242400242424, 0x0056565600565656, 475 0x00e8e8e800e8e8e8ULL, 0x0024242400242424ULL, 0x0056565600565656ULL,
476 0x0040404000404040, 0x00e1e1e100e1e1e1, 0x0063636300636363, 476 0x0040404000404040ULL, 0x00e1e1e100e1e1e1ULL, 0x0063636300636363ULL,
477 0x0009090900090909, 0x0033333300333333, 0x00bfbfbf00bfbfbf, 477 0x0009090900090909ULL, 0x0033333300333333ULL, 0x00bfbfbf00bfbfbfULL,
478 0x0098989800989898, 0x0097979700979797, 0x0085858500858585, 478 0x0098989800989898ULL, 0x0097979700979797ULL, 0x0085858500858585ULL,
479 0x0068686800686868, 0x00fcfcfc00fcfcfc, 0x00ececec00ececec, 479 0x0068686800686868ULL, 0x00fcfcfc00fcfcfcULL, 0x00ececec00ecececULL,
480 0x000a0a0a000a0a0a, 0x00dadada00dadada, 0x006f6f6f006f6f6f, 480 0x000a0a0a000a0a0aULL, 0x00dadada00dadadaULL, 0x006f6f6f006f6f6fULL,
481 0x0053535300535353, 0x0062626200626262, 0x00a3a3a300a3a3a3, 481 0x0053535300535353ULL, 0x0062626200626262ULL, 0x00a3a3a300a3a3a3ULL,
482 0x002e2e2e002e2e2e, 0x0008080800080808, 0x00afafaf00afafaf, 482 0x002e2e2e002e2e2eULL, 0x0008080800080808ULL, 0x00afafaf00afafafULL,
483 0x0028282800282828, 0x00b0b0b000b0b0b0, 0x0074747400747474, 483 0x0028282800282828ULL, 0x00b0b0b000b0b0b0ULL, 0x0074747400747474ULL,
484 0x00c2c2c200c2c2c2, 0x00bdbdbd00bdbdbd, 0x0036363600363636, 484 0x00c2c2c200c2c2c2ULL, 0x00bdbdbd00bdbdbdULL, 0x0036363600363636ULL,
485 0x0022222200222222, 0x0038383800383838, 0x0064646400646464, 485 0x0022222200222222ULL, 0x0038383800383838ULL, 0x0064646400646464ULL,
486 0x001e1e1e001e1e1e, 0x0039393900393939, 0x002c2c2c002c2c2c, 486 0x001e1e1e001e1e1eULL, 0x0039393900393939ULL, 0x002c2c2c002c2c2cULL,
487 0x00a6a6a600a6a6a6, 0x0030303000303030, 0x00e5e5e500e5e5e5, 487 0x00a6a6a600a6a6a6ULL, 0x0030303000303030ULL, 0x00e5e5e500e5e5e5ULL,
488 0x0044444400444444, 0x00fdfdfd00fdfdfd, 0x0088888800888888, 488 0x0044444400444444ULL, 0x00fdfdfd00fdfdfdULL, 0x0088888800888888ULL,
489 0x009f9f9f009f9f9f, 0x0065656500656565, 0x0087878700878787, 489 0x009f9f9f009f9f9fULL, 0x0065656500656565ULL, 0x0087878700878787ULL,
490 0x006b6b6b006b6b6b, 0x00f4f4f400f4f4f4, 0x0023232300232323, 490 0x006b6b6b006b6b6bULL, 0x00f4f4f400f4f4f4ULL, 0x0023232300232323ULL,
491 0x0048484800484848, 0x0010101000101010, 0x00d1d1d100d1d1d1, 491 0x0048484800484848ULL, 0x0010101000101010ULL, 0x00d1d1d100d1d1d1ULL,
492 0x0051515100515151, 0x00c0c0c000c0c0c0, 0x00f9f9f900f9f9f9, 492 0x0051515100515151ULL, 0x00c0c0c000c0c0c0ULL, 0x00f9f9f900f9f9f9ULL,
493 0x00d2d2d200d2d2d2, 0x00a0a0a000a0a0a0, 0x0055555500555555, 493 0x00d2d2d200d2d2d2ULL, 0x00a0a0a000a0a0a0ULL, 0x0055555500555555ULL,
494 0x00a1a1a100a1a1a1, 0x0041414100414141, 0x00fafafa00fafafa, 494 0x00a1a1a100a1a1a1ULL, 0x0041414100414141ULL, 0x00fafafa00fafafaULL,
495 0x0043434300434343, 0x0013131300131313, 0x00c4c4c400c4c4c4, 495 0x0043434300434343ULL, 0x0013131300131313ULL, 0x00c4c4c400c4c4c4ULL,
496 0x002f2f2f002f2f2f, 0x00a8a8a800a8a8a8, 0x00b6b6b600b6b6b6, 496 0x002f2f2f002f2f2fULL, 0x00a8a8a800a8a8a8ULL, 0x00b6b6b600b6b6b6ULL,
497 0x003c3c3c003c3c3c, 0x002b2b2b002b2b2b, 0x00c1c1c100c1c1c1, 497 0x003c3c3c003c3c3cULL, 0x002b2b2b002b2b2bULL, 0x00c1c1c100c1c1c1ULL,
498 0x00ffffff00ffffff, 0x00c8c8c800c8c8c8, 0x00a5a5a500a5a5a5, 498 0x00ffffff00ffffffULL, 0x00c8c8c800c8c8c8ULL, 0x00a5a5a500a5a5a5ULL,
499 0x0020202000202020, 0x0089898900898989, 0x0000000000000000, 499 0x0020202000202020ULL, 0x0089898900898989ULL, 0x0000000000000000ULL,
500 0x0090909000909090, 0x0047474700474747, 0x00efefef00efefef, 500 0x0090909000909090ULL, 0x0047474700474747ULL, 0x00efefef00efefefULL,
501 0x00eaeaea00eaeaea, 0x00b7b7b700b7b7b7, 0x0015151500151515, 501 0x00eaeaea00eaeaeaULL, 0x00b7b7b700b7b7b7ULL, 0x0015151500151515ULL,
502 0x0006060600060606, 0x00cdcdcd00cdcdcd, 0x00b5b5b500b5b5b5, 502 0x0006060600060606ULL, 0x00cdcdcd00cdcdcdULL, 0x00b5b5b500b5b5b5ULL,
503 0x0012121200121212, 0x007e7e7e007e7e7e, 0x00bbbbbb00bbbbbb, 503 0x0012121200121212ULL, 0x007e7e7e007e7e7eULL, 0x00bbbbbb00bbbbbbULL,
504 0x0029292900292929, 0x000f0f0f000f0f0f, 0x00b8b8b800b8b8b8, 504 0x0029292900292929ULL, 0x000f0f0f000f0f0fULL, 0x00b8b8b800b8b8b8ULL,
505 0x0007070700070707, 0x0004040400040404, 0x009b9b9b009b9b9b, 505 0x0007070700070707ULL, 0x0004040400040404ULL, 0x009b9b9b009b9b9bULL,
506 0x0094949400949494, 0x0021212100212121, 0x0066666600666666, 506 0x0094949400949494ULL, 0x0021212100212121ULL, 0x0066666600666666ULL,
507 0x00e6e6e600e6e6e6, 0x00cecece00cecece, 0x00ededed00ededed, 507 0x00e6e6e600e6e6e6ULL, 0x00cecece00cececeULL, 0x00ededed00edededULL,
508 0x00e7e7e700e7e7e7, 0x003b3b3b003b3b3b, 0x00fefefe00fefefe, 508 0x00e7e7e700e7e7e7ULL, 0x003b3b3b003b3b3bULL, 0x00fefefe00fefefeULL,
509 0x007f7f7f007f7f7f, 0x00c5c5c500c5c5c5, 0x00a4a4a400a4a4a4, 509 0x007f7f7f007f7f7fULL, 0x00c5c5c500c5c5c5ULL, 0x00a4a4a400a4a4a4ULL,
510 0x0037373700373737, 0x00b1b1b100b1b1b1, 0x004c4c4c004c4c4c, 510 0x0037373700373737ULL, 0x00b1b1b100b1b1b1ULL, 0x004c4c4c004c4c4cULL,
511 0x0091919100919191, 0x006e6e6e006e6e6e, 0x008d8d8d008d8d8d, 511 0x0091919100919191ULL, 0x006e6e6e006e6e6eULL, 0x008d8d8d008d8d8dULL,
512 0x0076767600767676, 0x0003030300030303, 0x002d2d2d002d2d2d, 512 0x0076767600767676ULL, 0x0003030300030303ULL, 0x002d2d2d002d2d2dULL,
513 0x00dedede00dedede, 0x0096969600969696, 0x0026262600262626, 513 0x00dedede00dededeULL, 0x0096969600969696ULL, 0x0026262600262626ULL,
514 0x007d7d7d007d7d7d, 0x00c6c6c600c6c6c6, 0x005c5c5c005c5c5c, 514 0x007d7d7d007d7d7dULL, 0x00c6c6c600c6c6c6ULL, 0x005c5c5c005c5c5cULL,
515 0x00d3d3d300d3d3d3, 0x00f2f2f200f2f2f2, 0x004f4f4f004f4f4f, 515 0x00d3d3d300d3d3d3ULL, 0x00f2f2f200f2f2f2ULL, 0x004f4f4f004f4f4fULL,
516 0x0019191900191919, 0x003f3f3f003f3f3f, 0x00dcdcdc00dcdcdc, 516 0x0019191900191919ULL, 0x003f3f3f003f3f3fULL, 0x00dcdcdc00dcdcdcULL,
517 0x0079797900797979, 0x001d1d1d001d1d1d, 0x0052525200525252, 517 0x0079797900797979ULL, 0x001d1d1d001d1d1dULL, 0x0052525200525252ULL,
518 0x00ebebeb00ebebeb, 0x00f3f3f300f3f3f3, 0x006d6d6d006d6d6d, 518 0x00ebebeb00ebebebULL, 0x00f3f3f300f3f3f3ULL, 0x006d6d6d006d6d6dULL,
519 0x005e5e5e005e5e5e, 0x00fbfbfb00fbfbfb, 0x0069696900696969, 519 0x005e5e5e005e5e5eULL, 0x00fbfbfb00fbfbfbULL, 0x0069696900696969ULL,
520 0x00b2b2b200b2b2b2, 0x00f0f0f000f0f0f0, 0x0031313100313131, 520 0x00b2b2b200b2b2b2ULL, 0x00f0f0f000f0f0f0ULL, 0x0031313100313131ULL,
521 0x000c0c0c000c0c0c, 0x00d4d4d400d4d4d4, 0x00cfcfcf00cfcfcf, 521 0x000c0c0c000c0c0cULL, 0x00d4d4d400d4d4d4ULL, 0x00cfcfcf00cfcfcfULL,
522 0x008c8c8c008c8c8c, 0x00e2e2e200e2e2e2, 0x0075757500757575, 522 0x008c8c8c008c8c8cULL, 0x00e2e2e200e2e2e2ULL, 0x0075757500757575ULL,
523 0x00a9a9a900a9a9a9, 0x004a4a4a004a4a4a, 0x0057575700575757, 523 0x00a9a9a900a9a9a9ULL, 0x004a4a4a004a4a4aULL, 0x0057575700575757ULL,
524 0x0084848400848484, 0x0011111100111111, 0x0045454500454545, 524 0x0084848400848484ULL, 0x0011111100111111ULL, 0x0045454500454545ULL,
525 0x001b1b1b001b1b1b, 0x00f5f5f500f5f5f5, 0x00e4e4e400e4e4e4, 525 0x001b1b1b001b1b1bULL, 0x00f5f5f500f5f5f5ULL, 0x00e4e4e400e4e4e4ULL,
526 0x000e0e0e000e0e0e, 0x0073737300737373, 0x00aaaaaa00aaaaaa, 526 0x000e0e0e000e0e0eULL, 0x0073737300737373ULL, 0x00aaaaaa00aaaaaaULL,
527 0x00f1f1f100f1f1f1, 0x00dddddd00dddddd, 0x0059595900595959, 527 0x00f1f1f100f1f1f1ULL, 0x00dddddd00ddddddULL, 0x0059595900595959ULL,
528 0x0014141400141414, 0x006c6c6c006c6c6c, 0x0092929200929292, 528 0x0014141400141414ULL, 0x006c6c6c006c6c6cULL, 0x0092929200929292ULL,
529 0x0054545400545454, 0x00d0d0d000d0d0d0, 0x0078787800787878, 529 0x0054545400545454ULL, 0x00d0d0d000d0d0d0ULL, 0x0078787800787878ULL,
530 0x0070707000707070, 0x00e3e3e300e3e3e3, 0x0049494900494949, 530 0x0070707000707070ULL, 0x00e3e3e300e3e3e3ULL, 0x0049494900494949ULL,
531 0x0080808000808080, 0x0050505000505050, 0x00a7a7a700a7a7a7, 531 0x0080808000808080ULL, 0x0050505000505050ULL, 0x00a7a7a700a7a7a7ULL,
532 0x00f6f6f600f6f6f6, 0x0077777700777777, 0x0093939300939393, 532 0x00f6f6f600f6f6f6ULL, 0x0077777700777777ULL, 0x0093939300939393ULL,
533 0x0086868600868686, 0x0083838300838383, 0x002a2a2a002a2a2a, 533 0x0086868600868686ULL, 0x0083838300838383ULL, 0x002a2a2a002a2a2aULL,
534 0x00c7c7c700c7c7c7, 0x005b5b5b005b5b5b, 0x00e9e9e900e9e9e9, 534 0x00c7c7c700c7c7c7ULL, 0x005b5b5b005b5b5bULL, 0x00e9e9e900e9e9e9ULL,
535 0x00eeeeee00eeeeee, 0x008f8f8f008f8f8f, 0x0001010100010101, 535 0x00eeeeee00eeeeeeULL, 0x008f8f8f008f8f8fULL, 0x0001010100010101ULL,
536 0x003d3d3d003d3d3d, 536 0x003d3d3d003d3d3dULL,
537}; 537};
538 538
539const u64 camellia_sp30333033[256] = { 539const u64 camellia_sp30333033[256] = {
540 0x3800383838003838, 0x4100414141004141, 0x1600161616001616, 540 0x3800383838003838ULL, 0x4100414141004141ULL, 0x1600161616001616ULL,
541 0x7600767676007676, 0xd900d9d9d900d9d9, 0x9300939393009393, 541 0x7600767676007676ULL, 0xd900d9d9d900d9d9ULL, 0x9300939393009393ULL,
542 0x6000606060006060, 0xf200f2f2f200f2f2, 0x7200727272007272, 542 0x6000606060006060ULL, 0xf200f2f2f200f2f2ULL, 0x7200727272007272ULL,
543 0xc200c2c2c200c2c2, 0xab00ababab00abab, 0x9a009a9a9a009a9a, 543 0xc200c2c2c200c2c2ULL, 0xab00ababab00ababULL, 0x9a009a9a9a009a9aULL,
544 0x7500757575007575, 0x0600060606000606, 0x5700575757005757, 544 0x7500757575007575ULL, 0x0600060606000606ULL, 0x5700575757005757ULL,
545 0xa000a0a0a000a0a0, 0x9100919191009191, 0xf700f7f7f700f7f7, 545 0xa000a0a0a000a0a0ULL, 0x9100919191009191ULL, 0xf700f7f7f700f7f7ULL,
546 0xb500b5b5b500b5b5, 0xc900c9c9c900c9c9, 0xa200a2a2a200a2a2, 546 0xb500b5b5b500b5b5ULL, 0xc900c9c9c900c9c9ULL, 0xa200a2a2a200a2a2ULL,
547 0x8c008c8c8c008c8c, 0xd200d2d2d200d2d2, 0x9000909090009090, 547 0x8c008c8c8c008c8cULL, 0xd200d2d2d200d2d2ULL, 0x9000909090009090ULL,
548 0xf600f6f6f600f6f6, 0x0700070707000707, 0xa700a7a7a700a7a7, 548 0xf600f6f6f600f6f6ULL, 0x0700070707000707ULL, 0xa700a7a7a700a7a7ULL,
549 0x2700272727002727, 0x8e008e8e8e008e8e, 0xb200b2b2b200b2b2, 549 0x2700272727002727ULL, 0x8e008e8e8e008e8eULL, 0xb200b2b2b200b2b2ULL,
550 0x4900494949004949, 0xde00dedede00dede, 0x4300434343004343, 550 0x4900494949004949ULL, 0xde00dedede00dedeULL, 0x4300434343004343ULL,
551 0x5c005c5c5c005c5c, 0xd700d7d7d700d7d7, 0xc700c7c7c700c7c7, 551 0x5c005c5c5c005c5cULL, 0xd700d7d7d700d7d7ULL, 0xc700c7c7c700c7c7ULL,
552 0x3e003e3e3e003e3e, 0xf500f5f5f500f5f5, 0x8f008f8f8f008f8f, 552 0x3e003e3e3e003e3eULL, 0xf500f5f5f500f5f5ULL, 0x8f008f8f8f008f8fULL,
553 0x6700676767006767, 0x1f001f1f1f001f1f, 0x1800181818001818, 553 0x6700676767006767ULL, 0x1f001f1f1f001f1fULL, 0x1800181818001818ULL,
554 0x6e006e6e6e006e6e, 0xaf00afafaf00afaf, 0x2f002f2f2f002f2f, 554 0x6e006e6e6e006e6eULL, 0xaf00afafaf00afafULL, 0x2f002f2f2f002f2fULL,
555 0xe200e2e2e200e2e2, 0x8500858585008585, 0x0d000d0d0d000d0d, 555 0xe200e2e2e200e2e2ULL, 0x8500858585008585ULL, 0x0d000d0d0d000d0dULL,
556 0x5300535353005353, 0xf000f0f0f000f0f0, 0x9c009c9c9c009c9c, 556 0x5300535353005353ULL, 0xf000f0f0f000f0f0ULL, 0x9c009c9c9c009c9cULL,
557 0x6500656565006565, 0xea00eaeaea00eaea, 0xa300a3a3a300a3a3, 557 0x6500656565006565ULL, 0xea00eaeaea00eaeaULL, 0xa300a3a3a300a3a3ULL,
558 0xae00aeaeae00aeae, 0x9e009e9e9e009e9e, 0xec00ececec00ecec, 558 0xae00aeaeae00aeaeULL, 0x9e009e9e9e009e9eULL, 0xec00ececec00ececULL,
559 0x8000808080008080, 0x2d002d2d2d002d2d, 0x6b006b6b6b006b6b, 559 0x8000808080008080ULL, 0x2d002d2d2d002d2dULL, 0x6b006b6b6b006b6bULL,
560 0xa800a8a8a800a8a8, 0x2b002b2b2b002b2b, 0x3600363636003636, 560 0xa800a8a8a800a8a8ULL, 0x2b002b2b2b002b2bULL, 0x3600363636003636ULL,
561 0xa600a6a6a600a6a6, 0xc500c5c5c500c5c5, 0x8600868686008686, 561 0xa600a6a6a600a6a6ULL, 0xc500c5c5c500c5c5ULL, 0x8600868686008686ULL,
562 0x4d004d4d4d004d4d, 0x3300333333003333, 0xfd00fdfdfd00fdfd, 562 0x4d004d4d4d004d4dULL, 0x3300333333003333ULL, 0xfd00fdfdfd00fdfdULL,
563 0x6600666666006666, 0x5800585858005858, 0x9600969696009696, 563 0x6600666666006666ULL, 0x5800585858005858ULL, 0x9600969696009696ULL,
564 0x3a003a3a3a003a3a, 0x0900090909000909, 0x9500959595009595, 564 0x3a003a3a3a003a3aULL, 0x0900090909000909ULL, 0x9500959595009595ULL,
565 0x1000101010001010, 0x7800787878007878, 0xd800d8d8d800d8d8, 565 0x1000101010001010ULL, 0x7800787878007878ULL, 0xd800d8d8d800d8d8ULL,
566 0x4200424242004242, 0xcc00cccccc00cccc, 0xef00efefef00efef, 566 0x4200424242004242ULL, 0xcc00cccccc00ccccULL, 0xef00efefef00efefULL,
567 0x2600262626002626, 0xe500e5e5e500e5e5, 0x6100616161006161, 567 0x2600262626002626ULL, 0xe500e5e5e500e5e5ULL, 0x6100616161006161ULL,
568 0x1a001a1a1a001a1a, 0x3f003f3f3f003f3f, 0x3b003b3b3b003b3b, 568 0x1a001a1a1a001a1aULL, 0x3f003f3f3f003f3fULL, 0x3b003b3b3b003b3bULL,
569 0x8200828282008282, 0xb600b6b6b600b6b6, 0xdb00dbdbdb00dbdb, 569 0x8200828282008282ULL, 0xb600b6b6b600b6b6ULL, 0xdb00dbdbdb00dbdbULL,
570 0xd400d4d4d400d4d4, 0x9800989898009898, 0xe800e8e8e800e8e8, 570 0xd400d4d4d400d4d4ULL, 0x9800989898009898ULL, 0xe800e8e8e800e8e8ULL,
571 0x8b008b8b8b008b8b, 0x0200020202000202, 0xeb00ebebeb00ebeb, 571 0x8b008b8b8b008b8bULL, 0x0200020202000202ULL, 0xeb00ebebeb00ebebULL,
572 0x0a000a0a0a000a0a, 0x2c002c2c2c002c2c, 0x1d001d1d1d001d1d, 572 0x0a000a0a0a000a0aULL, 0x2c002c2c2c002c2cULL, 0x1d001d1d1d001d1dULL,
573 0xb000b0b0b000b0b0, 0x6f006f6f6f006f6f, 0x8d008d8d8d008d8d, 573 0xb000b0b0b000b0b0ULL, 0x6f006f6f6f006f6fULL, 0x8d008d8d8d008d8dULL,
574 0x8800888888008888, 0x0e000e0e0e000e0e, 0x1900191919001919, 574 0x8800888888008888ULL, 0x0e000e0e0e000e0eULL, 0x1900191919001919ULL,
575 0x8700878787008787, 0x4e004e4e4e004e4e, 0x0b000b0b0b000b0b, 575 0x8700878787008787ULL, 0x4e004e4e4e004e4eULL, 0x0b000b0b0b000b0bULL,
576 0xa900a9a9a900a9a9, 0x0c000c0c0c000c0c, 0x7900797979007979, 576 0xa900a9a9a900a9a9ULL, 0x0c000c0c0c000c0cULL, 0x7900797979007979ULL,
577 0x1100111111001111, 0x7f007f7f7f007f7f, 0x2200222222002222, 577 0x1100111111001111ULL, 0x7f007f7f7f007f7fULL, 0x2200222222002222ULL,
578 0xe700e7e7e700e7e7, 0x5900595959005959, 0xe100e1e1e100e1e1, 578 0xe700e7e7e700e7e7ULL, 0x5900595959005959ULL, 0xe100e1e1e100e1e1ULL,
579 0xda00dadada00dada, 0x3d003d3d3d003d3d, 0xc800c8c8c800c8c8, 579 0xda00dadada00dadaULL, 0x3d003d3d3d003d3dULL, 0xc800c8c8c800c8c8ULL,
580 0x1200121212001212, 0x0400040404000404, 0x7400747474007474, 580 0x1200121212001212ULL, 0x0400040404000404ULL, 0x7400747474007474ULL,
581 0x5400545454005454, 0x3000303030003030, 0x7e007e7e7e007e7e, 581 0x5400545454005454ULL, 0x3000303030003030ULL, 0x7e007e7e7e007e7eULL,
582 0xb400b4b4b400b4b4, 0x2800282828002828, 0x5500555555005555, 582 0xb400b4b4b400b4b4ULL, 0x2800282828002828ULL, 0x5500555555005555ULL,
583 0x6800686868006868, 0x5000505050005050, 0xbe00bebebe00bebe, 583 0x6800686868006868ULL, 0x5000505050005050ULL, 0xbe00bebebe00bebeULL,
584 0xd000d0d0d000d0d0, 0xc400c4c4c400c4c4, 0x3100313131003131, 584 0xd000d0d0d000d0d0ULL, 0xc400c4c4c400c4c4ULL, 0x3100313131003131ULL,
585 0xcb00cbcbcb00cbcb, 0x2a002a2a2a002a2a, 0xad00adadad00adad, 585 0xcb00cbcbcb00cbcbULL, 0x2a002a2a2a002a2aULL, 0xad00adadad00adadULL,
586 0x0f000f0f0f000f0f, 0xca00cacaca00caca, 0x7000707070007070, 586 0x0f000f0f0f000f0fULL, 0xca00cacaca00cacaULL, 0x7000707070007070ULL,
587 0xff00ffffff00ffff, 0x3200323232003232, 0x6900696969006969, 587 0xff00ffffff00ffffULL, 0x3200323232003232ULL, 0x6900696969006969ULL,
588 0x0800080808000808, 0x6200626262006262, 0x0000000000000000, 588 0x0800080808000808ULL, 0x6200626262006262ULL, 0x0000000000000000ULL,
589 0x2400242424002424, 0xd100d1d1d100d1d1, 0xfb00fbfbfb00fbfb, 589 0x2400242424002424ULL, 0xd100d1d1d100d1d1ULL, 0xfb00fbfbfb00fbfbULL,
590 0xba00bababa00baba, 0xed00ededed00eded, 0x4500454545004545, 590 0xba00bababa00babaULL, 0xed00ededed00ededULL, 0x4500454545004545ULL,
591 0x8100818181008181, 0x7300737373007373, 0x6d006d6d6d006d6d, 591 0x8100818181008181ULL, 0x7300737373007373ULL, 0x6d006d6d6d006d6dULL,
592 0x8400848484008484, 0x9f009f9f9f009f9f, 0xee00eeeeee00eeee, 592 0x8400848484008484ULL, 0x9f009f9f9f009f9fULL, 0xee00eeeeee00eeeeULL,
593 0x4a004a4a4a004a4a, 0xc300c3c3c300c3c3, 0x2e002e2e2e002e2e, 593 0x4a004a4a4a004a4aULL, 0xc300c3c3c300c3c3ULL, 0x2e002e2e2e002e2eULL,
594 0xc100c1c1c100c1c1, 0x0100010101000101, 0xe600e6e6e600e6e6, 594 0xc100c1c1c100c1c1ULL, 0x0100010101000101ULL, 0xe600e6e6e600e6e6ULL,
595 0x2500252525002525, 0x4800484848004848, 0x9900999999009999, 595 0x2500252525002525ULL, 0x4800484848004848ULL, 0x9900999999009999ULL,
596 0xb900b9b9b900b9b9, 0xb300b3b3b300b3b3, 0x7b007b7b7b007b7b, 596 0xb900b9b9b900b9b9ULL, 0xb300b3b3b300b3b3ULL, 0x7b007b7b7b007b7bULL,
597 0xf900f9f9f900f9f9, 0xce00cecece00cece, 0xbf00bfbfbf00bfbf, 597 0xf900f9f9f900f9f9ULL, 0xce00cecece00ceceULL, 0xbf00bfbfbf00bfbfULL,
598 0xdf00dfdfdf00dfdf, 0x7100717171007171, 0x2900292929002929, 598 0xdf00dfdfdf00dfdfULL, 0x7100717171007171ULL, 0x2900292929002929ULL,
599 0xcd00cdcdcd00cdcd, 0x6c006c6c6c006c6c, 0x1300131313001313, 599 0xcd00cdcdcd00cdcdULL, 0x6c006c6c6c006c6cULL, 0x1300131313001313ULL,
600 0x6400646464006464, 0x9b009b9b9b009b9b, 0x6300636363006363, 600 0x6400646464006464ULL, 0x9b009b9b9b009b9bULL, 0x6300636363006363ULL,
601 0x9d009d9d9d009d9d, 0xc000c0c0c000c0c0, 0x4b004b4b4b004b4b, 601 0x9d009d9d9d009d9dULL, 0xc000c0c0c000c0c0ULL, 0x4b004b4b4b004b4bULL,
602 0xb700b7b7b700b7b7, 0xa500a5a5a500a5a5, 0x8900898989008989, 602 0xb700b7b7b700b7b7ULL, 0xa500a5a5a500a5a5ULL, 0x8900898989008989ULL,
603 0x5f005f5f5f005f5f, 0xb100b1b1b100b1b1, 0x1700171717001717, 603 0x5f005f5f5f005f5fULL, 0xb100b1b1b100b1b1ULL, 0x1700171717001717ULL,
604 0xf400f4f4f400f4f4, 0xbc00bcbcbc00bcbc, 0xd300d3d3d300d3d3, 604 0xf400f4f4f400f4f4ULL, 0xbc00bcbcbc00bcbcULL, 0xd300d3d3d300d3d3ULL,
605 0x4600464646004646, 0xcf00cfcfcf00cfcf, 0x3700373737003737, 605 0x4600464646004646ULL, 0xcf00cfcfcf00cfcfULL, 0x3700373737003737ULL,
606 0x5e005e5e5e005e5e, 0x4700474747004747, 0x9400949494009494, 606 0x5e005e5e5e005e5eULL, 0x4700474747004747ULL, 0x9400949494009494ULL,
607 0xfa00fafafa00fafa, 0xfc00fcfcfc00fcfc, 0x5b005b5b5b005b5b, 607 0xfa00fafafa00fafaULL, 0xfc00fcfcfc00fcfcULL, 0x5b005b5b5b005b5bULL,
608 0x9700979797009797, 0xfe00fefefe00fefe, 0x5a005a5a5a005a5a, 608 0x9700979797009797ULL, 0xfe00fefefe00fefeULL, 0x5a005a5a5a005a5aULL,
609 0xac00acacac00acac, 0x3c003c3c3c003c3c, 0x4c004c4c4c004c4c, 609 0xac00acacac00acacULL, 0x3c003c3c3c003c3cULL, 0x4c004c4c4c004c4cULL,
610 0x0300030303000303, 0x3500353535003535, 0xf300f3f3f300f3f3, 610 0x0300030303000303ULL, 0x3500353535003535ULL, 0xf300f3f3f300f3f3ULL,
611 0x2300232323002323, 0xb800b8b8b800b8b8, 0x5d005d5d5d005d5d, 611 0x2300232323002323ULL, 0xb800b8b8b800b8b8ULL, 0x5d005d5d5d005d5dULL,
612 0x6a006a6a6a006a6a, 0x9200929292009292, 0xd500d5d5d500d5d5, 612 0x6a006a6a6a006a6aULL, 0x9200929292009292ULL, 0xd500d5d5d500d5d5ULL,
613 0x2100212121002121, 0x4400444444004444, 0x5100515151005151, 613 0x2100212121002121ULL, 0x4400444444004444ULL, 0x5100515151005151ULL,
614 0xc600c6c6c600c6c6, 0x7d007d7d7d007d7d, 0x3900393939003939, 614 0xc600c6c6c600c6c6ULL, 0x7d007d7d7d007d7dULL, 0x3900393939003939ULL,
615 0x8300838383008383, 0xdc00dcdcdc00dcdc, 0xaa00aaaaaa00aaaa, 615 0x8300838383008383ULL, 0xdc00dcdcdc00dcdcULL, 0xaa00aaaaaa00aaaaULL,
616 0x7c007c7c7c007c7c, 0x7700777777007777, 0x5600565656005656, 616 0x7c007c7c7c007c7cULL, 0x7700777777007777ULL, 0x5600565656005656ULL,
617 0x0500050505000505, 0x1b001b1b1b001b1b, 0xa400a4a4a400a4a4, 617 0x0500050505000505ULL, 0x1b001b1b1b001b1bULL, 0xa400a4a4a400a4a4ULL,
618 0x1500151515001515, 0x3400343434003434, 0x1e001e1e1e001e1e, 618 0x1500151515001515ULL, 0x3400343434003434ULL, 0x1e001e1e1e001e1eULL,
619 0x1c001c1c1c001c1c, 0xf800f8f8f800f8f8, 0x5200525252005252, 619 0x1c001c1c1c001c1cULL, 0xf800f8f8f800f8f8ULL, 0x5200525252005252ULL,
620 0x2000202020002020, 0x1400141414001414, 0xe900e9e9e900e9e9, 620 0x2000202020002020ULL, 0x1400141414001414ULL, 0xe900e9e9e900e9e9ULL,
621 0xbd00bdbdbd00bdbd, 0xdd00dddddd00dddd, 0xe400e4e4e400e4e4, 621 0xbd00bdbdbd00bdbdULL, 0xdd00dddddd00ddddULL, 0xe400e4e4e400e4e4ULL,
622 0xa100a1a1a100a1a1, 0xe000e0e0e000e0e0, 0x8a008a8a8a008a8a, 622 0xa100a1a1a100a1a1ULL, 0xe000e0e0e000e0e0ULL, 0x8a008a8a8a008a8aULL,
623 0xf100f1f1f100f1f1, 0xd600d6d6d600d6d6, 0x7a007a7a7a007a7a, 623 0xf100f1f1f100f1f1ULL, 0xd600d6d6d600d6d6ULL, 0x7a007a7a7a007a7aULL,
624 0xbb00bbbbbb00bbbb, 0xe300e3e3e300e3e3, 0x4000404040004040, 624 0xbb00bbbbbb00bbbbULL, 0xe300e3e3e300e3e3ULL, 0x4000404040004040ULL,
625 0x4f004f4f4f004f4f, 625 0x4f004f4f4f004f4fULL,
626}; 626};
627 627
628const u64 camellia_sp44044404[256] = { 628const u64 camellia_sp44044404[256] = {
629 0x7070007070700070, 0x2c2c002c2c2c002c, 0xb3b300b3b3b300b3, 629 0x7070007070700070ULL, 0x2c2c002c2c2c002cULL, 0xb3b300b3b3b300b3ULL,
630 0xc0c000c0c0c000c0, 0xe4e400e4e4e400e4, 0x5757005757570057, 630 0xc0c000c0c0c000c0ULL, 0xe4e400e4e4e400e4ULL, 0x5757005757570057ULL,
631 0xeaea00eaeaea00ea, 0xaeae00aeaeae00ae, 0x2323002323230023, 631 0xeaea00eaeaea00eaULL, 0xaeae00aeaeae00aeULL, 0x2323002323230023ULL,
632 0x6b6b006b6b6b006b, 0x4545004545450045, 0xa5a500a5a5a500a5, 632 0x6b6b006b6b6b006bULL, 0x4545004545450045ULL, 0xa5a500a5a5a500a5ULL,
633 0xeded00ededed00ed, 0x4f4f004f4f4f004f, 0x1d1d001d1d1d001d, 633 0xeded00ededed00edULL, 0x4f4f004f4f4f004fULL, 0x1d1d001d1d1d001dULL,
634 0x9292009292920092, 0x8686008686860086, 0xafaf00afafaf00af, 634 0x9292009292920092ULL, 0x8686008686860086ULL, 0xafaf00afafaf00afULL,
635 0x7c7c007c7c7c007c, 0x1f1f001f1f1f001f, 0x3e3e003e3e3e003e, 635 0x7c7c007c7c7c007cULL, 0x1f1f001f1f1f001fULL, 0x3e3e003e3e3e003eULL,
636 0xdcdc00dcdcdc00dc, 0x5e5e005e5e5e005e, 0x0b0b000b0b0b000b, 636 0xdcdc00dcdcdc00dcULL, 0x5e5e005e5e5e005eULL, 0x0b0b000b0b0b000bULL,
637 0xa6a600a6a6a600a6, 0x3939003939390039, 0xd5d500d5d5d500d5, 637 0xa6a600a6a6a600a6ULL, 0x3939003939390039ULL, 0xd5d500d5d5d500d5ULL,
638 0x5d5d005d5d5d005d, 0xd9d900d9d9d900d9, 0x5a5a005a5a5a005a, 638 0x5d5d005d5d5d005dULL, 0xd9d900d9d9d900d9ULL, 0x5a5a005a5a5a005aULL,
639 0x5151005151510051, 0x6c6c006c6c6c006c, 0x8b8b008b8b8b008b, 639 0x5151005151510051ULL, 0x6c6c006c6c6c006cULL, 0x8b8b008b8b8b008bULL,
640 0x9a9a009a9a9a009a, 0xfbfb00fbfbfb00fb, 0xb0b000b0b0b000b0, 640 0x9a9a009a9a9a009aULL, 0xfbfb00fbfbfb00fbULL, 0xb0b000b0b0b000b0ULL,
641 0x7474007474740074, 0x2b2b002b2b2b002b, 0xf0f000f0f0f000f0, 641 0x7474007474740074ULL, 0x2b2b002b2b2b002bULL, 0xf0f000f0f0f000f0ULL,
642 0x8484008484840084, 0xdfdf00dfdfdf00df, 0xcbcb00cbcbcb00cb, 642 0x8484008484840084ULL, 0xdfdf00dfdfdf00dfULL, 0xcbcb00cbcbcb00cbULL,
643 0x3434003434340034, 0x7676007676760076, 0x6d6d006d6d6d006d, 643 0x3434003434340034ULL, 0x7676007676760076ULL, 0x6d6d006d6d6d006dULL,
644 0xa9a900a9a9a900a9, 0xd1d100d1d1d100d1, 0x0404000404040004, 644 0xa9a900a9a9a900a9ULL, 0xd1d100d1d1d100d1ULL, 0x0404000404040004ULL,
645 0x1414001414140014, 0x3a3a003a3a3a003a, 0xdede00dedede00de, 645 0x1414001414140014ULL, 0x3a3a003a3a3a003aULL, 0xdede00dedede00deULL,
646 0x1111001111110011, 0x3232003232320032, 0x9c9c009c9c9c009c, 646 0x1111001111110011ULL, 0x3232003232320032ULL, 0x9c9c009c9c9c009cULL,
647 0x5353005353530053, 0xf2f200f2f2f200f2, 0xfefe00fefefe00fe, 647 0x5353005353530053ULL, 0xf2f200f2f2f200f2ULL, 0xfefe00fefefe00feULL,
648 0xcfcf00cfcfcf00cf, 0xc3c300c3c3c300c3, 0x7a7a007a7a7a007a, 648 0xcfcf00cfcfcf00cfULL, 0xc3c300c3c3c300c3ULL, 0x7a7a007a7a7a007aULL,
649 0x2424002424240024, 0xe8e800e8e8e800e8, 0x6060006060600060, 649 0x2424002424240024ULL, 0xe8e800e8e8e800e8ULL, 0x6060006060600060ULL,
650 0x6969006969690069, 0xaaaa00aaaaaa00aa, 0xa0a000a0a0a000a0, 650 0x6969006969690069ULL, 0xaaaa00aaaaaa00aaULL, 0xa0a000a0a0a000a0ULL,
651 0xa1a100a1a1a100a1, 0x6262006262620062, 0x5454005454540054, 651 0xa1a100a1a1a100a1ULL, 0x6262006262620062ULL, 0x5454005454540054ULL,
652 0x1e1e001e1e1e001e, 0xe0e000e0e0e000e0, 0x6464006464640064, 652 0x1e1e001e1e1e001eULL, 0xe0e000e0e0e000e0ULL, 0x6464006464640064ULL,
653 0x1010001010100010, 0x0000000000000000, 0xa3a300a3a3a300a3, 653 0x1010001010100010ULL, 0x0000000000000000ULL, 0xa3a300a3a3a300a3ULL,
654 0x7575007575750075, 0x8a8a008a8a8a008a, 0xe6e600e6e6e600e6, 654 0x7575007575750075ULL, 0x8a8a008a8a8a008aULL, 0xe6e600e6e6e600e6ULL,
655 0x0909000909090009, 0xdddd00dddddd00dd, 0x8787008787870087, 655 0x0909000909090009ULL, 0xdddd00dddddd00ddULL, 0x8787008787870087ULL,
656 0x8383008383830083, 0xcdcd00cdcdcd00cd, 0x9090009090900090, 656 0x8383008383830083ULL, 0xcdcd00cdcdcd00cdULL, 0x9090009090900090ULL,
657 0x7373007373730073, 0xf6f600f6f6f600f6, 0x9d9d009d9d9d009d, 657 0x7373007373730073ULL, 0xf6f600f6f6f600f6ULL, 0x9d9d009d9d9d009dULL,
658 0xbfbf00bfbfbf00bf, 0x5252005252520052, 0xd8d800d8d8d800d8, 658 0xbfbf00bfbfbf00bfULL, 0x5252005252520052ULL, 0xd8d800d8d8d800d8ULL,
659 0xc8c800c8c8c800c8, 0xc6c600c6c6c600c6, 0x8181008181810081, 659 0xc8c800c8c8c800c8ULL, 0xc6c600c6c6c600c6ULL, 0x8181008181810081ULL,
660 0x6f6f006f6f6f006f, 0x1313001313130013, 0x6363006363630063, 660 0x6f6f006f6f6f006fULL, 0x1313001313130013ULL, 0x6363006363630063ULL,
661 0xe9e900e9e9e900e9, 0xa7a700a7a7a700a7, 0x9f9f009f9f9f009f, 661 0xe9e900e9e9e900e9ULL, 0xa7a700a7a7a700a7ULL, 0x9f9f009f9f9f009fULL,
662 0xbcbc00bcbcbc00bc, 0x2929002929290029, 0xf9f900f9f9f900f9, 662 0xbcbc00bcbcbc00bcULL, 0x2929002929290029ULL, 0xf9f900f9f9f900f9ULL,
663 0x2f2f002f2f2f002f, 0xb4b400b4b4b400b4, 0x7878007878780078, 663 0x2f2f002f2f2f002fULL, 0xb4b400b4b4b400b4ULL, 0x7878007878780078ULL,
664 0x0606000606060006, 0xe7e700e7e7e700e7, 0x7171007171710071, 664 0x0606000606060006ULL, 0xe7e700e7e7e700e7ULL, 0x7171007171710071ULL,
665 0xd4d400d4d4d400d4, 0xabab00ababab00ab, 0x8888008888880088, 665 0xd4d400d4d4d400d4ULL, 0xabab00ababab00abULL, 0x8888008888880088ULL,
666 0x8d8d008d8d8d008d, 0x7272007272720072, 0xb9b900b9b9b900b9, 666 0x8d8d008d8d8d008dULL, 0x7272007272720072ULL, 0xb9b900b9b9b900b9ULL,
667 0xf8f800f8f8f800f8, 0xacac00acacac00ac, 0x3636003636360036, 667 0xf8f800f8f8f800f8ULL, 0xacac00acacac00acULL, 0x3636003636360036ULL,
668 0x2a2a002a2a2a002a, 0x3c3c003c3c3c003c, 0xf1f100f1f1f100f1, 668 0x2a2a002a2a2a002aULL, 0x3c3c003c3c3c003cULL, 0xf1f100f1f1f100f1ULL,
669 0x4040004040400040, 0xd3d300d3d3d300d3, 0xbbbb00bbbbbb00bb, 669 0x4040004040400040ULL, 0xd3d300d3d3d300d3ULL, 0xbbbb00bbbbbb00bbULL,
670 0x4343004343430043, 0x1515001515150015, 0xadad00adadad00ad, 670 0x4343004343430043ULL, 0x1515001515150015ULL, 0xadad00adadad00adULL,
671 0x7777007777770077, 0x8080008080800080, 0x8282008282820082, 671 0x7777007777770077ULL, 0x8080008080800080ULL, 0x8282008282820082ULL,
672 0xecec00ececec00ec, 0x2727002727270027, 0xe5e500e5e5e500e5, 672 0xecec00ececec00ecULL, 0x2727002727270027ULL, 0xe5e500e5e5e500e5ULL,
673 0x8585008585850085, 0x3535003535350035, 0x0c0c000c0c0c000c, 673 0x8585008585850085ULL, 0x3535003535350035ULL, 0x0c0c000c0c0c000cULL,
674 0x4141004141410041, 0xefef00efefef00ef, 0x9393009393930093, 674 0x4141004141410041ULL, 0xefef00efefef00efULL, 0x9393009393930093ULL,
675 0x1919001919190019, 0x2121002121210021, 0x0e0e000e0e0e000e, 675 0x1919001919190019ULL, 0x2121002121210021ULL, 0x0e0e000e0e0e000eULL,
676 0x4e4e004e4e4e004e, 0x6565006565650065, 0xbdbd00bdbdbd00bd, 676 0x4e4e004e4e4e004eULL, 0x6565006565650065ULL, 0xbdbd00bdbdbd00bdULL,
677 0xb8b800b8b8b800b8, 0x8f8f008f8f8f008f, 0xebeb00ebebeb00eb, 677 0xb8b800b8b8b800b8ULL, 0x8f8f008f8f8f008fULL, 0xebeb00ebebeb00ebULL,
678 0xcece00cecece00ce, 0x3030003030300030, 0x5f5f005f5f5f005f, 678 0xcece00cecece00ceULL, 0x3030003030300030ULL, 0x5f5f005f5f5f005fULL,
679 0xc5c500c5c5c500c5, 0x1a1a001a1a1a001a, 0xe1e100e1e1e100e1, 679 0xc5c500c5c5c500c5ULL, 0x1a1a001a1a1a001aULL, 0xe1e100e1e1e100e1ULL,
680 0xcaca00cacaca00ca, 0x4747004747470047, 0x3d3d003d3d3d003d, 680 0xcaca00cacaca00caULL, 0x4747004747470047ULL, 0x3d3d003d3d3d003dULL,
681 0x0101000101010001, 0xd6d600d6d6d600d6, 0x5656005656560056, 681 0x0101000101010001ULL, 0xd6d600d6d6d600d6ULL, 0x5656005656560056ULL,
682 0x4d4d004d4d4d004d, 0x0d0d000d0d0d000d, 0x6666006666660066, 682 0x4d4d004d4d4d004dULL, 0x0d0d000d0d0d000dULL, 0x6666006666660066ULL,
683 0xcccc00cccccc00cc, 0x2d2d002d2d2d002d, 0x1212001212120012, 683 0xcccc00cccccc00ccULL, 0x2d2d002d2d2d002dULL, 0x1212001212120012ULL,
684 0x2020002020200020, 0xb1b100b1b1b100b1, 0x9999009999990099, 684 0x2020002020200020ULL, 0xb1b100b1b1b100b1ULL, 0x9999009999990099ULL,
685 0x4c4c004c4c4c004c, 0xc2c200c2c2c200c2, 0x7e7e007e7e7e007e, 685 0x4c4c004c4c4c004cULL, 0xc2c200c2c2c200c2ULL, 0x7e7e007e7e7e007eULL,
686 0x0505000505050005, 0xb7b700b7b7b700b7, 0x3131003131310031, 686 0x0505000505050005ULL, 0xb7b700b7b7b700b7ULL, 0x3131003131310031ULL,
687 0x1717001717170017, 0xd7d700d7d7d700d7, 0x5858005858580058, 687 0x1717001717170017ULL, 0xd7d700d7d7d700d7ULL, 0x5858005858580058ULL,
688 0x6161006161610061, 0x1b1b001b1b1b001b, 0x1c1c001c1c1c001c, 688 0x6161006161610061ULL, 0x1b1b001b1b1b001bULL, 0x1c1c001c1c1c001cULL,
689 0x0f0f000f0f0f000f, 0x1616001616160016, 0x1818001818180018, 689 0x0f0f000f0f0f000fULL, 0x1616001616160016ULL, 0x1818001818180018ULL,
690 0x2222002222220022, 0x4444004444440044, 0xb2b200b2b2b200b2, 690 0x2222002222220022ULL, 0x4444004444440044ULL, 0xb2b200b2b2b200b2ULL,
691 0xb5b500b5b5b500b5, 0x9191009191910091, 0x0808000808080008, 691 0xb5b500b5b5b500b5ULL, 0x9191009191910091ULL, 0x0808000808080008ULL,
692 0xa8a800a8a8a800a8, 0xfcfc00fcfcfc00fc, 0x5050005050500050, 692 0xa8a800a8a8a800a8ULL, 0xfcfc00fcfcfc00fcULL, 0x5050005050500050ULL,
693 0xd0d000d0d0d000d0, 0x7d7d007d7d7d007d, 0x8989008989890089, 693 0xd0d000d0d0d000d0ULL, 0x7d7d007d7d7d007dULL, 0x8989008989890089ULL,
694 0x9797009797970097, 0x5b5b005b5b5b005b, 0x9595009595950095, 694 0x9797009797970097ULL, 0x5b5b005b5b5b005bULL, 0x9595009595950095ULL,
695 0xffff00ffffff00ff, 0xd2d200d2d2d200d2, 0xc4c400c4c4c400c4, 695 0xffff00ffffff00ffULL, 0xd2d200d2d2d200d2ULL, 0xc4c400c4c4c400c4ULL,
696 0x4848004848480048, 0xf7f700f7f7f700f7, 0xdbdb00dbdbdb00db, 696 0x4848004848480048ULL, 0xf7f700f7f7f700f7ULL, 0xdbdb00dbdbdb00dbULL,
697 0x0303000303030003, 0xdada00dadada00da, 0x3f3f003f3f3f003f, 697 0x0303000303030003ULL, 0xdada00dadada00daULL, 0x3f3f003f3f3f003fULL,
698 0x9494009494940094, 0x5c5c005c5c5c005c, 0x0202000202020002, 698 0x9494009494940094ULL, 0x5c5c005c5c5c005cULL, 0x0202000202020002ULL,
699 0x4a4a004a4a4a004a, 0x3333003333330033, 0x6767006767670067, 699 0x4a4a004a4a4a004aULL, 0x3333003333330033ULL, 0x6767006767670067ULL,
700 0xf3f300f3f3f300f3, 0x7f7f007f7f7f007f, 0xe2e200e2e2e200e2, 700 0xf3f300f3f3f300f3ULL, 0x7f7f007f7f7f007fULL, 0xe2e200e2e2e200e2ULL,
701 0x9b9b009b9b9b009b, 0x2626002626260026, 0x3737003737370037, 701 0x9b9b009b9b9b009bULL, 0x2626002626260026ULL, 0x3737003737370037ULL,
702 0x3b3b003b3b3b003b, 0x9696009696960096, 0x4b4b004b4b4b004b, 702 0x3b3b003b3b3b003bULL, 0x9696009696960096ULL, 0x4b4b004b4b4b004bULL,
703 0xbebe00bebebe00be, 0x2e2e002e2e2e002e, 0x7979007979790079, 703 0xbebe00bebebe00beULL, 0x2e2e002e2e2e002eULL, 0x7979007979790079ULL,
704 0x8c8c008c8c8c008c, 0x6e6e006e6e6e006e, 0x8e8e008e8e8e008e, 704 0x8c8c008c8c8c008cULL, 0x6e6e006e6e6e006eULL, 0x8e8e008e8e8e008eULL,
705 0xf5f500f5f5f500f5, 0xb6b600b6b6b600b6, 0xfdfd00fdfdfd00fd, 705 0xf5f500f5f5f500f5ULL, 0xb6b600b6b6b600b6ULL, 0xfdfd00fdfdfd00fdULL,
706 0x5959005959590059, 0x9898009898980098, 0x6a6a006a6a6a006a, 706 0x5959005959590059ULL, 0x9898009898980098ULL, 0x6a6a006a6a6a006aULL,
707 0x4646004646460046, 0xbaba00bababa00ba, 0x2525002525250025, 707 0x4646004646460046ULL, 0xbaba00bababa00baULL, 0x2525002525250025ULL,
708 0x4242004242420042, 0xa2a200a2a2a200a2, 0xfafa00fafafa00fa, 708 0x4242004242420042ULL, 0xa2a200a2a2a200a2ULL, 0xfafa00fafafa00faULL,
709 0x0707000707070007, 0x5555005555550055, 0xeeee00eeeeee00ee, 709 0x0707000707070007ULL, 0x5555005555550055ULL, 0xeeee00eeeeee00eeULL,
710 0x0a0a000a0a0a000a, 0x4949004949490049, 0x6868006868680068, 710 0x0a0a000a0a0a000aULL, 0x4949004949490049ULL, 0x6868006868680068ULL,
711 0x3838003838380038, 0xa4a400a4a4a400a4, 0x2828002828280028, 711 0x3838003838380038ULL, 0xa4a400a4a4a400a4ULL, 0x2828002828280028ULL,
712 0x7b7b007b7b7b007b, 0xc9c900c9c9c900c9, 0xc1c100c1c1c100c1, 712 0x7b7b007b7b7b007bULL, 0xc9c900c9c9c900c9ULL, 0xc1c100c1c1c100c1ULL,
713 0xe3e300e3e3e300e3, 0xf4f400f4f4f400f4, 0xc7c700c7c7c700c7, 713 0xe3e300e3e3e300e3ULL, 0xf4f400f4f4f400f4ULL, 0xc7c700c7c7c700c7ULL,
714 0x9e9e009e9e9e009e, 714 0x9e9e009e9e9e009eULL,
715}; 715};
716 716
717const u64 camellia_sp11101110[256] = { 717const u64 camellia_sp11101110[256] = {
718 0x7070700070707000, 0x8282820082828200, 0x2c2c2c002c2c2c00, 718 0x7070700070707000ULL, 0x8282820082828200ULL, 0x2c2c2c002c2c2c00ULL,
719 0xececec00ececec00, 0xb3b3b300b3b3b300, 0x2727270027272700, 719 0xececec00ececec00ULL, 0xb3b3b300b3b3b300ULL, 0x2727270027272700ULL,
720 0xc0c0c000c0c0c000, 0xe5e5e500e5e5e500, 0xe4e4e400e4e4e400, 720 0xc0c0c000c0c0c000ULL, 0xe5e5e500e5e5e500ULL, 0xe4e4e400e4e4e400ULL,
721 0x8585850085858500, 0x5757570057575700, 0x3535350035353500, 721 0x8585850085858500ULL, 0x5757570057575700ULL, 0x3535350035353500ULL,
722 0xeaeaea00eaeaea00, 0x0c0c0c000c0c0c00, 0xaeaeae00aeaeae00, 722 0xeaeaea00eaeaea00ULL, 0x0c0c0c000c0c0c00ULL, 0xaeaeae00aeaeae00ULL,
723 0x4141410041414100, 0x2323230023232300, 0xefefef00efefef00, 723 0x4141410041414100ULL, 0x2323230023232300ULL, 0xefefef00efefef00ULL,
724 0x6b6b6b006b6b6b00, 0x9393930093939300, 0x4545450045454500, 724 0x6b6b6b006b6b6b00ULL, 0x9393930093939300ULL, 0x4545450045454500ULL,
725 0x1919190019191900, 0xa5a5a500a5a5a500, 0x2121210021212100, 725 0x1919190019191900ULL, 0xa5a5a500a5a5a500ULL, 0x2121210021212100ULL,
726 0xededed00ededed00, 0x0e0e0e000e0e0e00, 0x4f4f4f004f4f4f00, 726 0xededed00ededed00ULL, 0x0e0e0e000e0e0e00ULL, 0x4f4f4f004f4f4f00ULL,
727 0x4e4e4e004e4e4e00, 0x1d1d1d001d1d1d00, 0x6565650065656500, 727 0x4e4e4e004e4e4e00ULL, 0x1d1d1d001d1d1d00ULL, 0x6565650065656500ULL,
728 0x9292920092929200, 0xbdbdbd00bdbdbd00, 0x8686860086868600, 728 0x9292920092929200ULL, 0xbdbdbd00bdbdbd00ULL, 0x8686860086868600ULL,
729 0xb8b8b800b8b8b800, 0xafafaf00afafaf00, 0x8f8f8f008f8f8f00, 729 0xb8b8b800b8b8b800ULL, 0xafafaf00afafaf00ULL, 0x8f8f8f008f8f8f00ULL,
730 0x7c7c7c007c7c7c00, 0xebebeb00ebebeb00, 0x1f1f1f001f1f1f00, 730 0x7c7c7c007c7c7c00ULL, 0xebebeb00ebebeb00ULL, 0x1f1f1f001f1f1f00ULL,
731 0xcecece00cecece00, 0x3e3e3e003e3e3e00, 0x3030300030303000, 731 0xcecece00cecece00ULL, 0x3e3e3e003e3e3e00ULL, 0x3030300030303000ULL,
732 0xdcdcdc00dcdcdc00, 0x5f5f5f005f5f5f00, 0x5e5e5e005e5e5e00, 732 0xdcdcdc00dcdcdc00ULL, 0x5f5f5f005f5f5f00ULL, 0x5e5e5e005e5e5e00ULL,
733 0xc5c5c500c5c5c500, 0x0b0b0b000b0b0b00, 0x1a1a1a001a1a1a00, 733 0xc5c5c500c5c5c500ULL, 0x0b0b0b000b0b0b00ULL, 0x1a1a1a001a1a1a00ULL,
734 0xa6a6a600a6a6a600, 0xe1e1e100e1e1e100, 0x3939390039393900, 734 0xa6a6a600a6a6a600ULL, 0xe1e1e100e1e1e100ULL, 0x3939390039393900ULL,
735 0xcacaca00cacaca00, 0xd5d5d500d5d5d500, 0x4747470047474700, 735 0xcacaca00cacaca00ULL, 0xd5d5d500d5d5d500ULL, 0x4747470047474700ULL,
736 0x5d5d5d005d5d5d00, 0x3d3d3d003d3d3d00, 0xd9d9d900d9d9d900, 736 0x5d5d5d005d5d5d00ULL, 0x3d3d3d003d3d3d00ULL, 0xd9d9d900d9d9d900ULL,
737 0x0101010001010100, 0x5a5a5a005a5a5a00, 0xd6d6d600d6d6d600, 737 0x0101010001010100ULL, 0x5a5a5a005a5a5a00ULL, 0xd6d6d600d6d6d600ULL,
738 0x5151510051515100, 0x5656560056565600, 0x6c6c6c006c6c6c00, 738 0x5151510051515100ULL, 0x5656560056565600ULL, 0x6c6c6c006c6c6c00ULL,
739 0x4d4d4d004d4d4d00, 0x8b8b8b008b8b8b00, 0x0d0d0d000d0d0d00, 739 0x4d4d4d004d4d4d00ULL, 0x8b8b8b008b8b8b00ULL, 0x0d0d0d000d0d0d00ULL,
740 0x9a9a9a009a9a9a00, 0x6666660066666600, 0xfbfbfb00fbfbfb00, 740 0x9a9a9a009a9a9a00ULL, 0x6666660066666600ULL, 0xfbfbfb00fbfbfb00ULL,
741 0xcccccc00cccccc00, 0xb0b0b000b0b0b000, 0x2d2d2d002d2d2d00, 741 0xcccccc00cccccc00ULL, 0xb0b0b000b0b0b000ULL, 0x2d2d2d002d2d2d00ULL,
742 0x7474740074747400, 0x1212120012121200, 0x2b2b2b002b2b2b00, 742 0x7474740074747400ULL, 0x1212120012121200ULL, 0x2b2b2b002b2b2b00ULL,
743 0x2020200020202000, 0xf0f0f000f0f0f000, 0xb1b1b100b1b1b100, 743 0x2020200020202000ULL, 0xf0f0f000f0f0f000ULL, 0xb1b1b100b1b1b100ULL,
744 0x8484840084848400, 0x9999990099999900, 0xdfdfdf00dfdfdf00, 744 0x8484840084848400ULL, 0x9999990099999900ULL, 0xdfdfdf00dfdfdf00ULL,
745 0x4c4c4c004c4c4c00, 0xcbcbcb00cbcbcb00, 0xc2c2c200c2c2c200, 745 0x4c4c4c004c4c4c00ULL, 0xcbcbcb00cbcbcb00ULL, 0xc2c2c200c2c2c200ULL,
746 0x3434340034343400, 0x7e7e7e007e7e7e00, 0x7676760076767600, 746 0x3434340034343400ULL, 0x7e7e7e007e7e7e00ULL, 0x7676760076767600ULL,
747 0x0505050005050500, 0x6d6d6d006d6d6d00, 0xb7b7b700b7b7b700, 747 0x0505050005050500ULL, 0x6d6d6d006d6d6d00ULL, 0xb7b7b700b7b7b700ULL,
748 0xa9a9a900a9a9a900, 0x3131310031313100, 0xd1d1d100d1d1d100, 748 0xa9a9a900a9a9a900ULL, 0x3131310031313100ULL, 0xd1d1d100d1d1d100ULL,
749 0x1717170017171700, 0x0404040004040400, 0xd7d7d700d7d7d700, 749 0x1717170017171700ULL, 0x0404040004040400ULL, 0xd7d7d700d7d7d700ULL,
750 0x1414140014141400, 0x5858580058585800, 0x3a3a3a003a3a3a00, 750 0x1414140014141400ULL, 0x5858580058585800ULL, 0x3a3a3a003a3a3a00ULL,
751 0x6161610061616100, 0xdedede00dedede00, 0x1b1b1b001b1b1b00, 751 0x6161610061616100ULL, 0xdedede00dedede00ULL, 0x1b1b1b001b1b1b00ULL,
752 0x1111110011111100, 0x1c1c1c001c1c1c00, 0x3232320032323200, 752 0x1111110011111100ULL, 0x1c1c1c001c1c1c00ULL, 0x3232320032323200ULL,
753 0x0f0f0f000f0f0f00, 0x9c9c9c009c9c9c00, 0x1616160016161600, 753 0x0f0f0f000f0f0f00ULL, 0x9c9c9c009c9c9c00ULL, 0x1616160016161600ULL,
754 0x5353530053535300, 0x1818180018181800, 0xf2f2f200f2f2f200, 754 0x5353530053535300ULL, 0x1818180018181800ULL, 0xf2f2f200f2f2f200ULL,
755 0x2222220022222200, 0xfefefe00fefefe00, 0x4444440044444400, 755 0x2222220022222200ULL, 0xfefefe00fefefe00ULL, 0x4444440044444400ULL,
756 0xcfcfcf00cfcfcf00, 0xb2b2b200b2b2b200, 0xc3c3c300c3c3c300, 756 0xcfcfcf00cfcfcf00ULL, 0xb2b2b200b2b2b200ULL, 0xc3c3c300c3c3c300ULL,
757 0xb5b5b500b5b5b500, 0x7a7a7a007a7a7a00, 0x9191910091919100, 757 0xb5b5b500b5b5b500ULL, 0x7a7a7a007a7a7a00ULL, 0x9191910091919100ULL,
758 0x2424240024242400, 0x0808080008080800, 0xe8e8e800e8e8e800, 758 0x2424240024242400ULL, 0x0808080008080800ULL, 0xe8e8e800e8e8e800ULL,
759 0xa8a8a800a8a8a800, 0x6060600060606000, 0xfcfcfc00fcfcfc00, 759 0xa8a8a800a8a8a800ULL, 0x6060600060606000ULL, 0xfcfcfc00fcfcfc00ULL,
760 0x6969690069696900, 0x5050500050505000, 0xaaaaaa00aaaaaa00, 760 0x6969690069696900ULL, 0x5050500050505000ULL, 0xaaaaaa00aaaaaa00ULL,
761 0xd0d0d000d0d0d000, 0xa0a0a000a0a0a000, 0x7d7d7d007d7d7d00, 761 0xd0d0d000d0d0d000ULL, 0xa0a0a000a0a0a000ULL, 0x7d7d7d007d7d7d00ULL,
762 0xa1a1a100a1a1a100, 0x8989890089898900, 0x6262620062626200, 762 0xa1a1a100a1a1a100ULL, 0x8989890089898900ULL, 0x6262620062626200ULL,
763 0x9797970097979700, 0x5454540054545400, 0x5b5b5b005b5b5b00, 763 0x9797970097979700ULL, 0x5454540054545400ULL, 0x5b5b5b005b5b5b00ULL,
764 0x1e1e1e001e1e1e00, 0x9595950095959500, 0xe0e0e000e0e0e000, 764 0x1e1e1e001e1e1e00ULL, 0x9595950095959500ULL, 0xe0e0e000e0e0e000ULL,
765 0xffffff00ffffff00, 0x6464640064646400, 0xd2d2d200d2d2d200, 765 0xffffff00ffffff00ULL, 0x6464640064646400ULL, 0xd2d2d200d2d2d200ULL,
766 0x1010100010101000, 0xc4c4c400c4c4c400, 0x0000000000000000, 766 0x1010100010101000ULL, 0xc4c4c400c4c4c400ULL, 0x0000000000000000ULL,
767 0x4848480048484800, 0xa3a3a300a3a3a300, 0xf7f7f700f7f7f700, 767 0x4848480048484800ULL, 0xa3a3a300a3a3a300ULL, 0xf7f7f700f7f7f700ULL,
768 0x7575750075757500, 0xdbdbdb00dbdbdb00, 0x8a8a8a008a8a8a00, 768 0x7575750075757500ULL, 0xdbdbdb00dbdbdb00ULL, 0x8a8a8a008a8a8a00ULL,
769 0x0303030003030300, 0xe6e6e600e6e6e600, 0xdadada00dadada00, 769 0x0303030003030300ULL, 0xe6e6e600e6e6e600ULL, 0xdadada00dadada00ULL,
770 0x0909090009090900, 0x3f3f3f003f3f3f00, 0xdddddd00dddddd00, 770 0x0909090009090900ULL, 0x3f3f3f003f3f3f00ULL, 0xdddddd00dddddd00ULL,
771 0x9494940094949400, 0x8787870087878700, 0x5c5c5c005c5c5c00, 771 0x9494940094949400ULL, 0x8787870087878700ULL, 0x5c5c5c005c5c5c00ULL,
772 0x8383830083838300, 0x0202020002020200, 0xcdcdcd00cdcdcd00, 772 0x8383830083838300ULL, 0x0202020002020200ULL, 0xcdcdcd00cdcdcd00ULL,
773 0x4a4a4a004a4a4a00, 0x9090900090909000, 0x3333330033333300, 773 0x4a4a4a004a4a4a00ULL, 0x9090900090909000ULL, 0x3333330033333300ULL,
774 0x7373730073737300, 0x6767670067676700, 0xf6f6f600f6f6f600, 774 0x7373730073737300ULL, 0x6767670067676700ULL, 0xf6f6f600f6f6f600ULL,
775 0xf3f3f300f3f3f300, 0x9d9d9d009d9d9d00, 0x7f7f7f007f7f7f00, 775 0xf3f3f300f3f3f300ULL, 0x9d9d9d009d9d9d00ULL, 0x7f7f7f007f7f7f00ULL,
776 0xbfbfbf00bfbfbf00, 0xe2e2e200e2e2e200, 0x5252520052525200, 776 0xbfbfbf00bfbfbf00ULL, 0xe2e2e200e2e2e200ULL, 0x5252520052525200ULL,
777 0x9b9b9b009b9b9b00, 0xd8d8d800d8d8d800, 0x2626260026262600, 777 0x9b9b9b009b9b9b00ULL, 0xd8d8d800d8d8d800ULL, 0x2626260026262600ULL,
778 0xc8c8c800c8c8c800, 0x3737370037373700, 0xc6c6c600c6c6c600, 778 0xc8c8c800c8c8c800ULL, 0x3737370037373700ULL, 0xc6c6c600c6c6c600ULL,
779 0x3b3b3b003b3b3b00, 0x8181810081818100, 0x9696960096969600, 779 0x3b3b3b003b3b3b00ULL, 0x8181810081818100ULL, 0x9696960096969600ULL,
780 0x6f6f6f006f6f6f00, 0x4b4b4b004b4b4b00, 0x1313130013131300, 780 0x6f6f6f006f6f6f00ULL, 0x4b4b4b004b4b4b00ULL, 0x1313130013131300ULL,
781 0xbebebe00bebebe00, 0x6363630063636300, 0x2e2e2e002e2e2e00, 781 0xbebebe00bebebe00ULL, 0x6363630063636300ULL, 0x2e2e2e002e2e2e00ULL,
782 0xe9e9e900e9e9e900, 0x7979790079797900, 0xa7a7a700a7a7a700, 782 0xe9e9e900e9e9e900ULL, 0x7979790079797900ULL, 0xa7a7a700a7a7a700ULL,
783 0x8c8c8c008c8c8c00, 0x9f9f9f009f9f9f00, 0x6e6e6e006e6e6e00, 783 0x8c8c8c008c8c8c00ULL, 0x9f9f9f009f9f9f00ULL, 0x6e6e6e006e6e6e00ULL,
784 0xbcbcbc00bcbcbc00, 0x8e8e8e008e8e8e00, 0x2929290029292900, 784 0xbcbcbc00bcbcbc00ULL, 0x8e8e8e008e8e8e00ULL, 0x2929290029292900ULL,
785 0xf5f5f500f5f5f500, 0xf9f9f900f9f9f900, 0xb6b6b600b6b6b600, 785 0xf5f5f500f5f5f500ULL, 0xf9f9f900f9f9f900ULL, 0xb6b6b600b6b6b600ULL,
786 0x2f2f2f002f2f2f00, 0xfdfdfd00fdfdfd00, 0xb4b4b400b4b4b400, 786 0x2f2f2f002f2f2f00ULL, 0xfdfdfd00fdfdfd00ULL, 0xb4b4b400b4b4b400ULL,
787 0x5959590059595900, 0x7878780078787800, 0x9898980098989800, 787 0x5959590059595900ULL, 0x7878780078787800ULL, 0x9898980098989800ULL,
788 0x0606060006060600, 0x6a6a6a006a6a6a00, 0xe7e7e700e7e7e700, 788 0x0606060006060600ULL, 0x6a6a6a006a6a6a00ULL, 0xe7e7e700e7e7e700ULL,
789 0x4646460046464600, 0x7171710071717100, 0xbababa00bababa00, 789 0x4646460046464600ULL, 0x7171710071717100ULL, 0xbababa00bababa00ULL,
790 0xd4d4d400d4d4d400, 0x2525250025252500, 0xababab00ababab00, 790 0xd4d4d400d4d4d400ULL, 0x2525250025252500ULL, 0xababab00ababab00ULL,
791 0x4242420042424200, 0x8888880088888800, 0xa2a2a200a2a2a200, 791 0x4242420042424200ULL, 0x8888880088888800ULL, 0xa2a2a200a2a2a200ULL,
792 0x8d8d8d008d8d8d00, 0xfafafa00fafafa00, 0x7272720072727200, 792 0x8d8d8d008d8d8d00ULL, 0xfafafa00fafafa00ULL, 0x7272720072727200ULL,
793 0x0707070007070700, 0xb9b9b900b9b9b900, 0x5555550055555500, 793 0x0707070007070700ULL, 0xb9b9b900b9b9b900ULL, 0x5555550055555500ULL,
794 0xf8f8f800f8f8f800, 0xeeeeee00eeeeee00, 0xacacac00acacac00, 794 0xf8f8f800f8f8f800ULL, 0xeeeeee00eeeeee00ULL, 0xacacac00acacac00ULL,
795 0x0a0a0a000a0a0a00, 0x3636360036363600, 0x4949490049494900, 795 0x0a0a0a000a0a0a00ULL, 0x3636360036363600ULL, 0x4949490049494900ULL,
796 0x2a2a2a002a2a2a00, 0x6868680068686800, 0x3c3c3c003c3c3c00, 796 0x2a2a2a002a2a2a00ULL, 0x6868680068686800ULL, 0x3c3c3c003c3c3c00ULL,
797 0x3838380038383800, 0xf1f1f100f1f1f100, 0xa4a4a400a4a4a400, 797 0x3838380038383800ULL, 0xf1f1f100f1f1f100ULL, 0xa4a4a400a4a4a400ULL,
798 0x4040400040404000, 0x2828280028282800, 0xd3d3d300d3d3d300, 798 0x4040400040404000ULL, 0x2828280028282800ULL, 0xd3d3d300d3d3d300ULL,
799 0x7b7b7b007b7b7b00, 0xbbbbbb00bbbbbb00, 0xc9c9c900c9c9c900, 799 0x7b7b7b007b7b7b00ULL, 0xbbbbbb00bbbbbb00ULL, 0xc9c9c900c9c9c900ULL,
800 0x4343430043434300, 0xc1c1c100c1c1c100, 0x1515150015151500, 800 0x4343430043434300ULL, 0xc1c1c100c1c1c100ULL, 0x1515150015151500ULL,
801 0xe3e3e300e3e3e300, 0xadadad00adadad00, 0xf4f4f400f4f4f400, 801 0xe3e3e300e3e3e300ULL, 0xadadad00adadad00ULL, 0xf4f4f400f4f4f400ULL,
802 0x7777770077777700, 0xc7c7c700c7c7c700, 0x8080800080808000, 802 0x7777770077777700ULL, 0xc7c7c700c7c7c700ULL, 0x8080800080808000ULL,
803 0x9e9e9e009e9e9e00, 803 0x9e9e9e009e9e9e00ULL,
804}; 804};
805 805
806/* key constants */ 806/* key constants */
@@ -1601,7 +1601,6 @@ static struct crypto_alg camellia_algs[6] = { {
1601 .cra_ctxsize = sizeof(struct camellia_ctx), 1601 .cra_ctxsize = sizeof(struct camellia_ctx),
1602 .cra_alignmask = 0, 1602 .cra_alignmask = 0,
1603 .cra_module = THIS_MODULE, 1603 .cra_module = THIS_MODULE,
1604 .cra_list = LIST_HEAD_INIT(camellia_algs[0].cra_list),
1605 .cra_u = { 1604 .cra_u = {
1606 .cipher = { 1605 .cipher = {
1607 .cia_min_keysize = CAMELLIA_MIN_KEY_SIZE, 1606 .cia_min_keysize = CAMELLIA_MIN_KEY_SIZE,
@@ -1621,7 +1620,6 @@ static struct crypto_alg camellia_algs[6] = { {
1621 .cra_alignmask = 0, 1620 .cra_alignmask = 0,
1622 .cra_type = &crypto_blkcipher_type, 1621 .cra_type = &crypto_blkcipher_type,
1623 .cra_module = THIS_MODULE, 1622 .cra_module = THIS_MODULE,
1624 .cra_list = LIST_HEAD_INIT(camellia_algs[1].cra_list),
1625 .cra_u = { 1623 .cra_u = {
1626 .blkcipher = { 1624 .blkcipher = {
1627 .min_keysize = CAMELLIA_MIN_KEY_SIZE, 1625 .min_keysize = CAMELLIA_MIN_KEY_SIZE,
@@ -1641,7 +1639,6 @@ static struct crypto_alg camellia_algs[6] = { {
1641 .cra_alignmask = 0, 1639 .cra_alignmask = 0,
1642 .cra_type = &crypto_blkcipher_type, 1640 .cra_type = &crypto_blkcipher_type,
1643 .cra_module = THIS_MODULE, 1641 .cra_module = THIS_MODULE,
1644 .cra_list = LIST_HEAD_INIT(camellia_algs[2].cra_list),
1645 .cra_u = { 1642 .cra_u = {
1646 .blkcipher = { 1643 .blkcipher = {
1647 .min_keysize = CAMELLIA_MIN_KEY_SIZE, 1644 .min_keysize = CAMELLIA_MIN_KEY_SIZE,
@@ -1662,7 +1659,6 @@ static struct crypto_alg camellia_algs[6] = { {
1662 .cra_alignmask = 0, 1659 .cra_alignmask = 0,
1663 .cra_type = &crypto_blkcipher_type, 1660 .cra_type = &crypto_blkcipher_type,
1664 .cra_module = THIS_MODULE, 1661 .cra_module = THIS_MODULE,
1665 .cra_list = LIST_HEAD_INIT(camellia_algs[3].cra_list),
1666 .cra_u = { 1662 .cra_u = {
1667 .blkcipher = { 1663 .blkcipher = {
1668 .min_keysize = CAMELLIA_MIN_KEY_SIZE, 1664 .min_keysize = CAMELLIA_MIN_KEY_SIZE,
@@ -1683,7 +1679,6 @@ static struct crypto_alg camellia_algs[6] = { {
1683 .cra_alignmask = 0, 1679 .cra_alignmask = 0,
1684 .cra_type = &crypto_blkcipher_type, 1680 .cra_type = &crypto_blkcipher_type,
1685 .cra_module = THIS_MODULE, 1681 .cra_module = THIS_MODULE,
1686 .cra_list = LIST_HEAD_INIT(camellia_algs[4].cra_list),
1687 .cra_exit = lrw_exit_tfm, 1682 .cra_exit = lrw_exit_tfm,
1688 .cra_u = { 1683 .cra_u = {
1689 .blkcipher = { 1684 .blkcipher = {
@@ -1707,7 +1702,6 @@ static struct crypto_alg camellia_algs[6] = { {
1707 .cra_alignmask = 0, 1702 .cra_alignmask = 0,
1708 .cra_type = &crypto_blkcipher_type, 1703 .cra_type = &crypto_blkcipher_type,
1709 .cra_module = THIS_MODULE, 1704 .cra_module = THIS_MODULE,
1710 .cra_list = LIST_HEAD_INIT(camellia_algs[5].cra_list),
1711 .cra_u = { 1705 .cra_u = {
1712 .blkcipher = { 1706 .blkcipher = {
1713 .min_keysize = CAMELLIA_MIN_KEY_SIZE * 2, 1707 .min_keysize = CAMELLIA_MIN_KEY_SIZE * 2,
diff --git a/arch/x86/crypto/cast5-avx-x86_64-asm_64.S b/arch/x86/crypto/cast5-avx-x86_64-asm_64.S
new file mode 100644
index 00000000000..a41a3aaba22
--- /dev/null
+++ b/arch/x86/crypto/cast5-avx-x86_64-asm_64.S
@@ -0,0 +1,376 @@
1/*
2 * Cast5 Cipher 16-way parallel algorithm (AVX/x86_64)
3 *
4 * Copyright (C) 2012 Johannes Goetzfried
5 * <Johannes.Goetzfried@informatik.stud.uni-erlangen.de>
6 *
7 * Copyright © 2012 Jussi Kivilinna <jussi.kivilinna@mbnet.fi>
8 *
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, write to the Free Software
21 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
22 * USA
23 *
24 */
25
26.file "cast5-avx-x86_64-asm_64.S"
27
28.extern cast5_s1
29.extern cast5_s2
30.extern cast5_s3
31.extern cast5_s4
32
33/* structure of crypto context */
34#define km 0
35#define kr (16*4)
36#define rr ((16*4)+16)
37
38/* s-boxes */
39#define s1 cast5_s1
40#define s2 cast5_s2
41#define s3 cast5_s3
42#define s4 cast5_s4
43
44/**********************************************************************
45 16-way AVX cast5
46 **********************************************************************/
47#define CTX %rdi
48
49#define RL1 %xmm0
50#define RR1 %xmm1
51#define RL2 %xmm2
52#define RR2 %xmm3
53#define RL3 %xmm4
54#define RR3 %xmm5
55#define RL4 %xmm6
56#define RR4 %xmm7
57
58#define RX %xmm8
59
60#define RKM %xmm9
61#define RKR %xmm10
62#define RKRF %xmm11
63#define RKRR %xmm12
64
65#define R32 %xmm13
66#define R1ST %xmm14
67
68#define RTMP %xmm15
69
70#define RID1 %rbp
71#define RID1d %ebp
72#define RID2 %rsi
73#define RID2d %esi
74
75#define RGI1 %rdx
76#define RGI1bl %dl
77#define RGI1bh %dh
78#define RGI2 %rcx
79#define RGI2bl %cl
80#define RGI2bh %ch
81
82#define RGI3 %rax
83#define RGI3bl %al
84#define RGI3bh %ah
85#define RGI4 %rbx
86#define RGI4bl %bl
87#define RGI4bh %bh
88
89#define RFS1 %r8
90#define RFS1d %r8d
91#define RFS2 %r9
92#define RFS2d %r9d
93#define RFS3 %r10
94#define RFS3d %r10d
95
96
97#define lookup_32bit(src, dst, op1, op2, op3, interleave_op, il_reg) \
98 movzbl src ## bh, RID1d; \
99 movzbl src ## bl, RID2d; \
100 shrq $16, src; \
101 movl s1(, RID1, 4), dst ## d; \
102 op1 s2(, RID2, 4), dst ## d; \
103 movzbl src ## bh, RID1d; \
104 movzbl src ## bl, RID2d; \
105 interleave_op(il_reg); \
106 op2 s3(, RID1, 4), dst ## d; \
107 op3 s4(, RID2, 4), dst ## d;
108
109#define dummy(d) /* do nothing */
110
111#define shr_next(reg) \
112 shrq $16, reg;
113
114#define F_head(a, x, gi1, gi2, op0) \
115 op0 a, RKM, x; \
116 vpslld RKRF, x, RTMP; \
117 vpsrld RKRR, x, x; \
118 vpor RTMP, x, x; \
119 \
120 vmovq x, gi1; \
121 vpextrq $1, x, gi2;
122
123#define F_tail(a, x, gi1, gi2, op1, op2, op3) \
124 lookup_32bit(##gi1, RFS1, op1, op2, op3, shr_next, ##gi1); \
125 lookup_32bit(##gi2, RFS3, op1, op2, op3, shr_next, ##gi2); \
126 \
127 lookup_32bit(##gi1, RFS2, op1, op2, op3, dummy, none); \
128 shlq $32, RFS2; \
129 orq RFS1, RFS2; \
130 lookup_32bit(##gi2, RFS1, op1, op2, op3, dummy, none); \
131 shlq $32, RFS1; \
132 orq RFS1, RFS3; \
133 \
134 vmovq RFS2, x; \
135 vpinsrq $1, RFS3, x, x;
136
137#define F_2(a1, b1, a2, b2, op0, op1, op2, op3) \
138 F_head(b1, RX, RGI1, RGI2, op0); \
139 F_head(b2, RX, RGI3, RGI4, op0); \
140 \
141 F_tail(b1, RX, RGI1, RGI2, op1, op2, op3); \
142 F_tail(b2, RTMP, RGI3, RGI4, op1, op2, op3); \
143 \
144 vpxor a1, RX, a1; \
145 vpxor a2, RTMP, a2;
146
147#define F1_2(a1, b1, a2, b2) \
148 F_2(a1, b1, a2, b2, vpaddd, xorl, subl, addl)
149#define F2_2(a1, b1, a2, b2) \
150 F_2(a1, b1, a2, b2, vpxor, subl, addl, xorl)
151#define F3_2(a1, b1, a2, b2) \
152 F_2(a1, b1, a2, b2, vpsubd, addl, xorl, subl)
153
154#define subround(a1, b1, a2, b2, f) \
155 F ## f ## _2(a1, b1, a2, b2);
156
157#define round(l, r, n, f) \
158 vbroadcastss (km+(4*n))(CTX), RKM; \
159 vpand R1ST, RKR, RKRF; \
160 vpsubq RKRF, R32, RKRR; \
161 vpsrldq $1, RKR, RKR; \
162 subround(l ## 1, r ## 1, l ## 2, r ## 2, f); \
163 subround(l ## 3, r ## 3, l ## 4, r ## 4, f);
164
165#define enc_preload_rkr() \
166 vbroadcastss .L16_mask, RKR; \
167 /* add 16-bit rotation to key rotations (mod 32) */ \
168 vpxor kr(CTX), RKR, RKR;
169
170#define dec_preload_rkr() \
171 vbroadcastss .L16_mask, RKR; \
172 /* add 16-bit rotation to key rotations (mod 32) */ \
173 vpxor kr(CTX), RKR, RKR; \
174 vpshufb .Lbswap128_mask, RKR, RKR;
175
176#define transpose_2x4(x0, x1, t0, t1) \
177 vpunpckldq x1, x0, t0; \
178 vpunpckhdq x1, x0, t1; \
179 \
180 vpunpcklqdq t1, t0, x0; \
181 vpunpckhqdq t1, t0, x1;
182
183#define inpack_blocks(in, x0, x1, t0, t1, rmask) \
184 vmovdqu (0*4*4)(in), x0; \
185 vmovdqu (1*4*4)(in), x1; \
186 vpshufb rmask, x0, x0; \
187 vpshufb rmask, x1, x1; \
188 \
189 transpose_2x4(x0, x1, t0, t1)
190
191#define outunpack_blocks(out, x0, x1, t0, t1, rmask) \
192 transpose_2x4(x0, x1, t0, t1) \
193 \
194 vpshufb rmask, x0, x0; \
195 vpshufb rmask, x1, x1; \
196 vmovdqu x0, (0*4*4)(out); \
197 vmovdqu x1, (1*4*4)(out);
198
199#define outunpack_xor_blocks(out, x0, x1, t0, t1, rmask) \
200 transpose_2x4(x0, x1, t0, t1) \
201 \
202 vpshufb rmask, x0, x0; \
203 vpshufb rmask, x1, x1; \
204 vpxor (0*4*4)(out), x0, x0; \
205 vmovdqu x0, (0*4*4)(out); \
206 vpxor (1*4*4)(out), x1, x1; \
207 vmovdqu x1, (1*4*4)(out);
208
209.data
210
211.align 16
212.Lbswap_mask:
213 .byte 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12
214.Lbswap128_mask:
215 .byte 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0
216.L16_mask:
217 .byte 16, 16, 16, 16
218.L32_mask:
219 .byte 32, 0, 0, 0
220.Lfirst_mask:
221 .byte 0x1f, 0, 0, 0
222
223.text
224
225.align 16
226.global __cast5_enc_blk_16way
227.type __cast5_enc_blk_16way,@function;
228
229__cast5_enc_blk_16way:
230 /* input:
231 * %rdi: ctx, CTX
232 * %rsi: dst
233 * %rdx: src
234 * %rcx: bool, if true: xor output
235 */
236
237 pushq %rbp;
238 pushq %rbx;
239 pushq %rcx;
240
241 vmovdqa .Lbswap_mask, RKM;
242 vmovd .Lfirst_mask, R1ST;
243 vmovd .L32_mask, R32;
244 enc_preload_rkr();
245
246 leaq 1*(2*4*4)(%rdx), %rax;
247 inpack_blocks(%rdx, RL1, RR1, RTMP, RX, RKM);
248 inpack_blocks(%rax, RL2, RR2, RTMP, RX, RKM);
249 leaq 2*(2*4*4)(%rdx), %rax;
250 inpack_blocks(%rax, RL3, RR3, RTMP, RX, RKM);
251 leaq 3*(2*4*4)(%rdx), %rax;
252 inpack_blocks(%rax, RL4, RR4, RTMP, RX, RKM);
253
254 movq %rsi, %r11;
255
256 round(RL, RR, 0, 1);
257 round(RR, RL, 1, 2);
258 round(RL, RR, 2, 3);
259 round(RR, RL, 3, 1);
260 round(RL, RR, 4, 2);
261 round(RR, RL, 5, 3);
262 round(RL, RR, 6, 1);
263 round(RR, RL, 7, 2);
264 round(RL, RR, 8, 3);
265 round(RR, RL, 9, 1);
266 round(RL, RR, 10, 2);
267 round(RR, RL, 11, 3);
268
269 movzbl rr(CTX), %eax;
270 testl %eax, %eax;
271 jnz __skip_enc;
272
273 round(RL, RR, 12, 1);
274 round(RR, RL, 13, 2);
275 round(RL, RR, 14, 3);
276 round(RR, RL, 15, 1);
277
278__skip_enc:
279 popq %rcx;
280 popq %rbx;
281 popq %rbp;
282
283 vmovdqa .Lbswap_mask, RKM;
284 leaq 1*(2*4*4)(%r11), %rax;
285
286 testb %cl, %cl;
287 jnz __enc_xor16;
288
289 outunpack_blocks(%r11, RR1, RL1, RTMP, RX, RKM);
290 outunpack_blocks(%rax, RR2, RL2, RTMP, RX, RKM);
291 leaq 2*(2*4*4)(%r11), %rax;
292 outunpack_blocks(%rax, RR3, RL3, RTMP, RX, RKM);
293 leaq 3*(2*4*4)(%r11), %rax;
294 outunpack_blocks(%rax, RR4, RL4, RTMP, RX, RKM);
295
296 ret;
297
298__enc_xor16:
299 outunpack_xor_blocks(%r11, RR1, RL1, RTMP, RX, RKM);
300 outunpack_xor_blocks(%rax, RR2, RL2, RTMP, RX, RKM);
301 leaq 2*(2*4*4)(%r11), %rax;
302 outunpack_xor_blocks(%rax, RR3, RL3, RTMP, RX, RKM);
303 leaq 3*(2*4*4)(%r11), %rax;
304 outunpack_xor_blocks(%rax, RR4, RL4, RTMP, RX, RKM);
305
306 ret;
307
308.align 16
309.global cast5_dec_blk_16way
310.type cast5_dec_blk_16way,@function;
311
312cast5_dec_blk_16way:
313 /* input:
314 * %rdi: ctx, CTX
315 * %rsi: dst
316 * %rdx: src
317 */
318
319 pushq %rbp;
320 pushq %rbx;
321
322 vmovdqa .Lbswap_mask, RKM;
323 vmovd .Lfirst_mask, R1ST;
324 vmovd .L32_mask, R32;
325 dec_preload_rkr();
326
327 leaq 1*(2*4*4)(%rdx), %rax;
328 inpack_blocks(%rdx, RL1, RR1, RTMP, RX, RKM);
329 inpack_blocks(%rax, RL2, RR2, RTMP, RX, RKM);
330 leaq 2*(2*4*4)(%rdx), %rax;
331 inpack_blocks(%rax, RL3, RR3, RTMP, RX, RKM);
332 leaq 3*(2*4*4)(%rdx), %rax;
333 inpack_blocks(%rax, RL4, RR4, RTMP, RX, RKM);
334
335 movq %rsi, %r11;
336
337 movzbl rr(CTX), %eax;
338 testl %eax, %eax;
339 jnz __skip_dec;
340
341 round(RL, RR, 15, 1);
342 round(RR, RL, 14, 3);
343 round(RL, RR, 13, 2);
344 round(RR, RL, 12, 1);
345
346__dec_tail:
347 round(RL, RR, 11, 3);
348 round(RR, RL, 10, 2);
349 round(RL, RR, 9, 1);
350 round(RR, RL, 8, 3);
351 round(RL, RR, 7, 2);
352 round(RR, RL, 6, 1);
353 round(RL, RR, 5, 3);
354 round(RR, RL, 4, 2);
355 round(RL, RR, 3, 1);
356 round(RR, RL, 2, 3);
357 round(RL, RR, 1, 2);
358 round(RR, RL, 0, 1);
359
360 vmovdqa .Lbswap_mask, RKM;
361 popq %rbx;
362 popq %rbp;
363
364 leaq 1*(2*4*4)(%r11), %rax;
365 outunpack_blocks(%r11, RR1, RL1, RTMP, RX, RKM);
366 outunpack_blocks(%rax, RR2, RL2, RTMP, RX, RKM);
367 leaq 2*(2*4*4)(%r11), %rax;
368 outunpack_blocks(%rax, RR3, RL3, RTMP, RX, RKM);
369 leaq 3*(2*4*4)(%r11), %rax;
370 outunpack_blocks(%rax, RR4, RL4, RTMP, RX, RKM);
371
372 ret;
373
374__skip_dec:
375 vpsrldq $4, RKR, RKR;
376 jmp __dec_tail;
diff --git a/arch/x86/crypto/cast5_avx_glue.c b/arch/x86/crypto/cast5_avx_glue.c
new file mode 100644
index 00000000000..e0ea14f9547
--- /dev/null
+++ b/arch/x86/crypto/cast5_avx_glue.c
@@ -0,0 +1,530 @@
1/*
2 * Glue Code for the AVX assembler implemention of the Cast5 Cipher
3 *
4 * Copyright (C) 2012 Johannes Goetzfried
5 * <Johannes.Goetzfried@informatik.stud.uni-erlangen.de>
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
20 * USA
21 *
22 */
23
24#include <linux/module.h>
25#include <linux/hardirq.h>
26#include <linux/types.h>
27#include <linux/crypto.h>
28#include <linux/err.h>
29#include <crypto/algapi.h>
30#include <crypto/cast5.h>
31#include <crypto/cryptd.h>
32#include <crypto/ctr.h>
33#include <asm/xcr.h>
34#include <asm/xsave.h>
35#include <asm/crypto/ablk_helper.h>
36#include <asm/crypto/glue_helper.h>
37
38#define CAST5_PARALLEL_BLOCKS 16
39
40asmlinkage void __cast5_enc_blk_16way(struct cast5_ctx *ctx, u8 *dst,
41 const u8 *src, bool xor);
42asmlinkage void cast5_dec_blk_16way(struct cast5_ctx *ctx, u8 *dst,
43 const u8 *src);
44
45static inline void cast5_enc_blk_xway(struct cast5_ctx *ctx, u8 *dst,
46 const u8 *src)
47{
48 __cast5_enc_blk_16way(ctx, dst, src, false);
49}
50
51static inline void cast5_enc_blk_xway_xor(struct cast5_ctx *ctx, u8 *dst,
52 const u8 *src)
53{
54 __cast5_enc_blk_16way(ctx, dst, src, true);
55}
56
57static inline void cast5_dec_blk_xway(struct cast5_ctx *ctx, u8 *dst,
58 const u8 *src)
59{
60 cast5_dec_blk_16way(ctx, dst, src);
61}
62
63
64static inline bool cast5_fpu_begin(bool fpu_enabled, unsigned int nbytes)
65{
66 return glue_fpu_begin(CAST5_BLOCK_SIZE, CAST5_PARALLEL_BLOCKS,
67 NULL, fpu_enabled, nbytes);
68}
69
70static inline void cast5_fpu_end(bool fpu_enabled)
71{
72 return glue_fpu_end(fpu_enabled);
73}
74
75static int ecb_crypt(struct blkcipher_desc *desc, struct blkcipher_walk *walk,
76 bool enc)
77{
78 bool fpu_enabled = false;
79 struct cast5_ctx *ctx = crypto_blkcipher_ctx(desc->tfm);
80 const unsigned int bsize = CAST5_BLOCK_SIZE;
81 unsigned int nbytes;
82 int err;
83
84 err = blkcipher_walk_virt(desc, walk);
85 desc->flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP;
86
87 while ((nbytes = walk->nbytes)) {
88 u8 *wsrc = walk->src.virt.addr;
89 u8 *wdst = walk->dst.virt.addr;
90
91 fpu_enabled = cast5_fpu_begin(fpu_enabled, nbytes);
92
93 /* Process multi-block batch */
94 if (nbytes >= bsize * CAST5_PARALLEL_BLOCKS) {
95 do {
96 if (enc)
97 cast5_enc_blk_xway(ctx, wdst, wsrc);
98 else
99 cast5_dec_blk_xway(ctx, wdst, wsrc);
100
101 wsrc += bsize * CAST5_PARALLEL_BLOCKS;
102 wdst += bsize * CAST5_PARALLEL_BLOCKS;
103 nbytes -= bsize * CAST5_PARALLEL_BLOCKS;
104 } while (nbytes >= bsize * CAST5_PARALLEL_BLOCKS);
105
106 if (nbytes < bsize)
107 goto done;
108 }
109
110 /* Handle leftovers */
111 do {
112 if (enc)
113 __cast5_encrypt(ctx, wdst, wsrc);
114 else
115 __cast5_decrypt(ctx, wdst, wsrc);
116
117 wsrc += bsize;
118 wdst += bsize;
119 nbytes -= bsize;
120 } while (nbytes >= bsize);
121
122done:
123 err = blkcipher_walk_done(desc, walk, nbytes);
124 }
125
126 cast5_fpu_end(fpu_enabled);
127 return err;
128}
129
130static int ecb_encrypt(struct blkcipher_desc *desc, struct scatterlist *dst,
131 struct scatterlist *src, unsigned int nbytes)
132{
133 struct blkcipher_walk walk;
134
135 blkcipher_walk_init(&walk, dst, src, nbytes);
136 return ecb_crypt(desc, &walk, true);
137}
138
139static int ecb_decrypt(struct blkcipher_desc *desc, struct scatterlist *dst,
140 struct scatterlist *src, unsigned int nbytes)
141{
142 struct blkcipher_walk walk;
143
144 blkcipher_walk_init(&walk, dst, src, nbytes);
145 return ecb_crypt(desc, &walk, false);
146}
147
148static unsigned int __cbc_encrypt(struct blkcipher_desc *desc,
149 struct blkcipher_walk *walk)
150{
151 struct cast5_ctx *ctx = crypto_blkcipher_ctx(desc->tfm);
152 const unsigned int bsize = CAST5_BLOCK_SIZE;
153 unsigned int nbytes = walk->nbytes;
154 u64 *src = (u64 *)walk->src.virt.addr;
155 u64 *dst = (u64 *)walk->dst.virt.addr;
156 u64 *iv = (u64 *)walk->iv;
157
158 do {
159 *dst = *src ^ *iv;
160 __cast5_encrypt(ctx, (u8 *)dst, (u8 *)dst);
161 iv = dst;
162
163 src += 1;
164 dst += 1;
165 nbytes -= bsize;
166 } while (nbytes >= bsize);
167
168 *(u64 *)walk->iv = *iv;
169 return nbytes;
170}
171
172static int cbc_encrypt(struct blkcipher_desc *desc, struct scatterlist *dst,
173 struct scatterlist *src, unsigned int nbytes)
174{
175 struct blkcipher_walk walk;
176 int err;
177
178 blkcipher_walk_init(&walk, dst, src, nbytes);
179 err = blkcipher_walk_virt(desc, &walk);
180
181 while ((nbytes = walk.nbytes)) {
182 nbytes = __cbc_encrypt(desc, &walk);
183 err = blkcipher_walk_done(desc, &walk, nbytes);
184 }
185
186 return err;
187}
188
189static unsigned int __cbc_decrypt(struct blkcipher_desc *desc,
190 struct blkcipher_walk *walk)
191{
192 struct cast5_ctx *ctx = crypto_blkcipher_ctx(desc->tfm);
193 const unsigned int bsize = CAST5_BLOCK_SIZE;
194 unsigned int nbytes = walk->nbytes;
195 u64 *src = (u64 *)walk->src.virt.addr;
196 u64 *dst = (u64 *)walk->dst.virt.addr;
197 u64 ivs[CAST5_PARALLEL_BLOCKS - 1];
198 u64 last_iv;
199 int i;
200
201 /* Start of the last block. */
202 src += nbytes / bsize - 1;
203 dst += nbytes / bsize - 1;
204
205 last_iv = *src;
206
207 /* Process multi-block batch */
208 if (nbytes >= bsize * CAST5_PARALLEL_BLOCKS) {
209 do {
210 nbytes -= bsize * (CAST5_PARALLEL_BLOCKS - 1);
211 src -= CAST5_PARALLEL_BLOCKS - 1;
212 dst -= CAST5_PARALLEL_BLOCKS - 1;
213
214 for (i = 0; i < CAST5_PARALLEL_BLOCKS - 1; i++)
215 ivs[i] = src[i];
216
217 cast5_dec_blk_xway(ctx, (u8 *)dst, (u8 *)src);
218
219 for (i = 0; i < CAST5_PARALLEL_BLOCKS - 1; i++)
220 *(dst + (i + 1)) ^= *(ivs + i);
221
222 nbytes -= bsize;
223 if (nbytes < bsize)
224 goto done;
225
226 *dst ^= *(src - 1);
227 src -= 1;
228 dst -= 1;
229 } while (nbytes >= bsize * CAST5_PARALLEL_BLOCKS);
230
231 if (nbytes < bsize)
232 goto done;
233 }
234
235 /* Handle leftovers */
236 for (;;) {
237 __cast5_decrypt(ctx, (u8 *)dst, (u8 *)src);
238
239 nbytes -= bsize;
240 if (nbytes < bsize)
241 break;
242
243 *dst ^= *(src - 1);
244 src -= 1;
245 dst -= 1;
246 }
247
248done:
249 *dst ^= *(u64 *)walk->iv;
250 *(u64 *)walk->iv = last_iv;
251
252 return nbytes;
253}
254
255static int cbc_decrypt(struct blkcipher_desc *desc, struct scatterlist *dst,
256 struct scatterlist *src, unsigned int nbytes)
257{
258 bool fpu_enabled = false;
259 struct blkcipher_walk walk;
260 int err;
261
262 blkcipher_walk_init(&walk, dst, src, nbytes);
263 err = blkcipher_walk_virt(desc, &walk);
264 desc->flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP;
265
266 while ((nbytes = walk.nbytes)) {
267 fpu_enabled = cast5_fpu_begin(fpu_enabled, nbytes);
268 nbytes = __cbc_decrypt(desc, &walk);
269 err = blkcipher_walk_done(desc, &walk, nbytes);
270 }
271
272 cast5_fpu_end(fpu_enabled);
273 return err;
274}
275
276static void ctr_crypt_final(struct blkcipher_desc *desc,
277 struct blkcipher_walk *walk)
278{
279 struct cast5_ctx *ctx = crypto_blkcipher_ctx(desc->tfm);
280 u8 *ctrblk = walk->iv;
281 u8 keystream[CAST5_BLOCK_SIZE];
282 u8 *src = walk->src.virt.addr;
283 u8 *dst = walk->dst.virt.addr;
284 unsigned int nbytes = walk->nbytes;
285
286 __cast5_encrypt(ctx, keystream, ctrblk);
287 crypto_xor(keystream, src, nbytes);
288 memcpy(dst, keystream, nbytes);
289
290 crypto_inc(ctrblk, CAST5_BLOCK_SIZE);
291}
292
293static unsigned int __ctr_crypt(struct blkcipher_desc *desc,
294 struct blkcipher_walk *walk)
295{
296 struct cast5_ctx *ctx = crypto_blkcipher_ctx(desc->tfm);
297 const unsigned int bsize = CAST5_BLOCK_SIZE;
298 unsigned int nbytes = walk->nbytes;
299 u64 *src = (u64 *)walk->src.virt.addr;
300 u64 *dst = (u64 *)walk->dst.virt.addr;
301 u64 ctrblk = be64_to_cpu(*(__be64 *)walk->iv);
302 __be64 ctrblocks[CAST5_PARALLEL_BLOCKS];
303 int i;
304
305 /* Process multi-block batch */
306 if (nbytes >= bsize * CAST5_PARALLEL_BLOCKS) {
307 do {
308 /* create ctrblks for parallel encrypt */
309 for (i = 0; i < CAST5_PARALLEL_BLOCKS; i++) {
310 if (dst != src)
311 dst[i] = src[i];
312
313 ctrblocks[i] = cpu_to_be64(ctrblk++);
314 }
315
316 cast5_enc_blk_xway_xor(ctx, (u8 *)dst,
317 (u8 *)ctrblocks);
318
319 src += CAST5_PARALLEL_BLOCKS;
320 dst += CAST5_PARALLEL_BLOCKS;
321 nbytes -= bsize * CAST5_PARALLEL_BLOCKS;
322 } while (nbytes >= bsize * CAST5_PARALLEL_BLOCKS);
323
324 if (nbytes < bsize)
325 goto done;
326 }
327
328 /* Handle leftovers */
329 do {
330 if (dst != src)
331 *dst = *src;
332
333 ctrblocks[0] = cpu_to_be64(ctrblk++);
334
335 __cast5_encrypt(ctx, (u8 *)ctrblocks, (u8 *)ctrblocks);
336 *dst ^= ctrblocks[0];
337
338 src += 1;
339 dst += 1;
340 nbytes -= bsize;
341 } while (nbytes >= bsize);
342
343done:
344 *(__be64 *)walk->iv = cpu_to_be64(ctrblk);
345 return nbytes;
346}
347
348static int ctr_crypt(struct blkcipher_desc *desc, struct scatterlist *dst,
349 struct scatterlist *src, unsigned int nbytes)
350{
351 bool fpu_enabled = false;
352 struct blkcipher_walk walk;
353 int err;
354
355 blkcipher_walk_init(&walk, dst, src, nbytes);
356 err = blkcipher_walk_virt_block(desc, &walk, CAST5_BLOCK_SIZE);
357 desc->flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP;
358
359 while ((nbytes = walk.nbytes) >= CAST5_BLOCK_SIZE) {
360 fpu_enabled = cast5_fpu_begin(fpu_enabled, nbytes);
361 nbytes = __ctr_crypt(desc, &walk);
362 err = blkcipher_walk_done(desc, &walk, nbytes);
363 }
364
365 cast5_fpu_end(fpu_enabled);
366
367 if (walk.nbytes) {
368 ctr_crypt_final(desc, &walk);
369 err = blkcipher_walk_done(desc, &walk, 0);
370 }
371
372 return err;
373}
374
375
376static struct crypto_alg cast5_algs[6] = { {
377 .cra_name = "__ecb-cast5-avx",
378 .cra_driver_name = "__driver-ecb-cast5-avx",
379 .cra_priority = 0,
380 .cra_flags = CRYPTO_ALG_TYPE_BLKCIPHER,
381 .cra_blocksize = CAST5_BLOCK_SIZE,
382 .cra_ctxsize = sizeof(struct cast5_ctx),
383 .cra_alignmask = 0,
384 .cra_type = &crypto_blkcipher_type,
385 .cra_module = THIS_MODULE,
386 .cra_u = {
387 .blkcipher = {
388 .min_keysize = CAST5_MIN_KEY_SIZE,
389 .max_keysize = CAST5_MAX_KEY_SIZE,
390 .setkey = cast5_setkey,
391 .encrypt = ecb_encrypt,
392 .decrypt = ecb_decrypt,
393 },
394 },
395}, {
396 .cra_name = "__cbc-cast5-avx",
397 .cra_driver_name = "__driver-cbc-cast5-avx",
398 .cra_priority = 0,
399 .cra_flags = CRYPTO_ALG_TYPE_BLKCIPHER,
400 .cra_blocksize = CAST5_BLOCK_SIZE,
401 .cra_ctxsize = sizeof(struct cast5_ctx),
402 .cra_alignmask = 0,
403 .cra_type = &crypto_blkcipher_type,
404 .cra_module = THIS_MODULE,
405 .cra_u = {
406 .blkcipher = {
407 .min_keysize = CAST5_MIN_KEY_SIZE,
408 .max_keysize = CAST5_MAX_KEY_SIZE,
409 .setkey = cast5_setkey,
410 .encrypt = cbc_encrypt,
411 .decrypt = cbc_decrypt,
412 },
413 },
414}, {
415 .cra_name = "__ctr-cast5-avx",
416 .cra_driver_name = "__driver-ctr-cast5-avx",
417 .cra_priority = 0,
418 .cra_flags = CRYPTO_ALG_TYPE_BLKCIPHER,
419 .cra_blocksize = 1,
420 .cra_ctxsize = sizeof(struct cast5_ctx),
421 .cra_alignmask = 0,
422 .cra_type = &crypto_blkcipher_type,
423 .cra_module = THIS_MODULE,
424 .cra_u = {
425 .blkcipher = {
426 .min_keysize = CAST5_MIN_KEY_SIZE,
427 .max_keysize = CAST5_MAX_KEY_SIZE,
428 .ivsize = CAST5_BLOCK_SIZE,
429 .setkey = cast5_setkey,
430 .encrypt = ctr_crypt,
431 .decrypt = ctr_crypt,
432 },
433 },
434}, {
435 .cra_name = "ecb(cast5)",
436 .cra_driver_name = "ecb-cast5-avx",
437 .cra_priority = 200,
438 .cra_flags = CRYPTO_ALG_TYPE_ABLKCIPHER | CRYPTO_ALG_ASYNC,
439 .cra_blocksize = CAST5_BLOCK_SIZE,
440 .cra_ctxsize = sizeof(struct async_helper_ctx),
441 .cra_alignmask = 0,
442 .cra_type = &crypto_ablkcipher_type,
443 .cra_module = THIS_MODULE,
444 .cra_init = ablk_init,
445 .cra_exit = ablk_exit,
446 .cra_u = {
447 .ablkcipher = {
448 .min_keysize = CAST5_MIN_KEY_SIZE,
449 .max_keysize = CAST5_MAX_KEY_SIZE,
450 .setkey = ablk_set_key,
451 .encrypt = ablk_encrypt,
452 .decrypt = ablk_decrypt,
453 },
454 },
455}, {
456 .cra_name = "cbc(cast5)",
457 .cra_driver_name = "cbc-cast5-avx",
458 .cra_priority = 200,
459 .cra_flags = CRYPTO_ALG_TYPE_ABLKCIPHER | CRYPTO_ALG_ASYNC,
460 .cra_blocksize = CAST5_BLOCK_SIZE,
461 .cra_ctxsize = sizeof(struct async_helper_ctx),
462 .cra_alignmask = 0,
463 .cra_type = &crypto_ablkcipher_type,
464 .cra_module = THIS_MODULE,
465 .cra_init = ablk_init,
466 .cra_exit = ablk_exit,
467 .cra_u = {
468 .ablkcipher = {
469 .min_keysize = CAST5_MIN_KEY_SIZE,
470 .max_keysize = CAST5_MAX_KEY_SIZE,
471 .ivsize = CAST5_BLOCK_SIZE,
472 .setkey = ablk_set_key,
473 .encrypt = __ablk_encrypt,
474 .decrypt = ablk_decrypt,
475 },
476 },
477}, {
478 .cra_name = "ctr(cast5)",
479 .cra_driver_name = "ctr-cast5-avx",
480 .cra_priority = 200,
481 .cra_flags = CRYPTO_ALG_TYPE_ABLKCIPHER | CRYPTO_ALG_ASYNC,
482 .cra_blocksize = 1,
483 .cra_ctxsize = sizeof(struct async_helper_ctx),
484 .cra_alignmask = 0,
485 .cra_type = &crypto_ablkcipher_type,
486 .cra_module = THIS_MODULE,
487 .cra_init = ablk_init,
488 .cra_exit = ablk_exit,
489 .cra_u = {
490 .ablkcipher = {
491 .min_keysize = CAST5_MIN_KEY_SIZE,
492 .max_keysize = CAST5_MAX_KEY_SIZE,
493 .ivsize = CAST5_BLOCK_SIZE,
494 .setkey = ablk_set_key,
495 .encrypt = ablk_encrypt,
496 .decrypt = ablk_encrypt,
497 .geniv = "chainiv",
498 },
499 },
500} };
501
502static int __init cast5_init(void)
503{
504 u64 xcr0;
505
506 if (!cpu_has_avx || !cpu_has_osxsave) {
507 pr_info("AVX instructions are not detected.\n");
508 return -ENODEV;
509 }
510
511 xcr0 = xgetbv(XCR_XFEATURE_ENABLED_MASK);
512 if ((xcr0 & (XSTATE_SSE | XSTATE_YMM)) != (XSTATE_SSE | XSTATE_YMM)) {
513 pr_info("AVX detected but unusable.\n");
514 return -ENODEV;
515 }
516
517 return crypto_register_algs(cast5_algs, ARRAY_SIZE(cast5_algs));
518}
519
520static void __exit cast5_exit(void)
521{
522 crypto_unregister_algs(cast5_algs, ARRAY_SIZE(cast5_algs));
523}
524
525module_init(cast5_init);
526module_exit(cast5_exit);
527
528MODULE_DESCRIPTION("Cast5 Cipher Algorithm, AVX optimized");
529MODULE_LICENSE("GPL");
530MODULE_ALIAS("cast5");
diff --git a/arch/x86/crypto/cast6-avx-x86_64-asm_64.S b/arch/x86/crypto/cast6-avx-x86_64-asm_64.S
new file mode 100644
index 00000000000..218d283772f
--- /dev/null
+++ b/arch/x86/crypto/cast6-avx-x86_64-asm_64.S
@@ -0,0 +1,383 @@
1/*
2 * Cast6 Cipher 8-way parallel algorithm (AVX/x86_64)
3 *
4 * Copyright (C) 2012 Johannes Goetzfried
5 * <Johannes.Goetzfried@informatik.stud.uni-erlangen.de>
6 *
7 * Copyright © 2012 Jussi Kivilinna <jussi.kivilinna@mbnet.fi>
8 *
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, write to the Free Software
21 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
22 * USA
23 *
24 */
25
26.file "cast6-avx-x86_64-asm_64.S"
27
28.extern cast6_s1
29.extern cast6_s2
30.extern cast6_s3
31.extern cast6_s4
32
33/* structure of crypto context */
34#define km 0
35#define kr (12*4*4)
36
37/* s-boxes */
38#define s1 cast6_s1
39#define s2 cast6_s2
40#define s3 cast6_s3
41#define s4 cast6_s4
42
43/**********************************************************************
44 8-way AVX cast6
45 **********************************************************************/
46#define CTX %rdi
47
48#define RA1 %xmm0
49#define RB1 %xmm1
50#define RC1 %xmm2
51#define RD1 %xmm3
52
53#define RA2 %xmm4
54#define RB2 %xmm5
55#define RC2 %xmm6
56#define RD2 %xmm7
57
58#define RX %xmm8
59
60#define RKM %xmm9
61#define RKR %xmm10
62#define RKRF %xmm11
63#define RKRR %xmm12
64#define R32 %xmm13
65#define R1ST %xmm14
66
67#define RTMP %xmm15
68
69#define RID1 %rbp
70#define RID1d %ebp
71#define RID2 %rsi
72#define RID2d %esi
73
74#define RGI1 %rdx
75#define RGI1bl %dl
76#define RGI1bh %dh
77#define RGI2 %rcx
78#define RGI2bl %cl
79#define RGI2bh %ch
80
81#define RGI3 %rax
82#define RGI3bl %al
83#define RGI3bh %ah
84#define RGI4 %rbx
85#define RGI4bl %bl
86#define RGI4bh %bh
87
88#define RFS1 %r8
89#define RFS1d %r8d
90#define RFS2 %r9
91#define RFS2d %r9d
92#define RFS3 %r10
93#define RFS3d %r10d
94
95
96#define lookup_32bit(src, dst, op1, op2, op3, interleave_op, il_reg) \
97 movzbl src ## bh, RID1d; \
98 movzbl src ## bl, RID2d; \
99 shrq $16, src; \
100 movl s1(, RID1, 4), dst ## d; \
101 op1 s2(, RID2, 4), dst ## d; \
102 movzbl src ## bh, RID1d; \
103 movzbl src ## bl, RID2d; \
104 interleave_op(il_reg); \
105 op2 s3(, RID1, 4), dst ## d; \
106 op3 s4(, RID2, 4), dst ## d;
107
108#define dummy(d) /* do nothing */
109
110#define shr_next(reg) \
111 shrq $16, reg;
112
113#define F_head(a, x, gi1, gi2, op0) \
114 op0 a, RKM, x; \
115 vpslld RKRF, x, RTMP; \
116 vpsrld RKRR, x, x; \
117 vpor RTMP, x, x; \
118 \
119 vmovq x, gi1; \
120 vpextrq $1, x, gi2;
121
122#define F_tail(a, x, gi1, gi2, op1, op2, op3) \
123 lookup_32bit(##gi1, RFS1, op1, op2, op3, shr_next, ##gi1); \
124 lookup_32bit(##gi2, RFS3, op1, op2, op3, shr_next, ##gi2); \
125 \
126 lookup_32bit(##gi1, RFS2, op1, op2, op3, dummy, none); \
127 shlq $32, RFS2; \
128 orq RFS1, RFS2; \
129 lookup_32bit(##gi2, RFS1, op1, op2, op3, dummy, none); \
130 shlq $32, RFS1; \
131 orq RFS1, RFS3; \
132 \
133 vmovq RFS2, x; \
134 vpinsrq $1, RFS3, x, x;
135
136#define F_2(a1, b1, a2, b2, op0, op1, op2, op3) \
137 F_head(b1, RX, RGI1, RGI2, op0); \
138 F_head(b2, RX, RGI3, RGI4, op0); \
139 \
140 F_tail(b1, RX, RGI1, RGI2, op1, op2, op3); \
141 F_tail(b2, RTMP, RGI3, RGI4, op1, op2, op3); \
142 \
143 vpxor a1, RX, a1; \
144 vpxor a2, RTMP, a2;
145
146#define F1_2(a1, b1, a2, b2) \
147 F_2(a1, b1, a2, b2, vpaddd, xorl, subl, addl)
148#define F2_2(a1, b1, a2, b2) \
149 F_2(a1, b1, a2, b2, vpxor, subl, addl, xorl)
150#define F3_2(a1, b1, a2, b2) \
151 F_2(a1, b1, a2, b2, vpsubd, addl, xorl, subl)
152
153#define qop(in, out, f) \
154 F ## f ## _2(out ## 1, in ## 1, out ## 2, in ## 2);
155
156#define get_round_keys(nn) \
157 vbroadcastss (km+(4*(nn)))(CTX), RKM; \
158 vpand R1ST, RKR, RKRF; \
159 vpsubq RKRF, R32, RKRR; \
160 vpsrldq $1, RKR, RKR;
161
162#define Q(n) \
163 get_round_keys(4*n+0); \
164 qop(RD, RC, 1); \
165 \
166 get_round_keys(4*n+1); \
167 qop(RC, RB, 2); \
168 \
169 get_round_keys(4*n+2); \
170 qop(RB, RA, 3); \
171 \
172 get_round_keys(4*n+3); \
173 qop(RA, RD, 1);
174
175#define QBAR(n) \
176 get_round_keys(4*n+3); \
177 qop(RA, RD, 1); \
178 \
179 get_round_keys(4*n+2); \
180 qop(RB, RA, 3); \
181 \
182 get_round_keys(4*n+1); \
183 qop(RC, RB, 2); \
184 \
185 get_round_keys(4*n+0); \
186 qop(RD, RC, 1);
187
188#define shuffle(mask) \
189 vpshufb mask, RKR, RKR;
190
191#define preload_rkr(n, do_mask, mask) \
192 vbroadcastss .L16_mask, RKR; \
193 /* add 16-bit rotation to key rotations (mod 32) */ \
194 vpxor (kr+n*16)(CTX), RKR, RKR; \
195 do_mask(mask);
196
197#define transpose_4x4(x0, x1, x2, x3, t0, t1, t2) \
198 vpunpckldq x1, x0, t0; \
199 vpunpckhdq x1, x0, t2; \
200 vpunpckldq x3, x2, t1; \
201 vpunpckhdq x3, x2, x3; \
202 \
203 vpunpcklqdq t1, t0, x0; \
204 vpunpckhqdq t1, t0, x1; \
205 vpunpcklqdq x3, t2, x2; \
206 vpunpckhqdq x3, t2, x3;
207
208#define inpack_blocks(in, x0, x1, x2, x3, t0, t1, t2, rmask) \
209 vmovdqu (0*4*4)(in), x0; \
210 vmovdqu (1*4*4)(in), x1; \
211 vmovdqu (2*4*4)(in), x2; \
212 vmovdqu (3*4*4)(in), x3; \
213 vpshufb rmask, x0, x0; \
214 vpshufb rmask, x1, x1; \
215 vpshufb rmask, x2, x2; \
216 vpshufb rmask, x3, x3; \
217 \
218 transpose_4x4(x0, x1, x2, x3, t0, t1, t2)
219
220#define outunpack_blocks(out, x0, x1, x2, x3, t0, t1, t2, rmask) \
221 transpose_4x4(x0, x1, x2, x3, t0, t1, t2) \
222 \
223 vpshufb rmask, x0, x0; \
224 vpshufb rmask, x1, x1; \
225 vpshufb rmask, x2, x2; \
226 vpshufb rmask, x3, x3; \
227 vmovdqu x0, (0*4*4)(out); \
228 vmovdqu x1, (1*4*4)(out); \
229 vmovdqu x2, (2*4*4)(out); \
230 vmovdqu x3, (3*4*4)(out);
231
232#define outunpack_xor_blocks(out, x0, x1, x2, x3, t0, t1, t2, rmask) \
233 transpose_4x4(x0, x1, x2, x3, t0, t1, t2) \
234 \
235 vpshufb rmask, x0, x0; \
236 vpshufb rmask, x1, x1; \
237 vpshufb rmask, x2, x2; \
238 vpshufb rmask, x3, x3; \
239 vpxor (0*4*4)(out), x0, x0; \
240 vmovdqu x0, (0*4*4)(out); \
241 vpxor (1*4*4)(out), x1, x1; \
242 vmovdqu x1, (1*4*4)(out); \
243 vpxor (2*4*4)(out), x2, x2; \
244 vmovdqu x2, (2*4*4)(out); \
245 vpxor (3*4*4)(out), x3, x3; \
246 vmovdqu x3, (3*4*4)(out);
247
248.data
249
250.align 16
251.Lbswap_mask:
252 .byte 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12
253.Lrkr_enc_Q_Q_QBAR_QBAR:
254 .byte 0, 1, 2, 3, 4, 5, 6, 7, 11, 10, 9, 8, 15, 14, 13, 12
255.Lrkr_enc_QBAR_QBAR_QBAR_QBAR:
256 .byte 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12
257.Lrkr_dec_Q_Q_Q_Q:
258 .byte 12, 13, 14, 15, 8, 9, 10, 11, 4, 5, 6, 7, 0, 1, 2, 3
259.Lrkr_dec_Q_Q_QBAR_QBAR:
260 .byte 12, 13, 14, 15, 8, 9, 10, 11, 7, 6, 5, 4, 3, 2, 1, 0
261.Lrkr_dec_QBAR_QBAR_QBAR_QBAR:
262 .byte 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0
263.L16_mask:
264 .byte 16, 16, 16, 16
265.L32_mask:
266 .byte 32, 0, 0, 0
267.Lfirst_mask:
268 .byte 0x1f, 0, 0, 0
269
270.text
271
272.align 16
273.global __cast6_enc_blk_8way
274.type __cast6_enc_blk_8way,@function;
275
276__cast6_enc_blk_8way:
277 /* input:
278 * %rdi: ctx, CTX
279 * %rsi: dst
280 * %rdx: src
281 * %rcx: bool, if true: xor output
282 */
283
284 pushq %rbp;
285 pushq %rbx;
286 pushq %rcx;
287
288 vmovdqa .Lbswap_mask, RKM;
289 vmovd .Lfirst_mask, R1ST;
290 vmovd .L32_mask, R32;
291
292 leaq (4*4*4)(%rdx), %rax;
293 inpack_blocks(%rdx, RA1, RB1, RC1, RD1, RTMP, RX, RKRF, RKM);
294 inpack_blocks(%rax, RA2, RB2, RC2, RD2, RTMP, RX, RKRF, RKM);
295
296 movq %rsi, %r11;
297
298 preload_rkr(0, dummy, none);
299 Q(0);
300 Q(1);
301 Q(2);
302 Q(3);
303 preload_rkr(1, shuffle, .Lrkr_enc_Q_Q_QBAR_QBAR);
304 Q(4);
305 Q(5);
306 QBAR(6);
307 QBAR(7);
308 preload_rkr(2, shuffle, .Lrkr_enc_QBAR_QBAR_QBAR_QBAR);
309 QBAR(8);
310 QBAR(9);
311 QBAR(10);
312 QBAR(11);
313
314 popq %rcx;
315 popq %rbx;
316 popq %rbp;
317
318 vmovdqa .Lbswap_mask, RKM;
319 leaq (4*4*4)(%r11), %rax;
320
321 testb %cl, %cl;
322 jnz __enc_xor8;
323
324 outunpack_blocks(%r11, RA1, RB1, RC1, RD1, RTMP, RX, RKRF, RKM);
325 outunpack_blocks(%rax, RA2, RB2, RC2, RD2, RTMP, RX, RKRF, RKM);
326
327 ret;
328
329__enc_xor8:
330 outunpack_xor_blocks(%r11, RA1, RB1, RC1, RD1, RTMP, RX, RKRF, RKM);
331 outunpack_xor_blocks(%rax, RA2, RB2, RC2, RD2, RTMP, RX, RKRF, RKM);
332
333 ret;
334
335.align 16
336.global cast6_dec_blk_8way
337.type cast6_dec_blk_8way,@function;
338
339cast6_dec_blk_8way:
340 /* input:
341 * %rdi: ctx, CTX
342 * %rsi: dst
343 * %rdx: src
344 */
345
346 pushq %rbp;
347 pushq %rbx;
348
349 vmovdqa .Lbswap_mask, RKM;
350 vmovd .Lfirst_mask, R1ST;
351 vmovd .L32_mask, R32;
352
353 leaq (4*4*4)(%rdx), %rax;
354 inpack_blocks(%rdx, RA1, RB1, RC1, RD1, RTMP, RX, RKRF, RKM);
355 inpack_blocks(%rax, RA2, RB2, RC2, RD2, RTMP, RX, RKRF, RKM);
356
357 movq %rsi, %r11;
358
359 preload_rkr(2, shuffle, .Lrkr_dec_Q_Q_Q_Q);
360 Q(11);
361 Q(10);
362 Q(9);
363 Q(8);
364 preload_rkr(1, shuffle, .Lrkr_dec_Q_Q_QBAR_QBAR);
365 Q(7);
366 Q(6);
367 QBAR(5);
368 QBAR(4);
369 preload_rkr(0, shuffle, .Lrkr_dec_QBAR_QBAR_QBAR_QBAR);
370 QBAR(3);
371 QBAR(2);
372 QBAR(1);
373 QBAR(0);
374
375 popq %rbx;
376 popq %rbp;
377
378 vmovdqa .Lbswap_mask, RKM;
379 leaq (4*4*4)(%r11), %rax;
380 outunpack_blocks(%r11, RA1, RB1, RC1, RD1, RTMP, RX, RKRF, RKM);
381 outunpack_blocks(%rax, RA2, RB2, RC2, RD2, RTMP, RX, RKRF, RKM);
382
383 ret;
diff --git a/arch/x86/crypto/cast6_avx_glue.c b/arch/x86/crypto/cast6_avx_glue.c
new file mode 100644
index 00000000000..15e5f85a501
--- /dev/null
+++ b/arch/x86/crypto/cast6_avx_glue.c
@@ -0,0 +1,648 @@
1/*
2 * Glue Code for the AVX assembler implemention of the Cast6 Cipher
3 *
4 * Copyright (C) 2012 Johannes Goetzfried
5 * <Johannes.Goetzfried@informatik.stud.uni-erlangen.de>
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
20 * USA
21 *
22 */
23
24#include <linux/module.h>
25#include <linux/hardirq.h>
26#include <linux/types.h>
27#include <linux/crypto.h>
28#include <linux/err.h>
29#include <crypto/algapi.h>
30#include <crypto/cast6.h>
31#include <crypto/cryptd.h>
32#include <crypto/b128ops.h>
33#include <crypto/ctr.h>
34#include <crypto/lrw.h>
35#include <crypto/xts.h>
36#include <asm/xcr.h>
37#include <asm/xsave.h>
38#include <asm/crypto/ablk_helper.h>
39#include <asm/crypto/glue_helper.h>
40
41#define CAST6_PARALLEL_BLOCKS 8
42
43asmlinkage void __cast6_enc_blk_8way(struct cast6_ctx *ctx, u8 *dst,
44 const u8 *src, bool xor);
45asmlinkage void cast6_dec_blk_8way(struct cast6_ctx *ctx, u8 *dst,
46 const u8 *src);
47
48static inline void cast6_enc_blk_xway(struct cast6_ctx *ctx, u8 *dst,
49 const u8 *src)
50{
51 __cast6_enc_blk_8way(ctx, dst, src, false);
52}
53
54static inline void cast6_enc_blk_xway_xor(struct cast6_ctx *ctx, u8 *dst,
55 const u8 *src)
56{
57 __cast6_enc_blk_8way(ctx, dst, src, true);
58}
59
60static inline void cast6_dec_blk_xway(struct cast6_ctx *ctx, u8 *dst,
61 const u8 *src)
62{
63 cast6_dec_blk_8way(ctx, dst, src);
64}
65
66
67static void cast6_decrypt_cbc_xway(void *ctx, u128 *dst, const u128 *src)
68{
69 u128 ivs[CAST6_PARALLEL_BLOCKS - 1];
70 unsigned int j;
71
72 for (j = 0; j < CAST6_PARALLEL_BLOCKS - 1; j++)
73 ivs[j] = src[j];
74
75 cast6_dec_blk_xway(ctx, (u8 *)dst, (u8 *)src);
76
77 for (j = 0; j < CAST6_PARALLEL_BLOCKS - 1; j++)
78 u128_xor(dst + (j + 1), dst + (j + 1), ivs + j);
79}
80
81static void cast6_crypt_ctr(void *ctx, u128 *dst, const u128 *src, u128 *iv)
82{
83 be128 ctrblk;
84
85 u128_to_be128(&ctrblk, iv);
86 u128_inc(iv);
87
88 __cast6_encrypt(ctx, (u8 *)&ctrblk, (u8 *)&ctrblk);
89 u128_xor(dst, src, (u128 *)&ctrblk);
90}
91
92static void cast6_crypt_ctr_xway(void *ctx, u128 *dst, const u128 *src,
93 u128 *iv)
94{
95 be128 ctrblks[CAST6_PARALLEL_BLOCKS];
96 unsigned int i;
97
98 for (i = 0; i < CAST6_PARALLEL_BLOCKS; i++) {
99 if (dst != src)
100 dst[i] = src[i];
101
102 u128_to_be128(&ctrblks[i], iv);
103 u128_inc(iv);
104 }
105
106 cast6_enc_blk_xway_xor(ctx, (u8 *)dst, (u8 *)ctrblks);
107}
108
109static const struct common_glue_ctx cast6_enc = {
110 .num_funcs = 2,
111 .fpu_blocks_limit = CAST6_PARALLEL_BLOCKS,
112
113 .funcs = { {
114 .num_blocks = CAST6_PARALLEL_BLOCKS,
115 .fn_u = { .ecb = GLUE_FUNC_CAST(cast6_enc_blk_xway) }
116 }, {
117 .num_blocks = 1,
118 .fn_u = { .ecb = GLUE_FUNC_CAST(__cast6_encrypt) }
119 } }
120};
121
122static const struct common_glue_ctx cast6_ctr = {
123 .num_funcs = 2,
124 .fpu_blocks_limit = CAST6_PARALLEL_BLOCKS,
125
126 .funcs = { {
127 .num_blocks = CAST6_PARALLEL_BLOCKS,
128 .fn_u = { .ctr = GLUE_CTR_FUNC_CAST(cast6_crypt_ctr_xway) }
129 }, {
130 .num_blocks = 1,
131 .fn_u = { .ctr = GLUE_CTR_FUNC_CAST(cast6_crypt_ctr) }
132 } }
133};
134
135static const struct common_glue_ctx cast6_dec = {
136 .num_funcs = 2,
137 .fpu_blocks_limit = CAST6_PARALLEL_BLOCKS,
138
139 .funcs = { {
140 .num_blocks = CAST6_PARALLEL_BLOCKS,
141 .fn_u = { .ecb = GLUE_FUNC_CAST(cast6_dec_blk_xway) }
142 }, {
143 .num_blocks = 1,
144 .fn_u = { .ecb = GLUE_FUNC_CAST(__cast6_decrypt) }
145 } }
146};
147
148static const struct common_glue_ctx cast6_dec_cbc = {
149 .num_funcs = 2,
150 .fpu_blocks_limit = CAST6_PARALLEL_BLOCKS,
151
152 .funcs = { {
153 .num_blocks = CAST6_PARALLEL_BLOCKS,
154 .fn_u = { .cbc = GLUE_CBC_FUNC_CAST(cast6_decrypt_cbc_xway) }
155 }, {
156 .num_blocks = 1,
157 .fn_u = { .cbc = GLUE_CBC_FUNC_CAST(__cast6_decrypt) }
158 } }
159};
160
161static int ecb_encrypt(struct blkcipher_desc *desc, struct scatterlist *dst,
162 struct scatterlist *src, unsigned int nbytes)
163{
164 return glue_ecb_crypt_128bit(&cast6_enc, desc, dst, src, nbytes);
165}
166
167static int ecb_decrypt(struct blkcipher_desc *desc, struct scatterlist *dst,
168 struct scatterlist *src, unsigned int nbytes)
169{
170 return glue_ecb_crypt_128bit(&cast6_dec, desc, dst, src, nbytes);
171}
172
173static int cbc_encrypt(struct blkcipher_desc *desc, struct scatterlist *dst,
174 struct scatterlist *src, unsigned int nbytes)
175{
176 return glue_cbc_encrypt_128bit(GLUE_FUNC_CAST(__cast6_encrypt), desc,
177 dst, src, nbytes);
178}
179
180static int cbc_decrypt(struct blkcipher_desc *desc, struct scatterlist *dst,
181 struct scatterlist *src, unsigned int nbytes)
182{
183 return glue_cbc_decrypt_128bit(&cast6_dec_cbc, desc, dst, src,
184 nbytes);
185}
186
187static int ctr_crypt(struct blkcipher_desc *desc, struct scatterlist *dst,
188 struct scatterlist *src, unsigned int nbytes)
189{
190 return glue_ctr_crypt_128bit(&cast6_ctr, desc, dst, src, nbytes);
191}
192
193static inline bool cast6_fpu_begin(bool fpu_enabled, unsigned int nbytes)
194{
195 return glue_fpu_begin(CAST6_BLOCK_SIZE, CAST6_PARALLEL_BLOCKS,
196 NULL, fpu_enabled, nbytes);
197}
198
199static inline void cast6_fpu_end(bool fpu_enabled)
200{
201 glue_fpu_end(fpu_enabled);
202}
203
204struct crypt_priv {
205 struct cast6_ctx *ctx;
206 bool fpu_enabled;
207};
208
209static void encrypt_callback(void *priv, u8 *srcdst, unsigned int nbytes)
210{
211 const unsigned int bsize = CAST6_BLOCK_SIZE;
212 struct crypt_priv *ctx = priv;
213 int i;
214
215 ctx->fpu_enabled = cast6_fpu_begin(ctx->fpu_enabled, nbytes);
216
217 if (nbytes == bsize * CAST6_PARALLEL_BLOCKS) {
218 cast6_enc_blk_xway(ctx->ctx, srcdst, srcdst);
219 return;
220 }
221
222 for (i = 0; i < nbytes / bsize; i++, srcdst += bsize)
223 __cast6_encrypt(ctx->ctx, srcdst, srcdst);
224}
225
226static void decrypt_callback(void *priv, u8 *srcdst, unsigned int nbytes)
227{
228 const unsigned int bsize = CAST6_BLOCK_SIZE;
229 struct crypt_priv *ctx = priv;
230 int i;
231
232 ctx->fpu_enabled = cast6_fpu_begin(ctx->fpu_enabled, nbytes);
233
234 if (nbytes == bsize * CAST6_PARALLEL_BLOCKS) {
235 cast6_dec_blk_xway(ctx->ctx, srcdst, srcdst);
236 return;
237 }
238
239 for (i = 0; i < nbytes / bsize; i++, srcdst += bsize)
240 __cast6_decrypt(ctx->ctx, srcdst, srcdst);
241}
242
243struct cast6_lrw_ctx {
244 struct lrw_table_ctx lrw_table;
245 struct cast6_ctx cast6_ctx;
246};
247
248static int lrw_cast6_setkey(struct crypto_tfm *tfm, const u8 *key,
249 unsigned int keylen)
250{
251 struct cast6_lrw_ctx *ctx = crypto_tfm_ctx(tfm);
252 int err;
253
254 err = __cast6_setkey(&ctx->cast6_ctx, key, keylen - CAST6_BLOCK_SIZE,
255 &tfm->crt_flags);
256 if (err)
257 return err;
258
259 return lrw_init_table(&ctx->lrw_table, key + keylen - CAST6_BLOCK_SIZE);
260}
261
262static int lrw_encrypt(struct blkcipher_desc *desc, struct scatterlist *dst,
263 struct scatterlist *src, unsigned int nbytes)
264{
265 struct cast6_lrw_ctx *ctx = crypto_blkcipher_ctx(desc->tfm);
266 be128 buf[CAST6_PARALLEL_BLOCKS];
267 struct crypt_priv crypt_ctx = {
268 .ctx = &ctx->cast6_ctx,
269 .fpu_enabled = false,
270 };
271 struct lrw_crypt_req req = {
272 .tbuf = buf,
273 .tbuflen = sizeof(buf),
274
275 .table_ctx = &ctx->lrw_table,
276 .crypt_ctx = &crypt_ctx,
277 .crypt_fn = encrypt_callback,
278 };
279 int ret;
280
281 desc->flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP;
282 ret = lrw_crypt(desc, dst, src, nbytes, &req);
283 cast6_fpu_end(crypt_ctx.fpu_enabled);
284
285 return ret;
286}
287
288static int lrw_decrypt(struct blkcipher_desc *desc, struct scatterlist *dst,
289 struct scatterlist *src, unsigned int nbytes)
290{
291 struct cast6_lrw_ctx *ctx = crypto_blkcipher_ctx(desc->tfm);
292 be128 buf[CAST6_PARALLEL_BLOCKS];
293 struct crypt_priv crypt_ctx = {
294 .ctx = &ctx->cast6_ctx,
295 .fpu_enabled = false,
296 };
297 struct lrw_crypt_req req = {
298 .tbuf = buf,
299 .tbuflen = sizeof(buf),
300
301 .table_ctx = &ctx->lrw_table,
302 .crypt_ctx = &crypt_ctx,
303 .crypt_fn = decrypt_callback,
304 };
305 int ret;
306
307 desc->flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP;
308 ret = lrw_crypt(desc, dst, src, nbytes, &req);
309 cast6_fpu_end(crypt_ctx.fpu_enabled);
310
311 return ret;
312}
313
314static void lrw_exit_tfm(struct crypto_tfm *tfm)
315{
316 struct cast6_lrw_ctx *ctx = crypto_tfm_ctx(tfm);
317
318 lrw_free_table(&ctx->lrw_table);
319}
320
321struct cast6_xts_ctx {
322 struct cast6_ctx tweak_ctx;
323 struct cast6_ctx crypt_ctx;
324};
325
326static int xts_cast6_setkey(struct crypto_tfm *tfm, const u8 *key,
327 unsigned int keylen)
328{
329 struct cast6_xts_ctx *ctx = crypto_tfm_ctx(tfm);
330 u32 *flags = &tfm->crt_flags;
331 int err;
332
333 /* key consists of keys of equal size concatenated, therefore
334 * the length must be even
335 */
336 if (keylen % 2) {
337 *flags |= CRYPTO_TFM_RES_BAD_KEY_LEN;
338 return -EINVAL;
339 }
340
341 /* first half of xts-key is for crypt */
342 err = __cast6_setkey(&ctx->crypt_ctx, key, keylen / 2, flags);
343 if (err)
344 return err;
345
346 /* second half of xts-key is for tweak */
347 return __cast6_setkey(&ctx->tweak_ctx, key + keylen / 2, keylen / 2,
348 flags);
349}
350
351static int xts_encrypt(struct blkcipher_desc *desc, struct scatterlist *dst,
352 struct scatterlist *src, unsigned int nbytes)
353{
354 struct cast6_xts_ctx *ctx = crypto_blkcipher_ctx(desc->tfm);
355 be128 buf[CAST6_PARALLEL_BLOCKS];
356 struct crypt_priv crypt_ctx = {
357 .ctx = &ctx->crypt_ctx,
358 .fpu_enabled = false,
359 };
360 struct xts_crypt_req req = {
361 .tbuf = buf,
362 .tbuflen = sizeof(buf),
363
364 .tweak_ctx = &ctx->tweak_ctx,
365 .tweak_fn = XTS_TWEAK_CAST(__cast6_encrypt),
366 .crypt_ctx = &crypt_ctx,
367 .crypt_fn = encrypt_callback,
368 };
369 int ret;
370
371 desc->flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP;
372 ret = xts_crypt(desc, dst, src, nbytes, &req);
373 cast6_fpu_end(crypt_ctx.fpu_enabled);
374
375 return ret;
376}
377
378static int xts_decrypt(struct blkcipher_desc *desc, struct scatterlist *dst,
379 struct scatterlist *src, unsigned int nbytes)
380{
381 struct cast6_xts_ctx *ctx = crypto_blkcipher_ctx(desc->tfm);
382 be128 buf[CAST6_PARALLEL_BLOCKS];
383 struct crypt_priv crypt_ctx = {
384 .ctx = &ctx->crypt_ctx,
385 .fpu_enabled = false,
386 };
387 struct xts_crypt_req req = {
388 .tbuf = buf,
389 .tbuflen = sizeof(buf),
390
391 .tweak_ctx = &ctx->tweak_ctx,
392 .tweak_fn = XTS_TWEAK_CAST(__cast6_encrypt),
393 .crypt_ctx = &crypt_ctx,
394 .crypt_fn = decrypt_callback,
395 };
396 int ret;
397
398 desc->flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP;
399 ret = xts_crypt(desc, dst, src, nbytes, &req);
400 cast6_fpu_end(crypt_ctx.fpu_enabled);
401
402 return ret;
403}
404
405static struct crypto_alg cast6_algs[10] = { {
406 .cra_name = "__ecb-cast6-avx",
407 .cra_driver_name = "__driver-ecb-cast6-avx",
408 .cra_priority = 0,
409 .cra_flags = CRYPTO_ALG_TYPE_BLKCIPHER,
410 .cra_blocksize = CAST6_BLOCK_SIZE,
411 .cra_ctxsize = sizeof(struct cast6_ctx),
412 .cra_alignmask = 0,
413 .cra_type = &crypto_blkcipher_type,
414 .cra_module = THIS_MODULE,
415 .cra_u = {
416 .blkcipher = {
417 .min_keysize = CAST6_MIN_KEY_SIZE,
418 .max_keysize = CAST6_MAX_KEY_SIZE,
419 .setkey = cast6_setkey,
420 .encrypt = ecb_encrypt,
421 .decrypt = ecb_decrypt,
422 },
423 },
424}, {
425 .cra_name = "__cbc-cast6-avx",
426 .cra_driver_name = "__driver-cbc-cast6-avx",
427 .cra_priority = 0,
428 .cra_flags = CRYPTO_ALG_TYPE_BLKCIPHER,
429 .cra_blocksize = CAST6_BLOCK_SIZE,
430 .cra_ctxsize = sizeof(struct cast6_ctx),
431 .cra_alignmask = 0,
432 .cra_type = &crypto_blkcipher_type,
433 .cra_module = THIS_MODULE,
434 .cra_u = {
435 .blkcipher = {
436 .min_keysize = CAST6_MIN_KEY_SIZE,
437 .max_keysize = CAST6_MAX_KEY_SIZE,
438 .setkey = cast6_setkey,
439 .encrypt = cbc_encrypt,
440 .decrypt = cbc_decrypt,
441 },
442 },
443}, {
444 .cra_name = "__ctr-cast6-avx",
445 .cra_driver_name = "__driver-ctr-cast6-avx",
446 .cra_priority = 0,
447 .cra_flags = CRYPTO_ALG_TYPE_BLKCIPHER,
448 .cra_blocksize = 1,
449 .cra_ctxsize = sizeof(struct cast6_ctx),
450 .cra_alignmask = 0,
451 .cra_type = &crypto_blkcipher_type,
452 .cra_module = THIS_MODULE,
453 .cra_u = {
454 .blkcipher = {
455 .min_keysize = CAST6_MIN_KEY_SIZE,
456 .max_keysize = CAST6_MAX_KEY_SIZE,
457 .ivsize = CAST6_BLOCK_SIZE,
458 .setkey = cast6_setkey,
459 .encrypt = ctr_crypt,
460 .decrypt = ctr_crypt,
461 },
462 },
463}, {
464 .cra_name = "__lrw-cast6-avx",
465 .cra_driver_name = "__driver-lrw-cast6-avx",
466 .cra_priority = 0,
467 .cra_flags = CRYPTO_ALG_TYPE_BLKCIPHER,
468 .cra_blocksize = CAST6_BLOCK_SIZE,
469 .cra_ctxsize = sizeof(struct cast6_lrw_ctx),
470 .cra_alignmask = 0,
471 .cra_type = &crypto_blkcipher_type,
472 .cra_module = THIS_MODULE,
473 .cra_exit = lrw_exit_tfm,
474 .cra_u = {
475 .blkcipher = {
476 .min_keysize = CAST6_MIN_KEY_SIZE +
477 CAST6_BLOCK_SIZE,
478 .max_keysize = CAST6_MAX_KEY_SIZE +
479 CAST6_BLOCK_SIZE,
480 .ivsize = CAST6_BLOCK_SIZE,
481 .setkey = lrw_cast6_setkey,
482 .encrypt = lrw_encrypt,
483 .decrypt = lrw_decrypt,
484 },
485 },
486}, {
487 .cra_name = "__xts-cast6-avx",
488 .cra_driver_name = "__driver-xts-cast6-avx",
489 .cra_priority = 0,
490 .cra_flags = CRYPTO_ALG_TYPE_BLKCIPHER,
491 .cra_blocksize = CAST6_BLOCK_SIZE,
492 .cra_ctxsize = sizeof(struct cast6_xts_ctx),
493 .cra_alignmask = 0,
494 .cra_type = &crypto_blkcipher_type,
495 .cra_module = THIS_MODULE,
496 .cra_u = {
497 .blkcipher = {
498 .min_keysize = CAST6_MIN_KEY_SIZE * 2,
499 .max_keysize = CAST6_MAX_KEY_SIZE * 2,
500 .ivsize = CAST6_BLOCK_SIZE,
501 .setkey = xts_cast6_setkey,
502 .encrypt = xts_encrypt,
503 .decrypt = xts_decrypt,
504 },
505 },
506}, {
507 .cra_name = "ecb(cast6)",
508 .cra_driver_name = "ecb-cast6-avx",
509 .cra_priority = 200,
510 .cra_flags = CRYPTO_ALG_TYPE_ABLKCIPHER | CRYPTO_ALG_ASYNC,
511 .cra_blocksize = CAST6_BLOCK_SIZE,
512 .cra_ctxsize = sizeof(struct async_helper_ctx),
513 .cra_alignmask = 0,
514 .cra_type = &crypto_ablkcipher_type,
515 .cra_module = THIS_MODULE,
516 .cra_init = ablk_init,
517 .cra_exit = ablk_exit,
518 .cra_u = {
519 .ablkcipher = {
520 .min_keysize = CAST6_MIN_KEY_SIZE,
521 .max_keysize = CAST6_MAX_KEY_SIZE,
522 .setkey = ablk_set_key,
523 .encrypt = ablk_encrypt,
524 .decrypt = ablk_decrypt,
525 },
526 },
527}, {
528 .cra_name = "cbc(cast6)",
529 .cra_driver_name = "cbc-cast6-avx",
530 .cra_priority = 200,
531 .cra_flags = CRYPTO_ALG_TYPE_ABLKCIPHER | CRYPTO_ALG_ASYNC,
532 .cra_blocksize = CAST6_BLOCK_SIZE,
533 .cra_ctxsize = sizeof(struct async_helper_ctx),
534 .cra_alignmask = 0,
535 .cra_type = &crypto_ablkcipher_type,
536 .cra_module = THIS_MODULE,
537 .cra_init = ablk_init,
538 .cra_exit = ablk_exit,
539 .cra_u = {
540 .ablkcipher = {
541 .min_keysize = CAST6_MIN_KEY_SIZE,
542 .max_keysize = CAST6_MAX_KEY_SIZE,
543 .ivsize = CAST6_BLOCK_SIZE,
544 .setkey = ablk_set_key,
545 .encrypt = __ablk_encrypt,
546 .decrypt = ablk_decrypt,
547 },
548 },
549}, {
550 .cra_name = "ctr(cast6)",
551 .cra_driver_name = "ctr-cast6-avx",
552 .cra_priority = 200,
553 .cra_flags = CRYPTO_ALG_TYPE_ABLKCIPHER | CRYPTO_ALG_ASYNC,
554 .cra_blocksize = 1,
555 .cra_ctxsize = sizeof(struct async_helper_ctx),
556 .cra_alignmask = 0,
557 .cra_type = &crypto_ablkcipher_type,
558 .cra_module = THIS_MODULE,
559 .cra_init = ablk_init,
560 .cra_exit = ablk_exit,
561 .cra_u = {
562 .ablkcipher = {
563 .min_keysize = CAST6_MIN_KEY_SIZE,
564 .max_keysize = CAST6_MAX_KEY_SIZE,
565 .ivsize = CAST6_BLOCK_SIZE,
566 .setkey = ablk_set_key,
567 .encrypt = ablk_encrypt,
568 .decrypt = ablk_encrypt,
569 .geniv = "chainiv",
570 },
571 },
572}, {
573 .cra_name = "lrw(cast6)",
574 .cra_driver_name = "lrw-cast6-avx",
575 .cra_priority = 200,
576 .cra_flags = CRYPTO_ALG_TYPE_ABLKCIPHER | CRYPTO_ALG_ASYNC,
577 .cra_blocksize = CAST6_BLOCK_SIZE,
578 .cra_ctxsize = sizeof(struct async_helper_ctx),
579 .cra_alignmask = 0,
580 .cra_type = &crypto_ablkcipher_type,
581 .cra_module = THIS_MODULE,
582 .cra_init = ablk_init,
583 .cra_exit = ablk_exit,
584 .cra_u = {
585 .ablkcipher = {
586 .min_keysize = CAST6_MIN_KEY_SIZE +
587 CAST6_BLOCK_SIZE,
588 .max_keysize = CAST6_MAX_KEY_SIZE +
589 CAST6_BLOCK_SIZE,
590 .ivsize = CAST6_BLOCK_SIZE,
591 .setkey = ablk_set_key,
592 .encrypt = ablk_encrypt,
593 .decrypt = ablk_decrypt,
594 },
595 },
596}, {
597 .cra_name = "xts(cast6)",
598 .cra_driver_name = "xts-cast6-avx",
599 .cra_priority = 200,
600 .cra_flags = CRYPTO_ALG_TYPE_ABLKCIPHER | CRYPTO_ALG_ASYNC,
601 .cra_blocksize = CAST6_BLOCK_SIZE,
602 .cra_ctxsize = sizeof(struct async_helper_ctx),
603 .cra_alignmask = 0,
604 .cra_type = &crypto_ablkcipher_type,
605 .cra_module = THIS_MODULE,
606 .cra_init = ablk_init,
607 .cra_exit = ablk_exit,
608 .cra_u = {
609 .ablkcipher = {
610 .min_keysize = CAST6_MIN_KEY_SIZE * 2,
611 .max_keysize = CAST6_MAX_KEY_SIZE * 2,
612 .ivsize = CAST6_BLOCK_SIZE,
613 .setkey = ablk_set_key,
614 .encrypt = ablk_encrypt,
615 .decrypt = ablk_decrypt,
616 },
617 },
618} };
619
620static int __init cast6_init(void)
621{
622 u64 xcr0;
623
624 if (!cpu_has_avx || !cpu_has_osxsave) {
625 pr_info("AVX instructions are not detected.\n");
626 return -ENODEV;
627 }
628
629 xcr0 = xgetbv(XCR_XFEATURE_ENABLED_MASK);
630 if ((xcr0 & (XSTATE_SSE | XSTATE_YMM)) != (XSTATE_SSE | XSTATE_YMM)) {
631 pr_info("AVX detected but unusable.\n");
632 return -ENODEV;
633 }
634
635 return crypto_register_algs(cast6_algs, ARRAY_SIZE(cast6_algs));
636}
637
638static void __exit cast6_exit(void)
639{
640 crypto_unregister_algs(cast6_algs, ARRAY_SIZE(cast6_algs));
641}
642
643module_init(cast6_init);
644module_exit(cast6_exit);
645
646MODULE_DESCRIPTION("Cast6 Cipher Algorithm, AVX optimized");
647MODULE_LICENSE("GPL");
648MODULE_ALIAS("cast6");
diff --git a/arch/x86/crypto/ghash-clmulni-intel_glue.c b/arch/x86/crypto/ghash-clmulni-intel_glue.c
index b4bf0a63b52..6759dd1135b 100644
--- a/arch/x86/crypto/ghash-clmulni-intel_glue.c
+++ b/arch/x86/crypto/ghash-clmulni-intel_glue.c
@@ -150,7 +150,6 @@ static struct shash_alg ghash_alg = {
150 .cra_blocksize = GHASH_BLOCK_SIZE, 150 .cra_blocksize = GHASH_BLOCK_SIZE,
151 .cra_ctxsize = sizeof(struct ghash_ctx), 151 .cra_ctxsize = sizeof(struct ghash_ctx),
152 .cra_module = THIS_MODULE, 152 .cra_module = THIS_MODULE,
153 .cra_list = LIST_HEAD_INIT(ghash_alg.base.cra_list),
154 }, 153 },
155}; 154};
156 155
@@ -288,7 +287,6 @@ static struct ahash_alg ghash_async_alg = {
288 .cra_blocksize = GHASH_BLOCK_SIZE, 287 .cra_blocksize = GHASH_BLOCK_SIZE,
289 .cra_type = &crypto_ahash_type, 288 .cra_type = &crypto_ahash_type,
290 .cra_module = THIS_MODULE, 289 .cra_module = THIS_MODULE,
291 .cra_list = LIST_HEAD_INIT(ghash_async_alg.halg.base.cra_list),
292 .cra_init = ghash_async_init_tfm, 290 .cra_init = ghash_async_init_tfm,
293 .cra_exit = ghash_async_exit_tfm, 291 .cra_exit = ghash_async_exit_tfm,
294 }, 292 },
diff --git a/arch/x86/crypto/glue_helper.c b/arch/x86/crypto/glue_helper.c
index 4854f0f31e4..30b3927bd73 100644
--- a/arch/x86/crypto/glue_helper.c
+++ b/arch/x86/crypto/glue_helper.c
@@ -110,7 +110,7 @@ static unsigned int __glue_cbc_encrypt_128bit(const common_glue_func_t fn,
110 nbytes -= bsize; 110 nbytes -= bsize;
111 } while (nbytes >= bsize); 111 } while (nbytes >= bsize);
112 112
113 u128_xor((u128 *)walk->iv, (u128 *)walk->iv, iv); 113 *(u128 *)walk->iv = *iv;
114 return nbytes; 114 return nbytes;
115} 115}
116 116
diff --git a/arch/x86/crypto/salsa20_glue.c b/arch/x86/crypto/salsa20_glue.c
index bccb76d8098..a3a3c0205c1 100644
--- a/arch/x86/crypto/salsa20_glue.c
+++ b/arch/x86/crypto/salsa20_glue.c
@@ -97,7 +97,6 @@ static struct crypto_alg alg = {
97 .cra_ctxsize = sizeof(struct salsa20_ctx), 97 .cra_ctxsize = sizeof(struct salsa20_ctx),
98 .cra_alignmask = 3, 98 .cra_alignmask = 3,
99 .cra_module = THIS_MODULE, 99 .cra_module = THIS_MODULE,
100 .cra_list = LIST_HEAD_INIT(alg.cra_list),
101 .cra_u = { 100 .cra_u = {
102 .blkcipher = { 101 .blkcipher = {
103 .setkey = setkey, 102 .setkey = setkey,
diff --git a/arch/x86/crypto/serpent_avx_glue.c b/arch/x86/crypto/serpent_avx_glue.c
index b36bdac237e..3f543a04cf1 100644
--- a/arch/x86/crypto/serpent_avx_glue.c
+++ b/arch/x86/crypto/serpent_avx_glue.c
@@ -390,7 +390,6 @@ static struct crypto_alg serpent_algs[10] = { {
390 .cra_alignmask = 0, 390 .cra_alignmask = 0,
391 .cra_type = &crypto_blkcipher_type, 391 .cra_type = &crypto_blkcipher_type,
392 .cra_module = THIS_MODULE, 392 .cra_module = THIS_MODULE,
393 .cra_list = LIST_HEAD_INIT(serpent_algs[0].cra_list),
394 .cra_u = { 393 .cra_u = {
395 .blkcipher = { 394 .blkcipher = {
396 .min_keysize = SERPENT_MIN_KEY_SIZE, 395 .min_keysize = SERPENT_MIN_KEY_SIZE,
@@ -410,7 +409,6 @@ static struct crypto_alg serpent_algs[10] = { {
410 .cra_alignmask = 0, 409 .cra_alignmask = 0,
411 .cra_type = &crypto_blkcipher_type, 410 .cra_type = &crypto_blkcipher_type,
412 .cra_module = THIS_MODULE, 411 .cra_module = THIS_MODULE,
413 .cra_list = LIST_HEAD_INIT(serpent_algs[1].cra_list),
414 .cra_u = { 412 .cra_u = {
415 .blkcipher = { 413 .blkcipher = {
416 .min_keysize = SERPENT_MIN_KEY_SIZE, 414 .min_keysize = SERPENT_MIN_KEY_SIZE,
@@ -430,7 +428,6 @@ static struct crypto_alg serpent_algs[10] = { {
430 .cra_alignmask = 0, 428 .cra_alignmask = 0,
431 .cra_type = &crypto_blkcipher_type, 429 .cra_type = &crypto_blkcipher_type,
432 .cra_module = THIS_MODULE, 430 .cra_module = THIS_MODULE,
433 .cra_list = LIST_HEAD_INIT(serpent_algs[2].cra_list),
434 .cra_u = { 431 .cra_u = {
435 .blkcipher = { 432 .blkcipher = {
436 .min_keysize = SERPENT_MIN_KEY_SIZE, 433 .min_keysize = SERPENT_MIN_KEY_SIZE,
@@ -451,7 +448,6 @@ static struct crypto_alg serpent_algs[10] = { {
451 .cra_alignmask = 0, 448 .cra_alignmask = 0,
452 .cra_type = &crypto_blkcipher_type, 449 .cra_type = &crypto_blkcipher_type,
453 .cra_module = THIS_MODULE, 450 .cra_module = THIS_MODULE,
454 .cra_list = LIST_HEAD_INIT(serpent_algs[3].cra_list),
455 .cra_exit = lrw_exit_tfm, 451 .cra_exit = lrw_exit_tfm,
456 .cra_u = { 452 .cra_u = {
457 .blkcipher = { 453 .blkcipher = {
@@ -475,7 +471,6 @@ static struct crypto_alg serpent_algs[10] = { {
475 .cra_alignmask = 0, 471 .cra_alignmask = 0,
476 .cra_type = &crypto_blkcipher_type, 472 .cra_type = &crypto_blkcipher_type,
477 .cra_module = THIS_MODULE, 473 .cra_module = THIS_MODULE,
478 .cra_list = LIST_HEAD_INIT(serpent_algs[4].cra_list),
479 .cra_u = { 474 .cra_u = {
480 .blkcipher = { 475 .blkcipher = {
481 .min_keysize = SERPENT_MIN_KEY_SIZE * 2, 476 .min_keysize = SERPENT_MIN_KEY_SIZE * 2,
@@ -496,7 +491,6 @@ static struct crypto_alg serpent_algs[10] = { {
496 .cra_alignmask = 0, 491 .cra_alignmask = 0,
497 .cra_type = &crypto_ablkcipher_type, 492 .cra_type = &crypto_ablkcipher_type,
498 .cra_module = THIS_MODULE, 493 .cra_module = THIS_MODULE,
499 .cra_list = LIST_HEAD_INIT(serpent_algs[5].cra_list),
500 .cra_init = ablk_init, 494 .cra_init = ablk_init,
501 .cra_exit = ablk_exit, 495 .cra_exit = ablk_exit,
502 .cra_u = { 496 .cra_u = {
@@ -518,7 +512,6 @@ static struct crypto_alg serpent_algs[10] = { {
518 .cra_alignmask = 0, 512 .cra_alignmask = 0,
519 .cra_type = &crypto_ablkcipher_type, 513 .cra_type = &crypto_ablkcipher_type,
520 .cra_module = THIS_MODULE, 514 .cra_module = THIS_MODULE,
521 .cra_list = LIST_HEAD_INIT(serpent_algs[6].cra_list),
522 .cra_init = ablk_init, 515 .cra_init = ablk_init,
523 .cra_exit = ablk_exit, 516 .cra_exit = ablk_exit,
524 .cra_u = { 517 .cra_u = {
@@ -541,7 +534,6 @@ static struct crypto_alg serpent_algs[10] = { {
541 .cra_alignmask = 0, 534 .cra_alignmask = 0,
542 .cra_type = &crypto_ablkcipher_type, 535 .cra_type = &crypto_ablkcipher_type,
543 .cra_module = THIS_MODULE, 536 .cra_module = THIS_MODULE,
544 .cra_list = LIST_HEAD_INIT(serpent_algs[7].cra_list),
545 .cra_init = ablk_init, 537 .cra_init = ablk_init,
546 .cra_exit = ablk_exit, 538 .cra_exit = ablk_exit,
547 .cra_u = { 539 .cra_u = {
@@ -565,7 +557,6 @@ static struct crypto_alg serpent_algs[10] = { {
565 .cra_alignmask = 0, 557 .cra_alignmask = 0,
566 .cra_type = &crypto_ablkcipher_type, 558 .cra_type = &crypto_ablkcipher_type,
567 .cra_module = THIS_MODULE, 559 .cra_module = THIS_MODULE,
568 .cra_list = LIST_HEAD_INIT(serpent_algs[8].cra_list),
569 .cra_init = ablk_init, 560 .cra_init = ablk_init,
570 .cra_exit = ablk_exit, 561 .cra_exit = ablk_exit,
571 .cra_u = { 562 .cra_u = {
@@ -590,7 +581,6 @@ static struct crypto_alg serpent_algs[10] = { {
590 .cra_alignmask = 0, 581 .cra_alignmask = 0,
591 .cra_type = &crypto_ablkcipher_type, 582 .cra_type = &crypto_ablkcipher_type,
592 .cra_module = THIS_MODULE, 583 .cra_module = THIS_MODULE,
593 .cra_list = LIST_HEAD_INIT(serpent_algs[9].cra_list),
594 .cra_init = ablk_init, 584 .cra_init = ablk_init,
595 .cra_exit = ablk_exit, 585 .cra_exit = ablk_exit,
596 .cra_u = { 586 .cra_u = {
diff --git a/arch/x86/crypto/serpent_sse2_glue.c b/arch/x86/crypto/serpent_sse2_glue.c
index d679c8675f4..9107a9908c4 100644
--- a/arch/x86/crypto/serpent_sse2_glue.c
+++ b/arch/x86/crypto/serpent_sse2_glue.c
@@ -393,7 +393,6 @@ static struct crypto_alg serpent_algs[10] = { {
393 .cra_alignmask = 0, 393 .cra_alignmask = 0,
394 .cra_type = &crypto_blkcipher_type, 394 .cra_type = &crypto_blkcipher_type,
395 .cra_module = THIS_MODULE, 395 .cra_module = THIS_MODULE,
396 .cra_list = LIST_HEAD_INIT(serpent_algs[0].cra_list),
397 .cra_u = { 396 .cra_u = {
398 .blkcipher = { 397 .blkcipher = {
399 .min_keysize = SERPENT_MIN_KEY_SIZE, 398 .min_keysize = SERPENT_MIN_KEY_SIZE,
@@ -413,7 +412,6 @@ static struct crypto_alg serpent_algs[10] = { {
413 .cra_alignmask = 0, 412 .cra_alignmask = 0,
414 .cra_type = &crypto_blkcipher_type, 413 .cra_type = &crypto_blkcipher_type,
415 .cra_module = THIS_MODULE, 414 .cra_module = THIS_MODULE,
416 .cra_list = LIST_HEAD_INIT(serpent_algs[1].cra_list),
417 .cra_u = { 415 .cra_u = {
418 .blkcipher = { 416 .blkcipher = {
419 .min_keysize = SERPENT_MIN_KEY_SIZE, 417 .min_keysize = SERPENT_MIN_KEY_SIZE,
@@ -433,7 +431,6 @@ static struct crypto_alg serpent_algs[10] = { {
433 .cra_alignmask = 0, 431 .cra_alignmask = 0,
434 .cra_type = &crypto_blkcipher_type, 432 .cra_type = &crypto_blkcipher_type,
435 .cra_module = THIS_MODULE, 433 .cra_module = THIS_MODULE,
436 .cra_list = LIST_HEAD_INIT(serpent_algs[2].cra_list),
437 .cra_u = { 434 .cra_u = {
438 .blkcipher = { 435 .blkcipher = {
439 .min_keysize = SERPENT_MIN_KEY_SIZE, 436 .min_keysize = SERPENT_MIN_KEY_SIZE,
@@ -454,7 +451,6 @@ static struct crypto_alg serpent_algs[10] = { {
454 .cra_alignmask = 0, 451 .cra_alignmask = 0,
455 .cra_type = &crypto_blkcipher_type, 452 .cra_type = &crypto_blkcipher_type,
456 .cra_module = THIS_MODULE, 453 .cra_module = THIS_MODULE,
457 .cra_list = LIST_HEAD_INIT(serpent_algs[3].cra_list),
458 .cra_exit = lrw_exit_tfm, 454 .cra_exit = lrw_exit_tfm,
459 .cra_u = { 455 .cra_u = {
460 .blkcipher = { 456 .blkcipher = {
@@ -478,7 +474,6 @@ static struct crypto_alg serpent_algs[10] = { {
478 .cra_alignmask = 0, 474 .cra_alignmask = 0,
479 .cra_type = &crypto_blkcipher_type, 475 .cra_type = &crypto_blkcipher_type,
480 .cra_module = THIS_MODULE, 476 .cra_module = THIS_MODULE,
481 .cra_list = LIST_HEAD_INIT(serpent_algs[4].cra_list),
482 .cra_u = { 477 .cra_u = {
483 .blkcipher = { 478 .blkcipher = {
484 .min_keysize = SERPENT_MIN_KEY_SIZE * 2, 479 .min_keysize = SERPENT_MIN_KEY_SIZE * 2,
@@ -499,7 +494,6 @@ static struct crypto_alg serpent_algs[10] = { {
499 .cra_alignmask = 0, 494 .cra_alignmask = 0,
500 .cra_type = &crypto_ablkcipher_type, 495 .cra_type = &crypto_ablkcipher_type,
501 .cra_module = THIS_MODULE, 496 .cra_module = THIS_MODULE,
502 .cra_list = LIST_HEAD_INIT(serpent_algs[5].cra_list),
503 .cra_init = ablk_init, 497 .cra_init = ablk_init,
504 .cra_exit = ablk_exit, 498 .cra_exit = ablk_exit,
505 .cra_u = { 499 .cra_u = {
@@ -521,7 +515,6 @@ static struct crypto_alg serpent_algs[10] = { {
521 .cra_alignmask = 0, 515 .cra_alignmask = 0,
522 .cra_type = &crypto_ablkcipher_type, 516 .cra_type = &crypto_ablkcipher_type,
523 .cra_module = THIS_MODULE, 517 .cra_module = THIS_MODULE,
524 .cra_list = LIST_HEAD_INIT(serpent_algs[6].cra_list),
525 .cra_init = ablk_init, 518 .cra_init = ablk_init,
526 .cra_exit = ablk_exit, 519 .cra_exit = ablk_exit,
527 .cra_u = { 520 .cra_u = {
@@ -544,7 +537,6 @@ static struct crypto_alg serpent_algs[10] = { {
544 .cra_alignmask = 0, 537 .cra_alignmask = 0,
545 .cra_type = &crypto_ablkcipher_type, 538 .cra_type = &crypto_ablkcipher_type,
546 .cra_module = THIS_MODULE, 539 .cra_module = THIS_MODULE,
547 .cra_list = LIST_HEAD_INIT(serpent_algs[7].cra_list),
548 .cra_init = ablk_init, 540 .cra_init = ablk_init,
549 .cra_exit = ablk_exit, 541 .cra_exit = ablk_exit,
550 .cra_u = { 542 .cra_u = {
@@ -568,7 +560,6 @@ static struct crypto_alg serpent_algs[10] = { {
568 .cra_alignmask = 0, 560 .cra_alignmask = 0,
569 .cra_type = &crypto_ablkcipher_type, 561 .cra_type = &crypto_ablkcipher_type,
570 .cra_module = THIS_MODULE, 562 .cra_module = THIS_MODULE,
571 .cra_list = LIST_HEAD_INIT(serpent_algs[8].cra_list),
572 .cra_init = ablk_init, 563 .cra_init = ablk_init,
573 .cra_exit = ablk_exit, 564 .cra_exit = ablk_exit,
574 .cra_u = { 565 .cra_u = {
@@ -593,7 +584,6 @@ static struct crypto_alg serpent_algs[10] = { {
593 .cra_alignmask = 0, 584 .cra_alignmask = 0,
594 .cra_type = &crypto_ablkcipher_type, 585 .cra_type = &crypto_ablkcipher_type,
595 .cra_module = THIS_MODULE, 586 .cra_module = THIS_MODULE,
596 .cra_list = LIST_HEAD_INIT(serpent_algs[9].cra_list),
597 .cra_init = ablk_init, 587 .cra_init = ablk_init,
598 .cra_exit = ablk_exit, 588 .cra_exit = ablk_exit,
599 .cra_u = { 589 .cra_u = {
diff --git a/arch/x86/crypto/twofish-avx-x86_64-asm_64.S b/arch/x86/crypto/twofish-avx-x86_64-asm_64.S
index 35f45574390..1585abb13dd 100644
--- a/arch/x86/crypto/twofish-avx-x86_64-asm_64.S
+++ b/arch/x86/crypto/twofish-avx-x86_64-asm_64.S
@@ -4,6 +4,8 @@
4 * Copyright (C) 2012 Johannes Goetzfried 4 * Copyright (C) 2012 Johannes Goetzfried
5 * <Johannes.Goetzfried@informatik.stud.uni-erlangen.de> 5 * <Johannes.Goetzfried@informatik.stud.uni-erlangen.de>
6 * 6 *
7 * Copyright © 2012 Jussi Kivilinna <jussi.kivilinna@mbnet.fi>
8 *
7 * This program is free software; you can redistribute it and/or modify 9 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by 10 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or 11 * the Free Software Foundation; either version 2 of the License, or
@@ -47,16 +49,22 @@
47#define RC2 %xmm6 49#define RC2 %xmm6
48#define RD2 %xmm7 50#define RD2 %xmm7
49 51
50#define RX %xmm8 52#define RX0 %xmm8
51#define RY %xmm9 53#define RY0 %xmm9
54
55#define RX1 %xmm10
56#define RY1 %xmm11
52 57
53#define RK1 %xmm10 58#define RK1 %xmm12
54#define RK2 %xmm11 59#define RK2 %xmm13
55 60
56#define RID1 %rax 61#define RT %xmm14
57#define RID1b %al 62#define RR %xmm15
58#define RID2 %rbx 63
59#define RID2b %bl 64#define RID1 %rbp
65#define RID1d %ebp
66#define RID2 %rsi
67#define RID2d %esi
60 68
61#define RGI1 %rdx 69#define RGI1 %rdx
62#define RGI1bl %dl 70#define RGI1bl %dl
@@ -65,6 +73,13 @@
65#define RGI2bl %cl 73#define RGI2bl %cl
66#define RGI2bh %ch 74#define RGI2bh %ch
67 75
76#define RGI3 %rax
77#define RGI3bl %al
78#define RGI3bh %ah
79#define RGI4 %rbx
80#define RGI4bl %bl
81#define RGI4bh %bh
82
68#define RGS1 %r8 83#define RGS1 %r8
69#define RGS1d %r8d 84#define RGS1d %r8d
70#define RGS2 %r9 85#define RGS2 %r9
@@ -73,89 +88,123 @@
73#define RGS3d %r10d 88#define RGS3d %r10d
74 89
75 90
76#define lookup_32bit(t0, t1, t2, t3, src, dst) \ 91#define lookup_32bit(t0, t1, t2, t3, src, dst, interleave_op, il_reg) \
77 movb src ## bl, RID1b; \ 92 movzbl src ## bl, RID1d; \
78 movb src ## bh, RID2b; \ 93 movzbl src ## bh, RID2d; \
79 movl t0(CTX, RID1, 4), dst ## d; \
80 xorl t1(CTX, RID2, 4), dst ## d; \
81 shrq $16, src; \ 94 shrq $16, src; \
82 movb src ## bl, RID1b; \ 95 movl t0(CTX, RID1, 4), dst ## d; \
83 movb src ## bh, RID2b; \ 96 movl t1(CTX, RID2, 4), RID2d; \
97 movzbl src ## bl, RID1d; \
98 xorl RID2d, dst ## d; \
99 movzbl src ## bh, RID2d; \
100 interleave_op(il_reg); \
84 xorl t2(CTX, RID1, 4), dst ## d; \ 101 xorl t2(CTX, RID1, 4), dst ## d; \
85 xorl t3(CTX, RID2, 4), dst ## d; 102 xorl t3(CTX, RID2, 4), dst ## d;
86 103
87#define G(a, x, t0, t1, t2, t3) \ 104#define dummy(d) /* do nothing */
88 vmovq a, RGI1; \ 105
89 vpsrldq $8, a, x; \ 106#define shr_next(reg) \
90 vmovq x, RGI2; \ 107 shrq $16, reg;
108
109#define G(gi1, gi2, x, t0, t1, t2, t3) \
110 lookup_32bit(t0, t1, t2, t3, ##gi1, RGS1, shr_next, ##gi1); \
111 lookup_32bit(t0, t1, t2, t3, ##gi2, RGS3, shr_next, ##gi2); \
112 \
113 lookup_32bit(t0, t1, t2, t3, ##gi1, RGS2, dummy, none); \
114 shlq $32, RGS2; \
115 orq RGS1, RGS2; \
116 lookup_32bit(t0, t1, t2, t3, ##gi2, RGS1, dummy, none); \
117 shlq $32, RGS1; \
118 orq RGS1, RGS3;
119
120#define round_head_2(a, b, x1, y1, x2, y2) \
121 vmovq b ## 1, RGI3; \
122 vpextrq $1, b ## 1, RGI4; \
91 \ 123 \
92 lookup_32bit(t0, t1, t2, t3, RGI1, RGS1); \ 124 G(RGI1, RGI2, x1, s0, s1, s2, s3); \
93 shrq $16, RGI1; \ 125 vmovq a ## 2, RGI1; \
94 lookup_32bit(t0, t1, t2, t3, RGI1, RGS2); \ 126 vpextrq $1, a ## 2, RGI2; \
95 shlq $32, RGS2; \ 127 vmovq RGS2, x1; \
96 orq RGS1, RGS2; \ 128 vpinsrq $1, RGS3, x1, x1; \
97 \ 129 \
98 lookup_32bit(t0, t1, t2, t3, RGI2, RGS1); \ 130 G(RGI3, RGI4, y1, s1, s2, s3, s0); \
99 shrq $16, RGI2; \ 131 vmovq b ## 2, RGI3; \
100 lookup_32bit(t0, t1, t2, t3, RGI2, RGS3); \ 132 vpextrq $1, b ## 2, RGI4; \
101 shlq $32, RGS3; \ 133 vmovq RGS2, y1; \
102 orq RGS1, RGS3; \ 134 vpinsrq $1, RGS3, y1, y1; \
103 \ 135 \
104 vmovq RGS2, x; \ 136 G(RGI1, RGI2, x2, s0, s1, s2, s3); \
105 vpinsrq $1, RGS3, x, x; 137 vmovq RGS2, x2; \
138 vpinsrq $1, RGS3, x2, x2; \
139 \
140 G(RGI3, RGI4, y2, s1, s2, s3, s0); \
141 vmovq RGS2, y2; \
142 vpinsrq $1, RGS3, y2, y2;
106 143
107#define encround(a, b, c, d, x, y) \ 144#define encround_tail(a, b, c, d, x, y, prerotate) \
108 G(a, x, s0, s1, s2, s3); \
109 G(b, y, s1, s2, s3, s0); \
110 vpaddd x, y, x; \ 145 vpaddd x, y, x; \
146 vpaddd x, RK1, RT;\
147 prerotate(b); \
148 vpxor RT, c, c; \
111 vpaddd y, x, y; \ 149 vpaddd y, x, y; \
112 vpaddd x, RK1, x; \
113 vpaddd y, RK2, y; \ 150 vpaddd y, RK2, y; \
114 vpxor x, c, c; \ 151 vpsrld $1, c, RT; \
115 vpsrld $1, c, x; \
116 vpslld $(32 - 1), c, c; \ 152 vpslld $(32 - 1), c, c; \
117 vpor c, x, c; \ 153 vpor c, RT, c; \
118 vpslld $1, d, x; \ 154 vpxor d, y, d; \
119 vpsrld $(32 - 1), d, d; \ 155
120 vpor d, x, d; \ 156#define decround_tail(a, b, c, d, x, y, prerotate) \
121 vpxor d, y, d;
122
123#define decround(a, b, c, d, x, y) \
124 G(a, x, s0, s1, s2, s3); \
125 G(b, y, s1, s2, s3, s0); \
126 vpaddd x, y, x; \ 157 vpaddd x, y, x; \
158 vpaddd x, RK1, RT;\
159 prerotate(a); \
160 vpxor RT, c, c; \
127 vpaddd y, x, y; \ 161 vpaddd y, x, y; \
128 vpaddd y, RK2, y; \ 162 vpaddd y, RK2, y; \
129 vpxor d, y, d; \ 163 vpxor d, y, d; \
130 vpsrld $1, d, y; \ 164 vpsrld $1, d, y; \
131 vpslld $(32 - 1), d, d; \ 165 vpslld $(32 - 1), d, d; \
132 vpor d, y, d; \ 166 vpor d, y, d; \
133 vpslld $1, c, y; \ 167
134 vpsrld $(32 - 1), c, c; \ 168#define rotate_1l(x) \
135 vpor c, y, c; \ 169 vpslld $1, x, RR; \
136 vpaddd x, RK1, x; \ 170 vpsrld $(32 - 1), x, x; \
137 vpxor x, c, c; 171 vpor x, RR, x;
138 172
139#define encrypt_round(n, a, b, c, d) \ 173#define preload_rgi(c) \
140 vbroadcastss (k+4*(2*(n)))(CTX), RK1; \ 174 vmovq c, RGI1; \
141 vbroadcastss (k+4*(2*(n)+1))(CTX), RK2; \ 175 vpextrq $1, c, RGI2;
142 encround(a ## 1, b ## 1, c ## 1, d ## 1, RX, RY); \ 176
143 encround(a ## 2, b ## 2, c ## 2, d ## 2, RX, RY); 177#define encrypt_round(n, a, b, c, d, preload, prerotate) \
144 178 vbroadcastss (k+4*(2*(n)))(CTX), RK1; \
145#define decrypt_round(n, a, b, c, d) \ 179 vbroadcastss (k+4*(2*(n)+1))(CTX), RK2; \
146 vbroadcastss (k+4*(2*(n)))(CTX), RK1; \ 180 round_head_2(a, b, RX0, RY0, RX1, RY1); \
147 vbroadcastss (k+4*(2*(n)+1))(CTX), RK2; \ 181 encround_tail(a ## 1, b ## 1, c ## 1, d ## 1, RX0, RY0, prerotate); \
148 decround(a ## 1, b ## 1, c ## 1, d ## 1, RX, RY); \ 182 preload(c ## 1); \
149 decround(a ## 2, b ## 2, c ## 2, d ## 2, RX, RY); 183 encround_tail(a ## 2, b ## 2, c ## 2, d ## 2, RX1, RY1, prerotate);
184
185#define decrypt_round(n, a, b, c, d, preload, prerotate) \
186 vbroadcastss (k+4*(2*(n)))(CTX), RK1; \
187 vbroadcastss (k+4*(2*(n)+1))(CTX), RK2; \
188 round_head_2(a, b, RX0, RY0, RX1, RY1); \
189 decround_tail(a ## 1, b ## 1, c ## 1, d ## 1, RX0, RY0, prerotate); \
190 preload(c ## 1); \
191 decround_tail(a ## 2, b ## 2, c ## 2, d ## 2, RX1, RY1, prerotate);
150 192
151#define encrypt_cycle(n) \ 193#define encrypt_cycle(n) \
152 encrypt_round((2*n), RA, RB, RC, RD); \ 194 encrypt_round((2*n), RA, RB, RC, RD, preload_rgi, rotate_1l); \
153 encrypt_round(((2*n) + 1), RC, RD, RA, RB); 195 encrypt_round(((2*n) + 1), RC, RD, RA, RB, preload_rgi, rotate_1l);
196
197#define encrypt_cycle_last(n) \
198 encrypt_round((2*n), RA, RB, RC, RD, preload_rgi, rotate_1l); \
199 encrypt_round(((2*n) + 1), RC, RD, RA, RB, dummy, dummy);
154 200
155#define decrypt_cycle(n) \ 201#define decrypt_cycle(n) \
156 decrypt_round(((2*n) + 1), RC, RD, RA, RB); \ 202 decrypt_round(((2*n) + 1), RC, RD, RA, RB, preload_rgi, rotate_1l); \
157 decrypt_round((2*n), RA, RB, RC, RD); 203 decrypt_round((2*n), RA, RB, RC, RD, preload_rgi, rotate_1l);
158 204
205#define decrypt_cycle_last(n) \
206 decrypt_round(((2*n) + 1), RC, RD, RA, RB, preload_rgi, rotate_1l); \
207 decrypt_round((2*n), RA, RB, RC, RD, dummy, dummy);
159 208
160#define transpose_4x4(x0, x1, x2, x3, t0, t1, t2) \ 209#define transpose_4x4(x0, x1, x2, x3, t0, t1, t2) \
161 vpunpckldq x1, x0, t0; \ 210 vpunpckldq x1, x0, t0; \
@@ -216,17 +265,20 @@ __twofish_enc_blk_8way:
216 * %rcx: bool, if true: xor output 265 * %rcx: bool, if true: xor output
217 */ 266 */
218 267
268 pushq %rbp;
219 pushq %rbx; 269 pushq %rbx;
220 pushq %rcx; 270 pushq %rcx;
221 271
222 vmovdqu w(CTX), RK1; 272 vmovdqu w(CTX), RK1;
223 273
224 leaq (4*4*4)(%rdx), %rax; 274 leaq (4*4*4)(%rdx), %rax;
225 inpack_blocks(%rdx, RA1, RB1, RC1, RD1, RK1, RX, RY, RK2); 275 inpack_blocks(%rdx, RA1, RB1, RC1, RD1, RK1, RX0, RY0, RK2);
226 inpack_blocks(%rax, RA2, RB2, RC2, RD2, RK1, RX, RY, RK2); 276 preload_rgi(RA1);
277 rotate_1l(RD1);
278 inpack_blocks(%rax, RA2, RB2, RC2, RD2, RK1, RX0, RY0, RK2);
279 rotate_1l(RD2);
227 280
228 xorq RID1, RID1; 281 movq %rsi, %r11;
229 xorq RID2, RID2;
230 282
231 encrypt_cycle(0); 283 encrypt_cycle(0);
232 encrypt_cycle(1); 284 encrypt_cycle(1);
@@ -235,26 +287,27 @@ __twofish_enc_blk_8way:
235 encrypt_cycle(4); 287 encrypt_cycle(4);
236 encrypt_cycle(5); 288 encrypt_cycle(5);
237 encrypt_cycle(6); 289 encrypt_cycle(6);
238 encrypt_cycle(7); 290 encrypt_cycle_last(7);
239 291
240 vmovdqu (w+4*4)(CTX), RK1; 292 vmovdqu (w+4*4)(CTX), RK1;
241 293
242 popq %rcx; 294 popq %rcx;
243 popq %rbx; 295 popq %rbx;
296 popq %rbp;
244 297
245 leaq (4*4*4)(%rsi), %rax; 298 leaq (4*4*4)(%r11), %rax;
246 299
247 testb %cl, %cl; 300 testb %cl, %cl;
248 jnz __enc_xor8; 301 jnz __enc_xor8;
249 302
250 outunpack_blocks(%rsi, RC1, RD1, RA1, RB1, RK1, RX, RY, RK2); 303 outunpack_blocks(%r11, RC1, RD1, RA1, RB1, RK1, RX0, RY0, RK2);
251 outunpack_blocks(%rax, RC2, RD2, RA2, RB2, RK1, RX, RY, RK2); 304 outunpack_blocks(%rax, RC2, RD2, RA2, RB2, RK1, RX0, RY0, RK2);
252 305
253 ret; 306 ret;
254 307
255__enc_xor8: 308__enc_xor8:
256 outunpack_xor_blocks(%rsi, RC1, RD1, RA1, RB1, RK1, RX, RY, RK2); 309 outunpack_xor_blocks(%r11, RC1, RD1, RA1, RB1, RK1, RX0, RY0, RK2);
257 outunpack_xor_blocks(%rax, RC2, RD2, RA2, RB2, RK1, RX, RY, RK2); 310 outunpack_xor_blocks(%rax, RC2, RD2, RA2, RB2, RK1, RX0, RY0, RK2);
258 311
259 ret; 312 ret;
260 313
@@ -269,16 +322,19 @@ twofish_dec_blk_8way:
269 * %rdx: src 322 * %rdx: src
270 */ 323 */
271 324
325 pushq %rbp;
272 pushq %rbx; 326 pushq %rbx;
273 327
274 vmovdqu (w+4*4)(CTX), RK1; 328 vmovdqu (w+4*4)(CTX), RK1;
275 329
276 leaq (4*4*4)(%rdx), %rax; 330 leaq (4*4*4)(%rdx), %rax;
277 inpack_blocks(%rdx, RC1, RD1, RA1, RB1, RK1, RX, RY, RK2); 331 inpack_blocks(%rdx, RC1, RD1, RA1, RB1, RK1, RX0, RY0, RK2);
278 inpack_blocks(%rax, RC2, RD2, RA2, RB2, RK1, RX, RY, RK2); 332 preload_rgi(RC1);
333 rotate_1l(RA1);
334 inpack_blocks(%rax, RC2, RD2, RA2, RB2, RK1, RX0, RY0, RK2);
335 rotate_1l(RA2);
279 336
280 xorq RID1, RID1; 337 movq %rsi, %r11;
281 xorq RID2, RID2;
282 338
283 decrypt_cycle(7); 339 decrypt_cycle(7);
284 decrypt_cycle(6); 340 decrypt_cycle(6);
@@ -287,14 +343,15 @@ twofish_dec_blk_8way:
287 decrypt_cycle(3); 343 decrypt_cycle(3);
288 decrypt_cycle(2); 344 decrypt_cycle(2);
289 decrypt_cycle(1); 345 decrypt_cycle(1);
290 decrypt_cycle(0); 346 decrypt_cycle_last(0);
291 347
292 vmovdqu (w)(CTX), RK1; 348 vmovdqu (w)(CTX), RK1;
293 349
294 popq %rbx; 350 popq %rbx;
351 popq %rbp;
295 352
296 leaq (4*4*4)(%rsi), %rax; 353 leaq (4*4*4)(%r11), %rax;
297 outunpack_blocks(%rsi, RA1, RB1, RC1, RD1, RK1, RX, RY, RK2); 354 outunpack_blocks(%r11, RA1, RB1, RC1, RD1, RK1, RX0, RY0, RK2);
298 outunpack_blocks(%rax, RA2, RB2, RC2, RD2, RK1, RX, RY, RK2); 355 outunpack_blocks(%rax, RA2, RB2, RC2, RD2, RK1, RX0, RY0, RK2);
299 356
300 ret; 357 ret;
diff --git a/arch/x86/crypto/twofish_avx_glue.c b/arch/x86/crypto/twofish_avx_glue.c
index 782b67ddaf6..e7708b5442e 100644
--- a/arch/x86/crypto/twofish_avx_glue.c
+++ b/arch/x86/crypto/twofish_avx_glue.c
@@ -378,7 +378,6 @@ static struct crypto_alg twofish_algs[10] = { {
378 .cra_alignmask = 0, 378 .cra_alignmask = 0,
379 .cra_type = &crypto_blkcipher_type, 379 .cra_type = &crypto_blkcipher_type,
380 .cra_module = THIS_MODULE, 380 .cra_module = THIS_MODULE,
381 .cra_list = LIST_HEAD_INIT(twofish_algs[0].cra_list),
382 .cra_u = { 381 .cra_u = {
383 .blkcipher = { 382 .blkcipher = {
384 .min_keysize = TF_MIN_KEY_SIZE, 383 .min_keysize = TF_MIN_KEY_SIZE,
@@ -398,7 +397,6 @@ static struct crypto_alg twofish_algs[10] = { {
398 .cra_alignmask = 0, 397 .cra_alignmask = 0,
399 .cra_type = &crypto_blkcipher_type, 398 .cra_type = &crypto_blkcipher_type,
400 .cra_module = THIS_MODULE, 399 .cra_module = THIS_MODULE,
401 .cra_list = LIST_HEAD_INIT(twofish_algs[1].cra_list),
402 .cra_u = { 400 .cra_u = {
403 .blkcipher = { 401 .blkcipher = {
404 .min_keysize = TF_MIN_KEY_SIZE, 402 .min_keysize = TF_MIN_KEY_SIZE,
@@ -418,7 +416,6 @@ static struct crypto_alg twofish_algs[10] = { {
418 .cra_alignmask = 0, 416 .cra_alignmask = 0,
419 .cra_type = &crypto_blkcipher_type, 417 .cra_type = &crypto_blkcipher_type,
420 .cra_module = THIS_MODULE, 418 .cra_module = THIS_MODULE,
421 .cra_list = LIST_HEAD_INIT(twofish_algs[2].cra_list),
422 .cra_u = { 419 .cra_u = {
423 .blkcipher = { 420 .blkcipher = {
424 .min_keysize = TF_MIN_KEY_SIZE, 421 .min_keysize = TF_MIN_KEY_SIZE,
@@ -439,7 +436,6 @@ static struct crypto_alg twofish_algs[10] = { {
439 .cra_alignmask = 0, 436 .cra_alignmask = 0,
440 .cra_type = &crypto_blkcipher_type, 437 .cra_type = &crypto_blkcipher_type,
441 .cra_module = THIS_MODULE, 438 .cra_module = THIS_MODULE,
442 .cra_list = LIST_HEAD_INIT(twofish_algs[3].cra_list),
443 .cra_exit = lrw_twofish_exit_tfm, 439 .cra_exit = lrw_twofish_exit_tfm,
444 .cra_u = { 440 .cra_u = {
445 .blkcipher = { 441 .blkcipher = {
@@ -463,7 +459,6 @@ static struct crypto_alg twofish_algs[10] = { {
463 .cra_alignmask = 0, 459 .cra_alignmask = 0,
464 .cra_type = &crypto_blkcipher_type, 460 .cra_type = &crypto_blkcipher_type,
465 .cra_module = THIS_MODULE, 461 .cra_module = THIS_MODULE,
466 .cra_list = LIST_HEAD_INIT(twofish_algs[4].cra_list),
467 .cra_u = { 462 .cra_u = {
468 .blkcipher = { 463 .blkcipher = {
469 .min_keysize = TF_MIN_KEY_SIZE * 2, 464 .min_keysize = TF_MIN_KEY_SIZE * 2,
@@ -484,7 +479,6 @@ static struct crypto_alg twofish_algs[10] = { {
484 .cra_alignmask = 0, 479 .cra_alignmask = 0,
485 .cra_type = &crypto_ablkcipher_type, 480 .cra_type = &crypto_ablkcipher_type,
486 .cra_module = THIS_MODULE, 481 .cra_module = THIS_MODULE,
487 .cra_list = LIST_HEAD_INIT(twofish_algs[5].cra_list),
488 .cra_init = ablk_init, 482 .cra_init = ablk_init,
489 .cra_exit = ablk_exit, 483 .cra_exit = ablk_exit,
490 .cra_u = { 484 .cra_u = {
@@ -506,7 +500,6 @@ static struct crypto_alg twofish_algs[10] = { {
506 .cra_alignmask = 0, 500 .cra_alignmask = 0,
507 .cra_type = &crypto_ablkcipher_type, 501 .cra_type = &crypto_ablkcipher_type,
508 .cra_module = THIS_MODULE, 502 .cra_module = THIS_MODULE,
509 .cra_list = LIST_HEAD_INIT(twofish_algs[6].cra_list),
510 .cra_init = ablk_init, 503 .cra_init = ablk_init,
511 .cra_exit = ablk_exit, 504 .cra_exit = ablk_exit,
512 .cra_u = { 505 .cra_u = {
@@ -529,7 +522,6 @@ static struct crypto_alg twofish_algs[10] = { {
529 .cra_alignmask = 0, 522 .cra_alignmask = 0,
530 .cra_type = &crypto_ablkcipher_type, 523 .cra_type = &crypto_ablkcipher_type,
531 .cra_module = THIS_MODULE, 524 .cra_module = THIS_MODULE,
532 .cra_list = LIST_HEAD_INIT(twofish_algs[7].cra_list),
533 .cra_init = ablk_init, 525 .cra_init = ablk_init,
534 .cra_exit = ablk_exit, 526 .cra_exit = ablk_exit,
535 .cra_u = { 527 .cra_u = {
@@ -553,7 +545,6 @@ static struct crypto_alg twofish_algs[10] = { {
553 .cra_alignmask = 0, 545 .cra_alignmask = 0,
554 .cra_type = &crypto_ablkcipher_type, 546 .cra_type = &crypto_ablkcipher_type,
555 .cra_module = THIS_MODULE, 547 .cra_module = THIS_MODULE,
556 .cra_list = LIST_HEAD_INIT(twofish_algs[8].cra_list),
557 .cra_init = ablk_init, 548 .cra_init = ablk_init,
558 .cra_exit = ablk_exit, 549 .cra_exit = ablk_exit,
559 .cra_u = { 550 .cra_u = {
@@ -578,7 +569,6 @@ static struct crypto_alg twofish_algs[10] = { {
578 .cra_alignmask = 0, 569 .cra_alignmask = 0,
579 .cra_type = &crypto_ablkcipher_type, 570 .cra_type = &crypto_ablkcipher_type,
580 .cra_module = THIS_MODULE, 571 .cra_module = THIS_MODULE,
581 .cra_list = LIST_HEAD_INIT(twofish_algs[9].cra_list),
582 .cra_init = ablk_init, 572 .cra_init = ablk_init,
583 .cra_exit = ablk_exit, 573 .cra_exit = ablk_exit,
584 .cra_u = { 574 .cra_u = {
diff --git a/arch/x86/crypto/twofish_glue.c b/arch/x86/crypto/twofish_glue.c
index 359ae084275..0a520230350 100644
--- a/arch/x86/crypto/twofish_glue.c
+++ b/arch/x86/crypto/twofish_glue.c
@@ -70,7 +70,6 @@ static struct crypto_alg alg = {
70 .cra_ctxsize = sizeof(struct twofish_ctx), 70 .cra_ctxsize = sizeof(struct twofish_ctx),
71 .cra_alignmask = 0, 71 .cra_alignmask = 0,
72 .cra_module = THIS_MODULE, 72 .cra_module = THIS_MODULE,
73 .cra_list = LIST_HEAD_INIT(alg.cra_list),
74 .cra_u = { 73 .cra_u = {
75 .cipher = { 74 .cipher = {
76 .cia_min_keysize = TF_MIN_KEY_SIZE, 75 .cia_min_keysize = TF_MIN_KEY_SIZE,
diff --git a/arch/x86/crypto/twofish_glue_3way.c b/arch/x86/crypto/twofish_glue_3way.c
index 15f9347316c..aa3eb358b7e 100644
--- a/arch/x86/crypto/twofish_glue_3way.c
+++ b/arch/x86/crypto/twofish_glue_3way.c
@@ -342,7 +342,6 @@ static struct crypto_alg tf_algs[5] = { {
342 .cra_alignmask = 0, 342 .cra_alignmask = 0,
343 .cra_type = &crypto_blkcipher_type, 343 .cra_type = &crypto_blkcipher_type,
344 .cra_module = THIS_MODULE, 344 .cra_module = THIS_MODULE,
345 .cra_list = LIST_HEAD_INIT(tf_algs[0].cra_list),
346 .cra_u = { 345 .cra_u = {
347 .blkcipher = { 346 .blkcipher = {
348 .min_keysize = TF_MIN_KEY_SIZE, 347 .min_keysize = TF_MIN_KEY_SIZE,
@@ -362,7 +361,6 @@ static struct crypto_alg tf_algs[5] = { {
362 .cra_alignmask = 0, 361 .cra_alignmask = 0,
363 .cra_type = &crypto_blkcipher_type, 362 .cra_type = &crypto_blkcipher_type,
364 .cra_module = THIS_MODULE, 363 .cra_module = THIS_MODULE,
365 .cra_list = LIST_HEAD_INIT(tf_algs[1].cra_list),
366 .cra_u = { 364 .cra_u = {
367 .blkcipher = { 365 .blkcipher = {
368 .min_keysize = TF_MIN_KEY_SIZE, 366 .min_keysize = TF_MIN_KEY_SIZE,
@@ -383,7 +381,6 @@ static struct crypto_alg tf_algs[5] = { {
383 .cra_alignmask = 0, 381 .cra_alignmask = 0,
384 .cra_type = &crypto_blkcipher_type, 382 .cra_type = &crypto_blkcipher_type,
385 .cra_module = THIS_MODULE, 383 .cra_module = THIS_MODULE,
386 .cra_list = LIST_HEAD_INIT(tf_algs[2].cra_list),
387 .cra_u = { 384 .cra_u = {
388 .blkcipher = { 385 .blkcipher = {
389 .min_keysize = TF_MIN_KEY_SIZE, 386 .min_keysize = TF_MIN_KEY_SIZE,
@@ -404,7 +401,6 @@ static struct crypto_alg tf_algs[5] = { {
404 .cra_alignmask = 0, 401 .cra_alignmask = 0,
405 .cra_type = &crypto_blkcipher_type, 402 .cra_type = &crypto_blkcipher_type,
406 .cra_module = THIS_MODULE, 403 .cra_module = THIS_MODULE,
407 .cra_list = LIST_HEAD_INIT(tf_algs[3].cra_list),
408 .cra_exit = lrw_twofish_exit_tfm, 404 .cra_exit = lrw_twofish_exit_tfm,
409 .cra_u = { 405 .cra_u = {
410 .blkcipher = { 406 .blkcipher = {
@@ -426,7 +422,6 @@ static struct crypto_alg tf_algs[5] = { {
426 .cra_alignmask = 0, 422 .cra_alignmask = 0,
427 .cra_type = &crypto_blkcipher_type, 423 .cra_type = &crypto_blkcipher_type,
428 .cra_module = THIS_MODULE, 424 .cra_module = THIS_MODULE,
429 .cra_list = LIST_HEAD_INIT(tf_algs[4].cra_list),
430 .cra_u = { 425 .cra_u = {
431 .blkcipher = { 426 .blkcipher = {
432 .min_keysize = TF_MIN_KEY_SIZE * 2, 427 .min_keysize = TF_MIN_KEY_SIZE * 2,
diff --git a/crypto/842.c b/crypto/842.c
new file mode 100644
index 00000000000..65c7a89cfa0
--- /dev/null
+++ b/crypto/842.c
@@ -0,0 +1,182 @@
1/*
2 * Cryptographic API for the 842 compression algorithm.
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 *
18 * Copyright (C) IBM Corporation, 2011
19 *
20 * Authors: Robert Jennings <rcj@linux.vnet.ibm.com>
21 * Seth Jennings <sjenning@linux.vnet.ibm.com>
22 */
23
24#include <linux/init.h>
25#include <linux/module.h>
26#include <linux/crypto.h>
27#include <linux/vmalloc.h>
28#include <linux/nx842.h>
29#include <linux/lzo.h>
30#include <linux/timer.h>
31
32static int nx842_uselzo;
33
34struct nx842_ctx {
35 void *nx842_wmem; /* working memory for 842/lzo */
36};
37
38enum nx842_crypto_type {
39 NX842_CRYPTO_TYPE_842,
40 NX842_CRYPTO_TYPE_LZO
41};
42
43#define NX842_SENTINEL 0xdeadbeef
44
45struct nx842_crypto_header {
46 unsigned int sentinel; /* debug */
47 enum nx842_crypto_type type;
48};
49
50static int nx842_init(struct crypto_tfm *tfm)
51{
52 struct nx842_ctx *ctx = crypto_tfm_ctx(tfm);
53 int wmemsize;
54
55 wmemsize = max_t(int, nx842_get_workmem_size(), LZO1X_MEM_COMPRESS);
56 ctx->nx842_wmem = kmalloc(wmemsize, GFP_NOFS);
57 if (!ctx->nx842_wmem)
58 return -ENOMEM;
59
60 return 0;
61}
62
63static void nx842_exit(struct crypto_tfm *tfm)
64{
65 struct nx842_ctx *ctx = crypto_tfm_ctx(tfm);
66
67 kfree(ctx->nx842_wmem);
68}
69
70static void nx842_reset_uselzo(unsigned long data)
71{
72 nx842_uselzo = 0;
73}
74
75static DEFINE_TIMER(failover_timer, nx842_reset_uselzo, 0, 0);
76
77static int nx842_crypto_compress(struct crypto_tfm *tfm, const u8 *src,
78 unsigned int slen, u8 *dst, unsigned int *dlen)
79{
80 struct nx842_ctx *ctx = crypto_tfm_ctx(tfm);
81 struct nx842_crypto_header *hdr;
82 unsigned int tmp_len = *dlen;
83 size_t lzodlen; /* needed for lzo */
84 int err;
85
86 *dlen = 0;
87 hdr = (struct nx842_crypto_header *)dst;
88 hdr->sentinel = NX842_SENTINEL; /* debug */
89 dst += sizeof(struct nx842_crypto_header);
90 tmp_len -= sizeof(struct nx842_crypto_header);
91 lzodlen = tmp_len;
92
93 if (likely(!nx842_uselzo)) {
94 err = nx842_compress(src, slen, dst, &tmp_len, ctx->nx842_wmem);
95
96 if (likely(!err)) {
97 hdr->type = NX842_CRYPTO_TYPE_842;
98 *dlen = tmp_len + sizeof(struct nx842_crypto_header);
99 return 0;
100 }
101
102 /* hardware failed */
103 nx842_uselzo = 1;
104
105 /* set timer to check for hardware again in 1 second */
106 mod_timer(&failover_timer, jiffies + msecs_to_jiffies(1000));
107 }
108
109 /* no hardware, use lzo */
110 err = lzo1x_1_compress(src, slen, dst, &lzodlen, ctx->nx842_wmem);
111 if (err != LZO_E_OK)
112 return -EINVAL;
113
114 hdr->type = NX842_CRYPTO_TYPE_LZO;
115 *dlen = lzodlen + sizeof(struct nx842_crypto_header);
116 return 0;
117}
118
119static int nx842_crypto_decompress(struct crypto_tfm *tfm, const u8 *src,
120 unsigned int slen, u8 *dst, unsigned int *dlen)
121{
122 struct nx842_ctx *ctx = crypto_tfm_ctx(tfm);
123 struct nx842_crypto_header *hdr;
124 unsigned int tmp_len = *dlen;
125 size_t lzodlen; /* needed for lzo */
126 int err;
127
128 *dlen = 0;
129 hdr = (struct nx842_crypto_header *)src;
130
131 if (unlikely(hdr->sentinel != NX842_SENTINEL))
132 return -EINVAL;
133
134 src += sizeof(struct nx842_crypto_header);
135 slen -= sizeof(struct nx842_crypto_header);
136
137 if (likely(hdr->type == NX842_CRYPTO_TYPE_842)) {
138 err = nx842_decompress(src, slen, dst, &tmp_len,
139 ctx->nx842_wmem);
140 if (err)
141 return -EINVAL;
142 *dlen = tmp_len;
143 } else if (hdr->type == NX842_CRYPTO_TYPE_LZO) {
144 lzodlen = tmp_len;
145 err = lzo1x_decompress_safe(src, slen, dst, &lzodlen);
146 if (err != LZO_E_OK)
147 return -EINVAL;
148 *dlen = lzodlen;
149 } else
150 return -EINVAL;
151
152 return 0;
153}
154
155static struct crypto_alg alg = {
156 .cra_name = "842",
157 .cra_flags = CRYPTO_ALG_TYPE_COMPRESS,
158 .cra_ctxsize = sizeof(struct nx842_ctx),
159 .cra_module = THIS_MODULE,
160 .cra_init = nx842_init,
161 .cra_exit = nx842_exit,
162 .cra_u = { .compress = {
163 .coa_compress = nx842_crypto_compress,
164 .coa_decompress = nx842_crypto_decompress } }
165};
166
167static int __init nx842_mod_init(void)
168{
169 del_timer(&failover_timer);
170 return crypto_register_alg(&alg);
171}
172
173static void __exit nx842_mod_exit(void)
174{
175 crypto_unregister_alg(&alg);
176}
177
178module_init(nx842_mod_init);
179module_exit(nx842_mod_exit);
180
181MODULE_LICENSE("GPL");
182MODULE_DESCRIPTION("842 Compression Algorithm");
diff --git a/crypto/Kconfig b/crypto/Kconfig
index 957cc56ce4b..50402dc0ea3 100644
--- a/crypto/Kconfig
+++ b/crypto/Kconfig
@@ -460,6 +460,15 @@ config CRYPTO_SHA1_SPARC64
460 SHA-1 secure hash standard (FIPS 180-1/DFIPS 180-2) implemented 460 SHA-1 secure hash standard (FIPS 180-1/DFIPS 180-2) implemented
461 using sparc64 crypto instructions, when available. 461 using sparc64 crypto instructions, when available.
462 462
463config CRYPTO_SHA1_ARM
464 tristate "SHA1 digest algorithm (ARM-asm)"
465 depends on ARM
466 select CRYPTO_SHA1
467 select CRYPTO_HASH
468 help
469 SHA-1 secure hash standard (FIPS 180-1/DFIPS 180-2) implemented
470 using optimized ARM assembler.
471
463config CRYPTO_SHA256 472config CRYPTO_SHA256
464 tristate "SHA224 and SHA256 digest algorithm" 473 tristate "SHA224 and SHA256 digest algorithm"
465 select CRYPTO_HASH 474 select CRYPTO_HASH
@@ -609,6 +618,8 @@ config CRYPTO_AES_NI_INTEL
609 select CRYPTO_CRYPTD 618 select CRYPTO_CRYPTD
610 select CRYPTO_ABLK_HELPER_X86 619 select CRYPTO_ABLK_HELPER_X86
611 select CRYPTO_ALGAPI 620 select CRYPTO_ALGAPI
621 select CRYPTO_LRW
622 select CRYPTO_XTS
612 help 623 help
613 Use Intel AES-NI instructions for AES algorithm. 624 Use Intel AES-NI instructions for AES algorithm.
614 625
@@ -661,6 +672,30 @@ config CRYPTO_AES_SPARC64
661 for some popular block cipher mode is supported too, including 672 for some popular block cipher mode is supported too, including
662 ECB and CBC. 673 ECB and CBC.
663 674
675config CRYPTO_AES_ARM
676 tristate "AES cipher algorithms (ARM-asm)"
677 depends on ARM
678 select CRYPTO_ALGAPI
679 select CRYPTO_AES
680 help
681 Use optimized AES assembler routines for ARM platforms.
682
683 AES cipher algorithms (FIPS-197). AES uses the Rijndael
684 algorithm.
685
686 Rijndael appears to be consistently a very good performer in
687 both hardware and software across a wide range of computing
688 environments regardless of its use in feedback or non-feedback
689 modes. Its key setup time is excellent, and its key agility is
690 good. Rijndael's very low memory requirements make it very well
691 suited for restricted-space environments, in which it also
692 demonstrates excellent performance. Rijndael's operations are
693 among the easiest to defend against power and timing attacks.
694
695 The AES specifies three key sizes: 128, 192 and 256 bits
696
697 See <http://csrc.nist.gov/encryption/aes/> for more information.
698
664config CRYPTO_ANUBIS 699config CRYPTO_ANUBIS
665 tristate "Anubis cipher algorithm" 700 tristate "Anubis cipher algorithm"
666 select CRYPTO_ALGAPI 701 select CRYPTO_ALGAPI
@@ -781,6 +816,20 @@ config CRYPTO_CAST5
781 The CAST5 encryption algorithm (synonymous with CAST-128) is 816 The CAST5 encryption algorithm (synonymous with CAST-128) is
782 described in RFC2144. 817 described in RFC2144.
783 818
819config CRYPTO_CAST5_AVX_X86_64
820 tristate "CAST5 (CAST-128) cipher algorithm (x86_64/AVX)"
821 depends on X86 && 64BIT
822 select CRYPTO_ALGAPI
823 select CRYPTO_CRYPTD
824 select CRYPTO_ABLK_HELPER_X86
825 select CRYPTO_CAST5
826 help
827 The CAST5 encryption algorithm (synonymous with CAST-128) is
828 described in RFC2144.
829
830 This module provides the Cast5 cipher algorithm that processes
831 sixteen blocks parallel using the AVX instruction set.
832
784config CRYPTO_CAST6 833config CRYPTO_CAST6
785 tristate "CAST6 (CAST-256) cipher algorithm" 834 tristate "CAST6 (CAST-256) cipher algorithm"
786 select CRYPTO_ALGAPI 835 select CRYPTO_ALGAPI
@@ -788,6 +837,23 @@ config CRYPTO_CAST6
788 The CAST6 encryption algorithm (synonymous with CAST-256) is 837 The CAST6 encryption algorithm (synonymous with CAST-256) is
789 described in RFC2612. 838 described in RFC2612.
790 839
840config CRYPTO_CAST6_AVX_X86_64
841 tristate "CAST6 (CAST-256) cipher algorithm (x86_64/AVX)"
842 depends on X86 && 64BIT
843 select CRYPTO_ALGAPI
844 select CRYPTO_CRYPTD
845 select CRYPTO_ABLK_HELPER_X86
846 select CRYPTO_GLUE_HELPER_X86
847 select CRYPTO_CAST6
848 select CRYPTO_LRW
849 select CRYPTO_XTS
850 help
851 The CAST6 encryption algorithm (synonymous with CAST-256) is
852 described in RFC2612.
853
854 This module provides the Cast6 cipher algorithm that processes
855 eight blocks parallel using the AVX instruction set.
856
791config CRYPTO_DES 857config CRYPTO_DES
792 tristate "DES and Triple DES EDE cipher algorithms" 858 tristate "DES and Triple DES EDE cipher algorithms"
793 select CRYPTO_ALGAPI 859 select CRYPTO_ALGAPI
@@ -1106,6 +1172,15 @@ config CRYPTO_LZO
1106 help 1172 help
1107 This is the LZO algorithm. 1173 This is the LZO algorithm.
1108 1174
1175config CRYPTO_842
1176 tristate "842 compression algorithm"
1177 depends on CRYPTO_DEV_NX_COMPRESS
1178 # 842 uses lzo if the hardware becomes unavailable
1179 select LZO_COMPRESS
1180 select LZO_DECOMPRESS
1181 help
1182 This is the 842 algorithm.
1183
1109comment "Random Number Generation" 1184comment "Random Number Generation"
1110 1185
1111config CRYPTO_ANSI_CPRNG 1186config CRYPTO_ANSI_CPRNG
diff --git a/crypto/Makefile b/crypto/Makefile
index 30f33d67533..a301ad2b258 100644
--- a/crypto/Makefile
+++ b/crypto/Makefile
@@ -68,8 +68,8 @@ obj-$(CONFIG_CRYPTO_TWOFISH_COMMON) += twofish_common.o
68obj-$(CONFIG_CRYPTO_SERPENT) += serpent_generic.o 68obj-$(CONFIG_CRYPTO_SERPENT) += serpent_generic.o
69obj-$(CONFIG_CRYPTO_AES) += aes_generic.o 69obj-$(CONFIG_CRYPTO_AES) += aes_generic.o
70obj-$(CONFIG_CRYPTO_CAMELLIA) += camellia_generic.o 70obj-$(CONFIG_CRYPTO_CAMELLIA) += camellia_generic.o
71obj-$(CONFIG_CRYPTO_CAST5) += cast5.o 71obj-$(CONFIG_CRYPTO_CAST5) += cast5_generic.o
72obj-$(CONFIG_CRYPTO_CAST6) += cast6.o 72obj-$(CONFIG_CRYPTO_CAST6) += cast6_generic.o
73obj-$(CONFIG_CRYPTO_ARC4) += arc4.o 73obj-$(CONFIG_CRYPTO_ARC4) += arc4.o
74obj-$(CONFIG_CRYPTO_TEA) += tea.o 74obj-$(CONFIG_CRYPTO_TEA) += tea.o
75obj-$(CONFIG_CRYPTO_KHAZAD) += khazad.o 75obj-$(CONFIG_CRYPTO_KHAZAD) += khazad.o
@@ -82,6 +82,7 @@ obj-$(CONFIG_CRYPTO_MICHAEL_MIC) += michael_mic.o
82obj-$(CONFIG_CRYPTO_CRC32C) += crc32c.o 82obj-$(CONFIG_CRYPTO_CRC32C) += crc32c.o
83obj-$(CONFIG_CRYPTO_AUTHENC) += authenc.o authencesn.o 83obj-$(CONFIG_CRYPTO_AUTHENC) += authenc.o authencesn.o
84obj-$(CONFIG_CRYPTO_LZO) += lzo.o 84obj-$(CONFIG_CRYPTO_LZO) += lzo.o
85obj-$(CONFIG_CRYPTO_842) += 842.o
85obj-$(CONFIG_CRYPTO_RNG2) += rng.o 86obj-$(CONFIG_CRYPTO_RNG2) += rng.o
86obj-$(CONFIG_CRYPTO_RNG2) += krng.o 87obj-$(CONFIG_CRYPTO_RNG2) += krng.o
87obj-$(CONFIG_CRYPTO_ANSI_CPRNG) += ansi_cprng.o 88obj-$(CONFIG_CRYPTO_ANSI_CPRNG) += ansi_cprng.o
diff --git a/crypto/aes_generic.c b/crypto/aes_generic.c
index a68c73dae15..47f2e5c7175 100644
--- a/crypto/aes_generic.c
+++ b/crypto/aes_generic.c
@@ -1448,7 +1448,6 @@ static struct crypto_alg aes_alg = {
1448 .cra_ctxsize = sizeof(struct crypto_aes_ctx), 1448 .cra_ctxsize = sizeof(struct crypto_aes_ctx),
1449 .cra_alignmask = 3, 1449 .cra_alignmask = 3,
1450 .cra_module = THIS_MODULE, 1450 .cra_module = THIS_MODULE,
1451 .cra_list = LIST_HEAD_INIT(aes_alg.cra_list),
1452 .cra_u = { 1451 .cra_u = {
1453 .cipher = { 1452 .cipher = {
1454 .cia_min_keysize = AES_MIN_KEY_SIZE, 1453 .cia_min_keysize = AES_MIN_KEY_SIZE,
diff --git a/crypto/ansi_cprng.c b/crypto/ansi_cprng.c
index 6ddd99e6114..c0bb3778f1a 100644
--- a/crypto/ansi_cprng.c
+++ b/crypto/ansi_cprng.c
@@ -382,26 +382,6 @@ static int cprng_reset(struct crypto_rng *tfm, u8 *seed, unsigned int slen)
382 return 0; 382 return 0;
383} 383}
384 384
385static struct crypto_alg rng_alg = {
386 .cra_name = "stdrng",
387 .cra_driver_name = "ansi_cprng",
388 .cra_priority = 100,
389 .cra_flags = CRYPTO_ALG_TYPE_RNG,
390 .cra_ctxsize = sizeof(struct prng_context),
391 .cra_type = &crypto_rng_type,
392 .cra_module = THIS_MODULE,
393 .cra_list = LIST_HEAD_INIT(rng_alg.cra_list),
394 .cra_init = cprng_init,
395 .cra_exit = cprng_exit,
396 .cra_u = {
397 .rng = {
398 .rng_make_random = cprng_get_random,
399 .rng_reset = cprng_reset,
400 .seedsize = DEFAULT_PRNG_KSZ + 2*DEFAULT_BLK_SZ,
401 }
402 }
403};
404
405#ifdef CONFIG_CRYPTO_FIPS 385#ifdef CONFIG_CRYPTO_FIPS
406static int fips_cprng_get_random(struct crypto_rng *tfm, u8 *rdata, 386static int fips_cprng_get_random(struct crypto_rng *tfm, u8 *rdata,
407 unsigned int dlen) 387 unsigned int dlen)
@@ -438,8 +418,27 @@ static int fips_cprng_reset(struct crypto_rng *tfm, u8 *seed, unsigned int slen)
438out: 418out:
439 return rc; 419 return rc;
440} 420}
421#endif
441 422
442static struct crypto_alg fips_rng_alg = { 423static struct crypto_alg rng_algs[] = { {
424 .cra_name = "stdrng",
425 .cra_driver_name = "ansi_cprng",
426 .cra_priority = 100,
427 .cra_flags = CRYPTO_ALG_TYPE_RNG,
428 .cra_ctxsize = sizeof(struct prng_context),
429 .cra_type = &crypto_rng_type,
430 .cra_module = THIS_MODULE,
431 .cra_init = cprng_init,
432 .cra_exit = cprng_exit,
433 .cra_u = {
434 .rng = {
435 .rng_make_random = cprng_get_random,
436 .rng_reset = cprng_reset,
437 .seedsize = DEFAULT_PRNG_KSZ + 2*DEFAULT_BLK_SZ,
438 }
439 }
440#ifdef CONFIG_CRYPTO_FIPS
441}, {
443 .cra_name = "fips(ansi_cprng)", 442 .cra_name = "fips(ansi_cprng)",
444 .cra_driver_name = "fips_ansi_cprng", 443 .cra_driver_name = "fips_ansi_cprng",
445 .cra_priority = 300, 444 .cra_priority = 300,
@@ -447,7 +446,6 @@ static struct crypto_alg fips_rng_alg = {
447 .cra_ctxsize = sizeof(struct prng_context), 446 .cra_ctxsize = sizeof(struct prng_context),
448 .cra_type = &crypto_rng_type, 447 .cra_type = &crypto_rng_type,
449 .cra_module = THIS_MODULE, 448 .cra_module = THIS_MODULE,
450 .cra_list = LIST_HEAD_INIT(rng_alg.cra_list),
451 .cra_init = cprng_init, 449 .cra_init = cprng_init,
452 .cra_exit = cprng_exit, 450 .cra_exit = cprng_exit,
453 .cra_u = { 451 .cra_u = {
@@ -457,33 +455,18 @@ static struct crypto_alg fips_rng_alg = {
457 .seedsize = DEFAULT_PRNG_KSZ + 2*DEFAULT_BLK_SZ, 455 .seedsize = DEFAULT_PRNG_KSZ + 2*DEFAULT_BLK_SZ,
458 } 456 }
459 } 457 }
460};
461#endif 458#endif
459} };
462 460
463/* Module initalization */ 461/* Module initalization */
464static int __init prng_mod_init(void) 462static int __init prng_mod_init(void)
465{ 463{
466 int rc = 0; 464 return crypto_register_algs(rng_algs, ARRAY_SIZE(rng_algs));
467
468 rc = crypto_register_alg(&rng_alg);
469#ifdef CONFIG_CRYPTO_FIPS
470 if (rc)
471 goto out;
472
473 rc = crypto_register_alg(&fips_rng_alg);
474
475out:
476#endif
477 return rc;
478} 465}
479 466
480static void __exit prng_mod_fini(void) 467static void __exit prng_mod_fini(void)
481{ 468{
482 crypto_unregister_alg(&rng_alg); 469 crypto_unregister_algs(rng_algs, ARRAY_SIZE(rng_algs));
483#ifdef CONFIG_CRYPTO_FIPS
484 crypto_unregister_alg(&fips_rng_alg);
485#endif
486 return;
487} 470}
488 471
489MODULE_LICENSE("GPL"); 472MODULE_LICENSE("GPL");
diff --git a/crypto/anubis.c b/crypto/anubis.c
index 77530d571c9..008c8a4fb67 100644
--- a/crypto/anubis.c
+++ b/crypto/anubis.c
@@ -678,7 +678,6 @@ static struct crypto_alg anubis_alg = {
678 .cra_ctxsize = sizeof (struct anubis_ctx), 678 .cra_ctxsize = sizeof (struct anubis_ctx),
679 .cra_alignmask = 3, 679 .cra_alignmask = 3,
680 .cra_module = THIS_MODULE, 680 .cra_module = THIS_MODULE,
681 .cra_list = LIST_HEAD_INIT(anubis_alg.cra_list),
682 .cra_u = { .cipher = { 681 .cra_u = { .cipher = {
683 .cia_min_keysize = ANUBIS_MIN_KEY_SIZE, 682 .cia_min_keysize = ANUBIS_MIN_KEY_SIZE,
684 .cia_max_keysize = ANUBIS_MAX_KEY_SIZE, 683 .cia_max_keysize = ANUBIS_MAX_KEY_SIZE,
diff --git a/crypto/blowfish_generic.c b/crypto/blowfish_generic.c
index 6f269b5cfa3..8baf5447d35 100644
--- a/crypto/blowfish_generic.c
+++ b/crypto/blowfish_generic.c
@@ -115,7 +115,6 @@ static struct crypto_alg alg = {
115 .cra_ctxsize = sizeof(struct bf_ctx), 115 .cra_ctxsize = sizeof(struct bf_ctx),
116 .cra_alignmask = 3, 116 .cra_alignmask = 3,
117 .cra_module = THIS_MODULE, 117 .cra_module = THIS_MODULE,
118 .cra_list = LIST_HEAD_INIT(alg.cra_list),
119 .cra_u = { .cipher = { 118 .cra_u = { .cipher = {
120 .cia_min_keysize = BF_MIN_KEY_SIZE, 119 .cia_min_keysize = BF_MIN_KEY_SIZE,
121 .cia_max_keysize = BF_MAX_KEY_SIZE, 120 .cia_max_keysize = BF_MAX_KEY_SIZE,
diff --git a/crypto/camellia_generic.c b/crypto/camellia_generic.c
index f7aaaaf8698..75efa205230 100644
--- a/crypto/camellia_generic.c
+++ b/crypto/camellia_generic.c
@@ -1072,7 +1072,6 @@ static struct crypto_alg camellia_alg = {
1072 .cra_ctxsize = sizeof(struct camellia_ctx), 1072 .cra_ctxsize = sizeof(struct camellia_ctx),
1073 .cra_alignmask = 3, 1073 .cra_alignmask = 3,
1074 .cra_module = THIS_MODULE, 1074 .cra_module = THIS_MODULE,
1075 .cra_list = LIST_HEAD_INIT(camellia_alg.cra_list),
1076 .cra_u = { 1075 .cra_u = {
1077 .cipher = { 1076 .cipher = {
1078 .cia_min_keysize = CAMELLIA_MIN_KEY_SIZE, 1077 .cia_min_keysize = CAMELLIA_MIN_KEY_SIZE,
diff --git a/crypto/cast5.c b/crypto/cast5_generic.c
index 4a230ddec87..bc525dbd8a4 100644
--- a/crypto/cast5.c
+++ b/crypto/cast5_generic.c
@@ -4,8 +4,8 @@
4* Derived from GnuPG implementation of cast5. 4* Derived from GnuPG implementation of cast5.
5* 5*
6* Major Changes. 6* Major Changes.
7* Complete conformance to rfc2144. 7* Complete conformance to rfc2144.
8* Supports key size from 40 to 128 bits. 8* Supports key size from 40 to 128 bits.
9* 9*
10* Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. 10* Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
11* Copyright (C) 2003 Kartikey Mahendra Bhatt <kartik_me@hotmail.com>. 11* Copyright (C) 2003 Kartikey Mahendra Bhatt <kartik_me@hotmail.com>.
@@ -28,19 +28,10 @@
28#include <linux/errno.h> 28#include <linux/errno.h>
29#include <linux/string.h> 29#include <linux/string.h>
30#include <linux/types.h> 30#include <linux/types.h>
31#include <crypto/cast5.h>
31 32
32#define CAST5_BLOCK_SIZE 8
33#define CAST5_MIN_KEY_SIZE 5
34#define CAST5_MAX_KEY_SIZE 16
35 33
36struct cast5_ctx { 34const u32 cast5_s1[256] = {
37 u32 Km[16];
38 u8 Kr[16];
39 int rr; /* rr?number of rounds = 16:number of rounds = 12; (rfc 2144) */
40};
41
42
43static const u32 s1[256] = {
44 0x30fb40d4, 0x9fa0ff0b, 0x6beccd2f, 0x3f258c7a, 0x1e213f2f, 35 0x30fb40d4, 0x9fa0ff0b, 0x6beccd2f, 0x3f258c7a, 0x1e213f2f,
45 0x9c004dd3, 0x6003e540, 0xcf9fc949, 36 0x9c004dd3, 0x6003e540, 0xcf9fc949,
46 0xbfd4af27, 0x88bbbdb5, 0xe2034090, 0x98d09675, 0x6e63a0e0, 37 0xbfd4af27, 0x88bbbdb5, 0xe2034090, 0x98d09675, 0x6e63a0e0,
@@ -106,7 +97,8 @@ static const u32 s1[256] = {
106 0x1a69e783, 0x02cc4843, 0xa2f7c579, 0x429ef47d, 0x427b169c, 97 0x1a69e783, 0x02cc4843, 0xa2f7c579, 0x429ef47d, 0x427b169c,
107 0x5ac9f049, 0xdd8f0f00, 0x5c8165bf 98 0x5ac9f049, 0xdd8f0f00, 0x5c8165bf
108}; 99};
109static const u32 s2[256] = { 100EXPORT_SYMBOL_GPL(cast5_s1);
101const u32 cast5_s2[256] = {
110 0x1f201094, 0xef0ba75b, 0x69e3cf7e, 0x393f4380, 0xfe61cf7a, 102 0x1f201094, 0xef0ba75b, 0x69e3cf7e, 0x393f4380, 0xfe61cf7a,
111 0xeec5207a, 0x55889c94, 0x72fc0651, 103 0xeec5207a, 0x55889c94, 0x72fc0651,
112 0xada7ef79, 0x4e1d7235, 0xd55a63ce, 0xde0436ba, 0x99c430ef, 104 0xada7ef79, 0x4e1d7235, 0xd55a63ce, 0xde0436ba, 0x99c430ef,
@@ -172,7 +164,8 @@ static const u32 s2[256] = {
172 0x43d79572, 0x7e6dd07c, 0x06dfdf1e, 0x6c6cc4ef, 0x7160a539, 164 0x43d79572, 0x7e6dd07c, 0x06dfdf1e, 0x6c6cc4ef, 0x7160a539,
173 0x73bfbe70, 0x83877605, 0x4523ecf1 165 0x73bfbe70, 0x83877605, 0x4523ecf1
174}; 166};
175static const u32 s3[256] = { 167EXPORT_SYMBOL_GPL(cast5_s2);
168const u32 cast5_s3[256] = {
176 0x8defc240, 0x25fa5d9f, 0xeb903dbf, 0xe810c907, 0x47607fff, 169 0x8defc240, 0x25fa5d9f, 0xeb903dbf, 0xe810c907, 0x47607fff,
177 0x369fe44b, 0x8c1fc644, 0xaececa90, 170 0x369fe44b, 0x8c1fc644, 0xaececa90,
178 0xbeb1f9bf, 0xeefbcaea, 0xe8cf1950, 0x51df07ae, 0x920e8806, 171 0xbeb1f9bf, 0xeefbcaea, 0xe8cf1950, 0x51df07ae, 0x920e8806,
@@ -238,7 +231,8 @@ static const u32 s3[256] = {
238 0xf7baefd5, 0x4142ed9c, 0xa4315c11, 0x83323ec5, 0xdfef4636, 231 0xf7baefd5, 0x4142ed9c, 0xa4315c11, 0x83323ec5, 0xdfef4636,
239 0xa133c501, 0xe9d3531c, 0xee353783 232 0xa133c501, 0xe9d3531c, 0xee353783
240}; 233};
241static const u32 s4[256] = { 234EXPORT_SYMBOL_GPL(cast5_s3);
235const u32 cast5_s4[256] = {
242 0x9db30420, 0x1fb6e9de, 0xa7be7bef, 0xd273a298, 0x4a4f7bdb, 236 0x9db30420, 0x1fb6e9de, 0xa7be7bef, 0xd273a298, 0x4a4f7bdb,
243 0x64ad8c57, 0x85510443, 0xfa020ed1, 237 0x64ad8c57, 0x85510443, 0xfa020ed1,
244 0x7e287aff, 0xe60fb663, 0x095f35a1, 0x79ebf120, 0xfd059d43, 238 0x7e287aff, 0xe60fb663, 0x095f35a1, 0x79ebf120, 0xfd059d43,
@@ -304,6 +298,7 @@ static const u32 s4[256] = {
304 0x7ae5290c, 0x3cb9536b, 0x851e20fe, 0x9833557e, 0x13ecf0b0, 298 0x7ae5290c, 0x3cb9536b, 0x851e20fe, 0x9833557e, 0x13ecf0b0,
305 0xd3ffb372, 0x3f85c5c1, 0x0aef7ed2 299 0xd3ffb372, 0x3f85c5c1, 0x0aef7ed2
306}; 300};
301EXPORT_SYMBOL_GPL(cast5_s4);
307static const u32 s5[256] = { 302static const u32 s5[256] = {
308 0x7ec90c04, 0x2c6e74b9, 0x9b0e66df, 0xa6337911, 0xb86a7fff, 303 0x7ec90c04, 0x2c6e74b9, 0x9b0e66df, 0xa6337911, 0xb86a7fff,
309 0x1dd358f5, 0x44dd9d44, 0x1731167f, 304 0x1dd358f5, 0x44dd9d44, 0x1731167f,
@@ -569,17 +564,21 @@ static const u32 sb8[256] = {
569 0xeaee6801, 0x8db2a283, 0xea8bf59e 564 0xeaee6801, 0x8db2a283, 0xea8bf59e
570}; 565};
571 566
567#define s1 cast5_s1
568#define s2 cast5_s2
569#define s3 cast5_s3
570#define s4 cast5_s4
571
572#define F1(D, m, r) ((I = ((m) + (D))), (I = rol32(I, (r))), \ 572#define F1(D, m, r) ((I = ((m) + (D))), (I = rol32(I, (r))), \
573 (((s1[I >> 24] ^ s2[(I>>16)&0xff]) - s3[(I>>8)&0xff]) + s4[I&0xff])) 573 (((s1[I >> 24] ^ s2[(I>>16)&0xff]) - s3[(I>>8)&0xff]) + s4[I&0xff]))
574#define F2(D, m, r) ((I = ((m) ^ (D))), (I = rol32(I, (r))), \ 574#define F2(D, m, r) ((I = ((m) ^ (D))), (I = rol32(I, (r))), \
575 (((s1[I >> 24] - s2[(I>>16)&0xff]) + s3[(I>>8)&0xff]) ^ s4[I&0xff])) 575 (((s1[I >> 24] - s2[(I>>16)&0xff]) + s3[(I>>8)&0xff]) ^ s4[I&0xff]))
576#define F3(D, m, r) ((I = ((m) - (D))), (I = rol32(I, (r))), \ 576#define F3(D, m, r) ((I = ((m) - (D))), (I = rol32(I, (r))), \
577 (((s1[I >> 24] + s2[(I>>16)&0xff]) ^ s3[(I>>8)&0xff]) - s4[I&0xff])) 577 (((s1[I >> 24] + s2[(I>>16)&0xff]) ^ s3[(I>>8)&0xff]) - s4[I&0xff]))
578 578
579 579
580static void cast5_encrypt(struct crypto_tfm *tfm, u8 *outbuf, const u8 *inbuf) 580void __cast5_encrypt(struct cast5_ctx *c, u8 *outbuf, const u8 *inbuf)
581{ 581{
582 struct cast5_ctx *c = crypto_tfm_ctx(tfm);
583 const __be32 *src = (const __be32 *)inbuf; 582 const __be32 *src = (const __be32 *)inbuf;
584 __be32 *dst = (__be32 *)outbuf; 583 __be32 *dst = (__be32 *)outbuf;
585 u32 l, r, t; 584 u32 l, r, t;
@@ -628,10 +627,15 @@ static void cast5_encrypt(struct crypto_tfm *tfm, u8 *outbuf, const u8 *inbuf)
628 dst[0] = cpu_to_be32(r); 627 dst[0] = cpu_to_be32(r);
629 dst[1] = cpu_to_be32(l); 628 dst[1] = cpu_to_be32(l);
630} 629}
630EXPORT_SYMBOL_GPL(__cast5_encrypt);
631 631
632static void cast5_decrypt(struct crypto_tfm *tfm, u8 *outbuf, const u8 *inbuf) 632static void cast5_encrypt(struct crypto_tfm *tfm, u8 *outbuf, const u8 *inbuf)
633{
634 __cast5_encrypt(crypto_tfm_ctx(tfm), outbuf, inbuf);
635}
636
637void __cast5_decrypt(struct cast5_ctx *c, u8 *outbuf, const u8 *inbuf)
633{ 638{
634 struct cast5_ctx *c = crypto_tfm_ctx(tfm);
635 const __be32 *src = (const __be32 *)inbuf; 639 const __be32 *src = (const __be32 *)inbuf;
636 __be32 *dst = (__be32 *)outbuf; 640 __be32 *dst = (__be32 *)outbuf;
637 u32 l, r, t; 641 u32 l, r, t;
@@ -667,6 +671,12 @@ static void cast5_decrypt(struct crypto_tfm *tfm, u8 *outbuf, const u8 *inbuf)
667 dst[0] = cpu_to_be32(r); 671 dst[0] = cpu_to_be32(r);
668 dst[1] = cpu_to_be32(l); 672 dst[1] = cpu_to_be32(l);
669} 673}
674EXPORT_SYMBOL_GPL(__cast5_decrypt);
675
676static void cast5_decrypt(struct crypto_tfm *tfm, u8 *outbuf, const u8 *inbuf)
677{
678 __cast5_decrypt(crypto_tfm_ctx(tfm), outbuf, inbuf);
679}
670 680
671static void key_schedule(u32 *x, u32 *z, u32 *k) 681static void key_schedule(u32 *x, u32 *z, u32 *k)
672{ 682{
@@ -743,7 +753,7 @@ static void key_schedule(u32 *x, u32 *z, u32 *k)
743} 753}
744 754
745 755
746static int cast5_setkey(struct crypto_tfm *tfm, const u8 *key, unsigned key_len) 756int cast5_setkey(struct crypto_tfm *tfm, const u8 *key, unsigned int key_len)
747{ 757{
748 struct cast5_ctx *c = crypto_tfm_ctx(tfm); 758 struct cast5_ctx *c = crypto_tfm_ctx(tfm);
749 int i; 759 int i;
@@ -771,20 +781,22 @@ static int cast5_setkey(struct crypto_tfm *tfm, const u8 *key, unsigned key_len)
771 c->Kr[i] = k[i] & 0x1f; 781 c->Kr[i] = k[i] & 0x1f;
772 return 0; 782 return 0;
773} 783}
784EXPORT_SYMBOL_GPL(cast5_setkey);
774 785
775static struct crypto_alg alg = { 786static struct crypto_alg alg = {
776 .cra_name = "cast5", 787 .cra_name = "cast5",
777 .cra_flags = CRYPTO_ALG_TYPE_CIPHER, 788 .cra_driver_name = "cast5-generic",
778 .cra_blocksize = CAST5_BLOCK_SIZE, 789 .cra_priority = 100,
779 .cra_ctxsize = sizeof(struct cast5_ctx), 790 .cra_flags = CRYPTO_ALG_TYPE_CIPHER,
780 .cra_alignmask = 3, 791 .cra_blocksize = CAST5_BLOCK_SIZE,
781 .cra_module = THIS_MODULE, 792 .cra_ctxsize = sizeof(struct cast5_ctx),
782 .cra_list = LIST_HEAD_INIT(alg.cra_list), 793 .cra_alignmask = 3,
783 .cra_u = { 794 .cra_module = THIS_MODULE,
795 .cra_u = {
784 .cipher = { 796 .cipher = {
785 .cia_min_keysize = CAST5_MIN_KEY_SIZE, 797 .cia_min_keysize = CAST5_MIN_KEY_SIZE,
786 .cia_max_keysize = CAST5_MAX_KEY_SIZE, 798 .cia_max_keysize = CAST5_MAX_KEY_SIZE,
787 .cia_setkey = cast5_setkey, 799 .cia_setkey = cast5_setkey,
788 .cia_encrypt = cast5_encrypt, 800 .cia_encrypt = cast5_encrypt,
789 .cia_decrypt = cast5_decrypt 801 .cia_decrypt = cast5_decrypt
790 } 802 }
@@ -806,4 +818,4 @@ module_exit(cast5_mod_fini);
806 818
807MODULE_LICENSE("GPL"); 819MODULE_LICENSE("GPL");
808MODULE_DESCRIPTION("Cast5 Cipher Algorithm"); 820MODULE_DESCRIPTION("Cast5 Cipher Algorithm");
809 821MODULE_ALIAS("cast5");
diff --git a/crypto/cast6.c b/crypto/cast6_generic.c
index e0c15a6c7c3..1acd2f1c48f 100644
--- a/crypto/cast6.c
+++ b/crypto/cast6_generic.c
@@ -25,24 +25,21 @@
25#include <linux/errno.h> 25#include <linux/errno.h>
26#include <linux/string.h> 26#include <linux/string.h>
27#include <linux/types.h> 27#include <linux/types.h>
28#include <crypto/cast6.h>
28 29
29#define CAST6_BLOCK_SIZE 16 30#define s1 cast6_s1
30#define CAST6_MIN_KEY_SIZE 16 31#define s2 cast6_s2
31#define CAST6_MAX_KEY_SIZE 32 32#define s3 cast6_s3
32 33#define s4 cast6_s4
33struct cast6_ctx {
34 u32 Km[12][4];
35 u8 Kr[12][4];
36};
37 34
38#define F1(D, r, m) ((I = ((m) + (D))), (I = rol32(I, (r))), \ 35#define F1(D, r, m) ((I = ((m) + (D))), (I = rol32(I, (r))), \
39 (((s1[I >> 24] ^ s2[(I>>16)&0xff]) - s3[(I>>8)&0xff]) + s4[I&0xff])) 36 (((s1[I >> 24] ^ s2[(I>>16)&0xff]) - s3[(I>>8)&0xff]) + s4[I&0xff]))
40#define F2(D, r, m) ((I = ((m) ^ (D))), (I = rol32(I, (r))), \ 37#define F2(D, r, m) ((I = ((m) ^ (D))), (I = rol32(I, (r))), \
41 (((s1[I >> 24] - s2[(I>>16)&0xff]) + s3[(I>>8)&0xff]) ^ s4[I&0xff])) 38 (((s1[I >> 24] - s2[(I>>16)&0xff]) + s3[(I>>8)&0xff]) ^ s4[I&0xff]))
42#define F3(D, r, m) ((I = ((m) - (D))), (I = rol32(I, (r))), \ 39#define F3(D, r, m) ((I = ((m) - (D))), (I = rol32(I, (r))), \
43 (((s1[I >> 24] + s2[(I>>16)&0xff]) ^ s3[(I>>8)&0xff]) - s4[I&0xff])) 40 (((s1[I >> 24] + s2[(I>>16)&0xff]) ^ s3[(I>>8)&0xff]) - s4[I&0xff]))
44 41
45static const u32 s1[256] = { 42const u32 cast6_s1[256] = {
46 0x30fb40d4, 0x9fa0ff0b, 0x6beccd2f, 0x3f258c7a, 0x1e213f2f, 43 0x30fb40d4, 0x9fa0ff0b, 0x6beccd2f, 0x3f258c7a, 0x1e213f2f,
47 0x9c004dd3, 0x6003e540, 0xcf9fc949, 44 0x9c004dd3, 0x6003e540, 0xcf9fc949,
48 0xbfd4af27, 0x88bbbdb5, 0xe2034090, 0x98d09675, 0x6e63a0e0, 45 0xbfd4af27, 0x88bbbdb5, 0xe2034090, 0x98d09675, 0x6e63a0e0,
@@ -108,8 +105,9 @@ static const u32 s1[256] = {
108 0x1a69e783, 0x02cc4843, 0xa2f7c579, 0x429ef47d, 0x427b169c, 105 0x1a69e783, 0x02cc4843, 0xa2f7c579, 0x429ef47d, 0x427b169c,
109 0x5ac9f049, 0xdd8f0f00, 0x5c8165bf 106 0x5ac9f049, 0xdd8f0f00, 0x5c8165bf
110}; 107};
108EXPORT_SYMBOL_GPL(cast6_s1);
111 109
112static const u32 s2[256] = { 110const u32 cast6_s2[256] = {
113 0x1f201094, 0xef0ba75b, 0x69e3cf7e, 0x393f4380, 0xfe61cf7a, 111 0x1f201094, 0xef0ba75b, 0x69e3cf7e, 0x393f4380, 0xfe61cf7a,
114 0xeec5207a, 0x55889c94, 0x72fc0651, 112 0xeec5207a, 0x55889c94, 0x72fc0651,
115 0xada7ef79, 0x4e1d7235, 0xd55a63ce, 0xde0436ba, 0x99c430ef, 113 0xada7ef79, 0x4e1d7235, 0xd55a63ce, 0xde0436ba, 0x99c430ef,
@@ -175,8 +173,9 @@ static const u32 s2[256] = {
175 0x43d79572, 0x7e6dd07c, 0x06dfdf1e, 0x6c6cc4ef, 0x7160a539, 173 0x43d79572, 0x7e6dd07c, 0x06dfdf1e, 0x6c6cc4ef, 0x7160a539,
176 0x73bfbe70, 0x83877605, 0x4523ecf1 174 0x73bfbe70, 0x83877605, 0x4523ecf1
177}; 175};
176EXPORT_SYMBOL_GPL(cast6_s2);
178 177
179static const u32 s3[256] = { 178const u32 cast6_s3[256] = {
180 0x8defc240, 0x25fa5d9f, 0xeb903dbf, 0xe810c907, 0x47607fff, 179 0x8defc240, 0x25fa5d9f, 0xeb903dbf, 0xe810c907, 0x47607fff,
181 0x369fe44b, 0x8c1fc644, 0xaececa90, 180 0x369fe44b, 0x8c1fc644, 0xaececa90,
182 0xbeb1f9bf, 0xeefbcaea, 0xe8cf1950, 0x51df07ae, 0x920e8806, 181 0xbeb1f9bf, 0xeefbcaea, 0xe8cf1950, 0x51df07ae, 0x920e8806,
@@ -242,8 +241,9 @@ static const u32 s3[256] = {
242 0xf7baefd5, 0x4142ed9c, 0xa4315c11, 0x83323ec5, 0xdfef4636, 241 0xf7baefd5, 0x4142ed9c, 0xa4315c11, 0x83323ec5, 0xdfef4636,
243 0xa133c501, 0xe9d3531c, 0xee353783 242 0xa133c501, 0xe9d3531c, 0xee353783
244}; 243};
244EXPORT_SYMBOL_GPL(cast6_s3);
245 245
246static const u32 s4[256] = { 246const u32 cast6_s4[256] = {
247 0x9db30420, 0x1fb6e9de, 0xa7be7bef, 0xd273a298, 0x4a4f7bdb, 247 0x9db30420, 0x1fb6e9de, 0xa7be7bef, 0xd273a298, 0x4a4f7bdb,
248 0x64ad8c57, 0x85510443, 0xfa020ed1, 248 0x64ad8c57, 0x85510443, 0xfa020ed1,
249 0x7e287aff, 0xe60fb663, 0x095f35a1, 0x79ebf120, 0xfd059d43, 249 0x7e287aff, 0xe60fb663, 0x095f35a1, 0x79ebf120, 0xfd059d43,
@@ -309,6 +309,7 @@ static const u32 s4[256] = {
309 0x7ae5290c, 0x3cb9536b, 0x851e20fe, 0x9833557e, 0x13ecf0b0, 309 0x7ae5290c, 0x3cb9536b, 0x851e20fe, 0x9833557e, 0x13ecf0b0,
310 0xd3ffb372, 0x3f85c5c1, 0x0aef7ed2 310 0xd3ffb372, 0x3f85c5c1, 0x0aef7ed2
311}; 311};
312EXPORT_SYMBOL_GPL(cast6_s4);
312 313
313static const u32 Tm[24][8] = { 314static const u32 Tm[24][8] = {
314 { 0x5a827999, 0xc95c653a, 0x383650db, 0xa7103c7c, 0x15ea281d, 315 { 0x5a827999, 0xc95c653a, 0x383650db, 0xa7103c7c, 0x15ea281d,
@@ -369,7 +370,7 @@ static const u8 Tr[4][8] = {
369}; 370};
370 371
371/* forward octave */ 372/* forward octave */
372static void W(u32 *key, unsigned int i) 373static inline void W(u32 *key, unsigned int i)
373{ 374{
374 u32 I; 375 u32 I;
375 key[6] ^= F1(key[7], Tr[i % 4][0], Tm[i][0]); 376 key[6] ^= F1(key[7], Tr[i % 4][0], Tm[i][0]);
@@ -382,14 +383,12 @@ static void W(u32 *key, unsigned int i)
382 key[7] ^= F2(key[0], Tr[i % 4][7], Tm[i][7]); 383 key[7] ^= F2(key[0], Tr[i % 4][7], Tm[i][7]);
383} 384}
384 385
385static int cast6_setkey(struct crypto_tfm *tfm, const u8 *in_key, 386int __cast6_setkey(struct cast6_ctx *c, const u8 *in_key,
386 unsigned key_len) 387 unsigned key_len, u32 *flags)
387{ 388{
388 int i; 389 int i;
389 u32 key[8]; 390 u32 key[8];
390 __be32 p_key[8]; /* padded key */ 391 __be32 p_key[8]; /* padded key */
391 struct cast6_ctx *c = crypto_tfm_ctx(tfm);
392 u32 *flags = &tfm->crt_flags;
393 392
394 if (key_len % 4 != 0) { 393 if (key_len % 4 != 0) {
395 *flags |= CRYPTO_TFM_RES_BAD_KEY_LEN; 394 *flags |= CRYPTO_TFM_RES_BAD_KEY_LEN;
@@ -425,9 +424,17 @@ static int cast6_setkey(struct crypto_tfm *tfm, const u8 *in_key,
425 424
426 return 0; 425 return 0;
427} 426}
427EXPORT_SYMBOL_GPL(__cast6_setkey);
428
429int cast6_setkey(struct crypto_tfm *tfm, const u8 *key, unsigned int keylen)
430{
431 return __cast6_setkey(crypto_tfm_ctx(tfm), key, keylen,
432 &tfm->crt_flags);
433}
434EXPORT_SYMBOL_GPL(cast6_setkey);
428 435
429/*forward quad round*/ 436/*forward quad round*/
430static void Q(u32 *block, u8 *Kr, u32 *Km) 437static inline void Q(u32 *block, u8 *Kr, u32 *Km)
431{ 438{
432 u32 I; 439 u32 I;
433 block[2] ^= F1(block[3], Kr[0], Km[0]); 440 block[2] ^= F1(block[3], Kr[0], Km[0]);
@@ -437,7 +444,7 @@ static void Q(u32 *block, u8 *Kr, u32 *Km)
437} 444}
438 445
439/*reverse quad round*/ 446/*reverse quad round*/
440static void QBAR(u32 *block, u8 *Kr, u32 *Km) 447static inline void QBAR(u32 *block, u8 *Kr, u32 *Km)
441{ 448{
442 u32 I; 449 u32 I;
443 block[3] ^= F1(block[0], Kr[3], Km[3]); 450 block[3] ^= F1(block[0], Kr[3], Km[3]);
@@ -446,9 +453,8 @@ static void QBAR(u32 *block, u8 *Kr, u32 *Km)
446 block[2] ^= F1(block[3], Kr[0], Km[0]); 453 block[2] ^= F1(block[3], Kr[0], Km[0]);
447} 454}
448 455
449static void cast6_encrypt(struct crypto_tfm *tfm, u8 *outbuf, const u8 *inbuf) 456void __cast6_encrypt(struct cast6_ctx *c, u8 *outbuf, const u8 *inbuf)
450{ 457{
451 struct cast6_ctx *c = crypto_tfm_ctx(tfm);
452 const __be32 *src = (const __be32 *)inbuf; 458 const __be32 *src = (const __be32 *)inbuf;
453 __be32 *dst = (__be32 *)outbuf; 459 __be32 *dst = (__be32 *)outbuf;
454 u32 block[4]; 460 u32 block[4];
@@ -478,10 +484,15 @@ static void cast6_encrypt(struct crypto_tfm *tfm, u8 *outbuf, const u8 *inbuf)
478 dst[2] = cpu_to_be32(block[2]); 484 dst[2] = cpu_to_be32(block[2]);
479 dst[3] = cpu_to_be32(block[3]); 485 dst[3] = cpu_to_be32(block[3]);
480} 486}
487EXPORT_SYMBOL_GPL(__cast6_encrypt);
481 488
482static void cast6_decrypt(struct crypto_tfm *tfm, u8 *outbuf, const u8 *inbuf) 489static void cast6_encrypt(struct crypto_tfm *tfm, u8 *outbuf, const u8 *inbuf)
490{
491 __cast6_encrypt(crypto_tfm_ctx(tfm), outbuf, inbuf);
492}
493
494void __cast6_decrypt(struct cast6_ctx *c, u8 *outbuf, const u8 *inbuf)
483{ 495{
484 struct cast6_ctx *c = crypto_tfm_ctx(tfm);
485 const __be32 *src = (const __be32 *)inbuf; 496 const __be32 *src = (const __be32 *)inbuf;
486 __be32 *dst = (__be32 *)outbuf; 497 __be32 *dst = (__be32 *)outbuf;
487 u32 block[4]; 498 u32 block[4];
@@ -511,15 +522,22 @@ static void cast6_decrypt(struct crypto_tfm *tfm, u8 *outbuf, const u8 *inbuf)
511 dst[2] = cpu_to_be32(block[2]); 522 dst[2] = cpu_to_be32(block[2]);
512 dst[3] = cpu_to_be32(block[3]); 523 dst[3] = cpu_to_be32(block[3]);
513} 524}
525EXPORT_SYMBOL_GPL(__cast6_decrypt);
526
527static void cast6_decrypt(struct crypto_tfm *tfm, u8 *outbuf, const u8 *inbuf)
528{
529 __cast6_decrypt(crypto_tfm_ctx(tfm), outbuf, inbuf);
530}
514 531
515static struct crypto_alg alg = { 532static struct crypto_alg alg = {
516 .cra_name = "cast6", 533 .cra_name = "cast6",
534 .cra_driver_name = "cast6-generic",
535 .cra_priority = 100,
517 .cra_flags = CRYPTO_ALG_TYPE_CIPHER, 536 .cra_flags = CRYPTO_ALG_TYPE_CIPHER,
518 .cra_blocksize = CAST6_BLOCK_SIZE, 537 .cra_blocksize = CAST6_BLOCK_SIZE,
519 .cra_ctxsize = sizeof(struct cast6_ctx), 538 .cra_ctxsize = sizeof(struct cast6_ctx),
520 .cra_alignmask = 3, 539 .cra_alignmask = 3,
521 .cra_module = THIS_MODULE, 540 .cra_module = THIS_MODULE,
522 .cra_list = LIST_HEAD_INIT(alg.cra_list),
523 .cra_u = { 541 .cra_u = {
524 .cipher = { 542 .cipher = {
525 .cia_min_keysize = CAST6_MIN_KEY_SIZE, 543 .cia_min_keysize = CAST6_MIN_KEY_SIZE,
@@ -545,3 +563,4 @@ module_exit(cast6_mod_fini);
545 563
546MODULE_LICENSE("GPL"); 564MODULE_LICENSE("GPL");
547MODULE_DESCRIPTION("Cast6 Cipher Algorithm"); 565MODULE_DESCRIPTION("Cast6 Cipher Algorithm");
566MODULE_ALIAS("cast6");
diff --git a/crypto/crypto_null.c b/crypto/crypto_null.c
index 07a8a96d46f..fee7265cd35 100644
--- a/crypto/crypto_null.c
+++ b/crypto/crypto_null.c
@@ -94,18 +94,6 @@ static int skcipher_null_crypt(struct blkcipher_desc *desc,
94 return err; 94 return err;
95} 95}
96 96
97static struct crypto_alg compress_null = {
98 .cra_name = "compress_null",
99 .cra_flags = CRYPTO_ALG_TYPE_COMPRESS,
100 .cra_blocksize = NULL_BLOCK_SIZE,
101 .cra_ctxsize = 0,
102 .cra_module = THIS_MODULE,
103 .cra_list = LIST_HEAD_INIT(compress_null.cra_list),
104 .cra_u = { .compress = {
105 .coa_compress = null_compress,
106 .coa_decompress = null_compress } }
107};
108
109static struct shash_alg digest_null = { 97static struct shash_alg digest_null = {
110 .digestsize = NULL_DIGEST_SIZE, 98 .digestsize = NULL_DIGEST_SIZE,
111 .setkey = null_hash_setkey, 99 .setkey = null_hash_setkey,
@@ -122,22 +110,19 @@ static struct shash_alg digest_null = {
122 } 110 }
123}; 111};
124 112
125static struct crypto_alg cipher_null = { 113static struct crypto_alg null_algs[3] = { {
126 .cra_name = "cipher_null", 114 .cra_name = "cipher_null",
127 .cra_flags = CRYPTO_ALG_TYPE_CIPHER, 115 .cra_flags = CRYPTO_ALG_TYPE_CIPHER,
128 .cra_blocksize = NULL_BLOCK_SIZE, 116 .cra_blocksize = NULL_BLOCK_SIZE,
129 .cra_ctxsize = 0, 117 .cra_ctxsize = 0,
130 .cra_module = THIS_MODULE, 118 .cra_module = THIS_MODULE,
131 .cra_list = LIST_HEAD_INIT(cipher_null.cra_list),
132 .cra_u = { .cipher = { 119 .cra_u = { .cipher = {
133 .cia_min_keysize = NULL_KEY_SIZE, 120 .cia_min_keysize = NULL_KEY_SIZE,
134 .cia_max_keysize = NULL_KEY_SIZE, 121 .cia_max_keysize = NULL_KEY_SIZE,
135 .cia_setkey = null_setkey, 122 .cia_setkey = null_setkey,
136 .cia_encrypt = null_crypt, 123 .cia_encrypt = null_crypt,
137 .cia_decrypt = null_crypt } } 124 .cia_decrypt = null_crypt } }
138}; 125}, {
139
140static struct crypto_alg skcipher_null = {
141 .cra_name = "ecb(cipher_null)", 126 .cra_name = "ecb(cipher_null)",
142 .cra_driver_name = "ecb-cipher_null", 127 .cra_driver_name = "ecb-cipher_null",
143 .cra_priority = 100, 128 .cra_priority = 100,
@@ -146,7 +131,6 @@ static struct crypto_alg skcipher_null = {
146 .cra_type = &crypto_blkcipher_type, 131 .cra_type = &crypto_blkcipher_type,
147 .cra_ctxsize = 0, 132 .cra_ctxsize = 0,
148 .cra_module = THIS_MODULE, 133 .cra_module = THIS_MODULE,
149 .cra_list = LIST_HEAD_INIT(skcipher_null.cra_list),
150 .cra_u = { .blkcipher = { 134 .cra_u = { .blkcipher = {
151 .min_keysize = NULL_KEY_SIZE, 135 .min_keysize = NULL_KEY_SIZE,
152 .max_keysize = NULL_KEY_SIZE, 136 .max_keysize = NULL_KEY_SIZE,
@@ -154,7 +138,16 @@ static struct crypto_alg skcipher_null = {
154 .setkey = null_setkey, 138 .setkey = null_setkey,
155 .encrypt = skcipher_null_crypt, 139 .encrypt = skcipher_null_crypt,
156 .decrypt = skcipher_null_crypt } } 140 .decrypt = skcipher_null_crypt } }
157}; 141}, {
142 .cra_name = "compress_null",
143 .cra_flags = CRYPTO_ALG_TYPE_COMPRESS,
144 .cra_blocksize = NULL_BLOCK_SIZE,
145 .cra_ctxsize = 0,
146 .cra_module = THIS_MODULE,
147 .cra_u = { .compress = {
148 .coa_compress = null_compress,
149 .coa_decompress = null_compress } }
150} };
158 151
159MODULE_ALIAS("compress_null"); 152MODULE_ALIAS("compress_null");
160MODULE_ALIAS("digest_null"); 153MODULE_ALIAS("digest_null");
@@ -164,40 +157,26 @@ static int __init crypto_null_mod_init(void)
164{ 157{
165 int ret = 0; 158 int ret = 0;
166 159
167 ret = crypto_register_alg(&cipher_null); 160 ret = crypto_register_algs(null_algs, ARRAY_SIZE(null_algs));
168 if (ret < 0) 161 if (ret < 0)
169 goto out; 162 goto out;
170 163
171 ret = crypto_register_alg(&skcipher_null);
172 if (ret < 0)
173 goto out_unregister_cipher;
174
175 ret = crypto_register_shash(&digest_null); 164 ret = crypto_register_shash(&digest_null);
176 if (ret < 0) 165 if (ret < 0)
177 goto out_unregister_skcipher; 166 goto out_unregister_algs;
178 167
179 ret = crypto_register_alg(&compress_null); 168 return 0;
180 if (ret < 0)
181 goto out_unregister_digest;
182 169
170out_unregister_algs:
171 crypto_unregister_algs(null_algs, ARRAY_SIZE(null_algs));
183out: 172out:
184 return ret; 173 return ret;
185
186out_unregister_digest:
187 crypto_unregister_shash(&digest_null);
188out_unregister_skcipher:
189 crypto_unregister_alg(&skcipher_null);
190out_unregister_cipher:
191 crypto_unregister_alg(&cipher_null);
192 goto out;
193} 174}
194 175
195static void __exit crypto_null_mod_fini(void) 176static void __exit crypto_null_mod_fini(void)
196{ 177{
197 crypto_unregister_alg(&compress_null);
198 crypto_unregister_shash(&digest_null); 178 crypto_unregister_shash(&digest_null);
199 crypto_unregister_alg(&skcipher_null); 179 crypto_unregister_algs(null_algs, ARRAY_SIZE(null_algs));
200 crypto_unregister_alg(&cipher_null);
201} 180}
202 181
203module_init(crypto_null_mod_init); 182module_init(crypto_null_mod_init);
diff --git a/crypto/crypto_user.c b/crypto/crypto_user.c
index 6bba414d0c6..35d700a97d7 100644
--- a/crypto/crypto_user.c
+++ b/crypto/crypto_user.c
@@ -30,7 +30,7 @@
30 30
31#include "internal.h" 31#include "internal.h"
32 32
33DEFINE_MUTEX(crypto_cfg_mutex); 33static DEFINE_MUTEX(crypto_cfg_mutex);
34 34
35/* The crypto netlink socket */ 35/* The crypto netlink socket */
36static struct sock *crypto_nlsk; 36static struct sock *crypto_nlsk;
diff --git a/crypto/deflate.c b/crypto/deflate.c
index b0165ecad0c..b57d70eb156 100644
--- a/crypto/deflate.c
+++ b/crypto/deflate.c
@@ -199,7 +199,6 @@ static struct crypto_alg alg = {
199 .cra_flags = CRYPTO_ALG_TYPE_COMPRESS, 199 .cra_flags = CRYPTO_ALG_TYPE_COMPRESS,
200 .cra_ctxsize = sizeof(struct deflate_ctx), 200 .cra_ctxsize = sizeof(struct deflate_ctx),
201 .cra_module = THIS_MODULE, 201 .cra_module = THIS_MODULE,
202 .cra_list = LIST_HEAD_INIT(alg.cra_list),
203 .cra_init = deflate_init, 202 .cra_init = deflate_init,
204 .cra_exit = deflate_exit, 203 .cra_exit = deflate_exit,
205 .cra_u = { .compress = { 204 .cra_u = { .compress = {
diff --git a/crypto/des_generic.c b/crypto/des_generic.c
index 873818d48e8..f6cf63f8846 100644
--- a/crypto/des_generic.c
+++ b/crypto/des_generic.c
@@ -943,59 +943,44 @@ static void des3_ede_decrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src)
943 d[1] = cpu_to_le32(L); 943 d[1] = cpu_to_le32(L);
944} 944}
945 945
946static struct crypto_alg des_alg = { 946static struct crypto_alg des_algs[2] = { {
947 .cra_name = "des", 947 .cra_name = "des",
948 .cra_flags = CRYPTO_ALG_TYPE_CIPHER, 948 .cra_flags = CRYPTO_ALG_TYPE_CIPHER,
949 .cra_blocksize = DES_BLOCK_SIZE, 949 .cra_blocksize = DES_BLOCK_SIZE,
950 .cra_ctxsize = sizeof(struct des_ctx), 950 .cra_ctxsize = sizeof(struct des_ctx),
951 .cra_module = THIS_MODULE, 951 .cra_module = THIS_MODULE,
952 .cra_alignmask = 3, 952 .cra_alignmask = 3,
953 .cra_list = LIST_HEAD_INIT(des_alg.cra_list),
954 .cra_u = { .cipher = { 953 .cra_u = { .cipher = {
955 .cia_min_keysize = DES_KEY_SIZE, 954 .cia_min_keysize = DES_KEY_SIZE,
956 .cia_max_keysize = DES_KEY_SIZE, 955 .cia_max_keysize = DES_KEY_SIZE,
957 .cia_setkey = des_setkey, 956 .cia_setkey = des_setkey,
958 .cia_encrypt = des_encrypt, 957 .cia_encrypt = des_encrypt,
959 .cia_decrypt = des_decrypt } } 958 .cia_decrypt = des_decrypt } }
960}; 959}, {
961
962static struct crypto_alg des3_ede_alg = {
963 .cra_name = "des3_ede", 960 .cra_name = "des3_ede",
964 .cra_flags = CRYPTO_ALG_TYPE_CIPHER, 961 .cra_flags = CRYPTO_ALG_TYPE_CIPHER,
965 .cra_blocksize = DES3_EDE_BLOCK_SIZE, 962 .cra_blocksize = DES3_EDE_BLOCK_SIZE,
966 .cra_ctxsize = sizeof(struct des3_ede_ctx), 963 .cra_ctxsize = sizeof(struct des3_ede_ctx),
967 .cra_module = THIS_MODULE, 964 .cra_module = THIS_MODULE,
968 .cra_alignmask = 3, 965 .cra_alignmask = 3,
969 .cra_list = LIST_HEAD_INIT(des3_ede_alg.cra_list),
970 .cra_u = { .cipher = { 966 .cra_u = { .cipher = {
971 .cia_min_keysize = DES3_EDE_KEY_SIZE, 967 .cia_min_keysize = DES3_EDE_KEY_SIZE,
972 .cia_max_keysize = DES3_EDE_KEY_SIZE, 968 .cia_max_keysize = DES3_EDE_KEY_SIZE,
973 .cia_setkey = des3_ede_setkey, 969 .cia_setkey = des3_ede_setkey,
974 .cia_encrypt = des3_ede_encrypt, 970 .cia_encrypt = des3_ede_encrypt,
975 .cia_decrypt = des3_ede_decrypt } } 971 .cia_decrypt = des3_ede_decrypt } }
976}; 972} };
977 973
978MODULE_ALIAS("des3_ede"); 974MODULE_ALIAS("des3_ede");
979 975
980static int __init des_generic_mod_init(void) 976static int __init des_generic_mod_init(void)
981{ 977{
982 int ret = 0; 978 return crypto_register_algs(des_algs, ARRAY_SIZE(des_algs));
983
984 ret = crypto_register_alg(&des_alg);
985 if (ret < 0)
986 goto out;
987
988 ret = crypto_register_alg(&des3_ede_alg);
989 if (ret < 0)
990 crypto_unregister_alg(&des_alg);
991out:
992 return ret;
993} 979}
994 980
995static void __exit des_generic_mod_fini(void) 981static void __exit des_generic_mod_fini(void)
996{ 982{
997 crypto_unregister_alg(&des3_ede_alg); 983 crypto_unregister_algs(des_algs, ARRAY_SIZE(des_algs));
998 crypto_unregister_alg(&des_alg);
999} 984}
1000 985
1001module_init(des_generic_mod_init); 986module_init(des_generic_mod_init);
diff --git a/crypto/fcrypt.c b/crypto/fcrypt.c
index c33107e340b..3b2cf569c68 100644
--- a/crypto/fcrypt.c
+++ b/crypto/fcrypt.c
@@ -396,7 +396,6 @@ static struct crypto_alg fcrypt_alg = {
396 .cra_ctxsize = sizeof(struct fcrypt_ctx), 396 .cra_ctxsize = sizeof(struct fcrypt_ctx),
397 .cra_module = THIS_MODULE, 397 .cra_module = THIS_MODULE,
398 .cra_alignmask = 3, 398 .cra_alignmask = 3,
399 .cra_list = LIST_HEAD_INIT(fcrypt_alg.cra_list),
400 .cra_u = { .cipher = { 399 .cra_u = { .cipher = {
401 .cia_min_keysize = 8, 400 .cia_min_keysize = 8,
402 .cia_max_keysize = 8, 401 .cia_max_keysize = 8,
diff --git a/crypto/ghash-generic.c b/crypto/ghash-generic.c
index 7835b8fc94d..9d3f0c69a86 100644
--- a/crypto/ghash-generic.c
+++ b/crypto/ghash-generic.c
@@ -153,7 +153,6 @@ static struct shash_alg ghash_alg = {
153 .cra_blocksize = GHASH_BLOCK_SIZE, 153 .cra_blocksize = GHASH_BLOCK_SIZE,
154 .cra_ctxsize = sizeof(struct ghash_ctx), 154 .cra_ctxsize = sizeof(struct ghash_ctx),
155 .cra_module = THIS_MODULE, 155 .cra_module = THIS_MODULE,
156 .cra_list = LIST_HEAD_INIT(ghash_alg.base.cra_list),
157 .cra_exit = ghash_exit_tfm, 156 .cra_exit = ghash_exit_tfm,
158 }, 157 },
159}; 158};
diff --git a/crypto/khazad.c b/crypto/khazad.c
index 527e4e395fc..60e7cd66fac 100644
--- a/crypto/khazad.c
+++ b/crypto/khazad.c
@@ -853,7 +853,6 @@ static struct crypto_alg khazad_alg = {
853 .cra_ctxsize = sizeof (struct khazad_ctx), 853 .cra_ctxsize = sizeof (struct khazad_ctx),
854 .cra_alignmask = 7, 854 .cra_alignmask = 7,
855 .cra_module = THIS_MODULE, 855 .cra_module = THIS_MODULE,
856 .cra_list = LIST_HEAD_INIT(khazad_alg.cra_list),
857 .cra_u = { .cipher = { 856 .cra_u = { .cipher = {
858 .cia_min_keysize = KHAZAD_KEY_SIZE, 857 .cia_min_keysize = KHAZAD_KEY_SIZE,
859 .cia_max_keysize = KHAZAD_KEY_SIZE, 858 .cia_max_keysize = KHAZAD_KEY_SIZE,
diff --git a/crypto/krng.c b/crypto/krng.c
index 4328bb3430e..a2d2b72fc13 100644
--- a/crypto/krng.c
+++ b/crypto/krng.c
@@ -35,7 +35,6 @@ static struct crypto_alg krng_alg = {
35 .cra_ctxsize = 0, 35 .cra_ctxsize = 0,
36 .cra_type = &crypto_rng_type, 36 .cra_type = &crypto_rng_type,
37 .cra_module = THIS_MODULE, 37 .cra_module = THIS_MODULE,
38 .cra_list = LIST_HEAD_INIT(krng_alg.cra_list),
39 .cra_u = { 38 .cra_u = {
40 .rng = { 39 .rng = {
41 .rng_make_random = krng_get_random, 40 .rng_make_random = krng_get_random,
diff --git a/crypto/lzo.c b/crypto/lzo.c
index b5e77077d75..1c2aa69c54b 100644
--- a/crypto/lzo.c
+++ b/crypto/lzo.c
@@ -81,7 +81,6 @@ static struct crypto_alg alg = {
81 .cra_flags = CRYPTO_ALG_TYPE_COMPRESS, 81 .cra_flags = CRYPTO_ALG_TYPE_COMPRESS,
82 .cra_ctxsize = sizeof(struct lzo_ctx), 82 .cra_ctxsize = sizeof(struct lzo_ctx),
83 .cra_module = THIS_MODULE, 83 .cra_module = THIS_MODULE,
84 .cra_list = LIST_HEAD_INIT(alg.cra_list),
85 .cra_init = lzo_init, 84 .cra_init = lzo_init,
86 .cra_exit = lzo_exit, 85 .cra_exit = lzo_exit,
87 .cra_u = { .compress = { 86 .cra_u = { .compress = {
diff --git a/crypto/salsa20_generic.c b/crypto/salsa20_generic.c
index eac10c11685..9a4770c0228 100644
--- a/crypto/salsa20_generic.c
+++ b/crypto/salsa20_generic.c
@@ -221,7 +221,6 @@ static struct crypto_alg alg = {
221 .cra_ctxsize = sizeof(struct salsa20_ctx), 221 .cra_ctxsize = sizeof(struct salsa20_ctx),
222 .cra_alignmask = 3, 222 .cra_alignmask = 3,
223 .cra_module = THIS_MODULE, 223 .cra_module = THIS_MODULE,
224 .cra_list = LIST_HEAD_INIT(alg.cra_list),
225 .cra_u = { 224 .cra_u = {
226 .blkcipher = { 225 .blkcipher = {
227 .setkey = setkey, 226 .setkey = setkey,
diff --git a/crypto/seed.c b/crypto/seed.c
index d3e422f6055..9c904d6d215 100644
--- a/crypto/seed.c
+++ b/crypto/seed.c
@@ -449,7 +449,6 @@ static struct crypto_alg seed_alg = {
449 .cra_ctxsize = sizeof(struct seed_ctx), 449 .cra_ctxsize = sizeof(struct seed_ctx),
450 .cra_alignmask = 3, 450 .cra_alignmask = 3,
451 .cra_module = THIS_MODULE, 451 .cra_module = THIS_MODULE,
452 .cra_list = LIST_HEAD_INIT(seed_alg.cra_list),
453 .cra_u = { 452 .cra_u = {
454 .cipher = { 453 .cipher = {
455 .cia_min_keysize = SEED_KEY_SIZE, 454 .cia_min_keysize = SEED_KEY_SIZE,
diff --git a/crypto/serpent_generic.c b/crypto/serpent_generic.c
index 8f32cf35e5c..7ddbd7e8885 100644
--- a/crypto/serpent_generic.c
+++ b/crypto/serpent_generic.c
@@ -567,24 +567,6 @@ static void serpent_decrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src)
567 __serpent_decrypt(ctx, dst, src); 567 __serpent_decrypt(ctx, dst, src);
568} 568}
569 569
570static struct crypto_alg serpent_alg = {
571 .cra_name = "serpent",
572 .cra_driver_name = "serpent-generic",
573 .cra_priority = 100,
574 .cra_flags = CRYPTO_ALG_TYPE_CIPHER,
575 .cra_blocksize = SERPENT_BLOCK_SIZE,
576 .cra_ctxsize = sizeof(struct serpent_ctx),
577 .cra_alignmask = 3,
578 .cra_module = THIS_MODULE,
579 .cra_list = LIST_HEAD_INIT(serpent_alg.cra_list),
580 .cra_u = { .cipher = {
581 .cia_min_keysize = SERPENT_MIN_KEY_SIZE,
582 .cia_max_keysize = SERPENT_MAX_KEY_SIZE,
583 .cia_setkey = serpent_setkey,
584 .cia_encrypt = serpent_encrypt,
585 .cia_decrypt = serpent_decrypt } }
586};
587
588static int tnepres_setkey(struct crypto_tfm *tfm, const u8 *key, 570static int tnepres_setkey(struct crypto_tfm *tfm, const u8 *key,
589 unsigned int keylen) 571 unsigned int keylen)
590{ 572{
@@ -637,41 +619,44 @@ static void tnepres_decrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src)
637 d[3] = swab32(rd[0]); 619 d[3] = swab32(rd[0]);
638} 620}
639 621
640static struct crypto_alg tnepres_alg = { 622static struct crypto_alg srp_algs[2] = { {
623 .cra_name = "serpent",
624 .cra_driver_name = "serpent-generic",
625 .cra_priority = 100,
626 .cra_flags = CRYPTO_ALG_TYPE_CIPHER,
627 .cra_blocksize = SERPENT_BLOCK_SIZE,
628 .cra_ctxsize = sizeof(struct serpent_ctx),
629 .cra_alignmask = 3,
630 .cra_module = THIS_MODULE,
631 .cra_u = { .cipher = {
632 .cia_min_keysize = SERPENT_MIN_KEY_SIZE,
633 .cia_max_keysize = SERPENT_MAX_KEY_SIZE,
634 .cia_setkey = serpent_setkey,
635 .cia_encrypt = serpent_encrypt,
636 .cia_decrypt = serpent_decrypt } }
637}, {
641 .cra_name = "tnepres", 638 .cra_name = "tnepres",
642 .cra_flags = CRYPTO_ALG_TYPE_CIPHER, 639 .cra_flags = CRYPTO_ALG_TYPE_CIPHER,
643 .cra_blocksize = SERPENT_BLOCK_SIZE, 640 .cra_blocksize = SERPENT_BLOCK_SIZE,
644 .cra_ctxsize = sizeof(struct serpent_ctx), 641 .cra_ctxsize = sizeof(struct serpent_ctx),
645 .cra_alignmask = 3, 642 .cra_alignmask = 3,
646 .cra_module = THIS_MODULE, 643 .cra_module = THIS_MODULE,
647 .cra_list = LIST_HEAD_INIT(serpent_alg.cra_list),
648 .cra_u = { .cipher = { 644 .cra_u = { .cipher = {
649 .cia_min_keysize = SERPENT_MIN_KEY_SIZE, 645 .cia_min_keysize = SERPENT_MIN_KEY_SIZE,
650 .cia_max_keysize = SERPENT_MAX_KEY_SIZE, 646 .cia_max_keysize = SERPENT_MAX_KEY_SIZE,
651 .cia_setkey = tnepres_setkey, 647 .cia_setkey = tnepres_setkey,
652 .cia_encrypt = tnepres_encrypt, 648 .cia_encrypt = tnepres_encrypt,
653 .cia_decrypt = tnepres_decrypt } } 649 .cia_decrypt = tnepres_decrypt } }
654}; 650} };
655 651
656static int __init serpent_mod_init(void) 652static int __init serpent_mod_init(void)
657{ 653{
658 int ret = crypto_register_alg(&serpent_alg); 654 return crypto_register_algs(srp_algs, ARRAY_SIZE(srp_algs));
659
660 if (ret)
661 return ret;
662
663 ret = crypto_register_alg(&tnepres_alg);
664
665 if (ret)
666 crypto_unregister_alg(&serpent_alg);
667
668 return ret;
669} 655}
670 656
671static void __exit serpent_mod_fini(void) 657static void __exit serpent_mod_fini(void)
672{ 658{
673 crypto_unregister_alg(&tnepres_alg); 659 crypto_unregister_algs(srp_algs, ARRAY_SIZE(srp_algs));
674 crypto_unregister_alg(&serpent_alg);
675} 660}
676 661
677module_init(serpent_mod_init); 662module_init(serpent_mod_init);
diff --git a/crypto/sha256_generic.c b/crypto/sha256_generic.c
index c48459ebf05..c3ed4ec924e 100644
--- a/crypto/sha256_generic.c
+++ b/crypto/sha256_generic.c
@@ -336,7 +336,7 @@ static int sha256_import(struct shash_desc *desc, const void *in)
336 return 0; 336 return 0;
337} 337}
338 338
339static struct shash_alg sha256 = { 339static struct shash_alg sha256_algs[2] = { {
340 .digestsize = SHA256_DIGEST_SIZE, 340 .digestsize = SHA256_DIGEST_SIZE,
341 .init = sha256_init, 341 .init = sha256_init,
342 .update = sha256_update, 342 .update = sha256_update,
@@ -352,9 +352,7 @@ static struct shash_alg sha256 = {
352 .cra_blocksize = SHA256_BLOCK_SIZE, 352 .cra_blocksize = SHA256_BLOCK_SIZE,
353 .cra_module = THIS_MODULE, 353 .cra_module = THIS_MODULE,
354 } 354 }
355}; 355}, {
356
357static struct shash_alg sha224 = {
358 .digestsize = SHA224_DIGEST_SIZE, 356 .digestsize = SHA224_DIGEST_SIZE,
359 .init = sha224_init, 357 .init = sha224_init,
360 .update = sha256_update, 358 .update = sha256_update,
@@ -367,29 +365,16 @@ static struct shash_alg sha224 = {
367 .cra_blocksize = SHA224_BLOCK_SIZE, 365 .cra_blocksize = SHA224_BLOCK_SIZE,
368 .cra_module = THIS_MODULE, 366 .cra_module = THIS_MODULE,
369 } 367 }
370}; 368} };
371 369
372static int __init sha256_generic_mod_init(void) 370static int __init sha256_generic_mod_init(void)
373{ 371{
374 int ret = 0; 372 return crypto_register_shashes(sha256_algs, ARRAY_SIZE(sha256_algs));
375
376 ret = crypto_register_shash(&sha224);
377
378 if (ret < 0)
379 return ret;
380
381 ret = crypto_register_shash(&sha256);
382
383 if (ret < 0)
384 crypto_unregister_shash(&sha224);
385
386 return ret;
387} 373}
388 374
389static void __exit sha256_generic_mod_fini(void) 375static void __exit sha256_generic_mod_fini(void)
390{ 376{
391 crypto_unregister_shash(&sha224); 377 crypto_unregister_shashes(sha256_algs, ARRAY_SIZE(sha256_algs));
392 crypto_unregister_shash(&sha256);
393} 378}
394 379
395module_init(sha256_generic_mod_init); 380module_init(sha256_generic_mod_init);
diff --git a/crypto/sha512_generic.c b/crypto/sha512_generic.c
index dd30f40af9f..71fcf361102 100644
--- a/crypto/sha512_generic.c
+++ b/crypto/sha512_generic.c
@@ -242,7 +242,7 @@ static int sha384_final(struct shash_desc *desc, u8 *hash)
242 return 0; 242 return 0;
243} 243}
244 244
245static struct shash_alg sha512 = { 245static struct shash_alg sha512_algs[2] = { {
246 .digestsize = SHA512_DIGEST_SIZE, 246 .digestsize = SHA512_DIGEST_SIZE,
247 .init = sha512_init, 247 .init = sha512_init,
248 .update = sha512_update, 248 .update = sha512_update,
@@ -254,9 +254,7 @@ static struct shash_alg sha512 = {
254 .cra_blocksize = SHA512_BLOCK_SIZE, 254 .cra_blocksize = SHA512_BLOCK_SIZE,
255 .cra_module = THIS_MODULE, 255 .cra_module = THIS_MODULE,
256 } 256 }
257}; 257}, {
258
259static struct shash_alg sha384 = {
260 .digestsize = SHA384_DIGEST_SIZE, 258 .digestsize = SHA384_DIGEST_SIZE,
261 .init = sha384_init, 259 .init = sha384_init,
262 .update = sha512_update, 260 .update = sha512_update,
@@ -268,24 +266,16 @@ static struct shash_alg sha384 = {
268 .cra_blocksize = SHA384_BLOCK_SIZE, 266 .cra_blocksize = SHA384_BLOCK_SIZE,
269 .cra_module = THIS_MODULE, 267 .cra_module = THIS_MODULE,
270 } 268 }
271}; 269} };
272 270
273static int __init sha512_generic_mod_init(void) 271static int __init sha512_generic_mod_init(void)
274{ 272{
275 int ret = 0; 273 return crypto_register_shashes(sha512_algs, ARRAY_SIZE(sha512_algs));
276
277 if ((ret = crypto_register_shash(&sha384)) < 0)
278 goto out;
279 if ((ret = crypto_register_shash(&sha512)) < 0)
280 crypto_unregister_shash(&sha384);
281out:
282 return ret;
283} 274}
284 275
285static void __exit sha512_generic_mod_fini(void) 276static void __exit sha512_generic_mod_fini(void)
286{ 277{
287 crypto_unregister_shash(&sha384); 278 crypto_unregister_shashes(sha512_algs, ARRAY_SIZE(sha512_algs));
288 crypto_unregister_shash(&sha512);
289} 279}
290 280
291module_init(sha512_generic_mod_init); 281module_init(sha512_generic_mod_init);
diff --git a/crypto/shash.c b/crypto/shash.c
index 32067f47e6c..f426330f101 100644
--- a/crypto/shash.c
+++ b/crypto/shash.c
@@ -629,6 +629,42 @@ int crypto_unregister_shash(struct shash_alg *alg)
629} 629}
630EXPORT_SYMBOL_GPL(crypto_unregister_shash); 630EXPORT_SYMBOL_GPL(crypto_unregister_shash);
631 631
632int crypto_register_shashes(struct shash_alg *algs, int count)
633{
634 int i, ret;
635
636 for (i = 0; i < count; i++) {
637 ret = crypto_register_shash(&algs[i]);
638 if (ret)
639 goto err;
640 }
641
642 return 0;
643
644err:
645 for (--i; i >= 0; --i)
646 crypto_unregister_shash(&algs[i]);
647
648 return ret;
649}
650EXPORT_SYMBOL_GPL(crypto_register_shashes);
651
652int crypto_unregister_shashes(struct shash_alg *algs, int count)
653{
654 int i, ret;
655
656 for (i = count - 1; i >= 0; --i) {
657 ret = crypto_unregister_shash(&algs[i]);
658 if (ret)
659 pr_err("Failed to unregister %s %s: %d\n",
660 algs[i].base.cra_driver_name,
661 algs[i].base.cra_name, ret);
662 }
663
664 return 0;
665}
666EXPORT_SYMBOL_GPL(crypto_unregister_shashes);
667
632int shash_register_instance(struct crypto_template *tmpl, 668int shash_register_instance(struct crypto_template *tmpl,
633 struct shash_instance *inst) 669 struct shash_instance *inst)
634{ 670{
diff --git a/crypto/tcrypt.c b/crypto/tcrypt.c
index 5cf2ccb1540..e87fa60f583 100644
--- a/crypto/tcrypt.c
+++ b/crypto/tcrypt.c
@@ -97,7 +97,6 @@ static int test_cipher_cycles(struct blkcipher_desc *desc, int enc,
97 int ret = 0; 97 int ret = 0;
98 int i; 98 int i;
99 99
100 local_bh_disable();
101 local_irq_disable(); 100 local_irq_disable();
102 101
103 /* Warm-up run. */ 102 /* Warm-up run. */
@@ -130,7 +129,6 @@ static int test_cipher_cycles(struct blkcipher_desc *desc, int enc,
130 129
131out: 130out:
132 local_irq_enable(); 131 local_irq_enable();
133 local_bh_enable();
134 132
135 if (ret == 0) 133 if (ret == 0)
136 printk("1 operation in %lu cycles (%d bytes)\n", 134 printk("1 operation in %lu cycles (%d bytes)\n",
@@ -300,7 +298,6 @@ static int test_hash_cycles_digest(struct hash_desc *desc,
300 int i; 298 int i;
301 int ret; 299 int ret;
302 300
303 local_bh_disable();
304 local_irq_disable(); 301 local_irq_disable();
305 302
306 /* Warm-up run. */ 303 /* Warm-up run. */
@@ -327,7 +324,6 @@ static int test_hash_cycles_digest(struct hash_desc *desc,
327 324
328out: 325out:
329 local_irq_enable(); 326 local_irq_enable();
330 local_bh_enable();
331 327
332 if (ret) 328 if (ret)
333 return ret; 329 return ret;
@@ -348,7 +344,6 @@ static int test_hash_cycles(struct hash_desc *desc, struct scatterlist *sg,
348 if (plen == blen) 344 if (plen == blen)
349 return test_hash_cycles_digest(desc, sg, blen, out); 345 return test_hash_cycles_digest(desc, sg, blen, out);
350 346
351 local_bh_disable();
352 local_irq_disable(); 347 local_irq_disable();
353 348
354 /* Warm-up run. */ 349 /* Warm-up run. */
@@ -391,7 +386,6 @@ static int test_hash_cycles(struct hash_desc *desc, struct scatterlist *sg,
391 386
392out: 387out:
393 local_irq_enable(); 388 local_irq_enable();
394 local_bh_enable();
395 389
396 if (ret) 390 if (ret)
397 return ret; 391 return ret;
@@ -1037,10 +1031,16 @@ static int do_test(int m)
1037 1031
1038 case 14: 1032 case 14:
1039 ret += tcrypt_test("ecb(cast5)"); 1033 ret += tcrypt_test("ecb(cast5)");
1034 ret += tcrypt_test("cbc(cast5)");
1035 ret += tcrypt_test("ctr(cast5)");
1040 break; 1036 break;
1041 1037
1042 case 15: 1038 case 15:
1043 ret += tcrypt_test("ecb(cast6)"); 1039 ret += tcrypt_test("ecb(cast6)");
1040 ret += tcrypt_test("cbc(cast6)");
1041 ret += tcrypt_test("ctr(cast6)");
1042 ret += tcrypt_test("lrw(cast6)");
1043 ret += tcrypt_test("xts(cast6)");
1044 break; 1044 break;
1045 1045
1046 case 16: 1046 case 16:
@@ -1112,6 +1112,9 @@ static int do_test(int m)
1112 case 32: 1112 case 32:
1113 ret += tcrypt_test("ecb(camellia)"); 1113 ret += tcrypt_test("ecb(camellia)");
1114 ret += tcrypt_test("cbc(camellia)"); 1114 ret += tcrypt_test("cbc(camellia)");
1115 ret += tcrypt_test("ctr(camellia)");
1116 ret += tcrypt_test("lrw(camellia)");
1117 ret += tcrypt_test("xts(camellia)");
1115 break; 1118 break;
1116 case 33: 1119 case 33:
1117 ret += tcrypt_test("sha224"); 1120 ret += tcrypt_test("sha224");
@@ -1165,6 +1168,10 @@ static int do_test(int m)
1165 ret += tcrypt_test("rfc4309(ccm(aes))"); 1168 ret += tcrypt_test("rfc4309(ccm(aes))");
1166 break; 1169 break;
1167 1170
1171 case 46:
1172 ret += tcrypt_test("ghash");
1173 break;
1174
1168 case 100: 1175 case 100:
1169 ret += tcrypt_test("hmac(md5)"); 1176 ret += tcrypt_test("hmac(md5)");
1170 break; 1177 break;
@@ -1359,6 +1366,44 @@ static int do_test(int m)
1359 speed_template_8); 1366 speed_template_8);
1360 break; 1367 break;
1361 1368
1369 case 209:
1370 test_cipher_speed("ecb(cast5)", ENCRYPT, sec, NULL, 0,
1371 speed_template_8_16);
1372 test_cipher_speed("ecb(cast5)", DECRYPT, sec, NULL, 0,
1373 speed_template_8_16);
1374 test_cipher_speed("cbc(cast5)", ENCRYPT, sec, NULL, 0,
1375 speed_template_8_16);
1376 test_cipher_speed("cbc(cast5)", DECRYPT, sec, NULL, 0,
1377 speed_template_8_16);
1378 test_cipher_speed("ctr(cast5)", ENCRYPT, sec, NULL, 0,
1379 speed_template_8_16);
1380 test_cipher_speed("ctr(cast5)", DECRYPT, sec, NULL, 0,
1381 speed_template_8_16);
1382 break;
1383
1384 case 210:
1385 test_cipher_speed("ecb(cast6)", ENCRYPT, sec, NULL, 0,
1386 speed_template_16_32);
1387 test_cipher_speed("ecb(cast6)", DECRYPT, sec, NULL, 0,
1388 speed_template_16_32);
1389 test_cipher_speed("cbc(cast6)", ENCRYPT, sec, NULL, 0,
1390 speed_template_16_32);
1391 test_cipher_speed("cbc(cast6)", DECRYPT, sec, NULL, 0,
1392 speed_template_16_32);
1393 test_cipher_speed("ctr(cast6)", ENCRYPT, sec, NULL, 0,
1394 speed_template_16_32);
1395 test_cipher_speed("ctr(cast6)", DECRYPT, sec, NULL, 0,
1396 speed_template_16_32);
1397 test_cipher_speed("lrw(cast6)", ENCRYPT, sec, NULL, 0,
1398 speed_template_32_48);
1399 test_cipher_speed("lrw(cast6)", DECRYPT, sec, NULL, 0,
1400 speed_template_32_48);
1401 test_cipher_speed("xts(cast6)", ENCRYPT, sec, NULL, 0,
1402 speed_template_32_64);
1403 test_cipher_speed("xts(cast6)", DECRYPT, sec, NULL, 0,
1404 speed_template_32_64);
1405 break;
1406
1362 case 300: 1407 case 300:
1363 /* fall through */ 1408 /* fall through */
1364 1409
@@ -1639,6 +1684,44 @@ static int do_test(int m)
1639 speed_template_8); 1684 speed_template_8);
1640 break; 1685 break;
1641 1686
1687 case 506:
1688 test_acipher_speed("ecb(cast5)", ENCRYPT, sec, NULL, 0,
1689 speed_template_8_16);
1690 test_acipher_speed("ecb(cast5)", DECRYPT, sec, NULL, 0,
1691 speed_template_8_16);
1692 test_acipher_speed("cbc(cast5)", ENCRYPT, sec, NULL, 0,
1693 speed_template_8_16);
1694 test_acipher_speed("cbc(cast5)", DECRYPT, sec, NULL, 0,
1695 speed_template_8_16);
1696 test_acipher_speed("ctr(cast5)", ENCRYPT, sec, NULL, 0,
1697 speed_template_8_16);
1698 test_acipher_speed("ctr(cast5)", DECRYPT, sec, NULL, 0,
1699 speed_template_8_16);
1700 break;
1701
1702 case 507:
1703 test_acipher_speed("ecb(cast6)", ENCRYPT, sec, NULL, 0,
1704 speed_template_16_32);
1705 test_acipher_speed("ecb(cast6)", DECRYPT, sec, NULL, 0,
1706 speed_template_16_32);
1707 test_acipher_speed("cbc(cast6)", ENCRYPT, sec, NULL, 0,
1708 speed_template_16_32);
1709 test_acipher_speed("cbc(cast6)", DECRYPT, sec, NULL, 0,
1710 speed_template_16_32);
1711 test_acipher_speed("ctr(cast6)", ENCRYPT, sec, NULL, 0,
1712 speed_template_16_32);
1713 test_acipher_speed("ctr(cast6)", DECRYPT, sec, NULL, 0,
1714 speed_template_16_32);
1715 test_acipher_speed("lrw(cast6)", ENCRYPT, sec, NULL, 0,
1716 speed_template_32_48);
1717 test_acipher_speed("lrw(cast6)", DECRYPT, sec, NULL, 0,
1718 speed_template_32_48);
1719 test_acipher_speed("xts(cast6)", ENCRYPT, sec, NULL, 0,
1720 speed_template_32_64);
1721 test_acipher_speed("xts(cast6)", DECRYPT, sec, NULL, 0,
1722 speed_template_32_64);
1723 break;
1724
1642 case 1000: 1725 case 1000:
1643 test_available(); 1726 test_available();
1644 break; 1727 break;
diff --git a/crypto/tcrypt.h b/crypto/tcrypt.h
index 5be1fc8c1ab..cd2068524f3 100644
--- a/crypto/tcrypt.h
+++ b/crypto/tcrypt.h
@@ -47,6 +47,7 @@ static struct cipher_speed_template des3_speed_template[] = {
47 */ 47 */
48static u8 speed_template_8[] = {8, 0}; 48static u8 speed_template_8[] = {8, 0};
49static u8 speed_template_24[] = {24, 0}; 49static u8 speed_template_24[] = {24, 0};
50static u8 speed_template_8_16[] = {8, 16, 0};
50static u8 speed_template_8_32[] = {8, 32, 0}; 51static u8 speed_template_8_32[] = {8, 32, 0};
51static u8 speed_template_16_32[] = {16, 32, 0}; 52static u8 speed_template_16_32[] = {16, 32, 0};
52static u8 speed_template_16_24_32[] = {16, 24, 32, 0}; 53static u8 speed_template_16_24_32[] = {16, 24, 32, 0};
diff --git a/crypto/tea.c b/crypto/tea.c
index 412bc74f817..0a572323ee4 100644
--- a/crypto/tea.c
+++ b/crypto/tea.c
@@ -219,84 +219,55 @@ static void xeta_decrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src)
219 out[1] = cpu_to_le32(z); 219 out[1] = cpu_to_le32(z);
220} 220}
221 221
222static struct crypto_alg tea_alg = { 222static struct crypto_alg tea_algs[3] = { {
223 .cra_name = "tea", 223 .cra_name = "tea",
224 .cra_flags = CRYPTO_ALG_TYPE_CIPHER, 224 .cra_flags = CRYPTO_ALG_TYPE_CIPHER,
225 .cra_blocksize = TEA_BLOCK_SIZE, 225 .cra_blocksize = TEA_BLOCK_SIZE,
226 .cra_ctxsize = sizeof (struct tea_ctx), 226 .cra_ctxsize = sizeof (struct tea_ctx),
227 .cra_alignmask = 3, 227 .cra_alignmask = 3,
228 .cra_module = THIS_MODULE, 228 .cra_module = THIS_MODULE,
229 .cra_list = LIST_HEAD_INIT(tea_alg.cra_list),
230 .cra_u = { .cipher = { 229 .cra_u = { .cipher = {
231 .cia_min_keysize = TEA_KEY_SIZE, 230 .cia_min_keysize = TEA_KEY_SIZE,
232 .cia_max_keysize = TEA_KEY_SIZE, 231 .cia_max_keysize = TEA_KEY_SIZE,
233 .cia_setkey = tea_setkey, 232 .cia_setkey = tea_setkey,
234 .cia_encrypt = tea_encrypt, 233 .cia_encrypt = tea_encrypt,
235 .cia_decrypt = tea_decrypt } } 234 .cia_decrypt = tea_decrypt } }
236}; 235}, {
237
238static struct crypto_alg xtea_alg = {
239 .cra_name = "xtea", 236 .cra_name = "xtea",
240 .cra_flags = CRYPTO_ALG_TYPE_CIPHER, 237 .cra_flags = CRYPTO_ALG_TYPE_CIPHER,
241 .cra_blocksize = XTEA_BLOCK_SIZE, 238 .cra_blocksize = XTEA_BLOCK_SIZE,
242 .cra_ctxsize = sizeof (struct xtea_ctx), 239 .cra_ctxsize = sizeof (struct xtea_ctx),
243 .cra_alignmask = 3, 240 .cra_alignmask = 3,
244 .cra_module = THIS_MODULE, 241 .cra_module = THIS_MODULE,
245 .cra_list = LIST_HEAD_INIT(xtea_alg.cra_list),
246 .cra_u = { .cipher = { 242 .cra_u = { .cipher = {
247 .cia_min_keysize = XTEA_KEY_SIZE, 243 .cia_min_keysize = XTEA_KEY_SIZE,
248 .cia_max_keysize = XTEA_KEY_SIZE, 244 .cia_max_keysize = XTEA_KEY_SIZE,
249 .cia_setkey = xtea_setkey, 245 .cia_setkey = xtea_setkey,
250 .cia_encrypt = xtea_encrypt, 246 .cia_encrypt = xtea_encrypt,
251 .cia_decrypt = xtea_decrypt } } 247 .cia_decrypt = xtea_decrypt } }
252}; 248}, {
253
254static struct crypto_alg xeta_alg = {
255 .cra_name = "xeta", 249 .cra_name = "xeta",
256 .cra_flags = CRYPTO_ALG_TYPE_CIPHER, 250 .cra_flags = CRYPTO_ALG_TYPE_CIPHER,
257 .cra_blocksize = XTEA_BLOCK_SIZE, 251 .cra_blocksize = XTEA_BLOCK_SIZE,
258 .cra_ctxsize = sizeof (struct xtea_ctx), 252 .cra_ctxsize = sizeof (struct xtea_ctx),
259 .cra_alignmask = 3, 253 .cra_alignmask = 3,
260 .cra_module = THIS_MODULE, 254 .cra_module = THIS_MODULE,
261 .cra_list = LIST_HEAD_INIT(xtea_alg.cra_list),
262 .cra_u = { .cipher = { 255 .cra_u = { .cipher = {
263 .cia_min_keysize = XTEA_KEY_SIZE, 256 .cia_min_keysize = XTEA_KEY_SIZE,
264 .cia_max_keysize = XTEA_KEY_SIZE, 257 .cia_max_keysize = XTEA_KEY_SIZE,
265 .cia_setkey = xtea_setkey, 258 .cia_setkey = xtea_setkey,
266 .cia_encrypt = xeta_encrypt, 259 .cia_encrypt = xeta_encrypt,
267 .cia_decrypt = xeta_decrypt } } 260 .cia_decrypt = xeta_decrypt } }
268}; 261} };
269 262
270static int __init tea_mod_init(void) 263static int __init tea_mod_init(void)
271{ 264{
272 int ret = 0; 265 return crypto_register_algs(tea_algs, ARRAY_SIZE(tea_algs));
273
274 ret = crypto_register_alg(&tea_alg);
275 if (ret < 0)
276 goto out;
277
278 ret = crypto_register_alg(&xtea_alg);
279 if (ret < 0) {
280 crypto_unregister_alg(&tea_alg);
281 goto out;
282 }
283
284 ret = crypto_register_alg(&xeta_alg);
285 if (ret < 0) {
286 crypto_unregister_alg(&tea_alg);
287 crypto_unregister_alg(&xtea_alg);
288 goto out;
289 }
290
291out:
292 return ret;
293} 266}
294 267
295static void __exit tea_mod_fini(void) 268static void __exit tea_mod_fini(void)
296{ 269{
297 crypto_unregister_alg(&tea_alg); 270 crypto_unregister_algs(tea_algs, ARRAY_SIZE(tea_algs));
298 crypto_unregister_alg(&xtea_alg);
299 crypto_unregister_alg(&xeta_alg);
300} 271}
301 272
302MODULE_ALIAS("xtea"); 273MODULE_ALIAS("xtea");
diff --git a/crypto/testmgr.c b/crypto/testmgr.c
index a2ca7431760..941d75cd1f7 100644
--- a/crypto/testmgr.c
+++ b/crypto/testmgr.c
@@ -358,8 +358,9 @@ out_nobuf:
358 return ret; 358 return ret;
359} 359}
360 360
361static int test_aead(struct crypto_aead *tfm, int enc, 361static int __test_aead(struct crypto_aead *tfm, int enc,
362 struct aead_testvec *template, unsigned int tcount) 362 struct aead_testvec *template, unsigned int tcount,
363 const bool diff_dst)
363{ 364{
364 const char *algo = crypto_tfm_alg_driver_name(crypto_aead_tfm(tfm)); 365 const char *algo = crypto_tfm_alg_driver_name(crypto_aead_tfm(tfm));
365 unsigned int i, j, k, n, temp; 366 unsigned int i, j, k, n, temp;
@@ -367,15 +368,18 @@ static int test_aead(struct crypto_aead *tfm, int enc,
367 char *q; 368 char *q;
368 char *key; 369 char *key;
369 struct aead_request *req; 370 struct aead_request *req;
370 struct scatterlist sg[8]; 371 struct scatterlist *sg;
371 struct scatterlist asg[8]; 372 struct scatterlist *asg;
372 const char *e; 373 struct scatterlist *sgout;
374 const char *e, *d;
373 struct tcrypt_result result; 375 struct tcrypt_result result;
374 unsigned int authsize; 376 unsigned int authsize;
375 void *input; 377 void *input;
378 void *output;
376 void *assoc; 379 void *assoc;
377 char iv[MAX_IVLEN]; 380 char iv[MAX_IVLEN];
378 char *xbuf[XBUFSIZE]; 381 char *xbuf[XBUFSIZE];
382 char *xoutbuf[XBUFSIZE];
379 char *axbuf[XBUFSIZE]; 383 char *axbuf[XBUFSIZE];
380 384
381 if (testmgr_alloc_buf(xbuf)) 385 if (testmgr_alloc_buf(xbuf))
@@ -383,6 +387,21 @@ static int test_aead(struct crypto_aead *tfm, int enc,
383 if (testmgr_alloc_buf(axbuf)) 387 if (testmgr_alloc_buf(axbuf))
384 goto out_noaxbuf; 388 goto out_noaxbuf;
385 389
390 if (diff_dst && testmgr_alloc_buf(xoutbuf))
391 goto out_nooutbuf;
392
393 /* avoid "the frame size is larger than 1024 bytes" compiler warning */
394 sg = kmalloc(sizeof(*sg) * 8 * (diff_dst ? 3 : 2), GFP_KERNEL);
395 if (!sg)
396 goto out_nosg;
397 asg = &sg[8];
398 sgout = &asg[8];
399
400 if (diff_dst)
401 d = "-ddst";
402 else
403 d = "";
404
386 if (enc == ENCRYPT) 405 if (enc == ENCRYPT)
387 e = "encryption"; 406 e = "encryption";
388 else 407 else
@@ -392,8 +411,8 @@ static int test_aead(struct crypto_aead *tfm, int enc,
392 411
393 req = aead_request_alloc(tfm, GFP_KERNEL); 412 req = aead_request_alloc(tfm, GFP_KERNEL);
394 if (!req) { 413 if (!req) {
395 printk(KERN_ERR "alg: aead: Failed to allocate request for " 414 pr_err("alg: aead%s: Failed to allocate request for %s\n",
396 "%s\n", algo); 415 d, algo);
397 goto out; 416 goto out;
398 } 417 }
399 418
@@ -432,9 +451,8 @@ static int test_aead(struct crypto_aead *tfm, int enc,
432 ret = crypto_aead_setkey(tfm, key, 451 ret = crypto_aead_setkey(tfm, key,
433 template[i].klen); 452 template[i].klen);
434 if (!ret == template[i].fail) { 453 if (!ret == template[i].fail) {
435 printk(KERN_ERR "alg: aead: setkey failed on " 454 pr_err("alg: aead%s: setkey failed on test %d for %s: flags=%x\n",
436 "test %d for %s: flags=%x\n", j, algo, 455 d, j, algo, crypto_aead_get_flags(tfm));
437 crypto_aead_get_flags(tfm));
438 goto out; 456 goto out;
439 } else if (ret) 457 } else if (ret)
440 continue; 458 continue;
@@ -442,18 +460,26 @@ static int test_aead(struct crypto_aead *tfm, int enc,
442 authsize = abs(template[i].rlen - template[i].ilen); 460 authsize = abs(template[i].rlen - template[i].ilen);
443 ret = crypto_aead_setauthsize(tfm, authsize); 461 ret = crypto_aead_setauthsize(tfm, authsize);
444 if (ret) { 462 if (ret) {
445 printk(KERN_ERR "alg: aead: Failed to set " 463 pr_err("alg: aead%s: Failed to set authsize to %u on test %d for %s\n",
446 "authsize to %u on test %d for %s\n", 464 d, authsize, j, algo);
447 authsize, j, algo);
448 goto out; 465 goto out;
449 } 466 }
450 467
451 sg_init_one(&sg[0], input, 468 sg_init_one(&sg[0], input,
452 template[i].ilen + (enc ? authsize : 0)); 469 template[i].ilen + (enc ? authsize : 0));
453 470
471 if (diff_dst) {
472 output = xoutbuf[0];
473 sg_init_one(&sgout[0], output,
474 template[i].ilen +
475 (enc ? authsize : 0));
476 } else {
477 output = input;
478 }
479
454 sg_init_one(&asg[0], assoc, template[i].alen); 480 sg_init_one(&asg[0], assoc, template[i].alen);
455 481
456 aead_request_set_crypt(req, sg, sg, 482 aead_request_set_crypt(req, sg, (diff_dst) ? sgout : sg,
457 template[i].ilen, iv); 483 template[i].ilen, iv);
458 484
459 aead_request_set_assoc(req, asg, template[i].alen); 485 aead_request_set_assoc(req, asg, template[i].alen);
@@ -466,10 +492,8 @@ static int test_aead(struct crypto_aead *tfm, int enc,
466 case 0: 492 case 0:
467 if (template[i].novrfy) { 493 if (template[i].novrfy) {
468 /* verification was supposed to fail */ 494 /* verification was supposed to fail */
469 printk(KERN_ERR "alg: aead: %s failed " 495 pr_err("alg: aead%s: %s failed on test %d for %s: ret was 0, expected -EBADMSG\n",
470 "on test %d for %s: ret was 0, " 496 d, e, j, algo);
471 "expected -EBADMSG\n",
472 e, j, algo);
473 /* so really, we got a bad message */ 497 /* so really, we got a bad message */
474 ret = -EBADMSG; 498 ret = -EBADMSG;
475 goto out; 499 goto out;
@@ -489,15 +513,15 @@ static int test_aead(struct crypto_aead *tfm, int enc,
489 continue; 513 continue;
490 /* fall through */ 514 /* fall through */
491 default: 515 default:
492 printk(KERN_ERR "alg: aead: %s failed on test " 516 pr_err("alg: aead%s: %s failed on test %d for %s: ret=%d\n",
493 "%d for %s: ret=%d\n", e, j, algo, -ret); 517 d, e, j, algo, -ret);
494 goto out; 518 goto out;
495 } 519 }
496 520
497 q = input; 521 q = output;
498 if (memcmp(q, template[i].result, template[i].rlen)) { 522 if (memcmp(q, template[i].result, template[i].rlen)) {
499 printk(KERN_ERR "alg: aead: Test %d failed on " 523 pr_err("alg: aead%s: Test %d failed on %s for %s\n",
500 "%s for %s\n", j, e, algo); 524 d, j, e, algo);
501 hexdump(q, template[i].rlen); 525 hexdump(q, template[i].rlen);
502 ret = -EINVAL; 526 ret = -EINVAL;
503 goto out; 527 goto out;
@@ -522,9 +546,8 @@ static int test_aead(struct crypto_aead *tfm, int enc,
522 546
523 ret = crypto_aead_setkey(tfm, key, template[i].klen); 547 ret = crypto_aead_setkey(tfm, key, template[i].klen);
524 if (!ret == template[i].fail) { 548 if (!ret == template[i].fail) {
525 printk(KERN_ERR "alg: aead: setkey failed on " 549 pr_err("alg: aead%s: setkey failed on chunk test %d for %s: flags=%x\n",
526 "chunk test %d for %s: flags=%x\n", j, 550 d, j, algo, crypto_aead_get_flags(tfm));
527 algo, crypto_aead_get_flags(tfm));
528 goto out; 551 goto out;
529 } else if (ret) 552 } else if (ret)
530 continue; 553 continue;
@@ -533,6 +556,8 @@ static int test_aead(struct crypto_aead *tfm, int enc,
533 556
534 ret = -EINVAL; 557 ret = -EINVAL;
535 sg_init_table(sg, template[i].np); 558 sg_init_table(sg, template[i].np);
559 if (diff_dst)
560 sg_init_table(sgout, template[i].np);
536 for (k = 0, temp = 0; k < template[i].np; k++) { 561 for (k = 0, temp = 0; k < template[i].np; k++) {
537 if (WARN_ON(offset_in_page(IDX[k]) + 562 if (WARN_ON(offset_in_page(IDX[k]) +
538 template[i].tap[k] > PAGE_SIZE)) 563 template[i].tap[k] > PAGE_SIZE))
@@ -551,14 +576,26 @@ static int test_aead(struct crypto_aead *tfm, int enc,
551 q[n] = 0; 576 q[n] = 0;
552 577
553 sg_set_buf(&sg[k], q, template[i].tap[k]); 578 sg_set_buf(&sg[k], q, template[i].tap[k]);
579
580 if (diff_dst) {
581 q = xoutbuf[IDX[k] >> PAGE_SHIFT] +
582 offset_in_page(IDX[k]);
583
584 memset(q, 0, template[i].tap[k]);
585 if (offset_in_page(q) + n < PAGE_SIZE)
586 q[n] = 0;
587
588 sg_set_buf(&sgout[k], q,
589 template[i].tap[k]);
590 }
591
554 temp += template[i].tap[k]; 592 temp += template[i].tap[k];
555 } 593 }
556 594
557 ret = crypto_aead_setauthsize(tfm, authsize); 595 ret = crypto_aead_setauthsize(tfm, authsize);
558 if (ret) { 596 if (ret) {
559 printk(KERN_ERR "alg: aead: Failed to set " 597 pr_err("alg: aead%s: Failed to set authsize to %u on chunk test %d for %s\n",
560 "authsize to %u on chunk test %d for " 598 d, authsize, j, algo);
561 "%s\n", authsize, j, algo);
562 goto out; 599 goto out;
563 } 600 }
564 601
@@ -571,6 +608,9 @@ static int test_aead(struct crypto_aead *tfm, int enc,
571 } 608 }
572 609
573 sg[k - 1].length += authsize; 610 sg[k - 1].length += authsize;
611
612 if (diff_dst)
613 sgout[k - 1].length += authsize;
574 } 614 }
575 615
576 sg_init_table(asg, template[i].anp); 616 sg_init_table(asg, template[i].anp);
@@ -588,7 +628,7 @@ static int test_aead(struct crypto_aead *tfm, int enc,
588 temp += template[i].atap[k]; 628 temp += template[i].atap[k];
589 } 629 }
590 630
591 aead_request_set_crypt(req, sg, sg, 631 aead_request_set_crypt(req, sg, (diff_dst) ? sgout : sg,
592 template[i].ilen, 632 template[i].ilen,
593 iv); 633 iv);
594 634
@@ -602,10 +642,8 @@ static int test_aead(struct crypto_aead *tfm, int enc,
602 case 0: 642 case 0:
603 if (template[i].novrfy) { 643 if (template[i].novrfy) {
604 /* verification was supposed to fail */ 644 /* verification was supposed to fail */
605 printk(KERN_ERR "alg: aead: %s failed " 645 pr_err("alg: aead%s: %s failed on chunk test %d for %s: ret was 0, expected -EBADMSG\n",
606 "on chunk test %d for %s: ret " 646 d, e, j, algo);
607 "was 0, expected -EBADMSG\n",
608 e, j, algo);
609 /* so really, we got a bad message */ 647 /* so really, we got a bad message */
610 ret = -EBADMSG; 648 ret = -EBADMSG;
611 goto out; 649 goto out;
@@ -625,32 +663,35 @@ static int test_aead(struct crypto_aead *tfm, int enc,
625 continue; 663 continue;
626 /* fall through */ 664 /* fall through */
627 default: 665 default:
628 printk(KERN_ERR "alg: aead: %s failed on " 666 pr_err("alg: aead%s: %s failed on chunk test %d for %s: ret=%d\n",
629 "chunk test %d for %s: ret=%d\n", e, j, 667 d, e, j, algo, -ret);
630 algo, -ret);
631 goto out; 668 goto out;
632 } 669 }
633 670
634 ret = -EINVAL; 671 ret = -EINVAL;
635 for (k = 0, temp = 0; k < template[i].np; k++) { 672 for (k = 0, temp = 0; k < template[i].np; k++) {
636 q = xbuf[IDX[k] >> PAGE_SHIFT] + 673 if (diff_dst)
637 offset_in_page(IDX[k]); 674 q = xoutbuf[IDX[k] >> PAGE_SHIFT] +
675 offset_in_page(IDX[k]);
676 else
677 q = xbuf[IDX[k] >> PAGE_SHIFT] +
678 offset_in_page(IDX[k]);
638 679
639 n = template[i].tap[k]; 680 n = template[i].tap[k];
640 if (k == template[i].np - 1) 681 if (k == template[i].np - 1)
641 n += enc ? authsize : -authsize; 682 n += enc ? authsize : -authsize;
642 683
643 if (memcmp(q, template[i].result + temp, n)) { 684 if (memcmp(q, template[i].result + temp, n)) {
644 printk(KERN_ERR "alg: aead: Chunk " 685 pr_err("alg: aead%s: Chunk test %d failed on %s at page %u for %s\n",
645 "test %d failed on %s at page " 686 d, j, e, k, algo);
646 "%u for %s\n", j, e, k, algo);
647 hexdump(q, n); 687 hexdump(q, n);
648 goto out; 688 goto out;
649 } 689 }
650 690
651 q += n; 691 q += n;
652 if (k == template[i].np - 1 && !enc) { 692 if (k == template[i].np - 1 && !enc) {
653 if (memcmp(q, template[i].input + 693 if (!diff_dst &&
694 memcmp(q, template[i].input +
654 temp + n, authsize)) 695 temp + n, authsize))
655 n = authsize; 696 n = authsize;
656 else 697 else
@@ -661,11 +702,8 @@ static int test_aead(struct crypto_aead *tfm, int enc,
661 ; 702 ;
662 } 703 }
663 if (n) { 704 if (n) {
664 printk(KERN_ERR "alg: aead: Result " 705 pr_err("alg: aead%s: Result buffer corruption in chunk test %d on %s at page %u for %s: %u bytes:\n",
665 "buffer corruption in chunk " 706 d, j, e, k, algo, n);
666 "test %d on %s at page %u for "
667 "%s: %u bytes:\n", j, e, k,
668 algo, n);
669 hexdump(q, n); 707 hexdump(q, n);
670 goto out; 708 goto out;
671 } 709 }
@@ -679,6 +717,11 @@ static int test_aead(struct crypto_aead *tfm, int enc,
679 717
680out: 718out:
681 aead_request_free(req); 719 aead_request_free(req);
720 kfree(sg);
721out_nosg:
722 if (diff_dst)
723 testmgr_free_buf(xoutbuf);
724out_nooutbuf:
682 testmgr_free_buf(axbuf); 725 testmgr_free_buf(axbuf);
683out_noaxbuf: 726out_noaxbuf:
684 testmgr_free_buf(xbuf); 727 testmgr_free_buf(xbuf);
@@ -686,6 +729,20 @@ out_noxbuf:
686 return ret; 729 return ret;
687} 730}
688 731
732static int test_aead(struct crypto_aead *tfm, int enc,
733 struct aead_testvec *template, unsigned int tcount)
734{
735 int ret;
736
737 /* test 'dst == src' case */
738 ret = __test_aead(tfm, enc, template, tcount, false);
739 if (ret)
740 return ret;
741
742 /* test 'dst != src' case */
743 return __test_aead(tfm, enc, template, tcount, true);
744}
745
689static int test_cipher(struct crypto_cipher *tfm, int enc, 746static int test_cipher(struct crypto_cipher *tfm, int enc,
690 struct cipher_testvec *template, unsigned int tcount) 747 struct cipher_testvec *template, unsigned int tcount)
691{ 748{
@@ -761,8 +818,9 @@ out_nobuf:
761 return ret; 818 return ret;
762} 819}
763 820
764static int test_skcipher(struct crypto_ablkcipher *tfm, int enc, 821static int __test_skcipher(struct crypto_ablkcipher *tfm, int enc,
765 struct cipher_testvec *template, unsigned int tcount) 822 struct cipher_testvec *template, unsigned int tcount,
823 const bool diff_dst)
766{ 824{
767 const char *algo = 825 const char *algo =
768 crypto_tfm_alg_driver_name(crypto_ablkcipher_tfm(tfm)); 826 crypto_tfm_alg_driver_name(crypto_ablkcipher_tfm(tfm));
@@ -770,16 +828,26 @@ static int test_skcipher(struct crypto_ablkcipher *tfm, int enc,
770 char *q; 828 char *q;
771 struct ablkcipher_request *req; 829 struct ablkcipher_request *req;
772 struct scatterlist sg[8]; 830 struct scatterlist sg[8];
773 const char *e; 831 struct scatterlist sgout[8];
832 const char *e, *d;
774 struct tcrypt_result result; 833 struct tcrypt_result result;
775 void *data; 834 void *data;
776 char iv[MAX_IVLEN]; 835 char iv[MAX_IVLEN];
777 char *xbuf[XBUFSIZE]; 836 char *xbuf[XBUFSIZE];
837 char *xoutbuf[XBUFSIZE];
778 int ret = -ENOMEM; 838 int ret = -ENOMEM;
779 839
780 if (testmgr_alloc_buf(xbuf)) 840 if (testmgr_alloc_buf(xbuf))
781 goto out_nobuf; 841 goto out_nobuf;
782 842
843 if (diff_dst && testmgr_alloc_buf(xoutbuf))
844 goto out_nooutbuf;
845
846 if (diff_dst)
847 d = "-ddst";
848 else
849 d = "";
850
783 if (enc == ENCRYPT) 851 if (enc == ENCRYPT)
784 e = "encryption"; 852 e = "encryption";
785 else 853 else
@@ -789,8 +857,8 @@ static int test_skcipher(struct crypto_ablkcipher *tfm, int enc,
789 857
790 req = ablkcipher_request_alloc(tfm, GFP_KERNEL); 858 req = ablkcipher_request_alloc(tfm, GFP_KERNEL);
791 if (!req) { 859 if (!req) {
792 printk(KERN_ERR "alg: skcipher: Failed to allocate request " 860 pr_err("alg: skcipher%s: Failed to allocate request for %s\n",
793 "for %s\n", algo); 861 d, algo);
794 goto out; 862 goto out;
795 } 863 }
796 864
@@ -804,7 +872,7 @@ static int test_skcipher(struct crypto_ablkcipher *tfm, int enc,
804 else 872 else
805 memset(iv, 0, MAX_IVLEN); 873 memset(iv, 0, MAX_IVLEN);
806 874
807 if (!(template[i].np)) { 875 if (!(template[i].np) || (template[i].also_non_np)) {
808 j++; 876 j++;
809 877
810 ret = -EINVAL; 878 ret = -EINVAL;
@@ -822,16 +890,21 @@ static int test_skcipher(struct crypto_ablkcipher *tfm, int enc,
822 ret = crypto_ablkcipher_setkey(tfm, template[i].key, 890 ret = crypto_ablkcipher_setkey(tfm, template[i].key,
823 template[i].klen); 891 template[i].klen);
824 if (!ret == template[i].fail) { 892 if (!ret == template[i].fail) {
825 printk(KERN_ERR "alg: skcipher: setkey failed " 893 pr_err("alg: skcipher%s: setkey failed on test %d for %s: flags=%x\n",
826 "on test %d for %s: flags=%x\n", j, 894 d, j, algo,
827 algo, crypto_ablkcipher_get_flags(tfm)); 895 crypto_ablkcipher_get_flags(tfm));
828 goto out; 896 goto out;
829 } else if (ret) 897 } else if (ret)
830 continue; 898 continue;
831 899
832 sg_init_one(&sg[0], data, template[i].ilen); 900 sg_init_one(&sg[0], data, template[i].ilen);
901 if (diff_dst) {
902 data = xoutbuf[0];
903 sg_init_one(&sgout[0], data, template[i].ilen);
904 }
833 905
834 ablkcipher_request_set_crypt(req, sg, sg, 906 ablkcipher_request_set_crypt(req, sg,
907 (diff_dst) ? sgout : sg,
835 template[i].ilen, iv); 908 template[i].ilen, iv);
836 ret = enc ? 909 ret = enc ?
837 crypto_ablkcipher_encrypt(req) : 910 crypto_ablkcipher_encrypt(req) :
@@ -850,16 +923,15 @@ static int test_skcipher(struct crypto_ablkcipher *tfm, int enc,
850 } 923 }
851 /* fall through */ 924 /* fall through */
852 default: 925 default:
853 printk(KERN_ERR "alg: skcipher: %s failed on " 926 pr_err("alg: skcipher%s: %s failed on test %d for %s: ret=%d\n",
854 "test %d for %s: ret=%d\n", e, j, algo, 927 d, e, j, algo, -ret);
855 -ret);
856 goto out; 928 goto out;
857 } 929 }
858 930
859 q = data; 931 q = data;
860 if (memcmp(q, template[i].result, template[i].rlen)) { 932 if (memcmp(q, template[i].result, template[i].rlen)) {
861 printk(KERN_ERR "alg: skcipher: Test %d " 933 pr_err("alg: skcipher%s: Test %d failed on %s for %s\n",
862 "failed on %s for %s\n", j, e, algo); 934 d, j, e, algo);
863 hexdump(q, template[i].rlen); 935 hexdump(q, template[i].rlen);
864 ret = -EINVAL; 936 ret = -EINVAL;
865 goto out; 937 goto out;
@@ -886,9 +958,8 @@ static int test_skcipher(struct crypto_ablkcipher *tfm, int enc,
886 ret = crypto_ablkcipher_setkey(tfm, template[i].key, 958 ret = crypto_ablkcipher_setkey(tfm, template[i].key,
887 template[i].klen); 959 template[i].klen);
888 if (!ret == template[i].fail) { 960 if (!ret == template[i].fail) {
889 printk(KERN_ERR "alg: skcipher: setkey failed " 961 pr_err("alg: skcipher%s: setkey failed on chunk test %d for %s: flags=%x\n",
890 "on chunk test %d for %s: flags=%x\n", 962 d, j, algo,
891 j, algo,
892 crypto_ablkcipher_get_flags(tfm)); 963 crypto_ablkcipher_get_flags(tfm));
893 goto out; 964 goto out;
894 } else if (ret) 965 } else if (ret)
@@ -897,6 +968,8 @@ static int test_skcipher(struct crypto_ablkcipher *tfm, int enc,
897 temp = 0; 968 temp = 0;
898 ret = -EINVAL; 969 ret = -EINVAL;
899 sg_init_table(sg, template[i].np); 970 sg_init_table(sg, template[i].np);
971 if (diff_dst)
972 sg_init_table(sgout, template[i].np);
900 for (k = 0; k < template[i].np; k++) { 973 for (k = 0; k < template[i].np; k++) {
901 if (WARN_ON(offset_in_page(IDX[k]) + 974 if (WARN_ON(offset_in_page(IDX[k]) +
902 template[i].tap[k] > PAGE_SIZE)) 975 template[i].tap[k] > PAGE_SIZE))
@@ -913,11 +986,24 @@ static int test_skcipher(struct crypto_ablkcipher *tfm, int enc,
913 q[template[i].tap[k]] = 0; 986 q[template[i].tap[k]] = 0;
914 987
915 sg_set_buf(&sg[k], q, template[i].tap[k]); 988 sg_set_buf(&sg[k], q, template[i].tap[k]);
989 if (diff_dst) {
990 q = xoutbuf[IDX[k] >> PAGE_SHIFT] +
991 offset_in_page(IDX[k]);
992
993 sg_set_buf(&sgout[k], q,
994 template[i].tap[k]);
995
996 memset(q, 0, template[i].tap[k]);
997 if (offset_in_page(q) +
998 template[i].tap[k] < PAGE_SIZE)
999 q[template[i].tap[k]] = 0;
1000 }
916 1001
917 temp += template[i].tap[k]; 1002 temp += template[i].tap[k];
918 } 1003 }
919 1004
920 ablkcipher_request_set_crypt(req, sg, sg, 1005 ablkcipher_request_set_crypt(req, sg,
1006 (diff_dst) ? sgout : sg,
921 template[i].ilen, iv); 1007 template[i].ilen, iv);
922 1008
923 ret = enc ? 1009 ret = enc ?
@@ -937,23 +1023,25 @@ static int test_skcipher(struct crypto_ablkcipher *tfm, int enc,
937 } 1023 }
938 /* fall through */ 1024 /* fall through */
939 default: 1025 default:
940 printk(KERN_ERR "alg: skcipher: %s failed on " 1026 pr_err("alg: skcipher%s: %s failed on chunk test %d for %s: ret=%d\n",
941 "chunk test %d for %s: ret=%d\n", e, j, 1027 d, e, j, algo, -ret);
942 algo, -ret);
943 goto out; 1028 goto out;
944 } 1029 }
945 1030
946 temp = 0; 1031 temp = 0;
947 ret = -EINVAL; 1032 ret = -EINVAL;
948 for (k = 0; k < template[i].np; k++) { 1033 for (k = 0; k < template[i].np; k++) {
949 q = xbuf[IDX[k] >> PAGE_SHIFT] + 1034 if (diff_dst)
950 offset_in_page(IDX[k]); 1035 q = xoutbuf[IDX[k] >> PAGE_SHIFT] +
1036 offset_in_page(IDX[k]);
1037 else
1038 q = xbuf[IDX[k] >> PAGE_SHIFT] +
1039 offset_in_page(IDX[k]);
951 1040
952 if (memcmp(q, template[i].result + temp, 1041 if (memcmp(q, template[i].result + temp,
953 template[i].tap[k])) { 1042 template[i].tap[k])) {
954 printk(KERN_ERR "alg: skcipher: Chunk " 1043 pr_err("alg: skcipher%s: Chunk test %d failed on %s at page %u for %s\n",
955 "test %d failed on %s at page " 1044 d, j, e, k, algo);
956 "%u for %s\n", j, e, k, algo);
957 hexdump(q, template[i].tap[k]); 1045 hexdump(q, template[i].tap[k]);
958 goto out; 1046 goto out;
959 } 1047 }
@@ -962,11 +1050,8 @@ static int test_skcipher(struct crypto_ablkcipher *tfm, int enc,
962 for (n = 0; offset_in_page(q + n) && q[n]; n++) 1050 for (n = 0; offset_in_page(q + n) && q[n]; n++)
963 ; 1051 ;
964 if (n) { 1052 if (n) {
965 printk(KERN_ERR "alg: skcipher: " 1053 pr_err("alg: skcipher%s: Result buffer corruption in chunk test %d on %s at page %u for %s: %u bytes:\n",
966 "Result buffer corruption in " 1054 d, j, e, k, algo, n);
967 "chunk test %d on %s at page "
968 "%u for %s: %u bytes:\n", j, e,
969 k, algo, n);
970 hexdump(q, n); 1055 hexdump(q, n);
971 goto out; 1056 goto out;
972 } 1057 }
@@ -979,11 +1064,28 @@ static int test_skcipher(struct crypto_ablkcipher *tfm, int enc,
979 1064
980out: 1065out:
981 ablkcipher_request_free(req); 1066 ablkcipher_request_free(req);
1067 if (diff_dst)
1068 testmgr_free_buf(xoutbuf);
1069out_nooutbuf:
982 testmgr_free_buf(xbuf); 1070 testmgr_free_buf(xbuf);
983out_nobuf: 1071out_nobuf:
984 return ret; 1072 return ret;
985} 1073}
986 1074
1075static int test_skcipher(struct crypto_ablkcipher *tfm, int enc,
1076 struct cipher_testvec *template, unsigned int tcount)
1077{
1078 int ret;
1079
1080 /* test 'dst == src' case */
1081 ret = __test_skcipher(tfm, enc, template, tcount, false);
1082 if (ret)
1083 return ret;
1084
1085 /* test 'dst != src' case */
1086 return __test_skcipher(tfm, enc, template, tcount, true);
1087}
1088
987static int test_comp(struct crypto_comp *tfm, struct comp_testvec *ctemplate, 1089static int test_comp(struct crypto_comp *tfm, struct comp_testvec *ctemplate,
988 struct comp_testvec *dtemplate, int ctcount, int dtcount) 1090 struct comp_testvec *dtemplate, int ctcount, int dtcount)
989{ 1091{
@@ -1534,6 +1636,36 @@ static int alg_test_null(const struct alg_test_desc *desc,
1534/* Please keep this list sorted by algorithm name. */ 1636/* Please keep this list sorted by algorithm name. */
1535static const struct alg_test_desc alg_test_descs[] = { 1637static const struct alg_test_desc alg_test_descs[] = {
1536 { 1638 {
1639 .alg = "__cbc-cast5-avx",
1640 .test = alg_test_null,
1641 .suite = {
1642 .cipher = {
1643 .enc = {
1644 .vecs = NULL,
1645 .count = 0
1646 },
1647 .dec = {
1648 .vecs = NULL,
1649 .count = 0
1650 }
1651 }
1652 }
1653 }, {
1654 .alg = "__cbc-cast6-avx",
1655 .test = alg_test_null,
1656 .suite = {
1657 .cipher = {
1658 .enc = {
1659 .vecs = NULL,
1660 .count = 0
1661 },
1662 .dec = {
1663 .vecs = NULL,
1664 .count = 0
1665 }
1666 }
1667 }
1668 }, {
1537 .alg = "__cbc-serpent-avx", 1669 .alg = "__cbc-serpent-avx",
1538 .test = alg_test_null, 1670 .test = alg_test_null,
1539 .suite = { 1671 .suite = {
@@ -1595,6 +1727,36 @@ static const struct alg_test_desc alg_test_descs[] = {
1595 } 1727 }
1596 } 1728 }
1597 }, { 1729 }, {
1730 .alg = "__driver-cbc-cast5-avx",
1731 .test = alg_test_null,
1732 .suite = {
1733 .cipher = {
1734 .enc = {
1735 .vecs = NULL,
1736 .count = 0
1737 },
1738 .dec = {
1739 .vecs = NULL,
1740 .count = 0
1741 }
1742 }
1743 }
1744 }, {
1745 .alg = "__driver-cbc-cast6-avx",
1746 .test = alg_test_null,
1747 .suite = {
1748 .cipher = {
1749 .enc = {
1750 .vecs = NULL,
1751 .count = 0
1752 },
1753 .dec = {
1754 .vecs = NULL,
1755 .count = 0
1756 }
1757 }
1758 }
1759 }, {
1598 .alg = "__driver-cbc-serpent-avx", 1760 .alg = "__driver-cbc-serpent-avx",
1599 .test = alg_test_null, 1761 .test = alg_test_null,
1600 .suite = { 1762 .suite = {
@@ -1656,6 +1818,36 @@ static const struct alg_test_desc alg_test_descs[] = {
1656 } 1818 }
1657 } 1819 }
1658 }, { 1820 }, {
1821 .alg = "__driver-ecb-cast5-avx",
1822 .test = alg_test_null,
1823 .suite = {
1824 .cipher = {
1825 .enc = {
1826 .vecs = NULL,
1827 .count = 0
1828 },
1829 .dec = {
1830 .vecs = NULL,
1831 .count = 0
1832 }
1833 }
1834 }
1835 }, {
1836 .alg = "__driver-ecb-cast6-avx",
1837 .test = alg_test_null,
1838 .suite = {
1839 .cipher = {
1840 .enc = {
1841 .vecs = NULL,
1842 .count = 0
1843 },
1844 .dec = {
1845 .vecs = NULL,
1846 .count = 0
1847 }
1848 }
1849 }
1850 }, {
1659 .alg = "__driver-ecb-serpent-avx", 1851 .alg = "__driver-ecb-serpent-avx",
1660 .test = alg_test_null, 1852 .test = alg_test_null,
1661 .suite = { 1853 .suite = {
@@ -1818,6 +2010,36 @@ static const struct alg_test_desc alg_test_descs[] = {
1818 } 2010 }
1819 } 2011 }
1820 }, { 2012 }, {
2013 .alg = "cbc(cast5)",
2014 .test = alg_test_skcipher,
2015 .suite = {
2016 .cipher = {
2017 .enc = {
2018 .vecs = cast5_cbc_enc_tv_template,
2019 .count = CAST5_CBC_ENC_TEST_VECTORS
2020 },
2021 .dec = {
2022 .vecs = cast5_cbc_dec_tv_template,
2023 .count = CAST5_CBC_DEC_TEST_VECTORS
2024 }
2025 }
2026 }
2027 }, {
2028 .alg = "cbc(cast6)",
2029 .test = alg_test_skcipher,
2030 .suite = {
2031 .cipher = {
2032 .enc = {
2033 .vecs = cast6_cbc_enc_tv_template,
2034 .count = CAST6_CBC_ENC_TEST_VECTORS
2035 },
2036 .dec = {
2037 .vecs = cast6_cbc_dec_tv_template,
2038 .count = CAST6_CBC_DEC_TEST_VECTORS
2039 }
2040 }
2041 }
2042 }, {
1821 .alg = "cbc(des)", 2043 .alg = "cbc(des)",
1822 .test = alg_test_skcipher, 2044 .test = alg_test_skcipher,
1823 .suite = { 2045 .suite = {
@@ -1937,6 +2159,36 @@ static const struct alg_test_desc alg_test_descs[] = {
1937 } 2159 }
1938 } 2160 }
1939 }, { 2161 }, {
2162 .alg = "cryptd(__driver-ecb-cast5-avx)",
2163 .test = alg_test_null,
2164 .suite = {
2165 .cipher = {
2166 .enc = {
2167 .vecs = NULL,
2168 .count = 0
2169 },
2170 .dec = {
2171 .vecs = NULL,
2172 .count = 0
2173 }
2174 }
2175 }
2176 }, {
2177 .alg = "cryptd(__driver-ecb-cast6-avx)",
2178 .test = alg_test_null,
2179 .suite = {
2180 .cipher = {
2181 .enc = {
2182 .vecs = NULL,
2183 .count = 0
2184 },
2185 .dec = {
2186 .vecs = NULL,
2187 .count = 0
2188 }
2189 }
2190 }
2191 }, {
1940 .alg = "cryptd(__driver-ecb-serpent-avx)", 2192 .alg = "cryptd(__driver-ecb-serpent-avx)",
1941 .test = alg_test_null, 2193 .test = alg_test_null,
1942 .suite = { 2194 .suite = {
@@ -2054,6 +2306,36 @@ static const struct alg_test_desc alg_test_descs[] = {
2054 } 2306 }
2055 } 2307 }
2056 }, { 2308 }, {
2309 .alg = "ctr(cast5)",
2310 .test = alg_test_skcipher,
2311 .suite = {
2312 .cipher = {
2313 .enc = {
2314 .vecs = cast5_ctr_enc_tv_template,
2315 .count = CAST5_CTR_ENC_TEST_VECTORS
2316 },
2317 .dec = {
2318 .vecs = cast5_ctr_dec_tv_template,
2319 .count = CAST5_CTR_DEC_TEST_VECTORS
2320 }
2321 }
2322 }
2323 }, {
2324 .alg = "ctr(cast6)",
2325 .test = alg_test_skcipher,
2326 .suite = {
2327 .cipher = {
2328 .enc = {
2329 .vecs = cast6_ctr_enc_tv_template,
2330 .count = CAST6_CTR_ENC_TEST_VECTORS
2331 },
2332 .dec = {
2333 .vecs = cast6_ctr_dec_tv_template,
2334 .count = CAST6_CTR_DEC_TEST_VECTORS
2335 }
2336 }
2337 }
2338 }, {
2057 .alg = "ctr(serpent)", 2339 .alg = "ctr(serpent)",
2058 .test = alg_test_skcipher, 2340 .test = alg_test_skcipher,
2059 .suite = { 2341 .suite = {
@@ -2530,6 +2812,21 @@ static const struct alg_test_desc alg_test_descs[] = {
2530 } 2812 }
2531 } 2813 }
2532 }, { 2814 }, {
2815 .alg = "lrw(cast6)",
2816 .test = alg_test_skcipher,
2817 .suite = {
2818 .cipher = {
2819 .enc = {
2820 .vecs = cast6_lrw_enc_tv_template,
2821 .count = CAST6_LRW_ENC_TEST_VECTORS
2822 },
2823 .dec = {
2824 .vecs = cast6_lrw_dec_tv_template,
2825 .count = CAST6_LRW_DEC_TEST_VECTORS
2826 }
2827 }
2828 }
2829 }, {
2533 .alg = "lrw(serpent)", 2830 .alg = "lrw(serpent)",
2534 .test = alg_test_skcipher, 2831 .test = alg_test_skcipher,
2535 .suite = { 2832 .suite = {
@@ -2882,6 +3179,21 @@ static const struct alg_test_desc alg_test_descs[] = {
2882 } 3179 }
2883 } 3180 }
2884 }, { 3181 }, {
3182 .alg = "xts(cast6)",
3183 .test = alg_test_skcipher,
3184 .suite = {
3185 .cipher = {
3186 .enc = {
3187 .vecs = cast6_xts_enc_tv_template,
3188 .count = CAST6_XTS_ENC_TEST_VECTORS
3189 },
3190 .dec = {
3191 .vecs = cast6_xts_dec_tv_template,
3192 .count = CAST6_XTS_DEC_TEST_VECTORS
3193 }
3194 }
3195 }
3196 }, {
2885 .alg = "xts(serpent)", 3197 .alg = "xts(serpent)",
2886 .test = alg_test_skcipher, 3198 .test = alg_test_skcipher,
2887 .suite = { 3199 .suite = {
diff --git a/crypto/testmgr.h b/crypto/testmgr.h
index f8179e0344e..76d7f6cc82f 100644
--- a/crypto/testmgr.h
+++ b/crypto/testmgr.h
@@ -53,6 +53,7 @@ struct cipher_testvec {
53 char *result; 53 char *result;
54 unsigned short tap[MAX_TAP]; 54 unsigned short tap[MAX_TAP];
55 int np; 55 int np;
56 unsigned char also_non_np;
56 unsigned char fail; 57 unsigned char fail;
57 unsigned char wk; /* weak key flag */ 58 unsigned char wk; /* weak key flag */
58 unsigned char klen; 59 unsigned char klen;
@@ -2468,6 +2469,9 @@ static struct cipher_testvec bf_enc_tv_template[] = {
2468 "\xC2\xF4\x6D\xFF\xF6\xCD\x6B\x40" 2469 "\xC2\xF4\x6D\xFF\xF6\xCD\x6B\x40"
2469 "\xE1\xB3\xBF\xD4\x38\x2B\xC8\x3B", 2470 "\xE1\xB3\xBF\xD4\x38\x2B\xC8\x3B",
2470 .rlen = 40, 2471 .rlen = 40,
2472 .also_non_np = 1,
2473 .np = 2,
2474 .tap = { 40 - 8, 8 },
2471 }, 2475 },
2472}; 2476};
2473 2477
@@ -2541,6 +2545,9 @@ static struct cipher_testvec bf_dec_tv_template[] = {
2541 "\xAC\x20\xB7\x4E\xE5\x59\xF0\x87" 2545 "\xAC\x20\xB7\x4E\xE5\x59\xF0\x87"
2542 "\x1E\x92\x29\xC0\x34\xCB\x62\xF9", 2546 "\x1E\x92\x29\xC0\x34\xCB\x62\xF9",
2543 .rlen = 40, 2547 .rlen = 40,
2548 .also_non_np = 1,
2549 .np = 2,
2550 .tap = { 40 - 8, 8 },
2544 }, 2551 },
2545}; 2552};
2546 2553
@@ -2579,6 +2586,9 @@ static struct cipher_testvec bf_cbc_enc_tv_template[] = {
2579 "\x1B\xD9\x02\xB6\x48\xB0\x87\x25" 2586 "\x1B\xD9\x02\xB6\x48\xB0\x87\x25"
2580 "\x01\x9C\x93\x63\x51\x60\x82\xD2", 2587 "\x01\x9C\x93\x63\x51\x60\x82\xD2",
2581 .rlen = 40, 2588 .rlen = 40,
2589 .also_non_np = 1,
2590 .np = 2,
2591 .tap = { 40 - 8, 8 },
2582 }, 2592 },
2583}; 2593};
2584 2594
@@ -2617,6 +2627,9 @@ static struct cipher_testvec bf_cbc_dec_tv_template[] = {
2617 "\xAC\x20\xB7\x4E\xE5\x59\xF0\x87" 2627 "\xAC\x20\xB7\x4E\xE5\x59\xF0\x87"
2618 "\x1E\x92\x29\xC0\x34\xCB\x62\xF9", 2628 "\x1E\x92\x29\xC0\x34\xCB\x62\xF9",
2619 .rlen = 40, 2629 .rlen = 40,
2630 .also_non_np = 1,
2631 .np = 2,
2632 .tap = { 40 - 8, 8 },
2620 }, 2633 },
2621}; 2634};
2622 2635
@@ -2661,6 +2674,144 @@ static struct cipher_testvec bf_ctr_enc_tv_template[] = {
2661 "\xE4\x1F\x5E\xA5\x89\xAC\x32\xBC" 2674 "\xE4\x1F\x5E\xA5\x89\xAC\x32\xBC"
2662 "\x3D\xA7\xE9", 2675 "\x3D\xA7\xE9",
2663 .rlen = 43, 2676 .rlen = 43,
2677 .also_non_np = 1,
2678 .np = 2,
2679 .tap = { 43 - 8, 8 },
2680 }, { /* Generated with Crypto++ */
2681 .key = "\x85\x62\x3F\x1C\xF9\xD6\x1C\xF9"
2682 "\xD6\xB3\x90\x6D\x4A\x90\x6D\x4A"
2683 "\x27\x04\xE1\x27\x04\xE1\xBE\x9B"
2684 "\x78\xBE\x9B\x78\x55\x32\x0F\x55",
2685 .klen = 32,
2686 .iv = "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFD",
2687 .input = "\x56\xED\x84\x1B\x8F\x26\xBD\x31"
2688 "\xC8\x5F\xF6\x6A\x01\x98\x0C\xA3"
2689 "\x3A\xD1\x45\xDC\x73\x0A\x7E\x15"
2690 "\xAC\x20\xB7\x4E\xE5\x59\xF0\x87"
2691 "\x1E\x92\x29\xC0\x34\xCB\x62\xF9"
2692 "\x6D\x04\x9B\x0F\xA6\x3D\xD4\x48"
2693 "\xDF\x76\x0D\x81\x18\xAF\x23\xBA"
2694 "\x51\xE8\x5C\xF3\x8A\x21\x95\x2C"
2695 "\xC3\x37\xCE\x65\xFC\x70\x07\x9E"
2696 "\x12\xA9\x40\xD7\x4B\xE2\x79\x10"
2697 "\x84\x1B\xB2\x26\xBD\x54\xEB\x5F"
2698 "\xF6\x8D\x01\x98\x2F\xC6\x3A\xD1"
2699 "\x68\xFF\x73\x0A\xA1\x15\xAC\x43"
2700 "\xDA\x4E\xE5\x7C\x13\x87\x1E\xB5"
2701 "\x29\xC0\x57\xEE\x62\xF9\x90\x04"
2702 "\x9B\x32\xC9\x3D\xD4\x6B\x02\x76"
2703 "\x0D\xA4\x18\xAF\x46\xDD\x51\xE8"
2704 "\x7F\x16\x8A\x21\xB8\x2C\xC3\x5A"
2705 "\xF1\x65\xFC\x93\x07\x9E\x35\xCC"
2706 "\x40\xD7\x6E\x05\x79\x10\xA7\x1B"
2707 "\xB2\x49\xE0\x54\xEB\x82\x19\x8D"
2708 "\x24\xBB\x2F\xC6\x5D\xF4\x68\xFF"
2709 "\x96\x0A\xA1\x38\xCF\x43\xDA\x71"
2710 "\x08\x7C\x13\xAA\x1E\xB5\x4C\xE3"
2711 "\x57\xEE\x85\x1C\x90\x27\xBE\x32"
2712 "\xC9\x60\xF7\x6B\x02\x99\x0D\xA4"
2713 "\x3B\xD2\x46\xDD\x74\x0B\x7F\x16"
2714 "\xAD\x21\xB8\x4F\xE6\x5A\xF1\x88"
2715 "\x1F\x93\x2A\xC1\x35\xCC\x63\xFA"
2716 "\x6E\x05\x9C\x10\xA7\x3E\xD5\x49"
2717 "\xE0\x77\x0E\x82\x19\xB0\x24\xBB"
2718 "\x52\xE9\x5D\xF4\x8B\x22\x96\x2D"
2719 "\xC4\x38\xCF\x66\xFD\x71\x08\x9F"
2720 "\x13\xAA\x41\xD8\x4C\xE3\x7A\x11"
2721 "\x85\x1C\xB3\x27\xBE\x55\xEC\x60"
2722 "\xF7\x8E\x02\x99\x30\xC7\x3B\xD2"
2723 "\x69\x00\x74\x0B\xA2\x16\xAD\x44"
2724 "\xDB\x4F\xE6\x7D\x14\x88\x1F\xB6"
2725 "\x2A\xC1\x58\xEF\x63\xFA\x91\x05"
2726 "\x9C\x33\xCA\x3E\xD5\x6C\x03\x77"
2727 "\x0E\xA5\x19\xB0\x47\xDE\x52\xE9"
2728 "\x80\x17\x8B\x22\xB9\x2D\xC4\x5B"
2729 "\xF2\x66\xFD\x94\x08\x9F\x36\xCD"
2730 "\x41\xD8\x6F\x06\x7A\x11\xA8\x1C"
2731 "\xB3\x4A\xE1\x55\xEC\x83\x1A\x8E"
2732 "\x25\xBC\x30\xC7\x5E\xF5\x69\x00"
2733 "\x97\x0B\xA2\x39\xD0\x44\xDB\x72"
2734 "\x09\x7D\x14\xAB\x1F\xB6\x4D\xE4"
2735 "\x58\xEF\x86\x1D\x91\x28\xBF\x33"
2736 "\xCA\x61\xF8\x6C\x03\x9A\x0E\xA5"
2737 "\x3C\xD3\x47\xDE\x75\x0C\x80\x17"
2738 "\xAE\x22\xB9\x50\xE7\x5B\xF2\x89"
2739 "\x20\x94\x2B\xC2\x36\xCD\x64\xFB"
2740 "\x6F\x06\x9D\x11\xA8\x3F\xD6\x4A"
2741 "\xE1\x78\x0F\x83\x1A\xB1\x25\xBC"
2742 "\x53\xEA\x5E\xF5\x8C\x00\x97\x2E"
2743 "\xC5\x39\xD0\x67\xFE\x72\x09\xA0"
2744 "\x14\xAB\x42\xD9\x4D\xE4\x7B\x12"
2745 "\x86\x1D\xB4\x28\xBF\x56\xED\x61"
2746 "\xF8\x8F\x03\x9A\x31\xC8\x3C\xD3"
2747 "\x6A\x01\x75\x0C\xA3\x17\xAE\x45"
2748 "\xDC\x50\xE7\x7E\x15\x89\x20\xB7"
2749 "\x2B\xC2\x59\xF0\x64\xFB\x92\x06",
2750 .ilen = 504,
2751 .result = "\x5F\x58\x6E\x60\x51\x6E\xDC\x3D"
2752 "\xD1\xBB\xF7\xB7\xFD\x04\x44\x82"
2753 "\xDC\x9F\x4B\x02\xF1\xD2\x5A\x6F"
2754 "\x25\xF9\x27\x21\xF2\xD2\x9A\x01"
2755 "\xBD\xAD\x3D\x93\x87\xCA\x0D\xFE"
2756 "\xB7\x2C\x17\x1F\x42\x8C\x13\xB2"
2757 "\x62\x44\x72\xB9\x5D\xC0\xF8\x37"
2758 "\xDF\xEA\x78\x81\x8F\xA6\x34\xB2"
2759 "\x07\x09\x7C\xB9\x3A\xA0\x2B\x18"
2760 "\x34\x6A\x9D\x3D\xA5\xEB\xF4\x60"
2761 "\xF8\x98\xA2\x39\x81\x23\x6C\xA9"
2762 "\x70\xCA\xCC\x45\xD8\x1F\xDF\x44"
2763 "\x2A\x67\x7A\x88\x28\xDC\x36\x83"
2764 "\x18\xD7\x48\x43\x17\x2B\x1B\xE6"
2765 "\x0B\x82\x59\x14\x26\x67\x08\x09"
2766 "\x5B\x5D\x38\xD0\x81\xCE\x54\x2A"
2767 "\xCD\x22\x94\x42\xF5\xBA\x74\x7E"
2768 "\xD9\x00\x40\xA9\x0D\x0B\xBD\x8E"
2769 "\xC4\x8E\x5E\x17\x8F\x48\xE2\xB8"
2770 "\xF4\xCC\x19\x76\xAB\x48\x29\xAA"
2771 "\x81\xD5\xCE\xD5\x8A\x3B\xC9\x21"
2772 "\xEF\x50\x4F\x04\x02\xBF\xE1\x1F"
2773 "\x59\x28\x1A\xE4\x18\x16\xA0\x29"
2774 "\xBF\x34\xA9\x2D\x28\x83\xC0\x5E"
2775 "\xEA\x44\xC4\x6E\xAB\x24\x79\x9D"
2776 "\x2D\xA1\xE8\x55\xCA\x74\xFC\xBD"
2777 "\xFE\xDD\xDA\xA5\xFB\x34\x90\x31"
2778 "\x0E\x62\x28\x9B\xDC\xD7\xA1\xBB"
2779 "\xF0\x1A\xB3\xE2\xD0\xFA\xBD\xE8"
2780 "\x5C\x5A\x10\x67\xF6\x6A\x17\x3F"
2781 "\xC5\xE9\x09\x08\xDD\x22\x77\x42"
2782 "\x26\x6A\x6A\x7A\x3F\x87\x80\x0C"
2783 "\xF0\xFF\x15\x8E\x84\x86\xC0\x10"
2784 "\x0F\x8D\x33\x06\xB8\x72\xA4\x47"
2785 "\x6B\xED\x2E\x05\x94\x6C\x5C\x5B"
2786 "\x13\xF6\x77\xEE\x3B\x16\xDF\xC2"
2787 "\x63\x66\x07\x6D\x3F\x6C\x51\x7C"
2788 "\x1C\xAC\x80\xB6\x58\x48\xB7\x9D"
2789 "\xB4\x19\xD8\x19\x45\x66\x27\x02"
2790 "\xA1\xA9\x99\xF3\x1F\xE5\xA7\x1D"
2791 "\x31\xE7\x1B\x0D\xFF\xBB\xB5\xA1"
2792 "\xF5\x9C\x45\x1E\x18\x19\xA1\xE7"
2793 "\xC2\xF1\xBF\x68\xC3\xEC\xCF\x53"
2794 "\x67\xA6\x2B\x7D\x3C\x6D\x24\xC3"
2795 "\xE8\xE6\x07\x5A\x09\xE0\x32\xA8"
2796 "\x52\xF6\xE9\xED\x0E\xC6\x0A\x6A"
2797 "\xFC\x60\x2A\xE0\x93\xCE\xB8\x2E"
2798 "\xA2\xA8\x0E\x79\x9E\x34\x5D\x37"
2799 "\x6F\x12\xFE\x48\x7B\xE7\xB9\x22"
2800 "\x29\xE8\xD7\xBE\x5D\xD1\x8B\xD9"
2801 "\x91\x51\x4E\x71\xF2\x98\x85\x16"
2802 "\x25\x7A\x76\x8A\x51\x0E\x65\x14"
2803 "\x81\xB5\x3A\x37\xFD\xEC\xB5\x8A"
2804 "\xE1\xCF\x41\x72\x14\x29\x4C\xF0"
2805 "\x20\xD9\x9A\xC5\x66\xA4\x03\x76"
2806 "\x5B\xA4\x15\x4F\x0E\x64\x39\x40"
2807 "\x25\xF9\x20\x22\xF5\x88\xF5\xBA"
2808 "\xE4\xDF\x45\x61\xBF\x8D\x7A\x24"
2809 "\x4B\x92\x71\xD9\x2F\x77\xA7\x95"
2810 "\xA8\x7F\x61\xD5\xA4\x57\xB0\xFB"
2811 "\xB5\x77\xBA\x1C\xEE\x71\xFA\xB0"
2812 "\x16\x4C\x18\x6B\xF2\x69\xA0\x07"
2813 "\xEF\xBE\xEC\x69\xAC\xA8\x63\x9E",
2814 .rlen = 504,
2664 }, 2815 },
2665}; 2816};
2666 2817
@@ -2705,6 +2856,144 @@ static struct cipher_testvec bf_ctr_dec_tv_template[] = {
2705 "\x1E\x92\x29\xC0\x34\xCB\x62\xF9" 2856 "\x1E\x92\x29\xC0\x34\xCB\x62\xF9"
2706 "\x6D\x04\x9B", 2857 "\x6D\x04\x9B",
2707 .rlen = 43, 2858 .rlen = 43,
2859 .also_non_np = 1,
2860 .np = 2,
2861 .tap = { 43 - 8, 8 },
2862 }, { /* Generated with Crypto++ */
2863 .key = "\x85\x62\x3F\x1C\xF9\xD6\x1C\xF9"
2864 "\xD6\xB3\x90\x6D\x4A\x90\x6D\x4A"
2865 "\x27\x04\xE1\x27\x04\xE1\xBE\x9B"
2866 "\x78\xBE\x9B\x78\x55\x32\x0F\x55",
2867 .klen = 32,
2868 .iv = "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFD",
2869 .input = "\x5F\x58\x6E\x60\x51\x6E\xDC\x3D"
2870 "\xD1\xBB\xF7\xB7\xFD\x04\x44\x82"
2871 "\xDC\x9F\x4B\x02\xF1\xD2\x5A\x6F"
2872 "\x25\xF9\x27\x21\xF2\xD2\x9A\x01"
2873 "\xBD\xAD\x3D\x93\x87\xCA\x0D\xFE"
2874 "\xB7\x2C\x17\x1F\x42\x8C\x13\xB2"
2875 "\x62\x44\x72\xB9\x5D\xC0\xF8\x37"
2876 "\xDF\xEA\x78\x81\x8F\xA6\x34\xB2"
2877 "\x07\x09\x7C\xB9\x3A\xA0\x2B\x18"
2878 "\x34\x6A\x9D\x3D\xA5\xEB\xF4\x60"
2879 "\xF8\x98\xA2\x39\x81\x23\x6C\xA9"
2880 "\x70\xCA\xCC\x45\xD8\x1F\xDF\x44"
2881 "\x2A\x67\x7A\x88\x28\xDC\x36\x83"
2882 "\x18\xD7\x48\x43\x17\x2B\x1B\xE6"
2883 "\x0B\x82\x59\x14\x26\x67\x08\x09"
2884 "\x5B\x5D\x38\xD0\x81\xCE\x54\x2A"
2885 "\xCD\x22\x94\x42\xF5\xBA\x74\x7E"
2886 "\xD9\x00\x40\xA9\x0D\x0B\xBD\x8E"
2887 "\xC4\x8E\x5E\x17\x8F\x48\xE2\xB8"
2888 "\xF4\xCC\x19\x76\xAB\x48\x29\xAA"
2889 "\x81\xD5\xCE\xD5\x8A\x3B\xC9\x21"
2890 "\xEF\x50\x4F\x04\x02\xBF\xE1\x1F"
2891 "\x59\x28\x1A\xE4\x18\x16\xA0\x29"
2892 "\xBF\x34\xA9\x2D\x28\x83\xC0\x5E"
2893 "\xEA\x44\xC4\x6E\xAB\x24\x79\x9D"
2894 "\x2D\xA1\xE8\x55\xCA\x74\xFC\xBD"
2895 "\xFE\xDD\xDA\xA5\xFB\x34\x90\x31"
2896 "\x0E\x62\x28\x9B\xDC\xD7\xA1\xBB"
2897 "\xF0\x1A\xB3\xE2\xD0\xFA\xBD\xE8"
2898 "\x5C\x5A\x10\x67\xF6\x6A\x17\x3F"
2899 "\xC5\xE9\x09\x08\xDD\x22\x77\x42"
2900 "\x26\x6A\x6A\x7A\x3F\x87\x80\x0C"
2901 "\xF0\xFF\x15\x8E\x84\x86\xC0\x10"
2902 "\x0F\x8D\x33\x06\xB8\x72\xA4\x47"
2903 "\x6B\xED\x2E\x05\x94\x6C\x5C\x5B"
2904 "\x13\xF6\x77\xEE\x3B\x16\xDF\xC2"
2905 "\x63\x66\x07\x6D\x3F\x6C\x51\x7C"
2906 "\x1C\xAC\x80\xB6\x58\x48\xB7\x9D"
2907 "\xB4\x19\xD8\x19\x45\x66\x27\x02"
2908 "\xA1\xA9\x99\xF3\x1F\xE5\xA7\x1D"
2909 "\x31\xE7\x1B\x0D\xFF\xBB\xB5\xA1"
2910 "\xF5\x9C\x45\x1E\x18\x19\xA1\xE7"
2911 "\xC2\xF1\xBF\x68\xC3\xEC\xCF\x53"
2912 "\x67\xA6\x2B\x7D\x3C\x6D\x24\xC3"
2913 "\xE8\xE6\x07\x5A\x09\xE0\x32\xA8"
2914 "\x52\xF6\xE9\xED\x0E\xC6\x0A\x6A"
2915 "\xFC\x60\x2A\xE0\x93\xCE\xB8\x2E"
2916 "\xA2\xA8\x0E\x79\x9E\x34\x5D\x37"
2917 "\x6F\x12\xFE\x48\x7B\xE7\xB9\x22"
2918 "\x29\xE8\xD7\xBE\x5D\xD1\x8B\xD9"
2919 "\x91\x51\x4E\x71\xF2\x98\x85\x16"
2920 "\x25\x7A\x76\x8A\x51\x0E\x65\x14"
2921 "\x81\xB5\x3A\x37\xFD\xEC\xB5\x8A"
2922 "\xE1\xCF\x41\x72\x14\x29\x4C\xF0"
2923 "\x20\xD9\x9A\xC5\x66\xA4\x03\x76"
2924 "\x5B\xA4\x15\x4F\x0E\x64\x39\x40"
2925 "\x25\xF9\x20\x22\xF5\x88\xF5\xBA"
2926 "\xE4\xDF\x45\x61\xBF\x8D\x7A\x24"
2927 "\x4B\x92\x71\xD9\x2F\x77\xA7\x95"
2928 "\xA8\x7F\x61\xD5\xA4\x57\xB0\xFB"
2929 "\xB5\x77\xBA\x1C\xEE\x71\xFA\xB0"
2930 "\x16\x4C\x18\x6B\xF2\x69\xA0\x07"
2931 "\xEF\xBE\xEC\x69\xAC\xA8\x63\x9E",
2932 .ilen = 504,
2933 .result = "\x56\xED\x84\x1B\x8F\x26\xBD\x31"
2934 "\xC8\x5F\xF6\x6A\x01\x98\x0C\xA3"
2935 "\x3A\xD1\x45\xDC\x73\x0A\x7E\x15"
2936 "\xAC\x20\xB7\x4E\xE5\x59\xF0\x87"
2937 "\x1E\x92\x29\xC0\x34\xCB\x62\xF9"
2938 "\x6D\x04\x9B\x0F\xA6\x3D\xD4\x48"
2939 "\xDF\x76\x0D\x81\x18\xAF\x23\xBA"
2940 "\x51\xE8\x5C\xF3\x8A\x21\x95\x2C"
2941 "\xC3\x37\xCE\x65\xFC\x70\x07\x9E"
2942 "\x12\xA9\x40\xD7\x4B\xE2\x79\x10"
2943 "\x84\x1B\xB2\x26\xBD\x54\xEB\x5F"
2944 "\xF6\x8D\x01\x98\x2F\xC6\x3A\xD1"
2945 "\x68\xFF\x73\x0A\xA1\x15\xAC\x43"
2946 "\xDA\x4E\xE5\x7C\x13\x87\x1E\xB5"
2947 "\x29\xC0\x57\xEE\x62\xF9\x90\x04"
2948 "\x9B\x32\xC9\x3D\xD4\x6B\x02\x76"
2949 "\x0D\xA4\x18\xAF\x46\xDD\x51\xE8"
2950 "\x7F\x16\x8A\x21\xB8\x2C\xC3\x5A"
2951 "\xF1\x65\xFC\x93\x07\x9E\x35\xCC"
2952 "\x40\xD7\x6E\x05\x79\x10\xA7\x1B"
2953 "\xB2\x49\xE0\x54\xEB\x82\x19\x8D"
2954 "\x24\xBB\x2F\xC6\x5D\xF4\x68\xFF"
2955 "\x96\x0A\xA1\x38\xCF\x43\xDA\x71"
2956 "\x08\x7C\x13\xAA\x1E\xB5\x4C\xE3"
2957 "\x57\xEE\x85\x1C\x90\x27\xBE\x32"
2958 "\xC9\x60\xF7\x6B\x02\x99\x0D\xA4"
2959 "\x3B\xD2\x46\xDD\x74\x0B\x7F\x16"
2960 "\xAD\x21\xB8\x4F\xE6\x5A\xF1\x88"
2961 "\x1F\x93\x2A\xC1\x35\xCC\x63\xFA"
2962 "\x6E\x05\x9C\x10\xA7\x3E\xD5\x49"
2963 "\xE0\x77\x0E\x82\x19\xB0\x24\xBB"
2964 "\x52\xE9\x5D\xF4\x8B\x22\x96\x2D"
2965 "\xC4\x38\xCF\x66\xFD\x71\x08\x9F"
2966 "\x13\xAA\x41\xD8\x4C\xE3\x7A\x11"
2967 "\x85\x1C\xB3\x27\xBE\x55\xEC\x60"
2968 "\xF7\x8E\x02\x99\x30\xC7\x3B\xD2"
2969 "\x69\x00\x74\x0B\xA2\x16\xAD\x44"
2970 "\xDB\x4F\xE6\x7D\x14\x88\x1F\xB6"
2971 "\x2A\xC1\x58\xEF\x63\xFA\x91\x05"
2972 "\x9C\x33\xCA\x3E\xD5\x6C\x03\x77"
2973 "\x0E\xA5\x19\xB0\x47\xDE\x52\xE9"
2974 "\x80\x17\x8B\x22\xB9\x2D\xC4\x5B"
2975 "\xF2\x66\xFD\x94\x08\x9F\x36\xCD"
2976 "\x41\xD8\x6F\x06\x7A\x11\xA8\x1C"
2977 "\xB3\x4A\xE1\x55\xEC\x83\x1A\x8E"
2978 "\x25\xBC\x30\xC7\x5E\xF5\x69\x00"
2979 "\x97\x0B\xA2\x39\xD0\x44\xDB\x72"
2980 "\x09\x7D\x14\xAB\x1F\xB6\x4D\xE4"
2981 "\x58\xEF\x86\x1D\x91\x28\xBF\x33"
2982 "\xCA\x61\xF8\x6C\x03\x9A\x0E\xA5"
2983 "\x3C\xD3\x47\xDE\x75\x0C\x80\x17"
2984 "\xAE\x22\xB9\x50\xE7\x5B\xF2\x89"
2985 "\x20\x94\x2B\xC2\x36\xCD\x64\xFB"
2986 "\x6F\x06\x9D\x11\xA8\x3F\xD6\x4A"
2987 "\xE1\x78\x0F\x83\x1A\xB1\x25\xBC"
2988 "\x53\xEA\x5E\xF5\x8C\x00\x97\x2E"
2989 "\xC5\x39\xD0\x67\xFE\x72\x09\xA0"
2990 "\x14\xAB\x42\xD9\x4D\xE4\x7B\x12"
2991 "\x86\x1D\xB4\x28\xBF\x56\xED\x61"
2992 "\xF8\x8F\x03\x9A\x31\xC8\x3C\xD3"
2993 "\x6A\x01\x75\x0C\xA3\x17\xAE\x45"
2994 "\xDC\x50\xE7\x7E\x15\x89\x20\xB7"
2995 "\x2B\xC2\x59\xF0\x64\xFB\x92\x06",
2996 .rlen = 504,
2708 }, 2997 },
2709}; 2998};
2710 2999
@@ -2884,6 +3173,9 @@ static struct cipher_testvec tf_enc_tv_template[] = {
2884 "\x58\x33\x9B\x78\xC7\x58\x48\x6B" 3173 "\x58\x33\x9B\x78\xC7\x58\x48\x6B"
2885 "\x2C\x75\x64\xC4\xCA\xC1\x7E\xD5", 3174 "\x2C\x75\x64\xC4\xCA\xC1\x7E\xD5",
2886 .rlen = 496, 3175 .rlen = 496,
3176 .also_non_np = 1,
3177 .np = 2,
3178 .tap = { 496 - 16, 16 },
2887 }, 3179 },
2888}; 3180};
2889 3181
@@ -3049,6 +3341,9 @@ static struct cipher_testvec tf_dec_tv_template[] = {
3049 "\x6A\x01\x75\x0C\xA3\x17\xAE\x45" 3341 "\x6A\x01\x75\x0C\xA3\x17\xAE\x45"
3050 "\xDC\x50\xE7\x7E\x15\x89\x20\xB7", 3342 "\xDC\x50\xE7\x7E\x15\x89\x20\xB7",
3051 .rlen = 496, 3343 .rlen = 496,
3344 .also_non_np = 1,
3345 .np = 2,
3346 .tap = { 496 - 16, 16 },
3052 }, 3347 },
3053}; 3348};
3054 3349
@@ -3229,6 +3524,9 @@ static struct cipher_testvec tf_cbc_enc_tv_template[] = {
3229 "\x30\x70\x56\xA4\x37\xDD\x7C\xC0" 3524 "\x30\x70\x56\xA4\x37\xDD\x7C\xC0"
3230 "\x0A\xA3\x30\x10\x26\x25\x41\x2C", 3525 "\x0A\xA3\x30\x10\x26\x25\x41\x2C",
3231 .rlen = 496, 3526 .rlen = 496,
3527 .also_non_np = 1,
3528 .np = 2,
3529 .tap = { 496 - 16, 16 },
3232 }, 3530 },
3233}; 3531};
3234 3532
@@ -3409,6 +3707,9 @@ static struct cipher_testvec tf_cbc_dec_tv_template[] = {
3409 "\x6A\x01\x75\x0C\xA3\x17\xAE\x45" 3707 "\x6A\x01\x75\x0C\xA3\x17\xAE\x45"
3410 "\xDC\x50\xE7\x7E\x15\x89\x20\xB7", 3708 "\xDC\x50\xE7\x7E\x15\x89\x20\xB7",
3411 .rlen = 496, 3709 .rlen = 496,
3710 .also_non_np = 1,
3711 .np = 2,
3712 .tap = { 496 - 16, 16 },
3412 }, 3713 },
3413}; 3714};
3414 3715
@@ -3553,6 +3854,140 @@ static struct cipher_testvec tf_ctr_enc_tv_template[] = {
3553 "\x27\x04\xE1\x27\x04\xE1\xBE\x9B" 3854 "\x27\x04\xE1\x27\x04\xE1\xBE\x9B"
3554 "\x78\xBE\x9B\x78\x55\x32\x0F\x55", 3855 "\x78\xBE\x9B\x78\x55\x32\x0F\x55",
3555 .klen = 32, 3856 .klen = 32,
3857 .iv = "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
3858 "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFD",
3859 .input = "\x56\xED\x84\x1B\x8F\x26\xBD\x31"
3860 "\xC8\x5F\xF6\x6A\x01\x98\x0C\xA3"
3861 "\x3A\xD1\x45\xDC\x73\x0A\x7E\x15"
3862 "\xAC\x20\xB7\x4E\xE5\x59\xF0\x87"
3863 "\x1E\x92\x29\xC0\x34\xCB\x62\xF9"
3864 "\x6D\x04\x9B\x0F\xA6\x3D\xD4\x48"
3865 "\xDF\x76\x0D\x81\x18\xAF\x23\xBA"
3866 "\x51\xE8\x5C\xF3\x8A\x21\x95\x2C"
3867 "\xC3\x37\xCE\x65\xFC\x70\x07\x9E"
3868 "\x12\xA9\x40\xD7\x4B\xE2\x79\x10"
3869 "\x84\x1B\xB2\x26\xBD\x54\xEB\x5F"
3870 "\xF6\x8D\x01\x98\x2F\xC6\x3A\xD1"
3871 "\x68\xFF\x73\x0A\xA1\x15\xAC\x43"
3872 "\xDA\x4E\xE5\x7C\x13\x87\x1E\xB5"
3873 "\x29\xC0\x57\xEE\x62\xF9\x90\x04"
3874 "\x9B\x32\xC9\x3D\xD4\x6B\x02\x76"
3875 "\x0D\xA4\x18\xAF\x46\xDD\x51\xE8"
3876 "\x7F\x16\x8A\x21\xB8\x2C\xC3\x5A"
3877 "\xF1\x65\xFC\x93\x07\x9E\x35\xCC"
3878 "\x40\xD7\x6E\x05\x79\x10\xA7\x1B"
3879 "\xB2\x49\xE0\x54\xEB\x82\x19\x8D"
3880 "\x24\xBB\x2F\xC6\x5D\xF4\x68\xFF"
3881 "\x96\x0A\xA1\x38\xCF\x43\xDA\x71"
3882 "\x08\x7C\x13\xAA\x1E\xB5\x4C\xE3"
3883 "\x57\xEE\x85\x1C\x90\x27\xBE\x32"
3884 "\xC9\x60\xF7\x6B\x02\x99\x0D\xA4"
3885 "\x3B\xD2\x46\xDD\x74\x0B\x7F\x16"
3886 "\xAD\x21\xB8\x4F\xE6\x5A\xF1\x88"
3887 "\x1F\x93\x2A\xC1\x35\xCC\x63\xFA"
3888 "\x6E\x05\x9C\x10\xA7\x3E\xD5\x49"
3889 "\xE0\x77\x0E\x82\x19\xB0\x24\xBB"
3890 "\x52\xE9\x5D\xF4\x8B\x22\x96\x2D"
3891 "\xC4\x38\xCF\x66\xFD\x71\x08\x9F"
3892 "\x13\xAA\x41\xD8\x4C\xE3\x7A\x11"
3893 "\x85\x1C\xB3\x27\xBE\x55\xEC\x60"
3894 "\xF7\x8E\x02\x99\x30\xC7\x3B\xD2"
3895 "\x69\x00\x74\x0B\xA2\x16\xAD\x44"
3896 "\xDB\x4F\xE6\x7D\x14\x88\x1F\xB6"
3897 "\x2A\xC1\x58\xEF\x63\xFA\x91\x05"
3898 "\x9C\x33\xCA\x3E\xD5\x6C\x03\x77"
3899 "\x0E\xA5\x19\xB0\x47\xDE\x52\xE9"
3900 "\x80\x17\x8B\x22\xB9\x2D\xC4\x5B"
3901 "\xF2\x66\xFD\x94\x08\x9F\x36\xCD"
3902 "\x41\xD8\x6F\x06\x7A\x11\xA8\x1C"
3903 "\xB3\x4A\xE1\x55\xEC\x83\x1A\x8E"
3904 "\x25\xBC\x30\xC7\x5E\xF5\x69\x00"
3905 "\x97\x0B\xA2\x39\xD0\x44\xDB\x72"
3906 "\x09\x7D\x14\xAB\x1F\xB6\x4D\xE4"
3907 "\x58\xEF\x86\x1D\x91\x28\xBF\x33"
3908 "\xCA\x61\xF8\x6C\x03\x9A\x0E\xA5"
3909 "\x3C\xD3\x47\xDE\x75\x0C\x80\x17"
3910 "\xAE\x22\xB9\x50\xE7\x5B\xF2\x89"
3911 "\x20\x94\x2B\xC2\x36\xCD\x64\xFB"
3912 "\x6F\x06\x9D\x11\xA8\x3F\xD6\x4A"
3913 "\xE1\x78\x0F\x83\x1A\xB1\x25\xBC"
3914 "\x53\xEA\x5E\xF5\x8C\x00\x97\x2E"
3915 "\xC5\x39\xD0\x67\xFE\x72\x09\xA0"
3916 "\x14\xAB\x42\xD9\x4D\xE4\x7B\x12"
3917 "\x86\x1D\xB4\x28\xBF\x56\xED\x61"
3918 "\xF8\x8F\x03\x9A\x31\xC8\x3C\xD3"
3919 "\x6A\x01\x75\x0C\xA3\x17\xAE\x45"
3920 "\xDC\x50\xE7\x7E\x15\x89\x20\xB7",
3921 .ilen = 496,
3922 .result = "\xEB\x44\xAF\x49\x27\xB8\xFB\x44"
3923 "\x4C\xA6\xC3\x0C\x8B\xD0\x01\x0C"
3924 "\x53\xC8\x16\x38\xDE\x40\x4F\x91"
3925 "\x25\x6D\x4C\xA0\x9A\x87\x1E\xDA"
3926 "\x88\x7E\x89\xE9\x67\x2B\x83\xA2"
3927 "\x5F\x2E\x23\x3E\x45\xB9\x77\x7B"
3928 "\xA6\x7E\x47\x36\x81\x9F\x9B\xF3"
3929 "\xE0\xF0\xD7\x47\xA9\xC8\xEF\x33"
3930 "\x0C\x43\xFE\x67\x50\x0A\x2C\x3E"
3931 "\xA0\xE1\x25\x8E\x80\x07\x4A\xC0"
3932 "\x64\x89\x9F\x6A\x27\x96\x07\xA6"
3933 "\x9B\xC8\x1B\x21\x60\xAE\x5D\x01"
3934 "\xE2\xCD\xC8\xAA\x6C\x9D\x1C\x34"
3935 "\x39\x18\x09\xA4\x82\x59\x78\xE7"
3936 "\xFC\x59\x65\xF2\x94\xFF\xFB\xE2"
3937 "\x3C\xDA\xB1\x90\x95\xBF\x91\xE3"
3938 "\xE6\x87\x31\x9E\x16\x85\xAD\xB1"
3939 "\x4C\xAE\x43\x4D\x19\x58\xB5\x5E"
3940 "\x2E\xF5\x09\xAA\x39\xF4\xC0\xB3"
3941 "\xD4\x4D\xDB\x73\x7A\xD4\xF1\xBF"
3942 "\x89\x16\x4D\x2D\xA2\x26\x33\x72"
3943 "\x18\x33\x7E\xD6\xD2\x16\xA4\x54"
3944 "\xF4\x8C\xB3\x52\xDF\x21\x9C\xEB"
3945 "\xBF\x49\xD3\xF9\x05\x06\xCB\xD2"
3946 "\xA9\xD2\x3B\x6E\x19\x8C\xBC\x19"
3947 "\xAB\x89\xD6\xD8\xCD\x56\x89\x5E"
3948 "\xAC\x00\xE3\x50\x63\x4A\x80\x9A"
3949 "\x05\xBC\x50\x39\xD3\x32\xD9\x0D"
3950 "\xE3\x20\x0D\x75\x54\xEC\xE6\x31"
3951 "\x14\xB9\x3A\x59\x00\x43\x37\x8E"
3952 "\x8C\x5A\x79\x62\x14\x76\x8A\xAE"
3953 "\x8F\xCC\xA1\x6C\x38\x78\xDD\x2D"
3954 "\x8B\x6D\xEA\xBD\x7B\x25\xFF\x60"
3955 "\xC9\x87\xB1\x79\x1E\xA5\x86\x68"
3956 "\x81\xB4\xE2\xC1\x05\x7D\x3A\x73"
3957 "\xD0\xDA\x75\x77\x9E\x05\x27\xF1"
3958 "\x08\xA9\x66\x64\x6C\xBC\x82\x17"
3959 "\x2C\x23\x5F\x62\x4D\x02\x1A\x58"
3960 "\xE7\xB7\x23\x6D\xE2\x20\xDA\xEF"
3961 "\xB4\xB3\x3F\xB2\x2B\x69\x98\x83"
3962 "\x95\x87\x13\x57\x60\xD7\xB5\xB1"
3963 "\xEE\x0A\x2F\x95\x36\x4C\x76\x5D"
3964 "\x5F\xD9\x19\xED\xB9\xA5\x48\xBF"
3965 "\xC8\xAB\x0F\x71\xCC\x61\x8E\x0A"
3966 "\xD0\x29\x44\xA8\xB9\xC1\xE8\xC8"
3967 "\xC9\xA8\x28\x81\xFB\x50\xF2\xF0"
3968 "\x26\xAE\x39\xB8\x91\xCD\xA8\xAC"
3969 "\xDE\x55\x1B\x50\x14\x53\x44\x17"
3970 "\x54\x46\xFC\xB1\xE4\x07\x6B\x9A"
3971 "\x01\x14\xF0\x2E\x2E\xDB\x46\x1B"
3972 "\x1A\x09\x97\xA9\xB6\x97\x79\x06"
3973 "\xFB\xCB\x85\xCF\xDD\xA1\x41\xB1"
3974 "\x00\xAA\xF7\xE0\x89\x73\xFB\xE5"
3975 "\xBF\x84\xDB\xC9\xCD\xC4\xA2\x0D"
3976 "\x3B\xAC\xF9\xDF\x96\xBF\x88\x23"
3977 "\x41\x67\xA1\x24\x99\x7E\xCC\x9B"
3978 "\x02\x8F\x6A\x49\xF6\x25\xBA\x7A"
3979 "\xF4\x78\xFD\x79\x62\x63\x4F\x14"
3980 "\xD6\x11\x11\x04\x05\x5F\x7E\xEA"
3981 "\x4C\xB6\xF8\xF4\x5F\x48\x52\x54"
3982 "\x94\x63\xA8\x4E\xCF\xD2\x1B\x1B"
3983 "\x22\x18\x6A\xAF\x6E\x3E\xE1\x0D",
3984 .rlen = 496,
3985 }, { /* Generated with Crypto++ */
3986 .key = "\x85\x62\x3F\x1C\xF9\xD6\x1C\xF9"
3987 "\xD6\xB3\x90\x6D\x4A\x90\x6D\x4A"
3988 "\x27\x04\xE1\x27\x04\xE1\xBE\x9B"
3989 "\x78\xBE\x9B\x78\x55\x32\x0F\x55",
3990 .klen = 32,
3556 .iv = "\xE2\x24\x89\xEE\x53\xB8\x1D\x5F" 3991 .iv = "\xE2\x24\x89\xEE\x53\xB8\x1D\x5F"
3557 "\xC4\x29\x8E\xF3\x35\x9A\xFF\x64", 3992 "\xC4\x29\x8E\xF3\x35\x9A\xFF\x64",
3558 .input = "\x56\xED\x84\x1B\x8F\x26\xBD\x31" 3993 .input = "\x56\xED\x84\x1B\x8F\x26\xBD\x31"
@@ -3683,6 +4118,9 @@ static struct cipher_testvec tf_ctr_enc_tv_template[] = {
3683 "\xC5\xC9\x7F\x9E\xCF\x33\x7A\xDF" 4118 "\xC5\xC9\x7F\x9E\xCF\x33\x7A\xDF"
3684 "\x6C\x82\x9D", 4119 "\x6C\x82\x9D",
3685 .rlen = 499, 4120 .rlen = 499,
4121 .also_non_np = 1,
4122 .np = 2,
4123 .tap = { 499 - 16, 16 },
3686 }, 4124 },
3687}; 4125};
3688 4126
@@ -3827,6 +4265,140 @@ static struct cipher_testvec tf_ctr_dec_tv_template[] = {
3827 "\x27\x04\xE1\x27\x04\xE1\xBE\x9B" 4265 "\x27\x04\xE1\x27\x04\xE1\xBE\x9B"
3828 "\x78\xBE\x9B\x78\x55\x32\x0F\x55", 4266 "\x78\xBE\x9B\x78\x55\x32\x0F\x55",
3829 .klen = 32, 4267 .klen = 32,
4268 .iv = "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
4269 "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFD",
4270 .input = "\xEB\x44\xAF\x49\x27\xB8\xFB\x44"
4271 "\x4C\xA6\xC3\x0C\x8B\xD0\x01\x0C"
4272 "\x53\xC8\x16\x38\xDE\x40\x4F\x91"
4273 "\x25\x6D\x4C\xA0\x9A\x87\x1E\xDA"
4274 "\x88\x7E\x89\xE9\x67\x2B\x83\xA2"
4275 "\x5F\x2E\x23\x3E\x45\xB9\x77\x7B"
4276 "\xA6\x7E\x47\x36\x81\x9F\x9B\xF3"
4277 "\xE0\xF0\xD7\x47\xA9\xC8\xEF\x33"
4278 "\x0C\x43\xFE\x67\x50\x0A\x2C\x3E"
4279 "\xA0\xE1\x25\x8E\x80\x07\x4A\xC0"
4280 "\x64\x89\x9F\x6A\x27\x96\x07\xA6"
4281 "\x9B\xC8\x1B\x21\x60\xAE\x5D\x01"
4282 "\xE2\xCD\xC8\xAA\x6C\x9D\x1C\x34"
4283 "\x39\x18\x09\xA4\x82\x59\x78\xE7"
4284 "\xFC\x59\x65\xF2\x94\xFF\xFB\xE2"
4285 "\x3C\xDA\xB1\x90\x95\xBF\x91\xE3"
4286 "\xE6\x87\x31\x9E\x16\x85\xAD\xB1"
4287 "\x4C\xAE\x43\x4D\x19\x58\xB5\x5E"
4288 "\x2E\xF5\x09\xAA\x39\xF4\xC0\xB3"
4289 "\xD4\x4D\xDB\x73\x7A\xD4\xF1\xBF"
4290 "\x89\x16\x4D\x2D\xA2\x26\x33\x72"
4291 "\x18\x33\x7E\xD6\xD2\x16\xA4\x54"
4292 "\xF4\x8C\xB3\x52\xDF\x21\x9C\xEB"
4293 "\xBF\x49\xD3\xF9\x05\x06\xCB\xD2"
4294 "\xA9\xD2\x3B\x6E\x19\x8C\xBC\x19"
4295 "\xAB\x89\xD6\xD8\xCD\x56\x89\x5E"
4296 "\xAC\x00\xE3\x50\x63\x4A\x80\x9A"
4297 "\x05\xBC\x50\x39\xD3\x32\xD9\x0D"
4298 "\xE3\x20\x0D\x75\x54\xEC\xE6\x31"
4299 "\x14\xB9\x3A\x59\x00\x43\x37\x8E"
4300 "\x8C\x5A\x79\x62\x14\x76\x8A\xAE"
4301 "\x8F\xCC\xA1\x6C\x38\x78\xDD\x2D"
4302 "\x8B\x6D\xEA\xBD\x7B\x25\xFF\x60"
4303 "\xC9\x87\xB1\x79\x1E\xA5\x86\x68"
4304 "\x81\xB4\xE2\xC1\x05\x7D\x3A\x73"
4305 "\xD0\xDA\x75\x77\x9E\x05\x27\xF1"
4306 "\x08\xA9\x66\x64\x6C\xBC\x82\x17"
4307 "\x2C\x23\x5F\x62\x4D\x02\x1A\x58"
4308 "\xE7\xB7\x23\x6D\xE2\x20\xDA\xEF"
4309 "\xB4\xB3\x3F\xB2\x2B\x69\x98\x83"
4310 "\x95\x87\x13\x57\x60\xD7\xB5\xB1"
4311 "\xEE\x0A\x2F\x95\x36\x4C\x76\x5D"
4312 "\x5F\xD9\x19\xED\xB9\xA5\x48\xBF"
4313 "\xC8\xAB\x0F\x71\xCC\x61\x8E\x0A"
4314 "\xD0\x29\x44\xA8\xB9\xC1\xE8\xC8"
4315 "\xC9\xA8\x28\x81\xFB\x50\xF2\xF0"
4316 "\x26\xAE\x39\xB8\x91\xCD\xA8\xAC"
4317 "\xDE\x55\x1B\x50\x14\x53\x44\x17"
4318 "\x54\x46\xFC\xB1\xE4\x07\x6B\x9A"
4319 "\x01\x14\xF0\x2E\x2E\xDB\x46\x1B"
4320 "\x1A\x09\x97\xA9\xB6\x97\x79\x06"
4321 "\xFB\xCB\x85\xCF\xDD\xA1\x41\xB1"
4322 "\x00\xAA\xF7\xE0\x89\x73\xFB\xE5"
4323 "\xBF\x84\xDB\xC9\xCD\xC4\xA2\x0D"
4324 "\x3B\xAC\xF9\xDF\x96\xBF\x88\x23"
4325 "\x41\x67\xA1\x24\x99\x7E\xCC\x9B"
4326 "\x02\x8F\x6A\x49\xF6\x25\xBA\x7A"
4327 "\xF4\x78\xFD\x79\x62\x63\x4F\x14"
4328 "\xD6\x11\x11\x04\x05\x5F\x7E\xEA"
4329 "\x4C\xB6\xF8\xF4\x5F\x48\x52\x54"
4330 "\x94\x63\xA8\x4E\xCF\xD2\x1B\x1B"
4331 "\x22\x18\x6A\xAF\x6E\x3E\xE1\x0D",
4332 .ilen = 496,
4333 .result = "\x56\xED\x84\x1B\x8F\x26\xBD\x31"
4334 "\xC8\x5F\xF6\x6A\x01\x98\x0C\xA3"
4335 "\x3A\xD1\x45\xDC\x73\x0A\x7E\x15"
4336 "\xAC\x20\xB7\x4E\xE5\x59\xF0\x87"
4337 "\x1E\x92\x29\xC0\x34\xCB\x62\xF9"
4338 "\x6D\x04\x9B\x0F\xA6\x3D\xD4\x48"
4339 "\xDF\x76\x0D\x81\x18\xAF\x23\xBA"
4340 "\x51\xE8\x5C\xF3\x8A\x21\x95\x2C"
4341 "\xC3\x37\xCE\x65\xFC\x70\x07\x9E"
4342 "\x12\xA9\x40\xD7\x4B\xE2\x79\x10"
4343 "\x84\x1B\xB2\x26\xBD\x54\xEB\x5F"
4344 "\xF6\x8D\x01\x98\x2F\xC6\x3A\xD1"
4345 "\x68\xFF\x73\x0A\xA1\x15\xAC\x43"
4346 "\xDA\x4E\xE5\x7C\x13\x87\x1E\xB5"
4347 "\x29\xC0\x57\xEE\x62\xF9\x90\x04"
4348 "\x9B\x32\xC9\x3D\xD4\x6B\x02\x76"
4349 "\x0D\xA4\x18\xAF\x46\xDD\x51\xE8"
4350 "\x7F\x16\x8A\x21\xB8\x2C\xC3\x5A"
4351 "\xF1\x65\xFC\x93\x07\x9E\x35\xCC"
4352 "\x40\xD7\x6E\x05\x79\x10\xA7\x1B"
4353 "\xB2\x49\xE0\x54\xEB\x82\x19\x8D"
4354 "\x24\xBB\x2F\xC6\x5D\xF4\x68\xFF"
4355 "\x96\x0A\xA1\x38\xCF\x43\xDA\x71"
4356 "\x08\x7C\x13\xAA\x1E\xB5\x4C\xE3"
4357 "\x57\xEE\x85\x1C\x90\x27\xBE\x32"
4358 "\xC9\x60\xF7\x6B\x02\x99\x0D\xA4"
4359 "\x3B\xD2\x46\xDD\x74\x0B\x7F\x16"
4360 "\xAD\x21\xB8\x4F\xE6\x5A\xF1\x88"
4361 "\x1F\x93\x2A\xC1\x35\xCC\x63\xFA"
4362 "\x6E\x05\x9C\x10\xA7\x3E\xD5\x49"
4363 "\xE0\x77\x0E\x82\x19\xB0\x24\xBB"
4364 "\x52\xE9\x5D\xF4\x8B\x22\x96\x2D"
4365 "\xC4\x38\xCF\x66\xFD\x71\x08\x9F"
4366 "\x13\xAA\x41\xD8\x4C\xE3\x7A\x11"
4367 "\x85\x1C\xB3\x27\xBE\x55\xEC\x60"
4368 "\xF7\x8E\x02\x99\x30\xC7\x3B\xD2"
4369 "\x69\x00\x74\x0B\xA2\x16\xAD\x44"
4370 "\xDB\x4F\xE6\x7D\x14\x88\x1F\xB6"
4371 "\x2A\xC1\x58\xEF\x63\xFA\x91\x05"
4372 "\x9C\x33\xCA\x3E\xD5\x6C\x03\x77"
4373 "\x0E\xA5\x19\xB0\x47\xDE\x52\xE9"
4374 "\x80\x17\x8B\x22\xB9\x2D\xC4\x5B"
4375 "\xF2\x66\xFD\x94\x08\x9F\x36\xCD"
4376 "\x41\xD8\x6F\x06\x7A\x11\xA8\x1C"
4377 "\xB3\x4A\xE1\x55\xEC\x83\x1A\x8E"
4378 "\x25\xBC\x30\xC7\x5E\xF5\x69\x00"
4379 "\x97\x0B\xA2\x39\xD0\x44\xDB\x72"
4380 "\x09\x7D\x14\xAB\x1F\xB6\x4D\xE4"
4381 "\x58\xEF\x86\x1D\x91\x28\xBF\x33"
4382 "\xCA\x61\xF8\x6C\x03\x9A\x0E\xA5"
4383 "\x3C\xD3\x47\xDE\x75\x0C\x80\x17"
4384 "\xAE\x22\xB9\x50\xE7\x5B\xF2\x89"
4385 "\x20\x94\x2B\xC2\x36\xCD\x64\xFB"
4386 "\x6F\x06\x9D\x11\xA8\x3F\xD6\x4A"
4387 "\xE1\x78\x0F\x83\x1A\xB1\x25\xBC"
4388 "\x53\xEA\x5E\xF5\x8C\x00\x97\x2E"
4389 "\xC5\x39\xD0\x67\xFE\x72\x09\xA0"
4390 "\x14\xAB\x42\xD9\x4D\xE4\x7B\x12"
4391 "\x86\x1D\xB4\x28\xBF\x56\xED\x61"
4392 "\xF8\x8F\x03\x9A\x31\xC8\x3C\xD3"
4393 "\x6A\x01\x75\x0C\xA3\x17\xAE\x45"
4394 "\xDC\x50\xE7\x7E\x15\x89\x20\xB7",
4395 .rlen = 496,
4396 }, { /* Generated with Crypto++ */
4397 .key = "\x85\x62\x3F\x1C\xF9\xD6\x1C\xF9"
4398 "\xD6\xB3\x90\x6D\x4A\x90\x6D\x4A"
4399 "\x27\x04\xE1\x27\x04\xE1\xBE\x9B"
4400 "\x78\xBE\x9B\x78\x55\x32\x0F\x55",
4401 .klen = 32,
3830 .iv = "\xE2\x24\x89\xEE\x53\xB8\x1D\x5F" 4402 .iv = "\xE2\x24\x89\xEE\x53\xB8\x1D\x5F"
3831 "\xC4\x29\x8E\xF3\x35\x9A\xFF\x64", 4403 "\xC4\x29\x8E\xF3\x35\x9A\xFF\x64",
3832 .input = "\xDF\xDD\x69\xFA\xB0\x2E\xFD\xFE" 4404 .input = "\xDF\xDD\x69\xFA\xB0\x2E\xFD\xFE"
@@ -3957,6 +4529,9 @@ static struct cipher_testvec tf_ctr_dec_tv_template[] = {
3957 "\xDC\x50\xE7\x7E\x15\x89\x20\xB7" 4529 "\xDC\x50\xE7\x7E\x15\x89\x20\xB7"
3958 "\x2B\xC2\x59", 4530 "\x2B\xC2\x59",
3959 .rlen = 499, 4531 .rlen = 499,
4532 .also_non_np = 1,
4533 .np = 2,
4534 .tap = { 499 - 16, 16 },
3960 }, 4535 },
3961}; 4536};
3962 4537
@@ -4206,6 +4781,9 @@ static struct cipher_testvec tf_lrw_enc_tv_template[] = {
4206 "\x80\x18\xc4\x6c\x03\xd3\xb7\xba" 4781 "\x80\x18\xc4\x6c\x03\xd3\xb7\xba"
4207 "\x11\xd7\xb8\x6e\xea\xe1\x80\x30", 4782 "\x11\xd7\xb8\x6e\xea\xe1\x80\x30",
4208 .rlen = 512, 4783 .rlen = 512,
4784 .also_non_np = 1,
4785 .np = 2,
4786 .tap = { 512 - 16, 16 },
4209 }, 4787 },
4210}; 4788};
4211 4789
@@ -4456,6 +5034,9 @@ static struct cipher_testvec tf_lrw_dec_tv_template[] = {
4456 "\xe9\x2e\xc4\x29\x0f\x84\xdb\xc4" 5034 "\xe9\x2e\xc4\x29\x0f\x84\xdb\xc4"
4457 "\x21\xc4\xc2\x75\x67\x89\x37\x0a", 5035 "\x21\xc4\xc2\x75\x67\x89\x37\x0a",
4458 .rlen = 512, 5036 .rlen = 512,
5037 .also_non_np = 1,
5038 .np = 2,
5039 .tap = { 512 - 16, 16 },
4459 }, 5040 },
4460}; 5041};
4461 5042
@@ -4795,6 +5376,9 @@ static struct cipher_testvec tf_xts_enc_tv_template[] = {
4795 "\xa4\x05\x0b\xb2\xb3\xa8\x30\x97" 5376 "\xa4\x05\x0b\xb2\xb3\xa8\x30\x97"
4796 "\x37\x30\xe1\x91\x8d\xb3\x2a\xff", 5377 "\x37\x30\xe1\x91\x8d\xb3\x2a\xff",
4797 .rlen = 512, 5378 .rlen = 512,
5379 .also_non_np = 1,
5380 .np = 2,
5381 .tap = { 512 - 16, 16 },
4798 }, 5382 },
4799}; 5383};
4800 5384
@@ -5135,6 +5719,9 @@ static struct cipher_testvec tf_xts_dec_tv_template[] = {
5135 "\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7" 5719 "\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7"
5136 "\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff", 5720 "\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff",
5137 .rlen = 512, 5721 .rlen = 512,
5722 .also_non_np = 1,
5723 .np = 2,
5724 .tap = { 512 - 16, 16 },
5138 }, 5725 },
5139}; 5726};
5140 5727
@@ -5242,6 +5829,9 @@ static struct cipher_testvec serpent_enc_tv_template[] = {
5242 "\x30\xD4\x2C\xF2\x8E\x06\x4B\x39" 5829 "\x30\xD4\x2C\xF2\x8E\x06\x4B\x39"
5243 "\xB3\x12\x1D\xB3\x17\x46\xE6\xD6", 5830 "\xB3\x12\x1D\xB3\x17\x46\xE6\xD6",
5244 .rlen = 144, 5831 .rlen = 144,
5832 .also_non_np = 1,
5833 .np = 2,
5834 .tap = { 144 - 16, 16 },
5245 }, 5835 },
5246}; 5836};
5247 5837
@@ -5377,6 +5967,9 @@ static struct cipher_testvec serpent_dec_tv_template[] = {
5377 "\x0D\xA4\x18\xAF\x46\xDD\x51\xE8" 5967 "\x0D\xA4\x18\xAF\x46\xDD\x51\xE8"
5378 "\x7F\x16\x8A\x21\xB8\x2C\xC3\x5A", 5968 "\x7F\x16\x8A\x21\xB8\x2C\xC3\x5A",
5379 .rlen = 144, 5969 .rlen = 144,
5970 .also_non_np = 1,
5971 .np = 2,
5972 .tap = { 144 - 16, 16 },
5380 }, 5973 },
5381}; 5974};
5382 5975
@@ -5468,6 +6061,9 @@ static struct cipher_testvec serpent_cbc_enc_tv_template[] = {
5468 "\x27\xDF\x89\x1D\x86\x3E\xF7\x5A" 6061 "\x27\xDF\x89\x1D\x86\x3E\xF7\x5A"
5469 "\xF6\xE3\x0F\xC7\x6B\x4C\x96\x7C", 6062 "\xF6\xE3\x0F\xC7\x6B\x4C\x96\x7C",
5470 .rlen = 144, 6063 .rlen = 144,
6064 .also_non_np = 1,
6065 .np = 2,
6066 .tap = { 144 - 16, 16 },
5471 }, 6067 },
5472}; 6068};
5473 6069
@@ -5518,6 +6114,9 @@ static struct cipher_testvec serpent_cbc_dec_tv_template[] = {
5518 "\x0D\xA4\x18\xAF\x46\xDD\x51\xE8" 6114 "\x0D\xA4\x18\xAF\x46\xDD\x51\xE8"
5519 "\x7F\x16\x8A\x21\xB8\x2C\xC3\x5A", 6115 "\x7F\x16\x8A\x21\xB8\x2C\xC3\x5A",
5520 .rlen = 144, 6116 .rlen = 144,
6117 .also_non_np = 1,
6118 .np = 2,
6119 .tap = { 144 - 16, 16 },
5521 }, 6120 },
5522}; 6121};
5523 6122
@@ -5616,6 +6215,143 @@ static struct cipher_testvec serpent_ctr_enc_tv_template[] = {
5616 "\x5D\xE1\x4F\xA1\xEA\xB3\xCA\xB9" 6215 "\x5D\xE1\x4F\xA1\xEA\xB3\xCA\xB9"
5617 "\xE6\xD0\x97", 6216 "\xE6\xD0\x97",
5618 .rlen = 147, 6217 .rlen = 147,
6218 .also_non_np = 1,
6219 .np = 2,
6220 .tap = { 147 - 16, 16 },
6221 }, { /* Generated with Crypto++ */
6222 .key = "\x85\x62\x3F\x1C\xF9\xD6\x1C\xF9"
6223 "\xD6\xB3\x90\x6D\x4A\x90\x6D\x4A"
6224 "\x27\x04\xE1\x27\x04\xE1\xBE\x9B"
6225 "\x78\xBE\x9B\x78\x55\x32\x0F\x55",
6226 .klen = 32,
6227 .iv = "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
6228 "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFD",
6229 .input = "\x56\xED\x84\x1B\x8F\x26\xBD\x31"
6230 "\xC8\x5F\xF6\x6A\x01\x98\x0C\xA3"
6231 "\x3A\xD1\x45\xDC\x73\x0A\x7E\x15"
6232 "\xAC\x20\xB7\x4E\xE5\x59\xF0\x87"
6233 "\x1E\x92\x29\xC0\x34\xCB\x62\xF9"
6234 "\x6D\x04\x9B\x0F\xA6\x3D\xD4\x48"
6235 "\xDF\x76\x0D\x81\x18\xAF\x23\xBA"
6236 "\x51\xE8\x5C\xF3\x8A\x21\x95\x2C"
6237 "\xC3\x37\xCE\x65\xFC\x70\x07\x9E"
6238 "\x12\xA9\x40\xD7\x4B\xE2\x79\x10"
6239 "\x84\x1B\xB2\x26\xBD\x54\xEB\x5F"
6240 "\xF6\x8D\x01\x98\x2F\xC6\x3A\xD1"
6241 "\x68\xFF\x73\x0A\xA1\x15\xAC\x43"
6242 "\xDA\x4E\xE5\x7C\x13\x87\x1E\xB5"
6243 "\x29\xC0\x57\xEE\x62\xF9\x90\x04"
6244 "\x9B\x32\xC9\x3D\xD4\x6B\x02\x76"
6245 "\x0D\xA4\x18\xAF\x46\xDD\x51\xE8"
6246 "\x7F\x16\x8A\x21\xB8\x2C\xC3\x5A"
6247 "\xF1\x65\xFC\x93\x07\x9E\x35\xCC"
6248 "\x40\xD7\x6E\x05\x79\x10\xA7\x1B"
6249 "\xB2\x49\xE0\x54\xEB\x82\x19\x8D"
6250 "\x24\xBB\x2F\xC6\x5D\xF4\x68\xFF"
6251 "\x96\x0A\xA1\x38\xCF\x43\xDA\x71"
6252 "\x08\x7C\x13\xAA\x1E\xB5\x4C\xE3"
6253 "\x57\xEE\x85\x1C\x90\x27\xBE\x32"
6254 "\xC9\x60\xF7\x6B\x02\x99\x0D\xA4"
6255 "\x3B\xD2\x46\xDD\x74\x0B\x7F\x16"
6256 "\xAD\x21\xB8\x4F\xE6\x5A\xF1\x88"
6257 "\x1F\x93\x2A\xC1\x35\xCC\x63\xFA"
6258 "\x6E\x05\x9C\x10\xA7\x3E\xD5\x49"
6259 "\xE0\x77\x0E\x82\x19\xB0\x24\xBB"
6260 "\x52\xE9\x5D\xF4\x8B\x22\x96\x2D"
6261 "\xC4\x38\xCF\x66\xFD\x71\x08\x9F"
6262 "\x13\xAA\x41\xD8\x4C\xE3\x7A\x11"
6263 "\x85\x1C\xB3\x27\xBE\x55\xEC\x60"
6264 "\xF7\x8E\x02\x99\x30\xC7\x3B\xD2"
6265 "\x69\x00\x74\x0B\xA2\x16\xAD\x44"
6266 "\xDB\x4F\xE6\x7D\x14\x88\x1F\xB6"
6267 "\x2A\xC1\x58\xEF\x63\xFA\x91\x05"
6268 "\x9C\x33\xCA\x3E\xD5\x6C\x03\x77"
6269 "\x0E\xA5\x19\xB0\x47\xDE\x52\xE9"
6270 "\x80\x17\x8B\x22\xB9\x2D\xC4\x5B"
6271 "\xF2\x66\xFD\x94\x08\x9F\x36\xCD"
6272 "\x41\xD8\x6F\x06\x7A\x11\xA8\x1C"
6273 "\xB3\x4A\xE1\x55\xEC\x83\x1A\x8E"
6274 "\x25\xBC\x30\xC7\x5E\xF5\x69\x00"
6275 "\x97\x0B\xA2\x39\xD0\x44\xDB\x72"
6276 "\x09\x7D\x14\xAB\x1F\xB6\x4D\xE4"
6277 "\x58\xEF\x86\x1D\x91\x28\xBF\x33"
6278 "\xCA\x61\xF8\x6C\x03\x9A\x0E\xA5"
6279 "\x3C\xD3\x47\xDE\x75\x0C\x80\x17"
6280 "\xAE\x22\xB9\x50\xE7\x5B\xF2\x89"
6281 "\x20\x94\x2B\xC2\x36\xCD\x64\xFB"
6282 "\x6F\x06\x9D\x11\xA8\x3F\xD6\x4A"
6283 "\xE1\x78\x0F\x83\x1A\xB1\x25\xBC"
6284 "\x53\xEA\x5E\xF5\x8C\x00\x97\x2E"
6285 "\xC5\x39\xD0\x67\xFE\x72\x09\xA0"
6286 "\x14\xAB\x42\xD9\x4D\xE4\x7B\x12"
6287 "\x86\x1D\xB4\x28\xBF\x56\xED\x61"
6288 "\xF8\x8F\x03\x9A\x31\xC8\x3C\xD3"
6289 "\x6A\x01\x75\x0C\xA3\x17\xAE\x45"
6290 "\xDC\x50\xE7\x7E\x15\x89\x20\xB7",
6291 .ilen = 496,
6292 .result = "\x06\x9A\xF8\xB4\x53\x88\x62\xFC"
6293 "\x68\xB8\x2E\xDF\xC1\x05\x0F\x3D"
6294 "\xAF\x4D\x95\xAE\xC4\xE9\x1C\xDC"
6295 "\xF6\x2B\x8F\x90\x89\xF6\x7E\x1A"
6296 "\xA6\xB9\xE4\xF4\xFA\xCA\xE5\x7E"
6297 "\x71\x28\x06\x4F\xE8\x08\x39\xDA"
6298 "\xA5\x0E\xC8\xC0\xB8\x16\xE5\x69"
6299 "\xE5\xCA\xEC\x4F\x63\x2C\xC0\x9B"
6300 "\x9F\x3E\x39\x79\xF0\xCD\x64\x35"
6301 "\x4A\xD3\xC8\xA9\x31\xCD\x48\x5B"
6302 "\x92\x3D\x8F\x3F\x96\xBD\xB3\x18"
6303 "\x74\x2A\x5D\x29\x3F\x57\x8F\xE2"
6304 "\x67\x9A\xE0\xE5\xD4\x4A\xE2\x47"
6305 "\xBC\xF6\xEB\x14\xF3\x8C\x20\xC2"
6306 "\x7D\xE2\x43\x81\x86\x72\x2E\xB1"
6307 "\x39\xF6\x95\xE1\x1F\xCB\x76\x33"
6308 "\x5B\x7D\x23\x0F\x3A\x67\x2A\x2F"
6309 "\xB9\x37\x9D\xDD\x1F\x16\xA1\x3C"
6310 "\x70\xFE\x52\xAA\x93\x3C\xC4\x46"
6311 "\xB1\xE5\xFF\xDA\xAF\xE2\x84\xFE"
6312 "\x25\x92\xB2\x63\xBD\x49\x77\xB4"
6313 "\x22\xA4\x6A\xD5\x04\xE0\x45\x58"
6314 "\x1C\x34\x96\x7C\x03\x0C\x13\xA2"
6315 "\x05\x22\xE2\xCB\x5A\x35\x03\x09"
6316 "\x40\xD2\x82\x05\xCA\x58\x73\xF2"
6317 "\x29\x5E\x01\x47\x13\x32\x78\xBE"
6318 "\x06\xB0\x51\xDB\x6C\x31\xA0\x1C"
6319 "\x74\xBC\x8D\x25\xDF\xF8\x65\xD1"
6320 "\x38\x35\x11\x26\x4A\xB4\x06\x32"
6321 "\xFA\xD2\x07\x77\xB3\x74\x98\x80"
6322 "\x61\x59\xA8\x9F\xF3\x6F\x2A\xBF"
6323 "\xE6\xA5\x9A\xC4\x6B\xA6\x49\x6F"
6324 "\xBC\x47\xD9\xFB\xC6\xEF\x25\x65"
6325 "\x96\xAC\x9F\xE4\x81\x4B\xD8\xBA"
6326 "\xD6\x9B\xC9\x6D\x58\x40\x81\x02"
6327 "\x73\x44\x4E\x43\x6E\x37\xBB\x11"
6328 "\xE3\xF9\xB8\x2F\xEC\x76\x34\xEA"
6329 "\x90\xCD\xB7\x2E\x0E\x32\x71\xE8"
6330 "\xBB\x4E\x0B\x98\xA4\x17\x17\x5B"
6331 "\x07\xB5\x82\x3A\xC4\xE8\x42\x51"
6332 "\x5A\x4C\x4E\x7D\xBF\xC4\xC0\x4F"
6333 "\x68\xB8\xC6\x4A\x32\x6F\x0B\xD7"
6334 "\x85\xED\x6B\xFB\x72\xD2\xA5\x8F"
6335 "\xBF\xF9\xAC\x59\x50\xA8\x08\x70"
6336 "\xEC\xBD\x0A\xBF\xE5\x87\xA1\xC2"
6337 "\x92\x14\x78\xAF\xE8\xEA\x2E\xDD"
6338 "\xC1\x03\x9A\xAA\x89\x8B\x32\x46"
6339 "\x5B\x18\x27\xBA\x46\xAA\x64\xDE"
6340 "\xE3\xD5\xA3\xFC\x7B\x5B\x61\xDB"
6341 "\x7E\xDA\xEC\x30\x17\x19\xF8\x80"
6342 "\xB5\x5E\x27\xB5\x37\x3A\x1F\x28"
6343 "\x07\x73\xC3\x63\xCE\xFF\x8C\xFE"
6344 "\x81\x4E\xF8\x24\xF3\xB8\xC7\xE8"
6345 "\x16\x9A\xCC\x58\x2F\x88\x1C\x4B"
6346 "\xBB\x33\xA2\x73\xF0\x1C\x89\x0E"
6347 "\xDC\x34\x27\x89\x98\xCE\x1C\xA2"
6348 "\xD8\xB8\x90\xBE\xEC\x72\x28\x13"
6349 "\xAC\x7B\xF1\xD0\x7F\x7A\x28\x50"
6350 "\xB7\x99\x65\x8A\xC9\xC6\x21\x34"
6351 "\x7F\x67\x9D\xB7\x2C\xCC\xF5\x17"
6352 "\x2B\x89\xAC\xB0\xD7\x1E\x47\xB0"
6353 "\x61\xAF\xD4\x63\x6D\xB8\x2D\x20",
6354 .rlen = 496,
5619 }, 6355 },
5620}; 6356};
5621 6357
@@ -5714,6 +6450,143 @@ static struct cipher_testvec serpent_ctr_dec_tv_template[] = {
5714 "\x7F\x16\x8A\x21\xB8\x2C\xC3\x5A" 6450 "\x7F\x16\x8A\x21\xB8\x2C\xC3\x5A"
5715 "\xF1\x65\xFC", 6451 "\xF1\x65\xFC",
5716 .rlen = 147, 6452 .rlen = 147,
6453 .also_non_np = 1,
6454 .np = 2,
6455 .tap = { 147 - 16, 16 },
6456 }, { /* Generated with Crypto++ */
6457 .key = "\x85\x62\x3F\x1C\xF9\xD6\x1C\xF9"
6458 "\xD6\xB3\x90\x6D\x4A\x90\x6D\x4A"
6459 "\x27\x04\xE1\x27\x04\xE1\xBE\x9B"
6460 "\x78\xBE\x9B\x78\x55\x32\x0F\x55",
6461 .klen = 32,
6462 .iv = "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
6463 "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFD",
6464 .input = "\x06\x9A\xF8\xB4\x53\x88\x62\xFC"
6465 "\x68\xB8\x2E\xDF\xC1\x05\x0F\x3D"
6466 "\xAF\x4D\x95\xAE\xC4\xE9\x1C\xDC"
6467 "\xF6\x2B\x8F\x90\x89\xF6\x7E\x1A"
6468 "\xA6\xB9\xE4\xF4\xFA\xCA\xE5\x7E"
6469 "\x71\x28\x06\x4F\xE8\x08\x39\xDA"
6470 "\xA5\x0E\xC8\xC0\xB8\x16\xE5\x69"
6471 "\xE5\xCA\xEC\x4F\x63\x2C\xC0\x9B"
6472 "\x9F\x3E\x39\x79\xF0\xCD\x64\x35"
6473 "\x4A\xD3\xC8\xA9\x31\xCD\x48\x5B"
6474 "\x92\x3D\x8F\x3F\x96\xBD\xB3\x18"
6475 "\x74\x2A\x5D\x29\x3F\x57\x8F\xE2"
6476 "\x67\x9A\xE0\xE5\xD4\x4A\xE2\x47"
6477 "\xBC\xF6\xEB\x14\xF3\x8C\x20\xC2"
6478 "\x7D\xE2\x43\x81\x86\x72\x2E\xB1"
6479 "\x39\xF6\x95\xE1\x1F\xCB\x76\x33"
6480 "\x5B\x7D\x23\x0F\x3A\x67\x2A\x2F"
6481 "\xB9\x37\x9D\xDD\x1F\x16\xA1\x3C"
6482 "\x70\xFE\x52\xAA\x93\x3C\xC4\x46"
6483 "\xB1\xE5\xFF\xDA\xAF\xE2\x84\xFE"
6484 "\x25\x92\xB2\x63\xBD\x49\x77\xB4"
6485 "\x22\xA4\x6A\xD5\x04\xE0\x45\x58"
6486 "\x1C\x34\x96\x7C\x03\x0C\x13\xA2"
6487 "\x05\x22\xE2\xCB\x5A\x35\x03\x09"
6488 "\x40\xD2\x82\x05\xCA\x58\x73\xF2"
6489 "\x29\x5E\x01\x47\x13\x32\x78\xBE"
6490 "\x06\xB0\x51\xDB\x6C\x31\xA0\x1C"
6491 "\x74\xBC\x8D\x25\xDF\xF8\x65\xD1"
6492 "\x38\x35\x11\x26\x4A\xB4\x06\x32"
6493 "\xFA\xD2\x07\x77\xB3\x74\x98\x80"
6494 "\x61\x59\xA8\x9F\xF3\x6F\x2A\xBF"
6495 "\xE6\xA5\x9A\xC4\x6B\xA6\x49\x6F"
6496 "\xBC\x47\xD9\xFB\xC6\xEF\x25\x65"
6497 "\x96\xAC\x9F\xE4\x81\x4B\xD8\xBA"
6498 "\xD6\x9B\xC9\x6D\x58\x40\x81\x02"
6499 "\x73\x44\x4E\x43\x6E\x37\xBB\x11"
6500 "\xE3\xF9\xB8\x2F\xEC\x76\x34\xEA"
6501 "\x90\xCD\xB7\x2E\x0E\x32\x71\xE8"
6502 "\xBB\x4E\x0B\x98\xA4\x17\x17\x5B"
6503 "\x07\xB5\x82\x3A\xC4\xE8\x42\x51"
6504 "\x5A\x4C\x4E\x7D\xBF\xC4\xC0\x4F"
6505 "\x68\xB8\xC6\x4A\x32\x6F\x0B\xD7"
6506 "\x85\xED\x6B\xFB\x72\xD2\xA5\x8F"
6507 "\xBF\xF9\xAC\x59\x50\xA8\x08\x70"
6508 "\xEC\xBD\x0A\xBF\xE5\x87\xA1\xC2"
6509 "\x92\x14\x78\xAF\xE8\xEA\x2E\xDD"
6510 "\xC1\x03\x9A\xAA\x89\x8B\x32\x46"
6511 "\x5B\x18\x27\xBA\x46\xAA\x64\xDE"
6512 "\xE3\xD5\xA3\xFC\x7B\x5B\x61\xDB"
6513 "\x7E\xDA\xEC\x30\x17\x19\xF8\x80"
6514 "\xB5\x5E\x27\xB5\x37\x3A\x1F\x28"
6515 "\x07\x73\xC3\x63\xCE\xFF\x8C\xFE"
6516 "\x81\x4E\xF8\x24\xF3\xB8\xC7\xE8"
6517 "\x16\x9A\xCC\x58\x2F\x88\x1C\x4B"
6518 "\xBB\x33\xA2\x73\xF0\x1C\x89\x0E"
6519 "\xDC\x34\x27\x89\x98\xCE\x1C\xA2"
6520 "\xD8\xB8\x90\xBE\xEC\x72\x28\x13"
6521 "\xAC\x7B\xF1\xD0\x7F\x7A\x28\x50"
6522 "\xB7\x99\x65\x8A\xC9\xC6\x21\x34"
6523 "\x7F\x67\x9D\xB7\x2C\xCC\xF5\x17"
6524 "\x2B\x89\xAC\xB0\xD7\x1E\x47\xB0"
6525 "\x61\xAF\xD4\x63\x6D\xB8\x2D\x20",
6526 .ilen = 496,
6527 .result = "\x56\xED\x84\x1B\x8F\x26\xBD\x31"
6528 "\xC8\x5F\xF6\x6A\x01\x98\x0C\xA3"
6529 "\x3A\xD1\x45\xDC\x73\x0A\x7E\x15"
6530 "\xAC\x20\xB7\x4E\xE5\x59\xF0\x87"
6531 "\x1E\x92\x29\xC0\x34\xCB\x62\xF9"
6532 "\x6D\x04\x9B\x0F\xA6\x3D\xD4\x48"
6533 "\xDF\x76\x0D\x81\x18\xAF\x23\xBA"
6534 "\x51\xE8\x5C\xF3\x8A\x21\x95\x2C"
6535 "\xC3\x37\xCE\x65\xFC\x70\x07\x9E"
6536 "\x12\xA9\x40\xD7\x4B\xE2\x79\x10"
6537 "\x84\x1B\xB2\x26\xBD\x54\xEB\x5F"
6538 "\xF6\x8D\x01\x98\x2F\xC6\x3A\xD1"
6539 "\x68\xFF\x73\x0A\xA1\x15\xAC\x43"
6540 "\xDA\x4E\xE5\x7C\x13\x87\x1E\xB5"
6541 "\x29\xC0\x57\xEE\x62\xF9\x90\x04"
6542 "\x9B\x32\xC9\x3D\xD4\x6B\x02\x76"
6543 "\x0D\xA4\x18\xAF\x46\xDD\x51\xE8"
6544 "\x7F\x16\x8A\x21\xB8\x2C\xC3\x5A"
6545 "\xF1\x65\xFC\x93\x07\x9E\x35\xCC"
6546 "\x40\xD7\x6E\x05\x79\x10\xA7\x1B"
6547 "\xB2\x49\xE0\x54\xEB\x82\x19\x8D"
6548 "\x24\xBB\x2F\xC6\x5D\xF4\x68\xFF"
6549 "\x96\x0A\xA1\x38\xCF\x43\xDA\x71"
6550 "\x08\x7C\x13\xAA\x1E\xB5\x4C\xE3"
6551 "\x57\xEE\x85\x1C\x90\x27\xBE\x32"
6552 "\xC9\x60\xF7\x6B\x02\x99\x0D\xA4"
6553 "\x3B\xD2\x46\xDD\x74\x0B\x7F\x16"
6554 "\xAD\x21\xB8\x4F\xE6\x5A\xF1\x88"
6555 "\x1F\x93\x2A\xC1\x35\xCC\x63\xFA"
6556 "\x6E\x05\x9C\x10\xA7\x3E\xD5\x49"
6557 "\xE0\x77\x0E\x82\x19\xB0\x24\xBB"
6558 "\x52\xE9\x5D\xF4\x8B\x22\x96\x2D"
6559 "\xC4\x38\xCF\x66\xFD\x71\x08\x9F"
6560 "\x13\xAA\x41\xD8\x4C\xE3\x7A\x11"
6561 "\x85\x1C\xB3\x27\xBE\x55\xEC\x60"
6562 "\xF7\x8E\x02\x99\x30\xC7\x3B\xD2"
6563 "\x69\x00\x74\x0B\xA2\x16\xAD\x44"
6564 "\xDB\x4F\xE6\x7D\x14\x88\x1F\xB6"
6565 "\x2A\xC1\x58\xEF\x63\xFA\x91\x05"
6566 "\x9C\x33\xCA\x3E\xD5\x6C\x03\x77"
6567 "\x0E\xA5\x19\xB0\x47\xDE\x52\xE9"
6568 "\x80\x17\x8B\x22\xB9\x2D\xC4\x5B"
6569 "\xF2\x66\xFD\x94\x08\x9F\x36\xCD"
6570 "\x41\xD8\x6F\x06\x7A\x11\xA8\x1C"
6571 "\xB3\x4A\xE1\x55\xEC\x83\x1A\x8E"
6572 "\x25\xBC\x30\xC7\x5E\xF5\x69\x00"
6573 "\x97\x0B\xA2\x39\xD0\x44\xDB\x72"
6574 "\x09\x7D\x14\xAB\x1F\xB6\x4D\xE4"
6575 "\x58\xEF\x86\x1D\x91\x28\xBF\x33"
6576 "\xCA\x61\xF8\x6C\x03\x9A\x0E\xA5"
6577 "\x3C\xD3\x47\xDE\x75\x0C\x80\x17"
6578 "\xAE\x22\xB9\x50\xE7\x5B\xF2\x89"
6579 "\x20\x94\x2B\xC2\x36\xCD\x64\xFB"
6580 "\x6F\x06\x9D\x11\xA8\x3F\xD6\x4A"
6581 "\xE1\x78\x0F\x83\x1A\xB1\x25\xBC"
6582 "\x53\xEA\x5E\xF5\x8C\x00\x97\x2E"
6583 "\xC5\x39\xD0\x67\xFE\x72\x09\xA0"
6584 "\x14\xAB\x42\xD9\x4D\xE4\x7B\x12"
6585 "\x86\x1D\xB4\x28\xBF\x56\xED\x61"
6586 "\xF8\x8F\x03\x9A\x31\xC8\x3C\xD3"
6587 "\x6A\x01\x75\x0C\xA3\x17\xAE\x45"
6588 "\xDC\x50\xE7\x7E\x15\x89\x20\xB7",
6589 .rlen = 496,
5717 }, 6590 },
5718}; 6591};
5719 6592
@@ -5963,6 +6836,9 @@ static struct cipher_testvec serpent_lrw_enc_tv_template[] = {
5963 "\x5c\xc6\x84\xfe\x7c\xcb\x26\xfd" 6836 "\x5c\xc6\x84\xfe\x7c\xcb\x26\xfd"
5964 "\xd9\x51\x0f\xd7\x94\x2f\xc5\xa7", 6837 "\xd9\x51\x0f\xd7\x94\x2f\xc5\xa7",
5965 .rlen = 512, 6838 .rlen = 512,
6839 .also_non_np = 1,
6840 .np = 2,
6841 .tap = { 512 - 16, 16 },
5966 }, 6842 },
5967}; 6843};
5968 6844
@@ -6213,6 +7089,9 @@ static struct cipher_testvec serpent_lrw_dec_tv_template[] = {
6213 "\xe9\x2e\xc4\x29\x0f\x84\xdb\xc4" 7089 "\xe9\x2e\xc4\x29\x0f\x84\xdb\xc4"
6214 "\x21\xc4\xc2\x75\x67\x89\x37\x0a", 7090 "\x21\xc4\xc2\x75\x67\x89\x37\x0a",
6215 .rlen = 512, 7091 .rlen = 512,
7092 .also_non_np = 1,
7093 .np = 2,
7094 .tap = { 512 - 16, 16 },
6216 }, 7095 },
6217}; 7096};
6218 7097
@@ -6552,6 +7431,9 @@ static struct cipher_testvec serpent_xts_enc_tv_template[] = {
6552 "\xaf\x43\x0b\xc5\x20\x41\x92\x20" 7431 "\xaf\x43\x0b\xc5\x20\x41\x92\x20"
6553 "\xd4\xa0\x91\x98\x11\x5f\x4d\xb1", 7432 "\xd4\xa0\x91\x98\x11\x5f\x4d\xb1",
6554 .rlen = 512, 7433 .rlen = 512,
7434 .also_non_np = 1,
7435 .np = 2,
7436 .tap = { 512 - 16, 16 },
6555 }, 7437 },
6556}; 7438};
6557 7439
@@ -6892,12 +7774,23 @@ static struct cipher_testvec serpent_xts_dec_tv_template[] = {
6892 "\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7" 7774 "\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7"
6893 "\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff", 7775 "\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff",
6894 .rlen = 512, 7776 .rlen = 512,
7777 .also_non_np = 1,
7778 .np = 2,
7779 .tap = { 512 - 16, 16 },
6895 }, 7780 },
6896}; 7781};
6897 7782
6898/* Cast6 test vectors from RFC 2612 */ 7783/* Cast6 test vectors from RFC 2612 */
6899#define CAST6_ENC_TEST_VECTORS 3 7784#define CAST6_ENC_TEST_VECTORS 4
6900#define CAST6_DEC_TEST_VECTORS 3 7785#define CAST6_DEC_TEST_VECTORS 4
7786#define CAST6_CBC_ENC_TEST_VECTORS 1
7787#define CAST6_CBC_DEC_TEST_VECTORS 1
7788#define CAST6_CTR_ENC_TEST_VECTORS 2
7789#define CAST6_CTR_DEC_TEST_VECTORS 2
7790#define CAST6_LRW_ENC_TEST_VECTORS 1
7791#define CAST6_LRW_DEC_TEST_VECTORS 1
7792#define CAST6_XTS_ENC_TEST_VECTORS 1
7793#define CAST6_XTS_DEC_TEST_VECTORS 1
6901 7794
6902static struct cipher_testvec cast6_enc_tv_template[] = { 7795static struct cipher_testvec cast6_enc_tv_template[] = {
6903 { 7796 {
@@ -6930,6 +7823,143 @@ static struct cipher_testvec cast6_enc_tv_template[] = {
6930 .result = "\x4f\x6a\x20\x38\x28\x68\x97\xb9" 7823 .result = "\x4f\x6a\x20\x38\x28\x68\x97\xb9"
6931 "\xc9\x87\x01\x36\x55\x33\x17\xfa", 7824 "\xc9\x87\x01\x36\x55\x33\x17\xfa",
6932 .rlen = 16, 7825 .rlen = 16,
7826 }, { /* Generated from TF test vectors */
7827 .key = "\x85\x62\x3F\x1C\xF9\xD6\x1C\xF9"
7828 "\xD6\xB3\x90\x6D\x4A\x90\x6D\x4A"
7829 "\x27\x04\xE1\x27\x04\xE1\xBE\x9B"
7830 "\x78\xBE\x9B\x78\x55\x32\x0F\x55",
7831 .klen = 32,
7832 .iv = "\xE2\x24\x89\xEE\x53\xB8\x1D\x5F"
7833 "\xC4\x29\x8E\xF3\x35\x9A\xFF\x64",
7834 .input = "\x56\xED\x84\x1B\x8F\x26\xBD\x31"
7835 "\xC8\x5F\xF6\x6A\x01\x98\x0C\xA3"
7836 "\x3A\xD1\x45\xDC\x73\x0A\x7E\x15"
7837 "\xAC\x20\xB7\x4E\xE5\x59\xF0\x87"
7838 "\x1E\x92\x29\xC0\x34\xCB\x62\xF9"
7839 "\x6D\x04\x9B\x0F\xA6\x3D\xD4\x48"
7840 "\xDF\x76\x0D\x81\x18\xAF\x23\xBA"
7841 "\x51\xE8\x5C\xF3\x8A\x21\x95\x2C"
7842 "\xC3\x37\xCE\x65\xFC\x70\x07\x9E"
7843 "\x12\xA9\x40\xD7\x4B\xE2\x79\x10"
7844 "\x84\x1B\xB2\x26\xBD\x54\xEB\x5F"
7845 "\xF6\x8D\x01\x98\x2F\xC6\x3A\xD1"
7846 "\x68\xFF\x73\x0A\xA1\x15\xAC\x43"
7847 "\xDA\x4E\xE5\x7C\x13\x87\x1E\xB5"
7848 "\x29\xC0\x57\xEE\x62\xF9\x90\x04"
7849 "\x9B\x32\xC9\x3D\xD4\x6B\x02\x76"
7850 "\x0D\xA4\x18\xAF\x46\xDD\x51\xE8"
7851 "\x7F\x16\x8A\x21\xB8\x2C\xC3\x5A"
7852 "\xF1\x65\xFC\x93\x07\x9E\x35\xCC"
7853 "\x40\xD7\x6E\x05\x79\x10\xA7\x1B"
7854 "\xB2\x49\xE0\x54\xEB\x82\x19\x8D"
7855 "\x24\xBB\x2F\xC6\x5D\xF4\x68\xFF"
7856 "\x96\x0A\xA1\x38\xCF\x43\xDA\x71"
7857 "\x08\x7C\x13\xAA\x1E\xB5\x4C\xE3"
7858 "\x57\xEE\x85\x1C\x90\x27\xBE\x32"
7859 "\xC9\x60\xF7\x6B\x02\x99\x0D\xA4"
7860 "\x3B\xD2\x46\xDD\x74\x0B\x7F\x16"
7861 "\xAD\x21\xB8\x4F\xE6\x5A\xF1\x88"
7862 "\x1F\x93\x2A\xC1\x35\xCC\x63\xFA"
7863 "\x6E\x05\x9C\x10\xA7\x3E\xD5\x49"
7864 "\xE0\x77\x0E\x82\x19\xB0\x24\xBB"
7865 "\x52\xE9\x5D\xF4\x8B\x22\x96\x2D"
7866 "\xC4\x38\xCF\x66\xFD\x71\x08\x9F"
7867 "\x13\xAA\x41\xD8\x4C\xE3\x7A\x11"
7868 "\x85\x1C\xB3\x27\xBE\x55\xEC\x60"
7869 "\xF7\x8E\x02\x99\x30\xC7\x3B\xD2"
7870 "\x69\x00\x74\x0B\xA2\x16\xAD\x44"
7871 "\xDB\x4F\xE6\x7D\x14\x88\x1F\xB6"
7872 "\x2A\xC1\x58\xEF\x63\xFA\x91\x05"
7873 "\x9C\x33\xCA\x3E\xD5\x6C\x03\x77"
7874 "\x0E\xA5\x19\xB0\x47\xDE\x52\xE9"
7875 "\x80\x17\x8B\x22\xB9\x2D\xC4\x5B"
7876 "\xF2\x66\xFD\x94\x08\x9F\x36\xCD"
7877 "\x41\xD8\x6F\x06\x7A\x11\xA8\x1C"
7878 "\xB3\x4A\xE1\x55\xEC\x83\x1A\x8E"
7879 "\x25\xBC\x30\xC7\x5E\xF5\x69\x00"
7880 "\x97\x0B\xA2\x39\xD0\x44\xDB\x72"
7881 "\x09\x7D\x14\xAB\x1F\xB6\x4D\xE4"
7882 "\x58\xEF\x86\x1D\x91\x28\xBF\x33"
7883 "\xCA\x61\xF8\x6C\x03\x9A\x0E\xA5"
7884 "\x3C\xD3\x47\xDE\x75\x0C\x80\x17"
7885 "\xAE\x22\xB9\x50\xE7\x5B\xF2\x89"
7886 "\x20\x94\x2B\xC2\x36\xCD\x64\xFB"
7887 "\x6F\x06\x9D\x11\xA8\x3F\xD6\x4A"
7888 "\xE1\x78\x0F\x83\x1A\xB1\x25\xBC"
7889 "\x53\xEA\x5E\xF5\x8C\x00\x97\x2E"
7890 "\xC5\x39\xD0\x67\xFE\x72\x09\xA0"
7891 "\x14\xAB\x42\xD9\x4D\xE4\x7B\x12"
7892 "\x86\x1D\xB4\x28\xBF\x56\xED\x61"
7893 "\xF8\x8F\x03\x9A\x31\xC8\x3C\xD3"
7894 "\x6A\x01\x75\x0C\xA3\x17\xAE\x45"
7895 "\xDC\x50\xE7\x7E\x15\x89\x20\xB7",
7896 .ilen = 496,
7897 .result = "\xC3\x70\x22\x32\xF5\x80\xCB\x54"
7898 "\xFC\x30\xE0\xF6\xEB\x39\x57\xA6"
7899 "\xB6\xB9\xC5\xA4\x91\x55\x14\x97"
7900 "\xC1\x20\xFF\x6C\x5C\xF0\x67\xEA"
7901 "\x2F\xED\xD8\xC9\xFB\x38\x3F\xFE"
7902 "\x93\xBE\xDC\x00\xD3\x7F\xAD\x4C"
7903 "\x5A\x08\x92\xD1\x47\x0C\xFA\x6C"
7904 "\xD0\x6A\x99\x10\x72\xF8\x47\x62"
7905 "\x81\x42\xF8\xD8\xF5\xBB\x94\x08"
7906 "\xAA\x97\xA2\x8B\x69\xB3\xD2\x7E"
7907 "\xBC\xB5\x00\x0C\xE5\x44\x4B\x58"
7908 "\xE8\x63\xDC\xB3\xC4\xE5\x23\x12"
7909 "\x5A\x72\x85\x47\x8B\xEC\x9F\x26"
7910 "\x84\xB6\xED\x10\x33\x63\x9B\x5F"
7911 "\x4D\x53\xEE\x94\x45\x8B\x60\x58"
7912 "\x86\x20\xF9\x1E\x82\x08\x3E\x58"
7913 "\x60\x1B\x34\x19\x02\xBE\x4E\x09"
7914 "\xBB\x7C\x15\xCC\x60\x27\x55\x7A"
7915 "\x12\xB8\xD8\x08\x89\x3C\xA6\xF3"
7916 "\xF1\xDD\xA7\x07\xA3\x12\x85\x28"
7917 "\xE9\x57\xAC\x80\x0C\x5C\x0F\x3A"
7918 "\x5D\xC2\x91\xC7\x90\xE4\x8C\x43"
7919 "\x92\xE4\x7C\x26\x69\x4D\x83\x68"
7920 "\x14\x96\x42\x47\xBD\xA9\xE4\x8A"
7921 "\x33\x19\xEB\x54\x8E\x0D\x4B\x6E"
7922 "\x91\x51\xB5\x36\x08\xDE\x1C\x06"
7923 "\x03\xBD\xDE\x81\x26\xF7\x99\xC2"
7924 "\xBA\xF7\x6D\x87\x0D\xE4\xA6\xCF"
7925 "\xC1\xF5\x27\x05\xB8\x02\x57\x72"
7926 "\xE6\x42\x13\x0B\xC6\x47\x05\x74"
7927 "\x24\x15\xF7\x0D\xC2\x23\x9D\xB9"
7928 "\x3C\x77\x18\x93\xBA\xB4\xFC\x8C"
7929 "\x98\x82\x67\x67\xB4\xD7\xD3\x43"
7930 "\x23\x08\x02\xB7\x9B\x99\x05\xFB"
7931 "\xD3\xB5\x00\x0A\xA9\x9D\x66\xD6"
7932 "\x2E\x49\x58\xD0\xA8\x57\x29\x7F"
7933 "\x0A\x0E\x7D\xFC\x92\x83\xCC\x67"
7934 "\xA2\xB1\x70\x3A\x8F\x87\x4A\x8D"
7935 "\x17\xE2\x58\x2B\x88\x0D\x68\x62"
7936 "\xBF\x35\xD1\x6F\xC0\xF0\x18\x62"
7937 "\xB2\xC7\x2D\x58\xC7\x16\xDE\x08"
7938 "\xEB\x84\x1D\x25\xA7\x38\x94\x06"
7939 "\x93\x9D\xF8\xFE\x88\x71\xE7\x84"
7940 "\x2C\xA0\x38\xA3\x1D\x48\xCF\x29"
7941 "\x0B\xBC\xD8\x50\x99\x1A\x26\xFB"
7942 "\x8E\x75\x3D\x73\xEB\x6A\xED\x29"
7943 "\xE0\x8E\xED\xFC\xFE\x6F\xF6\xBA"
7944 "\x41\xE2\x10\x4C\x01\x8B\x69\x2B"
7945 "\x25\x3F\x4D\x70\x7B\x92\xD6\x3B"
7946 "\xAC\xF9\x77\x18\xD9\x6A\x30\xA6"
7947 "\x2E\xFA\x30\xFF\xC8\xD5\x1D\x06"
7948 "\x59\x28\x1D\x86\x43\x04\x5D\x3B"
7949 "\x99\x4C\x04\x5A\x21\x17\x8B\x76"
7950 "\x8F\x72\xCB\xA1\x9C\x29\x4C\xC3"
7951 "\x65\xA2\x58\x2A\xC5\x66\x24\xBF"
7952 "\xBA\xE6\x0C\xDD\x34\x24\x74\xC8"
7953 "\x84\x0A\x66\x2C\xBE\x8F\x32\xA9"
7954 "\xE7\xE4\xA1\xD7\xDA\xAB\x23\x1E"
7955 "\xEB\xEE\x6C\x94\x6F\x9C\x2E\xD1"
7956 "\x49\x2C\xF3\xD4\x90\xCC\x93\x4C"
7957 "\x84\x52\x6D\x68\xDE\xC6\x64\xB2"
7958 "\x11\x74\x93\x57\xB4\x7E\xC6\x00",
7959 .rlen = 496,
7960 .also_non_np = 1,
7961 .np = 2,
7962 .tap = { 496 - 16, 16 },
6933 }, 7963 },
6934}; 7964};
6935 7965
@@ -6964,6 +7994,1331 @@ static struct cipher_testvec cast6_dec_tv_template[] = {
6964 .ilen = 16, 7994 .ilen = 16,
6965 .result = zeroed_string, 7995 .result = zeroed_string,
6966 .rlen = 16, 7996 .rlen = 16,
7997 }, { /* Generated from TF test vectors */
7998 .key = "\x85\x62\x3F\x1C\xF9\xD6\x1C\xF9"
7999 "\xD6\xB3\x90\x6D\x4A\x90\x6D\x4A"
8000 "\x27\x04\xE1\x27\x04\xE1\xBE\x9B"
8001 "\x78\xBE\x9B\x78\x55\x32\x0F\x55",
8002 .klen = 32,
8003 .iv = "\xE2\x24\x89\xEE\x53\xB8\x1D\x5F"
8004 "\xC4\x29\x8E\xF3\x35\x9A\xFF\x64",
8005 .input = "\xC3\x70\x22\x32\xF5\x80\xCB\x54"
8006 "\xFC\x30\xE0\xF6\xEB\x39\x57\xA6"
8007 "\xB6\xB9\xC5\xA4\x91\x55\x14\x97"
8008 "\xC1\x20\xFF\x6C\x5C\xF0\x67\xEA"
8009 "\x2F\xED\xD8\xC9\xFB\x38\x3F\xFE"
8010 "\x93\xBE\xDC\x00\xD3\x7F\xAD\x4C"
8011 "\x5A\x08\x92\xD1\x47\x0C\xFA\x6C"
8012 "\xD0\x6A\x99\x10\x72\xF8\x47\x62"
8013 "\x81\x42\xF8\xD8\xF5\xBB\x94\x08"
8014 "\xAA\x97\xA2\x8B\x69\xB3\xD2\x7E"
8015 "\xBC\xB5\x00\x0C\xE5\x44\x4B\x58"
8016 "\xE8\x63\xDC\xB3\xC4\xE5\x23\x12"
8017 "\x5A\x72\x85\x47\x8B\xEC\x9F\x26"
8018 "\x84\xB6\xED\x10\x33\x63\x9B\x5F"
8019 "\x4D\x53\xEE\x94\x45\x8B\x60\x58"
8020 "\x86\x20\xF9\x1E\x82\x08\x3E\x58"
8021 "\x60\x1B\x34\x19\x02\xBE\x4E\x09"
8022 "\xBB\x7C\x15\xCC\x60\x27\x55\x7A"
8023 "\x12\xB8\xD8\x08\x89\x3C\xA6\xF3"
8024 "\xF1\xDD\xA7\x07\xA3\x12\x85\x28"
8025 "\xE9\x57\xAC\x80\x0C\x5C\x0F\x3A"
8026 "\x5D\xC2\x91\xC7\x90\xE4\x8C\x43"
8027 "\x92\xE4\x7C\x26\x69\x4D\x83\x68"
8028 "\x14\x96\x42\x47\xBD\xA9\xE4\x8A"
8029 "\x33\x19\xEB\x54\x8E\x0D\x4B\x6E"
8030 "\x91\x51\xB5\x36\x08\xDE\x1C\x06"
8031 "\x03\xBD\xDE\x81\x26\xF7\x99\xC2"
8032 "\xBA\xF7\x6D\x87\x0D\xE4\xA6\xCF"
8033 "\xC1\xF5\x27\x05\xB8\x02\x57\x72"
8034 "\xE6\x42\x13\x0B\xC6\x47\x05\x74"
8035 "\x24\x15\xF7\x0D\xC2\x23\x9D\xB9"
8036 "\x3C\x77\x18\x93\xBA\xB4\xFC\x8C"
8037 "\x98\x82\x67\x67\xB4\xD7\xD3\x43"
8038 "\x23\x08\x02\xB7\x9B\x99\x05\xFB"
8039 "\xD3\xB5\x00\x0A\xA9\x9D\x66\xD6"
8040 "\x2E\x49\x58\xD0\xA8\x57\x29\x7F"
8041 "\x0A\x0E\x7D\xFC\x92\x83\xCC\x67"
8042 "\xA2\xB1\x70\x3A\x8F\x87\x4A\x8D"
8043 "\x17\xE2\x58\x2B\x88\x0D\x68\x62"
8044 "\xBF\x35\xD1\x6F\xC0\xF0\x18\x62"
8045 "\xB2\xC7\x2D\x58\xC7\x16\xDE\x08"
8046 "\xEB\x84\x1D\x25\xA7\x38\x94\x06"
8047 "\x93\x9D\xF8\xFE\x88\x71\xE7\x84"
8048 "\x2C\xA0\x38\xA3\x1D\x48\xCF\x29"
8049 "\x0B\xBC\xD8\x50\x99\x1A\x26\xFB"
8050 "\x8E\x75\x3D\x73\xEB\x6A\xED\x29"
8051 "\xE0\x8E\xED\xFC\xFE\x6F\xF6\xBA"
8052 "\x41\xE2\x10\x4C\x01\x8B\x69\x2B"
8053 "\x25\x3F\x4D\x70\x7B\x92\xD6\x3B"
8054 "\xAC\xF9\x77\x18\xD9\x6A\x30\xA6"
8055 "\x2E\xFA\x30\xFF\xC8\xD5\x1D\x06"
8056 "\x59\x28\x1D\x86\x43\x04\x5D\x3B"
8057 "\x99\x4C\x04\x5A\x21\x17\x8B\x76"
8058 "\x8F\x72\xCB\xA1\x9C\x29\x4C\xC3"
8059 "\x65\xA2\x58\x2A\xC5\x66\x24\xBF"
8060 "\xBA\xE6\x0C\xDD\x34\x24\x74\xC8"
8061 "\x84\x0A\x66\x2C\xBE\x8F\x32\xA9"
8062 "\xE7\xE4\xA1\xD7\xDA\xAB\x23\x1E"
8063 "\xEB\xEE\x6C\x94\x6F\x9C\x2E\xD1"
8064 "\x49\x2C\xF3\xD4\x90\xCC\x93\x4C"
8065 "\x84\x52\x6D\x68\xDE\xC6\x64\xB2"
8066 "\x11\x74\x93\x57\xB4\x7E\xC6\x00",
8067 .ilen = 496,
8068 .result = "\x56\xED\x84\x1B\x8F\x26\xBD\x31"
8069 "\xC8\x5F\xF6\x6A\x01\x98\x0C\xA3"
8070 "\x3A\xD1\x45\xDC\x73\x0A\x7E\x15"
8071 "\xAC\x20\xB7\x4E\xE5\x59\xF0\x87"
8072 "\x1E\x92\x29\xC0\x34\xCB\x62\xF9"
8073 "\x6D\x04\x9B\x0F\xA6\x3D\xD4\x48"
8074 "\xDF\x76\x0D\x81\x18\xAF\x23\xBA"
8075 "\x51\xE8\x5C\xF3\x8A\x21\x95\x2C"
8076 "\xC3\x37\xCE\x65\xFC\x70\x07\x9E"
8077 "\x12\xA9\x40\xD7\x4B\xE2\x79\x10"
8078 "\x84\x1B\xB2\x26\xBD\x54\xEB\x5F"
8079 "\xF6\x8D\x01\x98\x2F\xC6\x3A\xD1"
8080 "\x68\xFF\x73\x0A\xA1\x15\xAC\x43"
8081 "\xDA\x4E\xE5\x7C\x13\x87\x1E\xB5"
8082 "\x29\xC0\x57\xEE\x62\xF9\x90\x04"
8083 "\x9B\x32\xC9\x3D\xD4\x6B\x02\x76"
8084 "\x0D\xA4\x18\xAF\x46\xDD\x51\xE8"
8085 "\x7F\x16\x8A\x21\xB8\x2C\xC3\x5A"
8086 "\xF1\x65\xFC\x93\x07\x9E\x35\xCC"
8087 "\x40\xD7\x6E\x05\x79\x10\xA7\x1B"
8088 "\xB2\x49\xE0\x54\xEB\x82\x19\x8D"
8089 "\x24\xBB\x2F\xC6\x5D\xF4\x68\xFF"
8090 "\x96\x0A\xA1\x38\xCF\x43\xDA\x71"
8091 "\x08\x7C\x13\xAA\x1E\xB5\x4C\xE3"
8092 "\x57\xEE\x85\x1C\x90\x27\xBE\x32"
8093 "\xC9\x60\xF7\x6B\x02\x99\x0D\xA4"
8094 "\x3B\xD2\x46\xDD\x74\x0B\x7F\x16"
8095 "\xAD\x21\xB8\x4F\xE6\x5A\xF1\x88"
8096 "\x1F\x93\x2A\xC1\x35\xCC\x63\xFA"
8097 "\x6E\x05\x9C\x10\xA7\x3E\xD5\x49"
8098 "\xE0\x77\x0E\x82\x19\xB0\x24\xBB"
8099 "\x52\xE9\x5D\xF4\x8B\x22\x96\x2D"
8100 "\xC4\x38\xCF\x66\xFD\x71\x08\x9F"
8101 "\x13\xAA\x41\xD8\x4C\xE3\x7A\x11"
8102 "\x85\x1C\xB3\x27\xBE\x55\xEC\x60"
8103 "\xF7\x8E\x02\x99\x30\xC7\x3B\xD2"
8104 "\x69\x00\x74\x0B\xA2\x16\xAD\x44"
8105 "\xDB\x4F\xE6\x7D\x14\x88\x1F\xB6"
8106 "\x2A\xC1\x58\xEF\x63\xFA\x91\x05"
8107 "\x9C\x33\xCA\x3E\xD5\x6C\x03\x77"
8108 "\x0E\xA5\x19\xB0\x47\xDE\x52\xE9"
8109 "\x80\x17\x8B\x22\xB9\x2D\xC4\x5B"
8110 "\xF2\x66\xFD\x94\x08\x9F\x36\xCD"
8111 "\x41\xD8\x6F\x06\x7A\x11\xA8\x1C"
8112 "\xB3\x4A\xE1\x55\xEC\x83\x1A\x8E"
8113 "\x25\xBC\x30\xC7\x5E\xF5\x69\x00"
8114 "\x97\x0B\xA2\x39\xD0\x44\xDB\x72"
8115 "\x09\x7D\x14\xAB\x1F\xB6\x4D\xE4"
8116 "\x58\xEF\x86\x1D\x91\x28\xBF\x33"
8117 "\xCA\x61\xF8\x6C\x03\x9A\x0E\xA5"
8118 "\x3C\xD3\x47\xDE\x75\x0C\x80\x17"
8119 "\xAE\x22\xB9\x50\xE7\x5B\xF2\x89"
8120 "\x20\x94\x2B\xC2\x36\xCD\x64\xFB"
8121 "\x6F\x06\x9D\x11\xA8\x3F\xD6\x4A"
8122 "\xE1\x78\x0F\x83\x1A\xB1\x25\xBC"
8123 "\x53\xEA\x5E\xF5\x8C\x00\x97\x2E"
8124 "\xC5\x39\xD0\x67\xFE\x72\x09\xA0"
8125 "\x14\xAB\x42\xD9\x4D\xE4\x7B\x12"
8126 "\x86\x1D\xB4\x28\xBF\x56\xED\x61"
8127 "\xF8\x8F\x03\x9A\x31\xC8\x3C\xD3"
8128 "\x6A\x01\x75\x0C\xA3\x17\xAE\x45"
8129 "\xDC\x50\xE7\x7E\x15\x89\x20\xB7",
8130 .rlen = 496,
8131 .also_non_np = 1,
8132 .np = 2,
8133 .tap = { 496 - 16, 16 },
8134 },
8135};
8136
8137static struct cipher_testvec cast6_cbc_enc_tv_template[] = {
8138 { /* Generated from TF test vectors */
8139 .key = "\x85\x62\x3F\x1C\xF9\xD6\x1C\xF9"
8140 "\xD6\xB3\x90\x6D\x4A\x90\x6D\x4A"
8141 "\x27\x04\xE1\x27\x04\xE1\xBE\x9B"
8142 "\x78\xBE\x9B\x78\x55\x32\x0F\x55",
8143 .klen = 32,
8144 .iv = "\xE2\x24\x89\xEE\x53\xB8\x1D\x5F"
8145 "\xC4\x29\x8E\xF3\x35\x9A\xFF\x64",
8146 .input = "\x56\xED\x84\x1B\x8F\x26\xBD\x31"
8147 "\xC8\x5F\xF6\x6A\x01\x98\x0C\xA3"
8148 "\x3A\xD1\x45\xDC\x73\x0A\x7E\x15"
8149 "\xAC\x20\xB7\x4E\xE5\x59\xF0\x87"
8150 "\x1E\x92\x29\xC0\x34\xCB\x62\xF9"
8151 "\x6D\x04\x9B\x0F\xA6\x3D\xD4\x48"
8152 "\xDF\x76\x0D\x81\x18\xAF\x23\xBA"
8153 "\x51\xE8\x5C\xF3\x8A\x21\x95\x2C"
8154 "\xC3\x37\xCE\x65\xFC\x70\x07\x9E"
8155 "\x12\xA9\x40\xD7\x4B\xE2\x79\x10"
8156 "\x84\x1B\xB2\x26\xBD\x54\xEB\x5F"
8157 "\xF6\x8D\x01\x98\x2F\xC6\x3A\xD1"
8158 "\x68\xFF\x73\x0A\xA1\x15\xAC\x43"
8159 "\xDA\x4E\xE5\x7C\x13\x87\x1E\xB5"
8160 "\x29\xC0\x57\xEE\x62\xF9\x90\x04"
8161 "\x9B\x32\xC9\x3D\xD4\x6B\x02\x76"
8162 "\x0D\xA4\x18\xAF\x46\xDD\x51\xE8"
8163 "\x7F\x16\x8A\x21\xB8\x2C\xC3\x5A"
8164 "\xF1\x65\xFC\x93\x07\x9E\x35\xCC"
8165 "\x40\xD7\x6E\x05\x79\x10\xA7\x1B"
8166 "\xB2\x49\xE0\x54\xEB\x82\x19\x8D"
8167 "\x24\xBB\x2F\xC6\x5D\xF4\x68\xFF"
8168 "\x96\x0A\xA1\x38\xCF\x43\xDA\x71"
8169 "\x08\x7C\x13\xAA\x1E\xB5\x4C\xE3"
8170 "\x57\xEE\x85\x1C\x90\x27\xBE\x32"
8171 "\xC9\x60\xF7\x6B\x02\x99\x0D\xA4"
8172 "\x3B\xD2\x46\xDD\x74\x0B\x7F\x16"
8173 "\xAD\x21\xB8\x4F\xE6\x5A\xF1\x88"
8174 "\x1F\x93\x2A\xC1\x35\xCC\x63\xFA"
8175 "\x6E\x05\x9C\x10\xA7\x3E\xD5\x49"
8176 "\xE0\x77\x0E\x82\x19\xB0\x24\xBB"
8177 "\x52\xE9\x5D\xF4\x8B\x22\x96\x2D"
8178 "\xC4\x38\xCF\x66\xFD\x71\x08\x9F"
8179 "\x13\xAA\x41\xD8\x4C\xE3\x7A\x11"
8180 "\x85\x1C\xB3\x27\xBE\x55\xEC\x60"
8181 "\xF7\x8E\x02\x99\x30\xC7\x3B\xD2"
8182 "\x69\x00\x74\x0B\xA2\x16\xAD\x44"
8183 "\xDB\x4F\xE6\x7D\x14\x88\x1F\xB6"
8184 "\x2A\xC1\x58\xEF\x63\xFA\x91\x05"
8185 "\x9C\x33\xCA\x3E\xD5\x6C\x03\x77"
8186 "\x0E\xA5\x19\xB0\x47\xDE\x52\xE9"
8187 "\x80\x17\x8B\x22\xB9\x2D\xC4\x5B"
8188 "\xF2\x66\xFD\x94\x08\x9F\x36\xCD"
8189 "\x41\xD8\x6F\x06\x7A\x11\xA8\x1C"
8190 "\xB3\x4A\xE1\x55\xEC\x83\x1A\x8E"
8191 "\x25\xBC\x30\xC7\x5E\xF5\x69\x00"
8192 "\x97\x0B\xA2\x39\xD0\x44\xDB\x72"
8193 "\x09\x7D\x14\xAB\x1F\xB6\x4D\xE4"
8194 "\x58\xEF\x86\x1D\x91\x28\xBF\x33"
8195 "\xCA\x61\xF8\x6C\x03\x9A\x0E\xA5"
8196 "\x3C\xD3\x47\xDE\x75\x0C\x80\x17"
8197 "\xAE\x22\xB9\x50\xE7\x5B\xF2\x89"
8198 "\x20\x94\x2B\xC2\x36\xCD\x64\xFB"
8199 "\x6F\x06\x9D\x11\xA8\x3F\xD6\x4A"
8200 "\xE1\x78\x0F\x83\x1A\xB1\x25\xBC"
8201 "\x53\xEA\x5E\xF5\x8C\x00\x97\x2E"
8202 "\xC5\x39\xD0\x67\xFE\x72\x09\xA0"
8203 "\x14\xAB\x42\xD9\x4D\xE4\x7B\x12"
8204 "\x86\x1D\xB4\x28\xBF\x56\xED\x61"
8205 "\xF8\x8F\x03\x9A\x31\xC8\x3C\xD3"
8206 "\x6A\x01\x75\x0C\xA3\x17\xAE\x45"
8207 "\xDC\x50\xE7\x7E\x15\x89\x20\xB7",
8208 .ilen = 496,
8209 .result = "\xDF\x77\x68\x96\xC7\xBA\xF8\xE2"
8210 "\x0E\x24\x99\x1A\xAA\xF3\xC6\x9F"
8211 "\xA0\x73\xB3\x70\xC3\x68\x64\x70"
8212 "\xAD\x33\x02\xFB\x88\x74\xAA\x78"
8213 "\xC7\x47\x1A\x18\x61\x2D\xAC\x9F"
8214 "\x7E\x6F\xDF\x05\x13\x76\xA6\x72"
8215 "\xB7\x13\x09\x0F\x7D\x38\xDF\x25"
8216 "\x4E\xFD\x50\x45\xFA\x35\x6A\xC0"
8217 "\x57\x95\xE1\x21\x26\x10\x9A\x21"
8218 "\xA1\x8A\x51\x05\xD1\xB1\x78\x35"
8219 "\x98\xF5\xAE\xC0\xC1\x8B\x94\xFF"
8220 "\xD0\x69\x3F\x42\xC2\x01\xA7\x9B"
8221 "\x23\x16\x47\x72\x81\x13\x3A\x72"
8222 "\xEC\xD9\x40\x88\x00\x9C\xB0\xA8"
8223 "\x9C\xAC\xCE\x11\x73\x7B\x63\x3E"
8224 "\xA3\x63\x98\x7D\x35\xE4\xD9\x83"
8225 "\xE2\xD0\x52\x87\x0C\x1F\xB0\xB3"
8226 "\x41\x1A\x93\x8D\x76\x31\x9F\xF2"
8227 "\xFE\x09\xA3\x8F\x22\x6A\x3B\xB9"
8228 "\x6C\x9E\xE4\xA1\xA0\xC4\xE7\xA1"
8229 "\x21\x9C\x1A\xCA\x65\xDE\x44\x03"
8230 "\x99\xF2\xD2\x39\xE3\x3F\x0F\x37"
8231 "\x53\x50\x23\xA4\x81\x6E\xDA\xFB"
8232 "\xF8\x7B\x01\xD7\xB2\x32\x9C\xB8"
8233 "\xB1\x0E\x99\x17\xB5\x38\xF9\xD7"
8234 "\x86\x2D\x6E\x94\x5C\x99\x9D\xB3"
8235 "\xD3\x63\x4B\x2A\x7D\x44\x6A\xB2"
8236 "\xC1\x03\xE6\x5A\x37\xD8\x64\x18"
8237 "\xAA\x32\xCE\x29\xED\xC0\xA2\xCB"
8238 "\x8D\xAF\xCD\xBE\x8F\xB6\xEC\xB4"
8239 "\x89\x05\x81\x6E\x71\x4F\xC3\x28"
8240 "\x10\xC1\x62\xC4\x41\xE9\xD2\x39"
8241 "\xF3\x22\x39\x12\x2C\xC2\x95\x2D"
8242 "\xBF\x93\x58\x4B\x04\xD1\x8D\x57"
8243 "\xAE\xEB\x60\x03\x56\x35\xAD\x5A"
8244 "\xE9\xC3\xFF\x4E\x31\xE1\x37\xF8"
8245 "\x7D\xEE\x65\x8A\xB6\x88\x1A\x3E"
8246 "\x07\x09\x82\xBA\xF0\x80\x8A\xD0"
8247 "\xA0\x3F\x6A\xE9\x24\x87\x19\x65"
8248 "\x73\x3F\x12\x91\x47\x54\xBA\x39"
8249 "\x30\x5B\x1E\xE5\xC2\xF9\x3F\xEF"
8250 "\xD6\x75\xF9\xB8\x7C\x8B\x05\x76"
8251 "\xEE\xB7\x08\x25\x4B\xB6\x7B\x47"
8252 "\x72\xC0\x4C\xD4\xDA\xE0\x75\xF1"
8253 "\x7C\xE8\x94\x9E\x16\x6E\xB8\x12"
8254 "\xA1\xC1\x6E\x3B\x1C\x59\x41\x2D"
8255 "\x23\xFA\x7D\x77\xB8\x46\x75\xFE"
8256 "\x4F\x10\xD3\x09\x60\xA1\x36\x96"
8257 "\x5B\xC2\xDC\x6E\x84\x7D\x9B\x14"
8258 "\x80\x21\x83\x58\x3C\x76\xFD\x28"
8259 "\x1D\xF9\x93\x13\xD7\x0E\x62\x14"
8260 "\x5A\xC5\x4E\x08\xA5\x56\xA4\x3C"
8261 "\x68\x93\x44\x70\xDF\xCF\x4A\x51"
8262 "\x0B\x81\x29\x41\xE5\x62\x4D\x36"
8263 "\xB3\xEA\x94\xA6\xB9\xDD\x3F\x09"
8264 "\x62\x34\xA0\x6A\x7E\x7D\xF5\xF6"
8265 "\x01\x91\xB4\x27\xDA\x59\xD6\x17"
8266 "\x56\x4D\x82\x62\x37\xA3\x48\x01"
8267 "\x99\x91\x77\xB2\x08\x6B\x2C\x37"
8268 "\xC5\x5C\xAD\xB6\x07\xB6\x84\xF3"
8269 "\x4D\x59\x7D\xC5\x28\x69\xFA\x92"
8270 "\x22\x46\x89\x2D\x0F\x2B\x08\x24",
8271 .rlen = 496,
8272 .also_non_np = 1,
8273 .np = 2,
8274 .tap = { 496 - 16, 16 },
8275 },
8276};
8277
8278static struct cipher_testvec cast6_cbc_dec_tv_template[] = {
8279 { /* Generated from TF test vectors */
8280 .key = "\x85\x62\x3F\x1C\xF9\xD6\x1C\xF9"
8281 "\xD6\xB3\x90\x6D\x4A\x90\x6D\x4A"
8282 "\x27\x04\xE1\x27\x04\xE1\xBE\x9B"
8283 "\x78\xBE\x9B\x78\x55\x32\x0F\x55",
8284 .klen = 32,
8285 .iv = "\xE2\x24\x89\xEE\x53\xB8\x1D\x5F"
8286 "\xC4\x29\x8E\xF3\x35\x9A\xFF\x64",
8287 .input = "\xDF\x77\x68\x96\xC7\xBA\xF8\xE2"
8288 "\x0E\x24\x99\x1A\xAA\xF3\xC6\x9F"
8289 "\xA0\x73\xB3\x70\xC3\x68\x64\x70"
8290 "\xAD\x33\x02\xFB\x88\x74\xAA\x78"
8291 "\xC7\x47\x1A\x18\x61\x2D\xAC\x9F"
8292 "\x7E\x6F\xDF\x05\x13\x76\xA6\x72"
8293 "\xB7\x13\x09\x0F\x7D\x38\xDF\x25"
8294 "\x4E\xFD\x50\x45\xFA\x35\x6A\xC0"
8295 "\x57\x95\xE1\x21\x26\x10\x9A\x21"
8296 "\xA1\x8A\x51\x05\xD1\xB1\x78\x35"
8297 "\x98\xF5\xAE\xC0\xC1\x8B\x94\xFF"
8298 "\xD0\x69\x3F\x42\xC2\x01\xA7\x9B"
8299 "\x23\x16\x47\x72\x81\x13\x3A\x72"
8300 "\xEC\xD9\x40\x88\x00\x9C\xB0\xA8"
8301 "\x9C\xAC\xCE\x11\x73\x7B\x63\x3E"
8302 "\xA3\x63\x98\x7D\x35\xE4\xD9\x83"
8303 "\xE2\xD0\x52\x87\x0C\x1F\xB0\xB3"
8304 "\x41\x1A\x93\x8D\x76\x31\x9F\xF2"
8305 "\xFE\x09\xA3\x8F\x22\x6A\x3B\xB9"
8306 "\x6C\x9E\xE4\xA1\xA0\xC4\xE7\xA1"
8307 "\x21\x9C\x1A\xCA\x65\xDE\x44\x03"
8308 "\x99\xF2\xD2\x39\xE3\x3F\x0F\x37"
8309 "\x53\x50\x23\xA4\x81\x6E\xDA\xFB"
8310 "\xF8\x7B\x01\xD7\xB2\x32\x9C\xB8"
8311 "\xB1\x0E\x99\x17\xB5\x38\xF9\xD7"
8312 "\x86\x2D\x6E\x94\x5C\x99\x9D\xB3"
8313 "\xD3\x63\x4B\x2A\x7D\x44\x6A\xB2"
8314 "\xC1\x03\xE6\x5A\x37\xD8\x64\x18"
8315 "\xAA\x32\xCE\x29\xED\xC0\xA2\xCB"
8316 "\x8D\xAF\xCD\xBE\x8F\xB6\xEC\xB4"
8317 "\x89\x05\x81\x6E\x71\x4F\xC3\x28"
8318 "\x10\xC1\x62\xC4\x41\xE9\xD2\x39"
8319 "\xF3\x22\x39\x12\x2C\xC2\x95\x2D"
8320 "\xBF\x93\x58\x4B\x04\xD1\x8D\x57"
8321 "\xAE\xEB\x60\x03\x56\x35\xAD\x5A"
8322 "\xE9\xC3\xFF\x4E\x31\xE1\x37\xF8"
8323 "\x7D\xEE\x65\x8A\xB6\x88\x1A\x3E"
8324 "\x07\x09\x82\xBA\xF0\x80\x8A\xD0"
8325 "\xA0\x3F\x6A\xE9\x24\x87\x19\x65"
8326 "\x73\x3F\x12\x91\x47\x54\xBA\x39"
8327 "\x30\x5B\x1E\xE5\xC2\xF9\x3F\xEF"
8328 "\xD6\x75\xF9\xB8\x7C\x8B\x05\x76"
8329 "\xEE\xB7\x08\x25\x4B\xB6\x7B\x47"
8330 "\x72\xC0\x4C\xD4\xDA\xE0\x75\xF1"
8331 "\x7C\xE8\x94\x9E\x16\x6E\xB8\x12"
8332 "\xA1\xC1\x6E\x3B\x1C\x59\x41\x2D"
8333 "\x23\xFA\x7D\x77\xB8\x46\x75\xFE"
8334 "\x4F\x10\xD3\x09\x60\xA1\x36\x96"
8335 "\x5B\xC2\xDC\x6E\x84\x7D\x9B\x14"
8336 "\x80\x21\x83\x58\x3C\x76\xFD\x28"
8337 "\x1D\xF9\x93\x13\xD7\x0E\x62\x14"
8338 "\x5A\xC5\x4E\x08\xA5\x56\xA4\x3C"
8339 "\x68\x93\x44\x70\xDF\xCF\x4A\x51"
8340 "\x0B\x81\x29\x41\xE5\x62\x4D\x36"
8341 "\xB3\xEA\x94\xA6\xB9\xDD\x3F\x09"
8342 "\x62\x34\xA0\x6A\x7E\x7D\xF5\xF6"
8343 "\x01\x91\xB4\x27\xDA\x59\xD6\x17"
8344 "\x56\x4D\x82\x62\x37\xA3\x48\x01"
8345 "\x99\x91\x77\xB2\x08\x6B\x2C\x37"
8346 "\xC5\x5C\xAD\xB6\x07\xB6\x84\xF3"
8347 "\x4D\x59\x7D\xC5\x28\x69\xFA\x92"
8348 "\x22\x46\x89\x2D\x0F\x2B\x08\x24",
8349 .ilen = 496,
8350 .result = "\x56\xED\x84\x1B\x8F\x26\xBD\x31"
8351 "\xC8\x5F\xF6\x6A\x01\x98\x0C\xA3"
8352 "\x3A\xD1\x45\xDC\x73\x0A\x7E\x15"
8353 "\xAC\x20\xB7\x4E\xE5\x59\xF0\x87"
8354 "\x1E\x92\x29\xC0\x34\xCB\x62\xF9"
8355 "\x6D\x04\x9B\x0F\xA6\x3D\xD4\x48"
8356 "\xDF\x76\x0D\x81\x18\xAF\x23\xBA"
8357 "\x51\xE8\x5C\xF3\x8A\x21\x95\x2C"
8358 "\xC3\x37\xCE\x65\xFC\x70\x07\x9E"
8359 "\x12\xA9\x40\xD7\x4B\xE2\x79\x10"
8360 "\x84\x1B\xB2\x26\xBD\x54\xEB\x5F"
8361 "\xF6\x8D\x01\x98\x2F\xC6\x3A\xD1"
8362 "\x68\xFF\x73\x0A\xA1\x15\xAC\x43"
8363 "\xDA\x4E\xE5\x7C\x13\x87\x1E\xB5"
8364 "\x29\xC0\x57\xEE\x62\xF9\x90\x04"
8365 "\x9B\x32\xC9\x3D\xD4\x6B\x02\x76"
8366 "\x0D\xA4\x18\xAF\x46\xDD\x51\xE8"
8367 "\x7F\x16\x8A\x21\xB8\x2C\xC3\x5A"
8368 "\xF1\x65\xFC\x93\x07\x9E\x35\xCC"
8369 "\x40\xD7\x6E\x05\x79\x10\xA7\x1B"
8370 "\xB2\x49\xE0\x54\xEB\x82\x19\x8D"
8371 "\x24\xBB\x2F\xC6\x5D\xF4\x68\xFF"
8372 "\x96\x0A\xA1\x38\xCF\x43\xDA\x71"
8373 "\x08\x7C\x13\xAA\x1E\xB5\x4C\xE3"
8374 "\x57\xEE\x85\x1C\x90\x27\xBE\x32"
8375 "\xC9\x60\xF7\x6B\x02\x99\x0D\xA4"
8376 "\x3B\xD2\x46\xDD\x74\x0B\x7F\x16"
8377 "\xAD\x21\xB8\x4F\xE6\x5A\xF1\x88"
8378 "\x1F\x93\x2A\xC1\x35\xCC\x63\xFA"
8379 "\x6E\x05\x9C\x10\xA7\x3E\xD5\x49"
8380 "\xE0\x77\x0E\x82\x19\xB0\x24\xBB"
8381 "\x52\xE9\x5D\xF4\x8B\x22\x96\x2D"
8382 "\xC4\x38\xCF\x66\xFD\x71\x08\x9F"
8383 "\x13\xAA\x41\xD8\x4C\xE3\x7A\x11"
8384 "\x85\x1C\xB3\x27\xBE\x55\xEC\x60"
8385 "\xF7\x8E\x02\x99\x30\xC7\x3B\xD2"
8386 "\x69\x00\x74\x0B\xA2\x16\xAD\x44"
8387 "\xDB\x4F\xE6\x7D\x14\x88\x1F\xB6"
8388 "\x2A\xC1\x58\xEF\x63\xFA\x91\x05"
8389 "\x9C\x33\xCA\x3E\xD5\x6C\x03\x77"
8390 "\x0E\xA5\x19\xB0\x47\xDE\x52\xE9"
8391 "\x80\x17\x8B\x22\xB9\x2D\xC4\x5B"
8392 "\xF2\x66\xFD\x94\x08\x9F\x36\xCD"
8393 "\x41\xD8\x6F\x06\x7A\x11\xA8\x1C"
8394 "\xB3\x4A\xE1\x55\xEC\x83\x1A\x8E"
8395 "\x25\xBC\x30\xC7\x5E\xF5\x69\x00"
8396 "\x97\x0B\xA2\x39\xD0\x44\xDB\x72"
8397 "\x09\x7D\x14\xAB\x1F\xB6\x4D\xE4"
8398 "\x58\xEF\x86\x1D\x91\x28\xBF\x33"
8399 "\xCA\x61\xF8\x6C\x03\x9A\x0E\xA5"
8400 "\x3C\xD3\x47\xDE\x75\x0C\x80\x17"
8401 "\xAE\x22\xB9\x50\xE7\x5B\xF2\x89"
8402 "\x20\x94\x2B\xC2\x36\xCD\x64\xFB"
8403 "\x6F\x06\x9D\x11\xA8\x3F\xD6\x4A"
8404 "\xE1\x78\x0F\x83\x1A\xB1\x25\xBC"
8405 "\x53\xEA\x5E\xF5\x8C\x00\x97\x2E"
8406 "\xC5\x39\xD0\x67\xFE\x72\x09\xA0"
8407 "\x14\xAB\x42\xD9\x4D\xE4\x7B\x12"
8408 "\x86\x1D\xB4\x28\xBF\x56\xED\x61"
8409 "\xF8\x8F\x03\x9A\x31\xC8\x3C\xD3"
8410 "\x6A\x01\x75\x0C\xA3\x17\xAE\x45"
8411 "\xDC\x50\xE7\x7E\x15\x89\x20\xB7",
8412 .rlen = 496,
8413 .also_non_np = 1,
8414 .np = 2,
8415 .tap = { 496 - 16, 16 },
8416 },
8417};
8418
8419static struct cipher_testvec cast6_ctr_enc_tv_template[] = {
8420 { /* Generated from TF test vectors */
8421 .key = "\x85\x62\x3F\x1C\xF9\xD6\x1C\xF9"
8422 "\xD6\xB3\x90\x6D\x4A\x90\x6D\x4A"
8423 "\x27\x04\xE1\x27\x04\xE1\xBE\x9B"
8424 "\x78\xBE\x9B\x78\x55\x32\x0F\x55",
8425 .klen = 32,
8426 .iv = "\xE2\x24\x89\xEE\x53\xB8\x1D\x5F"
8427 "\xC4\x29\x8E\xF3\x35\x9A\xFF\x64",
8428 .input = "\x56\xED\x84\x1B\x8F\x26\xBD\x31"
8429 "\xC8\x5F\xF6\x6A\x01\x98\x0C\xA3"
8430 "\x3A",
8431 .ilen = 17,
8432 .result = "\x26\x0A\xF1\xE2\x3F\x8A\xEF\xA3"
8433 "\x53\x9A\x5E\x1B\x2A\x1A\xC6\x0A"
8434 "\x57",
8435 .rlen = 17,
8436 }, { /* Generated from TF test vectors */
8437 .key = "\x85\x62\x3F\x1C\xF9\xD6\x1C\xF9"
8438 "\xD6\xB3\x90\x6D\x4A\x90\x6D\x4A"
8439 "\x27\x04\xE1\x27\x04\xE1\xBE\x9B"
8440 "\x78\xBE\x9B\x78\x55\x32\x0F\x55",
8441 .klen = 32,
8442 .iv = "\xE2\x24\x89\xEE\x53\xB8\x1D\x5F"
8443 "\xC4\x29\x8E\xF3\x35\x9A\xFF\x64",
8444 .input = "\x56\xED\x84\x1B\x8F\x26\xBD\x31"
8445 "\xC8\x5F\xF6\x6A\x01\x98\x0C\xA3"
8446 "\x3A\xD1\x45\xDC\x73\x0A\x7E\x15"
8447 "\xAC\x20\xB7\x4E\xE5\x59\xF0\x87"
8448 "\x1E\x92\x29\xC0\x34\xCB\x62\xF9"
8449 "\x6D\x04\x9B\x0F\xA6\x3D\xD4\x48"
8450 "\xDF\x76\x0D\x81\x18\xAF\x23\xBA"
8451 "\x51\xE8\x5C\xF3\x8A\x21\x95\x2C"
8452 "\xC3\x37\xCE\x65\xFC\x70\x07\x9E"
8453 "\x12\xA9\x40\xD7\x4B\xE2\x79\x10"
8454 "\x84\x1B\xB2\x26\xBD\x54\xEB\x5F"
8455 "\xF6\x8D\x01\x98\x2F\xC6\x3A\xD1"
8456 "\x68\xFF\x73\x0A\xA1\x15\xAC\x43"
8457 "\xDA\x4E\xE5\x7C\x13\x87\x1E\xB5"
8458 "\x29\xC0\x57\xEE\x62\xF9\x90\x04"
8459 "\x9B\x32\xC9\x3D\xD4\x6B\x02\x76"
8460 "\x0D\xA4\x18\xAF\x46\xDD\x51\xE8"
8461 "\x7F\x16\x8A\x21\xB8\x2C\xC3\x5A"
8462 "\xF1\x65\xFC\x93\x07\x9E\x35\xCC"
8463 "\x40\xD7\x6E\x05\x79\x10\xA7\x1B"
8464 "\xB2\x49\xE0\x54\xEB\x82\x19\x8D"
8465 "\x24\xBB\x2F\xC6\x5D\xF4\x68\xFF"
8466 "\x96\x0A\xA1\x38\xCF\x43\xDA\x71"
8467 "\x08\x7C\x13\xAA\x1E\xB5\x4C\xE3"
8468 "\x57\xEE\x85\x1C\x90\x27\xBE\x32"
8469 "\xC9\x60\xF7\x6B\x02\x99\x0D\xA4"
8470 "\x3B\xD2\x46\xDD\x74\x0B\x7F\x16"
8471 "\xAD\x21\xB8\x4F\xE6\x5A\xF1\x88"
8472 "\x1F\x93\x2A\xC1\x35\xCC\x63\xFA"
8473 "\x6E\x05\x9C\x10\xA7\x3E\xD5\x49"
8474 "\xE0\x77\x0E\x82\x19\xB0\x24\xBB"
8475 "\x52\xE9\x5D\xF4\x8B\x22\x96\x2D"
8476 "\xC4\x38\xCF\x66\xFD\x71\x08\x9F"
8477 "\x13\xAA\x41\xD8\x4C\xE3\x7A\x11"
8478 "\x85\x1C\xB3\x27\xBE\x55\xEC\x60"
8479 "\xF7\x8E\x02\x99\x30\xC7\x3B\xD2"
8480 "\x69\x00\x74\x0B\xA2\x16\xAD\x44"
8481 "\xDB\x4F\xE6\x7D\x14\x88\x1F\xB6"
8482 "\x2A\xC1\x58\xEF\x63\xFA\x91\x05"
8483 "\x9C\x33\xCA\x3E\xD5\x6C\x03\x77"
8484 "\x0E\xA5\x19\xB0\x47\xDE\x52\xE9"
8485 "\x80\x17\x8B\x22\xB9\x2D\xC4\x5B"
8486 "\xF2\x66\xFD\x94\x08\x9F\x36\xCD"
8487 "\x41\xD8\x6F\x06\x7A\x11\xA8\x1C"
8488 "\xB3\x4A\xE1\x55\xEC\x83\x1A\x8E"
8489 "\x25\xBC\x30\xC7\x5E\xF5\x69\x00"
8490 "\x97\x0B\xA2\x39\xD0\x44\xDB\x72"
8491 "\x09\x7D\x14\xAB\x1F\xB6\x4D\xE4"
8492 "\x58\xEF\x86\x1D\x91\x28\xBF\x33"
8493 "\xCA\x61\xF8\x6C\x03\x9A\x0E\xA5"
8494 "\x3C\xD3\x47\xDE\x75\x0C\x80\x17"
8495 "\xAE\x22\xB9\x50\xE7\x5B\xF2\x89"
8496 "\x20\x94\x2B\xC2\x36\xCD\x64\xFB"
8497 "\x6F\x06\x9D\x11\xA8\x3F\xD6\x4A"
8498 "\xE1\x78\x0F\x83\x1A\xB1\x25\xBC"
8499 "\x53\xEA\x5E\xF5\x8C\x00\x97\x2E"
8500 "\xC5\x39\xD0\x67\xFE\x72\x09\xA0"
8501 "\x14\xAB\x42\xD9\x4D\xE4\x7B\x12"
8502 "\x86\x1D\xB4\x28\xBF\x56\xED\x61"
8503 "\xF8\x8F\x03\x9A\x31\xC8\x3C\xD3"
8504 "\x6A\x01\x75\x0C\xA3\x17\xAE\x45"
8505 "\xDC\x50\xE7\x7E\x15\x89\x20\xB7",
8506 .ilen = 496,
8507 .result = "\x26\x0A\xF1\xE2\x3F\x8A\xEF\xA3"
8508 "\x53\x9A\x5E\x1B\x2A\x1A\xC6\x0A"
8509 "\x57\xA3\xEF\x47\x2A\xE8\x88\xA7"
8510 "\x3C\xD0\xEC\xB9\x94\x50\x7D\x56"
8511 "\xBC\xE1\xC1\xF5\xE1\xEE\x12\xF8"
8512 "\x4F\x03\x82\x3A\x93\x6B\x4C\xD3"
8513 "\xE3\xF3\xFA\xC2\x23\x55\x98\x20"
8514 "\x49\x76\x9B\x6B\xC1\x23\xBF\xE5"
8515 "\xD4\xC4\x2F\x61\xE1\x67\x2A\x30"
8516 "\x6F\x29\xCA\x54\xF8\x1B\xA6\x7D"
8517 "\x66\x45\xEE\xC8\x19\xBE\x50\xF0"
8518 "\x5F\x65\xF8\x1E\x4D\x07\x87\xD9"
8519 "\xD3\xD9\x1B\x09\x89\xFD\x42\xC5"
8520 "\xDB\xEB\x86\xF1\x67\x04\x0F\x5C"
8521 "\x81\xDF\x82\x12\xC7\x4C\x1B\x07"
8522 "\xDE\xE6\xFA\x29\x86\xD1\xB0\xBA"
8523 "\x3D\x6A\x69\x76\xEC\x0F\xB4\xE6"
8524 "\xCD\xA7\xF8\xA8\xB8\xE0\x33\xF5"
8525 "\x49\x61\x22\x52\x64\x8C\x46\x41"
8526 "\x1F\x48\x5F\x4F\xA2\x89\x36\x17"
8527 "\x20\xF8\x2F\x8F\x4B\xFA\xF2\xC0"
8528 "\x1E\x18\xA2\xF8\xB7\x6D\x98\xE3"
8529 "\x00\x14\x15\x59\xC1\x30\x64\xAF"
8530 "\xA8\x01\x38\xAB\xD4\x8B\xEC\x7C"
8531 "\x44\x9A\xC6\x2C\x2E\x2B\x2B\xF4"
8532 "\x02\x37\xC4\x69\xEF\x36\xC1\xF3"
8533 "\xA0\xFB\xFE\x29\xAD\x39\xCF\xD0"
8534 "\x51\x73\xA3\x22\x42\x41\xAB\xD2"
8535 "\x0F\x50\x14\xB9\x54\xD3\xD4\xFA"
8536 "\xBF\xC9\xBB\xCE\xC4\x1D\x2D\xAF"
8537 "\xC9\x3F\x07\x87\x42\x4B\x3A\x54"
8538 "\x34\x8E\x37\xA3\x03\x6F\x65\x66"
8539 "\xDB\x44\xC3\xE8\xD7\xDD\x7D\xDD"
8540 "\x61\xB4\x2B\x80\xA3\x98\x13\xF5"
8541 "\x5A\xD3\x34\x58\xC3\x6E\xF6\xB8"
8542 "\x0A\xC6\x50\x01\x8E\xD5\x6C\x7D"
8543 "\xFE\x16\xB6\xCF\xFC\x51\x40\xAE"
8544 "\xB3\x15\xAC\x90\x6F\x0B\x28\x3A"
8545 "\x60\x40\x38\x90\x20\x46\xC7\xB3"
8546 "\x0B\x12\x6D\x3B\x15\x14\xF9\xF4"
8547 "\x11\x41\x76\x6B\xB3\x60\x82\x3C"
8548 "\x84\xFB\x08\x2E\x92\x25\xCB\x79"
8549 "\x6F\x58\xC5\x94\x00\x00\x47\xB6"
8550 "\x9E\xDC\x0F\x29\x70\x46\x20\x76"
8551 "\x65\x75\x66\x5C\x00\x96\xB3\xE1"
8552 "\x0B\xA7\x11\x8B\x2E\x61\x4E\x45"
8553 "\x73\xFC\x91\xAB\x79\x41\x23\x14"
8554 "\x13\xB6\x72\x6C\x46\xB3\x03\x11"
8555 "\xE4\xF1\xEE\xC9\x7A\xCF\x96\x32"
8556 "\xB6\xF0\x8B\x97\xB4\xCF\x82\xB7"
8557 "\x15\x48\x44\x99\x09\xF6\xE0\xD7"
8558 "\xBC\xF1\x5B\x91\x4F\x30\x22\xA2"
8559 "\x45\xC4\x68\x55\xC2\xBE\xA7\xD2"
8560 "\x12\x53\x35\x9C\xF9\xE7\x35\x5D"
8561 "\x81\xE4\x86\x42\xC3\x58\xFB\xF0"
8562 "\x38\x9B\x8E\x5A\xEF\x83\x33\x0F"
8563 "\x00\x4E\x3F\x9F\xF5\x84\x62\xC4"
8564 "\x19\x35\x88\x22\x45\x59\x0E\x8F"
8565 "\xEC\x27\xDD\x4A\xA4\x1F\xBC\x41"
8566 "\x9B\x66\x8D\x32\xBA\x81\x34\x87"
8567 "\x0E\x74\x33\x30\x62\xB9\x89\xDF"
8568 "\xF9\xC5\xDD\x27\xB3\x39\xCB\xCB",
8569 .rlen = 496,
8570 .also_non_np = 1,
8571 .np = 2,
8572 .tap = { 496 - 16, 16 },
8573 },
8574};
8575
8576static struct cipher_testvec cast6_ctr_dec_tv_template[] = {
8577 { /* Generated from TF test vectors */
8578 .key = "\x85\x62\x3F\x1C\xF9\xD6\x1C\xF9"
8579 "\xD6\xB3\x90\x6D\x4A\x90\x6D\x4A"
8580 "\x27\x04\xE1\x27\x04\xE1\xBE\x9B"
8581 "\x78\xBE\x9B\x78\x55\x32\x0F\x55",
8582 .klen = 32,
8583 .iv = "\xE2\x24\x89\xEE\x53\xB8\x1D\x5F"
8584 "\xC4\x29\x8E\xF3\x35\x9A\xFF\x64",
8585 .input = "\x26\x0A\xF1\xE2\x3F\x8A\xEF\xA3"
8586 "\x53\x9A\x5E\x1B\x2A\x1A\xC6\x0A"
8587 "\x57",
8588 .ilen = 17,
8589 .result = "\x56\xED\x84\x1B\x8F\x26\xBD\x31"
8590 "\xC8\x5F\xF6\x6A\x01\x98\x0C\xA3"
8591 "\x3A",
8592 .rlen = 17,
8593 }, { /* Generated from TF test vectors */
8594 .key = "\x85\x62\x3F\x1C\xF9\xD6\x1C\xF9"
8595 "\xD6\xB3\x90\x6D\x4A\x90\x6D\x4A"
8596 "\x27\x04\xE1\x27\x04\xE1\xBE\x9B"
8597 "\x78\xBE\x9B\x78\x55\x32\x0F\x55",
8598 .klen = 32,
8599 .iv = "\xE2\x24\x89\xEE\x53\xB8\x1D\x5F"
8600 "\xC4\x29\x8E\xF3\x35\x9A\xFF\x64",
8601 .input = "\x26\x0A\xF1\xE2\x3F\x8A\xEF\xA3"
8602 "\x53\x9A\x5E\x1B\x2A\x1A\xC6\x0A"
8603 "\x57\xA3\xEF\x47\x2A\xE8\x88\xA7"
8604 "\x3C\xD0\xEC\xB9\x94\x50\x7D\x56"
8605 "\xBC\xE1\xC1\xF5\xE1\xEE\x12\xF8"
8606 "\x4F\x03\x82\x3A\x93\x6B\x4C\xD3"
8607 "\xE3\xF3\xFA\xC2\x23\x55\x98\x20"
8608 "\x49\x76\x9B\x6B\xC1\x23\xBF\xE5"
8609 "\xD4\xC4\x2F\x61\xE1\x67\x2A\x30"
8610 "\x6F\x29\xCA\x54\xF8\x1B\xA6\x7D"
8611 "\x66\x45\xEE\xC8\x19\xBE\x50\xF0"
8612 "\x5F\x65\xF8\x1E\x4D\x07\x87\xD9"
8613 "\xD3\xD9\x1B\x09\x89\xFD\x42\xC5"
8614 "\xDB\xEB\x86\xF1\x67\x04\x0F\x5C"
8615 "\x81\xDF\x82\x12\xC7\x4C\x1B\x07"
8616 "\xDE\xE6\xFA\x29\x86\xD1\xB0\xBA"
8617 "\x3D\x6A\x69\x76\xEC\x0F\xB4\xE6"
8618 "\xCD\xA7\xF8\xA8\xB8\xE0\x33\xF5"
8619 "\x49\x61\x22\x52\x64\x8C\x46\x41"
8620 "\x1F\x48\x5F\x4F\xA2\x89\x36\x17"
8621 "\x20\xF8\x2F\x8F\x4B\xFA\xF2\xC0"
8622 "\x1E\x18\xA2\xF8\xB7\x6D\x98\xE3"
8623 "\x00\x14\x15\x59\xC1\x30\x64\xAF"
8624 "\xA8\x01\x38\xAB\xD4\x8B\xEC\x7C"
8625 "\x44\x9A\xC6\x2C\x2E\x2B\x2B\xF4"
8626 "\x02\x37\xC4\x69\xEF\x36\xC1\xF3"
8627 "\xA0\xFB\xFE\x29\xAD\x39\xCF\xD0"
8628 "\x51\x73\xA3\x22\x42\x41\xAB\xD2"
8629 "\x0F\x50\x14\xB9\x54\xD3\xD4\xFA"
8630 "\xBF\xC9\xBB\xCE\xC4\x1D\x2D\xAF"
8631 "\xC9\x3F\x07\x87\x42\x4B\x3A\x54"
8632 "\x34\x8E\x37\xA3\x03\x6F\x65\x66"
8633 "\xDB\x44\xC3\xE8\xD7\xDD\x7D\xDD"
8634 "\x61\xB4\x2B\x80\xA3\x98\x13\xF5"
8635 "\x5A\xD3\x34\x58\xC3\x6E\xF6\xB8"
8636 "\x0A\xC6\x50\x01\x8E\xD5\x6C\x7D"
8637 "\xFE\x16\xB6\xCF\xFC\x51\x40\xAE"
8638 "\xB3\x15\xAC\x90\x6F\x0B\x28\x3A"
8639 "\x60\x40\x38\x90\x20\x46\xC7\xB3"
8640 "\x0B\x12\x6D\x3B\x15\x14\xF9\xF4"
8641 "\x11\x41\x76\x6B\xB3\x60\x82\x3C"
8642 "\x84\xFB\x08\x2E\x92\x25\xCB\x79"
8643 "\x6F\x58\xC5\x94\x00\x00\x47\xB6"
8644 "\x9E\xDC\x0F\x29\x70\x46\x20\x76"
8645 "\x65\x75\x66\x5C\x00\x96\xB3\xE1"
8646 "\x0B\xA7\x11\x8B\x2E\x61\x4E\x45"
8647 "\x73\xFC\x91\xAB\x79\x41\x23\x14"
8648 "\x13\xB6\x72\x6C\x46\xB3\x03\x11"
8649 "\xE4\xF1\xEE\xC9\x7A\xCF\x96\x32"
8650 "\xB6\xF0\x8B\x97\xB4\xCF\x82\xB7"
8651 "\x15\x48\x44\x99\x09\xF6\xE0\xD7"
8652 "\xBC\xF1\x5B\x91\x4F\x30\x22\xA2"
8653 "\x45\xC4\x68\x55\xC2\xBE\xA7\xD2"
8654 "\x12\x53\x35\x9C\xF9\xE7\x35\x5D"
8655 "\x81\xE4\x86\x42\xC3\x58\xFB\xF0"
8656 "\x38\x9B\x8E\x5A\xEF\x83\x33\x0F"
8657 "\x00\x4E\x3F\x9F\xF5\x84\x62\xC4"
8658 "\x19\x35\x88\x22\x45\x59\x0E\x8F"
8659 "\xEC\x27\xDD\x4A\xA4\x1F\xBC\x41"
8660 "\x9B\x66\x8D\x32\xBA\x81\x34\x87"
8661 "\x0E\x74\x33\x30\x62\xB9\x89\xDF"
8662 "\xF9\xC5\xDD\x27\xB3\x39\xCB\xCB",
8663 .ilen = 496,
8664 .result = "\x56\xED\x84\x1B\x8F\x26\xBD\x31"
8665 "\xC8\x5F\xF6\x6A\x01\x98\x0C\xA3"
8666 "\x3A\xD1\x45\xDC\x73\x0A\x7E\x15"
8667 "\xAC\x20\xB7\x4E\xE5\x59\xF0\x87"
8668 "\x1E\x92\x29\xC0\x34\xCB\x62\xF9"
8669 "\x6D\x04\x9B\x0F\xA6\x3D\xD4\x48"
8670 "\xDF\x76\x0D\x81\x18\xAF\x23\xBA"
8671 "\x51\xE8\x5C\xF3\x8A\x21\x95\x2C"
8672 "\xC3\x37\xCE\x65\xFC\x70\x07\x9E"
8673 "\x12\xA9\x40\xD7\x4B\xE2\x79\x10"
8674 "\x84\x1B\xB2\x26\xBD\x54\xEB\x5F"
8675 "\xF6\x8D\x01\x98\x2F\xC6\x3A\xD1"
8676 "\x68\xFF\x73\x0A\xA1\x15\xAC\x43"
8677 "\xDA\x4E\xE5\x7C\x13\x87\x1E\xB5"
8678 "\x29\xC0\x57\xEE\x62\xF9\x90\x04"
8679 "\x9B\x32\xC9\x3D\xD4\x6B\x02\x76"
8680 "\x0D\xA4\x18\xAF\x46\xDD\x51\xE8"
8681 "\x7F\x16\x8A\x21\xB8\x2C\xC3\x5A"
8682 "\xF1\x65\xFC\x93\x07\x9E\x35\xCC"
8683 "\x40\xD7\x6E\x05\x79\x10\xA7\x1B"
8684 "\xB2\x49\xE0\x54\xEB\x82\x19\x8D"
8685 "\x24\xBB\x2F\xC6\x5D\xF4\x68\xFF"
8686 "\x96\x0A\xA1\x38\xCF\x43\xDA\x71"
8687 "\x08\x7C\x13\xAA\x1E\xB5\x4C\xE3"
8688 "\x57\xEE\x85\x1C\x90\x27\xBE\x32"
8689 "\xC9\x60\xF7\x6B\x02\x99\x0D\xA4"
8690 "\x3B\xD2\x46\xDD\x74\x0B\x7F\x16"
8691 "\xAD\x21\xB8\x4F\xE6\x5A\xF1\x88"
8692 "\x1F\x93\x2A\xC1\x35\xCC\x63\xFA"
8693 "\x6E\x05\x9C\x10\xA7\x3E\xD5\x49"
8694 "\xE0\x77\x0E\x82\x19\xB0\x24\xBB"
8695 "\x52\xE9\x5D\xF4\x8B\x22\x96\x2D"
8696 "\xC4\x38\xCF\x66\xFD\x71\x08\x9F"
8697 "\x13\xAA\x41\xD8\x4C\xE3\x7A\x11"
8698 "\x85\x1C\xB3\x27\xBE\x55\xEC\x60"
8699 "\xF7\x8E\x02\x99\x30\xC7\x3B\xD2"
8700 "\x69\x00\x74\x0B\xA2\x16\xAD\x44"
8701 "\xDB\x4F\xE6\x7D\x14\x88\x1F\xB6"
8702 "\x2A\xC1\x58\xEF\x63\xFA\x91\x05"
8703 "\x9C\x33\xCA\x3E\xD5\x6C\x03\x77"
8704 "\x0E\xA5\x19\xB0\x47\xDE\x52\xE9"
8705 "\x80\x17\x8B\x22\xB9\x2D\xC4\x5B"
8706 "\xF2\x66\xFD\x94\x08\x9F\x36\xCD"
8707 "\x41\xD8\x6F\x06\x7A\x11\xA8\x1C"
8708 "\xB3\x4A\xE1\x55\xEC\x83\x1A\x8E"
8709 "\x25\xBC\x30\xC7\x5E\xF5\x69\x00"
8710 "\x97\x0B\xA2\x39\xD0\x44\xDB\x72"
8711 "\x09\x7D\x14\xAB\x1F\xB6\x4D\xE4"
8712 "\x58\xEF\x86\x1D\x91\x28\xBF\x33"
8713 "\xCA\x61\xF8\x6C\x03\x9A\x0E\xA5"
8714 "\x3C\xD3\x47\xDE\x75\x0C\x80\x17"
8715 "\xAE\x22\xB9\x50\xE7\x5B\xF2\x89"
8716 "\x20\x94\x2B\xC2\x36\xCD\x64\xFB"
8717 "\x6F\x06\x9D\x11\xA8\x3F\xD6\x4A"
8718 "\xE1\x78\x0F\x83\x1A\xB1\x25\xBC"
8719 "\x53\xEA\x5E\xF5\x8C\x00\x97\x2E"
8720 "\xC5\x39\xD0\x67\xFE\x72\x09\xA0"
8721 "\x14\xAB\x42\xD9\x4D\xE4\x7B\x12"
8722 "\x86\x1D\xB4\x28\xBF\x56\xED\x61"
8723 "\xF8\x8F\x03\x9A\x31\xC8\x3C\xD3"
8724 "\x6A\x01\x75\x0C\xA3\x17\xAE\x45"
8725 "\xDC\x50\xE7\x7E\x15\x89\x20\xB7",
8726 .rlen = 496,
8727 .also_non_np = 1,
8728 .np = 2,
8729 .tap = { 496 - 16, 16 },
8730 },
8731};
8732
8733static struct cipher_testvec cast6_lrw_enc_tv_template[] = {
8734 { /* Generated from TF test vectors */
8735 .key = "\xf8\xd4\x76\xff\xd6\x46\xee\x6c"
8736 "\x23\x84\xcb\x1c\x77\xd6\x19\x5d"
8737 "\xfe\xf1\xa9\xf3\x7b\xbc\x8d\x21"
8738 "\xa7\x9c\x21\xf8\xcb\x90\x02\x89"
8739 "\xa8\x45\x34\x8e\xc8\xc5\xb5\xf1"
8740 "\x26\xf5\x0e\x76\xfe\xfd\x1b\x1e",
8741 .klen = 48,
8742 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00"
8743 "\x00\x00\x00\x00\x00\x00\x00\x01",
8744 .input = "\x05\x11\xb7\x18\xab\xc6\x2d\xac"
8745 "\x70\x5d\xf6\x22\x94\xcd\xe5\x6c"
8746 "\x17\x6b\xf6\x1c\xf0\xf3\x6e\xf8"
8747 "\x50\x38\x1f\x71\x49\xb6\x57\xd6"
8748 "\x8f\xcb\x8d\x6b\xe3\xa6\x29\x90"
8749 "\xfe\x2a\x62\x82\xae\x6d\x8b\xf6"
8750 "\xad\x1e\x9e\x20\x5f\x38\xbe\x04"
8751 "\xda\x10\x8e\xed\xa2\xa4\x87\xab"
8752 "\xda\x6b\xb4\x0c\x75\xba\xd3\x7c"
8753 "\xc9\xac\x42\x31\x95\x7c\xc9\x04"
8754 "\xeb\xd5\x6e\x32\x69\x8a\xdb\xa6"
8755 "\x15\xd7\x3f\x4f\x2f\x66\x69\x03"
8756 "\x9c\x1f\x54\x0f\xde\x1f\xf3\x65"
8757 "\x4c\x96\x12\xed\x7c\x92\x03\x01"
8758 "\x6f\xbc\x35\x93\xac\xf1\x27\xf1"
8759 "\xb4\x96\x82\x5a\x5f\xb0\xa0\x50"
8760 "\x89\xa4\x8e\x66\x44\x85\xcc\xfd"
8761 "\x33\x14\x70\xe3\x96\xb2\xc3\xd3"
8762 "\xbb\x54\x5a\x1a\xf9\x74\xa2\xc5"
8763 "\x2d\x64\x75\xdd\xb4\x54\xe6\x74"
8764 "\x8c\xd3\x9d\x9e\x86\xab\x51\x53"
8765 "\xb7\x93\x3e\x6f\xd0\x4e\x2c\x40"
8766 "\xf6\xa8\x2e\x3e\x9d\xf4\x66\xa5"
8767 "\x76\x12\x73\x44\x1a\x56\xd7\x72"
8768 "\x88\xcd\x21\x8c\x4c\x0f\xfe\xda"
8769 "\x95\xe0\x3a\xa6\xa5\x84\x46\xcd"
8770 "\xd5\x3e\x9d\x3a\xe2\x67\xe6\x60"
8771 "\x1a\xe2\x70\x85\x58\xc2\x1b\x09"
8772 "\xe1\xd7\x2c\xca\xad\xa8\x8f\xf9"
8773 "\xac\xb3\x0e\xdb\xca\x2e\xe2\xb8"
8774 "\x51\x71\xd9\x3c\x6c\xf1\x56\xf8"
8775 "\xea\x9c\xf1\xfb\x0c\xe6\xb7\x10"
8776 "\x1c\xf8\xa9\x7c\xe8\x53\x35\xc1"
8777 "\x90\x3e\x76\x4a\x74\xa4\x21\x2c"
8778 "\xf6\x2c\x4e\x0f\x94\x3a\x88\x2e"
8779 "\x41\x09\x6a\x33\x7d\xf6\xdd\x3f"
8780 "\x8d\x23\x31\x74\x84\xeb\x88\x6e"
8781 "\xcc\xb9\xbc\x22\x83\x19\x07\x22"
8782 "\xa5\x2d\xdf\xa5\xf3\x80\x85\x78"
8783 "\x84\x39\x6a\x6d\x6a\x99\x4f\xa5"
8784 "\x15\xfe\x46\xb0\xe4\x6c\xa5\x41"
8785 "\x3c\xce\x8f\x42\x60\x71\xa7\x75"
8786 "\x08\x40\x65\x8a\x82\xbf\xf5\x43"
8787 "\x71\x96\xa9\x4d\x44\x8a\x20\xbe"
8788 "\xfa\x4d\xbb\xc0\x7d\x31\x96\x65"
8789 "\xe7\x75\xe5\x3e\xfd\x92\x3b\xc9"
8790 "\x55\xbb\x16\x7e\xf7\xc2\x8c\xa4"
8791 "\x40\x1d\xe5\xef\x0e\xdf\xe4\x9a"
8792 "\x62\x73\x65\xfd\x46\x63\x25\x3d"
8793 "\x2b\xaf\xe5\x64\xfe\xa5\x5c\xcf"
8794 "\x24\xf3\xb4\xac\x64\xba\xdf\x4b"
8795 "\xc6\x96\x7d\x81\x2d\x8d\x97\xf7"
8796 "\xc5\x68\x77\x84\x32\x2b\xcc\x85"
8797 "\x74\x96\xf0\x12\x77\x61\xb9\xeb"
8798 "\x71\xaa\x82\xcb\x1c\xdb\x89\xc8"
8799 "\xc6\xb5\xe3\x5c\x7d\x39\x07\x24"
8800 "\xda\x39\x87\x45\xc0\x2b\xbb\x01"
8801 "\xac\xbc\x2a\x5c\x7f\xfc\xe8\xce"
8802 "\x6d\x9c\x6f\xed\xd3\xc1\xa1\xd6"
8803 "\xc5\x55\xa9\x66\x2f\xe1\xc8\x32"
8804 "\xa6\x5d\xa4\x3a\x98\x73\xe8\x45"
8805 "\xa4\xc7\xa8\xb4\xf6\x13\x03\xf6"
8806 "\xe9\x2e\xc4\x29\x0f\x84\xdb\xc4"
8807 "\x21\xc4\xc2\x75\x67\x89\x37\x0a",
8808 .ilen = 512,
8809 .result = "\x55\x25\x09\x8B\xB5\xD5\xF8\xBF"
8810 "\x37\x4A\xFE\x3C\x47\xD8\xE6\xEB"
8811 "\xCA\xA4\x9B\xB0\xAB\x6D\x64\xCA"
8812 "\x58\xB6\x73\xF0\xD7\x52\x34\xEF"
8813 "\xFB\x3E\x96\x81\xB7\x71\x34\xA4"
8814 "\x55\x20\xBE\x39\x5A\x2B\xF9\xD1"
8815 "\x65\x0B\xDA\xD3\x7E\xB3\xA6\xF7"
8816 "\x2E\x0B\x5A\x52\xDB\x39\x8C\x9B"
8817 "\x61\x17\x5F\xAF\xB6\x5A\xC8\x08"
8818 "\xA7\xB7\x2A\x11\x7C\x97\x38\x9D"
8819 "\x59\x0E\x66\x59\x5E\xD8\x8B\xCE"
8820 "\x70\xE0\xC3\x42\xB0\x8C\x0F\xBA"
8821 "\xB2\x0D\x81\xB6\xBE\x61\x1C\x2D"
8822 "\x7E\xEA\x91\x25\xAC\xEC\xF8\x28"
8823 "\x80\x1D\xF0\x30\xBA\x62\x77\x7D"
8824 "\xDB\x15\x69\xDF\xFA\x2A\x81\x64"
8825 "\x95\x5B\xA4\x7F\x3E\x4F\xE3\x30"
8826 "\xB0\x5C\xC2\x05\xF8\xF0\x29\xE7"
8827 "\x0A\xA0\x66\xB2\x5D\x0F\x39\x2B"
8828 "\xB4\xB3\x00\xA9\xD0\xAB\x63\x61"
8829 "\x5E\xDB\xFC\x11\x74\x25\x96\x65"
8830 "\xE8\xE2\x34\x57\x77\x15\x5E\x70"
8831 "\xFF\x10\x90\xC3\x64\xF0\x11\x0A"
8832 "\x63\x3A\xD3\x55\x92\x15\x4B\x0C"
8833 "\xC7\x08\x89\x17\x3B\x99\xAD\x63"
8834 "\xE7\x06\xDF\x52\xBC\x15\x64\x45"
8835 "\x9D\x7A\xFB\x69\xBC\x2D\x6E\xA9"
8836 "\x35\xD9\xD8\xF5\x0C\xC4\xA2\x23"
8837 "\x9C\x18\x8B\xA8\x8C\xFE\xF8\x0E"
8838 "\xBD\xAB\x60\x1A\x51\x17\x54\x27"
8839 "\xB6\xE8\xBE\x0F\xA9\xA5\x82\x19"
8840 "\x2F\x6F\x20\xA7\x47\xED\x74\x6C"
8841 "\x4E\xC1\xF8\x8C\x14\xF3\xBB\x1F"
8842 "\xED\x4D\x8F\x7C\x37\xEF\x19\xA1"
8843 "\x07\x16\xDE\x76\xCC\x5E\x94\x02"
8844 "\xFB\xBF\xE4\x81\x50\xCE\xFC\x0F"
8845 "\x9E\xCF\x3D\xF6\x67\x00\xBF\xA7"
8846 "\x6E\x21\x58\x36\x06\xDE\xB3\xD4"
8847 "\xA2\xFA\xD8\x4E\xE0\xB9\x7F\x23"
8848 "\x51\x21\x2B\x32\x68\xAA\xF8\xA8"
8849 "\x93\x08\xB5\x6D\xE6\x43\x2C\xB7"
8850 "\x31\xB2\x0F\xD0\xA2\x51\xC0\x25"
8851 "\x30\xC7\x10\x3F\x97\x27\x01\x8E"
8852 "\xFA\xD8\x4F\x78\xD8\x2E\x1D\xEB"
8853 "\xA1\x37\x52\x0F\x7B\x5E\x87\xA8"
8854 "\x22\xE2\xE6\x92\xA7\x5F\x11\x32"
8855 "\xCC\x93\x34\xFC\xD1\x7E\xAE\x54"
8856 "\xBC\x6A\x1B\x91\xD1\x2E\x21\xEC"
8857 "\x5D\xF1\xC4\xF1\x55\x20\xBF\xE5"
8858 "\x96\x3D\x69\x91\x20\x4E\xF2\x61"
8859 "\xDA\x77\xFE\xEE\xC3\x74\x57\x2A"
8860 "\x78\x39\xB0\xE0\xCF\x12\x56\xD6"
8861 "\x05\xDC\xF9\x19\x66\x44\x1D\xF9"
8862 "\x82\x37\xD4\xC2\x60\xB6\x31\xDF"
8863 "\x0C\xAF\xBC\x8B\x55\x9A\xC8\x2D"
8864 "\xAB\xA7\x88\x7B\x41\xE8\x29\xC9"
8865 "\x9B\x8D\xA7\x00\x86\x25\xB6\x14"
8866 "\xF5\x13\x73\xD7\x4B\x6B\x83\xF3"
8867 "\xAF\x96\x00\xE4\xB7\x3C\x65\xA6"
8868 "\x15\xB7\x94\x7D\x4E\x70\x4C\x75"
8869 "\xF3\xB4\x02\xA9\x17\x1C\x7A\x0A"
8870 "\xC0\xD5\x33\x11\x56\xDE\xDC\xF5"
8871 "\x8D\xD9\xCD\x3B\x22\x67\x18\xC7"
8872 "\xC4\xF5\x99\x61\xBC\xBB\x5B\x46",
8873 .rlen = 512,
8874 .also_non_np = 1,
8875 .np = 2,
8876 .tap = { 512 - 16, 16 },
8877 },
8878};
8879
8880static struct cipher_testvec cast6_lrw_dec_tv_template[] = {
8881 { /* Generated from TF test vectors */
8882 .key = "\xf8\xd4\x76\xff\xd6\x46\xee\x6c"
8883 "\x23\x84\xcb\x1c\x77\xd6\x19\x5d"
8884 "\xfe\xf1\xa9\xf3\x7b\xbc\x8d\x21"
8885 "\xa7\x9c\x21\xf8\xcb\x90\x02\x89"
8886 "\xa8\x45\x34\x8e\xc8\xc5\xb5\xf1"
8887 "\x26\xf5\x0e\x76\xfe\xfd\x1b\x1e",
8888 .klen = 48,
8889 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00"
8890 "\x00\x00\x00\x00\x00\x00\x00\x01",
8891 .input = "\x55\x25\x09\x8B\xB5\xD5\xF8\xBF"
8892 "\x37\x4A\xFE\x3C\x47\xD8\xE6\xEB"
8893 "\xCA\xA4\x9B\xB0\xAB\x6D\x64\xCA"
8894 "\x58\xB6\x73\xF0\xD7\x52\x34\xEF"
8895 "\xFB\x3E\x96\x81\xB7\x71\x34\xA4"
8896 "\x55\x20\xBE\x39\x5A\x2B\xF9\xD1"
8897 "\x65\x0B\xDA\xD3\x7E\xB3\xA6\xF7"
8898 "\x2E\x0B\x5A\x52\xDB\x39\x8C\x9B"
8899 "\x61\x17\x5F\xAF\xB6\x5A\xC8\x08"
8900 "\xA7\xB7\x2A\x11\x7C\x97\x38\x9D"
8901 "\x59\x0E\x66\x59\x5E\xD8\x8B\xCE"
8902 "\x70\xE0\xC3\x42\xB0\x8C\x0F\xBA"
8903 "\xB2\x0D\x81\xB6\xBE\x61\x1C\x2D"
8904 "\x7E\xEA\x91\x25\xAC\xEC\xF8\x28"
8905 "\x80\x1D\xF0\x30\xBA\x62\x77\x7D"
8906 "\xDB\x15\x69\xDF\xFA\x2A\x81\x64"
8907 "\x95\x5B\xA4\x7F\x3E\x4F\xE3\x30"
8908 "\xB0\x5C\xC2\x05\xF8\xF0\x29\xE7"
8909 "\x0A\xA0\x66\xB2\x5D\x0F\x39\x2B"
8910 "\xB4\xB3\x00\xA9\xD0\xAB\x63\x61"
8911 "\x5E\xDB\xFC\x11\x74\x25\x96\x65"
8912 "\xE8\xE2\x34\x57\x77\x15\x5E\x70"
8913 "\xFF\x10\x90\xC3\x64\xF0\x11\x0A"
8914 "\x63\x3A\xD3\x55\x92\x15\x4B\x0C"
8915 "\xC7\x08\x89\x17\x3B\x99\xAD\x63"
8916 "\xE7\x06\xDF\x52\xBC\x15\x64\x45"
8917 "\x9D\x7A\xFB\x69\xBC\x2D\x6E\xA9"
8918 "\x35\xD9\xD8\xF5\x0C\xC4\xA2\x23"
8919 "\x9C\x18\x8B\xA8\x8C\xFE\xF8\x0E"
8920 "\xBD\xAB\x60\x1A\x51\x17\x54\x27"
8921 "\xB6\xE8\xBE\x0F\xA9\xA5\x82\x19"
8922 "\x2F\x6F\x20\xA7\x47\xED\x74\x6C"
8923 "\x4E\xC1\xF8\x8C\x14\xF3\xBB\x1F"
8924 "\xED\x4D\x8F\x7C\x37\xEF\x19\xA1"
8925 "\x07\x16\xDE\x76\xCC\x5E\x94\x02"
8926 "\xFB\xBF\xE4\x81\x50\xCE\xFC\x0F"
8927 "\x9E\xCF\x3D\xF6\x67\x00\xBF\xA7"
8928 "\x6E\x21\x58\x36\x06\xDE\xB3\xD4"
8929 "\xA2\xFA\xD8\x4E\xE0\xB9\x7F\x23"
8930 "\x51\x21\x2B\x32\x68\xAA\xF8\xA8"
8931 "\x93\x08\xB5\x6D\xE6\x43\x2C\xB7"
8932 "\x31\xB2\x0F\xD0\xA2\x51\xC0\x25"
8933 "\x30\xC7\x10\x3F\x97\x27\x01\x8E"
8934 "\xFA\xD8\x4F\x78\xD8\x2E\x1D\xEB"
8935 "\xA1\x37\x52\x0F\x7B\x5E\x87\xA8"
8936 "\x22\xE2\xE6\x92\xA7\x5F\x11\x32"
8937 "\xCC\x93\x34\xFC\xD1\x7E\xAE\x54"
8938 "\xBC\x6A\x1B\x91\xD1\x2E\x21\xEC"
8939 "\x5D\xF1\xC4\xF1\x55\x20\xBF\xE5"
8940 "\x96\x3D\x69\x91\x20\x4E\xF2\x61"
8941 "\xDA\x77\xFE\xEE\xC3\x74\x57\x2A"
8942 "\x78\x39\xB0\xE0\xCF\x12\x56\xD6"
8943 "\x05\xDC\xF9\x19\x66\x44\x1D\xF9"
8944 "\x82\x37\xD4\xC2\x60\xB6\x31\xDF"
8945 "\x0C\xAF\xBC\x8B\x55\x9A\xC8\x2D"
8946 "\xAB\xA7\x88\x7B\x41\xE8\x29\xC9"
8947 "\x9B\x8D\xA7\x00\x86\x25\xB6\x14"
8948 "\xF5\x13\x73\xD7\x4B\x6B\x83\xF3"
8949 "\xAF\x96\x00\xE4\xB7\x3C\x65\xA6"
8950 "\x15\xB7\x94\x7D\x4E\x70\x4C\x75"
8951 "\xF3\xB4\x02\xA9\x17\x1C\x7A\x0A"
8952 "\xC0\xD5\x33\x11\x56\xDE\xDC\xF5"
8953 "\x8D\xD9\xCD\x3B\x22\x67\x18\xC7"
8954 "\xC4\xF5\x99\x61\xBC\xBB\x5B\x46",
8955 .ilen = 512,
8956 .result = "\x05\x11\xb7\x18\xab\xc6\x2d\xac"
8957 "\x70\x5d\xf6\x22\x94\xcd\xe5\x6c"
8958 "\x17\x6b\xf6\x1c\xf0\xf3\x6e\xf8"
8959 "\x50\x38\x1f\x71\x49\xb6\x57\xd6"
8960 "\x8f\xcb\x8d\x6b\xe3\xa6\x29\x90"
8961 "\xfe\x2a\x62\x82\xae\x6d\x8b\xf6"
8962 "\xad\x1e\x9e\x20\x5f\x38\xbe\x04"
8963 "\xda\x10\x8e\xed\xa2\xa4\x87\xab"
8964 "\xda\x6b\xb4\x0c\x75\xba\xd3\x7c"
8965 "\xc9\xac\x42\x31\x95\x7c\xc9\x04"
8966 "\xeb\xd5\x6e\x32\x69\x8a\xdb\xa6"
8967 "\x15\xd7\x3f\x4f\x2f\x66\x69\x03"
8968 "\x9c\x1f\x54\x0f\xde\x1f\xf3\x65"
8969 "\x4c\x96\x12\xed\x7c\x92\x03\x01"
8970 "\x6f\xbc\x35\x93\xac\xf1\x27\xf1"
8971 "\xb4\x96\x82\x5a\x5f\xb0\xa0\x50"
8972 "\x89\xa4\x8e\x66\x44\x85\xcc\xfd"
8973 "\x33\x14\x70\xe3\x96\xb2\xc3\xd3"
8974 "\xbb\x54\x5a\x1a\xf9\x74\xa2\xc5"
8975 "\x2d\x64\x75\xdd\xb4\x54\xe6\x74"
8976 "\x8c\xd3\x9d\x9e\x86\xab\x51\x53"
8977 "\xb7\x93\x3e\x6f\xd0\x4e\x2c\x40"
8978 "\xf6\xa8\x2e\x3e\x9d\xf4\x66\xa5"
8979 "\x76\x12\x73\x44\x1a\x56\xd7\x72"
8980 "\x88\xcd\x21\x8c\x4c\x0f\xfe\xda"
8981 "\x95\xe0\x3a\xa6\xa5\x84\x46\xcd"
8982 "\xd5\x3e\x9d\x3a\xe2\x67\xe6\x60"
8983 "\x1a\xe2\x70\x85\x58\xc2\x1b\x09"
8984 "\xe1\xd7\x2c\xca\xad\xa8\x8f\xf9"
8985 "\xac\xb3\x0e\xdb\xca\x2e\xe2\xb8"
8986 "\x51\x71\xd9\x3c\x6c\xf1\x56\xf8"
8987 "\xea\x9c\xf1\xfb\x0c\xe6\xb7\x10"
8988 "\x1c\xf8\xa9\x7c\xe8\x53\x35\xc1"
8989 "\x90\x3e\x76\x4a\x74\xa4\x21\x2c"
8990 "\xf6\x2c\x4e\x0f\x94\x3a\x88\x2e"
8991 "\x41\x09\x6a\x33\x7d\xf6\xdd\x3f"
8992 "\x8d\x23\x31\x74\x84\xeb\x88\x6e"
8993 "\xcc\xb9\xbc\x22\x83\x19\x07\x22"
8994 "\xa5\x2d\xdf\xa5\xf3\x80\x85\x78"
8995 "\x84\x39\x6a\x6d\x6a\x99\x4f\xa5"
8996 "\x15\xfe\x46\xb0\xe4\x6c\xa5\x41"
8997 "\x3c\xce\x8f\x42\x60\x71\xa7\x75"
8998 "\x08\x40\x65\x8a\x82\xbf\xf5\x43"
8999 "\x71\x96\xa9\x4d\x44\x8a\x20\xbe"
9000 "\xfa\x4d\xbb\xc0\x7d\x31\x96\x65"
9001 "\xe7\x75\xe5\x3e\xfd\x92\x3b\xc9"
9002 "\x55\xbb\x16\x7e\xf7\xc2\x8c\xa4"
9003 "\x40\x1d\xe5\xef\x0e\xdf\xe4\x9a"
9004 "\x62\x73\x65\xfd\x46\x63\x25\x3d"
9005 "\x2b\xaf\xe5\x64\xfe\xa5\x5c\xcf"
9006 "\x24\xf3\xb4\xac\x64\xba\xdf\x4b"
9007 "\xc6\x96\x7d\x81\x2d\x8d\x97\xf7"
9008 "\xc5\x68\x77\x84\x32\x2b\xcc\x85"
9009 "\x74\x96\xf0\x12\x77\x61\xb9\xeb"
9010 "\x71\xaa\x82\xcb\x1c\xdb\x89\xc8"
9011 "\xc6\xb5\xe3\x5c\x7d\x39\x07\x24"
9012 "\xda\x39\x87\x45\xc0\x2b\xbb\x01"
9013 "\xac\xbc\x2a\x5c\x7f\xfc\xe8\xce"
9014 "\x6d\x9c\x6f\xed\xd3\xc1\xa1\xd6"
9015 "\xc5\x55\xa9\x66\x2f\xe1\xc8\x32"
9016 "\xa6\x5d\xa4\x3a\x98\x73\xe8\x45"
9017 "\xa4\xc7\xa8\xb4\xf6\x13\x03\xf6"
9018 "\xe9\x2e\xc4\x29\x0f\x84\xdb\xc4"
9019 "\x21\xc4\xc2\x75\x67\x89\x37\x0a",
9020 .rlen = 512,
9021 .also_non_np = 1,
9022 .np = 2,
9023 .tap = { 512 - 16, 16 },
9024 },
9025};
9026
9027static struct cipher_testvec cast6_xts_enc_tv_template[] = {
9028 { /* Generated from TF test vectors */
9029 .key = "\x27\x18\x28\x18\x28\x45\x90\x45"
9030 "\x23\x53\x60\x28\x74\x71\x35\x26"
9031 "\x62\x49\x77\x57\x24\x70\x93\x69"
9032 "\x99\x59\x57\x49\x66\x96\x76\x27"
9033 "\x31\x41\x59\x26\x53\x58\x97\x93"
9034 "\x23\x84\x62\x64\x33\x83\x27\x95"
9035 "\x02\x88\x41\x97\x16\x93\x99\x37"
9036 "\x51\x05\x82\x09\x74\x94\x45\x92",
9037 .klen = 64,
9038 .iv = "\xff\x00\x00\x00\x00\x00\x00\x00"
9039 "\x00\x00\x00\x00\x00\x00\x00\x00",
9040 .input = "\x00\x01\x02\x03\x04\x05\x06\x07"
9041 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
9042 "\x10\x11\x12\x13\x14\x15\x16\x17"
9043 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"
9044 "\x20\x21\x22\x23\x24\x25\x26\x27"
9045 "\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f"
9046 "\x30\x31\x32\x33\x34\x35\x36\x37"
9047 "\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f"
9048 "\x40\x41\x42\x43\x44\x45\x46\x47"
9049 "\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f"
9050 "\x50\x51\x52\x53\x54\x55\x56\x57"
9051 "\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f"
9052 "\x60\x61\x62\x63\x64\x65\x66\x67"
9053 "\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f"
9054 "\x70\x71\x72\x73\x74\x75\x76\x77"
9055 "\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f"
9056 "\x80\x81\x82\x83\x84\x85\x86\x87"
9057 "\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"
9058 "\x90\x91\x92\x93\x94\x95\x96\x97"
9059 "\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
9060 "\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7"
9061 "\xa8\xa9\xaa\xab\xac\xad\xae\xaf"
9062 "\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7"
9063 "\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf"
9064 "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7"
9065 "\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf"
9066 "\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7"
9067 "\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf"
9068 "\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7"
9069 "\xe8\xe9\xea\xeb\xec\xed\xee\xef"
9070 "\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7"
9071 "\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff"
9072 "\x00\x01\x02\x03\x04\x05\x06\x07"
9073 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
9074 "\x10\x11\x12\x13\x14\x15\x16\x17"
9075 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"
9076 "\x20\x21\x22\x23\x24\x25\x26\x27"
9077 "\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f"
9078 "\x30\x31\x32\x33\x34\x35\x36\x37"
9079 "\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f"
9080 "\x40\x41\x42\x43\x44\x45\x46\x47"
9081 "\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f"
9082 "\x50\x51\x52\x53\x54\x55\x56\x57"
9083 "\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f"
9084 "\x60\x61\x62\x63\x64\x65\x66\x67"
9085 "\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f"
9086 "\x70\x71\x72\x73\x74\x75\x76\x77"
9087 "\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f"
9088 "\x80\x81\x82\x83\x84\x85\x86\x87"
9089 "\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"
9090 "\x90\x91\x92\x93\x94\x95\x96\x97"
9091 "\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
9092 "\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7"
9093 "\xa8\xa9\xaa\xab\xac\xad\xae\xaf"
9094 "\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7"
9095 "\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf"
9096 "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7"
9097 "\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf"
9098 "\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7"
9099 "\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf"
9100 "\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7"
9101 "\xe8\xe9\xea\xeb\xec\xed\xee\xef"
9102 "\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7"
9103 "\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff",
9104 .ilen = 512,
9105 .result = "\xDE\x6F\x22\xA5\xE8\x39\xE8\x78"
9106 "\x88\x5A\x4F\x8D\x82\x76\x52\x6D"
9107 "\xB2\x41\x16\xF4\x2B\xA6\xEB\xF6"
9108 "\xE2\xC5\x62\x8D\x61\xA1\x01\xED"
9109 "\xD9\x38\x01\xC1\x43\x63\x4E\x88"
9110 "\xC9\x4B\x5A\x88\x80\xB7\x5C\x71"
9111 "\x47\xEE\x11\xD8\xB7\x2D\x5D\x13"
9112 "\x1A\xB1\x68\x5B\x61\xA7\xA9\x81"
9113 "\x8B\x83\xA1\x6A\xAA\x36\xD6\xB6"
9114 "\x60\x54\x09\x32\xFE\x6A\x76\x2E"
9115 "\x28\xFF\xD5\xD6\xDD\x1D\x45\x7D"
9116 "\xF0\x8B\xF3\x32\x4E\x6C\x12\xCB"
9117 "\xB8\x25\x70\xF8\x40\xBC\x90\x1B"
9118 "\x11\xC3\x59\xAF\xF0\x2F\x92\xDD"
9119 "\xD3\x3B\xCF\x60\xA1\x78\x94\x57"
9120 "\xAF\x76\xC1\x67\xA6\x3C\xCD\x98"
9121 "\xB1\xF7\x27\xB9\xA3\xBD\x10\xEA"
9122 "\xCD\x8B\xC2\xF2\x14\xF2\xB2\x67"
9123 "\x05\xDD\x1D\x58\x6E\x2F\x95\x08"
9124 "\x3A\xF8\x78\x76\x82\x56\xA7\xEC"
9125 "\x51\x4B\x85\x77\xC2\x4C\x4A\x34"
9126 "\x71\x38\x17\x91\x44\xE8\xFC\x65"
9127 "\x99\x0D\x52\x91\xEE\xF8\xEF\x27"
9128 "\x2A\x9E\x6E\x78\xC4\x26\x87\xF4"
9129 "\x8A\xF0\x2D\x04\xE8\x14\x92\x5D"
9130 "\x59\x22\x9B\x29\x5C\x18\xF0\xC3"
9131 "\x47\xF3\x76\xD8\xE4\xF3\x1B\xD1"
9132 "\x70\xA3\x0D\xB5\x70\x02\x1D\xA3"
9133 "\x91\x3B\x49\x73\x18\xAB\xD4\xC9"
9134 "\xC3\x1E\xEF\x1F\xFE\xD5\x59\x8A"
9135 "\xD7\xF6\xC9\x71\x67\x79\xD7\x0E"
9136 "\xBE\x1F\x8E\xEC\x55\x7E\x4F\x24"
9137 "\xE6\x87\xEA\xFE\x96\x25\x67\x8E"
9138 "\x93\x03\xFA\xFF\xCE\xAF\xB2\x3C"
9139 "\x6F\xEB\x57\xFB\xD3\x28\x87\xA9"
9140 "\xCE\xC2\xF5\x9C\xC6\x67\xB5\x97"
9141 "\x49\xF7\x04\xCB\xEF\x84\x98\x33"
9142 "\xAF\x38\xD3\x04\x1C\x24\x71\x38"
9143 "\xC7\x71\xDD\x43\x0D\x12\x4A\x18"
9144 "\xBA\xC4\xAF\xBA\xB2\x5B\xEB\x95"
9145 "\x02\x43\x5D\xCE\x19\xCC\xCD\x66"
9146 "\x91\x0B\x8C\x7F\x51\xC4\xBF\x3C"
9147 "\x8B\xF1\xCC\xAA\x29\xD7\x87\xCB"
9148 "\x3E\xC5\xF3\xC9\x75\xE8\xA3\x5B"
9149 "\x30\x45\xA9\xB7\xAF\x80\x64\x6F"
9150 "\x75\x4A\xA7\xC0\x6D\x19\x6B\xDE"
9151 "\x17\xDE\x6D\xEA\x87\x9F\x95\xAE"
9152 "\xF5\x3C\xEE\x54\xB8\x27\x84\xF8"
9153 "\x97\xA3\xE1\x6F\x38\x24\x34\x88"
9154 "\xCE\xBD\x32\x52\xE0\x00\x6C\x94"
9155 "\xC9\xD7\x5D\x37\x81\x33\x2E\x7F"
9156 "\x4F\x7E\x2E\x0D\x94\xBD\xEA\x59"
9157 "\x34\x39\xA8\x35\x12\xB7\xBC\xAC"
9158 "\xEA\x52\x9C\x78\x02\x6D\x92\x36"
9159 "\xFB\x59\x2B\xA4\xEA\x7B\x1B\x83"
9160 "\xE1\x4D\x5E\x2A\x7E\x92\xB1\x64"
9161 "\xDE\xE0\x27\x4B\x0A\x6F\x4C\xE3"
9162 "\xB0\xEB\x31\xE4\x69\x95\xAB\x35"
9163 "\x8B\x2C\xF5\x6B\x7F\xF1\xA2\x82"
9164 "\xF8\xD9\x47\x82\xA9\x82\x03\x91"
9165 "\x69\x1F\xBE\x4C\xE7\xC7\x34\x2F"
9166 "\x45\x72\x80\x17\x81\xBD\x9D\x62"
9167 "\xA1\xAC\xE8\xCF\xC6\x74\xCF\xDC"
9168 "\x22\x60\x4E\xE8\xA4\x5D\x85\xB9",
9169 .rlen = 512,
9170 .also_non_np = 1,
9171 .np = 2,
9172 .tap = { 512 - 16, 16 },
9173 },
9174};
9175
9176static struct cipher_testvec cast6_xts_dec_tv_template[] = {
9177 { /* Generated from TF test vectors */
9178 .key = "\x27\x18\x28\x18\x28\x45\x90\x45"
9179 "\x23\x53\x60\x28\x74\x71\x35\x26"
9180 "\x62\x49\x77\x57\x24\x70\x93\x69"
9181 "\x99\x59\x57\x49\x66\x96\x76\x27"
9182 "\x31\x41\x59\x26\x53\x58\x97\x93"
9183 "\x23\x84\x62\x64\x33\x83\x27\x95"
9184 "\x02\x88\x41\x97\x16\x93\x99\x37"
9185 "\x51\x05\x82\x09\x74\x94\x45\x92",
9186 .klen = 64,
9187 .iv = "\xff\x00\x00\x00\x00\x00\x00\x00"
9188 "\x00\x00\x00\x00\x00\x00\x00\x00",
9189 .input = "\xDE\x6F\x22\xA5\xE8\x39\xE8\x78"
9190 "\x88\x5A\x4F\x8D\x82\x76\x52\x6D"
9191 "\xB2\x41\x16\xF4\x2B\xA6\xEB\xF6"
9192 "\xE2\xC5\x62\x8D\x61\xA1\x01\xED"
9193 "\xD9\x38\x01\xC1\x43\x63\x4E\x88"
9194 "\xC9\x4B\x5A\x88\x80\xB7\x5C\x71"
9195 "\x47\xEE\x11\xD8\xB7\x2D\x5D\x13"
9196 "\x1A\xB1\x68\x5B\x61\xA7\xA9\x81"
9197 "\x8B\x83\xA1\x6A\xAA\x36\xD6\xB6"
9198 "\x60\x54\x09\x32\xFE\x6A\x76\x2E"
9199 "\x28\xFF\xD5\xD6\xDD\x1D\x45\x7D"
9200 "\xF0\x8B\xF3\x32\x4E\x6C\x12\xCB"
9201 "\xB8\x25\x70\xF8\x40\xBC\x90\x1B"
9202 "\x11\xC3\x59\xAF\xF0\x2F\x92\xDD"
9203 "\xD3\x3B\xCF\x60\xA1\x78\x94\x57"
9204 "\xAF\x76\xC1\x67\xA6\x3C\xCD\x98"
9205 "\xB1\xF7\x27\xB9\xA3\xBD\x10\xEA"
9206 "\xCD\x8B\xC2\xF2\x14\xF2\xB2\x67"
9207 "\x05\xDD\x1D\x58\x6E\x2F\x95\x08"
9208 "\x3A\xF8\x78\x76\x82\x56\xA7\xEC"
9209 "\x51\x4B\x85\x77\xC2\x4C\x4A\x34"
9210 "\x71\x38\x17\x91\x44\xE8\xFC\x65"
9211 "\x99\x0D\x52\x91\xEE\xF8\xEF\x27"
9212 "\x2A\x9E\x6E\x78\xC4\x26\x87\xF4"
9213 "\x8A\xF0\x2D\x04\xE8\x14\x92\x5D"
9214 "\x59\x22\x9B\x29\x5C\x18\xF0\xC3"
9215 "\x47\xF3\x76\xD8\xE4\xF3\x1B\xD1"
9216 "\x70\xA3\x0D\xB5\x70\x02\x1D\xA3"
9217 "\x91\x3B\x49\x73\x18\xAB\xD4\xC9"
9218 "\xC3\x1E\xEF\x1F\xFE\xD5\x59\x8A"
9219 "\xD7\xF6\xC9\x71\x67\x79\xD7\x0E"
9220 "\xBE\x1F\x8E\xEC\x55\x7E\x4F\x24"
9221 "\xE6\x87\xEA\xFE\x96\x25\x67\x8E"
9222 "\x93\x03\xFA\xFF\xCE\xAF\xB2\x3C"
9223 "\x6F\xEB\x57\xFB\xD3\x28\x87\xA9"
9224 "\xCE\xC2\xF5\x9C\xC6\x67\xB5\x97"
9225 "\x49\xF7\x04\xCB\xEF\x84\x98\x33"
9226 "\xAF\x38\xD3\x04\x1C\x24\x71\x38"
9227 "\xC7\x71\xDD\x43\x0D\x12\x4A\x18"
9228 "\xBA\xC4\xAF\xBA\xB2\x5B\xEB\x95"
9229 "\x02\x43\x5D\xCE\x19\xCC\xCD\x66"
9230 "\x91\x0B\x8C\x7F\x51\xC4\xBF\x3C"
9231 "\x8B\xF1\xCC\xAA\x29\xD7\x87\xCB"
9232 "\x3E\xC5\xF3\xC9\x75\xE8\xA3\x5B"
9233 "\x30\x45\xA9\xB7\xAF\x80\x64\x6F"
9234 "\x75\x4A\xA7\xC0\x6D\x19\x6B\xDE"
9235 "\x17\xDE\x6D\xEA\x87\x9F\x95\xAE"
9236 "\xF5\x3C\xEE\x54\xB8\x27\x84\xF8"
9237 "\x97\xA3\xE1\x6F\x38\x24\x34\x88"
9238 "\xCE\xBD\x32\x52\xE0\x00\x6C\x94"
9239 "\xC9\xD7\x5D\x37\x81\x33\x2E\x7F"
9240 "\x4F\x7E\x2E\x0D\x94\xBD\xEA\x59"
9241 "\x34\x39\xA8\x35\x12\xB7\xBC\xAC"
9242 "\xEA\x52\x9C\x78\x02\x6D\x92\x36"
9243 "\xFB\x59\x2B\xA4\xEA\x7B\x1B\x83"
9244 "\xE1\x4D\x5E\x2A\x7E\x92\xB1\x64"
9245 "\xDE\xE0\x27\x4B\x0A\x6F\x4C\xE3"
9246 "\xB0\xEB\x31\xE4\x69\x95\xAB\x35"
9247 "\x8B\x2C\xF5\x6B\x7F\xF1\xA2\x82"
9248 "\xF8\xD9\x47\x82\xA9\x82\x03\x91"
9249 "\x69\x1F\xBE\x4C\xE7\xC7\x34\x2F"
9250 "\x45\x72\x80\x17\x81\xBD\x9D\x62"
9251 "\xA1\xAC\xE8\xCF\xC6\x74\xCF\xDC"
9252 "\x22\x60\x4E\xE8\xA4\x5D\x85\xB9",
9253 .ilen = 512,
9254 .result = "\x00\x01\x02\x03\x04\x05\x06\x07"
9255 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
9256 "\x10\x11\x12\x13\x14\x15\x16\x17"
9257 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"
9258 "\x20\x21\x22\x23\x24\x25\x26\x27"
9259 "\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f"
9260 "\x30\x31\x32\x33\x34\x35\x36\x37"
9261 "\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f"
9262 "\x40\x41\x42\x43\x44\x45\x46\x47"
9263 "\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f"
9264 "\x50\x51\x52\x53\x54\x55\x56\x57"
9265 "\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f"
9266 "\x60\x61\x62\x63\x64\x65\x66\x67"
9267 "\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f"
9268 "\x70\x71\x72\x73\x74\x75\x76\x77"
9269 "\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f"
9270 "\x80\x81\x82\x83\x84\x85\x86\x87"
9271 "\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"
9272 "\x90\x91\x92\x93\x94\x95\x96\x97"
9273 "\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
9274 "\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7"
9275 "\xa8\xa9\xaa\xab\xac\xad\xae\xaf"
9276 "\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7"
9277 "\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf"
9278 "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7"
9279 "\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf"
9280 "\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7"
9281 "\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf"
9282 "\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7"
9283 "\xe8\xe9\xea\xeb\xec\xed\xee\xef"
9284 "\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7"
9285 "\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff"
9286 "\x00\x01\x02\x03\x04\x05\x06\x07"
9287 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
9288 "\x10\x11\x12\x13\x14\x15\x16\x17"
9289 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"
9290 "\x20\x21\x22\x23\x24\x25\x26\x27"
9291 "\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f"
9292 "\x30\x31\x32\x33\x34\x35\x36\x37"
9293 "\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f"
9294 "\x40\x41\x42\x43\x44\x45\x46\x47"
9295 "\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f"
9296 "\x50\x51\x52\x53\x54\x55\x56\x57"
9297 "\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f"
9298 "\x60\x61\x62\x63\x64\x65\x66\x67"
9299 "\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f"
9300 "\x70\x71\x72\x73\x74\x75\x76\x77"
9301 "\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f"
9302 "\x80\x81\x82\x83\x84\x85\x86\x87"
9303 "\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"
9304 "\x90\x91\x92\x93\x94\x95\x96\x97"
9305 "\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
9306 "\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7"
9307 "\xa8\xa9\xaa\xab\xac\xad\xae\xaf"
9308 "\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7"
9309 "\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf"
9310 "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7"
9311 "\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf"
9312 "\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7"
9313 "\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf"
9314 "\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7"
9315 "\xe8\xe9\xea\xeb\xec\xed\xee\xef"
9316 "\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7"
9317 "\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff",
9318 .rlen = 512,
9319 .also_non_np = 1,
9320 .np = 2,
9321 .tap = { 512 - 16, 16 },
6967 }, 9322 },
6968}; 9323};
6969 9324
@@ -8313,6 +10668,9 @@ static struct cipher_testvec aes_lrw_enc_tv_template[] = {
8313 "\xcd\x7e\x2b\x5d\x43\xea\x42\xe7" 10668 "\xcd\x7e\x2b\x5d\x43\xea\x42\xe7"
8314 "\x74\x3f\x7d\x58\x88\x75\xde\x3e", 10669 "\x74\x3f\x7d\x58\x88\x75\xde\x3e",
8315 .rlen = 512, 10670 .rlen = 512,
10671 .also_non_np = 1,
10672 .np = 2,
10673 .tap = { 512 - 16, 16 },
8316 } 10674 }
8317}; 10675};
8318 10676
@@ -8564,6 +10922,9 @@ static struct cipher_testvec aes_lrw_dec_tv_template[] = {
8564 "\xe9\x2e\xc4\x29\x0f\x84\xdb\xc4" 10922 "\xe9\x2e\xc4\x29\x0f\x84\xdb\xc4"
8565 "\x21\xc4\xc2\x75\x67\x89\x37\x0a", 10923 "\x21\xc4\xc2\x75\x67\x89\x37\x0a",
8566 .rlen = 512, 10924 .rlen = 512,
10925 .also_non_np = 1,
10926 .np = 2,
10927 .tap = { 512 - 16, 16 },
8567 } 10928 }
8568}; 10929};
8569 10930
@@ -8905,6 +11266,9 @@ static struct cipher_testvec aes_xts_enc_tv_template[] = {
8905 "\xc4\xf3\x6f\xfd\xa9\xfc\xea\x70" 11266 "\xc4\xf3\x6f\xfd\xa9\xfc\xea\x70"
8906 "\xb9\xc6\xe6\x93\xe1\x48\xc1\x51", 11267 "\xb9\xc6\xe6\x93\xe1\x48\xc1\x51",
8907 .rlen = 512, 11268 .rlen = 512,
11269 .also_non_np = 1,
11270 .np = 2,
11271 .tap = { 512 - 16, 16 },
8908 } 11272 }
8909}; 11273};
8910 11274
@@ -9246,7 +11610,9 @@ static struct cipher_testvec aes_xts_dec_tv_template[] = {
9246 "\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7" 11610 "\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7"
9247 "\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff", 11611 "\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff",
9248 .rlen = 512, 11612 .rlen = 512,
9249 11613 .also_non_np = 1,
11614 .np = 2,
11615 .tap = { 512 - 16, 16 },
9250 } 11616 }
9251}; 11617};
9252 11618
@@ -12125,8 +14491,12 @@ static struct cprng_testvec ansi_cprng_aes_tv_template[] = {
12125}; 14491};
12126 14492
12127/* Cast5 test vectors from RFC 2144 */ 14493/* Cast5 test vectors from RFC 2144 */
12128#define CAST5_ENC_TEST_VECTORS 3 14494#define CAST5_ENC_TEST_VECTORS 4
12129#define CAST5_DEC_TEST_VECTORS 3 14495#define CAST5_DEC_TEST_VECTORS 4
14496#define CAST5_CBC_ENC_TEST_VECTORS 1
14497#define CAST5_CBC_DEC_TEST_VECTORS 1
14498#define CAST5_CTR_ENC_TEST_VECTORS 2
14499#define CAST5_CTR_DEC_TEST_VECTORS 2
12130 14500
12131static struct cipher_testvec cast5_enc_tv_template[] = { 14501static struct cipher_testvec cast5_enc_tv_template[] = {
12132 { 14502 {
@@ -12152,6 +14522,140 @@ static struct cipher_testvec cast5_enc_tv_template[] = {
12152 .ilen = 8, 14522 .ilen = 8,
12153 .result = "\x7a\xc8\x16\xd1\x6e\x9b\x30\x2e", 14523 .result = "\x7a\xc8\x16\xd1\x6e\x9b\x30\x2e",
12154 .rlen = 8, 14524 .rlen = 8,
14525 }, { /* Generated from TF test vectors */
14526 .key = "\x85\x62\x3F\x1C\xF9\xD6\x1C\xF9"
14527 "\xD6\xB3\x90\x6D\x4A\x90\x6D\x4A",
14528 .klen = 16,
14529 .iv = "\xE2\x24\x89\xEE\x53\xB8\x1D\x5F",
14530 .input = "\x56\xED\x84\x1B\x8F\x26\xBD\x31"
14531 "\xC8\x5F\xF6\x6A\x01\x98\x0C\xA3"
14532 "\x3A\xD1\x45\xDC\x73\x0A\x7E\x15"
14533 "\xAC\x20\xB7\x4E\xE5\x59\xF0\x87"
14534 "\x1E\x92\x29\xC0\x34\xCB\x62\xF9"
14535 "\x6D\x04\x9B\x0F\xA6\x3D\xD4\x48"
14536 "\xDF\x76\x0D\x81\x18\xAF\x23\xBA"
14537 "\x51\xE8\x5C\xF3\x8A\x21\x95\x2C"
14538 "\xC3\x37\xCE\x65\xFC\x70\x07\x9E"
14539 "\x12\xA9\x40\xD7\x4B\xE2\x79\x10"
14540 "\x84\x1B\xB2\x26\xBD\x54\xEB\x5F"
14541 "\xF6\x8D\x01\x98\x2F\xC6\x3A\xD1"
14542 "\x68\xFF\x73\x0A\xA1\x15\xAC\x43"
14543 "\xDA\x4E\xE5\x7C\x13\x87\x1E\xB5"
14544 "\x29\xC0\x57\xEE\x62\xF9\x90\x04"
14545 "\x9B\x32\xC9\x3D\xD4\x6B\x02\x76"
14546 "\x0D\xA4\x18\xAF\x46\xDD\x51\xE8"
14547 "\x7F\x16\x8A\x21\xB8\x2C\xC3\x5A"
14548 "\xF1\x65\xFC\x93\x07\x9E\x35\xCC"
14549 "\x40\xD7\x6E\x05\x79\x10\xA7\x1B"
14550 "\xB2\x49\xE0\x54\xEB\x82\x19\x8D"
14551 "\x24\xBB\x2F\xC6\x5D\xF4\x68\xFF"
14552 "\x96\x0A\xA1\x38\xCF\x43\xDA\x71"
14553 "\x08\x7C\x13\xAA\x1E\xB5\x4C\xE3"
14554 "\x57\xEE\x85\x1C\x90\x27\xBE\x32"
14555 "\xC9\x60\xF7\x6B\x02\x99\x0D\xA4"
14556 "\x3B\xD2\x46\xDD\x74\x0B\x7F\x16"
14557 "\xAD\x21\xB8\x4F\xE6\x5A\xF1\x88"
14558 "\x1F\x93\x2A\xC1\x35\xCC\x63\xFA"
14559 "\x6E\x05\x9C\x10\xA7\x3E\xD5\x49"
14560 "\xE0\x77\x0E\x82\x19\xB0\x24\xBB"
14561 "\x52\xE9\x5D\xF4\x8B\x22\x96\x2D"
14562 "\xC4\x38\xCF\x66\xFD\x71\x08\x9F"
14563 "\x13\xAA\x41\xD8\x4C\xE3\x7A\x11"
14564 "\x85\x1C\xB3\x27\xBE\x55\xEC\x60"
14565 "\xF7\x8E\x02\x99\x30\xC7\x3B\xD2"
14566 "\x69\x00\x74\x0B\xA2\x16\xAD\x44"
14567 "\xDB\x4F\xE6\x7D\x14\x88\x1F\xB6"
14568 "\x2A\xC1\x58\xEF\x63\xFA\x91\x05"
14569 "\x9C\x33\xCA\x3E\xD5\x6C\x03\x77"
14570 "\x0E\xA5\x19\xB0\x47\xDE\x52\xE9"
14571 "\x80\x17\x8B\x22\xB9\x2D\xC4\x5B"
14572 "\xF2\x66\xFD\x94\x08\x9F\x36\xCD"
14573 "\x41\xD8\x6F\x06\x7A\x11\xA8\x1C"
14574 "\xB3\x4A\xE1\x55\xEC\x83\x1A\x8E"
14575 "\x25\xBC\x30\xC7\x5E\xF5\x69\x00"
14576 "\x97\x0B\xA2\x39\xD0\x44\xDB\x72"
14577 "\x09\x7D\x14\xAB\x1F\xB6\x4D\xE4"
14578 "\x58\xEF\x86\x1D\x91\x28\xBF\x33"
14579 "\xCA\x61\xF8\x6C\x03\x9A\x0E\xA5"
14580 "\x3C\xD3\x47\xDE\x75\x0C\x80\x17"
14581 "\xAE\x22\xB9\x50\xE7\x5B\xF2\x89"
14582 "\x20\x94\x2B\xC2\x36\xCD\x64\xFB"
14583 "\x6F\x06\x9D\x11\xA8\x3F\xD6\x4A"
14584 "\xE1\x78\x0F\x83\x1A\xB1\x25\xBC"
14585 "\x53\xEA\x5E\xF5\x8C\x00\x97\x2E"
14586 "\xC5\x39\xD0\x67\xFE\x72\x09\xA0"
14587 "\x14\xAB\x42\xD9\x4D\xE4\x7B\x12"
14588 "\x86\x1D\xB4\x28\xBF\x56\xED\x61"
14589 "\xF8\x8F\x03\x9A\x31\xC8\x3C\xD3"
14590 "\x6A\x01\x75\x0C\xA3\x17\xAE\x45"
14591 "\xDC\x50\xE7\x7E\x15\x89\x20\xB7",
14592 .ilen = 496,
14593 .result = "\x8D\xFC\x81\x9C\xCB\xAA\x5A\x1C"
14594 "\x7E\x95\xCF\x40\xAB\x4D\x6F\xEA"
14595 "\xD3\xD9\xB0\x9A\xB7\xC7\xE0\x2E"
14596 "\xD1\x39\x34\x92\x8F\xFA\x14\xF1"
14597 "\xD5\xD2\x7B\x59\x1F\x35\x28\xC2"
14598 "\x20\xD9\x42\x06\xC9\x0B\x10\x04"
14599 "\xF8\x79\xCD\x32\x86\x75\x4C\xB6"
14600 "\x7B\x1C\x52\xB1\x91\x64\x22\x4B"
14601 "\x13\xC7\xAE\x98\x0E\xB5\xCF\x6F"
14602 "\x3F\xF4\x43\x96\x73\x0D\xA2\x05"
14603 "\xDB\xFD\x28\x90\x2C\x56\xB9\x37"
14604 "\x5B\x69\x0C\xAD\x84\x67\xFF\x15"
14605 "\x4A\xD4\xA7\xD3\xDD\x99\x47\x3A"
14606 "\xED\x34\x35\x78\x6B\x91\xC9\x32"
14607 "\xE1\xBF\xBC\xB4\x04\x85\x6A\x39"
14608 "\xC0\xBA\x51\xD0\x0F\x4E\xD1\xE2"
14609 "\x1C\xFD\x0E\x05\x07\xF4\x10\xED"
14610 "\xA2\x17\xFF\xF5\x64\xC6\x1A\x22"
14611 "\xAD\x78\xE7\xD7\x11\xE9\x99\xB9"
14612 "\xAA\xEC\x6F\xF8\x3B\xBF\xCE\x77"
14613 "\x93\xE8\xAD\x1D\x50\x6C\xAE\xBC"
14614 "\xBA\x5C\x80\xD1\x91\x65\x51\x1B"
14615 "\xE8\x0A\xCD\x99\x96\x71\x3D\xB6"
14616 "\x78\x75\x37\x55\xC1\xF5\x90\x40"
14617 "\x34\xF4\x7E\xC8\xCC\x3A\x5F\x6E"
14618 "\x36\xA1\xA1\xC2\x3A\x72\x42\x8E"
14619 "\x0E\x37\x88\xE8\xCE\x83\xCB\xAD"
14620 "\xE0\x69\x77\x50\xC7\x0C\x99\xCA"
14621 "\x19\x5B\x30\x25\x9A\xEF\x9B\x0C"
14622 "\xEF\x8F\x74\x4C\xCF\x49\x4E\xB9"
14623 "\xC5\xAE\x9E\x2E\x78\x9A\xB9\x48"
14624 "\xD5\x81\xE4\x37\x1D\xBF\x27\xD9"
14625 "\xC5\xD6\x65\x43\x45\x8C\xBB\xB6"
14626 "\x55\xF4\x06\xBB\x49\x53\x8B\x1B"
14627 "\x07\xA9\x96\x69\x5B\xCB\x0F\xBC"
14628 "\x93\x85\x90\x0F\x0A\x68\x40\x2A"
14629 "\x95\xED\x2D\x88\xBF\x71\xD0\xBB"
14630 "\xEC\xB0\x77\x6C\x79\xFC\x3C\x05"
14631 "\x49\x3F\xB8\x24\xEF\x8E\x09\xA2"
14632 "\x1D\xEF\x92\x02\x96\xD4\x7F\xC8"
14633 "\x03\xB2\xCA\xDB\x17\x5C\x52\xCF"
14634 "\xDD\x70\x37\x63\xAA\xA5\x83\x20"
14635 "\x52\x02\xF6\xB9\xE7\x6E\x0A\xB6"
14636 "\x79\x03\xA0\xDA\xA3\x79\x21\xBD"
14637 "\xE3\x37\x3A\xC0\xF7\x2C\x32\xBE"
14638 "\x8B\xE8\xA6\x00\xC7\x32\xD5\x06"
14639 "\xBB\xE3\xAB\x06\x21\x82\xB8\x32"
14640 "\x31\x34\x2A\xA7\x1F\x64\x99\xBF"
14641 "\xFA\xDA\x3D\x75\xF7\x48\xD5\x48"
14642 "\x4B\x52\x7E\xF6\x7C\xAB\x67\x59"
14643 "\xC5\xDC\xA8\xC6\x63\x85\x4A\xDF"
14644 "\xF0\x40\x5F\xCF\xE3\x58\x52\x67"
14645 "\x7A\x24\x32\xC5\xEC\x9E\xA9\x6F"
14646 "\x58\x56\xDD\x94\x1F\x71\x8D\xF4"
14647 "\x6E\xFF\x2C\xA7\xA5\xD8\xBA\xAF"
14648 "\x1D\x8B\xA2\x46\xB5\xC4\x9F\x57"
14649 "\x8D\xD8\xB3\x3C\x02\x0D\xBB\x84"
14650 "\xC7\xBD\xB4\x9A\x6E\xBB\xB1\x37"
14651 "\x95\x79\xC4\xA7\xEA\x1D\xDC\x33"
14652 "\x5D\x0B\x3F\x03\x8F\x30\xF9\xAE"
14653 "\x4F\xFE\x24\x9C\x9A\x02\xE5\x57"
14654 "\xF5\xBC\x25\xD6\x02\x56\x57\x1C",
14655 .rlen = 496,
14656 .also_non_np = 1,
14657 .np = 2,
14658 .tap = { 496 - 16, 16 },
12155 }, 14659 },
12156}; 14660};
12157 14661
@@ -12179,6 +14683,718 @@ static struct cipher_testvec cast5_dec_tv_template[] = {
12179 .ilen = 8, 14683 .ilen = 8,
12180 .result = "\x01\x23\x45\x67\x89\xab\xcd\xef", 14684 .result = "\x01\x23\x45\x67\x89\xab\xcd\xef",
12181 .rlen = 8, 14685 .rlen = 8,
14686 }, { /* Generated from TF test vectors */
14687 .key = "\x85\x62\x3F\x1C\xF9\xD6\x1C\xF9"
14688 "\xD6\xB3\x90\x6D\x4A\x90\x6D\x4A",
14689 .klen = 16,
14690 .iv = "\xE2\x24\x89\xEE\x53\xB8\x1D\x5F",
14691 .input = "\x8D\xFC\x81\x9C\xCB\xAA\x5A\x1C"
14692 "\x7E\x95\xCF\x40\xAB\x4D\x6F\xEA"
14693 "\xD3\xD9\xB0\x9A\xB7\xC7\xE0\x2E"
14694 "\xD1\x39\x34\x92\x8F\xFA\x14\xF1"
14695 "\xD5\xD2\x7B\x59\x1F\x35\x28\xC2"
14696 "\x20\xD9\x42\x06\xC9\x0B\x10\x04"
14697 "\xF8\x79\xCD\x32\x86\x75\x4C\xB6"
14698 "\x7B\x1C\x52\xB1\x91\x64\x22\x4B"
14699 "\x13\xC7\xAE\x98\x0E\xB5\xCF\x6F"
14700 "\x3F\xF4\x43\x96\x73\x0D\xA2\x05"
14701 "\xDB\xFD\x28\x90\x2C\x56\xB9\x37"
14702 "\x5B\x69\x0C\xAD\x84\x67\xFF\x15"
14703 "\x4A\xD4\xA7\xD3\xDD\x99\x47\x3A"
14704 "\xED\x34\x35\x78\x6B\x91\xC9\x32"
14705 "\xE1\xBF\xBC\xB4\x04\x85\x6A\x39"
14706 "\xC0\xBA\x51\xD0\x0F\x4E\xD1\xE2"
14707 "\x1C\xFD\x0E\x05\x07\xF4\x10\xED"
14708 "\xA2\x17\xFF\xF5\x64\xC6\x1A\x22"
14709 "\xAD\x78\xE7\xD7\x11\xE9\x99\xB9"
14710 "\xAA\xEC\x6F\xF8\x3B\xBF\xCE\x77"
14711 "\x93\xE8\xAD\x1D\x50\x6C\xAE\xBC"
14712 "\xBA\x5C\x80\xD1\x91\x65\x51\x1B"
14713 "\xE8\x0A\xCD\x99\x96\x71\x3D\xB6"
14714 "\x78\x75\x37\x55\xC1\xF5\x90\x40"
14715 "\x34\xF4\x7E\xC8\xCC\x3A\x5F\x6E"
14716 "\x36\xA1\xA1\xC2\x3A\x72\x42\x8E"
14717 "\x0E\x37\x88\xE8\xCE\x83\xCB\xAD"
14718 "\xE0\x69\x77\x50\xC7\x0C\x99\xCA"
14719 "\x19\x5B\x30\x25\x9A\xEF\x9B\x0C"
14720 "\xEF\x8F\x74\x4C\xCF\x49\x4E\xB9"
14721 "\xC5\xAE\x9E\x2E\x78\x9A\xB9\x48"
14722 "\xD5\x81\xE4\x37\x1D\xBF\x27\xD9"
14723 "\xC5\xD6\x65\x43\x45\x8C\xBB\xB6"
14724 "\x55\xF4\x06\xBB\x49\x53\x8B\x1B"
14725 "\x07\xA9\x96\x69\x5B\xCB\x0F\xBC"
14726 "\x93\x85\x90\x0F\x0A\x68\x40\x2A"
14727 "\x95\xED\x2D\x88\xBF\x71\xD0\xBB"
14728 "\xEC\xB0\x77\x6C\x79\xFC\x3C\x05"
14729 "\x49\x3F\xB8\x24\xEF\x8E\x09\xA2"
14730 "\x1D\xEF\x92\x02\x96\xD4\x7F\xC8"
14731 "\x03\xB2\xCA\xDB\x17\x5C\x52\xCF"
14732 "\xDD\x70\x37\x63\xAA\xA5\x83\x20"
14733 "\x52\x02\xF6\xB9\xE7\x6E\x0A\xB6"
14734 "\x79\x03\xA0\xDA\xA3\x79\x21\xBD"
14735 "\xE3\x37\x3A\xC0\xF7\x2C\x32\xBE"
14736 "\x8B\xE8\xA6\x00\xC7\x32\xD5\x06"
14737 "\xBB\xE3\xAB\x06\x21\x82\xB8\x32"
14738 "\x31\x34\x2A\xA7\x1F\x64\x99\xBF"
14739 "\xFA\xDA\x3D\x75\xF7\x48\xD5\x48"
14740 "\x4B\x52\x7E\xF6\x7C\xAB\x67\x59"
14741 "\xC5\xDC\xA8\xC6\x63\x85\x4A\xDF"
14742 "\xF0\x40\x5F\xCF\xE3\x58\x52\x67"
14743 "\x7A\x24\x32\xC5\xEC\x9E\xA9\x6F"
14744 "\x58\x56\xDD\x94\x1F\x71\x8D\xF4"
14745 "\x6E\xFF\x2C\xA7\xA5\xD8\xBA\xAF"
14746 "\x1D\x8B\xA2\x46\xB5\xC4\x9F\x57"
14747 "\x8D\xD8\xB3\x3C\x02\x0D\xBB\x84"
14748 "\xC7\xBD\xB4\x9A\x6E\xBB\xB1\x37"
14749 "\x95\x79\xC4\xA7\xEA\x1D\xDC\x33"
14750 "\x5D\x0B\x3F\x03\x8F\x30\xF9\xAE"
14751 "\x4F\xFE\x24\x9C\x9A\x02\xE5\x57"
14752 "\xF5\xBC\x25\xD6\x02\x56\x57\x1C",
14753 .ilen = 496,
14754 .result = "\x56\xED\x84\x1B\x8F\x26\xBD\x31"
14755 "\xC8\x5F\xF6\x6A\x01\x98\x0C\xA3"
14756 "\x3A\xD1\x45\xDC\x73\x0A\x7E\x15"
14757 "\xAC\x20\xB7\x4E\xE5\x59\xF0\x87"
14758 "\x1E\x92\x29\xC0\x34\xCB\x62\xF9"
14759 "\x6D\x04\x9B\x0F\xA6\x3D\xD4\x48"
14760 "\xDF\x76\x0D\x81\x18\xAF\x23\xBA"
14761 "\x51\xE8\x5C\xF3\x8A\x21\x95\x2C"
14762 "\xC3\x37\xCE\x65\xFC\x70\x07\x9E"
14763 "\x12\xA9\x40\xD7\x4B\xE2\x79\x10"
14764 "\x84\x1B\xB2\x26\xBD\x54\xEB\x5F"
14765 "\xF6\x8D\x01\x98\x2F\xC6\x3A\xD1"
14766 "\x68\xFF\x73\x0A\xA1\x15\xAC\x43"
14767 "\xDA\x4E\xE5\x7C\x13\x87\x1E\xB5"
14768 "\x29\xC0\x57\xEE\x62\xF9\x90\x04"
14769 "\x9B\x32\xC9\x3D\xD4\x6B\x02\x76"
14770 "\x0D\xA4\x18\xAF\x46\xDD\x51\xE8"
14771 "\x7F\x16\x8A\x21\xB8\x2C\xC3\x5A"
14772 "\xF1\x65\xFC\x93\x07\x9E\x35\xCC"
14773 "\x40\xD7\x6E\x05\x79\x10\xA7\x1B"
14774 "\xB2\x49\xE0\x54\xEB\x82\x19\x8D"
14775 "\x24\xBB\x2F\xC6\x5D\xF4\x68\xFF"
14776 "\x96\x0A\xA1\x38\xCF\x43\xDA\x71"
14777 "\x08\x7C\x13\xAA\x1E\xB5\x4C\xE3"
14778 "\x57\xEE\x85\x1C\x90\x27\xBE\x32"
14779 "\xC9\x60\xF7\x6B\x02\x99\x0D\xA4"
14780 "\x3B\xD2\x46\xDD\x74\x0B\x7F\x16"
14781 "\xAD\x21\xB8\x4F\xE6\x5A\xF1\x88"
14782 "\x1F\x93\x2A\xC1\x35\xCC\x63\xFA"
14783 "\x6E\x05\x9C\x10\xA7\x3E\xD5\x49"
14784 "\xE0\x77\x0E\x82\x19\xB0\x24\xBB"
14785 "\x52\xE9\x5D\xF4\x8B\x22\x96\x2D"
14786 "\xC4\x38\xCF\x66\xFD\x71\x08\x9F"
14787 "\x13\xAA\x41\xD8\x4C\xE3\x7A\x11"
14788 "\x85\x1C\xB3\x27\xBE\x55\xEC\x60"
14789 "\xF7\x8E\x02\x99\x30\xC7\x3B\xD2"
14790 "\x69\x00\x74\x0B\xA2\x16\xAD\x44"
14791 "\xDB\x4F\xE6\x7D\x14\x88\x1F\xB6"
14792 "\x2A\xC1\x58\xEF\x63\xFA\x91\x05"
14793 "\x9C\x33\xCA\x3E\xD5\x6C\x03\x77"
14794 "\x0E\xA5\x19\xB0\x47\xDE\x52\xE9"
14795 "\x80\x17\x8B\x22\xB9\x2D\xC4\x5B"
14796 "\xF2\x66\xFD\x94\x08\x9F\x36\xCD"
14797 "\x41\xD8\x6F\x06\x7A\x11\xA8\x1C"
14798 "\xB3\x4A\xE1\x55\xEC\x83\x1A\x8E"
14799 "\x25\xBC\x30\xC7\x5E\xF5\x69\x00"
14800 "\x97\x0B\xA2\x39\xD0\x44\xDB\x72"
14801 "\x09\x7D\x14\xAB\x1F\xB6\x4D\xE4"
14802 "\x58\xEF\x86\x1D\x91\x28\xBF\x33"
14803 "\xCA\x61\xF8\x6C\x03\x9A\x0E\xA5"
14804 "\x3C\xD3\x47\xDE\x75\x0C\x80\x17"
14805 "\xAE\x22\xB9\x50\xE7\x5B\xF2\x89"
14806 "\x20\x94\x2B\xC2\x36\xCD\x64\xFB"
14807 "\x6F\x06\x9D\x11\xA8\x3F\xD6\x4A"
14808 "\xE1\x78\x0F\x83\x1A\xB1\x25\xBC"
14809 "\x53\xEA\x5E\xF5\x8C\x00\x97\x2E"
14810 "\xC5\x39\xD0\x67\xFE\x72\x09\xA0"
14811 "\x14\xAB\x42\xD9\x4D\xE4\x7B\x12"
14812 "\x86\x1D\xB4\x28\xBF\x56\xED\x61"
14813 "\xF8\x8F\x03\x9A\x31\xC8\x3C\xD3"
14814 "\x6A\x01\x75\x0C\xA3\x17\xAE\x45"
14815 "\xDC\x50\xE7\x7E\x15\x89\x20\xB7",
14816 .rlen = 496,
14817 .also_non_np = 1,
14818 .np = 2,
14819 .tap = { 496 - 16, 16 },
14820 },
14821};
14822
14823static struct cipher_testvec cast5_cbc_enc_tv_template[] = {
14824 { /* Generated from TF test vectors */
14825 .key = "\x85\x62\x3F\x1C\xF9\xD6\x1C\xF9"
14826 "\xD6\xB3\x90\x6D\x4A\x90\x6D\x4A",
14827 .klen = 16,
14828 .iv = "\xE2\x24\x89\xEE\x53\xB8\x1D\x5F",
14829 .input = "\x56\xED\x84\x1B\x8F\x26\xBD\x31"
14830 "\xC8\x5F\xF6\x6A\x01\x98\x0C\xA3"
14831 "\x3A\xD1\x45\xDC\x73\x0A\x7E\x15"
14832 "\xAC\x20\xB7\x4E\xE5\x59\xF0\x87"
14833 "\x1E\x92\x29\xC0\x34\xCB\x62\xF9"
14834 "\x6D\x04\x9B\x0F\xA6\x3D\xD4\x48"
14835 "\xDF\x76\x0D\x81\x18\xAF\x23\xBA"
14836 "\x51\xE8\x5C\xF3\x8A\x21\x95\x2C"
14837 "\xC3\x37\xCE\x65\xFC\x70\x07\x9E"
14838 "\x12\xA9\x40\xD7\x4B\xE2\x79\x10"
14839 "\x84\x1B\xB2\x26\xBD\x54\xEB\x5F"
14840 "\xF6\x8D\x01\x98\x2F\xC6\x3A\xD1"
14841 "\x68\xFF\x73\x0A\xA1\x15\xAC\x43"
14842 "\xDA\x4E\xE5\x7C\x13\x87\x1E\xB5"
14843 "\x29\xC0\x57\xEE\x62\xF9\x90\x04"
14844 "\x9B\x32\xC9\x3D\xD4\x6B\x02\x76"
14845 "\x0D\xA4\x18\xAF\x46\xDD\x51\xE8"
14846 "\x7F\x16\x8A\x21\xB8\x2C\xC3\x5A"
14847 "\xF1\x65\xFC\x93\x07\x9E\x35\xCC"
14848 "\x40\xD7\x6E\x05\x79\x10\xA7\x1B"
14849 "\xB2\x49\xE0\x54\xEB\x82\x19\x8D"
14850 "\x24\xBB\x2F\xC6\x5D\xF4\x68\xFF"
14851 "\x96\x0A\xA1\x38\xCF\x43\xDA\x71"
14852 "\x08\x7C\x13\xAA\x1E\xB5\x4C\xE3"
14853 "\x57\xEE\x85\x1C\x90\x27\xBE\x32"
14854 "\xC9\x60\xF7\x6B\x02\x99\x0D\xA4"
14855 "\x3B\xD2\x46\xDD\x74\x0B\x7F\x16"
14856 "\xAD\x21\xB8\x4F\xE6\x5A\xF1\x88"
14857 "\x1F\x93\x2A\xC1\x35\xCC\x63\xFA"
14858 "\x6E\x05\x9C\x10\xA7\x3E\xD5\x49"
14859 "\xE0\x77\x0E\x82\x19\xB0\x24\xBB"
14860 "\x52\xE9\x5D\xF4\x8B\x22\x96\x2D"
14861 "\xC4\x38\xCF\x66\xFD\x71\x08\x9F"
14862 "\x13\xAA\x41\xD8\x4C\xE3\x7A\x11"
14863 "\x85\x1C\xB3\x27\xBE\x55\xEC\x60"
14864 "\xF7\x8E\x02\x99\x30\xC7\x3B\xD2"
14865 "\x69\x00\x74\x0B\xA2\x16\xAD\x44"
14866 "\xDB\x4F\xE6\x7D\x14\x88\x1F\xB6"
14867 "\x2A\xC1\x58\xEF\x63\xFA\x91\x05"
14868 "\x9C\x33\xCA\x3E\xD5\x6C\x03\x77"
14869 "\x0E\xA5\x19\xB0\x47\xDE\x52\xE9"
14870 "\x80\x17\x8B\x22\xB9\x2D\xC4\x5B"
14871 "\xF2\x66\xFD\x94\x08\x9F\x36\xCD"
14872 "\x41\xD8\x6F\x06\x7A\x11\xA8\x1C"
14873 "\xB3\x4A\xE1\x55\xEC\x83\x1A\x8E"
14874 "\x25\xBC\x30\xC7\x5E\xF5\x69\x00"
14875 "\x97\x0B\xA2\x39\xD0\x44\xDB\x72"
14876 "\x09\x7D\x14\xAB\x1F\xB6\x4D\xE4"
14877 "\x58\xEF\x86\x1D\x91\x28\xBF\x33"
14878 "\xCA\x61\xF8\x6C\x03\x9A\x0E\xA5"
14879 "\x3C\xD3\x47\xDE\x75\x0C\x80\x17"
14880 "\xAE\x22\xB9\x50\xE7\x5B\xF2\x89"
14881 "\x20\x94\x2B\xC2\x36\xCD\x64\xFB"
14882 "\x6F\x06\x9D\x11\xA8\x3F\xD6\x4A"
14883 "\xE1\x78\x0F\x83\x1A\xB1\x25\xBC"
14884 "\x53\xEA\x5E\xF5\x8C\x00\x97\x2E"
14885 "\xC5\x39\xD0\x67\xFE\x72\x09\xA0"
14886 "\x14\xAB\x42\xD9\x4D\xE4\x7B\x12"
14887 "\x86\x1D\xB4\x28\xBF\x56\xED\x61"
14888 "\xF8\x8F\x03\x9A\x31\xC8\x3C\xD3"
14889 "\x6A\x01\x75\x0C\xA3\x17\xAE\x45"
14890 "\xDC\x50\xE7\x7E\x15\x89\x20\xB7",
14891 .ilen = 496,
14892 .result = "\x05\x28\xCE\x61\x90\x80\xE1\x78"
14893 "\xB9\x2A\x97\x7C\xB0\x83\xD8\x1A"
14894 "\xDE\x58\x7F\xD7\xFD\x72\xB8\xFB"
14895 "\xDA\xF0\x6E\x77\x14\x47\x82\xBA"
14896 "\x29\x0E\x25\x6E\xB4\x39\xD9\x7F"
14897 "\x05\xA7\xA7\x3A\xC1\x5D\x9E\x39"
14898 "\xA7\xFB\x0D\x05\x00\xF3\x58\x67"
14899 "\x60\xEC\x73\x77\x46\x85\x9B\x6A"
14900 "\x08\x3E\xBE\x59\xFB\xE4\x96\x34"
14901 "\xB4\x05\x49\x1A\x97\x43\xAD\xA0"
14902 "\xA9\x1E\x6E\x74\xF1\x94\xEC\xA8"
14903 "\xB5\x8A\x20\xEA\x89\x6B\x19\xAA"
14904 "\xA7\xF1\x33\x67\x90\x23\x0D\xEE"
14905 "\x81\xD5\x78\x4F\xD3\x63\xEA\x46"
14906 "\xB5\xB2\x6E\xBB\xCA\x76\x06\x10"
14907 "\x96\x2A\x0A\xBA\xF9\x41\x5A\x1D"
14908 "\x36\x7C\x56\x14\x54\x83\xFA\xA1"
14909 "\x27\xDD\xBA\x8A\x90\x29\xD6\xA6"
14910 "\xFA\x48\x3E\x1E\x23\x6E\x98\xA8"
14911 "\xA7\xD9\x67\x92\x5C\x13\xB4\x71"
14912 "\xA8\xAA\x89\x4A\xA4\xB3\x49\x7C"
14913 "\x7D\x7F\xCE\x6F\x29\x2E\x7E\x37"
14914 "\xC8\x52\x60\xD9\xE7\xCA\x60\x98"
14915 "\xED\xCD\xE8\x60\x83\xAD\x34\x4D"
14916 "\x96\x4A\x99\x2B\xB7\x14\x75\x66"
14917 "\x6C\x2C\x1A\xBA\x4B\xBB\x49\x56"
14918 "\xE1\x86\xA2\x0E\xD0\xF0\x07\xD3"
14919 "\x18\x38\x09\x9C\x0E\x8B\x86\x07"
14920 "\x90\x12\x37\x49\x27\x98\x69\x18"
14921 "\xB0\xCC\xFB\xD3\xBD\x04\xA0\x85"
14922 "\x4B\x22\x97\x07\xB6\x97\xE9\x95"
14923 "\x0F\x88\x36\xA9\x44\x00\xC6\xE9"
14924 "\x27\x53\x5C\x5B\x1F\xD3\xE2\xEE"
14925 "\xD0\xCD\x63\x30\xA9\xC0\xDD\x49"
14926 "\xFE\x16\xA4\x07\x0D\xE2\x5D\x97"
14927 "\xDE\x89\xBA\x2E\xF3\xA9\x5E\xBE"
14928 "\x03\x55\x0E\x02\x41\x4A\x45\x06"
14929 "\xBE\xEA\x32\xF2\xDC\x91\x5C\x20"
14930 "\x94\x02\x30\xD2\xFC\x29\xFA\x8E"
14931 "\x34\xA0\x31\xB8\x34\xBA\xAE\x54"
14932 "\xB5\x88\x1F\xDC\x43\xDC\x22\x9F"
14933 "\xDC\xCE\xD3\xFA\xA4\xA8\xBC\x8A"
14934 "\xC7\x5A\x43\x21\xA5\xB1\xDB\xC3"
14935 "\x84\x3B\xB4\x9B\xB5\xA7\xF1\x0A"
14936 "\xB6\x37\x21\x19\x55\xC2\xBD\x99"
14937 "\x49\x24\xBB\x7C\xB3\x8E\xEF\xD2"
14938 "\x3A\xCF\xA0\x31\x28\x0E\x25\xA2"
14939 "\x11\xB4\x18\x17\x1A\x65\x92\x56"
14940 "\xE8\xE0\x52\x9C\x61\x18\x2A\xB1"
14941 "\x1A\x01\x22\x45\x17\x62\x52\x6C"
14942 "\x91\x44\xCF\x98\xC7\xC0\x79\x26"
14943 "\x32\x66\x6F\x23\x7F\x94\x36\x88"
14944 "\x3C\xC9\xD0\xB7\x45\x30\x31\x86"
14945 "\x3D\xC6\xA3\x98\x62\x84\x1A\x8B"
14946 "\x16\x88\xC7\xA3\xE9\x4F\xE0\x86"
14947 "\xA4\x93\xA8\x34\x5A\xCA\xDF\xCA"
14948 "\x46\x38\xD2\xF4\xE0\x2D\x1E\xC9"
14949 "\x7C\xEF\x53\xB7\x60\x72\x41\xBF"
14950 "\x29\x00\x87\x02\xAF\x44\x4C\xB7"
14951 "\x8C\xF5\x3F\x19\xF4\x80\x45\xA7"
14952 "\x15\x5F\xDB\xE9\xB1\x83\xD2\xE6"
14953 "\x1D\x18\x66\x44\x5B\x8F\x14\xEB",
14954 .rlen = 496,
14955 .also_non_np = 1,
14956 .np = 2,
14957 .tap = { 496 - 16, 16 },
14958 },
14959};
14960
14961static struct cipher_testvec cast5_cbc_dec_tv_template[] = {
14962 { /* Generated from TF test vectors */
14963 .key = "\x85\x62\x3F\x1C\xF9\xD6\x1C\xF9"
14964 "\xD6\xB3\x90\x6D\x4A\x90\x6D\x4A",
14965 .klen = 16,
14966 .iv = "\xE2\x24\x89\xEE\x53\xB8\x1D\x5F",
14967 .input = "\x05\x28\xCE\x61\x90\x80\xE1\x78"
14968 "\xB9\x2A\x97\x7C\xB0\x83\xD8\x1A"
14969 "\xDE\x58\x7F\xD7\xFD\x72\xB8\xFB"
14970 "\xDA\xF0\x6E\x77\x14\x47\x82\xBA"
14971 "\x29\x0E\x25\x6E\xB4\x39\xD9\x7F"
14972 "\x05\xA7\xA7\x3A\xC1\x5D\x9E\x39"
14973 "\xA7\xFB\x0D\x05\x00\xF3\x58\x67"
14974 "\x60\xEC\x73\x77\x46\x85\x9B\x6A"
14975 "\x08\x3E\xBE\x59\xFB\xE4\x96\x34"
14976 "\xB4\x05\x49\x1A\x97\x43\xAD\xA0"
14977 "\xA9\x1E\x6E\x74\xF1\x94\xEC\xA8"
14978 "\xB5\x8A\x20\xEA\x89\x6B\x19\xAA"
14979 "\xA7\xF1\x33\x67\x90\x23\x0D\xEE"
14980 "\x81\xD5\x78\x4F\xD3\x63\xEA\x46"
14981 "\xB5\xB2\x6E\xBB\xCA\x76\x06\x10"
14982 "\x96\x2A\x0A\xBA\xF9\x41\x5A\x1D"
14983 "\x36\x7C\x56\x14\x54\x83\xFA\xA1"
14984 "\x27\xDD\xBA\x8A\x90\x29\xD6\xA6"
14985 "\xFA\x48\x3E\x1E\x23\x6E\x98\xA8"
14986 "\xA7\xD9\x67\x92\x5C\x13\xB4\x71"
14987 "\xA8\xAA\x89\x4A\xA4\xB3\x49\x7C"
14988 "\x7D\x7F\xCE\x6F\x29\x2E\x7E\x37"
14989 "\xC8\x52\x60\xD9\xE7\xCA\x60\x98"
14990 "\xED\xCD\xE8\x60\x83\xAD\x34\x4D"
14991 "\x96\x4A\x99\x2B\xB7\x14\x75\x66"
14992 "\x6C\x2C\x1A\xBA\x4B\xBB\x49\x56"
14993 "\xE1\x86\xA2\x0E\xD0\xF0\x07\xD3"
14994 "\x18\x38\x09\x9C\x0E\x8B\x86\x07"
14995 "\x90\x12\x37\x49\x27\x98\x69\x18"
14996 "\xB0\xCC\xFB\xD3\xBD\x04\xA0\x85"
14997 "\x4B\x22\x97\x07\xB6\x97\xE9\x95"
14998 "\x0F\x88\x36\xA9\x44\x00\xC6\xE9"
14999 "\x27\x53\x5C\x5B\x1F\xD3\xE2\xEE"
15000 "\xD0\xCD\x63\x30\xA9\xC0\xDD\x49"
15001 "\xFE\x16\xA4\x07\x0D\xE2\x5D\x97"
15002 "\xDE\x89\xBA\x2E\xF3\xA9\x5E\xBE"
15003 "\x03\x55\x0E\x02\x41\x4A\x45\x06"
15004 "\xBE\xEA\x32\xF2\xDC\x91\x5C\x20"
15005 "\x94\x02\x30\xD2\xFC\x29\xFA\x8E"
15006 "\x34\xA0\x31\xB8\x34\xBA\xAE\x54"
15007 "\xB5\x88\x1F\xDC\x43\xDC\x22\x9F"
15008 "\xDC\xCE\xD3\xFA\xA4\xA8\xBC\x8A"
15009 "\xC7\x5A\x43\x21\xA5\xB1\xDB\xC3"
15010 "\x84\x3B\xB4\x9B\xB5\xA7\xF1\x0A"
15011 "\xB6\x37\x21\x19\x55\xC2\xBD\x99"
15012 "\x49\x24\xBB\x7C\xB3\x8E\xEF\xD2"
15013 "\x3A\xCF\xA0\x31\x28\x0E\x25\xA2"
15014 "\x11\xB4\x18\x17\x1A\x65\x92\x56"
15015 "\xE8\xE0\x52\x9C\x61\x18\x2A\xB1"
15016 "\x1A\x01\x22\x45\x17\x62\x52\x6C"
15017 "\x91\x44\xCF\x98\xC7\xC0\x79\x26"
15018 "\x32\x66\x6F\x23\x7F\x94\x36\x88"
15019 "\x3C\xC9\xD0\xB7\x45\x30\x31\x86"
15020 "\x3D\xC6\xA3\x98\x62\x84\x1A\x8B"
15021 "\x16\x88\xC7\xA3\xE9\x4F\xE0\x86"
15022 "\xA4\x93\xA8\x34\x5A\xCA\xDF\xCA"
15023 "\x46\x38\xD2\xF4\xE0\x2D\x1E\xC9"
15024 "\x7C\xEF\x53\xB7\x60\x72\x41\xBF"
15025 "\x29\x00\x87\x02\xAF\x44\x4C\xB7"
15026 "\x8C\xF5\x3F\x19\xF4\x80\x45\xA7"
15027 "\x15\x5F\xDB\xE9\xB1\x83\xD2\xE6"
15028 "\x1D\x18\x66\x44\x5B\x8F\x14\xEB",
15029 .ilen = 496,
15030 .result = "\x56\xED\x84\x1B\x8F\x26\xBD\x31"
15031 "\xC8\x5F\xF6\x6A\x01\x98\x0C\xA3"
15032 "\x3A\xD1\x45\xDC\x73\x0A\x7E\x15"
15033 "\xAC\x20\xB7\x4E\xE5\x59\xF0\x87"
15034 "\x1E\x92\x29\xC0\x34\xCB\x62\xF9"
15035 "\x6D\x04\x9B\x0F\xA6\x3D\xD4\x48"
15036 "\xDF\x76\x0D\x81\x18\xAF\x23\xBA"
15037 "\x51\xE8\x5C\xF3\x8A\x21\x95\x2C"
15038 "\xC3\x37\xCE\x65\xFC\x70\x07\x9E"
15039 "\x12\xA9\x40\xD7\x4B\xE2\x79\x10"
15040 "\x84\x1B\xB2\x26\xBD\x54\xEB\x5F"
15041 "\xF6\x8D\x01\x98\x2F\xC6\x3A\xD1"
15042 "\x68\xFF\x73\x0A\xA1\x15\xAC\x43"
15043 "\xDA\x4E\xE5\x7C\x13\x87\x1E\xB5"
15044 "\x29\xC0\x57\xEE\x62\xF9\x90\x04"
15045 "\x9B\x32\xC9\x3D\xD4\x6B\x02\x76"
15046 "\x0D\xA4\x18\xAF\x46\xDD\x51\xE8"
15047 "\x7F\x16\x8A\x21\xB8\x2C\xC3\x5A"
15048 "\xF1\x65\xFC\x93\x07\x9E\x35\xCC"
15049 "\x40\xD7\x6E\x05\x79\x10\xA7\x1B"
15050 "\xB2\x49\xE0\x54\xEB\x82\x19\x8D"
15051 "\x24\xBB\x2F\xC6\x5D\xF4\x68\xFF"
15052 "\x96\x0A\xA1\x38\xCF\x43\xDA\x71"
15053 "\x08\x7C\x13\xAA\x1E\xB5\x4C\xE3"
15054 "\x57\xEE\x85\x1C\x90\x27\xBE\x32"
15055 "\xC9\x60\xF7\x6B\x02\x99\x0D\xA4"
15056 "\x3B\xD2\x46\xDD\x74\x0B\x7F\x16"
15057 "\xAD\x21\xB8\x4F\xE6\x5A\xF1\x88"
15058 "\x1F\x93\x2A\xC1\x35\xCC\x63\xFA"
15059 "\x6E\x05\x9C\x10\xA7\x3E\xD5\x49"
15060 "\xE0\x77\x0E\x82\x19\xB0\x24\xBB"
15061 "\x52\xE9\x5D\xF4\x8B\x22\x96\x2D"
15062 "\xC4\x38\xCF\x66\xFD\x71\x08\x9F"
15063 "\x13\xAA\x41\xD8\x4C\xE3\x7A\x11"
15064 "\x85\x1C\xB3\x27\xBE\x55\xEC\x60"
15065 "\xF7\x8E\x02\x99\x30\xC7\x3B\xD2"
15066 "\x69\x00\x74\x0B\xA2\x16\xAD\x44"
15067 "\xDB\x4F\xE6\x7D\x14\x88\x1F\xB6"
15068 "\x2A\xC1\x58\xEF\x63\xFA\x91\x05"
15069 "\x9C\x33\xCA\x3E\xD5\x6C\x03\x77"
15070 "\x0E\xA5\x19\xB0\x47\xDE\x52\xE9"
15071 "\x80\x17\x8B\x22\xB9\x2D\xC4\x5B"
15072 "\xF2\x66\xFD\x94\x08\x9F\x36\xCD"
15073 "\x41\xD8\x6F\x06\x7A\x11\xA8\x1C"
15074 "\xB3\x4A\xE1\x55\xEC\x83\x1A\x8E"
15075 "\x25\xBC\x30\xC7\x5E\xF5\x69\x00"
15076 "\x97\x0B\xA2\x39\xD0\x44\xDB\x72"
15077 "\x09\x7D\x14\xAB\x1F\xB6\x4D\xE4"
15078 "\x58\xEF\x86\x1D\x91\x28\xBF\x33"
15079 "\xCA\x61\xF8\x6C\x03\x9A\x0E\xA5"
15080 "\x3C\xD3\x47\xDE\x75\x0C\x80\x17"
15081 "\xAE\x22\xB9\x50\xE7\x5B\xF2\x89"
15082 "\x20\x94\x2B\xC2\x36\xCD\x64\xFB"
15083 "\x6F\x06\x9D\x11\xA8\x3F\xD6\x4A"
15084 "\xE1\x78\x0F\x83\x1A\xB1\x25\xBC"
15085 "\x53\xEA\x5E\xF5\x8C\x00\x97\x2E"
15086 "\xC5\x39\xD0\x67\xFE\x72\x09\xA0"
15087 "\x14\xAB\x42\xD9\x4D\xE4\x7B\x12"
15088 "\x86\x1D\xB4\x28\xBF\x56\xED\x61"
15089 "\xF8\x8F\x03\x9A\x31\xC8\x3C\xD3"
15090 "\x6A\x01\x75\x0C\xA3\x17\xAE\x45"
15091 "\xDC\x50\xE7\x7E\x15\x89\x20\xB7",
15092 .rlen = 496,
15093 .also_non_np = 1,
15094 .np = 2,
15095 .tap = { 496 - 16, 16 },
15096 },
15097};
15098
15099static struct cipher_testvec cast5_ctr_enc_tv_template[] = {
15100 { /* Generated from TF test vectors */
15101 .key = "\x85\x62\x3F\x1C\xF9\xD6\x1C\xF9"
15102 "\xD6\xB3\x90\x6D\x4A\x90\x6D\x4A",
15103 .klen = 16,
15104 .iv = "\xE2\x24\x89\xEE\x53\xB8\x1D\x5F",
15105 .input = "\x56\xED\x84\x1B\x8F\x26\xBD\x31"
15106 "\xC8\x5F\xF6\x6A\x01\x98\x0C\xA3"
15107 "\x3A",
15108 .ilen = 17,
15109 .result = "\xFF\xC4\x2E\x82\x3D\xF8\xA8\x39"
15110 "\x7C\x52\xC4\xD3\xBB\x62\xC6\xA8"
15111 "\x0C",
15112 .rlen = 17,
15113 }, { /* Generated from TF test vectors */
15114 .key = "\x85\x62\x3F\x1C\xF9\xD6\x1C\xF9"
15115 "\xD6\xB3\x90\x6D\x4A\x90\x6D\x4A",
15116 .klen = 16,
15117 .iv = "\xE2\x24\x89\xEE\x53\xB8\x1D\x5F",
15118 .input = "\x56\xED\x84\x1B\x8F\x26\xBD\x31"
15119 "\xC8\x5F\xF6\x6A\x01\x98\x0C\xA3"
15120 "\x3A\xD1\x45\xDC\x73\x0A\x7E\x15"
15121 "\xAC\x20\xB7\x4E\xE5\x59\xF0\x87"
15122 "\x1E\x92\x29\xC0\x34\xCB\x62\xF9"
15123 "\x6D\x04\x9B\x0F\xA6\x3D\xD4\x48"
15124 "\xDF\x76\x0D\x81\x18\xAF\x23\xBA"
15125 "\x51\xE8\x5C\xF3\x8A\x21\x95\x2C"
15126 "\xC3\x37\xCE\x65\xFC\x70\x07\x9E"
15127 "\x12\xA9\x40\xD7\x4B\xE2\x79\x10"
15128 "\x84\x1B\xB2\x26\xBD\x54\xEB\x5F"
15129 "\xF6\x8D\x01\x98\x2F\xC6\x3A\xD1"
15130 "\x68\xFF\x73\x0A\xA1\x15\xAC\x43"
15131 "\xDA\x4E\xE5\x7C\x13\x87\x1E\xB5"
15132 "\x29\xC0\x57\xEE\x62\xF9\x90\x04"
15133 "\x9B\x32\xC9\x3D\xD4\x6B\x02\x76"
15134 "\x0D\xA4\x18\xAF\x46\xDD\x51\xE8"
15135 "\x7F\x16\x8A\x21\xB8\x2C\xC3\x5A"
15136 "\xF1\x65\xFC\x93\x07\x9E\x35\xCC"
15137 "\x40\xD7\x6E\x05\x79\x10\xA7\x1B"
15138 "\xB2\x49\xE0\x54\xEB\x82\x19\x8D"
15139 "\x24\xBB\x2F\xC6\x5D\xF4\x68\xFF"
15140 "\x96\x0A\xA1\x38\xCF\x43\xDA\x71"
15141 "\x08\x7C\x13\xAA\x1E\xB5\x4C\xE3"
15142 "\x57\xEE\x85\x1C\x90\x27\xBE\x32"
15143 "\xC9\x60\xF7\x6B\x02\x99\x0D\xA4"
15144 "\x3B\xD2\x46\xDD\x74\x0B\x7F\x16"
15145 "\xAD\x21\xB8\x4F\xE6\x5A\xF1\x88"
15146 "\x1F\x93\x2A\xC1\x35\xCC\x63\xFA"
15147 "\x6E\x05\x9C\x10\xA7\x3E\xD5\x49"
15148 "\xE0\x77\x0E\x82\x19\xB0\x24\xBB"
15149 "\x52\xE9\x5D\xF4\x8B\x22\x96\x2D"
15150 "\xC4\x38\xCF\x66\xFD\x71\x08\x9F"
15151 "\x13\xAA\x41\xD8\x4C\xE3\x7A\x11"
15152 "\x85\x1C\xB3\x27\xBE\x55\xEC\x60"
15153 "\xF7\x8E\x02\x99\x30\xC7\x3B\xD2"
15154 "\x69\x00\x74\x0B\xA2\x16\xAD\x44"
15155 "\xDB\x4F\xE6\x7D\x14\x88\x1F\xB6"
15156 "\x2A\xC1\x58\xEF\x63\xFA\x91\x05"
15157 "\x9C\x33\xCA\x3E\xD5\x6C\x03\x77"
15158 "\x0E\xA5\x19\xB0\x47\xDE\x52\xE9"
15159 "\x80\x17\x8B\x22\xB9\x2D\xC4\x5B"
15160 "\xF2\x66\xFD\x94\x08\x9F\x36\xCD"
15161 "\x41\xD8\x6F\x06\x7A\x11\xA8\x1C"
15162 "\xB3\x4A\xE1\x55\xEC\x83\x1A\x8E"
15163 "\x25\xBC\x30\xC7\x5E\xF5\x69\x00"
15164 "\x97\x0B\xA2\x39\xD0\x44\xDB\x72"
15165 "\x09\x7D\x14\xAB\x1F\xB6\x4D\xE4"
15166 "\x58\xEF\x86\x1D\x91\x28\xBF\x33"
15167 "\xCA\x61\xF8\x6C\x03\x9A\x0E\xA5"
15168 "\x3C\xD3\x47\xDE\x75\x0C\x80\x17"
15169 "\xAE\x22\xB9\x50\xE7\x5B\xF2\x89"
15170 "\x20\x94\x2B\xC2\x36\xCD\x64\xFB"
15171 "\x6F\x06\x9D\x11\xA8\x3F\xD6\x4A"
15172 "\xE1\x78\x0F\x83\x1A\xB1\x25\xBC"
15173 "\x53\xEA\x5E\xF5\x8C\x00\x97\x2E"
15174 "\xC5\x39\xD0\x67\xFE\x72\x09\xA0"
15175 "\x14\xAB\x42\xD9\x4D\xE4\x7B\x12"
15176 "\x86\x1D\xB4\x28\xBF\x56\xED\x61"
15177 "\xF8\x8F\x03\x9A\x31\xC8\x3C\xD3"
15178 "\x6A\x01\x75\x0C\xA3\x17\xAE\x45"
15179 "\xDC\x50\xE7\x7E\x15\x89\x20\xB7",
15180 .ilen = 496,
15181 .result = "\xFF\xC4\x2E\x82\x3D\xF8\xA8\x39"
15182 "\x7C\x52\xC4\xD3\xBB\x62\xC6\xA8"
15183 "\x0C\x63\xA5\x55\xE3\xF8\x1C\x7F"
15184 "\xDC\x59\xF9\xA0\x52\xAD\x83\xDF"
15185 "\xD5\x3B\x53\x4A\xAA\x1F\x49\x44"
15186 "\xE8\x20\xCC\xF8\x97\xE6\xE0\x3C"
15187 "\x5A\xD2\x83\xEC\xEE\x25\x3F\xCF"
15188 "\x0D\xC2\x79\x80\x99\x6E\xFF\x7B"
15189 "\x64\xB0\x7B\x86\x29\x1D\x9F\x17"
15190 "\x10\xA5\xA5\xEB\x16\x55\x9E\xE3"
15191 "\x88\x18\x52\x56\x48\x58\xD1\x6B"
15192 "\xE8\x74\x6E\x48\xB0\x2E\x69\x63"
15193 "\x32\xAA\xAC\x26\x55\x45\x94\xDE"
15194 "\x30\x26\x26\xE6\x08\x82\x2F\x5F"
15195 "\xA7\x15\x94\x07\x75\x2D\xC6\x3A"
15196 "\x1B\xA0\x39\xFB\xBA\xB9\x06\x56"
15197 "\xF6\x9F\xF1\x2F\x9B\xF3\x89\x8B"
15198 "\x08\xC8\x9D\x5E\x6B\x95\x09\xC7"
15199 "\x98\xB7\x62\xA4\x1D\x25\xFA\xC5"
15200 "\x62\xC8\x5D\x6B\xB4\x85\x88\x7F"
15201 "\x3B\x29\xF9\xB4\x32\x62\x69\xBF"
15202 "\x32\xB8\xEB\xFD\x0E\x26\xAA\xA3"
15203 "\x44\x67\x90\x20\xAC\x41\xDF\x43"
15204 "\xC6\xC7\x19\x9F\x2C\x28\x74\xEB"
15205 "\x3E\x7F\x7A\x80\x5B\xE4\x08\x60"
15206 "\xC7\xC9\x71\x34\x44\xCE\x05\xFD"
15207 "\xA8\x91\xA8\x44\x5E\xD3\x89\x2C"
15208 "\xAE\x59\x0F\x07\x88\x79\x53\x26"
15209 "\xAF\xAC\xCB\x1D\x6F\x08\x25\x62"
15210 "\xD0\x82\x65\x66\xE4\x2A\x29\x1C"
15211 "\x9C\x64\x5F\x49\x9D\xF8\x62\xF9"
15212 "\xED\xC4\x13\x52\x75\xDC\xE4\xF9"
15213 "\x68\x0F\x8A\xCD\xA6\x8D\x75\xAA"
15214 "\x49\xA1\x86\x86\x37\x5C\x6B\x3D"
15215 "\x56\xE5\x6F\xBE\x27\xC0\x10\xF8"
15216 "\x3C\x4D\x17\x35\x14\xDC\x1C\xA0"
15217 "\x6E\xAE\xD1\x10\xDD\x83\x06\xC2"
15218 "\x23\xD3\xC7\x27\x15\x04\x2C\x27"
15219 "\xDD\x1F\x2E\x97\x09\x9C\x33\x7D"
15220 "\xAC\x50\x1B\x2E\xC9\x52\x0C\x14"
15221 "\x4B\x78\xC4\xDE\x07\x6A\x12\x02"
15222 "\x6E\xD7\x4B\x91\xB9\x88\x4D\x02"
15223 "\xC3\xB5\x04\xBC\xE0\x67\xCA\x18"
15224 "\x22\xA1\xAE\x9A\x21\xEF\xB2\x06"
15225 "\x35\xCD\xEC\x37\x70\x2D\xFC\x1E"
15226 "\xA8\x31\xE7\xFC\xE5\x8E\x88\x66"
15227 "\x16\xB5\xC8\x45\x21\x37\xBD\x24"
15228 "\xA9\xD5\x36\x12\x9F\x6E\x67\x80"
15229 "\x87\x54\xD5\xAF\x97\xE1\x15\xA7"
15230 "\x11\xF0\x63\x7B\xE1\x44\x14\x1C"
15231 "\x06\x32\x05\x8C\x6C\xDB\x9B\x36"
15232 "\x6A\x6B\xAD\x3A\x27\x55\x20\x4C"
15233 "\x76\x36\x43\xE8\x16\x60\xB5\xF3"
15234 "\xDF\x5A\xC6\xA5\x69\x78\x59\x51"
15235 "\x54\x68\x65\x06\x84\xDE\x3D\xAE"
15236 "\x38\x91\xBD\xCC\xA2\x8A\xEC\xE6"
15237 "\x9E\x83\xAE\x1E\x8E\x34\x5D\xDE"
15238 "\x91\xCE\x8F\xED\x40\xF7\xC8\x8B"
15239 "\x9A\x13\x4C\xAD\x89\x97\x9E\xD1"
15240 "\x91\x01\xD7\x21\x23\x28\x1E\xCC"
15241 "\x8C\x98\xDB\xDE\xFC\x72\x94\xAA"
15242 "\xC0\x0D\x96\xAA\x23\xF8\xFE\x13",
15243 .rlen = 496,
15244 .also_non_np = 1,
15245 .np = 2,
15246 .tap = { 496 - 16, 16 },
15247 },
15248};
15249
15250static struct cipher_testvec cast5_ctr_dec_tv_template[] = {
15251 { /* Generated from TF test vectors */
15252 .key = "\x85\x62\x3F\x1C\xF9\xD6\x1C\xF9"
15253 "\xD6\xB3\x90\x6D\x4A\x90\x6D\x4A",
15254 .klen = 16,
15255 .iv = "\xE2\x24\x89\xEE\x53\xB8\x1D\x5F",
15256 .input = "\xFF\xC4\x2E\x82\x3D\xF8\xA8\x39"
15257 "\x7C\x52\xC4\xD3\xBB\x62\xC6\xA8"
15258 "\x0C",
15259 .ilen = 17,
15260 .result = "\x56\xED\x84\x1B\x8F\x26\xBD\x31"
15261 "\xC8\x5F\xF6\x6A\x01\x98\x0C\xA3"
15262 "\x3A",
15263 .rlen = 17,
15264 }, { /* Generated from TF test vectors */
15265 .key = "\x85\x62\x3F\x1C\xF9\xD6\x1C\xF9"
15266 "\xD6\xB3\x90\x6D\x4A\x90\x6D\x4A",
15267 .klen = 16,
15268 .iv = "\xE2\x24\x89\xEE\x53\xB8\x1D\x5F",
15269 .input = "\xFF\xC4\x2E\x82\x3D\xF8\xA8\x39"
15270 "\x7C\x52\xC4\xD3\xBB\x62\xC6\xA8"
15271 "\x0C\x63\xA5\x55\xE3\xF8\x1C\x7F"
15272 "\xDC\x59\xF9\xA0\x52\xAD\x83\xDF"
15273 "\xD5\x3B\x53\x4A\xAA\x1F\x49\x44"
15274 "\xE8\x20\xCC\xF8\x97\xE6\xE0\x3C"
15275 "\x5A\xD2\x83\xEC\xEE\x25\x3F\xCF"
15276 "\x0D\xC2\x79\x80\x99\x6E\xFF\x7B"
15277 "\x64\xB0\x7B\x86\x29\x1D\x9F\x17"
15278 "\x10\xA5\xA5\xEB\x16\x55\x9E\xE3"
15279 "\x88\x18\x52\x56\x48\x58\xD1\x6B"
15280 "\xE8\x74\x6E\x48\xB0\x2E\x69\x63"
15281 "\x32\xAA\xAC\x26\x55\x45\x94\xDE"
15282 "\x30\x26\x26\xE6\x08\x82\x2F\x5F"
15283 "\xA7\x15\x94\x07\x75\x2D\xC6\x3A"
15284 "\x1B\xA0\x39\xFB\xBA\xB9\x06\x56"
15285 "\xF6\x9F\xF1\x2F\x9B\xF3\x89\x8B"
15286 "\x08\xC8\x9D\x5E\x6B\x95\x09\xC7"
15287 "\x98\xB7\x62\xA4\x1D\x25\xFA\xC5"
15288 "\x62\xC8\x5D\x6B\xB4\x85\x88\x7F"
15289 "\x3B\x29\xF9\xB4\x32\x62\x69\xBF"
15290 "\x32\xB8\xEB\xFD\x0E\x26\xAA\xA3"
15291 "\x44\x67\x90\x20\xAC\x41\xDF\x43"
15292 "\xC6\xC7\x19\x9F\x2C\x28\x74\xEB"
15293 "\x3E\x7F\x7A\x80\x5B\xE4\x08\x60"
15294 "\xC7\xC9\x71\x34\x44\xCE\x05\xFD"
15295 "\xA8\x91\xA8\x44\x5E\xD3\x89\x2C"
15296 "\xAE\x59\x0F\x07\x88\x79\x53\x26"
15297 "\xAF\xAC\xCB\x1D\x6F\x08\x25\x62"
15298 "\xD0\x82\x65\x66\xE4\x2A\x29\x1C"
15299 "\x9C\x64\x5F\x49\x9D\xF8\x62\xF9"
15300 "\xED\xC4\x13\x52\x75\xDC\xE4\xF9"
15301 "\x68\x0F\x8A\xCD\xA6\x8D\x75\xAA"
15302 "\x49\xA1\x86\x86\x37\x5C\x6B\x3D"
15303 "\x56\xE5\x6F\xBE\x27\xC0\x10\xF8"
15304 "\x3C\x4D\x17\x35\x14\xDC\x1C\xA0"
15305 "\x6E\xAE\xD1\x10\xDD\x83\x06\xC2"
15306 "\x23\xD3\xC7\x27\x15\x04\x2C\x27"
15307 "\xDD\x1F\x2E\x97\x09\x9C\x33\x7D"
15308 "\xAC\x50\x1B\x2E\xC9\x52\x0C\x14"
15309 "\x4B\x78\xC4\xDE\x07\x6A\x12\x02"
15310 "\x6E\xD7\x4B\x91\xB9\x88\x4D\x02"
15311 "\xC3\xB5\x04\xBC\xE0\x67\xCA\x18"
15312 "\x22\xA1\xAE\x9A\x21\xEF\xB2\x06"
15313 "\x35\xCD\xEC\x37\x70\x2D\xFC\x1E"
15314 "\xA8\x31\xE7\xFC\xE5\x8E\x88\x66"
15315 "\x16\xB5\xC8\x45\x21\x37\xBD\x24"
15316 "\xA9\xD5\x36\x12\x9F\x6E\x67\x80"
15317 "\x87\x54\xD5\xAF\x97\xE1\x15\xA7"
15318 "\x11\xF0\x63\x7B\xE1\x44\x14\x1C"
15319 "\x06\x32\x05\x8C\x6C\xDB\x9B\x36"
15320 "\x6A\x6B\xAD\x3A\x27\x55\x20\x4C"
15321 "\x76\x36\x43\xE8\x16\x60\xB5\xF3"
15322 "\xDF\x5A\xC6\xA5\x69\x78\x59\x51"
15323 "\x54\x68\x65\x06\x84\xDE\x3D\xAE"
15324 "\x38\x91\xBD\xCC\xA2\x8A\xEC\xE6"
15325 "\x9E\x83\xAE\x1E\x8E\x34\x5D\xDE"
15326 "\x91\xCE\x8F\xED\x40\xF7\xC8\x8B"
15327 "\x9A\x13\x4C\xAD\x89\x97\x9E\xD1"
15328 "\x91\x01\xD7\x21\x23\x28\x1E\xCC"
15329 "\x8C\x98\xDB\xDE\xFC\x72\x94\xAA"
15330 "\xC0\x0D\x96\xAA\x23\xF8\xFE\x13",
15331 .ilen = 496,
15332 .result = "\x56\xED\x84\x1B\x8F\x26\xBD\x31"
15333 "\xC8\x5F\xF6\x6A\x01\x98\x0C\xA3"
15334 "\x3A\xD1\x45\xDC\x73\x0A\x7E\x15"
15335 "\xAC\x20\xB7\x4E\xE5\x59\xF0\x87"
15336 "\x1E\x92\x29\xC0\x34\xCB\x62\xF9"
15337 "\x6D\x04\x9B\x0F\xA6\x3D\xD4\x48"
15338 "\xDF\x76\x0D\x81\x18\xAF\x23\xBA"
15339 "\x51\xE8\x5C\xF3\x8A\x21\x95\x2C"
15340 "\xC3\x37\xCE\x65\xFC\x70\x07\x9E"
15341 "\x12\xA9\x40\xD7\x4B\xE2\x79\x10"
15342 "\x84\x1B\xB2\x26\xBD\x54\xEB\x5F"
15343 "\xF6\x8D\x01\x98\x2F\xC6\x3A\xD1"
15344 "\x68\xFF\x73\x0A\xA1\x15\xAC\x43"
15345 "\xDA\x4E\xE5\x7C\x13\x87\x1E\xB5"
15346 "\x29\xC0\x57\xEE\x62\xF9\x90\x04"
15347 "\x9B\x32\xC9\x3D\xD4\x6B\x02\x76"
15348 "\x0D\xA4\x18\xAF\x46\xDD\x51\xE8"
15349 "\x7F\x16\x8A\x21\xB8\x2C\xC3\x5A"
15350 "\xF1\x65\xFC\x93\x07\x9E\x35\xCC"
15351 "\x40\xD7\x6E\x05\x79\x10\xA7\x1B"
15352 "\xB2\x49\xE0\x54\xEB\x82\x19\x8D"
15353 "\x24\xBB\x2F\xC6\x5D\xF4\x68\xFF"
15354 "\x96\x0A\xA1\x38\xCF\x43\xDA\x71"
15355 "\x08\x7C\x13\xAA\x1E\xB5\x4C\xE3"
15356 "\x57\xEE\x85\x1C\x90\x27\xBE\x32"
15357 "\xC9\x60\xF7\x6B\x02\x99\x0D\xA4"
15358 "\x3B\xD2\x46\xDD\x74\x0B\x7F\x16"
15359 "\xAD\x21\xB8\x4F\xE6\x5A\xF1\x88"
15360 "\x1F\x93\x2A\xC1\x35\xCC\x63\xFA"
15361 "\x6E\x05\x9C\x10\xA7\x3E\xD5\x49"
15362 "\xE0\x77\x0E\x82\x19\xB0\x24\xBB"
15363 "\x52\xE9\x5D\xF4\x8B\x22\x96\x2D"
15364 "\xC4\x38\xCF\x66\xFD\x71\x08\x9F"
15365 "\x13\xAA\x41\xD8\x4C\xE3\x7A\x11"
15366 "\x85\x1C\xB3\x27\xBE\x55\xEC\x60"
15367 "\xF7\x8E\x02\x99\x30\xC7\x3B\xD2"
15368 "\x69\x00\x74\x0B\xA2\x16\xAD\x44"
15369 "\xDB\x4F\xE6\x7D\x14\x88\x1F\xB6"
15370 "\x2A\xC1\x58\xEF\x63\xFA\x91\x05"
15371 "\x9C\x33\xCA\x3E\xD5\x6C\x03\x77"
15372 "\x0E\xA5\x19\xB0\x47\xDE\x52\xE9"
15373 "\x80\x17\x8B\x22\xB9\x2D\xC4\x5B"
15374 "\xF2\x66\xFD\x94\x08\x9F\x36\xCD"
15375 "\x41\xD8\x6F\x06\x7A\x11\xA8\x1C"
15376 "\xB3\x4A\xE1\x55\xEC\x83\x1A\x8E"
15377 "\x25\xBC\x30\xC7\x5E\xF5\x69\x00"
15378 "\x97\x0B\xA2\x39\xD0\x44\xDB\x72"
15379 "\x09\x7D\x14\xAB\x1F\xB6\x4D\xE4"
15380 "\x58\xEF\x86\x1D\x91\x28\xBF\x33"
15381 "\xCA\x61\xF8\x6C\x03\x9A\x0E\xA5"
15382 "\x3C\xD3\x47\xDE\x75\x0C\x80\x17"
15383 "\xAE\x22\xB9\x50\xE7\x5B\xF2\x89"
15384 "\x20\x94\x2B\xC2\x36\xCD\x64\xFB"
15385 "\x6F\x06\x9D\x11\xA8\x3F\xD6\x4A"
15386 "\xE1\x78\x0F\x83\x1A\xB1\x25\xBC"
15387 "\x53\xEA\x5E\xF5\x8C\x00\x97\x2E"
15388 "\xC5\x39\xD0\x67\xFE\x72\x09\xA0"
15389 "\x14\xAB\x42\xD9\x4D\xE4\x7B\x12"
15390 "\x86\x1D\xB4\x28\xBF\x56\xED\x61"
15391 "\xF8\x8F\x03\x9A\x31\xC8\x3C\xD3"
15392 "\x6A\x01\x75\x0C\xA3\x17\xAE\x45"
15393 "\xDC\x50\xE7\x7E\x15\x89\x20\xB7",
15394 .rlen = 496,
15395 .also_non_np = 1,
15396 .np = 2,
15397 .tap = { 496 - 16, 16 },
12182 }, 15398 },
12183}; 15399};
12184 15400
@@ -13096,6 +16312,9 @@ static struct cipher_testvec camellia_enc_tv_template[] = {
13096 "\x0D\xD0\xFD\xC4\x65\xA5\x69\xB9" 16312 "\x0D\xD0\xFD\xC4\x65\xA5\x69\xB9"
13097 "\xF1\xF6\xB1\xA5\xB2\x75\x4F\x8A", 16313 "\xF1\xF6\xB1\xA5\xB2\x75\x4F\x8A",
13098 .rlen = 48, 16314 .rlen = 48,
16315 .also_non_np = 1,
16316 .np = 2,
16317 .tap = { 48 - 16, 16 },
13099 }, 16318 },
13100}; 16319};
13101 16320
@@ -13154,6 +16373,9 @@ static struct cipher_testvec camellia_dec_tv_template[] = {
13154 "\x1E\x92\x29\xC0\x34\xCB\x62\xF9" 16373 "\x1E\x92\x29\xC0\x34\xCB\x62\xF9"
13155 "\x6D\x04\x9B\x0F\xA6\x3D\xD4\x48", 16374 "\x6D\x04\x9B\x0F\xA6\x3D\xD4\x48",
13156 .rlen = 48, 16375 .rlen = 48,
16376 .also_non_np = 1,
16377 .np = 2,
16378 .tap = { 48 - 16, 16 },
13157 }, 16379 },
13158}; 16380};
13159 16381
@@ -13208,6 +16430,9 @@ static struct cipher_testvec camellia_cbc_enc_tv_template[] = {
13208 "\xB9\xF9\xC2\x27\x6A\xB6\x31\x27" 16430 "\xB9\xF9\xC2\x27\x6A\xB6\x31\x27"
13209 "\xA6\xAD\xEF\xE5\x5D\xE4\x02\x01", 16431 "\xA6\xAD\xEF\xE5\x5D\xE4\x02\x01",
13210 .rlen = 48, 16432 .rlen = 48,
16433 .also_non_np = 1,
16434 .np = 2,
16435 .tap = { 48 - 16, 16 },
13211 }, 16436 },
13212}; 16437};
13213 16438
@@ -13262,6 +16487,9 @@ static struct cipher_testvec camellia_cbc_dec_tv_template[] = {
13262 "\x1E\x92\x29\xC0\x34\xCB\x62\xF9" 16487 "\x1E\x92\x29\xC0\x34\xCB\x62\xF9"
13263 "\x6D\x04\x9B\x0F\xA6\x3D\xD4\x48", 16488 "\x6D\x04\x9B\x0F\xA6\x3D\xD4\x48",
13264 .rlen = 48, 16489 .rlen = 48,
16490 .also_non_np = 1,
16491 .np = 2,
16492 .tap = { 48 - 16, 16 },
13265 }, 16493 },
13266}; 16494};
13267 16495
@@ -13313,6 +16541,143 @@ static struct cipher_testvec camellia_ctr_enc_tv_template[] = {
13313 "\x60\xFC\xE8\x94\xE8\xB5\x09\x2C" 16541 "\x60\xFC\xE8\x94\xE8\xB5\x09\x2C"
13314 "\x1E\x43\xEF", 16542 "\x1E\x43\xEF",
13315 .rlen = 51, 16543 .rlen = 51,
16544 .also_non_np = 1,
16545 .np = 2,
16546 .tap = { 51 - 16, 16 },
16547 }, { /* Generated with Crypto++ */
16548 .key = "\x85\x62\x3F\x1C\xF9\xD6\x1C\xF9"
16549 "\xD6\xB3\x90\x6D\x4A\x90\x6D\x4A"
16550 "\x27\x04\xE1\x27\x04\xE1\xBE\x9B"
16551 "\x78\xBE\x9B\x78\x55\x32\x0F\x55",
16552 .klen = 32,
16553 .iv = "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
16554 "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFD",
16555 .input = "\x56\xED\x84\x1B\x8F\x26\xBD\x31"
16556 "\xC8\x5F\xF6\x6A\x01\x98\x0C\xA3"
16557 "\x3A\xD1\x45\xDC\x73\x0A\x7E\x15"
16558 "\xAC\x20\xB7\x4E\xE5\x59\xF0\x87"
16559 "\x1E\x92\x29\xC0\x34\xCB\x62\xF9"
16560 "\x6D\x04\x9B\x0F\xA6\x3D\xD4\x48"
16561 "\xDF\x76\x0D\x81\x18\xAF\x23\xBA"
16562 "\x51\xE8\x5C\xF3\x8A\x21\x95\x2C"
16563 "\xC3\x37\xCE\x65\xFC\x70\x07\x9E"
16564 "\x12\xA9\x40\xD7\x4B\xE2\x79\x10"
16565 "\x84\x1B\xB2\x26\xBD\x54\xEB\x5F"
16566 "\xF6\x8D\x01\x98\x2F\xC6\x3A\xD1"
16567 "\x68\xFF\x73\x0A\xA1\x15\xAC\x43"
16568 "\xDA\x4E\xE5\x7C\x13\x87\x1E\xB5"
16569 "\x29\xC0\x57\xEE\x62\xF9\x90\x04"
16570 "\x9B\x32\xC9\x3D\xD4\x6B\x02\x76"
16571 "\x0D\xA4\x18\xAF\x46\xDD\x51\xE8"
16572 "\x7F\x16\x8A\x21\xB8\x2C\xC3\x5A"
16573 "\xF1\x65\xFC\x93\x07\x9E\x35\xCC"
16574 "\x40\xD7\x6E\x05\x79\x10\xA7\x1B"
16575 "\xB2\x49\xE0\x54\xEB\x82\x19\x8D"
16576 "\x24\xBB\x2F\xC6\x5D\xF4\x68\xFF"
16577 "\x96\x0A\xA1\x38\xCF\x43\xDA\x71"
16578 "\x08\x7C\x13\xAA\x1E\xB5\x4C\xE3"
16579 "\x57\xEE\x85\x1C\x90\x27\xBE\x32"
16580 "\xC9\x60\xF7\x6B\x02\x99\x0D\xA4"
16581 "\x3B\xD2\x46\xDD\x74\x0B\x7F\x16"
16582 "\xAD\x21\xB8\x4F\xE6\x5A\xF1\x88"
16583 "\x1F\x93\x2A\xC1\x35\xCC\x63\xFA"
16584 "\x6E\x05\x9C\x10\xA7\x3E\xD5\x49"
16585 "\xE0\x77\x0E\x82\x19\xB0\x24\xBB"
16586 "\x52\xE9\x5D\xF4\x8B\x22\x96\x2D"
16587 "\xC4\x38\xCF\x66\xFD\x71\x08\x9F"
16588 "\x13\xAA\x41\xD8\x4C\xE3\x7A\x11"
16589 "\x85\x1C\xB3\x27\xBE\x55\xEC\x60"
16590 "\xF7\x8E\x02\x99\x30\xC7\x3B\xD2"
16591 "\x69\x00\x74\x0B\xA2\x16\xAD\x44"
16592 "\xDB\x4F\xE6\x7D\x14\x88\x1F\xB6"
16593 "\x2A\xC1\x58\xEF\x63\xFA\x91\x05"
16594 "\x9C\x33\xCA\x3E\xD5\x6C\x03\x77"
16595 "\x0E\xA5\x19\xB0\x47\xDE\x52\xE9"
16596 "\x80\x17\x8B\x22\xB9\x2D\xC4\x5B"
16597 "\xF2\x66\xFD\x94\x08\x9F\x36\xCD"
16598 "\x41\xD8\x6F\x06\x7A\x11\xA8\x1C"
16599 "\xB3\x4A\xE1\x55\xEC\x83\x1A\x8E"
16600 "\x25\xBC\x30\xC7\x5E\xF5\x69\x00"
16601 "\x97\x0B\xA2\x39\xD0\x44\xDB\x72"
16602 "\x09\x7D\x14\xAB\x1F\xB6\x4D\xE4"
16603 "\x58\xEF\x86\x1D\x91\x28\xBF\x33"
16604 "\xCA\x61\xF8\x6C\x03\x9A\x0E\xA5"
16605 "\x3C\xD3\x47\xDE\x75\x0C\x80\x17"
16606 "\xAE\x22\xB9\x50\xE7\x5B\xF2\x89"
16607 "\x20\x94\x2B\xC2\x36\xCD\x64\xFB"
16608 "\x6F\x06\x9D\x11\xA8\x3F\xD6\x4A"
16609 "\xE1\x78\x0F\x83\x1A\xB1\x25\xBC"
16610 "\x53\xEA\x5E\xF5\x8C\x00\x97\x2E"
16611 "\xC5\x39\xD0\x67\xFE\x72\x09\xA0"
16612 "\x14\xAB\x42\xD9\x4D\xE4\x7B\x12"
16613 "\x86\x1D\xB4\x28\xBF\x56\xED\x61"
16614 "\xF8\x8F\x03\x9A\x31\xC8\x3C\xD3"
16615 "\x6A\x01\x75\x0C\xA3\x17\xAE\x45"
16616 "\xDC\x50\xE7\x7E\x15\x89\x20\xB7",
16617 .ilen = 496,
16618 .result = "\x85\x79\x6C\x8B\x2B\x6D\x14\xF9"
16619 "\xA6\x83\xB6\x80\x5B\x3A\xF3\x7E"
16620 "\x30\x29\xEB\x1F\xDC\x19\x5F\xEB"
16621 "\xF7\xC4\x27\x04\x51\x87\xD7\x6F"
16622 "\xB8\x4E\x07\xFB\xAC\x3B\x08\xB4"
16623 "\x4D\xCB\xE8\xE1\x71\x7D\x4F\x48"
16624 "\xCD\x81\x64\xA5\xC4\x07\x1A\x9A"
16625 "\x4B\x62\x90\x0E\xC8\xB3\x2B\x6B"
16626 "\x8F\x9C\x6E\x72\x4B\xBA\xEF\x07"
16627 "\x2C\x56\x07\x5E\x37\x30\x60\xA9"
16628 "\xE3\xEF\xD6\x69\xE1\xA1\x77\x64"
16629 "\x93\x75\x7A\xB7\x7A\x3B\xE9\x43"
16630 "\x23\x35\x95\x91\x80\x8A\xC7\xCF"
16631 "\xC3\xD5\xBF\xE7\xFE\x4C\x06\x6B"
16632 "\x05\x19\x48\xE2\x62\xBA\x4F\xF2"
16633 "\xFB\xEE\xE4\xCB\x79\x9D\xA3\x10"
16634 "\x1D\x29\x8C\x1D\x7A\x88\x5A\xDD"
16635 "\x4E\xB6\x18\xAA\xCD\xE6\x33\x96"
16636 "\xD9\x0F\x90\x5A\x78\x76\x4D\x77"
16637 "\x3C\x20\x89\x3B\xA3\xF9\x07\xFD"
16638 "\xE4\xE8\x20\x2D\x15\x0A\x63\x49"
16639 "\xF5\x4F\x89\xD8\xDE\xA1\x28\x78"
16640 "\x28\x07\x09\x1B\x03\x94\x1D\x4B"
16641 "\x82\x28\x1E\x1D\x95\xBA\xAC\x85"
16642 "\x71\x6E\x3C\x18\x4B\x77\x74\x79"
16643 "\xBF\x67\x0A\x53\x3C\x94\xD9\x60"
16644 "\xE9\x6D\x40\x34\xA0\x2A\x53\x5D"
16645 "\x27\xD5\x47\xF9\xC3\x4B\x27\x29"
16646 "\xE4\x76\x9C\x3F\xA7\x1C\x87\xFC"
16647 "\x6E\x0F\xCF\x9B\x60\xF0\xF0\x8B"
16648 "\x70\x1C\x84\x81\x72\x4D\xB4\x98"
16649 "\x23\x62\xE7\x6A\x2B\xFC\xA5\xB2"
16650 "\xFF\xF5\x71\x07\xCD\x90\x23\x13"
16651 "\x19\xD7\x79\x36\x6C\x9D\x55\x8B"
16652 "\x93\x78\x86\x05\x69\x46\xD0\xC5"
16653 "\x39\x09\xEB\x79\xEF\xFA\x9F\xAE"
16654 "\xF3\xD5\x44\xC3\xFD\x86\xD2\x7C"
16655 "\x83\x4B\xD8\x75\x9C\x18\x04\x7B"
16656 "\x73\xAD\x72\xA4\xF6\xAB\xCF\x4B"
16657 "\xCC\x01\x45\x90\xA6\x43\x05\x0C"
16658 "\x6C\x4F\x62\x77\x57\x97\x9F\xEE"
16659 "\x75\xA7\x3C\x38\xD1\x0F\x3D\x0E"
16660 "\x2C\x43\x98\xFB\x13\x65\x73\xE4"
16661 "\x3C\x1E\xD6\x90\x08\xF7\xE0\x99"
16662 "\x3B\xF1\x9D\x6C\x48\xA9\x0E\x32"
16663 "\x17\xC2\xCC\x20\xA1\x19\x26\xAA"
16664 "\xE0\x75\x2F\xFB\x54\x66\x0A\xDF"
16665 "\xB5\xF2\x1F\xC1\x34\x3C\x30\x56"
16666 "\xE8\xDC\xF7\x92\x6B\xBF\x17\x24"
16667 "\xEC\x94\xB5\x3B\xD6\xCE\xA2\x54"
16668 "\x10\x7F\x50\xDE\x69\x77\xD5\x37"
16669 "\xFE\x9C\x10\x83\xC5\xEB\xC9\x53"
16670 "\xB7\xF3\xC4\x20\xAF\x0A\x7E\x57"
16671 "\x3A\xE6\x75\xFE\x89\x00\x6E\x48"
16672 "\xFB\x99\x17\x2C\xF6\x64\x40\x95"
16673 "\x5E\xDC\x7A\xA6\x70\xC7\xF4\xDD"
16674 "\x52\x05\x24\x34\xF9\x0E\xC8\x64"
16675 "\x6D\xE2\xD8\x80\x53\x31\x4C\xFE"
16676 "\xB4\x3A\x5F\x19\xCF\x42\x1B\x22"
16677 "\x0B\x2D\x7B\xF1\xC5\x43\xF7\x5E"
16678 "\x12\xA8\x01\x64\x16\x0B\x26\x5A"
16679 "\x0C\x95\x0F\x40\xC5\x5A\x06\x7C",
16680 .rlen = 496,
13316 }, 16681 },
13317}; 16682};
13318 16683
@@ -13364,8 +16729,144 @@ static struct cipher_testvec camellia_ctr_dec_tv_template[] = {
13364 "\x6D\x04\x9B\x0F\xA6\x3D\xD4\x48" 16729 "\x6D\x04\x9B\x0F\xA6\x3D\xD4\x48"
13365 "\xDF\x76\x0D", 16730 "\xDF\x76\x0D",
13366 .rlen = 51, 16731 .rlen = 51,
16732 .also_non_np = 1,
16733 .np = 2,
16734 .tap = { 51 - 16, 16 },
16735 }, { /* Generated with Crypto++ */
16736 .key = "\x85\x62\x3F\x1C\xF9\xD6\x1C\xF9"
16737 "\xD6\xB3\x90\x6D\x4A\x90\x6D\x4A"
16738 "\x27\x04\xE1\x27\x04\xE1\xBE\x9B"
16739 "\x78\xBE\x9B\x78\x55\x32\x0F\x55",
16740 .klen = 32,
16741 .iv = "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
16742 "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFD",
16743 .input = "\x85\x79\x6C\x8B\x2B\x6D\x14\xF9"
16744 "\xA6\x83\xB6\x80\x5B\x3A\xF3\x7E"
16745 "\x30\x29\xEB\x1F\xDC\x19\x5F\xEB"
16746 "\xF7\xC4\x27\x04\x51\x87\xD7\x6F"
16747 "\xB8\x4E\x07\xFB\xAC\x3B\x08\xB4"
16748 "\x4D\xCB\xE8\xE1\x71\x7D\x4F\x48"
16749 "\xCD\x81\x64\xA5\xC4\x07\x1A\x9A"
16750 "\x4B\x62\x90\x0E\xC8\xB3\x2B\x6B"
16751 "\x8F\x9C\x6E\x72\x4B\xBA\xEF\x07"
16752 "\x2C\x56\x07\x5E\x37\x30\x60\xA9"
16753 "\xE3\xEF\xD6\x69\xE1\xA1\x77\x64"
16754 "\x93\x75\x7A\xB7\x7A\x3B\xE9\x43"
16755 "\x23\x35\x95\x91\x80\x8A\xC7\xCF"
16756 "\xC3\xD5\xBF\xE7\xFE\x4C\x06\x6B"
16757 "\x05\x19\x48\xE2\x62\xBA\x4F\xF2"
16758 "\xFB\xEE\xE4\xCB\x79\x9D\xA3\x10"
16759 "\x1D\x29\x8C\x1D\x7A\x88\x5A\xDD"
16760 "\x4E\xB6\x18\xAA\xCD\xE6\x33\x96"
16761 "\xD9\x0F\x90\x5A\x78\x76\x4D\x77"
16762 "\x3C\x20\x89\x3B\xA3\xF9\x07\xFD"
16763 "\xE4\xE8\x20\x2D\x15\x0A\x63\x49"
16764 "\xF5\x4F\x89\xD8\xDE\xA1\x28\x78"
16765 "\x28\x07\x09\x1B\x03\x94\x1D\x4B"
16766 "\x82\x28\x1E\x1D\x95\xBA\xAC\x85"
16767 "\x71\x6E\x3C\x18\x4B\x77\x74\x79"
16768 "\xBF\x67\x0A\x53\x3C\x94\xD9\x60"
16769 "\xE9\x6D\x40\x34\xA0\x2A\x53\x5D"
16770 "\x27\xD5\x47\xF9\xC3\x4B\x27\x29"
16771 "\xE4\x76\x9C\x3F\xA7\x1C\x87\xFC"
16772 "\x6E\x0F\xCF\x9B\x60\xF0\xF0\x8B"
16773 "\x70\x1C\x84\x81\x72\x4D\xB4\x98"
16774 "\x23\x62\xE7\x6A\x2B\xFC\xA5\xB2"
16775 "\xFF\xF5\x71\x07\xCD\x90\x23\x13"
16776 "\x19\xD7\x79\x36\x6C\x9D\x55\x8B"
16777 "\x93\x78\x86\x05\x69\x46\xD0\xC5"
16778 "\x39\x09\xEB\x79\xEF\xFA\x9F\xAE"
16779 "\xF3\xD5\x44\xC3\xFD\x86\xD2\x7C"
16780 "\x83\x4B\xD8\x75\x9C\x18\x04\x7B"
16781 "\x73\xAD\x72\xA4\xF6\xAB\xCF\x4B"
16782 "\xCC\x01\x45\x90\xA6\x43\x05\x0C"
16783 "\x6C\x4F\x62\x77\x57\x97\x9F\xEE"
16784 "\x75\xA7\x3C\x38\xD1\x0F\x3D\x0E"
16785 "\x2C\x43\x98\xFB\x13\x65\x73\xE4"
16786 "\x3C\x1E\xD6\x90\x08\xF7\xE0\x99"
16787 "\x3B\xF1\x9D\x6C\x48\xA9\x0E\x32"
16788 "\x17\xC2\xCC\x20\xA1\x19\x26\xAA"
16789 "\xE0\x75\x2F\xFB\x54\x66\x0A\xDF"
16790 "\xB5\xF2\x1F\xC1\x34\x3C\x30\x56"
16791 "\xE8\xDC\xF7\x92\x6B\xBF\x17\x24"
16792 "\xEC\x94\xB5\x3B\xD6\xCE\xA2\x54"
16793 "\x10\x7F\x50\xDE\x69\x77\xD5\x37"
16794 "\xFE\x9C\x10\x83\xC5\xEB\xC9\x53"
16795 "\xB7\xF3\xC4\x20\xAF\x0A\x7E\x57"
16796 "\x3A\xE6\x75\xFE\x89\x00\x6E\x48"
16797 "\xFB\x99\x17\x2C\xF6\x64\x40\x95"
16798 "\x5E\xDC\x7A\xA6\x70\xC7\xF4\xDD"
16799 "\x52\x05\x24\x34\xF9\x0E\xC8\x64"
16800 "\x6D\xE2\xD8\x80\x53\x31\x4C\xFE"
16801 "\xB4\x3A\x5F\x19\xCF\x42\x1B\x22"
16802 "\x0B\x2D\x7B\xF1\xC5\x43\xF7\x5E"
16803 "\x12\xA8\x01\x64\x16\x0B\x26\x5A"
16804 "\x0C\x95\x0F\x40\xC5\x5A\x06\x7C",
16805 .ilen = 496,
16806 .result = "\x56\xED\x84\x1B\x8F\x26\xBD\x31"
16807 "\xC8\x5F\xF6\x6A\x01\x98\x0C\xA3"
16808 "\x3A\xD1\x45\xDC\x73\x0A\x7E\x15"
16809 "\xAC\x20\xB7\x4E\xE5\x59\xF0\x87"
16810 "\x1E\x92\x29\xC0\x34\xCB\x62\xF9"
16811 "\x6D\x04\x9B\x0F\xA6\x3D\xD4\x48"
16812 "\xDF\x76\x0D\x81\x18\xAF\x23\xBA"
16813 "\x51\xE8\x5C\xF3\x8A\x21\x95\x2C"
16814 "\xC3\x37\xCE\x65\xFC\x70\x07\x9E"
16815 "\x12\xA9\x40\xD7\x4B\xE2\x79\x10"
16816 "\x84\x1B\xB2\x26\xBD\x54\xEB\x5F"
16817 "\xF6\x8D\x01\x98\x2F\xC6\x3A\xD1"
16818 "\x68\xFF\x73\x0A\xA1\x15\xAC\x43"
16819 "\xDA\x4E\xE5\x7C\x13\x87\x1E\xB5"
16820 "\x29\xC0\x57\xEE\x62\xF9\x90\x04"
16821 "\x9B\x32\xC9\x3D\xD4\x6B\x02\x76"
16822 "\x0D\xA4\x18\xAF\x46\xDD\x51\xE8"
16823 "\x7F\x16\x8A\x21\xB8\x2C\xC3\x5A"
16824 "\xF1\x65\xFC\x93\x07\x9E\x35\xCC"
16825 "\x40\xD7\x6E\x05\x79\x10\xA7\x1B"
16826 "\xB2\x49\xE0\x54\xEB\x82\x19\x8D"
16827 "\x24\xBB\x2F\xC6\x5D\xF4\x68\xFF"
16828 "\x96\x0A\xA1\x38\xCF\x43\xDA\x71"
16829 "\x08\x7C\x13\xAA\x1E\xB5\x4C\xE3"
16830 "\x57\xEE\x85\x1C\x90\x27\xBE\x32"
16831 "\xC9\x60\xF7\x6B\x02\x99\x0D\xA4"
16832 "\x3B\xD2\x46\xDD\x74\x0B\x7F\x16"
16833 "\xAD\x21\xB8\x4F\xE6\x5A\xF1\x88"
16834 "\x1F\x93\x2A\xC1\x35\xCC\x63\xFA"
16835 "\x6E\x05\x9C\x10\xA7\x3E\xD5\x49"
16836 "\xE0\x77\x0E\x82\x19\xB0\x24\xBB"
16837 "\x52\xE9\x5D\xF4\x8B\x22\x96\x2D"
16838 "\xC4\x38\xCF\x66\xFD\x71\x08\x9F"
16839 "\x13\xAA\x41\xD8\x4C\xE3\x7A\x11"
16840 "\x85\x1C\xB3\x27\xBE\x55\xEC\x60"
16841 "\xF7\x8E\x02\x99\x30\xC7\x3B\xD2"
16842 "\x69\x00\x74\x0B\xA2\x16\xAD\x44"
16843 "\xDB\x4F\xE6\x7D\x14\x88\x1F\xB6"
16844 "\x2A\xC1\x58\xEF\x63\xFA\x91\x05"
16845 "\x9C\x33\xCA\x3E\xD5\x6C\x03\x77"
16846 "\x0E\xA5\x19\xB0\x47\xDE\x52\xE9"
16847 "\x80\x17\x8B\x22\xB9\x2D\xC4\x5B"
16848 "\xF2\x66\xFD\x94\x08\x9F\x36\xCD"
16849 "\x41\xD8\x6F\x06\x7A\x11\xA8\x1C"
16850 "\xB3\x4A\xE1\x55\xEC\x83\x1A\x8E"
16851 "\x25\xBC\x30\xC7\x5E\xF5\x69\x00"
16852 "\x97\x0B\xA2\x39\xD0\x44\xDB\x72"
16853 "\x09\x7D\x14\xAB\x1F\xB6\x4D\xE4"
16854 "\x58\xEF\x86\x1D\x91\x28\xBF\x33"
16855 "\xCA\x61\xF8\x6C\x03\x9A\x0E\xA5"
16856 "\x3C\xD3\x47\xDE\x75\x0C\x80\x17"
16857 "\xAE\x22\xB9\x50\xE7\x5B\xF2\x89"
16858 "\x20\x94\x2B\xC2\x36\xCD\x64\xFB"
16859 "\x6F\x06\x9D\x11\xA8\x3F\xD6\x4A"
16860 "\xE1\x78\x0F\x83\x1A\xB1\x25\xBC"
16861 "\x53\xEA\x5E\xF5\x8C\x00\x97\x2E"
16862 "\xC5\x39\xD0\x67\xFE\x72\x09\xA0"
16863 "\x14\xAB\x42\xD9\x4D\xE4\x7B\x12"
16864 "\x86\x1D\xB4\x28\xBF\x56\xED\x61"
16865 "\xF8\x8F\x03\x9A\x31\xC8\x3C\xD3"
16866 "\x6A\x01\x75\x0C\xA3\x17\xAE\x45"
16867 "\xDC\x50\xE7\x7E\x15\x89\x20\xB7",
16868 .rlen = 496,
13367 }, 16869 },
13368
13369}; 16870};
13370 16871
13371static struct cipher_testvec camellia_lrw_enc_tv_template[] = { 16872static struct cipher_testvec camellia_lrw_enc_tv_template[] = {
@@ -13614,6 +17115,9 @@ static struct cipher_testvec camellia_lrw_enc_tv_template[] = {
13614 "\xb2\x1a\xd8\x4c\xbd\x1d\x10\xe9" 17115 "\xb2\x1a\xd8\x4c\xbd\x1d\x10\xe9"
13615 "\x5a\xa8\x92\x7f\xba\xe6\x0c\x95", 17116 "\x5a\xa8\x92\x7f\xba\xe6\x0c\x95",
13616 .rlen = 512, 17117 .rlen = 512,
17118 .also_non_np = 1,
17119 .np = 2,
17120 .tap = { 512 - 16, 16 },
13617 }, 17121 },
13618}; 17122};
13619 17123
@@ -13864,6 +17368,9 @@ static struct cipher_testvec camellia_lrw_dec_tv_template[] = {
13864 "\xe9\x2e\xc4\x29\x0f\x84\xdb\xc4" 17368 "\xe9\x2e\xc4\x29\x0f\x84\xdb\xc4"
13865 "\x21\xc4\xc2\x75\x67\x89\x37\x0a", 17369 "\x21\xc4\xc2\x75\x67\x89\x37\x0a",
13866 .rlen = 512, 17370 .rlen = 512,
17371 .also_non_np = 1,
17372 .np = 2,
17373 .tap = { 512 - 16, 16 },
13867 }, 17374 },
13868}; 17375};
13869 17376
@@ -14203,6 +17710,9 @@ static struct cipher_testvec camellia_xts_enc_tv_template[] = {
14203 "\xb7\x16\xd8\x12\x5c\xcd\x7d\x4e" 17710 "\xb7\x16\xd8\x12\x5c\xcd\x7d\x4e"
14204 "\xd5\xc6\x99\xcc\x4e\x6c\x94\x95", 17711 "\xd5\xc6\x99\xcc\x4e\x6c\x94\x95",
14205 .rlen = 512, 17712 .rlen = 512,
17713 .also_non_np = 1,
17714 .np = 2,
17715 .tap = { 512 - 16, 16 },
14206 }, 17716 },
14207}; 17717};
14208 17718
@@ -14543,6 +18053,9 @@ static struct cipher_testvec camellia_xts_dec_tv_template[] = {
14543 "\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7" 18053 "\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7"
14544 "\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff", 18054 "\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff",
14545 .rlen = 512, 18055 .rlen = 512,
18056 .also_non_np = 1,
18057 .np = 2,
18058 .tap = { 512 - 16, 16 },
14546 }, 18059 },
14547}; 18060};
14548 18061
diff --git a/crypto/tgr192.c b/crypto/tgr192.c
index cbca4f208c9..87403556fd0 100644
--- a/crypto/tgr192.c
+++ b/crypto/tgr192.c
@@ -628,7 +628,7 @@ static int tgr128_final(struct shash_desc *desc, u8 * out)
628 return 0; 628 return 0;
629} 629}
630 630
631static struct shash_alg tgr192 = { 631static struct shash_alg tgr_algs[3] = { {
632 .digestsize = TGR192_DIGEST_SIZE, 632 .digestsize = TGR192_DIGEST_SIZE,
633 .init = tgr192_init, 633 .init = tgr192_init,
634 .update = tgr192_update, 634 .update = tgr192_update,
@@ -640,9 +640,7 @@ static struct shash_alg tgr192 = {
640 .cra_blocksize = TGR192_BLOCK_SIZE, 640 .cra_blocksize = TGR192_BLOCK_SIZE,
641 .cra_module = THIS_MODULE, 641 .cra_module = THIS_MODULE,
642 } 642 }
643}; 643}, {
644
645static struct shash_alg tgr160 = {
646 .digestsize = TGR160_DIGEST_SIZE, 644 .digestsize = TGR160_DIGEST_SIZE,
647 .init = tgr192_init, 645 .init = tgr192_init,
648 .update = tgr192_update, 646 .update = tgr192_update,
@@ -654,9 +652,7 @@ static struct shash_alg tgr160 = {
654 .cra_blocksize = TGR192_BLOCK_SIZE, 652 .cra_blocksize = TGR192_BLOCK_SIZE,
655 .cra_module = THIS_MODULE, 653 .cra_module = THIS_MODULE,
656 } 654 }
657}; 655}, {
658
659static struct shash_alg tgr128 = {
660 .digestsize = TGR128_DIGEST_SIZE, 656 .digestsize = TGR128_DIGEST_SIZE,
661 .init = tgr192_init, 657 .init = tgr192_init,
662 .update = tgr192_update, 658 .update = tgr192_update,
@@ -668,38 +664,16 @@ static struct shash_alg tgr128 = {
668 .cra_blocksize = TGR192_BLOCK_SIZE, 664 .cra_blocksize = TGR192_BLOCK_SIZE,
669 .cra_module = THIS_MODULE, 665 .cra_module = THIS_MODULE,
670 } 666 }
671}; 667} };
672 668
673static int __init tgr192_mod_init(void) 669static int __init tgr192_mod_init(void)
674{ 670{
675 int ret = 0; 671 return crypto_register_shashes(tgr_algs, ARRAY_SIZE(tgr_algs));
676
677 ret = crypto_register_shash(&tgr192);
678
679 if (ret < 0) {
680 goto out;
681 }
682
683 ret = crypto_register_shash(&tgr160);
684 if (ret < 0) {
685 crypto_unregister_shash(&tgr192);
686 goto out;
687 }
688
689 ret = crypto_register_shash(&tgr128);
690 if (ret < 0) {
691 crypto_unregister_shash(&tgr192);
692 crypto_unregister_shash(&tgr160);
693 }
694 out:
695 return ret;
696} 672}
697 673
698static void __exit tgr192_mod_fini(void) 674static void __exit tgr192_mod_fini(void)
699{ 675{
700 crypto_unregister_shash(&tgr192); 676 crypto_unregister_shashes(tgr_algs, ARRAY_SIZE(tgr_algs));
701 crypto_unregister_shash(&tgr160);
702 crypto_unregister_shash(&tgr128);
703} 677}
704 678
705MODULE_ALIAS("tgr160"); 679MODULE_ALIAS("tgr160");
diff --git a/crypto/twofish_generic.c b/crypto/twofish_generic.c
index 1f07b843e07..2d5000552d0 100644
--- a/crypto/twofish_generic.c
+++ b/crypto/twofish_generic.c
@@ -188,7 +188,6 @@ static struct crypto_alg alg = {
188 .cra_ctxsize = sizeof(struct twofish_ctx), 188 .cra_ctxsize = sizeof(struct twofish_ctx),
189 .cra_alignmask = 3, 189 .cra_alignmask = 3,
190 .cra_module = THIS_MODULE, 190 .cra_module = THIS_MODULE,
191 .cra_list = LIST_HEAD_INIT(alg.cra_list),
192 .cra_u = { .cipher = { 191 .cra_u = { .cipher = {
193 .cia_min_keysize = TF_MIN_KEY_SIZE, 192 .cia_min_keysize = TF_MIN_KEY_SIZE,
194 .cia_max_keysize = TF_MAX_KEY_SIZE, 193 .cia_max_keysize = TF_MAX_KEY_SIZE,
diff --git a/crypto/vmac.c b/crypto/vmac.c
index 4243905ba13..f2338ca9836 100644
--- a/crypto/vmac.c
+++ b/crypto/vmac.c
@@ -38,11 +38,11 @@
38 * Constants and masks 38 * Constants and masks
39 */ 39 */
40#define UINT64_C(x) x##ULL 40#define UINT64_C(x) x##ULL
41const u64 p64 = UINT64_C(0xfffffffffffffeff); /* 2^64 - 257 prime */ 41static const u64 p64 = UINT64_C(0xfffffffffffffeff); /* 2^64 - 257 prime */
42const u64 m62 = UINT64_C(0x3fffffffffffffff); /* 62-bit mask */ 42static const u64 m62 = UINT64_C(0x3fffffffffffffff); /* 62-bit mask */
43const u64 m63 = UINT64_C(0x7fffffffffffffff); /* 63-bit mask */ 43static const u64 m63 = UINT64_C(0x7fffffffffffffff); /* 63-bit mask */
44const u64 m64 = UINT64_C(0xffffffffffffffff); /* 64-bit mask */ 44static const u64 m64 = UINT64_C(0xffffffffffffffff); /* 64-bit mask */
45const u64 mpoly = UINT64_C(0x1fffffff1fffffff); /* Poly key mask */ 45static const u64 mpoly = UINT64_C(0x1fffffff1fffffff); /* Poly key mask */
46 46
47#define pe64_to_cpup le64_to_cpup /* Prefer little endian */ 47#define pe64_to_cpup le64_to_cpup /* Prefer little endian */
48 48
diff --git a/crypto/wp512.c b/crypto/wp512.c
index 71719a2be25..180f1d6e03f 100644
--- a/crypto/wp512.c
+++ b/crypto/wp512.c
@@ -1119,7 +1119,7 @@ static int wp256_final(struct shash_desc *desc, u8 *out)
1119 return 0; 1119 return 0;
1120} 1120}
1121 1121
1122static struct shash_alg wp512 = { 1122static struct shash_alg wp_algs[3] = { {
1123 .digestsize = WP512_DIGEST_SIZE, 1123 .digestsize = WP512_DIGEST_SIZE,
1124 .init = wp512_init, 1124 .init = wp512_init,
1125 .update = wp512_update, 1125 .update = wp512_update,
@@ -1131,9 +1131,7 @@ static struct shash_alg wp512 = {
1131 .cra_blocksize = WP512_BLOCK_SIZE, 1131 .cra_blocksize = WP512_BLOCK_SIZE,
1132 .cra_module = THIS_MODULE, 1132 .cra_module = THIS_MODULE,
1133 } 1133 }
1134}; 1134}, {
1135
1136static struct shash_alg wp384 = {
1137 .digestsize = WP384_DIGEST_SIZE, 1135 .digestsize = WP384_DIGEST_SIZE,
1138 .init = wp512_init, 1136 .init = wp512_init,
1139 .update = wp512_update, 1137 .update = wp512_update,
@@ -1145,9 +1143,7 @@ static struct shash_alg wp384 = {
1145 .cra_blocksize = WP512_BLOCK_SIZE, 1143 .cra_blocksize = WP512_BLOCK_SIZE,
1146 .cra_module = THIS_MODULE, 1144 .cra_module = THIS_MODULE,
1147 } 1145 }
1148}; 1146}, {
1149
1150static struct shash_alg wp256 = {
1151 .digestsize = WP256_DIGEST_SIZE, 1147 .digestsize = WP256_DIGEST_SIZE,
1152 .init = wp512_init, 1148 .init = wp512_init,
1153 .update = wp512_update, 1149 .update = wp512_update,
@@ -1159,39 +1155,16 @@ static struct shash_alg wp256 = {
1159 .cra_blocksize = WP512_BLOCK_SIZE, 1155 .cra_blocksize = WP512_BLOCK_SIZE,
1160 .cra_module = THIS_MODULE, 1156 .cra_module = THIS_MODULE,
1161 } 1157 }
1162}; 1158} };
1163 1159
1164static int __init wp512_mod_init(void) 1160static int __init wp512_mod_init(void)
1165{ 1161{
1166 int ret = 0; 1162 return crypto_register_shashes(wp_algs, ARRAY_SIZE(wp_algs));
1167
1168 ret = crypto_register_shash(&wp512);
1169
1170 if (ret < 0)
1171 goto out;
1172
1173 ret = crypto_register_shash(&wp384);
1174 if (ret < 0)
1175 {
1176 crypto_unregister_shash(&wp512);
1177 goto out;
1178 }
1179
1180 ret = crypto_register_shash(&wp256);
1181 if (ret < 0)
1182 {
1183 crypto_unregister_shash(&wp512);
1184 crypto_unregister_shash(&wp384);
1185 }
1186out:
1187 return ret;
1188} 1163}
1189 1164
1190static void __exit wp512_mod_fini(void) 1165static void __exit wp512_mod_fini(void)
1191{ 1166{
1192 crypto_unregister_shash(&wp512); 1167 crypto_unregister_shashes(wp_algs, ARRAY_SIZE(wp_algs));
1193 crypto_unregister_shash(&wp384);
1194 crypto_unregister_shash(&wp256);
1195} 1168}
1196 1169
1197MODULE_ALIAS("wp384"); 1170MODULE_ALIAS("wp384");
diff --git a/drivers/char/hw_random/mxc-rnga.c b/drivers/char/hw_random/mxc-rnga.c
index 85074de5042..f05d85713fd 100644
--- a/drivers/char/hw_random/mxc-rnga.c
+++ b/drivers/char/hw_random/mxc-rnga.c
@@ -59,16 +59,21 @@
59#define RNGA_STATUS_LAST_READ_STATUS 0x00000002 59#define RNGA_STATUS_LAST_READ_STATUS 0x00000002
60#define RNGA_STATUS_SECURITY_VIOLATION 0x00000001 60#define RNGA_STATUS_SECURITY_VIOLATION 0x00000001
61 61
62static struct platform_device *rng_dev; 62struct mxc_rng {
63 struct device *dev;
64 struct hwrng rng;
65 void __iomem *mem;
66 struct clk *clk;
67};
63 68
64static int mxc_rnga_data_present(struct hwrng *rng, int wait) 69static int mxc_rnga_data_present(struct hwrng *rng, int wait)
65{ 70{
66 void __iomem *rng_base = (void __iomem *)rng->priv;
67 int i; 71 int i;
72 struct mxc_rng *mxc_rng = container_of(rng, struct mxc_rng, rng);
68 73
69 for (i = 0; i < 20; i++) { 74 for (i = 0; i < 20; i++) {
70 /* how many random numbers are in FIFO? [0-16] */ 75 /* how many random numbers are in FIFO? [0-16] */
71 int level = (__raw_readl(rng_base + RNGA_STATUS) & 76 int level = (__raw_readl(mxc_rng->mem + RNGA_STATUS) &
72 RNGA_STATUS_LEVEL_MASK) >> 8; 77 RNGA_STATUS_LEVEL_MASK) >> 8;
73 if (level || !wait) 78 if (level || !wait)
74 return !!level; 79 return !!level;
@@ -81,20 +86,20 @@ static int mxc_rnga_data_read(struct hwrng *rng, u32 * data)
81{ 86{
82 int err; 87 int err;
83 u32 ctrl; 88 u32 ctrl;
84 void __iomem *rng_base = (void __iomem *)rng->priv; 89 struct mxc_rng *mxc_rng = container_of(rng, struct mxc_rng, rng);
85 90
86 /* retrieve a random number from FIFO */ 91 /* retrieve a random number from FIFO */
87 *data = __raw_readl(rng_base + RNGA_OUTPUT_FIFO); 92 *data = __raw_readl(mxc_rng->mem + RNGA_OUTPUT_FIFO);
88 93
89 /* some error while reading this random number? */ 94 /* some error while reading this random number? */
90 err = __raw_readl(rng_base + RNGA_STATUS) & RNGA_STATUS_ERROR_INT; 95 err = __raw_readl(mxc_rng->mem + RNGA_STATUS) & RNGA_STATUS_ERROR_INT;
91 96
92 /* if error: clear error interrupt, but doesn't return random number */ 97 /* if error: clear error interrupt, but doesn't return random number */
93 if (err) { 98 if (err) {
94 dev_dbg(&rng_dev->dev, "Error while reading random number!\n"); 99 dev_dbg(mxc_rng->dev, "Error while reading random number!\n");
95 ctrl = __raw_readl(rng_base + RNGA_CONTROL); 100 ctrl = __raw_readl(mxc_rng->mem + RNGA_CONTROL);
96 __raw_writel(ctrl | RNGA_CONTROL_CLEAR_INT, 101 __raw_writel(ctrl | RNGA_CONTROL_CLEAR_INT,
97 rng_base + RNGA_CONTROL); 102 mxc_rng->mem + RNGA_CONTROL);
98 return 0; 103 return 0;
99 } else 104 } else
100 return 4; 105 return 4;
@@ -103,22 +108,22 @@ static int mxc_rnga_data_read(struct hwrng *rng, u32 * data)
103static int mxc_rnga_init(struct hwrng *rng) 108static int mxc_rnga_init(struct hwrng *rng)
104{ 109{
105 u32 ctrl, osc; 110 u32 ctrl, osc;
106 void __iomem *rng_base = (void __iomem *)rng->priv; 111 struct mxc_rng *mxc_rng = container_of(rng, struct mxc_rng, rng);
107 112
108 /* wake up */ 113 /* wake up */
109 ctrl = __raw_readl(rng_base + RNGA_CONTROL); 114 ctrl = __raw_readl(mxc_rng->mem + RNGA_CONTROL);
110 __raw_writel(ctrl & ~RNGA_CONTROL_SLEEP, rng_base + RNGA_CONTROL); 115 __raw_writel(ctrl & ~RNGA_CONTROL_SLEEP, mxc_rng->mem + RNGA_CONTROL);
111 116
112 /* verify if oscillator is working */ 117 /* verify if oscillator is working */
113 osc = __raw_readl(rng_base + RNGA_STATUS); 118 osc = __raw_readl(mxc_rng->mem + RNGA_STATUS);
114 if (osc & RNGA_STATUS_OSC_DEAD) { 119 if (osc & RNGA_STATUS_OSC_DEAD) {
115 dev_err(&rng_dev->dev, "RNGA Oscillator is dead!\n"); 120 dev_err(mxc_rng->dev, "RNGA Oscillator is dead!\n");
116 return -ENODEV; 121 return -ENODEV;
117 } 122 }
118 123
119 /* go running */ 124 /* go running */
120 ctrl = __raw_readl(rng_base + RNGA_CONTROL); 125 ctrl = __raw_readl(mxc_rng->mem + RNGA_CONTROL);
121 __raw_writel(ctrl | RNGA_CONTROL_GO, rng_base + RNGA_CONTROL); 126 __raw_writel(ctrl | RNGA_CONTROL_GO, mxc_rng->mem + RNGA_CONTROL);
122 127
123 return 0; 128 return 0;
124} 129}
@@ -126,40 +131,40 @@ static int mxc_rnga_init(struct hwrng *rng)
126static void mxc_rnga_cleanup(struct hwrng *rng) 131static void mxc_rnga_cleanup(struct hwrng *rng)
127{ 132{
128 u32 ctrl; 133 u32 ctrl;
129 void __iomem *rng_base = (void __iomem *)rng->priv; 134 struct mxc_rng *mxc_rng = container_of(rng, struct mxc_rng, rng);
130 135
131 ctrl = __raw_readl(rng_base + RNGA_CONTROL); 136 ctrl = __raw_readl(mxc_rng->mem + RNGA_CONTROL);
132 137
133 /* stop rnga */ 138 /* stop rnga */
134 __raw_writel(ctrl & ~RNGA_CONTROL_GO, rng_base + RNGA_CONTROL); 139 __raw_writel(ctrl & ~RNGA_CONTROL_GO, mxc_rng->mem + RNGA_CONTROL);
135} 140}
136 141
137static struct hwrng mxc_rnga = {
138 .name = "mxc-rnga",
139 .init = mxc_rnga_init,
140 .cleanup = mxc_rnga_cleanup,
141 .data_present = mxc_rnga_data_present,
142 .data_read = mxc_rnga_data_read
143};
144
145static int __init mxc_rnga_probe(struct platform_device *pdev) 142static int __init mxc_rnga_probe(struct platform_device *pdev)
146{ 143{
147 int err = -ENODEV; 144 int err = -ENODEV;
148 struct clk *clk;
149 struct resource *res, *mem; 145 struct resource *res, *mem;
150 void __iomem *rng_base = NULL; 146 struct mxc_rng *mxc_rng;
151 147
152 if (rng_dev) 148 mxc_rng = devm_kzalloc(&pdev->dev, sizeof(struct mxc_rng),
153 return -EBUSY; 149 GFP_KERNEL);
154 150 if (!mxc_rng)
155 clk = clk_get(&pdev->dev, "rng"); 151 return -ENOMEM;
156 if (IS_ERR(clk)) { 152
153 mxc_rng->dev = &pdev->dev;
154 mxc_rng->rng.name = "mxc-rnga";
155 mxc_rng->rng.init = mxc_rnga_init;
156 mxc_rng->rng.cleanup = mxc_rnga_cleanup,
157 mxc_rng->rng.data_present = mxc_rnga_data_present,
158 mxc_rng->rng.data_read = mxc_rnga_data_read,
159
160 mxc_rng->clk = devm_clk_get(&pdev->dev, NULL);
161 if (IS_ERR(mxc_rng->clk)) {
157 dev_err(&pdev->dev, "Could not get rng_clk!\n"); 162 dev_err(&pdev->dev, "Could not get rng_clk!\n");
158 err = PTR_ERR(clk); 163 err = PTR_ERR(mxc_rng->clk);
159 goto out; 164 goto out;
160 } 165 }
161 166
162 clk_enable(clk); 167 clk_prepare_enable(mxc_rng->clk);
163 168
164 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 169 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
165 if (!res) { 170 if (!res) {
@@ -173,36 +178,27 @@ static int __init mxc_rnga_probe(struct platform_device *pdev)
173 goto err_region; 178 goto err_region;
174 } 179 }
175 180
176 rng_base = ioremap(res->start, resource_size(res)); 181 mxc_rng->mem = ioremap(res->start, resource_size(res));
177 if (!rng_base) { 182 if (!mxc_rng->mem) {
178 err = -ENOMEM; 183 err = -ENOMEM;
179 goto err_ioremap; 184 goto err_ioremap;
180 } 185 }
181 186
182 mxc_rnga.priv = (unsigned long)rng_base; 187 err = hwrng_register(&mxc_rng->rng);
183
184 err = hwrng_register(&mxc_rnga);
185 if (err) { 188 if (err) {
186 dev_err(&pdev->dev, "MXC RNGA registering failed (%d)\n", err); 189 dev_err(&pdev->dev, "MXC RNGA registering failed (%d)\n", err);
187 goto err_register; 190 goto err_ioremap;
188 } 191 }
189 192
190 rng_dev = pdev;
191
192 dev_info(&pdev->dev, "MXC RNGA Registered.\n"); 193 dev_info(&pdev->dev, "MXC RNGA Registered.\n");
193 194
194 return 0; 195 return 0;
195 196
196err_register:
197 iounmap(rng_base);
198 rng_base = NULL;
199
200err_ioremap: 197err_ioremap:
201 release_mem_region(res->start, resource_size(res)); 198 release_mem_region(res->start, resource_size(res));
202 199
203err_region: 200err_region:
204 clk_disable(clk); 201 clk_disable_unprepare(mxc_rng->clk);
205 clk_put(clk);
206 202
207out: 203out:
208 return err; 204 return err;
@@ -211,17 +207,15 @@ out:
211static int __exit mxc_rnga_remove(struct platform_device *pdev) 207static int __exit mxc_rnga_remove(struct platform_device *pdev)
212{ 208{
213 struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 209 struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
214 void __iomem *rng_base = (void __iomem *)mxc_rnga.priv; 210 struct mxc_rng *mxc_rng = platform_get_drvdata(pdev);
215 struct clk *clk = clk_get(&pdev->dev, "rng");
216 211
217 hwrng_unregister(&mxc_rnga); 212 hwrng_unregister(&mxc_rng->rng);
218 213
219 iounmap(rng_base); 214 iounmap(mxc_rng->mem);
220 215
221 release_mem_region(res->start, resource_size(res)); 216 release_mem_region(res->start, resource_size(res));
222 217
223 clk_disable(clk); 218 clk_disable_unprepare(mxc_rng->clk);
224 clk_put(clk);
225 219
226 return 0; 220 return 0;
227} 221}
diff --git a/drivers/char/hw_random/octeon-rng.c b/drivers/char/hw_random/octeon-rng.c
index 0943edc782a..5c34c092af7 100644
--- a/drivers/char/hw_random/octeon-rng.c
+++ b/drivers/char/hw_random/octeon-rng.c
@@ -75,42 +75,35 @@ static int __devinit octeon_rng_probe(struct platform_device *pdev)
75 75
76 res_ports = platform_get_resource(pdev, IORESOURCE_MEM, 0); 76 res_ports = platform_get_resource(pdev, IORESOURCE_MEM, 0);
77 if (!res_ports) 77 if (!res_ports)
78 goto err_ports; 78 return -ENOENT;
79 79
80 res_result = platform_get_resource(pdev, IORESOURCE_MEM, 1); 80 res_result = platform_get_resource(pdev, IORESOURCE_MEM, 1);
81 if (!res_result) 81 if (!res_result)
82 goto err_ports; 82 return -ENOENT;
83 83
84 84
85 rng->control_status = devm_ioremap_nocache(&pdev->dev, 85 rng->control_status = devm_ioremap_nocache(&pdev->dev,
86 res_ports->start, 86 res_ports->start,
87 sizeof(u64)); 87 sizeof(u64));
88 if (!rng->control_status) 88 if (!rng->control_status)
89 goto err_ports; 89 return -ENOENT;
90 90
91 rng->result = devm_ioremap_nocache(&pdev->dev, 91 rng->result = devm_ioremap_nocache(&pdev->dev,
92 res_result->start, 92 res_result->start,
93 sizeof(u64)); 93 sizeof(u64));
94 if (!rng->result) 94 if (!rng->result)
95 goto err_r; 95 return -ENOENT;
96 96
97 rng->ops = ops; 97 rng->ops = ops;
98 98
99 dev_set_drvdata(&pdev->dev, &rng->ops); 99 dev_set_drvdata(&pdev->dev, &rng->ops);
100 ret = hwrng_register(&rng->ops); 100 ret = hwrng_register(&rng->ops);
101 if (ret) 101 if (ret)
102 goto err; 102 return -ENOENT;
103 103
104 dev_info(&pdev->dev, "Octeon Random Number Generator\n"); 104 dev_info(&pdev->dev, "Octeon Random Number Generator\n");
105 105
106 return 0; 106 return 0;
107err:
108 devm_iounmap(&pdev->dev, rng->control_status);
109err_r:
110 devm_iounmap(&pdev->dev, rng->result);
111err_ports:
112 devm_kfree(&pdev->dev, rng);
113 return -ENOENT;
114} 107}
115 108
116static int __exit octeon_rng_remove(struct platform_device *pdev) 109static int __exit octeon_rng_remove(struct platform_device *pdev)
diff --git a/drivers/crypto/Kconfig b/drivers/crypto/Kconfig
index 7d74d092aa8..308c7fb92a6 100644
--- a/drivers/crypto/Kconfig
+++ b/drivers/crypto/Kconfig
@@ -298,21 +298,15 @@ config CRYPTO_DEV_TEGRA_AES
298 will be called tegra-aes. 298 will be called tegra-aes.
299 299
300config CRYPTO_DEV_NX 300config CRYPTO_DEV_NX
301 tristate "Support for Power7+ in-Nest cryptographic acceleration" 301 bool "Support for IBM Power7+ in-Nest cryptographic acceleration"
302 depends on PPC64 && IBMVIO 302 depends on PPC64 && IBMVIO
303 select CRYPTO_AES 303 default n
304 select CRYPTO_CBC
305 select CRYPTO_ECB
306 select CRYPTO_CCM
307 select CRYPTO_GCM
308 select CRYPTO_AUTHENC
309 select CRYPTO_XCBC
310 select CRYPTO_SHA256
311 select CRYPTO_SHA512
312 help 304 help
313 Support for Power7+ in-Nest cryptographic acceleration. This 305 Support for Power7+ in-Nest cryptographic acceleration.
314 module supports acceleration for AES and SHA2 algorithms. If you 306
315 choose 'M' here, this module will be called nx_crypto. 307if CRYPTO_DEV_NX
308 source "drivers/crypto/nx/Kconfig"
309endif
316 310
317config CRYPTO_DEV_UX500 311config CRYPTO_DEV_UX500
318 tristate "Driver for ST-Ericsson UX500 crypto hardware acceleration" 312 tristate "Driver for ST-Ericsson UX500 crypto hardware acceleration"
@@ -340,7 +334,7 @@ config CRYPTO_DEV_ATMEL_AES
340 select CRYPTO_AES 334 select CRYPTO_AES
341 select CRYPTO_ALGAPI 335 select CRYPTO_ALGAPI
342 select CRYPTO_BLKCIPHER 336 select CRYPTO_BLKCIPHER
343 select CONFIG_AT_HDMAC 337 select AT_HDMAC
344 help 338 help
345 Some Atmel processors have AES hw accelerator. 339 Some Atmel processors have AES hw accelerator.
346 Select this if you want to use the Atmel module for 340 Select this if you want to use the Atmel module for
diff --git a/drivers/crypto/amcc/crypto4xx_core.c b/drivers/crypto/amcc/crypto4xx_core.c
index 802e85102c3..f88e3d8f6b6 100644
--- a/drivers/crypto/amcc/crypto4xx_core.c
+++ b/drivers/crypto/amcc/crypto4xx_core.c
@@ -1226,6 +1226,7 @@ static int __init crypto4xx_probe(struct platform_device *ofdev)
1226 core_dev->dev->ce_base = of_iomap(ofdev->dev.of_node, 0); 1226 core_dev->dev->ce_base = of_iomap(ofdev->dev.of_node, 0);
1227 if (!core_dev->dev->ce_base) { 1227 if (!core_dev->dev->ce_base) {
1228 dev_err(dev, "failed to of_iomap\n"); 1228 dev_err(dev, "failed to of_iomap\n");
1229 rc = -ENOMEM;
1229 goto err_iomap; 1230 goto err_iomap;
1230 } 1231 }
1231 1232
diff --git a/drivers/crypto/atmel-aes.c b/drivers/crypto/atmel-aes.c
index 6bb20fffbf4..8061336e07e 100644
--- a/drivers/crypto/atmel-aes.c
+++ b/drivers/crypto/atmel-aes.c
@@ -24,15 +24,10 @@
24#include <linux/platform_device.h> 24#include <linux/platform_device.h>
25 25
26#include <linux/device.h> 26#include <linux/device.h>
27#include <linux/module.h>
28#include <linux/init.h> 27#include <linux/init.h>
29#include <linux/errno.h> 28#include <linux/errno.h>
30#include <linux/interrupt.h> 29#include <linux/interrupt.h>
31#include <linux/kernel.h>
32#include <linux/clk.h>
33#include <linux/irq.h> 30#include <linux/irq.h>
34#include <linux/io.h>
35#include <linux/platform_device.h>
36#include <linux/scatterlist.h> 31#include <linux/scatterlist.h>
37#include <linux/dma-mapping.h> 32#include <linux/dma-mapping.h>
38#include <linux/delay.h> 33#include <linux/delay.h>
@@ -1017,7 +1012,6 @@ static int atmel_aes_register_algs(struct atmel_aes_dev *dd)
1017 int err, i, j; 1012 int err, i, j;
1018 1013
1019 for (i = 0; i < ARRAY_SIZE(aes_algs); i++) { 1014 for (i = 0; i < ARRAY_SIZE(aes_algs); i++) {
1020 INIT_LIST_HEAD(&aes_algs[i].cra_list);
1021 err = crypto_register_alg(&aes_algs[i]); 1015 err = crypto_register_alg(&aes_algs[i]);
1022 if (err) 1016 if (err)
1023 goto err_aes_algs; 1017 goto err_aes_algs;
@@ -1026,7 +1020,6 @@ static int atmel_aes_register_algs(struct atmel_aes_dev *dd)
1026 atmel_aes_hw_version_init(dd); 1020 atmel_aes_hw_version_init(dd);
1027 1021
1028 if (dd->hw_version >= 0x130) { 1022 if (dd->hw_version >= 0x130) {
1029 INIT_LIST_HEAD(&aes_cfb64_alg[0].cra_list);
1030 err = crypto_register_alg(&aes_cfb64_alg[0]); 1023 err = crypto_register_alg(&aes_cfb64_alg[0]);
1031 if (err) 1024 if (err)
1032 goto err_aes_cfb64_alg; 1025 goto err_aes_cfb64_alg;
diff --git a/drivers/crypto/atmel-sha.c b/drivers/crypto/atmel-sha.c
index f938b9d79b6..bcdf55fdc62 100644
--- a/drivers/crypto/atmel-sha.c
+++ b/drivers/crypto/atmel-sha.c
@@ -24,15 +24,10 @@
24#include <linux/platform_device.h> 24#include <linux/platform_device.h>
25 25
26#include <linux/device.h> 26#include <linux/device.h>
27#include <linux/module.h>
28#include <linux/init.h> 27#include <linux/init.h>
29#include <linux/errno.h> 28#include <linux/errno.h>
30#include <linux/interrupt.h> 29#include <linux/interrupt.h>
31#include <linux/kernel.h>
32#include <linux/clk.h>
33#include <linux/irq.h> 30#include <linux/irq.h>
34#include <linux/io.h>
35#include <linux/platform_device.h>
36#include <linux/scatterlist.h> 31#include <linux/scatterlist.h>
37#include <linux/dma-mapping.h> 32#include <linux/dma-mapping.h>
38#include <linux/delay.h> 33#include <linux/delay.h>
diff --git a/drivers/crypto/atmel-tdes.c b/drivers/crypto/atmel-tdes.c
index eb2b61e57e2..7495f98c722 100644
--- a/drivers/crypto/atmel-tdes.c
+++ b/drivers/crypto/atmel-tdes.c
@@ -24,15 +24,10 @@
24#include <linux/platform_device.h> 24#include <linux/platform_device.h>
25 25
26#include <linux/device.h> 26#include <linux/device.h>
27#include <linux/module.h>
28#include <linux/init.h> 27#include <linux/init.h>
29#include <linux/errno.h> 28#include <linux/errno.h>
30#include <linux/interrupt.h> 29#include <linux/interrupt.h>
31#include <linux/kernel.h>
32#include <linux/clk.h>
33#include <linux/irq.h> 30#include <linux/irq.h>
34#include <linux/io.h>
35#include <linux/platform_device.h>
36#include <linux/scatterlist.h> 31#include <linux/scatterlist.h>
37#include <linux/dma-mapping.h> 32#include <linux/dma-mapping.h>
38#include <linux/delay.h> 33#include <linux/delay.h>
@@ -1044,7 +1039,6 @@ static int atmel_tdes_register_algs(struct atmel_tdes_dev *dd)
1044 int err, i, j; 1039 int err, i, j;
1045 1040
1046 for (i = 0; i < ARRAY_SIZE(tdes_algs); i++) { 1041 for (i = 0; i < ARRAY_SIZE(tdes_algs); i++) {
1047 INIT_LIST_HEAD(&tdes_algs[i].cra_list);
1048 err = crypto_register_alg(&tdes_algs[i]); 1042 err = crypto_register_alg(&tdes_algs[i]);
1049 if (err) 1043 if (err)
1050 goto err_tdes_algs; 1044 goto err_tdes_algs;
diff --git a/drivers/crypto/caam/caamalg.c b/drivers/crypto/caam/caamalg.c
index 0c1ea8492ef..b2a0a0726a5 100644
--- a/drivers/crypto/caam/caamalg.c
+++ b/drivers/crypto/caam/caamalg.c
@@ -205,7 +205,7 @@ static void init_sh_desc_key_aead(u32 *desc, struct caam_ctx *ctx,
205{ 205{
206 u32 *key_jump_cmd; 206 u32 *key_jump_cmd;
207 207
208 init_sh_desc(desc, HDR_SHARE_WAIT); 208 init_sh_desc(desc, HDR_SHARE_SERIAL);
209 209
210 /* Skip if already shared */ 210 /* Skip if already shared */
211 key_jump_cmd = append_jump(desc, JUMP_JSL | JUMP_TEST_ALL | 211 key_jump_cmd = append_jump(desc, JUMP_JSL | JUMP_TEST_ALL |
@@ -224,7 +224,7 @@ static int aead_set_sh_desc(struct crypto_aead *aead)
224 struct aead_tfm *tfm = &aead->base.crt_aead; 224 struct aead_tfm *tfm = &aead->base.crt_aead;
225 struct caam_ctx *ctx = crypto_aead_ctx(aead); 225 struct caam_ctx *ctx = crypto_aead_ctx(aead);
226 struct device *jrdev = ctx->jrdev; 226 struct device *jrdev = ctx->jrdev;
227 bool keys_fit_inline = 0; 227 bool keys_fit_inline = false;
228 u32 *key_jump_cmd, *jump_cmd; 228 u32 *key_jump_cmd, *jump_cmd;
229 u32 geniv, moveiv; 229 u32 geniv, moveiv;
230 u32 *desc; 230 u32 *desc;
@@ -239,7 +239,7 @@ static int aead_set_sh_desc(struct crypto_aead *aead)
239 if (DESC_AEAD_ENC_LEN + DESC_JOB_IO_LEN + 239 if (DESC_AEAD_ENC_LEN + DESC_JOB_IO_LEN +
240 ctx->split_key_pad_len + ctx->enckeylen <= 240 ctx->split_key_pad_len + ctx->enckeylen <=
241 CAAM_DESC_BYTES_MAX) 241 CAAM_DESC_BYTES_MAX)
242 keys_fit_inline = 1; 242 keys_fit_inline = true;
243 243
244 /* aead_encrypt shared descriptor */ 244 /* aead_encrypt shared descriptor */
245 desc = ctx->sh_desc_enc; 245 desc = ctx->sh_desc_enc;
@@ -297,12 +297,12 @@ static int aead_set_sh_desc(struct crypto_aead *aead)
297 if (DESC_AEAD_DEC_LEN + DESC_JOB_IO_LEN + 297 if (DESC_AEAD_DEC_LEN + DESC_JOB_IO_LEN +
298 ctx->split_key_pad_len + ctx->enckeylen <= 298 ctx->split_key_pad_len + ctx->enckeylen <=
299 CAAM_DESC_BYTES_MAX) 299 CAAM_DESC_BYTES_MAX)
300 keys_fit_inline = 1; 300 keys_fit_inline = true;
301 301
302 desc = ctx->sh_desc_dec; 302 desc = ctx->sh_desc_dec;
303 303
304 /* aead_decrypt shared descriptor */ 304 /* aead_decrypt shared descriptor */
305 init_sh_desc(desc, HDR_SHARE_WAIT); 305 init_sh_desc(desc, HDR_SHARE_SERIAL);
306 306
307 /* Skip if already shared */ 307 /* Skip if already shared */
308 key_jump_cmd = append_jump(desc, JUMP_JSL | JUMP_TEST_ALL | 308 key_jump_cmd = append_jump(desc, JUMP_JSL | JUMP_TEST_ALL |
@@ -365,7 +365,7 @@ static int aead_set_sh_desc(struct crypto_aead *aead)
365 if (DESC_AEAD_GIVENC_LEN + DESC_JOB_IO_LEN + 365 if (DESC_AEAD_GIVENC_LEN + DESC_JOB_IO_LEN +
366 ctx->split_key_pad_len + ctx->enckeylen <= 366 ctx->split_key_pad_len + ctx->enckeylen <=
367 CAAM_DESC_BYTES_MAX) 367 CAAM_DESC_BYTES_MAX)
368 keys_fit_inline = 1; 368 keys_fit_inline = true;
369 369
370 /* aead_givencrypt shared descriptor */ 370 /* aead_givencrypt shared descriptor */
371 desc = ctx->sh_desc_givenc; 371 desc = ctx->sh_desc_givenc;
@@ -564,7 +564,7 @@ static int ablkcipher_setkey(struct crypto_ablkcipher *ablkcipher,
564 564
565 /* ablkcipher_encrypt shared descriptor */ 565 /* ablkcipher_encrypt shared descriptor */
566 desc = ctx->sh_desc_enc; 566 desc = ctx->sh_desc_enc;
567 init_sh_desc(desc, HDR_SHARE_WAIT); 567 init_sh_desc(desc, HDR_SHARE_SERIAL);
568 /* Skip if already shared */ 568 /* Skip if already shared */
569 key_jump_cmd = append_jump(desc, JUMP_JSL | JUMP_TEST_ALL | 569 key_jump_cmd = append_jump(desc, JUMP_JSL | JUMP_TEST_ALL |
570 JUMP_COND_SHRD); 570 JUMP_COND_SHRD);
@@ -605,7 +605,7 @@ static int ablkcipher_setkey(struct crypto_ablkcipher *ablkcipher,
605 /* ablkcipher_decrypt shared descriptor */ 605 /* ablkcipher_decrypt shared descriptor */
606 desc = ctx->sh_desc_dec; 606 desc = ctx->sh_desc_dec;
607 607
608 init_sh_desc(desc, HDR_SHARE_WAIT); 608 init_sh_desc(desc, HDR_SHARE_SERIAL);
609 /* Skip if already shared */ 609 /* Skip if already shared */
610 key_jump_cmd = append_jump(desc, JUMP_JSL | JUMP_TEST_ALL | 610 key_jump_cmd = append_jump(desc, JUMP_JSL | JUMP_TEST_ALL |
611 JUMP_COND_SHRD); 611 JUMP_COND_SHRD);
@@ -1354,10 +1354,10 @@ static struct aead_edesc *aead_giv_edesc_alloc(struct aead_givcrypt_request
1354 contig &= ~GIV_SRC_CONTIG; 1354 contig &= ~GIV_SRC_CONTIG;
1355 if (dst_nents || iv_dma + ivsize != sg_dma_address(req->dst)) 1355 if (dst_nents || iv_dma + ivsize != sg_dma_address(req->dst))
1356 contig &= ~GIV_DST_CONTIG; 1356 contig &= ~GIV_DST_CONTIG;
1357 if (unlikely(req->src != req->dst)) { 1357 if (unlikely(req->src != req->dst)) {
1358 dst_nents = dst_nents ? : 1; 1358 dst_nents = dst_nents ? : 1;
1359 sec4_sg_len += 1; 1359 sec4_sg_len += 1;
1360 } 1360 }
1361 if (!(contig & GIV_SRC_CONTIG)) { 1361 if (!(contig & GIV_SRC_CONTIG)) {
1362 assoc_nents = assoc_nents ? : 1; 1362 assoc_nents = assoc_nents ? : 1;
1363 src_nents = src_nents ? : 1; 1363 src_nents = src_nents ? : 1;
@@ -1650,7 +1650,11 @@ struct caam_alg_template {
1650}; 1650};
1651 1651
1652static struct caam_alg_template driver_algs[] = { 1652static struct caam_alg_template driver_algs[] = {
1653 /* single-pass ipsec_esp descriptor */ 1653 /*
1654 * single-pass ipsec_esp descriptor
1655 * authencesn(*,*) is also registered, although not present
1656 * explicitly here.
1657 */
1654 { 1658 {
1655 .name = "authenc(hmac(md5),cbc(aes))", 1659 .name = "authenc(hmac(md5),cbc(aes))",
1656 .driver_name = "authenc-hmac-md5-cbc-aes-caam", 1660 .driver_name = "authenc-hmac-md5-cbc-aes-caam",
@@ -2213,7 +2217,9 @@ static int __init caam_algapi_init(void)
2213 for (i = 0; i < ARRAY_SIZE(driver_algs); i++) { 2217 for (i = 0; i < ARRAY_SIZE(driver_algs); i++) {
2214 /* TODO: check if h/w supports alg */ 2218 /* TODO: check if h/w supports alg */
2215 struct caam_crypto_alg *t_alg; 2219 struct caam_crypto_alg *t_alg;
2220 bool done = false;
2216 2221
2222authencesn:
2217 t_alg = caam_alg_alloc(ctrldev, &driver_algs[i]); 2223 t_alg = caam_alg_alloc(ctrldev, &driver_algs[i]);
2218 if (IS_ERR(t_alg)) { 2224 if (IS_ERR(t_alg)) {
2219 err = PTR_ERR(t_alg); 2225 err = PTR_ERR(t_alg);
@@ -2227,8 +2233,25 @@ static int __init caam_algapi_init(void)
2227 dev_warn(ctrldev, "%s alg registration failed\n", 2233 dev_warn(ctrldev, "%s alg registration failed\n",
2228 t_alg->crypto_alg.cra_driver_name); 2234 t_alg->crypto_alg.cra_driver_name);
2229 kfree(t_alg); 2235 kfree(t_alg);
2230 } else 2236 } else {
2231 list_add_tail(&t_alg->entry, &priv->alg_list); 2237 list_add_tail(&t_alg->entry, &priv->alg_list);
2238 if (driver_algs[i].type == CRYPTO_ALG_TYPE_AEAD &&
2239 !memcmp(driver_algs[i].name, "authenc", 7) &&
2240 !done) {
2241 char *name;
2242
2243 name = driver_algs[i].name;
2244 memmove(name + 10, name + 7, strlen(name) - 7);
2245 memcpy(name + 7, "esn", 3);
2246
2247 name = driver_algs[i].driver_name;
2248 memmove(name + 10, name + 7, strlen(name) - 7);
2249 memcpy(name + 7, "esn", 3);
2250
2251 done = true;
2252 goto authencesn;
2253 }
2254 }
2232 } 2255 }
2233 if (!list_empty(&priv->alg_list)) 2256 if (!list_empty(&priv->alg_list))
2234 dev_info(ctrldev, "%s algorithms registered in /proc/crypto\n", 2257 dev_info(ctrldev, "%s algorithms registered in /proc/crypto\n",
diff --git a/drivers/crypto/caam/caamhash.c b/drivers/crypto/caam/caamhash.c
index 895aaf2bca9..32aba7a6150 100644
--- a/drivers/crypto/caam/caamhash.c
+++ b/drivers/crypto/caam/caamhash.c
@@ -225,7 +225,7 @@ static inline void init_sh_desc_key_ahash(u32 *desc, struct caam_hash_ctx *ctx)
225{ 225{
226 u32 *key_jump_cmd; 226 u32 *key_jump_cmd;
227 227
228 init_sh_desc(desc, HDR_SHARE_WAIT); 228 init_sh_desc(desc, HDR_SHARE_SERIAL);
229 229
230 if (ctx->split_key_len) { 230 if (ctx->split_key_len) {
231 /* Skip if already shared */ 231 /* Skip if already shared */
@@ -311,7 +311,7 @@ static int ahash_set_sh_desc(struct crypto_ahash *ahash)
311 /* ahash_update shared descriptor */ 311 /* ahash_update shared descriptor */
312 desc = ctx->sh_desc_update; 312 desc = ctx->sh_desc_update;
313 313
314 init_sh_desc(desc, HDR_SHARE_WAIT); 314 init_sh_desc(desc, HDR_SHARE_SERIAL);
315 315
316 /* Import context from software */ 316 /* Import context from software */
317 append_cmd(desc, CMD_SEQ_LOAD | LDST_SRCDST_BYTE_CONTEXT | 317 append_cmd(desc, CMD_SEQ_LOAD | LDST_SRCDST_BYTE_CONTEXT |
@@ -430,6 +430,10 @@ static u32 hash_digest_key(struct caam_hash_ctx *ctx, const u8 *key_in,
430 int ret = 0; 430 int ret = 0;
431 431
432 desc = kmalloc(CAAM_CMD_SZ * 6 + CAAM_PTR_SZ * 2, GFP_KERNEL | GFP_DMA); 432 desc = kmalloc(CAAM_CMD_SZ * 6 + CAAM_PTR_SZ * 2, GFP_KERNEL | GFP_DMA);
433 if (!desc) {
434 dev_err(jrdev, "unable to allocate key input memory\n");
435 return -ENOMEM;
436 }
433 437
434 init_job_desc(desc, 0); 438 init_job_desc(desc, 0);
435 439
@@ -1736,8 +1740,11 @@ static void __exit caam_algapi_hash_exit(void)
1736 struct caam_hash_alg *t_alg, *n; 1740 struct caam_hash_alg *t_alg, *n;
1737 1741
1738 dev_node = of_find_compatible_node(NULL, NULL, "fsl,sec-v4.0"); 1742 dev_node = of_find_compatible_node(NULL, NULL, "fsl,sec-v4.0");
1739 if (!dev_node) 1743 if (!dev_node) {
1740 return; 1744 dev_node = of_find_compatible_node(NULL, NULL, "fsl,sec4.0");
1745 if (!dev_node)
1746 return;
1747 }
1741 1748
1742 pdev = of_find_device_by_node(dev_node); 1749 pdev = of_find_device_by_node(dev_node);
1743 if (!pdev) 1750 if (!pdev)
@@ -1812,8 +1819,11 @@ static int __init caam_algapi_hash_init(void)
1812 int i = 0, err = 0; 1819 int i = 0, err = 0;
1813 1820
1814 dev_node = of_find_compatible_node(NULL, NULL, "fsl,sec-v4.0"); 1821 dev_node = of_find_compatible_node(NULL, NULL, "fsl,sec-v4.0");
1815 if (!dev_node) 1822 if (!dev_node) {
1816 return -ENODEV; 1823 dev_node = of_find_compatible_node(NULL, NULL, "fsl,sec4.0");
1824 if (!dev_node)
1825 return -ENODEV;
1826 }
1817 1827
1818 pdev = of_find_device_by_node(dev_node); 1828 pdev = of_find_device_by_node(dev_node);
1819 if (!pdev) 1829 if (!pdev)
diff --git a/drivers/crypto/caam/caamrng.c b/drivers/crypto/caam/caamrng.c
index e2bfe161dec..d1939a9539c 100644
--- a/drivers/crypto/caam/caamrng.c
+++ b/drivers/crypto/caam/caamrng.c
@@ -193,7 +193,7 @@ static inline void rng_create_sh_desc(struct caam_rng_ctx *ctx)
193 struct device *jrdev = ctx->jrdev; 193 struct device *jrdev = ctx->jrdev;
194 u32 *desc = ctx->sh_desc; 194 u32 *desc = ctx->sh_desc;
195 195
196 init_sh_desc(desc, HDR_SHARE_WAIT); 196 init_sh_desc(desc, HDR_SHARE_SERIAL);
197 197
198 /* Propagate errors from shared to job descriptor */ 198 /* Propagate errors from shared to job descriptor */
199 append_cmd(desc, SET_OK_NO_PROP_ERRORS | CMD_LOAD); 199 append_cmd(desc, SET_OK_NO_PROP_ERRORS | CMD_LOAD);
@@ -284,8 +284,11 @@ static int __init caam_rng_init(void)
284 struct caam_drv_private *priv; 284 struct caam_drv_private *priv;
285 285
286 dev_node = of_find_compatible_node(NULL, NULL, "fsl,sec-v4.0"); 286 dev_node = of_find_compatible_node(NULL, NULL, "fsl,sec-v4.0");
287 if (!dev_node) 287 if (!dev_node) {
288 return -ENODEV; 288 dev_node = of_find_compatible_node(NULL, NULL, "fsl,sec4.0");
289 if (!dev_node)
290 return -ENODEV;
291 }
289 292
290 pdev = of_find_device_by_node(dev_node); 293 pdev = of_find_device_by_node(dev_node);
291 if (!pdev) 294 if (!pdev)
diff --git a/drivers/crypto/caam/compat.h b/drivers/crypto/caam/compat.h
index 762aeff626a..cf15e781380 100644
--- a/drivers/crypto/caam/compat.h
+++ b/drivers/crypto/caam/compat.h
@@ -23,6 +23,7 @@
23#include <linux/types.h> 23#include <linux/types.h>
24#include <linux/debugfs.h> 24#include <linux/debugfs.h>
25#include <linux/circ_buf.h> 25#include <linux/circ_buf.h>
26#include <linux/string.h>
26#include <net/xfrm.h> 27#include <net/xfrm.h>
27 28
28#include <crypto/algapi.h> 29#include <crypto/algapi.h>
diff --git a/drivers/crypto/caam/ctrl.c b/drivers/crypto/caam/ctrl.c
index 414ba20c05a..bf20dd89170 100644
--- a/drivers/crypto/caam/ctrl.c
+++ b/drivers/crypto/caam/ctrl.c
@@ -129,7 +129,7 @@ static int instantiate_rng(struct device *jrdev)
129 129
130/* 130/*
131 * By default, the TRNG runs for 200 clocks per sample; 131 * By default, the TRNG runs for 200 clocks per sample;
132 * 800 clocks per sample generates better entropy. 132 * 1600 clocks per sample generates better entropy.
133 */ 133 */
134static void kick_trng(struct platform_device *pdev) 134static void kick_trng(struct platform_device *pdev)
135{ 135{
@@ -144,9 +144,9 @@ static void kick_trng(struct platform_device *pdev)
144 144
145 /* put RNG4 into program mode */ 145 /* put RNG4 into program mode */
146 setbits32(&r4tst->rtmctl, RTMCTL_PRGM); 146 setbits32(&r4tst->rtmctl, RTMCTL_PRGM);
147 /* 800 clocks per sample */ 147 /* 1600 clocks per sample */
148 val = rd_reg32(&r4tst->rtsdctl); 148 val = rd_reg32(&r4tst->rtsdctl);
149 val = (val & ~RTSDCTL_ENT_DLY_MASK) | (800 << RTSDCTL_ENT_DLY_SHIFT); 149 val = (val & ~RTSDCTL_ENT_DLY_MASK) | (1600 << RTSDCTL_ENT_DLY_SHIFT);
150 wr_reg32(&r4tst->rtsdctl, val); 150 wr_reg32(&r4tst->rtsdctl, val);
151 /* min. freq. count */ 151 /* min. freq. count */
152 wr_reg32(&r4tst->rtfrqmin, 400); 152 wr_reg32(&r4tst->rtfrqmin, 400);
diff --git a/drivers/crypto/caam/error.c b/drivers/crypto/caam/error.c
index 9955ed9643e..30b8f74833d 100644
--- a/drivers/crypto/caam/error.c
+++ b/drivers/crypto/caam/error.c
@@ -77,10 +77,8 @@ static void report_ccb_status(u32 status, char *outstr)
77 "Not instantiated", 77 "Not instantiated",
78 "Test instantiate", 78 "Test instantiate",
79 "Prediction resistance", 79 "Prediction resistance",
80 "",
81 "Prediction resistance and test request", 80 "Prediction resistance and test request",
82 "Uninstantiate", 81 "Uninstantiate",
83 "",
84 "Secure key generation", 82 "Secure key generation",
85 }; 83 };
86 u8 cha_id = (status & JRSTA_CCBERR_CHAID_MASK) >> 84 u8 cha_id = (status & JRSTA_CCBERR_CHAID_MASK) >>
diff --git a/drivers/crypto/caam/key_gen.c b/drivers/crypto/caam/key_gen.c
index d216cd3cc56..f6dba10246c 100644
--- a/drivers/crypto/caam/key_gen.c
+++ b/drivers/crypto/caam/key_gen.c
@@ -54,6 +54,10 @@ u32 gen_split_key(struct device *jrdev, u8 *key_out, int split_key_len,
54 int ret = 0; 54 int ret = 0;
55 55
56 desc = kmalloc(CAAM_CMD_SZ * 6 + CAAM_PTR_SZ * 2, GFP_KERNEL | GFP_DMA); 56 desc = kmalloc(CAAM_CMD_SZ * 6 + CAAM_PTR_SZ * 2, GFP_KERNEL | GFP_DMA);
57 if (!desc) {
58 dev_err(jrdev, "unable to allocate key input memory\n");
59 return -ENOMEM;
60 }
57 61
58 init_job_desc(desc, 0); 62 init_job_desc(desc, 0);
59 63
diff --git a/drivers/crypto/geode-aes.c b/drivers/crypto/geode-aes.c
index f3e36c86b6c..51f196d77f2 100644
--- a/drivers/crypto/geode-aes.c
+++ b/drivers/crypto/geode-aes.c
@@ -289,7 +289,6 @@ static struct crypto_alg geode_alg = {
289 .cra_blocksize = AES_MIN_BLOCK_SIZE, 289 .cra_blocksize = AES_MIN_BLOCK_SIZE,
290 .cra_ctxsize = sizeof(struct geode_aes_op), 290 .cra_ctxsize = sizeof(struct geode_aes_op),
291 .cra_module = THIS_MODULE, 291 .cra_module = THIS_MODULE,
292 .cra_list = LIST_HEAD_INIT(geode_alg.cra_list),
293 .cra_u = { 292 .cra_u = {
294 .cipher = { 293 .cipher = {
295 .cia_min_keysize = AES_MIN_KEY_SIZE, 294 .cia_min_keysize = AES_MIN_KEY_SIZE,
@@ -402,7 +401,6 @@ static struct crypto_alg geode_cbc_alg = {
402 .cra_alignmask = 15, 401 .cra_alignmask = 15,
403 .cra_type = &crypto_blkcipher_type, 402 .cra_type = &crypto_blkcipher_type,
404 .cra_module = THIS_MODULE, 403 .cra_module = THIS_MODULE,
405 .cra_list = LIST_HEAD_INIT(geode_cbc_alg.cra_list),
406 .cra_u = { 404 .cra_u = {
407 .blkcipher = { 405 .blkcipher = {
408 .min_keysize = AES_MIN_KEY_SIZE, 406 .min_keysize = AES_MIN_KEY_SIZE,
@@ -489,7 +487,6 @@ static struct crypto_alg geode_ecb_alg = {
489 .cra_alignmask = 15, 487 .cra_alignmask = 15,
490 .cra_type = &crypto_blkcipher_type, 488 .cra_type = &crypto_blkcipher_type,
491 .cra_module = THIS_MODULE, 489 .cra_module = THIS_MODULE,
492 .cra_list = LIST_HEAD_INIT(geode_ecb_alg.cra_list),
493 .cra_u = { 490 .cra_u = {
494 .blkcipher = { 491 .blkcipher = {
495 .min_keysize = AES_MIN_KEY_SIZE, 492 .min_keysize = AES_MIN_KEY_SIZE,
@@ -588,21 +585,8 @@ static struct pci_driver geode_aes_driver = {
588 .remove = __devexit_p(geode_aes_remove) 585 .remove = __devexit_p(geode_aes_remove)
589}; 586};
590 587
591static int __init 588module_pci_driver(geode_aes_driver);
592geode_aes_init(void)
593{
594 return pci_register_driver(&geode_aes_driver);
595}
596
597static void __exit
598geode_aes_exit(void)
599{
600 pci_unregister_driver(&geode_aes_driver);
601}
602 589
603MODULE_AUTHOR("Advanced Micro Devices, Inc."); 590MODULE_AUTHOR("Advanced Micro Devices, Inc.");
604MODULE_DESCRIPTION("Geode LX Hardware AES driver"); 591MODULE_DESCRIPTION("Geode LX Hardware AES driver");
605MODULE_LICENSE("GPL"); 592MODULE_LICENSE("GPL");
606
607module_init(geode_aes_init);
608module_exit(geode_aes_exit);
diff --git a/drivers/crypto/hifn_795x.c b/drivers/crypto/hifn_795x.c
index df14358d7fa..fda32968a66 100644
--- a/drivers/crypto/hifn_795x.c
+++ b/drivers/crypto/hifn_795x.c
@@ -2611,14 +2611,17 @@ static int __devinit hifn_probe(struct pci_dev *pdev, const struct pci_device_id
2611 size = pci_resource_len(pdev, i); 2611 size = pci_resource_len(pdev, i);
2612 2612
2613 dev->bar[i] = ioremap_nocache(addr, size); 2613 dev->bar[i] = ioremap_nocache(addr, size);
2614 if (!dev->bar[i]) 2614 if (!dev->bar[i]) {
2615 err = -ENOMEM;
2615 goto err_out_unmap_bars; 2616 goto err_out_unmap_bars;
2617 }
2616 } 2618 }
2617 2619
2618 dev->desc_virt = pci_alloc_consistent(pdev, sizeof(struct hifn_dma), 2620 dev->desc_virt = pci_alloc_consistent(pdev, sizeof(struct hifn_dma),
2619 &dev->desc_dma); 2621 &dev->desc_dma);
2620 if (!dev->desc_virt) { 2622 if (!dev->desc_virt) {
2621 dprintk("Failed to allocate descriptor rings.\n"); 2623 dprintk("Failed to allocate descriptor rings.\n");
2624 err = -ENOMEM;
2622 goto err_out_unmap_bars; 2625 goto err_out_unmap_bars;
2623 } 2626 }
2624 memset(dev->desc_virt, 0, sizeof(struct hifn_dma)); 2627 memset(dev->desc_virt, 0, sizeof(struct hifn_dma));
diff --git a/drivers/crypto/nx/Kconfig b/drivers/crypto/nx/Kconfig
new file mode 100644
index 00000000000..f82616621ae
--- /dev/null
+++ b/drivers/crypto/nx/Kconfig
@@ -0,0 +1,26 @@
1config CRYPTO_DEV_NX_ENCRYPT
2 tristate "Encryption acceleration support"
3 depends on PPC64 && IBMVIO
4 default y
5 select CRYPTO_AES
6 select CRYPTO_CBC
7 select CRYPTO_ECB
8 select CRYPTO_CCM
9 select CRYPTO_GCM
10 select CRYPTO_AUTHENC
11 select CRYPTO_XCBC
12 select CRYPTO_SHA256
13 select CRYPTO_SHA512
14 help
15 Support for Power7+ in-Nest encryption acceleration. This
16 module supports acceleration for AES and SHA2 algorithms. If you
17 choose 'M' here, this module will be called nx_crypto.
18
19config CRYPTO_DEV_NX_COMPRESS
20 tristate "Compression acceleration support"
21 depends on PPC64 && IBMVIO
22 default y
23 help
24 Support for Power7+ in-Nest compression acceleration. This
25 module supports acceleration for AES and SHA2 algorithms. If you
26 choose 'M' here, this module will be called nx_compress.
diff --git a/drivers/crypto/nx/Makefile b/drivers/crypto/nx/Makefile
index 411ce59c80d..bb770ea45ce 100644
--- a/drivers/crypto/nx/Makefile
+++ b/drivers/crypto/nx/Makefile
@@ -1,4 +1,4 @@
1obj-$(CONFIG_CRYPTO_DEV_NX) += nx-crypto.o 1obj-$(CONFIG_CRYPTO_DEV_NX_ENCRYPT) += nx-crypto.o
2nx-crypto-objs := nx.o \ 2nx-crypto-objs := nx.o \
3 nx_debugfs.o \ 3 nx_debugfs.o \
4 nx-aes-cbc.o \ 4 nx-aes-cbc.o \
@@ -9,3 +9,6 @@ nx-crypto-objs := nx.o \
9 nx-aes-xcbc.o \ 9 nx-aes-xcbc.o \
10 nx-sha256.o \ 10 nx-sha256.o \
11 nx-sha512.o 11 nx-sha512.o
12
13obj-$(CONFIG_CRYPTO_DEV_NX_COMPRESS) += nx-compress.o
14nx-compress-objs := nx-842.o
diff --git a/drivers/crypto/nx/nx-842.c b/drivers/crypto/nx/nx-842.c
new file mode 100644
index 00000000000..0ce62573867
--- /dev/null
+++ b/drivers/crypto/nx/nx-842.c
@@ -0,0 +1,1617 @@
1/*
2 * Driver for IBM Power 842 compression accelerator
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 *
18 * Copyright (C) IBM Corporation, 2012
19 *
20 * Authors: Robert Jennings <rcj@linux.vnet.ibm.com>
21 * Seth Jennings <sjenning@linux.vnet.ibm.com>
22 */
23
24#include <linux/kernel.h>
25#include <linux/module.h>
26#include <linux/nx842.h>
27#include <linux/of.h>
28#include <linux/slab.h>
29
30#include <asm/page.h>
31#include <asm/pSeries_reconfig.h>
32#include <asm/vio.h>
33
34#include "nx_csbcpb.h" /* struct nx_csbcpb */
35
36#define MODULE_NAME "nx-compress"
37MODULE_LICENSE("GPL");
38MODULE_AUTHOR("Robert Jennings <rcj@linux.vnet.ibm.com>");
39MODULE_DESCRIPTION("842 H/W Compression driver for IBM Power processors");
40
41#define SHIFT_4K 12
42#define SHIFT_64K 16
43#define SIZE_4K (1UL << SHIFT_4K)
44#define SIZE_64K (1UL << SHIFT_64K)
45
46/* IO buffer must be 128 byte aligned */
47#define IO_BUFFER_ALIGN 128
48
49struct nx842_header {
50 int blocks_nr; /* number of compressed blocks */
51 int offset; /* offset of the first block (from beginning of header) */
52 int sizes[0]; /* size of compressed blocks */
53};
54
55static inline int nx842_header_size(const struct nx842_header *hdr)
56{
57 return sizeof(struct nx842_header) +
58 hdr->blocks_nr * sizeof(hdr->sizes[0]);
59}
60
61/* Macros for fields within nx_csbcpb */
62/* Check the valid bit within the csbcpb valid field */
63#define NX842_CSBCBP_VALID_CHK(x) (x & BIT_MASK(7))
64
65/* CE macros operate on the completion_extension field bits in the csbcpb.
66 * CE0 0=full completion, 1=partial completion
67 * CE1 0=CE0 indicates completion, 1=termination (output may be modified)
68 * CE2 0=processed_bytes is source bytes, 1=processed_bytes is target bytes */
69#define NX842_CSBCPB_CE0(x) (x & BIT_MASK(7))
70#define NX842_CSBCPB_CE1(x) (x & BIT_MASK(6))
71#define NX842_CSBCPB_CE2(x) (x & BIT_MASK(5))
72
73/* The NX unit accepts data only on 4K page boundaries */
74#define NX842_HW_PAGE_SHIFT SHIFT_4K
75#define NX842_HW_PAGE_SIZE (ASM_CONST(1) << NX842_HW_PAGE_SHIFT)
76#define NX842_HW_PAGE_MASK (~(NX842_HW_PAGE_SIZE-1))
77
78enum nx842_status {
79 UNAVAILABLE,
80 AVAILABLE
81};
82
83struct ibm_nx842_counters {
84 atomic64_t comp_complete;
85 atomic64_t comp_failed;
86 atomic64_t decomp_complete;
87 atomic64_t decomp_failed;
88 atomic64_t swdecomp;
89 atomic64_t comp_times[32];
90 atomic64_t decomp_times[32];
91};
92
93static struct nx842_devdata {
94 struct vio_dev *vdev;
95 struct device *dev;
96 struct ibm_nx842_counters *counters;
97 unsigned int max_sg_len;
98 unsigned int max_sync_size;
99 unsigned int max_sync_sg;
100 enum nx842_status status;
101} __rcu *devdata;
102static DEFINE_SPINLOCK(devdata_mutex);
103
104#define NX842_COUNTER_INC(_x) \
105static inline void nx842_inc_##_x( \
106 const struct nx842_devdata *dev) { \
107 if (dev) \
108 atomic64_inc(&dev->counters->_x); \
109}
110NX842_COUNTER_INC(comp_complete);
111NX842_COUNTER_INC(comp_failed);
112NX842_COUNTER_INC(decomp_complete);
113NX842_COUNTER_INC(decomp_failed);
114NX842_COUNTER_INC(swdecomp);
115
116#define NX842_HIST_SLOTS 16
117
118static void ibm_nx842_incr_hist(atomic64_t *times, unsigned int time)
119{
120 int bucket = fls(time);
121
122 if (bucket)
123 bucket = min((NX842_HIST_SLOTS - 1), bucket - 1);
124
125 atomic64_inc(&times[bucket]);
126}
127
128/* NX unit operation flags */
129#define NX842_OP_COMPRESS 0x0
130#define NX842_OP_CRC 0x1
131#define NX842_OP_DECOMPRESS 0x2
132#define NX842_OP_COMPRESS_CRC (NX842_OP_COMPRESS | NX842_OP_CRC)
133#define NX842_OP_DECOMPRESS_CRC (NX842_OP_DECOMPRESS | NX842_OP_CRC)
134#define NX842_OP_ASYNC (1<<23)
135#define NX842_OP_NOTIFY (1<<22)
136#define NX842_OP_NOTIFY_INT(x) ((x & 0xff)<<8)
137
138static unsigned long nx842_get_desired_dma(struct vio_dev *viodev)
139{
140 /* No use of DMA mappings within the driver. */
141 return 0;
142}
143
144struct nx842_slentry {
145 unsigned long ptr; /* Real address (use __pa()) */
146 unsigned long len;
147};
148
149/* pHyp scatterlist entry */
150struct nx842_scatterlist {
151 int entry_nr; /* number of slentries */
152 struct nx842_slentry *entries; /* ptr to array of slentries */
153};
154
155/* Does not include sizeof(entry_nr) in the size */
156static inline unsigned long nx842_get_scatterlist_size(
157 struct nx842_scatterlist *sl)
158{
159 return sl->entry_nr * sizeof(struct nx842_slentry);
160}
161
162static int nx842_build_scatterlist(unsigned long buf, int len,
163 struct nx842_scatterlist *sl)
164{
165 unsigned long nextpage;
166 struct nx842_slentry *entry;
167
168 sl->entry_nr = 0;
169
170 entry = sl->entries;
171 while (len) {
172 entry->ptr = __pa(buf);
173 nextpage = ALIGN(buf + 1, NX842_HW_PAGE_SIZE);
174 if (nextpage < buf + len) {
175 /* we aren't at the end yet */
176 if (IS_ALIGNED(buf, NX842_HW_PAGE_SIZE))
177 /* we are in the middle (or beginning) */
178 entry->len = NX842_HW_PAGE_SIZE;
179 else
180 /* we are at the beginning */
181 entry->len = nextpage - buf;
182 } else {
183 /* at the end */
184 entry->len = len;
185 }
186
187 len -= entry->len;
188 buf += entry->len;
189 sl->entry_nr++;
190 entry++;
191 }
192
193 return 0;
194}
195
196/*
197 * Working memory for software decompression
198 */
199struct sw842_fifo {
200 union {
201 char f8[256][8];
202 char f4[512][4];
203 };
204 char f2[256][2];
205 unsigned char f84_full;
206 unsigned char f2_full;
207 unsigned char f8_count;
208 unsigned char f2_count;
209 unsigned int f4_count;
210};
211
212/*
213 * Working memory for crypto API
214 */
215struct nx842_workmem {
216 char bounce[PAGE_SIZE]; /* bounce buffer for decompression input */
217 union {
218 /* hardware working memory */
219 struct {
220 /* scatterlist */
221 char slin[SIZE_4K];
222 char slout[SIZE_4K];
223 /* coprocessor status/parameter block */
224 struct nx_csbcpb csbcpb;
225 };
226 /* software working memory */
227 struct sw842_fifo swfifo; /* software decompression fifo */
228 };
229};
230
231int nx842_get_workmem_size(void)
232{
233 return sizeof(struct nx842_workmem) + NX842_HW_PAGE_SIZE;
234}
235EXPORT_SYMBOL_GPL(nx842_get_workmem_size);
236
237int nx842_get_workmem_size_aligned(void)
238{
239 return sizeof(struct nx842_workmem);
240}
241EXPORT_SYMBOL_GPL(nx842_get_workmem_size_aligned);
242
243static int nx842_validate_result(struct device *dev,
244 struct cop_status_block *csb)
245{
246 /* The csb must be valid after returning from vio_h_cop_sync */
247 if (!NX842_CSBCBP_VALID_CHK(csb->valid)) {
248 dev_err(dev, "%s: cspcbp not valid upon completion.\n",
249 __func__);
250 dev_dbg(dev, "valid:0x%02x cs:0x%02x cc:0x%02x ce:0x%02x\n",
251 csb->valid,
252 csb->crb_seq_number,
253 csb->completion_code,
254 csb->completion_extension);
255 dev_dbg(dev, "processed_bytes:%d address:0x%016lx\n",
256 csb->processed_byte_count,
257 (unsigned long)csb->address);
258 return -EIO;
259 }
260
261 /* Check return values from the hardware in the CSB */
262 switch (csb->completion_code) {
263 case 0: /* Completed without error */
264 break;
265 case 64: /* Target bytes > Source bytes during compression */
266 case 13: /* Output buffer too small */
267 dev_dbg(dev, "%s: Compression output larger than input\n",
268 __func__);
269 return -ENOSPC;
270 case 66: /* Input data contains an illegal template field */
271 case 67: /* Template indicates data past the end of the input stream */
272 dev_dbg(dev, "%s: Bad data for decompression (code:%d)\n",
273 __func__, csb->completion_code);
274 return -EINVAL;
275 default:
276 dev_dbg(dev, "%s: Unspecified error (code:%d)\n",
277 __func__, csb->completion_code);
278 return -EIO;
279 }
280
281 /* Hardware sanity check */
282 if (!NX842_CSBCPB_CE2(csb->completion_extension)) {
283 dev_err(dev, "%s: No error returned by hardware, but "
284 "data returned is unusable, contact support.\n"
285 "(Additional info: csbcbp->processed bytes "
286 "does not specify processed bytes for the "
287 "target buffer.)\n", __func__);
288 return -EIO;
289 }
290
291 return 0;
292}
293
294/**
295 * nx842_compress - Compress data using the 842 algorithm
296 *
297 * Compression provide by the NX842 coprocessor on IBM Power systems.
298 * The input buffer is compressed and the result is stored in the
299 * provided output buffer.
300 *
301 * Upon return from this function @outlen contains the length of the
302 * compressed data. If there is an error then @outlen will be 0 and an
303 * error will be specified by the return code from this function.
304 *
305 * @in: Pointer to input buffer, must be page aligned
306 * @inlen: Length of input buffer, must be PAGE_SIZE
307 * @out: Pointer to output buffer
308 * @outlen: Length of output buffer
309 * @wrkmem: ptr to buffer for working memory, size determined by
310 * nx842_get_workmem_size()
311 *
312 * Returns:
313 * 0 Success, output of length @outlen stored in the buffer at @out
314 * -ENOMEM Unable to allocate internal buffers
315 * -ENOSPC Output buffer is to small
316 * -EMSGSIZE XXX Difficult to describe this limitation
317 * -EIO Internal error
318 * -ENODEV Hardware unavailable
319 */
320int nx842_compress(const unsigned char *in, unsigned int inlen,
321 unsigned char *out, unsigned int *outlen, void *wmem)
322{
323 struct nx842_header *hdr;
324 struct nx842_devdata *local_devdata;
325 struct device *dev = NULL;
326 struct nx842_workmem *workmem;
327 struct nx842_scatterlist slin, slout;
328 struct nx_csbcpb *csbcpb;
329 int ret = 0, max_sync_size, i, bytesleft, size, hdrsize;
330 unsigned long inbuf, outbuf, padding;
331 struct vio_pfo_op op = {
332 .done = NULL,
333 .handle = 0,
334 .timeout = 0,
335 };
336 unsigned long start_time = get_tb();
337
338 /*
339 * Make sure input buffer is 64k page aligned. This is assumed since
340 * this driver is designed for page compression only (for now). This
341 * is very nice since we can now use direct DDE(s) for the input and
342 * the alignment is guaranteed.
343 */
344 inbuf = (unsigned long)in;
345 if (!IS_ALIGNED(inbuf, PAGE_SIZE) || inlen != PAGE_SIZE)
346 return -EINVAL;
347
348 rcu_read_lock();
349 local_devdata = rcu_dereference(devdata);
350 if (!local_devdata || !local_devdata->dev) {
351 rcu_read_unlock();
352 return -ENODEV;
353 }
354 max_sync_size = local_devdata->max_sync_size;
355 dev = local_devdata->dev;
356
357 /* Create the header */
358 hdr = (struct nx842_header *)out;
359 hdr->blocks_nr = PAGE_SIZE / max_sync_size;
360 hdrsize = nx842_header_size(hdr);
361 outbuf = (unsigned long)out + hdrsize;
362 bytesleft = *outlen - hdrsize;
363
364 /* Init scatterlist */
365 workmem = (struct nx842_workmem *)ALIGN((unsigned long)wmem,
366 NX842_HW_PAGE_SIZE);
367 slin.entries = (struct nx842_slentry *)workmem->slin;
368 slout.entries = (struct nx842_slentry *)workmem->slout;
369
370 /* Init operation */
371 op.flags = NX842_OP_COMPRESS;
372 csbcpb = &workmem->csbcpb;
373 memset(csbcpb, 0, sizeof(*csbcpb));
374 op.csbcpb = __pa(csbcpb);
375 op.out = __pa(slout.entries);
376
377 for (i = 0; i < hdr->blocks_nr; i++) {
378 /*
379 * Aligning the output blocks to 128 bytes does waste space,
380 * but it prevents the need for bounce buffers and memory
381 * copies. It also simplifies the code a lot. In the worst
382 * case (64k page, 4k max_sync_size), you lose up to
383 * (128*16)/64k = ~3% the compression factor. For 64k
384 * max_sync_size, the loss would be at most 128/64k = ~0.2%.
385 */
386 padding = ALIGN(outbuf, IO_BUFFER_ALIGN) - outbuf;
387 outbuf += padding;
388 bytesleft -= padding;
389 if (i == 0)
390 /* save offset into first block in header */
391 hdr->offset = padding + hdrsize;
392
393 if (bytesleft <= 0) {
394 ret = -ENOSPC;
395 goto unlock;
396 }
397
398 /*
399 * NOTE: If the default max_sync_size is changed from 4k
400 * to 64k, remove the "likely" case below, since a
401 * scatterlist will always be needed.
402 */
403 if (likely(max_sync_size == NX842_HW_PAGE_SIZE)) {
404 /* Create direct DDE */
405 op.in = __pa(inbuf);
406 op.inlen = max_sync_size;
407
408 } else {
409 /* Create indirect DDE (scatterlist) */
410 nx842_build_scatterlist(inbuf, max_sync_size, &slin);
411 op.in = __pa(slin.entries);
412 op.inlen = -nx842_get_scatterlist_size(&slin);
413 }
414
415 /*
416 * If max_sync_size != NX842_HW_PAGE_SIZE, an indirect
417 * DDE is required for the outbuf.
418 * If max_sync_size == NX842_HW_PAGE_SIZE, outbuf must
419 * also be page aligned (1 in 128/4k=32 chance) in order
420 * to use a direct DDE.
421 * This is unlikely, just use an indirect DDE always.
422 */
423 nx842_build_scatterlist(outbuf,
424 min(bytesleft, max_sync_size), &slout);
425 /* op.out set before loop */
426 op.outlen = -nx842_get_scatterlist_size(&slout);
427
428 /* Send request to pHyp */
429 ret = vio_h_cop_sync(local_devdata->vdev, &op);
430
431 /* Check for pHyp error */
432 if (ret) {
433 dev_dbg(dev, "%s: vio_h_cop_sync error (ret=%d, hret=%ld)\n",
434 __func__, ret, op.hcall_err);
435 ret = -EIO;
436 goto unlock;
437 }
438
439 /* Check for hardware error */
440 ret = nx842_validate_result(dev, &csbcpb->csb);
441 if (ret && ret != -ENOSPC)
442 goto unlock;
443
444 /* Handle incompressible data */
445 if (unlikely(ret == -ENOSPC)) {
446 if (bytesleft < max_sync_size) {
447 /*
448 * Not enough space left in the output buffer
449 * to store uncompressed block
450 */
451 goto unlock;
452 } else {
453 /* Store incompressible block */
454 memcpy((void *)outbuf, (void *)inbuf,
455 max_sync_size);
456 hdr->sizes[i] = -max_sync_size;
457 outbuf += max_sync_size;
458 bytesleft -= max_sync_size;
459 /* Reset ret, incompressible data handled */
460 ret = 0;
461 }
462 } else {
463 /* Normal case, compression was successful */
464 size = csbcpb->csb.processed_byte_count;
465 dev_dbg(dev, "%s: processed_bytes=%d\n",
466 __func__, size);
467 hdr->sizes[i] = size;
468 outbuf += size;
469 bytesleft -= size;
470 }
471
472 inbuf += max_sync_size;
473 }
474
475 *outlen = (unsigned int)(outbuf - (unsigned long)out);
476
477unlock:
478 if (ret)
479 nx842_inc_comp_failed(local_devdata);
480 else {
481 nx842_inc_comp_complete(local_devdata);
482 ibm_nx842_incr_hist(local_devdata->counters->comp_times,
483 (get_tb() - start_time) / tb_ticks_per_usec);
484 }
485 rcu_read_unlock();
486 return ret;
487}
488EXPORT_SYMBOL_GPL(nx842_compress);
489
490static int sw842_decompress(const unsigned char *, int, unsigned char *, int *,
491 const void *);
492
493/**
494 * nx842_decompress - Decompress data using the 842 algorithm
495 *
496 * Decompression provide by the NX842 coprocessor on IBM Power systems.
497 * The input buffer is decompressed and the result is stored in the
498 * provided output buffer. The size allocated to the output buffer is
499 * provided by the caller of this function in @outlen. Upon return from
500 * this function @outlen contains the length of the decompressed data.
501 * If there is an error then @outlen will be 0 and an error will be
502 * specified by the return code from this function.
503 *
504 * @in: Pointer to input buffer, will use bounce buffer if not 128 byte
505 * aligned
506 * @inlen: Length of input buffer
507 * @out: Pointer to output buffer, must be page aligned
508 * @outlen: Length of output buffer, must be PAGE_SIZE
509 * @wrkmem: ptr to buffer for working memory, size determined by
510 * nx842_get_workmem_size()
511 *
512 * Returns:
513 * 0 Success, output of length @outlen stored in the buffer at @out
514 * -ENODEV Hardware decompression device is unavailable
515 * -ENOMEM Unable to allocate internal buffers
516 * -ENOSPC Output buffer is to small
517 * -EINVAL Bad input data encountered when attempting decompress
518 * -EIO Internal error
519 */
520int nx842_decompress(const unsigned char *in, unsigned int inlen,
521 unsigned char *out, unsigned int *outlen, void *wmem)
522{
523 struct nx842_header *hdr;
524 struct nx842_devdata *local_devdata;
525 struct device *dev = NULL;
526 struct nx842_workmem *workmem;
527 struct nx842_scatterlist slin, slout;
528 struct nx_csbcpb *csbcpb;
529 int ret = 0, i, size, max_sync_size;
530 unsigned long inbuf, outbuf;
531 struct vio_pfo_op op = {
532 .done = NULL,
533 .handle = 0,
534 .timeout = 0,
535 };
536 unsigned long start_time = get_tb();
537
538 /* Ensure page alignment and size */
539 outbuf = (unsigned long)out;
540 if (!IS_ALIGNED(outbuf, PAGE_SIZE) || *outlen != PAGE_SIZE)
541 return -EINVAL;
542
543 rcu_read_lock();
544 local_devdata = rcu_dereference(devdata);
545 if (local_devdata)
546 dev = local_devdata->dev;
547
548 /* Get header */
549 hdr = (struct nx842_header *)in;
550
551 workmem = (struct nx842_workmem *)ALIGN((unsigned long)wmem,
552 NX842_HW_PAGE_SIZE);
553
554 inbuf = (unsigned long)in + hdr->offset;
555 if (likely(!IS_ALIGNED(inbuf, IO_BUFFER_ALIGN))) {
556 /* Copy block(s) into bounce buffer for alignment */
557 memcpy(workmem->bounce, in + hdr->offset, inlen - hdr->offset);
558 inbuf = (unsigned long)workmem->bounce;
559 }
560
561 /* Init scatterlist */
562 slin.entries = (struct nx842_slentry *)workmem->slin;
563 slout.entries = (struct nx842_slentry *)workmem->slout;
564
565 /* Init operation */
566 op.flags = NX842_OP_DECOMPRESS;
567 csbcpb = &workmem->csbcpb;
568 memset(csbcpb, 0, sizeof(*csbcpb));
569 op.csbcpb = __pa(csbcpb);
570
571 /*
572 * max_sync_size may have changed since compression,
573 * so we can't read it from the device info. We need
574 * to derive it from hdr->blocks_nr.
575 */
576 max_sync_size = PAGE_SIZE / hdr->blocks_nr;
577
578 for (i = 0; i < hdr->blocks_nr; i++) {
579 /* Skip padding */
580 inbuf = ALIGN(inbuf, IO_BUFFER_ALIGN);
581
582 if (hdr->sizes[i] < 0) {
583 /* Negative sizes indicate uncompressed data blocks */
584 size = abs(hdr->sizes[i]);
585 memcpy((void *)outbuf, (void *)inbuf, size);
586 outbuf += size;
587 inbuf += size;
588 continue;
589 }
590
591 if (!dev)
592 goto sw;
593
594 /*
595 * The better the compression, the more likely the "likely"
596 * case becomes.
597 */
598 if (likely((inbuf & NX842_HW_PAGE_MASK) ==
599 ((inbuf + hdr->sizes[i] - 1) & NX842_HW_PAGE_MASK))) {
600 /* Create direct DDE */
601 op.in = __pa(inbuf);
602 op.inlen = hdr->sizes[i];
603 } else {
604 /* Create indirect DDE (scatterlist) */
605 nx842_build_scatterlist(inbuf, hdr->sizes[i] , &slin);
606 op.in = __pa(slin.entries);
607 op.inlen = -nx842_get_scatterlist_size(&slin);
608 }
609
610 /*
611 * NOTE: If the default max_sync_size is changed from 4k
612 * to 64k, remove the "likely" case below, since a
613 * scatterlist will always be needed.
614 */
615 if (likely(max_sync_size == NX842_HW_PAGE_SIZE)) {
616 /* Create direct DDE */
617 op.out = __pa(outbuf);
618 op.outlen = max_sync_size;
619 } else {
620 /* Create indirect DDE (scatterlist) */
621 nx842_build_scatterlist(outbuf, max_sync_size, &slout);
622 op.out = __pa(slout.entries);
623 op.outlen = -nx842_get_scatterlist_size(&slout);
624 }
625
626 /* Send request to pHyp */
627 ret = vio_h_cop_sync(local_devdata->vdev, &op);
628
629 /* Check for pHyp error */
630 if (ret) {
631 dev_dbg(dev, "%s: vio_h_cop_sync error (ret=%d, hret=%ld)\n",
632 __func__, ret, op.hcall_err);
633 dev = NULL;
634 goto sw;
635 }
636
637 /* Check for hardware error */
638 ret = nx842_validate_result(dev, &csbcpb->csb);
639 if (ret) {
640 dev = NULL;
641 goto sw;
642 }
643
644 /* HW decompression success */
645 inbuf += hdr->sizes[i];
646 outbuf += csbcpb->csb.processed_byte_count;
647 continue;
648
649sw:
650 /* software decompression */
651 size = max_sync_size;
652 ret = sw842_decompress(
653 (unsigned char *)inbuf, hdr->sizes[i],
654 (unsigned char *)outbuf, &size, wmem);
655 if (ret)
656 pr_debug("%s: sw842_decompress failed with %d\n",
657 __func__, ret);
658
659 if (ret) {
660 if (ret != -ENOSPC && ret != -EINVAL &&
661 ret != -EMSGSIZE)
662 ret = -EIO;
663 goto unlock;
664 }
665
666 /* SW decompression success */
667 inbuf += hdr->sizes[i];
668 outbuf += size;
669 }
670
671 *outlen = (unsigned int)(outbuf - (unsigned long)out);
672
673unlock:
674 if (ret)
675 /* decompress fail */
676 nx842_inc_decomp_failed(local_devdata);
677 else {
678 if (!dev)
679 /* software decompress */
680 nx842_inc_swdecomp(local_devdata);
681 nx842_inc_decomp_complete(local_devdata);
682 ibm_nx842_incr_hist(local_devdata->counters->decomp_times,
683 (get_tb() - start_time) / tb_ticks_per_usec);
684 }
685
686 rcu_read_unlock();
687 return ret;
688}
689EXPORT_SYMBOL_GPL(nx842_decompress);
690
691/**
692 * nx842_OF_set_defaults -- Set default (disabled) values for devdata
693 *
694 * @devdata - struct nx842_devdata to update
695 *
696 * Returns:
697 * 0 on success
698 * -ENOENT if @devdata ptr is NULL
699 */
700static int nx842_OF_set_defaults(struct nx842_devdata *devdata)
701{
702 if (devdata) {
703 devdata->max_sync_size = 0;
704 devdata->max_sync_sg = 0;
705 devdata->max_sg_len = 0;
706 devdata->status = UNAVAILABLE;
707 return 0;
708 } else
709 return -ENOENT;
710}
711
712/**
713 * nx842_OF_upd_status -- Update the device info from OF status prop
714 *
715 * The status property indicates if the accelerator is enabled. If the
716 * device is in the OF tree it indicates that the hardware is present.
717 * The status field indicates if the device is enabled when the status
718 * is 'okay'. Otherwise the device driver will be disabled.
719 *
720 * @devdata - struct nx842_devdata to update
721 * @prop - struct property point containing the maxsyncop for the update
722 *
723 * Returns:
724 * 0 - Device is available
725 * -EINVAL - Device is not available
726 */
727static int nx842_OF_upd_status(struct nx842_devdata *devdata,
728 struct property *prop) {
729 int ret = 0;
730 const char *status = (const char *)prop->value;
731
732 if (!strncmp(status, "okay", (size_t)prop->length)) {
733 devdata->status = AVAILABLE;
734 } else {
735 dev_info(devdata->dev, "%s: status '%s' is not 'okay'\n",
736 __func__, status);
737 devdata->status = UNAVAILABLE;
738 }
739
740 return ret;
741}
742
743/**
744 * nx842_OF_upd_maxsglen -- Update the device info from OF maxsglen prop
745 *
746 * Definition of the 'ibm,max-sg-len' OF property:
747 * This field indicates the maximum byte length of a scatter list
748 * for the platform facility. It is a single cell encoded as with encode-int.
749 *
750 * Example:
751 * # od -x ibm,max-sg-len
752 * 0000000 0000 0ff0
753 *
754 * In this example, the maximum byte length of a scatter list is
755 * 0x0ff0 (4,080).
756 *
757 * @devdata - struct nx842_devdata to update
758 * @prop - struct property point containing the maxsyncop for the update
759 *
760 * Returns:
761 * 0 on success
762 * -EINVAL on failure
763 */
764static int nx842_OF_upd_maxsglen(struct nx842_devdata *devdata,
765 struct property *prop) {
766 int ret = 0;
767 const int *maxsglen = prop->value;
768
769 if (prop->length != sizeof(*maxsglen)) {
770 dev_err(devdata->dev, "%s: unexpected format for ibm,max-sg-len property\n", __func__);
771 dev_dbg(devdata->dev, "%s: ibm,max-sg-len is %d bytes long, expected %lu bytes\n", __func__,
772 prop->length, sizeof(*maxsglen));
773 ret = -EINVAL;
774 } else {
775 devdata->max_sg_len = (unsigned int)min(*maxsglen,
776 (int)NX842_HW_PAGE_SIZE);
777 }
778
779 return ret;
780}
781
782/**
783 * nx842_OF_upd_maxsyncop -- Update the device info from OF maxsyncop prop
784 *
785 * Definition of the 'ibm,max-sync-cop' OF property:
786 * Two series of cells. The first series of cells represents the maximums
787 * that can be synchronously compressed. The second series of cells
788 * represents the maximums that can be synchronously decompressed.
789 * 1. The first cell in each series contains the count of the number of
790 * data length, scatter list elements pairs that follow – each being
791 * of the form
792 * a. One cell data byte length
793 * b. One cell total number of scatter list elements
794 *
795 * Example:
796 * # od -x ibm,max-sync-cop
797 * 0000000 0000 0001 0000 1000 0000 01fe 0000 0001
798 * 0000020 0000 1000 0000 01fe
799 *
800 * In this example, compression supports 0x1000 (4,096) data byte length
801 * and 0x1fe (510) total scatter list elements. Decompression supports
802 * 0x1000 (4,096) data byte length and 0x1f3 (510) total scatter list
803 * elements.
804 *
805 * @devdata - struct nx842_devdata to update
806 * @prop - struct property point containing the maxsyncop for the update
807 *
808 * Returns:
809 * 0 on success
810 * -EINVAL on failure
811 */
812static int nx842_OF_upd_maxsyncop(struct nx842_devdata *devdata,
813 struct property *prop) {
814 int ret = 0;
815 const struct maxsynccop_t {
816 int comp_elements;
817 int comp_data_limit;
818 int comp_sg_limit;
819 int decomp_elements;
820 int decomp_data_limit;
821 int decomp_sg_limit;
822 } *maxsynccop;
823
824 if (prop->length != sizeof(*maxsynccop)) {
825 dev_err(devdata->dev, "%s: unexpected format for ibm,max-sync-cop property\n", __func__);
826 dev_dbg(devdata->dev, "%s: ibm,max-sync-cop is %d bytes long, expected %lu bytes\n", __func__, prop->length,
827 sizeof(*maxsynccop));
828 ret = -EINVAL;
829 goto out;
830 }
831
832 maxsynccop = (const struct maxsynccop_t *)prop->value;
833
834 /* Use one limit rather than separate limits for compression and
835 * decompression. Set a maximum for this so as not to exceed the
836 * size that the header can support and round the value down to
837 * the hardware page size (4K) */
838 devdata->max_sync_size =
839 (unsigned int)min(maxsynccop->comp_data_limit,
840 maxsynccop->decomp_data_limit);
841
842 devdata->max_sync_size = min_t(unsigned int, devdata->max_sync_size,
843 SIZE_64K);
844
845 if (devdata->max_sync_size < SIZE_4K) {
846 dev_err(devdata->dev, "%s: hardware max data size (%u) is "
847 "less than the driver minimum, unable to use "
848 "the hardware device\n",
849 __func__, devdata->max_sync_size);
850 ret = -EINVAL;
851 goto out;
852 }
853
854 devdata->max_sync_sg = (unsigned int)min(maxsynccop->comp_sg_limit,
855 maxsynccop->decomp_sg_limit);
856 if (devdata->max_sync_sg < 1) {
857 dev_err(devdata->dev, "%s: hardware max sg size (%u) is "
858 "less than the driver minimum, unable to use "
859 "the hardware device\n",
860 __func__, devdata->max_sync_sg);
861 ret = -EINVAL;
862 goto out;
863 }
864
865out:
866 return ret;
867}
868
869/**
870 *
871 * nx842_OF_upd -- Handle OF properties updates for the device.
872 *
873 * Set all properties from the OF tree. Optionally, a new property
874 * can be provided by the @new_prop pointer to overwrite an existing value.
875 * The device will remain disabled until all values are valid, this function
876 * will return an error for updates unless all values are valid.
877 *
878 * @new_prop: If not NULL, this property is being updated. If NULL, update
879 * all properties from the current values in the OF tree.
880 *
881 * Returns:
882 * 0 - Success
883 * -ENOMEM - Could not allocate memory for new devdata structure
884 * -EINVAL - property value not found, new_prop is not a recognized
885 * property for the device or property value is not valid.
886 * -ENODEV - Device is not available
887 */
888static int nx842_OF_upd(struct property *new_prop)
889{
890 struct nx842_devdata *old_devdata = NULL;
891 struct nx842_devdata *new_devdata = NULL;
892 struct device_node *of_node = NULL;
893 struct property *status = NULL;
894 struct property *maxsglen = NULL;
895 struct property *maxsyncop = NULL;
896 int ret = 0;
897 unsigned long flags;
898
899 spin_lock_irqsave(&devdata_mutex, flags);
900 old_devdata = rcu_dereference_check(devdata,
901 lockdep_is_held(&devdata_mutex));
902 if (old_devdata)
903 of_node = old_devdata->dev->of_node;
904
905 if (!old_devdata || !of_node) {
906 pr_err("%s: device is not available\n", __func__);
907 spin_unlock_irqrestore(&devdata_mutex, flags);
908 return -ENODEV;
909 }
910
911 new_devdata = kzalloc(sizeof(*new_devdata), GFP_NOFS);
912 if (!new_devdata) {
913 dev_err(old_devdata->dev, "%s: Could not allocate memory for device data\n", __func__);
914 ret = -ENOMEM;
915 goto error_out;
916 }
917
918 memcpy(new_devdata, old_devdata, sizeof(*old_devdata));
919 new_devdata->counters = old_devdata->counters;
920
921 /* Set ptrs for existing properties */
922 status = of_find_property(of_node, "status", NULL);
923 maxsglen = of_find_property(of_node, "ibm,max-sg-len", NULL);
924 maxsyncop = of_find_property(of_node, "ibm,max-sync-cop", NULL);
925 if (!status || !maxsglen || !maxsyncop) {
926 dev_err(old_devdata->dev, "%s: Could not locate device properties\n", __func__);
927 ret = -EINVAL;
928 goto error_out;
929 }
930
931 /* Set ptr to new property if provided */
932 if (new_prop) {
933 /* Single property */
934 if (!strncmp(new_prop->name, "status", new_prop->length)) {
935 status = new_prop;
936
937 } else if (!strncmp(new_prop->name, "ibm,max-sg-len",
938 new_prop->length)) {
939 maxsglen = new_prop;
940
941 } else if (!strncmp(new_prop->name, "ibm,max-sync-cop",
942 new_prop->length)) {
943 maxsyncop = new_prop;
944
945 } else {
946 /*
947 * Skip the update, the property being updated
948 * has no impact.
949 */
950 goto out;
951 }
952 }
953
954 /* Perform property updates */
955 ret = nx842_OF_upd_status(new_devdata, status);
956 if (ret)
957 goto error_out;
958
959 ret = nx842_OF_upd_maxsglen(new_devdata, maxsglen);
960 if (ret)
961 goto error_out;
962
963 ret = nx842_OF_upd_maxsyncop(new_devdata, maxsyncop);
964 if (ret)
965 goto error_out;
966
967out:
968 dev_info(old_devdata->dev, "%s: max_sync_size new:%u old:%u\n",
969 __func__, new_devdata->max_sync_size,
970 old_devdata->max_sync_size);
971 dev_info(old_devdata->dev, "%s: max_sync_sg new:%u old:%u\n",
972 __func__, new_devdata->max_sync_sg,
973 old_devdata->max_sync_sg);
974 dev_info(old_devdata->dev, "%s: max_sg_len new:%u old:%u\n",
975 __func__, new_devdata->max_sg_len,
976 old_devdata->max_sg_len);
977
978 rcu_assign_pointer(devdata, new_devdata);
979 spin_unlock_irqrestore(&devdata_mutex, flags);
980 synchronize_rcu();
981 dev_set_drvdata(new_devdata->dev, new_devdata);
982 kfree(old_devdata);
983 return 0;
984
985error_out:
986 if (new_devdata) {
987 dev_info(old_devdata->dev, "%s: device disabled\n", __func__);
988 nx842_OF_set_defaults(new_devdata);
989 rcu_assign_pointer(devdata, new_devdata);
990 spin_unlock_irqrestore(&devdata_mutex, flags);
991 synchronize_rcu();
992 dev_set_drvdata(new_devdata->dev, new_devdata);
993 kfree(old_devdata);
994 } else {
995 dev_err(old_devdata->dev, "%s: could not update driver from hardware\n", __func__);
996 spin_unlock_irqrestore(&devdata_mutex, flags);
997 }
998
999 if (!ret)
1000 ret = -EINVAL;
1001 return ret;
1002}
1003
1004/**
1005 * nx842_OF_notifier - Process updates to OF properties for the device
1006 *
1007 * @np: notifier block
1008 * @action: notifier action
1009 * @update: struct pSeries_reconfig_prop_update pointer if action is
1010 * PSERIES_UPDATE_PROPERTY
1011 *
1012 * Returns:
1013 * NOTIFY_OK on success
1014 * NOTIFY_BAD encoded with error number on failure, use
1015 * notifier_to_errno() to decode this value
1016 */
1017static int nx842_OF_notifier(struct notifier_block *np,
1018 unsigned long action,
1019 void *update)
1020{
1021 struct pSeries_reconfig_prop_update *upd;
1022 struct nx842_devdata *local_devdata;
1023 struct device_node *node = NULL;
1024
1025 upd = (struct pSeries_reconfig_prop_update *)update;
1026
1027 rcu_read_lock();
1028 local_devdata = rcu_dereference(devdata);
1029 if (local_devdata)
1030 node = local_devdata->dev->of_node;
1031
1032 if (local_devdata &&
1033 action == PSERIES_UPDATE_PROPERTY &&
1034 !strcmp(upd->node->name, node->name)) {
1035 rcu_read_unlock();
1036 nx842_OF_upd(upd->property);
1037 } else
1038 rcu_read_unlock();
1039
1040 return NOTIFY_OK;
1041}
1042
1043static struct notifier_block nx842_of_nb = {
1044 .notifier_call = nx842_OF_notifier,
1045};
1046
1047#define nx842_counter_read(_name) \
1048static ssize_t nx842_##_name##_show(struct device *dev, \
1049 struct device_attribute *attr, \
1050 char *buf) { \
1051 struct nx842_devdata *local_devdata; \
1052 int p = 0; \
1053 rcu_read_lock(); \
1054 local_devdata = rcu_dereference(devdata); \
1055 if (local_devdata) \
1056 p = snprintf(buf, PAGE_SIZE, "%ld\n", \
1057 atomic64_read(&local_devdata->counters->_name)); \
1058 rcu_read_unlock(); \
1059 return p; \
1060}
1061
1062#define NX842DEV_COUNTER_ATTR_RO(_name) \
1063 nx842_counter_read(_name); \
1064 static struct device_attribute dev_attr_##_name = __ATTR(_name, \
1065 0444, \
1066 nx842_##_name##_show,\
1067 NULL);
1068
1069NX842DEV_COUNTER_ATTR_RO(comp_complete);
1070NX842DEV_COUNTER_ATTR_RO(comp_failed);
1071NX842DEV_COUNTER_ATTR_RO(decomp_complete);
1072NX842DEV_COUNTER_ATTR_RO(decomp_failed);
1073NX842DEV_COUNTER_ATTR_RO(swdecomp);
1074
1075static ssize_t nx842_timehist_show(struct device *,
1076 struct device_attribute *, char *);
1077
1078static struct device_attribute dev_attr_comp_times = __ATTR(comp_times, 0444,
1079 nx842_timehist_show, NULL);
1080static struct device_attribute dev_attr_decomp_times = __ATTR(decomp_times,
1081 0444, nx842_timehist_show, NULL);
1082
1083static ssize_t nx842_timehist_show(struct device *dev,
1084 struct device_attribute *attr, char *buf) {
1085 char *p = buf;
1086 struct nx842_devdata *local_devdata;
1087 atomic64_t *times;
1088 int bytes_remain = PAGE_SIZE;
1089 int bytes;
1090 int i;
1091
1092 rcu_read_lock();
1093 local_devdata = rcu_dereference(devdata);
1094 if (!local_devdata) {
1095 rcu_read_unlock();
1096 return 0;
1097 }
1098
1099 if (attr == &dev_attr_comp_times)
1100 times = local_devdata->counters->comp_times;
1101 else if (attr == &dev_attr_decomp_times)
1102 times = local_devdata->counters->decomp_times;
1103 else {
1104 rcu_read_unlock();
1105 return 0;
1106 }
1107
1108 for (i = 0; i < (NX842_HIST_SLOTS - 2); i++) {
1109 bytes = snprintf(p, bytes_remain, "%u-%uus:\t%ld\n",
1110 i ? (2<<(i-1)) : 0, (2<<i)-1,
1111 atomic64_read(&times[i]));
1112 bytes_remain -= bytes;
1113 p += bytes;
1114 }
1115 /* The last bucket holds everything over
1116 * 2<<(NX842_HIST_SLOTS - 2) us */
1117 bytes = snprintf(p, bytes_remain, "%uus - :\t%ld\n",
1118 2<<(NX842_HIST_SLOTS - 2),
1119 atomic64_read(&times[(NX842_HIST_SLOTS - 1)]));
1120 p += bytes;
1121
1122 rcu_read_unlock();
1123 return p - buf;
1124}
1125
1126static struct attribute *nx842_sysfs_entries[] = {
1127 &dev_attr_comp_complete.attr,
1128 &dev_attr_comp_failed.attr,
1129 &dev_attr_decomp_complete.attr,
1130 &dev_attr_decomp_failed.attr,
1131 &dev_attr_swdecomp.attr,
1132 &dev_attr_comp_times.attr,
1133 &dev_attr_decomp_times.attr,
1134 NULL,
1135};
1136
1137static struct attribute_group nx842_attribute_group = {
1138 .name = NULL, /* put in device directory */
1139 .attrs = nx842_sysfs_entries,
1140};
1141
1142static int __init nx842_probe(struct vio_dev *viodev,
1143 const struct vio_device_id *id)
1144{
1145 struct nx842_devdata *old_devdata, *new_devdata = NULL;
1146 unsigned long flags;
1147 int ret = 0;
1148
1149 spin_lock_irqsave(&devdata_mutex, flags);
1150 old_devdata = rcu_dereference_check(devdata,
1151 lockdep_is_held(&devdata_mutex));
1152
1153 if (old_devdata && old_devdata->vdev != NULL) {
1154 dev_err(&viodev->dev, "%s: Attempt to register more than one instance of the hardware\n", __func__);
1155 ret = -1;
1156 goto error_unlock;
1157 }
1158
1159 dev_set_drvdata(&viodev->dev, NULL);
1160
1161 new_devdata = kzalloc(sizeof(*new_devdata), GFP_NOFS);
1162 if (!new_devdata) {
1163 dev_err(&viodev->dev, "%s: Could not allocate memory for device data\n", __func__);
1164 ret = -ENOMEM;
1165 goto error_unlock;
1166 }
1167
1168 new_devdata->counters = kzalloc(sizeof(*new_devdata->counters),
1169 GFP_NOFS);
1170 if (!new_devdata->counters) {
1171 dev_err(&viodev->dev, "%s: Could not allocate memory for performance counters\n", __func__);
1172 ret = -ENOMEM;
1173 goto error_unlock;
1174 }
1175
1176 new_devdata->vdev = viodev;
1177 new_devdata->dev = &viodev->dev;
1178 nx842_OF_set_defaults(new_devdata);
1179
1180 rcu_assign_pointer(devdata, new_devdata);
1181 spin_unlock_irqrestore(&devdata_mutex, flags);
1182 synchronize_rcu();
1183 kfree(old_devdata);
1184
1185 pSeries_reconfig_notifier_register(&nx842_of_nb);
1186
1187 ret = nx842_OF_upd(NULL);
1188 if (ret && ret != -ENODEV) {
1189 dev_err(&viodev->dev, "could not parse device tree. %d\n", ret);
1190 ret = -1;
1191 goto error;
1192 }
1193
1194 rcu_read_lock();
1195 if (dev_set_drvdata(&viodev->dev, rcu_dereference(devdata))) {
1196 rcu_read_unlock();
1197 dev_err(&viodev->dev, "failed to set driver data for device\n");
1198 ret = -1;
1199 goto error;
1200 }
1201 rcu_read_unlock();
1202
1203 if (sysfs_create_group(&viodev->dev.kobj, &nx842_attribute_group)) {
1204 dev_err(&viodev->dev, "could not create sysfs device attributes\n");
1205 ret = -1;
1206 goto error;
1207 }
1208
1209 return 0;
1210
1211error_unlock:
1212 spin_unlock_irqrestore(&devdata_mutex, flags);
1213 if (new_devdata)
1214 kfree(new_devdata->counters);
1215 kfree(new_devdata);
1216error:
1217 return ret;
1218}
1219
1220static int __exit nx842_remove(struct vio_dev *viodev)
1221{
1222 struct nx842_devdata *old_devdata;
1223 unsigned long flags;
1224
1225 pr_info("Removing IBM Power 842 compression device\n");
1226 sysfs_remove_group(&viodev->dev.kobj, &nx842_attribute_group);
1227
1228 spin_lock_irqsave(&devdata_mutex, flags);
1229 old_devdata = rcu_dereference_check(devdata,
1230 lockdep_is_held(&devdata_mutex));
1231 pSeries_reconfig_notifier_unregister(&nx842_of_nb);
1232 rcu_assign_pointer(devdata, NULL);
1233 spin_unlock_irqrestore(&devdata_mutex, flags);
1234 synchronize_rcu();
1235 dev_set_drvdata(&viodev->dev, NULL);
1236 if (old_devdata)
1237 kfree(old_devdata->counters);
1238 kfree(old_devdata);
1239 return 0;
1240}
1241
1242static struct vio_device_id nx842_driver_ids[] = {
1243 {"ibm,compression-v1", "ibm,compression"},
1244 {"", ""},
1245};
1246
1247static struct vio_driver nx842_driver = {
1248 .name = MODULE_NAME,
1249 .probe = nx842_probe,
1250 .remove = nx842_remove,
1251 .get_desired_dma = nx842_get_desired_dma,
1252 .id_table = nx842_driver_ids,
1253};
1254
1255static int __init nx842_init(void)
1256{
1257 struct nx842_devdata *new_devdata;
1258 pr_info("Registering IBM Power 842 compression driver\n");
1259
1260 RCU_INIT_POINTER(devdata, NULL);
1261 new_devdata = kzalloc(sizeof(*new_devdata), GFP_KERNEL);
1262 if (!new_devdata) {
1263 pr_err("Could not allocate memory for device data\n");
1264 return -ENOMEM;
1265 }
1266 new_devdata->status = UNAVAILABLE;
1267 RCU_INIT_POINTER(devdata, new_devdata);
1268
1269 return vio_register_driver(&nx842_driver);
1270}
1271
1272module_init(nx842_init);
1273
1274static void __exit nx842_exit(void)
1275{
1276 struct nx842_devdata *old_devdata;
1277 unsigned long flags;
1278
1279 pr_info("Exiting IBM Power 842 compression driver\n");
1280 spin_lock_irqsave(&devdata_mutex, flags);
1281 old_devdata = rcu_dereference_check(devdata,
1282 lockdep_is_held(&devdata_mutex));
1283 rcu_assign_pointer(devdata, NULL);
1284 spin_unlock_irqrestore(&devdata_mutex, flags);
1285 synchronize_rcu();
1286 if (old_devdata)
1287 dev_set_drvdata(old_devdata->dev, NULL);
1288 kfree(old_devdata);
1289 vio_unregister_driver(&nx842_driver);
1290}
1291
1292module_exit(nx842_exit);
1293
1294/*********************************
1295 * 842 software decompressor
1296*********************************/
1297typedef int (*sw842_template_op)(const char **, int *, unsigned char **,
1298 struct sw842_fifo *);
1299
1300static int sw842_data8(const char **, int *, unsigned char **,
1301 struct sw842_fifo *);
1302static int sw842_data4(const char **, int *, unsigned char **,
1303 struct sw842_fifo *);
1304static int sw842_data2(const char **, int *, unsigned char **,
1305 struct sw842_fifo *);
1306static int sw842_ptr8(const char **, int *, unsigned char **,
1307 struct sw842_fifo *);
1308static int sw842_ptr4(const char **, int *, unsigned char **,
1309 struct sw842_fifo *);
1310static int sw842_ptr2(const char **, int *, unsigned char **,
1311 struct sw842_fifo *);
1312
1313/* special templates */
1314#define SW842_TMPL_REPEAT 0x1B
1315#define SW842_TMPL_ZEROS 0x1C
1316#define SW842_TMPL_EOF 0x1E
1317
1318static sw842_template_op sw842_tmpl_ops[26][4] = {
1319 { sw842_data8, NULL}, /* 0 (00000) */
1320 { sw842_data4, sw842_data2, sw842_ptr2, NULL},
1321 { sw842_data4, sw842_ptr2, sw842_data2, NULL},
1322 { sw842_data4, sw842_ptr2, sw842_ptr2, NULL},
1323 { sw842_data4, sw842_ptr4, NULL},
1324 { sw842_data2, sw842_ptr2, sw842_data4, NULL},
1325 { sw842_data2, sw842_ptr2, sw842_data2, sw842_ptr2},
1326 { sw842_data2, sw842_ptr2, sw842_ptr2, sw842_data2},
1327 { sw842_data2, sw842_ptr2, sw842_ptr2, sw842_ptr2,},
1328 { sw842_data2, sw842_ptr2, sw842_ptr4, NULL},
1329 { sw842_ptr2, sw842_data2, sw842_data4, NULL}, /* 10 (01010) */
1330 { sw842_ptr2, sw842_data4, sw842_ptr2, NULL},
1331 { sw842_ptr2, sw842_data2, sw842_ptr2, sw842_data2},
1332 { sw842_ptr2, sw842_data2, sw842_ptr2, sw842_ptr2},
1333 { sw842_ptr2, sw842_data2, sw842_ptr4, NULL},
1334 { sw842_ptr2, sw842_ptr2, sw842_data4, NULL},
1335 { sw842_ptr2, sw842_ptr2, sw842_data2, sw842_ptr2},
1336 { sw842_ptr2, sw842_ptr2, sw842_ptr2, sw842_data2},
1337 { sw842_ptr2, sw842_ptr2, sw842_ptr2, sw842_ptr2},
1338 { sw842_ptr2, sw842_ptr2, sw842_ptr4, NULL},
1339 { sw842_ptr4, sw842_data4, NULL}, /* 20 (10100) */
1340 { sw842_ptr4, sw842_data2, sw842_ptr2, NULL},
1341 { sw842_ptr4, sw842_ptr2, sw842_data2, NULL},
1342 { sw842_ptr4, sw842_ptr2, sw842_ptr2, NULL},
1343 { sw842_ptr4, sw842_ptr4, NULL},
1344 { sw842_ptr8, NULL}
1345};
1346
1347/* Software decompress helpers */
1348
1349static uint8_t sw842_get_byte(const char *buf, int bit)
1350{
1351 uint8_t tmpl;
1352 uint16_t tmp;
1353 tmp = htons(*(uint16_t *)(buf));
1354 tmp = (uint16_t)(tmp << bit);
1355 tmp = ntohs(tmp);
1356 memcpy(&tmpl, &tmp, 1);
1357 return tmpl;
1358}
1359
1360static uint8_t sw842_get_template(const char **buf, int *bit)
1361{
1362 uint8_t byte;
1363 byte = sw842_get_byte(*buf, *bit);
1364 byte = byte >> 3;
1365 byte &= 0x1F;
1366 *buf += (*bit + 5) / 8;
1367 *bit = (*bit + 5) % 8;
1368 return byte;
1369}
1370
1371/* repeat_count happens to be 5-bit too (like the template) */
1372static uint8_t sw842_get_repeat_count(const char **buf, int *bit)
1373{
1374 uint8_t byte;
1375 byte = sw842_get_byte(*buf, *bit);
1376 byte = byte >> 2;
1377 byte &= 0x3F;
1378 *buf += (*bit + 6) / 8;
1379 *bit = (*bit + 6) % 8;
1380 return byte;
1381}
1382
1383static uint8_t sw842_get_ptr2(const char **buf, int *bit)
1384{
1385 uint8_t ptr;
1386 ptr = sw842_get_byte(*buf, *bit);
1387 (*buf)++;
1388 return ptr;
1389}
1390
1391static uint16_t sw842_get_ptr4(const char **buf, int *bit,
1392 struct sw842_fifo *fifo)
1393{
1394 uint16_t ptr;
1395 ptr = htons(*(uint16_t *)(*buf));
1396 ptr = (uint16_t)(ptr << *bit);
1397 ptr = ptr >> 7;
1398 ptr &= 0x01FF;
1399 *buf += (*bit + 9) / 8;
1400 *bit = (*bit + 9) % 8;
1401 return ptr;
1402}
1403
1404static uint8_t sw842_get_ptr8(const char **buf, int *bit,
1405 struct sw842_fifo *fifo)
1406{
1407 return sw842_get_ptr2(buf, bit);
1408}
1409
1410/* Software decompress template ops */
1411
1412static int sw842_data8(const char **inbuf, int *inbit,
1413 unsigned char **outbuf, struct sw842_fifo *fifo)
1414{
1415 int ret;
1416
1417 ret = sw842_data4(inbuf, inbit, outbuf, fifo);
1418 if (ret)
1419 return ret;
1420 ret = sw842_data4(inbuf, inbit, outbuf, fifo);
1421 return ret;
1422}
1423
1424static int sw842_data4(const char **inbuf, int *inbit,
1425 unsigned char **outbuf, struct sw842_fifo *fifo)
1426{
1427 int ret;
1428
1429 ret = sw842_data2(inbuf, inbit, outbuf, fifo);
1430 if (ret)
1431 return ret;
1432 ret = sw842_data2(inbuf, inbit, outbuf, fifo);
1433 return ret;
1434}
1435
1436static int sw842_data2(const char **inbuf, int *inbit,
1437 unsigned char **outbuf, struct sw842_fifo *fifo)
1438{
1439 **outbuf = sw842_get_byte(*inbuf, *inbit);
1440 (*inbuf)++;
1441 (*outbuf)++;
1442 **outbuf = sw842_get_byte(*inbuf, *inbit);
1443 (*inbuf)++;
1444 (*outbuf)++;
1445 return 0;
1446}
1447
1448static int sw842_ptr8(const char **inbuf, int *inbit,
1449 unsigned char **outbuf, struct sw842_fifo *fifo)
1450{
1451 uint8_t ptr;
1452 ptr = sw842_get_ptr8(inbuf, inbit, fifo);
1453 if (!fifo->f84_full && (ptr >= fifo->f8_count))
1454 return 1;
1455 memcpy(*outbuf, fifo->f8[ptr], 8);
1456 *outbuf += 8;
1457 return 0;
1458}
1459
1460static int sw842_ptr4(const char **inbuf, int *inbit,
1461 unsigned char **outbuf, struct sw842_fifo *fifo)
1462{
1463 uint16_t ptr;
1464 ptr = sw842_get_ptr4(inbuf, inbit, fifo);
1465 if (!fifo->f84_full && (ptr >= fifo->f4_count))
1466 return 1;
1467 memcpy(*outbuf, fifo->f4[ptr], 4);
1468 *outbuf += 4;
1469 return 0;
1470}
1471
1472static int sw842_ptr2(const char **inbuf, int *inbit,
1473 unsigned char **outbuf, struct sw842_fifo *fifo)
1474{
1475 uint8_t ptr;
1476 ptr = sw842_get_ptr2(inbuf, inbit);
1477 if (!fifo->f2_full && (ptr >= fifo->f2_count))
1478 return 1;
1479 memcpy(*outbuf, fifo->f2[ptr], 2);
1480 *outbuf += 2;
1481 return 0;
1482}
1483
1484static void sw842_copy_to_fifo(const char *buf, struct sw842_fifo *fifo)
1485{
1486 unsigned char initial_f2count = fifo->f2_count;
1487
1488 memcpy(fifo->f8[fifo->f8_count], buf, 8);
1489 fifo->f4_count += 2;
1490 fifo->f8_count += 1;
1491
1492 if (!fifo->f84_full && fifo->f4_count >= 512) {
1493 fifo->f84_full = 1;
1494 fifo->f4_count /= 512;
1495 }
1496
1497 memcpy(fifo->f2[fifo->f2_count++], buf, 2);
1498 memcpy(fifo->f2[fifo->f2_count++], buf + 2, 2);
1499 memcpy(fifo->f2[fifo->f2_count++], buf + 4, 2);
1500 memcpy(fifo->f2[fifo->f2_count++], buf + 6, 2);
1501 if (fifo->f2_count < initial_f2count)
1502 fifo->f2_full = 1;
1503}
1504
1505static int sw842_decompress(const unsigned char *src, int srclen,
1506 unsigned char *dst, int *destlen,
1507 const void *wrkmem)
1508{
1509 uint8_t tmpl;
1510 const char *inbuf;
1511 int inbit = 0;
1512 unsigned char *outbuf, *outbuf_end, *origbuf, *prevbuf;
1513 const char *inbuf_end;
1514 sw842_template_op op;
1515 int opindex;
1516 int i, repeat_count;
1517 struct sw842_fifo *fifo;
1518 int ret = 0;
1519
1520 fifo = &((struct nx842_workmem *)(wrkmem))->swfifo;
1521 memset(fifo, 0, sizeof(*fifo));
1522
1523 origbuf = NULL;
1524 inbuf = src;
1525 inbuf_end = src + srclen;
1526 outbuf = dst;
1527 outbuf_end = dst + *destlen;
1528
1529 while ((tmpl = sw842_get_template(&inbuf, &inbit)) != SW842_TMPL_EOF) {
1530 if (inbuf >= inbuf_end) {
1531 ret = -EINVAL;
1532 goto out;
1533 }
1534
1535 opindex = 0;
1536 prevbuf = origbuf;
1537 origbuf = outbuf;
1538 switch (tmpl) {
1539 case SW842_TMPL_REPEAT:
1540 if (prevbuf == NULL) {
1541 ret = -EINVAL;
1542 goto out;
1543 }
1544
1545 repeat_count = sw842_get_repeat_count(&inbuf,
1546 &inbit) + 1;
1547
1548 /* Did the repeat count advance past the end of input */
1549 if (inbuf > inbuf_end) {
1550 ret = -EINVAL;
1551 goto out;
1552 }
1553
1554 for (i = 0; i < repeat_count; i++) {
1555 /* Would this overflow the output buffer */
1556 if ((outbuf + 8) > outbuf_end) {
1557 ret = -ENOSPC;
1558 goto out;
1559 }
1560
1561 memcpy(outbuf, prevbuf, 8);
1562 sw842_copy_to_fifo(outbuf, fifo);
1563 outbuf += 8;
1564 }
1565 break;
1566
1567 case SW842_TMPL_ZEROS:
1568 /* Would this overflow the output buffer */
1569 if ((outbuf + 8) > outbuf_end) {
1570 ret = -ENOSPC;
1571 goto out;
1572 }
1573
1574 memset(outbuf, 0, 8);
1575 sw842_copy_to_fifo(outbuf, fifo);
1576 outbuf += 8;
1577 break;
1578
1579 default:
1580 if (tmpl > 25) {
1581 ret = -EINVAL;
1582 goto out;
1583 }
1584
1585 /* Does this go past the end of the input buffer */
1586 if ((inbuf + 2) > inbuf_end) {
1587 ret = -EINVAL;
1588 goto out;
1589 }
1590
1591 /* Would this overflow the output buffer */
1592 if ((outbuf + 8) > outbuf_end) {
1593 ret = -ENOSPC;
1594 goto out;
1595 }
1596
1597 while (opindex < 4 &&
1598 (op = sw842_tmpl_ops[tmpl][opindex++])
1599 != NULL) {
1600 ret = (*op)(&inbuf, &inbit, &outbuf, fifo);
1601 if (ret) {
1602 ret = -EINVAL;
1603 goto out;
1604 }
1605 sw842_copy_to_fifo(origbuf, fifo);
1606 }
1607 }
1608 }
1609
1610out:
1611 if (!ret)
1612 *destlen = (unsigned int)(outbuf - dst);
1613 else
1614 *destlen = 0;
1615
1616 return ret;
1617}
diff --git a/drivers/crypto/nx/nx-aes-cbc.c b/drivers/crypto/nx/nx-aes-cbc.c
index 69ed796ee32..a76d4c4f29f 100644
--- a/drivers/crypto/nx/nx-aes-cbc.c
+++ b/drivers/crypto/nx/nx-aes-cbc.c
@@ -127,7 +127,6 @@ struct crypto_alg nx_cbc_aes_alg = {
127 .cra_ctxsize = sizeof(struct nx_crypto_ctx), 127 .cra_ctxsize = sizeof(struct nx_crypto_ctx),
128 .cra_type = &crypto_blkcipher_type, 128 .cra_type = &crypto_blkcipher_type,
129 .cra_module = THIS_MODULE, 129 .cra_module = THIS_MODULE,
130 .cra_list = LIST_HEAD_INIT(nx_cbc_aes_alg.cra_list),
131 .cra_init = nx_crypto_ctx_aes_cbc_init, 130 .cra_init = nx_crypto_ctx_aes_cbc_init,
132 .cra_exit = nx_crypto_ctx_exit, 131 .cra_exit = nx_crypto_ctx_exit,
133 .cra_blkcipher = { 132 .cra_blkcipher = {
diff --git a/drivers/crypto/nx/nx-aes-ccm.c b/drivers/crypto/nx/nx-aes-ccm.c
index 7aeac678b9c..ef5eae6d140 100644
--- a/drivers/crypto/nx/nx-aes-ccm.c
+++ b/drivers/crypto/nx/nx-aes-ccm.c
@@ -430,7 +430,6 @@ struct crypto_alg nx_ccm_aes_alg = {
430 .cra_ctxsize = sizeof(struct nx_crypto_ctx), 430 .cra_ctxsize = sizeof(struct nx_crypto_ctx),
431 .cra_type = &crypto_aead_type, 431 .cra_type = &crypto_aead_type,
432 .cra_module = THIS_MODULE, 432 .cra_module = THIS_MODULE,
433 .cra_list = LIST_HEAD_INIT(nx_ccm_aes_alg.cra_list),
434 .cra_init = nx_crypto_ctx_aes_ccm_init, 433 .cra_init = nx_crypto_ctx_aes_ccm_init,
435 .cra_exit = nx_crypto_ctx_exit, 434 .cra_exit = nx_crypto_ctx_exit,
436 .cra_aead = { 435 .cra_aead = {
@@ -453,7 +452,6 @@ struct crypto_alg nx_ccm4309_aes_alg = {
453 .cra_ctxsize = sizeof(struct nx_crypto_ctx), 452 .cra_ctxsize = sizeof(struct nx_crypto_ctx),
454 .cra_type = &crypto_nivaead_type, 453 .cra_type = &crypto_nivaead_type,
455 .cra_module = THIS_MODULE, 454 .cra_module = THIS_MODULE,
456 .cra_list = LIST_HEAD_INIT(nx_ccm4309_aes_alg.cra_list),
457 .cra_init = nx_crypto_ctx_aes_ccm_init, 455 .cra_init = nx_crypto_ctx_aes_ccm_init,
458 .cra_exit = nx_crypto_ctx_exit, 456 .cra_exit = nx_crypto_ctx_exit,
459 .cra_aead = { 457 .cra_aead = {
diff --git a/drivers/crypto/nx/nx-aes-ctr.c b/drivers/crypto/nx/nx-aes-ctr.c
index 52d4eb05e8f..b6286f14680 100644
--- a/drivers/crypto/nx/nx-aes-ctr.c
+++ b/drivers/crypto/nx/nx-aes-ctr.c
@@ -141,7 +141,6 @@ struct crypto_alg nx_ctr_aes_alg = {
141 .cra_ctxsize = sizeof(struct nx_crypto_ctx), 141 .cra_ctxsize = sizeof(struct nx_crypto_ctx),
142 .cra_type = &crypto_blkcipher_type, 142 .cra_type = &crypto_blkcipher_type,
143 .cra_module = THIS_MODULE, 143 .cra_module = THIS_MODULE,
144 .cra_list = LIST_HEAD_INIT(nx_ctr_aes_alg.cra_list),
145 .cra_init = nx_crypto_ctx_aes_ctr_init, 144 .cra_init = nx_crypto_ctx_aes_ctr_init,
146 .cra_exit = nx_crypto_ctx_exit, 145 .cra_exit = nx_crypto_ctx_exit,
147 .cra_blkcipher = { 146 .cra_blkcipher = {
@@ -163,7 +162,6 @@ struct crypto_alg nx_ctr3686_aes_alg = {
163 .cra_ctxsize = sizeof(struct nx_crypto_ctx), 162 .cra_ctxsize = sizeof(struct nx_crypto_ctx),
164 .cra_type = &crypto_blkcipher_type, 163 .cra_type = &crypto_blkcipher_type,
165 .cra_module = THIS_MODULE, 164 .cra_module = THIS_MODULE,
166 .cra_list = LIST_HEAD_INIT(nx_ctr3686_aes_alg.cra_list),
167 .cra_init = nx_crypto_ctx_aes_ctr_init, 165 .cra_init = nx_crypto_ctx_aes_ctr_init,
168 .cra_exit = nx_crypto_ctx_exit, 166 .cra_exit = nx_crypto_ctx_exit,
169 .cra_blkcipher = { 167 .cra_blkcipher = {
diff --git a/drivers/crypto/nx/nx-aes-ecb.c b/drivers/crypto/nx/nx-aes-ecb.c
index 7b77bc2d1df..ba5f1611336 100644
--- a/drivers/crypto/nx/nx-aes-ecb.c
+++ b/drivers/crypto/nx/nx-aes-ecb.c
@@ -126,7 +126,6 @@ struct crypto_alg nx_ecb_aes_alg = {
126 .cra_ctxsize = sizeof(struct nx_crypto_ctx), 126 .cra_ctxsize = sizeof(struct nx_crypto_ctx),
127 .cra_type = &crypto_blkcipher_type, 127 .cra_type = &crypto_blkcipher_type,
128 .cra_module = THIS_MODULE, 128 .cra_module = THIS_MODULE,
129 .cra_list = LIST_HEAD_INIT(nx_ecb_aes_alg.cra_list),
130 .cra_init = nx_crypto_ctx_aes_ecb_init, 129 .cra_init = nx_crypto_ctx_aes_ecb_init,
131 .cra_exit = nx_crypto_ctx_exit, 130 .cra_exit = nx_crypto_ctx_exit,
132 .cra_blkcipher = { 131 .cra_blkcipher = {
diff --git a/drivers/crypto/nx/nx-aes-gcm.c b/drivers/crypto/nx/nx-aes-gcm.c
index 9ab1c7341da..c8109edc5cf 100644
--- a/drivers/crypto/nx/nx-aes-gcm.c
+++ b/drivers/crypto/nx/nx-aes-gcm.c
@@ -316,7 +316,6 @@ struct crypto_alg nx_gcm_aes_alg = {
316 .cra_ctxsize = sizeof(struct nx_crypto_ctx), 316 .cra_ctxsize = sizeof(struct nx_crypto_ctx),
317 .cra_type = &crypto_aead_type, 317 .cra_type = &crypto_aead_type,
318 .cra_module = THIS_MODULE, 318 .cra_module = THIS_MODULE,
319 .cra_list = LIST_HEAD_INIT(nx_gcm_aes_alg.cra_list),
320 .cra_init = nx_crypto_ctx_aes_gcm_init, 319 .cra_init = nx_crypto_ctx_aes_gcm_init,
321 .cra_exit = nx_crypto_ctx_exit, 320 .cra_exit = nx_crypto_ctx_exit,
322 .cra_aead = { 321 .cra_aead = {
@@ -338,7 +337,6 @@ struct crypto_alg nx_gcm4106_aes_alg = {
338 .cra_ctxsize = sizeof(struct nx_crypto_ctx), 337 .cra_ctxsize = sizeof(struct nx_crypto_ctx),
339 .cra_type = &crypto_nivaead_type, 338 .cra_type = &crypto_nivaead_type,
340 .cra_module = THIS_MODULE, 339 .cra_module = THIS_MODULE,
341 .cra_list = LIST_HEAD_INIT(nx_gcm4106_aes_alg.cra_list),
342 .cra_init = nx_crypto_ctx_aes_gcm_init, 340 .cra_init = nx_crypto_ctx_aes_gcm_init,
343 .cra_exit = nx_crypto_ctx_exit, 341 .cra_exit = nx_crypto_ctx_exit,
344 .cra_aead = { 342 .cra_aead = {
diff --git a/drivers/crypto/omap-aes.c b/drivers/crypto/omap-aes.c
index 63e57b57a12..093a8af59cb 100644
--- a/drivers/crypto/omap-aes.c
+++ b/drivers/crypto/omap-aes.c
@@ -876,7 +876,6 @@ static int omap_aes_probe(struct platform_device *pdev)
876 876
877 for (i = 0; i < ARRAY_SIZE(algs); i++) { 877 for (i = 0; i < ARRAY_SIZE(algs); i++) {
878 pr_debug("i: %d\n", i); 878 pr_debug("i: %d\n", i);
879 INIT_LIST_HEAD(&algs[i].cra_list);
880 err = crypto_register_alg(&algs[i]); 879 err = crypto_register_alg(&algs[i]);
881 if (err) 880 if (err)
882 goto err_algs; 881 goto err_algs;
diff --git a/drivers/crypto/padlock-aes.c b/drivers/crypto/padlock-aes.c
index 37b2e9406af..633ba945e15 100644
--- a/drivers/crypto/padlock-aes.c
+++ b/drivers/crypto/padlock-aes.c
@@ -328,7 +328,6 @@ static struct crypto_alg aes_alg = {
328 .cra_ctxsize = sizeof(struct aes_ctx), 328 .cra_ctxsize = sizeof(struct aes_ctx),
329 .cra_alignmask = PADLOCK_ALIGNMENT - 1, 329 .cra_alignmask = PADLOCK_ALIGNMENT - 1,
330 .cra_module = THIS_MODULE, 330 .cra_module = THIS_MODULE,
331 .cra_list = LIST_HEAD_INIT(aes_alg.cra_list),
332 .cra_u = { 331 .cra_u = {
333 .cipher = { 332 .cipher = {
334 .cia_min_keysize = AES_MIN_KEY_SIZE, 333 .cia_min_keysize = AES_MIN_KEY_SIZE,
@@ -408,7 +407,6 @@ static struct crypto_alg ecb_aes_alg = {
408 .cra_alignmask = PADLOCK_ALIGNMENT - 1, 407 .cra_alignmask = PADLOCK_ALIGNMENT - 1,
409 .cra_type = &crypto_blkcipher_type, 408 .cra_type = &crypto_blkcipher_type,
410 .cra_module = THIS_MODULE, 409 .cra_module = THIS_MODULE,
411 .cra_list = LIST_HEAD_INIT(ecb_aes_alg.cra_list),
412 .cra_u = { 410 .cra_u = {
413 .blkcipher = { 411 .blkcipher = {
414 .min_keysize = AES_MIN_KEY_SIZE, 412 .min_keysize = AES_MIN_KEY_SIZE,
@@ -491,7 +489,6 @@ static struct crypto_alg cbc_aes_alg = {
491 .cra_alignmask = PADLOCK_ALIGNMENT - 1, 489 .cra_alignmask = PADLOCK_ALIGNMENT - 1,
492 .cra_type = &crypto_blkcipher_type, 490 .cra_type = &crypto_blkcipher_type,
493 .cra_module = THIS_MODULE, 491 .cra_module = THIS_MODULE,
494 .cra_list = LIST_HEAD_INIT(cbc_aes_alg.cra_list),
495 .cra_u = { 492 .cra_u = {
496 .blkcipher = { 493 .blkcipher = {
497 .min_keysize = AES_MIN_KEY_SIZE, 494 .min_keysize = AES_MIN_KEY_SIZE,
diff --git a/drivers/crypto/s5p-sss.c b/drivers/crypto/s5p-sss.c
index bc986f80608..a22714412cd 100644
--- a/drivers/crypto/s5p-sss.c
+++ b/drivers/crypto/s5p-sss.c
@@ -626,7 +626,6 @@ static int s5p_aes_probe(struct platform_device *pdev)
626 crypto_init_queue(&pdata->queue, CRYPTO_QUEUE_LEN); 626 crypto_init_queue(&pdata->queue, CRYPTO_QUEUE_LEN);
627 627
628 for (i = 0; i < ARRAY_SIZE(algs); i++) { 628 for (i = 0; i < ARRAY_SIZE(algs); i++) {
629 INIT_LIST_HEAD(&algs[i].cra_list);
630 err = crypto_register_alg(&algs[i]); 629 err = crypto_register_alg(&algs[i]);
631 if (err) 630 if (err)
632 goto err_algs; 631 goto err_algs;
diff --git a/drivers/crypto/talitos.c b/drivers/crypto/talitos.c
index efff788d2f1..da1112765a4 100644
--- a/drivers/crypto/talitos.c
+++ b/drivers/crypto/talitos.c
@@ -38,6 +38,7 @@
38#include <linux/spinlock.h> 38#include <linux/spinlock.h>
39#include <linux/rtnetlink.h> 39#include <linux/rtnetlink.h>
40#include <linux/slab.h> 40#include <linux/slab.h>
41#include <linux/string.h>
41 42
42#include <crypto/algapi.h> 43#include <crypto/algapi.h>
43#include <crypto/aes.h> 44#include <crypto/aes.h>
@@ -714,8 +715,13 @@ badkey:
714 715
715/* 716/*
716 * talitos_edesc - s/w-extended descriptor 717 * talitos_edesc - s/w-extended descriptor
718 * @assoc_nents: number of segments in associated data scatterlist
717 * @src_nents: number of segments in input scatterlist 719 * @src_nents: number of segments in input scatterlist
718 * @dst_nents: number of segments in output scatterlist 720 * @dst_nents: number of segments in output scatterlist
721 * @assoc_chained: whether assoc is chained or not
722 * @src_chained: whether src is chained or not
723 * @dst_chained: whether dst is chained or not
724 * @iv_dma: dma address of iv for checking continuity and link table
719 * @dma_len: length of dma mapped link_tbl space 725 * @dma_len: length of dma mapped link_tbl space
720 * @dma_link_tbl: bus physical address of link_tbl 726 * @dma_link_tbl: bus physical address of link_tbl
721 * @desc: h/w descriptor 727 * @desc: h/w descriptor
@@ -726,10 +732,13 @@ badkey:
726 * of link_tbl data 732 * of link_tbl data
727 */ 733 */
728struct talitos_edesc { 734struct talitos_edesc {
735 int assoc_nents;
729 int src_nents; 736 int src_nents;
730 int dst_nents; 737 int dst_nents;
731 int src_is_chained; 738 bool assoc_chained;
732 int dst_is_chained; 739 bool src_chained;
740 bool dst_chained;
741 dma_addr_t iv_dma;
733 int dma_len; 742 int dma_len;
734 dma_addr_t dma_link_tbl; 743 dma_addr_t dma_link_tbl;
735 struct talitos_desc desc; 744 struct talitos_desc desc;
@@ -738,7 +747,7 @@ struct talitos_edesc {
738 747
739static int talitos_map_sg(struct device *dev, struct scatterlist *sg, 748static int talitos_map_sg(struct device *dev, struct scatterlist *sg,
740 unsigned int nents, enum dma_data_direction dir, 749 unsigned int nents, enum dma_data_direction dir,
741 int chained) 750 bool chained)
742{ 751{
743 if (unlikely(chained)) 752 if (unlikely(chained))
744 while (sg) { 753 while (sg) {
@@ -768,13 +777,13 @@ static void talitos_sg_unmap(struct device *dev,
768 unsigned int dst_nents = edesc->dst_nents ? : 1; 777 unsigned int dst_nents = edesc->dst_nents ? : 1;
769 778
770 if (src != dst) { 779 if (src != dst) {
771 if (edesc->src_is_chained) 780 if (edesc->src_chained)
772 talitos_unmap_sg_chain(dev, src, DMA_TO_DEVICE); 781 talitos_unmap_sg_chain(dev, src, DMA_TO_DEVICE);
773 else 782 else
774 dma_unmap_sg(dev, src, src_nents, DMA_TO_DEVICE); 783 dma_unmap_sg(dev, src, src_nents, DMA_TO_DEVICE);
775 784
776 if (dst) { 785 if (dst) {
777 if (edesc->dst_is_chained) 786 if (edesc->dst_chained)
778 talitos_unmap_sg_chain(dev, dst, 787 talitos_unmap_sg_chain(dev, dst,
779 DMA_FROM_DEVICE); 788 DMA_FROM_DEVICE);
780 else 789 else
@@ -782,7 +791,7 @@ static void talitos_sg_unmap(struct device *dev,
782 DMA_FROM_DEVICE); 791 DMA_FROM_DEVICE);
783 } 792 }
784 } else 793 } else
785 if (edesc->src_is_chained) 794 if (edesc->src_chained)
786 talitos_unmap_sg_chain(dev, src, DMA_BIDIRECTIONAL); 795 talitos_unmap_sg_chain(dev, src, DMA_BIDIRECTIONAL);
787 else 796 else
788 dma_unmap_sg(dev, src, src_nents, DMA_BIDIRECTIONAL); 797 dma_unmap_sg(dev, src, src_nents, DMA_BIDIRECTIONAL);
@@ -797,7 +806,13 @@ static void ipsec_esp_unmap(struct device *dev,
797 unmap_single_talitos_ptr(dev, &edesc->desc.ptr[2], DMA_TO_DEVICE); 806 unmap_single_talitos_ptr(dev, &edesc->desc.ptr[2], DMA_TO_DEVICE);
798 unmap_single_talitos_ptr(dev, &edesc->desc.ptr[0], DMA_TO_DEVICE); 807 unmap_single_talitos_ptr(dev, &edesc->desc.ptr[0], DMA_TO_DEVICE);
799 808
800 dma_unmap_sg(dev, areq->assoc, 1, DMA_TO_DEVICE); 809 if (edesc->assoc_chained)
810 talitos_unmap_sg_chain(dev, areq->assoc, DMA_TO_DEVICE);
811 else
812 /* assoc_nents counts also for IV in non-contiguous cases */
813 dma_unmap_sg(dev, areq->assoc,
814 edesc->assoc_nents ? edesc->assoc_nents - 1 : 1,
815 DMA_TO_DEVICE);
801 816
802 talitos_sg_unmap(dev, edesc, areq->src, areq->dst); 817 talitos_sg_unmap(dev, edesc, areq->src, areq->dst);
803 818
@@ -825,9 +840,10 @@ static void ipsec_esp_encrypt_done(struct device *dev,
825 ipsec_esp_unmap(dev, edesc, areq); 840 ipsec_esp_unmap(dev, edesc, areq);
826 841
827 /* copy the generated ICV to dst */ 842 /* copy the generated ICV to dst */
828 if (edesc->dma_len) { 843 if (edesc->dst_nents) {
829 icvdata = &edesc->link_tbl[edesc->src_nents + 844 icvdata = &edesc->link_tbl[edesc->src_nents +
830 edesc->dst_nents + 2]; 845 edesc->dst_nents + 2 +
846 edesc->assoc_nents];
831 sg = sg_last(areq->dst, edesc->dst_nents); 847 sg = sg_last(areq->dst, edesc->dst_nents);
832 memcpy((char *)sg_virt(sg) + sg->length - ctx->authsize, 848 memcpy((char *)sg_virt(sg) + sg->length - ctx->authsize,
833 icvdata, ctx->authsize); 849 icvdata, ctx->authsize);
@@ -857,7 +873,8 @@ static void ipsec_esp_decrypt_swauth_done(struct device *dev,
857 /* auth check */ 873 /* auth check */
858 if (edesc->dma_len) 874 if (edesc->dma_len)
859 icvdata = &edesc->link_tbl[edesc->src_nents + 875 icvdata = &edesc->link_tbl[edesc->src_nents +
860 edesc->dst_nents + 2]; 876 edesc->dst_nents + 2 +
877 edesc->assoc_nents];
861 else 878 else
862 icvdata = &edesc->link_tbl[0]; 879 icvdata = &edesc->link_tbl[0];
863 880
@@ -932,10 +949,9 @@ static int sg_to_link_tbl(struct scatterlist *sg, int sg_count,
932 * fill in and submit ipsec_esp descriptor 949 * fill in and submit ipsec_esp descriptor
933 */ 950 */
934static int ipsec_esp(struct talitos_edesc *edesc, struct aead_request *areq, 951static int ipsec_esp(struct talitos_edesc *edesc, struct aead_request *areq,
935 u8 *giv, u64 seq, 952 u64 seq, void (*callback) (struct device *dev,
936 void (*callback) (struct device *dev, 953 struct talitos_desc *desc,
937 struct talitos_desc *desc, 954 void *context, int error))
938 void *context, int error))
939{ 955{
940 struct crypto_aead *aead = crypto_aead_reqtfm(areq); 956 struct crypto_aead *aead = crypto_aead_reqtfm(areq);
941 struct talitos_ctx *ctx = crypto_aead_ctx(aead); 957 struct talitos_ctx *ctx = crypto_aead_ctx(aead);
@@ -950,12 +966,42 @@ static int ipsec_esp(struct talitos_edesc *edesc, struct aead_request *areq,
950 /* hmac key */ 966 /* hmac key */
951 map_single_talitos_ptr(dev, &desc->ptr[0], ctx->authkeylen, &ctx->key, 967 map_single_talitos_ptr(dev, &desc->ptr[0], ctx->authkeylen, &ctx->key,
952 0, DMA_TO_DEVICE); 968 0, DMA_TO_DEVICE);
969
953 /* hmac data */ 970 /* hmac data */
954 map_single_talitos_ptr(dev, &desc->ptr[1], areq->assoclen + ivsize, 971 desc->ptr[1].len = cpu_to_be16(areq->assoclen + ivsize);
955 sg_virt(areq->assoc), 0, DMA_TO_DEVICE); 972 if (edesc->assoc_nents) {
973 int tbl_off = edesc->src_nents + edesc->dst_nents + 2;
974 struct talitos_ptr *tbl_ptr = &edesc->link_tbl[tbl_off];
975
976 to_talitos_ptr(&desc->ptr[1], edesc->dma_link_tbl + tbl_off *
977 sizeof(struct talitos_ptr));
978 desc->ptr[1].j_extent = DESC_PTR_LNKTBL_JUMP;
979
980 /* assoc_nents - 1 entries for assoc, 1 for IV */
981 sg_count = sg_to_link_tbl(areq->assoc, edesc->assoc_nents - 1,
982 areq->assoclen, tbl_ptr);
983
984 /* add IV to link table */
985 tbl_ptr += sg_count - 1;
986 tbl_ptr->j_extent = 0;
987 tbl_ptr++;
988 to_talitos_ptr(tbl_ptr, edesc->iv_dma);
989 tbl_ptr->len = cpu_to_be16(ivsize);
990 tbl_ptr->j_extent = DESC_PTR_LNKTBL_RETURN;
991
992 dma_sync_single_for_device(dev, edesc->dma_link_tbl,
993 edesc->dma_len, DMA_BIDIRECTIONAL);
994 } else {
995 to_talitos_ptr(&desc->ptr[1], sg_dma_address(areq->assoc));
996 desc->ptr[1].j_extent = 0;
997 }
998
956 /* cipher iv */ 999 /* cipher iv */
957 map_single_talitos_ptr(dev, &desc->ptr[2], ivsize, giv ?: areq->iv, 0, 1000 to_talitos_ptr(&desc->ptr[2], edesc->iv_dma);
958 DMA_TO_DEVICE); 1001 desc->ptr[2].len = cpu_to_be16(ivsize);
1002 desc->ptr[2].j_extent = 0;
1003 /* Sync needed for the aead_givencrypt case */
1004 dma_sync_single_for_device(dev, edesc->iv_dma, ivsize, DMA_TO_DEVICE);
959 1005
960 /* cipher key */ 1006 /* cipher key */
961 map_single_talitos_ptr(dev, &desc->ptr[3], ctx->enckeylen, 1007 map_single_talitos_ptr(dev, &desc->ptr[3], ctx->enckeylen,
@@ -974,7 +1020,7 @@ static int ipsec_esp(struct talitos_edesc *edesc, struct aead_request *areq,
974 sg_count = talitos_map_sg(dev, areq->src, edesc->src_nents ? : 1, 1020 sg_count = talitos_map_sg(dev, areq->src, edesc->src_nents ? : 1,
975 (areq->src == areq->dst) ? DMA_BIDIRECTIONAL 1021 (areq->src == areq->dst) ? DMA_BIDIRECTIONAL
976 : DMA_TO_DEVICE, 1022 : DMA_TO_DEVICE,
977 edesc->src_is_chained); 1023 edesc->src_chained);
978 1024
979 if (sg_count == 1) { 1025 if (sg_count == 1) {
980 to_talitos_ptr(&desc->ptr[4], sg_dma_address(areq->src)); 1026 to_talitos_ptr(&desc->ptr[4], sg_dma_address(areq->src));
@@ -1006,32 +1052,30 @@ static int ipsec_esp(struct talitos_edesc *edesc, struct aead_request *areq,
1006 if (areq->src != areq->dst) 1052 if (areq->src != areq->dst)
1007 sg_count = talitos_map_sg(dev, areq->dst, 1053 sg_count = talitos_map_sg(dev, areq->dst,
1008 edesc->dst_nents ? : 1, 1054 edesc->dst_nents ? : 1,
1009 DMA_FROM_DEVICE, 1055 DMA_FROM_DEVICE, edesc->dst_chained);
1010 edesc->dst_is_chained);
1011 1056
1012 if (sg_count == 1) { 1057 if (sg_count == 1) {
1013 to_talitos_ptr(&desc->ptr[5], sg_dma_address(areq->dst)); 1058 to_talitos_ptr(&desc->ptr[5], sg_dma_address(areq->dst));
1014 } else { 1059 } else {
1015 struct talitos_ptr *link_tbl_ptr = 1060 int tbl_off = edesc->src_nents + 1;
1016 &edesc->link_tbl[edesc->src_nents + 1]; 1061 struct talitos_ptr *tbl_ptr = &edesc->link_tbl[tbl_off];
1017 1062
1018 to_talitos_ptr(&desc->ptr[5], edesc->dma_link_tbl + 1063 to_talitos_ptr(&desc->ptr[5], edesc->dma_link_tbl +
1019 (edesc->src_nents + 1) * 1064 tbl_off * sizeof(struct talitos_ptr));
1020 sizeof(struct talitos_ptr));
1021 sg_count = sg_to_link_tbl(areq->dst, sg_count, cryptlen, 1065 sg_count = sg_to_link_tbl(areq->dst, sg_count, cryptlen,
1022 link_tbl_ptr); 1066 tbl_ptr);
1023 1067
1024 /* Add an entry to the link table for ICV data */ 1068 /* Add an entry to the link table for ICV data */
1025 link_tbl_ptr += sg_count - 1; 1069 tbl_ptr += sg_count - 1;
1026 link_tbl_ptr->j_extent = 0; 1070 tbl_ptr->j_extent = 0;
1027 sg_count++; 1071 tbl_ptr++;
1028 link_tbl_ptr++; 1072 tbl_ptr->j_extent = DESC_PTR_LNKTBL_RETURN;
1029 link_tbl_ptr->j_extent = DESC_PTR_LNKTBL_RETURN; 1073 tbl_ptr->len = cpu_to_be16(authsize);
1030 link_tbl_ptr->len = cpu_to_be16(authsize);
1031 1074
1032 /* icv data follows link tables */ 1075 /* icv data follows link tables */
1033 to_talitos_ptr(link_tbl_ptr, edesc->dma_link_tbl + 1076 to_talitos_ptr(tbl_ptr, edesc->dma_link_tbl +
1034 (edesc->src_nents + edesc->dst_nents + 2) * 1077 (tbl_off + edesc->dst_nents + 1 +
1078 edesc->assoc_nents) *
1035 sizeof(struct talitos_ptr)); 1079 sizeof(struct talitos_ptr));
1036 desc->ptr[5].j_extent |= DESC_PTR_LNKTBL_JUMP; 1080 desc->ptr[5].j_extent |= DESC_PTR_LNKTBL_JUMP;
1037 dma_sync_single_for_device(ctx->dev, edesc->dma_link_tbl, 1081 dma_sync_single_for_device(ctx->dev, edesc->dma_link_tbl,
@@ -1053,17 +1097,17 @@ static int ipsec_esp(struct talitos_edesc *edesc, struct aead_request *areq,
1053/* 1097/*
1054 * derive number of elements in scatterlist 1098 * derive number of elements in scatterlist
1055 */ 1099 */
1056static int sg_count(struct scatterlist *sg_list, int nbytes, int *chained) 1100static int sg_count(struct scatterlist *sg_list, int nbytes, bool *chained)
1057{ 1101{
1058 struct scatterlist *sg = sg_list; 1102 struct scatterlist *sg = sg_list;
1059 int sg_nents = 0; 1103 int sg_nents = 0;
1060 1104
1061 *chained = 0; 1105 *chained = false;
1062 while (nbytes > 0) { 1106 while (nbytes > 0) {
1063 sg_nents++; 1107 sg_nents++;
1064 nbytes -= sg->length; 1108 nbytes -= sg->length;
1065 if (!sg_is_last(sg) && (sg + 1)->length == 0) 1109 if (!sg_is_last(sg) && (sg + 1)->length == 0)
1066 *chained = 1; 1110 *chained = true;
1067 sg = scatterwalk_sg_next(sg); 1111 sg = scatterwalk_sg_next(sg);
1068 } 1112 }
1069 1113
@@ -1132,17 +1176,21 @@ static size_t sg_copy_end_to_buffer(struct scatterlist *sgl, unsigned int nents,
1132 * allocate and map the extended descriptor 1176 * allocate and map the extended descriptor
1133 */ 1177 */
1134static struct talitos_edesc *talitos_edesc_alloc(struct device *dev, 1178static struct talitos_edesc *talitos_edesc_alloc(struct device *dev,
1179 struct scatterlist *assoc,
1135 struct scatterlist *src, 1180 struct scatterlist *src,
1136 struct scatterlist *dst, 1181 struct scatterlist *dst,
1137 int hash_result, 1182 u8 *iv,
1183 unsigned int assoclen,
1138 unsigned int cryptlen, 1184 unsigned int cryptlen,
1139 unsigned int authsize, 1185 unsigned int authsize,
1186 unsigned int ivsize,
1140 int icv_stashing, 1187 int icv_stashing,
1141 u32 cryptoflags) 1188 u32 cryptoflags)
1142{ 1189{
1143 struct talitos_edesc *edesc; 1190 struct talitos_edesc *edesc;
1144 int src_nents, dst_nents, alloc_len, dma_len; 1191 int assoc_nents = 0, src_nents, dst_nents, alloc_len, dma_len;
1145 int src_chained, dst_chained = 0; 1192 bool assoc_chained = false, src_chained = false, dst_chained = false;
1193 dma_addr_t iv_dma = 0;
1146 gfp_t flags = cryptoflags & CRYPTO_TFM_REQ_MAY_SLEEP ? GFP_KERNEL : 1194 gfp_t flags = cryptoflags & CRYPTO_TFM_REQ_MAY_SLEEP ? GFP_KERNEL :
1147 GFP_ATOMIC; 1195 GFP_ATOMIC;
1148 1196
@@ -1151,10 +1199,29 @@ static struct talitos_edesc *talitos_edesc_alloc(struct device *dev,
1151 return ERR_PTR(-EINVAL); 1199 return ERR_PTR(-EINVAL);
1152 } 1200 }
1153 1201
1202 if (iv)
1203 iv_dma = dma_map_single(dev, iv, ivsize, DMA_TO_DEVICE);
1204
1205 if (assoc) {
1206 /*
1207 * Currently it is assumed that iv is provided whenever assoc
1208 * is.
1209 */
1210 BUG_ON(!iv);
1211
1212 assoc_nents = sg_count(assoc, assoclen, &assoc_chained);
1213 talitos_map_sg(dev, assoc, assoc_nents, DMA_TO_DEVICE,
1214 assoc_chained);
1215 assoc_nents = (assoc_nents == 1) ? 0 : assoc_nents;
1216
1217 if (assoc_nents || sg_dma_address(assoc) + assoclen != iv_dma)
1218 assoc_nents = assoc_nents ? assoc_nents + 1 : 2;
1219 }
1220
1154 src_nents = sg_count(src, cryptlen + authsize, &src_chained); 1221 src_nents = sg_count(src, cryptlen + authsize, &src_chained);
1155 src_nents = (src_nents == 1) ? 0 : src_nents; 1222 src_nents = (src_nents == 1) ? 0 : src_nents;
1156 1223
1157 if (hash_result) { 1224 if (!dst) {
1158 dst_nents = 0; 1225 dst_nents = 0;
1159 } else { 1226 } else {
1160 if (dst == src) { 1227 if (dst == src) {
@@ -1172,9 +1239,9 @@ static struct talitos_edesc *talitos_edesc_alloc(struct device *dev,
1172 * and the ICV data itself 1239 * and the ICV data itself
1173 */ 1240 */
1174 alloc_len = sizeof(struct talitos_edesc); 1241 alloc_len = sizeof(struct talitos_edesc);
1175 if (src_nents || dst_nents) { 1242 if (assoc_nents || src_nents || dst_nents) {
1176 dma_len = (src_nents + dst_nents + 2) * 1243 dma_len = (src_nents + dst_nents + 2 + assoc_nents) *
1177 sizeof(struct talitos_ptr) + authsize; 1244 sizeof(struct talitos_ptr) + authsize;
1178 alloc_len += dma_len; 1245 alloc_len += dma_len;
1179 } else { 1246 } else {
1180 dma_len = 0; 1247 dma_len = 0;
@@ -1183,14 +1250,20 @@ static struct talitos_edesc *talitos_edesc_alloc(struct device *dev,
1183 1250
1184 edesc = kmalloc(alloc_len, GFP_DMA | flags); 1251 edesc = kmalloc(alloc_len, GFP_DMA | flags);
1185 if (!edesc) { 1252 if (!edesc) {
1253 talitos_unmap_sg_chain(dev, assoc, DMA_TO_DEVICE);
1254 if (iv_dma)
1255 dma_unmap_single(dev, iv_dma, ivsize, DMA_TO_DEVICE);
1186 dev_err(dev, "could not allocate edescriptor\n"); 1256 dev_err(dev, "could not allocate edescriptor\n");
1187 return ERR_PTR(-ENOMEM); 1257 return ERR_PTR(-ENOMEM);
1188 } 1258 }
1189 1259
1260 edesc->assoc_nents = assoc_nents;
1190 edesc->src_nents = src_nents; 1261 edesc->src_nents = src_nents;
1191 edesc->dst_nents = dst_nents; 1262 edesc->dst_nents = dst_nents;
1192 edesc->src_is_chained = src_chained; 1263 edesc->assoc_chained = assoc_chained;
1193 edesc->dst_is_chained = dst_chained; 1264 edesc->src_chained = src_chained;
1265 edesc->dst_chained = dst_chained;
1266 edesc->iv_dma = iv_dma;
1194 edesc->dma_len = dma_len; 1267 edesc->dma_len = dma_len;
1195 if (dma_len) 1268 if (dma_len)
1196 edesc->dma_link_tbl = dma_map_single(dev, &edesc->link_tbl[0], 1269 edesc->dma_link_tbl = dma_map_single(dev, &edesc->link_tbl[0],
@@ -1200,14 +1273,16 @@ static struct talitos_edesc *talitos_edesc_alloc(struct device *dev,
1200 return edesc; 1273 return edesc;
1201} 1274}
1202 1275
1203static struct talitos_edesc *aead_edesc_alloc(struct aead_request *areq, 1276static struct talitos_edesc *aead_edesc_alloc(struct aead_request *areq, u8 *iv,
1204 int icv_stashing) 1277 int icv_stashing)
1205{ 1278{
1206 struct crypto_aead *authenc = crypto_aead_reqtfm(areq); 1279 struct crypto_aead *authenc = crypto_aead_reqtfm(areq);
1207 struct talitos_ctx *ctx = crypto_aead_ctx(authenc); 1280 struct talitos_ctx *ctx = crypto_aead_ctx(authenc);
1281 unsigned int ivsize = crypto_aead_ivsize(authenc);
1208 1282
1209 return talitos_edesc_alloc(ctx->dev, areq->src, areq->dst, 0, 1283 return talitos_edesc_alloc(ctx->dev, areq->assoc, areq->src, areq->dst,
1210 areq->cryptlen, ctx->authsize, icv_stashing, 1284 iv, areq->assoclen, areq->cryptlen,
1285 ctx->authsize, ivsize, icv_stashing,
1211 areq->base.flags); 1286 areq->base.flags);
1212} 1287}
1213 1288
@@ -1218,14 +1293,14 @@ static int aead_encrypt(struct aead_request *req)
1218 struct talitos_edesc *edesc; 1293 struct talitos_edesc *edesc;
1219 1294
1220 /* allocate extended descriptor */ 1295 /* allocate extended descriptor */
1221 edesc = aead_edesc_alloc(req, 0); 1296 edesc = aead_edesc_alloc(req, req->iv, 0);
1222 if (IS_ERR(edesc)) 1297 if (IS_ERR(edesc))
1223 return PTR_ERR(edesc); 1298 return PTR_ERR(edesc);
1224 1299
1225 /* set encrypt */ 1300 /* set encrypt */
1226 edesc->desc.hdr = ctx->desc_hdr_template | DESC_HDR_MODE0_ENCRYPT; 1301 edesc->desc.hdr = ctx->desc_hdr_template | DESC_HDR_MODE0_ENCRYPT;
1227 1302
1228 return ipsec_esp(edesc, req, NULL, 0, ipsec_esp_encrypt_done); 1303 return ipsec_esp(edesc, req, 0, ipsec_esp_encrypt_done);
1229} 1304}
1230 1305
1231static int aead_decrypt(struct aead_request *req) 1306static int aead_decrypt(struct aead_request *req)
@@ -1241,7 +1316,7 @@ static int aead_decrypt(struct aead_request *req)
1241 req->cryptlen -= authsize; 1316 req->cryptlen -= authsize;
1242 1317
1243 /* allocate extended descriptor */ 1318 /* allocate extended descriptor */
1244 edesc = aead_edesc_alloc(req, 1); 1319 edesc = aead_edesc_alloc(req, req->iv, 1);
1245 if (IS_ERR(edesc)) 1320 if (IS_ERR(edesc))
1246 return PTR_ERR(edesc); 1321 return PTR_ERR(edesc);
1247 1322
@@ -1257,9 +1332,7 @@ static int aead_decrypt(struct aead_request *req)
1257 /* reset integrity check result bits */ 1332 /* reset integrity check result bits */
1258 edesc->desc.hdr_lo = 0; 1333 edesc->desc.hdr_lo = 0;
1259 1334
1260 return ipsec_esp(edesc, req, NULL, 0, 1335 return ipsec_esp(edesc, req, 0, ipsec_esp_decrypt_hwauth_done);
1261 ipsec_esp_decrypt_hwauth_done);
1262
1263 } 1336 }
1264 1337
1265 /* Have to check the ICV with software */ 1338 /* Have to check the ICV with software */
@@ -1268,7 +1341,8 @@ static int aead_decrypt(struct aead_request *req)
1268 /* stash incoming ICV for later cmp with ICV generated by the h/w */ 1341 /* stash incoming ICV for later cmp with ICV generated by the h/w */
1269 if (edesc->dma_len) 1342 if (edesc->dma_len)
1270 icvdata = &edesc->link_tbl[edesc->src_nents + 1343 icvdata = &edesc->link_tbl[edesc->src_nents +
1271 edesc->dst_nents + 2]; 1344 edesc->dst_nents + 2 +
1345 edesc->assoc_nents];
1272 else 1346 else
1273 icvdata = &edesc->link_tbl[0]; 1347 icvdata = &edesc->link_tbl[0];
1274 1348
@@ -1277,7 +1351,7 @@ static int aead_decrypt(struct aead_request *req)
1277 memcpy(icvdata, (char *)sg_virt(sg) + sg->length - ctx->authsize, 1351 memcpy(icvdata, (char *)sg_virt(sg) + sg->length - ctx->authsize,
1278 ctx->authsize); 1352 ctx->authsize);
1279 1353
1280 return ipsec_esp(edesc, req, NULL, 0, ipsec_esp_decrypt_swauth_done); 1354 return ipsec_esp(edesc, req, 0, ipsec_esp_decrypt_swauth_done);
1281} 1355}
1282 1356
1283static int aead_givencrypt(struct aead_givcrypt_request *req) 1357static int aead_givencrypt(struct aead_givcrypt_request *req)
@@ -1288,7 +1362,7 @@ static int aead_givencrypt(struct aead_givcrypt_request *req)
1288 struct talitos_edesc *edesc; 1362 struct talitos_edesc *edesc;
1289 1363
1290 /* allocate extended descriptor */ 1364 /* allocate extended descriptor */
1291 edesc = aead_edesc_alloc(areq, 0); 1365 edesc = aead_edesc_alloc(areq, req->giv, 0);
1292 if (IS_ERR(edesc)) 1366 if (IS_ERR(edesc))
1293 return PTR_ERR(edesc); 1367 return PTR_ERR(edesc);
1294 1368
@@ -1299,8 +1373,7 @@ static int aead_givencrypt(struct aead_givcrypt_request *req)
1299 /* avoid consecutive packets going out with same IV */ 1373 /* avoid consecutive packets going out with same IV */
1300 *(__be64 *)req->giv ^= cpu_to_be64(req->seq); 1374 *(__be64 *)req->giv ^= cpu_to_be64(req->seq);
1301 1375
1302 return ipsec_esp(edesc, areq, req->giv, req->seq, 1376 return ipsec_esp(edesc, areq, req->seq, ipsec_esp_encrypt_done);
1303 ipsec_esp_encrypt_done);
1304} 1377}
1305 1378
1306static int ablkcipher_setkey(struct crypto_ablkcipher *cipher, 1379static int ablkcipher_setkey(struct crypto_ablkcipher *cipher,
@@ -1356,7 +1429,7 @@ static int common_nonsnoop(struct talitos_edesc *edesc,
1356 struct device *dev = ctx->dev; 1429 struct device *dev = ctx->dev;
1357 struct talitos_desc *desc = &edesc->desc; 1430 struct talitos_desc *desc = &edesc->desc;
1358 unsigned int cryptlen = areq->nbytes; 1431 unsigned int cryptlen = areq->nbytes;
1359 unsigned int ivsize; 1432 unsigned int ivsize = crypto_ablkcipher_ivsize(cipher);
1360 int sg_count, ret; 1433 int sg_count, ret;
1361 1434
1362 /* first DWORD empty */ 1435 /* first DWORD empty */
@@ -1365,9 +1438,9 @@ static int common_nonsnoop(struct talitos_edesc *edesc,
1365 desc->ptr[0].j_extent = 0; 1438 desc->ptr[0].j_extent = 0;
1366 1439
1367 /* cipher iv */ 1440 /* cipher iv */
1368 ivsize = crypto_ablkcipher_ivsize(cipher); 1441 to_talitos_ptr(&desc->ptr[1], edesc->iv_dma);
1369 map_single_talitos_ptr(dev, &desc->ptr[1], ivsize, areq->info, 0, 1442 desc->ptr[1].len = cpu_to_be16(ivsize);
1370 DMA_TO_DEVICE); 1443 desc->ptr[1].j_extent = 0;
1371 1444
1372 /* cipher key */ 1445 /* cipher key */
1373 map_single_talitos_ptr(dev, &desc->ptr[2], ctx->keylen, 1446 map_single_talitos_ptr(dev, &desc->ptr[2], ctx->keylen,
@@ -1382,7 +1455,7 @@ static int common_nonsnoop(struct talitos_edesc *edesc,
1382 sg_count = talitos_map_sg(dev, areq->src, edesc->src_nents ? : 1, 1455 sg_count = talitos_map_sg(dev, areq->src, edesc->src_nents ? : 1,
1383 (areq->src == areq->dst) ? DMA_BIDIRECTIONAL 1456 (areq->src == areq->dst) ? DMA_BIDIRECTIONAL
1384 : DMA_TO_DEVICE, 1457 : DMA_TO_DEVICE,
1385 edesc->src_is_chained); 1458 edesc->src_chained);
1386 1459
1387 if (sg_count == 1) { 1460 if (sg_count == 1) {
1388 to_talitos_ptr(&desc->ptr[3], sg_dma_address(areq->src)); 1461 to_talitos_ptr(&desc->ptr[3], sg_dma_address(areq->src));
@@ -1409,8 +1482,7 @@ static int common_nonsnoop(struct talitos_edesc *edesc,
1409 if (areq->src != areq->dst) 1482 if (areq->src != areq->dst)
1410 sg_count = talitos_map_sg(dev, areq->dst, 1483 sg_count = talitos_map_sg(dev, areq->dst,
1411 edesc->dst_nents ? : 1, 1484 edesc->dst_nents ? : 1,
1412 DMA_FROM_DEVICE, 1485 DMA_FROM_DEVICE, edesc->dst_chained);
1413 edesc->dst_is_chained);
1414 1486
1415 if (sg_count == 1) { 1487 if (sg_count == 1) {
1416 to_talitos_ptr(&desc->ptr[4], sg_dma_address(areq->dst)); 1488 to_talitos_ptr(&desc->ptr[4], sg_dma_address(areq->dst));
@@ -1450,9 +1522,11 @@ static struct talitos_edesc *ablkcipher_edesc_alloc(struct ablkcipher_request *
1450{ 1522{
1451 struct crypto_ablkcipher *cipher = crypto_ablkcipher_reqtfm(areq); 1523 struct crypto_ablkcipher *cipher = crypto_ablkcipher_reqtfm(areq);
1452 struct talitos_ctx *ctx = crypto_ablkcipher_ctx(cipher); 1524 struct talitos_ctx *ctx = crypto_ablkcipher_ctx(cipher);
1525 unsigned int ivsize = crypto_ablkcipher_ivsize(cipher);
1453 1526
1454 return talitos_edesc_alloc(ctx->dev, areq->src, areq->dst, 0, 1527 return talitos_edesc_alloc(ctx->dev, NULL, areq->src, areq->dst,
1455 areq->nbytes, 0, 0, areq->base.flags); 1528 areq->info, 0, areq->nbytes, 0, ivsize, 0,
1529 areq->base.flags);
1456} 1530}
1457 1531
1458static int ablkcipher_encrypt(struct ablkcipher_request *areq) 1532static int ablkcipher_encrypt(struct ablkcipher_request *areq)
@@ -1578,8 +1652,7 @@ static int common_nonsnoop_hash(struct talitos_edesc *edesc,
1578 1652
1579 sg_count = talitos_map_sg(dev, req_ctx->psrc, 1653 sg_count = talitos_map_sg(dev, req_ctx->psrc,
1580 edesc->src_nents ? : 1, 1654 edesc->src_nents ? : 1,
1581 DMA_TO_DEVICE, 1655 DMA_TO_DEVICE, edesc->src_chained);
1582 edesc->src_is_chained);
1583 1656
1584 if (sg_count == 1) { 1657 if (sg_count == 1) {
1585 to_talitos_ptr(&desc->ptr[3], sg_dma_address(req_ctx->psrc)); 1658 to_talitos_ptr(&desc->ptr[3], sg_dma_address(req_ctx->psrc));
@@ -1631,8 +1704,8 @@ static struct talitos_edesc *ahash_edesc_alloc(struct ahash_request *areq,
1631 struct talitos_ctx *ctx = crypto_ahash_ctx(tfm); 1704 struct talitos_ctx *ctx = crypto_ahash_ctx(tfm);
1632 struct talitos_ahash_req_ctx *req_ctx = ahash_request_ctx(areq); 1705 struct talitos_ahash_req_ctx *req_ctx = ahash_request_ctx(areq);
1633 1706
1634 return talitos_edesc_alloc(ctx->dev, req_ctx->psrc, NULL, 1, 1707 return talitos_edesc_alloc(ctx->dev, NULL, req_ctx->psrc, NULL, NULL, 0,
1635 nbytes, 0, 0, areq->base.flags); 1708 nbytes, 0, 0, 0, areq->base.flags);
1636} 1709}
1637 1710
1638static int ahash_init(struct ahash_request *areq) 1711static int ahash_init(struct ahash_request *areq)
@@ -1690,7 +1763,7 @@ static int ahash_process_req(struct ahash_request *areq, unsigned int nbytes)
1690 unsigned int nbytes_to_hash; 1763 unsigned int nbytes_to_hash;
1691 unsigned int to_hash_later; 1764 unsigned int to_hash_later;
1692 unsigned int nsg; 1765 unsigned int nsg;
1693 int chained; 1766 bool chained;
1694 1767
1695 if (!req_ctx->last && (nbytes + req_ctx->nbuf <= blocksize)) { 1768 if (!req_ctx->last && (nbytes + req_ctx->nbuf <= blocksize)) {
1696 /* Buffer up to one whole block */ 1769 /* Buffer up to one whole block */
@@ -1902,21 +1975,18 @@ struct talitos_alg_template {
1902}; 1975};
1903 1976
1904static struct talitos_alg_template driver_algs[] = { 1977static struct talitos_alg_template driver_algs[] = {
1905 /* AEAD algorithms. These use a single-pass ipsec_esp descriptor */ 1978 /*
1979 * AEAD algorithms. These use a single-pass ipsec_esp descriptor.
1980 * authencesn(*,*) is also registered, although not present
1981 * explicitly here.
1982 */
1906 { .type = CRYPTO_ALG_TYPE_AEAD, 1983 { .type = CRYPTO_ALG_TYPE_AEAD,
1907 .alg.crypto = { 1984 .alg.crypto = {
1908 .cra_name = "authenc(hmac(sha1),cbc(aes))", 1985 .cra_name = "authenc(hmac(sha1),cbc(aes))",
1909 .cra_driver_name = "authenc-hmac-sha1-cbc-aes-talitos", 1986 .cra_driver_name = "authenc-hmac-sha1-cbc-aes-talitos",
1910 .cra_blocksize = AES_BLOCK_SIZE, 1987 .cra_blocksize = AES_BLOCK_SIZE,
1911 .cra_flags = CRYPTO_ALG_TYPE_AEAD | CRYPTO_ALG_ASYNC, 1988 .cra_flags = CRYPTO_ALG_TYPE_AEAD | CRYPTO_ALG_ASYNC,
1912 .cra_type = &crypto_aead_type,
1913 .cra_aead = { 1989 .cra_aead = {
1914 .setkey = aead_setkey,
1915 .setauthsize = aead_setauthsize,
1916 .encrypt = aead_encrypt,
1917 .decrypt = aead_decrypt,
1918 .givencrypt = aead_givencrypt,
1919 .geniv = "<built-in>",
1920 .ivsize = AES_BLOCK_SIZE, 1990 .ivsize = AES_BLOCK_SIZE,
1921 .maxauthsize = SHA1_DIGEST_SIZE, 1991 .maxauthsize = SHA1_DIGEST_SIZE,
1922 } 1992 }
@@ -1935,14 +2005,7 @@ static struct talitos_alg_template driver_algs[] = {
1935 .cra_driver_name = "authenc-hmac-sha1-cbc-3des-talitos", 2005 .cra_driver_name = "authenc-hmac-sha1-cbc-3des-talitos",
1936 .cra_blocksize = DES3_EDE_BLOCK_SIZE, 2006 .cra_blocksize = DES3_EDE_BLOCK_SIZE,
1937 .cra_flags = CRYPTO_ALG_TYPE_AEAD | CRYPTO_ALG_ASYNC, 2007 .cra_flags = CRYPTO_ALG_TYPE_AEAD | CRYPTO_ALG_ASYNC,
1938 .cra_type = &crypto_aead_type,
1939 .cra_aead = { 2008 .cra_aead = {
1940 .setkey = aead_setkey,
1941 .setauthsize = aead_setauthsize,
1942 .encrypt = aead_encrypt,
1943 .decrypt = aead_decrypt,
1944 .givencrypt = aead_givencrypt,
1945 .geniv = "<built-in>",
1946 .ivsize = DES3_EDE_BLOCK_SIZE, 2009 .ivsize = DES3_EDE_BLOCK_SIZE,
1947 .maxauthsize = SHA1_DIGEST_SIZE, 2010 .maxauthsize = SHA1_DIGEST_SIZE,
1948 } 2011 }
@@ -1962,14 +2025,7 @@ static struct talitos_alg_template driver_algs[] = {
1962 .cra_driver_name = "authenc-hmac-sha224-cbc-aes-talitos", 2025 .cra_driver_name = "authenc-hmac-sha224-cbc-aes-talitos",
1963 .cra_blocksize = AES_BLOCK_SIZE, 2026 .cra_blocksize = AES_BLOCK_SIZE,
1964 .cra_flags = CRYPTO_ALG_TYPE_AEAD | CRYPTO_ALG_ASYNC, 2027 .cra_flags = CRYPTO_ALG_TYPE_AEAD | CRYPTO_ALG_ASYNC,
1965 .cra_type = &crypto_aead_type,
1966 .cra_aead = { 2028 .cra_aead = {
1967 .setkey = aead_setkey,
1968 .setauthsize = aead_setauthsize,
1969 .encrypt = aead_encrypt,
1970 .decrypt = aead_decrypt,
1971 .givencrypt = aead_givencrypt,
1972 .geniv = "<built-in>",
1973 .ivsize = AES_BLOCK_SIZE, 2029 .ivsize = AES_BLOCK_SIZE,
1974 .maxauthsize = SHA224_DIGEST_SIZE, 2030 .maxauthsize = SHA224_DIGEST_SIZE,
1975 } 2031 }
@@ -1988,14 +2044,7 @@ static struct talitos_alg_template driver_algs[] = {
1988 .cra_driver_name = "authenc-hmac-sha224-cbc-3des-talitos", 2044 .cra_driver_name = "authenc-hmac-sha224-cbc-3des-talitos",
1989 .cra_blocksize = DES3_EDE_BLOCK_SIZE, 2045 .cra_blocksize = DES3_EDE_BLOCK_SIZE,
1990 .cra_flags = CRYPTO_ALG_TYPE_AEAD | CRYPTO_ALG_ASYNC, 2046 .cra_flags = CRYPTO_ALG_TYPE_AEAD | CRYPTO_ALG_ASYNC,
1991 .cra_type = &crypto_aead_type,
1992 .cra_aead = { 2047 .cra_aead = {
1993 .setkey = aead_setkey,
1994 .setauthsize = aead_setauthsize,
1995 .encrypt = aead_encrypt,
1996 .decrypt = aead_decrypt,
1997 .givencrypt = aead_givencrypt,
1998 .geniv = "<built-in>",
1999 .ivsize = DES3_EDE_BLOCK_SIZE, 2048 .ivsize = DES3_EDE_BLOCK_SIZE,
2000 .maxauthsize = SHA224_DIGEST_SIZE, 2049 .maxauthsize = SHA224_DIGEST_SIZE,
2001 } 2050 }
@@ -2015,14 +2064,7 @@ static struct talitos_alg_template driver_algs[] = {
2015 .cra_driver_name = "authenc-hmac-sha256-cbc-aes-talitos", 2064 .cra_driver_name = "authenc-hmac-sha256-cbc-aes-talitos",
2016 .cra_blocksize = AES_BLOCK_SIZE, 2065 .cra_blocksize = AES_BLOCK_SIZE,
2017 .cra_flags = CRYPTO_ALG_TYPE_AEAD | CRYPTO_ALG_ASYNC, 2066 .cra_flags = CRYPTO_ALG_TYPE_AEAD | CRYPTO_ALG_ASYNC,
2018 .cra_type = &crypto_aead_type,
2019 .cra_aead = { 2067 .cra_aead = {
2020 .setkey = aead_setkey,
2021 .setauthsize = aead_setauthsize,
2022 .encrypt = aead_encrypt,
2023 .decrypt = aead_decrypt,
2024 .givencrypt = aead_givencrypt,
2025 .geniv = "<built-in>",
2026 .ivsize = AES_BLOCK_SIZE, 2068 .ivsize = AES_BLOCK_SIZE,
2027 .maxauthsize = SHA256_DIGEST_SIZE, 2069 .maxauthsize = SHA256_DIGEST_SIZE,
2028 } 2070 }
@@ -2041,14 +2083,7 @@ static struct talitos_alg_template driver_algs[] = {
2041 .cra_driver_name = "authenc-hmac-sha256-cbc-3des-talitos", 2083 .cra_driver_name = "authenc-hmac-sha256-cbc-3des-talitos",
2042 .cra_blocksize = DES3_EDE_BLOCK_SIZE, 2084 .cra_blocksize = DES3_EDE_BLOCK_SIZE,
2043 .cra_flags = CRYPTO_ALG_TYPE_AEAD | CRYPTO_ALG_ASYNC, 2085 .cra_flags = CRYPTO_ALG_TYPE_AEAD | CRYPTO_ALG_ASYNC,
2044 .cra_type = &crypto_aead_type,
2045 .cra_aead = { 2086 .cra_aead = {
2046 .setkey = aead_setkey,
2047 .setauthsize = aead_setauthsize,
2048 .encrypt = aead_encrypt,
2049 .decrypt = aead_decrypt,
2050 .givencrypt = aead_givencrypt,
2051 .geniv = "<built-in>",
2052 .ivsize = DES3_EDE_BLOCK_SIZE, 2087 .ivsize = DES3_EDE_BLOCK_SIZE,
2053 .maxauthsize = SHA256_DIGEST_SIZE, 2088 .maxauthsize = SHA256_DIGEST_SIZE,
2054 } 2089 }
@@ -2068,14 +2103,7 @@ static struct talitos_alg_template driver_algs[] = {
2068 .cra_driver_name = "authenc-hmac-sha384-cbc-aes-talitos", 2103 .cra_driver_name = "authenc-hmac-sha384-cbc-aes-talitos",
2069 .cra_blocksize = AES_BLOCK_SIZE, 2104 .cra_blocksize = AES_BLOCK_SIZE,
2070 .cra_flags = CRYPTO_ALG_TYPE_AEAD | CRYPTO_ALG_ASYNC, 2105 .cra_flags = CRYPTO_ALG_TYPE_AEAD | CRYPTO_ALG_ASYNC,
2071 .cra_type = &crypto_aead_type,
2072 .cra_aead = { 2106 .cra_aead = {
2073 .setkey = aead_setkey,
2074 .setauthsize = aead_setauthsize,
2075 .encrypt = aead_encrypt,
2076 .decrypt = aead_decrypt,
2077 .givencrypt = aead_givencrypt,
2078 .geniv = "<built-in>",
2079 .ivsize = AES_BLOCK_SIZE, 2107 .ivsize = AES_BLOCK_SIZE,
2080 .maxauthsize = SHA384_DIGEST_SIZE, 2108 .maxauthsize = SHA384_DIGEST_SIZE,
2081 } 2109 }
@@ -2094,14 +2122,7 @@ static struct talitos_alg_template driver_algs[] = {
2094 .cra_driver_name = "authenc-hmac-sha384-cbc-3des-talitos", 2122 .cra_driver_name = "authenc-hmac-sha384-cbc-3des-talitos",
2095 .cra_blocksize = DES3_EDE_BLOCK_SIZE, 2123 .cra_blocksize = DES3_EDE_BLOCK_SIZE,
2096 .cra_flags = CRYPTO_ALG_TYPE_AEAD | CRYPTO_ALG_ASYNC, 2124 .cra_flags = CRYPTO_ALG_TYPE_AEAD | CRYPTO_ALG_ASYNC,
2097 .cra_type = &crypto_aead_type,
2098 .cra_aead = { 2125 .cra_aead = {
2099 .setkey = aead_setkey,
2100 .setauthsize = aead_setauthsize,
2101 .encrypt = aead_encrypt,
2102 .decrypt = aead_decrypt,
2103 .givencrypt = aead_givencrypt,
2104 .geniv = "<built-in>",
2105 .ivsize = DES3_EDE_BLOCK_SIZE, 2126 .ivsize = DES3_EDE_BLOCK_SIZE,
2106 .maxauthsize = SHA384_DIGEST_SIZE, 2127 .maxauthsize = SHA384_DIGEST_SIZE,
2107 } 2128 }
@@ -2121,14 +2142,7 @@ static struct talitos_alg_template driver_algs[] = {
2121 .cra_driver_name = "authenc-hmac-sha512-cbc-aes-talitos", 2142 .cra_driver_name = "authenc-hmac-sha512-cbc-aes-talitos",
2122 .cra_blocksize = AES_BLOCK_SIZE, 2143 .cra_blocksize = AES_BLOCK_SIZE,
2123 .cra_flags = CRYPTO_ALG_TYPE_AEAD | CRYPTO_ALG_ASYNC, 2144 .cra_flags = CRYPTO_ALG_TYPE_AEAD | CRYPTO_ALG_ASYNC,
2124 .cra_type = &crypto_aead_type,
2125 .cra_aead = { 2145 .cra_aead = {
2126 .setkey = aead_setkey,
2127 .setauthsize = aead_setauthsize,
2128 .encrypt = aead_encrypt,
2129 .decrypt = aead_decrypt,
2130 .givencrypt = aead_givencrypt,
2131 .geniv = "<built-in>",
2132 .ivsize = AES_BLOCK_SIZE, 2146 .ivsize = AES_BLOCK_SIZE,
2133 .maxauthsize = SHA512_DIGEST_SIZE, 2147 .maxauthsize = SHA512_DIGEST_SIZE,
2134 } 2148 }
@@ -2147,14 +2161,7 @@ static struct talitos_alg_template driver_algs[] = {
2147 .cra_driver_name = "authenc-hmac-sha512-cbc-3des-talitos", 2161 .cra_driver_name = "authenc-hmac-sha512-cbc-3des-talitos",
2148 .cra_blocksize = DES3_EDE_BLOCK_SIZE, 2162 .cra_blocksize = DES3_EDE_BLOCK_SIZE,
2149 .cra_flags = CRYPTO_ALG_TYPE_AEAD | CRYPTO_ALG_ASYNC, 2163 .cra_flags = CRYPTO_ALG_TYPE_AEAD | CRYPTO_ALG_ASYNC,
2150 .cra_type = &crypto_aead_type,
2151 .cra_aead = { 2164 .cra_aead = {
2152 .setkey = aead_setkey,
2153 .setauthsize = aead_setauthsize,
2154 .encrypt = aead_encrypt,
2155 .decrypt = aead_decrypt,
2156 .givencrypt = aead_givencrypt,
2157 .geniv = "<built-in>",
2158 .ivsize = DES3_EDE_BLOCK_SIZE, 2165 .ivsize = DES3_EDE_BLOCK_SIZE,
2159 .maxauthsize = SHA512_DIGEST_SIZE, 2166 .maxauthsize = SHA512_DIGEST_SIZE,
2160 } 2167 }
@@ -2174,14 +2181,7 @@ static struct talitos_alg_template driver_algs[] = {
2174 .cra_driver_name = "authenc-hmac-md5-cbc-aes-talitos", 2181 .cra_driver_name = "authenc-hmac-md5-cbc-aes-talitos",
2175 .cra_blocksize = AES_BLOCK_SIZE, 2182 .cra_blocksize = AES_BLOCK_SIZE,
2176 .cra_flags = CRYPTO_ALG_TYPE_AEAD | CRYPTO_ALG_ASYNC, 2183 .cra_flags = CRYPTO_ALG_TYPE_AEAD | CRYPTO_ALG_ASYNC,
2177 .cra_type = &crypto_aead_type,
2178 .cra_aead = { 2184 .cra_aead = {
2179 .setkey = aead_setkey,
2180 .setauthsize = aead_setauthsize,
2181 .encrypt = aead_encrypt,
2182 .decrypt = aead_decrypt,
2183 .givencrypt = aead_givencrypt,
2184 .geniv = "<built-in>",
2185 .ivsize = AES_BLOCK_SIZE, 2185 .ivsize = AES_BLOCK_SIZE,
2186 .maxauthsize = MD5_DIGEST_SIZE, 2186 .maxauthsize = MD5_DIGEST_SIZE,
2187 } 2187 }
@@ -2200,14 +2200,7 @@ static struct talitos_alg_template driver_algs[] = {
2200 .cra_driver_name = "authenc-hmac-md5-cbc-3des-talitos", 2200 .cra_driver_name = "authenc-hmac-md5-cbc-3des-talitos",
2201 .cra_blocksize = DES3_EDE_BLOCK_SIZE, 2201 .cra_blocksize = DES3_EDE_BLOCK_SIZE,
2202 .cra_flags = CRYPTO_ALG_TYPE_AEAD | CRYPTO_ALG_ASYNC, 2202 .cra_flags = CRYPTO_ALG_TYPE_AEAD | CRYPTO_ALG_ASYNC,
2203 .cra_type = &crypto_aead_type,
2204 .cra_aead = { 2203 .cra_aead = {
2205 .setkey = aead_setkey,
2206 .setauthsize = aead_setauthsize,
2207 .encrypt = aead_encrypt,
2208 .decrypt = aead_decrypt,
2209 .givencrypt = aead_givencrypt,
2210 .geniv = "<built-in>",
2211 .ivsize = DES3_EDE_BLOCK_SIZE, 2204 .ivsize = DES3_EDE_BLOCK_SIZE,
2212 .maxauthsize = MD5_DIGEST_SIZE, 2205 .maxauthsize = MD5_DIGEST_SIZE,
2213 } 2206 }
@@ -2229,12 +2222,7 @@ static struct talitos_alg_template driver_algs[] = {
2229 .cra_blocksize = AES_BLOCK_SIZE, 2222 .cra_blocksize = AES_BLOCK_SIZE,
2230 .cra_flags = CRYPTO_ALG_TYPE_ABLKCIPHER | 2223 .cra_flags = CRYPTO_ALG_TYPE_ABLKCIPHER |
2231 CRYPTO_ALG_ASYNC, 2224 CRYPTO_ALG_ASYNC,
2232 .cra_type = &crypto_ablkcipher_type,
2233 .cra_ablkcipher = { 2225 .cra_ablkcipher = {
2234 .setkey = ablkcipher_setkey,
2235 .encrypt = ablkcipher_encrypt,
2236 .decrypt = ablkcipher_decrypt,
2237 .geniv = "eseqiv",
2238 .min_keysize = AES_MIN_KEY_SIZE, 2226 .min_keysize = AES_MIN_KEY_SIZE,
2239 .max_keysize = AES_MAX_KEY_SIZE, 2227 .max_keysize = AES_MAX_KEY_SIZE,
2240 .ivsize = AES_BLOCK_SIZE, 2228 .ivsize = AES_BLOCK_SIZE,
@@ -2251,12 +2239,7 @@ static struct talitos_alg_template driver_algs[] = {
2251 .cra_blocksize = DES3_EDE_BLOCK_SIZE, 2239 .cra_blocksize = DES3_EDE_BLOCK_SIZE,
2252 .cra_flags = CRYPTO_ALG_TYPE_ABLKCIPHER | 2240 .cra_flags = CRYPTO_ALG_TYPE_ABLKCIPHER |
2253 CRYPTO_ALG_ASYNC, 2241 CRYPTO_ALG_ASYNC,
2254 .cra_type = &crypto_ablkcipher_type,
2255 .cra_ablkcipher = { 2242 .cra_ablkcipher = {
2256 .setkey = ablkcipher_setkey,
2257 .encrypt = ablkcipher_encrypt,
2258 .decrypt = ablkcipher_decrypt,
2259 .geniv = "eseqiv",
2260 .min_keysize = DES3_EDE_KEY_SIZE, 2243 .min_keysize = DES3_EDE_KEY_SIZE,
2261 .max_keysize = DES3_EDE_KEY_SIZE, 2244 .max_keysize = DES3_EDE_KEY_SIZE,
2262 .ivsize = DES3_EDE_BLOCK_SIZE, 2245 .ivsize = DES3_EDE_BLOCK_SIZE,
@@ -2270,11 +2253,6 @@ static struct talitos_alg_template driver_algs[] = {
2270 /* AHASH algorithms. */ 2253 /* AHASH algorithms. */
2271 { .type = CRYPTO_ALG_TYPE_AHASH, 2254 { .type = CRYPTO_ALG_TYPE_AHASH,
2272 .alg.hash = { 2255 .alg.hash = {
2273 .init = ahash_init,
2274 .update = ahash_update,
2275 .final = ahash_final,
2276 .finup = ahash_finup,
2277 .digest = ahash_digest,
2278 .halg.digestsize = MD5_DIGEST_SIZE, 2256 .halg.digestsize = MD5_DIGEST_SIZE,
2279 .halg.base = { 2257 .halg.base = {
2280 .cra_name = "md5", 2258 .cra_name = "md5",
@@ -2282,7 +2260,6 @@ static struct talitos_alg_template driver_algs[] = {
2282 .cra_blocksize = MD5_BLOCK_SIZE, 2260 .cra_blocksize = MD5_BLOCK_SIZE,
2283 .cra_flags = CRYPTO_ALG_TYPE_AHASH | 2261 .cra_flags = CRYPTO_ALG_TYPE_AHASH |
2284 CRYPTO_ALG_ASYNC, 2262 CRYPTO_ALG_ASYNC,
2285 .cra_type = &crypto_ahash_type
2286 } 2263 }
2287 }, 2264 },
2288 .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | 2265 .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU |
@@ -2291,11 +2268,6 @@ static struct talitos_alg_template driver_algs[] = {
2291 }, 2268 },
2292 { .type = CRYPTO_ALG_TYPE_AHASH, 2269 { .type = CRYPTO_ALG_TYPE_AHASH,
2293 .alg.hash = { 2270 .alg.hash = {
2294 .init = ahash_init,
2295 .update = ahash_update,
2296 .final = ahash_final,
2297 .finup = ahash_finup,
2298 .digest = ahash_digest,
2299 .halg.digestsize = SHA1_DIGEST_SIZE, 2271 .halg.digestsize = SHA1_DIGEST_SIZE,
2300 .halg.base = { 2272 .halg.base = {
2301 .cra_name = "sha1", 2273 .cra_name = "sha1",
@@ -2303,7 +2275,6 @@ static struct talitos_alg_template driver_algs[] = {
2303 .cra_blocksize = SHA1_BLOCK_SIZE, 2275 .cra_blocksize = SHA1_BLOCK_SIZE,
2304 .cra_flags = CRYPTO_ALG_TYPE_AHASH | 2276 .cra_flags = CRYPTO_ALG_TYPE_AHASH |
2305 CRYPTO_ALG_ASYNC, 2277 CRYPTO_ALG_ASYNC,
2306 .cra_type = &crypto_ahash_type
2307 } 2278 }
2308 }, 2279 },
2309 .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | 2280 .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU |
@@ -2312,11 +2283,6 @@ static struct talitos_alg_template driver_algs[] = {
2312 }, 2283 },
2313 { .type = CRYPTO_ALG_TYPE_AHASH, 2284 { .type = CRYPTO_ALG_TYPE_AHASH,
2314 .alg.hash = { 2285 .alg.hash = {
2315 .init = ahash_init,
2316 .update = ahash_update,
2317 .final = ahash_final,
2318 .finup = ahash_finup,
2319 .digest = ahash_digest,
2320 .halg.digestsize = SHA224_DIGEST_SIZE, 2286 .halg.digestsize = SHA224_DIGEST_SIZE,
2321 .halg.base = { 2287 .halg.base = {
2322 .cra_name = "sha224", 2288 .cra_name = "sha224",
@@ -2324,7 +2290,6 @@ static struct talitos_alg_template driver_algs[] = {
2324 .cra_blocksize = SHA224_BLOCK_SIZE, 2290 .cra_blocksize = SHA224_BLOCK_SIZE,
2325 .cra_flags = CRYPTO_ALG_TYPE_AHASH | 2291 .cra_flags = CRYPTO_ALG_TYPE_AHASH |
2326 CRYPTO_ALG_ASYNC, 2292 CRYPTO_ALG_ASYNC,
2327 .cra_type = &crypto_ahash_type
2328 } 2293 }
2329 }, 2294 },
2330 .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | 2295 .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU |
@@ -2333,11 +2298,6 @@ static struct talitos_alg_template driver_algs[] = {
2333 }, 2298 },
2334 { .type = CRYPTO_ALG_TYPE_AHASH, 2299 { .type = CRYPTO_ALG_TYPE_AHASH,
2335 .alg.hash = { 2300 .alg.hash = {
2336 .init = ahash_init,
2337 .update = ahash_update,
2338 .final = ahash_final,
2339 .finup = ahash_finup,
2340 .digest = ahash_digest,
2341 .halg.digestsize = SHA256_DIGEST_SIZE, 2301 .halg.digestsize = SHA256_DIGEST_SIZE,
2342 .halg.base = { 2302 .halg.base = {
2343 .cra_name = "sha256", 2303 .cra_name = "sha256",
@@ -2345,7 +2305,6 @@ static struct talitos_alg_template driver_algs[] = {
2345 .cra_blocksize = SHA256_BLOCK_SIZE, 2305 .cra_blocksize = SHA256_BLOCK_SIZE,
2346 .cra_flags = CRYPTO_ALG_TYPE_AHASH | 2306 .cra_flags = CRYPTO_ALG_TYPE_AHASH |
2347 CRYPTO_ALG_ASYNC, 2307 CRYPTO_ALG_ASYNC,
2348 .cra_type = &crypto_ahash_type
2349 } 2308 }
2350 }, 2309 },
2351 .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | 2310 .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU |
@@ -2354,11 +2313,6 @@ static struct talitos_alg_template driver_algs[] = {
2354 }, 2313 },
2355 { .type = CRYPTO_ALG_TYPE_AHASH, 2314 { .type = CRYPTO_ALG_TYPE_AHASH,
2356 .alg.hash = { 2315 .alg.hash = {
2357 .init = ahash_init,
2358 .update = ahash_update,
2359 .final = ahash_final,
2360 .finup = ahash_finup,
2361 .digest = ahash_digest,
2362 .halg.digestsize = SHA384_DIGEST_SIZE, 2316 .halg.digestsize = SHA384_DIGEST_SIZE,
2363 .halg.base = { 2317 .halg.base = {
2364 .cra_name = "sha384", 2318 .cra_name = "sha384",
@@ -2366,7 +2320,6 @@ static struct talitos_alg_template driver_algs[] = {
2366 .cra_blocksize = SHA384_BLOCK_SIZE, 2320 .cra_blocksize = SHA384_BLOCK_SIZE,
2367 .cra_flags = CRYPTO_ALG_TYPE_AHASH | 2321 .cra_flags = CRYPTO_ALG_TYPE_AHASH |
2368 CRYPTO_ALG_ASYNC, 2322 CRYPTO_ALG_ASYNC,
2369 .cra_type = &crypto_ahash_type
2370 } 2323 }
2371 }, 2324 },
2372 .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | 2325 .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU |
@@ -2375,11 +2328,6 @@ static struct talitos_alg_template driver_algs[] = {
2375 }, 2328 },
2376 { .type = CRYPTO_ALG_TYPE_AHASH, 2329 { .type = CRYPTO_ALG_TYPE_AHASH,
2377 .alg.hash = { 2330 .alg.hash = {
2378 .init = ahash_init,
2379 .update = ahash_update,
2380 .final = ahash_final,
2381 .finup = ahash_finup,
2382 .digest = ahash_digest,
2383 .halg.digestsize = SHA512_DIGEST_SIZE, 2331 .halg.digestsize = SHA512_DIGEST_SIZE,
2384 .halg.base = { 2332 .halg.base = {
2385 .cra_name = "sha512", 2333 .cra_name = "sha512",
@@ -2387,7 +2335,6 @@ static struct talitos_alg_template driver_algs[] = {
2387 .cra_blocksize = SHA512_BLOCK_SIZE, 2335 .cra_blocksize = SHA512_BLOCK_SIZE,
2388 .cra_flags = CRYPTO_ALG_TYPE_AHASH | 2336 .cra_flags = CRYPTO_ALG_TYPE_AHASH |
2389 CRYPTO_ALG_ASYNC, 2337 CRYPTO_ALG_ASYNC,
2390 .cra_type = &crypto_ahash_type
2391 } 2338 }
2392 }, 2339 },
2393 .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | 2340 .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU |
@@ -2396,12 +2343,6 @@ static struct talitos_alg_template driver_algs[] = {
2396 }, 2343 },
2397 { .type = CRYPTO_ALG_TYPE_AHASH, 2344 { .type = CRYPTO_ALG_TYPE_AHASH,
2398 .alg.hash = { 2345 .alg.hash = {
2399 .init = ahash_init,
2400 .update = ahash_update,
2401 .final = ahash_final,
2402 .finup = ahash_finup,
2403 .digest = ahash_digest,
2404 .setkey = ahash_setkey,
2405 .halg.digestsize = MD5_DIGEST_SIZE, 2346 .halg.digestsize = MD5_DIGEST_SIZE,
2406 .halg.base = { 2347 .halg.base = {
2407 .cra_name = "hmac(md5)", 2348 .cra_name = "hmac(md5)",
@@ -2409,7 +2350,6 @@ static struct talitos_alg_template driver_algs[] = {
2409 .cra_blocksize = MD5_BLOCK_SIZE, 2350 .cra_blocksize = MD5_BLOCK_SIZE,
2410 .cra_flags = CRYPTO_ALG_TYPE_AHASH | 2351 .cra_flags = CRYPTO_ALG_TYPE_AHASH |
2411 CRYPTO_ALG_ASYNC, 2352 CRYPTO_ALG_ASYNC,
2412 .cra_type = &crypto_ahash_type
2413 } 2353 }
2414 }, 2354 },
2415 .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | 2355 .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU |
@@ -2418,12 +2358,6 @@ static struct talitos_alg_template driver_algs[] = {
2418 }, 2358 },
2419 { .type = CRYPTO_ALG_TYPE_AHASH, 2359 { .type = CRYPTO_ALG_TYPE_AHASH,
2420 .alg.hash = { 2360 .alg.hash = {
2421 .init = ahash_init,
2422 .update = ahash_update,
2423 .final = ahash_final,
2424 .finup = ahash_finup,
2425 .digest = ahash_digest,
2426 .setkey = ahash_setkey,
2427 .halg.digestsize = SHA1_DIGEST_SIZE, 2361 .halg.digestsize = SHA1_DIGEST_SIZE,
2428 .halg.base = { 2362 .halg.base = {
2429 .cra_name = "hmac(sha1)", 2363 .cra_name = "hmac(sha1)",
@@ -2431,7 +2365,6 @@ static struct talitos_alg_template driver_algs[] = {
2431 .cra_blocksize = SHA1_BLOCK_SIZE, 2365 .cra_blocksize = SHA1_BLOCK_SIZE,
2432 .cra_flags = CRYPTO_ALG_TYPE_AHASH | 2366 .cra_flags = CRYPTO_ALG_TYPE_AHASH |
2433 CRYPTO_ALG_ASYNC, 2367 CRYPTO_ALG_ASYNC,
2434 .cra_type = &crypto_ahash_type
2435 } 2368 }
2436 }, 2369 },
2437 .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | 2370 .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU |
@@ -2440,12 +2373,6 @@ static struct talitos_alg_template driver_algs[] = {
2440 }, 2373 },
2441 { .type = CRYPTO_ALG_TYPE_AHASH, 2374 { .type = CRYPTO_ALG_TYPE_AHASH,
2442 .alg.hash = { 2375 .alg.hash = {
2443 .init = ahash_init,
2444 .update = ahash_update,
2445 .final = ahash_final,
2446 .finup = ahash_finup,
2447 .digest = ahash_digest,
2448 .setkey = ahash_setkey,
2449 .halg.digestsize = SHA224_DIGEST_SIZE, 2376 .halg.digestsize = SHA224_DIGEST_SIZE,
2450 .halg.base = { 2377 .halg.base = {
2451 .cra_name = "hmac(sha224)", 2378 .cra_name = "hmac(sha224)",
@@ -2453,7 +2380,6 @@ static struct talitos_alg_template driver_algs[] = {
2453 .cra_blocksize = SHA224_BLOCK_SIZE, 2380 .cra_blocksize = SHA224_BLOCK_SIZE,
2454 .cra_flags = CRYPTO_ALG_TYPE_AHASH | 2381 .cra_flags = CRYPTO_ALG_TYPE_AHASH |
2455 CRYPTO_ALG_ASYNC, 2382 CRYPTO_ALG_ASYNC,
2456 .cra_type = &crypto_ahash_type
2457 } 2383 }
2458 }, 2384 },
2459 .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | 2385 .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU |
@@ -2462,12 +2388,6 @@ static struct talitos_alg_template driver_algs[] = {
2462 }, 2388 },
2463 { .type = CRYPTO_ALG_TYPE_AHASH, 2389 { .type = CRYPTO_ALG_TYPE_AHASH,
2464 .alg.hash = { 2390 .alg.hash = {
2465 .init = ahash_init,
2466 .update = ahash_update,
2467 .final = ahash_final,
2468 .finup = ahash_finup,
2469 .digest = ahash_digest,
2470 .setkey = ahash_setkey,
2471 .halg.digestsize = SHA256_DIGEST_SIZE, 2391 .halg.digestsize = SHA256_DIGEST_SIZE,
2472 .halg.base = { 2392 .halg.base = {
2473 .cra_name = "hmac(sha256)", 2393 .cra_name = "hmac(sha256)",
@@ -2475,7 +2395,6 @@ static struct talitos_alg_template driver_algs[] = {
2475 .cra_blocksize = SHA256_BLOCK_SIZE, 2395 .cra_blocksize = SHA256_BLOCK_SIZE,
2476 .cra_flags = CRYPTO_ALG_TYPE_AHASH | 2396 .cra_flags = CRYPTO_ALG_TYPE_AHASH |
2477 CRYPTO_ALG_ASYNC, 2397 CRYPTO_ALG_ASYNC,
2478 .cra_type = &crypto_ahash_type
2479 } 2398 }
2480 }, 2399 },
2481 .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | 2400 .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU |
@@ -2484,12 +2403,6 @@ static struct talitos_alg_template driver_algs[] = {
2484 }, 2403 },
2485 { .type = CRYPTO_ALG_TYPE_AHASH, 2404 { .type = CRYPTO_ALG_TYPE_AHASH,
2486 .alg.hash = { 2405 .alg.hash = {
2487 .init = ahash_init,
2488 .update = ahash_update,
2489 .final = ahash_final,
2490 .finup = ahash_finup,
2491 .digest = ahash_digest,
2492 .setkey = ahash_setkey,
2493 .halg.digestsize = SHA384_DIGEST_SIZE, 2406 .halg.digestsize = SHA384_DIGEST_SIZE,
2494 .halg.base = { 2407 .halg.base = {
2495 .cra_name = "hmac(sha384)", 2408 .cra_name = "hmac(sha384)",
@@ -2497,7 +2410,6 @@ static struct talitos_alg_template driver_algs[] = {
2497 .cra_blocksize = SHA384_BLOCK_SIZE, 2410 .cra_blocksize = SHA384_BLOCK_SIZE,
2498 .cra_flags = CRYPTO_ALG_TYPE_AHASH | 2411 .cra_flags = CRYPTO_ALG_TYPE_AHASH |
2499 CRYPTO_ALG_ASYNC, 2412 CRYPTO_ALG_ASYNC,
2500 .cra_type = &crypto_ahash_type
2501 } 2413 }
2502 }, 2414 },
2503 .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | 2415 .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU |
@@ -2506,12 +2418,6 @@ static struct talitos_alg_template driver_algs[] = {
2506 }, 2418 },
2507 { .type = CRYPTO_ALG_TYPE_AHASH, 2419 { .type = CRYPTO_ALG_TYPE_AHASH,
2508 .alg.hash = { 2420 .alg.hash = {
2509 .init = ahash_init,
2510 .update = ahash_update,
2511 .final = ahash_final,
2512 .finup = ahash_finup,
2513 .digest = ahash_digest,
2514 .setkey = ahash_setkey,
2515 .halg.digestsize = SHA512_DIGEST_SIZE, 2421 .halg.digestsize = SHA512_DIGEST_SIZE,
2516 .halg.base = { 2422 .halg.base = {
2517 .cra_name = "hmac(sha512)", 2423 .cra_name = "hmac(sha512)",
@@ -2519,7 +2425,6 @@ static struct talitos_alg_template driver_algs[] = {
2519 .cra_blocksize = SHA512_BLOCK_SIZE, 2425 .cra_blocksize = SHA512_BLOCK_SIZE,
2520 .cra_flags = CRYPTO_ALG_TYPE_AHASH | 2426 .cra_flags = CRYPTO_ALG_TYPE_AHASH |
2521 CRYPTO_ALG_ASYNC, 2427 CRYPTO_ALG_ASYNC,
2522 .cra_type = &crypto_ahash_type
2523 } 2428 }
2524 }, 2429 },
2525 .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | 2430 .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU |
@@ -2677,14 +2582,34 @@ static struct talitos_crypto_alg *talitos_alg_alloc(struct device *dev,
2677 case CRYPTO_ALG_TYPE_ABLKCIPHER: 2582 case CRYPTO_ALG_TYPE_ABLKCIPHER:
2678 alg = &t_alg->algt.alg.crypto; 2583 alg = &t_alg->algt.alg.crypto;
2679 alg->cra_init = talitos_cra_init; 2584 alg->cra_init = talitos_cra_init;
2585 alg->cra_type = &crypto_ablkcipher_type;
2586 alg->cra_ablkcipher.setkey = ablkcipher_setkey;
2587 alg->cra_ablkcipher.encrypt = ablkcipher_encrypt;
2588 alg->cra_ablkcipher.decrypt = ablkcipher_decrypt;
2589 alg->cra_ablkcipher.geniv = "eseqiv";
2680 break; 2590 break;
2681 case CRYPTO_ALG_TYPE_AEAD: 2591 case CRYPTO_ALG_TYPE_AEAD:
2682 alg = &t_alg->algt.alg.crypto; 2592 alg = &t_alg->algt.alg.crypto;
2683 alg->cra_init = talitos_cra_init_aead; 2593 alg->cra_init = talitos_cra_init_aead;
2594 alg->cra_type = &crypto_aead_type;
2595 alg->cra_aead.setkey = aead_setkey;
2596 alg->cra_aead.setauthsize = aead_setauthsize;
2597 alg->cra_aead.encrypt = aead_encrypt;
2598 alg->cra_aead.decrypt = aead_decrypt;
2599 alg->cra_aead.givencrypt = aead_givencrypt;
2600 alg->cra_aead.geniv = "<built-in>";
2684 break; 2601 break;
2685 case CRYPTO_ALG_TYPE_AHASH: 2602 case CRYPTO_ALG_TYPE_AHASH:
2686 alg = &t_alg->algt.alg.hash.halg.base; 2603 alg = &t_alg->algt.alg.hash.halg.base;
2687 alg->cra_init = talitos_cra_init_ahash; 2604 alg->cra_init = talitos_cra_init_ahash;
2605 alg->cra_type = &crypto_ahash_type;
2606 t_alg->algt.alg.hash.init = ahash_init;
2607 t_alg->algt.alg.hash.update = ahash_update;
2608 t_alg->algt.alg.hash.final = ahash_final;
2609 t_alg->algt.alg.hash.finup = ahash_finup;
2610 t_alg->algt.alg.hash.digest = ahash_digest;
2611 t_alg->algt.alg.hash.setkey = ahash_setkey;
2612
2688 if (!(priv->features & TALITOS_FTR_HMAC_OK) && 2613 if (!(priv->features & TALITOS_FTR_HMAC_OK) &&
2689 !strncmp(alg->cra_name, "hmac", 4)) { 2614 !strncmp(alg->cra_name, "hmac", 4)) {
2690 kfree(t_alg); 2615 kfree(t_alg);
@@ -2896,7 +2821,9 @@ static int talitos_probe(struct platform_device *ofdev)
2896 if (hw_supports(dev, driver_algs[i].desc_hdr_template)) { 2821 if (hw_supports(dev, driver_algs[i].desc_hdr_template)) {
2897 struct talitos_crypto_alg *t_alg; 2822 struct talitos_crypto_alg *t_alg;
2898 char *name = NULL; 2823 char *name = NULL;
2824 bool authenc = false;
2899 2825
2826authencesn:
2900 t_alg = talitos_alg_alloc(dev, &driver_algs[i]); 2827 t_alg = talitos_alg_alloc(dev, &driver_algs[i]);
2901 if (IS_ERR(t_alg)) { 2828 if (IS_ERR(t_alg)) {
2902 err = PTR_ERR(t_alg); 2829 err = PTR_ERR(t_alg);
@@ -2911,6 +2838,8 @@ static int talitos_probe(struct platform_device *ofdev)
2911 err = crypto_register_alg( 2838 err = crypto_register_alg(
2912 &t_alg->algt.alg.crypto); 2839 &t_alg->algt.alg.crypto);
2913 name = t_alg->algt.alg.crypto.cra_driver_name; 2840 name = t_alg->algt.alg.crypto.cra_driver_name;
2841 authenc = authenc ? !authenc :
2842 !(bool)memcmp(name, "authenc", 7);
2914 break; 2843 break;
2915 case CRYPTO_ALG_TYPE_AHASH: 2844 case CRYPTO_ALG_TYPE_AHASH:
2916 err = crypto_register_ahash( 2845 err = crypto_register_ahash(
@@ -2923,8 +2852,25 @@ static int talitos_probe(struct platform_device *ofdev)
2923 dev_err(dev, "%s alg registration failed\n", 2852 dev_err(dev, "%s alg registration failed\n",
2924 name); 2853 name);
2925 kfree(t_alg); 2854 kfree(t_alg);
2926 } else 2855 } else {
2927 list_add_tail(&t_alg->entry, &priv->alg_list); 2856 list_add_tail(&t_alg->entry, &priv->alg_list);
2857 if (authenc) {
2858 struct crypto_alg *alg =
2859 &driver_algs[i].alg.crypto;
2860
2861 name = alg->cra_name;
2862 memmove(name + 10, name + 7,
2863 strlen(name) - 7);
2864 memcpy(name + 7, "esn", 3);
2865
2866 name = alg->cra_driver_name;
2867 memmove(name + 10, name + 7,
2868 strlen(name) - 7);
2869 memcpy(name + 7, "esn", 3);
2870
2871 goto authencesn;
2872 }
2873 }
2928 } 2874 }
2929 } 2875 }
2930 if (!list_empty(&priv->alg_list)) 2876 if (!list_empty(&priv->alg_list))
diff --git a/drivers/crypto/tegra-aes.c b/drivers/crypto/tegra-aes.c
index ac236f6724f..37185e6630c 100644
--- a/drivers/crypto/tegra-aes.c
+++ b/drivers/crypto/tegra-aes.c
@@ -969,6 +969,7 @@ static int tegra_aes_probe(struct platform_device *pdev)
969 aes_wq = alloc_workqueue("tegra_aes_wq", WQ_HIGHPRI | WQ_UNBOUND, 1); 969 aes_wq = alloc_workqueue("tegra_aes_wq", WQ_HIGHPRI | WQ_UNBOUND, 1);
970 if (!aes_wq) { 970 if (!aes_wq) {
971 dev_err(dev, "alloc_workqueue failed\n"); 971 dev_err(dev, "alloc_workqueue failed\n");
972 err = -ENOMEM;
972 goto out; 973 goto out;
973 } 974 }
974 975
@@ -1004,8 +1005,6 @@ static int tegra_aes_probe(struct platform_device *pdev)
1004 1005
1005 aes_dev = dd; 1006 aes_dev = dd;
1006 for (i = 0; i < ARRAY_SIZE(algs); i++) { 1007 for (i = 0; i < ARRAY_SIZE(algs); i++) {
1007 INIT_LIST_HEAD(&algs[i].cra_list);
1008
1009 algs[i].cra_priority = 300; 1008 algs[i].cra_priority = 300;
1010 algs[i].cra_ctxsize = sizeof(struct tegra_aes_ctx); 1009 algs[i].cra_ctxsize = sizeof(struct tegra_aes_ctx);
1011 algs[i].cra_module = THIS_MODULE; 1010 algs[i].cra_module = THIS_MODULE;
diff --git a/drivers/crypto/ux500/cryp/cryp_core.c b/drivers/crypto/ux500/cryp/cryp_core.c
index ef17e3871c7..bc615cc5626 100644
--- a/drivers/crypto/ux500/cryp/cryp_core.c
+++ b/drivers/crypto/ux500/cryp/cryp_core.c
@@ -1486,6 +1486,7 @@ static int ux500_cryp_probe(struct platform_device *pdev)
1486 if (!res_irq) { 1486 if (!res_irq) {
1487 dev_err(dev, "[%s]: IORESOURCE_IRQ unavailable", 1487 dev_err(dev, "[%s]: IORESOURCE_IRQ unavailable",
1488 __func__); 1488 __func__);
1489 ret = -ENODEV;
1489 goto out_power; 1490 goto out_power;
1490 } 1491 }
1491 1492
diff --git a/drivers/crypto/ux500/hash/hash_core.c b/drivers/crypto/ux500/hash/hash_core.c
index 08765072a2b..632c3339895 100644
--- a/drivers/crypto/ux500/hash/hash_core.c
+++ b/drivers/crypto/ux500/hash/hash_core.c
@@ -1991,7 +1991,6 @@ static int __init ux500_hash_mod_init(void)
1991static void __exit ux500_hash_mod_fini(void) 1991static void __exit ux500_hash_mod_fini(void)
1992{ 1992{
1993 platform_driver_unregister(&hash_driver); 1993 platform_driver_unregister(&hash_driver);
1994 return;
1995} 1994}
1996 1995
1997module_init(ux500_hash_mod_init); 1996module_init(ux500_hash_mod_init);
diff --git a/include/crypto/cast5.h b/include/crypto/cast5.h
new file mode 100644
index 00000000000..586183a0406
--- /dev/null
+++ b/include/crypto/cast5.h
@@ -0,0 +1,27 @@
1#ifndef _CRYPTO_CAST5_H
2#define _CRYPTO_CAST5_H
3
4#include <linux/types.h>
5#include <linux/crypto.h>
6
7#define CAST5_BLOCK_SIZE 8
8#define CAST5_MIN_KEY_SIZE 5
9#define CAST5_MAX_KEY_SIZE 16
10
11struct cast5_ctx {
12 u32 Km[16];
13 u8 Kr[16];
14 int rr; /* rr ? rounds = 12 : rounds = 16; (rfc 2144) */
15};
16
17int cast5_setkey(struct crypto_tfm *tfm, const u8 *key, unsigned int keylen);
18
19void __cast5_encrypt(struct cast5_ctx *ctx, u8 *dst, const u8 *src);
20void __cast5_decrypt(struct cast5_ctx *ctx, u8 *dst, const u8 *src);
21
22extern const u32 cast5_s1[256];
23extern const u32 cast5_s2[256];
24extern const u32 cast5_s3[256];
25extern const u32 cast5_s4[256];
26
27#endif
diff --git a/include/crypto/cast6.h b/include/crypto/cast6.h
new file mode 100644
index 00000000000..157af6f342c
--- /dev/null
+++ b/include/crypto/cast6.h
@@ -0,0 +1,28 @@
1#ifndef _CRYPTO_CAST6_H
2#define _CRYPTO_CAST6_H
3
4#include <linux/types.h>
5#include <linux/crypto.h>
6
7#define CAST6_BLOCK_SIZE 16
8#define CAST6_MIN_KEY_SIZE 16
9#define CAST6_MAX_KEY_SIZE 32
10
11struct cast6_ctx {
12 u32 Km[12][4];
13 u8 Kr[12][4];
14};
15
16int __cast6_setkey(struct cast6_ctx *ctx, const u8 *key,
17 unsigned int keylen, u32 *flags);
18int cast6_setkey(struct crypto_tfm *tfm, const u8 *key, unsigned int keylen);
19
20void __cast6_encrypt(struct cast6_ctx *ctx, u8 *dst, const u8 *src);
21void __cast6_decrypt(struct cast6_ctx *ctx, u8 *dst, const u8 *src);
22
23extern const u32 cast6_s1[256];
24extern const u32 cast6_s2[256];
25extern const u32 cast6_s3[256];
26extern const u32 cast6_s4[256];
27
28#endif
diff --git a/include/crypto/internal/hash.h b/include/crypto/internal/hash.h
index 5bfad8c8059..821eae8cbd8 100644
--- a/include/crypto/internal/hash.h
+++ b/include/crypto/internal/hash.h
@@ -83,6 +83,8 @@ struct hash_alg_common *ahash_attr_alg(struct rtattr *rta, u32 type, u32 mask);
83 83
84int crypto_register_shash(struct shash_alg *alg); 84int crypto_register_shash(struct shash_alg *alg);
85int crypto_unregister_shash(struct shash_alg *alg); 85int crypto_unregister_shash(struct shash_alg *alg);
86int crypto_register_shashes(struct shash_alg *algs, int count);
87int crypto_unregister_shashes(struct shash_alg *algs, int count);
86int shash_register_instance(struct crypto_template *tmpl, 88int shash_register_instance(struct crypto_template *tmpl,
87 struct shash_instance *inst); 89 struct shash_instance *inst);
88void shash_free_instance(struct crypto_instance *inst); 90void shash_free_instance(struct crypto_instance *inst);
diff --git a/include/linux/nx842.h b/include/linux/nx842.h
new file mode 100644
index 00000000000..a4d324c6406
--- /dev/null
+++ b/include/linux/nx842.h
@@ -0,0 +1,11 @@
1#ifndef __NX842_H__
2#define __NX842_H__
3
4int nx842_get_workmem_size(void);
5int nx842_get_workmem_size_aligned(void);
6int nx842_compress(const unsigned char *in, unsigned int in_len,
7 unsigned char *out, unsigned int *out_len, void *wrkmem);
8int nx842_decompress(const unsigned char *in, unsigned int in_len,
9 unsigned char *out, unsigned int *out_len, void *wrkmem);
10
11#endif