Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
c63f5cf8
Commit
c63f5cf8
authored
Aug 11, 2003
by
Kartikey Mahendra Bhatt
Committed by
Dave Jones
Aug 11, 2003
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[CRYPTO]: Add cast5, integration by jmorris@intercode.com.au
parent
6e6c3a14
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
1032 additions
and
1 deletion
+1032
-1
Documentation/crypto/api-intro.txt
Documentation/crypto/api-intro.txt
+3
-1
crypto/Kconfig
crypto/Kconfig
+7
-0
crypto/Makefile
crypto/Makefile
+1
-0
crypto/cast5.c
crypto/cast5.c
+852
-0
crypto/tcrypt.c
crypto/tcrypt.c
+101
-0
crypto/tcrypt.h
crypto/tcrypt.h
+68
-0
No files found.
Documentation/crypto/api-intro.txt
View file @
c63f5cf8
...
...
@@ -186,7 +186,6 @@ Original developers of the crypto algorithms:
Dag Arne Osvik (Serpent)
Brian Gladman (AES)
SHA1 algorithm contributors:
Jean-Francois Dive
...
...
@@ -214,6 +213,9 @@ AES algorithm contributors:
Kyle McMartin
Adam J. Richter
CAST5 algorithm contributors:
Kartikey Mahendra Bhatt (original developers unknown, FSF copyright).
Generic scatterwalk code by Adam J. Richter <adam@yggdrasil.com>
Please send any credits updates or corrections to:
...
...
crypto/Kconfig
View file @
c63f5cf8
...
...
@@ -126,6 +126,13 @@ config CRYPTO_AES
See http://csrc.nist.gov/encryption/aes/ for more information.
config CRYPTO_CAST5
tristate "CAST5 (CAST-128) cipher algorithm"
depends on CRYPTO
help
The CAST5 encryption algorithm (synonymous with CAST-128) is
described in RFC2144.
config CRYPTO_DEFLATE
tristate "Deflate compression algorithm"
depends on CRYPTO
...
...
crypto/Makefile
View file @
c63f5cf8
...
...
@@ -20,6 +20,7 @@ obj-$(CONFIG_CRYPTO_BLOWFISH) += blowfish.o
obj-$(CONFIG_CRYPTO_TWOFISH)
+=
twofish.o
obj-$(CONFIG_CRYPTO_SERPENT)
+=
serpent.o
obj-$(CONFIG_CRYPTO_AES)
+=
aes.o
obj-$(CONFIG_CRYPTO_CAST5)
+=
cast5.o
obj-$(CONFIG_CRYPTO_DEFLATE)
+=
deflate.o
obj-$(CONFIG_CRYPTO_TEST)
+=
tcrypt.o
crypto/cast5.c
0 → 100644
View file @
c63f5cf8
/* Kernel cryptographic api.
* cast5.c - Cast5 cipher algorithm (rfc2144).
*
* Derived from GnuPG implementation of cast5.
*
* Major Changes.
* Complete conformance to rfc2144.
* Supports key size from 40 to 128 bits.
*
* Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
* Copyright (C) 2003 Kartikey Mahendra Bhatt <kartik_me@hotmail.com>.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of GNU General Public License as published by the Free
* Software Foundation; either version 2 of the License, or (at your option)
* any later version.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
#include <linux/init.h>
#include <linux/crypto.h>
#include <linux/module.h>
#include <linux/errno.h>
#include <linux/string.h>
#define CAST5_BLOCK_SIZE 8
#define CAST5_MIN_KEY_SIZE 5
#define CAST5_MAX_KEY_SIZE 16
struct
cast5_ctx
{
u32
Km
[
16
];
u8
Kr
[
16
];
int
rr
;
/* rr?number of rounds = 16:number of rounds = 12; (rfc 2144) */
};
static
const
u32
s1
[
256
]
=
{
0x30fb40d4
,
0x9fa0ff0b
,
0x6beccd2f
,
0x3f258c7a
,
0x1e213f2f
,
0x9c004dd3
,
0x6003e540
,
0xcf9fc949
,
0xbfd4af27
,
0x88bbbdb5
,
0xe2034090
,
0x98d09675
,
0x6e63a0e0
,
0x15c361d2
,
0xc2e7661d
,
0x22d4ff8e
,
0x28683b6f
,
0xc07fd059
,
0xff2379c8
,
0x775f50e2
,
0x43c340d3
,
0xdf2f8656
,
0x887ca41a
,
0xa2d2bd2d
,
0xa1c9e0d6
,
0x346c4819
,
0x61b76d87
,
0x22540f2f
,
0x2abe32e1
,
0xaa54166b
,
0x22568e3a
,
0xa2d341d0
,
0x66db40c8
,
0xa784392f
,
0x004dff2f
,
0x2db9d2de
,
0x97943fac
,
0x4a97c1d8
,
0x527644b7
,
0xb5f437a7
,
0xb82cbaef
,
0xd751d159
,
0x6ff7f0ed
,
0x5a097a1f
,
0x827b68d0
,
0x90ecf52e
,
0x22b0c054
,
0xbc8e5935
,
0x4b6d2f7f
,
0x50bb64a2
,
0xd2664910
,
0xbee5812d
,
0xb7332290
,
0xe93b159f
,
0xb48ee411
,
0x4bff345d
,
0xfd45c240
,
0xad31973f
,
0xc4f6d02e
,
0x55fc8165
,
0xd5b1caad
,
0xa1ac2dae
,
0xa2d4b76d
,
0xc19b0c50
,
0x882240f2
,
0x0c6e4f38
,
0xa4e4bfd7
,
0x4f5ba272
,
0x564c1d2f
,
0xc59c5319
,
0xb949e354
,
0xb04669fe
,
0xb1b6ab8a
,
0xc71358dd
,
0x6385c545
,
0x110f935d
,
0x57538ad5
,
0x6a390493
,
0xe63d37e0
,
0x2a54f6b3
,
0x3a787d5f
,
0x6276a0b5
,
0x19a6fcdf
,
0x7a42206a
,
0x29f9d4d5
,
0xf61b1891
,
0xbb72275e
,
0xaa508167
,
0x38901091
,
0xc6b505eb
,
0x84c7cb8c
,
0x2ad75a0f
,
0x874a1427
,
0xa2d1936b
,
0x2ad286af
,
0xaa56d291
,
0xd7894360
,
0x425c750d
,
0x93b39e26
,
0x187184c9
,
0x6c00b32d
,
0x73e2bb14
,
0xa0bebc3c
,
0x54623779
,
0x64459eab
,
0x3f328b82
,
0x7718cf82
,
0x59a2cea6
,
0x04ee002e
,
0x89fe78e6
,
0x3fab0950
,
0x325ff6c2
,
0x81383f05
,
0x6963c5c8
,
0x76cb5ad6
,
0xd49974c9
,
0xca180dcf
,
0x380782d5
,
0xc7fa5cf6
,
0x8ac31511
,
0x35e79e13
,
0x47da91d0
,
0xf40f9086
,
0xa7e2419e
,
0x31366241
,
0x051ef495
,
0xaa573b04
,
0x4a805d8d
,
0x548300d0
,
0x00322a3c
,
0xbf64cddf
,
0xba57a68e
,
0x75c6372b
,
0x50afd341
,
0xa7c13275
,
0x915a0bf5
,
0x6b54bfab
,
0x2b0b1426
,
0xab4cc9d7
,
0x449ccd82
,
0xf7fbf265
,
0xab85c5f3
,
0x1b55db94
,
0xaad4e324
,
0xcfa4bd3f
,
0x2deaa3e2
,
0x9e204d02
,
0xc8bd25ac
,
0xeadf55b3
,
0xd5bd9e98
,
0xe31231b2
,
0x2ad5ad6c
,
0x954329de
,
0xadbe4528
,
0xd8710f69
,
0xaa51c90f
,
0xaa786bf6
,
0x22513f1e
,
0xaa51a79b
,
0x2ad344cc
,
0x7b5a41f0
,
0xd37cfbad
,
0x1b069505
,
0x41ece491
,
0xb4c332e6
,
0x032268d4
,
0xc9600acc
,
0xce387e6d
,
0xbf6bb16c
,
0x6a70fb78
,
0x0d03d9c9
,
0xd4df39de
,
0xe01063da
,
0x4736f464
,
0x5ad328d8
,
0xb347cc96
,
0x75bb0fc3
,
0x98511bfb
,
0x4ffbcc35
,
0xb58bcf6a
,
0xe11f0abc
,
0xbfc5fe4a
,
0xa70aec10
,
0xac39570a
,
0x3f04442f
,
0x6188b153
,
0xe0397a2e
,
0x5727cb79
,
0x9ceb418f
,
0x1cacd68d
,
0x2ad37c96
,
0x0175cb9d
,
0xc69dff09
,
0xc75b65f0
,
0xd9db40d8
,
0xec0e7779
,
0x4744ead4
,
0xb11c3274
,
0xdd24cb9e
,
0x7e1c54bd
,
0xf01144f9
,
0xd2240eb1
,
0x9675b3fd
,
0xa3ac3755
,
0xd47c27af
,
0x51c85f4d
,
0x56907596
,
0xa5bb15e6
,
0x580304f0
,
0xca042cf1
,
0x011a37ea
,
0x8dbfaadb
,
0x35ba3e4a
,
0x3526ffa0
,
0xc37b4d09
,
0xbc306ed9
,
0x98a52666
,
0x5648f725
,
0xff5e569d
,
0x0ced63d0
,
0x7c63b2cf
,
0x700b45e1
,
0xd5ea50f1
,
0x85a92872
,
0xaf1fbda7
,
0xd4234870
,
0xa7870bf3
,
0x2d3b4d79
,
0x42e04198
,
0x0cd0ede7
,
0x26470db8
,
0xf881814c
,
0x474d6ad7
,
0x7c0c5e5c
,
0xd1231959
,
0x381b7298
,
0xf5d2f4db
,
0xab838653
,
0x6e2f1e23
,
0x83719c9e
,
0xbd91e046
,
0x9a56456e
,
0xdc39200c
,
0x20c8c571
,
0x962bda1c
,
0xe1e696ff
,
0xb141ab08
,
0x7cca89b9
,
0x1a69e783
,
0x02cc4843
,
0xa2f7c579
,
0x429ef47d
,
0x427b169c
,
0x5ac9f049
,
0xdd8f0f00
,
0x5c8165bf
};
static
const
u32
s2
[
256
]
=
{
0x1f201094
,
0xef0ba75b
,
0x69e3cf7e
,
0x393f4380
,
0xfe61cf7a
,
0xeec5207a
,
0x55889c94
,
0x72fc0651
,
0xada7ef79
,
0x4e1d7235
,
0xd55a63ce
,
0xde0436ba
,
0x99c430ef
,
0x5f0c0794
,
0x18dcdb7d
,
0xa1d6eff3
,
0xa0b52f7b
,
0x59e83605
,
0xee15b094
,
0xe9ffd909
,
0xdc440086
,
0xef944459
,
0xba83ccb3
,
0xe0c3cdfb
,
0xd1da4181
,
0x3b092ab1
,
0xf997f1c1
,
0xa5e6cf7b
,
0x01420ddb
,
0xe4e7ef5b
,
0x25a1ff41
,
0xe180f806
,
0x1fc41080
,
0x179bee7a
,
0xd37ac6a9
,
0xfe5830a4
,
0x98de8b7f
,
0x77e83f4e
,
0x79929269
,
0x24fa9f7b
,
0xe113c85b
,
0xacc40083
,
0xd7503525
,
0xf7ea615f
,
0x62143154
,
0x0d554b63
,
0x5d681121
,
0xc866c359
,
0x3d63cf73
,
0xcee234c0
,
0xd4d87e87
,
0x5c672b21
,
0x071f6181
,
0x39f7627f
,
0x361e3084
,
0xe4eb573b
,
0x602f64a4
,
0xd63acd9c
,
0x1bbc4635
,
0x9e81032d
,
0x2701f50c
,
0x99847ab4
,
0xa0e3df79
,
0xba6cf38c
,
0x10843094
,
0x2537a95e
,
0xf46f6ffe
,
0xa1ff3b1f
,
0x208cfb6a
,
0x8f458c74
,
0xd9e0a227
,
0x4ec73a34
,
0xfc884f69
,
0x3e4de8df
,
0xef0e0088
,
0x3559648d
,
0x8a45388c
,
0x1d804366
,
0x721d9bfd
,
0xa58684bb
,
0xe8256333
,
0x844e8212
,
0x128d8098
,
0xfed33fb4
,
0xce280ae1
,
0x27e19ba5
,
0xd5a6c252
,
0xe49754bd
,
0xc5d655dd
,
0xeb667064
,
0x77840b4d
,
0xa1b6a801
,
0x84db26a9
,
0xe0b56714
,
0x21f043b7
,
0xe5d05860
,
0x54f03084
,
0x066ff472
,
0xa31aa153
,
0xdadc4755
,
0xb5625dbf
,
0x68561be6
,
0x83ca6b94
,
0x2d6ed23b
,
0xeccf01db
,
0xa6d3d0ba
,
0xb6803d5c
,
0xaf77a709
,
0x33b4a34c
,
0x397bc8d6
,
0x5ee22b95
,
0x5f0e5304
,
0x81ed6f61
,
0x20e74364
,
0xb45e1378
,
0xde18639b
,
0x881ca122
,
0xb96726d1
,
0x8049a7e8
,
0x22b7da7b
,
0x5e552d25
,
0x5272d237
,
0x79d2951c
,
0xc60d894c
,
0x488cb402
,
0x1ba4fe5b
,
0xa4b09f6b
,
0x1ca815cf
,
0xa20c3005
,
0x8871df63
,
0xb9de2fcb
,
0x0cc6c9e9
,
0x0beeff53
,
0xe3214517
,
0xb4542835
,
0x9f63293c
,
0xee41e729
,
0x6e1d2d7c
,
0x50045286
,
0x1e6685f3
,
0xf33401c6
,
0x30a22c95
,
0x31a70850
,
0x60930f13
,
0x73f98417
,
0xa1269859
,
0xec645c44
,
0x52c877a9
,
0xcdff33a6
,
0xa02b1741
,
0x7cbad9a2
,
0x2180036f
,
0x50d99c08
,
0xcb3f4861
,
0xc26bd765
,
0x64a3f6ab
,
0x80342676
,
0x25a75e7b
,
0xe4e6d1fc
,
0x20c710e6
,
0xcdf0b680
,
0x17844d3b
,
0x31eef84d
,
0x7e0824e4
,
0x2ccb49eb
,
0x846a3bae
,
0x8ff77888
,
0xee5d60f6
,
0x7af75673
,
0x2fdd5cdb
,
0xa11631c1
,
0x30f66f43
,
0xb3faec54
,
0x157fd7fa
,
0xef8579cc
,
0xd152de58
,
0xdb2ffd5e
,
0x8f32ce19
,
0x306af97a
,
0x02f03ef8
,
0x99319ad5
,
0xc242fa0f
,
0xa7e3ebb0
,
0xc68e4906
,
0xb8da230c
,
0x80823028
,
0xdcdef3c8
,
0xd35fb171
,
0x088a1bc8
,
0xbec0c560
,
0x61a3c9e8
,
0xbca8f54d
,
0xc72feffa
,
0x22822e99
,
0x82c570b4
,
0xd8d94e89
,
0x8b1c34bc
,
0x301e16e6
,
0x273be979
,
0xb0ffeaa6
,
0x61d9b8c6
,
0x00b24869
,
0xb7ffce3f
,
0x08dc283b
,
0x43daf65a
,
0xf7e19798
,
0x7619b72f
,
0x8f1c9ba4
,
0xdc8637a0
,
0x16a7d3b1
,
0x9fc393b7
,
0xa7136eeb
,
0xc6bcc63e
,
0x1a513742
,
0xef6828bc
,
0x520365d6
,
0x2d6a77ab
,
0x3527ed4b
,
0x821fd216
,
0x095c6e2e
,
0xdb92f2fb
,
0x5eea29cb
,
0x145892f5
,
0x91584f7f
,
0x5483697b
,
0x2667a8cc
,
0x85196048
,
0x8c4bacea
,
0x833860d4
,
0x0d23e0f9
,
0x6c387e8a
,
0x0ae6d249
,
0xb284600c
,
0xd835731d
,
0xdcb1c647
,
0xac4c56ea
,
0x3ebd81b3
,
0x230eabb0
,
0x6438bc87
,
0xf0b5b1fa
,
0x8f5ea2b3
,
0xfc184642
,
0x0a036b7a
,
0x4fb089bd
,
0x649da589
,
0xa345415e
,
0x5c038323
,
0x3e5d3bb9
,
0x43d79572
,
0x7e6dd07c
,
0x06dfdf1e
,
0x6c6cc4ef
,
0x7160a539
,
0x73bfbe70
,
0x83877605
,
0x4523ecf1
};
static
const
u32
s3
[
256
]
=
{
0x8defc240
,
0x25fa5d9f
,
0xeb903dbf
,
0xe810c907
,
0x47607fff
,
0x369fe44b
,
0x8c1fc644
,
0xaececa90
,
0xbeb1f9bf
,
0xeefbcaea
,
0xe8cf1950
,
0x51df07ae
,
0x920e8806
,
0xf0ad0548
,
0xe13c8d83
,
0x927010d5
,
0x11107d9f
,
0x07647db9
,
0xb2e3e4d4
,
0x3d4f285e
,
0xb9afa820
,
0xfade82e0
,
0xa067268b
,
0x8272792e
,
0x553fb2c0
,
0x489ae22b
,
0xd4ef9794
,
0x125e3fbc
,
0x21fffcee
,
0x825b1bfd
,
0x9255c5ed
,
0x1257a240
,
0x4e1a8302
,
0xbae07fff
,
0x528246e7
,
0x8e57140e
,
0x3373f7bf
,
0x8c9f8188
,
0xa6fc4ee8
,
0xc982b5a5
,
0xa8c01db7
,
0x579fc264
,
0x67094f31
,
0xf2bd3f5f
,
0x40fff7c1
,
0x1fb78dfc
,
0x8e6bd2c1
,
0x437be59b
,
0x99b03dbf
,
0xb5dbc64b
,
0x638dc0e6
,
0x55819d99
,
0xa197c81c
,
0x4a012d6e
,
0xc5884a28
,
0xccc36f71
,
0xb843c213
,
0x6c0743f1
,
0x8309893c
,
0x0feddd5f
,
0x2f7fe850
,
0xd7c07f7e
,
0x02507fbf
,
0x5afb9a04
,
0xa747d2d0
,
0x1651192e
,
0xaf70bf3e
,
0x58c31380
,
0x5f98302e
,
0x727cc3c4
,
0x0a0fb402
,
0x0f7fef82
,
0x8c96fdad
,
0x5d2c2aae
,
0x8ee99a49
,
0x50da88b8
,
0x8427f4a0
,
0x1eac5790
,
0x796fb449
,
0x8252dc15
,
0xefbd7d9b
,
0xa672597d
,
0xada840d8
,
0x45f54504
,
0xfa5d7403
,
0xe83ec305
,
0x4f91751a
,
0x925669c2
,
0x23efe941
,
0xa903f12e
,
0x60270df2
,
0x0276e4b6
,
0x94fd6574
,
0x927985b2
,
0x8276dbcb
,
0x02778176
,
0xf8af918d
,
0x4e48f79e
,
0x8f616ddf
,
0xe29d840e
,
0x842f7d83
,
0x340ce5c8
,
0x96bbb682
,
0x93b4b148
,
0xef303cab
,
0x984faf28
,
0x779faf9b
,
0x92dc560d
,
0x224d1e20
,
0x8437aa88
,
0x7d29dc96
,
0x2756d3dc
,
0x8b907cee
,
0xb51fd240
,
0xe7c07ce3
,
0xe566b4a1
,
0xc3e9615e
,
0x3cf8209d
,
0x6094d1e3
,
0xcd9ca341
,
0x5c76460e
,
0x00ea983b
,
0xd4d67881
,
0xfd47572c
,
0xf76cedd9
,
0xbda8229c
,
0x127dadaa
,
0x438a074e
,
0x1f97c090
,
0x081bdb8a
,
0x93a07ebe
,
0xb938ca15
,
0x97b03cff
,
0x3dc2c0f8
,
0x8d1ab2ec
,
0x64380e51
,
0x68cc7bfb
,
0xd90f2788
,
0x12490181
,
0x5de5ffd4
,
0xdd7ef86a
,
0x76a2e214
,
0xb9a40368
,
0x925d958f
,
0x4b39fffa
,
0xba39aee9
,
0xa4ffd30b
,
0xfaf7933b
,
0x6d498623
,
0x193cbcfa
,
0x27627545
,
0x825cf47a
,
0x61bd8ba0
,
0xd11e42d1
,
0xcead04f4
,
0x127ea392
,
0x10428db7
,
0x8272a972
,
0x9270c4a8
,
0x127de50b
,
0x285ba1c8
,
0x3c62f44f
,
0x35c0eaa5
,
0xe805d231
,
0x428929fb
,
0xb4fcdf82
,
0x4fb66a53
,
0x0e7dc15b
,
0x1f081fab
,
0x108618ae
,
0xfcfd086d
,
0xf9ff2889
,
0x694bcc11
,
0x236a5cae
,
0x12deca4d
,
0x2c3f8cc5
,
0xd2d02dfe
,
0xf8ef5896
,
0xe4cf52da
,
0x95155b67
,
0x494a488c
,
0xb9b6a80c
,
0x5c8f82bc
,
0x89d36b45
,
0x3a609437
,
0xec00c9a9
,
0x44715253
,
0x0a874b49
,
0xd773bc40
,
0x7c34671c
,
0x02717ef6
,
0x4feb5536
,
0xa2d02fff
,
0xd2bf60c4
,
0xd43f03c0
,
0x50b4ef6d
,
0x07478cd1
,
0x006e1888
,
0xa2e53f55
,
0xb9e6d4bc
,
0xa2048016
,
0x97573833
,
0xd7207d67
,
0xde0f8f3d
,
0x72f87b33
,
0xabcc4f33
,
0x7688c55d
,
0x7b00a6b0
,
0x947b0001
,
0x570075d2
,
0xf9bb88f8
,
0x8942019e
,
0x4264a5ff
,
0x856302e0
,
0x72dbd92b
,
0xee971b69
,
0x6ea22fde
,
0x5f08ae2b
,
0xaf7a616d
,
0xe5c98767
,
0xcf1febd2
,
0x61efc8c2
,
0xf1ac2571
,
0xcc8239c2
,
0x67214cb8
,
0xb1e583d1
,
0xb7dc3e62
,
0x7f10bdce
,
0xf90a5c38
,
0x0ff0443d
,
0x606e6dc6
,
0x60543a49
,
0x5727c148
,
0x2be98a1d
,
0x8ab41738
,
0x20e1be24
,
0xaf96da0f
,
0x68458425
,
0x99833be5
,
0x600d457d
,
0x282f9350
,
0x8334b362
,
0xd91d1120
,
0x2b6d8da0
,
0x642b1e31
,
0x9c305a00
,
0x52bce688
,
0x1b03588a
,
0xf7baefd5
,
0x4142ed9c
,
0xa4315c11
,
0x83323ec5
,
0xdfef4636
,
0xa133c501
,
0xe9d3531c
,
0xee353783
};
static
const
u32
s4
[
256
]
=
{
0x9db30420
,
0x1fb6e9de
,
0xa7be7bef
,
0xd273a298
,
0x4a4f7bdb
,
0x64ad8c57
,
0x85510443
,
0xfa020ed1
,
0x7e287aff
,
0xe60fb663
,
0x095f35a1
,
0x79ebf120
,
0xfd059d43
,
0x6497b7b1
,
0xf3641f63
,
0x241e4adf
,
0x28147f5f
,
0x4fa2b8cd
,
0xc9430040
,
0x0cc32220
,
0xfdd30b30
,
0xc0a5374f
,
0x1d2d00d9
,
0x24147b15
,
0xee4d111a
,
0x0fca5167
,
0x71ff904c
,
0x2d195ffe
,
0x1a05645f
,
0x0c13fefe
,
0x081b08ca
,
0x05170121
,
0x80530100
,
0xe83e5efe
,
0xac9af4f8
,
0x7fe72701
,
0xd2b8ee5f
,
0x06df4261
,
0xbb9e9b8a
,
0x7293ea25
,
0xce84ffdf
,
0xf5718801
,
0x3dd64b04
,
0xa26f263b
,
0x7ed48400
,
0x547eebe6
,
0x446d4ca0
,
0x6cf3d6f5
,
0x2649abdf
,
0xaea0c7f5
,
0x36338cc1
,
0x503f7e93
,
0xd3772061
,
0x11b638e1
,
0x72500e03
,
0xf80eb2bb
,
0xabe0502e
,
0xec8d77de
,
0x57971e81
,
0xe14f6746
,
0xc9335400
,
0x6920318f
,
0x081dbb99
,
0xffc304a5
,
0x4d351805
,
0x7f3d5ce3
,
0xa6c866c6
,
0x5d5bcca9
,
0xdaec6fea
,
0x9f926f91
,
0x9f46222f
,
0x3991467d
,
0xa5bf6d8e
,
0x1143c44f
,
0x43958302
,
0xd0214eeb
,
0x022083b8
,
0x3fb6180c
,
0x18f8931e
,
0x281658e6
,
0x26486e3e
,
0x8bd78a70
,
0x7477e4c1
,
0xb506e07c
,
0xf32d0a25
,
0x79098b02
,
0xe4eabb81
,
0x28123b23
,
0x69dead38
,
0x1574ca16
,
0xdf871b62
,
0x211c40b7
,
0xa51a9ef9
,
0x0014377b
,
0x041e8ac8
,
0x09114003
,
0xbd59e4d2
,
0xe3d156d5
,
0x4fe876d5
,
0x2f91a340
,
0x557be8de
,
0x00eae4a7
,
0x0ce5c2ec
,
0x4db4bba6
,
0xe756bdff
,
0xdd3369ac
,
0xec17b035
,
0x06572327
,
0x99afc8b0
,
0x56c8c391
,
0x6b65811c
,
0x5e146119
,
0x6e85cb75
,
0xbe07c002
,
0xc2325577
,
0x893ff4ec
,
0x5bbfc92d
,
0xd0ec3b25
,
0xb7801ab7
,
0x8d6d3b24
,
0x20c763ef
,
0xc366a5fc
,
0x9c382880
,
0x0ace3205
,
0xaac9548a
,
0xeca1d7c7
,
0x041afa32
,
0x1d16625a
,
0x6701902c
,
0x9b757a54
,
0x31d477f7
,
0x9126b031
,
0x36cc6fdb
,
0xc70b8b46
,
0xd9e66a48
,
0x56e55a79
,
0x026a4ceb
,
0x52437eff
,
0x2f8f76b4
,
0x0df980a5
,
0x8674cde3
,
0xedda04eb
,
0x17a9be04
,
0x2c18f4df
,
0xb7747f9d
,
0xab2af7b4
,
0xefc34d20
,
0x2e096b7c
,
0x1741a254
,
0xe5b6a035
,
0x213d42f6
,
0x2c1c7c26
,
0x61c2f50f
,
0x6552daf9
,
0xd2c231f8
,
0x25130f69
,
0xd8167fa2
,
0x0418f2c8
,
0x001a96a6
,
0x0d1526ab
,
0x63315c21
,
0x5e0a72ec
,
0x49bafefd
,
0x187908d9
,
0x8d0dbd86
,
0x311170a7
,
0x3e9b640c
,
0xcc3e10d7
,
0xd5cad3b6
,
0x0caec388
,
0xf73001e1
,
0x6c728aff
,
0x71eae2a1
,
0x1f9af36e
,
0xcfcbd12f
,
0xc1de8417
,
0xac07be6b
,
0xcb44a1d8
,
0x8b9b0f56
,
0x013988c3
,
0xb1c52fca
,
0xb4be31cd
,
0xd8782806
,
0x12a3a4e2
,
0x6f7de532
,
0x58fd7eb6
,
0xd01ee900
,
0x24adffc2
,
0xf4990fc5
,
0x9711aac5
,
0x001d7b95
,
0x82e5e7d2
,
0x109873f6
,
0x00613096
,
0xc32d9521
,
0xada121ff
,
0x29908415
,
0x7fbb977f
,
0xaf9eb3db
,
0x29c9ed2a
,
0x5ce2a465
,
0xa730f32c
,
0xd0aa3fe8
,
0x8a5cc091
,
0xd49e2ce7
,
0x0ce454a9
,
0xd60acd86
,
0x015f1919
,
0x77079103
,
0xdea03af6
,
0x78a8565e
,
0xdee356df
,
0x21f05cbe
,
0x8b75e387
,
0xb3c50651
,
0xb8a5c3ef
,
0xd8eeb6d2
,
0xe523be77
,
0xc2154529
,
0x2f69efdf
,
0xafe67afb
,
0xf470c4b2
,
0xf3e0eb5b
,
0xd6cc9876
,
0x39e4460c
,
0x1fda8538
,
0x1987832f
,
0xca007367
,
0xa99144f8
,
0x296b299e
,
0x492fc295
,
0x9266beab
,
0xb5676e69
,
0x9bd3ddda
,
0xdf7e052f
,
0xdb25701c
,
0x1b5e51ee
,
0xf65324e6
,
0x6afce36c
,
0x0316cc04
,
0x8644213e
,
0xb7dc59d0
,
0x7965291f
,
0xccd6fd43
,
0x41823979
,
0x932bcdf6
,
0xb657c34d
,
0x4edfd282
,
0x7ae5290c
,
0x3cb9536b
,
0x851e20fe
,
0x9833557e
,
0x13ecf0b0
,
0xd3ffb372
,
0x3f85c5c1
,
0x0aef7ed2
};
static
const
u32
s5
[
256
]
=
{
0x7ec90c04
,
0x2c6e74b9
,
0x9b0e66df
,
0xa6337911
,
0xb86a7fff
,
0x1dd358f5
,
0x44dd9d44
,
0x1731167f
,
0x08fbf1fa
,
0xe7f511cc
,
0xd2051b00
,
0x735aba00
,
0x2ab722d8
,
0x386381cb
,
0xacf6243a
,
0x69befd7a
,
0xe6a2e77f
,
0xf0c720cd
,
0xc4494816
,
0xccf5c180
,
0x38851640
,
0x15b0a848
,
0xe68b18cb
,
0x4caadeff
,
0x5f480a01
,
0x0412b2aa
,
0x259814fc
,
0x41d0efe2
,
0x4e40b48d
,
0x248eb6fb
,
0x8dba1cfe
,
0x41a99b02
,
0x1a550a04
,
0xba8f65cb
,
0x7251f4e7
,
0x95a51725
,
0xc106ecd7
,
0x97a5980a
,
0xc539b9aa
,
0x4d79fe6a
,
0xf2f3f763
,
0x68af8040
,
0xed0c9e56
,
0x11b4958b
,
0xe1eb5a88
,
0x8709e6b0
,
0xd7e07156
,
0x4e29fea7
,
0x6366e52d
,
0x02d1c000
,
0xc4ac8e05
,
0x9377f571
,
0x0c05372a
,
0x578535f2
,
0x2261be02
,
0xd642a0c9
,
0xdf13a280
,
0x74b55bd2
,
0x682199c0
,
0xd421e5ec
,
0x53fb3ce8
,
0xc8adedb3
,
0x28a87fc9
,
0x3d959981
,
0x5c1ff900
,
0xfe38d399
,
0x0c4eff0b
,
0x062407ea
,
0xaa2f4fb1
,
0x4fb96976
,
0x90c79505
,
0xb0a8a774
,
0xef55a1ff
,
0xe59ca2c2
,
0xa6b62d27
,
0xe66a4263
,
0xdf65001f
,
0x0ec50966
,
0xdfdd55bc
,
0x29de0655
,
0x911e739a
,
0x17af8975
,
0x32c7911c
,
0x89f89468
,
0x0d01e980
,
0x524755f4
,
0x03b63cc9
,
0x0cc844b2
,
0xbcf3f0aa
,
0x87ac36e9
,
0xe53a7426
,
0x01b3d82b
,
0x1a9e7449
,
0x64ee2d7e
,
0xcddbb1da
,
0x01c94910
,
0xb868bf80
,
0x0d26f3fd
,
0x9342ede7
,
0x04a5c284
,
0x636737b6
,
0x50f5b616
,
0xf24766e3
,
0x8eca36c1
,
0x136e05db
,
0xfef18391
,
0xfb887a37
,
0xd6e7f7d4
,
0xc7fb7dc9
,
0x3063fcdf
,
0xb6f589de
,
0xec2941da
,
0x26e46695
,
0xb7566419
,
0xf654efc5
,
0xd08d58b7
,
0x48925401
,
0xc1bacb7f
,
0xe5ff550f
,
0xb6083049
,
0x5bb5d0e8
,
0x87d72e5a
,
0xab6a6ee1
,
0x223a66ce
,
0xc62bf3cd
,
0x9e0885f9
,
0x68cb3e47
,
0x086c010f
,
0xa21de820
,
0xd18b69de
,
0xf3f65777
,
0xfa02c3f6
,
0x407edac3
,
0xcbb3d550
,
0x1793084d
,
0xb0d70eba
,
0x0ab378d5
,
0xd951fb0c
,
0xded7da56
,
0x4124bbe4
,
0x94ca0b56
,
0x0f5755d1
,
0xe0e1e56e
,
0x6184b5be
,
0x580a249f
,
0x94f74bc0
,
0xe327888e
,
0x9f7b5561
,
0xc3dc0280
,
0x05687715
,
0x646c6bd7
,
0x44904db3
,
0x66b4f0a3
,
0xc0f1648a
,
0x697ed5af
,
0x49e92ff6
,
0x309e374f
,
0x2cb6356a
,
0x85808573
,
0x4991f840
,
0x76f0ae02
,
0x083be84d
,
0x28421c9a
,
0x44489406
,
0x736e4cb8
,
0xc1092910
,
0x8bc95fc6
,
0x7d869cf4
,
0x134f616f
,
0x2e77118d
,
0xb31b2be1
,
0xaa90b472
,
0x3ca5d717
,
0x7d161bba
,
0x9cad9010
,
0xaf462ba2
,
0x9fe459d2
,
0x45d34559
,
0xd9f2da13
,
0xdbc65487
,
0xf3e4f94e
,
0x176d486f
,
0x097c13ea
,
0x631da5c7
,
0x445f7382
,
0x175683f4
,
0xcdc66a97
,
0x70be0288
,
0xb3cdcf72
,
0x6e5dd2f3
,
0x20936079
,
0x459b80a5
,
0xbe60e2db
,
0xa9c23101
,
0xeba5315c
,
0x224e42f2
,
0x1c5c1572
,
0xf6721b2c
,
0x1ad2fff3
,
0x8c25404e
,
0x324ed72f
,
0x4067b7fd
,
0x0523138e
,
0x5ca3bc78
,
0xdc0fd66e
,
0x75922283
,
0x784d6b17
,
0x58ebb16e
,
0x44094f85
,
0x3f481d87
,
0xfcfeae7b
,
0x77b5ff76
,
0x8c2302bf
,
0xaaf47556
,
0x5f46b02a
,
0x2b092801
,
0x3d38f5f7
,
0x0ca81f36
,
0x52af4a8a
,
0x66d5e7c0
,
0xdf3b0874
,
0x95055110
,
0x1b5ad7a8
,
0xf61ed5ad
,
0x6cf6e479
,
0x20758184
,
0xd0cefa65
,
0x88f7be58
,
0x4a046826
,
0x0ff6f8f3
,
0xa09c7f70
,
0x5346aba0
,
0x5ce96c28
,
0xe176eda3
,
0x6bac307f
,
0x376829d2
,
0x85360fa9
,
0x17e3fe2a
,
0x24b79767
,
0xf5a96b20
,
0xd6cd2595
,
0x68ff1ebf
,
0x7555442c
,
0xf19f06be
,
0xf9e0659a
,
0xeeb9491d
,
0x34010718
,
0xbb30cab8
,
0xe822fe15
,
0x88570983
,
0x750e6249
,
0xda627e55
,
0x5e76ffa8
,
0xb1534546
,
0x6d47de08
,
0xefe9e7d4
};
static
const
u32
s6
[
256
]
=
{
0xf6fa8f9d
,
0x2cac6ce1
,
0x4ca34867
,
0xe2337f7c
,
0x95db08e7
,
0x016843b4
,
0xeced5cbc
,
0x325553ac
,
0xbf9f0960
,
0xdfa1e2ed
,
0x83f0579d
,
0x63ed86b9
,
0x1ab6a6b8
,
0xde5ebe39
,
0xf38ff732
,
0x8989b138
,
0x33f14961
,
0xc01937bd
,
0xf506c6da
,
0xe4625e7e
,
0xa308ea99
,
0x4e23e33c
,
0x79cbd7cc
,
0x48a14367
,
0xa3149619
,
0xfec94bd5
,
0xa114174a
,
0xeaa01866
,
0xa084db2d
,
0x09a8486f
,
0xa888614a
,
0x2900af98
,
0x01665991
,
0xe1992863
,
0xc8f30c60
,
0x2e78ef3c
,
0xd0d51932
,
0xcf0fec14
,
0xf7ca07d2
,
0xd0a82072
,
0xfd41197e
,
0x9305a6b0
,
0xe86be3da
,
0x74bed3cd
,
0x372da53c
,
0x4c7f4448
,
0xdab5d440
,
0x6dba0ec3
,
0x083919a7
,
0x9fbaeed9
,
0x49dbcfb0
,
0x4e670c53
,
0x5c3d9c01
,
0x64bdb941
,
0x2c0e636a
,
0xba7dd9cd
,
0xea6f7388
,
0xe70bc762
,
0x35f29adb
,
0x5c4cdd8d
,
0xf0d48d8c
,
0xb88153e2
,
0x08a19866
,
0x1ae2eac8
,
0x284caf89
,
0xaa928223
,
0x9334be53
,
0x3b3a21bf
,
0x16434be3
,
0x9aea3906
,
0xefe8c36e
,
0xf890cdd9
,
0x80226dae
,
0xc340a4a3
,
0xdf7e9c09
,
0xa694a807
,
0x5b7c5ecc
,
0x221db3a6
,
0x9a69a02f
,
0x68818a54
,
0xceb2296f
,
0x53c0843a
,
0xfe893655
,
0x25bfe68a
,
0xb4628abc
,
0xcf222ebf
,
0x25ac6f48
,
0xa9a99387
,
0x53bddb65
,
0xe76ffbe7
,
0xe967fd78
,
0x0ba93563
,
0x8e342bc1
,
0xe8a11be9
,
0x4980740d
,
0xc8087dfc
,
0x8de4bf99
,
0xa11101a0
,
0x7fd37975
,
0xda5a26c0
,
0xe81f994f
,
0x9528cd89
,
0xfd339fed
,
0xb87834bf
,
0x5f04456d
,
0x22258698
,
0xc9c4c83b
,
0x2dc156be
,
0x4f628daa
,
0x57f55ec5
,
0xe2220abe
,
0xd2916ebf
,
0x4ec75b95
,
0x24f2c3c0
,
0x42d15d99
,
0xcd0d7fa0
,
0x7b6e27ff
,
0xa8dc8af0
,
0x7345c106
,
0xf41e232f
,
0x35162386
,
0xe6ea8926
,
0x3333b094
,
0x157ec6f2
,
0x372b74af
,
0x692573e4
,
0xe9a9d848
,
0xf3160289
,
0x3a62ef1d
,
0xa787e238
,
0xf3a5f676
,
0x74364853
,
0x20951063
,
0x4576698d
,
0xb6fad407
,
0x592af950
,
0x36f73523
,
0x4cfb6e87
,
0x7da4cec0
,
0x6c152daa
,
0xcb0396a8
,
0xc50dfe5d
,
0xfcd707ab
,
0x0921c42f
,
0x89dff0bb
,
0x5fe2be78
,
0x448f4f33
,
0x754613c9
,
0x2b05d08d
,
0x48b9d585
,
0xdc049441
,
0xc8098f9b
,
0x7dede786
,
0xc39a3373
,
0x42410005
,
0x6a091751
,
0x0ef3c8a6
,
0x890072d6
,
0x28207682
,
0xa9a9f7be
,
0xbf32679d
,
0xd45b5b75
,
0xb353fd00
,
0xcbb0e358
,
0x830f220a
,
0x1f8fb214
,
0xd372cf08
,
0xcc3c4a13
,
0x8cf63166
,
0x061c87be
,
0x88c98f88
,
0x6062e397
,
0x47cf8e7a
,
0xb6c85283
,
0x3cc2acfb
,
0x3fc06976
,
0x4e8f0252
,
0x64d8314d
,
0xda3870e3
,
0x1e665459
,
0xc10908f0
,
0x513021a5
,
0x6c5b68b7
,
0x822f8aa0
,
0x3007cd3e
,
0x74719eef
,
0xdc872681
,
0x073340d4
,
0x7e432fd9
,
0x0c5ec241
,
0x8809286c
,
0xf592d891
,
0x08a930f6
,
0x957ef305
,
0xb7fbffbd
,
0xc266e96f
,
0x6fe4ac98
,
0xb173ecc0
,
0xbc60b42a
,
0x953498da
,
0xfba1ae12
,
0x2d4bd736
,
0x0f25faab
,
0xa4f3fceb
,
0xe2969123
,
0x257f0c3d
,
0x9348af49
,
0x361400bc
,
0xe8816f4a
,
0x3814f200
,
0xa3f94043
,
0x9c7a54c2
,
0xbc704f57
,
0xda41e7f9
,
0xc25ad33a
,
0x54f4a084
,
0xb17f5505
,
0x59357cbe
,
0xedbd15c8
,
0x7f97c5ab
,
0xba5ac7b5
,
0xb6f6deaf
,
0x3a479c3a
,
0x5302da25
,
0x653d7e6a
,
0x54268d49
,
0x51a477ea
,
0x5017d55b
,
0xd7d25d88
,
0x44136c76
,
0x0404a8c8
,
0xb8e5a121
,
0xb81a928a
,
0x60ed5869
,
0x97c55b96
,
0xeaec991b
,
0x29935913
,
0x01fdb7f1
,
0x088e8dfa
,
0x9ab6f6f5
,
0x3b4cbf9f
,
0x4a5de3ab
,
0xe6051d35
,
0xa0e1d855
,
0xd36b4cf1
,
0xf544edeb
,
0xb0e93524
,
0xbebb8fbd
,
0xa2d762cf
,
0x49c92f54
,
0x38b5f331
,
0x7128a454
,
0x48392905
,
0xa65b1db8
,
0x851c97bd
,
0xd675cf2f
};
static
const
u32
s7
[
256
]
=
{
0x85e04019
,
0x332bf567
,
0x662dbfff
,
0xcfc65693
,
0x2a8d7f6f
,
0xab9bc912
,
0xde6008a1
,
0x2028da1f
,
0x0227bce7
,
0x4d642916
,
0x18fac300
,
0x50f18b82
,
0x2cb2cb11
,
0xb232e75c
,
0x4b3695f2
,
0xb28707de
,
0xa05fbcf6
,
0xcd4181e9
,
0xe150210c
,
0xe24ef1bd
,
0xb168c381
,
0xfde4e789
,
0x5c79b0d8
,
0x1e8bfd43
,
0x4d495001
,
0x38be4341
,
0x913cee1d
,
0x92a79c3f
,
0x089766be
,
0xbaeeadf4
,
0x1286becf
,
0xb6eacb19
,
0x2660c200
,
0x7565bde4
,
0x64241f7a
,
0x8248dca9
,
0xc3b3ad66
,
0x28136086
,
0x0bd8dfa8
,
0x356d1cf2
,
0x107789be
,
0xb3b2e9ce
,
0x0502aa8f
,
0x0bc0351e
,
0x166bf52a
,
0xeb12ff82
,
0xe3486911
,
0xd34d7516
,
0x4e7b3aff
,
0x5f43671b
,
0x9cf6e037
,
0x4981ac83
,
0x334266ce
,
0x8c9341b7
,
0xd0d854c0
,
0xcb3a6c88
,
0x47bc2829
,
0x4725ba37
,
0xa66ad22b
,
0x7ad61f1e
,
0x0c5cbafa
,
0x4437f107
,
0xb6e79962
,
0x42d2d816
,
0x0a961288
,
0xe1a5c06e
,
0x13749e67
,
0x72fc081a
,
0xb1d139f7
,
0xf9583745
,
0xcf19df58
,
0xbec3f756
,
0xc06eba30
,
0x07211b24
,
0x45c28829
,
0xc95e317f
,
0xbc8ec511
,
0x38bc46e9
,
0xc6e6fa14
,
0xbae8584a
,
0xad4ebc46
,
0x468f508b
,
0x7829435f
,
0xf124183b
,
0x821dba9f
,
0xaff60ff4
,
0xea2c4e6d
,
0x16e39264
,
0x92544a8b
,
0x009b4fc3
,
0xaba68ced
,
0x9ac96f78
,
0x06a5b79a
,
0xb2856e6e
,
0x1aec3ca9
,
0xbe838688
,
0x0e0804e9
,
0x55f1be56
,
0xe7e5363b
,
0xb3a1f25d
,
0xf7debb85
,
0x61fe033c
,
0x16746233
,
0x3c034c28
,
0xda6d0c74
,
0x79aac56c
,
0x3ce4e1ad
,
0x51f0c802
,
0x98f8f35a
,
0x1626a49f
,
0xeed82b29
,
0x1d382fe3
,
0x0c4fb99a
,
0xbb325778
,
0x3ec6d97b
,
0x6e77a6a9
,
0xcb658b5c
,
0xd45230c7
,
0x2bd1408b
,
0x60c03eb7
,
0xb9068d78
,
0xa33754f4
,
0xf430c87d
,
0xc8a71302
,
0xb96d8c32
,
0xebd4e7be
,
0xbe8b9d2d
,
0x7979fb06
,
0xe7225308
,
0x8b75cf77
,
0x11ef8da4
,
0xe083c858
,
0x8d6b786f
,
0x5a6317a6
,
0xfa5cf7a0
,
0x5dda0033
,
0xf28ebfb0
,
0xf5b9c310
,
0xa0eac280
,
0x08b9767a
,
0xa3d9d2b0
,
0x79d34217
,
0x021a718d
,
0x9ac6336a
,
0x2711fd60
,
0x438050e3
,
0x069908a8
,
0x3d7fedc4
,
0x826d2bef
,
0x4eeb8476
,
0x488dcf25
,
0x36c9d566
,
0x28e74e41
,
0xc2610aca
,
0x3d49a9cf
,
0xbae3b9df
,
0xb65f8de6
,
0x92aeaf64
,
0x3ac7d5e6
,
0x9ea80509
,
0xf22b017d
,
0xa4173f70
,
0xdd1e16c3
,
0x15e0d7f9
,
0x50b1b887
,
0x2b9f4fd5
,
0x625aba82
,
0x6a017962
,
0x2ec01b9c
,
0x15488aa9
,
0xd716e740
,
0x40055a2c
,
0x93d29a22
,
0xe32dbf9a
,
0x058745b9
,
0x3453dc1e
,
0xd699296e
,
0x496cff6f
,
0x1c9f4986
,
0xdfe2ed07
,
0xb87242d1
,
0x19de7eae
,
0x053e561a
,
0x15ad6f8c
,
0x66626c1c
,
0x7154c24c
,
0xea082b2a
,
0x93eb2939
,
0x17dcb0f0
,
0x58d4f2ae
,
0x9ea294fb
,
0x52cf564c
,
0x9883fe66
,
0x2ec40581
,
0x763953c3
,
0x01d6692e
,
0xd3a0c108
,
0xa1e7160e
,
0xe4f2dfa6
,
0x693ed285
,
0x74904698
,
0x4c2b0edd
,
0x4f757656
,
0x5d393378
,
0xa132234f
,
0x3d321c5d
,
0xc3f5e194
,
0x4b269301
,
0xc79f022f
,
0x3c997e7e
,
0x5e4f9504
,
0x3ffafbbd
,
0x76f7ad0e
,
0x296693f4
,
0x3d1fce6f
,
0xc61e45be
,
0xd3b5ab34
,
0xf72bf9b7
,
0x1b0434c0
,
0x4e72b567
,
0x5592a33d
,
0xb5229301
,
0xcfd2a87f
,
0x60aeb767
,
0x1814386b
,
0x30bcc33d
,
0x38a0c07d
,
0xfd1606f2
,
0xc363519b
,
0x589dd390
,
0x5479f8e6
,
0x1cb8d647
,
0x97fd61a9
,
0xea7759f4
,
0x2d57539d
,
0x569a58cf
,
0xe84e63ad
,
0x462e1b78
,
0x6580f87e
,
0xf3817914
,
0x91da55f4
,
0x40a230f3
,
0xd1988f35
,
0xb6e318d2
,
0x3ffa50bc
,
0x3d40f021
,
0xc3c0bdae
,
0x4958c24c
,
0x518f36b2
,
0x84b1d370
,
0x0fedce83
,
0x878ddada
,
0xf2a279c7
,
0x94e01be8
,
0x90716f4b
,
0x954b8aa3
};
static
const
u32
sb8
[
256
]
=
{
0xe216300d
,
0xbbddfffc
,
0xa7ebdabd
,
0x35648095
,
0x7789f8b7
,
0xe6c1121b
,
0x0e241600
,
0x052ce8b5
,
0x11a9cfb0
,
0xe5952f11
,
0xece7990a
,
0x9386d174
,
0x2a42931c
,
0x76e38111
,
0xb12def3a
,
0x37ddddfc
,
0xde9adeb1
,
0x0a0cc32c
,
0xbe197029
,
0x84a00940
,
0xbb243a0f
,
0xb4d137cf
,
0xb44e79f0
,
0x049eedfd
,
0x0b15a15d
,
0x480d3168
,
0x8bbbde5a
,
0x669ded42
,
0xc7ece831
,
0x3f8f95e7
,
0x72df191b
,
0x7580330d
,
0x94074251
,
0x5c7dcdfa
,
0xabbe6d63
,
0xaa402164
,
0xb301d40a
,
0x02e7d1ca
,
0x53571dae
,
0x7a3182a2
,
0x12a8ddec
,
0xfdaa335d
,
0x176f43e8
,
0x71fb46d4
,
0x38129022
,
0xce949ad4
,
0xb84769ad
,
0x965bd862
,
0x82f3d055
,
0x66fb9767
,
0x15b80b4e
,
0x1d5b47a0
,
0x4cfde06f
,
0xc28ec4b8
,
0x57e8726e
,
0x647a78fc
,
0x99865d44
,
0x608bd593
,
0x6c200e03
,
0x39dc5ff6
,
0x5d0b00a3
,
0xae63aff2
,
0x7e8bd632
,
0x70108c0c
,
0xbbd35049
,
0x2998df04
,
0x980cf42a
,
0x9b6df491
,
0x9e7edd53
,
0x06918548
,
0x58cb7e07
,
0x3b74ef2e
,
0x522fffb1
,
0xd24708cc
,
0x1c7e27cd
,
0xa4eb215b
,
0x3cf1d2e2
,
0x19b47a38
,
0x424f7618
,
0x35856039
,
0x9d17dee7
,
0x27eb35e6
,
0xc9aff67b
,
0x36baf5b8
,
0x09c467cd
,
0xc18910b1
,
0xe11dbf7b
,
0x06cd1af8
,
0x7170c608
,
0x2d5e3354
,
0xd4de495a
,
0x64c6d006
,
0xbcc0c62c
,
0x3dd00db3
,
0x708f8f34
,
0x77d51b42
,
0x264f620f
,
0x24b8d2bf
,
0x15c1b79e
,
0x46a52564
,
0xf8d7e54e
,
0x3e378160
,
0x7895cda5
,
0x859c15a5
,
0xe6459788
,
0xc37bc75f
,
0xdb07ba0c
,
0x0676a3ab
,
0x7f229b1e
,
0x31842e7b
,
0x24259fd7
,
0xf8bef472
,
0x835ffcb8
,
0x6df4c1f2
,
0x96f5b195
,
0xfd0af0fc
,
0xb0fe134c
,
0xe2506d3d
,
0x4f9b12ea
,
0xf215f225
,
0xa223736f
,
0x9fb4c428
,
0x25d04979
,
0x34c713f8
,
0xc4618187
,
0xea7a6e98
,
0x7cd16efc
,
0x1436876c
,
0xf1544107
,
0xbedeee14
,
0x56e9af27
,
0xa04aa441
,
0x3cf7c899
,
0x92ecbae6
,
0xdd67016d
,
0x151682eb
,
0xa842eedf
,
0xfdba60b4
,
0xf1907b75
,
0x20e3030f
,
0x24d8c29e
,
0xe139673b
,
0xefa63fb8
,
0x71873054
,
0xb6f2cf3b
,
0x9f326442
,
0xcb15a4cc
,
0xb01a4504
,
0xf1e47d8d
,
0x844a1be5
,
0xbae7dfdc
,
0x42cbda70
,
0xcd7dae0a
,
0x57e85b7a
,
0xd53f5af6
,
0x20cf4d8c
,
0xcea4d428
,
0x79d130a4
,
0x3486ebfb
,
0x33d3cddc
,
0x77853b53
,
0x37effcb5
,
0xc5068778
,
0xe580b3e6
,
0x4e68b8f4
,
0xc5c8b37e
,
0x0d809ea2
,
0x398feb7c
,
0x132a4f94
,
0x43b7950e
,
0x2fee7d1c
,
0x223613bd
,
0xdd06caa2
,
0x37df932b
,
0xc4248289
,
0xacf3ebc3
,
0x5715f6b7
,
0xef3478dd
,
0xf267616f
,
0xc148cbe4
,
0x9052815e
,
0x5e410fab
,
0xb48a2465
,
0x2eda7fa4
,
0xe87b40e4
,
0xe98ea084
,
0x5889e9e1
,
0xefd390fc
,
0xdd07d35b
,
0xdb485694
,
0x38d7e5b2
,
0x57720101
,
0x730edebc
,
0x5b643113
,
0x94917e4f
,
0x503c2fba
,
0x646f1282
,
0x7523d24a
,
0xe0779695
,
0xf9c17a8f
,
0x7a5b2121
,
0xd187b896
,
0x29263a4d
,
0xba510cdf
,
0x81f47c9f
,
0xad1163ed
,
0xea7b5965
,
0x1a00726e
,
0x11403092
,
0x00da6d77
,
0x4a0cdd61
,
0xad1f4603
,
0x605bdfb0
,
0x9eedc364
,
0x22ebe6a8
,
0xcee7d28a
,
0xa0e736a0
,
0x5564a6b9
,
0x10853209
,
0xc7eb8f37
,
0x2de705ca
,
0x8951570f
,
0xdf09822b
,
0xbd691a6c
,
0xaa12e4f2
,
0x87451c0f
,
0xe0f6a27a
,
0x3ada4819
,
0x4cf1764f
,
0x0d771c2b
,
0x67cdb156
,
0x350d8384
,
0x5938fa0f
,
0x42399ef3
,
0x36997b07
,
0x0e84093d
,
0x4aa93e61
,
0x8360d87b
,
0x1fa98b0c
,
0x1149382c
,
0xe97625a5
,
0x0614d1b7
,
0x0e25244b
,
0x0c768347
,
0x589e8d82
,
0x0d2059d1
,
0xa466bb1e
,
0xf8da0a82
,
0x04f19130
,
0xba6e4ec0
,
0x99265164
,
0x1ee7230d
,
0x50b2ad80
,
0xeaee6801
,
0x8db2a283
,
0xea8bf59e
};
#define rol(n,x) ( ((x) << (n)) | ((x) >> (32-(n))) )
#define F1(D,m,r) ( (I = ((m) + (D))), (I=rol((r),I)), \
(((s1[I >> 24] ^ s2[(I>>16)&0xff]) - s3[(I>>8)&0xff]) + s4[I&0xff]) )
#define F2(D,m,r) ( (I = ((m) ^ (D))), (I=rol((r),I)), \
(((s1[I >> 24] - s2[(I>>16)&0xff]) + s3[(I>>8)&0xff]) ^ s4[I&0xff]) )
#define F3(D,m,r) ( (I = ((m) - (D))), (I=rol((r),I)), \
(((s1[I >> 24] + s2[(I>>16)&0xff]) ^ s3[(I>>8)&0xff]) - s4[I&0xff]) )
static
void
cast5_encrypt
(
void
*
ctx
,
u8
*
outbuf
,
const
u8
*
inbuf
)
{
struct
cast5_ctx
*
c
=
(
struct
cast5_ctx
*
)
ctx
;
u32
l
,
r
,
t
;
u32
I
;
/* used by the Fx macros */
u32
*
Km
;
u8
*
Kr
;
Km
=
c
->
Km
;
Kr
=
c
->
Kr
;
/* (L0,R0) <-- (m1...m64). (Split the plaintext into left and
* right 32-bit halves L0 = m1...m32 and R0 = m33...m64.)
*/
l
=
inbuf
[
0
]
<<
24
|
inbuf
[
1
]
<<
16
|
inbuf
[
2
]
<<
8
|
inbuf
[
3
];
r
=
inbuf
[
4
]
<<
24
|
inbuf
[
5
]
<<
16
|
inbuf
[
6
]
<<
8
|
inbuf
[
7
];
/* (16 rounds) for i from 1 to 16, compute Li and Ri as follows:
* Li = Ri-1;
* Ri = Li-1 ^ f(Ri-1,Kmi,Kri), where f is defined in Section 2.2
* Rounds 1, 4, 7, 10, 13, and 16 use f function Type 1.
* Rounds 2, 5, 8, 11, and 14 use f function Type 2.
* Rounds 3, 6, 9, 12, and 15 use f function Type 3.
*/
if
(
!
(
c
->
rr
))
{
t
=
l
;
l
=
r
;
r
=
t
^
F1
(
r
,
Km
[
0
],
Kr
[
0
]);
t
=
l
;
l
=
r
;
r
=
t
^
F2
(
r
,
Km
[
1
],
Kr
[
1
]);
t
=
l
;
l
=
r
;
r
=
t
^
F3
(
r
,
Km
[
2
],
Kr
[
2
]);
t
=
l
;
l
=
r
;
r
=
t
^
F1
(
r
,
Km
[
3
],
Kr
[
3
]);
t
=
l
;
l
=
r
;
r
=
t
^
F2
(
r
,
Km
[
4
],
Kr
[
4
]);
t
=
l
;
l
=
r
;
r
=
t
^
F3
(
r
,
Km
[
5
],
Kr
[
5
]);
t
=
l
;
l
=
r
;
r
=
t
^
F1
(
r
,
Km
[
6
],
Kr
[
6
]);
t
=
l
;
l
=
r
;
r
=
t
^
F2
(
r
,
Km
[
7
],
Kr
[
7
]);
t
=
l
;
l
=
r
;
r
=
t
^
F3
(
r
,
Km
[
8
],
Kr
[
8
]);
t
=
l
;
l
=
r
;
r
=
t
^
F1
(
r
,
Km
[
9
],
Kr
[
9
]);
t
=
l
;
l
=
r
;
r
=
t
^
F2
(
r
,
Km
[
10
],
Kr
[
10
]);
t
=
l
;
l
=
r
;
r
=
t
^
F3
(
r
,
Km
[
11
],
Kr
[
11
]);
t
=
l
;
l
=
r
;
r
=
t
^
F1
(
r
,
Km
[
12
],
Kr
[
12
]);
t
=
l
;
l
=
r
;
r
=
t
^
F2
(
r
,
Km
[
13
],
Kr
[
13
]);
t
=
l
;
l
=
r
;
r
=
t
^
F3
(
r
,
Km
[
14
],
Kr
[
14
]);
t
=
l
;
l
=
r
;
r
=
t
^
F1
(
r
,
Km
[
15
],
Kr
[
15
]);
}
else
{
t
=
l
;
l
=
r
;
r
=
t
^
F1
(
r
,
Km
[
0
],
Kr
[
0
]);
t
=
l
;
l
=
r
;
r
=
t
^
F2
(
r
,
Km
[
1
],
Kr
[
1
]);
t
=
l
;
l
=
r
;
r
=
t
^
F3
(
r
,
Km
[
2
],
Kr
[
2
]);
t
=
l
;
l
=
r
;
r
=
t
^
F1
(
r
,
Km
[
3
],
Kr
[
3
]);
t
=
l
;
l
=
r
;
r
=
t
^
F2
(
r
,
Km
[
4
],
Kr
[
4
]);
t
=
l
;
l
=
r
;
r
=
t
^
F3
(
r
,
Km
[
5
],
Kr
[
5
]);
t
=
l
;
l
=
r
;
r
=
t
^
F1
(
r
,
Km
[
6
],
Kr
[
6
]);
t
=
l
;
l
=
r
;
r
=
t
^
F2
(
r
,
Km
[
7
],
Kr
[
7
]);
t
=
l
;
l
=
r
;
r
=
t
^
F3
(
r
,
Km
[
8
],
Kr
[
8
]);
t
=
l
;
l
=
r
;
r
=
t
^
F1
(
r
,
Km
[
9
],
Kr
[
9
]);
t
=
l
;
l
=
r
;
r
=
t
^
F2
(
r
,
Km
[
10
],
Kr
[
10
]);
t
=
l
;
l
=
r
;
r
=
t
^
F3
(
r
,
Km
[
11
],
Kr
[
11
]);
}
/* c1...c64 <-- (R16,L16). (Exchange final blocks L16, R16 and
* concatenate to form the ciphertext.) */
outbuf
[
0
]
=
(
r
>>
24
)
&
0xff
;
outbuf
[
1
]
=
(
r
>>
16
)
&
0xff
;
outbuf
[
2
]
=
(
r
>>
8
)
&
0xff
;
outbuf
[
3
]
=
r
&
0xff
;
outbuf
[
4
]
=
(
l
>>
24
)
&
0xff
;
outbuf
[
5
]
=
(
l
>>
16
)
&
0xff
;
outbuf
[
6
]
=
(
l
>>
8
)
&
0xff
;
outbuf
[
7
]
=
l
&
0xff
;
}
static
void
cast5_decrypt
(
void
*
ctx
,
u8
*
outbuf
,
const
u8
*
inbuf
)
{
struct
cast5_ctx
*
c
=
(
struct
cast5_ctx
*
)
ctx
;
u32
l
,
r
,
t
;
u32
I
;
u32
*
Km
;
u8
*
Kr
;
Km
=
c
->
Km
;
Kr
=
c
->
Kr
;
l
=
inbuf
[
0
]
<<
24
|
inbuf
[
1
]
<<
16
|
inbuf
[
2
]
<<
8
|
inbuf
[
3
];
r
=
inbuf
[
4
]
<<
24
|
inbuf
[
5
]
<<
16
|
inbuf
[
6
]
<<
8
|
inbuf
[
7
];
if
(
!
(
c
->
rr
))
{
t
=
l
;
l
=
r
;
r
=
t
^
F1
(
r
,
Km
[
15
],
Kr
[
15
]);
t
=
l
;
l
=
r
;
r
=
t
^
F3
(
r
,
Km
[
14
],
Kr
[
14
]);
t
=
l
;
l
=
r
;
r
=
t
^
F2
(
r
,
Km
[
13
],
Kr
[
13
]);
t
=
l
;
l
=
r
;
r
=
t
^
F1
(
r
,
Km
[
12
],
Kr
[
12
]);
t
=
l
;
l
=
r
;
r
=
t
^
F3
(
r
,
Km
[
11
],
Kr
[
11
]);
t
=
l
;
l
=
r
;
r
=
t
^
F2
(
r
,
Km
[
10
],
Kr
[
10
]);
t
=
l
;
l
=
r
;
r
=
t
^
F1
(
r
,
Km
[
9
],
Kr
[
9
]);
t
=
l
;
l
=
r
;
r
=
t
^
F3
(
r
,
Km
[
8
],
Kr
[
8
]);
t
=
l
;
l
=
r
;
r
=
t
^
F2
(
r
,
Km
[
7
],
Kr
[
7
]);
t
=
l
;
l
=
r
;
r
=
t
^
F1
(
r
,
Km
[
6
],
Kr
[
6
]);
t
=
l
;
l
=
r
;
r
=
t
^
F3
(
r
,
Km
[
5
],
Kr
[
5
]);
t
=
l
;
l
=
r
;
r
=
t
^
F2
(
r
,
Km
[
4
],
Kr
[
4
]);
t
=
l
;
l
=
r
;
r
=
t
^
F1
(
r
,
Km
[
3
],
Kr
[
3
]);
t
=
l
;
l
=
r
;
r
=
t
^
F3
(
r
,
Km
[
2
],
Kr
[
2
]);
t
=
l
;
l
=
r
;
r
=
t
^
F2
(
r
,
Km
[
1
],
Kr
[
1
]);
t
=
l
;
l
=
r
;
r
=
t
^
F1
(
r
,
Km
[
0
],
Kr
[
0
]);
}
else
{
t
=
l
;
l
=
r
;
r
=
t
^
F3
(
r
,
Km
[
11
],
Kr
[
11
]);
t
=
l
;
l
=
r
;
r
=
t
^
F2
(
r
,
Km
[
10
],
Kr
[
10
]);
t
=
l
;
l
=
r
;
r
=
t
^
F1
(
r
,
Km
[
9
],
Kr
[
9
]);
t
=
l
;
l
=
r
;
r
=
t
^
F3
(
r
,
Km
[
8
],
Kr
[
8
]);
t
=
l
;
l
=
r
;
r
=
t
^
F2
(
r
,
Km
[
7
],
Kr
[
7
]);
t
=
l
;
l
=
r
;
r
=
t
^
F1
(
r
,
Km
[
6
],
Kr
[
6
]);
t
=
l
;
l
=
r
;
r
=
t
^
F3
(
r
,
Km
[
5
],
Kr
[
5
]);
t
=
l
;
l
=
r
;
r
=
t
^
F2
(
r
,
Km
[
4
],
Kr
[
4
]);
t
=
l
;
l
=
r
;
r
=
t
^
F1
(
r
,
Km
[
3
],
Kr
[
3
]);
t
=
l
;
l
=
r
;
r
=
t
^
F3
(
r
,
Km
[
2
],
Kr
[
2
]);
t
=
l
;
l
=
r
;
r
=
t
^
F2
(
r
,
Km
[
1
],
Kr
[
1
]);
t
=
l
;
l
=
r
;
r
=
t
^
F1
(
r
,
Km
[
0
],
Kr
[
0
]);
}
outbuf
[
0
]
=
(
r
>>
24
)
&
0xff
;
outbuf
[
1
]
=
(
r
>>
16
)
&
0xff
;
outbuf
[
2
]
=
(
r
>>
8
)
&
0xff
;
outbuf
[
3
]
=
r
&
0xff
;
outbuf
[
4
]
=
(
l
>>
24
)
&
0xff
;
outbuf
[
5
]
=
(
l
>>
16
)
&
0xff
;
outbuf
[
6
]
=
(
l
>>
8
)
&
0xff
;
outbuf
[
7
]
=
l
&
0xff
;
}
static
void
key_schedule
(
u32
*
x
,
u32
*
z
,
u32
*
k
)
{
#define xi(i) ((x[(i)/4] >> (8*(3-((i)%4)))) & 0xff)
#define zi(i) ((z[(i)/4] >> (8*(3-((i)%4)))) & 0xff)
z
[
0
]
=
x
[
0
]
^
s5
[
xi
(
13
)]
^
s6
[
xi
(
15
)]
^
s7
[
xi
(
12
)]
^
sb8
[
xi
(
14
)]
^
s7
[
xi
(
8
)];
z
[
1
]
=
x
[
2
]
^
s5
[
zi
(
0
)]
^
s6
[
zi
(
2
)]
^
s7
[
zi
(
1
)]
^
sb8
[
zi
(
3
)]
^
sb8
[
xi
(
10
)];
z
[
2
]
=
x
[
3
]
^
s5
[
zi
(
7
)]
^
s6
[
zi
(
6
)]
^
s7
[
zi
(
5
)]
^
sb8
[
zi
(
4
)]
^
s5
[
xi
(
9
)];
z
[
3
]
=
x
[
1
]
^
s5
[
zi
(
10
)]
^
s6
[
zi
(
9
)]
^
s7
[
zi
(
11
)]
^
sb8
[
zi
(
8
)]
^
s6
[
xi
(
11
)];
k
[
0
]
=
s5
[
zi
(
8
)]
^
s6
[
zi
(
9
)]
^
s7
[
zi
(
7
)]
^
sb8
[
zi
(
6
)]
^
s5
[
zi
(
2
)];
k
[
1
]
=
s5
[
zi
(
10
)]
^
s6
[
zi
(
11
)]
^
s7
[
zi
(
5
)]
^
sb8
[
zi
(
4
)]
^
s6
[
zi
(
6
)];
k
[
2
]
=
s5
[
zi
(
12
)]
^
s6
[
zi
(
13
)]
^
s7
[
zi
(
3
)]
^
sb8
[
zi
(
2
)]
^
s7
[
zi
(
9
)];
k
[
3
]
=
s5
[
zi
(
14
)]
^
s6
[
zi
(
15
)]
^
s7
[
zi
(
1
)]
^
sb8
[
zi
(
0
)]
^
sb8
[
zi
(
12
)];
x
[
0
]
=
z
[
2
]
^
s5
[
zi
(
5
)]
^
s6
[
zi
(
7
)]
^
s7
[
zi
(
4
)]
^
sb8
[
zi
(
6
)]
^
s7
[
zi
(
0
)];
x
[
1
]
=
z
[
0
]
^
s5
[
xi
(
0
)]
^
s6
[
xi
(
2
)]
^
s7
[
xi
(
1
)]
^
sb8
[
xi
(
3
)]
^
sb8
[
zi
(
2
)];
x
[
2
]
=
z
[
1
]
^
s5
[
xi
(
7
)]
^
s6
[
xi
(
6
)]
^
s7
[
xi
(
5
)]
^
sb8
[
xi
(
4
)]
^
s5
[
zi
(
1
)];
x
[
3
]
=
z
[
3
]
^
s5
[
xi
(
10
)]
^
s6
[
xi
(
9
)]
^
s7
[
xi
(
11
)]
^
sb8
[
xi
(
8
)]
^
s6
[
zi
(
3
)];
k
[
4
]
=
s5
[
xi
(
3
)]
^
s6
[
xi
(
2
)]
^
s7
[
xi
(
12
)]
^
sb8
[
xi
(
13
)]
^
s5
[
xi
(
8
)];
k
[
5
]
=
s5
[
xi
(
1
)]
^
s6
[
xi
(
0
)]
^
s7
[
xi
(
14
)]
^
sb8
[
xi
(
15
)]
^
s6
[
xi
(
13
)];
k
[
6
]
=
s5
[
xi
(
7
)]
^
s6
[
xi
(
6
)]
^
s7
[
xi
(
8
)]
^
sb8
[
xi
(
9
)]
^
s7
[
xi
(
3
)];
k
[
7
]
=
s5
[
xi
(
5
)]
^
s6
[
xi
(
4
)]
^
s7
[
xi
(
10
)]
^
sb8
[
xi
(
11
)]
^
sb8
[
xi
(
7
)];
z
[
0
]
=
x
[
0
]
^
s5
[
xi
(
13
)]
^
s6
[
xi
(
15
)]
^
s7
[
xi
(
12
)]
^
sb8
[
xi
(
14
)]
^
s7
[
xi
(
8
)];
z
[
1
]
=
x
[
2
]
^
s5
[
zi
(
0
)]
^
s6
[
zi
(
2
)]
^
s7
[
zi
(
1
)]
^
sb8
[
zi
(
3
)]
^
sb8
[
xi
(
10
)];
z
[
2
]
=
x
[
3
]
^
s5
[
zi
(
7
)]
^
s6
[
zi
(
6
)]
^
s7
[
zi
(
5
)]
^
sb8
[
zi
(
4
)]
^
s5
[
xi
(
9
)];
z
[
3
]
=
x
[
1
]
^
s5
[
zi
(
10
)]
^
s6
[
zi
(
9
)]
^
s7
[
zi
(
11
)]
^
sb8
[
zi
(
8
)]
^
s6
[
xi
(
11
)];
k
[
8
]
=
s5
[
zi
(
3
)]
^
s6
[
zi
(
2
)]
^
s7
[
zi
(
12
)]
^
sb8
[
zi
(
13
)]
^
s5
[
zi
(
9
)];
k
[
9
]
=
s5
[
zi
(
1
)]
^
s6
[
zi
(
0
)]
^
s7
[
zi
(
14
)]
^
sb8
[
zi
(
15
)]
^
s6
[
zi
(
12
)];
k
[
10
]
=
s5
[
zi
(
7
)]
^
s6
[
zi
(
6
)]
^
s7
[
zi
(
8
)]
^
sb8
[
zi
(
9
)]
^
s7
[
zi
(
2
)];
k
[
11
]
=
s5
[
zi
(
5
)]
^
s6
[
zi
(
4
)]
^
s7
[
zi
(
10
)]
^
sb8
[
zi
(
11
)]
^
sb8
[
zi
(
6
)];
x
[
0
]
=
z
[
2
]
^
s5
[
zi
(
5
)]
^
s6
[
zi
(
7
)]
^
s7
[
zi
(
4
)]
^
sb8
[
zi
(
6
)]
^
s7
[
zi
(
0
)];
x
[
1
]
=
z
[
0
]
^
s5
[
xi
(
0
)]
^
s6
[
xi
(
2
)]
^
s7
[
xi
(
1
)]
^
sb8
[
xi
(
3
)]
^
sb8
[
zi
(
2
)];
x
[
2
]
=
z
[
1
]
^
s5
[
xi
(
7
)]
^
s6
[
xi
(
6
)]
^
s7
[
xi
(
5
)]
^
sb8
[
xi
(
4
)]
^
s5
[
zi
(
1
)];
x
[
3
]
=
z
[
3
]
^
s5
[
xi
(
10
)]
^
s6
[
xi
(
9
)]
^
s7
[
xi
(
11
)]
^
sb8
[
xi
(
8
)]
^
s6
[
zi
(
3
)];
k
[
12
]
=
s5
[
xi
(
8
)]
^
s6
[
xi
(
9
)]
^
s7
[
xi
(
7
)]
^
sb8
[
xi
(
6
)]
^
s5
[
xi
(
3
)];
k
[
13
]
=
s5
[
xi
(
10
)]
^
s6
[
xi
(
11
)]
^
s7
[
xi
(
5
)]
^
sb8
[
xi
(
4
)]
^
s6
[
xi
(
7
)];
k
[
14
]
=
s5
[
xi
(
12
)]
^
s6
[
xi
(
13
)]
^
s7
[
xi
(
3
)]
^
sb8
[
xi
(
2
)]
^
s7
[
xi
(
8
)];
k
[
15
]
=
s5
[
xi
(
14
)]
^
s6
[
xi
(
15
)]
^
s7
[
xi
(
1
)]
^
sb8
[
xi
(
0
)]
^
sb8
[
xi
(
13
)];
#undef xi
#undef zi
}
static
int
cast5_setkey
(
void
*
ctx
,
const
u8
*
key
,
unsigned
key_len
,
u32
*
flags
)
{
int
i
;
u32
x
[
4
];
u32
z
[
4
];
u32
k
[
16
];
u8
p_key
[
16
];
struct
cast5_ctx
*
c
=
(
struct
cast5_ctx
*
)
ctx
;
if
(
key_len
<
5
||
key_len
>
16
)
{
*
flags
|=
CRYPTO_TFM_RES_BAD_KEY_LEN
;
return
-
EINVAL
;
}
c
->
rr
=
key_len
<=
10
?
1
:
0
;
memset
(
p_key
,
0
,
16
);
memcpy
(
p_key
,
key
,
key_len
);
x
[
0
]
=
p_key
[
0
]
<<
24
|
p_key
[
1
]
<<
16
|
p_key
[
2
]
<<
8
|
p_key
[
3
];
x
[
1
]
=
p_key
[
4
]
<<
24
|
p_key
[
5
]
<<
16
|
p_key
[
6
]
<<
8
|
p_key
[
7
];
x
[
2
]
=
p_key
[
8
]
<<
24
|
p_key
[
9
]
<<
16
|
p_key
[
10
]
<<
8
|
p_key
[
11
];
x
[
3
]
=
p_key
[
12
]
<<
24
|
p_key
[
13
]
<<
16
|
p_key
[
14
]
<<
8
|
p_key
[
15
];
key_schedule
(
x
,
z
,
k
);
for
(
i
=
0
;
i
<
16
;
i
++
)
c
->
Km
[
i
]
=
k
[
i
];
key_schedule
(
x
,
z
,
k
);
for
(
i
=
0
;
i
<
16
;
i
++
)
c
->
Kr
[
i
]
=
k
[
i
]
&
0x1f
;
return
0
;
}
static
struct
crypto_alg
alg
=
{
.
cra_name
=
"cast5"
,
.
cra_flags
=
CRYPTO_ALG_TYPE_CIPHER
,
.
cra_blocksize
=
CAST5_BLOCK_SIZE
,
.
cra_ctxsize
=
sizeof
(
struct
cast5_ctx
),
.
cra_module
=
THIS_MODULE
,
.
cra_list
=
LIST_HEAD_INIT
(
alg
.
cra_list
),
.
cra_u
=
{
.
cipher
=
{
.
cia_min_keysize
=
CAST5_MIN_KEY_SIZE
,
.
cia_max_keysize
=
CAST5_MAX_KEY_SIZE
,
.
cia_ivsize
=
CAST5_BLOCK_SIZE
,
.
cia_setkey
=
cast5_setkey
,
.
cia_encrypt
=
cast5_encrypt
,
.
cia_decrypt
=
cast5_decrypt
}
}
};
static
int
__init
init
(
void
)
{
return
crypto_register_alg
(
&
alg
);
}
static
void
__exit
fini
(
void
)
{
crypto_unregister_alg
(
&
alg
);
}
module_init
(
init
);
module_exit
(
fini
);
MODULE_LICENSE
(
"GPL"
);
MODULE_DESCRIPTION
(
"Cast5 Cipher Algorithm"
);
crypto/tcrypt.c
View file @
c63f5cf8
...
...
@@ -2192,6 +2192,102 @@ test_aes(void)
crypto_free_tfm
(
tfm
);
}
void
test_cast5
(
void
)
{
unsigned
int
ret
,
i
,
tsize
;
u8
*
p
,
*
q
,
*
key
;
struct
crypto_tfm
*
tfm
;
struct
cast5_tv
*
c5_tv
;
struct
scatterlist
sg
[
1
];
printk
(
"
\n
testing cast5 encryption
\n
"
);
tfm
=
crypto_alloc_tfm
(
"cast5"
,
0
);
if
(
tfm
==
NULL
)
{
printk
(
"failed to load transform for cast5 (default ecb)
\n
"
);
return
;
}
tsize
=
sizeof
(
cast5_enc_tv_template
);
if
(
tsize
>
TVMEMSIZE
)
{
printk
(
"template (%u) too big for tvmem (%u)
\n
"
,
tsize
,
TVMEMSIZE
);
return
;
}
memcpy
(
tvmem
,
cast5_enc_tv_template
,
tsize
);
c5_tv
=
(
void
*
)
tvmem
;
for
(
i
=
0
;
i
<
CAST5_ENC_TEST_VECTORS
;
i
++
)
{
printk
(
"test %u (%d bit key):
\n
"
,
i
+
1
,
c5_tv
[
i
].
keylen
*
8
);
key
=
c5_tv
[
i
].
key
;
ret
=
crypto_cipher_setkey
(
tfm
,
key
,
c5_tv
[
i
].
keylen
);
if
(
ret
)
{
printk
(
"setkey() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
if
(
!
c5_tv
[
i
].
fail
)
goto
out
;
}
p
=
c5_tv
[
i
].
plaintext
;
sg
[
0
].
page
=
virt_to_page
(
p
);
sg
[
0
].
offset
=
((
long
)
p
&
~
PAGE_MASK
);
sg
[
0
].
length
=
sizeof
(
c5_tv
[
i
].
plaintext
);
ret
=
crypto_cipher_encrypt
(
tfm
,
sg
,
sg
,
sg
[
0
].
length
);
if
(
ret
)
{
printk
(
"encrypt() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
goto
out
;
}
q
=
kmap
(
sg
[
0
].
page
)
+
sg
[
0
].
offset
;
hexdump
(
q
,
sizeof
(
c5_tv
[
i
].
ciphertext
));
printk
(
"%s
\n
"
,
memcmp
(
q
,
c5_tv
[
i
].
ciphertext
,
sizeof
(
c5_tv
[
i
].
ciphertext
))
?
"fail"
:
"pass"
);
}
tsize
=
sizeof
(
cast5_dec_tv_template
);
if
(
tsize
>
TVMEMSIZE
)
{
printk
(
"template (%u) too big for tvmem (%u)
\n
"
,
tsize
,
TVMEMSIZE
);
return
;
}
memcpy
(
tvmem
,
cast5_dec_tv_template
,
tsize
);
c5_tv
=
(
void
*
)
tvmem
;
for
(
i
=
0
;
i
<
CAST5_DEC_TEST_VECTORS
;
i
++
)
{
printk
(
"test %u (%d bit key):
\n
"
,
i
+
1
,
c5_tv
[
i
].
keylen
*
8
);
key
=
c5_tv
[
i
].
key
;
ret
=
crypto_cipher_setkey
(
tfm
,
key
,
c5_tv
[
i
].
keylen
);
if
(
ret
)
{
printk
(
"setkey() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
if
(
!
c5_tv
[
i
].
fail
)
goto
out
;
}
p
=
c5_tv
[
i
].
plaintext
;
sg
[
0
].
page
=
virt_to_page
(
p
);
sg
[
0
].
offset
=
((
long
)
p
&
~
PAGE_MASK
);
sg
[
0
].
length
=
sizeof
(
c5_tv
[
i
].
plaintext
);
ret
=
crypto_cipher_decrypt
(
tfm
,
sg
,
sg
,
sg
[
0
].
length
);
if
(
ret
)
{
printk
(
"decrypt() failed flags=%x
\n
"
,
tfm
->
crt_flags
);
goto
out
;
}
q
=
kmap
(
sg
[
0
].
page
)
+
sg
[
0
].
offset
;
hexdump
(
q
,
sizeof
(
c5_tv
[
i
].
ciphertext
));
printk
(
"%s
\n
"
,
memcmp
(
q
,
c5_tv
[
i
].
ciphertext
,
sizeof
(
c5_tv
[
i
].
ciphertext
))
?
"fail"
:
"pass"
);
}
out:
crypto_free_tfm
(
tfm
);
}
static
void
test_deflate
(
void
)
{
...
...
@@ -2304,6 +2400,7 @@ do_test(void)
test_sha384
();
test_sha512
();
test_deflate
();
test_cast5
();
#ifdef CONFIG_CRYPTO_HMAC
test_hmac_md5
();
test_hmac_sha1
();
...
...
@@ -2363,6 +2460,10 @@ do_test(void)
test_deflate
();
break
;
case
14
:
test_cast5
();
break
;
#ifdef CONFIG_CRYPTO_HMAC
case
100
:
test_hmac_md5
();
...
...
crypto/tcrypt.h
View file @
c63f5cf8
...
...
@@ -1682,6 +1682,74 @@ struct aes_tv aes_dec_tv_template[] = {
},
};
/* Cast5 test vectors from RFC 2144 */
#define CAST5_ENC_TEST_VECTORS 3
#define CAST5_DEC_TEST_VECTORS 3
struct
cast5_tv
{
unsigned
keylen
;
unsigned
fail
;
u8
key
[
16
];
u8
plaintext
[
8
];
u8
ciphertext
[
8
];
};
struct
cast5_tv
cast5_enc_tv_template
[]
=
{
{
16
,
0
,
{
0x01
,
0x23
,
0x45
,
0x67
,
0x12
,
0x34
,
0x56
,
0x78
,
0x23
,
0x45
,
0x67
,
0x89
,
0x34
,
0x56
,
0x78
,
0x9A
},
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
{
0x23
,
0x8b
,
0x4f
,
0xe5
,
0x84
,
0x7e
,
0x44
,
0xb2
},
},
{
10
,
0
,
{
0x01
,
0x23
,
0x45
,
0x67
,
0x12
,
0x34
,
0x56
,
0x78
,
0x23
,
0x45
},
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
{
0xeb
,
0x6a
,
0x71
,
0x1a
,
0x2c
,
0x02
,
0x27
,
0x1b
},
},
{
5
,
0
,
{
0x01
,
0x23
,
0x45
,
0x67
,
0x12
},
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
{
0x7a
,
0xc8
,
0x16
,
0xd1
,
0x6e
,
0x9b
,
0x30
,
0x2e
},
}
};
struct
cast5_tv
cast5_dec_tv_template
[]
=
{
{
16
,
0
,
{
0x01
,
0x23
,
0x45
,
0x67
,
0x12
,
0x34
,
0x56
,
0x78
,
0x23
,
0x45
,
0x67
,
0x89
,
0x34
,
0x56
,
0x78
,
0x9A
},
{
0x23
,
0x8b
,
0x4f
,
0xe5
,
0x84
,
0x7e
,
0x44
,
0xb2
},
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
},
{
10
,
0
,
{
0x01
,
0x23
,
0x45
,
0x67
,
0x12
,
0x34
,
0x56
,
0x78
,
0x23
,
0x45
},
{
0xeb
,
0x6a
,
0x71
,
0x1a
,
0x2c
,
0x02
,
0x27
,
0x1b
},
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
},
{
5
,
0
,
{
0x01
,
0x23
,
0x45
,
0x67
,
0x12
},
{
0x7a
,
0xc8
,
0x16
,
0xd1
,
0x6e
,
0x9b
,
0x30
,
0x2e
},
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
},
}
};
/*
* Compression stuff.
*/
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment