Skip to content

Commit 08e6137

Browse files
committed
Add SIMECK-64 SSSE3 implementation (GH weidai11#675)
1 parent 4a7814b commit 08e6137

9 files changed

+404
-13
lines changed

Filelist.txt

+1
Original file line numberDiff line numberDiff line change
@@ -287,6 +287,7 @@ simple.cpp
287287
simple.h
288288
siphash.h
289289
simeck.cpp
290+
simeck-simd.cpp
290291
simeck.h
291292
simon.cpp
292293
simon-simd.cpp

GNUmakefile

+12
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,7 @@ ifeq ($(findstring -DCRYPTOPP_DISABLE_SSSE3,$(CXXFLAGS)),)
252252
CHAM_FLAG = -mssse3
253253
LEA_FLAG = -mssse3
254254
SSSE3_FLAG = -mssse3
255+
SIMECK_FLAG = -mssse3
255256
SIMON_FLAG = -mssse3
256257
SPECK_FLAG = -mssse3
257258
endif
@@ -293,6 +294,7 @@ ifeq ($(SUN_COMPILER),1)
293294
ARIA_FLAG = -xarch=ssse3 -D__SSSE3__=1
294295
CHAM_FLAG = -xarch=ssse3 -D__SSSE3__=1
295296
LEA_FLAG = -xarch=ssse3 -D__SSSE3__=1
297+
SIMECK_FLAG = -xarch=ssse3 -D__SSSE3__=1
296298
SIMON_FLAG = -xarch=ssse3 -D__SSSE3__=1
297299
SPECK_FLAG = -xarch=ssse3 -D__SSSE3__=1
298300
LDFLAGS += -xarch=ssse3
@@ -379,6 +381,7 @@ ifeq ($(IS_NEON),1)
379381
ARIA_FLAG = -march=armv7-a -mfloat-abi=$(FP_ABI) -mfpu=neon
380382
BLAKE2_FLAG = -march=armv7-a -mfloat-abi=$(FP_ABI) -mfpu=neon
381383
LEA_FLAG = -march=armv7-a -mfloat-abi=$(FP_ABI) -mfpu=neon
384+
SIMECK_FLAG = -march=armv7-a -mfloat-abi=$(FP_ABI) -mfpu=neon
382385
SIMON_FLAG = -march=armv7-a -mfloat-abi=$(FP_ABI) -mfpu=neon
383386
SPECK_FLAG = -march=armv7-a -mfloat-abi=$(FP_ABI) -mfpu=neon
384387
endif
@@ -391,6 +394,7 @@ ifeq ($(IS_ARMV8),1)
391394
BLAKE2_FLAG = -march=armv8-a
392395
LEA_FLAG = -march=armv8-a
393396
NEON_FLAG = -march=armv8-a
397+
SIMECK_FLAG = -march=armv8-a
394398
SIMON_FLAG = -march=armv8-a
395399
SPECK_FLAG = -march=armv8-a
396400
endif
@@ -416,6 +420,7 @@ ifneq ($(IS_PPC32)$(IS_PPC64)$(IS_AIX),000)
416420
ARIA_FLAG = -mcpu=power4 -maltivec
417421
BLAKE2_FLAG = -mcpu=power4 -maltivec
418422
SIMON_FLAG = -mcpu=power4 -maltivec
423+
SIMECK_FLAG = -mcpu=power4 -maltivec
419424
SPECK_FLAG = -mcpu=power4 -maltivec
420425
endif
421426
# GCC and some compatibles
@@ -425,6 +430,7 @@ ifneq ($(IS_PPC32)$(IS_PPC64)$(IS_AIX),000)
425430
AES_FLAG = -mcpu=power8 -maltivec
426431
GCM_FLAG = -mcpu=power8 -maltivec
427432
SHA_FLAG = -mcpu=power8 -maltivec
433+
SIMECK_FLAG = -mcpu=power8 -maltivec
428434
SIMON_FLAG = -mcpu=power8 -maltivec
429435
SPECK_FLAG = -mcpu=power8 -maltivec
430436
endif
@@ -434,6 +440,7 @@ ifneq ($(IS_PPC32)$(IS_PPC64)$(IS_AIX),000)
434440
ALTIVEC_FLAG = -qarch=pwr7 -qaltivec
435441
ARIA_FLAG = -qarch=pwr7 -qaltivec
436442
BLAKE2_FLAG = -qarch=pwr7 -qaltivec
443+
SIMECK_FLAG = -qarch=pwr7 -qaltivec
437444
SIMON_FLAG = -qarch=pwr7 -qaltivec
438445
SPECK_FLAG = -qarch=pwr7 -qaltivec
439446
endif
@@ -446,6 +453,7 @@ ifneq ($(IS_PPC32)$(IS_PPC64)$(IS_AIX),000)
446453
SHA_FLAG = -qarch=pwr8 -qaltivec
447454
ARIA_FLAG = -qarch=pwr8 -qaltivec
448455
BLAKE2_FLAG = -qarch=pwr8 -qaltivec
456+
SIMECK_FLAG = -qarch=pwr8 -qaltivec
449457
SIMON_FLAG = -qarch=pwr8 -qaltivec
450458
SPECK_FLAG = -qarch=pwr8 -qaltivec
451459
endif
@@ -1096,6 +1104,10 @@ sha-simd.o : sha-simd.cpp
10961104
shacal2-simd.o : shacal2-simd.cpp
10971105
$(CXX) $(strip $(CXXFLAGS) $(SHA_FLAG) -c) $<
10981106

1107+
# SSSE3 or NEON available
1108+
simeck-simd.o : simeck-simd.cpp
1109+
$(CXX) $(strip $(CXXFLAGS) $(SIMECK_FLAG) -c) $<
1110+
10991111
# SSSE3 or NEON available
11001112
simon-simd.o : simon-simd.cpp
11011113
$(CXX) $(strip $(CXXFLAGS) $(SIMON_FLAG) -c) $<

bench1.cpp

+4
Original file line numberDiff line numberDiff line change
@@ -525,6 +525,10 @@ void Benchmark2(double t, double hertz)
525525
std::cout << "\n<TR><TH>Algorithm<TH>MiB/Second" << cpb;
526526
std::cout << "<TH>Microseconds to<BR>Setup Key and IV" << cpk;
527527

528+
BenchMarkByName<SymmetricCipher>("SIMECK-32/CTR", 8, "SIMECK-32(64)/CTR (64-bit key)");
529+
BenchMarkByName<SymmetricCipher>("SIMECK-64/CTR", 16, "SIMECK-64(128)/CTR (128-bit key)");
530+
return;
531+
528532
std::cout << "\n<TBODY style=\"background: white;\">";
529533
{
530534
#if CRYPTOPP_AESNI_AVAILABLE

cryptest.nmake

+2-2
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,9 @@
4747

4848
# If you use 'make sources' from Linux makefile, then add 'winpipes.cpp' to the list below.
4949

50-
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 simeck.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
50+
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 simeck-simd.cpp simeck.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
5151

52-
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 simeck.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
52+
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 simeck-simd.obj simeck.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
5353

5454
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
5555

cryptlib.vcxproj

+1
Original file line numberDiff line numberDiff line change
@@ -296,6 +296,7 @@
296296
<ClCompile Include="shark.cpp" />
297297
<ClCompile Include="sharkbox.cpp" />
298298
<ClCompile Include="simeck.cpp" />
299+
<ClCompile Include="simeck-simd.cpp" />
299300
<ClCompile Include="simon.cpp" />
300301
<ClCompile Include="simon-simd.cpp" />
301302
<ClCompile Include="simple.cpp" />

cryptlib.vcxproj.filters

+3
Original file line numberDiff line numberDiff line change
@@ -380,6 +380,9 @@
380380
<ClCompile Include="simeck.cpp">
381381
<Filter>Source Files</Filter>
382382
</ClCompile>
383+
<ClCompile Include="simeck-simd.cpp">
384+
<Filter>Source Files</Filter>
385+
</ClCompile>
383386
<ClCompile Include="simon.cpp">
384387
<Filter>Source Files</Filter>
385388
</ClCompile>

0 commit comments

Comments
 (0)