diff --git a/romulus/Implementations/crypto_aead/romulusn1+v13/armsrc_NEC/encrypt.c b/romulus/Implementations/crypto_aead/romulusn1+v13/armsrc_NEC/encrypt.c index e953677..5a7d0e0 100644 --- a/romulus/Implementations/crypto_aead/romulusn1+v13/armsrc_NEC/encrypt.c +++ b/romulus/Implementations/crypto_aead/romulusn1+v13/armsrc_NEC/encrypt.c @@ -505,6 +505,7 @@ const unsigned char *k } } + l_skinny_ctrl.func_skinny_128_384_enc = skinny_128_384_enc1_1; reset_lfsr_gf56(CNT); clen = clen - 16; diff --git a/romulus/Implementations/crypto_aead/romulusn1v12/armsrc_NEC/encrypt.c b/romulus/Implementations/crypto_aead/romulusn1v12/armsrc_NEC/encrypt.c index e953677..5a7d0e0 100644 --- a/romulus/Implementations/crypto_aead/romulusn1v12/armsrc_NEC/encrypt.c +++ b/romulus/Implementations/crypto_aead/romulusn1v12/armsrc_NEC/encrypt.c @@ -505,6 +505,7 @@ const unsigned char *k } } + l_skinny_ctrl.func_skinny_128_384_enc = skinny_128_384_enc1_1; reset_lfsr_gf56(CNT); clen = clen - 16; diff --git a/romulus/Implementations/crypto_aead/romulusn1v12/armsrc_NEC/skinny_key_schedule3.c b/romulus/Implementations/crypto_aead/romulusn1v12/armsrc_NEC/skinny_key_schedule3.c index 81c4406..d8a4f30 100644 --- a/romulus/Implementations/crypto_aead/romulusn1v12/armsrc_NEC/skinny_key_schedule3.c +++ b/romulus/Implementations/crypto_aead/romulusn1v12/armsrc_NEC/skinny_key_schedule3.c @@ -35,11 +35,15 @@ void RunEncryptionKeyScheduleTK3(unsigned char *roundKeys, unsigned char *pRC) // round 1 // AC(c0 c1) - "eor.w r6, r2, #0x1 \n\t" // k0^rc + "ldrb.w r6, [r1,#0] \n\t" // load RC + + "eor.w r7, r3, r6, lsr #4 \n\t" // k4^rc + "and.w r6, r6, #0xf \n\t" + "eor.w r6, r6, r2 \n\t" // k0^rc // round key store "str.w r6, [r0,#512] \n\t" - "str.w r3, [r0,#516] \n\t" + "str.w r7, [r0,#516] \n\t" // permutation // r2 (k3 k2 k1 k0) k13 k8 k15 k9 @@ -86,11 +90,15 @@ void RunEncryptionKeyScheduleTK3(unsigned char *roundKeys, unsigned char *pRC) // round 2 // AC(c0 c1) - "eor.w r6, r2, #0x3 \n\t" // k0^rc + "ldrb.w r6, [r1,#1] \n\t" // load RC + + "eor.w r7, r3, r6, lsr #4 \n\t" // k4^rc + "and.w r6, r6, #0xf \n\t" + "eor.w r6, r6, r2 \n\t" // k0^rc // round key store "str.w r6, [r0,#520] \n\t" - "str.w r3, [r0,#524] \n\t" + "str.w r7, [r0,#524] \n\t" // permutation // r2 (k3 k2 k1 k0) k13 k8 k15 k9 @@ -137,11 +145,15 @@ void RunEncryptionKeyScheduleTK3(unsigned char *roundKeys, unsigned char *pRC) // round 3 // AC(c0 c1) - "eor.w r6, r2, #0x7 \n\t" // k0^rc + "ldrb.w r6, [r1,#2] \n\t" // load RC + + "eor.w r7, r3, r6, lsr #4 \n\t" // k4^rc + "and.w r6, r6, #0xf \n\t" + "eor.w r6, r6, r2 \n\t" // k0^rc // round key store "str.w r6, [r0,#528] \n\t" - "str.w r3, [r0,#532] \n\t" + "str.w r7, [r0,#532] \n\t" // permutation // r2 (k3 k2 k1 k0) k13 k8 k15 k9 @@ -188,11 +200,15 @@ void RunEncryptionKeyScheduleTK3(unsigned char *roundKeys, unsigned char *pRC) // round 4 // AC(c0 c1) - "eor.w r6, r2, #0xf \n\t" // k0^rc + "ldrb.w r6, [r1,#3] \n\t" // load RC + + "eor.w r7, r3, r6, lsr #4 \n\t" // k4^rc + "and.w r6, r6, #0xf \n\t" + "eor.w r6, r6, r2 \n\t" // k0^rc // round key store "str.w r6, [r0,#536] \n\t" - "str.w r3, [r0,#540] \n\t" + "str.w r7, [r0,#540] \n\t" // permutation // r2 (k3 k2 k1 k0) k13 k8 k15 k9 @@ -239,8 +255,11 @@ void RunEncryptionKeyScheduleTK3(unsigned char *roundKeys, unsigned char *pRC) // round 5 // AC(c0 c1) - "eor.w r6, r2, #0xf \n\t" // k0^rc - "eor.w r7, r3, #0x1 \n\t" // k0^rc + "ldrb.w r6, [r1,#4] \n\t" // load RC + + "eor.w r7, r3, r6, lsr #4 \n\t" // k4^rc + "and.w r6, r6, #0xf \n\t" + "eor.w r6, r6, r2 \n\t" // k0^rc // round key store "str.w r6, [r0,#544] \n\t" @@ -291,8 +310,11 @@ void RunEncryptionKeyScheduleTK3(unsigned char *roundKeys, unsigned char *pRC) // round 6 // AC(c0 c1) - "eor.w r7, r3, #0x3 \n\t" // k0^rc - "eor.w r6, r2, #0xe \n\t" // k0^rc + "ldrb.w r6, [r1,#5] \n\t" // load RC + + "eor.w r7, r3, r6, lsr #4 \n\t" // k4^rc + "and.w r6, r6, #0xf \n\t" + "eor.w r6, r6, r2 \n\t" // k0^rc // round key store "str.w r6, [r0,#552] \n\t" @@ -343,9 +365,11 @@ void RunEncryptionKeyScheduleTK3(unsigned char *roundKeys, unsigned char *pRC) // round 7 // AC(c0 c1) - "eor.w r7, r3, #0x3 \n\t" // k0^rc - "eor.w r6, r2, #0xd \n\t" // k0^rc + "ldrb.w r6, [r1,#6] \n\t" // load RC + "eor.w r7, r3, r6, lsr #4 \n\t" // k4^rc + "and.w r6, r6, #0xf \n\t" + "eor.w r6, r6, r2 \n\t" // k0^rc // round key store "str.w r6, [r0,#560] \n\t" @@ -396,8 +420,11 @@ void RunEncryptionKeyScheduleTK3(unsigned char *roundKeys, unsigned char *pRC) // round 8 // AC(c0 c1) - "eor.w r7, r3, #0x3 \n\t" // k0^rc - "eor.w r6, r2, #0xb \n\t" // k0^rc + "ldrb.w r6, [r1,#7] \n\t" // load RC + + "eor.w r7, r3, r6, lsr #4 \n\t" // k4^rc + "and.w r6, r6, #0xf \n\t" + "eor.w r6, r6, r2 \n\t" // k0^rc // round key store "str.w r6, [r0,#568] \n\t" @@ -448,8 +475,11 @@ void RunEncryptionKeyScheduleTK3(unsigned char *roundKeys, unsigned char *pRC) // round 9 // AC(c0 c1) - "eor.w r7, r3, #0x3 \n\t" // k0^rc - "eor.w r6, r2, #0x7 \n\t" // k0^rc + "ldrb.w r6, [r1,#8] \n\t" // load RC + + "eor.w r7, r3, r6, lsr #4 \n\t" // k4^rc + "and.w r6, r6, #0xf \n\t" + "eor.w r6, r6, r2 \n\t" // k0^rc // round key store "str.w r6, [r0,#576] \n\t" @@ -500,8 +530,11 @@ void RunEncryptionKeyScheduleTK3(unsigned char *roundKeys, unsigned char *pRC) // round 10 // AC(c0 c1) - "eor.w r7, r3, #0x2 \n\t" // k0^rc - "eor.w r6, r2, #0xf \n\t" // k0^rc + "ldrb.w r6, [r1,#9] \n\t" // load RC + + "eor.w r7, r3, r6, lsr #4 \n\t" // k4^rc + "and.w r6, r6, #0xf \n\t" + "eor.w r6, r6, r2 \n\t" // k0^rc // round key store "str.w r6, [r0,#584] \n\t" @@ -552,8 +585,11 @@ void RunEncryptionKeyScheduleTK3(unsigned char *roundKeys, unsigned char *pRC) // round 11 // AC(c0 c1) - "eor.w r7, r3, #0x1 \n\t" // k0^rc - "eor.w r6, r2, #0xe \n\t" // k0^rc + "ldrb.w r6, [r1,#10] \n\t" // load RC + + "eor.w r7, r3, r6, lsr #4 \n\t" // k4^rc + "and.w r6, r6, #0xf \n\t" + "eor.w r6, r6, r2 \n\t" // k0^rc // round key store "str.w r6, [r0,#592] \n\t" @@ -604,8 +640,11 @@ void RunEncryptionKeyScheduleTK3(unsigned char *roundKeys, unsigned char *pRC) // round 12 // AC(c0 c1) - "eor.w r7, r3, #0x3 \n\t" // k0^rc - "eor.w r6, r2, #0xc \n\t" // k0^rc + "ldrb.w r6, [r1,#11] \n\t" // load RC + + "eor.w r7, r3, r6, lsr #4 \n\t" // k4^rc + "and.w r6, r6, #0xf \n\t" + "eor.w r6, r6, r2 \n\t" // k0^rc // round key store "str.w r6, [r0,#600] \n\t" @@ -656,8 +695,11 @@ void RunEncryptionKeyScheduleTK3(unsigned char *roundKeys, unsigned char *pRC) // round 13 // AC(c0 c1) - "eor.w r7, r3, #0x3 \n\t" // k0^rc - "eor.w r6, r2, #0x9 \n\t" // k0^rc + "ldrb.w r6, [r1,#12] \n\t" // load RC + + "eor.w r7, r3, r6, lsr #4 \n\t" // k4^rc + "and.w r6, r6, #0xf \n\t" + "eor.w r6, r6, r2 \n\t" // k0^rc // round key store "str.w r6, [r0,#608] \n\t" @@ -708,8 +750,11 @@ void RunEncryptionKeyScheduleTK3(unsigned char *roundKeys, unsigned char *pRC) // round 14 // AC(c0 c1) - "eor.w r7, r3, #0x3 \n\t" // k0^rc - "eor.w r6, r2, #0x3 \n\t" // k0^rc + "ldrb.w r6, [r1,#13] \n\t" // load RC + + "eor.w r7, r3, r6, lsr #4 \n\t" // k4^rc + "and.w r6, r6, #0xf \n\t" + "eor.w r6, r6, r2 \n\t" // k0^rc // round key store "str.w r6, [r0,#616] \n\t" @@ -760,8 +805,11 @@ void RunEncryptionKeyScheduleTK3(unsigned char *roundKeys, unsigned char *pRC) // round 15 // AC(c0 c1) - "eor.w r7, r3, #0x2 \n\t" // k0^rc - "eor.w r6, r2, #0x7 \n\t" // k0^rc + "ldrb.w r6, [r1,#14] \n\t" // load RC + + "eor.w r7, r3, r6, lsr #4 \n\t" // k4^rc + "and.w r6, r6, #0xf \n\t" + "eor.w r6, r6, r2 \n\t" // k0^rc // round key store "str.w r6, [r0,#624] \n\t" @@ -812,11 +860,15 @@ void RunEncryptionKeyScheduleTK3(unsigned char *roundKeys, unsigned char *pRC) // round 16 // AC(c0 c1) - "eor.w r6, r2, #0xe \n\t" // k0^rc + "ldrb.w r6, [r1,#15] \n\t" // load RC + + "eor.w r7, r3, r6, lsr #4 \n\t" // k4^rc + "and.w r6, r6, #0xf \n\t" + "eor.w r6, r6, r2 \n\t" // k0^rc // round key store "str.w r6, [r0,#632] \n\t" - "str.w r3, [r0,#636] \n\t" + "str.w r7, [r0,#636] \n\t" // permutation // r2 (k3 k2 k1 k0) k13 k8 k15 k9 @@ -863,8 +915,11 @@ void RunEncryptionKeyScheduleTK3(unsigned char *roundKeys, unsigned char *pRC) // round 17 // AC(c0 c1) - "eor.w r7, r3, #0x1 \n\t" // k0^rc - "eor.w r6, r2, #0xd \n\t" // k0^rc + "ldrb.w r6, [r1,#16] \n\t" // load RC + + "eor.w r7, r3, r6, lsr #4 \n\t" // k4^rc + "and.w r6, r6, #0xf \n\t" + "eor.w r6, r6, r2 \n\t" // k0^rc // round key store "str.w r6, [r0,#640] \n\t" @@ -915,8 +970,11 @@ void RunEncryptionKeyScheduleTK3(unsigned char *roundKeys, unsigned char *pRC) // round 18 // AC(c0 c1) - "eor.w r7, r3, #0x3 \n\t" // k0^rc - "eor.w r6, r2, #0xa \n\t" // k0^rc + "ldrb.w r6, [r1,#17] \n\t" // load RC + + "eor.w r7, r3, r6, lsr #4 \n\t" // k4^rc + "and.w r6, r6, #0xf \n\t" + "eor.w r6, r6, r2 \n\t" // k0^rc // round key store "str.w r6, [r0,#648] \n\t" @@ -967,8 +1025,11 @@ void RunEncryptionKeyScheduleTK3(unsigned char *roundKeys, unsigned char *pRC) // round 19 // AC(c0 c1) - "eor.w r7, r3, #0x3 \n\t" // k0^rc - "eor.w r6, r2, #0x5 \n\t" // k0^rc + "ldrb.w r6, [r1,#18] \n\t" // load RC + + "eor.w r7, r3, r6, lsr #4 \n\t" // k4^rc + "and.w r6, r6, #0xf \n\t" + "eor.w r6, r6, r2 \n\t" // k0^rc // round key store "str.w r6, [r0,#656] \n\t" @@ -1019,8 +1080,11 @@ void RunEncryptionKeyScheduleTK3(unsigned char *roundKeys, unsigned char *pRC) // round 20 // AC(c0 c1) - "eor.w r7, r3, #0x2 \n\t" // k0^rc - "eor.w r6, r2, #0xb \n\t" // k0^rc + "ldrb.w r6, [r1,#19] \n\t" // load RC + + "eor.w r7, r3, r6, lsr #4 \n\t" // k4^rc + "and.w r6, r6, #0xf \n\t" + "eor.w r6, r6, r2 \n\t" // k0^rc // round key store "str.w r6, [r0,#664] \n\t" @@ -1071,8 +1135,11 @@ void RunEncryptionKeyScheduleTK3(unsigned char *roundKeys, unsigned char *pRC) // round 21 // AC(c0 c1) - "eor.w r7, r3, #0x1 \n\t" // k0^rc - "eor.w r6, r2, #0x6 \n\t" // k0^rc + "ldrb.w r6, [r1,#20] \n\t" // load RC + + "eor.w r7, r3, r6, lsr #4 \n\t" // k4^rc + "and.w r6, r6, #0xf \n\t" + "eor.w r6, r6, r2 \n\t" // k0^rc // round key store "str.w r6, [r0,#672] \n\t" @@ -1123,8 +1190,11 @@ void RunEncryptionKeyScheduleTK3(unsigned char *roundKeys, unsigned char *pRC) // round 22 // AC(c0 c1) - "eor.w r7, r3, #0x2 \n\t" // k0^rc - "eor.w r6, r2, #0xc \n\t" // k0^rc + "ldrb.w r6, [r1,#21] \n\t" // load RC + + "eor.w r7, r3, r6, lsr #4 \n\t" // k4^rc + "and.w r6, r6, #0xf \n\t" + "eor.w r6, r6, r2 \n\t" // k0^rc // round key store "str.w r6, [r0,#680] \n\t" @@ -1175,8 +1245,11 @@ void RunEncryptionKeyScheduleTK3(unsigned char *roundKeys, unsigned char *pRC) // round 23 // AC(c0 c1) - "eor.w r7, r3, #0x1 \n\t" // k0^rc - "eor.w r6, r2, #0x8 \n\t" // k0^rc + "ldrb.w r6, [r1,#22] \n\t" // load RC + + "eor.w r7, r3, r6, lsr #4 \n\t" // k4^rc + "and.w r6, r6, #0xf \n\t" + "eor.w r6, r6, r2 \n\t" // k0^rc // round key store "str.w r6, [r0,#688] \n\t" @@ -1227,8 +1300,11 @@ void RunEncryptionKeyScheduleTK3(unsigned char *roundKeys, unsigned char *pRC) // round 24 // AC(c0 c1) - "eor.w r7, r3, #0x3 \n\t" // k0^rc - "eor.w r6, r2, #0x0 \n\t" // k0^rc + "ldrb.w r6, [r1,#23] \n\t" // load RC + + "eor.w r7, r3, r6, lsr #4 \n\t" // k4^rc + "and.w r6, r6, #0xf \n\t" + "eor.w r6, r6, r2 \n\t" // k0^rc // round key store "str.w r6, [r0,#696] \n\t" @@ -1279,8 +1355,11 @@ void RunEncryptionKeyScheduleTK3(unsigned char *roundKeys, unsigned char *pRC) // round 25 // AC(c0 c1) - "eor.w r7, r3, #0x2 \n\t" // k0^rc - "eor.w r6, r2, #0x1 \n\t" // k0^rc + "ldrb.w r6, [r1,#24] \n\t" // load RC + + "eor.w r7, r3, r6, lsr #4 \n\t" // k4^rc + "and.w r6, r6, #0xf \n\t" + "eor.w r6, r6, r2 \n\t" // k0^rc // round key store "str.w r6, [r0,#704] \n\t" @@ -1331,11 +1410,15 @@ void RunEncryptionKeyScheduleTK3(unsigned char *roundKeys, unsigned char *pRC) // round 26 // AC(c0 c1) - "eor.w r6, r2, #0x2 \n\t" // k0^rc + "ldrb.w r6, [r1,#25] \n\t" // load RC + + "eor.w r7, r3, r6, lsr #4 \n\t" // k4^rc + "and.w r6, r6, #0xf \n\t" + "eor.w r6, r6, r2 \n\t" // k0^rc // round key store "str.w r6, [r0,#712] \n\t" - "str.w r3, [r0,#716] \n\t" + "str.w r7, [r0,#716] \n\t" // permutation // r2 (k3 k2 k1 k0) k13 k8 k15 k9 @@ -1382,11 +1465,15 @@ void RunEncryptionKeyScheduleTK3(unsigned char *roundKeys, unsigned char *pRC) // round 27 // AC(c0 c1) - "eor.w r6, r2, #0x5 \n\t" // k0^rc + "ldrb.w r6, [r1,#26] \n\t" // load RC + + "eor.w r7, r3, r6, lsr #4 \n\t" // k4^rc + "and.w r6, r6, #0xf \n\t" + "eor.w r6, r6, r2 \n\t" // k0^rc // round key store "str.w r6, [r0,#720] \n\t" - "str.w r3, [r0,#724] \n\t" + "str.w r7, [r0,#724] \n\t" // permutation // r2 (k3 k2 k1 k0) k13 k8 k15 k9 @@ -1433,11 +1520,15 @@ void RunEncryptionKeyScheduleTK3(unsigned char *roundKeys, unsigned char *pRC) // round 28 // AC(c0 c1) - "eor.w r6, r2, #0xb \n\t" // k0^rc + "ldrb.w r6, [r1,#27] \n\t" // load RC + + "eor.w r7, r3, r6, lsr #4 \n\t" // k4^rc + "and.w r6, r6, #0xf \n\t" + "eor.w r6, r6, r2 \n\t" // k0^rc // round key store "str.w r6, [r0,#728] \n\t" - "str.w r3, [r0,#732] \n\t" + "str.w r7, [r0,#732] \n\t" // permutation // r2 (k3 k2 k1 k0) k13 k8 k15 k9 @@ -1484,8 +1575,11 @@ void RunEncryptionKeyScheduleTK3(unsigned char *roundKeys, unsigned char *pRC) // round 29 // AC(c0 c1) - "eor.w r7, r3, #0x1 \n\t" // k0^rc - "eor.w r6, r2, #0x7 \n\t" // k0^rc + "ldrb.w r6, [r1,#28] \n\t" // load RC + + "eor.w r7, r3, r6, lsr #4 \n\t" // k4^rc + "and.w r6, r6, #0xf \n\t" + "eor.w r6, r6, r2 \n\t" // k0^rc // round key store "str.w r6, [r0,#736] \n\t" @@ -1536,8 +1630,11 @@ void RunEncryptionKeyScheduleTK3(unsigned char *roundKeys, unsigned char *pRC) // round 30 // AC(c0 c1) - "eor.w r7, r3, #0x2 \n\t" // k0^rc - "eor.w r6, r2, #0xe \n\t" // k0^rc + "ldrb.w r6, [r1,#29] \n\t" // load RC + + "eor.w r7, r3, r6, lsr #4 \n\t" // k4^rc + "and.w r6, r6, #0xf \n\t" + "eor.w r6, r6, r2 \n\t" // k0^rc // round key store "str.w r6, [r0,#744] \n\t" @@ -1588,8 +1685,11 @@ void RunEncryptionKeyScheduleTK3(unsigned char *roundKeys, unsigned char *pRC) // round 31 // AC(c0 c1) - "eor.w r7, r3, #0x1 \n\t" // k0^rc - "eor.w r6, r2, #0xc \n\t" // k0^rc + "ldrb.w r6, [r1,#30] \n\t" // load RC + + "eor.w r7, r3, r6, lsr #4 \n\t" // k4^rc + "and.w r6, r6, #0xf \n\t" + "eor.w r6, r6, r2 \n\t" // k0^rc // round key store "str.w r6, [r0,#752] \n\t" @@ -1640,8 +1740,11 @@ void RunEncryptionKeyScheduleTK3(unsigned char *roundKeys, unsigned char *pRC) // round 32 // AC(c0 c1) - "eor.w r7, r3, #0x3 \n\t" // k0^rc - "eor.w r6, r2, #0x8 \n\t" // k0^rc + "ldrb.w r6, [r1,#31] \n\t" // load RC + + "eor.w r7, r3, r6, lsr #4 \n\t" // k4^rc + "and.w r6, r6, #0xf \n\t" + "eor.w r6, r6, r2 \n\t" // k0^rc // round key store "str.w r6, [r0,#760] \n\t" @@ -1692,8 +1795,11 @@ void RunEncryptionKeyScheduleTK3(unsigned char *roundKeys, unsigned char *pRC) // round 33 // AC(c0 c1) - "eor.w r7, r3, #0x3 \n\t" // k0^rc - "eor.w r6, r2, #0x1 \n\t" // k0^rc + "ldrb.w r6, [r1,#32] \n\t" // load RC + + "eor.w r7, r3, r6, lsr #4 \n\t" // k4^rc + "and.w r6, r6, #0xf \n\t" + "eor.w r6, r6, r2 \n\t" // k0^rc // round key store "str.w r6, [r0,#768] \n\t" @@ -1744,8 +1850,11 @@ void RunEncryptionKeyScheduleTK3(unsigned char *roundKeys, unsigned char *pRC) // round 34 // AC(c0 c1) - "eor.w r7, r3, #0x2 \n\t" // k0^rc - "eor.w r6, r2, #0x3 \n\t" // k0^rc + "ldrb.w r6, [r1,#33] \n\t" // load RC + + "eor.w r7, r3, r6, lsr #4 \n\t" // k4^rc + "and.w r6, r6, #0xf \n\t" + "eor.w r6, r6, r2 \n\t" // k0^rc // round key store "str.w r6, [r0,#776] \n\t" @@ -1796,11 +1905,15 @@ void RunEncryptionKeyScheduleTK3(unsigned char *roundKeys, unsigned char *pRC) // round 35 // AC(c0 c1) - "eor.w r6, r2, #0x6 \n\t" // k0^rc + "ldrb.w r6, [r1,#34] \n\t" // load RC + + "eor.w r7, r3, r6, lsr #4 \n\t" // k4^rc + "and.w r6, r6, #0xf \n\t" + "eor.w r6, r6, r2 \n\t" // k0^rc // round key store "str.w r6, [r0,#784] \n\t" - "str.w r3, [r0,#788] \n\t" + "str.w r7, [r0,#788] \n\t" // permutation // r2 (k3 k2 k1 k0) k13 k8 k15 k9 @@ -1847,11 +1960,15 @@ void RunEncryptionKeyScheduleTK3(unsigned char *roundKeys, unsigned char *pRC) // round 36 // AC(c0 c1) - "eor.w r6, r2, #0xd \n\t" // k0^rc + "ldrb.w r6, [r1,#35] \n\t" // load RC + + "eor.w r7, r3, r6, lsr #4 \n\t" // k4^rc + "and.w r6, r6, #0xf \n\t" + "eor.w r6, r6, r2 \n\t" // k0^rc // round key store "str.w r6, [r0,#792] \n\t" - "str.w r3, [r0,#796] \n\t" + "str.w r7, [r0,#796] \n\t" // permutation // r2 (k3 k2 k1 k0) k13 k8 k15 k9 @@ -1898,8 +2015,11 @@ void RunEncryptionKeyScheduleTK3(unsigned char *roundKeys, unsigned char *pRC) // round 37 // AC(c0 c1) - "eor.w r7, r3, #0x1 \n\t" // k0^rc - "eor.w r6, r2, #0xb \n\t" // k0^rc + "ldrb.w r6, [r1,#36] \n\t" // load RC + + "eor.w r7, r3, r6, lsr #4 \n\t" // k4^rc + "and.w r6, r6, #0xf \n\t" + "eor.w r6, r6, r2 \n\t" // k0^rc // round key store "str.w r6, [r0,#800] \n\t" @@ -1950,8 +2070,11 @@ void RunEncryptionKeyScheduleTK3(unsigned char *roundKeys, unsigned char *pRC) // round 38 // AC(c0 c1) - "eor.w r7, r3, #0x3 \n\t" // k0^rc - "eor.w r6, r2, #0x6 \n\t" // k0^rc + "ldrb.w r6, [r1,#37] \n\t" // load RC + + "eor.w r7, r3, r6, lsr #4 \n\t" // k4^rc + "and.w r6, r6, #0xf \n\t" + "eor.w r6, r6, r2 \n\t" // k0^rc // round key store "str.w r6, [r0,#808] \n\t" @@ -2002,8 +2125,11 @@ void RunEncryptionKeyScheduleTK3(unsigned char *roundKeys, unsigned char *pRC) // round 39 // AC(c0 c1) - "eor.w r7, r3, #0x2 \n\t" // k0^rc - "eor.w r6, r2, #0xd \n\t" // k0^rc + "ldrb.w r6, [r1,#38] \n\t" // load RC + + "eor.w r7, r3, r6, lsr #4 \n\t" // k4^rc + "and.w r6, r6, #0xf \n\t" + "eor.w r6, r6, r2 \n\t" // k0^rc // round key store "str.w r6, [r0,#816] \n\t" @@ -2054,8 +2180,11 @@ void RunEncryptionKeyScheduleTK3(unsigned char *roundKeys, unsigned char *pRC) // round 40 // AC(c0 c1) - "eor.w r7, r3, #0x1 \n\t" // k0^rc - "eor.w r6, r2, #0xa \n\t" // k0^rc + "ldrb.w r6, [r1,#39] \n\t" // load RC + + "eor.w r7, r3, r6, lsr #4 \n\t" // k4^rc + "and.w r6, r6, #0xf \n\t" + "eor.w r6, r6, r2 \n\t" // k0^rc // round key store "str.w r6, [r0,#824] \n\t" @@ -2106,8 +2235,11 @@ void RunEncryptionKeyScheduleTK3(unsigned char *roundKeys, unsigned char *pRC) // round 41 // AC(c0 c1) - "eor.w r7, r3, #0x3 \n\t" // k0^rc - "eor.w r6, r2, #0x4 \n\t" // k0^rc + "ldrb.w r6, [r1,#40] \n\t" // load RC + + "eor.w r7, r3, r6, lsr #4 \n\t" // k4^rc + "and.w r6, r6, #0xf \n\t" + "eor.w r6, r6, r2 \n\t" // k0^rc // round key store "str.w r6, [r0,#832] \n\t" @@ -2158,8 +2290,11 @@ void RunEncryptionKeyScheduleTK3(unsigned char *roundKeys, unsigned char *pRC) // round 42 // AC(c0 c1) - "eor.w r7, r3, #0x2 \n\t" // k0^rc - "eor.w r6, r2, #0x9 \n\t" // k0^rc + "ldrb.w r6, [r1,#41] \n\t" // load RC + + "eor.w r7, r3, r6, lsr #4 \n\t" // k4^rc + "and.w r6, r6, #0xf \n\t" + "eor.w r6, r6, r2 \n\t" // k0^rc // round key store "str.w r6, [r0,#840] \n\t" @@ -2210,8 +2345,11 @@ void RunEncryptionKeyScheduleTK3(unsigned char *roundKeys, unsigned char *pRC) // round 43 // AC(c0 c1) - "eor.w r7, r3, #0x1 \n\t" // k0^rc - "eor.w r6, r2, #0x2 \n\t" // k0^rc + "ldrb.w r6, [r1,#42] \n\t" // load RC + + "eor.w r7, r3, r6, lsr #4 \n\t" // k4^rc + "and.w r6, r6, #0xf \n\t" + "eor.w r6, r6, r2 \n\t" // k0^rc // round key store "str.w r6, [r0,#848] \n\t" @@ -2262,8 +2400,11 @@ void RunEncryptionKeyScheduleTK3(unsigned char *roundKeys, unsigned char *pRC) // round 44 // AC(c0 c1) - "eor.w r7, r3, #0x2 \n\t" // k0^rc - "eor.w r6, r2, #0x4 \n\t" // k0^rc + "ldrb.w r6, [r1,#43] \n\t" // load RC + + "eor.w r7, r3, r6, lsr #4 \n\t" // k4^rc + "and.w r6, r6, #0xf \n\t" + "eor.w r6, r6, r2 \n\t" // k0^rc // round key store "str.w r6, [r0,#856] \n\t" @@ -2314,11 +2455,15 @@ void RunEncryptionKeyScheduleTK3(unsigned char *roundKeys, unsigned char *pRC) // round 45 // AC(c0 c1) - "eor.w r6, r2, #0x8 \n\t" // k0^rc + "ldrb.w r6, [r1,#44] \n\t" // load RC + + "eor.w r7, r3, r6, lsr #4 \n\t" // k4^rc + "and.w r6, r6, #0xf \n\t" + "eor.w r6, r6, r2 \n\t" // k0^rc // round key store "str.w r6, [r0,#864] \n\t" - "str.w r3, [r0,#868] \n\t" + "str.w r7, [r0,#868] \n\t" // permutation // r2 (k3 k2 k1 k0) k13 k8 k15 k9 @@ -2365,8 +2510,11 @@ void RunEncryptionKeyScheduleTK3(unsigned char *roundKeys, unsigned char *pRC) // round 46 // AC(c0 c1) - "eor.w r7, r3, #0x1 \n\t" // k0^rc - "eor.w r6, r2, #0x1 \n\t" // k0^rc + "ldrb.w r6, [r1,#45] \n\t" // load RC + + "eor.w r7, r3, r6, lsr #4 \n\t" // k4^rc + "and.w r6, r6, #0xf \n\t" + "eor.w r6, r6, r2 \n\t" // k0^rc // round key store "str.w r6, [r0,#872] \n\t" @@ -2417,8 +2565,11 @@ void RunEncryptionKeyScheduleTK3(unsigned char *roundKeys, unsigned char *pRC) // round 47 // AC(c0 c1) - "eor.w r7, r3, #0x2 \n\t" // k0^rc - "eor.w r6, r2, #0x2 \n\t" // k0^rc + "ldrb.w r6, [r1,#46] \n\t" // load RC + + "eor.w r7, r3, r6, lsr #4 \n\t" // k4^rc + "and.w r6, r6, #0xf \n\t" + "eor.w r6, r6, r2 \n\t" // k0^rc // round key store "str.w r6, [r0,#880] \n\t" @@ -2469,11 +2620,15 @@ void RunEncryptionKeyScheduleTK3(unsigned char *roundKeys, unsigned char *pRC) // round 48 // AC(c0 c1) - "eor.w r6, r2, #0x4 \n\t" // k0^rc + "ldrb.w r6, [r1,#47] \n\t" // load RC + + "eor.w r7, r3, r6, lsr #4 \n\t" // k4^rc + "and.w r6, r6, #0xf \n\t" + "eor.w r6, r6, r2 \n\t" // k0^rc // round key store "str.w r6, [r0,#888] \n\t" - "str.w r3, [r0,#892] \n\t" + "str.w r7, [r0,#892] \n\t" // permutation // r2 (k3 k2 k1 k0) k13 k8 k15 k9 @@ -2520,11 +2675,15 @@ void RunEncryptionKeyScheduleTK3(unsigned char *roundKeys, unsigned char *pRC) // round 49 // AC(c0 c1) - "eor.w r6, r2, #0x9 \n\t" // k0^rc + "ldrb.w r6, [r1,#48] \n\t" // load RC + + "eor.w r7, r3, r6, lsr #4 \n\t" // k4^rc + "and.w r6, r6, #0xf \n\t" + "eor.w r6, r6, r2 \n\t" // k0^rc // round key store "str.w r6, [r0,#896] \n\t" - "str.w r3, [r0,#900] \n\t" + "str.w r7, [r0,#900] \n\t" // permutation // r2 (k3 k2 k1 k0) k13 k8 k15 k9 @@ -2571,8 +2730,11 @@ void RunEncryptionKeyScheduleTK3(unsigned char *roundKeys, unsigned char *pRC) // round 50 // AC(c0 c1) - "eor.w r7, r3, #0x1 \n\t" // k0^rc - "eor.w r6, r2, #0x3 \n\t" // k0^rc + "ldrb.w r6, [r1,#49] \n\t" // load RC + + "eor.w r7, r3, r6, lsr #4 \n\t" // k4^rc + "and.w r6, r6, #0xf \n\t" + "eor.w r6, r6, r2 \n\t" // k0^rc // round key store "str.w r6, [r0,#904] \n\t" @@ -2623,8 +2785,11 @@ void RunEncryptionKeyScheduleTK3(unsigned char *roundKeys, unsigned char *pRC) // round 51 // AC(c0 c1) - "eor.w r7, r3, #0x2 \n\t" // k0^rc - "eor.w r6, r2, #0x6 \n\t" // k0^rc + "ldrb.w r6, [r1,#50] \n\t" // load RC + + "eor.w r7, r3, r6, lsr #4 \n\t" // k4^rc + "and.w r6, r6, #0xf \n\t" + "eor.w r6, r6, r2 \n\t" // k0^rc // round key store "str.w r6, [r0,#912] \n\t" @@ -2675,11 +2840,15 @@ void RunEncryptionKeyScheduleTK3(unsigned char *roundKeys, unsigned char *pRC) // round 52 // AC(c0 c1) - "eor.w r6, r2, #0xc \n\t" // k0^rc + "ldrb.w r6, [r1,#51] \n\t" // load RC + + "eor.w r7, r3, r6, lsr #4 \n\t" // k4^rc + "and.w r6, r6, #0xf \n\t" + "eor.w r6, r6, r2 \n\t" // k0^rc // round key store "str.w r6, [r0,#920] \n\t" - "str.w r3, [r0,#924] \n\t" + "str.w r7, [r0,#924] \n\t" // permutation // r2 (k3 k2 k1 k0) k13 k8 k15 k9 @@ -2726,8 +2895,11 @@ void RunEncryptionKeyScheduleTK3(unsigned char *roundKeys, unsigned char *pRC) // round 53 // AC(c0 c1) - "eor.w r7, r3, #0x1 \n\t" // k0^rc - "eor.w r6, r2, #0x9 \n\t" // k0^rc + "ldrb.w r6, [r1,#52] \n\t" // load RC + + "eor.w r7, r3, r6, lsr #4 \n\t" // k4^rc + "and.w r6, r6, #0xf \n\t" + "eor.w r6, r6, r2 \n\t" // k0^rc // round key store "str.w r6, [r0,#928] \n\t" @@ -2778,8 +2950,11 @@ void RunEncryptionKeyScheduleTK3(unsigned char *roundKeys, unsigned char *pRC) // round 54 // AC(c0 c1) - "eor.w r7, r3, #0x3 \n\t" // k0^rc - "eor.w r6, r2, #0x2 \n\t" // k0^rc + "ldrb.w r6, [r1,#53] \n\t" // load RC + + "eor.w r7, r3, r6, lsr #4 \n\t" // k4^rc + "and.w r6, r6, #0xf \n\t" + "eor.w r6, r6, r2 \n\t" // k0^rc // round key store "str.w r6, [r0,#936] \n\t" @@ -2830,8 +3005,12 @@ void RunEncryptionKeyScheduleTK3(unsigned char *roundKeys, unsigned char *pRC) // round 55 // AC(c0 c1) - "eor.w r7, r3, #0x2 \n\t" // k0^rc - "eor.w r6, r2, #0x5 \n\t" // k0^rc + "ldrb.w r6, [r1,#54] \n\t" // load RC + + "eor.w r7, r3, r6, lsr #4 \n\t" // k4^rc + "and.w r6, r6, #0xf \n\t" + "eor.w r6, r6, r2 \n\t" // k0^rc + // round key store "str.w r6, [r0,#944] \n\t" "str.w r7, [r0,#948] \n\t" @@ -2881,11 +3060,15 @@ void RunEncryptionKeyScheduleTK3(unsigned char *roundKeys, unsigned char *pRC) // round 56 // AC(c0 c1) - "eor.w r6, r2, #0xa \n\t" // k0^rc + "ldrb.w r6, [r1,#55] \n\t" // load RC + + "eor.w r7, r3, r6, lsr #4 \n\t" // k4^rc + "and.w r6, r6, #0xf \n\t" + "eor.w r6, r6, r2 \n\t" // k0^rc // round key store "str.w r6, [r0,#952] \n\t" - "str.w r3, [r0,#956] \n\t" + "str.w r7, [r0,#956] \n\t" // permutation