Add HIGHT lightweight block cipher (GH #672)
parent
32e2be647a
commit
2f5b110b52
|
|
@ -142,6 +142,8 @@ gzip.h
|
||||||
hashfwd.h
|
hashfwd.h
|
||||||
hex.cpp
|
hex.cpp
|
||||||
hex.h
|
hex.h
|
||||||
|
hight.h
|
||||||
|
hight.cpp
|
||||||
hkdf.h
|
hkdf.h
|
||||||
hmac.cpp
|
hmac.cpp
|
||||||
hmac.h
|
hmac.h
|
||||||
|
|
@ -451,6 +453,7 @@ TestVectors/eax.txt
|
||||||
TestVectors/esign.txt
|
TestVectors/esign.txt
|
||||||
TestVectors/gcm.txt
|
TestVectors/gcm.txt
|
||||||
TestVectors/hkdf.txt
|
TestVectors/hkdf.txt
|
||||||
|
TestVectors/hight.txt
|
||||||
TestVectors/hmac.txt
|
TestVectors/hmac.txt
|
||||||
TestVectors/kalyna.txt
|
TestVectors/kalyna.txt
|
||||||
TestVectors/keccak.txt
|
TestVectors/keccak.txt
|
||||||
|
|
|
||||||
|
|
@ -30,10 +30,11 @@ Test: TestVectors/aria.txt
|
||||||
Test: TestVectors/kalyna.txt
|
Test: TestVectors/kalyna.txt
|
||||||
Test: TestVectors/threefish.txt
|
Test: TestVectors/threefish.txt
|
||||||
Test: TestVectors/sm4.txt
|
Test: TestVectors/sm4.txt
|
||||||
|
Test: TestVectors/hight.txt
|
||||||
|
Test: TestVectors/cham.txt
|
||||||
Test: TestVectors/lea.txt
|
Test: TestVectors/lea.txt
|
||||||
Test: TestVectors/simon.txt
|
Test: TestVectors/simon.txt
|
||||||
Test: TestVectors/speck.txt
|
Test: TestVectors/speck.txt
|
||||||
Test: TestVectors/cham.txt
|
|
||||||
Test: TestVectors/salsa.txt
|
Test: TestVectors/salsa.txt
|
||||||
Test: TestVectors/chacha.txt
|
Test: TestVectors/chacha.txt
|
||||||
#Test: TestVectors/tls_chacha.txt
|
#Test: TestVectors/tls_chacha.txt
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,107 @@
|
||||||
|
AlgorithmType: SymmetricCipher
|
||||||
|
Name: HIGHT/ECB
|
||||||
|
#
|
||||||
|
Source: HIGHT reference zip file, file KISA_HIGHT_ECB.c
|
||||||
|
Comment: HIGHT/ECB, 128-bit key
|
||||||
|
Key: 88 E3 4F 8F 08 17 79 F1 E9 F3 94 37 0A D4 05 89
|
||||||
|
Plaintext: D7 6D 0D 18 32 7E C5 62
|
||||||
|
Ciphertext: E4 BC 2E 31 22 77 E4 DD
|
||||||
|
Test: Encrypt
|
||||||
|
#
|
||||||
|
Source: CHAM reference implementation
|
||||||
|
Comment: HIGHT/ECB, 128-bit key
|
||||||
|
Key: 29 23 BE 84 E1 6C D6 AE 52 90 49 F1 F1 BB E9 EB
|
||||||
|
Plaintext: B3 A6 DB 3C 87 0C 3E 99
|
||||||
|
Ciphertext: 23 CA D1 A3 CD DF 7E AB
|
||||||
|
Test: Encrypt
|
||||||
|
#
|
||||||
|
Source: CHAM reference implementation
|
||||||
|
Comment: HIGHT/ECB, 128-bit key
|
||||||
|
Key: 24 5E 0D 1C 06 B7 47 DE B3 12 4D C8 43 BB 8B A6
|
||||||
|
Plaintext: 1F 03 5A 7D 09 38 25 1F
|
||||||
|
Ciphertext: 52 BD 91 BB 26 F8 ED 99
|
||||||
|
Test: Encrypt
|
||||||
|
#
|
||||||
|
Source: CHAM reference implementation
|
||||||
|
Comment: HIGHT/ECB, 128-bit key
|
||||||
|
Key: 5D D4 CB FC 96 F5 45 3B 13 0D 89 0A 1C DB AE 32
|
||||||
|
Plaintext: 20 9A 50 EE 40 78 36 FD
|
||||||
|
Ciphertext: 95 02 B4 6D 87 B4 41 67
|
||||||
|
Test: Encrypt
|
||||||
|
#
|
||||||
|
Source: CHAM reference implementation
|
||||||
|
Comment: HIGHT/ECB, 128-bit key
|
||||||
|
Key: 12 49 32 F6 9E 7D 49 DC AD 4F 14 F2 44 40 66 D0
|
||||||
|
Plaintext: 6B C4 30 B7 32 3B A1 22
|
||||||
|
Ciphertext: 20 CB CF 41 65 24 E5 A6
|
||||||
|
Test: Encrypt
|
||||||
|
#
|
||||||
|
Source: CHAM reference implementation
|
||||||
|
Comment: HIGHT/ECB, 128-bit key
|
||||||
|
Key: F6 22 91 9D E1 8B 1F DA B0 CA 99 02 B9 72 9D 49
|
||||||
|
Plaintext: 2C 80 7E C5 99 D5 E9 80
|
||||||
|
Ciphertext: F3 1C 89 E6 6C 4F 5A 6F
|
||||||
|
Test: Encrypt
|
||||||
|
#
|
||||||
|
Source: CHAM reference implementation
|
||||||
|
Comment: HIGHT/ECB, 128-bit key
|
||||||
|
Key: B2 EA C9 CC 53 BF 67 D6 BF 14 D6 7E 2D DC 8E 66
|
||||||
|
Plaintext: 83 EF 57 49 61 FF 69 8F
|
||||||
|
Ciphertext: 39 21 C8 3B FE 5E 59 6E
|
||||||
|
Test: Encrypt
|
||||||
|
#
|
||||||
|
Source: CHAM reference implementation
|
||||||
|
Comment: HIGHT/ECB, 128-bit key
|
||||||
|
Key: 61 CD D1 1E 9D 9C 16 72 72 E6 1D F0 84 4F 4A 77
|
||||||
|
Plaintext: 02 D7 E8 39 2C 53 CB C9
|
||||||
|
Ciphertext: 98 2F D7 56 17 44 97 BF
|
||||||
|
Test: Encrypt
|
||||||
|
#
|
||||||
|
Source: CHAM reference implementation
|
||||||
|
Comment: HIGHT/ECB, 128-bit key
|
||||||
|
Key: 12 1E 33 74 9E 0C F4 D5 D4 9F D4 A4 59 7E 35 CF
|
||||||
|
Plaintext: 32 22 F4 CC CF D3 90 2D
|
||||||
|
Ciphertext: BB 80 F5 0B 35 11 5B A8
|
||||||
|
Test: Encrypt
|
||||||
|
#
|
||||||
|
Source: CHAM reference implementation
|
||||||
|
Comment: HIGHT/ECB, 128-bit key
|
||||||
|
Key: 5D D4 CB FC 96 F5 45 3B 13 0D 89 0A 1C DB AE 32
|
||||||
|
Plaintext : 20 9A 50 EE 40 78 36 FD
|
||||||
|
Ciphertext : 95 02 B4 6D 87 B4 41 67
|
||||||
|
Test: Encrypt
|
||||||
|
#
|
||||||
|
Source: CHAM reference implementation
|
||||||
|
Comment: HIGHT/ECB, 128-bit key
|
||||||
|
Key: 12 49 32 F6 9E 7D 49 DC AD 4F 14 F2 44 40 66 D0
|
||||||
|
Plaintext : 6B C4 30 B7 32 3B A1 22
|
||||||
|
Ciphertext : 20 CB CF 41 65 24 E5 A6
|
||||||
|
Test: Encrypt
|
||||||
|
#
|
||||||
|
Source: CHAM reference implementation
|
||||||
|
Comment: HIGHT/ECB, 128-bit key
|
||||||
|
Key: F6 22 91 9D E1 8B 1F DA B0 CA 99 02 B9 72 9D 49
|
||||||
|
Plaintext : 2C 80 7E C5 99 D5 E9 80
|
||||||
|
Ciphertext : F3 1C 89 E6 6C 4F 5A 6F
|
||||||
|
Test: Encrypt
|
||||||
|
#
|
||||||
|
Source: CHAM reference implementation
|
||||||
|
Comment: HIGHT/ECB, 128-bit key
|
||||||
|
Key: B2 EA C9 CC 53 BF 67 D6 BF 14 D6 7E 2D DC 8E 66
|
||||||
|
Plaintext : 83 EF 57 49 61 FF 69 8F
|
||||||
|
Ciphertext : 39 21 C8 3B FE 5E 59 6E
|
||||||
|
Test: Encrypt
|
||||||
|
#
|
||||||
|
Source: CHAM reference implementation
|
||||||
|
Comment: HIGHT/ECB, 128-bit key
|
||||||
|
Key: 61 CD D1 1E 9D 9C 16 72 72 E6 1D F0 84 4F 4A 77
|
||||||
|
Plaintext : 02 D7 E8 39 2C 53 CB C9
|
||||||
|
Ciphertext : 98 2F D7 56 17 44 97 BF
|
||||||
|
Test: Encrypt
|
||||||
|
#
|
||||||
|
Source: CHAM reference implementation
|
||||||
|
Comment: HIGHT/ECB, 128-bit key
|
||||||
|
Key: 12 1E 33 74 9E 0C F4 D5 D4 9F D4 A4 59 7E 35 CF
|
||||||
|
Plaintext : 32 22 F4 CC CF D3 90 2D
|
||||||
|
Ciphertext : BB 80 F5 0B 35 11 5B A8
|
||||||
|
Test: Encrypt
|
||||||
|
|
@ -525,6 +525,9 @@ void Benchmark2(double t, double hertz)
|
||||||
std::cout << "\n<TR><TH>Algorithm<TH>MiB/Second" << cpb;
|
std::cout << "\n<TR><TH>Algorithm<TH>MiB/Second" << cpb;
|
||||||
std::cout << "<TH>Microseconds to<BR>Setup Key and IV" << cpk;
|
std::cout << "<TH>Microseconds to<BR>Setup Key and IV" << cpk;
|
||||||
|
|
||||||
|
BenchMarkByName<SymmetricCipher>("HIGHT/CTR");
|
||||||
|
return;
|
||||||
|
|
||||||
std::cout << "\n<TBODY style=\"background: white;\">";
|
std::cout << "\n<TBODY style=\"background: white;\">";
|
||||||
{
|
{
|
||||||
#if CRYPTOPP_AESNI_AVAILABLE
|
#if CRYPTOPP_AESNI_AVAILABLE
|
||||||
|
|
@ -584,6 +587,7 @@ void Benchmark2(double t, double hertz)
|
||||||
BenchMarkByName<SymmetricCipher>("AES/ECB", 16);
|
BenchMarkByName<SymmetricCipher>("AES/ECB", 16);
|
||||||
BenchMarkByName<SymmetricCipher>("ARIA/CTR", 16);
|
BenchMarkByName<SymmetricCipher>("ARIA/CTR", 16);
|
||||||
BenchMarkByName<SymmetricCipher>("ARIA/CTR", 32);
|
BenchMarkByName<SymmetricCipher>("ARIA/CTR", 32);
|
||||||
|
BenchMarkByName<SymmetricCipher>("HIGHT/CTR");
|
||||||
BenchMarkByName<SymmetricCipher>("Camellia/CTR", 16);
|
BenchMarkByName<SymmetricCipher>("Camellia/CTR", 16);
|
||||||
BenchMarkByName<SymmetricCipher>("Camellia/CTR", 32);
|
BenchMarkByName<SymmetricCipher>("Camellia/CTR", 32);
|
||||||
BenchMarkByName<SymmetricCipher>("Twofish/CTR");
|
BenchMarkByName<SymmetricCipher>("Twofish/CTR");
|
||||||
|
|
|
||||||
|
|
@ -47,9 +47,9 @@
|
||||||
|
|
||||||
# If you use 'make sources' from Linux makefile, then add 'winpipes.cpp' to the list below.
|
# If you use 'make sources' from Linux makefile, then add 'winpipes.cpp' to the list below.
|
||||||
|
|
||||||
LIB_SRCS = cryptlib.cpp cpu.cpp integer.cpp 3way.cpp adler32.cpp algebra.cpp algparam.cpp arc4.cpp aria-simd.cpp aria.cpp ariatab.cpp asn.cpp authenc.cpp base32.cpp base64.cpp basecode.cpp bfinit.cpp blake2-simd.cpp blake2.cpp blowfish.cpp blumshub.cpp camellia.cpp cast.cpp casts.cpp cbcmac.cpp ccm.cpp chacha.cpp cham.cpp cham-simd.cpp channels.cpp cmac.cpp crc-simd.cpp crc.cpp default.cpp des.cpp dessp.cpp dh.cpp dh2.cpp dll.cpp dsa.cpp eax.cpp ec2n.cpp eccrypto.cpp ecp.cpp elgamal.cpp emsa2.cpp eprecomp.cpp esign.cpp files.cpp filters.cpp fips140.cpp fipstest.cpp gcm-simd.cpp gcm.cpp gf256.cpp gf2_32.cpp gf2n.cpp gfpcrypt.cpp gost.cpp gzip.cpp hex.cpp hmac.cpp hrtimer.cpp ida.cpp idea.cpp iterhash.cpp kalyna.cpp kalynatab.cpp keccak.cpp lea.cpp lea-simd.cpp luc.cpp mars.cpp marss.cpp md2.cpp md4.cpp md5.cpp misc.cpp modes.cpp mqueue.cpp mqv.cpp nbtheory.cpp neon-simd.cpp network.cpp oaep.cpp osrng.cpp padlkrng.cpp panama.cpp pkcspad.cpp poly1305.cpp polynomi.cpp pssr.cpp pubkey.cpp queue.cpp rabin.cpp randpool.cpp rc2.cpp rc5.cpp rc6.cpp rdrand.cpp rdtables.cpp rijndael-simd.cpp rijndael.cpp ripemd.cpp rng.cpp rsa.cpp rw.cpp safer.cpp salsa.cpp scrypt.cpp seal.cpp seed.cpp serpent.cpp sha-simd.cpp sha.cpp sha3.cpp shacal2-simd.cpp shacal2.cpp shark.cpp sharkbox.cpp simon.cpp simon-simd.cpp skipjack.cpp sm3.cpp sm4.cpp socketft.cpp sosemanuk.cpp speck.cpp speck-simd.cpp square.cpp squaretb.cpp sse-simd.cpp strciphr.cpp tea.cpp tftables.cpp threefish.cpp tiger.cpp tigertab.cpp trdlocal.cpp ttmac.cpp tweetnacl.cpp twofish.cpp vmac.cpp wait.cpp wake.cpp whrlpool.cpp winpipes.cpp xtr.cpp xtrcrypt.cpp zdeflate.cpp zinflate.cpp zlib.cpp
|
LIB_SRCS = cryptlib.cpp cpu.cpp integer.cpp 3way.cpp adler32.cpp algebra.cpp algparam.cpp arc4.cpp aria-simd.cpp aria.cpp ariatab.cpp asn.cpp authenc.cpp base32.cpp base64.cpp basecode.cpp bfinit.cpp blake2-simd.cpp blake2.cpp blowfish.cpp blumshub.cpp camellia.cpp cast.cpp casts.cpp cbcmac.cpp ccm.cpp chacha.cpp cham.cpp cham-simd.cpp channels.cpp cmac.cpp crc-simd.cpp crc.cpp default.cpp des.cpp dessp.cpp dh.cpp dh2.cpp dll.cpp dsa.cpp eax.cpp ec2n.cpp eccrypto.cpp ecp.cpp elgamal.cpp emsa2.cpp eprecomp.cpp esign.cpp files.cpp filters.cpp fips140.cpp fipstest.cpp gcm-simd.cpp gcm.cpp gf256.cpp gf2_32.cpp gf2n.cpp gfpcrypt.cpp gost.cpp gzip.cpp hex.cpp hight.cpp hmac.cpp hrtimer.cpp ida.cpp idea.cpp iterhash.cpp kalyna.cpp kalynatab.cpp keccak.cpp lea.cpp lea-simd.cpp luc.cpp mars.cpp marss.cpp md2.cpp md4.cpp md5.cpp misc.cpp modes.cpp mqueue.cpp mqv.cpp nbtheory.cpp neon-simd.cpp network.cpp oaep.cpp osrng.cpp padlkrng.cpp panama.cpp pkcspad.cpp poly1305.cpp polynomi.cpp pssr.cpp pubkey.cpp queue.cpp rabin.cpp randpool.cpp rc2.cpp rc5.cpp rc6.cpp rdrand.cpp rdtables.cpp rijndael-simd.cpp rijndael.cpp ripemd.cpp rng.cpp rsa.cpp rw.cpp safer.cpp salsa.cpp scrypt.cpp seal.cpp seed.cpp serpent.cpp sha-simd.cpp sha.cpp sha3.cpp shacal2-simd.cpp shacal2.cpp shark.cpp sharkbox.cpp simon.cpp simon-simd.cpp skipjack.cpp sm3.cpp sm4.cpp socketft.cpp sosemanuk.cpp speck.cpp speck-simd.cpp square.cpp squaretb.cpp sse-simd.cpp strciphr.cpp tea.cpp tftables.cpp threefish.cpp tiger.cpp tigertab.cpp trdlocal.cpp ttmac.cpp tweetnacl.cpp twofish.cpp vmac.cpp wait.cpp wake.cpp whrlpool.cpp winpipes.cpp xtr.cpp xtrcrypt.cpp zdeflate.cpp zinflate.cpp zlib.cpp
|
||||||
|
|
||||||
LIB_OBJS = cryptlib.obj cpu.obj integer.obj 3way.obj adler32.obj algebra.obj algparam.obj arc4.obj aria-simd.obj aria.obj ariatab.obj asn.obj authenc.obj base32.obj base64.obj basecode.obj bfinit.obj blake2-simd.obj blake2.obj blowfish.obj blumshub.obj camellia.obj cast.obj casts.obj cbcmac.obj ccm.obj chacha.obj cham.obj cham-simd.obj channels.obj cmac.obj crc-simd.obj crc.obj default.obj des.obj dessp.obj dh.obj dh2.obj dll.obj dsa.obj eax.obj ec2n.obj eccrypto.obj ecp.obj elgamal.obj emsa2.obj eprecomp.obj esign.obj files.obj filters.obj fips140.obj fipstest.obj gcm-simd.obj gcm.obj gf256.obj gf2_32.obj gf2n.obj gfpcrypt.obj gost.obj gzip.obj hex.obj hmac.obj hrtimer.obj ida.obj idea.obj iterhash.obj kalyna.obj kalynatab.obj keccak.obj lea.obj lea-simd.obj luc.obj mars.obj marss.obj md2.obj md4.obj md5.obj misc.obj modes.obj mqueue.obj mqv.obj nbtheory.obj neon-simd.obj network.obj oaep.obj osrng.obj padlkrng.obj panama.obj pkcspad.obj poly1305.obj polynomi.obj pssr.obj pubkey.obj queue.obj rabin.obj randpool.obj rc2.obj rc5.obj rc6.obj rdrand.obj rdtables.obj rijndael-simd.obj rijndael.obj ripemd.obj rng.obj rsa.obj rw.obj safer.obj salsa.obj scrypt.obj seal.obj seed.obj serpent.obj sha-simd.obj sha.obj sha3.obj shacal2-simd.obj shacal2.obj shark.obj sharkbox.obj simon.obj simon-simd.obj skipjack.obj sm3.obj sm4.obj socketft.obj sosemanuk.obj speck.obj speck-simd.obj square.obj squaretb.obj sse-simd.obj strciphr.obj tea.obj tftables.obj threefish.obj tiger.obj tigertab.obj trdlocal.obj ttmac.obj tweetnacl.obj twofish.obj vmac.obj wait.obj wake.obj whrlpool.obj winpipes.obj xtr.obj xtrcrypt.obj zdeflate.obj zinflate.obj zlib.obj
|
LIB_OBJS = cryptlib.obj cpu.obj integer.obj 3way.obj adler32.obj algebra.obj algparam.obj arc4.obj aria-simd.obj aria.obj ariatab.obj asn.obj authenc.obj base32.obj base64.obj basecode.obj bfinit.obj blake2-simd.obj blake2.obj blowfish.obj blumshub.obj camellia.obj cast.obj casts.obj cbcmac.obj ccm.obj chacha.obj cham.obj cham-simd.obj channels.obj cmac.obj crc-simd.obj crc.obj default.obj des.obj dessp.obj dh.obj dh2.obj dll.obj dsa.obj eax.obj ec2n.obj eccrypto.obj ecp.obj elgamal.obj emsa2.obj eprecomp.obj esign.obj files.obj filters.obj fips140.obj fipstest.obj gcm-simd.obj gcm.obj gf256.obj gf2_32.obj gf2n.obj gfpcrypt.obj gost.obj gzip.obj hex.obj hight.obj hmac.obj hrtimer.obj ida.obj idea.obj iterhash.obj kalyna.obj kalynatab.obj keccak.obj lea.obj lea-simd.obj luc.obj mars.obj marss.obj md2.obj md4.obj md5.obj misc.obj modes.obj mqueue.obj mqv.obj nbtheory.obj neon-simd.obj network.obj oaep.obj osrng.obj padlkrng.obj panama.obj pkcspad.obj poly1305.obj polynomi.obj pssr.obj pubkey.obj queue.obj rabin.obj randpool.obj rc2.obj rc5.obj rc6.obj rdrand.obj rdtables.obj rijndael-simd.obj rijndael.obj ripemd.obj rng.obj rsa.obj rw.obj safer.obj salsa.obj scrypt.obj seal.obj seed.obj serpent.obj sha-simd.obj sha.obj sha3.obj shacal2-simd.obj shacal2.obj shark.obj sharkbox.obj simon.obj simon-simd.obj skipjack.obj sm3.obj sm4.obj socketft.obj sosemanuk.obj speck.obj speck-simd.obj square.obj squaretb.obj sse-simd.obj strciphr.obj tea.obj tftables.obj threefish.obj tiger.obj tigertab.obj trdlocal.obj ttmac.obj tweetnacl.obj twofish.obj vmac.obj wait.obj wake.obj whrlpool.obj winpipes.obj xtr.obj xtrcrypt.obj zdeflate.obj zinflate.obj zlib.obj
|
||||||
|
|
||||||
TEST_SRCS = bench1.cpp bench2.cpp test.cpp validat0.cpp validat1.cpp validat2.cpp validat3.cpp validat4.cpp datatest.cpp regtest1.cpp regtest2.cpp regtest3.cpp fipsalgt.cpp dlltest.cpp fipstest.cpp
|
TEST_SRCS = bench1.cpp bench2.cpp test.cpp validat0.cpp validat1.cpp validat2.cpp validat3.cpp validat4.cpp datatest.cpp regtest1.cpp regtest2.cpp regtest3.cpp fipsalgt.cpp dlltest.cpp fipstest.cpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -231,6 +231,7 @@
|
||||||
<ClCompile Include="gost.cpp" />
|
<ClCompile Include="gost.cpp" />
|
||||||
<ClCompile Include="gzip.cpp" />
|
<ClCompile Include="gzip.cpp" />
|
||||||
<ClCompile Include="hex.cpp" />
|
<ClCompile Include="hex.cpp" />
|
||||||
|
<ClCompile Include="hight.cpp" />
|
||||||
<ClCompile Include="hmac.cpp" />
|
<ClCompile Include="hmac.cpp" />
|
||||||
<ClCompile Include="hrtimer.cpp" />
|
<ClCompile Include="hrtimer.cpp" />
|
||||||
<ClCompile Include="ida.cpp" />
|
<ClCompile Include="ida.cpp" />
|
||||||
|
|
@ -422,6 +423,7 @@
|
||||||
<ClInclude Include="gost.h" />
|
<ClInclude Include="gost.h" />
|
||||||
<ClInclude Include="gzip.h" />
|
<ClInclude Include="gzip.h" />
|
||||||
<ClInclude Include="hex.h" />
|
<ClInclude Include="hex.h" />
|
||||||
|
<ClInclude Include="hight.h" />
|
||||||
<ClInclude Include="hkdf.h" />
|
<ClInclude Include="hkdf.h" />
|
||||||
<ClInclude Include="hmac.h" />
|
<ClInclude Include="hmac.h" />
|
||||||
<ClInclude Include="hmqv.h" />
|
<ClInclude Include="hmqv.h" />
|
||||||
|
|
|
||||||
|
|
@ -194,6 +194,9 @@
|
||||||
<ClCompile Include="hex.cpp">
|
<ClCompile Include="hex.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="hight.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
<ClCompile Include="hmac.cpp">
|
<ClCompile Include="hmac.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
|
@ -660,6 +663,9 @@
|
||||||
<ClInclude Include="hex.h">
|
<ClInclude Include="hex.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="hight.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
<ClInclude Include="hkdf.h">
|
<ClInclude Include="hkdf.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,272 @@
|
||||||
|
// lea.cpp - written and placed in the public domain by Kim Sung Hee and Jeffrey Walton
|
||||||
|
// Based on "HIGHT: A 128-Bit Block Cipher for Fast Encryption on Common
|
||||||
|
// Processors" by Deukjo Hong, Jung-Keun Lee, Dong-Chan Kim, Daesung Kwon,
|
||||||
|
// Kwon Ho Ryu, and Dong-Geon Lee.
|
||||||
|
//
|
||||||
|
// This implementation is based on source files found in a zip file at the
|
||||||
|
// Korea Internet and Security Agency (https://www.kisa.or.kr/eng/main.jsp).
|
||||||
|
// The zip files was downloaded from the Korean language area of the site so we
|
||||||
|
// don't have a url or english zip filename to cite. The source filename from
|
||||||
|
// the zip is KISA_HIGHT_ECB.c.
|
||||||
|
|
||||||
|
#include "pch.h"
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
#include "hight.h"
|
||||||
|
#include "misc.h"
|
||||||
|
#include "cpu.h"
|
||||||
|
|
||||||
|
ANONYMOUS_NAMESPACE_BEGIN
|
||||||
|
|
||||||
|
using CryptoPP::byte;
|
||||||
|
|
||||||
|
ANONYMOUS_NAMESPACE_END
|
||||||
|
|
||||||
|
const byte DELTA[128] = {
|
||||||
|
0x5A,0x6D,0x36,0x1B,0x0D,0x06,0x03,0x41,
|
||||||
|
0x60,0x30,0x18,0x4C,0x66,0x33,0x59,0x2C,
|
||||||
|
0x56,0x2B,0x15,0x4A,0x65,0x72,0x39,0x1C,
|
||||||
|
0x4E,0x67,0x73,0x79,0x3C,0x5E,0x6F,0x37,
|
||||||
|
0x5B,0x2D,0x16,0x0B,0x05,0x42,0x21,0x50,
|
||||||
|
0x28,0x54,0x2A,0x55,0x6A,0x75,0x7A,0x7D,
|
||||||
|
0x3E,0x5F,0x2F,0x17,0x4B,0x25,0x52,0x29,
|
||||||
|
0x14,0x0A,0x45,0x62,0x31,0x58,0x6C,0x76,
|
||||||
|
0x3B,0x1D,0x0E,0x47,0x63,0x71,0x78,0x7C,
|
||||||
|
0x7E,0x7F,0x3F,0x1F,0x0F,0x07,0x43,0x61,
|
||||||
|
0x70,0x38,0x5C,0x6E,0x77,0x7B,0x3D,0x1E,
|
||||||
|
0x4F,0x27,0x53,0x69,0x34,0x1A,0x4D,0x26,
|
||||||
|
0x13,0x49,0x24,0x12,0x09,0x04,0x02,0x01,
|
||||||
|
0x40,0x20,0x10,0x08,0x44,0x22,0x11,0x48,
|
||||||
|
0x64,0x32,0x19,0x0C,0x46,0x23,0x51,0x68,
|
||||||
|
0x74,0x3A,0x5D,0x2E,0x57,0x6B,0x35,0x5A
|
||||||
|
};
|
||||||
|
|
||||||
|
const byte HIGHT_F0[256] = {
|
||||||
|
0x00,0x86,0x0D,0x8B,0x1A,0x9C,0x17,0x91,
|
||||||
|
0x34,0xB2,0x39,0xBF,0x2E,0xA8,0x23,0xA5,
|
||||||
|
0x68,0xEE,0x65,0xE3,0x72,0xF4,0x7F,0xF9,
|
||||||
|
0x5C,0xDA,0x51,0xD7,0x46,0xC0,0x4B,0xCD,
|
||||||
|
0xD0,0x56,0xDD,0x5B,0xCA,0x4C,0xC7,0x41,
|
||||||
|
0xE4,0x62,0xE9,0x6F,0xFE,0x78,0xF3,0x75,
|
||||||
|
0xB8,0x3E,0xB5,0x33,0xA2,0x24,0xAF,0x29,
|
||||||
|
0x8C,0x0A,0x81,0x07,0x96,0x10,0x9B,0x1D,
|
||||||
|
0xA1,0x27,0xAC,0x2A,0xBB,0x3D,0xB6,0x30,
|
||||||
|
0x95,0x13,0x98,0x1E,0x8F,0x09,0x82,0x04,
|
||||||
|
0xC9,0x4F,0xC4,0x42,0xD3,0x55,0xDE,0x58,
|
||||||
|
0xFD,0x7B,0xF0,0x76,0xE7,0x61,0xEA,0x6C,
|
||||||
|
0x71,0xF7,0x7C,0xFA,0x6B,0xED,0x66,0xE0,
|
||||||
|
0x45,0xC3,0x48,0xCE,0x5F,0xD9,0x52,0xD4,
|
||||||
|
0x19,0x9F,0x14,0x92,0x03,0x85,0x0E,0x88,
|
||||||
|
0x2D,0xAB,0x20,0xA6,0x37,0xB1,0x3A,0xBC,
|
||||||
|
0x43,0xC5,0x4E,0xC8,0x59,0xDF,0x54,0xD2,
|
||||||
|
0x77,0xF1,0x7A,0xFC,0x6D,0xEB,0x60,0xE6,
|
||||||
|
0x2B,0xAD,0x26,0xA0,0x31,0xB7,0x3C,0xBA,
|
||||||
|
0x1F,0x99,0x12,0x94,0x05,0x83,0x08,0x8E,
|
||||||
|
0x93,0x15,0x9E,0x18,0x89,0x0F,0x84,0x02,
|
||||||
|
0xA7,0x21,0xAA,0x2C,0xBD,0x3B,0xB0,0x36,
|
||||||
|
0xFB,0x7D,0xF6,0x70,0xE1,0x67,0xEC,0x6A,
|
||||||
|
0xCF,0x49,0xC2,0x44,0xD5,0x53,0xD8,0x5E,
|
||||||
|
0xE2,0x64,0xEF,0x69,0xF8,0x7E,0xF5,0x73,
|
||||||
|
0xD6,0x50,0xDB,0x5D,0xCC,0x4A,0xC1,0x47,
|
||||||
|
0x8A,0x0C,0x87,0x01,0x90,0x16,0x9D,0x1B,
|
||||||
|
0xBE,0x38,0xB3,0x35,0xA4,0x22,0xA9,0x2F,
|
||||||
|
0x32,0xB4,0x3F,0xB9,0x28,0xAE,0x25,0xA3,
|
||||||
|
0x06,0x80,0x0B,0x8D,0x1C,0x9A,0x11,0x97,
|
||||||
|
0x5A,0xDC,0x57,0xD1,0x40,0xC6,0x4D,0xCB,
|
||||||
|
0x6E,0xE8,0x63,0xE5,0x74,0xF2,0x79,0xFF
|
||||||
|
};
|
||||||
|
|
||||||
|
const byte HIGHT_F1[256] = {
|
||||||
|
0x00,0x58,0xB0,0xE8,0x61,0x39,0xD1,0x89,
|
||||||
|
0xC2,0x9A,0x72,0x2A,0xA3,0xFB,0x13,0x4B,
|
||||||
|
0x85,0xDD,0x35,0x6D,0xE4,0xBC,0x54,0x0C,
|
||||||
|
0x47,0x1F,0xF7,0xAF,0x26,0x7E,0x96,0xCE,
|
||||||
|
0x0B,0x53,0xBB,0xE3,0x6A,0x32,0xDA,0x82,
|
||||||
|
0xC9,0x91,0x79,0x21,0xA8,0xF0,0x18,0x40,
|
||||||
|
0x8E,0xD6,0x3E,0x66,0xEF,0xB7,0x5F,0x07,
|
||||||
|
0x4C,0x14,0xFC,0xA4,0x2D,0x75,0x9D,0xC5,
|
||||||
|
0x16,0x4E,0xA6,0xFE,0x77,0x2F,0xC7,0x9F,
|
||||||
|
0xD4,0x8C,0x64,0x3C,0xB5,0xED,0x05,0x5D,
|
||||||
|
0x93,0xCB,0x23,0x7B,0xF2,0xAA,0x42,0x1A,
|
||||||
|
0x51,0x09,0xE1,0xB9,0x30,0x68,0x80,0xD8,
|
||||||
|
0x1D,0x45,0xAD,0xF5,0x7C,0x24,0xCC,0x94,
|
||||||
|
0xDF,0x87,0x6F,0x37,0xBE,0xE6,0x0E,0x56,
|
||||||
|
0x98,0xC0,0x28,0x70,0xF9,0xA1,0x49,0x11,
|
||||||
|
0x5A,0x02,0xEA,0xB2,0x3B,0x63,0x8B,0xD3,
|
||||||
|
0x2C,0x74,0x9C,0xC4,0x4D,0x15,0xFD,0xA5,
|
||||||
|
0xEE,0xB6,0x5E,0x06,0x8F,0xD7,0x3F,0x67,
|
||||||
|
0xA9,0xF1,0x19,0x41,0xC8,0x90,0x78,0x20,
|
||||||
|
0x6B,0x33,0xDB,0x83,0x0A,0x52,0xBA,0xE2,
|
||||||
|
0x27,0x7F,0x97,0xCF,0x46,0x1E,0xF6,0xAE,
|
||||||
|
0xE5,0xBD,0x55,0x0D,0x84,0xDC,0x34,0x6C,
|
||||||
|
0xA2,0xFA,0x12,0x4A,0xC3,0x9B,0x73,0x2B,
|
||||||
|
0x60,0x38,0xD0,0x88,0x01,0x59,0xB1,0xE9,
|
||||||
|
0x3A,0x62,0x8A,0xD2,0x5B,0x03,0xEB,0xB3,
|
||||||
|
0xF8,0xA0,0x48,0x10,0x99,0xC1,0x29,0x71,
|
||||||
|
0xBF,0xE7,0x0F,0x57,0xDE,0x86,0x6E,0x36,
|
||||||
|
0x7D,0x25,0xCD,0x95,0x1C,0x44,0xAC,0xF4,
|
||||||
|
0x31,0x69,0x81,0xD9,0x50,0x08,0xE0,0xB8,
|
||||||
|
0xF3,0xAB,0x43,0x1B,0x92,0xCA,0x22,0x7A,
|
||||||
|
0xB4,0xEC,0x04,0x5C,0xD5,0x8D,0x65,0x3D,
|
||||||
|
0x76,0x2E,0xC6,0x9E,0x17,0x4F,0xA7,0xFF
|
||||||
|
};
|
||||||
|
|
||||||
|
NAMESPACE_BEGIN(CryptoPP)
|
||||||
|
|
||||||
|
void HIGHT::Base::UncheckedSetKey(const byte *userKey, unsigned int keyLength, const NameValuePairs ¶ms)
|
||||||
|
{
|
||||||
|
CRYPTOPP_UNUSED(params);
|
||||||
|
CRYPTOPP_UNUSED(keyLength);
|
||||||
|
|
||||||
|
for(unsigned int i=0; i<4; i++) {
|
||||||
|
m_rkey[i ] = userKey[i+12];
|
||||||
|
m_rkey[i+4] = userKey[i ];
|
||||||
|
}
|
||||||
|
|
||||||
|
for(unsigned int i=0; i<8; i++) {
|
||||||
|
for(unsigned int j=0; j<8; j++) {
|
||||||
|
m_rkey[8+16*i+j] = static_cast<byte>(userKey[(j-i)&7] + DELTA[16*i+j]);
|
||||||
|
}
|
||||||
|
|
||||||
|
for(unsigned int j=0; j<8; j++) {
|
||||||
|
m_rkey[8+16*i+j+8] = static_cast<byte>(userKey[((j-i)&7)+8] + DELTA[16*i+j+8]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void HIGHT::Enc::ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const
|
||||||
|
{
|
||||||
|
// First Round
|
||||||
|
m_xx[1] = inBlock[1];
|
||||||
|
m_xx[3] = inBlock[3];
|
||||||
|
m_xx[5] = inBlock[5];
|
||||||
|
m_xx[7] = inBlock[7];
|
||||||
|
|
||||||
|
m_xx[0] = (inBlock[0] + m_rkey[0]) & 0xFF;
|
||||||
|
m_xx[2] = (inBlock[2] ^ m_rkey[1]);
|
||||||
|
m_xx[4] = (inBlock[4] + m_rkey[2]) & 0xFF;
|
||||||
|
m_xx[6] = (inBlock[6] ^ m_rkey[3]);
|
||||||
|
|
||||||
|
// Encryption Round
|
||||||
|
#define HIGHT_ENC(k, i0,i1,i2,i3,i4,i5,i6,i7) { \
|
||||||
|
m_xx[i0] = (m_xx[i0] ^ (HIGHT_F0[m_xx[i1]] + m_rkey[4*k+3])) & 0xFF; \
|
||||||
|
m_xx[i2] = (m_xx[i2] + (HIGHT_F1[m_xx[i3]] ^ m_rkey[4*k+2])) & 0xFF; \
|
||||||
|
m_xx[i4] = (m_xx[i4] ^ (HIGHT_F0[m_xx[i5]] + m_rkey[4*k+1])) & 0xFF; \
|
||||||
|
m_xx[i6] = (m_xx[i6] + (HIGHT_F1[m_xx[i7]] ^ m_rkey[4*k+0])) & 0xFF; \
|
||||||
|
}
|
||||||
|
|
||||||
|
HIGHT_ENC( 2, 7,6,5,4,3,2,1,0);
|
||||||
|
HIGHT_ENC( 3, 6,5,4,3,2,1,0,7);
|
||||||
|
HIGHT_ENC( 4, 5,4,3,2,1,0,7,6);
|
||||||
|
HIGHT_ENC( 5, 4,3,2,1,0,7,6,5);
|
||||||
|
HIGHT_ENC( 6, 3,2,1,0,7,6,5,4);
|
||||||
|
HIGHT_ENC( 7, 2,1,0,7,6,5,4,3);
|
||||||
|
HIGHT_ENC( 8, 1,0,7,6,5,4,3,2);
|
||||||
|
HIGHT_ENC( 9, 0,7,6,5,4,3,2,1);
|
||||||
|
HIGHT_ENC(10, 7,6,5,4,3,2,1,0);
|
||||||
|
HIGHT_ENC(11, 6,5,4,3,2,1,0,7);
|
||||||
|
HIGHT_ENC(12, 5,4,3,2,1,0,7,6);
|
||||||
|
HIGHT_ENC(13, 4,3,2,1,0,7,6,5);
|
||||||
|
HIGHT_ENC(14, 3,2,1,0,7,6,5,4);
|
||||||
|
HIGHT_ENC(15, 2,1,0,7,6,5,4,3);
|
||||||
|
HIGHT_ENC(16, 1,0,7,6,5,4,3,2);
|
||||||
|
HIGHT_ENC(17, 0,7,6,5,4,3,2,1);
|
||||||
|
HIGHT_ENC(18, 7,6,5,4,3,2,1,0);
|
||||||
|
HIGHT_ENC(19, 6,5,4,3,2,1,0,7);
|
||||||
|
HIGHT_ENC(20, 5,4,3,2,1,0,7,6);
|
||||||
|
HIGHT_ENC(21, 4,3,2,1,0,7,6,5);
|
||||||
|
HIGHT_ENC(22, 3,2,1,0,7,6,5,4);
|
||||||
|
HIGHT_ENC(23, 2,1,0,7,6,5,4,3);
|
||||||
|
HIGHT_ENC(24, 1,0,7,6,5,4,3,2);
|
||||||
|
HIGHT_ENC(25, 0,7,6,5,4,3,2,1);
|
||||||
|
HIGHT_ENC(26, 7,6,5,4,3,2,1,0);
|
||||||
|
HIGHT_ENC(27, 6,5,4,3,2,1,0,7);
|
||||||
|
HIGHT_ENC(28, 5,4,3,2,1,0,7,6);
|
||||||
|
HIGHT_ENC(29, 4,3,2,1,0,7,6,5);
|
||||||
|
HIGHT_ENC(30, 3,2,1,0,7,6,5,4);
|
||||||
|
HIGHT_ENC(31, 2,1,0,7,6,5,4,3);
|
||||||
|
HIGHT_ENC(32, 1,0,7,6,5,4,3,2);
|
||||||
|
HIGHT_ENC(33, 0,7,6,5,4,3,2,1);
|
||||||
|
|
||||||
|
// Final Round
|
||||||
|
outBlock[1] = static_cast<byte>(m_xx[2]);
|
||||||
|
outBlock[3] = static_cast<byte>(m_xx[4]);
|
||||||
|
outBlock[5] = static_cast<byte>(m_xx[6]);
|
||||||
|
outBlock[7] = static_cast<byte>(m_xx[0]);
|
||||||
|
|
||||||
|
outBlock[0] = static_cast<byte>(m_xx[1] + m_rkey[4]);
|
||||||
|
outBlock[2] = static_cast<byte>(m_xx[3] ^ m_rkey[5]);
|
||||||
|
outBlock[4] = static_cast<byte>(m_xx[5] + m_rkey[6]);
|
||||||
|
outBlock[6] = static_cast<byte>(m_xx[7] ^ m_rkey[7]);
|
||||||
|
|
||||||
|
if (xorBlock)
|
||||||
|
xorbuf(outBlock, xorBlock, 8);
|
||||||
|
}
|
||||||
|
|
||||||
|
void HIGHT::Dec::ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const
|
||||||
|
{
|
||||||
|
m_xx[2] = static_cast<byte>(inBlock[1]);
|
||||||
|
m_xx[4] = static_cast<byte>(inBlock[3]);
|
||||||
|
m_xx[6] = static_cast<byte>(inBlock[5]);
|
||||||
|
m_xx[0] = static_cast<byte>(inBlock[7]);
|
||||||
|
|
||||||
|
m_xx[1] = static_cast<byte>(inBlock[0] - m_rkey[4]);
|
||||||
|
m_xx[3] = static_cast<byte>(inBlock[2] ^ m_rkey[5]);
|
||||||
|
m_xx[5] = static_cast<byte>(inBlock[4] - m_rkey[6]);
|
||||||
|
m_xx[7] = static_cast<byte>(inBlock[6] ^ m_rkey[7]);
|
||||||
|
|
||||||
|
#define HIGHT_DEC(k, i0,i1,i2,i3,i4,i5,i6,i7) { \
|
||||||
|
m_xx[i1] = (m_xx[i1] - (HIGHT_F1[m_xx[i2]] ^ m_rkey[4*k+2])) & 0xFF; \
|
||||||
|
m_xx[i3] = (m_xx[i3] ^ (HIGHT_F0[m_xx[i4]] + m_rkey[4*k+1])) & 0xFF; \
|
||||||
|
m_xx[i5] = (m_xx[i5] - (HIGHT_F1[m_xx[i6]] ^ m_rkey[4*k+0])) & 0xFF; \
|
||||||
|
m_xx[i7] = (m_xx[i7] ^ (HIGHT_F0[m_xx[i0]] + m_rkey[4*k+3])) & 0xFF; \
|
||||||
|
}
|
||||||
|
|
||||||
|
HIGHT_DEC(33, 7,6,5,4,3,2,1,0);
|
||||||
|
HIGHT_DEC(32, 0,7,6,5,4,3,2,1);
|
||||||
|
HIGHT_DEC(31, 1,0,7,6,5,4,3,2);
|
||||||
|
HIGHT_DEC(30, 2,1,0,7,6,5,4,3);
|
||||||
|
HIGHT_DEC(29, 3,2,1,0,7,6,5,4);
|
||||||
|
HIGHT_DEC(28, 4,3,2,1,0,7,6,5);
|
||||||
|
HIGHT_DEC(27, 5,4,3,2,1,0,7,6);
|
||||||
|
HIGHT_DEC(26, 6,5,4,3,2,1,0,7);
|
||||||
|
HIGHT_DEC(25, 7,6,5,4,3,2,1,0);
|
||||||
|
HIGHT_DEC(24, 0,7,6,5,4,3,2,1);
|
||||||
|
HIGHT_DEC(23, 1,0,7,6,5,4,3,2);
|
||||||
|
HIGHT_DEC(22, 2,1,0,7,6,5,4,3);
|
||||||
|
HIGHT_DEC(21, 3,2,1,0,7,6,5,4);
|
||||||
|
HIGHT_DEC(20, 4,3,2,1,0,7,6,5);
|
||||||
|
HIGHT_DEC(19, 5,4,3,2,1,0,7,6);
|
||||||
|
HIGHT_DEC(18, 6,5,4,3,2,1,0,7);
|
||||||
|
HIGHT_DEC(17, 7,6,5,4,3,2,1,0);
|
||||||
|
HIGHT_DEC(16, 0,7,6,5,4,3,2,1);
|
||||||
|
HIGHT_DEC(15, 1,0,7,6,5,4,3,2);
|
||||||
|
HIGHT_DEC(14, 2,1,0,7,6,5,4,3);
|
||||||
|
HIGHT_DEC(13, 3,2,1,0,7,6,5,4);
|
||||||
|
HIGHT_DEC(12, 4,3,2,1,0,7,6,5);
|
||||||
|
HIGHT_DEC(11, 5,4,3,2,1,0,7,6);
|
||||||
|
HIGHT_DEC(10, 6,5,4,3,2,1,0,7);
|
||||||
|
HIGHT_DEC( 9, 7,6,5,4,3,2,1,0);
|
||||||
|
HIGHT_DEC( 8, 0,7,6,5,4,3,2,1);
|
||||||
|
HIGHT_DEC( 7, 1,0,7,6,5,4,3,2);
|
||||||
|
HIGHT_DEC( 6, 2,1,0,7,6,5,4,3);
|
||||||
|
HIGHT_DEC( 5, 3,2,1,0,7,6,5,4);
|
||||||
|
HIGHT_DEC( 4, 4,3,2,1,0,7,6,5);
|
||||||
|
HIGHT_DEC( 3, 5,4,3,2,1,0,7,6);
|
||||||
|
HIGHT_DEC( 2, 6,5,4,3,2,1,0,7);
|
||||||
|
|
||||||
|
outBlock[1] = static_cast<byte>(m_xx[1]);
|
||||||
|
outBlock[3] = static_cast<byte>(m_xx[3]);
|
||||||
|
outBlock[5] = static_cast<byte>(m_xx[5]);
|
||||||
|
outBlock[7] = static_cast<byte>(m_xx[7]);
|
||||||
|
|
||||||
|
outBlock[0] = static_cast<byte>(m_xx[0] - m_rkey[0]);
|
||||||
|
outBlock[2] = static_cast<byte>(m_xx[2] ^ m_rkey[1]);
|
||||||
|
outBlock[4] = static_cast<byte>(m_xx[4] - m_rkey[2]);
|
||||||
|
outBlock[6] = static_cast<byte>(m_xx[6] ^ m_rkey[3]);
|
||||||
|
|
||||||
|
if (xorBlock)
|
||||||
|
xorbuf(outBlock, xorBlock, 8);
|
||||||
|
}
|
||||||
|
|
||||||
|
NAMESPACE_END
|
||||||
|
|
@ -0,0 +1,80 @@
|
||||||
|
// hight.h - written and placed in the public domain by Kim Sung Hee and Jeffrey Walton
|
||||||
|
// Based on "HIGHT: A New Block Cipher Suitable for Low-Resource Device"
|
||||||
|
// by Deukjo Hong, Jaechul Sung, Seokhie Hong, Jongin Lim, Sangjin Lee,
|
||||||
|
// Bon-Seok Koo, Changhoon Lee, Donghoon Chang, Jesang Lee, Kitae Jeong,
|
||||||
|
// Hyun Kim, Jongsung Kim, and Seongtaek Chee
|
||||||
|
|
||||||
|
/// \file hight.h
|
||||||
|
/// \brief Classes for the HIGHT block cipher
|
||||||
|
/// \since Crypto++ 7.1
|
||||||
|
|
||||||
|
#ifndef CRYPTOPP_HIGHT_H
|
||||||
|
#define CRYPTOPP_HIGHT_H
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
#include "seckey.h"
|
||||||
|
#include "secblock.h"
|
||||||
|
#include "algparam.h"
|
||||||
|
|
||||||
|
NAMESPACE_BEGIN(CryptoPP)
|
||||||
|
|
||||||
|
/// \brief HIGHT block cipher information
|
||||||
|
/// \since Crypto++ 7.1
|
||||||
|
struct HIGHT_Info : public FixedBlockSize<8>, public FixedKeyLength<16>
|
||||||
|
{
|
||||||
|
static const std::string StaticAlgorithmName()
|
||||||
|
{
|
||||||
|
// Format is Cipher-Blocksize
|
||||||
|
return "HIGHT";
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/// \brief HIGHT 64-bit block cipher
|
||||||
|
/// \details HIGHT provides 64-bit block size. The valid key size is 128-bits.
|
||||||
|
/// \note Crypto++ provides a byte oriented implementation
|
||||||
|
/// \sa <a href="http://www.cryptopp.com/wiki/HIGHT">HIGHT</a>, <a href=
|
||||||
|
/// "https://seed.kisa.or.kr/">Korea Internet & Security Agency</a> website
|
||||||
|
/// \since Crypto++ 7.1
|
||||||
|
class CRYPTOPP_NO_VTABLE HIGHT : public HIGHT_Info, public BlockCipherDocumentation
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
/// \brief HIGHT block cipher transformation functions
|
||||||
|
/// \details Provides implementation common to encryption and decryption
|
||||||
|
/// \since Crypto++ 7.1
|
||||||
|
class CRYPTOPP_NO_VTABLE Base : public BlockCipherImpl<HIGHT_Info>
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
void UncheckedSetKey(const byte *userKey, unsigned int keyLength, const NameValuePairs ¶ms);
|
||||||
|
|
||||||
|
FixedSizeSecBlock<byte, 136> m_rkey;
|
||||||
|
mutable FixedSizeSecBlock<word32, 8> m_xx;
|
||||||
|
};
|
||||||
|
|
||||||
|
/// \brief Provides implementation for encryption transformation
|
||||||
|
/// \details Enc provides implementation for encryption transformation.
|
||||||
|
/// \since Crypto++ 7.1
|
||||||
|
class CRYPTOPP_NO_VTABLE Enc : public Base
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
/// \brief Provides implementation for encryption transformation
|
||||||
|
/// \details Dec provides implementation for decryption transformation.
|
||||||
|
/// \since Crypto++ 7.1
|
||||||
|
class CRYPTOPP_NO_VTABLE Dec : public Base
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef BlockCipherFinal<ENCRYPTION, Enc> Encryption;
|
||||||
|
typedef BlockCipherFinal<DECRYPTION, Dec> Decryption;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef HIGHT::Encryption HIGHTEncryption;
|
||||||
|
typedef HIGHT::Decryption HIGHTDecryption;
|
||||||
|
|
||||||
|
NAMESPACE_END
|
||||||
|
|
||||||
|
#endif // CRYPTOPP_HIGHT_H
|
||||||
2
lea.cpp
2
lea.cpp
|
|
@ -4,7 +4,7 @@
|
||||||
// Kwon Ho Ryu, and Dong-Geon Lee.
|
// Kwon Ho Ryu, and Dong-Geon Lee.
|
||||||
//
|
//
|
||||||
// This implementation is based on source files found in a zip file at the
|
// This implementation is based on source files found in a zip file at the
|
||||||
// Korea Internet and Security Association (https://www.kisa.or.kr/eng/main.jsp).
|
// Korea Internet and Security Agency (https://www.kisa.or.kr/eng/main.jsp).
|
||||||
// The zip files was downloaded from the Korean language area of the site so we
|
// The zip files was downloaded from the Korean language area of the site so we
|
||||||
// don't have a url or english zip filename to cite. The source filename from
|
// don't have a url or english zip filename to cite. The source filename from
|
||||||
// the zip is lea_core.c.
|
// the zip is lea_core.c.
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@
|
||||||
#include "seal.h"
|
#include "seal.h"
|
||||||
#include "ttmac.h"
|
#include "ttmac.h"
|
||||||
#include "aria.h"
|
#include "aria.h"
|
||||||
#include "cham.h"
|
#include "hight.h"
|
||||||
#include "camellia.h"
|
#include "camellia.h"
|
||||||
#include "shacal2.h"
|
#include "shacal2.h"
|
||||||
#include "tea.h"
|
#include "tea.h"
|
||||||
|
|
@ -33,6 +33,7 @@
|
||||||
#include "mars.h"
|
#include "mars.h"
|
||||||
#include "kalyna.h"
|
#include "kalyna.h"
|
||||||
#include "threefish.h"
|
#include "threefish.h"
|
||||||
|
#include "cham.h"
|
||||||
#include "lea.h"
|
#include "lea.h"
|
||||||
#include "simon.h"
|
#include "simon.h"
|
||||||
#include "speck.h"
|
#include "speck.h"
|
||||||
|
|
@ -99,6 +100,8 @@ void RegisterFactories2()
|
||||||
RegisterSymmetricCipherDefaultFactories<SEAL<> >();
|
RegisterSymmetricCipherDefaultFactories<SEAL<> >();
|
||||||
RegisterSymmetricCipherDefaultFactories<ECB_Mode<SHACAL2> >();
|
RegisterSymmetricCipherDefaultFactories<ECB_Mode<SHACAL2> >();
|
||||||
RegisterSymmetricCipherDefaultFactories<ECB_Mode<ARIA> >();
|
RegisterSymmetricCipherDefaultFactories<ECB_Mode<ARIA> >();
|
||||||
|
RegisterSymmetricCipherDefaultFactories<ECB_Mode<HIGHT> >();
|
||||||
|
RegisterSymmetricCipherDefaultFactories<CTR_Mode<HIGHT> >();
|
||||||
RegisterSymmetricCipherDefaultFactories<ECB_Mode<Camellia> >();
|
RegisterSymmetricCipherDefaultFactories<ECB_Mode<Camellia> >();
|
||||||
RegisterSymmetricCipherDefaultFactories<ECB_Mode<TEA> >();
|
RegisterSymmetricCipherDefaultFactories<ECB_Mode<TEA> >();
|
||||||
RegisterSymmetricCipherDefaultFactories<ECB_Mode<XTEA> >();
|
RegisterSymmetricCipherDefaultFactories<ECB_Mode<XTEA> >();
|
||||||
|
|
|
||||||
|
|
@ -172,6 +172,7 @@ bool ValidateAll(bool thorough)
|
||||||
pass=ValidateSHACAL2() && pass;
|
pass=ValidateSHACAL2() && pass;
|
||||||
pass=ValidateARIA() && pass;
|
pass=ValidateARIA() && pass;
|
||||||
pass=ValidateCHAM() && pass;
|
pass=ValidateCHAM() && pass;
|
||||||
|
pass=ValidateHIGHT() && pass;
|
||||||
pass=ValidateLEA() && pass;
|
pass=ValidateLEA() && pass;
|
||||||
pass=ValidateCamellia() && pass;
|
pass=ValidateCamellia() && pass;
|
||||||
pass=ValidateSalsa() && pass;
|
pass=ValidateSalsa() && pass;
|
||||||
|
|
@ -3405,6 +3406,13 @@ bool ValidateCHAM()
|
||||||
return RunTestDataFile(CRYPTOPP_DATA_DIR "TestVectors/cham.txt");
|
return RunTestDataFile(CRYPTOPP_DATA_DIR "TestVectors/cham.txt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ValidateHIGHT()
|
||||||
|
{
|
||||||
|
std::cout << "\nHIGHT validation suite running...\n";
|
||||||
|
|
||||||
|
return RunTestDataFile(CRYPTOPP_DATA_DIR "TestVectors/hight.txt");
|
||||||
|
}
|
||||||
|
|
||||||
bool ValidateLEA()
|
bool ValidateLEA()
|
||||||
{
|
{
|
||||||
std::cout << "\nLEA validation suite running...\n";
|
std::cout << "\nLEA validation suite running...\n";
|
||||||
|
|
|
||||||
|
|
@ -82,6 +82,7 @@ bool ValidateSerpent();
|
||||||
bool ValidateSHACAL2();
|
bool ValidateSHACAL2();
|
||||||
bool ValidateARIA();
|
bool ValidateARIA();
|
||||||
bool ValidateCHAM();
|
bool ValidateCHAM();
|
||||||
|
bool ValidateHIGHT();
|
||||||
bool ValidateLEA();
|
bool ValidateLEA();
|
||||||
bool ValidateCamellia();
|
bool ValidateCamellia();
|
||||||
bool ValidateSalsa();
|
bool ValidateSalsa();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue