diff --git a/knot/Implementations/crypto_aead/knot128v1/armcortexm_2/api.h b/knot/Implementations/crypto_aead/knot128v1/armcortexm_2/api.h index 2c52a6d..934904a 100644 --- a/knot/Implementations/crypto_aead/knot128v1/armcortexm_2/api.h +++ b/knot/Implementations/crypto_aead/knot128v1/armcortexm_2/api.h @@ -1,4 +1,3 @@ -//k=n=tag=128 b=256 r=64 c=192 #define CRYPTO_KEYBYTES 16 // #define CRYPTO_NSECBYTES 0 #define CRYPTO_NPUBBYTES 16 diff --git a/knot/Implementations/crypto_aead/knot128v1/armcortexm_2/auxFormat.c b/knot/Implementations/crypto_aead/knot128v1/armcortexm_2/auxFormat.c new file mode 100644 index 0000000..33caf71 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot128v1/armcortexm_2/auxFormat.c @@ -0,0 +1,112 @@ +#include"auxFormat.h" + +//#define PRINTFormatToU8 +#define PRINTU8 +unsigned char constant6Format[52] = { +/*constant6_aead_128v1:*/ +0x01, 0x10, 0x02, 0x20, 0x04, 0x41, 0x11, 0x12, 0x22, 0x24, 0x45, 0x50, 0x03, + 0x30, 0x06, 0x61, 0x15, 0x53, 0x33, 0x36, 0x67, 0x74, 0x46, 0x60, 0x05, + 0x51, 0x13, 0x32, 0x26, 0x65, 0x54, 0x42, 0x21, 0x14, 0x43, 0x31, 0x16, + 0x63, 0x35, 0x57, 0x72, 0x27, 0x75, 0x56, 0x62, 0x25, 0x55, 0x52, 0x23, + 0x34, 0x47, 0x70, }; +void P256(unsigned int *s, unsigned char *rc, unsigned char rounds) { + unsigned int reg1, reg2; + asm volatile ( + "enc_loop: \n\t" + "/*add round const*/ \n\t" + "ldrb %[reg1], [%[rc]] \n\t" + "and %[reg2], %[reg1], 0xf \n\t" + "eors %[S_0], %[S_0], %[reg1],LSR #4 \n\t" /*s[0] ^= constant6Format[lunNum]>>4;*/\ + "eors %[S_1], %[S_1], %[reg2] \n\t" /*s[1] ^= constant6Format[lunNum] & 0x0f;*/\ + "/*sbox first column*/ \n\t" + "mvns %[S_0], %[S_0] \n\t" + "ands %[reg1], %[S_2], %[S_0] \n\t" + "eors %[reg1], %[S_4], %[reg1] \n\t" + "orrs %[S_4], %[S_2], %[S_4] \n\t" + "eors %[S_0], %[S_6], %[S_0] \n\t" + "eors %[S_4], %[S_4], %[S_0] \n\t" + "eors %[reg2], %[S_2], %[S_6] \n\t" + "eors %[S_6], %[S_6], %[reg1] \n\t" + "ands %[S_0], %[reg1],%[S_0] \n\t" + "eors %[S_0], %[reg2],%[S_0] \n\t" + "ands %[S_2], %[S_4], %[reg2] \n\t" + "eors %[S_2], %[reg1], %[S_2] \n\t" + "/*sbox first column*/ \n\t" + "mvns %[S_1], %[S_1] \n\t" + "ands %[reg1], %[S_3], %[S_1] \n\t" + "eors %[reg1], %[S_5], %[reg1] \n\t" + "orrs %[S_5], %[S_3], %[S_5] \n\t" + "eors %[S_1], %[S_7], %[S_1] \n\t" + "eors %[S_5], %[S_5], %[S_1] \n\t" + "eors %[reg2], %[S_3], %[S_7] \n\t" + "eors %[S_7], %[S_7], %[reg1] \n\t" + "ands %[S_1], %[reg1],%[S_1] \n\t" + "eors %[S_1], %[reg2],%[S_1] \n\t" + "ands %[S_3], %[S_5], %[reg2] \n\t" + "eors %[S_3], %[reg1], %[S_3] \n\t" + "/*rotate shift left 1 bit*/ \n\t" + "mov %[reg1], %[S_3] \n\t" + "mov %[S_3], %[S_2] , ROR #31 \n\t" + "mov %[S_2], %[reg1] \n\t" + "/*rotate shift left 8 bits*/ \n\t" + "mov %[S_4], %[S_4] , ROR #28 \n\t" + "mov %[S_5], %[S_5] , ROR #28 \n\t" + "/*rotate shift left 25 bits*/ \n\t" + "mov %[reg1], %[S_6] \n\t" + "mov %[S_6], %[S_7] , ROR #20 \n\t" + "mov %[S_7], %[reg1] , ROR #19 \n\t" + "/*loop control*/ \n\t" + "adds %[rc], %[rc], #1 \n\t" + "subs %[ro], %[ro], #1 \n\t" + "bne enc_loop \n\t" + /* ----------------------------- */ + : /* output variables - including inputs that are changed */ + [ro] "+r" (rounds),[reg1] "=r" (reg1), [reg2] "=r" (reg2), [rc] "+r" (rc), + [S_0] "+r" (s[0]), [S_2] "+r" (s[2]), [S_4] "+r" (s[4]), [S_6] "+r" (s[6]) , + [S_1] "+r" (s[1]), [S_3] "+r" (s[3]), [S_5] "+r" (s[5]), [S_7] "+r" (s[7]) + : /* input variables */ + : /* clobber registers for temporary values */ + ); + +} + +void packFormat(u32 * out, const u8 * in) { + u32 t0 = U32BIG(((u32* )in)[0]); + u32 t1 = U32BIG(((u32* )in)[1]); + u32 r0, r1; + r0 = (t0 ^ (t0 >> 1)) & 0x22222222, t0 ^= r0 ^ (r0 << 1); + r0 = (t0 ^ (t0 >> 2)) & 0x0C0C0C0C, t0 ^= r0 ^ (r0 << 2); + r0 = (t0 ^ (t0 >> 4)) & 0x00F000F0, t0 ^= r0 ^ (r0 << 4); + r0 = (t0 ^ (t0 >> 8)) & 0x0000FF00, t0 ^= r0 ^ (r0 << 8); //t0 odd even + r1 = (t1 ^ (t1 >> 1)) & 0x22222222, t1 ^= r1 ^ (r1 << 1); + r1 = (t1 ^ (t1 >> 2)) & 0x0C0C0C0C, t1 ^= r1 ^ (r1 << 2); + r1 = (t1 ^ (t1 >> 4)) & 0x00F000F0, t1 ^= r1 ^ (r1 << 4); + r1 = (t1 ^ (t1 >> 8)) & 0x0000FF00, t1 ^= r1 ^ (r1 << 8); //t1 odd even + out[0] = (t1 & 0xFFFF0000) | (t0 >> 16); // t1.odd|t0.odd + out[1] = (t1 << 16) | (t0 & 0x0000FFFF); // t1.even|t0.even +} +void unpackFormat(u8 * out, u32 * in) { + u32 t[2] = { 0 }; + t[1] = (in[0] & 0xFFFF0000) | (in[1] >> 16); + t[0] = (in[1] & 0x0000FFFF) | (in[0] << 16); + u32 r0, r1; + r0 = (t[0] ^ (t[0] >> 8)) & 0x0000FF00, t[0] ^= r0 ^ (r0 << 8); + r0 = (t[0] ^ (t[0] >> 4)) & 0x00F000F0, t[0] ^= r0 ^ (r0 << 4); + r0 = (t[0] ^ (t[0] >> 2)) & 0x0C0C0C0C, t[0] ^= r0 ^ (r0 << 2); + r0 = (t[0] ^ (t[0] >> 1)) & 0x22222222, t[0] ^= r0 ^ (r0 << 1); + r1 = (t[1] ^ (t[1] >> 8)) & 0x0000FF00, t[1] ^= r1 ^ (r1 << 8); + r1 = (t[1] ^ (t[1] >> 4)) & 0x00F000F0, t[1] ^= r1 ^ (r1 << 4); + r1 = (t[1] ^ (t[1] >> 2)) & 0x0C0C0C0C, t[1] ^= r1 ^ (r1 << 2); + r1 = (t[1] ^ (t[1] >> 1)) & 0x22222222, t[1] ^= r1 ^ (r1 << 1); + memcpy(out, t, 8 * sizeof(unsigned char)); +} + + +void getU32Format(u32 *out, const u8* in) { + u32 r0, lo = U32BIG(((u32* )in)[0]); + r0 = (lo ^ (lo >> 1)) & 0x22222222, lo ^= r0 ^ (r0 << 1); + r0 = (lo ^ (lo >> 2)) & 0x0C0C0C0C, lo ^= r0 ^ (r0 << 2); + r0 = (lo ^ (lo >> 4)) & 0x00F000F0, lo ^= r0 ^ (r0 << 4); + r0 = (lo ^ (lo >> 8)) & 0x0000FF00, lo ^= r0 ^ (r0 << 8); + *out = lo; +} diff --git a/knot/Implementations/crypto_aead/knot128v1/armcortexm_2/auxFormat.h b/knot/Implementations/crypto_aead/knot128v1/armcortexm_2/auxFormat.h index a5c1b7e..6e1068f 100644 --- a/knot/Implementations/crypto_aead/knot128v1/armcortexm_2/auxFormat.h +++ b/knot/Implementations/crypto_aead/knot128v1/armcortexm_2/auxFormat.h @@ -1,75 +1,26 @@ -#include -#include -#include -#include +#include #include"crypto_aead.h" #include"api.h" +#include"stdio.h" #include #define U32BIG(x) (x) - #define ARR_SIZE(a) (sizeof((a))/sizeof((a[0]))) #define LOTR32(x,n) (((x)<<(n))|((x)>>(32-(n)))) - -#define sbox(a, b, c, d, e, f, g, h) \ -{ \ - t1 = ~a; t2 = b & t1;t3 = c ^ t2; h = d ^ t3; t5 = b | c; t6 = d ^ t1; g = t5 ^ t6; t8 = b ^ d; t9 = t3 & t6; e = t8 ^ t9; t11 = g & t8; f = t3 ^ t11; \ -} - typedef unsigned char u8; typedef unsigned int u32; typedef unsigned long long u64; +unsigned char constant6Format[52]; +unsigned char constant7Format[68]; + +#define RATE (64 / 8) + +#define PR0_ROUNDS 52 +#define PR_ROUNDS 28 +#define PRF_ROUNDS 32 -#define packFormat(out,in) {\ -t1 = U32BIG(((u32*)in)[0]); \ -t2 = U32BIG(((u32*)in)[1]); \ -t3 = (t1 ^ (t1 >> 1)) & 0x22222222, t1 ^= t3 ^ (t3 << 1); \ -t3 = (t1 ^ (t1 >> 2)) & 0x0C0C0C0C, t1 ^= t3 ^ (t3 << 2); \ -t3 = (t1 ^ (t1 >> 4)) & 0x00F000F0, t1 ^= t3 ^ (t3 << 4); \ -t3 = (t1 ^ (t1 >> 8)) & 0x0000FF00, t1 ^= t3 ^ (t3 << 8); \ -t5 = (t2 ^ (t2 >> 1)) & 0x22222222, t2 ^= t5 ^ (t5 << 1); \ -t5 = (t2 ^ (t2 >> 2)) & 0x0C0C0C0C, t2 ^= t5 ^ (t5 << 2); \ -t5 = (t2 ^ (t2 >> 4)) & 0x00F000F0, t2 ^= t5 ^ (t5 << 4); \ -t5 = (t2 ^ (t2 >> 8)) & 0x0000FF00, t2 ^= t5 ^ (t5 << 8); \ -out[0] = (t2 & 0xFFFF0000) | (t1 >> 16); \ -out[1] = (t2 << 16) | (t1 & 0x0000FFFF); \ -} -#define unpackFormat(out, in) {\ - t2 = (in[0] & 0xFFFF0000) | (in[1] >> 16); \ - t1 = (in[1] & 0x0000FFFF) | (in[0] << 16); \ - t3 = (t1 ^ (t1 >> 8)) & 0x0000FF00, t1 ^= t3 ^ (t3 << 8); \ - t3 = (t1 ^ (t1 >> 4)) & 0x00F000F0, t1 ^= t3 ^ (t3 << 4); \ - t3 = (t1 ^ (t1 >> 2)) & 0x0C0C0C0C, t1 ^= t3 ^ (t3 << 2); \ - t3 = (t1 ^ (t1 >> 1)) & 0x22222222, t1 ^= t3 ^ (t3 << 1); \ - t5 = (t2 ^ (t2 >> 8)) & 0x0000FF00, t2 ^= t5 ^ (t5 << 8); \ - t5 = (t2 ^ (t2 >> 4)) & 0x00F000F0, t2 ^= t5 ^ (t5 << 4); \ - t5 = (t2 ^ (t2 >> 2)) & 0x0C0C0C0C, t2 ^= t5 ^ (t5 << 2); \ - t5 = (t2 ^ (t2 >> 1)) & 0x22222222, t2 ^= t5 ^ (t5 << 1); \ - *((u64*)out) = ((u64)t2 << 32 | t1); \ -} -#define getU32Format(out, in) {\ - t1, t2 = U32BIG(((u32*)in)[0]); \ - t1 = (t2 ^ (t2 >> 1)) & 0x22222222, t2 ^= t1 ^ (t1 << 1); \ - t1 = (t2 ^ (t2 >> 2)) & 0x0C0C0C0C, t2 ^= t1 ^ (t1 << 2); \ - t1 = (t2 ^ (t2 >> 4)) & 0x00F000F0, t2 ^= t1 ^ (t1 << 4); \ - t1 = (t2 ^ (t2 >> 8)) & 0x0000FF00, t2 ^= t1 ^ (t1 << 8); \ - *out = t2; \ -} -#define ROUND256( constant6Format,lunNum) {\ - s[0] ^= constant6Format[lunNum]>> 4;\ - s[1] ^= constant6Format[lunNum]& 0x0f;\ - sbox(s[0], s[2], s[4], s[6], s_temp[0], s_temp[2], s_temp[4], s_temp[6]);\ - sbox(s[1], s[3], s[5], s[7], s_temp[1], s_temp[3], s_temp[5], s_temp[7]);\ - s[0] = s_temp[0];\ - s[1] = s_temp[1];\ - s[2] = s_temp[3];\ - s[3] = LOTR32(s_temp[2], 1);\ - s[4] = LOTR32(s_temp[4], 4);\ - s[5] = LOTR32(s_temp[5], 4);\ - s[6] = LOTR32(s_temp[7], 12);\ - s[7] = LOTR32(s_temp[6], 13);\ -} -void printfFormat(char name[], u32 * in); +void packFormat(u32 * out, const u8 * in); +void unpackFormat(u8 * out, u32 * in); void printU8(char name[], u8 var[], long len, int offset); diff --git a/knot/Implementations/crypto_aead/knot128v1/armcortexm_2/crypto_aead.h b/knot/Implementations/crypto_aead/knot128v1/armcortexm_2/crypto_aead.h index 862d176..10ecefb 100644 --- a/knot/Implementations/crypto_aead/knot128v1/armcortexm_2/crypto_aead.h +++ b/knot/Implementations/crypto_aead/knot128v1/armcortexm_2/crypto_aead.h @@ -1,18 +1,10 @@ +int crypto_aead_encrypt(unsigned char *c, unsigned long long *clen, + const unsigned char *m, unsigned long long mlen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *nsec, const unsigned char *npub, + const unsigned char *k); -int crypto_aead_encrypt( - unsigned char *c, unsigned long long *clen, - const unsigned char *m, unsigned long long mlen, - const unsigned char *ad, unsigned long long adlen, - const unsigned char *nsec, - const unsigned char *npub, - const unsigned char *k -); - -int crypto_aead_decrypt( - unsigned char *m, unsigned long long *mlen, - unsigned char *nsec, - const unsigned char *c, unsigned long long clen, - const unsigned char *ad, unsigned long long adlen, - const unsigned char *npub, - const unsigned char *k -); +int crypto_aead_decrypt(unsigned char *m, unsigned long long *mlen, + unsigned char *nsec, const unsigned char *c, unsigned long long clen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *npub, const unsigned char *k); diff --git a/knot/Implementations/crypto_aead/knot128v1/armcortexm_2/encrypt.c b/knot/Implementations/crypto_aead/knot128v1/armcortexm_2/encrypt.c index 4b84924..cee3160 100644 --- a/knot/Implementations/crypto_aead/knot128v1/armcortexm_2/encrypt.c +++ b/knot/Implementations/crypto_aead/knot128v1/armcortexm_2/encrypt.c @@ -1,271 +1,71 @@ - #include"auxFormat.h" -#define RATE (64 / 8) - -#define PR0_ROUNDS 52 -#define PR_ROUNDS 28 -#define PRF_ROUNDS 32 -unsigned char constant6Format[63] = { - /*constant6_aead_128v1:*/ -0x1, -0x10, -0x2, -0x20, -0x4, -0x41, -0x11, -0x12, -0x22, -0x24, -0x45, -0x50, -0x3, -0x30, -0x6, -0x61, -0x15, -0x53, -0x33, -0x36, -0x67, -0x74, -0x46, -0x60, -0x5, -0x51, -0x13, -0x32, -0x26, -0x65, -0x54, -0x42, -0x21, -0x14, -0x43, -0x31, -0x16, -0x63, -0x35, -0x57, -0x72, -0x27, -0x75, -0x56, -0x62, -0x25, -0x55, -0x52, -0x23, -0x34, -0x47, -0x70, -0x7, -0x71, -0x17, -0x73, -0x37, -0x77, -0x76, -0x66, -0x64, -0x44, -0x40, - -}; - - - - -static void permutation256(unsigned int *in, int rounds, unsigned char *rc) { - uint32_t w0, w1, w2, w3, w4, w5, w6, w7; - uint32_t s0, s1, s2; - uint32_t one = 0x1; - uint32_t i=0; - uint32_t ff = 0xff; - __asm volatile( - "ldr w0, [in] \n\t" - "ldr w4, [in, #4] \n\t" - "ldr w1, [in, #8] \n\t" - "ldr w5, [in, #12] \n\t" - "ldr w2, [in, #16] \n\t" - "ldr w6, [in, #20] \n\t" - "ldr w3, [in, #24] \n\t" - "ldr w7, [in, #28] \n\t" - "enc_loop: \n\t" - "/*add round const s0 s1*/ \n\t" - "ldrb s0, [rc] \n\t" - "LSR s1, s0, #4 \n\t" - "and s0, s0, 0xf \n\t" - "eors w4, w4, s0 \n\t" - "eors w0, w0, s1 \n\t" - "/*sbox first column*/ \n\t" - "mvns w0, w0 \n\t" - "ands s0, w1, w0 \n\t" - "eors s0, w2, s0 \n\t" - "orrs w2, w1, w2 \n\t" - "eors w0, w3, w0 \n\t" - "eors w2, w2, w0 \n\t" - "eors s1, w1, w3 \n\t" - "eors w3, w3, s0 \n\t" - "ands w0, s0, w0 \n\t" - "eors w0, s1, w0 \n\t" - "ands w1, w2, s1 \n\t" - "eors w1, s0, w1 \n\t" - "/*sbox second column*/ \n\t" - "mvns w4, w4 \n\t" - "ands s0, w5, w4 \n\t" - "eors s0, w6, s0 \n\t" - "orrs w6, w5, w6 \n\t" - "eors w4, w7, w4 \n\t" - "eors w6, w6, w4 \n\t" - "eors s1, w5, w7 \n\t" - "eors w7, w7, s0 \n\t" - "ands w4, s0, w4 \n\t" - "eors w4, s1, w4 \n\t" - "ands w5, w6, s1 \n\t" - "eors w5, s0, w5 \n\t" - "/*rotate shift left 1 bit*/ \n\t" - "mov s0, w5 \n\t" - "ROR w5, w1, #31 \n\t" - "mov w1, s0 \n\t" - "/*rotate shift left 8 bits*/ \n\t" - "ROR w2, w2, #28 \n\t" - "ROR w6, w6, #28 \n\t" - "/*rotate shift left 25 bits*/ \n\t" - "mov s0, w3 \n\t" - "ROR w3, w7, #20 \n\t" - "ROR w7, s0, #19 \n\t" - "/*loop control*/ \n\t" - "adds rc, rc, #1 \n\t" - "subs rounds, rounds, #1 \n\t" - "bne enc_loop \n\t" - "str w0, [in] \n\t" - "str w4, [in, #4] \n\t" - "str w1, [in, #8] \n\t" - "str w5, [in, #12] \n\t" - "str w2, [in, #16] \n\t" - "str w6, [in, #20] \n\t" - "str w3, [in, #24] \n\t" - "str w7, [in, #28] \n\t" - ); -} - - -int crypto_aead_encrypt(unsigned char *c, unsigned long long *clen, - const unsigned char *m, unsigned long long mlen, - const unsigned char *ad, unsigned long long adlen, - const unsigned char *nsec, const unsigned char *npub, - const unsigned char *k) { - unsigned int i, j; - u32 s[8] = { 0 }; +void ProcessAssocData(unsigned int *s, const u8* ad, unsigned long long adlen) { u32 dataFormat[2] = { 0 }; u8 tempData[8]; - u32 s_temp[8] = { 0 }; - u32 t1, t2, t3, t5, t6, t8, t9, t11; - *clen = mlen + CRYPTO_ABYTES; - //initialization - packFormat(s, npub); - packFormat((s + 2), (npub + 8)); - packFormat((s + 4), k); - packFormat((s + 6), (k + 8)); - permutation256(s,PR0_ROUNDS,constant6Format); - // process associated data if (adlen) { while (adlen >= RATE) { packFormat(dataFormat, ad); s[0] ^= dataFormat[0]; s[1] ^= dataFormat[1]; - permutation256(s,PR_ROUNDS,constant6Format); + P256(s, constant6Format, PR_ROUNDS); adlen -= RATE; ad += RATE; } memset(tempData, 0, sizeof(tempData)); -memcpy(tempData, ad, adlen * sizeof(unsigned char)); -tempData[adlen] = 0x01; + memcpy(tempData, ad, adlen * sizeof(unsigned char)); + tempData[adlen] = 0x01; packFormat(dataFormat, tempData); s[0] ^= dataFormat[0]; s[1] ^= dataFormat[1]; - permutation256(s,PR_ROUNDS,constant6Format); + P256(s, constant6Format, PR_ROUNDS); } s[6] ^= 0x80000000; +} +void ProcessPlaintext(unsigned int *s, const u8* m, unsigned long long mlen, + unsigned char *c) { + u32 dataFormat[2] = { 0 }; + u8 tempData[8] = { 0 }; if (mlen) { while (mlen >= RATE) { packFormat(dataFormat, m); s[0] ^= dataFormat[0]; s[1] ^= dataFormat[1]; unpackFormat(c, s); - permutation256(s,PR_ROUNDS,constant6Format); + P256(s, constant6Format, PR_ROUNDS); mlen -= RATE; m += RATE; c += RATE; } memset(tempData, 0, sizeof(tempData)); -memcpy(tempData, m, mlen * sizeof(unsigned char)); - -tempData[mlen]= 0x01; + memcpy(tempData, m, mlen * sizeof(unsigned char)); + tempData[mlen] = 0x01; packFormat(dataFormat, tempData); s[0] ^= dataFormat[0]; s[1] ^= dataFormat[1]; unpackFormat(tempData, s); memcpy(c, tempData, mlen * sizeof(unsigned char)); - c +=mlen; + //c+=mlen; } - // finalization - permutation256(s,PRF_ROUNDS,constant6Format); +} +void Finalize_GenerateTag(unsigned int *s, unsigned char *c) { + P256(s, constant6Format, PRF_ROUNDS); // return tag - unpackFormat(tempData, s); - memcpy(c, tempData, sizeof(tempData)); - unpackFormat(tempData,(s + 2)); - memcpy(c+8, tempData, sizeof(tempData)); -// unpackFormat((c), s); -// unpackFormat((c+8),(s + 2)); - return 0; + unpackFormat(c, s); + unpackFormat((c + 8), (s + 2)); } - -int crypto_aead_decrypt(unsigned char *m, unsigned long long *mlen, - unsigned char *nsec, const unsigned char *c, unsigned long long clen, - const unsigned char *ad, unsigned long long adlen, - const unsigned char *npub, const unsigned char *k) { - u8 i, j; - // initialization - u32 s[8] = { 0 }; - u32 dataFormat[4] = { 0 }; - u32 dataFormat_1[2] = { 0 }; - u8 tempU8[32] = { 0 }; - u8 tempData[8]; - u32 s_temp[8] = { 0 }; - u32 t1, t2, t3, t5, t6, t8, t9, t11; - *mlen = clen - CRYPTO_ABYTES; - if (clen < CRYPTO_ABYTES) - return -1; - //initialization +void Initialize(unsigned int *s, const unsigned char *npub, const unsigned char *k) { packFormat(s, npub); - packFormat((s + 2), (npub + 8)); - packFormat((s + 4), k); - packFormat((s + 6), (k + 8)); - permutation256(s,PR0_ROUNDS,constant6Format); - // process associated data - if (adlen) { - while (adlen >= RATE) { - packFormat(dataFormat, ad); - s[0] ^= dataFormat[0]; - s[1] ^= dataFormat[1]; - permutation256(s,PR_ROUNDS,constant6Format); - adlen -= RATE; - ad += RATE; - } - memset(tempData, 0, sizeof(tempData)); - memcpy(tempData, ad, adlen * sizeof(unsigned char)); - tempData[adlen] = 0x01; - packFormat(dataFormat, tempData); - s[0] ^= dataFormat[0]; - s[1] ^= dataFormat[1]; - permutation256(s,PR_ROUNDS,constant6Format); - } - s[6] ^= 0x80000000; - // process c - clen = clen - CRYPTO_KEYBYTES; + packFormat(s + 2, npub + 8); + packFormat(s + 4, k); + packFormat(s + 6, k + 8); + P256(s, constant6Format, PR0_ROUNDS); +} +void ProcessCiphertext(unsigned int *s, unsigned char *m, const unsigned char *c, + unsigned long long clen) { + u8 tempU8[32] = { 0 }, i; + u32 dataFormat[2] = { 0 }; + u32 dataFormat_1[2] = { 0 }; if (clen) { while (clen >= RATE) { packFormat(dataFormat, c); @@ -274,27 +74,65 @@ int crypto_aead_decrypt(unsigned char *m, unsigned long long *mlen, unpackFormat(m, dataFormat_1); s[0] = dataFormat[0]; s[1] = dataFormat[1]; - permutation256(s,PR_ROUNDS,constant6Format); + P256(s, constant6Format, PR_ROUNDS); clen -= RATE; m += RATE; c += RATE; } unpackFormat(tempU8, s); - for (i = 0; i < clen; ++i, ++m, ++c) - { - *m = tempU8[i]^ *c; + for (i = 0; i < clen; ++i, ++m, ++c) { + *m = tempU8[i] ^ *c; tempU8[i] = *c; } tempU8[i] ^= 0x01; - packFormat(s, tempU8); + packFormat(s, tempU8); } - // finalization - permutation256(s,PRF_ROUNDS,constant6Format); +} +int Finalize_VerifyTag(unsigned int *s, const unsigned char *c, unsigned char *m, + unsigned long long *mlen) { + u8 tempU8[16] = { 0 }; + P256(s, constant6Format, PRF_ROUNDS); // return tag - packFormat(dataFormat, c); - packFormat((dataFormat + 2), (c +8)); - if (dataFormat[0] != s[0] || dataFormat[1] != s[1] || dataFormat[2] != s[2] || dataFormat[3] != s[3]) { + unpackFormat(tempU8, s); + unpackFormat((tempU8 + 8), (s + 2)); + if (memcmp((void*) tempU8, (void*) (c), CRYPTO_ABYTES)) { + memset(m, 0, sizeof(unsigned char) * (*mlen)); + *mlen = 0; return -1; } return 0; } + +int crypto_aead_encrypt(unsigned char *c, unsigned long long *clen, + const unsigned char *m, unsigned long long mlen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *nsec, const unsigned char *npub, + const unsigned char *k) { + unsigned int s[8] = { 0 }; + *clen = mlen + CRYPTO_ABYTES; + //initialization + Initialize(s, npub, k); + // process associated data + ProcessAssocData(s, ad, adlen); + ProcessPlaintext(s, m, mlen, c); + // finalization + Finalize_GenerateTag(s, c + mlen); + return 0; +} +int crypto_aead_decrypt(unsigned char *m, unsigned long long *mlen, + unsigned char *nsec, const unsigned char *c, unsigned long long clen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *npub, const unsigned char *k) { + unsigned int s[8] = { 0 }; + *mlen = clen - CRYPTO_ABYTES; + if (clen < CRYPTO_ABYTES) + return -1; + //initialization + Initialize(s, npub, k); + // process associated data + ProcessAssocData(s, ad, adlen); + // process cipher + ProcessCiphertext(s, m, c, clen - CRYPTO_KEYBYTES); + // finalization + return Finalize_VerifyTag(s, c + clen - CRYPTO_KEYBYTES, m, mlen); +} diff --git a/knot/Implementations/crypto_aead/knot128v1/armcortexm_4/api.h b/knot/Implementations/crypto_aead/knot128v1/armcortexm_4/api.h new file mode 100644 index 0000000..c9df2a8 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot128v1/armcortexm_4/api.h @@ -0,0 +1,6 @@ +#define CRYPTO_KEYBYTES 16 // +#define CRYPTO_NSECBYTES 0 +#define CRYPTO_NPUBBYTES 16 +#define CRYPTO_ABYTES 16 +#define CRYPTO_NOOVERLAP 1 + diff --git a/knot/Implementations/crypto_aead/knot128v1/armcortexm_4/auxFormat.c b/knot/Implementations/crypto_aead/knot128v1/armcortexm_4/auxFormat.c new file mode 100644 index 0000000..d2d2e03 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot128v1/armcortexm_4/auxFormat.c @@ -0,0 +1,70 @@ +#include"auxFormat.h" + +//#define PRINTFormatToU8 +#define PRINTU8 +unsigned char constant6Format[52] = { +/*constant6_aead_128v1:*/ +0x01, 0x10, 0x02, 0x20, 0x04, 0x41, 0x11, 0x12, 0x22, 0x24, 0x45, 0x50, 0x03, + 0x30, 0x06, 0x61, 0x15, 0x53, 0x33, 0x36, 0x67, 0x74, 0x46, 0x60, 0x05, + 0x51, 0x13, 0x32, 0x26, 0x65, 0x54, 0x42, 0x21, 0x14, 0x43, 0x31, 0x16, + 0x63, 0x35, 0x57, 0x72, 0x27, 0x75, 0x56, 0x62, 0x25, 0x55, 0x52, 0x23, + 0x34, 0x47, 0x70, }; + +void P256(unsigned int *s, unsigned char *round, unsigned char lunNum) { + + u32 s_temp[8] = { 0 }; + u32 t1, t2, t3, t5, t6, t8, t9, t11; + unsigned char i; + for (i = 0; i < lunNum; i++) { + s[0] ^= round[i] >> 4; + s[1] ^= round[i] & 0x0f; + sbox(s[0], s[2], s[4], s[6], s_temp[2], s_temp[4], s_temp[6]); + sbox(s[1], s[3], s[5], s[7], s[2], s_temp[5], s_temp[7]); + s[3] = LOTR32(s_temp[2], 1); + s[4] = LOTR32(s_temp[4], 4); + s[5] = LOTR32(s_temp[5], 4); + s[6] = LOTR32(s_temp[7], 12); + s[7] = LOTR32(s_temp[6], 13); + } +} +void packFormat(u32 * out, const u8 * in) { + u32 t0 = U32BIG(((u32* )in)[0]); + u32 t1 = U32BIG(((u32* )in)[1]); + u32 r0, r1; + r0 = (t0 ^ (t0 >> 1)) & 0x22222222, t0 ^= r0 ^ (r0 << 1); + r0 = (t0 ^ (t0 >> 2)) & 0x0C0C0C0C, t0 ^= r0 ^ (r0 << 2); + r0 = (t0 ^ (t0 >> 4)) & 0x00F000F0, t0 ^= r0 ^ (r0 << 4); + r0 = (t0 ^ (t0 >> 8)) & 0x0000FF00, t0 ^= r0 ^ (r0 << 8); //t0 odd even + r1 = (t1 ^ (t1 >> 1)) & 0x22222222, t1 ^= r1 ^ (r1 << 1); + r1 = (t1 ^ (t1 >> 2)) & 0x0C0C0C0C, t1 ^= r1 ^ (r1 << 2); + r1 = (t1 ^ (t1 >> 4)) & 0x00F000F0, t1 ^= r1 ^ (r1 << 4); + r1 = (t1 ^ (t1 >> 8)) & 0x0000FF00, t1 ^= r1 ^ (r1 << 8); //t1 odd even + out[0] = (t1 & 0xFFFF0000) | (t0 >> 16); // t1.odd|t0.odd + out[1] = (t1 << 16) | (t0 & 0x0000FFFF); // t1.even|t0.even +} +void unpackFormat(u8 * out, u32 * in) { + u32 t[2] = { 0 }; + t[1] = (in[0] & 0xFFFF0000) | (in[1] >> 16); + t[0] = (in[1] & 0x0000FFFF) | (in[0] << 16); + u32 r0, r1; + r0 = (t[0] ^ (t[0] >> 8)) & 0x0000FF00, t[0] ^= r0 ^ (r0 << 8); + r0 = (t[0] ^ (t[0] >> 4)) & 0x00F000F0, t[0] ^= r0 ^ (r0 << 4); + r0 = (t[0] ^ (t[0] >> 2)) & 0x0C0C0C0C, t[0] ^= r0 ^ (r0 << 2); + r0 = (t[0] ^ (t[0] >> 1)) & 0x22222222, t[0] ^= r0 ^ (r0 << 1); + r1 = (t[1] ^ (t[1] >> 8)) & 0x0000FF00, t[1] ^= r1 ^ (r1 << 8); + r1 = (t[1] ^ (t[1] >> 4)) & 0x00F000F0, t[1] ^= r1 ^ (r1 << 4); + r1 = (t[1] ^ (t[1] >> 2)) & 0x0C0C0C0C, t[1] ^= r1 ^ (r1 << 2); + r1 = (t[1] ^ (t[1] >> 1)) & 0x22222222, t[1] ^= r1 ^ (r1 << 1); + memcpy(out, t, 8 * sizeof(unsigned char)); +} + + + +void getU32Format(u32 *out, const u8* in) { + u32 r0, lo = U32BIG(((u32* )in)[0]); + r0 = (lo ^ (lo >> 1)) & 0x22222222, lo ^= r0 ^ (r0 << 1); + r0 = (lo ^ (lo >> 2)) & 0x0C0C0C0C, lo ^= r0 ^ (r0 << 2); + r0 = (lo ^ (lo >> 4)) & 0x00F000F0, lo ^= r0 ^ (r0 << 4); + r0 = (lo ^ (lo >> 8)) & 0x0000FF00, lo ^= r0 ^ (r0 << 8); + *out = lo; +} diff --git a/knot/Implementations/crypto_aead/knot128v1/armcortexm_4/auxFormat.h b/knot/Implementations/crypto_aead/knot128v1/armcortexm_4/auxFormat.h new file mode 100644 index 0000000..153ab01 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot128v1/armcortexm_4/auxFormat.h @@ -0,0 +1,30 @@ +#include +#include"crypto_aead.h" +#include"api.h" +#include"stdio.h" +#include +#define U32BIG(x) (x) + +#define ARR_SIZE(a) (sizeof((a))/sizeof((a[0]))) +#define LOTR32(x,n) (((x)<<(n))|((x)>>(32-(n)))) + +typedef unsigned char u8; +typedef unsigned int u32; +typedef unsigned long long u64; +unsigned char constant6Format[52]; +unsigned char constant7Format[68]; + +#define RATE (64 / 8) + +#define PR0_ROUNDS 52 +#define PR_ROUNDS 28 +#define PRF_ROUNDS 32 + +#define sbox(a, b, c, d, f, g, h) \ +{ \ + t1 = ~a; t2 = b & t1;t3 = c ^ t2; h = d ^ t3; t5 = b | c; t6 = d ^ t1; g = t5 ^ t6; t8 = b ^ d; t9 = t3 & t6; a = t8 ^ t9; t11 = g & t8; f = t3 ^ t11; \ +} + +void packFormat(u32 * out, const u8 * in); +void unpackFormat(u8 * out, u32 * in); + diff --git a/knot/Implementations/crypto_aead/knot128v1/armcortexm_4/crypto_aead.h b/knot/Implementations/crypto_aead/knot128v1/armcortexm_4/crypto_aead.h new file mode 100644 index 0000000..10ecefb --- /dev/null +++ b/knot/Implementations/crypto_aead/knot128v1/armcortexm_4/crypto_aead.h @@ -0,0 +1,10 @@ +int crypto_aead_encrypt(unsigned char *c, unsigned long long *clen, + const unsigned char *m, unsigned long long mlen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *nsec, const unsigned char *npub, + const unsigned char *k); + +int crypto_aead_decrypt(unsigned char *m, unsigned long long *mlen, + unsigned char *nsec, const unsigned char *c, unsigned long long clen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *npub, const unsigned char *k); diff --git a/knot/Implementations/crypto_aead/knot128v1/armcortexm_4/encrypt.c b/knot/Implementations/crypto_aead/knot128v1/armcortexm_4/encrypt.c new file mode 100644 index 0000000..f937f31 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot128v1/armcortexm_4/encrypt.c @@ -0,0 +1,138 @@ +#include"auxFormat.h" + +void ProcessAssocData(u32 *s, const u8* ad, unsigned long long adlen) { + u32 dataFormat[2] = { 0 }; + u8 tempData[8]; + if (adlen) { + while (adlen >= RATE) { + packFormat(dataFormat, ad); + s[0] ^= dataFormat[0]; + s[1] ^= dataFormat[1]; + P256(s, constant6Format, PR_ROUNDS); + adlen -= RATE; + ad += RATE; + } + memset(tempData, 0, sizeof(tempData)); + memcpy(tempData, ad, adlen * sizeof(unsigned char)); + tempData[adlen] = 0x01; + packFormat(dataFormat, tempData); + s[0] ^= dataFormat[0]; + s[1] ^= dataFormat[1]; + P256(s, constant6Format, PR_ROUNDS); + } + s[6] ^= 0x80000000; +} +void ProcessPlaintext(u32 *s, const u8* m, unsigned long long mlen, + unsigned char *c) { + u32 dataFormat[2] = { 0 }; + u8 tempData[8] = { 0 }; + if (mlen) { + while (mlen >= RATE) { + packFormat(dataFormat, m); + s[0] ^= dataFormat[0]; + s[1] ^= dataFormat[1]; + unpackFormat(c, s); + P256(s, constant6Format, PR_ROUNDS); + mlen -= RATE; + m += RATE; + c += RATE; + } + memset(tempData, 0, sizeof(tempData)); + memcpy(tempData, m, mlen * sizeof(unsigned char)); + tempData[mlen] = 0x01; + packFormat(dataFormat, tempData); + s[0] ^= dataFormat[0]; + s[1] ^= dataFormat[1]; + unpackFormat(tempData, s); + memcpy(c, tempData, mlen * sizeof(unsigned char)); + //c+=mlen; + } +} +void Finalize_GenerateTag(u32 *s, unsigned char *c) { + P256(s, constant6Format, PRF_ROUNDS); + // return tag + unpackFormat(c, s); + unpackFormat((c + 8), (s + 2)); +} +void Initialize(u32 *s, const unsigned char *npub, const unsigned char *k) { + packFormat(s, npub); + packFormat(s + 2, npub + 8); + packFormat(s + 4, k); + packFormat(s + 6, k + 8); + P256(s, constant6Format, PR0_ROUNDS); +} +void ProcessCiphertext(u32 *s, unsigned char *m, const unsigned char *c, + unsigned long long clen) { + u8 tempU8[32] = { 0 }, i; + u32 dataFormat[2] = { 0 }; + u32 dataFormat_1[2] = { 0 }; + if (clen) { + while (clen >= RATE) { + packFormat(dataFormat, c); + dataFormat_1[0] = s[0] ^ dataFormat[0]; + dataFormat_1[1] = s[1] ^ dataFormat[1]; + unpackFormat(m, dataFormat_1); + s[0] = dataFormat[0]; + s[1] = dataFormat[1]; + P256(s, constant6Format, PR_ROUNDS); + clen -= RATE; + m += RATE; + c += RATE; + } + unpackFormat(tempU8, s); + for (i = 0; i < clen; ++i, ++m, ++c) { + *m = tempU8[i] ^ *c; + tempU8[i] = *c; + } + tempU8[i] ^= 0x01; + packFormat(s, tempU8); + } +} +int Finalize_VerifyTag(u32 *s, const unsigned char *c, unsigned char *m, + unsigned long long *mlen) { + u8 tempU8[16] = { 0 }; + P256(s, constant6Format, PRF_ROUNDS); + // return tag + unpackFormat(tempU8, s); + unpackFormat((tempU8 + 8), (s + 2)); + if (memcmp((void*) tempU8, (void*) (c), CRYPTO_ABYTES)) { + memset(m, 0, sizeof(unsigned char) * (*mlen)); + *mlen = 0; + return -1; + } + return 0; +} + +int crypto_aead_encrypt(unsigned char *c, unsigned long long *clen, + const unsigned char *m, unsigned long long mlen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *nsec, const unsigned char *npub, + const unsigned char *k) { + u32 s[8] = { 0 }; + *clen = mlen + CRYPTO_ABYTES; + //initialization + Initialize(s, npub, k); + // process associated data + ProcessAssocData(s, ad, adlen); + ProcessPlaintext(s, m, mlen, c); + // finalization + Finalize_GenerateTag(s, c + mlen); + return 0; +} +int crypto_aead_decrypt(unsigned char *m, unsigned long long *mlen, + unsigned char *nsec, const unsigned char *c, unsigned long long clen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *npub, const unsigned char *k) { + u32 s[8] = { 0 }; + *mlen = clen - CRYPTO_ABYTES; + if (clen < CRYPTO_ABYTES) + return -1; + //initialization + Initialize(s, npub, k); + // process associated data + ProcessAssocData(s, ad, adlen); + // process cipher + ProcessCiphertext(s, m, c, clen - CRYPTO_KEYBYTES); + // finalization + return Finalize_VerifyTag(s, c + clen - CRYPTO_KEYBYTES, m, mlen); +} diff --git a/knot/Implementations/crypto_aead/knot128v1/avr8_lowrom/api.h b/knot/Implementations/crypto_aead/knot128v1/avr8_lowrom/api.h new file mode 100644 index 0000000..51fc844 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot128v1/avr8_lowrom/api.h @@ -0,0 +1,5 @@ +#define CRYPTO_KEYBYTES 16 +#define CRYPTO_NSECBYTES 0 +#define CRYPTO_NPUBBYTES 16 +#define CRYPTO_ABYTES 16 +#define CRYPTO_NOOVERLAP 1 \ No newline at end of file diff --git a/knot/Implementations/crypto_aead/knot128v1/avr8_lowrom/assist.h b/knot/Implementations/crypto_aead/knot128v1/avr8_lowrom/assist.h new file mode 100644 index 0000000..cb903a5 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot128v1/avr8_lowrom/assist.h @@ -0,0 +1,140 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by KNOT Team * +; ********************************************** +; +.macro LFSR6_MACRO + bst rc, 5 + bld tmp0, 0 + bst rc, 4 + bld tmp1, 0 + eor tmp0, tmp1 + ror tmp0 + rol rc + andi rc, 0x3F +.endm + +.macro LFSR7_MACRO + bst rc, 6 + bld tmp0, 0 + bst rc, 5 + bld tmp1, 0 + eor tmp0, tmp1 + ror tmp0 + rol rc + andi rc, 0x7F +.endm + +.macro LFSR8_MACRO + bst rc, 7 + bld tmp0, 0 + bst rc, 5 + bld tmp1, 0 + eor tmp0, tmp1 + bst rc, 4 + bld tmp1, 0 + eor tmp0, tmp1 + bst rc, 3 + bld tmp1, 0 + eor tmp0, tmp1 + ror tmp0 + rol rc +.endm + +.macro Sbox i0, i1, i2, i3 + mov tmp0, \i1 + com \i0 + and \i1, \i0 + eor \i1, \i2 + or \i2, tmp0 + eor \i0, \i3 + eor \i2, \i0 + eor tmp0, \i3 + and \i0, \i1 + eor \i3, \i1 + eor \i0, tmp0 + and tmp0, \i2 + eor \i1, tmp0 +.endm + +.macro PUSH_CONFLICT + push r16 + push r17 + push r18 + push r19 + + push r23 + push r24 + + push r26 + push r27 + push r28 + push r29 + push r30 + push r31 +.endm + +.macro POP_CONFLICT + pop r31 + pop r30 + pop r29 + pop r28 + pop r27 + pop r26 + + pop r24 + pop r23 + + pop r19 + pop r18 + pop r17 + pop r16 +.endm + +.macro PUSH_ALL + push r2 + push r3 + push r4 + push r5 + push r6 + push r7 + push r8 + push r9 + push r10 + push r11 + push r12 + push r13 + push r14 + push r15 + push r16 + push r17 + push r28 + push r29 +.endm + +.macro POP_ALL + pop r29 + pop r28 + pop r17 + pop r16 + pop r15 + pop r14 + pop r13 + pop r12 + pop r11 + pop r10 + pop r9 + pop r8 + pop r7 + pop r6 + pop r5 + pop r4 + pop r3 + pop r2 + clr r1 +.endm \ No newline at end of file diff --git a/knot/Implementations/crypto_aead/knot128v1/avr8_lowrom/config.h b/knot/Implementations/crypto_aead/knot128v1/avr8_lowrom/config.h new file mode 100644 index 0000000..41d8080 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot128v1/avr8_lowrom/config.h @@ -0,0 +1,131 @@ +#ifndef __CONFIG_H__ +#define __CONFIG_H__ + +#define CRYPTO_AEAD +//#define CRYPTO_HASH + +#define MAX_MESSAGE_LENGTH 128 + +#define STATE_INBITS 256 +/* For CRYPTO_AEAD */ +#define CRYPTO_KEYBITS 128 +/* For CRYPTO_HASH */ +#define CRYPTO_BITS 256 + +#define STATE_INBYTES ((STATE_INBITS + 7) / 8) +#define ROW_INBITS ((STATE_INBITS + 3) / 4) +#define ROW_INBYTES ((ROW_INBITS + 7) / 8) + +/* For CRYPTO_AEAD */ +#define CRYPTO_KEYBYTES ((CRYPTO_KEYBITS + 7) / 8) +#define CRYPTO_NSECBYTES 0 +#define CRYPTO_NPUBBYTES CRYPTO_KEYBYTES +#define CRYPTO_ABYTES CRYPTO_KEYBYTES +#define CRYPTO_NOOVERLAP 1 + +#define MAX_ASSOCIATED_DATA_LENGTH 32 +#define MAX_CIPHER_LENGTH (MAX_MESSAGE_LENGTH + CRYPTO_ABYTES) + +#define TAG_MATCH 0 +#define TAG_UNMATCH -1 +#define OTHER_FAILURES -2 + +/* For CRYPTO_HASH */ +#define CRYPTO_BYTES ((CRYPTO_BITS + 7) / 8) + + + +#define DOMAIN_BITS 0x80 +#define PAD_BITS 0x01 +#define S384_R192_BITS 0x80 + +#if (STATE_INBITS==256) +#define C1 1 +#define C2 8 +#define C3 25 +#elif (STATE_INBITS==384) +#define C1 1 +#define C2 8 +#define C3 55 +#elif (STATE_INBITS==512) +#define C1 1 +#define C2 16 +#define C3 25 +#else +#error "Not specified state size" +#endif + +#ifdef CRYPTO_AEAD +/* For CRYPTO_AEAD */ +#define KEY_INBITS (CRYPTO_KEYBYTES * 8) +#define KEY_INBYTES (CRYPTO_KEYBYTES) + +#define NONCE_INBITS (CRYPTO_NPUBBYTES * 8) +#define NONCE_INBYTES (CRYPTO_NPUBBYTES) + +#define TAG_INBITS (CRYPTO_ABYTES * 8) +#define TAG_INBYTES (CRYPTO_ABYTES) + +#if (KEY_INBITS==128) && (STATE_INBITS==256) +#define RATE_INBITS 64 +#define NR_0 52 +#define NR_i 28 +#define NR_f 32 +#elif (KEY_INBITS==128) && (STATE_INBITS==384) +#define RATE_INBITS 192 +#define NR_0 76 +#define NR_i 28 +#define NR_f 32 +#elif (KEY_INBITS==192) && (STATE_INBITS==384) +#define RATE_INBITS 96 +#define NR_0 76 +#define NR_i 40 +#define NR_f 44 +#elif (KEY_INBITS==256) && (STATE_INBITS==512) +#define RATE_INBITS 128 +#define NR_0 100 +#define NR_i 52 +#define NR_f 56 +#else +#error "Not specified key size and state size" +#endif + +#define RATE_INBYTES ((RATE_INBITS + 7) / 8) +#define SQUEEZE_RATE_INBYTES TAG_INBYTES + +#endif + +#ifdef CRYPTO_HASH +/* For CRYPTO_HASH */ +#define HASH_DIGEST_INBITS (CRYPTO_BYTES * 8) + +#if (HASH_DIGEST_INBITS==256) && (STATE_INBITS==256) +#define HASH_RATE_INBITS 32 +#define HASH_SQUEEZE_RATE_INBITS 128 +#define NR_h 68 +#elif (HASH_DIGEST_INBITS==256) && (STATE_INBITS==384) +#define HASH_RATE_INBITS 128 +#define HASH_SQUEEZE_RATE_INBITS 128 +#define NR_h 80 +#elif (HASH_DIGEST_INBITS==384) && (STATE_INBITS==384) +#define HASH_RATE_INBITS 48 +#define HASH_SQUEEZE_RATE_INBITS 192 +#define NR_h 104 +#elif (HASH_DIGEST_INBITS==512) && (STATE_INBITS==512) +#define HASH_RATE_INBITS 64 +#define HASH_SQUEEZE_RATE_INBITS 256 +#define NR_h 140 +#else +#error "Not specified hash digest size and state size" +#endif + +#define HASH_RATE_INBYTES ((HASH_RATE_INBITS + 7) / 8) +#define HASH_SQUEEZE_RATE_INBYTES ((HASH_SQUEEZE_RATE_INBITS + 7) / 8) + +#endif + +#define TAG_MATCH 0 +#define TAG_UNMATCH -1 +#define OTHER_FAILURES -2 + +#endif \ No newline at end of file diff --git a/knot/Implementations/crypto_aead/knot128v1/avr8_lowrom/crypto_aead.h b/knot/Implementations/crypto_aead/knot128v1/avr8_lowrom/crypto_aead.h new file mode 100644 index 0000000..cd820d3 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot128v1/avr8_lowrom/crypto_aead.h @@ -0,0 +1,26 @@ +#ifdef __cplusplus +extern "C" { +#endif + +int crypto_aead_encrypt( + unsigned char *c,unsigned long long *clen, + const unsigned char *m,unsigned long long mlen, + const unsigned char *ad,unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k + ); + + +int crypto_aead_decrypt( + unsigned char *m,unsigned long long *outputmlen, + unsigned char *nsec, + const unsigned char *c,unsigned long long clen, + const unsigned char *ad,unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k + ); + +#ifdef __cplusplus +} +#endif diff --git a/knot/Implementations/crypto_aead/knot128v1/avr8_lowrom/encrypt.c b/knot/Implementations/crypto_aead/knot128v1/avr8_lowrom/encrypt.c new file mode 100644 index 0000000..baf0a3b --- /dev/null +++ b/knot/Implementations/crypto_aead/knot128v1/avr8_lowrom/encrypt.c @@ -0,0 +1,106 @@ +#include +#include +#include +#include +#include "config.h" + +extern void crypto_aead_encrypt_asm( + unsigned char *c, + const unsigned char *m, + unsigned char mlen, + const unsigned char *ad, + unsigned char adlen, + const unsigned char *npub, + const unsigned char *k + ); + +extern int crypto_aead_decrypt_asm( + unsigned char *m, + const unsigned char *c, + unsigned char clen, + const unsigned char *ad, + unsigned char adlen, + const unsigned char *npub, + const unsigned char *k + ); + +extern void crypto_hash_asm( + unsigned char *out, + const unsigned char *in, + unsigned char inlen + ); + + +int crypto_aead_encrypt( + unsigned char *c, unsigned long long *clen, + const unsigned char *m, unsigned long long mlen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k + ) +{ + /* + ... + ... the code for the cipher implementation goes here, + ... generating a ciphertext c[0],c[1],...,c[*clen-1] + ... from a plaintext m[0],m[1],...,m[mlen-1] + ... and associated data ad[0],ad[1],...,ad[adlen-1] + ... and nonce npub[0],npub[1],.. + ... and secret key k[0],k[1],... + ... the implementation shall not use nsec + ... + ... return 0; + */ + + (void)nsec; + + crypto_aead_encrypt_asm(c, m, mlen, ad, adlen, npub, k); + + *clen = mlen + TAG_INBYTES; + return 0; +} + + + +int crypto_aead_decrypt( + unsigned char *m, unsigned long long *mlen, + unsigned char *nsec, + const unsigned char *c, unsigned long long clen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k + ) +{ + /* + ... + ... the code for the AEAD implementation goes here, + ... generating a plaintext m[0],m[1],...,m[*mlen-1] + ... and secret message number nsec[0],nsec[1],... + ... from a ciphertext c[0],c[1],...,c[clen-1] + ... and associated data ad[0],ad[1],...,ad[adlen-1] + ... and nonce number npub[0],npub[1],... + ... and secret key k[0],k[1],... + ... + ... return 0; + */ + unsigned long long mlen_; + unsigned char tag_is_match; + + (void)nsec; + if (clen < CRYPTO_ABYTES) { + return -1; + } + mlen_ = clen - CRYPTO_ABYTES; + + tag_is_match = crypto_aead_decrypt_asm(m, c, mlen_, ad, adlen, npub, k); + + if (tag_is_match != 0) + { + memset(m, 0, (size_t)mlen_); + return -1; + } + + *mlen = mlen_; + return 0; +} \ No newline at end of file diff --git a/knot/Implementations/crypto_aead/knot128v1/avr8_lowrom/encrypt_core.S b/knot/Implementations/crypto_aead/knot128v1/avr8_lowrom/encrypt_core.S new file mode 100644 index 0000000..cb7aed5 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot128v1/avr8_lowrom/encrypt_core.S @@ -0,0 +1,537 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by KNOT Team * +; ********************************************** +; + +; +; ============================================ +; S R A M D E F I N I T I O N S +; ============================================ +; +#include +#include "config.h" + +.section .noinit + SRAM_STATE: .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#if (STATE_INBYTES > 32) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif +#if (STATE_INBYTES > 48) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif + SRAM_MESSAGE_OUT_ADDR: .BYTE 0, 0 + SRAM_MESSAGE_IN_ADDR: .BYTE 0, 0 + SRAM_MESSAGE_IN_LEN: .BYTE 0, 0 +#ifdef CRYPTO_AEAD +; For CRYPTO_AEAD + SRAM_ASSOCIATED_DATA_ADDR: .BYTE 0, 0 + SRAM_ADLEN: .BYTE 0, 0 + SRAM_NONCE_ADDR: .BYTE 0, 0 + SRAM_KEY_ADDR: .BYTE 0, 0 + + SRAM_ADDITIONAL: + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#if (CRYPTO_ABYTES > 16) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif +#if (CRYPTO_ABYTES > 24) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif + +#endif + +.section .text + +#include "permutation.h" + +; require YH:YL be the address of the current associated data/cipher/message block +; for enc and dec, store ciphertext or plaintext +; require ZH:ZL be the address of the current cipher/message block +XOR_to_State: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + mov cnt0, rate +XOR_to_State_loop: + ld tmp0, Y+ ; plaintext/ciphertext + ld tmp1, X ; state + eor tmp1, tmp0 ; ciphertext/plaintext + sbrc AEDH, 0 ; test auth or enc/dec, if AEDH[0] == 0, skip store result + st Z+, tmp1 ; store ciphertext/plaintext + sbrc AEDH, 1 ; test auth/enc or dec, if AEDH[1] == 0, skip repalce state byte + mov tmp1, tmp0 ; if dec, replace state + st X+, tmp1 ; store state byte + dec cnt0 + brne XOR_to_State_loop +; YH:YL are now the address of the next associated data block +ret + +; require YH:YL pointed to the input data +; require ZH:ZL pointed to the output data +; require cnt0 containes the nubmer of bytes in source data +; require number of bytes in source data less than rate, i.e., 0 <= cnt0 < rate +; +; the 0th bit in AEDH is used to distinguish (auth AD) or (enc/dec M/C): +; AEDH[0] = 0 for (auth AD), AEDH[0] = 1 for (enc/dec M/C) +; the 1th bit in AEDH is used to distinguish (auth AD/enc M) or (dec C): +; AEDH[1] = 0 for (auth AD/enc M), AEDH[1] = 1 for (dec C) +; AEDH = 0b000 for (auth AD) +; AEDH = 0b001 for (enc M) +; AEDH = 0b011 for (dec C) +Pad_XOR_to_State: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + tst cnt0 + breq XOR_padded_data +XOR_source_data_loop: + ld tmp0, Y+ ; plaintext/ciphertext + ld tmp1, X ; state + eor tmp1, tmp0 ; ciphertext/plaintext + sbrc AEDH, 0 ; test auth or enc/dec, if AEDH[0] == 0, skip store result + st Z+, tmp1 ; store ciphertext/plaintext + sbrc AEDH, 1 ; test auth/enc or dec, if AEDH[1] == 0, skip repalce state byte + mov tmp1, tmp0 ; if dec, replace state + st X+, tmp1 ; store state byte + dec cnt0 + brne XOR_source_data_loop +XOR_padded_data: + ldi tmp0, PAD_BITS + ld tmp1, X + eor tmp1, tmp0 + st X, tmp1 +ret + +AddDomain: + ldi XH, hi8(SRAM_STATE + STATE_INBYTES - 1) + ldi XL, lo8(SRAM_STATE + STATE_INBYTES - 1) + ldi tmp0, DOMAIN_BITS + ld tmp1, X + eor tmp0, tmp1 + st X, tmp0 +ret + +; require ZH:ZL be the address of the destination +EXTRACT_from_State: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + mov tmp1, rate +EXTRACT_from_State_loop: + ld tmp0, X+ + st Z+, tmp0 + dec tmp1 + brne EXTRACT_from_State_loop +ret + +AUTH: + tst radlen + breq AUTH_end + + cp radlen, rate + brlo auth_ad_padded_block + +auth_ad_loop: + rcall XOR_to_State + rcall Permutation + sub radlen, rate + cp radlen, rate + brlo auth_ad_padded_block + rjmp auth_ad_loop + +auth_ad_padded_block: + mov cnt0, radlen + rcall Pad_XOR_to_State + rcall Permutation + +AUTH_end: +ret + +#ifdef CRYPTO_AEAD +Initialization: + ldi rn, NR_0 + ldi XL, lo8(SRAM_STATE) + ldi XH, hi8(SRAM_STATE) + + lds YH, SRAM_NONCE_ADDR + lds YL, SRAM_NONCE_ADDR + 1 + ldi cnt0, CRYPTO_NPUBBYTES +load_nonce_loop: + ld tmp0, Y+ + st X+, tmp0 + dec cnt0 + brne load_nonce_loop + + lds YH, SRAM_KEY_ADDR + lds YL, SRAM_KEY_ADDR + 1 + ldi cnt0, CRYPTO_KEYBYTES +load_key_loop: + ld tmp0, Y+ + st X+, tmp0 + dec cnt0 + brne load_key_loop + +#if (STATE_INBITS==384) && (RATE_INBITS==192) + ldi cnt0, (STATE_INBYTES - CRYPTO_NPUBBYTES - CRYPTO_KEYBYTES - 1) + clr tmp0 +empty_state_loop: + st X+, tmp0 + dec cnt0 + brne empty_state_loop + ldi tmp0, S384_R192_BITS + st X+, tmp0 +#endif + + rcall Permutation +ret + +ENC: + tst mclen + breq ENC_end + + cp mclen, rate + brlo enc_padded_block + +enc_loop: + rcall XOR_to_State + ldi rn, NR_i + rcall Permutation + sub mclen, rate + cp mclen, rate + brlo enc_padded_block + rjmp enc_loop + +enc_padded_block: + mov cnt0, mclen + rcall Pad_XOR_to_State +ENC_end: +ret + +Finalization: + ldi rate, SQUEEZE_RATE_INBYTES + ldi rn, NR_f + rcall Permutation + rcall EXTRACT_from_State +ret + +; void crypto_aead_encrypt_asm( +; unsigned char *c, +; const unsigned char *m, +; unsigned long long mlen, +; const unsigned char *ad, +; unsigned long long adlen, +; const unsigned char *npub, +; const unsigned char *k +; ) +; +; unsigned char *c, is passed in r24:r25 +; const unsigned char *m, is passed in r22:r23 +; unsigned long long mlen, is passed in r20:r21, only LSB (r20) is used +; const unsigned char *ad, is passed in r18:r19 +; unsigned long long adlen, is passed in r16:r17, only LSB (r16) is used +; const unsigned char *npub, is passed in r14:r15 +; const unsigned char *k is passed in r12:r13 +.global crypto_aead_encrypt_asm +crypto_aead_encrypt_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store cipher address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store message address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store message length in SRAM_MESSAGE_IN_LEN + st X+, r20 + st X+, r19 ;store associated data address in SRAM_ASSOCIATED_DATA_ADDR + st X+, r18 + st X+, r17 ;store associated data length in SRAM_ADLEN + st X+, r16 + st X+, r15 ;store nonce address in SRAM_NONCE_ADDR + st X+, r14 + st X+, r13 ;store key address in SRAM_KEY_ADDR + st X+, r12 + mov radlen, r16 + mov mclen, r20 + + rcall Initialization + + ldi rn, NR_i + ldi rate, RATE_INBYTES + ldi AEDH, 0b000 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_ASSOCIATED_DATA_ADDR + lds YL, SRAM_ASSOCIATED_DATA_ADDR + 1 + rcall AUTH + rcall AddDomain + ldi AEDH, 0b001 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_MESSAGE_IN_ADDR + lds YL, SRAM_MESSAGE_IN_ADDR + 1 + lds ZH, SRAM_MESSAGE_OUT_ADDR + lds ZL, SRAM_MESSAGE_OUT_ADDR + 1 + rcall ENC + rcall Finalization + POP_ALL +ret + +; int crypto_aead_decrypt_asm( +; unsigned char *m, +; const unsigned char *c, +; unsigned long long clen, +; const unsigned char *ad, +; unsigned long long adlen, +; const unsigned char *npub, +; const unsigned char *k +; ) +; +; unsigned char *m, is passed in r24:r25 +; const unsigned char *c, is passed in r22:r23 +; unsigned long long clen, is passed in r20:r21, only LSB (r20) is used +; const unsigned char *ad, is passed in r18:r19 +; unsigned long long adlen, is passed in r16:r17, only LSB (r16) is used +; const unsigned char *npub, is passed in r14:r15 +; const unsigned char *k is passed in r12:r13 +.global crypto_aead_decrypt_asm +crypto_aead_decrypt_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store message address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store cipher address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store cipher length in SRAM_MESSAGE_IN_LEN + st X+, r20 + st X+, r19 ;store associated data address in SRAM_ASSOCIATED_DATA_ADDR + st X+, r18 + st X+, r17 ;store associated data length in SRAM_ADLEN + st X+, r16 + st X+, r15 ;store nonce address in SRAM_NONCE_ADDR + st X+, r14 + st X+, r13 ;store key address in SRAM_KEY_ADDR + st X+, r12 + mov radlen, r16 + mov mclen, r20 + + rcall Initialization + + ldi rn, NR_i + ldi rate, RATE_INBYTES + ldi AEDH, 0b000 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_ASSOCIATED_DATA_ADDR + lds YL, SRAM_ASSOCIATED_DATA_ADDR + 1 + rcall AUTH + rcall AddDomain + ldi AEDH, 0b011 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_MESSAGE_IN_ADDR + lds YL, SRAM_MESSAGE_IN_ADDR + 1 + lds ZH, SRAM_MESSAGE_OUT_ADDR + lds ZL, SRAM_MESSAGE_OUT_ADDR + 1 + rcall ENC + + ldi ZH, hi8(SRAM_ADDITIONAL) + ldi ZL, lo8(SRAM_ADDITIONAL) + rcall Finalization + + sbiw ZL, CRYPTO_ABYTES + ldi cnt0, CRYPTO_ABYTES +compare_tag: + ld tmp0, Z+ + ld tmp1, Y+ + cp tmp0, tmp1 + brne return_tag_not_match + dec cnt0 + brne compare_tag + rjmp return_tag_match + +return_tag_not_match: + ldi r25, 0xFF + ldi r24, 0xFF + rjmp crypto_aead_decrypt_end + +return_tag_match: + clr r25 + clr r24 +crypto_aead_decrypt_end: + POP_ALL +ret + +; #ifdef CRYPTO_AEAD +#endif + + +#ifdef CRYPTO_HASH + +; void crypto_hash_asm( +; unsigned char *out, +; const unsigned char *in, +; unsigned long long inlen +; ) +; +; unsigned char *out, is passed in r24:r25 +; const unsigned char *in, is passed in r22:r23 +; unsigned long long inlen, is passed in r20:r21, only LSB (r20) is used +.global crypto_hash_asm +crypto_hash_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store message address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store cipher address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store cipher length in SRAM_MESSAGE_IN_LEN + st X+, r20 + mov mclen, r20 + + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) +#if (STATE_INBITS==384) && (HASH_RATE_INBITS==128) + ldi cnt0, STATE_INBYTES - 1 +#else + ldi cnt0, STATE_INBYTES +#endif + clr tmp0 +zero_state: + st X+, tmp0 + dec cnt0 + brne zero_state + +#if (STATE_INBITS==384) && (HASH_RATE_INBITS==128) + ldi tmp0, S384_R192_BITS + st X+, tmp0 +#endif + + ldi rn, NR_h + ldi AEDH, 0b100 + +HASH_ABSORBING: + mov radlen, mclen + tst radlen + breq EMPTY_M + ldi rate, HASH_RATE_INBYTES + lds YH, SRAM_MESSAGE_IN_ADDR + lds YL, SRAM_MESSAGE_IN_ADDR + 1 + rcall AUTH + rjmp HASH_SQUEEZING + +EMPTY_M: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + ldi tmp0, PAD_BITS + ld tmp1, X + eor tmp1, tmp0 + st X, tmp1 + rcall Permutation + +HASH_SQUEEZING: + ldi rate, HASH_SQUEEZE_RATE_INBYTES + lds ZH, SRAM_MESSAGE_OUT_ADDR + lds ZL, SRAM_MESSAGE_OUT_ADDR + 1 + ldi tcnt, CRYPTO_BYTES +SQUEEZING_loop: + rcall EXTRACT_from_State + subi tcnt, HASH_SQUEEZE_RATE_INBYTES + breq HASH_SQUEEZING_end + rcall Permutation + rjmp SQUEEZING_loop +HASH_SQUEEZING_end: + POP_ALL +ret + +#endif + + +; Byte Order In AVR 8: +; KNOT-AEAD(128, 256, 64): +; N[ 0] AEAD_State[ 0] | Message[ 0] Perm_row_0[0] 0 Tag[ 0] +; N[ 1] AEAD_State[ 1] | Message[ 1] Perm_row_0[1] 0 Tag[ 1] +; N[ 2] AEAD_State[ 2] | Message[ 2] Perm_row_0[2] 0 Tag[ 2] +; N[ 3] AEAD_State[ 3] | Message[ 3] Perm_row_0[3] 0 Tag[ 3] +; N[ 4] AEAD_State[ 4] | Message[ 4] 0x01 Perm_row_0[4] 0 Tag[ 4] +; N[ 5] AEAD_State[ 5] | Message[ 5] 0x00 Perm_row_0[5] 0 Tag[ 5] +; N[ 6] AEAD_State[ 6] | Message[ 6] 0x00 Perm_row_0[6] 0 Tag[ 6] +; N[ 7] AEAD_State[ 7] | Message[ 7] 0x00 Perm_row_0[7] <<< 0 Tag[ 7] +; N[ 8] AEAD_State[ 8] | Perm_row_1[0] 1 +; N[ 9] AEAD_State[ 9] | Perm_row_1[1] 1 +; N[10] AEAD_State[10] | Perm_row_1[2] 1 +; N[11] AEAD_State[11] | Perm_row_1[3] 1 +; N[12] AEAD_State[12] | Perm_row_1[4] 1 +; N[13] AEAD_State[13] | Perm_row_1[5] 1 +; N[14] AEAD_State[14] | Perm_row_1[6] 1 +; N[15] AEAD_State[15] | Perm_row_1[7] <<< 1 +; K[ 0] AEAD_State[16] | Perm_row_2[0] 8 +; K[ 1] AEAD_State[17] | Perm_row_2[1] 8 +; K[ 2] AEAD_State[18] | Perm_row_2[2] 8 +; K[ 3] AEAD_State[19] | Perm_row_2[3] 8 +; K[ 4] AEAD_State[20] | Perm_row_2[4] 8 +; K[ 5] AEAD_State[21] | Perm_row_2[5] 8 +; K[ 6] AEAD_State[22] | Perm_row_2[6] 8 +; K[ 7] AEAD_State[23] | Perm_row_2[7] <<< 8 +; K[ 8] AEAD_State[24] | Perm_row_3[0] 25 +; K[ 9] AEAD_State[25] | Perm_row_3[1] 25 +; K[10] AEAD_State[26] | Perm_row_3[2] 25 +; K[11] AEAD_State[27] | Perm_row_3[3] 25 +; K[12] AEAD_State[28] | Perm_row_3[4] 25 +; K[13] AEAD_State[29] | Perm_row_3[5] 25 +; K[14] AEAD_State[30] | Perm_row_3[6] 25 +; K[15] AEAD_State[31] | ^0x80 Perm_row_3[7] <<< 25 +; +; +; KNOT-AEAD(128, 384, 192): +; Initalization +; N[ 0] AEAD_State[ 0] | Message[ 0] Perm_row_0[ 0] 0 Tag[ 0] +; N[ 1] AEAD_State[ 1] | Message[ 1] Perm_row_0[ 1] 0 Tag[ 1] +; N[ 2] AEAD_State[ 2] | Message[ 2] Perm_row_0[ 2] 0 Tag[ 2] +; N[ 3] AEAD_State[ 3] | Message[ 3] Perm_row_0[ 3] 0 Tag[ 3] +; N[ 4] AEAD_State[ 4] | Message[ 4] 0x01 Perm_row_0[ 4] 0 Tag[ 4] +; N[ 5] AEAD_State[ 5] | Message[ 5] 0x00 Perm_row_0[ 5] 0 Tag[ 5] +; N[ 6] AEAD_State[ 6] | Message[ 6] 0x00 Perm_row_0[ 6] 0 Tag[ 6] +; N[ 7] AEAD_State[ 7] | Message[ 7] 0x00 Perm_row_0[ 7] 0 Tag[ 7] +; N[ 8] AEAD_State[ 8] | Message[ 8] 0x00 Perm_row_0[ 8] 0 Tag[ 8] +; N[ 9] AEAD_State[ 9] | Message[ 9] 0x00 Perm_row_0[ 9] 0 Tag[ 9] +; N[10] AEAD_State[10] | Message[10] 0x00 Perm_row_0[10] 0 Tag[10] +; N[11] AEAD_State[11] | Message[11] 0x00 Perm_row_0[11] <<< 0 Tag[11] +; N[12] AEAD_State[12] | Message[12] 0x00 Perm_row_1[ 0] 1 Tag[12] +; N[13] AEAD_State[13] | Message[13] 0x00 Perm_row_1[ 1] 1 Tag[13] +; N[14] AEAD_State[14] | Message[14] 0x00 Perm_row_1[ 2] 1 Tag[14] +; N[15] AEAD_State[15] | Message[15] 0x00 Perm_row_1[ 3] 1 Tag[15] +; K[ 0] AEAD_State[16] | Message[16] 0x00 Perm_row_1[ 4] 1 +; K[ 1] AEAD_State[17] | Message[17] 0x00 Perm_row_1[ 5] 1 +; K[ 2] AEAD_State[18] | Message[18] 0x00 Perm_row_1[ 6] 1 +; K[ 3] AEAD_State[19] | Message[19] 0x00 Perm_row_1[ 7] 1 +; K[ 4] AEAD_State[20] | Message[20] 0x00 Perm_row_1[ 8] 1 +; K[ 5] AEAD_State[21] | Message[21] 0x00 Perm_row_1[ 9] 1 +; K[ 6] AEAD_State[22] | Message[22] 0x00 Perm_row_1[10] 1 +; K[ 7] AEAD_State[23] | Message[23] 0x00 Perm_row_1[11] <<< 1 +; K[ 8] AEAD_State[24] | Perm_row_2[ 0] 8 +; K[ 9] AEAD_State[25] | Perm_row_2[ 1] 8 +; K[10] AEAD_State[26] | Perm_row_2[ 2] 8 +; K[11] AEAD_State[27] | Perm_row_2[ 3] 8 +; K[12] AEAD_State[28] | Perm_row_2[ 4] 8 +; K[13] AEAD_State[29] | Perm_row_2[ 5] 8 +; K[14] AEAD_State[30] | Perm_row_2[ 6] 8 +; K[15] AEAD_State[31] | Perm_row_2[ 7] 8 +; 0x00 AEAD_State[32] | Perm_row_2[ 8] 8 +; 0x00 AEAD_State[33] | Perm_row_2[ 9] 8 +; 0x00 AEAD_State[34] | Perm_row_2[10] 8 +; 0x00 AEAD_State[35] | Perm_row_2[11] <<< 8 +; 0x00 AEAD_State[36] | Perm_row_3[ 0] 55 +; 0x00 AEAD_State[37] | Perm_row_3[ 1] 55 +; 0x00 AEAD_State[38] | Perm_row_3[ 2] 55 +; 0x00 AEAD_State[39] | Perm_row_3[ 3] 55 +; 0x00 AEAD_State[40] | Perm_row_3[ 4] 55 +; 0x00 AEAD_State[41] | Perm_row_3[ 5] 55 +; 0x00 AEAD_State[42] | Perm_row_3[ 6] 55 +; 0x00 AEAD_State[43] | Perm_row_3[ 7] 55 +; 0x00 AEAD_State[44] | Perm_row_3[ 8] 55 +; 0x00 AEAD_State[45] | Perm_row_3[ 9] 55 +; 0x00 AEAD_State[46] | Perm_row_3[10] 55 +; 0x00 ^0x80 AEAD_State[47] | ^0x80 Perm_row_3[11] <<< 55 diff --git a/knot/Implementations/crypto_aead/knot128v1/avr8_lowrom/knot256.h b/knot/Implementations/crypto_aead/knot128v1/avr8_lowrom/knot256.h new file mode 100644 index 0000000..d16bf8c --- /dev/null +++ b/knot/Implementations/crypto_aead/knot128v1/avr8_lowrom/knot256.h @@ -0,0 +1,197 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by KNOT Team * +; ********************************************** +; +#include "assist.h" + +Permutation: + PUSH_CONFLICT + mov rcnt, rn + + ldi rc, 0x01 + ldi YH, hi8(SRAM_STATE + 3 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 3 * ROW_INBYTES) + ld x30, Y+ + ld x31, Y+ + ld x32, Y+ + ld x33, Y+ + ld x34, Y+ + ld x35, Y+ + ld x36, Y+ + ld x37, Y+ + +round_loop_start: + rjmp AddRC_SubColumns_Start + +load_columns_table: + rjmp load_column0 + rjmp load_column1 + rjmp load_column2 + rjmp load_column3 + rjmp load_column4 + rjmp load_column5 + rjmp load_column6 + rjmp load_column7 + rjmp amend_shiftRow + +load_column0: + mov x3j, x30 + rjmp Sbox_one_column +load_column1: + mov x30, x3j + mov x3j, x31 + rjmp Sbox_one_column +load_column2: + mov x31, x3j + mov x3j, x32 + rjmp Sbox_one_column +load_column3: + mov x32, x3j + mov x3j, x33 + rjmp Sbox_one_column +load_column4: + mov x33, x3j + mov x3j, x34 + rjmp Sbox_one_column +load_column5: + mov x34, x3j + mov x3j, x35 + rjmp Sbox_one_column +load_column6: + mov x35, x3j + mov x3j, x36 + rjmp Sbox_one_column +load_column7: + mov x36, x3j + mov x3j, x37 + rjmp Sbox_one_column + +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) +LFSR_table: + rjmp LFSR6 + rjmp LFSR7 +LFSR6: + LFSR6_MACRO + rjmp LFSR_DONE +LFSR7: + LFSR7_MACRO + rjmp LFSR_DONE +#endif + +;;;;;;;;;;;;;;;;;;;;;;;; Real Start +AddRC_SubColumns_Start: + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + clr ccnt + ld x0j, Y + eor x0j, rc + +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) + ldi ZL, pm_lo8(LFSR_table) + ldi ZH, pm_hi8(LFSR_table) + sbrc AEDH, 2 ; AEDH[2] = 0 for AEAD and AEDH[1] = 1 for HASH + adiw ZL, 1 + ijmp +LFSR_DONE: +#elif defined(CRYPTO_AEAD) + LFSR6_MACRO ; only AEAD +#else + LFSR7_MACRO ; only HASH +#endif + + ldd x1j, Y + ROW_INBYTES + ldd x2j, Y + 2 * ROW_INBYTES + ldi ZL, pm_lo8(load_columns_table) + ldi ZH, pm_hi8(load_columns_table) + ijmp +Sbox_one_column: + Sbox x0j, x1j, x2j, x3j + + ; 7 6 5 4 3 2 1 0 + ; -- -- -- -- -- -- -- x- 0 + ; -- -- -- -- -- -- -- x' 0 + ; -- -- -- -- -- -- x- -- 1 + ; -- -- -- -- x' -- -- -- 3 + ; 4 3 2 1 0 7 6 5 + ; Store a byte to Row 0 + st Y, x0j + ; Store a byte combined with ShiftRow1 + lsl t1j + mov t1j, x1j ; back up the last updated byte in t1j, to be used in shiftRow1 (1 bit left) + rol x1j + std Y + ROW_INBYTES, x1j + ; Store a byte combined with ShiftRow2 + inc ccnt + cpi ccnt, ROW_INBYTES + breq ROW2_WRAP + ldd t2j, Y + 2 * ROW_INBYTES + 1 ; load next byte, the last updated byte needed to be shifted to the address of the next bytes + std Y + 2 * ROW_INBYTES + 1, x2j + mov x2j, t2j + jmp NO_ROW2_WRAP +ROW2_WRAP: + std Y + ROW_INBYTES + 1, x2j + ; remain ShiftRow3 to be done at 'amend_shiftRow' +NO_ROW2_WRAP: + adiw YL, 1 + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + + adiw ZL, 1 + ijmp + +amend_shiftRow: + ldi YH, hi8(SRAM_STATE + ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + ROW_INBYTES) + + ld x1j, Y + bst t1j, 7 + bld x1j, 0 + st Y, x1j + + ; <<< 1 + mov x37, x3j + rol x3j + rol x30 + rol x31 + rol x32 + rol x33 + rol x34 + rol x35 + rol x36 + rol x37 + ; <<< 24 + ; 7 6 5 4 3 2 1 0 => 4 3 2 1 0 7 6 5 + mov x3j, x30 + mov x30, x35 + mov x35, x32 + mov x32, x37 + mov x37, x34 + mov x34, x31 + mov x31, x36 + mov x36, x33 + mov x33, x3j + + dec rcnt + breq round_loop_end + rjmp round_loop_start + +round_loop_end: + ldi YH, hi8(SRAM_STATE + 3 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 3 * ROW_INBYTES) + st Y+, x30 + st Y+, x31 + st Y+, x32 + st Y+, x33 + st Y+, x34 + st Y+, x35 + st Y+, x36 + st Y+, x37 + + POP_CONFLICT +ret \ No newline at end of file diff --git a/knot/Implementations/crypto_aead/knot128v1/avr8_lowrom/knot384.h b/knot/Implementations/crypto_aead/knot128v1/avr8_lowrom/knot384.h new file mode 100644 index 0000000..65c474a --- /dev/null +++ b/knot/Implementations/crypto_aead/knot128v1/avr8_lowrom/knot384.h @@ -0,0 +1,219 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by KNOT Team * +; ********************************************** +; +#include "assist.h" + +Permutation: + PUSH_CONFLICT + mov rcnt, rn + + ldi rc, 0x01 + ldi YH, hi8(SRAM_STATE + 3 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 3 * ROW_INBYTES) + ld x30, Y+ + ld x31, Y+ + ld x32, Y+ + ld x33, Y+ + ld x34, Y+ + ld x35, Y+ + ld x36, Y+ + ld x37, Y+ + ld x38, Y+ + ld x39, Y+ + ld x3a, Y+ + ld x3b, Y+ + +round_loop_start: + rjmp AddRC_SubColumns_Start + +load_columns_table: + rjmp load_column0 + rjmp load_column1 + rjmp load_column2 + rjmp load_column3 + rjmp load_column4 + rjmp load_column5 + rjmp load_column6 + rjmp load_column7 + rjmp load_column8 + rjmp load_column9 + rjmp load_columna + rjmp load_columnb + rjmp amend_shiftRow + +load_column0: + mov x3j, x30 + rjmp Sbox_one_column +load_column1: + mov x30, x3j + mov x3j, x31 + rjmp Sbox_one_column +load_column2: + mov x31, x3j + mov x3j, x32 + rjmp Sbox_one_column +load_column3: + mov x32, x3j + mov x3j, x33 + rjmp Sbox_one_column +load_column4: + mov x33, x3j + mov x3j, x34 + rjmp Sbox_one_column +load_column5: + mov x34, x3j + mov x3j, x35 + rjmp Sbox_one_column +load_column6: + mov x35, x3j + mov x3j, x36 + rjmp Sbox_one_column +load_column7: + mov x36, x3j + mov x3j, x37 + rjmp Sbox_one_column +load_column8: + mov x37, x3j + mov x3j, x38 + rjmp Sbox_one_column +load_column9: + mov x38, x3j + mov x3j, x39 + rjmp Sbox_one_column +load_columna: + mov x39, x3j + mov x3j, x3a + rjmp Sbox_one_column +load_columnb: + mov x3a, x3j + mov x3j, x3b + rjmp Sbox_one_column + +;;;;;;;;;;;;;;;;;;;;;;;; Real Start +AddRC_SubColumns_Start: + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + ldi ZL, pm_lo8(load_columns_table) + ldi ZH, pm_hi8(load_columns_table) + clr ccnt + ld x0j, Y + eor x0j, rc + LFSR7_MACRO + + ldd x1j, Y + ROW_INBYTES + ldd x2j, Y + 2 * ROW_INBYTES + ijmp +Sbox_one_column: + Sbox x0j, x1j, x2j, x3j + + ; b a 9 8 7 6 5 4 3 2 1 0 + ; -- -- -- -- -- -- -- -- -- -- -- x- 0 + ; -- -- -- -- -- -- -- -- -- -- -- x' 0 + ; -- -- -- -- -- -- -- -- -- -- x- -- 1 + ; -- -- -- -- x' -- -- -- -- -- -- -- 7 + ; 4 3 2 1 0 b a 9 8 7 6 5 + ; Store a byte to Row 0 + st Y, x0j + ; Store a byte combined with ShiftRow 1 + lsl t1j + mov t1j, x1j ; back up the last updated byte in t1j, to be used in shiftRow1 (1 bit left) + rol x1j + std Y + ROW_INBYTES, x1j + ; Store a byte combined with ShiftRow 2 + inc ccnt + cpi ccnt, ROW_INBYTES + breq ROW2_WRAP + ldd t2j, Y + 2 * ROW_INBYTES + 1 ; load next byte, the last updated byte needed to be shifted to the address of the next bytes + std Y + 2 * ROW_INBYTES + 1, x2j + mov x2j, t2j + jmp NO_ROW2_WRAP +ROW2_WRAP: + std Y + ROW_INBYTES + 1, x2j + ; remain ShiftRow3 to be done at 'amend_shiftRow' +NO_ROW2_WRAP: + adiw YL, 1 + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + + adiw ZL, 1 + ijmp + +amend_shiftRow: + ldi YH, hi8(SRAM_STATE + ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + ROW_INBYTES) + + ld x1j, Y + bst t1j, 7 + bld x1j, 0 + st Y, x1j + + ; >>> 1 + mov x3b, x3j + ror x3j + ror x3a + ror x39 + ror x38 + ror x37 + ror x36 + ror x35 + ror x34 + ror x33 + ror x32 + ror x31 + ror x30 + ror x3b + ; <<< 56 + ; b a 9 8 7 6 5 4 3 2 1 0 => 4 3 2 1 0 b a 9 8 7 6 5 + ;mov x3j, x30 + ;mov x30, x35 + ;mov x35, x32 + ;mov x32, x37 + ;mov x37, x34 + ;mov x34, x31 + ;mov x31, x36 + ;mov x36, x33 + ;mov x33, x3j + mov x3j, x30 + mov x30, x35 + mov x35, x3a + mov x3a, x33 + mov x33, x38 + mov x38, x31 + mov x31, x36 + mov x36, x3b + mov x3b, x34 + mov x34, x39 + mov x39, x32 + mov x32, x37 + mov x37, x3j + + dec rcnt + breq round_loop_end + rjmp round_loop_start + +round_loop_end: + + ldi YH, hi8(SRAM_STATE + 3 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 3 * ROW_INBYTES) + st Y+, x30 + st Y+, x31 + st Y+, x32 + st Y+, x33 + st Y+, x34 + st Y+, x35 + st Y+, x36 + st Y+, x37 + st Y+, x38 + st Y+, x39 + st Y+, x3a + st Y+, x3b + + POP_CONFLICT +ret \ No newline at end of file diff --git a/knot/Implementations/crypto_aead/knot128v1/avr8_lowrom/knot512.h b/knot/Implementations/crypto_aead/knot128v1/avr8_lowrom/knot512.h new file mode 100644 index 0000000..d24b353 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot128v1/avr8_lowrom/knot512.h @@ -0,0 +1,275 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by KNOT Team * +; ********************************************** +; +#include "assist.h" + +Permutation: + PUSH_CONFLICT + mov rcnt, rn + + ldi rc, 0x01 + ldi YH, hi8(SRAM_STATE + 3 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 3 * ROW_INBYTES) + ld x30, Y+ + ld x31, Y+ + ld x32, Y+ + ld x33, Y+ + ld x34, Y+ + ld x35, Y+ + ld x36, Y+ + ld x37, Y+ + ld x38, Y+ + ld x39, Y+ + ld x3a, Y+ + ld x3b, Y+ + ld x3c, Y+ + ld x3d, Y+ + ld x3e, Y+ + ld x3f, Y+ + +round_loop_start: + rjmp AddRC_SubColumns_Start + +load_columns_table: + rjmp load_column0 + rjmp load_column1 + rjmp load_column2 + rjmp load_column3 + rjmp load_column4 + rjmp load_column5 + rjmp load_column6 + rjmp load_column7 + rjmp load_column8 + rjmp load_column9 + rjmp load_columna + rjmp load_columnb + rjmp load_columnc + rjmp load_columnd + rjmp load_columne + rjmp load_columnf + rjmp amend_shiftRow + +load_column0: + mov x3j, x30 + rjmp Sbox_one_column +load_column1: + mov x30, x3j + mov x3j, x31 + rjmp Sbox_one_column +load_column2: + mov x31, x3j + mov x3j, x32 + rjmp Sbox_one_column +load_column3: + mov x32, x3j + mov x3j, x33 + rjmp Sbox_one_column +load_column4: + mov x33, x3j + mov x3j, x34 + rjmp Sbox_one_column +load_column5: + mov x34, x3j + mov x3j, x35 + rjmp Sbox_one_column +load_column6: + mov x35, x3j + mov x3j, x36 + rjmp Sbox_one_column +load_column7: + mov x36, x3j + mov x3j, x37 + rjmp Sbox_one_column +load_column8: + mov x37, x3j + mov x3j, x38 + rjmp Sbox_one_column +load_column9: + mov x38, x3j + mov x3j, x39 + rjmp Sbox_one_column +load_columna: + mov x39, x3j + mov x3j, x3a + rjmp Sbox_one_column +load_columnb: + mov x3a, x3j + mov x3j, x3b + rjmp Sbox_one_column +load_columnc: + mov x3b, x3j + mov x3j, x3c + rjmp Sbox_one_column +load_columnd: + mov x3c, x3j + mov x3j, x3d + rjmp Sbox_one_column +load_columne: + mov x3d, x3j + mov x3j, x3e + rjmp Sbox_one_column +load_columnf: + mov x3e, x3j + mov x3j, x3f + rjmp Sbox_one_column + +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) +LFSR_table: + rjmp LFSR7 + rjmp LFSR8 +LFSR7: + LFSR7_MACRO + rjmp LFSR_DONE +LFSR8: + LFSR8_MACRO + rjmp LFSR_DONE +#endif + +;;;;;;;;;;;;;;;;;;;;;;;; Real Start +AddRC_SubColumns_Start: + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + clr ccnt + ld x0j, Y + eor x0j, rc + +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) + ldi ZL, pm_lo8(LFSR_table) + ldi ZH, pm_hi8(LFSR_table) + sbrc AEDH, 2 ; AEDH[2] = 0 for AEAD and AEDH[1] = 1 for HASH + adiw ZL, 1 + ijmp +LFSR_DONE: +#elif defined(CRYPTO_AEAD) + LFSR7_MACRO ; only AEAD +#else + LFSR8_MACRO ; only HASH +#endif + + ldd x1j, Y + ROW_INBYTES + ldd x2j, Y + 2 * ROW_INBYTES + ldd t2j, Y + 2 * ROW_INBYTES + 1 + ldi ZL, pm_lo8(load_columns_table) + ldi ZH, pm_hi8(load_columns_table) + ijmp +Sbox_one_column: + Sbox x0j, x1j, x2j, x3j + + ; f e d c b a 9 8 7 6 5 4 3 2 1 0 + ; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- x- 0 + ; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- x' 0 + ; -- -- -- -- -- -- -- -- -- -- -- -- -- x- -- -- 2 + ; -- -- -- -- -- -- -- -- -- -- -- -- x' -- -- -- 3 + ; c b a 9 8 7 6 5 4 3 2 1 0 f e d + ; Store a byte to Row 0 + st Y, x0j + ; Store a byte combined with ShiftRow1 + lsl t1j + mov t1j, x1j ; back up the last updated byte in t1j, to be used in shiftRow1 (1 bit left) + rol x1j + std Y + ROW_INBYTES, x1j + ; Store a byte combined with ShiftRow2 + inc ccnt + cpi ccnt, ROW_INBYTES - 1 + brsh ROW2_WRAP + ldd tmp0, Y + 2 * ROW_INBYTES + 2 ; load next byte, the last updated byte needed to be shifted to the address of the next bytes + std Y + 2 * ROW_INBYTES + 2, x2j + mov x2j, t2j + mov t2j, tmp0 + jmp NO_ROW2_WRAP +ROW2_WRAP: + std Y + ROW_INBYTES + 2, x2j + mov x2j, t2j + + ; remain ShiftRow3 to be done at 'amend_shiftRow' +NO_ROW2_WRAP: + adiw YL, 1 + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + + adiw ZL, 1 + ijmp + +amend_shiftRow: + ldi YH, hi8(SRAM_STATE + ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + ROW_INBYTES) + + ld x1j, Y + bst t1j, 7 + bld x1j, 0 + st Y, x1j + + ; <<< 1 + mov x3f, x3j + rol x3j + rol x30 + rol x31 + rol x32 + rol x33 + rol x34 + rol x35 + rol x36 + rol x37 + rol x38 + rol x39 + rol x3a + rol x3b + rol x3c + rol x3d + rol x3e + rol x3f + ; <<< 24 + ; f e d c b a 9 8 7 6 5 4 3 2 1 0 => + ; c b a 9 8 7 6 5 4 3 2 1 0 f e d + mov x3j, x30 + mov x30, x3d + mov x3d, x3a + mov x3a, x37 + mov x37, x34 + mov x34, x31 + mov x31, x3e + mov x3e, x3b + mov x3b, x38 + mov x38, x35 + mov x35, x32 + mov x32, x3f + mov x3f, x3c + mov x3c, x39 + mov x39, x36 + mov x36, x33 + mov x33, x3j + + dec rcnt + breq round_loop_end + rjmp round_loop_start + +round_loop_end: + + ldi YH, hi8(SRAM_STATE + 3 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 3 * ROW_INBYTES) + st Y+, x30 + st Y+, x31 + st Y+, x32 + st Y+, x33 + st Y+, x34 + st Y+, x35 + st Y+, x36 + st Y+, x37 + st Y+, x38 + st Y+, x39 + st Y+, x3a + st Y+, x3b + st Y+, x3c + st Y+, x3d + st Y+, x3e + st Y+, x3f + + POP_CONFLICT +ret \ No newline at end of file diff --git a/knot/Implementations/crypto_aead/knot128v1/avr8_lowrom/permutation.h b/knot/Implementations/crypto_aead/knot128v1/avr8_lowrom/permutation.h new file mode 100644 index 0000000..a57c5d3 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot128v1/avr8_lowrom/permutation.h @@ -0,0 +1,109 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by KNOT Team * +; ********************************************** +; + +; +; ============================================ +; R E G I S T E R D E F I N I T I O N S +; ============================================ +; + +#define mclen r16 +#define radlen r17 +#define tcnt r17 +#define tmp0 r20 +#define tmp1 r21 +#define cnt0 r22 +#define rn r23 +#define rate r24 + +; +; ; AEDH = 0b000: for authenticate AD +; ; AEDH = 0b001: for encryption +; ; AEDH = 0b011: for decryption +; ; AEDH = 0b100: for hash +; #define AEDH r25 ; Register used globally within this program +; +; #define x30 r0 ; Register used without overlapping +; #define x31 r1 ; Register used without overlapping +; #define x32 r2 ; Register used without overlapping +; #define x33 r3 ; Register used without overlapping +; #define x34 r4 ; Register used without overlapping +; #define x35 r5 ; Register used without overlapping +; #define x36 r6 ; Register used without overlapping +; #define x37 r7 ; Register used without overlapping +; #define x38 r8 ; Register used without overlapping +; #define x39 r9 ; Register used without overlapping +; #define x3a r10 ; Register used without overlapping +; #define x3b r11 ; Register used without overlapping +; #define x3c r12 ; Register used without overlapping +; #define x3d r13 ; Register used without overlapping +; #define x3e r14 ; Register used without overlapping +; #define x3f r15 ; Register used without overlapping +; +; #define x0j r16 ; Register used overlapped, should be backed up before using +; #define x1j r17 ; Register used overlapped, should be backed up before using +; #define x2j r18 ; Register used overlapped, should be backed up before using +; #define x3j r19 ; Register used overlapped, should be backed up before using +; +; ; t2j used in knot512 to keep one byte in Row2 (because of rotating 16-bit), +; ; will not be interupt with LFSR which uses the overlapped register tmp1 +; #define t2j r21 ; Temporary register, used freely +; #define t1j r22 ; Temporary register, used freely +; #define t3j r23 ; Temporary register, used freely +; +; #define rc r24 ; Register used overlapped, should be backed up before using +; #define rcnt r26 ; Register used overlapped, should be backed up before using +; #define ccnt r27 ; Register used overlapped, should be backed up before using + +#define AEDH r25 +#define x30 r0 +#define x31 r1 +#define x32 r2 +#define x33 r3 +#define x34 r4 +#define x35 r5 +#define x36 r6 +#define x37 r7 +#define x38 r8 +#define x39 r9 +#define x3a r10 +#define x3b r11 +#define x3c r12 +#define x3d r13 +#define x3e r14 +#define x3f r15 + +#define x0j r16 +#define x1j r17 +#define x2j r18 +#define x3j r19 + +; t2j used in knot512 to keep one byte in Row2 (because of rotating 16-bit), +; will not be interupt with LFSR which uses the overlapped register tmp1 +#define t2j r21 +#define t1j r22 +#define t3j r23 + +#define rc r24 +#define rcnt r26 +#define ccnt r27 + +#if (STATE_INBITS==256) +#include "knot256.h" +#elif (STATE_INBITS==384) +#include "knot384.h" +#elif (STATE_INBITS==512) +#include "knot512.h" +#else +#error "Not specified key size and state size" +#endif + + diff --git a/knot/Implementations/crypto_aead/knot128v1/avr8_speed/api.h b/knot/Implementations/crypto_aead/knot128v1/avr8_speed/api.h new file mode 100644 index 0000000..51fc844 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot128v1/avr8_speed/api.h @@ -0,0 +1,5 @@ +#define CRYPTO_KEYBYTES 16 +#define CRYPTO_NSECBYTES 0 +#define CRYPTO_NPUBBYTES 16 +#define CRYPTO_ABYTES 16 +#define CRYPTO_NOOVERLAP 1 \ No newline at end of file diff --git a/knot/Implementations/crypto_aead/knot128v1/avr8_speed/assist.h b/knot/Implementations/crypto_aead/knot128v1/avr8_speed/assist.h new file mode 100644 index 0000000..f95a717 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot128v1/avr8_speed/assist.h @@ -0,0 +1,86 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.1 2020 by KNOT Team * +; ********************************************** +; +.macro PUSH_CONFLICT + push r16 + push r17 + push r18 + push r19 + + push r23 + push r24 + push r25 + push r26 + push r27 + push r28 + push r29 + push r30 + push r31 +.endm + +.macro POP_CONFLICT + pop r31 + pop r30 + pop r29 + pop r28 + pop r27 + pop r26 + pop r25 + pop r24 + pop r23 + + pop r19 + pop r18 + pop r17 + pop r16 +.endm + +.macro PUSH_ALL + push r2 + push r3 + push r4 + push r5 + push r6 + push r7 + push r8 + push r9 + push r10 + push r11 + push r12 + push r13 + push r14 + push r15 + push r16 + push r17 + push r28 + push r29 +.endm + +.macro POP_ALL + pop r29 + pop r28 + pop r17 + pop r16 + pop r15 + pop r14 + pop r13 + pop r12 + pop r11 + pop r10 + pop r9 + pop r8 + pop r7 + pop r6 + pop r5 + pop r4 + pop r3 + pop r2 + clr r1 +.endm \ No newline at end of file diff --git a/knot/Implementations/crypto_aead/knot128v1/avr8_speed/config.h b/knot/Implementations/crypto_aead/knot128v1/avr8_speed/config.h new file mode 100644 index 0000000..41d8080 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot128v1/avr8_speed/config.h @@ -0,0 +1,131 @@ +#ifndef __CONFIG_H__ +#define __CONFIG_H__ + +#define CRYPTO_AEAD +//#define CRYPTO_HASH + +#define MAX_MESSAGE_LENGTH 128 + +#define STATE_INBITS 256 +/* For CRYPTO_AEAD */ +#define CRYPTO_KEYBITS 128 +/* For CRYPTO_HASH */ +#define CRYPTO_BITS 256 + +#define STATE_INBYTES ((STATE_INBITS + 7) / 8) +#define ROW_INBITS ((STATE_INBITS + 3) / 4) +#define ROW_INBYTES ((ROW_INBITS + 7) / 8) + +/* For CRYPTO_AEAD */ +#define CRYPTO_KEYBYTES ((CRYPTO_KEYBITS + 7) / 8) +#define CRYPTO_NSECBYTES 0 +#define CRYPTO_NPUBBYTES CRYPTO_KEYBYTES +#define CRYPTO_ABYTES CRYPTO_KEYBYTES +#define CRYPTO_NOOVERLAP 1 + +#define MAX_ASSOCIATED_DATA_LENGTH 32 +#define MAX_CIPHER_LENGTH (MAX_MESSAGE_LENGTH + CRYPTO_ABYTES) + +#define TAG_MATCH 0 +#define TAG_UNMATCH -1 +#define OTHER_FAILURES -2 + +/* For CRYPTO_HASH */ +#define CRYPTO_BYTES ((CRYPTO_BITS + 7) / 8) + + + +#define DOMAIN_BITS 0x80 +#define PAD_BITS 0x01 +#define S384_R192_BITS 0x80 + +#if (STATE_INBITS==256) +#define C1 1 +#define C2 8 +#define C3 25 +#elif (STATE_INBITS==384) +#define C1 1 +#define C2 8 +#define C3 55 +#elif (STATE_INBITS==512) +#define C1 1 +#define C2 16 +#define C3 25 +#else +#error "Not specified state size" +#endif + +#ifdef CRYPTO_AEAD +/* For CRYPTO_AEAD */ +#define KEY_INBITS (CRYPTO_KEYBYTES * 8) +#define KEY_INBYTES (CRYPTO_KEYBYTES) + +#define NONCE_INBITS (CRYPTO_NPUBBYTES * 8) +#define NONCE_INBYTES (CRYPTO_NPUBBYTES) + +#define TAG_INBITS (CRYPTO_ABYTES * 8) +#define TAG_INBYTES (CRYPTO_ABYTES) + +#if (KEY_INBITS==128) && (STATE_INBITS==256) +#define RATE_INBITS 64 +#define NR_0 52 +#define NR_i 28 +#define NR_f 32 +#elif (KEY_INBITS==128) && (STATE_INBITS==384) +#define RATE_INBITS 192 +#define NR_0 76 +#define NR_i 28 +#define NR_f 32 +#elif (KEY_INBITS==192) && (STATE_INBITS==384) +#define RATE_INBITS 96 +#define NR_0 76 +#define NR_i 40 +#define NR_f 44 +#elif (KEY_INBITS==256) && (STATE_INBITS==512) +#define RATE_INBITS 128 +#define NR_0 100 +#define NR_i 52 +#define NR_f 56 +#else +#error "Not specified key size and state size" +#endif + +#define RATE_INBYTES ((RATE_INBITS + 7) / 8) +#define SQUEEZE_RATE_INBYTES TAG_INBYTES + +#endif + +#ifdef CRYPTO_HASH +/* For CRYPTO_HASH */ +#define HASH_DIGEST_INBITS (CRYPTO_BYTES * 8) + +#if (HASH_DIGEST_INBITS==256) && (STATE_INBITS==256) +#define HASH_RATE_INBITS 32 +#define HASH_SQUEEZE_RATE_INBITS 128 +#define NR_h 68 +#elif (HASH_DIGEST_INBITS==256) && (STATE_INBITS==384) +#define HASH_RATE_INBITS 128 +#define HASH_SQUEEZE_RATE_INBITS 128 +#define NR_h 80 +#elif (HASH_DIGEST_INBITS==384) && (STATE_INBITS==384) +#define HASH_RATE_INBITS 48 +#define HASH_SQUEEZE_RATE_INBITS 192 +#define NR_h 104 +#elif (HASH_DIGEST_INBITS==512) && (STATE_INBITS==512) +#define HASH_RATE_INBITS 64 +#define HASH_SQUEEZE_RATE_INBITS 256 +#define NR_h 140 +#else +#error "Not specified hash digest size and state size" +#endif + +#define HASH_RATE_INBYTES ((HASH_RATE_INBITS + 7) / 8) +#define HASH_SQUEEZE_RATE_INBYTES ((HASH_SQUEEZE_RATE_INBITS + 7) / 8) + +#endif + +#define TAG_MATCH 0 +#define TAG_UNMATCH -1 +#define OTHER_FAILURES -2 + +#endif \ No newline at end of file diff --git a/knot/Implementations/crypto_aead/knot128v1/avr8_speed/crypto_aead.h b/knot/Implementations/crypto_aead/knot128v1/avr8_speed/crypto_aead.h new file mode 100644 index 0000000..cd820d3 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot128v1/avr8_speed/crypto_aead.h @@ -0,0 +1,26 @@ +#ifdef __cplusplus +extern "C" { +#endif + +int crypto_aead_encrypt( + unsigned char *c,unsigned long long *clen, + const unsigned char *m,unsigned long long mlen, + const unsigned char *ad,unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k + ); + + +int crypto_aead_decrypt( + unsigned char *m,unsigned long long *outputmlen, + unsigned char *nsec, + const unsigned char *c,unsigned long long clen, + const unsigned char *ad,unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k + ); + +#ifdef __cplusplus +} +#endif diff --git a/knot/Implementations/crypto_aead/knot128v1/avr8_speed/encrypt.c b/knot/Implementations/crypto_aead/knot128v1/avr8_speed/encrypt.c new file mode 100644 index 0000000..baf0a3b --- /dev/null +++ b/knot/Implementations/crypto_aead/knot128v1/avr8_speed/encrypt.c @@ -0,0 +1,106 @@ +#include +#include +#include +#include +#include "config.h" + +extern void crypto_aead_encrypt_asm( + unsigned char *c, + const unsigned char *m, + unsigned char mlen, + const unsigned char *ad, + unsigned char adlen, + const unsigned char *npub, + const unsigned char *k + ); + +extern int crypto_aead_decrypt_asm( + unsigned char *m, + const unsigned char *c, + unsigned char clen, + const unsigned char *ad, + unsigned char adlen, + const unsigned char *npub, + const unsigned char *k + ); + +extern void crypto_hash_asm( + unsigned char *out, + const unsigned char *in, + unsigned char inlen + ); + + +int crypto_aead_encrypt( + unsigned char *c, unsigned long long *clen, + const unsigned char *m, unsigned long long mlen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k + ) +{ + /* + ... + ... the code for the cipher implementation goes here, + ... generating a ciphertext c[0],c[1],...,c[*clen-1] + ... from a plaintext m[0],m[1],...,m[mlen-1] + ... and associated data ad[0],ad[1],...,ad[adlen-1] + ... and nonce npub[0],npub[1],.. + ... and secret key k[0],k[1],... + ... the implementation shall not use nsec + ... + ... return 0; + */ + + (void)nsec; + + crypto_aead_encrypt_asm(c, m, mlen, ad, adlen, npub, k); + + *clen = mlen + TAG_INBYTES; + return 0; +} + + + +int crypto_aead_decrypt( + unsigned char *m, unsigned long long *mlen, + unsigned char *nsec, + const unsigned char *c, unsigned long long clen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k + ) +{ + /* + ... + ... the code for the AEAD implementation goes here, + ... generating a plaintext m[0],m[1],...,m[*mlen-1] + ... and secret message number nsec[0],nsec[1],... + ... from a ciphertext c[0],c[1],...,c[clen-1] + ... and associated data ad[0],ad[1],...,ad[adlen-1] + ... and nonce number npub[0],npub[1],... + ... and secret key k[0],k[1],... + ... + ... return 0; + */ + unsigned long long mlen_; + unsigned char tag_is_match; + + (void)nsec; + if (clen < CRYPTO_ABYTES) { + return -1; + } + mlen_ = clen - CRYPTO_ABYTES; + + tag_is_match = crypto_aead_decrypt_asm(m, c, mlen_, ad, adlen, npub, k); + + if (tag_is_match != 0) + { + memset(m, 0, (size_t)mlen_); + return -1; + } + + *mlen = mlen_; + return 0; +} \ No newline at end of file diff --git a/knot/Implementations/crypto_aead/knot128v1/avr8_speed/encrypt_core.S b/knot/Implementations/crypto_aead/knot128v1/avr8_speed/encrypt_core.S new file mode 100644 index 0000000..bd74f93 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot128v1/avr8_speed/encrypt_core.S @@ -0,0 +1,555 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.1 2020 by KNOT Team * +; ********************************************** +; + +; +; ============================================ +; S R A M D E F I N I T I O N S +; ============================================ +; +#include +#include "config.h" + +.section .noinit + SRAM_STATE: .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#if (STATE_INBYTES > 32) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif +#if (STATE_INBYTES > 48) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif + SRAM_MESSAGE_OUT_ADDR: .BYTE 0, 0 + SRAM_MESSAGE_IN_ADDR: .BYTE 0, 0 + SRAM_MESSAGE_IN_LEN: .BYTE 0, 0 +#ifdef CRYPTO_AEAD +; For CRYPTO_AEAD + SRAM_ASSOCIATED_DATA_ADDR: .BYTE 0, 0 + SRAM_ADLEN: .BYTE 0, 0 + SRAM_NONCE_ADDR: .BYTE 0, 0 + SRAM_KEY_ADDR: .BYTE 0, 0 + + SRAM_ADDITIONAL: + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#if (CRYPTO_ABYTES > 16) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif +#if (CRYPTO_ABYTES > 24) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif + +#endif + +.section .text + +#include "permutation.h" + +; require YH:YL be the address of the current associated data/cipher/message block +; for enc and dec, store ciphertext or plaintext +; require ZH:ZL be the address of the current cipher/message block +.macro XOR_to_State_ENCDEC + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + mov cnt0, rate +XOR_to_State_loop_ENCDEC: + ld tmp0, Y+ ; plaintext/ciphertext + ld tmp1, X ; state + eor tmp1, tmp0 ; ciphertext/plaintext + st Z+, tmp1 ; store ciphertext/plaintext + sbrc AEDH, 1 ; test auth/enc or dec, if AEDH[1] == 0, skip repalce state byte + mov tmp1, tmp0 ; if dec, replace state + st X+, tmp1 ; store state byte + dec cnt0 + brne XOR_to_State_loop_ENCDEC +; YH:YL are now the address of the next associated data block +.endm + +; require YH:YL be the address of the current associated data/cipher/message block +; for enc and dec, store ciphertext or plaintext +; require ZH:ZL be the address of the current cipher/message block +.macro XOR_to_State_AUTH + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + mov cnt0, rate +XOR_to_State_loop_AUTH: + ld tmp0, Y+ ; plaintext/ciphertext + ld tmp1, X ; state + eor tmp1, tmp0 ; ciphertext/plaintext + st X+, tmp1 ; store state byte + dec cnt0 + brne XOR_to_State_loop_AUTH +; YH:YL are now the address of the next associated data block +.endm + + + +; require YH:YL pointed to the input data +; require ZH:ZL pointed to the output data +; require cnt0 containes the nubmer of bytes in source data +; require number of bytes in source data less than rate, i.e., 0 <= cnt0 < rate +; +; the 0th bit in AEDH is used to distinguish (auth AD) or (enc/dec M/C): +; AEDH[0] = 0 for (auth AD), AEDH[0] = 1 for (enc/dec M/C) +; the 1th bit in AEDH is used to distinguish (auth AD/enc M) or (dec C): +; AEDH[1] = 0 for (auth AD/enc M), AEDH[1] = 1 for (dec C) +; AEDH = 0b000 for (auth AD) +; AEDH = 0b001 for (enc M) +; AEDH = 0b011 for (dec C) +Pad_XOR_to_State: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + tst cnt0 + breq XOR_padded_data +XOR_source_data_loop: + ld tmp0, Y+ ; plaintext/ciphertext + ld tmp1, X ; state + eor tmp1, tmp0 ; ciphertext/plaintext + sbrc AEDH, 0 ; test auth or enc/dec, if AEDH[0] == 0, skip store result + st Z+, tmp1 ; store ciphertext/plaintext + sbrc AEDH, 1 ; test auth/enc or dec, if AEDH[1] == 0, skip repalce state byte + mov tmp1, tmp0 ; if dec, replace state + st X+, tmp1 ; store state byte + dec cnt0 + brne XOR_source_data_loop +XOR_padded_data: + ldi tmp0, PAD_BITS + ld tmp1, X + eor tmp1, tmp0 + st X, tmp1 +ret + +AddDomain: + ldi XH, hi8(SRAM_STATE + STATE_INBYTES - 1) + ldi XL, lo8(SRAM_STATE + STATE_INBYTES - 1) + ldi tmp0, DOMAIN_BITS + ld tmp1, X + eor tmp0, tmp1 + st X, tmp0 +ret + +; require ZH:ZL be the address of the destination +EXTRACT_from_State: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + mov tmp1, rate +EXTRACT_from_State_loop: + ld tmp0, X+ + st Z+, tmp0 + dec tmp1 + brne EXTRACT_from_State_loop +ret + +AUTH: + tst radlen + breq AUTH_end + + cp radlen, rate + brlo auth_ad_padded_block + +auth_ad_loop: + XOR_to_State_AUTH + rcall Permutation + sub radlen, rate + cp radlen, rate + brlo auth_ad_padded_block + rjmp auth_ad_loop + +auth_ad_padded_block: + mov cnt0, radlen + rcall Pad_XOR_to_State + rcall Permutation + +AUTH_end: +ret + +#ifdef CRYPTO_AEAD +Initialization: + ldi rn, NR_0 + ldi XL, lo8(SRAM_STATE) + ldi XH, hi8(SRAM_STATE) + + lds YH, SRAM_NONCE_ADDR + lds YL, SRAM_NONCE_ADDR + 1 + ldi cnt0, CRYPTO_NPUBBYTES +load_nonce_loop: + ld tmp0, Y+ + st X+, tmp0 + dec cnt0 + brne load_nonce_loop + + lds YH, SRAM_KEY_ADDR + lds YL, SRAM_KEY_ADDR + 1 + ldi cnt0, CRYPTO_KEYBYTES +load_key_loop: + ld tmp0, Y+ + st X+, tmp0 + dec cnt0 + brne load_key_loop + +#if (STATE_INBITS==384) && (RATE_INBITS==192) + ldi cnt0, (STATE_INBYTES - CRYPTO_NPUBBYTES - CRYPTO_KEYBYTES - 1) + clr tmp0 +empty_state_loop: + st X+, tmp0 + dec cnt0 + brne empty_state_loop + ldi tmp0, S384_R192_BITS + st X+, tmp0 +#endif + + rcall Permutation +ret + +ENC: + tst mclen + breq ENC_end + + cp mclen, rate + brlo enc_padded_block + +enc_loop: + XOR_to_State_ENCDEC + ldi rn, NR_i + rcall Permutation + sub mclen, rate + cp mclen, rate + brlo enc_padded_block + rjmp enc_loop + +enc_padded_block: + mov cnt0, mclen + rcall Pad_XOR_to_State +ENC_end: +ret + +Finalization: + ldi rate, SQUEEZE_RATE_INBYTES + ldi rn, NR_f + rcall Permutation + rcall EXTRACT_from_State +ret + +; void crypto_aead_encrypt_asm( +; unsigned char *c, +; const unsigned char *m, +; unsigned long long mlen, +; const unsigned char *ad, +; unsigned long long adlen, +; const unsigned char *npub, +; const unsigned char *k +; ) +; +; unsigned char *c, is passed in r24:r25 +; const unsigned char *m, is passed in r22:r23 +; unsigned long long mlen, is passed in r20:r21, only LSB (r20) is used +; const unsigned char *ad, is passed in r18:r19 +; unsigned long long adlen, is passed in r16:r17, only LSB (r16) is used +; const unsigned char *npub, is passed in r14:r15 +; const unsigned char *k is passed in r12:r13 +.global crypto_aead_encrypt_asm +crypto_aead_encrypt_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store cipher address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store message address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store message length in SRAM_MESSAGE_IN_LEN + st X+, r20 + st X+, r19 ;store associated data address in SRAM_ASSOCIATED_DATA_ADDR + st X+, r18 + st X+, r17 ;store associated data length in SRAM_ADLEN + st X+, r16 + st X+, r15 ;store nonce address in SRAM_NONCE_ADDR + st X+, r14 + st X+, r13 ;store key address in SRAM_KEY_ADDR + st X+, r12 + mov radlen, r16 + mov mclen, r20 + + rcall Initialization + + ldi rn, NR_i + ldi rate, RATE_INBYTES + ldi AEDH, 0b000 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_ASSOCIATED_DATA_ADDR + lds YL, SRAM_ASSOCIATED_DATA_ADDR + 1 + rcall AUTH + rcall AddDomain + ldi AEDH, 0b001 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_MESSAGE_IN_ADDR + lds YL, SRAM_MESSAGE_IN_ADDR + 1 + lds ZH, SRAM_MESSAGE_OUT_ADDR + lds ZL, SRAM_MESSAGE_OUT_ADDR + 1 + rcall ENC + rcall Finalization + POP_ALL +ret + +; int crypto_aead_decrypt_asm( +; unsigned char *m, +; const unsigned char *c, +; unsigned long long clen, +; const unsigned char *ad, +; unsigned long long adlen, +; const unsigned char *npub, +; const unsigned char *k +; ) +; +; unsigned char *m, is passed in r24:r25 +; const unsigned char *c, is passed in r22:r23 +; unsigned long long clen, is passed in r20:r21, only LSB (r20) is used +; const unsigned char *ad, is passed in r18:r19 +; unsigned long long adlen, is passed in r16:r17, only LSB (r16) is used +; const unsigned char *npub, is passed in r14:r15 +; const unsigned char *k is passed in r12:r13 +.global crypto_aead_decrypt_asm +crypto_aead_decrypt_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store message address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store cipher address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store cipher length in SRAM_MESSAGE_IN_LEN + st X+, r20 + st X+, r19 ;store associated data address in SRAM_ASSOCIATED_DATA_ADDR + st X+, r18 + st X+, r17 ;store associated data length in SRAM_ADLEN + st X+, r16 + st X+, r15 ;store nonce address in SRAM_NONCE_ADDR + st X+, r14 + st X+, r13 ;store key address in SRAM_KEY_ADDR + st X+, r12 + mov radlen, r16 + mov mclen, r20 + + rcall Initialization + + ldi rn, NR_i + ldi rate, RATE_INBYTES + ldi AEDH, 0b000 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_ASSOCIATED_DATA_ADDR + lds YL, SRAM_ASSOCIATED_DATA_ADDR + 1 + rcall AUTH + rcall AddDomain + ldi AEDH, 0b011 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_MESSAGE_IN_ADDR + lds YL, SRAM_MESSAGE_IN_ADDR + 1 + lds ZH, SRAM_MESSAGE_OUT_ADDR + lds ZL, SRAM_MESSAGE_OUT_ADDR + 1 + rcall ENC + + ldi ZH, hi8(SRAM_ADDITIONAL) + ldi ZL, lo8(SRAM_ADDITIONAL) + rcall Finalization + + sbiw ZL, CRYPTO_ABYTES + ldi cnt0, CRYPTO_ABYTES +compare_tag: + ld tmp0, Z+ + ld tmp1, Y+ + cp tmp0, tmp1 + brne return_tag_not_match + dec cnt0 + brne compare_tag + rjmp return_tag_match + +return_tag_not_match: + ldi r25, 0xFF + ldi r24, 0xFF + rjmp crypto_aead_decrypt_end + +return_tag_match: + clr r25 + clr r24 +crypto_aead_decrypt_end: + POP_ALL +ret + +; #ifdef CRYPTO_AEAD +#endif + + +#ifdef CRYPTO_HASH + +; void crypto_hash_asm( +; unsigned char *out, +; const unsigned char *in, +; unsigned long long inlen +; ) +; +; unsigned char *out, is passed in r24:r25 +; const unsigned char *in, is passed in r22:r23 +; unsigned long long inlen, is passed in r20:r21, only LSB (r20) is used +.global crypto_hash_asm +crypto_hash_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store message address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store cipher address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store cipher length in SRAM_MESSAGE_IN_LEN + st X+, r20 + mov mclen, r20 + + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) +#if (STATE_INBITS==384) && (HASH_RATE_INBITS==128) + ldi cnt0, STATE_INBYTES - 1 +#else + ldi cnt0, STATE_INBYTES +#endif + clr tmp0 +zero_state: + st X+, tmp0 + dec cnt0 + brne zero_state + +#if (STATE_INBITS==384) && (HASH_RATE_INBITS==128) + ldi tmp0, S384_R192_BITS + st X+, tmp0 +#endif + + ldi rn, NR_h + ldi AEDH, 0b100 + +HASH_ABSORBING: + mov radlen, mclen + tst radlen + breq EMPTY_M + ldi rate, HASH_RATE_INBYTES + lds YH, SRAM_MESSAGE_IN_ADDR + lds YL, SRAM_MESSAGE_IN_ADDR + 1 + rcall AUTH + rjmp HASH_SQUEEZING + +EMPTY_M: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + ldi tmp0, PAD_BITS + ld tmp1, X + eor tmp1, tmp0 + st X, tmp1 + rcall Permutation + +HASH_SQUEEZING: + ldi rate, HASH_SQUEEZE_RATE_INBYTES + lds ZH, SRAM_MESSAGE_OUT_ADDR + lds ZL, SRAM_MESSAGE_OUT_ADDR + 1 + ldi tcnt, CRYPTO_BYTES +SQUEEZING_loop: + rcall EXTRACT_from_State + subi tcnt, HASH_SQUEEZE_RATE_INBYTES + breq HASH_SQUEEZING_end + rcall Permutation + rjmp SQUEEZING_loop +HASH_SQUEEZING_end: + POP_ALL +ret + +#endif + + +; Byte Order In AVR 8: +; KNOT-AEAD(128, 256, 64): +; N[ 0] AEAD_State[ 0] | Message[ 0] Perm_row_0[0] 0 Tag[ 0] +; N[ 1] AEAD_State[ 1] | Message[ 1] Perm_row_0[1] 0 Tag[ 1] +; N[ 2] AEAD_State[ 2] | Message[ 2] Perm_row_0[2] 0 Tag[ 2] +; N[ 3] AEAD_State[ 3] | Message[ 3] Perm_row_0[3] 0 Tag[ 3] +; N[ 4] AEAD_State[ 4] | Message[ 4] 0x01 Perm_row_0[4] 0 Tag[ 4] +; N[ 5] AEAD_State[ 5] | Message[ 5] 0x00 Perm_row_0[5] 0 Tag[ 5] +; N[ 6] AEAD_State[ 6] | Message[ 6] 0x00 Perm_row_0[6] 0 Tag[ 6] +; N[ 7] AEAD_State[ 7] | Message[ 7] 0x00 Perm_row_0[7] <<< 0 Tag[ 7] +; N[ 8] AEAD_State[ 8] | Perm_row_1[0] 1 +; N[ 9] AEAD_State[ 9] | Perm_row_1[1] 1 +; N[10] AEAD_State[10] | Perm_row_1[2] 1 +; N[11] AEAD_State[11] | Perm_row_1[3] 1 +; N[12] AEAD_State[12] | Perm_row_1[4] 1 +; N[13] AEAD_State[13] | Perm_row_1[5] 1 +; N[14] AEAD_State[14] | Perm_row_1[6] 1 +; N[15] AEAD_State[15] | Perm_row_1[7] <<< 1 +; K[ 0] AEAD_State[16] | Perm_row_2[0] 8 +; K[ 1] AEAD_State[17] | Perm_row_2[1] 8 +; K[ 2] AEAD_State[18] | Perm_row_2[2] 8 +; K[ 3] AEAD_State[19] | Perm_row_2[3] 8 +; K[ 4] AEAD_State[20] | Perm_row_2[4] 8 +; K[ 5] AEAD_State[21] | Perm_row_2[5] 8 +; K[ 6] AEAD_State[22] | Perm_row_2[6] 8 +; K[ 7] AEAD_State[23] | Perm_row_2[7] <<< 8 +; K[ 8] AEAD_State[24] | Perm_row_3[0] 25 +; K[ 9] AEAD_State[25] | Perm_row_3[1] 25 +; K[10] AEAD_State[26] | Perm_row_3[2] 25 +; K[11] AEAD_State[27] | Perm_row_3[3] 25 +; K[12] AEAD_State[28] | Perm_row_3[4] 25 +; K[13] AEAD_State[29] | Perm_row_3[5] 25 +; K[14] AEAD_State[30] | Perm_row_3[6] 25 +; K[15] AEAD_State[31] | ^0x80 Perm_row_3[7] <<< 25 +; +; +; KNOT-AEAD(128, 384, 192): +; Initalization +; N[ 0] AEAD_State[ 0] | Message[ 0] Perm_row_0[ 0] 0 Tag[ 0] +; N[ 1] AEAD_State[ 1] | Message[ 1] Perm_row_0[ 1] 0 Tag[ 1] +; N[ 2] AEAD_State[ 2] | Message[ 2] Perm_row_0[ 2] 0 Tag[ 2] +; N[ 3] AEAD_State[ 3] | Message[ 3] Perm_row_0[ 3] 0 Tag[ 3] +; N[ 4] AEAD_State[ 4] | Message[ 4] 0x01 Perm_row_0[ 4] 0 Tag[ 4] +; N[ 5] AEAD_State[ 5] | Message[ 5] 0x00 Perm_row_0[ 5] 0 Tag[ 5] +; N[ 6] AEAD_State[ 6] | Message[ 6] 0x00 Perm_row_0[ 6] 0 Tag[ 6] +; N[ 7] AEAD_State[ 7] | Message[ 7] 0x00 Perm_row_0[ 7] 0 Tag[ 7] +; N[ 8] AEAD_State[ 8] | Message[ 8] 0x00 Perm_row_0[ 8] 0 Tag[ 8] +; N[ 9] AEAD_State[ 9] | Message[ 9] 0x00 Perm_row_0[ 9] 0 Tag[ 9] +; N[10] AEAD_State[10] | Message[10] 0x00 Perm_row_0[10] 0 Tag[10] +; N[11] AEAD_State[11] | Message[11] 0x00 Perm_row_0[11] <<< 0 Tag[11] +; N[12] AEAD_State[12] | Message[12] 0x00 Perm_row_1[ 0] 1 Tag[12] +; N[13] AEAD_State[13] | Message[13] 0x00 Perm_row_1[ 1] 1 Tag[13] +; N[14] AEAD_State[14] | Message[14] 0x00 Perm_row_1[ 2] 1 Tag[14] +; N[15] AEAD_State[15] | Message[15] 0x00 Perm_row_1[ 3] 1 Tag[15] +; K[ 0] AEAD_State[16] | Message[16] 0x00 Perm_row_1[ 4] 1 +; K[ 1] AEAD_State[17] | Message[17] 0x00 Perm_row_1[ 5] 1 +; K[ 2] AEAD_State[18] | Message[18] 0x00 Perm_row_1[ 6] 1 +; K[ 3] AEAD_State[19] | Message[19] 0x00 Perm_row_1[ 7] 1 +; K[ 4] AEAD_State[20] | Message[20] 0x00 Perm_row_1[ 8] 1 +; K[ 5] AEAD_State[21] | Message[21] 0x00 Perm_row_1[ 9] 1 +; K[ 6] AEAD_State[22] | Message[22] 0x00 Perm_row_1[10] 1 +; K[ 7] AEAD_State[23] | Message[23] 0x00 Perm_row_1[11] <<< 1 +; K[ 8] AEAD_State[24] | Perm_row_2[ 0] 8 +; K[ 9] AEAD_State[25] | Perm_row_2[ 1] 8 +; K[10] AEAD_State[26] | Perm_row_2[ 2] 8 +; K[11] AEAD_State[27] | Perm_row_2[ 3] 8 +; K[12] AEAD_State[28] | Perm_row_2[ 4] 8 +; K[13] AEAD_State[29] | Perm_row_2[ 5] 8 +; K[14] AEAD_State[30] | Perm_row_2[ 6] 8 +; K[15] AEAD_State[31] | Perm_row_2[ 7] 8 +; 0x00 AEAD_State[32] | Perm_row_2[ 8] 8 +; 0x00 AEAD_State[33] | Perm_row_2[ 9] 8 +; 0x00 AEAD_State[34] | Perm_row_2[10] 8 +; 0x00 AEAD_State[35] | Perm_row_2[11] <<< 8 +; 0x00 AEAD_State[36] | Perm_row_3[ 0] 55 +; 0x00 AEAD_State[37] | Perm_row_3[ 1] 55 +; 0x00 AEAD_State[38] | Perm_row_3[ 2] 55 +; 0x00 AEAD_State[39] | Perm_row_3[ 3] 55 +; 0x00 AEAD_State[40] | Perm_row_3[ 4] 55 +; 0x00 AEAD_State[41] | Perm_row_3[ 5] 55 +; 0x00 AEAD_State[42] | Perm_row_3[ 6] 55 +; 0x00 AEAD_State[43] | Perm_row_3[ 7] 55 +; 0x00 AEAD_State[44] | Perm_row_3[ 8] 55 +; 0x00 AEAD_State[45] | Perm_row_3[ 9] 55 +; 0x00 AEAD_State[46] | Perm_row_3[10] 55 +; 0x00 ^0x80 AEAD_State[47] | ^0x80 Perm_row_3[11] <<< 55 diff --git a/knot/Implementations/crypto_aead/knot128v1/avr8_speed/knot256.h b/knot/Implementations/crypto_aead/knot128v1/avr8_speed/knot256.h new file mode 100644 index 0000000..f99f68b --- /dev/null +++ b/knot/Implementations/crypto_aead/knot128v1/avr8_speed/knot256.h @@ -0,0 +1,306 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.1 2020 by KNOT Team * +; ********************************************** +; +#define x10 r0 +#define x11 r1 +#define x12 r2 +#define x13 r3 +#define x14 r4 +#define x15 r5 +#define x16 r6 +#define x17 r7 + +; an intentionally arrangement of registers to facilitate movw +#define x20 r8 +#define x21 r10 +#define x22 r12 +#define x23 r14 +#define x24 r9 +#define x25 r11 +#define x26 r13 +#define x27 r15 + +; an intentionally arrangement of registers to facilitate movw +#define x30 r16 +#define x35 r18 +#define x32 r20 +#define x37 r22 +#define x34 r17 +#define x31 r19 +#define x36 r21 +#define x33 r23 + +#define t0j r24 +#define t1j r25 +#define x0j r27 + +#include "assist.h" + +.macro Sbox i0, i1, i2, i3 + mov t0j, \i1 + com \i0 + and \i1, \i0 + eor \i1, \i2 + or \i2, t0j + eor \i0, \i3 + eor \i2, \i0 + eor t0j, \i3 + and \i0, \i1 + eor \i3, \i1 + eor \i0, t0j + and t0j, \i2 + eor \i1, t0j +.endm + +Permutation: + PUSH_CONFLICT + mov rcnt, rn + + ldi YH, hi8(SRAM_STATE + ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + ROW_INBYTES) + ld x10, Y+ + ld x11, Y+ + ld x12, Y+ + ld x13, Y+ + ld x14, Y+ + ld x15, Y+ + ld x16, Y+ + ld x17, Y+ + ld x20, Y+ + ld x21, Y+ + ld x22, Y+ + ld x23, Y+ + ld x24, Y+ + ld x25, Y+ + ld x26, Y+ + ld x27, Y+ + ld x30, Y+ + ld x31, Y+ + ld x32, Y+ + ld x33, Y+ + ld x34, Y+ + ld x35, Y+ + ld x36, Y+ + ld x37, Y+ + +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) + sbrc AEDH, 2 ; AEDH[2] = 0 for AEAD and AEDH[2] = 1 for HASH + rjmp For_Hash +For_AEAD: + ldi ZL, lo8(RC_LFSR6) + ldi ZH, hi8(RC_LFSR6) + rjmp round_loop_start +For_Hash: + ldi ZL, lo8(RC_LFSR7) + ldi ZH, hi8(RC_LFSR7) +#elif defined(CRYPTO_AEAD) + ldi ZL, lo8(RC_LFSR6) + ldi ZH, hi8(RC_LFSR6) +#else + ldi ZL, lo8(RC_LFSR7) + ldi ZH, hi8(RC_LFSR7) +#endif + +round_loop_start: + ; AddRC + lpm t0j, Z+ + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + ld x0j, Y + eor x0j, t0j + + ; SubColumns + Sbox x0j, x10, x20, x30 + st Y+, x0j + ld x0j, Y + Sbox x0j, x11, x21, x31 + st Y+, x0j + ld x0j, Y + Sbox x0j, x12, x22, x32 + st Y+, x0j + ld x0j, Y + Sbox x0j, x13, x23, x33 + st Y+, x0j + ld x0j, Y + Sbox x0j, x14, x24, x34 + st Y+, x0j + ld x0j, Y + Sbox x0j, x15, x25, x35 + st Y+, x0j + ld x0j, Y + Sbox x0j, x16, x26, x36 + st Y+, x0j + ld x0j, Y + Sbox x0j, x17, x27, x37 + st Y, x0j + + ; ShiftRows + ; <<< 1 + mov t0j, x17 + rol t0j + rol x10 + rol x11 + rol x12 + rol x13 + rol x14 + rol x15 + rol x16 + rol x17 + + ; <<< 8 + ; 7 6 5 4 3 2 1 0 => 6 5 4 3 2 1 0 7 + ;mov t0j, x27 + ;mov x27, x26 + ;mov x26, x25 + ;mov x25, x24 + ;mov x24, x23 + ;mov x23, x22 + ;mov x22, x21 + ;mov x21, x20 + ;mov x20, t0j + ; an intentionally arrangement of registers to facilitate movw + movw t0j, x23 ; t1j:t0j <= x27:x23 + movw x23, x22 ; x27:x23 <= x26:x22 + movw x22, x21 ; x26:x22 <= x25:x21 + movw x21, x20 ; x25:x21 <= x24:x20 + mov x20, t1j ; x20 <= t1j + mov x24, t0j ; x24 <= t0j + + ; <<< 1 + mov t0j, x37 + rol t0j + rol x30 + rol x31 + rol x32 + rol x33 + rol x34 + rol x35 + rol x36 + rol x37 + ; <<< 24 + ; 7 6 5 4 3 2 1 0 => 4 3 2 1 0 7 6 5 + ;mov t0j, x30 + ;mov x30, x35 + ;mov x35, x32 + ;mov x32, x37 + ;mov x37, x34 + ;mov x34, x31 + ;mov x31, x36 + ;mov x36, x33 + ;mov x33, t0j + ; an intentionally arrangement of registers to facilitate movw + ;x30 r16 + ;x35 r18 + ;x32 r20 + ;x37 r22 + ;x34 r17 + ;x31 r19 + ;x36 r21 + ;x33 r23 + movw t0j, x30 ; t1j:t0j <= x34:x30 + movw x30, x35 ; x34:x30 <= x31:x35 + movw x35, x32 ; x31:x35 <= x36:x32 + movw x32, x37 ; x36:x32 <= x33:x37 + mov x37, t1j ; x37 <= x34 + mov x33, t0j ; x33 <= x30 + + dec rcnt + breq round_loop_end + jmp round_loop_start + +round_loop_end: + ldi YH, hi8(SRAM_STATE + ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + ROW_INBYTES) + st Y+, x10 + st Y+, x11 + st Y+, x12 + st Y+, x13 + st Y+, x14 + st Y+, x15 + st Y+, x16 + st Y+, x17 + st Y+, x20 + st Y+, x21 + st Y+, x22 + st Y+, x23 + st Y+, x24 + st Y+, x25 + st Y+, x26 + st Y+, x27 + st Y+, x30 + st Y+, x31 + st Y+, x32 + st Y+, x33 + st Y+, x34 + st Y+, x35 + st Y+, x36 + st Y+, x37 + + POP_CONFLICT +ret + + +.section .text +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) +RC_LFSR6: +.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x21, 0x03, 0x06 +.byte 0x0c, 0x18, 0x31, 0x22, 0x05, 0x0a, 0x14, 0x29 +.byte 0x13, 0x27, 0x0f, 0x1e, 0x3d, 0x3a, 0x34, 0x28 +.byte 0x11, 0x23, 0x07, 0x0e, 0x1c, 0x39, 0x32, 0x24 +.byte 0x09, 0x12, 0x25, 0x0b, 0x16, 0x2d, 0x1b, 0x37 +.byte 0x2e, 0x1d, 0x3b, 0x36, 0x2c, 0x19, 0x33, 0x26 +.byte 0x0d, 0x1a, 0x35, 0x2a, 0x15, 0x2b, 0x17, 0x2f +.byte 0x1f, 0x3f, 0x3e, 0x3c, 0x38, 0x30, 0x20, 0x00 +RC_LFSR7: +.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x41, 0x03 +.byte 0x06, 0x0c, 0x18, 0x30, 0x61, 0x42, 0x05, 0x0a +.byte 0x14, 0x28, 0x51, 0x23, 0x47, 0x0f, 0x1e, 0x3c +.byte 0x79, 0x72, 0x64, 0x48, 0x11, 0x22, 0x45, 0x0b +.byte 0x16, 0x2c, 0x59, 0x33, 0x67, 0x4e, 0x1d, 0x3a +.byte 0x75, 0x6a, 0x54, 0x29, 0x53, 0x27, 0x4f, 0x1f +.byte 0x3e, 0x7d, 0x7a, 0x74, 0x68, 0x50, 0x21, 0x43 +.byte 0x07, 0x0e, 0x1c, 0x38, 0x71, 0x62, 0x44, 0x09 +.byte 0x12, 0x24, 0x49, 0x13, 0x26, 0x4d, 0x1b, 0x36 +.byte 0x6d, 0x5a, 0x35, 0x6b, 0x56, 0x2d, 0x5b, 0x37 +.byte 0x6f, 0x5e, 0x3d, 0x7b, 0x76, 0x6c, 0x58, 0x31 +.byte 0x63, 0x46, 0x0d, 0x1a, 0x34, 0x69, 0x52, 0x25 +.byte 0x4b, 0x17, 0x2e, 0x5d, 0x3b, 0x77, 0x6e, 0x5c +.byte 0x39, 0x73, 0x66, 0x4c, 0x19, 0x32, 0x65, 0x4a +.byte 0x15, 0x2a, 0x55, 0x2b, 0x57, 0x2f, 0x5f, 0x3f +.byte 0x7f, 0x7e, 0x7c, 0x78, 0x70, 0x60, 0x40, 0x00 +#elif defined(CRYPTO_AEAD) +RC_LFSR6: +.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x21, 0x03, 0x06 +.byte 0x0c, 0x18, 0x31, 0x22, 0x05, 0x0a, 0x14, 0x29 +.byte 0x13, 0x27, 0x0f, 0x1e, 0x3d, 0x3a, 0x34, 0x28 +.byte 0x11, 0x23, 0x07, 0x0e, 0x1c, 0x39, 0x32, 0x24 +.byte 0x09, 0x12, 0x25, 0x0b, 0x16, 0x2d, 0x1b, 0x37 +.byte 0x2e, 0x1d, 0x3b, 0x36, 0x2c, 0x19, 0x33, 0x26 +.byte 0x0d, 0x1a, 0x35, 0x2a, 0x15, 0x2b, 0x17, 0x2f +.byte 0x1f, 0x3f, 0x3e, 0x3c, 0x38, 0x30, 0x20, 0x00 +#else +RC_LFSR7: +.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x41, 0x03 +.byte 0x06, 0x0c, 0x18, 0x30, 0x61, 0x42, 0x05, 0x0a +.byte 0x14, 0x28, 0x51, 0x23, 0x47, 0x0f, 0x1e, 0x3c +.byte 0x79, 0x72, 0x64, 0x48, 0x11, 0x22, 0x45, 0x0b +.byte 0x16, 0x2c, 0x59, 0x33, 0x67, 0x4e, 0x1d, 0x3a +.byte 0x75, 0x6a, 0x54, 0x29, 0x53, 0x27, 0x4f, 0x1f +.byte 0x3e, 0x7d, 0x7a, 0x74, 0x68, 0x50, 0x21, 0x43 +.byte 0x07, 0x0e, 0x1c, 0x38, 0x71, 0x62, 0x44, 0x09 +.byte 0x12, 0x24, 0x49, 0x13, 0x26, 0x4d, 0x1b, 0x36 +.byte 0x6d, 0x5a, 0x35, 0x6b, 0x56, 0x2d, 0x5b, 0x37 +.byte 0x6f, 0x5e, 0x3d, 0x7b, 0x76, 0x6c, 0x58, 0x31 +.byte 0x63, 0x46, 0x0d, 0x1a, 0x34, 0x69, 0x52, 0x25 +.byte 0x4b, 0x17, 0x2e, 0x5d, 0x3b, 0x77, 0x6e, 0x5c +.byte 0x39, 0x73, 0x66, 0x4c, 0x19, 0x32, 0x65, 0x4a +.byte 0x15, 0x2a, 0x55, 0x2b, 0x57, 0x2f, 0x5f, 0x3f +.byte 0x7f, 0x7e, 0x7c, 0x78, 0x70, 0x60, 0x40, 0x00 +#endif \ No newline at end of file diff --git a/knot/Implementations/crypto_aead/knot128v1/avr8_speed/knot384.h b/knot/Implementations/crypto_aead/knot128v1/avr8_speed/knot384.h new file mode 100644 index 0000000..0b3dd75 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot128v1/avr8_speed/knot384.h @@ -0,0 +1,261 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.1 2020 by KNOT Team * +; ********************************************** +; + +; an intentionally arrangement of registers to facilitate movw +#define x20 r0 +#define x21 r2 +#define x22 r4 +#define x23 r6 +#define x24 r8 +#define x25 r10 +#define x26 r1 +#define x27 r3 +#define x28 r5 +#define x29 r7 +#define x2a r9 +#define x2b r11 + +; an intentionally arrangement of registers to facilitate movw +#define x30 r22 +#define x35 r20 +#define x3a r18 +#define x33 r16 +#define x38 r14 +#define x31 r12 +#define x36 r23 +#define x3b r21 +#define x34 r19 +#define x39 r17 +#define x32 r15 +#define x37 r13 + +#define t0j r24 +#define t1j r25 +#define x0j r25 +#define x1j r27 + +#include "assist.h" + +.macro Sbox i0, i1, i2, i3 + ldi t0j, 0xFF + eor \i0, t0j + mov t0j, \i1 + and \i1, \i0 + eor \i1, \i2 + or \i2, t0j + eor \i0, \i3 + eor \i2, \i0 + eor t0j, \i3 + and \i0, \i1 + eor \i3, \i1 + eor \i0, t0j + and t0j, \i2 + eor \i1, t0j +.endm + +.macro OneColumn i0, i1, i2, i3 + ld \i0, Y + ldd \i1, Y + ROW_INBYTES + Sbox \i0, \i1, \i2, \i3 + st Y+, \i0 + rol \i1 ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES -1, \i1 +.endm + +Permutation: + PUSH_CONFLICT + mov rcnt, rn + + ldi YH, hi8(SRAM_STATE + 2 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 2 * ROW_INBYTES) + ld x20, Y+ + ld x21, Y+ + ld x22, Y+ + ld x23, Y+ + ld x24, Y+ + ld x25, Y+ + ld x26, Y+ + ld x27, Y+ + ld x28, Y+ + ld x29, Y+ + ld x2a, Y+ + ld x2b, Y+ + ld x30, Y+ + ld x31, Y+ + ld x32, Y+ + ld x33, Y+ + ld x34, Y+ + ld x35, Y+ + ld x36, Y+ + ld x37, Y+ + ld x38, Y+ + ld x39, Y+ + ld x3a, Y+ + ld x3b, Y+ + + ldi ZL, lo8(RC_LFSR7) + ldi ZH, hi8(RC_LFSR7) + +round_loop_start: + ; AddRC + lpm t0j, Z+ + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + ld x0j, Y + eor x0j, t0j + + ldd x1j, Y + ROW_INBYTES + Sbox x0j, x1j, x20, x30 + st Y+, x0j + lsl x1j ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES -1, x1j + + OneColumn x0j, x1j, x21, x31 + OneColumn x0j, x1j, x22, x32 + OneColumn x0j, x1j, x23, x33 + OneColumn x0j, x1j, x24, x34 + OneColumn x0j, x1j, x25, x35 + OneColumn x0j, x1j, x26, x36 + OneColumn x0j, x1j, x27, x37 + OneColumn x0j, x1j, x28, x38 + OneColumn x0j, x1j, x29, x39 + OneColumn x0j, x1j, x2a, x3a + OneColumn x0j, x1j, x2b, x3b + + ld x1j, Y + eor t0j, t0j + adc x1j, t0j + st Y, x1j + + ; b a 9 8 7 6 5 4 3 2 1 0 + ; -- -- -- -- -- -- -- -- -- -- -- x- 0 + ; -- -- -- -- -- -- -- -- -- -- -- x' 0 + ; -- -- -- -- -- -- -- -- -- -- x- -- 1 + ; -- -- -- -- x' -- -- -- -- -- -- -- 7 + ; 4 3 2 1 0 b a 9 8 7 6 5 + + ; ShiftRows -- the last two rows + ; <<< 8 + ; b a 9 8 7 6 5 4 3 2 1 0 => a 9 8 7 6 5 4 3 2 1 0 b + movw t0j, x25 ; t1j:t0j <= x2b:x25 + movw x25, x24 ; x2b:x25 <= x2a:x24 + movw x24, x23 ; x2a:x24 <= x29:x23 + movw x23, x22 ; x29:x23 <= x28:x22 + movw x22, x21 ; x28:x22 <= x27:x21 + movw x21, x20 ; x27:x21 <= x26:x20 + mov x26, t0j ; x26 <= x25 + mov x20, t1j ; x20 <= x2b + + ; >>> 1 + mov t0j, x3b + ror t0j + ror x3a + ror x39 + ror x38 + ror x37 + ror x36 + ror x35 + ror x34 + ror x33 + ror x32 + ror x31 + ror x30 + ror x3b + ; <<< 56 + ; b a 9 8 7 6 5 4 3 2 1 0 => 4 3 2 1 0 b a 9 8 7 6 5 + ; mov x3j, x30 + ; mov x30, x35 + ; mov x35, x3a + ; mov x3a, x33 + ; mov x33, x38 + ; mov x38, x31 + ; mov x31, x36 + ; mov x36, x3b + ; mov x3b, x34 + ; mov x34, x39 + ; mov x39, x32 + ; mov x32, x37 + ; mov x37, x3j + ; an intentionally arrangement of registers to facilitate movw + ; x30 r22 + ; x35 r20 + ; x3a r18 + ; x33 r16 + ; x38 r14 + ; x31 r12 + ; x36 r23 + ; x3b r21 + ; x34 r19 + ; x39 r17 + ; x32 r15 + ; x37 r13 + movw t0j, x30 ; t1j:t0j <= x36:x30 + movw x30, x35 ; x36:x30 <= x3b:x35 + movw x35, x3a ; x3b:x35 <= x34:x3a + movw x3a, x33 ; x34:x3a <= x39:x33 + movw x33, x38 ; x39:x33 <= x32:x38 + movw x38, x31 ; x32:x38 <= x37:x31 + mov x31, t1j ; x31 <= x36 + mov x37, t0j ; x37 <= x30 + + dec rcnt + breq round_loop_end + jmp round_loop_start + +round_loop_end: + + ldi YH, hi8(SRAM_STATE + 2 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 2 * ROW_INBYTES) + st Y+, x20 + st Y+, x21 + st Y+, x22 + st Y+, x23 + st Y+, x24 + st Y+, x25 + st Y+, x26 + st Y+, x27 + st Y+, x28 + st Y+, x29 + st Y+, x2a + st Y+, x2b + st Y+, x30 + st Y+, x31 + st Y+, x32 + st Y+, x33 + st Y+, x34 + st Y+, x35 + st Y+, x36 + st Y+, x37 + st Y+, x38 + st Y+, x39 + st Y+, x3a + st Y+, x3b + + POP_CONFLICT +ret + +RC_LFSR7: +.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x41, 0x03 +.byte 0x06, 0x0c, 0x18, 0x30, 0x61, 0x42, 0x05, 0x0a +.byte 0x14, 0x28, 0x51, 0x23, 0x47, 0x0f, 0x1e, 0x3c +.byte 0x79, 0x72, 0x64, 0x48, 0x11, 0x22, 0x45, 0x0b +.byte 0x16, 0x2c, 0x59, 0x33, 0x67, 0x4e, 0x1d, 0x3a +.byte 0x75, 0x6a, 0x54, 0x29, 0x53, 0x27, 0x4f, 0x1f +.byte 0x3e, 0x7d, 0x7a, 0x74, 0x68, 0x50, 0x21, 0x43 +.byte 0x07, 0x0e, 0x1c, 0x38, 0x71, 0x62, 0x44, 0x09 +.byte 0x12, 0x24, 0x49, 0x13, 0x26, 0x4d, 0x1b, 0x36 +.byte 0x6d, 0x5a, 0x35, 0x6b, 0x56, 0x2d, 0x5b, 0x37 +.byte 0x6f, 0x5e, 0x3d, 0x7b, 0x76, 0x6c, 0x58, 0x31 +.byte 0x63, 0x46, 0x0d, 0x1a, 0x34, 0x69, 0x52, 0x25 +.byte 0x4b, 0x17, 0x2e, 0x5d, 0x3b, 0x77, 0x6e, 0x5c +.byte 0x39, 0x73, 0x66, 0x4c, 0x19, 0x32, 0x65, 0x4a +.byte 0x15, 0x2a, 0x55, 0x2b, 0x57, 0x2f, 0x5f, 0x3f +.byte 0x7f, 0x7e, 0x7c, 0x78, 0x70, 0x60, 0x40, 0x00 \ No newline at end of file diff --git a/knot/Implementations/crypto_aead/knot128v1/avr8_speed/knot512.h b/knot/Implementations/crypto_aead/knot128v1/avr8_speed/knot512.h new file mode 100644 index 0000000..b0e4319 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot128v1/avr8_speed/knot512.h @@ -0,0 +1,435 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.1 2020 by KNOT Team * +; ********************************************** +; +#define x20 r0 +#define x22 r2 +#define x24 r4 +#define x26 r6 +#define x28 r1 +#define x2a r3 +#define x2c r5 +#define x2e r7 + +#define x30 r8 +#define x3d r10 +#define x3a r12 +#define x37 r14 +#define x34 r16 +#define x31 r18 +#define x3e r20 +#define x3b r22 +#define x38 r9 +#define x35 r11 +#define x32 r13 +#define x3f r15 +#define x3c r17 +#define x39 r19 +#define x36 r21 +#define x33 r23 + +#define t0j r24 +#define t1j r25 +#define x0j r25 +#define x1j r27 +#define x2j r26 + +#include "assist.h" + +.macro Sbox i0, i1, i2, i3 + ldi t0j, 0xFF + eor \i0, t0j + mov t0j, \i1 + and \i1, \i0 + eor \i1, \i2 + or \i2, t0j + eor \i0, \i3 + eor \i2, \i0 + eor t0j, \i3 + and \i0, \i1 + eor \i3, \i1 + eor \i0, t0j + and t0j, \i2 + eor \i1, t0j +.endm + +.macro TwoColumns i2_e, i3_e, i3_o + ; column 2i + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + Sbox x0j, x1j, \i2_e, \i3_e + st Y+, x0j + rol x1j ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES - 1, x1j + + ; column 2i+1 + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + Sbox x0j, x1j, x2j, \i3_o + st Y+, x0j + rol x1j ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES - 1, x1j + ldd t0j, Y + 2 * ROW_INBYTES + 1 + std Y + 2 * ROW_INBYTES + 1, x2j + mov x2j, t0j +.endm + +Permutation: + PUSH_CONFLICT + mov rcnt, rn + push rcnt + + ldi YH, hi8(SRAM_STATE + 2 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 2 * ROW_INBYTES) + + ldd x20, Y + 0x00 + ldd x22, Y + 0x02 + ldd x24, Y + 0x04 + ldd x26, Y + 0x06 + ldd x28, Y + 0x08 + ldd x2a, Y + 0x0a + ldd x2c, Y + 0x0c + ldd x2e, Y + 0x0e + + adiw YL, ROW_INBYTES + + ld x30, Y+ + ld x31, Y+ + ld x32, Y+ + ld x33, Y+ + ld x34, Y+ + ld x35, Y+ + ld x36, Y+ + ld x37, Y+ + ld x38, Y+ + ld x39, Y+ + ld x3a, Y+ + ld x3b, Y+ + ld x3c, Y+ + ld x3d, Y+ + ld x3e, Y+ + ld x3f, Y+ + +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) + sbrc AEDH, 2 ; AEDH[2] = 0 for AEAD and AEDH[2] = 1 for HASH + rjmp For_Hash +For_AEAD: + ldi ZL, lo8(RC_LFSR7) + ldi ZH, hi8(RC_LFSR7) + rjmp round_loop_start +For_Hash: + ldi ZL, lo8(RC_LFSR8) + ldi ZH, hi8(RC_LFSR8) +#elif defined(CRYPTO_AEAD) + ldi ZL, lo8(RC_LFSR7) + ldi ZH, hi8(RC_LFSR7) +#else + ldi ZL, lo8(RC_LFSR8) + ldi ZH, hi8(RC_LFSR8) +#endif + + +round_loop_start: + ; AddRC + lpm t0j, Z+ + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + + ; column 0 + ld x0j, Y + eor x0j, t0j + ldd x1j, Y + ROW_INBYTES + Sbox x0j, x1j, x20, x30 + st Y+, x0j + lsl x1j ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES - 1, x1j + + ; column 1 + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + ldd x2j, Y + 2 * ROW_INBYTES + Sbox x0j, x1j, x2j, x31 + st Y+, x0j + rol x1j ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES - 1, x1j + ldd t0j, Y + 2 * ROW_INBYTES + 1 + std Y + 2 * ROW_INBYTES + 1, x2j + mov x2j, t0j + + ; column 2, 3 + TwoColumns x22, x32, x33 + ; column 4, 5 + TwoColumns x24, x34, x35 + ; column 6, 7 + TwoColumns x26, x36, x37 + ; column 8, 9 + TwoColumns x28, x38, x39 + ; column 10, 11 + TwoColumns x2a, x3a, x3b + ; column 12, 13 + TwoColumns x2c, x3c, x3d + + ; column 14 + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + Sbox x0j, x1j, x2e, x3e + st Y+, x0j + rol x1j ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES - 1, x1j + + ; column 15 + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + Sbox x0j, x1j, x2j, x3f + st Y+, x0j + rol x1j ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES - 1, x1j + + ld x1j, Y + eor t0j, t0j + adc x1j, t0j + st Y, x1j + std Y + ROW_INBYTES + 1, x2j + + ; f e d c b a 9 8 7 6 5 4 3 2 1 0 + ; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- x- 0 + ; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- x' 0 + ; -- -- -- -- -- -- -- -- -- -- -- -- -- x- -- -- 2 + ; -- -- -- -- -- -- -- -- -- -- -- -- x' -- -- -- 3 + ; c b a 9 8 7 6 5 4 3 2 1 0 f e d + ; x2e x2c x2a x28 x26 x24 x22 x20 => x2c x2a x28 x26 x24 x22 x20 x2e + ;mov t0j, x2e + ;mov x2e, x2c + ;mov x2c, x2a + ;mov x2a, x28 + ;mov x28, x26 + ;mov x26, x24 + ;mov x24, x22 + ;mov x22, x20 + ;mov x20, t0j + ; an intentionally arrangement of registers to facilitate movw + movw t0j, x26 ; t1j:t0j <= x2e:x26 + movw x26, x24 ; x2e:x26 <= x2c:x24 + movw x24, x22 ; x2c:x24 <= x2a:x22 + movw x22, x20 ; x2a:x22 <= x28:x20 + mov x20, t1j ; x20 <= t1j + mov x28, t0j ; x28 <= t0j + + ; <<< 1 + mov t0j, x3f + rol t0j + rol x30 + rol x31 + rol x32 + rol x33 + rol x34 + rol x35 + rol x36 + rol x37 + rol x38 + rol x39 + rol x3a + rol x3b + rol x3c + rol x3d + rol x3e + rol x3f + ; <<< 24 + ; f e d c b a 9 8 7 6 5 4 3 2 1 0 => + ; c b a 9 8 7 6 5 4 3 2 1 0 f e d + ; mov x3j, x30 + ; mov x30, x3d + ; mov x3d, x3a + ; mov x3a, x37 + ; mov x37, x34 + ; mov x34, x31 + ; mov x31, x3e + ; mov x3e, x3b + ; mov x3b, x38 + ; mov x38, x35 + ; mov x35, x32 + ; mov x32, x3f + ; mov x3f, x3c + ; mov x3c, x39 + ; mov x39, x36 + ; mov x36, x33 + ; mov x33, x3j + ; an intentionally arrangement of registers to facilitate movw + ; x30 r8 + ; x3d r10 + ; x3a r12 + ; x37 r14 + ; x34 r16 + ; x31 r18 + ; x3e r20 + ; x3b r22 + ; x38 r9 + ; x35 r11 + ; x32 r13 + ; x3f r15 + ; x3c r17 + ; x39 r19 + ; x36 r21 + ; x33 r23 + movw t0j, x30 ; t1j:t0j <= x38:x30 + movw x30, x3d ; x38:x30 <= x35:x3d + movw x3d, x3a ; x35:x3d <= x32:x3a + movw x3a, x37 ; x32:x3a <= x3f:x37 + movw x37, x34 ; x3f:x37 <= x3c:x34 + movw x34, x31 ; x3c:x34 <= x39:x31 + movw x31, x3e ; x39:x31 <= x36:x3e + movw x3e, x3b ; x36:x3e <= x33:x3b + mov x3b, t1j ; x3b <= x38 + mov x33, t0j ; x33 <= x30 + + pop rcnt + dec rcnt + push rcnt + breq round_loop_end + rjmp round_loop_start + +round_loop_end: + pop rcnt + + ldi YH, hi8(SRAM_STATE + 2 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 2 * ROW_INBYTES) + std Y + 0x00, x20 + std Y + 0x02, x22 + std Y + 0x04, x24 + std Y + 0x06, x26 + std Y + 0x08, x28 + std Y + 0x0a, x2a + std Y + 0x0c, x2c + std Y + 0x0e, x2e + adiw YL, ROW_INBYTES + st Y+, x30 + st Y+, x31 + st Y+, x32 + st Y+, x33 + st Y+, x34 + st Y+, x35 + st Y+, x36 + st Y+, x37 + st Y+, x38 + st Y+, x39 + st Y+, x3a + st Y+, x3b + st Y+, x3c + st Y+, x3d + st Y+, x3e + st Y+, x3f + + POP_CONFLICT +ret + +.section .text +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) +RC_LFSR7: +.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x41, 0x03 +.byte 0x06, 0x0c, 0x18, 0x30, 0x61, 0x42, 0x05, 0x0a +.byte 0x14, 0x28, 0x51, 0x23, 0x47, 0x0f, 0x1e, 0x3c +.byte 0x79, 0x72, 0x64, 0x48, 0x11, 0x22, 0x45, 0x0b +.byte 0x16, 0x2c, 0x59, 0x33, 0x67, 0x4e, 0x1d, 0x3a +.byte 0x75, 0x6a, 0x54, 0x29, 0x53, 0x27, 0x4f, 0x1f +.byte 0x3e, 0x7d, 0x7a, 0x74, 0x68, 0x50, 0x21, 0x43 +.byte 0x07, 0x0e, 0x1c, 0x38, 0x71, 0x62, 0x44, 0x09 +.byte 0x12, 0x24, 0x49, 0x13, 0x26, 0x4d, 0x1b, 0x36 +.byte 0x6d, 0x5a, 0x35, 0x6b, 0x56, 0x2d, 0x5b, 0x37 +.byte 0x6f, 0x5e, 0x3d, 0x7b, 0x76, 0x6c, 0x58, 0x31 +.byte 0x63, 0x46, 0x0d, 0x1a, 0x34, 0x69, 0x52, 0x25 +.byte 0x4b, 0x17, 0x2e, 0x5d, 0x3b, 0x77, 0x6e, 0x5c +.byte 0x39, 0x73, 0x66, 0x4c, 0x19, 0x32, 0x65, 0x4a +.byte 0x15, 0x2a, 0x55, 0x2b, 0x57, 0x2f, 0x5f, 0x3f +.byte 0x7f, 0x7e, 0x7c, 0x78, 0x70, 0x60, 0x40, 0x00 +RC_LFSR8: +.byte 0x01, 0x02, 0x04, 0x08, 0x11, 0x23, 0x47, 0x8e +.byte 0x1c, 0x38, 0x71, 0xe2, 0xc4, 0x89, 0x12, 0x25 +.byte 0x4b, 0x97, 0x2e, 0x5c, 0xb8, 0x70, 0xe0, 0xc0 +.byte 0x81, 0x03, 0x06, 0x0c, 0x19, 0x32, 0x64, 0xc9 +.byte 0x92, 0x24, 0x49, 0x93, 0x26, 0x4d, 0x9b, 0x37 +.byte 0x6e, 0xdc, 0xb9, 0x72, 0xe4, 0xc8, 0x90, 0x20 +.byte 0x41, 0x82, 0x05, 0x0a, 0x15, 0x2b, 0x56, 0xad +.byte 0x5b, 0xb6, 0x6d, 0xda, 0xb5, 0x6b, 0xd6, 0xac +.byte 0x59, 0xb2, 0x65, 0xcb, 0x96, 0x2c, 0x58, 0xb0 +.byte 0x61, 0xc3, 0x87, 0x0f, 0x1f, 0x3e, 0x7d, 0xfb +.byte 0xf6, 0xed, 0xdb, 0xb7, 0x6f, 0xde, 0xbd, 0x7a +.byte 0xf5, 0xeb, 0xd7, 0xae, 0x5d, 0xba, 0x74, 0xe8 +.byte 0xd1, 0xa2, 0x44, 0x88, 0x10, 0x21, 0x43, 0x86 +.byte 0x0d, 0x1b, 0x36, 0x6c, 0xd8, 0xb1, 0x63, 0xc7 +.byte 0x8f, 0x1e, 0x3c, 0x79, 0xf3, 0xe7, 0xce, 0x9c +.byte 0x39, 0x73, 0xe6, 0xcc, 0x98, 0x31, 0x62, 0xc5 +.byte 0x8b, 0x16, 0x2d, 0x5a, 0xb4, 0x69, 0xd2, 0xa4 +.byte 0x48, 0x91, 0x22, 0x45, 0x8a, 0x14, 0x29, 0x52 +.byte 0xa5, 0x4a, 0x95, 0x2a, 0x54, 0xa9, 0x53, 0xa7 +.byte 0x4e, 0x9d, 0x3b, 0x77, 0xee, 0xdd, 0xbb, 0x76 +.byte 0xec, 0xd9, 0xb3, 0x67, 0xcf, 0x9e, 0x3d, 0x7b +.byte 0xf7, 0xef, 0xdf, 0xbf, 0x7e, 0xfd, 0xfa, 0xf4 +.byte 0xe9, 0xd3, 0xa6, 0x4c, 0x99, 0x33, 0x66, 0xcd +.byte 0x9a, 0x35, 0x6a, 0xd4, 0xa8, 0x51, 0xa3, 0x46 +.byte 0x8c, 0x18, 0x30, 0x60, 0xc1, 0x83, 0x07, 0x0e +.byte 0x1d, 0x3a, 0x75, 0xea, 0xd5, 0xaa, 0x55, 0xab +.byte 0x57, 0xaf, 0x5f, 0xbe, 0x7c, 0xf9, 0xf2, 0xe5 +.byte 0xca, 0x94, 0x28, 0x50, 0xa1, 0x42, 0x84, 0x09 +.byte 0x13, 0x27, 0x4f, 0x9f, 0x3f, 0x7f, 0xff, 0xfe +.byte 0xfc, 0xf8, 0xf0, 0xe1, 0xc2, 0x85, 0x0b, 0x17 +.byte 0x2f, 0x5e, 0xbc, 0x78, 0xf1, 0xe3, 0xc6, 0x8d +.byte 0x1a, 0x34, 0x68, 0xd0, 0xa0, 0x40, 0x80, 0x00 +#elif defined(CRYPTO_AEAD) +RC_LFSR7: +.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x41, 0x03 +.byte 0x06, 0x0c, 0x18, 0x30, 0x61, 0x42, 0x05, 0x0a +.byte 0x14, 0x28, 0x51, 0x23, 0x47, 0x0f, 0x1e, 0x3c +.byte 0x79, 0x72, 0x64, 0x48, 0x11, 0x22, 0x45, 0x0b +.byte 0x16, 0x2c, 0x59, 0x33, 0x67, 0x4e, 0x1d, 0x3a +.byte 0x75, 0x6a, 0x54, 0x29, 0x53, 0x27, 0x4f, 0x1f +.byte 0x3e, 0x7d, 0x7a, 0x74, 0x68, 0x50, 0x21, 0x43 +.byte 0x07, 0x0e, 0x1c, 0x38, 0x71, 0x62, 0x44, 0x09 +.byte 0x12, 0x24, 0x49, 0x13, 0x26, 0x4d, 0x1b, 0x36 +.byte 0x6d, 0x5a, 0x35, 0x6b, 0x56, 0x2d, 0x5b, 0x37 +.byte 0x6f, 0x5e, 0x3d, 0x7b, 0x76, 0x6c, 0x58, 0x31 +.byte 0x63, 0x46, 0x0d, 0x1a, 0x34, 0x69, 0x52, 0x25 +.byte 0x4b, 0x17, 0x2e, 0x5d, 0x3b, 0x77, 0x6e, 0x5c +.byte 0x39, 0x73, 0x66, 0x4c, 0x19, 0x32, 0x65, 0x4a +.byte 0x15, 0x2a, 0x55, 0x2b, 0x57, 0x2f, 0x5f, 0x3f +.byte 0x7f, 0x7e, 0x7c, 0x78, 0x70, 0x60, 0x40, 0x00 +#else +RC_LFSR8: +.byte 0x01, 0x02, 0x04, 0x08, 0x11, 0x23, 0x47, 0x8e +.byte 0x1c, 0x38, 0x71, 0xe2, 0xc4, 0x89, 0x12, 0x25 +.byte 0x4b, 0x97, 0x2e, 0x5c, 0xb8, 0x70, 0xe0, 0xc0 +.byte 0x81, 0x03, 0x06, 0x0c, 0x19, 0x32, 0x64, 0xc9 +.byte 0x92, 0x24, 0x49, 0x93, 0x26, 0x4d, 0x9b, 0x37 +.byte 0x6e, 0xdc, 0xb9, 0x72, 0xe4, 0xc8, 0x90, 0x20 +.byte 0x41, 0x82, 0x05, 0x0a, 0x15, 0x2b, 0x56, 0xad +.byte 0x5b, 0xb6, 0x6d, 0xda, 0xb5, 0x6b, 0xd6, 0xac +.byte 0x59, 0xb2, 0x65, 0xcb, 0x96, 0x2c, 0x58, 0xb0 +.byte 0x61, 0xc3, 0x87, 0x0f, 0x1f, 0x3e, 0x7d, 0xfb +.byte 0xf6, 0xed, 0xdb, 0xb7, 0x6f, 0xde, 0xbd, 0x7a +.byte 0xf5, 0xeb, 0xd7, 0xae, 0x5d, 0xba, 0x74, 0xe8 +.byte 0xd1, 0xa2, 0x44, 0x88, 0x10, 0x21, 0x43, 0x86 +.byte 0x0d, 0x1b, 0x36, 0x6c, 0xd8, 0xb1, 0x63, 0xc7 +.byte 0x8f, 0x1e, 0x3c, 0x79, 0xf3, 0xe7, 0xce, 0x9c +.byte 0x39, 0x73, 0xe6, 0xcc, 0x98, 0x31, 0x62, 0xc5 +.byte 0x8b, 0x16, 0x2d, 0x5a, 0xb4, 0x69, 0xd2, 0xa4 +.byte 0x48, 0x91, 0x22, 0x45, 0x8a, 0x14, 0x29, 0x52 +.byte 0xa5, 0x4a, 0x95, 0x2a, 0x54, 0xa9, 0x53, 0xa7 +.byte 0x4e, 0x9d, 0x3b, 0x77, 0xee, 0xdd, 0xbb, 0x76 +.byte 0xec, 0xd9, 0xb3, 0x67, 0xcf, 0x9e, 0x3d, 0x7b +.byte 0xf7, 0xef, 0xdf, 0xbf, 0x7e, 0xfd, 0xfa, 0xf4 +.byte 0xe9, 0xd3, 0xa6, 0x4c, 0x99, 0x33, 0x66, 0xcd +.byte 0x9a, 0x35, 0x6a, 0xd4, 0xa8, 0x51, 0xa3, 0x46 +.byte 0x8c, 0x18, 0x30, 0x60, 0xc1, 0x83, 0x07, 0x0e +.byte 0x1d, 0x3a, 0x75, 0xea, 0xd5, 0xaa, 0x55, 0xab +.byte 0x57, 0xaf, 0x5f, 0xbe, 0x7c, 0xf9, 0xf2, 0xe5 +.byte 0xca, 0x94, 0x28, 0x50, 0xa1, 0x42, 0x84, 0x09 +.byte 0x13, 0x27, 0x4f, 0x9f, 0x3f, 0x7f, 0xff, 0xfe +.byte 0xfc, 0xf8, 0xf0, 0xe1, 0xc2, 0x85, 0x0b, 0x17 +.byte 0x2f, 0x5e, 0xbc, 0x78, 0xf1, 0xe3, 0xc6, 0x8d +.byte 0x1a, 0x34, 0x68, 0xd0, 0xa0, 0x40, 0x80, 0x00 +#endif \ No newline at end of file diff --git a/knot/Implementations/crypto_aead/knot128v1/avr8_speed/permutation.h b/knot/Implementations/crypto_aead/knot128v1/avr8_speed/permutation.h new file mode 100644 index 0000000..e6c9793 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot128v1/avr8_speed/permutation.h @@ -0,0 +1,45 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.1 2020 by KNOT Team * +; ********************************************** +; + +; +; ============================================ +; R E G I S T E R D E F I N I T I O N S +; ============================================ +; + +#define mclen r16 +#define radlen r17 +#define tcnt r17 +#define tmp0 r20 +#define tmp1 r21 +#define cnt0 r22 +#define rn r23 +#define rate r24 + + +; AEDH = 0b000: for authenticate AD +; AEDH = 0b001: for encryption +; AEDH = 0b011: for decryption +; AEDH = 0b100: for hash +#define AEDH r25 +#define rcnt r26 + +#if (STATE_INBITS==256) +#include "knot256.h" +#elif (STATE_INBITS==384) +#include "knot384.h" +#elif (STATE_INBITS==512) +#include "knot512.h" +#else +#error "Not specified key size and state size" +#endif + + diff --git a/knot/Implementations/crypto_aead/knot128v2/armcortexm_2/auxFormat.c b/knot/Implementations/crypto_aead/knot128v2/armcortexm_2/auxFormat.c new file mode 100644 index 0000000..6d00d13 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot128v2/armcortexm_2/auxFormat.c @@ -0,0 +1,114 @@ +#include"auxFormat.h" + + +//puck begin// +void unpackU96FormatToThreePacket(u8 * out, u32 * in) { + u32 temp0[3] = { 0 }; + u32 temp1[3] = { 0 }; + u32 temp2[3] = { 0 }; + u32 t1_32, t2_64, t2_65; + u32 t[3] = { 0 }; + temp0[0] = in[0] & 0xffe00000; + temp1[0] = (in[0] & 0x001ffc00) << 11; + temp2[0] = (in[0] & 0x000003ff) << 22; + temp0[1] = in[1] & 0xffe00000; + temp1[1] = (in[1] & 0x001ff800) << 11; + t2_64 = ((in[1] & 0x00000400) << 21); + temp2[1] = (in[1] & 0x000003ff) << 22; + temp0[2] = in[2] & 0xffc00000; + t1_32 = ((in[2] & 0x00200000) << 10); + temp1[2] = (in[2] & 0x001ff800) << 11; + t2_65 = ((in[2] & 0x00000400) << 20); + temp2[2] = (in[2] & 0x000003ff) << 22; + unpuckU32ToThree(temp0[0]); + unpuckU32ToThree(temp0[1]); + unpuckU32ToThree(temp0[2]); + t[2] = temp0[0] | temp0[1] >> 1 | temp0[2] >> 2; + unpuckU32ToThree(temp1[0]); + unpuckU32ToThree(temp1[1]); + unpuckU32ToThree(temp1[2]); + t[1] = t1_32 | ((temp1[0] | temp1[1] >> 1 | temp1[2] >> 2) >> 1); + unpuckU32ToThree(temp2[0]); + unpuckU32ToThree(temp2[1]); + unpuckU32ToThree(temp2[2]); + t[0] = t2_65 | t2_64 | ((temp2[0] | temp2[1] >> 1 | temp2[2] >> 2) >> 2); + memcpy(out, t, 12 * sizeof(unsigned char)); +} +void packU96FormatToThreePacket(u32 * out, u8 * in) { + u32 t0 = U32BIG(((u32*)in)[2]); + u32 t1 = U32BIG(((u32*)in)[1]); + u32 t2 = U32BIG(((u32*)in)[0]); + u32 temp0[3] = { 0 }; + u32 temp1[3] = { 0 }; + u32 temp2[3] = { 0 }; + u8 t1_32 = (in[7] & 0x80) >> 7, t2_64 = (in[3] & 0x80) >> 7, t2_65 = (in[3] & 0x40) >> 6; + t1 = t1 << 1; + t2 = t2 << 2; + temp0[0] = t0; temp0[1] = t0 << 1; temp0[2] = t0 << 2; + puckU32ToThree(temp0[0]); + puckU32ToThree(temp0[1]); + puckU32ToThree(temp0[2]); + temp1[0] = t1; temp1[1] = t1 << 1; temp1[2] = t1 << 2; + puckU32ToThree(temp1[0]); + puckU32ToThree(temp1[1]); + puckU32ToThree(temp1[2]); + temp2[0] = t2; temp2[1] = t2 << 1; temp2[2] = t2 << 2; + puckU32ToThree(temp2[0]); + puckU32ToThree(temp2[1]); + puckU32ToThree(temp2[2]); + out[0] = (temp0[0]) | (temp1[0] >> 11) | (temp2[0] >> 22); + out[1] = (temp0[1]) | (temp1[1] >> 11) | (((u32)t2_64) << 10) | (temp2[1] >> 22); + out[2] = (temp0[2]) | (((u32)t1_32) << 21) | (temp1[2] >> 11) | (((u32)t2_65) << 10) | (temp2[2] >> 22); +} + +void packU32FormatToThreePacket(u32 * out, u8 * in) { + u32 t2 = U32BIG(((u32*)in)[0]); + u32 temp2[3] = { 0 }; + u8 t2_64 = (in[3] & 0x80) >> 7, t2_65 = (in[3] & 0x40) >> 6; + t2 = t2 << 2; + temp2[0] = t2; temp2[1] = t2 << 1; temp2[2] = t2 << 2; + puckU32ToThree(temp2[0]); + puckU32ToThree(temp2[1]); + puckU32ToThree(temp2[2]); + out[0] = (temp2[0] >> 22); + out[1] = (((u32)t2_64) << 10) | (temp2[1] >> 22); + out[2] =(((u32)t2_65) << 10) | (temp2[2] >> 22); +} +void unpackU32FormatToThreePacket(u8 * out, u32 * in) { + u32 temp2[3] = { 0 }; + u32 t2_64, t2_65; + u32 t2; + temp2[0] = (in[0] & 0x000003ff) << 22; + + t2_64 = ((in[1] & 0x00000400) << 21); + temp2[1] = (in[1] & 0x000003ff) << 22; + + t2_65 = ((in[2] & 0x00000400) << 20); + temp2[2] = (in[2] & 0x000003ff) << 22; + + unpuckU32ToThree(temp2[0]); + unpuckU32ToThree(temp2[1]); + unpuckU32ToThree(temp2[2]); + t2 = t2_65 | t2_64 | ((temp2[0] | temp2[1] >> 1 | temp2[2] >> 2) >> 2); + *(u32*)(out) = U32BIG(t2); +} +void P384(unsigned int *s, unsigned char *round, unsigned char lunNum) { + u32 rci,t1,t2; + unsigned char i; + for (i = 0; i < lunNum; i++) { + rci=constant7Format[i];\ + P384_ARC_SC1(rci,s[3],s[6],s[9]); \ + P384_2SC(s[1],s[4],s[7],s[10],s[2],s[5],s[8],s[11]);\ + P384_SR();\ + } +} +//12*7=84 +unsigned char constant7Format[80] = { + /*constant7Format[127]:*/ + 0x01,0x08,0x40,0x02,0x10,0x80,0x05,0x09,0x48,0x42,0x12,0x90, + 0x85,0x0c,0x41,0x0a,0x50,0x82,0x15,0x89,0x4d,0x4b,0x5a,0xd2, + 0x97,0x9c,0xc4,0x06,0x11,0x88,0x45,0x0b,0x58,0xc2,0x17,0x99, + 0xcd,0x4e,0x53,0x9a,0xd5,0x8e,0x54,0x83,0x1d,0xc9,0x4f,0x5b, + 0xda,0xd7,0x9e,0xd4,0x86,0x14,0x81,0x0d,0x49,0x4a,0x52,0x92, + 0x95,0x8c,0x44,0x03,0x18,0xc0,0x07,0x19,0xc8,0x47,0x1b,0xd8, + 0xc7,0x1e,0xd1,0x8f,0x5c,0xc3,0x1f,0xd9,}; diff --git a/knot/Implementations/crypto_aead/knot128v2/armcortexm_2/auxFormat.h b/knot/Implementations/crypto_aead/knot128v2/armcortexm_2/auxFormat.h index df30da6..301566c 100644 --- a/knot/Implementations/crypto_aead/knot128v2/armcortexm_2/auxFormat.h +++ b/knot/Implementations/crypto_aead/knot128v2/armcortexm_2/auxFormat.h @@ -1,20 +1,24 @@ -//#include + #include"crypto_aead.h" #include"api.h" - +#include #include -#include #include -#include #define U32BIG(x) (x) typedef unsigned char u8; typedef unsigned int u32; typedef unsigned long long u64; +#define aead_RATE (192 / 8) +#define PR0_ROUNDS 76 +#define PR_ROUNDS 28 +#define PRF_ROUNDS 32 + #define ARR_SIZE(a) (sizeof((a))/sizeof((a[0]))) #define LOTR32(x,n) (((x)<<(n))|((x)>>(32-(n)))) + //////////////////puck begin //&:5 <<:4 |:4 #define puckU32ToThree(x){\ @@ -31,119 +35,94 @@ x = (x | (x >> 8)) & 0xf00f00f0;\ x = (x | (x >> 4)) & 0xc30c30c3;\ x = (x | (x >> 2)) & 0x92492492;\ } -//ʹÓà u8 t2_64, t2_65;u32 temp2[3];t2; -#define packU32FormatToThreePacket( out, in) {\ -t2 = U32BIG(((u32*)in)[0]); \ -t2_64 = (in[3] & 0x80) >> 7, t2_65 = (in[3] & 0x40) >> 6; \ -t2 = t2 << 2; \ -temp2[0] = t2; temp2[1] = t2 << 1; temp2[2] = t2 << 2; \ -puckU32ToThree(temp2[0]); \ -puckU32ToThree(temp2[1]); \ -puckU32ToThree(temp2[2]); \ -out[0] = (temp2[0] >> 22); \ -out[1] = (((u32)t2_64) << 10) | (temp2[1] >> 22); \ -out[2] =(((u32)t2_65) << 10) | (temp2[2] >> 22); \ -} -//t9 t1 t2 t1_32 t2_64 t2_65 temp0[3] temp1[3] temp2[3] -#define packU96FormatToThreePacket(out, in) {\ -t9 = U32BIG(((u32*)in)[2]); \ -t1 = U32BIG(((u32*)in)[1]); \ -t2 = U32BIG(((u32*)in)[0]); \ -t1_32 = (in[7] & 0x80) >> 7, t2_64 = (in[3] & 0x80) >> 7, t2_65 = (in[3] & 0x40) >> 6; \ -t1 = t1 << 1; \ -t2 = t2 << 2; \ -temp0[0] = t9; temp0[1] = t9 << 1; temp0[2] = t9 << 2; \ -puckU32ToThree(temp0[0]); \ -puckU32ToThree(temp0[1]); \ -puckU32ToThree(temp0[2]); \ -temp1[0] = t1; temp1[1] = t1 << 1; temp1[2] = t1 << 2; \ -puckU32ToThree(temp1[0]); \ -puckU32ToThree(temp1[1]); \ -puckU32ToThree(temp1[2]); \ -temp2[0] = t2; temp2[1] = t2 << 1; temp2[2] = t2 << 2; \ -puckU32ToThree(temp2[0]); \ -puckU32ToThree(temp2[1]); \ -puckU32ToThree(temp2[2]); \ -out[0] = (temp0[0]) | (temp1[0] >> 11) | (temp2[0] >> 22); \ -out[1] = (temp0[1]) | (temp1[1] >> 11) | (((u32)t2_64) << 10) | (temp2[1] >> 22); \ -out[2] = (temp0[2]) | (((u32)t1_32) << 21) | (temp1[2] >> 11) | (((u32)t2_65) << 10) | (temp2[2] >> 22); \ -} - //ʹÓà u8 t2_64, t2_65;u32 temp2[3];t2; -#define unpackU32FormatToThreePacket(out, in) {\ -temp2[0] = (in[0] & 0x000003ff) << 22; \ -t2_64 = ((in[1] & 0x00000400) << 21); \ -temp2[1] = (in[1] & 0x000003ff) << 22; \ -t2_65 = ((in[2] & 0x00000400) << 20); \ -temp2[2] = (in[2] & 0x000003ff) << 22; \ -unpuckU32ToThree(temp2[0]); \ -unpuckU32ToThree(temp2[1]); \ -unpuckU32ToThree(temp2[2]); \ -t2 = t2_65 | t2_64 | ((temp2[0] | temp2[1] >> 1 | temp2[2] >> 2) >> 2); \ -*(u32*)(out) = U32BIG(t2); \ -} -//u32 temp0[3] = { 0 };u32 temp1[3] = { 0 };u32 temp2[3] = { 0 };u32 t1_32, t2_64, t2_65;t9,t1,t2, -#define unpackU96FormatToThreePacket( out, in) {\ -temp0[0] = in[0] & 0xffe00000; \ -temp1[0] = (in[0] & 0x001ffc00) << 11; \ -temp2[0] = (in[0] & 0x000003ff) << 22; \ -temp0[1] = in[1] & 0xffe00000; \ -temp1[1] = (in[1] & 0x001ff800) << 11; \ -t2_64 = ((in[1] & 0x00000400) << 21); \ -temp2[1] = (in[1] & 0x000003ff) << 22; \ -temp0[2] = in[2] & 0xffc00000; \ -t1_32 = ((in[2] & 0x00200000) << 10); \ -temp1[2] = (in[2] & 0x001ff800) << 11; \ -t2_65 = ((in[2] & 0x00000400) << 20); \ -temp2[2] = (in[2] & 0x000003ff) << 22; \ -unpuckU32ToThree(temp0[0]); \ -unpuckU32ToThree(temp0[1]); \ -unpuckU32ToThree(temp0[2]); \ -t9 = temp0[0] | temp0[1] >> 1 | temp0[2] >> 2; \ -unpuckU32ToThree(temp1[0]); \ -unpuckU32ToThree(temp1[1]); \ -unpuckU32ToThree(temp1[2]); \ -t1 = t1_32 | ((temp1[0] | temp1[1] >> 1 | temp1[2] >> 2) >> 1); \ -unpuckU32ToThree(temp2[0]); \ -unpuckU32ToThree(temp2[1]); \ -unpuckU32ToThree(temp2[2]); \ -t2 = t2_65 | t2_64 | ((temp2[0] | temp2[1] >> 1 | temp2[2] >> 2) >> 2); \ -*(u32*)(out) = U32BIG(t2); \ -*(u32*)(out + 4) = U32BIG(t1); \ -*(u32*)(out + 8) = U32BIG(t9); \ -} - -#define ARR_SIZE(a) (sizeof((a))/sizeof((a[0]))) -#define sbox(a, b, c, d, e, f, g, h) \ -{ \ - t1 = ~a; t2 = b & t1;t3 = c ^ t2; h = d ^ t3; t5 = b | c; t6 = d ^ t1; g = t5 ^ t6; t8 = b ^ d; t9 = t3 & t6; e = t8 ^ t9; t11 = g & t8; f = t3 ^ t11; \ -} - - -#define U96_BIT_LOTR32_1(t0,t1,t2,t3,t4,t5){\ -t3= t1;\ -t4 = t2;\ -t5 = LOTR32(t0, 1); \ -} -#define U96_BIT_LOTR32_8(t0,t1,t2,t3,t4,t5){\ -t3= LOTR32(t2, 2);\ -t4 =LOTR32(t0, 3);\ -t5 = LOTR32(t1, 3); \ -} -//55=3*18+1 -#define U96_BIT_LOTR32_55(t0,t1,t2,t3,t4,t5){\ -t3= LOTR32(t1, 18); \ -t4 = LOTR32(t2, 18);\ -t5 = LOTR32(t0, 19); \ -} -/* -s0 s1 s2 -s3 s4 s5 -s6 s7 s8 -s9 s10 s11 -*/ +unsigned char constant7Format[80]; -void printU32State(char name[], u32* var, long len); -void printfU96Format(char name[], u32 * s); -//////////////////puck end -void printU8(char name[], u8 var[], int len, int offset); -void printfU96Format(char name[], u32 * s); +#define P384_ARC_SC1(rci,S2,S3,S4) \ + do { \ + __asm__ __volatile__ ( \ + "/*add round const s0 s1 s2 */ \n\t"\ + "ands %[t1], %[rci], #0xc0\n\t" \ + "eors %[S_0], %[S_0], %[t1], LSR #6 \n\t" /*s[0] ^= (constant7Format[lunNum] >> 6) & 0x3;*/\ + "ands %[t1], %[rci], #0x38\n\t" \ + "eors %[S_1], %[S_1], %[t1], LSR #3 \n\t" /*s[0] ^= (constant7Format[lunNum] >> 6) & 0x3;*/\ + "ands %[t1], %[rci], #0x7\n\t" \ + "eors %[S_3], %[S_3], %[t1] \n\t" /*s[2] ^= constant7Format[lunNum] & 0x7;*/\ + "/*sbox column*/ \n\t"\ + "mvns %[S_0], %[S_0] \n\t"\ + "ands %[t1], %[S_2], %[S_0] \n\t"\ + "eors %[t1], %[S_4], %[t1] \n\t"\ + "orrs %[S_4], %[S_2], %[S_4] \n\t"\ + "eors %[S_0], %[S_6], %[S_0] \n\t"\ + "eors %[S_4], %[S_4], %[S_0] \n\t"\ + "eors %[t2], %[S_2], %[S_6] \n\t"\ + "eors %[S_6], %[S_6], %[t1] \n\t"\ + "ands %[S_0], %[t1],%[S_0] \n\t"\ + "eors %[S_0], %[t2],%[S_0] \n\t"\ + "ands %[S_2], %[S_4], %[t2] \n\t"\ + "eors %[S_2], %[t1], %[S_2] \n\t"\ + : /* output variables - including inputs that are changed */\ + [t1] "=r" (t1), [t2] "=r" (t2), [rci] "+r" (rci), \ + [S_0] "+r" (s[0]), [S_1] "+r" (s[1]), [S_3] "+r" (s[2]),\ + [S_2] "+r" (S2), [S_4] "+r" (S3), [S_6] "+r" (S4) \ + : : );\ +}while (0) +#define P384_2SC(S1,S2,S3,S4,S5,S6,S7,S8) \ + do { \ + __asm__ __volatile__ ( \ + "/*sbox column*/ \n\t"\ + "mvns %[S_0], %[S_0] \n\t"\ + "ands %[t1], %[S_2], %[S_0] \n\t"\ + "eors %[t1], %[S_4], %[t1] \n\t"\ + "orrs %[S_4], %[S_2], %[S_4] \n\t"\ + "eors %[S_0], %[S_6], %[S_0] \n\t"\ + "eors %[S_4], %[S_4], %[S_0] \n\t"\ + "eors %[t2], %[S_2], %[S_6] \n\t"\ + "eors %[S_6], %[S_6], %[t1] \n\t"\ + "ands %[S_0], %[t1],%[S_0] \n\t"\ + "eors %[S_0], %[t2],%[S_0] \n\t"\ + "ands %[S_2], %[S_4], %[t2] \n\t"\ + "eors %[S_2], %[t1], %[S_2] \n\t"\ + "/*sbox column*/ \n\t"\ + "mvns %[S_1], %[S_1] \n\t"\ + "ands %[t1], %[S_3], %[S_1] \n\t"\ + "eors %[t1], %[S_5], %[t1] \n\t"\ + "orrs %[S_5], %[S_3], %[S_5] \n\t"\ + "eors %[S_1], %[S_7], %[S_1] \n\t"\ + "eors %[S_5], %[S_5], %[S_1] \n\t"\ + "eors %[t2], %[S_3], %[S_7] \n\t"\ + "eors %[S_7], %[S_7], %[t1] \n\t"\ + "ands %[S_1], %[t1],%[S_1] \n\t"\ + "eors %[S_1], %[t2],%[S_1] \n\t"\ + "ands %[S_3], %[S_5], %[t2] \n\t"\ + "eors %[S_3], %[t1], %[S_3] \n\t"\ + : /* output variables - including inputs that are changed */\ + [t1] "=r" (t1), [t2] "=r" (t2),\ + [S_0] "+r" (S1), [S_2] "+r" (S2), [S_4] "+r" (S3), [S_6] "+r" (S4) ,\ + [S_1] "+r" (S5), [S_3] "+r" (S6), [S_5] "+r" (S7), [S_7] "+r" (S8)\ + : : );\ +}while (0) +#define P384_SR() \ + do { \ + __asm__ __volatile__ ( \ + "/*rotate shift left 1 bit [w9 w5 w1-> (w1,1) w9 w5] */ \n\t"\ + "mov %[t1], %[S_3] \n\t"\ + "mov %[S_3], %[S_4] \n\t"\ + "mov %[S_4], %[S_5] \n\t"\ + "ROR %[S_5], %[t1] , #31 \n\t"\ + "/*rotate shift left 8 bits [w10 w6 w2-> (w6,3) (w2,3) ( w10,2)]*/ \n\t"\ + "mov %[t1], %[S_8] \n\t"\ + "ROR %[S_8], %[S_7] , #29 \n\t"\ + "ROR %[S_7], %[S_6] , #29 \n\t"\ + "ROR %[S_6], %[t1] , #30 \n\t"\ + "/*rotate shift left 55 bit [w11 w7 w3-> (w3,13) (w11,14) ( w7,14)] */ \n\t"\ + "mov %[t1], %[S_9] \n\t"\ + "ROR %[S_9], %[S_10] , #14 \n\t"\ + "ROR %[S_10], %[S_11] , #14 \n\t"\ + "ROR %[S_11], %[t1] , #13 \n\t"\ + : /* output variables - including inputs that are changed */\ + [t1] "=r" (t1),\ + [S_3] "+r" (s[3]), [S_6] "+r" (s[6]), [S_9] "+r" (s[9]) ,\ + [S_4] "+r" (s[4]), [S_7] "+r" (s[7]), [S_10] "+r" (s[10]),\ + [S_5] "+r" (s[5]), [S_8] "+r" (s[8]), [S_11] "+r" (s[11])\ + : : );\ +}while (0) diff --git a/knot/Implementations/crypto_aead/knot128v2/armcortexm_2/crypto_aead.h b/knot/Implementations/crypto_aead/knot128v2/armcortexm_2/crypto_aead.h index cdfdf19..862d176 100644 --- a/knot/Implementations/crypto_aead/knot128v2/armcortexm_2/crypto_aead.h +++ b/knot/Implementations/crypto_aead/knot128v2/armcortexm_2/crypto_aead.h @@ -1,3 +1,4 @@ + int crypto_aead_encrypt( unsigned char *c, unsigned long long *clen, const unsigned char *m, unsigned long long mlen, diff --git a/knot/Implementations/crypto_aead/knot128v2/armcortexm_2/encrypt.c b/knot/Implementations/crypto_aead/knot128v2/armcortexm_2/encrypt.c index bea9f64..6c2bb34 100644 --- a/knot/Implementations/crypto_aead/knot128v2/armcortexm_2/encrypt.c +++ b/knot/Implementations/crypto_aead/knot128v2/armcortexm_2/encrypt.c @@ -1,171 +1,30 @@ #include"auxFormat.h" -#define aead_RATE (192 / 8) -#define PR0_ROUNDS 76 -#define PR_ROUNDS 28 -#define PRF_ROUNDS 32 - -unsigned char constant7Format[127] = { - /*constant7Format[127]:*/ - 0x01,0x08,0x40,0x02,0x10,0x80,0x05,0x09,0x48,0x42,0x12,0x90, - 0x85,0x0c,0x41,0x0a,0x50,0x82,0x15,0x89,0x4d,0x4b,0x5a,0xd2, - 0x97,0x9c,0xc4,0x06,0x11,0x88,0x45,0x0b,0x58,0xc2,0x17,0x99, - 0xcd,0x4e,0x53,0x9a,0xd5,0x8e,0x54,0x83,0x1d,0xc9,0x4f,0x5b, - 0xda,0xd7,0x9e,0xd4,0x86,0x14,0x81,0x0d,0x49,0x4a,0x52,0x92, - 0x95,0x8c,0x44,0x03,0x18,0xc0,0x07,0x19,0xc8,0x47,0x1b,0xd8, - 0xc7,0x1e,0xd1,0x8f,0x5c,0xc3,0x1f,0xd9,0xcf,0x5e,0xd3,0x9f, - 0xdc,0xc6,0x16,0x91,0x8d,0x4c,0x43,0x1a,0xd0,0x87,0x1c,0xc1, - 0x0f,0x59,0xca,0x57,0x9b,0xdd,0xce,0x56,0x93,0x9d,0xcc,0x46, - 0x13,0x98,0xc5,0x0e,0x51,0x8a,0x55,0x8b,0x5d,0xcb,0x5f,0xdb, - 0xdf,0xde,0xd6,0x96,0x94,0x84,0x04, }; -/* State - * w8 w4 w0 - * w9 w5 w1 - * w10 w6 w2 - * w11 w7 w3 - */ - static void permutation384(unsigned int *in, int rounds, unsigned char *rc) { - - uint32_t w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10, w11; - uint32_t s0, s1, s2; - uint32_t i=0; - __asm volatile( - "ldr w0, [in] \n\t" - "ldr w4, [in, #4] \n\t" - "ldr w8, [in, #8] \n\t" - "ldr w1, [in, #12] \n\t" - "ldr w5, [in, #16] \n\t" - "ldr w9, [in, #20] \n\t" - "ldr w2, [in, #24] \n\t" - "ldr w6, [in, #28] \n\t" - "ldr w10, [in, #32] \n\t" - "ldr w3, [in, #36] \n\t" - "ldr w7, [in, #40] \n\t" - "ldr w11, [in, #44] \n\t" - "enc_loop: \n\t" - "/*add round const s0 s1*/ \n\t" - "ldrb s0, [rc] \n\t" - "LSR s1, s0, #6 \n\t" - "and s1, s1, 0x3 \n\t" - "LSR s2, s0, #3 \n\t" - "and s2, s2, 0x7 \n\t" - "and s0, s0, 0x7 \n\t" - "eors w8, w8, s0 \n\t" - "eors w4, w4, s2 \n\t" - "eors w0, w0, s1 \n\t" - "/*sbox first column*/ \n\t" - "mvns w0, w0 \n\t" - "ands s0, w1, w0 \n\t" - "eors s0, w2, s0 \n\t" - "orrs w2, w1, w2 \n\t" - "eors w0, w3, w0 \n\t" - "eors w2, w2, w0 \n\t" - "eors s1, w1, w3 \n\t" - "eors w3, w3, s0 \n\t" - "ands w0, s0, w0 \n\t" - "eors w0, s1, w0 \n\t" - "ands w1, w2, s1 \n\t" - "eors w1, s0, w1 \n\t" - "/*sbox second column*/ \n\t" - "mvns w4, w4 \n\t" - "ands s0, w5, w4 \n\t" - "eors s0, w6, s0 \n\t" - "orrs w6, w5, w6 \n\t" - "eors w4, w7, w4 \n\t" - "eors w6, w6, w4 \n\t" - "eors s1, w5, w7 \n\t" - "eors w7, w7, s0 \n\t" - "ands w4, s0, w4 \n\t" - "eors w4, s1, w4 \n\t" - "ands w5, w6, s1 \n\t" - "eors w5, s0, w5 \n\t" - "/*sbox third column*/ \n\t" - "mvns w8, w8 \n\t" - "ands s0, w9, w8 \n\t" - "eors s0, w10, s0 \n\t" - "orrs w10, w9, w10 \n\t" - "eors w8, w11, w8 \n\t" - "eors w10, w10, w8 \n\t" - "eors s1, w9, w11 \n\t" - "eors w11, w11, s0 \n\t" - "ands w8, s0, w8 \n\t" - "eors w8, s1, w8 \n\t" - "ands w9, w10, s1 \n\t" - "eors w9, s0, w9 \n\t" - "/*rotate shift left 1 bit [w9 w5 w1-> (w1,1) w9 w5] */ \n\t" - "mov s0, w1 \n\t" - "mov w1, w5 \n\t" - "mov w5, w9 \n\t" - "ROR w9, s0, #31 \n\t" - "/*rotate shift left 8 bits [w10 w6 w2-> £¨w6,3) (w2,3) ( w10,2)]*/ \n\t" - "mov s0, w10 \n\t" - "ROR w10, w6 , #29 \n\t" - "ROR w6, w2 , #29 \n\t" - "ROR w2, s0, #30 \n\t" - "/*rotate shift left 55 bit [w11 w7 w3-> £¨w3,13) (w11,14) ( w7,14)] */ \n\t" - "mov s0, w3 \n\t" - "ROR w3, w7 , #14 \n\t" - "ROR w7, w11 , #14 \n\t" - "ROR w11, s0, #13 \n\t" - "/*loop control*/ \n\t" - "adds rc, rc, #1 \n\t" - "subs rounds, rounds, #1 \n\t" - "bne enc_loop \n\t" - "str w0, [in] \n\t" - "str w4, [in, #4] \n\t" - "str w8, [in, #8] \n\t" - "str w1, [in, #12] \n\t" - "str w5, [in, #16] \n\t" - "str w9, [in, #20] \n\t" - "str w2, [in, #24] \n\t" - "str w6, [in, #28] \n\t" - "str w10, [in, #32] \n\t" - "str w3, [in, #36] \n\t" - "str w7, [in, #40] \n\t" - "str w11, [in, #44] \n\t" - ); -} - -int crypto_aead_encrypt(unsigned char *c, unsigned long long *clen, - const unsigned char *m, unsigned long long mlen, - const unsigned char *ad, unsigned long long adlen, - const unsigned char *nsec, const unsigned char *npub, - const unsigned char *k) { - u8 i; - u32 s[12] = { 0 }; +void Initialize(u32 *s, const unsigned char *npub, const unsigned char *k) { u8 tempData[24] = { 0 }; - u32 dataFormat[6] = { 0 }; - u32 s_temp[12] = { 0 }; - u32 t1, t2, t3, t5, t6, t8, t9, t11; - u32 t1_32, t2_64, t2_65; - u32 temp0[3] = { 0 }; - u32 temp1[3] = { 0 }; - u32 temp2[3] = { 0 }; - - *clen = mlen + CRYPTO_ABYTES; - // initialization packU96FormatToThreePacket(s, npub); - memcpy(tempData, npub+12, sizeof(unsigned char)*4); - memcpy(tempData+4, k, sizeof(unsigned char) * 16); - packU96FormatToThreePacket((s + 3), tempData); - packU96FormatToThreePacket((s + 6), (tempData+12)); - + memcpy(tempData, npub + 12, sizeof(unsigned char) * 4); + memcpy(tempData + 4, k, sizeof(unsigned char) * 16); + packU96FormatToThreePacket(s + 3, tempData); + packU96FormatToThreePacket(s + 6, tempData + 12); s[9] = 0x80000000; - permutation384(s,PR0_ROUNDS,constant7Format); - // process associated data + P384(s, constant7Format, PR0_ROUNDS); +} +void ProcessAssocData(u32 *s, const u8* ad, unsigned long long adlen) { + u32 dataFormat[6] = { 0 }; + u8 tempData[24] = { 0 }; if (adlen) { - // rlen = adlen; while (adlen >= aead_RATE) { packU96FormatToThreePacket(dataFormat, ad); s[0] ^= dataFormat[0]; s[1] ^= dataFormat[1]; s[2] ^= dataFormat[2]; - packU96FormatToThreePacket((dataFormat+3), (ad+12)); + packU96FormatToThreePacket(dataFormat + 3, ad + 12); s[3] ^= dataFormat[3]; s[4] ^= dataFormat[4]; s[5] ^= dataFormat[5]; - permutation384(s,PR_ROUNDS,constant7Format); + P384(s, constant7Format, PR_ROUNDS); adlen -= aead_RATE; ad += aead_RATE; } @@ -176,138 +35,94 @@ int crypto_aead_encrypt(unsigned char *c, unsigned long long *clen, s[0] ^= dataFormat[0]; s[1] ^= dataFormat[1]; s[2] ^= dataFormat[2]; - packU96FormatToThreePacket((dataFormat + 3), (tempData + 12)); + packU96FormatToThreePacket(dataFormat + 3, tempData + 12); s[3] ^= dataFormat[3]; s[4] ^= dataFormat[4]; s[5] ^= dataFormat[5]; - permutation384(s,PR_ROUNDS,constant7Format); + + P384(s, constant7Format, PR_ROUNDS); } s[9] ^= 0x80000000; +} + +void ProcessPlaintext(u32 *s, const u8* m, unsigned long long mlen, unsigned char *c) { + u32 dataFormat[6] = { 0 }; + u8 tempData[24] = { 0 }; if (mlen) { while (mlen >= aead_RATE) { packU96FormatToThreePacket(dataFormat, m); s[0] ^= dataFormat[0]; s[1] ^= dataFormat[1]; s[2] ^= dataFormat[2]; - packU96FormatToThreePacket((dataFormat + 3), (m + 12)); + packU96FormatToThreePacket(dataFormat + 3, m + 12); s[3] ^= dataFormat[3]; s[4] ^= dataFormat[4]; s[5] ^= dataFormat[5]; unpackU96FormatToThreePacket(c, s); - unpackU96FormatToThreePacket((c+12), (s+3)); - permutation384(s,PR_ROUNDS,constant7Format); + unpackU96FormatToThreePacket(c + 12, s + 3); + + P384(s, constant7Format, PR_ROUNDS); mlen -= aead_RATE; m += aead_RATE; c += aead_RATE; } memset(tempData, 0, sizeof(tempData)); memcpy(tempData, m, mlen * sizeof(unsigned char)); - tempData[mlen]= 0x01; + tempData[mlen] = 0x01; packU96FormatToThreePacket(dataFormat, tempData); s[0] ^= dataFormat[0]; s[1] ^= dataFormat[1]; s[2] ^= dataFormat[2]; - packU96FormatToThreePacket((dataFormat + 3), (tempData + 12)); + packU96FormatToThreePacket(dataFormat + 3, tempData + 12); s[3] ^= dataFormat[3]; s[4] ^= dataFormat[4]; s[5] ^= dataFormat[5]; + //*c = EXT_BYTE(x0, i); unpackU96FormatToThreePacket(tempData, s); - unpackU96FormatToThreePacket((tempData+12), (s+3)); - memcpy(c, tempData, mlen * sizeof(unsigned char)); - c += mlen; + unpackU96FormatToThreePacket(tempData + 12, s + 3); + memcpy(c, tempData, mlen * sizeof(unsigned char)); + //c += mlen; } - // finalization - permutation384(s,PRF_ROUNDS,constant7Format); +} +void Finalize_GenerateTag(u32 *s, unsigned char *c) { + u8 tempData[12] = { 0 }; + P384(s, constant7Format, PRF_ROUNDS); // return tag - unpackU96FormatToThreePacket(c, s); - unpackU96FormatToThreePacket(tempData, (s + 3)); - memcpy(c+12, tempData, sizeof(unsigned char) * 4); - return 0; + unpackU96FormatToThreePacket(c , s); + unpackU96FormatToThreePacket(tempData, s + 3); + memcpy(c + 12 , tempData, sizeof(unsigned char) * 4); } - -int crypto_aead_decrypt(unsigned char *m, unsigned long long *mlen, - unsigned char *nsec, const unsigned char *c, unsigned long long clen, - const unsigned char *ad, unsigned long long adlen, - const unsigned char *npub, const unsigned char *k) { - - u8 i, j; - u32 s[12] = { 0 }; - u32 s_temp[12] = { 0 }; +void ProcessCiphertext(u32 *s, unsigned char *m, const unsigned char *c, unsigned long long clen) +{ u32 dataFormat[12] = { 0 }; u32 dataFormat_1[12] = { 0 }; - u8 tempData[24] = { 0 }; - u8 tempU8[24] = { 0 }; - u32 t1, t2, t3, t5, t6, t8, t9, t11; - u32 t1_32, t2_64, t2_65; - u32 temp0[3] = { 0 }; - u32 temp1[3] = { 0 }; - u32 temp2[3] = { 0 }; *mlen = clen - CRYPTO_ABYTES; - if (clen < CRYPTO_ABYTES) - return -1; - // initialization - packU96FormatToThreePacket(s, npub); - memcpy(tempData, npub + 12, sizeof(unsigned char) * 4); - memcpy(tempData + 4, k, sizeof(unsigned char) * 16); - packU96FormatToThreePacket((s + 3), tempData); - packU96FormatToThreePacket((s + 6), (tempData + 12)); - - s[9] = 0x80000000; - permutation384(s,PR0_ROUNDS,constant7Format); - // process associated data - if (adlen) { - while (adlen >= aead_RATE) { - packU96FormatToThreePacket(dataFormat, ad); - s[0] ^= dataFormat[0]; - s[1] ^= dataFormat[1]; - s[2] ^= dataFormat[2]; - packU96FormatToThreePacket((dataFormat + 3), (ad + 12)); - s[3] ^= dataFormat[3]; - s[4] ^= dataFormat[4]; - s[5] ^= dataFormat[5]; - permutation384(s,PR_ROUNDS,constant7Format); - adlen -= aead_RATE; - ad += aead_RATE; - } - memset(tempData, 0, sizeof(tempData)); - memcpy(tempData, ad, adlen * sizeof(unsigned char)); - tempData[adlen] = 0x01; - packU96FormatToThreePacket(dataFormat, tempData); - s[0] ^= dataFormat[0]; - s[1] ^= dataFormat[1]; - s[2] ^= dataFormat[2]; - packU96FormatToThreePacket((dataFormat + 3), (tempData + 12)); - s[3] ^= dataFormat[3]; - s[4] ^= dataFormat[4]; - s[5] ^= dataFormat[5]; - permutation384(s,PR_ROUNDS,constant7Format); - } - s[9] ^= 0x80000000; - clen -= CRYPTO_ABYTES; + u8 tempU8[24] = { 0 },i; if (clen) { while (clen >= aead_RATE) { packU96FormatToThreePacket(dataFormat, c); dataFormat_1[0] = s[0] ^ dataFormat[0]; dataFormat_1[1] = s[1] ^ dataFormat[1]; dataFormat_1[2] = s[2] ^ dataFormat[2]; - packU96FormatToThreePacket((dataFormat+3), (c+12)); + packU96FormatToThreePacket(dataFormat + 3, c + 12); dataFormat_1[3] = s[3] ^ dataFormat[3]; dataFormat_1[4] = s[4] ^ dataFormat[4]; dataFormat_1[5] = s[5] ^ dataFormat[5]; unpackU96FormatToThreePacket(m, dataFormat_1); - unpackU96FormatToThreePacket((m + 12), (dataFormat_1 + 3)); + unpackU96FormatToThreePacket(m + 12, dataFormat_1 + 3); s[0] = dataFormat[0]; s[1] = dataFormat[1]; s[2] = dataFormat[2]; s[3] = dataFormat[3]; s[4] = dataFormat[4]; s[5] = dataFormat[5]; - permutation384(s,PR_ROUNDS,constant7Format); + + P384(s, constant7Format, PR_ROUNDS); clen -= aead_RATE; m += aead_RATE; c += aead_RATE; } unpackU96FormatToThreePacket(tempU8, s); - unpackU96FormatToThreePacket((tempU8+12), (s+3)); + unpackU96FormatToThreePacket(tempU8 + 12, s + 3); for (i = 0; i < clen; ++i, ++m, ++c) { *m = tempU8[i] ^ *c; @@ -315,19 +130,52 @@ int crypto_aead_decrypt(unsigned char *m, unsigned long long *mlen, } tempU8[i] ^= 0x01; packU96FormatToThreePacket(s, tempU8); - packU96FormatToThreePacket((s + 3), (tempU8 + 12)); + packU96FormatToThreePacket(s + 3, tempU8 + 12); } - // finalization - permutation384(s,PRF_ROUNDS,constant7Format); +} +int Finalize_VerifyTag(u32 *s, const unsigned char *c, unsigned char *m, unsigned long long *mlen) { + u8 tempU8[24] = { 0 }; + P384(s, constant7Format, PRF_ROUNDS); // return tag - unpackU96FormatToThreePacket(tempU8, s); - unpackU96FormatToThreePacket((tempU8+12), (s+3)); - if (U32BIG(((u32*)tempU8)[0]) != U32BIG(((u32*)c)[0]) || - U32BIG(((u32*)tempU8)[1]) != U32BIG(((u32*)c)[1]) || - U32BIG(((u32*)tempU8)[2]) != U32BIG(((u32*)c)[2]) || - U32BIG(((u32*)tempU8)[3]) != U32BIG(((u32*)c)[3]) ){ + unpackU96FormatToThreePacket(tempU8 + 12, s + 3); + if (memcmp((void*)tempU8, (void*)(c), CRYPTO_ABYTES)) { + memset(m, 0, sizeof(unsigned char) * (*mlen)); + *mlen = 0; return -1; } return 0; } +int crypto_aead_encrypt(unsigned char *c, unsigned long long *clen, + const unsigned char *m, unsigned long long mlen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *nsec, const unsigned char *npub, + const unsigned char *k) { + u32 s[12] = { 0 }; + *clen = mlen + CRYPTO_ABYTES; + // initialization + Initialize(s,npub,k); + // process associated data + ProcessAssocData(s, ad, adlen); + ProcessPlaintext(s, m, mlen,c); + // finalization + Finalize_GenerateTag(s, c + mlen); + return 0; +} + +int crypto_aead_decrypt(unsigned char *m, unsigned long long *mlen, + unsigned char *nsec, const unsigned char *c, unsigned long long clen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *npub, const unsigned char *k) { + u32 s[12] = { 0 }; + *mlen = clen - CRYPTO_ABYTES; + if (clen < CRYPTO_ABYTES) + return -1; + // initialization + Initialize(s, npub, k); + // process associated data + ProcessAssocData(s, ad, adlen); + ProcessCiphertext(s,m, c, clen - CRYPTO_ABYTES); + // finalization + return Finalize_VerifyTag(s, c + clen - CRYPTO_KEYBYTES, m, mlen); +} diff --git a/knot/Implementations/crypto_aead/knot128v2/armcortexm_4/api.h b/knot/Implementations/crypto_aead/knot128v2/armcortexm_4/api.h new file mode 100644 index 0000000..d8257f4 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot128v2/armcortexm_4/api.h @@ -0,0 +1,7 @@ +#define CRYPTO_KEYBYTES 16 +#define CRYPTO_NSECBYTES 0 +#define CRYPTO_NPUBBYTES 16 +#define CRYPTO_ABYTES 16 +#define CRYPTO_NOOVERLAP 1 + + diff --git a/knot/Implementations/crypto_aead/knot128v2/armcortexm_4/auxFormat.c b/knot/Implementations/crypto_aead/knot128v2/armcortexm_4/auxFormat.c new file mode 100644 index 0000000..2181f8f --- /dev/null +++ b/knot/Implementations/crypto_aead/knot128v2/armcortexm_4/auxFormat.c @@ -0,0 +1,120 @@ +#include"auxFormat.h" + + +//puck begin// +void unpackU96FormatToThreePacket(u8 * out, u32 * in) { + u32 temp0[3] = { 0 }; + u32 temp1[3] = { 0 }; + u32 temp2[3] = { 0 }; + u32 t1_32, t2_64, t2_65; + u32 t[3] = { 0 }; + temp0[0] = in[0] & 0xffe00000; + temp1[0] = (in[0] & 0x001ffc00) << 11; + temp2[0] = (in[0] & 0x000003ff) << 22; + temp0[1] = in[1] & 0xffe00000; + temp1[1] = (in[1] & 0x001ff800) << 11; + t2_64 = ((in[1] & 0x00000400) << 21); + temp2[1] = (in[1] & 0x000003ff) << 22; + temp0[2] = in[2] & 0xffc00000; + t1_32 = ((in[2] & 0x00200000) << 10); + temp1[2] = (in[2] & 0x001ff800) << 11; + t2_65 = ((in[2] & 0x00000400) << 20); + temp2[2] = (in[2] & 0x000003ff) << 22; + unpuckU32ToThree(temp0[0]); + unpuckU32ToThree(temp0[1]); + unpuckU32ToThree(temp0[2]); + t[2] = temp0[0] | temp0[1] >> 1 | temp0[2] >> 2; + unpuckU32ToThree(temp1[0]); + unpuckU32ToThree(temp1[1]); + unpuckU32ToThree(temp1[2]); + t[1] = t1_32 | ((temp1[0] | temp1[1] >> 1 | temp1[2] >> 2) >> 1); + unpuckU32ToThree(temp2[0]); + unpuckU32ToThree(temp2[1]); + unpuckU32ToThree(temp2[2]); + t[0] = t2_65 | t2_64 | ((temp2[0] | temp2[1] >> 1 | temp2[2] >> 2) >> 2); + memcpy(out, t, 12 * sizeof(unsigned char)); +} +void packU96FormatToThreePacket(u32 * out, u8 * in) { + u32 t0 = U32BIG(((u32*)in)[2]); + u32 t1 = U32BIG(((u32*)in)[1]); + u32 t2 = U32BIG(((u32*)in)[0]); + u32 temp0[3] = { 0 }; + u32 temp1[3] = { 0 }; + u32 temp2[3] = { 0 }; + u8 t1_32 = (in[7] & 0x80) >> 7, t2_64 = (in[3] & 0x80) >> 7, t2_65 = (in[3] & 0x40) >> 6; + t1 = t1 << 1; + t2 = t2 << 2; + temp0[0] = t0; temp0[1] = t0 << 1; temp0[2] = t0 << 2; + puckU32ToThree(temp0[0]); + puckU32ToThree(temp0[1]); + puckU32ToThree(temp0[2]); + temp1[0] = t1; temp1[1] = t1 << 1; temp1[2] = t1 << 2; + puckU32ToThree(temp1[0]); + puckU32ToThree(temp1[1]); + puckU32ToThree(temp1[2]); + temp2[0] = t2; temp2[1] = t2 << 1; temp2[2] = t2 << 2; + puckU32ToThree(temp2[0]); + puckU32ToThree(temp2[1]); + puckU32ToThree(temp2[2]); + out[0] = (temp0[0]) | (temp1[0] >> 11) | (temp2[0] >> 22); + out[1] = (temp0[1]) | (temp1[1] >> 11) | (((u32)t2_64) << 10) | (temp2[1] >> 22); + out[2] = (temp0[2]) | (((u32)t1_32) << 21) | (temp1[2] >> 11) | (((u32)t2_65) << 10) | (temp2[2] >> 22); +} + +void packU32FormatToThreePacket(u32 * out, u8 * in) { + u32 t2 = U32BIG(((u32*)in)[0]); + u32 temp2[3] = { 0 }; + u8 t2_64 = (in[3] & 0x80) >> 7, t2_65 = (in[3] & 0x40) >> 6; + t2 = t2 << 2; + temp2[0] = t2; temp2[1] = t2 << 1; temp2[2] = t2 << 2; + puckU32ToThree(temp2[0]); + puckU32ToThree(temp2[1]); + puckU32ToThree(temp2[2]); + out[0] = (temp2[0] >> 22); + out[1] = (((u32)t2_64) << 10) | (temp2[1] >> 22); + out[2] =(((u32)t2_65) << 10) | (temp2[2] >> 22); +} +void unpackU32FormatToThreePacket(u8 * out, u32 * in) { + u32 temp2[3] = { 0 }; + u32 t2_64, t2_65; + u32 t2; + temp2[0] = (in[0] & 0x000003ff) << 22; + + t2_64 = ((in[1] & 0x00000400) << 21); + temp2[1] = (in[1] & 0x000003ff) << 22; + + t2_65 = ((in[2] & 0x00000400) << 20); + temp2[2] = (in[2] & 0x000003ff) << 22; + + unpuckU32ToThree(temp2[0]); + unpuckU32ToThree(temp2[1]); + unpuckU32ToThree(temp2[2]); + t2 = t2_65 | t2_64 | ((temp2[0] | temp2[1] >> 1 | temp2[2] >> 2) >> 2); + *(u32*)(out) = U32BIG(t2); +} +void P384(unsigned int *s, unsigned char *round, unsigned char lunNum) { + u32 s_temp[12] = { 0 }; + u32 t1, t2, t3, t5, t6, t8, t9, t11; + unsigned char i; + for (i = 0; i < lunNum; i++) { +s[0] ^= (round[i] >> 6) & 0x3;\ +s[1] ^= (round[i] >> 3) & 0x7;\ +s[2] ^= round[i] & 0x7;\ +sbox(s[0], s[3], s[6], s[9] , s_temp[3], s_temp[6], s_temp[9]);\ +sbox(s[1], s[4], s[7], s[10], s[3] , s_temp[7], s_temp[10]);\ +sbox(s[2], s[5], s[8], s[11], s[4] , s_temp[8], s_temp[11]);\ +s[5] = LOTR32(s_temp[3], 1); \ +U96_BIT_LOTR32_8(s_temp[6], s_temp [7], s_temp[ 8], s[6], s[7], s[8]);\ +U96_BIT_LOTR32_55(s_temp[9], s_temp[10], s_temp[11], s[9], s[10], s[11]);\ + } +} +//12*7=84 +unsigned char constant7Format[80] = { + /*constant7Format[127]:*/ + 0x01,0x08,0x40,0x02,0x10,0x80,0x05,0x09,0x48,0x42,0x12,0x90, + 0x85,0x0c,0x41,0x0a,0x50,0x82,0x15,0x89,0x4d,0x4b,0x5a,0xd2, + 0x97,0x9c,0xc4,0x06,0x11,0x88,0x45,0x0b,0x58,0xc2,0x17,0x99, + 0xcd,0x4e,0x53,0x9a,0xd5,0x8e,0x54,0x83,0x1d,0xc9,0x4f,0x5b, + 0xda,0xd7,0x9e,0xd4,0x86,0x14,0x81,0x0d,0x49,0x4a,0x52,0x92, + 0x95,0x8c,0x44,0x03,0x18,0xc0,0x07,0x19,0xc8,0x47,0x1b,0xd8, + 0xc7,0x1e,0xd1,0x8f,0x5c,0xc3,0x1f,0xd9,}; diff --git a/knot/Implementations/crypto_aead/knot128v2/armcortexm_4/auxFormat.h b/knot/Implementations/crypto_aead/knot128v2/armcortexm_4/auxFormat.h new file mode 100644 index 0000000..65d914f --- /dev/null +++ b/knot/Implementations/crypto_aead/knot128v2/armcortexm_4/auxFormat.h @@ -0,0 +1,58 @@ + +#include"crypto_aead.h" +#include"api.h" +#include +#include +#include +#define U32BIG(x) (x) + +typedef unsigned char u8; +typedef unsigned int u32; +typedef unsigned long long u64; + +#define aead_RATE (192 / 8) +#define PR0_ROUNDS 76 +#define PR_ROUNDS 28 +#define PRF_ROUNDS 32 + +#define ARR_SIZE(a) (sizeof((a))/sizeof((a[0]))) +#define LOTR32(x,n) (((x)<<(n))|((x)>>(32-(n)))) + +#define sbox(a, b, c, d, f, g, h) \ +{ \ + t1 = ~a; t2 = b & t1;t3 = c ^ t2; h = d ^ t3; t5 = b | c; t6 = d ^ t1; g = t5 ^ t6; t8 = b ^ d; t9 = t3 & t6; a = t8 ^ t9; t11 = g & t8; f = t3 ^ t11; \ +} + +#define U96_BIT_LOTR32_8(t0,t1,t2,t3,t4,t5){\ +t3= LOTR32(t2, 2);\ +t4 =LOTR32(t0, 3);\ +t5 = LOTR32(t1, 3); \ +} +//55=3*18+1 +#define U96_BIT_LOTR32_55(t0,t1,t2,t3,t4,t5){\ +t3= LOTR32(t1, 18); \ +t4 = LOTR32(t2, 18);\ +t5 = LOTR32(t0, 19); \ +} + +//////////////////puck begin +//&:5 <<:4 |:4 +#define puckU32ToThree(x){\ +x &= 0x92492492;\ +x = (x | (x << 2)) & 0xc30c30c3;\ +x = (x | (x << 4)) & 0xf00f00f0;\ +x = (x | (x << 8)) & 0xff0000ff;\ +x = (x | (x << 16)) & 0xfff00000;\ +} +#define unpuckU32ToThree(x){\ +x &= 0xfff00000;\ +x = (x | (x >> 16)) & 0xff0000ff;\ +x = (x | (x >> 8)) & 0xf00f00f0;\ +x = (x | (x >> 4)) & 0xc30c30c3;\ +x = (x | (x >> 2)) & 0x92492492;\ +} + +void packU96FormatToThreePacket(u32 * out, u8 * in); +void unpackU96FormatToThreePacket(u8 * out, u32 * in); + +unsigned char constant7Format[80]; diff --git a/knot/Implementations/crypto_aead/knot128v2/armcortexm_4/crypto_aead.h b/knot/Implementations/crypto_aead/knot128v2/armcortexm_4/crypto_aead.h new file mode 100644 index 0000000..862d176 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot128v2/armcortexm_4/crypto_aead.h @@ -0,0 +1,18 @@ + +int crypto_aead_encrypt( + unsigned char *c, unsigned long long *clen, + const unsigned char *m, unsigned long long mlen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k +); + +int crypto_aead_decrypt( + unsigned char *m, unsigned long long *mlen, + unsigned char *nsec, + const unsigned char *c, unsigned long long clen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k +); diff --git a/knot/Implementations/crypto_aead/knot128v2/armcortexm_4/encrypt.c b/knot/Implementations/crypto_aead/knot128v2/armcortexm_4/encrypt.c new file mode 100644 index 0000000..6c2bb34 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot128v2/armcortexm_4/encrypt.c @@ -0,0 +1,181 @@ + +#include"auxFormat.h" + +void Initialize(u32 *s, const unsigned char *npub, const unsigned char *k) { + u8 tempData[24] = { 0 }; + packU96FormatToThreePacket(s, npub); + memcpy(tempData, npub + 12, sizeof(unsigned char) * 4); + memcpy(tempData + 4, k, sizeof(unsigned char) * 16); + packU96FormatToThreePacket(s + 3, tempData); + packU96FormatToThreePacket(s + 6, tempData + 12); + s[9] = 0x80000000; + P384(s, constant7Format, PR0_ROUNDS); +} +void ProcessAssocData(u32 *s, const u8* ad, unsigned long long adlen) { + u32 dataFormat[6] = { 0 }; + u8 tempData[24] = { 0 }; + if (adlen) { + while (adlen >= aead_RATE) { + packU96FormatToThreePacket(dataFormat, ad); + s[0] ^= dataFormat[0]; + s[1] ^= dataFormat[1]; + s[2] ^= dataFormat[2]; + packU96FormatToThreePacket(dataFormat + 3, ad + 12); + s[3] ^= dataFormat[3]; + s[4] ^= dataFormat[4]; + s[5] ^= dataFormat[5]; + P384(s, constant7Format, PR_ROUNDS); + adlen -= aead_RATE; + ad += aead_RATE; + } + memset(tempData, 0, sizeof(tempData)); + memcpy(tempData, ad, adlen * sizeof(unsigned char)); + tempData[adlen] = 0x01; + packU96FormatToThreePacket(dataFormat, tempData); + s[0] ^= dataFormat[0]; + s[1] ^= dataFormat[1]; + s[2] ^= dataFormat[2]; + packU96FormatToThreePacket(dataFormat + 3, tempData + 12); + s[3] ^= dataFormat[3]; + s[4] ^= dataFormat[4]; + s[5] ^= dataFormat[5]; + + P384(s, constant7Format, PR_ROUNDS); + } + s[9] ^= 0x80000000; +} + +void ProcessPlaintext(u32 *s, const u8* m, unsigned long long mlen, unsigned char *c) { + u32 dataFormat[6] = { 0 }; + u8 tempData[24] = { 0 }; + if (mlen) { + while (mlen >= aead_RATE) { + packU96FormatToThreePacket(dataFormat, m); + s[0] ^= dataFormat[0]; + s[1] ^= dataFormat[1]; + s[2] ^= dataFormat[2]; + packU96FormatToThreePacket(dataFormat + 3, m + 12); + s[3] ^= dataFormat[3]; + s[4] ^= dataFormat[4]; + s[5] ^= dataFormat[5]; + unpackU96FormatToThreePacket(c, s); + unpackU96FormatToThreePacket(c + 12, s + 3); + + P384(s, constant7Format, PR_ROUNDS); + mlen -= aead_RATE; + m += aead_RATE; + c += aead_RATE; + } + memset(tempData, 0, sizeof(tempData)); + memcpy(tempData, m, mlen * sizeof(unsigned char)); + tempData[mlen] = 0x01; + packU96FormatToThreePacket(dataFormat, tempData); + s[0] ^= dataFormat[0]; + s[1] ^= dataFormat[1]; + s[2] ^= dataFormat[2]; + packU96FormatToThreePacket(dataFormat + 3, tempData + 12); + s[3] ^= dataFormat[3]; + s[4] ^= dataFormat[4]; + s[5] ^= dataFormat[5]; + //*c = EXT_BYTE(x0, i); + unpackU96FormatToThreePacket(tempData, s); + unpackU96FormatToThreePacket(tempData + 12, s + 3); + memcpy(c, tempData, mlen * sizeof(unsigned char)); + //c += mlen; + } +} +void Finalize_GenerateTag(u32 *s, unsigned char *c) { + u8 tempData[12] = { 0 }; + P384(s, constant7Format, PRF_ROUNDS); + // return tag + unpackU96FormatToThreePacket(c , s); + unpackU96FormatToThreePacket(tempData, s + 3); + memcpy(c + 12 , tempData, sizeof(unsigned char) * 4); +} +void ProcessCiphertext(u32 *s, unsigned char *m, const unsigned char *c, unsigned long long clen) +{ + u32 dataFormat[12] = { 0 }; + u32 dataFormat_1[12] = { 0 }; + u8 tempU8[24] = { 0 },i; + if (clen) { + while (clen >= aead_RATE) { + packU96FormatToThreePacket(dataFormat, c); + dataFormat_1[0] = s[0] ^ dataFormat[0]; + dataFormat_1[1] = s[1] ^ dataFormat[1]; + dataFormat_1[2] = s[2] ^ dataFormat[2]; + packU96FormatToThreePacket(dataFormat + 3, c + 12); + dataFormat_1[3] = s[3] ^ dataFormat[3]; + dataFormat_1[4] = s[4] ^ dataFormat[4]; + dataFormat_1[5] = s[5] ^ dataFormat[5]; + unpackU96FormatToThreePacket(m, dataFormat_1); + unpackU96FormatToThreePacket(m + 12, dataFormat_1 + 3); + s[0] = dataFormat[0]; + s[1] = dataFormat[1]; + s[2] = dataFormat[2]; + s[3] = dataFormat[3]; + s[4] = dataFormat[4]; + s[5] = dataFormat[5]; + + P384(s, constant7Format, PR_ROUNDS); + clen -= aead_RATE; + m += aead_RATE; + c += aead_RATE; + } + unpackU96FormatToThreePacket(tempU8, s); + unpackU96FormatToThreePacket(tempU8 + 12, s + 3); + for (i = 0; i < clen; ++i, ++m, ++c) + { + *m = tempU8[i] ^ *c; + tempU8[i] = *c; + } + tempU8[i] ^= 0x01; + packU96FormatToThreePacket(s, tempU8); + packU96FormatToThreePacket(s + 3, tempU8 + 12); + } +} +int Finalize_VerifyTag(u32 *s, const unsigned char *c, unsigned char *m, unsigned long long *mlen) { + u8 tempU8[24] = { 0 }; + P384(s, constant7Format, PRF_ROUNDS); + // return tag + unpackU96FormatToThreePacket(tempU8, s); + unpackU96FormatToThreePacket(tempU8 + 12, s + 3); + if (memcmp((void*)tempU8, (void*)(c), CRYPTO_ABYTES)) { + memset(m, 0, sizeof(unsigned char) * (*mlen)); + *mlen = 0; + return -1; + } + return 0; +} +int crypto_aead_encrypt(unsigned char *c, unsigned long long *clen, + const unsigned char *m, unsigned long long mlen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *nsec, const unsigned char *npub, + const unsigned char *k) { + u32 s[12] = { 0 }; + *clen = mlen + CRYPTO_ABYTES; + // initialization + Initialize(s,npub,k); + // process associated data + ProcessAssocData(s, ad, adlen); + ProcessPlaintext(s, m, mlen,c); + // finalization + Finalize_GenerateTag(s, c + mlen); + return 0; +} + +int crypto_aead_decrypt(unsigned char *m, unsigned long long *mlen, + unsigned char *nsec, const unsigned char *c, unsigned long long clen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *npub, const unsigned char *k) { + u32 s[12] = { 0 }; + *mlen = clen - CRYPTO_ABYTES; + if (clen < CRYPTO_ABYTES) + return -1; + // initialization + Initialize(s, npub, k); + // process associated data + ProcessAssocData(s, ad, adlen); + ProcessCiphertext(s,m, c, clen - CRYPTO_ABYTES); + // finalization + return Finalize_VerifyTag(s, c + clen - CRYPTO_KEYBYTES, m, mlen); +} diff --git a/knot/Implementations/crypto_aead/knot128v2/avr8_lowrom/api.h b/knot/Implementations/crypto_aead/knot128v2/avr8_lowrom/api.h new file mode 100644 index 0000000..51fc844 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot128v2/avr8_lowrom/api.h @@ -0,0 +1,5 @@ +#define CRYPTO_KEYBYTES 16 +#define CRYPTO_NSECBYTES 0 +#define CRYPTO_NPUBBYTES 16 +#define CRYPTO_ABYTES 16 +#define CRYPTO_NOOVERLAP 1 \ No newline at end of file diff --git a/knot/Implementations/crypto_aead/knot128v2/avr8_lowrom/assist.h b/knot/Implementations/crypto_aead/knot128v2/avr8_lowrom/assist.h new file mode 100644 index 0000000..cb903a5 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot128v2/avr8_lowrom/assist.h @@ -0,0 +1,140 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by KNOT Team * +; ********************************************** +; +.macro LFSR6_MACRO + bst rc, 5 + bld tmp0, 0 + bst rc, 4 + bld tmp1, 0 + eor tmp0, tmp1 + ror tmp0 + rol rc + andi rc, 0x3F +.endm + +.macro LFSR7_MACRO + bst rc, 6 + bld tmp0, 0 + bst rc, 5 + bld tmp1, 0 + eor tmp0, tmp1 + ror tmp0 + rol rc + andi rc, 0x7F +.endm + +.macro LFSR8_MACRO + bst rc, 7 + bld tmp0, 0 + bst rc, 5 + bld tmp1, 0 + eor tmp0, tmp1 + bst rc, 4 + bld tmp1, 0 + eor tmp0, tmp1 + bst rc, 3 + bld tmp1, 0 + eor tmp0, tmp1 + ror tmp0 + rol rc +.endm + +.macro Sbox i0, i1, i2, i3 + mov tmp0, \i1 + com \i0 + and \i1, \i0 + eor \i1, \i2 + or \i2, tmp0 + eor \i0, \i3 + eor \i2, \i0 + eor tmp0, \i3 + and \i0, \i1 + eor \i3, \i1 + eor \i0, tmp0 + and tmp0, \i2 + eor \i1, tmp0 +.endm + +.macro PUSH_CONFLICT + push r16 + push r17 + push r18 + push r19 + + push r23 + push r24 + + push r26 + push r27 + push r28 + push r29 + push r30 + push r31 +.endm + +.macro POP_CONFLICT + pop r31 + pop r30 + pop r29 + pop r28 + pop r27 + pop r26 + + pop r24 + pop r23 + + pop r19 + pop r18 + pop r17 + pop r16 +.endm + +.macro PUSH_ALL + push r2 + push r3 + push r4 + push r5 + push r6 + push r7 + push r8 + push r9 + push r10 + push r11 + push r12 + push r13 + push r14 + push r15 + push r16 + push r17 + push r28 + push r29 +.endm + +.macro POP_ALL + pop r29 + pop r28 + pop r17 + pop r16 + pop r15 + pop r14 + pop r13 + pop r12 + pop r11 + pop r10 + pop r9 + pop r8 + pop r7 + pop r6 + pop r5 + pop r4 + pop r3 + pop r2 + clr r1 +.endm \ No newline at end of file diff --git a/knot/Implementations/crypto_aead/knot128v2/avr8_lowrom/config.h b/knot/Implementations/crypto_aead/knot128v2/avr8_lowrom/config.h new file mode 100644 index 0000000..98114a9 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot128v2/avr8_lowrom/config.h @@ -0,0 +1,131 @@ +#ifndef __CONFIG_H__ +#define __CONFIG_H__ + +#define CRYPTO_AEAD +//#define CRYPTO_HASH + +#define MAX_MESSAGE_LENGTH 128 + +#define STATE_INBITS 384 +/* For CRYPTO_AEAD */ +#define CRYPTO_KEYBITS 128 +/* For CRYPTO_HASH */ +#define CRYPTO_BITS 256 + +#define STATE_INBYTES ((STATE_INBITS + 7) / 8) +#define ROW_INBITS ((STATE_INBITS + 3) / 4) +#define ROW_INBYTES ((ROW_INBITS + 7) / 8) + +/* For CRYPTO_AEAD */ +#define CRYPTO_KEYBYTES ((CRYPTO_KEYBITS + 7) / 8) +#define CRYPTO_NSECBYTES 0 +#define CRYPTO_NPUBBYTES CRYPTO_KEYBYTES +#define CRYPTO_ABYTES CRYPTO_KEYBYTES +#define CRYPTO_NOOVERLAP 1 + +#define MAX_ASSOCIATED_DATA_LENGTH 32 +#define MAX_CIPHER_LENGTH (MAX_MESSAGE_LENGTH + CRYPTO_ABYTES) + +#define TAG_MATCH 0 +#define TAG_UNMATCH -1 +#define OTHER_FAILURES -2 + +/* For CRYPTO_HASH */ +#define CRYPTO_BYTES ((CRYPTO_BITS + 7) / 8) + + + +#define DOMAIN_BITS 0x80 +#define PAD_BITS 0x01 +#define S384_R192_BITS 0x80 + +#if (STATE_INBITS==256) +#define C1 1 +#define C2 8 +#define C3 25 +#elif (STATE_INBITS==384) +#define C1 1 +#define C2 8 +#define C3 55 +#elif (STATE_INBITS==512) +#define C1 1 +#define C2 16 +#define C3 25 +#else +#error "Not specified state size" +#endif + +#ifdef CRYPTO_AEAD +/* For CRYPTO_AEAD */ +#define KEY_INBITS (CRYPTO_KEYBYTES * 8) +#define KEY_INBYTES (CRYPTO_KEYBYTES) + +#define NONCE_INBITS (CRYPTO_NPUBBYTES * 8) +#define NONCE_INBYTES (CRYPTO_NPUBBYTES) + +#define TAG_INBITS (CRYPTO_ABYTES * 8) +#define TAG_INBYTES (CRYPTO_ABYTES) + +#if (KEY_INBITS==128) && (STATE_INBITS==256) +#define RATE_INBITS 64 +#define NR_0 52 +#define NR_i 28 +#define NR_f 32 +#elif (KEY_INBITS==128) && (STATE_INBITS==384) +#define RATE_INBITS 192 +#define NR_0 76 +#define NR_i 28 +#define NR_f 32 +#elif (KEY_INBITS==192) && (STATE_INBITS==384) +#define RATE_INBITS 96 +#define NR_0 76 +#define NR_i 40 +#define NR_f 44 +#elif (KEY_INBITS==256) && (STATE_INBITS==512) +#define RATE_INBITS 128 +#define NR_0 100 +#define NR_i 52 +#define NR_f 56 +#else +#error "Not specified key size and state size" +#endif + +#define RATE_INBYTES ((RATE_INBITS + 7) / 8) +#define SQUEEZE_RATE_INBYTES TAG_INBYTES + +#endif + +#ifdef CRYPTO_HASH +/* For CRYPTO_HASH */ +#define HASH_DIGEST_INBITS (CRYPTO_BYTES * 8) + +#if (HASH_DIGEST_INBITS==256) && (STATE_INBITS==256) +#define HASH_RATE_INBITS 32 +#define HASH_SQUEEZE_RATE_INBITS 128 +#define NR_h 68 +#elif (HASH_DIGEST_INBITS==256) && (STATE_INBITS==384) +#define HASH_RATE_INBITS 128 +#define HASH_SQUEEZE_RATE_INBITS 128 +#define NR_h 80 +#elif (HASH_DIGEST_INBITS==384) && (STATE_INBITS==384) +#define HASH_RATE_INBITS 48 +#define HASH_SQUEEZE_RATE_INBITS 192 +#define NR_h 104 +#elif (HASH_DIGEST_INBITS==512) && (STATE_INBITS==512) +#define HASH_RATE_INBITS 64 +#define HASH_SQUEEZE_RATE_INBITS 256 +#define NR_h 140 +#else +#error "Not specified hash digest size and state size" +#endif + +#define HASH_RATE_INBYTES ((HASH_RATE_INBITS + 7) / 8) +#define HASH_SQUEEZE_RATE_INBYTES ((HASH_SQUEEZE_RATE_INBITS + 7) / 8) + +#endif + +#define TAG_MATCH 0 +#define TAG_UNMATCH -1 +#define OTHER_FAILURES -2 + +#endif \ No newline at end of file diff --git a/knot/Implementations/crypto_aead/knot128v2/avr8_lowrom/crypto_aead.h b/knot/Implementations/crypto_aead/knot128v2/avr8_lowrom/crypto_aead.h new file mode 100644 index 0000000..cd820d3 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot128v2/avr8_lowrom/crypto_aead.h @@ -0,0 +1,26 @@ +#ifdef __cplusplus +extern "C" { +#endif + +int crypto_aead_encrypt( + unsigned char *c,unsigned long long *clen, + const unsigned char *m,unsigned long long mlen, + const unsigned char *ad,unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k + ); + + +int crypto_aead_decrypt( + unsigned char *m,unsigned long long *outputmlen, + unsigned char *nsec, + const unsigned char *c,unsigned long long clen, + const unsigned char *ad,unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k + ); + +#ifdef __cplusplus +} +#endif diff --git a/knot/Implementations/crypto_aead/knot128v2/avr8_lowrom/encrypt.c b/knot/Implementations/crypto_aead/knot128v2/avr8_lowrom/encrypt.c new file mode 100644 index 0000000..baf0a3b --- /dev/null +++ b/knot/Implementations/crypto_aead/knot128v2/avr8_lowrom/encrypt.c @@ -0,0 +1,106 @@ +#include +#include +#include +#include +#include "config.h" + +extern void crypto_aead_encrypt_asm( + unsigned char *c, + const unsigned char *m, + unsigned char mlen, + const unsigned char *ad, + unsigned char adlen, + const unsigned char *npub, + const unsigned char *k + ); + +extern int crypto_aead_decrypt_asm( + unsigned char *m, + const unsigned char *c, + unsigned char clen, + const unsigned char *ad, + unsigned char adlen, + const unsigned char *npub, + const unsigned char *k + ); + +extern void crypto_hash_asm( + unsigned char *out, + const unsigned char *in, + unsigned char inlen + ); + + +int crypto_aead_encrypt( + unsigned char *c, unsigned long long *clen, + const unsigned char *m, unsigned long long mlen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k + ) +{ + /* + ... + ... the code for the cipher implementation goes here, + ... generating a ciphertext c[0],c[1],...,c[*clen-1] + ... from a plaintext m[0],m[1],...,m[mlen-1] + ... and associated data ad[0],ad[1],...,ad[adlen-1] + ... and nonce npub[0],npub[1],.. + ... and secret key k[0],k[1],... + ... the implementation shall not use nsec + ... + ... return 0; + */ + + (void)nsec; + + crypto_aead_encrypt_asm(c, m, mlen, ad, adlen, npub, k); + + *clen = mlen + TAG_INBYTES; + return 0; +} + + + +int crypto_aead_decrypt( + unsigned char *m, unsigned long long *mlen, + unsigned char *nsec, + const unsigned char *c, unsigned long long clen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k + ) +{ + /* + ... + ... the code for the AEAD implementation goes here, + ... generating a plaintext m[0],m[1],...,m[*mlen-1] + ... and secret message number nsec[0],nsec[1],... + ... from a ciphertext c[0],c[1],...,c[clen-1] + ... and associated data ad[0],ad[1],...,ad[adlen-1] + ... and nonce number npub[0],npub[1],... + ... and secret key k[0],k[1],... + ... + ... return 0; + */ + unsigned long long mlen_; + unsigned char tag_is_match; + + (void)nsec; + if (clen < CRYPTO_ABYTES) { + return -1; + } + mlen_ = clen - CRYPTO_ABYTES; + + tag_is_match = crypto_aead_decrypt_asm(m, c, mlen_, ad, adlen, npub, k); + + if (tag_is_match != 0) + { + memset(m, 0, (size_t)mlen_); + return -1; + } + + *mlen = mlen_; + return 0; +} \ No newline at end of file diff --git a/knot/Implementations/crypto_aead/knot128v2/avr8_lowrom/encrypt_core.S b/knot/Implementations/crypto_aead/knot128v2/avr8_lowrom/encrypt_core.S new file mode 100644 index 0000000..cb7aed5 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot128v2/avr8_lowrom/encrypt_core.S @@ -0,0 +1,537 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by KNOT Team * +; ********************************************** +; + +; +; ============================================ +; S R A M D E F I N I T I O N S +; ============================================ +; +#include +#include "config.h" + +.section .noinit + SRAM_STATE: .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#if (STATE_INBYTES > 32) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif +#if (STATE_INBYTES > 48) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif + SRAM_MESSAGE_OUT_ADDR: .BYTE 0, 0 + SRAM_MESSAGE_IN_ADDR: .BYTE 0, 0 + SRAM_MESSAGE_IN_LEN: .BYTE 0, 0 +#ifdef CRYPTO_AEAD +; For CRYPTO_AEAD + SRAM_ASSOCIATED_DATA_ADDR: .BYTE 0, 0 + SRAM_ADLEN: .BYTE 0, 0 + SRAM_NONCE_ADDR: .BYTE 0, 0 + SRAM_KEY_ADDR: .BYTE 0, 0 + + SRAM_ADDITIONAL: + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#if (CRYPTO_ABYTES > 16) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif +#if (CRYPTO_ABYTES > 24) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif + +#endif + +.section .text + +#include "permutation.h" + +; require YH:YL be the address of the current associated data/cipher/message block +; for enc and dec, store ciphertext or plaintext +; require ZH:ZL be the address of the current cipher/message block +XOR_to_State: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + mov cnt0, rate +XOR_to_State_loop: + ld tmp0, Y+ ; plaintext/ciphertext + ld tmp1, X ; state + eor tmp1, tmp0 ; ciphertext/plaintext + sbrc AEDH, 0 ; test auth or enc/dec, if AEDH[0] == 0, skip store result + st Z+, tmp1 ; store ciphertext/plaintext + sbrc AEDH, 1 ; test auth/enc or dec, if AEDH[1] == 0, skip repalce state byte + mov tmp1, tmp0 ; if dec, replace state + st X+, tmp1 ; store state byte + dec cnt0 + brne XOR_to_State_loop +; YH:YL are now the address of the next associated data block +ret + +; require YH:YL pointed to the input data +; require ZH:ZL pointed to the output data +; require cnt0 containes the nubmer of bytes in source data +; require number of bytes in source data less than rate, i.e., 0 <= cnt0 < rate +; +; the 0th bit in AEDH is used to distinguish (auth AD) or (enc/dec M/C): +; AEDH[0] = 0 for (auth AD), AEDH[0] = 1 for (enc/dec M/C) +; the 1th bit in AEDH is used to distinguish (auth AD/enc M) or (dec C): +; AEDH[1] = 0 for (auth AD/enc M), AEDH[1] = 1 for (dec C) +; AEDH = 0b000 for (auth AD) +; AEDH = 0b001 for (enc M) +; AEDH = 0b011 for (dec C) +Pad_XOR_to_State: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + tst cnt0 + breq XOR_padded_data +XOR_source_data_loop: + ld tmp0, Y+ ; plaintext/ciphertext + ld tmp1, X ; state + eor tmp1, tmp0 ; ciphertext/plaintext + sbrc AEDH, 0 ; test auth or enc/dec, if AEDH[0] == 0, skip store result + st Z+, tmp1 ; store ciphertext/plaintext + sbrc AEDH, 1 ; test auth/enc or dec, if AEDH[1] == 0, skip repalce state byte + mov tmp1, tmp0 ; if dec, replace state + st X+, tmp1 ; store state byte + dec cnt0 + brne XOR_source_data_loop +XOR_padded_data: + ldi tmp0, PAD_BITS + ld tmp1, X + eor tmp1, tmp0 + st X, tmp1 +ret + +AddDomain: + ldi XH, hi8(SRAM_STATE + STATE_INBYTES - 1) + ldi XL, lo8(SRAM_STATE + STATE_INBYTES - 1) + ldi tmp0, DOMAIN_BITS + ld tmp1, X + eor tmp0, tmp1 + st X, tmp0 +ret + +; require ZH:ZL be the address of the destination +EXTRACT_from_State: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + mov tmp1, rate +EXTRACT_from_State_loop: + ld tmp0, X+ + st Z+, tmp0 + dec tmp1 + brne EXTRACT_from_State_loop +ret + +AUTH: + tst radlen + breq AUTH_end + + cp radlen, rate + brlo auth_ad_padded_block + +auth_ad_loop: + rcall XOR_to_State + rcall Permutation + sub radlen, rate + cp radlen, rate + brlo auth_ad_padded_block + rjmp auth_ad_loop + +auth_ad_padded_block: + mov cnt0, radlen + rcall Pad_XOR_to_State + rcall Permutation + +AUTH_end: +ret + +#ifdef CRYPTO_AEAD +Initialization: + ldi rn, NR_0 + ldi XL, lo8(SRAM_STATE) + ldi XH, hi8(SRAM_STATE) + + lds YH, SRAM_NONCE_ADDR + lds YL, SRAM_NONCE_ADDR + 1 + ldi cnt0, CRYPTO_NPUBBYTES +load_nonce_loop: + ld tmp0, Y+ + st X+, tmp0 + dec cnt0 + brne load_nonce_loop + + lds YH, SRAM_KEY_ADDR + lds YL, SRAM_KEY_ADDR + 1 + ldi cnt0, CRYPTO_KEYBYTES +load_key_loop: + ld tmp0, Y+ + st X+, tmp0 + dec cnt0 + brne load_key_loop + +#if (STATE_INBITS==384) && (RATE_INBITS==192) + ldi cnt0, (STATE_INBYTES - CRYPTO_NPUBBYTES - CRYPTO_KEYBYTES - 1) + clr tmp0 +empty_state_loop: + st X+, tmp0 + dec cnt0 + brne empty_state_loop + ldi tmp0, S384_R192_BITS + st X+, tmp0 +#endif + + rcall Permutation +ret + +ENC: + tst mclen + breq ENC_end + + cp mclen, rate + brlo enc_padded_block + +enc_loop: + rcall XOR_to_State + ldi rn, NR_i + rcall Permutation + sub mclen, rate + cp mclen, rate + brlo enc_padded_block + rjmp enc_loop + +enc_padded_block: + mov cnt0, mclen + rcall Pad_XOR_to_State +ENC_end: +ret + +Finalization: + ldi rate, SQUEEZE_RATE_INBYTES + ldi rn, NR_f + rcall Permutation + rcall EXTRACT_from_State +ret + +; void crypto_aead_encrypt_asm( +; unsigned char *c, +; const unsigned char *m, +; unsigned long long mlen, +; const unsigned char *ad, +; unsigned long long adlen, +; const unsigned char *npub, +; const unsigned char *k +; ) +; +; unsigned char *c, is passed in r24:r25 +; const unsigned char *m, is passed in r22:r23 +; unsigned long long mlen, is passed in r20:r21, only LSB (r20) is used +; const unsigned char *ad, is passed in r18:r19 +; unsigned long long adlen, is passed in r16:r17, only LSB (r16) is used +; const unsigned char *npub, is passed in r14:r15 +; const unsigned char *k is passed in r12:r13 +.global crypto_aead_encrypt_asm +crypto_aead_encrypt_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store cipher address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store message address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store message length in SRAM_MESSAGE_IN_LEN + st X+, r20 + st X+, r19 ;store associated data address in SRAM_ASSOCIATED_DATA_ADDR + st X+, r18 + st X+, r17 ;store associated data length in SRAM_ADLEN + st X+, r16 + st X+, r15 ;store nonce address in SRAM_NONCE_ADDR + st X+, r14 + st X+, r13 ;store key address in SRAM_KEY_ADDR + st X+, r12 + mov radlen, r16 + mov mclen, r20 + + rcall Initialization + + ldi rn, NR_i + ldi rate, RATE_INBYTES + ldi AEDH, 0b000 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_ASSOCIATED_DATA_ADDR + lds YL, SRAM_ASSOCIATED_DATA_ADDR + 1 + rcall AUTH + rcall AddDomain + ldi AEDH, 0b001 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_MESSAGE_IN_ADDR + lds YL, SRAM_MESSAGE_IN_ADDR + 1 + lds ZH, SRAM_MESSAGE_OUT_ADDR + lds ZL, SRAM_MESSAGE_OUT_ADDR + 1 + rcall ENC + rcall Finalization + POP_ALL +ret + +; int crypto_aead_decrypt_asm( +; unsigned char *m, +; const unsigned char *c, +; unsigned long long clen, +; const unsigned char *ad, +; unsigned long long adlen, +; const unsigned char *npub, +; const unsigned char *k +; ) +; +; unsigned char *m, is passed in r24:r25 +; const unsigned char *c, is passed in r22:r23 +; unsigned long long clen, is passed in r20:r21, only LSB (r20) is used +; const unsigned char *ad, is passed in r18:r19 +; unsigned long long adlen, is passed in r16:r17, only LSB (r16) is used +; const unsigned char *npub, is passed in r14:r15 +; const unsigned char *k is passed in r12:r13 +.global crypto_aead_decrypt_asm +crypto_aead_decrypt_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store message address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store cipher address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store cipher length in SRAM_MESSAGE_IN_LEN + st X+, r20 + st X+, r19 ;store associated data address in SRAM_ASSOCIATED_DATA_ADDR + st X+, r18 + st X+, r17 ;store associated data length in SRAM_ADLEN + st X+, r16 + st X+, r15 ;store nonce address in SRAM_NONCE_ADDR + st X+, r14 + st X+, r13 ;store key address in SRAM_KEY_ADDR + st X+, r12 + mov radlen, r16 + mov mclen, r20 + + rcall Initialization + + ldi rn, NR_i + ldi rate, RATE_INBYTES + ldi AEDH, 0b000 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_ASSOCIATED_DATA_ADDR + lds YL, SRAM_ASSOCIATED_DATA_ADDR + 1 + rcall AUTH + rcall AddDomain + ldi AEDH, 0b011 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_MESSAGE_IN_ADDR + lds YL, SRAM_MESSAGE_IN_ADDR + 1 + lds ZH, SRAM_MESSAGE_OUT_ADDR + lds ZL, SRAM_MESSAGE_OUT_ADDR + 1 + rcall ENC + + ldi ZH, hi8(SRAM_ADDITIONAL) + ldi ZL, lo8(SRAM_ADDITIONAL) + rcall Finalization + + sbiw ZL, CRYPTO_ABYTES + ldi cnt0, CRYPTO_ABYTES +compare_tag: + ld tmp0, Z+ + ld tmp1, Y+ + cp tmp0, tmp1 + brne return_tag_not_match + dec cnt0 + brne compare_tag + rjmp return_tag_match + +return_tag_not_match: + ldi r25, 0xFF + ldi r24, 0xFF + rjmp crypto_aead_decrypt_end + +return_tag_match: + clr r25 + clr r24 +crypto_aead_decrypt_end: + POP_ALL +ret + +; #ifdef CRYPTO_AEAD +#endif + + +#ifdef CRYPTO_HASH + +; void crypto_hash_asm( +; unsigned char *out, +; const unsigned char *in, +; unsigned long long inlen +; ) +; +; unsigned char *out, is passed in r24:r25 +; const unsigned char *in, is passed in r22:r23 +; unsigned long long inlen, is passed in r20:r21, only LSB (r20) is used +.global crypto_hash_asm +crypto_hash_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store message address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store cipher address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store cipher length in SRAM_MESSAGE_IN_LEN + st X+, r20 + mov mclen, r20 + + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) +#if (STATE_INBITS==384) && (HASH_RATE_INBITS==128) + ldi cnt0, STATE_INBYTES - 1 +#else + ldi cnt0, STATE_INBYTES +#endif + clr tmp0 +zero_state: + st X+, tmp0 + dec cnt0 + brne zero_state + +#if (STATE_INBITS==384) && (HASH_RATE_INBITS==128) + ldi tmp0, S384_R192_BITS + st X+, tmp0 +#endif + + ldi rn, NR_h + ldi AEDH, 0b100 + +HASH_ABSORBING: + mov radlen, mclen + tst radlen + breq EMPTY_M + ldi rate, HASH_RATE_INBYTES + lds YH, SRAM_MESSAGE_IN_ADDR + lds YL, SRAM_MESSAGE_IN_ADDR + 1 + rcall AUTH + rjmp HASH_SQUEEZING + +EMPTY_M: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + ldi tmp0, PAD_BITS + ld tmp1, X + eor tmp1, tmp0 + st X, tmp1 + rcall Permutation + +HASH_SQUEEZING: + ldi rate, HASH_SQUEEZE_RATE_INBYTES + lds ZH, SRAM_MESSAGE_OUT_ADDR + lds ZL, SRAM_MESSAGE_OUT_ADDR + 1 + ldi tcnt, CRYPTO_BYTES +SQUEEZING_loop: + rcall EXTRACT_from_State + subi tcnt, HASH_SQUEEZE_RATE_INBYTES + breq HASH_SQUEEZING_end + rcall Permutation + rjmp SQUEEZING_loop +HASH_SQUEEZING_end: + POP_ALL +ret + +#endif + + +; Byte Order In AVR 8: +; KNOT-AEAD(128, 256, 64): +; N[ 0] AEAD_State[ 0] | Message[ 0] Perm_row_0[0] 0 Tag[ 0] +; N[ 1] AEAD_State[ 1] | Message[ 1] Perm_row_0[1] 0 Tag[ 1] +; N[ 2] AEAD_State[ 2] | Message[ 2] Perm_row_0[2] 0 Tag[ 2] +; N[ 3] AEAD_State[ 3] | Message[ 3] Perm_row_0[3] 0 Tag[ 3] +; N[ 4] AEAD_State[ 4] | Message[ 4] 0x01 Perm_row_0[4] 0 Tag[ 4] +; N[ 5] AEAD_State[ 5] | Message[ 5] 0x00 Perm_row_0[5] 0 Tag[ 5] +; N[ 6] AEAD_State[ 6] | Message[ 6] 0x00 Perm_row_0[6] 0 Tag[ 6] +; N[ 7] AEAD_State[ 7] | Message[ 7] 0x00 Perm_row_0[7] <<< 0 Tag[ 7] +; N[ 8] AEAD_State[ 8] | Perm_row_1[0] 1 +; N[ 9] AEAD_State[ 9] | Perm_row_1[1] 1 +; N[10] AEAD_State[10] | Perm_row_1[2] 1 +; N[11] AEAD_State[11] | Perm_row_1[3] 1 +; N[12] AEAD_State[12] | Perm_row_1[4] 1 +; N[13] AEAD_State[13] | Perm_row_1[5] 1 +; N[14] AEAD_State[14] | Perm_row_1[6] 1 +; N[15] AEAD_State[15] | Perm_row_1[7] <<< 1 +; K[ 0] AEAD_State[16] | Perm_row_2[0] 8 +; K[ 1] AEAD_State[17] | Perm_row_2[1] 8 +; K[ 2] AEAD_State[18] | Perm_row_2[2] 8 +; K[ 3] AEAD_State[19] | Perm_row_2[3] 8 +; K[ 4] AEAD_State[20] | Perm_row_2[4] 8 +; K[ 5] AEAD_State[21] | Perm_row_2[5] 8 +; K[ 6] AEAD_State[22] | Perm_row_2[6] 8 +; K[ 7] AEAD_State[23] | Perm_row_2[7] <<< 8 +; K[ 8] AEAD_State[24] | Perm_row_3[0] 25 +; K[ 9] AEAD_State[25] | Perm_row_3[1] 25 +; K[10] AEAD_State[26] | Perm_row_3[2] 25 +; K[11] AEAD_State[27] | Perm_row_3[3] 25 +; K[12] AEAD_State[28] | Perm_row_3[4] 25 +; K[13] AEAD_State[29] | Perm_row_3[5] 25 +; K[14] AEAD_State[30] | Perm_row_3[6] 25 +; K[15] AEAD_State[31] | ^0x80 Perm_row_3[7] <<< 25 +; +; +; KNOT-AEAD(128, 384, 192): +; Initalization +; N[ 0] AEAD_State[ 0] | Message[ 0] Perm_row_0[ 0] 0 Tag[ 0] +; N[ 1] AEAD_State[ 1] | Message[ 1] Perm_row_0[ 1] 0 Tag[ 1] +; N[ 2] AEAD_State[ 2] | Message[ 2] Perm_row_0[ 2] 0 Tag[ 2] +; N[ 3] AEAD_State[ 3] | Message[ 3] Perm_row_0[ 3] 0 Tag[ 3] +; N[ 4] AEAD_State[ 4] | Message[ 4] 0x01 Perm_row_0[ 4] 0 Tag[ 4] +; N[ 5] AEAD_State[ 5] | Message[ 5] 0x00 Perm_row_0[ 5] 0 Tag[ 5] +; N[ 6] AEAD_State[ 6] | Message[ 6] 0x00 Perm_row_0[ 6] 0 Tag[ 6] +; N[ 7] AEAD_State[ 7] | Message[ 7] 0x00 Perm_row_0[ 7] 0 Tag[ 7] +; N[ 8] AEAD_State[ 8] | Message[ 8] 0x00 Perm_row_0[ 8] 0 Tag[ 8] +; N[ 9] AEAD_State[ 9] | Message[ 9] 0x00 Perm_row_0[ 9] 0 Tag[ 9] +; N[10] AEAD_State[10] | Message[10] 0x00 Perm_row_0[10] 0 Tag[10] +; N[11] AEAD_State[11] | Message[11] 0x00 Perm_row_0[11] <<< 0 Tag[11] +; N[12] AEAD_State[12] | Message[12] 0x00 Perm_row_1[ 0] 1 Tag[12] +; N[13] AEAD_State[13] | Message[13] 0x00 Perm_row_1[ 1] 1 Tag[13] +; N[14] AEAD_State[14] | Message[14] 0x00 Perm_row_1[ 2] 1 Tag[14] +; N[15] AEAD_State[15] | Message[15] 0x00 Perm_row_1[ 3] 1 Tag[15] +; K[ 0] AEAD_State[16] | Message[16] 0x00 Perm_row_1[ 4] 1 +; K[ 1] AEAD_State[17] | Message[17] 0x00 Perm_row_1[ 5] 1 +; K[ 2] AEAD_State[18] | Message[18] 0x00 Perm_row_1[ 6] 1 +; K[ 3] AEAD_State[19] | Message[19] 0x00 Perm_row_1[ 7] 1 +; K[ 4] AEAD_State[20] | Message[20] 0x00 Perm_row_1[ 8] 1 +; K[ 5] AEAD_State[21] | Message[21] 0x00 Perm_row_1[ 9] 1 +; K[ 6] AEAD_State[22] | Message[22] 0x00 Perm_row_1[10] 1 +; K[ 7] AEAD_State[23] | Message[23] 0x00 Perm_row_1[11] <<< 1 +; K[ 8] AEAD_State[24] | Perm_row_2[ 0] 8 +; K[ 9] AEAD_State[25] | Perm_row_2[ 1] 8 +; K[10] AEAD_State[26] | Perm_row_2[ 2] 8 +; K[11] AEAD_State[27] | Perm_row_2[ 3] 8 +; K[12] AEAD_State[28] | Perm_row_2[ 4] 8 +; K[13] AEAD_State[29] | Perm_row_2[ 5] 8 +; K[14] AEAD_State[30] | Perm_row_2[ 6] 8 +; K[15] AEAD_State[31] | Perm_row_2[ 7] 8 +; 0x00 AEAD_State[32] | Perm_row_2[ 8] 8 +; 0x00 AEAD_State[33] | Perm_row_2[ 9] 8 +; 0x00 AEAD_State[34] | Perm_row_2[10] 8 +; 0x00 AEAD_State[35] | Perm_row_2[11] <<< 8 +; 0x00 AEAD_State[36] | Perm_row_3[ 0] 55 +; 0x00 AEAD_State[37] | Perm_row_3[ 1] 55 +; 0x00 AEAD_State[38] | Perm_row_3[ 2] 55 +; 0x00 AEAD_State[39] | Perm_row_3[ 3] 55 +; 0x00 AEAD_State[40] | Perm_row_3[ 4] 55 +; 0x00 AEAD_State[41] | Perm_row_3[ 5] 55 +; 0x00 AEAD_State[42] | Perm_row_3[ 6] 55 +; 0x00 AEAD_State[43] | Perm_row_3[ 7] 55 +; 0x00 AEAD_State[44] | Perm_row_3[ 8] 55 +; 0x00 AEAD_State[45] | Perm_row_3[ 9] 55 +; 0x00 AEAD_State[46] | Perm_row_3[10] 55 +; 0x00 ^0x80 AEAD_State[47] | ^0x80 Perm_row_3[11] <<< 55 diff --git a/knot/Implementations/crypto_aead/knot128v2/avr8_lowrom/knot256.h b/knot/Implementations/crypto_aead/knot128v2/avr8_lowrom/knot256.h new file mode 100644 index 0000000..d16bf8c --- /dev/null +++ b/knot/Implementations/crypto_aead/knot128v2/avr8_lowrom/knot256.h @@ -0,0 +1,197 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by KNOT Team * +; ********************************************** +; +#include "assist.h" + +Permutation: + PUSH_CONFLICT + mov rcnt, rn + + ldi rc, 0x01 + ldi YH, hi8(SRAM_STATE + 3 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 3 * ROW_INBYTES) + ld x30, Y+ + ld x31, Y+ + ld x32, Y+ + ld x33, Y+ + ld x34, Y+ + ld x35, Y+ + ld x36, Y+ + ld x37, Y+ + +round_loop_start: + rjmp AddRC_SubColumns_Start + +load_columns_table: + rjmp load_column0 + rjmp load_column1 + rjmp load_column2 + rjmp load_column3 + rjmp load_column4 + rjmp load_column5 + rjmp load_column6 + rjmp load_column7 + rjmp amend_shiftRow + +load_column0: + mov x3j, x30 + rjmp Sbox_one_column +load_column1: + mov x30, x3j + mov x3j, x31 + rjmp Sbox_one_column +load_column2: + mov x31, x3j + mov x3j, x32 + rjmp Sbox_one_column +load_column3: + mov x32, x3j + mov x3j, x33 + rjmp Sbox_one_column +load_column4: + mov x33, x3j + mov x3j, x34 + rjmp Sbox_one_column +load_column5: + mov x34, x3j + mov x3j, x35 + rjmp Sbox_one_column +load_column6: + mov x35, x3j + mov x3j, x36 + rjmp Sbox_one_column +load_column7: + mov x36, x3j + mov x3j, x37 + rjmp Sbox_one_column + +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) +LFSR_table: + rjmp LFSR6 + rjmp LFSR7 +LFSR6: + LFSR6_MACRO + rjmp LFSR_DONE +LFSR7: + LFSR7_MACRO + rjmp LFSR_DONE +#endif + +;;;;;;;;;;;;;;;;;;;;;;;; Real Start +AddRC_SubColumns_Start: + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + clr ccnt + ld x0j, Y + eor x0j, rc + +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) + ldi ZL, pm_lo8(LFSR_table) + ldi ZH, pm_hi8(LFSR_table) + sbrc AEDH, 2 ; AEDH[2] = 0 for AEAD and AEDH[1] = 1 for HASH + adiw ZL, 1 + ijmp +LFSR_DONE: +#elif defined(CRYPTO_AEAD) + LFSR6_MACRO ; only AEAD +#else + LFSR7_MACRO ; only HASH +#endif + + ldd x1j, Y + ROW_INBYTES + ldd x2j, Y + 2 * ROW_INBYTES + ldi ZL, pm_lo8(load_columns_table) + ldi ZH, pm_hi8(load_columns_table) + ijmp +Sbox_one_column: + Sbox x0j, x1j, x2j, x3j + + ; 7 6 5 4 3 2 1 0 + ; -- -- -- -- -- -- -- x- 0 + ; -- -- -- -- -- -- -- x' 0 + ; -- -- -- -- -- -- x- -- 1 + ; -- -- -- -- x' -- -- -- 3 + ; 4 3 2 1 0 7 6 5 + ; Store a byte to Row 0 + st Y, x0j + ; Store a byte combined with ShiftRow1 + lsl t1j + mov t1j, x1j ; back up the last updated byte in t1j, to be used in shiftRow1 (1 bit left) + rol x1j + std Y + ROW_INBYTES, x1j + ; Store a byte combined with ShiftRow2 + inc ccnt + cpi ccnt, ROW_INBYTES + breq ROW2_WRAP + ldd t2j, Y + 2 * ROW_INBYTES + 1 ; load next byte, the last updated byte needed to be shifted to the address of the next bytes + std Y + 2 * ROW_INBYTES + 1, x2j + mov x2j, t2j + jmp NO_ROW2_WRAP +ROW2_WRAP: + std Y + ROW_INBYTES + 1, x2j + ; remain ShiftRow3 to be done at 'amend_shiftRow' +NO_ROW2_WRAP: + adiw YL, 1 + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + + adiw ZL, 1 + ijmp + +amend_shiftRow: + ldi YH, hi8(SRAM_STATE + ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + ROW_INBYTES) + + ld x1j, Y + bst t1j, 7 + bld x1j, 0 + st Y, x1j + + ; <<< 1 + mov x37, x3j + rol x3j + rol x30 + rol x31 + rol x32 + rol x33 + rol x34 + rol x35 + rol x36 + rol x37 + ; <<< 24 + ; 7 6 5 4 3 2 1 0 => 4 3 2 1 0 7 6 5 + mov x3j, x30 + mov x30, x35 + mov x35, x32 + mov x32, x37 + mov x37, x34 + mov x34, x31 + mov x31, x36 + mov x36, x33 + mov x33, x3j + + dec rcnt + breq round_loop_end + rjmp round_loop_start + +round_loop_end: + ldi YH, hi8(SRAM_STATE + 3 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 3 * ROW_INBYTES) + st Y+, x30 + st Y+, x31 + st Y+, x32 + st Y+, x33 + st Y+, x34 + st Y+, x35 + st Y+, x36 + st Y+, x37 + + POP_CONFLICT +ret \ No newline at end of file diff --git a/knot/Implementations/crypto_aead/knot128v2/avr8_lowrom/knot384.h b/knot/Implementations/crypto_aead/knot128v2/avr8_lowrom/knot384.h new file mode 100644 index 0000000..65c474a --- /dev/null +++ b/knot/Implementations/crypto_aead/knot128v2/avr8_lowrom/knot384.h @@ -0,0 +1,219 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by KNOT Team * +; ********************************************** +; +#include "assist.h" + +Permutation: + PUSH_CONFLICT + mov rcnt, rn + + ldi rc, 0x01 + ldi YH, hi8(SRAM_STATE + 3 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 3 * ROW_INBYTES) + ld x30, Y+ + ld x31, Y+ + ld x32, Y+ + ld x33, Y+ + ld x34, Y+ + ld x35, Y+ + ld x36, Y+ + ld x37, Y+ + ld x38, Y+ + ld x39, Y+ + ld x3a, Y+ + ld x3b, Y+ + +round_loop_start: + rjmp AddRC_SubColumns_Start + +load_columns_table: + rjmp load_column0 + rjmp load_column1 + rjmp load_column2 + rjmp load_column3 + rjmp load_column4 + rjmp load_column5 + rjmp load_column6 + rjmp load_column7 + rjmp load_column8 + rjmp load_column9 + rjmp load_columna + rjmp load_columnb + rjmp amend_shiftRow + +load_column0: + mov x3j, x30 + rjmp Sbox_one_column +load_column1: + mov x30, x3j + mov x3j, x31 + rjmp Sbox_one_column +load_column2: + mov x31, x3j + mov x3j, x32 + rjmp Sbox_one_column +load_column3: + mov x32, x3j + mov x3j, x33 + rjmp Sbox_one_column +load_column4: + mov x33, x3j + mov x3j, x34 + rjmp Sbox_one_column +load_column5: + mov x34, x3j + mov x3j, x35 + rjmp Sbox_one_column +load_column6: + mov x35, x3j + mov x3j, x36 + rjmp Sbox_one_column +load_column7: + mov x36, x3j + mov x3j, x37 + rjmp Sbox_one_column +load_column8: + mov x37, x3j + mov x3j, x38 + rjmp Sbox_one_column +load_column9: + mov x38, x3j + mov x3j, x39 + rjmp Sbox_one_column +load_columna: + mov x39, x3j + mov x3j, x3a + rjmp Sbox_one_column +load_columnb: + mov x3a, x3j + mov x3j, x3b + rjmp Sbox_one_column + +;;;;;;;;;;;;;;;;;;;;;;;; Real Start +AddRC_SubColumns_Start: + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + ldi ZL, pm_lo8(load_columns_table) + ldi ZH, pm_hi8(load_columns_table) + clr ccnt + ld x0j, Y + eor x0j, rc + LFSR7_MACRO + + ldd x1j, Y + ROW_INBYTES + ldd x2j, Y + 2 * ROW_INBYTES + ijmp +Sbox_one_column: + Sbox x0j, x1j, x2j, x3j + + ; b a 9 8 7 6 5 4 3 2 1 0 + ; -- -- -- -- -- -- -- -- -- -- -- x- 0 + ; -- -- -- -- -- -- -- -- -- -- -- x' 0 + ; -- -- -- -- -- -- -- -- -- -- x- -- 1 + ; -- -- -- -- x' -- -- -- -- -- -- -- 7 + ; 4 3 2 1 0 b a 9 8 7 6 5 + ; Store a byte to Row 0 + st Y, x0j + ; Store a byte combined with ShiftRow 1 + lsl t1j + mov t1j, x1j ; back up the last updated byte in t1j, to be used in shiftRow1 (1 bit left) + rol x1j + std Y + ROW_INBYTES, x1j + ; Store a byte combined with ShiftRow 2 + inc ccnt + cpi ccnt, ROW_INBYTES + breq ROW2_WRAP + ldd t2j, Y + 2 * ROW_INBYTES + 1 ; load next byte, the last updated byte needed to be shifted to the address of the next bytes + std Y + 2 * ROW_INBYTES + 1, x2j + mov x2j, t2j + jmp NO_ROW2_WRAP +ROW2_WRAP: + std Y + ROW_INBYTES + 1, x2j + ; remain ShiftRow3 to be done at 'amend_shiftRow' +NO_ROW2_WRAP: + adiw YL, 1 + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + + adiw ZL, 1 + ijmp + +amend_shiftRow: + ldi YH, hi8(SRAM_STATE + ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + ROW_INBYTES) + + ld x1j, Y + bst t1j, 7 + bld x1j, 0 + st Y, x1j + + ; >>> 1 + mov x3b, x3j + ror x3j + ror x3a + ror x39 + ror x38 + ror x37 + ror x36 + ror x35 + ror x34 + ror x33 + ror x32 + ror x31 + ror x30 + ror x3b + ; <<< 56 + ; b a 9 8 7 6 5 4 3 2 1 0 => 4 3 2 1 0 b a 9 8 7 6 5 + ;mov x3j, x30 + ;mov x30, x35 + ;mov x35, x32 + ;mov x32, x37 + ;mov x37, x34 + ;mov x34, x31 + ;mov x31, x36 + ;mov x36, x33 + ;mov x33, x3j + mov x3j, x30 + mov x30, x35 + mov x35, x3a + mov x3a, x33 + mov x33, x38 + mov x38, x31 + mov x31, x36 + mov x36, x3b + mov x3b, x34 + mov x34, x39 + mov x39, x32 + mov x32, x37 + mov x37, x3j + + dec rcnt + breq round_loop_end + rjmp round_loop_start + +round_loop_end: + + ldi YH, hi8(SRAM_STATE + 3 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 3 * ROW_INBYTES) + st Y+, x30 + st Y+, x31 + st Y+, x32 + st Y+, x33 + st Y+, x34 + st Y+, x35 + st Y+, x36 + st Y+, x37 + st Y+, x38 + st Y+, x39 + st Y+, x3a + st Y+, x3b + + POP_CONFLICT +ret \ No newline at end of file diff --git a/knot/Implementations/crypto_aead/knot128v2/avr8_lowrom/knot512.h b/knot/Implementations/crypto_aead/knot128v2/avr8_lowrom/knot512.h new file mode 100644 index 0000000..d24b353 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot128v2/avr8_lowrom/knot512.h @@ -0,0 +1,275 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by KNOT Team * +; ********************************************** +; +#include "assist.h" + +Permutation: + PUSH_CONFLICT + mov rcnt, rn + + ldi rc, 0x01 + ldi YH, hi8(SRAM_STATE + 3 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 3 * ROW_INBYTES) + ld x30, Y+ + ld x31, Y+ + ld x32, Y+ + ld x33, Y+ + ld x34, Y+ + ld x35, Y+ + ld x36, Y+ + ld x37, Y+ + ld x38, Y+ + ld x39, Y+ + ld x3a, Y+ + ld x3b, Y+ + ld x3c, Y+ + ld x3d, Y+ + ld x3e, Y+ + ld x3f, Y+ + +round_loop_start: + rjmp AddRC_SubColumns_Start + +load_columns_table: + rjmp load_column0 + rjmp load_column1 + rjmp load_column2 + rjmp load_column3 + rjmp load_column4 + rjmp load_column5 + rjmp load_column6 + rjmp load_column7 + rjmp load_column8 + rjmp load_column9 + rjmp load_columna + rjmp load_columnb + rjmp load_columnc + rjmp load_columnd + rjmp load_columne + rjmp load_columnf + rjmp amend_shiftRow + +load_column0: + mov x3j, x30 + rjmp Sbox_one_column +load_column1: + mov x30, x3j + mov x3j, x31 + rjmp Sbox_one_column +load_column2: + mov x31, x3j + mov x3j, x32 + rjmp Sbox_one_column +load_column3: + mov x32, x3j + mov x3j, x33 + rjmp Sbox_one_column +load_column4: + mov x33, x3j + mov x3j, x34 + rjmp Sbox_one_column +load_column5: + mov x34, x3j + mov x3j, x35 + rjmp Sbox_one_column +load_column6: + mov x35, x3j + mov x3j, x36 + rjmp Sbox_one_column +load_column7: + mov x36, x3j + mov x3j, x37 + rjmp Sbox_one_column +load_column8: + mov x37, x3j + mov x3j, x38 + rjmp Sbox_one_column +load_column9: + mov x38, x3j + mov x3j, x39 + rjmp Sbox_one_column +load_columna: + mov x39, x3j + mov x3j, x3a + rjmp Sbox_one_column +load_columnb: + mov x3a, x3j + mov x3j, x3b + rjmp Sbox_one_column +load_columnc: + mov x3b, x3j + mov x3j, x3c + rjmp Sbox_one_column +load_columnd: + mov x3c, x3j + mov x3j, x3d + rjmp Sbox_one_column +load_columne: + mov x3d, x3j + mov x3j, x3e + rjmp Sbox_one_column +load_columnf: + mov x3e, x3j + mov x3j, x3f + rjmp Sbox_one_column + +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) +LFSR_table: + rjmp LFSR7 + rjmp LFSR8 +LFSR7: + LFSR7_MACRO + rjmp LFSR_DONE +LFSR8: + LFSR8_MACRO + rjmp LFSR_DONE +#endif + +;;;;;;;;;;;;;;;;;;;;;;;; Real Start +AddRC_SubColumns_Start: + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + clr ccnt + ld x0j, Y + eor x0j, rc + +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) + ldi ZL, pm_lo8(LFSR_table) + ldi ZH, pm_hi8(LFSR_table) + sbrc AEDH, 2 ; AEDH[2] = 0 for AEAD and AEDH[1] = 1 for HASH + adiw ZL, 1 + ijmp +LFSR_DONE: +#elif defined(CRYPTO_AEAD) + LFSR7_MACRO ; only AEAD +#else + LFSR8_MACRO ; only HASH +#endif + + ldd x1j, Y + ROW_INBYTES + ldd x2j, Y + 2 * ROW_INBYTES + ldd t2j, Y + 2 * ROW_INBYTES + 1 + ldi ZL, pm_lo8(load_columns_table) + ldi ZH, pm_hi8(load_columns_table) + ijmp +Sbox_one_column: + Sbox x0j, x1j, x2j, x3j + + ; f e d c b a 9 8 7 6 5 4 3 2 1 0 + ; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- x- 0 + ; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- x' 0 + ; -- -- -- -- -- -- -- -- -- -- -- -- -- x- -- -- 2 + ; -- -- -- -- -- -- -- -- -- -- -- -- x' -- -- -- 3 + ; c b a 9 8 7 6 5 4 3 2 1 0 f e d + ; Store a byte to Row 0 + st Y, x0j + ; Store a byte combined with ShiftRow1 + lsl t1j + mov t1j, x1j ; back up the last updated byte in t1j, to be used in shiftRow1 (1 bit left) + rol x1j + std Y + ROW_INBYTES, x1j + ; Store a byte combined with ShiftRow2 + inc ccnt + cpi ccnt, ROW_INBYTES - 1 + brsh ROW2_WRAP + ldd tmp0, Y + 2 * ROW_INBYTES + 2 ; load next byte, the last updated byte needed to be shifted to the address of the next bytes + std Y + 2 * ROW_INBYTES + 2, x2j + mov x2j, t2j + mov t2j, tmp0 + jmp NO_ROW2_WRAP +ROW2_WRAP: + std Y + ROW_INBYTES + 2, x2j + mov x2j, t2j + + ; remain ShiftRow3 to be done at 'amend_shiftRow' +NO_ROW2_WRAP: + adiw YL, 1 + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + + adiw ZL, 1 + ijmp + +amend_shiftRow: + ldi YH, hi8(SRAM_STATE + ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + ROW_INBYTES) + + ld x1j, Y + bst t1j, 7 + bld x1j, 0 + st Y, x1j + + ; <<< 1 + mov x3f, x3j + rol x3j + rol x30 + rol x31 + rol x32 + rol x33 + rol x34 + rol x35 + rol x36 + rol x37 + rol x38 + rol x39 + rol x3a + rol x3b + rol x3c + rol x3d + rol x3e + rol x3f + ; <<< 24 + ; f e d c b a 9 8 7 6 5 4 3 2 1 0 => + ; c b a 9 8 7 6 5 4 3 2 1 0 f e d + mov x3j, x30 + mov x30, x3d + mov x3d, x3a + mov x3a, x37 + mov x37, x34 + mov x34, x31 + mov x31, x3e + mov x3e, x3b + mov x3b, x38 + mov x38, x35 + mov x35, x32 + mov x32, x3f + mov x3f, x3c + mov x3c, x39 + mov x39, x36 + mov x36, x33 + mov x33, x3j + + dec rcnt + breq round_loop_end + rjmp round_loop_start + +round_loop_end: + + ldi YH, hi8(SRAM_STATE + 3 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 3 * ROW_INBYTES) + st Y+, x30 + st Y+, x31 + st Y+, x32 + st Y+, x33 + st Y+, x34 + st Y+, x35 + st Y+, x36 + st Y+, x37 + st Y+, x38 + st Y+, x39 + st Y+, x3a + st Y+, x3b + st Y+, x3c + st Y+, x3d + st Y+, x3e + st Y+, x3f + + POP_CONFLICT +ret \ No newline at end of file diff --git a/knot/Implementations/crypto_aead/knot128v2/avr8_lowrom/permutation.h b/knot/Implementations/crypto_aead/knot128v2/avr8_lowrom/permutation.h new file mode 100644 index 0000000..a57c5d3 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot128v2/avr8_lowrom/permutation.h @@ -0,0 +1,109 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by KNOT Team * +; ********************************************** +; + +; +; ============================================ +; R E G I S T E R D E F I N I T I O N S +; ============================================ +; + +#define mclen r16 +#define radlen r17 +#define tcnt r17 +#define tmp0 r20 +#define tmp1 r21 +#define cnt0 r22 +#define rn r23 +#define rate r24 + +; +; ; AEDH = 0b000: for authenticate AD +; ; AEDH = 0b001: for encryption +; ; AEDH = 0b011: for decryption +; ; AEDH = 0b100: for hash +; #define AEDH r25 ; Register used globally within this program +; +; #define x30 r0 ; Register used without overlapping +; #define x31 r1 ; Register used without overlapping +; #define x32 r2 ; Register used without overlapping +; #define x33 r3 ; Register used without overlapping +; #define x34 r4 ; Register used without overlapping +; #define x35 r5 ; Register used without overlapping +; #define x36 r6 ; Register used without overlapping +; #define x37 r7 ; Register used without overlapping +; #define x38 r8 ; Register used without overlapping +; #define x39 r9 ; Register used without overlapping +; #define x3a r10 ; Register used without overlapping +; #define x3b r11 ; Register used without overlapping +; #define x3c r12 ; Register used without overlapping +; #define x3d r13 ; Register used without overlapping +; #define x3e r14 ; Register used without overlapping +; #define x3f r15 ; Register used without overlapping +; +; #define x0j r16 ; Register used overlapped, should be backed up before using +; #define x1j r17 ; Register used overlapped, should be backed up before using +; #define x2j r18 ; Register used overlapped, should be backed up before using +; #define x3j r19 ; Register used overlapped, should be backed up before using +; +; ; t2j used in knot512 to keep one byte in Row2 (because of rotating 16-bit), +; ; will not be interupt with LFSR which uses the overlapped register tmp1 +; #define t2j r21 ; Temporary register, used freely +; #define t1j r22 ; Temporary register, used freely +; #define t3j r23 ; Temporary register, used freely +; +; #define rc r24 ; Register used overlapped, should be backed up before using +; #define rcnt r26 ; Register used overlapped, should be backed up before using +; #define ccnt r27 ; Register used overlapped, should be backed up before using + +#define AEDH r25 +#define x30 r0 +#define x31 r1 +#define x32 r2 +#define x33 r3 +#define x34 r4 +#define x35 r5 +#define x36 r6 +#define x37 r7 +#define x38 r8 +#define x39 r9 +#define x3a r10 +#define x3b r11 +#define x3c r12 +#define x3d r13 +#define x3e r14 +#define x3f r15 + +#define x0j r16 +#define x1j r17 +#define x2j r18 +#define x3j r19 + +; t2j used in knot512 to keep one byte in Row2 (because of rotating 16-bit), +; will not be interupt with LFSR which uses the overlapped register tmp1 +#define t2j r21 +#define t1j r22 +#define t3j r23 + +#define rc r24 +#define rcnt r26 +#define ccnt r27 + +#if (STATE_INBITS==256) +#include "knot256.h" +#elif (STATE_INBITS==384) +#include "knot384.h" +#elif (STATE_INBITS==512) +#include "knot512.h" +#else +#error "Not specified key size and state size" +#endif + + diff --git a/knot/Implementations/crypto_aead/knot128v2/avr8_speed/api.h b/knot/Implementations/crypto_aead/knot128v2/avr8_speed/api.h new file mode 100644 index 0000000..51fc844 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot128v2/avr8_speed/api.h @@ -0,0 +1,5 @@ +#define CRYPTO_KEYBYTES 16 +#define CRYPTO_NSECBYTES 0 +#define CRYPTO_NPUBBYTES 16 +#define CRYPTO_ABYTES 16 +#define CRYPTO_NOOVERLAP 1 \ No newline at end of file diff --git a/knot/Implementations/crypto_aead/knot128v2/avr8_speed/assist.h b/knot/Implementations/crypto_aead/knot128v2/avr8_speed/assist.h new file mode 100644 index 0000000..f95a717 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot128v2/avr8_speed/assist.h @@ -0,0 +1,86 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.1 2020 by KNOT Team * +; ********************************************** +; +.macro PUSH_CONFLICT + push r16 + push r17 + push r18 + push r19 + + push r23 + push r24 + push r25 + push r26 + push r27 + push r28 + push r29 + push r30 + push r31 +.endm + +.macro POP_CONFLICT + pop r31 + pop r30 + pop r29 + pop r28 + pop r27 + pop r26 + pop r25 + pop r24 + pop r23 + + pop r19 + pop r18 + pop r17 + pop r16 +.endm + +.macro PUSH_ALL + push r2 + push r3 + push r4 + push r5 + push r6 + push r7 + push r8 + push r9 + push r10 + push r11 + push r12 + push r13 + push r14 + push r15 + push r16 + push r17 + push r28 + push r29 +.endm + +.macro POP_ALL + pop r29 + pop r28 + pop r17 + pop r16 + pop r15 + pop r14 + pop r13 + pop r12 + pop r11 + pop r10 + pop r9 + pop r8 + pop r7 + pop r6 + pop r5 + pop r4 + pop r3 + pop r2 + clr r1 +.endm \ No newline at end of file diff --git a/knot/Implementations/crypto_aead/knot128v2/avr8_speed/config.h b/knot/Implementations/crypto_aead/knot128v2/avr8_speed/config.h new file mode 100644 index 0000000..98114a9 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot128v2/avr8_speed/config.h @@ -0,0 +1,131 @@ +#ifndef __CONFIG_H__ +#define __CONFIG_H__ + +#define CRYPTO_AEAD +//#define CRYPTO_HASH + +#define MAX_MESSAGE_LENGTH 128 + +#define STATE_INBITS 384 +/* For CRYPTO_AEAD */ +#define CRYPTO_KEYBITS 128 +/* For CRYPTO_HASH */ +#define CRYPTO_BITS 256 + +#define STATE_INBYTES ((STATE_INBITS + 7) / 8) +#define ROW_INBITS ((STATE_INBITS + 3) / 4) +#define ROW_INBYTES ((ROW_INBITS + 7) / 8) + +/* For CRYPTO_AEAD */ +#define CRYPTO_KEYBYTES ((CRYPTO_KEYBITS + 7) / 8) +#define CRYPTO_NSECBYTES 0 +#define CRYPTO_NPUBBYTES CRYPTO_KEYBYTES +#define CRYPTO_ABYTES CRYPTO_KEYBYTES +#define CRYPTO_NOOVERLAP 1 + +#define MAX_ASSOCIATED_DATA_LENGTH 32 +#define MAX_CIPHER_LENGTH (MAX_MESSAGE_LENGTH + CRYPTO_ABYTES) + +#define TAG_MATCH 0 +#define TAG_UNMATCH -1 +#define OTHER_FAILURES -2 + +/* For CRYPTO_HASH */ +#define CRYPTO_BYTES ((CRYPTO_BITS + 7) / 8) + + + +#define DOMAIN_BITS 0x80 +#define PAD_BITS 0x01 +#define S384_R192_BITS 0x80 + +#if (STATE_INBITS==256) +#define C1 1 +#define C2 8 +#define C3 25 +#elif (STATE_INBITS==384) +#define C1 1 +#define C2 8 +#define C3 55 +#elif (STATE_INBITS==512) +#define C1 1 +#define C2 16 +#define C3 25 +#else +#error "Not specified state size" +#endif + +#ifdef CRYPTO_AEAD +/* For CRYPTO_AEAD */ +#define KEY_INBITS (CRYPTO_KEYBYTES * 8) +#define KEY_INBYTES (CRYPTO_KEYBYTES) + +#define NONCE_INBITS (CRYPTO_NPUBBYTES * 8) +#define NONCE_INBYTES (CRYPTO_NPUBBYTES) + +#define TAG_INBITS (CRYPTO_ABYTES * 8) +#define TAG_INBYTES (CRYPTO_ABYTES) + +#if (KEY_INBITS==128) && (STATE_INBITS==256) +#define RATE_INBITS 64 +#define NR_0 52 +#define NR_i 28 +#define NR_f 32 +#elif (KEY_INBITS==128) && (STATE_INBITS==384) +#define RATE_INBITS 192 +#define NR_0 76 +#define NR_i 28 +#define NR_f 32 +#elif (KEY_INBITS==192) && (STATE_INBITS==384) +#define RATE_INBITS 96 +#define NR_0 76 +#define NR_i 40 +#define NR_f 44 +#elif (KEY_INBITS==256) && (STATE_INBITS==512) +#define RATE_INBITS 128 +#define NR_0 100 +#define NR_i 52 +#define NR_f 56 +#else +#error "Not specified key size and state size" +#endif + +#define RATE_INBYTES ((RATE_INBITS + 7) / 8) +#define SQUEEZE_RATE_INBYTES TAG_INBYTES + +#endif + +#ifdef CRYPTO_HASH +/* For CRYPTO_HASH */ +#define HASH_DIGEST_INBITS (CRYPTO_BYTES * 8) + +#if (HASH_DIGEST_INBITS==256) && (STATE_INBITS==256) +#define HASH_RATE_INBITS 32 +#define HASH_SQUEEZE_RATE_INBITS 128 +#define NR_h 68 +#elif (HASH_DIGEST_INBITS==256) && (STATE_INBITS==384) +#define HASH_RATE_INBITS 128 +#define HASH_SQUEEZE_RATE_INBITS 128 +#define NR_h 80 +#elif (HASH_DIGEST_INBITS==384) && (STATE_INBITS==384) +#define HASH_RATE_INBITS 48 +#define HASH_SQUEEZE_RATE_INBITS 192 +#define NR_h 104 +#elif (HASH_DIGEST_INBITS==512) && (STATE_INBITS==512) +#define HASH_RATE_INBITS 64 +#define HASH_SQUEEZE_RATE_INBITS 256 +#define NR_h 140 +#else +#error "Not specified hash digest size and state size" +#endif + +#define HASH_RATE_INBYTES ((HASH_RATE_INBITS + 7) / 8) +#define HASH_SQUEEZE_RATE_INBYTES ((HASH_SQUEEZE_RATE_INBITS + 7) / 8) + +#endif + +#define TAG_MATCH 0 +#define TAG_UNMATCH -1 +#define OTHER_FAILURES -2 + +#endif \ No newline at end of file diff --git a/knot/Implementations/crypto_aead/knot128v2/avr8_speed/crypto_aead.h b/knot/Implementations/crypto_aead/knot128v2/avr8_speed/crypto_aead.h new file mode 100644 index 0000000..cd820d3 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot128v2/avr8_speed/crypto_aead.h @@ -0,0 +1,26 @@ +#ifdef __cplusplus +extern "C" { +#endif + +int crypto_aead_encrypt( + unsigned char *c,unsigned long long *clen, + const unsigned char *m,unsigned long long mlen, + const unsigned char *ad,unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k + ); + + +int crypto_aead_decrypt( + unsigned char *m,unsigned long long *outputmlen, + unsigned char *nsec, + const unsigned char *c,unsigned long long clen, + const unsigned char *ad,unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k + ); + +#ifdef __cplusplus +} +#endif diff --git a/knot/Implementations/crypto_aead/knot128v2/avr8_speed/encrypt.c b/knot/Implementations/crypto_aead/knot128v2/avr8_speed/encrypt.c new file mode 100644 index 0000000..baf0a3b --- /dev/null +++ b/knot/Implementations/crypto_aead/knot128v2/avr8_speed/encrypt.c @@ -0,0 +1,106 @@ +#include +#include +#include +#include +#include "config.h" + +extern void crypto_aead_encrypt_asm( + unsigned char *c, + const unsigned char *m, + unsigned char mlen, + const unsigned char *ad, + unsigned char adlen, + const unsigned char *npub, + const unsigned char *k + ); + +extern int crypto_aead_decrypt_asm( + unsigned char *m, + const unsigned char *c, + unsigned char clen, + const unsigned char *ad, + unsigned char adlen, + const unsigned char *npub, + const unsigned char *k + ); + +extern void crypto_hash_asm( + unsigned char *out, + const unsigned char *in, + unsigned char inlen + ); + + +int crypto_aead_encrypt( + unsigned char *c, unsigned long long *clen, + const unsigned char *m, unsigned long long mlen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k + ) +{ + /* + ... + ... the code for the cipher implementation goes here, + ... generating a ciphertext c[0],c[1],...,c[*clen-1] + ... from a plaintext m[0],m[1],...,m[mlen-1] + ... and associated data ad[0],ad[1],...,ad[adlen-1] + ... and nonce npub[0],npub[1],.. + ... and secret key k[0],k[1],... + ... the implementation shall not use nsec + ... + ... return 0; + */ + + (void)nsec; + + crypto_aead_encrypt_asm(c, m, mlen, ad, adlen, npub, k); + + *clen = mlen + TAG_INBYTES; + return 0; +} + + + +int crypto_aead_decrypt( + unsigned char *m, unsigned long long *mlen, + unsigned char *nsec, + const unsigned char *c, unsigned long long clen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k + ) +{ + /* + ... + ... the code for the AEAD implementation goes here, + ... generating a plaintext m[0],m[1],...,m[*mlen-1] + ... and secret message number nsec[0],nsec[1],... + ... from a ciphertext c[0],c[1],...,c[clen-1] + ... and associated data ad[0],ad[1],...,ad[adlen-1] + ... and nonce number npub[0],npub[1],... + ... and secret key k[0],k[1],... + ... + ... return 0; + */ + unsigned long long mlen_; + unsigned char tag_is_match; + + (void)nsec; + if (clen < CRYPTO_ABYTES) { + return -1; + } + mlen_ = clen - CRYPTO_ABYTES; + + tag_is_match = crypto_aead_decrypt_asm(m, c, mlen_, ad, adlen, npub, k); + + if (tag_is_match != 0) + { + memset(m, 0, (size_t)mlen_); + return -1; + } + + *mlen = mlen_; + return 0; +} \ No newline at end of file diff --git a/knot/Implementations/crypto_aead/knot128v2/avr8_speed/encrypt_core.S b/knot/Implementations/crypto_aead/knot128v2/avr8_speed/encrypt_core.S new file mode 100644 index 0000000..bd74f93 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot128v2/avr8_speed/encrypt_core.S @@ -0,0 +1,555 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.1 2020 by KNOT Team * +; ********************************************** +; + +; +; ============================================ +; S R A M D E F I N I T I O N S +; ============================================ +; +#include +#include "config.h" + +.section .noinit + SRAM_STATE: .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#if (STATE_INBYTES > 32) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif +#if (STATE_INBYTES > 48) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif + SRAM_MESSAGE_OUT_ADDR: .BYTE 0, 0 + SRAM_MESSAGE_IN_ADDR: .BYTE 0, 0 + SRAM_MESSAGE_IN_LEN: .BYTE 0, 0 +#ifdef CRYPTO_AEAD +; For CRYPTO_AEAD + SRAM_ASSOCIATED_DATA_ADDR: .BYTE 0, 0 + SRAM_ADLEN: .BYTE 0, 0 + SRAM_NONCE_ADDR: .BYTE 0, 0 + SRAM_KEY_ADDR: .BYTE 0, 0 + + SRAM_ADDITIONAL: + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#if (CRYPTO_ABYTES > 16) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif +#if (CRYPTO_ABYTES > 24) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif + +#endif + +.section .text + +#include "permutation.h" + +; require YH:YL be the address of the current associated data/cipher/message block +; for enc and dec, store ciphertext or plaintext +; require ZH:ZL be the address of the current cipher/message block +.macro XOR_to_State_ENCDEC + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + mov cnt0, rate +XOR_to_State_loop_ENCDEC: + ld tmp0, Y+ ; plaintext/ciphertext + ld tmp1, X ; state + eor tmp1, tmp0 ; ciphertext/plaintext + st Z+, tmp1 ; store ciphertext/plaintext + sbrc AEDH, 1 ; test auth/enc or dec, if AEDH[1] == 0, skip repalce state byte + mov tmp1, tmp0 ; if dec, replace state + st X+, tmp1 ; store state byte + dec cnt0 + brne XOR_to_State_loop_ENCDEC +; YH:YL are now the address of the next associated data block +.endm + +; require YH:YL be the address of the current associated data/cipher/message block +; for enc and dec, store ciphertext or plaintext +; require ZH:ZL be the address of the current cipher/message block +.macro XOR_to_State_AUTH + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + mov cnt0, rate +XOR_to_State_loop_AUTH: + ld tmp0, Y+ ; plaintext/ciphertext + ld tmp1, X ; state + eor tmp1, tmp0 ; ciphertext/plaintext + st X+, tmp1 ; store state byte + dec cnt0 + brne XOR_to_State_loop_AUTH +; YH:YL are now the address of the next associated data block +.endm + + + +; require YH:YL pointed to the input data +; require ZH:ZL pointed to the output data +; require cnt0 containes the nubmer of bytes in source data +; require number of bytes in source data less than rate, i.e., 0 <= cnt0 < rate +; +; the 0th bit in AEDH is used to distinguish (auth AD) or (enc/dec M/C): +; AEDH[0] = 0 for (auth AD), AEDH[0] = 1 for (enc/dec M/C) +; the 1th bit in AEDH is used to distinguish (auth AD/enc M) or (dec C): +; AEDH[1] = 0 for (auth AD/enc M), AEDH[1] = 1 for (dec C) +; AEDH = 0b000 for (auth AD) +; AEDH = 0b001 for (enc M) +; AEDH = 0b011 for (dec C) +Pad_XOR_to_State: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + tst cnt0 + breq XOR_padded_data +XOR_source_data_loop: + ld tmp0, Y+ ; plaintext/ciphertext + ld tmp1, X ; state + eor tmp1, tmp0 ; ciphertext/plaintext + sbrc AEDH, 0 ; test auth or enc/dec, if AEDH[0] == 0, skip store result + st Z+, tmp1 ; store ciphertext/plaintext + sbrc AEDH, 1 ; test auth/enc or dec, if AEDH[1] == 0, skip repalce state byte + mov tmp1, tmp0 ; if dec, replace state + st X+, tmp1 ; store state byte + dec cnt0 + brne XOR_source_data_loop +XOR_padded_data: + ldi tmp0, PAD_BITS + ld tmp1, X + eor tmp1, tmp0 + st X, tmp1 +ret + +AddDomain: + ldi XH, hi8(SRAM_STATE + STATE_INBYTES - 1) + ldi XL, lo8(SRAM_STATE + STATE_INBYTES - 1) + ldi tmp0, DOMAIN_BITS + ld tmp1, X + eor tmp0, tmp1 + st X, tmp0 +ret + +; require ZH:ZL be the address of the destination +EXTRACT_from_State: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + mov tmp1, rate +EXTRACT_from_State_loop: + ld tmp0, X+ + st Z+, tmp0 + dec tmp1 + brne EXTRACT_from_State_loop +ret + +AUTH: + tst radlen + breq AUTH_end + + cp radlen, rate + brlo auth_ad_padded_block + +auth_ad_loop: + XOR_to_State_AUTH + rcall Permutation + sub radlen, rate + cp radlen, rate + brlo auth_ad_padded_block + rjmp auth_ad_loop + +auth_ad_padded_block: + mov cnt0, radlen + rcall Pad_XOR_to_State + rcall Permutation + +AUTH_end: +ret + +#ifdef CRYPTO_AEAD +Initialization: + ldi rn, NR_0 + ldi XL, lo8(SRAM_STATE) + ldi XH, hi8(SRAM_STATE) + + lds YH, SRAM_NONCE_ADDR + lds YL, SRAM_NONCE_ADDR + 1 + ldi cnt0, CRYPTO_NPUBBYTES +load_nonce_loop: + ld tmp0, Y+ + st X+, tmp0 + dec cnt0 + brne load_nonce_loop + + lds YH, SRAM_KEY_ADDR + lds YL, SRAM_KEY_ADDR + 1 + ldi cnt0, CRYPTO_KEYBYTES +load_key_loop: + ld tmp0, Y+ + st X+, tmp0 + dec cnt0 + brne load_key_loop + +#if (STATE_INBITS==384) && (RATE_INBITS==192) + ldi cnt0, (STATE_INBYTES - CRYPTO_NPUBBYTES - CRYPTO_KEYBYTES - 1) + clr tmp0 +empty_state_loop: + st X+, tmp0 + dec cnt0 + brne empty_state_loop + ldi tmp0, S384_R192_BITS + st X+, tmp0 +#endif + + rcall Permutation +ret + +ENC: + tst mclen + breq ENC_end + + cp mclen, rate + brlo enc_padded_block + +enc_loop: + XOR_to_State_ENCDEC + ldi rn, NR_i + rcall Permutation + sub mclen, rate + cp mclen, rate + brlo enc_padded_block + rjmp enc_loop + +enc_padded_block: + mov cnt0, mclen + rcall Pad_XOR_to_State +ENC_end: +ret + +Finalization: + ldi rate, SQUEEZE_RATE_INBYTES + ldi rn, NR_f + rcall Permutation + rcall EXTRACT_from_State +ret + +; void crypto_aead_encrypt_asm( +; unsigned char *c, +; const unsigned char *m, +; unsigned long long mlen, +; const unsigned char *ad, +; unsigned long long adlen, +; const unsigned char *npub, +; const unsigned char *k +; ) +; +; unsigned char *c, is passed in r24:r25 +; const unsigned char *m, is passed in r22:r23 +; unsigned long long mlen, is passed in r20:r21, only LSB (r20) is used +; const unsigned char *ad, is passed in r18:r19 +; unsigned long long adlen, is passed in r16:r17, only LSB (r16) is used +; const unsigned char *npub, is passed in r14:r15 +; const unsigned char *k is passed in r12:r13 +.global crypto_aead_encrypt_asm +crypto_aead_encrypt_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store cipher address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store message address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store message length in SRAM_MESSAGE_IN_LEN + st X+, r20 + st X+, r19 ;store associated data address in SRAM_ASSOCIATED_DATA_ADDR + st X+, r18 + st X+, r17 ;store associated data length in SRAM_ADLEN + st X+, r16 + st X+, r15 ;store nonce address in SRAM_NONCE_ADDR + st X+, r14 + st X+, r13 ;store key address in SRAM_KEY_ADDR + st X+, r12 + mov radlen, r16 + mov mclen, r20 + + rcall Initialization + + ldi rn, NR_i + ldi rate, RATE_INBYTES + ldi AEDH, 0b000 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_ASSOCIATED_DATA_ADDR + lds YL, SRAM_ASSOCIATED_DATA_ADDR + 1 + rcall AUTH + rcall AddDomain + ldi AEDH, 0b001 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_MESSAGE_IN_ADDR + lds YL, SRAM_MESSAGE_IN_ADDR + 1 + lds ZH, SRAM_MESSAGE_OUT_ADDR + lds ZL, SRAM_MESSAGE_OUT_ADDR + 1 + rcall ENC + rcall Finalization + POP_ALL +ret + +; int crypto_aead_decrypt_asm( +; unsigned char *m, +; const unsigned char *c, +; unsigned long long clen, +; const unsigned char *ad, +; unsigned long long adlen, +; const unsigned char *npub, +; const unsigned char *k +; ) +; +; unsigned char *m, is passed in r24:r25 +; const unsigned char *c, is passed in r22:r23 +; unsigned long long clen, is passed in r20:r21, only LSB (r20) is used +; const unsigned char *ad, is passed in r18:r19 +; unsigned long long adlen, is passed in r16:r17, only LSB (r16) is used +; const unsigned char *npub, is passed in r14:r15 +; const unsigned char *k is passed in r12:r13 +.global crypto_aead_decrypt_asm +crypto_aead_decrypt_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store message address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store cipher address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store cipher length in SRAM_MESSAGE_IN_LEN + st X+, r20 + st X+, r19 ;store associated data address in SRAM_ASSOCIATED_DATA_ADDR + st X+, r18 + st X+, r17 ;store associated data length in SRAM_ADLEN + st X+, r16 + st X+, r15 ;store nonce address in SRAM_NONCE_ADDR + st X+, r14 + st X+, r13 ;store key address in SRAM_KEY_ADDR + st X+, r12 + mov radlen, r16 + mov mclen, r20 + + rcall Initialization + + ldi rn, NR_i + ldi rate, RATE_INBYTES + ldi AEDH, 0b000 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_ASSOCIATED_DATA_ADDR + lds YL, SRAM_ASSOCIATED_DATA_ADDR + 1 + rcall AUTH + rcall AddDomain + ldi AEDH, 0b011 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_MESSAGE_IN_ADDR + lds YL, SRAM_MESSAGE_IN_ADDR + 1 + lds ZH, SRAM_MESSAGE_OUT_ADDR + lds ZL, SRAM_MESSAGE_OUT_ADDR + 1 + rcall ENC + + ldi ZH, hi8(SRAM_ADDITIONAL) + ldi ZL, lo8(SRAM_ADDITIONAL) + rcall Finalization + + sbiw ZL, CRYPTO_ABYTES + ldi cnt0, CRYPTO_ABYTES +compare_tag: + ld tmp0, Z+ + ld tmp1, Y+ + cp tmp0, tmp1 + brne return_tag_not_match + dec cnt0 + brne compare_tag + rjmp return_tag_match + +return_tag_not_match: + ldi r25, 0xFF + ldi r24, 0xFF + rjmp crypto_aead_decrypt_end + +return_tag_match: + clr r25 + clr r24 +crypto_aead_decrypt_end: + POP_ALL +ret + +; #ifdef CRYPTO_AEAD +#endif + + +#ifdef CRYPTO_HASH + +; void crypto_hash_asm( +; unsigned char *out, +; const unsigned char *in, +; unsigned long long inlen +; ) +; +; unsigned char *out, is passed in r24:r25 +; const unsigned char *in, is passed in r22:r23 +; unsigned long long inlen, is passed in r20:r21, only LSB (r20) is used +.global crypto_hash_asm +crypto_hash_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store message address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store cipher address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store cipher length in SRAM_MESSAGE_IN_LEN + st X+, r20 + mov mclen, r20 + + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) +#if (STATE_INBITS==384) && (HASH_RATE_INBITS==128) + ldi cnt0, STATE_INBYTES - 1 +#else + ldi cnt0, STATE_INBYTES +#endif + clr tmp0 +zero_state: + st X+, tmp0 + dec cnt0 + brne zero_state + +#if (STATE_INBITS==384) && (HASH_RATE_INBITS==128) + ldi tmp0, S384_R192_BITS + st X+, tmp0 +#endif + + ldi rn, NR_h + ldi AEDH, 0b100 + +HASH_ABSORBING: + mov radlen, mclen + tst radlen + breq EMPTY_M + ldi rate, HASH_RATE_INBYTES + lds YH, SRAM_MESSAGE_IN_ADDR + lds YL, SRAM_MESSAGE_IN_ADDR + 1 + rcall AUTH + rjmp HASH_SQUEEZING + +EMPTY_M: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + ldi tmp0, PAD_BITS + ld tmp1, X + eor tmp1, tmp0 + st X, tmp1 + rcall Permutation + +HASH_SQUEEZING: + ldi rate, HASH_SQUEEZE_RATE_INBYTES + lds ZH, SRAM_MESSAGE_OUT_ADDR + lds ZL, SRAM_MESSAGE_OUT_ADDR + 1 + ldi tcnt, CRYPTO_BYTES +SQUEEZING_loop: + rcall EXTRACT_from_State + subi tcnt, HASH_SQUEEZE_RATE_INBYTES + breq HASH_SQUEEZING_end + rcall Permutation + rjmp SQUEEZING_loop +HASH_SQUEEZING_end: + POP_ALL +ret + +#endif + + +; Byte Order In AVR 8: +; KNOT-AEAD(128, 256, 64): +; N[ 0] AEAD_State[ 0] | Message[ 0] Perm_row_0[0] 0 Tag[ 0] +; N[ 1] AEAD_State[ 1] | Message[ 1] Perm_row_0[1] 0 Tag[ 1] +; N[ 2] AEAD_State[ 2] | Message[ 2] Perm_row_0[2] 0 Tag[ 2] +; N[ 3] AEAD_State[ 3] | Message[ 3] Perm_row_0[3] 0 Tag[ 3] +; N[ 4] AEAD_State[ 4] | Message[ 4] 0x01 Perm_row_0[4] 0 Tag[ 4] +; N[ 5] AEAD_State[ 5] | Message[ 5] 0x00 Perm_row_0[5] 0 Tag[ 5] +; N[ 6] AEAD_State[ 6] | Message[ 6] 0x00 Perm_row_0[6] 0 Tag[ 6] +; N[ 7] AEAD_State[ 7] | Message[ 7] 0x00 Perm_row_0[7] <<< 0 Tag[ 7] +; N[ 8] AEAD_State[ 8] | Perm_row_1[0] 1 +; N[ 9] AEAD_State[ 9] | Perm_row_1[1] 1 +; N[10] AEAD_State[10] | Perm_row_1[2] 1 +; N[11] AEAD_State[11] | Perm_row_1[3] 1 +; N[12] AEAD_State[12] | Perm_row_1[4] 1 +; N[13] AEAD_State[13] | Perm_row_1[5] 1 +; N[14] AEAD_State[14] | Perm_row_1[6] 1 +; N[15] AEAD_State[15] | Perm_row_1[7] <<< 1 +; K[ 0] AEAD_State[16] | Perm_row_2[0] 8 +; K[ 1] AEAD_State[17] | Perm_row_2[1] 8 +; K[ 2] AEAD_State[18] | Perm_row_2[2] 8 +; K[ 3] AEAD_State[19] | Perm_row_2[3] 8 +; K[ 4] AEAD_State[20] | Perm_row_2[4] 8 +; K[ 5] AEAD_State[21] | Perm_row_2[5] 8 +; K[ 6] AEAD_State[22] | Perm_row_2[6] 8 +; K[ 7] AEAD_State[23] | Perm_row_2[7] <<< 8 +; K[ 8] AEAD_State[24] | Perm_row_3[0] 25 +; K[ 9] AEAD_State[25] | Perm_row_3[1] 25 +; K[10] AEAD_State[26] | Perm_row_3[2] 25 +; K[11] AEAD_State[27] | Perm_row_3[3] 25 +; K[12] AEAD_State[28] | Perm_row_3[4] 25 +; K[13] AEAD_State[29] | Perm_row_3[5] 25 +; K[14] AEAD_State[30] | Perm_row_3[6] 25 +; K[15] AEAD_State[31] | ^0x80 Perm_row_3[7] <<< 25 +; +; +; KNOT-AEAD(128, 384, 192): +; Initalization +; N[ 0] AEAD_State[ 0] | Message[ 0] Perm_row_0[ 0] 0 Tag[ 0] +; N[ 1] AEAD_State[ 1] | Message[ 1] Perm_row_0[ 1] 0 Tag[ 1] +; N[ 2] AEAD_State[ 2] | Message[ 2] Perm_row_0[ 2] 0 Tag[ 2] +; N[ 3] AEAD_State[ 3] | Message[ 3] Perm_row_0[ 3] 0 Tag[ 3] +; N[ 4] AEAD_State[ 4] | Message[ 4] 0x01 Perm_row_0[ 4] 0 Tag[ 4] +; N[ 5] AEAD_State[ 5] | Message[ 5] 0x00 Perm_row_0[ 5] 0 Tag[ 5] +; N[ 6] AEAD_State[ 6] | Message[ 6] 0x00 Perm_row_0[ 6] 0 Tag[ 6] +; N[ 7] AEAD_State[ 7] | Message[ 7] 0x00 Perm_row_0[ 7] 0 Tag[ 7] +; N[ 8] AEAD_State[ 8] | Message[ 8] 0x00 Perm_row_0[ 8] 0 Tag[ 8] +; N[ 9] AEAD_State[ 9] | Message[ 9] 0x00 Perm_row_0[ 9] 0 Tag[ 9] +; N[10] AEAD_State[10] | Message[10] 0x00 Perm_row_0[10] 0 Tag[10] +; N[11] AEAD_State[11] | Message[11] 0x00 Perm_row_0[11] <<< 0 Tag[11] +; N[12] AEAD_State[12] | Message[12] 0x00 Perm_row_1[ 0] 1 Tag[12] +; N[13] AEAD_State[13] | Message[13] 0x00 Perm_row_1[ 1] 1 Tag[13] +; N[14] AEAD_State[14] | Message[14] 0x00 Perm_row_1[ 2] 1 Tag[14] +; N[15] AEAD_State[15] | Message[15] 0x00 Perm_row_1[ 3] 1 Tag[15] +; K[ 0] AEAD_State[16] | Message[16] 0x00 Perm_row_1[ 4] 1 +; K[ 1] AEAD_State[17] | Message[17] 0x00 Perm_row_1[ 5] 1 +; K[ 2] AEAD_State[18] | Message[18] 0x00 Perm_row_1[ 6] 1 +; K[ 3] AEAD_State[19] | Message[19] 0x00 Perm_row_1[ 7] 1 +; K[ 4] AEAD_State[20] | Message[20] 0x00 Perm_row_1[ 8] 1 +; K[ 5] AEAD_State[21] | Message[21] 0x00 Perm_row_1[ 9] 1 +; K[ 6] AEAD_State[22] | Message[22] 0x00 Perm_row_1[10] 1 +; K[ 7] AEAD_State[23] | Message[23] 0x00 Perm_row_1[11] <<< 1 +; K[ 8] AEAD_State[24] | Perm_row_2[ 0] 8 +; K[ 9] AEAD_State[25] | Perm_row_2[ 1] 8 +; K[10] AEAD_State[26] | Perm_row_2[ 2] 8 +; K[11] AEAD_State[27] | Perm_row_2[ 3] 8 +; K[12] AEAD_State[28] | Perm_row_2[ 4] 8 +; K[13] AEAD_State[29] | Perm_row_2[ 5] 8 +; K[14] AEAD_State[30] | Perm_row_2[ 6] 8 +; K[15] AEAD_State[31] | Perm_row_2[ 7] 8 +; 0x00 AEAD_State[32] | Perm_row_2[ 8] 8 +; 0x00 AEAD_State[33] | Perm_row_2[ 9] 8 +; 0x00 AEAD_State[34] | Perm_row_2[10] 8 +; 0x00 AEAD_State[35] | Perm_row_2[11] <<< 8 +; 0x00 AEAD_State[36] | Perm_row_3[ 0] 55 +; 0x00 AEAD_State[37] | Perm_row_3[ 1] 55 +; 0x00 AEAD_State[38] | Perm_row_3[ 2] 55 +; 0x00 AEAD_State[39] | Perm_row_3[ 3] 55 +; 0x00 AEAD_State[40] | Perm_row_3[ 4] 55 +; 0x00 AEAD_State[41] | Perm_row_3[ 5] 55 +; 0x00 AEAD_State[42] | Perm_row_3[ 6] 55 +; 0x00 AEAD_State[43] | Perm_row_3[ 7] 55 +; 0x00 AEAD_State[44] | Perm_row_3[ 8] 55 +; 0x00 AEAD_State[45] | Perm_row_3[ 9] 55 +; 0x00 AEAD_State[46] | Perm_row_3[10] 55 +; 0x00 ^0x80 AEAD_State[47] | ^0x80 Perm_row_3[11] <<< 55 diff --git a/knot/Implementations/crypto_aead/knot128v2/avr8_speed/knot256.h b/knot/Implementations/crypto_aead/knot128v2/avr8_speed/knot256.h new file mode 100644 index 0000000..f99f68b --- /dev/null +++ b/knot/Implementations/crypto_aead/knot128v2/avr8_speed/knot256.h @@ -0,0 +1,306 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.1 2020 by KNOT Team * +; ********************************************** +; +#define x10 r0 +#define x11 r1 +#define x12 r2 +#define x13 r3 +#define x14 r4 +#define x15 r5 +#define x16 r6 +#define x17 r7 + +; an intentionally arrangement of registers to facilitate movw +#define x20 r8 +#define x21 r10 +#define x22 r12 +#define x23 r14 +#define x24 r9 +#define x25 r11 +#define x26 r13 +#define x27 r15 + +; an intentionally arrangement of registers to facilitate movw +#define x30 r16 +#define x35 r18 +#define x32 r20 +#define x37 r22 +#define x34 r17 +#define x31 r19 +#define x36 r21 +#define x33 r23 + +#define t0j r24 +#define t1j r25 +#define x0j r27 + +#include "assist.h" + +.macro Sbox i0, i1, i2, i3 + mov t0j, \i1 + com \i0 + and \i1, \i0 + eor \i1, \i2 + or \i2, t0j + eor \i0, \i3 + eor \i2, \i0 + eor t0j, \i3 + and \i0, \i1 + eor \i3, \i1 + eor \i0, t0j + and t0j, \i2 + eor \i1, t0j +.endm + +Permutation: + PUSH_CONFLICT + mov rcnt, rn + + ldi YH, hi8(SRAM_STATE + ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + ROW_INBYTES) + ld x10, Y+ + ld x11, Y+ + ld x12, Y+ + ld x13, Y+ + ld x14, Y+ + ld x15, Y+ + ld x16, Y+ + ld x17, Y+ + ld x20, Y+ + ld x21, Y+ + ld x22, Y+ + ld x23, Y+ + ld x24, Y+ + ld x25, Y+ + ld x26, Y+ + ld x27, Y+ + ld x30, Y+ + ld x31, Y+ + ld x32, Y+ + ld x33, Y+ + ld x34, Y+ + ld x35, Y+ + ld x36, Y+ + ld x37, Y+ + +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) + sbrc AEDH, 2 ; AEDH[2] = 0 for AEAD and AEDH[2] = 1 for HASH + rjmp For_Hash +For_AEAD: + ldi ZL, lo8(RC_LFSR6) + ldi ZH, hi8(RC_LFSR6) + rjmp round_loop_start +For_Hash: + ldi ZL, lo8(RC_LFSR7) + ldi ZH, hi8(RC_LFSR7) +#elif defined(CRYPTO_AEAD) + ldi ZL, lo8(RC_LFSR6) + ldi ZH, hi8(RC_LFSR6) +#else + ldi ZL, lo8(RC_LFSR7) + ldi ZH, hi8(RC_LFSR7) +#endif + +round_loop_start: + ; AddRC + lpm t0j, Z+ + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + ld x0j, Y + eor x0j, t0j + + ; SubColumns + Sbox x0j, x10, x20, x30 + st Y+, x0j + ld x0j, Y + Sbox x0j, x11, x21, x31 + st Y+, x0j + ld x0j, Y + Sbox x0j, x12, x22, x32 + st Y+, x0j + ld x0j, Y + Sbox x0j, x13, x23, x33 + st Y+, x0j + ld x0j, Y + Sbox x0j, x14, x24, x34 + st Y+, x0j + ld x0j, Y + Sbox x0j, x15, x25, x35 + st Y+, x0j + ld x0j, Y + Sbox x0j, x16, x26, x36 + st Y+, x0j + ld x0j, Y + Sbox x0j, x17, x27, x37 + st Y, x0j + + ; ShiftRows + ; <<< 1 + mov t0j, x17 + rol t0j + rol x10 + rol x11 + rol x12 + rol x13 + rol x14 + rol x15 + rol x16 + rol x17 + + ; <<< 8 + ; 7 6 5 4 3 2 1 0 => 6 5 4 3 2 1 0 7 + ;mov t0j, x27 + ;mov x27, x26 + ;mov x26, x25 + ;mov x25, x24 + ;mov x24, x23 + ;mov x23, x22 + ;mov x22, x21 + ;mov x21, x20 + ;mov x20, t0j + ; an intentionally arrangement of registers to facilitate movw + movw t0j, x23 ; t1j:t0j <= x27:x23 + movw x23, x22 ; x27:x23 <= x26:x22 + movw x22, x21 ; x26:x22 <= x25:x21 + movw x21, x20 ; x25:x21 <= x24:x20 + mov x20, t1j ; x20 <= t1j + mov x24, t0j ; x24 <= t0j + + ; <<< 1 + mov t0j, x37 + rol t0j + rol x30 + rol x31 + rol x32 + rol x33 + rol x34 + rol x35 + rol x36 + rol x37 + ; <<< 24 + ; 7 6 5 4 3 2 1 0 => 4 3 2 1 0 7 6 5 + ;mov t0j, x30 + ;mov x30, x35 + ;mov x35, x32 + ;mov x32, x37 + ;mov x37, x34 + ;mov x34, x31 + ;mov x31, x36 + ;mov x36, x33 + ;mov x33, t0j + ; an intentionally arrangement of registers to facilitate movw + ;x30 r16 + ;x35 r18 + ;x32 r20 + ;x37 r22 + ;x34 r17 + ;x31 r19 + ;x36 r21 + ;x33 r23 + movw t0j, x30 ; t1j:t0j <= x34:x30 + movw x30, x35 ; x34:x30 <= x31:x35 + movw x35, x32 ; x31:x35 <= x36:x32 + movw x32, x37 ; x36:x32 <= x33:x37 + mov x37, t1j ; x37 <= x34 + mov x33, t0j ; x33 <= x30 + + dec rcnt + breq round_loop_end + jmp round_loop_start + +round_loop_end: + ldi YH, hi8(SRAM_STATE + ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + ROW_INBYTES) + st Y+, x10 + st Y+, x11 + st Y+, x12 + st Y+, x13 + st Y+, x14 + st Y+, x15 + st Y+, x16 + st Y+, x17 + st Y+, x20 + st Y+, x21 + st Y+, x22 + st Y+, x23 + st Y+, x24 + st Y+, x25 + st Y+, x26 + st Y+, x27 + st Y+, x30 + st Y+, x31 + st Y+, x32 + st Y+, x33 + st Y+, x34 + st Y+, x35 + st Y+, x36 + st Y+, x37 + + POP_CONFLICT +ret + + +.section .text +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) +RC_LFSR6: +.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x21, 0x03, 0x06 +.byte 0x0c, 0x18, 0x31, 0x22, 0x05, 0x0a, 0x14, 0x29 +.byte 0x13, 0x27, 0x0f, 0x1e, 0x3d, 0x3a, 0x34, 0x28 +.byte 0x11, 0x23, 0x07, 0x0e, 0x1c, 0x39, 0x32, 0x24 +.byte 0x09, 0x12, 0x25, 0x0b, 0x16, 0x2d, 0x1b, 0x37 +.byte 0x2e, 0x1d, 0x3b, 0x36, 0x2c, 0x19, 0x33, 0x26 +.byte 0x0d, 0x1a, 0x35, 0x2a, 0x15, 0x2b, 0x17, 0x2f +.byte 0x1f, 0x3f, 0x3e, 0x3c, 0x38, 0x30, 0x20, 0x00 +RC_LFSR7: +.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x41, 0x03 +.byte 0x06, 0x0c, 0x18, 0x30, 0x61, 0x42, 0x05, 0x0a +.byte 0x14, 0x28, 0x51, 0x23, 0x47, 0x0f, 0x1e, 0x3c +.byte 0x79, 0x72, 0x64, 0x48, 0x11, 0x22, 0x45, 0x0b +.byte 0x16, 0x2c, 0x59, 0x33, 0x67, 0x4e, 0x1d, 0x3a +.byte 0x75, 0x6a, 0x54, 0x29, 0x53, 0x27, 0x4f, 0x1f +.byte 0x3e, 0x7d, 0x7a, 0x74, 0x68, 0x50, 0x21, 0x43 +.byte 0x07, 0x0e, 0x1c, 0x38, 0x71, 0x62, 0x44, 0x09 +.byte 0x12, 0x24, 0x49, 0x13, 0x26, 0x4d, 0x1b, 0x36 +.byte 0x6d, 0x5a, 0x35, 0x6b, 0x56, 0x2d, 0x5b, 0x37 +.byte 0x6f, 0x5e, 0x3d, 0x7b, 0x76, 0x6c, 0x58, 0x31 +.byte 0x63, 0x46, 0x0d, 0x1a, 0x34, 0x69, 0x52, 0x25 +.byte 0x4b, 0x17, 0x2e, 0x5d, 0x3b, 0x77, 0x6e, 0x5c +.byte 0x39, 0x73, 0x66, 0x4c, 0x19, 0x32, 0x65, 0x4a +.byte 0x15, 0x2a, 0x55, 0x2b, 0x57, 0x2f, 0x5f, 0x3f +.byte 0x7f, 0x7e, 0x7c, 0x78, 0x70, 0x60, 0x40, 0x00 +#elif defined(CRYPTO_AEAD) +RC_LFSR6: +.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x21, 0x03, 0x06 +.byte 0x0c, 0x18, 0x31, 0x22, 0x05, 0x0a, 0x14, 0x29 +.byte 0x13, 0x27, 0x0f, 0x1e, 0x3d, 0x3a, 0x34, 0x28 +.byte 0x11, 0x23, 0x07, 0x0e, 0x1c, 0x39, 0x32, 0x24 +.byte 0x09, 0x12, 0x25, 0x0b, 0x16, 0x2d, 0x1b, 0x37 +.byte 0x2e, 0x1d, 0x3b, 0x36, 0x2c, 0x19, 0x33, 0x26 +.byte 0x0d, 0x1a, 0x35, 0x2a, 0x15, 0x2b, 0x17, 0x2f +.byte 0x1f, 0x3f, 0x3e, 0x3c, 0x38, 0x30, 0x20, 0x00 +#else +RC_LFSR7: +.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x41, 0x03 +.byte 0x06, 0x0c, 0x18, 0x30, 0x61, 0x42, 0x05, 0x0a +.byte 0x14, 0x28, 0x51, 0x23, 0x47, 0x0f, 0x1e, 0x3c +.byte 0x79, 0x72, 0x64, 0x48, 0x11, 0x22, 0x45, 0x0b +.byte 0x16, 0x2c, 0x59, 0x33, 0x67, 0x4e, 0x1d, 0x3a +.byte 0x75, 0x6a, 0x54, 0x29, 0x53, 0x27, 0x4f, 0x1f +.byte 0x3e, 0x7d, 0x7a, 0x74, 0x68, 0x50, 0x21, 0x43 +.byte 0x07, 0x0e, 0x1c, 0x38, 0x71, 0x62, 0x44, 0x09 +.byte 0x12, 0x24, 0x49, 0x13, 0x26, 0x4d, 0x1b, 0x36 +.byte 0x6d, 0x5a, 0x35, 0x6b, 0x56, 0x2d, 0x5b, 0x37 +.byte 0x6f, 0x5e, 0x3d, 0x7b, 0x76, 0x6c, 0x58, 0x31 +.byte 0x63, 0x46, 0x0d, 0x1a, 0x34, 0x69, 0x52, 0x25 +.byte 0x4b, 0x17, 0x2e, 0x5d, 0x3b, 0x77, 0x6e, 0x5c +.byte 0x39, 0x73, 0x66, 0x4c, 0x19, 0x32, 0x65, 0x4a +.byte 0x15, 0x2a, 0x55, 0x2b, 0x57, 0x2f, 0x5f, 0x3f +.byte 0x7f, 0x7e, 0x7c, 0x78, 0x70, 0x60, 0x40, 0x00 +#endif \ No newline at end of file diff --git a/knot/Implementations/crypto_aead/knot128v2/avr8_speed/knot384.h b/knot/Implementations/crypto_aead/knot128v2/avr8_speed/knot384.h new file mode 100644 index 0000000..0b3dd75 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot128v2/avr8_speed/knot384.h @@ -0,0 +1,261 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.1 2020 by KNOT Team * +; ********************************************** +; + +; an intentionally arrangement of registers to facilitate movw +#define x20 r0 +#define x21 r2 +#define x22 r4 +#define x23 r6 +#define x24 r8 +#define x25 r10 +#define x26 r1 +#define x27 r3 +#define x28 r5 +#define x29 r7 +#define x2a r9 +#define x2b r11 + +; an intentionally arrangement of registers to facilitate movw +#define x30 r22 +#define x35 r20 +#define x3a r18 +#define x33 r16 +#define x38 r14 +#define x31 r12 +#define x36 r23 +#define x3b r21 +#define x34 r19 +#define x39 r17 +#define x32 r15 +#define x37 r13 + +#define t0j r24 +#define t1j r25 +#define x0j r25 +#define x1j r27 + +#include "assist.h" + +.macro Sbox i0, i1, i2, i3 + ldi t0j, 0xFF + eor \i0, t0j + mov t0j, \i1 + and \i1, \i0 + eor \i1, \i2 + or \i2, t0j + eor \i0, \i3 + eor \i2, \i0 + eor t0j, \i3 + and \i0, \i1 + eor \i3, \i1 + eor \i0, t0j + and t0j, \i2 + eor \i1, t0j +.endm + +.macro OneColumn i0, i1, i2, i3 + ld \i0, Y + ldd \i1, Y + ROW_INBYTES + Sbox \i0, \i1, \i2, \i3 + st Y+, \i0 + rol \i1 ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES -1, \i1 +.endm + +Permutation: + PUSH_CONFLICT + mov rcnt, rn + + ldi YH, hi8(SRAM_STATE + 2 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 2 * ROW_INBYTES) + ld x20, Y+ + ld x21, Y+ + ld x22, Y+ + ld x23, Y+ + ld x24, Y+ + ld x25, Y+ + ld x26, Y+ + ld x27, Y+ + ld x28, Y+ + ld x29, Y+ + ld x2a, Y+ + ld x2b, Y+ + ld x30, Y+ + ld x31, Y+ + ld x32, Y+ + ld x33, Y+ + ld x34, Y+ + ld x35, Y+ + ld x36, Y+ + ld x37, Y+ + ld x38, Y+ + ld x39, Y+ + ld x3a, Y+ + ld x3b, Y+ + + ldi ZL, lo8(RC_LFSR7) + ldi ZH, hi8(RC_LFSR7) + +round_loop_start: + ; AddRC + lpm t0j, Z+ + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + ld x0j, Y + eor x0j, t0j + + ldd x1j, Y + ROW_INBYTES + Sbox x0j, x1j, x20, x30 + st Y+, x0j + lsl x1j ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES -1, x1j + + OneColumn x0j, x1j, x21, x31 + OneColumn x0j, x1j, x22, x32 + OneColumn x0j, x1j, x23, x33 + OneColumn x0j, x1j, x24, x34 + OneColumn x0j, x1j, x25, x35 + OneColumn x0j, x1j, x26, x36 + OneColumn x0j, x1j, x27, x37 + OneColumn x0j, x1j, x28, x38 + OneColumn x0j, x1j, x29, x39 + OneColumn x0j, x1j, x2a, x3a + OneColumn x0j, x1j, x2b, x3b + + ld x1j, Y + eor t0j, t0j + adc x1j, t0j + st Y, x1j + + ; b a 9 8 7 6 5 4 3 2 1 0 + ; -- -- -- -- -- -- -- -- -- -- -- x- 0 + ; -- -- -- -- -- -- -- -- -- -- -- x' 0 + ; -- -- -- -- -- -- -- -- -- -- x- -- 1 + ; -- -- -- -- x' -- -- -- -- -- -- -- 7 + ; 4 3 2 1 0 b a 9 8 7 6 5 + + ; ShiftRows -- the last two rows + ; <<< 8 + ; b a 9 8 7 6 5 4 3 2 1 0 => a 9 8 7 6 5 4 3 2 1 0 b + movw t0j, x25 ; t1j:t0j <= x2b:x25 + movw x25, x24 ; x2b:x25 <= x2a:x24 + movw x24, x23 ; x2a:x24 <= x29:x23 + movw x23, x22 ; x29:x23 <= x28:x22 + movw x22, x21 ; x28:x22 <= x27:x21 + movw x21, x20 ; x27:x21 <= x26:x20 + mov x26, t0j ; x26 <= x25 + mov x20, t1j ; x20 <= x2b + + ; >>> 1 + mov t0j, x3b + ror t0j + ror x3a + ror x39 + ror x38 + ror x37 + ror x36 + ror x35 + ror x34 + ror x33 + ror x32 + ror x31 + ror x30 + ror x3b + ; <<< 56 + ; b a 9 8 7 6 5 4 3 2 1 0 => 4 3 2 1 0 b a 9 8 7 6 5 + ; mov x3j, x30 + ; mov x30, x35 + ; mov x35, x3a + ; mov x3a, x33 + ; mov x33, x38 + ; mov x38, x31 + ; mov x31, x36 + ; mov x36, x3b + ; mov x3b, x34 + ; mov x34, x39 + ; mov x39, x32 + ; mov x32, x37 + ; mov x37, x3j + ; an intentionally arrangement of registers to facilitate movw + ; x30 r22 + ; x35 r20 + ; x3a r18 + ; x33 r16 + ; x38 r14 + ; x31 r12 + ; x36 r23 + ; x3b r21 + ; x34 r19 + ; x39 r17 + ; x32 r15 + ; x37 r13 + movw t0j, x30 ; t1j:t0j <= x36:x30 + movw x30, x35 ; x36:x30 <= x3b:x35 + movw x35, x3a ; x3b:x35 <= x34:x3a + movw x3a, x33 ; x34:x3a <= x39:x33 + movw x33, x38 ; x39:x33 <= x32:x38 + movw x38, x31 ; x32:x38 <= x37:x31 + mov x31, t1j ; x31 <= x36 + mov x37, t0j ; x37 <= x30 + + dec rcnt + breq round_loop_end + jmp round_loop_start + +round_loop_end: + + ldi YH, hi8(SRAM_STATE + 2 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 2 * ROW_INBYTES) + st Y+, x20 + st Y+, x21 + st Y+, x22 + st Y+, x23 + st Y+, x24 + st Y+, x25 + st Y+, x26 + st Y+, x27 + st Y+, x28 + st Y+, x29 + st Y+, x2a + st Y+, x2b + st Y+, x30 + st Y+, x31 + st Y+, x32 + st Y+, x33 + st Y+, x34 + st Y+, x35 + st Y+, x36 + st Y+, x37 + st Y+, x38 + st Y+, x39 + st Y+, x3a + st Y+, x3b + + POP_CONFLICT +ret + +RC_LFSR7: +.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x41, 0x03 +.byte 0x06, 0x0c, 0x18, 0x30, 0x61, 0x42, 0x05, 0x0a +.byte 0x14, 0x28, 0x51, 0x23, 0x47, 0x0f, 0x1e, 0x3c +.byte 0x79, 0x72, 0x64, 0x48, 0x11, 0x22, 0x45, 0x0b +.byte 0x16, 0x2c, 0x59, 0x33, 0x67, 0x4e, 0x1d, 0x3a +.byte 0x75, 0x6a, 0x54, 0x29, 0x53, 0x27, 0x4f, 0x1f +.byte 0x3e, 0x7d, 0x7a, 0x74, 0x68, 0x50, 0x21, 0x43 +.byte 0x07, 0x0e, 0x1c, 0x38, 0x71, 0x62, 0x44, 0x09 +.byte 0x12, 0x24, 0x49, 0x13, 0x26, 0x4d, 0x1b, 0x36 +.byte 0x6d, 0x5a, 0x35, 0x6b, 0x56, 0x2d, 0x5b, 0x37 +.byte 0x6f, 0x5e, 0x3d, 0x7b, 0x76, 0x6c, 0x58, 0x31 +.byte 0x63, 0x46, 0x0d, 0x1a, 0x34, 0x69, 0x52, 0x25 +.byte 0x4b, 0x17, 0x2e, 0x5d, 0x3b, 0x77, 0x6e, 0x5c +.byte 0x39, 0x73, 0x66, 0x4c, 0x19, 0x32, 0x65, 0x4a +.byte 0x15, 0x2a, 0x55, 0x2b, 0x57, 0x2f, 0x5f, 0x3f +.byte 0x7f, 0x7e, 0x7c, 0x78, 0x70, 0x60, 0x40, 0x00 \ No newline at end of file diff --git a/knot/Implementations/crypto_aead/knot128v2/avr8_speed/knot512.h b/knot/Implementations/crypto_aead/knot128v2/avr8_speed/knot512.h new file mode 100644 index 0000000..b0e4319 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot128v2/avr8_speed/knot512.h @@ -0,0 +1,435 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.1 2020 by KNOT Team * +; ********************************************** +; +#define x20 r0 +#define x22 r2 +#define x24 r4 +#define x26 r6 +#define x28 r1 +#define x2a r3 +#define x2c r5 +#define x2e r7 + +#define x30 r8 +#define x3d r10 +#define x3a r12 +#define x37 r14 +#define x34 r16 +#define x31 r18 +#define x3e r20 +#define x3b r22 +#define x38 r9 +#define x35 r11 +#define x32 r13 +#define x3f r15 +#define x3c r17 +#define x39 r19 +#define x36 r21 +#define x33 r23 + +#define t0j r24 +#define t1j r25 +#define x0j r25 +#define x1j r27 +#define x2j r26 + +#include "assist.h" + +.macro Sbox i0, i1, i2, i3 + ldi t0j, 0xFF + eor \i0, t0j + mov t0j, \i1 + and \i1, \i0 + eor \i1, \i2 + or \i2, t0j + eor \i0, \i3 + eor \i2, \i0 + eor t0j, \i3 + and \i0, \i1 + eor \i3, \i1 + eor \i0, t0j + and t0j, \i2 + eor \i1, t0j +.endm + +.macro TwoColumns i2_e, i3_e, i3_o + ; column 2i + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + Sbox x0j, x1j, \i2_e, \i3_e + st Y+, x0j + rol x1j ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES - 1, x1j + + ; column 2i+1 + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + Sbox x0j, x1j, x2j, \i3_o + st Y+, x0j + rol x1j ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES - 1, x1j + ldd t0j, Y + 2 * ROW_INBYTES + 1 + std Y + 2 * ROW_INBYTES + 1, x2j + mov x2j, t0j +.endm + +Permutation: + PUSH_CONFLICT + mov rcnt, rn + push rcnt + + ldi YH, hi8(SRAM_STATE + 2 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 2 * ROW_INBYTES) + + ldd x20, Y + 0x00 + ldd x22, Y + 0x02 + ldd x24, Y + 0x04 + ldd x26, Y + 0x06 + ldd x28, Y + 0x08 + ldd x2a, Y + 0x0a + ldd x2c, Y + 0x0c + ldd x2e, Y + 0x0e + + adiw YL, ROW_INBYTES + + ld x30, Y+ + ld x31, Y+ + ld x32, Y+ + ld x33, Y+ + ld x34, Y+ + ld x35, Y+ + ld x36, Y+ + ld x37, Y+ + ld x38, Y+ + ld x39, Y+ + ld x3a, Y+ + ld x3b, Y+ + ld x3c, Y+ + ld x3d, Y+ + ld x3e, Y+ + ld x3f, Y+ + +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) + sbrc AEDH, 2 ; AEDH[2] = 0 for AEAD and AEDH[2] = 1 for HASH + rjmp For_Hash +For_AEAD: + ldi ZL, lo8(RC_LFSR7) + ldi ZH, hi8(RC_LFSR7) + rjmp round_loop_start +For_Hash: + ldi ZL, lo8(RC_LFSR8) + ldi ZH, hi8(RC_LFSR8) +#elif defined(CRYPTO_AEAD) + ldi ZL, lo8(RC_LFSR7) + ldi ZH, hi8(RC_LFSR7) +#else + ldi ZL, lo8(RC_LFSR8) + ldi ZH, hi8(RC_LFSR8) +#endif + + +round_loop_start: + ; AddRC + lpm t0j, Z+ + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + + ; column 0 + ld x0j, Y + eor x0j, t0j + ldd x1j, Y + ROW_INBYTES + Sbox x0j, x1j, x20, x30 + st Y+, x0j + lsl x1j ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES - 1, x1j + + ; column 1 + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + ldd x2j, Y + 2 * ROW_INBYTES + Sbox x0j, x1j, x2j, x31 + st Y+, x0j + rol x1j ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES - 1, x1j + ldd t0j, Y + 2 * ROW_INBYTES + 1 + std Y + 2 * ROW_INBYTES + 1, x2j + mov x2j, t0j + + ; column 2, 3 + TwoColumns x22, x32, x33 + ; column 4, 5 + TwoColumns x24, x34, x35 + ; column 6, 7 + TwoColumns x26, x36, x37 + ; column 8, 9 + TwoColumns x28, x38, x39 + ; column 10, 11 + TwoColumns x2a, x3a, x3b + ; column 12, 13 + TwoColumns x2c, x3c, x3d + + ; column 14 + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + Sbox x0j, x1j, x2e, x3e + st Y+, x0j + rol x1j ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES - 1, x1j + + ; column 15 + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + Sbox x0j, x1j, x2j, x3f + st Y+, x0j + rol x1j ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES - 1, x1j + + ld x1j, Y + eor t0j, t0j + adc x1j, t0j + st Y, x1j + std Y + ROW_INBYTES + 1, x2j + + ; f e d c b a 9 8 7 6 5 4 3 2 1 0 + ; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- x- 0 + ; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- x' 0 + ; -- -- -- -- -- -- -- -- -- -- -- -- -- x- -- -- 2 + ; -- -- -- -- -- -- -- -- -- -- -- -- x' -- -- -- 3 + ; c b a 9 8 7 6 5 4 3 2 1 0 f e d + ; x2e x2c x2a x28 x26 x24 x22 x20 => x2c x2a x28 x26 x24 x22 x20 x2e + ;mov t0j, x2e + ;mov x2e, x2c + ;mov x2c, x2a + ;mov x2a, x28 + ;mov x28, x26 + ;mov x26, x24 + ;mov x24, x22 + ;mov x22, x20 + ;mov x20, t0j + ; an intentionally arrangement of registers to facilitate movw + movw t0j, x26 ; t1j:t0j <= x2e:x26 + movw x26, x24 ; x2e:x26 <= x2c:x24 + movw x24, x22 ; x2c:x24 <= x2a:x22 + movw x22, x20 ; x2a:x22 <= x28:x20 + mov x20, t1j ; x20 <= t1j + mov x28, t0j ; x28 <= t0j + + ; <<< 1 + mov t0j, x3f + rol t0j + rol x30 + rol x31 + rol x32 + rol x33 + rol x34 + rol x35 + rol x36 + rol x37 + rol x38 + rol x39 + rol x3a + rol x3b + rol x3c + rol x3d + rol x3e + rol x3f + ; <<< 24 + ; f e d c b a 9 8 7 6 5 4 3 2 1 0 => + ; c b a 9 8 7 6 5 4 3 2 1 0 f e d + ; mov x3j, x30 + ; mov x30, x3d + ; mov x3d, x3a + ; mov x3a, x37 + ; mov x37, x34 + ; mov x34, x31 + ; mov x31, x3e + ; mov x3e, x3b + ; mov x3b, x38 + ; mov x38, x35 + ; mov x35, x32 + ; mov x32, x3f + ; mov x3f, x3c + ; mov x3c, x39 + ; mov x39, x36 + ; mov x36, x33 + ; mov x33, x3j + ; an intentionally arrangement of registers to facilitate movw + ; x30 r8 + ; x3d r10 + ; x3a r12 + ; x37 r14 + ; x34 r16 + ; x31 r18 + ; x3e r20 + ; x3b r22 + ; x38 r9 + ; x35 r11 + ; x32 r13 + ; x3f r15 + ; x3c r17 + ; x39 r19 + ; x36 r21 + ; x33 r23 + movw t0j, x30 ; t1j:t0j <= x38:x30 + movw x30, x3d ; x38:x30 <= x35:x3d + movw x3d, x3a ; x35:x3d <= x32:x3a + movw x3a, x37 ; x32:x3a <= x3f:x37 + movw x37, x34 ; x3f:x37 <= x3c:x34 + movw x34, x31 ; x3c:x34 <= x39:x31 + movw x31, x3e ; x39:x31 <= x36:x3e + movw x3e, x3b ; x36:x3e <= x33:x3b + mov x3b, t1j ; x3b <= x38 + mov x33, t0j ; x33 <= x30 + + pop rcnt + dec rcnt + push rcnt + breq round_loop_end + rjmp round_loop_start + +round_loop_end: + pop rcnt + + ldi YH, hi8(SRAM_STATE + 2 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 2 * ROW_INBYTES) + std Y + 0x00, x20 + std Y + 0x02, x22 + std Y + 0x04, x24 + std Y + 0x06, x26 + std Y + 0x08, x28 + std Y + 0x0a, x2a + std Y + 0x0c, x2c + std Y + 0x0e, x2e + adiw YL, ROW_INBYTES + st Y+, x30 + st Y+, x31 + st Y+, x32 + st Y+, x33 + st Y+, x34 + st Y+, x35 + st Y+, x36 + st Y+, x37 + st Y+, x38 + st Y+, x39 + st Y+, x3a + st Y+, x3b + st Y+, x3c + st Y+, x3d + st Y+, x3e + st Y+, x3f + + POP_CONFLICT +ret + +.section .text +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) +RC_LFSR7: +.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x41, 0x03 +.byte 0x06, 0x0c, 0x18, 0x30, 0x61, 0x42, 0x05, 0x0a +.byte 0x14, 0x28, 0x51, 0x23, 0x47, 0x0f, 0x1e, 0x3c +.byte 0x79, 0x72, 0x64, 0x48, 0x11, 0x22, 0x45, 0x0b +.byte 0x16, 0x2c, 0x59, 0x33, 0x67, 0x4e, 0x1d, 0x3a +.byte 0x75, 0x6a, 0x54, 0x29, 0x53, 0x27, 0x4f, 0x1f +.byte 0x3e, 0x7d, 0x7a, 0x74, 0x68, 0x50, 0x21, 0x43 +.byte 0x07, 0x0e, 0x1c, 0x38, 0x71, 0x62, 0x44, 0x09 +.byte 0x12, 0x24, 0x49, 0x13, 0x26, 0x4d, 0x1b, 0x36 +.byte 0x6d, 0x5a, 0x35, 0x6b, 0x56, 0x2d, 0x5b, 0x37 +.byte 0x6f, 0x5e, 0x3d, 0x7b, 0x76, 0x6c, 0x58, 0x31 +.byte 0x63, 0x46, 0x0d, 0x1a, 0x34, 0x69, 0x52, 0x25 +.byte 0x4b, 0x17, 0x2e, 0x5d, 0x3b, 0x77, 0x6e, 0x5c +.byte 0x39, 0x73, 0x66, 0x4c, 0x19, 0x32, 0x65, 0x4a +.byte 0x15, 0x2a, 0x55, 0x2b, 0x57, 0x2f, 0x5f, 0x3f +.byte 0x7f, 0x7e, 0x7c, 0x78, 0x70, 0x60, 0x40, 0x00 +RC_LFSR8: +.byte 0x01, 0x02, 0x04, 0x08, 0x11, 0x23, 0x47, 0x8e +.byte 0x1c, 0x38, 0x71, 0xe2, 0xc4, 0x89, 0x12, 0x25 +.byte 0x4b, 0x97, 0x2e, 0x5c, 0xb8, 0x70, 0xe0, 0xc0 +.byte 0x81, 0x03, 0x06, 0x0c, 0x19, 0x32, 0x64, 0xc9 +.byte 0x92, 0x24, 0x49, 0x93, 0x26, 0x4d, 0x9b, 0x37 +.byte 0x6e, 0xdc, 0xb9, 0x72, 0xe4, 0xc8, 0x90, 0x20 +.byte 0x41, 0x82, 0x05, 0x0a, 0x15, 0x2b, 0x56, 0xad +.byte 0x5b, 0xb6, 0x6d, 0xda, 0xb5, 0x6b, 0xd6, 0xac +.byte 0x59, 0xb2, 0x65, 0xcb, 0x96, 0x2c, 0x58, 0xb0 +.byte 0x61, 0xc3, 0x87, 0x0f, 0x1f, 0x3e, 0x7d, 0xfb +.byte 0xf6, 0xed, 0xdb, 0xb7, 0x6f, 0xde, 0xbd, 0x7a +.byte 0xf5, 0xeb, 0xd7, 0xae, 0x5d, 0xba, 0x74, 0xe8 +.byte 0xd1, 0xa2, 0x44, 0x88, 0x10, 0x21, 0x43, 0x86 +.byte 0x0d, 0x1b, 0x36, 0x6c, 0xd8, 0xb1, 0x63, 0xc7 +.byte 0x8f, 0x1e, 0x3c, 0x79, 0xf3, 0xe7, 0xce, 0x9c +.byte 0x39, 0x73, 0xe6, 0xcc, 0x98, 0x31, 0x62, 0xc5 +.byte 0x8b, 0x16, 0x2d, 0x5a, 0xb4, 0x69, 0xd2, 0xa4 +.byte 0x48, 0x91, 0x22, 0x45, 0x8a, 0x14, 0x29, 0x52 +.byte 0xa5, 0x4a, 0x95, 0x2a, 0x54, 0xa9, 0x53, 0xa7 +.byte 0x4e, 0x9d, 0x3b, 0x77, 0xee, 0xdd, 0xbb, 0x76 +.byte 0xec, 0xd9, 0xb3, 0x67, 0xcf, 0x9e, 0x3d, 0x7b +.byte 0xf7, 0xef, 0xdf, 0xbf, 0x7e, 0xfd, 0xfa, 0xf4 +.byte 0xe9, 0xd3, 0xa6, 0x4c, 0x99, 0x33, 0x66, 0xcd +.byte 0x9a, 0x35, 0x6a, 0xd4, 0xa8, 0x51, 0xa3, 0x46 +.byte 0x8c, 0x18, 0x30, 0x60, 0xc1, 0x83, 0x07, 0x0e +.byte 0x1d, 0x3a, 0x75, 0xea, 0xd5, 0xaa, 0x55, 0xab +.byte 0x57, 0xaf, 0x5f, 0xbe, 0x7c, 0xf9, 0xf2, 0xe5 +.byte 0xca, 0x94, 0x28, 0x50, 0xa1, 0x42, 0x84, 0x09 +.byte 0x13, 0x27, 0x4f, 0x9f, 0x3f, 0x7f, 0xff, 0xfe +.byte 0xfc, 0xf8, 0xf0, 0xe1, 0xc2, 0x85, 0x0b, 0x17 +.byte 0x2f, 0x5e, 0xbc, 0x78, 0xf1, 0xe3, 0xc6, 0x8d +.byte 0x1a, 0x34, 0x68, 0xd0, 0xa0, 0x40, 0x80, 0x00 +#elif defined(CRYPTO_AEAD) +RC_LFSR7: +.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x41, 0x03 +.byte 0x06, 0x0c, 0x18, 0x30, 0x61, 0x42, 0x05, 0x0a +.byte 0x14, 0x28, 0x51, 0x23, 0x47, 0x0f, 0x1e, 0x3c +.byte 0x79, 0x72, 0x64, 0x48, 0x11, 0x22, 0x45, 0x0b +.byte 0x16, 0x2c, 0x59, 0x33, 0x67, 0x4e, 0x1d, 0x3a +.byte 0x75, 0x6a, 0x54, 0x29, 0x53, 0x27, 0x4f, 0x1f +.byte 0x3e, 0x7d, 0x7a, 0x74, 0x68, 0x50, 0x21, 0x43 +.byte 0x07, 0x0e, 0x1c, 0x38, 0x71, 0x62, 0x44, 0x09 +.byte 0x12, 0x24, 0x49, 0x13, 0x26, 0x4d, 0x1b, 0x36 +.byte 0x6d, 0x5a, 0x35, 0x6b, 0x56, 0x2d, 0x5b, 0x37 +.byte 0x6f, 0x5e, 0x3d, 0x7b, 0x76, 0x6c, 0x58, 0x31 +.byte 0x63, 0x46, 0x0d, 0x1a, 0x34, 0x69, 0x52, 0x25 +.byte 0x4b, 0x17, 0x2e, 0x5d, 0x3b, 0x77, 0x6e, 0x5c +.byte 0x39, 0x73, 0x66, 0x4c, 0x19, 0x32, 0x65, 0x4a +.byte 0x15, 0x2a, 0x55, 0x2b, 0x57, 0x2f, 0x5f, 0x3f +.byte 0x7f, 0x7e, 0x7c, 0x78, 0x70, 0x60, 0x40, 0x00 +#else +RC_LFSR8: +.byte 0x01, 0x02, 0x04, 0x08, 0x11, 0x23, 0x47, 0x8e +.byte 0x1c, 0x38, 0x71, 0xe2, 0xc4, 0x89, 0x12, 0x25 +.byte 0x4b, 0x97, 0x2e, 0x5c, 0xb8, 0x70, 0xe0, 0xc0 +.byte 0x81, 0x03, 0x06, 0x0c, 0x19, 0x32, 0x64, 0xc9 +.byte 0x92, 0x24, 0x49, 0x93, 0x26, 0x4d, 0x9b, 0x37 +.byte 0x6e, 0xdc, 0xb9, 0x72, 0xe4, 0xc8, 0x90, 0x20 +.byte 0x41, 0x82, 0x05, 0x0a, 0x15, 0x2b, 0x56, 0xad +.byte 0x5b, 0xb6, 0x6d, 0xda, 0xb5, 0x6b, 0xd6, 0xac +.byte 0x59, 0xb2, 0x65, 0xcb, 0x96, 0x2c, 0x58, 0xb0 +.byte 0x61, 0xc3, 0x87, 0x0f, 0x1f, 0x3e, 0x7d, 0xfb +.byte 0xf6, 0xed, 0xdb, 0xb7, 0x6f, 0xde, 0xbd, 0x7a +.byte 0xf5, 0xeb, 0xd7, 0xae, 0x5d, 0xba, 0x74, 0xe8 +.byte 0xd1, 0xa2, 0x44, 0x88, 0x10, 0x21, 0x43, 0x86 +.byte 0x0d, 0x1b, 0x36, 0x6c, 0xd8, 0xb1, 0x63, 0xc7 +.byte 0x8f, 0x1e, 0x3c, 0x79, 0xf3, 0xe7, 0xce, 0x9c +.byte 0x39, 0x73, 0xe6, 0xcc, 0x98, 0x31, 0x62, 0xc5 +.byte 0x8b, 0x16, 0x2d, 0x5a, 0xb4, 0x69, 0xd2, 0xa4 +.byte 0x48, 0x91, 0x22, 0x45, 0x8a, 0x14, 0x29, 0x52 +.byte 0xa5, 0x4a, 0x95, 0x2a, 0x54, 0xa9, 0x53, 0xa7 +.byte 0x4e, 0x9d, 0x3b, 0x77, 0xee, 0xdd, 0xbb, 0x76 +.byte 0xec, 0xd9, 0xb3, 0x67, 0xcf, 0x9e, 0x3d, 0x7b +.byte 0xf7, 0xef, 0xdf, 0xbf, 0x7e, 0xfd, 0xfa, 0xf4 +.byte 0xe9, 0xd3, 0xa6, 0x4c, 0x99, 0x33, 0x66, 0xcd +.byte 0x9a, 0x35, 0x6a, 0xd4, 0xa8, 0x51, 0xa3, 0x46 +.byte 0x8c, 0x18, 0x30, 0x60, 0xc1, 0x83, 0x07, 0x0e +.byte 0x1d, 0x3a, 0x75, 0xea, 0xd5, 0xaa, 0x55, 0xab +.byte 0x57, 0xaf, 0x5f, 0xbe, 0x7c, 0xf9, 0xf2, 0xe5 +.byte 0xca, 0x94, 0x28, 0x50, 0xa1, 0x42, 0x84, 0x09 +.byte 0x13, 0x27, 0x4f, 0x9f, 0x3f, 0x7f, 0xff, 0xfe +.byte 0xfc, 0xf8, 0xf0, 0xe1, 0xc2, 0x85, 0x0b, 0x17 +.byte 0x2f, 0x5e, 0xbc, 0x78, 0xf1, 0xe3, 0xc6, 0x8d +.byte 0x1a, 0x34, 0x68, 0xd0, 0xa0, 0x40, 0x80, 0x00 +#endif \ No newline at end of file diff --git a/knot/Implementations/crypto_aead/knot128v2/avr8_speed/permutation.h b/knot/Implementations/crypto_aead/knot128v2/avr8_speed/permutation.h new file mode 100644 index 0000000..e6c9793 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot128v2/avr8_speed/permutation.h @@ -0,0 +1,45 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.1 2020 by KNOT Team * +; ********************************************** +; + +; +; ============================================ +; R E G I S T E R D E F I N I T I O N S +; ============================================ +; + +#define mclen r16 +#define radlen r17 +#define tcnt r17 +#define tmp0 r20 +#define tmp1 r21 +#define cnt0 r22 +#define rn r23 +#define rate r24 + + +; AEDH = 0b000: for authenticate AD +; AEDH = 0b001: for encryption +; AEDH = 0b011: for decryption +; AEDH = 0b100: for hash +#define AEDH r25 +#define rcnt r26 + +#if (STATE_INBITS==256) +#include "knot256.h" +#elif (STATE_INBITS==384) +#include "knot384.h" +#elif (STATE_INBITS==512) +#include "knot512.h" +#else +#error "Not specified key size and state size" +#endif + + diff --git a/knot/Implementations/crypto_aead/knot192/armcortexm_2/auxFormat.c b/knot/Implementations/crypto_aead/knot192/armcortexm_2/auxFormat.c new file mode 100644 index 0000000..896381a --- /dev/null +++ b/knot/Implementations/crypto_aead/knot192/armcortexm_2/auxFormat.c @@ -0,0 +1,103 @@ +#include"auxFormat.h" + +void P384(unsigned int *s, unsigned char *round, unsigned char lunNum) { + u32 rci,t1,t2; + unsigned char i; + for (i = 0; i < lunNum; i++) { + rci=constant7Format[i];\ + P384_ARC_SC1(rci,s[3],s[6],s[9]); \ + P384_2SC(s[1],s[4],s[7],s[10],s[2],s[5],s[8],s[11]);\ + P384_SR();\ + } +} + + +//puck begin// +void unpackU96FormatToThreePacket(u8 * out, u32 * in) { + u32 temp0[3] = { 0 }; + u32 temp1[3] = { 0 }; + u32 temp2[3] = { 0 }; + u32 t1_32, t2_64, t2_65; + u32 t[3] = { 0 }; + temp0[0] = in[0] & 0xffe00000; + temp1[0] = (in[0] & 0x001ffc00) << 11; + temp2[0] = (in[0] & 0x000003ff) << 22; + temp0[1] = in[1] & 0xffe00000; + temp1[1] = (in[1] & 0x001ff800) << 11; + t2_64 = ((in[1] & 0x00000400) << 21); + temp2[1] = (in[1] & 0x000003ff) << 22; + temp0[2] = in[2] & 0xffc00000; + t1_32 = ((in[2] & 0x00200000) << 10); + temp1[2] = (in[2] & 0x001ff800) << 11; + t2_65 = ((in[2] & 0x00000400) << 20); + temp2[2] = (in[2] & 0x000003ff) << 22; + unpuckU32ToThree(temp0[0]); + unpuckU32ToThree(temp0[1]); + unpuckU32ToThree(temp0[2]); + t[2] = temp0[0] | temp0[1] >> 1 | temp0[2] >> 2; + unpuckU32ToThree(temp1[0]); + unpuckU32ToThree(temp1[1]); + unpuckU32ToThree(temp1[2]); + t[1] = t1_32 | ((temp1[0] | temp1[1] >> 1 | temp1[2] >> 2) >> 1); + unpuckU32ToThree(temp2[0]); + unpuckU32ToThree(temp2[1]); + unpuckU32ToThree(temp2[2]); + t[0] = t2_65 | t2_64 | ((temp2[0] | temp2[1] >> 1 | temp2[2] >> 2) >> 2); + memcpy(out, t, 12 * sizeof(unsigned char)); +} +void packU96FormatToThreePacket(u32 * out, u8 * in) { + u32 t0 = U32BIG(((u32*)in)[2]); + u32 t1 = U32BIG(((u32*)in)[1]); + u32 t2 = U32BIG(((u32*)in)[0]); + u32 temp1[3] = { 0 }; + u32 temp2[3] = { 0 }; + u32 temp0[3] = { 0 }; + u8 t1_32 = (in[7] & 0x80) >> 7, t2_64 = (in[3] & 0x80) >> 7, t2_65 = (in[3] & 0x40) >> 6; + t1 = t1 << 1; + t2 = t2 << 2; + temp0[0] = t0; temp0[1] = t0 << 1; temp0[2] = t0 << 2; + puckU32ToThree(temp0[0]); + puckU32ToThree(temp0[1]); + puckU32ToThree(temp0[2]); + temp1[0] = t1; temp1[1] = t1 << 1; temp1[2] = t1 << 2; + puckU32ToThree(temp1[0]); + puckU32ToThree(temp1[1]); + puckU32ToThree(temp1[2]); + temp2[0] = t2; temp2[1] = t2 << 1; temp2[2] = t2 << 2; + puckU32ToThree(temp2[0]); + puckU32ToThree(temp2[1]); + puckU32ToThree(temp2[2]); + out[0] = (temp0[0]) | (temp1[0] >> 11) | (temp2[0] >> 22); + out[1] = (temp0[1]) | (temp1[1] >> 11) | (((u32)t2_64) << 10) | (temp2[1] >> 22); + out[2] = (temp0[2]) | (((u32)t1_32) << 21) | (temp1[2] >> 11) | (((u32)t2_65) << 10) | (temp2[2] >> 22); +} + +void packU48FormatToThreePacket(u32 * out, u8 * in) { + u32 t1 = (u32)U16BIG(*(u16*)(in + 4)); + u32 t2 = U32BIG(*(u32*)(in)); + u32 temp1[3] = { 0 }; + u32 temp2[3] = { 0 }; + u8 t2_64 = (in[3] & 0x80) >> 7, t2_65 = (in[3] & 0x40) >> 6; + t1 = t1 << 1; + t2 = t2 << 2; + temp1[0] = t1; temp1[1] = t1 << 1; temp1[2] = t1 << 2; + puckU32ToThree(temp1[0]); + puckU32ToThree(temp1[1]); + puckU32ToThree(temp1[2]); + temp2[0] = t2; temp2[1] = t2 << 1; temp2[2] = t2 << 2; + puckU32ToThree(temp2[0]); + puckU32ToThree(temp2[1]); + puckU32ToThree(temp2[2]); + out[0] = (temp1[0] >> 11) | (temp2[0] >> 22); + out[1] = (temp1[1] >> 11) | (((u32)t2_64) << 10) | (temp2[1] >> 22); + out[2] = (temp1[2] >> 11) | (((u32)t2_65) << 10) | (temp2[2] >> 22); +} +unsigned char constant7Format[76] = { + /*constant7Format[127]:*/ +0x01,0x08,0x40,0x02,0x10,0x80,0x05,0x09,0x48,0x42,0x12,0x90, +0x85,0x0c,0x41,0x0a,0x50,0x82,0x15,0x89,0x4d,0x4b,0x5a,0xd2, +0x97,0x9c,0xc4,0x06,0x11,0x88,0x45,0x0b,0x58,0xc2,0x17,0x99, +0xcd,0x4e,0x53,0x9a,0xd5,0x8e,0x54,0x83,0x1d,0xc9,0x4f,0x5b, +0xda,0xd7,0x9e,0xd4,0x86,0x14,0x81,0x0d,0x49,0x4a,0x52,0x92, +0x95,0x8c,0x44,0x03,0x18,0xc0,0x07,0x19,0xc8,0x47,0x1b,0xd8, +0xc7,0x1e,0xd1,0x8f}; diff --git a/knot/Implementations/crypto_aead/knot192/armcortexm_2/auxFormat.h b/knot/Implementations/crypto_aead/knot192/armcortexm_2/auxFormat.h index d9dd414..49f00e6 100644 --- a/knot/Implementations/crypto_aead/knot192/armcortexm_2/auxFormat.h +++ b/knot/Implementations/crypto_aead/knot192/armcortexm_2/auxFormat.h @@ -1,10 +1,8 @@ -//#include #include"crypto_aead.h" #include"api.h" +#include #include -#include #include -#include #define U32BIG(x) (x) #define U16BIG(x) (x) @@ -18,13 +16,13 @@ typedef unsigned long long u64; #define ARR_SIZE(a) (sizeof((a))/sizeof((a[0]))) -#define sbox(a, b, c, d, e, f, g, h) \ -{ \ - t1 = ~a; t2 = b & t1;t3 = c ^ t2; h = d ^ t3; t5 = b | c; t6 = d ^ t1; g = t5 ^ t6; t8 = b ^ d; t9 = t3 & t6; e = t8 ^ t9; t11 = g & t8; f = t3 ^ t11; \ -} -//////////////////puck begin -//&:5 <<:4 |:4 +/* +s0 s1 s2 +s3 s4 s5 +s6 s7 s8 +s9 s10 s11 +*/ #define puckU32ToThree(x){\ x &= 0x92492492;\ x = (x | (x << 2)) & 0xc30c30c3;\ @@ -39,213 +37,94 @@ x = (x | (x >> 8)) & 0xf00f00f0;\ x = (x | (x >> 4)) & 0xc30c30c3;\ x = (x | (x >> 2)) & 0x92492492;\ } -//u32 t1 ¡¢u32 t2 ¡¢u8 t2_64 , t2_65 ;u32 temp1[3] = { 0 };u32 temp2[3] = { 0 }; -#define packU48FormatToThreePacket( out, in) {\ -t1 = (u32)U16BIG(*(u16*)(in + 4)); \ -t2 = U32BIG(*(u32*)(in)); \ -t2_64 = (in[3] & 0x80) >> 7, t2_65 = (in[3] & 0x40) >> 6; \ -t1 = t1 << 1; \ -t2 = t2 << 2; \ -temp1[0] = t1; temp1[1] = t1 << 1; temp1[2] = t1 << 2; \ -puckU32ToThree(temp1[0]); \ -puckU32ToThree(temp1[1]); \ -puckU32ToThree(temp1[2]); \ -temp2[0] = t2; temp2[1] = t2 << 1; temp2[2] = t2 << 2; \ -puckU32ToThree(temp2[0]); \ -puckU32ToThree(temp2[1]); \ -puckU32ToThree(temp2[2]); \ -out[0] = (temp1[0] >> 11) | (temp2[0] >> 22); \ -out[1] = (temp1[1] >> 11) | (((u32)t2_64) << 10) | (temp2[1] >> 22); \ -out[2] = (temp1[2] >> 11) | (((u32)t2_65) << 10) | (temp2[2] >> 22); \ -} - - -/* -void packU96FormatToThreePacket(u32 * out, u8 * in) { -u32 t0 = U32BIG(((u32*)in)[2]); -u32 t1 = U32BIG(((u32*)in)[1]); -u32 t2 = U32BIG(((u32*)in)[0]); -u8 t1_32 = (in[7] & 0x80) >> 7, t2_64 = (in[3] & 0x80) >> 7, t2_65 = (in[3] & 0x40) >> 6; -t1 = t1 << 1; -t2 = t2 << 2; -u32 temp0[3] = { 0 }; -temp0[0] = t0; temp0[1] = t0 << 1; temp0[2] = t0 << 2; -puckU32ToThree(temp0[0]); -puckU32ToThree(temp0[1]); -puckU32ToThree(temp0[2]); -u32 temp1[3] = { 0 }; -temp1[0] = t1; temp1[1] = t1 << 1; temp1[2] = t1 << 2; -puckU32ToThree(temp1[0]); -puckU32ToThree(temp1[1]); -puckU32ToThree(temp1[2]); -u32 temp2[3] = { 0 }; -temp2[0] = t2; temp2[1] = t2 << 1; temp2[2] = t2 << 2; -puckU32ToThree(temp2[0]); -puckU32ToThree(temp2[1]); -puckU32ToThree(temp2[2]); -out[0] = (temp0[0]) | (temp1[0] >> 11) | (temp2[0] >> 22); -out[1] = (temp0[1]) | (temp1[1] >> 11) | (((u32)t2_64) << 10) | (temp2[1] >> 22); -out[2] = (temp0[2]) | (((u32)t1_32) << 21) | (temp1[2] >> 11) | (((u32)t2_65) << 10) | (temp2[2] >> 22); -} -*/ -//t9 t1 t2 t1_32 t2_64 t2_65 temp0[3] temp1[3] temp2[3] -#define packU96FormatToThreePacket(out, in) {\ -t9 = U32BIG(((u32*)in)[2]); \ -t1 = U32BIG(((u32*)in)[1]); \ -t2 = U32BIG(((u32*)in)[0]); \ -t1_32 = (in[7] & 0x80) >> 7, t2_64 = (in[3] & 0x80) >> 7, t2_65 = (in[3] & 0x40) >> 6; \ -t1 = t1 << 1; \ -t2 = t2 << 2; \ -temp0[0] = t9; temp0[1] = t9 << 1; temp0[2] = t9 << 2; \ -puckU32ToThree(temp0[0]); \ -puckU32ToThree(temp0[1]); \ -puckU32ToThree(temp0[2]); \ -temp1[0] = t1; temp1[1] = t1 << 1; temp1[2] = t1 << 2; \ -puckU32ToThree(temp1[0]); \ -puckU32ToThree(temp1[1]); \ -puckU32ToThree(temp1[2]); \ -temp2[0] = t2; temp2[1] = t2 << 1; temp2[2] = t2 << 2; \ -puckU32ToThree(temp2[0]); \ -puckU32ToThree(temp2[1]); \ -puckU32ToThree(temp2[2]); \ -out[0] = (temp0[0]) | (temp1[0] >> 11) | (temp2[0] >> 22); \ -out[1] = (temp0[1]) | (temp1[1] >> 11) | (((u32)t2_64) << 10) | (temp2[1] >> 22); \ -out[2] = (temp0[2]) | (((u32)t1_32) << 21) | (temp1[2] >> 11) | (((u32)t2_65) << 10) | (temp2[2] >> 22); \ -} -/* -void unpackU96FormatToThreePacket(u8 * out, u32 * in) { -u32 temp0[3] = { 0 }; -u32 temp1[3] = { 0 }; -u32 temp2[3] = { 0 }; -u32 t1_32, t2_64, t2_65; -u32 t0, t1, t2; -temp0[0] = in[0] & 0xffe00000; -temp1[0] = (in[0] & 0x001ffc00) << 11; -temp2[0] = (in[0] & 0x000003ff) << 22; -temp0[1] = in[1] & 0xffe00000; -temp1[1] = (in[1] & 0x001ff800) << 11; -t2_64 = ((in[1] & 0x00000400) << 21); -temp2[1] = (in[1] & 0x000003ff) << 22; -temp0[2] = in[2] & 0xffc00000; -t1_32 = ((in[2] & 0x00200000) << 10); -temp1[2] = (in[2] & 0x001ff800) << 11; -t2_65 = ((in[2] & 0x00000400) << 20); -temp2[2] = (in[2] & 0x000003ff) << 22; -unpuckU32ToThree(temp0[0]); -unpuckU32ToThree(temp0[1]); -unpuckU32ToThree(temp0[2]); -t0 = temp0[0] | temp0[1] >> 1 | temp0[2] >> 2; -unpuckU32ToThree(temp1[0]); -unpuckU32ToThree(temp1[1]); -unpuckU32ToThree(temp1[2]); -t1 = t1_32 | ((temp1[0] | temp1[1] >> 1 | temp1[2] >> 2) >> 1); -unpuckU32ToThree(temp2[0]); -unpuckU32ToThree(temp2[1]); -unpuckU32ToThree(temp2[2]); -t2 = t2_65 | t2_64 | ((temp2[0] | temp2[1] >> 1 | temp2[2] >> 2) >> 2); -*(u32*)(out) = U32BIG(t2); -*(u32*)(out + 4) = U32BIG(t1); -*(u32*)(out + 8) = U32BIG(t0); -} -*/ -//u32 temp0[3] = { 0 };u32 temp1[3] = { 0 };u32 temp2[3] = { 0 };u32 t1_32, t2_64, t2_65;t9,t1,t2, -#define unpackU96FormatToThreePacket( out, in) {\ -temp0[0] = in[0] & 0xffe00000; \ -temp1[0] = (in[0] & 0x001ffc00) << 11; \ -temp2[0] = (in[0] & 0x000003ff) << 22; \ -temp0[1] = in[1] & 0xffe00000; \ -temp1[1] = (in[1] & 0x001ff800) << 11; \ -t2_64 = ((in[1] & 0x00000400) << 21); \ -temp2[1] = (in[1] & 0x000003ff) << 22; \ -temp0[2] = in[2] & 0xffc00000; \ -t1_32 = ((in[2] & 0x00200000) << 10); \ -temp1[2] = (in[2] & 0x001ff800) << 11; \ -t2_65 = ((in[2] & 0x00000400) << 20); \ -temp2[2] = (in[2] & 0x000003ff) << 22; \ -unpuckU32ToThree(temp0[0]); \ -unpuckU32ToThree(temp0[1]); \ -unpuckU32ToThree(temp0[2]); \ -t9 = temp0[0] | temp0[1] >> 1 | temp0[2] >> 2; \ -unpuckU32ToThree(temp1[0]); \ -unpuckU32ToThree(temp1[1]); \ -unpuckU32ToThree(temp1[2]); \ -t1 = t1_32 | ((temp1[0] | temp1[1] >> 1 | temp1[2] >> 2) >> 1); \ -unpuckU32ToThree(temp2[0]); \ -unpuckU32ToThree(temp2[1]); \ -unpuckU32ToThree(temp2[2]); \ -t2 = t2_65 | t2_64 | ((temp2[0] | temp2[1] >> 1 | temp2[2] >> 2) >> 2); \ -*(u32*)(out) = U32BIG(t2); \ -*(u32*)(out + 4) = U32BIG(t1); \ -*(u32*)(out + 8) = U32BIG(t9); \ -} - -#define U96_BIT_LOTR32_1(t0,t1,t2,t3,t4,t5){\ -t3= t1;\ -t4 = t2;\ -t5 = LOTR32(t0, 1); \ -} -#define U96_BIT_LOTR32_8(t0,t1,t2,t3,t4,t5){\ -t3= LOTR32(t2, 2);\ -t4 =LOTR32(t0, 3);\ -t5 = LOTR32(t1, 3); \ -} -//55=3*18+1 -#define U96_BIT_LOTR32_55(t0,t1,t2,t3,t4,t5){\ -t3= LOTR32(t1, 18); \ -t4 = LOTR32(t2, 18);\ -t5 = LOTR32(t0, 19); \ -} -/* -s0 s1 s2 -s3 s4 s5 -s6 s7 s8 -s9 s10 s11 -*/ -#define ROUND384(lunNum) {\ -s[0] ^= (constant7Format[lunNum] >> 6) & 0x3;\ -s[1] ^= (constant7Format[lunNum] >> 3) & 0x7;\ -s[2] ^= constant7Format[lunNum] & 0x7;\ -sbox(s[0], s[3], s[6], s[9] , s_temp[0], s_temp[3], s_temp[6], s_temp[9]);\ -sbox(s[1], s[4], s[7], s[10], s_temp[1], s_temp[4], s_temp[7], s_temp[10]);\ -sbox(s[2], s[5], s[8], s[11], s_temp[2], s_temp[5], s_temp[8], s_temp[11]);\ -s[0] = s_temp[0], s[1] = s_temp[1], s[2] = s_temp[2];\ -U96_BIT_LOTR32_1(s_temp[3], s_temp [4], s_temp[ 5], s[3], s[4], s[5]);\ -U96_BIT_LOTR32_8(s_temp[6], s_temp [7], s_temp[ 8], s[6], s[7], s[8]);\ -U96_BIT_LOTR32_55(s_temp[9], s_temp[10], s_temp[11], s[9], s[10], s[11]);\ -} -#define ROUND384Full(lunNum) {\ -printf(" constant7Format[%d]=%08x\n", lunNum, constant7Format[lunNum]);\ -s[0] ^= (constant7Format[lunNum] >> 6) & 0x3;\ -s[1] ^= (constant7Format[lunNum] >> 3) & 0x7;\ -s[2] ^= constant7Format[lunNum] & 0x7;\ - printfU96Format("addition of round constant output",s);\ -sbox(s[0], s[3], s[6], s[9] , s_temp[0], s_temp[3], s_temp[6], s_temp[9]);\ -sbox(s[1], s[4], s[7], s[10], s_temp[1], s_temp[4], s_temp[7], s_temp[10]);\ -sbox(s[2], s[5], s[8], s[11], s_temp[2], s_temp[5], s_temp[8], s_temp[11]);\ - printfU96Format("substitution layer output",s_temp);\ -s[0] = s_temp[0], s[1] = s_temp[1], s[2] = s_temp[2];\ -U96_BIT_LOTR32_1(s_temp[3], s_temp [4], s_temp[ 5], s[3], s[4], s[5]);\ -U96_BIT_LOTR32_8(s_temp[6], s_temp [7], s_temp[ 8], s[6], s[7], s[8]);\ -U96_BIT_LOTR32_55(s_temp[9], s_temp[10], s_temp[11], s[9], s[10], s[11]);\ -printfU96Format("linear diffusion layer output", s);\ -} - -void printBinarySimp(unsigned char * str, u8 *a, int len); -//void packU96FormatToThreePacketFull(unsigned int * out, u8 * in); -//void unpackU96FormatToThreePacketFull(u8 * out, unsigned int * in); -//void packU96FormatToThreePacket(u32 * out, u8 * in); -//void unpackU96FormatToThreePacket(u8 * out, u32 * in); -void printU32State(char name[], unsigned int* var, long len); -void printfU96Format(char name[], unsigned int * s); -//////////////////puck end -void printU8(char name[], u8 var[], int len, int offset); -void printfU96Format(char name[], u32 * s); - -////////////constant begin// -//unsigned char constant7Format[127]; -void puckU8FormatToThreePacket(u8 in, u8 *out); -//void test_puckU8FormatToThreePacket(); -////////////constant end// - -static void permutation384(unsigned int *in, int rounds, unsigned char *rc); +unsigned char constant7Format[76]; +#define P384_ARC_SC1(rci,S2,S3,S4) \ + do { \ + __asm__ __volatile__ ( \ + "/*add round const s0 s1 s2 */ \n\t"\ + "ands %[t1], %[rci], #0xc0\n\t" \ + "eors %[S_0], %[S_0], %[t1], LSR #6 \n\t" /*s[0] ^= (constant7Format[lunNum] >> 6) & 0x3;*/\ + "ands %[t1], %[rci], #0x38\n\t" \ + "eors %[S_1], %[S_1], %[t1], LSR #3 \n\t" /*s[0] ^= (constant7Format[lunNum] >> 6) & 0x3;*/\ + "ands %[t1], %[rci], #0x7\n\t" \ + "eors %[S_3], %[S_3], %[t1] \n\t" /*s[2] ^= constant7Format[lunNum] & 0x7;*/\ + "/*sbox column*/ \n\t"\ + "mvns %[S_0], %[S_0] \n\t"\ + "ands %[t1], %[S_2], %[S_0] \n\t"\ + "eors %[t1], %[S_4], %[t1] \n\t"\ + "orrs %[S_4], %[S_2], %[S_4] \n\t"\ + "eors %[S_0], %[S_6], %[S_0] \n\t"\ + "eors %[S_4], %[S_4], %[S_0] \n\t"\ + "eors %[t2], %[S_2], %[S_6] \n\t"\ + "eors %[S_6], %[S_6], %[t1] \n\t"\ + "ands %[S_0], %[t1],%[S_0] \n\t"\ + "eors %[S_0], %[t2],%[S_0] \n\t"\ + "ands %[S_2], %[S_4], %[t2] \n\t"\ + "eors %[S_2], %[t1], %[S_2] \n\t"\ + : /* output variables - including inputs that are changed */\ + [t1] "=r" (t1), [t2] "=r" (t2), [rci] "+r" (rci), \ + [S_0] "+r" (s[0]), [S_1] "+r" (s[1]), [S_3] "+r" (s[2]),\ + [S_2] "+r" (S2), [S_4] "+r" (S3), [S_6] "+r" (S4) \ + : : );\ +}while (0) +#define P384_2SC(S1,S2,S3,S4,S5,S6,S7,S8) \ + do { \ + __asm__ __volatile__ ( \ + "/*sbox column*/ \n\t"\ + "mvns %[S_0], %[S_0] \n\t"\ + "ands %[t1], %[S_2], %[S_0] \n\t"\ + "eors %[t1], %[S_4], %[t1] \n\t"\ + "orrs %[S_4], %[S_2], %[S_4] \n\t"\ + "eors %[S_0], %[S_6], %[S_0] \n\t"\ + "eors %[S_4], %[S_4], %[S_0] \n\t"\ + "eors %[t2], %[S_2], %[S_6] \n\t"\ + "eors %[S_6], %[S_6], %[t1] \n\t"\ + "ands %[S_0], %[t1],%[S_0] \n\t"\ + "eors %[S_0], %[t2],%[S_0] \n\t"\ + "ands %[S_2], %[S_4], %[t2] \n\t"\ + "eors %[S_2], %[t1], %[S_2] \n\t"\ + "/*sbox column*/ \n\t"\ + "mvns %[S_1], %[S_1] \n\t"\ + "ands %[t1], %[S_3], %[S_1] \n\t"\ + "eors %[t1], %[S_5], %[t1] \n\t"\ + "orrs %[S_5], %[S_3], %[S_5] \n\t"\ + "eors %[S_1], %[S_7], %[S_1] \n\t"\ + "eors %[S_5], %[S_5], %[S_1] \n\t"\ + "eors %[t2], %[S_3], %[S_7] \n\t"\ + "eors %[S_7], %[S_7], %[t1] \n\t"\ + "ands %[S_1], %[t1],%[S_1] \n\t"\ + "eors %[S_1], %[t2],%[S_1] \n\t"\ + "ands %[S_3], %[S_5], %[t2] \n\t"\ + "eors %[S_3], %[t1], %[S_3] \n\t"\ + : /* output variables - including inputs that are changed */\ + [t1] "=r" (t1), [t2] "=r" (t2),\ + [S_0] "+r" (S1), [S_2] "+r" (S2), [S_4] "+r" (S3), [S_6] "+r" (S4) ,\ + [S_1] "+r" (S5), [S_3] "+r" (S6), [S_5] "+r" (S7), [S_7] "+r" (S8)\ + : : );\ +}while (0) +#define P384_SR() \ + do { \ + __asm__ __volatile__ ( \ + "/*rotate shift left 1 bit [w9 w5 w1-> (w1,1) w9 w5] */ \n\t"\ + "mov %[t1], %[S_3] \n\t"\ + "mov %[S_3], %[S_4] \n\t"\ + "mov %[S_4], %[S_5] \n\t"\ + "ROR %[S_5], %[t1] , #31 \n\t"\ + "/*rotate shift left 8 bits [w10 w6 w2-> (w6,3) (w2,3) ( w10,2)]*/ \n\t"\ + "mov %[t1], %[S_8] \n\t"\ + "ROR %[S_8], %[S_7] , #29 \n\t"\ + "ROR %[S_7], %[S_6] , #29 \n\t"\ + "ROR %[S_6], %[t1] , #30 \n\t"\ + "/*rotate shift left 55 bit [w11 w7 w3-> (w3,13) (w11,14) ( w7,14)] */ \n\t"\ + "mov %[t1], %[S_9] \n\t"\ + "ROR %[S_9], %[S_10] , #14 \n\t"\ + "ROR %[S_10], %[S_11] , #14 \n\t"\ + "ROR %[S_11], %[t1] , #13 \n\t"\ + : /* output variables - including inputs that are changed */\ + [t1] "=r" (t1),\ + [S_3] "+r" (s[3]), [S_6] "+r" (s[6]), [S_9] "+r" (s[9]) ,\ + [S_4] "+r" (s[4]), [S_7] "+r" (s[7]), [S_10] "+r" (s[10]),\ + [S_5] "+r" (s[5]), [S_8] "+r" (s[8]), [S_11] "+r" (s[11])\ + : : );\ +}while (0) diff --git a/knot/Implementations/crypto_aead/knot192/armcortexm_2/encrypt.c b/knot/Implementations/crypto_aead/knot192/armcortexm_2/encrypt.c index ab4ac31..f4fc2ce 100644 --- a/knot/Implementations/crypto_aead/knot192/armcortexm_2/encrypt.c +++ b/knot/Implementations/crypto_aead/knot192/armcortexm_2/encrypt.c @@ -1,176 +1,47 @@ - #include"auxFormat.h" #define aead_RATE (96 / 8) #define PR0_ROUNDS 76 #define PR_ROUNDS 40 #define PRF_ROUNDS 44 -unsigned char constant7Format[127] = { - /*constant7Format[127]:*/ -0x01,0x08,0x40,0x02,0x10,0x80,0x05,0x09,0x48,0x42,0x12,0x90, -0x85,0x0c,0x41,0x0a,0x50,0x82,0x15,0x89,0x4d,0x4b,0x5a,0xd2, -0x97,0x9c,0xc4,0x06,0x11,0x88,0x45,0x0b,0x58,0xc2,0x17,0x99, -0xcd,0x4e,0x53,0x9a,0xd5,0x8e,0x54,0x83,0x1d,0xc9,0x4f,0x5b, -0xda,0xd7,0x9e,0xd4,0x86,0x14,0x81,0x0d,0x49,0x4a,0x52,0x92, -0x95,0x8c,0x44,0x03,0x18,0xc0,0x07,0x19,0xc8,0x47,0x1b,0xd8, -0xc7,0x1e,0xd1,0x8f,0x5c,0xc3,0x1f,0xd9,0xcf,0x5e,0xd3,0x9f, -0xdc,0xc6,0x16,0x91,0x8d,0x4c,0x43,0x1a,0xd0,0x87,0x1c,0xc1, -0x0f,0x59,0xca,0x57,0x9b,0xdd,0xce,0x56,0x93,0x9d,0xcc,0x46, -0x13,0x98,0xc5,0x0e,0x51,0x8a,0x55,0x8b,0x5d,0xcb,0x5f,0xdb, -0xdf,0xde,0xd6,0x96,0x94,0x84,0x04, }; - -/* State - * w8 w4 w0 - * w9 w5 w1 - * w10 w6 w2 - * w11 w7 w3 - */ - static void permutation384(unsigned int *in, int rounds, unsigned char *rc) { - - uint32_t w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10, w11; - uint32_t s0, s1, s2; - uint32_t i=0; - __asm volatile( - "ldr w0, [in] \n\t" - "ldr w4, [in, #4] \n\t" - "ldr w8, [in, #8] \n\t" - "ldr w1, [in, #12] \n\t" - "ldr w5, [in, #16] \n\t" - "ldr w9, [in, #20] \n\t" - "ldr w2, [in, #24] \n\t" - "ldr w6, [in, #28] \n\t" - "ldr w10, [in, #32] \n\t" - "ldr w3, [in, #36] \n\t" - "ldr w7, [in, #40] \n\t" - "ldr w11, [in, #44] \n\t" - "enc_loop: \n\t" - "/*add round const s0 s1*/ \n\t" - "ldrb s0, [rc] \n\t" - "LSR s1, s0, #6 \n\t" - "and s1, s1, 0x3 \n\t" - "LSR s2, s0, #3 \n\t" - "and s2, s2, 0x7 \n\t" - "and s0, s0, 0x7 \n\t" - "eors w8, w8, s0 \n\t" - "eors w4, w4, s2 \n\t" - "eors w0, w0, s1 \n\t" - "/*sbox first column*/ \n\t" - "mvns w0, w0 \n\t" - "ands s0, w1, w0 \n\t" - "eors s0, w2, s0 \n\t" - "orrs w2, w1, w2 \n\t" - "eors w0, w3, w0 \n\t" - "eors w2, w2, w0 \n\t" - "eors s1, w1, w3 \n\t" - "eors w3, w3, s0 \n\t" - "ands w0, s0, w0 \n\t" - "eors w0, s1, w0 \n\t" - "ands w1, w2, s1 \n\t" - "eors w1, s0, w1 \n\t" - "/*sbox second column*/ \n\t" - "mvns w4, w4 \n\t" - "ands s0, w5, w4 \n\t" - "eors s0, w6, s0 \n\t" - "orrs w6, w5, w6 \n\t" - "eors w4, w7, w4 \n\t" - "eors w6, w6, w4 \n\t" - "eors s1, w5, w7 \n\t" - "eors w7, w7, s0 \n\t" - "ands w4, s0, w4 \n\t" - "eors w4, s1, w4 \n\t" - "ands w5, w6, s1 \n\t" - "eors w5, s0, w5 \n\t" - "/*sbox third column*/ \n\t" - "mvns w8, w8 \n\t" - "ands s0, w9, w8 \n\t" - "eors s0, w10, s0 \n\t" - "orrs w10, w9, w10 \n\t" - "eors w8, w11, w8 \n\t" - "eors w10, w10, w8 \n\t" - "eors s1, w9, w11 \n\t" - "eors w11, w11, s0 \n\t" - "ands w8, s0, w8 \n\t" - "eors w8, s1, w8 \n\t" - "ands w9, w10, s1 \n\t" - "eors w9, s0, w9 \n\t" - "/*rotate shift left 1 bit [w9 w5 w1-> (w1,1) w9 w5] */ \n\t" - "mov s0, w1 \n\t" - "mov w1, w5 \n\t" - "mov w5, w9 \n\t" - "ROR w9, s0, #31 \n\t" - "/*rotate shift left 8 bits [w10 w6 w2-> £¨w6,3) (w2,3) ( w10,2)]*/ \n\t" - "mov s0, w10 \n\t" - "ROR w10, w6 , #29 \n\t" - "ROR w6, w2 , #29 \n\t" - "ROR w2, s0, #30 \n\t" - "/*rotate shift left 55 bit [w11 w7 w3-> £¨w3,13) (w11,14) ( w7,14)] */ \n\t" - "mov s0, w3 \n\t" - "ROR w3, w7 , #14 \n\t" - "ROR w7, w11 , #14 \n\t" - "ROR w11, s0, #13 \n\t" - "/*loop control*/ \n\t" - "adds rc, rc, #1 \n\t" - "subs rounds, rounds, #1 \n\t" - "bne enc_loop \n\t" - "str w0, [in] \n\t" - "str w4, [in, #4] \n\t" - "str w8, [in, #8] \n\t" - "str w1, [in, #12] \n\t" - "str w5, [in, #16] \n\t" - "str w9, [in, #20] \n\t" - "str w2, [in, #24] \n\t" - "str w6, [in, #28] \n\t" - "str w10, [in, #32] \n\t" - "str w3, [in, #36] \n\t" - "str w7, [in, #40] \n\t" - "str w11, [in, #44] \n\t" - ); +void Initialize(u32 *s, const unsigned char *npub, const unsigned char *k) { + packU96FormatToThreePacket(s, npub); + packU96FormatToThreePacket(s + 3, npub + 12); + packU96FormatToThreePacket(s + 6, k); + packU96FormatToThreePacket(s + 9, k + 12); + P384(s, constant7Format, PR0_ROUNDS); } -int crypto_aead_encrypt(unsigned char *c, unsigned long long *clen, - const unsigned char *m, unsigned long long mlen, - const unsigned char *ad, unsigned long long adlen, - const unsigned char *nsec, const unsigned char *npub, - const unsigned char *k) { +void ProcessAssocData(u32 *s, const u8* ad, unsigned long long adlen) { - u8 i; - u32 s[12] = { 0 }; u32 dataFormat[3] = { 0 }; u8 tempData[12] = { 0 }; - u32 s_temp[12] = { 0 }; - u32 t1, t2, t3, t5, t6, t8, t9, t11; - u32 t1_32, t2_64, t2_65; - u32 temp0[3] = { 0 }; - u32 temp1[3] = { 0 }; - u32 temp2[3] = { 0 }; - *clen = mlen + CRYPTO_ABYTES; - // initialization - packU96FormatToThreePacket(s, npub); - packU96FormatToThreePacket((s + 3), (npub + 12)); - packU96FormatToThreePacket((s + 6), k); - packU96FormatToThreePacket((s + 9), (k + 12)); -permutation384(s,PR0_ROUNDS,constant7Format); - // process associated data if (adlen) { while (adlen >= aead_RATE) { packU96FormatToThreePacket(dataFormat, ad); s[0] ^= dataFormat[0]; s[1] ^= dataFormat[1]; s[2] ^= dataFormat[2]; -permutation384(s,PR_ROUNDS,constant7Format); + P384(s, constant7Format, PR_ROUNDS); adlen -= aead_RATE; ad += aead_RATE; } - memset(tempData, 0, sizeof(tempData)); - memcpy(tempData, ad, adlen); + memset(tempData, 0, sizeof(tempData)); + memcpy(tempData, ad, adlen * sizeof(unsigned char)); tempData[adlen] = 0x01; packU96FormatToThreePacket(dataFormat, tempData); s[0] ^= dataFormat[0]; s[1] ^= dataFormat[1]; s[2] ^= dataFormat[2]; - permutation384(s,PR_ROUNDS,constant7Format); + P384(s, constant7Format, PR_ROUNDS); } s[9] ^= 0x80000000; + +} +void ProcessPlaintext(u32 *s, const u8* m, unsigned long long mlen, unsigned char *c) { + + u32 dataFormat[3] = { 0 }; + u8 tempData[12] = { 0 }; if (mlen) { while (mlen >= aead_RATE) { packU96FormatToThreePacket(dataFormat, m); @@ -178,78 +49,49 @@ permutation384(s,PR_ROUNDS,constant7Format); s[1] ^= dataFormat[1]; s[2] ^= dataFormat[2]; unpackU96FormatToThreePacket(c, s); - permutation384(s,PR_ROUNDS,constant7Format); + P384(s, constant7Format, PR_ROUNDS); mlen -= aead_RATE; m += aead_RATE; c += aead_RATE; } memset(tempData, 0, sizeof(tempData)); - memcpy(tempData, m, mlen); + memcpy(tempData, m, mlen * sizeof(unsigned char)); tempData[mlen] = 0x01; packU96FormatToThreePacket(dataFormat, tempData); s[0] ^= dataFormat[0]; s[1] ^= dataFormat[1]; s[2] ^= dataFormat[2]; unpackU96FormatToThreePacket(tempData, s); - memcpy(c, tempData, mlen); + memcpy(c, tempData, mlen * sizeof(unsigned char)); c += mlen; } - // finalization - permutation384(s,PRF_ROUNDS,constant7Format); +} + +void Finalize_GenerateTag(u32 *s, unsigned char *c) { + P384(s, constant7Format, PRF_ROUNDS); // return tag unpackU96FormatToThreePacket(c, s); - unpackU96FormatToThreePacket((c + 12), (s + 3)); + unpackU96FormatToThreePacket(c + 12, s + 3); + +} +int Finalize_VerifyTag(u32 *s, const unsigned char *c, unsigned char *m, unsigned long long *mlen) { + u8 tempU8[32] = { 0 }; + P384(s, constant7Format, PRF_ROUNDS); + // return tag + unpackU96FormatToThreePacket(tempU8, s); + unpackU96FormatToThreePacket(tempU8 + 12, s + 3); + if (memcmp((void*)tempU8, (void*)(c), CRYPTO_ABYTES)) { + memset(m, 0, sizeof(unsigned char) * (*mlen)); + *mlen = 0; + return -1; + } return 0; } - -int crypto_aead_decrypt(unsigned char *m, unsigned long long *mlen, - unsigned char *nsec, const unsigned char *c, unsigned long long clen, - const unsigned char *ad, unsigned long long adlen, - const unsigned char *npub, const unsigned char *k) { - u8 i, j; - u32 s[12] = { 0 }; +void ProcessCiphertext(u32 *s, unsigned char *m, const unsigned char *c, unsigned long long clen) +{ u32 dataFormat[6] = { 0 }; u32 dataFormat_1[3] = { 0 }; - u8 tempData[12] = { 0 }; - u8 tempU8[48] = { 0 }; - u32 s_temp[12] = { 0 }; - u32 t1, t2, t3, t5, t6, t8, t9, t11; - u32 t1_32, t2_64, t2_65; - u32 temp0[3] = { 0 }; - u32 temp1[3] = { 0 }; - u32 temp2[3] = { 0 }; - *mlen = clen - CRYPTO_ABYTES; - if (clen < CRYPTO_ABYTES) - return -1; - // initialization - packU96FormatToThreePacket(s, npub); - packU96FormatToThreePacket((s + 3), (npub + 12)); - packU96FormatToThreePacket((s + 6), k); - packU96FormatToThreePacket((s + 9), (k + 12)); -permutation384(s,PR0_ROUNDS,constant7Format); - // process associated data - if (adlen) { - while (adlen >= aead_RATE) { - packU96FormatToThreePacket(dataFormat, ad); - s[0] ^= dataFormat[0]; - s[1] ^= dataFormat[1]; - s[2] ^= dataFormat[2]; -permutation384(s,PR_ROUNDS,constant7Format); - adlen -= aead_RATE; - ad += aead_RATE; - } - memset(tempData, 0, sizeof(tempData)); - - memcpy(tempData, ad, adlen); - tempData[adlen] = 0x01; - packU96FormatToThreePacket(dataFormat, tempData); - s[0] ^= dataFormat[0]; - s[1] ^= dataFormat[1]; - s[2] ^= dataFormat[2]; - permutation384(s,PR_ROUNDS,constant7Format); - } - s[9] ^= 0x80000000; - clen -= CRYPTO_ABYTES; + u8 i,tempU8[48] = { 0 }; if (clen) { while (clen >= aead_RATE) { packU96FormatToThreePacket(dataFormat, c); @@ -260,7 +102,7 @@ permutation384(s,PR_ROUNDS,constant7Format); s[0] = dataFormat[0]; s[1] = dataFormat[1]; s[2] = dataFormat[2]; - permutation384(s,PR_ROUNDS,constant7Format); + P384(s, constant7Format, PR_ROUNDS); clen -= aead_RATE; m += aead_RATE; c += aead_RATE; @@ -274,14 +116,36 @@ permutation384(s,PR_ROUNDS,constant7Format); tempU8[i] ^= 0x01; packU96FormatToThreePacket(s, tempU8); } - // finalization - permutation384(s,PRF_ROUNDS,constant7Format); - // return tag - packU96FormatToThreePacket(dataFormat, c); - packU96FormatToThreePacket((dataFormat + 3), (c + 12)); - if (dataFormat[0] != s[0] || dataFormat[1] != s[1] || dataFormat[2] != s[2] || dataFormat[3] != s[3] - || dataFormat[4] != s[4] || dataFormat[5] != s[5]) { - return -1; - } + +} +int crypto_aead_encrypt(unsigned char *c, unsigned long long *clen, + const unsigned char *m, unsigned long long mlen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *nsec, const unsigned char *npub, + const unsigned char *k) { + u32 s[12] = { 0 }; + *clen = mlen + CRYPTO_ABYTES; + // initialization + Initialize(s, npub, k); + // process associated data + ProcessAssocData(s, ad, adlen); + ProcessPlaintext(s, m, mlen, c); + Finalize_GenerateTag(s, c + mlen); return 0; } + +int crypto_aead_decrypt(unsigned char *m, unsigned long long *mlen, + unsigned char *nsec, const unsigned char *c, unsigned long long clen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *npub, const unsigned char *k) { + u32 s[12] = { 0 }; + *mlen = clen - CRYPTO_ABYTES; + if (clen < CRYPTO_ABYTES) + return -1; + Initialize(s, npub, k); + // process associated data + ProcessAssocData(s, ad, adlen); + ProcessCiphertext(s, m, c, clen - CRYPTO_ABYTES); + // finalization + return Finalize_VerifyTag(s, c + clen - CRYPTO_KEYBYTES, m, mlen); +} diff --git a/knot/Implementations/crypto_aead/knot192/armcortexm_4/api.h b/knot/Implementations/crypto_aead/knot192/armcortexm_4/api.h new file mode 100644 index 0000000..c3cb1d9 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot192/armcortexm_4/api.h @@ -0,0 +1,6 @@ +#define CRYPTO_KEYBYTES 24 +#define CRYPTO_NSECBYTES 0 +#define CRYPTO_NPUBBYTES 24 +#define CRYPTO_ABYTES 24 +#define CRYPTO_NOOVERLAP 1 + diff --git a/knot/Implementations/crypto_aead/knot192/armcortexm_4/auxFormat.c b/knot/Implementations/crypto_aead/knot192/armcortexm_4/auxFormat.c new file mode 100644 index 0000000..7c1f7cf --- /dev/null +++ b/knot/Implementations/crypto_aead/knot192/armcortexm_4/auxFormat.c @@ -0,0 +1,109 @@ +#include"auxFormat.h" + +void P384(unsigned int *s, unsigned char *round, unsigned char lunNum) { + u32 s_temp[12] = { 0 }; + u32 t1, t2, t3, t5, t6, t8, t9, t11; + unsigned char i; + for (i = 0; i < lunNum; i++) { + s[0] ^= (round[i] >> 6) & 0x3; \ + s[1] ^= (round[i] >> 3) & 0x7; \ + s[2] ^= round[i] & 0x7; \ + sbox(s[0], s[3], s[6], s[9], s_temp[3], s_temp[6], s_temp[9]); \ + sbox(s[1], s[4], s[7], s[10], s[3], s_temp[7], s_temp[10]); \ + sbox(s[2], s[5], s[8], s[11], s[4], s_temp[8], s_temp[11]); \ + s[5] = LOTR32(s_temp[3], 1); \ + U96_BIT_LOTR32_8(s_temp[6], s_temp[7], s_temp[8], s[6], s[7], s[8]); \ + U96_BIT_LOTR32_55(s_temp[9], s_temp[10], s_temp[11], s[9], s[10], s[11]); \ + } +} + + +//puck begin// +void unpackU96FormatToThreePacket(u8 * out, u32 * in) { + u32 temp0[3] = { 0 }; + u32 temp1[3] = { 0 }; + u32 temp2[3] = { 0 }; + u32 t1_32, t2_64, t2_65; + u32 t[3] = { 0 }; + temp0[0] = in[0] & 0xffe00000; + temp1[0] = (in[0] & 0x001ffc00) << 11; + temp2[0] = (in[0] & 0x000003ff) << 22; + temp0[1] = in[1] & 0xffe00000; + temp1[1] = (in[1] & 0x001ff800) << 11; + t2_64 = ((in[1] & 0x00000400) << 21); + temp2[1] = (in[1] & 0x000003ff) << 22; + temp0[2] = in[2] & 0xffc00000; + t1_32 = ((in[2] & 0x00200000) << 10); + temp1[2] = (in[2] & 0x001ff800) << 11; + t2_65 = ((in[2] & 0x00000400) << 20); + temp2[2] = (in[2] & 0x000003ff) << 22; + unpuckU32ToThree(temp0[0]); + unpuckU32ToThree(temp0[1]); + unpuckU32ToThree(temp0[2]); + t[2] = temp0[0] | temp0[1] >> 1 | temp0[2] >> 2; + unpuckU32ToThree(temp1[0]); + unpuckU32ToThree(temp1[1]); + unpuckU32ToThree(temp1[2]); + t[1] = t1_32 | ((temp1[0] | temp1[1] >> 1 | temp1[2] >> 2) >> 1); + unpuckU32ToThree(temp2[0]); + unpuckU32ToThree(temp2[1]); + unpuckU32ToThree(temp2[2]); + t[0] = t2_65 | t2_64 | ((temp2[0] | temp2[1] >> 1 | temp2[2] >> 2) >> 2); + memcpy(out, t, 12 * sizeof(unsigned char)); +} +void packU96FormatToThreePacket(u32 * out, u8 * in) { + u32 t0 = U32BIG(((u32*)in)[2]); + u32 t1 = U32BIG(((u32*)in)[1]); + u32 t2 = U32BIG(((u32*)in)[0]); + u32 temp1[3] = { 0 }; + u32 temp2[3] = { 0 }; + u32 temp0[3] = { 0 }; + u8 t1_32 = (in[7] & 0x80) >> 7, t2_64 = (in[3] & 0x80) >> 7, t2_65 = (in[3] & 0x40) >> 6; + t1 = t1 << 1; + t2 = t2 << 2; + temp0[0] = t0; temp0[1] = t0 << 1; temp0[2] = t0 << 2; + puckU32ToThree(temp0[0]); + puckU32ToThree(temp0[1]); + puckU32ToThree(temp0[2]); + temp1[0] = t1; temp1[1] = t1 << 1; temp1[2] = t1 << 2; + puckU32ToThree(temp1[0]); + puckU32ToThree(temp1[1]); + puckU32ToThree(temp1[2]); + temp2[0] = t2; temp2[1] = t2 << 1; temp2[2] = t2 << 2; + puckU32ToThree(temp2[0]); + puckU32ToThree(temp2[1]); + puckU32ToThree(temp2[2]); + out[0] = (temp0[0]) | (temp1[0] >> 11) | (temp2[0] >> 22); + out[1] = (temp0[1]) | (temp1[1] >> 11) | (((u32)t2_64) << 10) | (temp2[1] >> 22); + out[2] = (temp0[2]) | (((u32)t1_32) << 21) | (temp1[2] >> 11) | (((u32)t2_65) << 10) | (temp2[2] >> 22); +} + +void packU48FormatToThreePacket(u32 * out, u8 * in) { + u32 t1 = (u32)U16BIG(*(u16*)(in + 4)); + u32 t2 = U32BIG(*(u32*)(in)); + u32 temp1[3] = { 0 }; + u32 temp2[3] = { 0 }; + u8 t2_64 = (in[3] & 0x80) >> 7, t2_65 = (in[3] & 0x40) >> 6; + t1 = t1 << 1; + t2 = t2 << 2; + temp1[0] = t1; temp1[1] = t1 << 1; temp1[2] = t1 << 2; + puckU32ToThree(temp1[0]); + puckU32ToThree(temp1[1]); + puckU32ToThree(temp1[2]); + temp2[0] = t2; temp2[1] = t2 << 1; temp2[2] = t2 << 2; + puckU32ToThree(temp2[0]); + puckU32ToThree(temp2[1]); + puckU32ToThree(temp2[2]); + out[0] = (temp1[0] >> 11) | (temp2[0] >> 22); + out[1] = (temp1[1] >> 11) | (((u32)t2_64) << 10) | (temp2[1] >> 22); + out[2] = (temp1[2] >> 11) | (((u32)t2_65) << 10) | (temp2[2] >> 22); +} +unsigned char constant7Format[76] = { + /*constant7Format[127]:*/ +0x01,0x08,0x40,0x02,0x10,0x80,0x05,0x09,0x48,0x42,0x12,0x90, +0x85,0x0c,0x41,0x0a,0x50,0x82,0x15,0x89,0x4d,0x4b,0x5a,0xd2, +0x97,0x9c,0xc4,0x06,0x11,0x88,0x45,0x0b,0x58,0xc2,0x17,0x99, +0xcd,0x4e,0x53,0x9a,0xd5,0x8e,0x54,0x83,0x1d,0xc9,0x4f,0x5b, +0xda,0xd7,0x9e,0xd4,0x86,0x14,0x81,0x0d,0x49,0x4a,0x52,0x92, +0x95,0x8c,0x44,0x03,0x18,0xc0,0x07,0x19,0xc8,0x47,0x1b,0xd8, +0xc7,0x1e,0xd1,0x8f}; diff --git a/knot/Implementations/crypto_aead/knot192/armcortexm_4/auxFormat.h b/knot/Implementations/crypto_aead/knot192/armcortexm_4/auxFormat.h new file mode 100644 index 0000000..5870426 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot192/armcortexm_4/auxFormat.h @@ -0,0 +1,57 @@ +#include"crypto_aead.h" +#include"api.h" +#include +#include +#include +#define U32BIG(x) (x) +#define U16BIG(x) (x) + +typedef unsigned char u8; +typedef unsigned short u16; +typedef unsigned int u32; +typedef unsigned long long u64; + +#define ARR_SIZE(a) (sizeof((a))/sizeof((a[0]))) +#define LOTR32(x,n) (((x)<<(n))|((x)>>(32-(n)))) + + +#define ARR_SIZE(a) (sizeof((a))/sizeof((a[0]))) +#define sbox(a, b, c, d, f, g, h) \ +{ \ + t1 = ~a; t2 = b & t1;t3 = c ^ t2; h = d ^ t3; t5 = b | c; t6 = d ^ t1; g = t5 ^ t6; t8 = b ^ d; t9 = t3 & t6; a = t8 ^ t9; t11 = g & t8; f = t3 ^ t11; \ +} + +#define U96_BIT_LOTR32_8(t0,t1,t2,t3,t4,t5){\ +t3= LOTR32(t2, 2);\ +t4 =LOTR32(t0, 3);\ +t5 = LOTR32(t1, 3); \ +} +//55=3*18+1 +#define U96_BIT_LOTR32_55(t0,t1,t2,t3,t4,t5){\ +t3= LOTR32(t1, 18); \ +t4 = LOTR32(t2, 18);\ +t5 = LOTR32(t0, 19); \ +} +/* +s0 s1 s2 +s3 s4 s5 +s6 s7 s8 +s9 s10 s11 +*/ +#define puckU32ToThree(x){\ +x &= 0x92492492;\ +x = (x | (x << 2)) & 0xc30c30c3;\ +x = (x | (x << 4)) & 0xf00f00f0;\ +x = (x | (x << 8)) & 0xff0000ff;\ +x = (x | (x << 16)) & 0xfff00000;\ +} +#define unpuckU32ToThree(x){\ +x &= 0xfff00000;\ +x = (x | (x >> 16)) & 0xff0000ff;\ +x = (x | (x >> 8)) & 0xf00f00f0;\ +x = (x | (x >> 4)) & 0xc30c30c3;\ +x = (x | (x >> 2)) & 0x92492492;\ +} + +unsigned char constant7Format[76]; + diff --git a/knot/Implementations/crypto_aead/knot192/armcortexm_4/crypto_aead.h b/knot/Implementations/crypto_aead/knot192/armcortexm_4/crypto_aead.h new file mode 100644 index 0000000..862d176 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot192/armcortexm_4/crypto_aead.h @@ -0,0 +1,18 @@ + +int crypto_aead_encrypt( + unsigned char *c, unsigned long long *clen, + const unsigned char *m, unsigned long long mlen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k +); + +int crypto_aead_decrypt( + unsigned char *m, unsigned long long *mlen, + unsigned char *nsec, + const unsigned char *c, unsigned long long clen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k +); diff --git a/knot/Implementations/crypto_aead/knot192/armcortexm_4/encrypt.c b/knot/Implementations/crypto_aead/knot192/armcortexm_4/encrypt.c new file mode 100644 index 0000000..f4fc2ce --- /dev/null +++ b/knot/Implementations/crypto_aead/knot192/armcortexm_4/encrypt.c @@ -0,0 +1,151 @@ +#include"auxFormat.h" + +#define aead_RATE (96 / 8) +#define PR0_ROUNDS 76 +#define PR_ROUNDS 40 +#define PRF_ROUNDS 44 +void Initialize(u32 *s, const unsigned char *npub, const unsigned char *k) { + packU96FormatToThreePacket(s, npub); + packU96FormatToThreePacket(s + 3, npub + 12); + packU96FormatToThreePacket(s + 6, k); + packU96FormatToThreePacket(s + 9, k + 12); + P384(s, constant7Format, PR0_ROUNDS); +} + +void ProcessAssocData(u32 *s, const u8* ad, unsigned long long adlen) { + + u32 dataFormat[3] = { 0 }; + u8 tempData[12] = { 0 }; + if (adlen) { + while (adlen >= aead_RATE) { + packU96FormatToThreePacket(dataFormat, ad); + s[0] ^= dataFormat[0]; + s[1] ^= dataFormat[1]; + s[2] ^= dataFormat[2]; + P384(s, constant7Format, PR_ROUNDS); + adlen -= aead_RATE; + ad += aead_RATE; + } + memset(tempData, 0, sizeof(tempData)); + memcpy(tempData, ad, adlen * sizeof(unsigned char)); + tempData[adlen] = 0x01; + packU96FormatToThreePacket(dataFormat, tempData); + s[0] ^= dataFormat[0]; + s[1] ^= dataFormat[1]; + s[2] ^= dataFormat[2]; + P384(s, constant7Format, PR_ROUNDS); + } + s[9] ^= 0x80000000; + +} +void ProcessPlaintext(u32 *s, const u8* m, unsigned long long mlen, unsigned char *c) { + + u32 dataFormat[3] = { 0 }; + u8 tempData[12] = { 0 }; + if (mlen) { + while (mlen >= aead_RATE) { + packU96FormatToThreePacket(dataFormat, m); + s[0] ^= dataFormat[0]; + s[1] ^= dataFormat[1]; + s[2] ^= dataFormat[2]; + unpackU96FormatToThreePacket(c, s); + P384(s, constant7Format, PR_ROUNDS); + mlen -= aead_RATE; + m += aead_RATE; + c += aead_RATE; + } + memset(tempData, 0, sizeof(tempData)); + memcpy(tempData, m, mlen * sizeof(unsigned char)); + tempData[mlen] = 0x01; + packU96FormatToThreePacket(dataFormat, tempData); + s[0] ^= dataFormat[0]; + s[1] ^= dataFormat[1]; + s[2] ^= dataFormat[2]; + unpackU96FormatToThreePacket(tempData, s); + memcpy(c, tempData, mlen * sizeof(unsigned char)); + c += mlen; + } +} + +void Finalize_GenerateTag(u32 *s, unsigned char *c) { + P384(s, constant7Format, PRF_ROUNDS); + // return tag + unpackU96FormatToThreePacket(c, s); + unpackU96FormatToThreePacket(c + 12, s + 3); + +} +int Finalize_VerifyTag(u32 *s, const unsigned char *c, unsigned char *m, unsigned long long *mlen) { + u8 tempU8[32] = { 0 }; + P384(s, constant7Format, PRF_ROUNDS); + // return tag + unpackU96FormatToThreePacket(tempU8, s); + unpackU96FormatToThreePacket(tempU8 + 12, s + 3); + if (memcmp((void*)tempU8, (void*)(c), CRYPTO_ABYTES)) { + memset(m, 0, sizeof(unsigned char) * (*mlen)); + *mlen = 0; + return -1; + } + return 0; +} +void ProcessCiphertext(u32 *s, unsigned char *m, const unsigned char *c, unsigned long long clen) +{ + u32 dataFormat[6] = { 0 }; + u32 dataFormat_1[3] = { 0 }; + u8 i,tempU8[48] = { 0 }; + if (clen) { + while (clen >= aead_RATE) { + packU96FormatToThreePacket(dataFormat, c); + dataFormat_1[0] = s[0] ^ dataFormat[0]; + dataFormat_1[1] = s[1] ^ dataFormat[1]; + dataFormat_1[2] = s[2] ^ dataFormat[2]; + unpackU96FormatToThreePacket(m, dataFormat_1); + s[0] = dataFormat[0]; + s[1] = dataFormat[1]; + s[2] = dataFormat[2]; + P384(s, constant7Format, PR_ROUNDS); + clen -= aead_RATE; + m += aead_RATE; + c += aead_RATE; + } + unpackU96FormatToThreePacket(tempU8, s); + for (i = 0; i < clen; ++i, ++m, ++c) + { + *m = tempU8[i] ^ *c; + tempU8[i] = *c; + } + tempU8[i] ^= 0x01; + packU96FormatToThreePacket(s, tempU8); + } + +} +int crypto_aead_encrypt(unsigned char *c, unsigned long long *clen, + const unsigned char *m, unsigned long long mlen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *nsec, const unsigned char *npub, + const unsigned char *k) { + u32 s[12] = { 0 }; + *clen = mlen + CRYPTO_ABYTES; + // initialization + Initialize(s, npub, k); + // process associated data + ProcessAssocData(s, ad, adlen); + ProcessPlaintext(s, m, mlen, c); + Finalize_GenerateTag(s, c + mlen); + return 0; +} + +int crypto_aead_decrypt(unsigned char *m, unsigned long long *mlen, + unsigned char *nsec, const unsigned char *c, unsigned long long clen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *npub, const unsigned char *k) { + u32 s[12] = { 0 }; + *mlen = clen - CRYPTO_ABYTES; + if (clen < CRYPTO_ABYTES) + return -1; + Initialize(s, npub, k); + // process associated data + ProcessAssocData(s, ad, adlen); + ProcessCiphertext(s, m, c, clen - CRYPTO_ABYTES); + // finalization + return Finalize_VerifyTag(s, c + clen - CRYPTO_KEYBYTES, m, mlen); +} diff --git a/knot/Implementations/crypto_aead/knot192/avr8_lowrom/api.h b/knot/Implementations/crypto_aead/knot192/avr8_lowrom/api.h new file mode 100644 index 0000000..0146d82 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot192/avr8_lowrom/api.h @@ -0,0 +1,5 @@ +#define CRYPTO_KEYBYTES 24 +#define CRYPTO_NSECBYTES 0 +#define CRYPTO_NPUBBYTES 24 +#define CRYPTO_ABYTES 24 +#define CRYPTO_NOOVERLAP 1 diff --git a/knot/Implementations/crypto_aead/knot192/avr8_lowrom/assist.h b/knot/Implementations/crypto_aead/knot192/avr8_lowrom/assist.h new file mode 100644 index 0000000..cb903a5 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot192/avr8_lowrom/assist.h @@ -0,0 +1,140 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by KNOT Team * +; ********************************************** +; +.macro LFSR6_MACRO + bst rc, 5 + bld tmp0, 0 + bst rc, 4 + bld tmp1, 0 + eor tmp0, tmp1 + ror tmp0 + rol rc + andi rc, 0x3F +.endm + +.macro LFSR7_MACRO + bst rc, 6 + bld tmp0, 0 + bst rc, 5 + bld tmp1, 0 + eor tmp0, tmp1 + ror tmp0 + rol rc + andi rc, 0x7F +.endm + +.macro LFSR8_MACRO + bst rc, 7 + bld tmp0, 0 + bst rc, 5 + bld tmp1, 0 + eor tmp0, tmp1 + bst rc, 4 + bld tmp1, 0 + eor tmp0, tmp1 + bst rc, 3 + bld tmp1, 0 + eor tmp0, tmp1 + ror tmp0 + rol rc +.endm + +.macro Sbox i0, i1, i2, i3 + mov tmp0, \i1 + com \i0 + and \i1, \i0 + eor \i1, \i2 + or \i2, tmp0 + eor \i0, \i3 + eor \i2, \i0 + eor tmp0, \i3 + and \i0, \i1 + eor \i3, \i1 + eor \i0, tmp0 + and tmp0, \i2 + eor \i1, tmp0 +.endm + +.macro PUSH_CONFLICT + push r16 + push r17 + push r18 + push r19 + + push r23 + push r24 + + push r26 + push r27 + push r28 + push r29 + push r30 + push r31 +.endm + +.macro POP_CONFLICT + pop r31 + pop r30 + pop r29 + pop r28 + pop r27 + pop r26 + + pop r24 + pop r23 + + pop r19 + pop r18 + pop r17 + pop r16 +.endm + +.macro PUSH_ALL + push r2 + push r3 + push r4 + push r5 + push r6 + push r7 + push r8 + push r9 + push r10 + push r11 + push r12 + push r13 + push r14 + push r15 + push r16 + push r17 + push r28 + push r29 +.endm + +.macro POP_ALL + pop r29 + pop r28 + pop r17 + pop r16 + pop r15 + pop r14 + pop r13 + pop r12 + pop r11 + pop r10 + pop r9 + pop r8 + pop r7 + pop r6 + pop r5 + pop r4 + pop r3 + pop r2 + clr r1 +.endm \ No newline at end of file diff --git a/knot/Implementations/crypto_aead/knot192/avr8_lowrom/config.h b/knot/Implementations/crypto_aead/knot192/avr8_lowrom/config.h new file mode 100644 index 0000000..173a40a --- /dev/null +++ b/knot/Implementations/crypto_aead/knot192/avr8_lowrom/config.h @@ -0,0 +1,131 @@ +#ifndef __CONFIG_H__ +#define __CONFIG_H__ + +#define CRYPTO_AEAD +//#define CRYPTO_HASH + +#define MAX_MESSAGE_LENGTH 128 + +#define STATE_INBITS 384 +/* For CRYPTO_AEAD */ +#define CRYPTO_KEYBITS 192 +/* For CRYPTO_HASH */ +#define CRYPTO_BITS 384 + +#define STATE_INBYTES ((STATE_INBITS + 7) / 8) +#define ROW_INBITS ((STATE_INBITS + 3) / 4) +#define ROW_INBYTES ((ROW_INBITS + 7) / 8) + +/* For CRYPTO_AEAD */ +#define CRYPTO_KEYBYTES ((CRYPTO_KEYBITS + 7) / 8) +#define CRYPTO_NSECBYTES 0 +#define CRYPTO_NPUBBYTES CRYPTO_KEYBYTES +#define CRYPTO_ABYTES CRYPTO_KEYBYTES +#define CRYPTO_NOOVERLAP 1 + +#define MAX_ASSOCIATED_DATA_LENGTH 32 +#define MAX_CIPHER_LENGTH (MAX_MESSAGE_LENGTH + CRYPTO_ABYTES) + +#define TAG_MATCH 0 +#define TAG_UNMATCH -1 +#define OTHER_FAILURES -2 + +/* For CRYPTO_HASH */ +#define CRYPTO_BYTES ((CRYPTO_BITS + 7) / 8) + + + +#define DOMAIN_BITS 0x80 +#define PAD_BITS 0x01 +#define S384_R192_BITS 0x80 + +#if (STATE_INBITS==256) +#define C1 1 +#define C2 8 +#define C3 25 +#elif (STATE_INBITS==384) +#define C1 1 +#define C2 8 +#define C3 55 +#elif (STATE_INBITS==512) +#define C1 1 +#define C2 16 +#define C3 25 +#else +#error "Not specified state size" +#endif + +#ifdef CRYPTO_AEAD +/* For CRYPTO_AEAD */ +#define KEY_INBITS (CRYPTO_KEYBYTES * 8) +#define KEY_INBYTES (CRYPTO_KEYBYTES) + +#define NONCE_INBITS (CRYPTO_NPUBBYTES * 8) +#define NONCE_INBYTES (CRYPTO_NPUBBYTES) + +#define TAG_INBITS (CRYPTO_ABYTES * 8) +#define TAG_INBYTES (CRYPTO_ABYTES) + +#if (KEY_INBITS==128) && (STATE_INBITS==256) +#define RATE_INBITS 64 +#define NR_0 52 +#define NR_i 28 +#define NR_f 32 +#elif (KEY_INBITS==128) && (STATE_INBITS==384) +#define RATE_INBITS 192 +#define NR_0 76 +#define NR_i 28 +#define NR_f 32 +#elif (KEY_INBITS==192) && (STATE_INBITS==384) +#define RATE_INBITS 96 +#define NR_0 76 +#define NR_i 40 +#define NR_f 44 +#elif (KEY_INBITS==256) && (STATE_INBITS==512) +#define RATE_INBITS 128 +#define NR_0 100 +#define NR_i 52 +#define NR_f 56 +#else +#error "Not specified key size and state size" +#endif + +#define RATE_INBYTES ((RATE_INBITS + 7) / 8) +#define SQUEEZE_RATE_INBYTES TAG_INBYTES + +#endif + +#ifdef CRYPTO_HASH +/* For CRYPTO_HASH */ +#define HASH_DIGEST_INBITS (CRYPTO_BYTES * 8) + +#if (HASH_DIGEST_INBITS==256) && (STATE_INBITS==256) +#define HASH_RATE_INBITS 32 +#define HASH_SQUEEZE_RATE_INBITS 128 +#define NR_h 68 +#elif (HASH_DIGEST_INBITS==256) && (STATE_INBITS==384) +#define HASH_RATE_INBITS 128 +#define HASH_SQUEEZE_RATE_INBITS 128 +#define NR_h 80 +#elif (HASH_DIGEST_INBITS==384) && (STATE_INBITS==384) +#define HASH_RATE_INBITS 48 +#define HASH_SQUEEZE_RATE_INBITS 192 +#define NR_h 104 +#elif (HASH_DIGEST_INBITS==512) && (STATE_INBITS==512) +#define HASH_RATE_INBITS 64 +#define HASH_SQUEEZE_RATE_INBITS 256 +#define NR_h 140 +#else +#error "Not specified hash digest size and state size" +#endif + +#define HASH_RATE_INBYTES ((HASH_RATE_INBITS + 7) / 8) +#define HASH_SQUEEZE_RATE_INBYTES ((HASH_SQUEEZE_RATE_INBITS + 7) / 8) + +#endif + +#define TAG_MATCH 0 +#define TAG_UNMATCH -1 +#define OTHER_FAILURES -2 + +#endif \ No newline at end of file diff --git a/knot/Implementations/crypto_aead/knot192/avr8_lowrom/crypto_aead.h b/knot/Implementations/crypto_aead/knot192/avr8_lowrom/crypto_aead.h new file mode 100644 index 0000000..cd820d3 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot192/avr8_lowrom/crypto_aead.h @@ -0,0 +1,26 @@ +#ifdef __cplusplus +extern "C" { +#endif + +int crypto_aead_encrypt( + unsigned char *c,unsigned long long *clen, + const unsigned char *m,unsigned long long mlen, + const unsigned char *ad,unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k + ); + + +int crypto_aead_decrypt( + unsigned char *m,unsigned long long *outputmlen, + unsigned char *nsec, + const unsigned char *c,unsigned long long clen, + const unsigned char *ad,unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k + ); + +#ifdef __cplusplus +} +#endif diff --git a/knot/Implementations/crypto_aead/knot192/avr8_lowrom/encrypt.c b/knot/Implementations/crypto_aead/knot192/avr8_lowrom/encrypt.c new file mode 100644 index 0000000..baf0a3b --- /dev/null +++ b/knot/Implementations/crypto_aead/knot192/avr8_lowrom/encrypt.c @@ -0,0 +1,106 @@ +#include +#include +#include +#include +#include "config.h" + +extern void crypto_aead_encrypt_asm( + unsigned char *c, + const unsigned char *m, + unsigned char mlen, + const unsigned char *ad, + unsigned char adlen, + const unsigned char *npub, + const unsigned char *k + ); + +extern int crypto_aead_decrypt_asm( + unsigned char *m, + const unsigned char *c, + unsigned char clen, + const unsigned char *ad, + unsigned char adlen, + const unsigned char *npub, + const unsigned char *k + ); + +extern void crypto_hash_asm( + unsigned char *out, + const unsigned char *in, + unsigned char inlen + ); + + +int crypto_aead_encrypt( + unsigned char *c, unsigned long long *clen, + const unsigned char *m, unsigned long long mlen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k + ) +{ + /* + ... + ... the code for the cipher implementation goes here, + ... generating a ciphertext c[0],c[1],...,c[*clen-1] + ... from a plaintext m[0],m[1],...,m[mlen-1] + ... and associated data ad[0],ad[1],...,ad[adlen-1] + ... and nonce npub[0],npub[1],.. + ... and secret key k[0],k[1],... + ... the implementation shall not use nsec + ... + ... return 0; + */ + + (void)nsec; + + crypto_aead_encrypt_asm(c, m, mlen, ad, adlen, npub, k); + + *clen = mlen + TAG_INBYTES; + return 0; +} + + + +int crypto_aead_decrypt( + unsigned char *m, unsigned long long *mlen, + unsigned char *nsec, + const unsigned char *c, unsigned long long clen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k + ) +{ + /* + ... + ... the code for the AEAD implementation goes here, + ... generating a plaintext m[0],m[1],...,m[*mlen-1] + ... and secret message number nsec[0],nsec[1],... + ... from a ciphertext c[0],c[1],...,c[clen-1] + ... and associated data ad[0],ad[1],...,ad[adlen-1] + ... and nonce number npub[0],npub[1],... + ... and secret key k[0],k[1],... + ... + ... return 0; + */ + unsigned long long mlen_; + unsigned char tag_is_match; + + (void)nsec; + if (clen < CRYPTO_ABYTES) { + return -1; + } + mlen_ = clen - CRYPTO_ABYTES; + + tag_is_match = crypto_aead_decrypt_asm(m, c, mlen_, ad, adlen, npub, k); + + if (tag_is_match != 0) + { + memset(m, 0, (size_t)mlen_); + return -1; + } + + *mlen = mlen_; + return 0; +} \ No newline at end of file diff --git a/knot/Implementations/crypto_aead/knot192/avr8_lowrom/encrypt_core.S b/knot/Implementations/crypto_aead/knot192/avr8_lowrom/encrypt_core.S new file mode 100644 index 0000000..cb7aed5 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot192/avr8_lowrom/encrypt_core.S @@ -0,0 +1,537 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by KNOT Team * +; ********************************************** +; + +; +; ============================================ +; S R A M D E F I N I T I O N S +; ============================================ +; +#include +#include "config.h" + +.section .noinit + SRAM_STATE: .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#if (STATE_INBYTES > 32) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif +#if (STATE_INBYTES > 48) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif + SRAM_MESSAGE_OUT_ADDR: .BYTE 0, 0 + SRAM_MESSAGE_IN_ADDR: .BYTE 0, 0 + SRAM_MESSAGE_IN_LEN: .BYTE 0, 0 +#ifdef CRYPTO_AEAD +; For CRYPTO_AEAD + SRAM_ASSOCIATED_DATA_ADDR: .BYTE 0, 0 + SRAM_ADLEN: .BYTE 0, 0 + SRAM_NONCE_ADDR: .BYTE 0, 0 + SRAM_KEY_ADDR: .BYTE 0, 0 + + SRAM_ADDITIONAL: + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#if (CRYPTO_ABYTES > 16) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif +#if (CRYPTO_ABYTES > 24) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif + +#endif + +.section .text + +#include "permutation.h" + +; require YH:YL be the address of the current associated data/cipher/message block +; for enc and dec, store ciphertext or plaintext +; require ZH:ZL be the address of the current cipher/message block +XOR_to_State: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + mov cnt0, rate +XOR_to_State_loop: + ld tmp0, Y+ ; plaintext/ciphertext + ld tmp1, X ; state + eor tmp1, tmp0 ; ciphertext/plaintext + sbrc AEDH, 0 ; test auth or enc/dec, if AEDH[0] == 0, skip store result + st Z+, tmp1 ; store ciphertext/plaintext + sbrc AEDH, 1 ; test auth/enc or dec, if AEDH[1] == 0, skip repalce state byte + mov tmp1, tmp0 ; if dec, replace state + st X+, tmp1 ; store state byte + dec cnt0 + brne XOR_to_State_loop +; YH:YL are now the address of the next associated data block +ret + +; require YH:YL pointed to the input data +; require ZH:ZL pointed to the output data +; require cnt0 containes the nubmer of bytes in source data +; require number of bytes in source data less than rate, i.e., 0 <= cnt0 < rate +; +; the 0th bit in AEDH is used to distinguish (auth AD) or (enc/dec M/C): +; AEDH[0] = 0 for (auth AD), AEDH[0] = 1 for (enc/dec M/C) +; the 1th bit in AEDH is used to distinguish (auth AD/enc M) or (dec C): +; AEDH[1] = 0 for (auth AD/enc M), AEDH[1] = 1 for (dec C) +; AEDH = 0b000 for (auth AD) +; AEDH = 0b001 for (enc M) +; AEDH = 0b011 for (dec C) +Pad_XOR_to_State: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + tst cnt0 + breq XOR_padded_data +XOR_source_data_loop: + ld tmp0, Y+ ; plaintext/ciphertext + ld tmp1, X ; state + eor tmp1, tmp0 ; ciphertext/plaintext + sbrc AEDH, 0 ; test auth or enc/dec, if AEDH[0] == 0, skip store result + st Z+, tmp1 ; store ciphertext/plaintext + sbrc AEDH, 1 ; test auth/enc or dec, if AEDH[1] == 0, skip repalce state byte + mov tmp1, tmp0 ; if dec, replace state + st X+, tmp1 ; store state byte + dec cnt0 + brne XOR_source_data_loop +XOR_padded_data: + ldi tmp0, PAD_BITS + ld tmp1, X + eor tmp1, tmp0 + st X, tmp1 +ret + +AddDomain: + ldi XH, hi8(SRAM_STATE + STATE_INBYTES - 1) + ldi XL, lo8(SRAM_STATE + STATE_INBYTES - 1) + ldi tmp0, DOMAIN_BITS + ld tmp1, X + eor tmp0, tmp1 + st X, tmp0 +ret + +; require ZH:ZL be the address of the destination +EXTRACT_from_State: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + mov tmp1, rate +EXTRACT_from_State_loop: + ld tmp0, X+ + st Z+, tmp0 + dec tmp1 + brne EXTRACT_from_State_loop +ret + +AUTH: + tst radlen + breq AUTH_end + + cp radlen, rate + brlo auth_ad_padded_block + +auth_ad_loop: + rcall XOR_to_State + rcall Permutation + sub radlen, rate + cp radlen, rate + brlo auth_ad_padded_block + rjmp auth_ad_loop + +auth_ad_padded_block: + mov cnt0, radlen + rcall Pad_XOR_to_State + rcall Permutation + +AUTH_end: +ret + +#ifdef CRYPTO_AEAD +Initialization: + ldi rn, NR_0 + ldi XL, lo8(SRAM_STATE) + ldi XH, hi8(SRAM_STATE) + + lds YH, SRAM_NONCE_ADDR + lds YL, SRAM_NONCE_ADDR + 1 + ldi cnt0, CRYPTO_NPUBBYTES +load_nonce_loop: + ld tmp0, Y+ + st X+, tmp0 + dec cnt0 + brne load_nonce_loop + + lds YH, SRAM_KEY_ADDR + lds YL, SRAM_KEY_ADDR + 1 + ldi cnt0, CRYPTO_KEYBYTES +load_key_loop: + ld tmp0, Y+ + st X+, tmp0 + dec cnt0 + brne load_key_loop + +#if (STATE_INBITS==384) && (RATE_INBITS==192) + ldi cnt0, (STATE_INBYTES - CRYPTO_NPUBBYTES - CRYPTO_KEYBYTES - 1) + clr tmp0 +empty_state_loop: + st X+, tmp0 + dec cnt0 + brne empty_state_loop + ldi tmp0, S384_R192_BITS + st X+, tmp0 +#endif + + rcall Permutation +ret + +ENC: + tst mclen + breq ENC_end + + cp mclen, rate + brlo enc_padded_block + +enc_loop: + rcall XOR_to_State + ldi rn, NR_i + rcall Permutation + sub mclen, rate + cp mclen, rate + brlo enc_padded_block + rjmp enc_loop + +enc_padded_block: + mov cnt0, mclen + rcall Pad_XOR_to_State +ENC_end: +ret + +Finalization: + ldi rate, SQUEEZE_RATE_INBYTES + ldi rn, NR_f + rcall Permutation + rcall EXTRACT_from_State +ret + +; void crypto_aead_encrypt_asm( +; unsigned char *c, +; const unsigned char *m, +; unsigned long long mlen, +; const unsigned char *ad, +; unsigned long long adlen, +; const unsigned char *npub, +; const unsigned char *k +; ) +; +; unsigned char *c, is passed in r24:r25 +; const unsigned char *m, is passed in r22:r23 +; unsigned long long mlen, is passed in r20:r21, only LSB (r20) is used +; const unsigned char *ad, is passed in r18:r19 +; unsigned long long adlen, is passed in r16:r17, only LSB (r16) is used +; const unsigned char *npub, is passed in r14:r15 +; const unsigned char *k is passed in r12:r13 +.global crypto_aead_encrypt_asm +crypto_aead_encrypt_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store cipher address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store message address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store message length in SRAM_MESSAGE_IN_LEN + st X+, r20 + st X+, r19 ;store associated data address in SRAM_ASSOCIATED_DATA_ADDR + st X+, r18 + st X+, r17 ;store associated data length in SRAM_ADLEN + st X+, r16 + st X+, r15 ;store nonce address in SRAM_NONCE_ADDR + st X+, r14 + st X+, r13 ;store key address in SRAM_KEY_ADDR + st X+, r12 + mov radlen, r16 + mov mclen, r20 + + rcall Initialization + + ldi rn, NR_i + ldi rate, RATE_INBYTES + ldi AEDH, 0b000 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_ASSOCIATED_DATA_ADDR + lds YL, SRAM_ASSOCIATED_DATA_ADDR + 1 + rcall AUTH + rcall AddDomain + ldi AEDH, 0b001 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_MESSAGE_IN_ADDR + lds YL, SRAM_MESSAGE_IN_ADDR + 1 + lds ZH, SRAM_MESSAGE_OUT_ADDR + lds ZL, SRAM_MESSAGE_OUT_ADDR + 1 + rcall ENC + rcall Finalization + POP_ALL +ret + +; int crypto_aead_decrypt_asm( +; unsigned char *m, +; const unsigned char *c, +; unsigned long long clen, +; const unsigned char *ad, +; unsigned long long adlen, +; const unsigned char *npub, +; const unsigned char *k +; ) +; +; unsigned char *m, is passed in r24:r25 +; const unsigned char *c, is passed in r22:r23 +; unsigned long long clen, is passed in r20:r21, only LSB (r20) is used +; const unsigned char *ad, is passed in r18:r19 +; unsigned long long adlen, is passed in r16:r17, only LSB (r16) is used +; const unsigned char *npub, is passed in r14:r15 +; const unsigned char *k is passed in r12:r13 +.global crypto_aead_decrypt_asm +crypto_aead_decrypt_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store message address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store cipher address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store cipher length in SRAM_MESSAGE_IN_LEN + st X+, r20 + st X+, r19 ;store associated data address in SRAM_ASSOCIATED_DATA_ADDR + st X+, r18 + st X+, r17 ;store associated data length in SRAM_ADLEN + st X+, r16 + st X+, r15 ;store nonce address in SRAM_NONCE_ADDR + st X+, r14 + st X+, r13 ;store key address in SRAM_KEY_ADDR + st X+, r12 + mov radlen, r16 + mov mclen, r20 + + rcall Initialization + + ldi rn, NR_i + ldi rate, RATE_INBYTES + ldi AEDH, 0b000 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_ASSOCIATED_DATA_ADDR + lds YL, SRAM_ASSOCIATED_DATA_ADDR + 1 + rcall AUTH + rcall AddDomain + ldi AEDH, 0b011 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_MESSAGE_IN_ADDR + lds YL, SRAM_MESSAGE_IN_ADDR + 1 + lds ZH, SRAM_MESSAGE_OUT_ADDR + lds ZL, SRAM_MESSAGE_OUT_ADDR + 1 + rcall ENC + + ldi ZH, hi8(SRAM_ADDITIONAL) + ldi ZL, lo8(SRAM_ADDITIONAL) + rcall Finalization + + sbiw ZL, CRYPTO_ABYTES + ldi cnt0, CRYPTO_ABYTES +compare_tag: + ld tmp0, Z+ + ld tmp1, Y+ + cp tmp0, tmp1 + brne return_tag_not_match + dec cnt0 + brne compare_tag + rjmp return_tag_match + +return_tag_not_match: + ldi r25, 0xFF + ldi r24, 0xFF + rjmp crypto_aead_decrypt_end + +return_tag_match: + clr r25 + clr r24 +crypto_aead_decrypt_end: + POP_ALL +ret + +; #ifdef CRYPTO_AEAD +#endif + + +#ifdef CRYPTO_HASH + +; void crypto_hash_asm( +; unsigned char *out, +; const unsigned char *in, +; unsigned long long inlen +; ) +; +; unsigned char *out, is passed in r24:r25 +; const unsigned char *in, is passed in r22:r23 +; unsigned long long inlen, is passed in r20:r21, only LSB (r20) is used +.global crypto_hash_asm +crypto_hash_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store message address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store cipher address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store cipher length in SRAM_MESSAGE_IN_LEN + st X+, r20 + mov mclen, r20 + + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) +#if (STATE_INBITS==384) && (HASH_RATE_INBITS==128) + ldi cnt0, STATE_INBYTES - 1 +#else + ldi cnt0, STATE_INBYTES +#endif + clr tmp0 +zero_state: + st X+, tmp0 + dec cnt0 + brne zero_state + +#if (STATE_INBITS==384) && (HASH_RATE_INBITS==128) + ldi tmp0, S384_R192_BITS + st X+, tmp0 +#endif + + ldi rn, NR_h + ldi AEDH, 0b100 + +HASH_ABSORBING: + mov radlen, mclen + tst radlen + breq EMPTY_M + ldi rate, HASH_RATE_INBYTES + lds YH, SRAM_MESSAGE_IN_ADDR + lds YL, SRAM_MESSAGE_IN_ADDR + 1 + rcall AUTH + rjmp HASH_SQUEEZING + +EMPTY_M: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + ldi tmp0, PAD_BITS + ld tmp1, X + eor tmp1, tmp0 + st X, tmp1 + rcall Permutation + +HASH_SQUEEZING: + ldi rate, HASH_SQUEEZE_RATE_INBYTES + lds ZH, SRAM_MESSAGE_OUT_ADDR + lds ZL, SRAM_MESSAGE_OUT_ADDR + 1 + ldi tcnt, CRYPTO_BYTES +SQUEEZING_loop: + rcall EXTRACT_from_State + subi tcnt, HASH_SQUEEZE_RATE_INBYTES + breq HASH_SQUEEZING_end + rcall Permutation + rjmp SQUEEZING_loop +HASH_SQUEEZING_end: + POP_ALL +ret + +#endif + + +; Byte Order In AVR 8: +; KNOT-AEAD(128, 256, 64): +; N[ 0] AEAD_State[ 0] | Message[ 0] Perm_row_0[0] 0 Tag[ 0] +; N[ 1] AEAD_State[ 1] | Message[ 1] Perm_row_0[1] 0 Tag[ 1] +; N[ 2] AEAD_State[ 2] | Message[ 2] Perm_row_0[2] 0 Tag[ 2] +; N[ 3] AEAD_State[ 3] | Message[ 3] Perm_row_0[3] 0 Tag[ 3] +; N[ 4] AEAD_State[ 4] | Message[ 4] 0x01 Perm_row_0[4] 0 Tag[ 4] +; N[ 5] AEAD_State[ 5] | Message[ 5] 0x00 Perm_row_0[5] 0 Tag[ 5] +; N[ 6] AEAD_State[ 6] | Message[ 6] 0x00 Perm_row_0[6] 0 Tag[ 6] +; N[ 7] AEAD_State[ 7] | Message[ 7] 0x00 Perm_row_0[7] <<< 0 Tag[ 7] +; N[ 8] AEAD_State[ 8] | Perm_row_1[0] 1 +; N[ 9] AEAD_State[ 9] | Perm_row_1[1] 1 +; N[10] AEAD_State[10] | Perm_row_1[2] 1 +; N[11] AEAD_State[11] | Perm_row_1[3] 1 +; N[12] AEAD_State[12] | Perm_row_1[4] 1 +; N[13] AEAD_State[13] | Perm_row_1[5] 1 +; N[14] AEAD_State[14] | Perm_row_1[6] 1 +; N[15] AEAD_State[15] | Perm_row_1[7] <<< 1 +; K[ 0] AEAD_State[16] | Perm_row_2[0] 8 +; K[ 1] AEAD_State[17] | Perm_row_2[1] 8 +; K[ 2] AEAD_State[18] | Perm_row_2[2] 8 +; K[ 3] AEAD_State[19] | Perm_row_2[3] 8 +; K[ 4] AEAD_State[20] | Perm_row_2[4] 8 +; K[ 5] AEAD_State[21] | Perm_row_2[5] 8 +; K[ 6] AEAD_State[22] | Perm_row_2[6] 8 +; K[ 7] AEAD_State[23] | Perm_row_2[7] <<< 8 +; K[ 8] AEAD_State[24] | Perm_row_3[0] 25 +; K[ 9] AEAD_State[25] | Perm_row_3[1] 25 +; K[10] AEAD_State[26] | Perm_row_3[2] 25 +; K[11] AEAD_State[27] | Perm_row_3[3] 25 +; K[12] AEAD_State[28] | Perm_row_3[4] 25 +; K[13] AEAD_State[29] | Perm_row_3[5] 25 +; K[14] AEAD_State[30] | Perm_row_3[6] 25 +; K[15] AEAD_State[31] | ^0x80 Perm_row_3[7] <<< 25 +; +; +; KNOT-AEAD(128, 384, 192): +; Initalization +; N[ 0] AEAD_State[ 0] | Message[ 0] Perm_row_0[ 0] 0 Tag[ 0] +; N[ 1] AEAD_State[ 1] | Message[ 1] Perm_row_0[ 1] 0 Tag[ 1] +; N[ 2] AEAD_State[ 2] | Message[ 2] Perm_row_0[ 2] 0 Tag[ 2] +; N[ 3] AEAD_State[ 3] | Message[ 3] Perm_row_0[ 3] 0 Tag[ 3] +; N[ 4] AEAD_State[ 4] | Message[ 4] 0x01 Perm_row_0[ 4] 0 Tag[ 4] +; N[ 5] AEAD_State[ 5] | Message[ 5] 0x00 Perm_row_0[ 5] 0 Tag[ 5] +; N[ 6] AEAD_State[ 6] | Message[ 6] 0x00 Perm_row_0[ 6] 0 Tag[ 6] +; N[ 7] AEAD_State[ 7] | Message[ 7] 0x00 Perm_row_0[ 7] 0 Tag[ 7] +; N[ 8] AEAD_State[ 8] | Message[ 8] 0x00 Perm_row_0[ 8] 0 Tag[ 8] +; N[ 9] AEAD_State[ 9] | Message[ 9] 0x00 Perm_row_0[ 9] 0 Tag[ 9] +; N[10] AEAD_State[10] | Message[10] 0x00 Perm_row_0[10] 0 Tag[10] +; N[11] AEAD_State[11] | Message[11] 0x00 Perm_row_0[11] <<< 0 Tag[11] +; N[12] AEAD_State[12] | Message[12] 0x00 Perm_row_1[ 0] 1 Tag[12] +; N[13] AEAD_State[13] | Message[13] 0x00 Perm_row_1[ 1] 1 Tag[13] +; N[14] AEAD_State[14] | Message[14] 0x00 Perm_row_1[ 2] 1 Tag[14] +; N[15] AEAD_State[15] | Message[15] 0x00 Perm_row_1[ 3] 1 Tag[15] +; K[ 0] AEAD_State[16] | Message[16] 0x00 Perm_row_1[ 4] 1 +; K[ 1] AEAD_State[17] | Message[17] 0x00 Perm_row_1[ 5] 1 +; K[ 2] AEAD_State[18] | Message[18] 0x00 Perm_row_1[ 6] 1 +; K[ 3] AEAD_State[19] | Message[19] 0x00 Perm_row_1[ 7] 1 +; K[ 4] AEAD_State[20] | Message[20] 0x00 Perm_row_1[ 8] 1 +; K[ 5] AEAD_State[21] | Message[21] 0x00 Perm_row_1[ 9] 1 +; K[ 6] AEAD_State[22] | Message[22] 0x00 Perm_row_1[10] 1 +; K[ 7] AEAD_State[23] | Message[23] 0x00 Perm_row_1[11] <<< 1 +; K[ 8] AEAD_State[24] | Perm_row_2[ 0] 8 +; K[ 9] AEAD_State[25] | Perm_row_2[ 1] 8 +; K[10] AEAD_State[26] | Perm_row_2[ 2] 8 +; K[11] AEAD_State[27] | Perm_row_2[ 3] 8 +; K[12] AEAD_State[28] | Perm_row_2[ 4] 8 +; K[13] AEAD_State[29] | Perm_row_2[ 5] 8 +; K[14] AEAD_State[30] | Perm_row_2[ 6] 8 +; K[15] AEAD_State[31] | Perm_row_2[ 7] 8 +; 0x00 AEAD_State[32] | Perm_row_2[ 8] 8 +; 0x00 AEAD_State[33] | Perm_row_2[ 9] 8 +; 0x00 AEAD_State[34] | Perm_row_2[10] 8 +; 0x00 AEAD_State[35] | Perm_row_2[11] <<< 8 +; 0x00 AEAD_State[36] | Perm_row_3[ 0] 55 +; 0x00 AEAD_State[37] | Perm_row_3[ 1] 55 +; 0x00 AEAD_State[38] | Perm_row_3[ 2] 55 +; 0x00 AEAD_State[39] | Perm_row_3[ 3] 55 +; 0x00 AEAD_State[40] | Perm_row_3[ 4] 55 +; 0x00 AEAD_State[41] | Perm_row_3[ 5] 55 +; 0x00 AEAD_State[42] | Perm_row_3[ 6] 55 +; 0x00 AEAD_State[43] | Perm_row_3[ 7] 55 +; 0x00 AEAD_State[44] | Perm_row_3[ 8] 55 +; 0x00 AEAD_State[45] | Perm_row_3[ 9] 55 +; 0x00 AEAD_State[46] | Perm_row_3[10] 55 +; 0x00 ^0x80 AEAD_State[47] | ^0x80 Perm_row_3[11] <<< 55 diff --git a/knot/Implementations/crypto_aead/knot192/avr8_lowrom/knot256.h b/knot/Implementations/crypto_aead/knot192/avr8_lowrom/knot256.h new file mode 100644 index 0000000..d16bf8c --- /dev/null +++ b/knot/Implementations/crypto_aead/knot192/avr8_lowrom/knot256.h @@ -0,0 +1,197 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by KNOT Team * +; ********************************************** +; +#include "assist.h" + +Permutation: + PUSH_CONFLICT + mov rcnt, rn + + ldi rc, 0x01 + ldi YH, hi8(SRAM_STATE + 3 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 3 * ROW_INBYTES) + ld x30, Y+ + ld x31, Y+ + ld x32, Y+ + ld x33, Y+ + ld x34, Y+ + ld x35, Y+ + ld x36, Y+ + ld x37, Y+ + +round_loop_start: + rjmp AddRC_SubColumns_Start + +load_columns_table: + rjmp load_column0 + rjmp load_column1 + rjmp load_column2 + rjmp load_column3 + rjmp load_column4 + rjmp load_column5 + rjmp load_column6 + rjmp load_column7 + rjmp amend_shiftRow + +load_column0: + mov x3j, x30 + rjmp Sbox_one_column +load_column1: + mov x30, x3j + mov x3j, x31 + rjmp Sbox_one_column +load_column2: + mov x31, x3j + mov x3j, x32 + rjmp Sbox_one_column +load_column3: + mov x32, x3j + mov x3j, x33 + rjmp Sbox_one_column +load_column4: + mov x33, x3j + mov x3j, x34 + rjmp Sbox_one_column +load_column5: + mov x34, x3j + mov x3j, x35 + rjmp Sbox_one_column +load_column6: + mov x35, x3j + mov x3j, x36 + rjmp Sbox_one_column +load_column7: + mov x36, x3j + mov x3j, x37 + rjmp Sbox_one_column + +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) +LFSR_table: + rjmp LFSR6 + rjmp LFSR7 +LFSR6: + LFSR6_MACRO + rjmp LFSR_DONE +LFSR7: + LFSR7_MACRO + rjmp LFSR_DONE +#endif + +;;;;;;;;;;;;;;;;;;;;;;;; Real Start +AddRC_SubColumns_Start: + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + clr ccnt + ld x0j, Y + eor x0j, rc + +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) + ldi ZL, pm_lo8(LFSR_table) + ldi ZH, pm_hi8(LFSR_table) + sbrc AEDH, 2 ; AEDH[2] = 0 for AEAD and AEDH[1] = 1 for HASH + adiw ZL, 1 + ijmp +LFSR_DONE: +#elif defined(CRYPTO_AEAD) + LFSR6_MACRO ; only AEAD +#else + LFSR7_MACRO ; only HASH +#endif + + ldd x1j, Y + ROW_INBYTES + ldd x2j, Y + 2 * ROW_INBYTES + ldi ZL, pm_lo8(load_columns_table) + ldi ZH, pm_hi8(load_columns_table) + ijmp +Sbox_one_column: + Sbox x0j, x1j, x2j, x3j + + ; 7 6 5 4 3 2 1 0 + ; -- -- -- -- -- -- -- x- 0 + ; -- -- -- -- -- -- -- x' 0 + ; -- -- -- -- -- -- x- -- 1 + ; -- -- -- -- x' -- -- -- 3 + ; 4 3 2 1 0 7 6 5 + ; Store a byte to Row 0 + st Y, x0j + ; Store a byte combined with ShiftRow1 + lsl t1j + mov t1j, x1j ; back up the last updated byte in t1j, to be used in shiftRow1 (1 bit left) + rol x1j + std Y + ROW_INBYTES, x1j + ; Store a byte combined with ShiftRow2 + inc ccnt + cpi ccnt, ROW_INBYTES + breq ROW2_WRAP + ldd t2j, Y + 2 * ROW_INBYTES + 1 ; load next byte, the last updated byte needed to be shifted to the address of the next bytes + std Y + 2 * ROW_INBYTES + 1, x2j + mov x2j, t2j + jmp NO_ROW2_WRAP +ROW2_WRAP: + std Y + ROW_INBYTES + 1, x2j + ; remain ShiftRow3 to be done at 'amend_shiftRow' +NO_ROW2_WRAP: + adiw YL, 1 + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + + adiw ZL, 1 + ijmp + +amend_shiftRow: + ldi YH, hi8(SRAM_STATE + ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + ROW_INBYTES) + + ld x1j, Y + bst t1j, 7 + bld x1j, 0 + st Y, x1j + + ; <<< 1 + mov x37, x3j + rol x3j + rol x30 + rol x31 + rol x32 + rol x33 + rol x34 + rol x35 + rol x36 + rol x37 + ; <<< 24 + ; 7 6 5 4 3 2 1 0 => 4 3 2 1 0 7 6 5 + mov x3j, x30 + mov x30, x35 + mov x35, x32 + mov x32, x37 + mov x37, x34 + mov x34, x31 + mov x31, x36 + mov x36, x33 + mov x33, x3j + + dec rcnt + breq round_loop_end + rjmp round_loop_start + +round_loop_end: + ldi YH, hi8(SRAM_STATE + 3 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 3 * ROW_INBYTES) + st Y+, x30 + st Y+, x31 + st Y+, x32 + st Y+, x33 + st Y+, x34 + st Y+, x35 + st Y+, x36 + st Y+, x37 + + POP_CONFLICT +ret \ No newline at end of file diff --git a/knot/Implementations/crypto_aead/knot192/avr8_lowrom/knot384.h b/knot/Implementations/crypto_aead/knot192/avr8_lowrom/knot384.h new file mode 100644 index 0000000..65c474a --- /dev/null +++ b/knot/Implementations/crypto_aead/knot192/avr8_lowrom/knot384.h @@ -0,0 +1,219 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by KNOT Team * +; ********************************************** +; +#include "assist.h" + +Permutation: + PUSH_CONFLICT + mov rcnt, rn + + ldi rc, 0x01 + ldi YH, hi8(SRAM_STATE + 3 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 3 * ROW_INBYTES) + ld x30, Y+ + ld x31, Y+ + ld x32, Y+ + ld x33, Y+ + ld x34, Y+ + ld x35, Y+ + ld x36, Y+ + ld x37, Y+ + ld x38, Y+ + ld x39, Y+ + ld x3a, Y+ + ld x3b, Y+ + +round_loop_start: + rjmp AddRC_SubColumns_Start + +load_columns_table: + rjmp load_column0 + rjmp load_column1 + rjmp load_column2 + rjmp load_column3 + rjmp load_column4 + rjmp load_column5 + rjmp load_column6 + rjmp load_column7 + rjmp load_column8 + rjmp load_column9 + rjmp load_columna + rjmp load_columnb + rjmp amend_shiftRow + +load_column0: + mov x3j, x30 + rjmp Sbox_one_column +load_column1: + mov x30, x3j + mov x3j, x31 + rjmp Sbox_one_column +load_column2: + mov x31, x3j + mov x3j, x32 + rjmp Sbox_one_column +load_column3: + mov x32, x3j + mov x3j, x33 + rjmp Sbox_one_column +load_column4: + mov x33, x3j + mov x3j, x34 + rjmp Sbox_one_column +load_column5: + mov x34, x3j + mov x3j, x35 + rjmp Sbox_one_column +load_column6: + mov x35, x3j + mov x3j, x36 + rjmp Sbox_one_column +load_column7: + mov x36, x3j + mov x3j, x37 + rjmp Sbox_one_column +load_column8: + mov x37, x3j + mov x3j, x38 + rjmp Sbox_one_column +load_column9: + mov x38, x3j + mov x3j, x39 + rjmp Sbox_one_column +load_columna: + mov x39, x3j + mov x3j, x3a + rjmp Sbox_one_column +load_columnb: + mov x3a, x3j + mov x3j, x3b + rjmp Sbox_one_column + +;;;;;;;;;;;;;;;;;;;;;;;; Real Start +AddRC_SubColumns_Start: + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + ldi ZL, pm_lo8(load_columns_table) + ldi ZH, pm_hi8(load_columns_table) + clr ccnt + ld x0j, Y + eor x0j, rc + LFSR7_MACRO + + ldd x1j, Y + ROW_INBYTES + ldd x2j, Y + 2 * ROW_INBYTES + ijmp +Sbox_one_column: + Sbox x0j, x1j, x2j, x3j + + ; b a 9 8 7 6 5 4 3 2 1 0 + ; -- -- -- -- -- -- -- -- -- -- -- x- 0 + ; -- -- -- -- -- -- -- -- -- -- -- x' 0 + ; -- -- -- -- -- -- -- -- -- -- x- -- 1 + ; -- -- -- -- x' -- -- -- -- -- -- -- 7 + ; 4 3 2 1 0 b a 9 8 7 6 5 + ; Store a byte to Row 0 + st Y, x0j + ; Store a byte combined with ShiftRow 1 + lsl t1j + mov t1j, x1j ; back up the last updated byte in t1j, to be used in shiftRow1 (1 bit left) + rol x1j + std Y + ROW_INBYTES, x1j + ; Store a byte combined with ShiftRow 2 + inc ccnt + cpi ccnt, ROW_INBYTES + breq ROW2_WRAP + ldd t2j, Y + 2 * ROW_INBYTES + 1 ; load next byte, the last updated byte needed to be shifted to the address of the next bytes + std Y + 2 * ROW_INBYTES + 1, x2j + mov x2j, t2j + jmp NO_ROW2_WRAP +ROW2_WRAP: + std Y + ROW_INBYTES + 1, x2j + ; remain ShiftRow3 to be done at 'amend_shiftRow' +NO_ROW2_WRAP: + adiw YL, 1 + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + + adiw ZL, 1 + ijmp + +amend_shiftRow: + ldi YH, hi8(SRAM_STATE + ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + ROW_INBYTES) + + ld x1j, Y + bst t1j, 7 + bld x1j, 0 + st Y, x1j + + ; >>> 1 + mov x3b, x3j + ror x3j + ror x3a + ror x39 + ror x38 + ror x37 + ror x36 + ror x35 + ror x34 + ror x33 + ror x32 + ror x31 + ror x30 + ror x3b + ; <<< 56 + ; b a 9 8 7 6 5 4 3 2 1 0 => 4 3 2 1 0 b a 9 8 7 6 5 + ;mov x3j, x30 + ;mov x30, x35 + ;mov x35, x32 + ;mov x32, x37 + ;mov x37, x34 + ;mov x34, x31 + ;mov x31, x36 + ;mov x36, x33 + ;mov x33, x3j + mov x3j, x30 + mov x30, x35 + mov x35, x3a + mov x3a, x33 + mov x33, x38 + mov x38, x31 + mov x31, x36 + mov x36, x3b + mov x3b, x34 + mov x34, x39 + mov x39, x32 + mov x32, x37 + mov x37, x3j + + dec rcnt + breq round_loop_end + rjmp round_loop_start + +round_loop_end: + + ldi YH, hi8(SRAM_STATE + 3 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 3 * ROW_INBYTES) + st Y+, x30 + st Y+, x31 + st Y+, x32 + st Y+, x33 + st Y+, x34 + st Y+, x35 + st Y+, x36 + st Y+, x37 + st Y+, x38 + st Y+, x39 + st Y+, x3a + st Y+, x3b + + POP_CONFLICT +ret \ No newline at end of file diff --git a/knot/Implementations/crypto_aead/knot192/avr8_lowrom/knot512.h b/knot/Implementations/crypto_aead/knot192/avr8_lowrom/knot512.h new file mode 100644 index 0000000..d24b353 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot192/avr8_lowrom/knot512.h @@ -0,0 +1,275 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by KNOT Team * +; ********************************************** +; +#include "assist.h" + +Permutation: + PUSH_CONFLICT + mov rcnt, rn + + ldi rc, 0x01 + ldi YH, hi8(SRAM_STATE + 3 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 3 * ROW_INBYTES) + ld x30, Y+ + ld x31, Y+ + ld x32, Y+ + ld x33, Y+ + ld x34, Y+ + ld x35, Y+ + ld x36, Y+ + ld x37, Y+ + ld x38, Y+ + ld x39, Y+ + ld x3a, Y+ + ld x3b, Y+ + ld x3c, Y+ + ld x3d, Y+ + ld x3e, Y+ + ld x3f, Y+ + +round_loop_start: + rjmp AddRC_SubColumns_Start + +load_columns_table: + rjmp load_column0 + rjmp load_column1 + rjmp load_column2 + rjmp load_column3 + rjmp load_column4 + rjmp load_column5 + rjmp load_column6 + rjmp load_column7 + rjmp load_column8 + rjmp load_column9 + rjmp load_columna + rjmp load_columnb + rjmp load_columnc + rjmp load_columnd + rjmp load_columne + rjmp load_columnf + rjmp amend_shiftRow + +load_column0: + mov x3j, x30 + rjmp Sbox_one_column +load_column1: + mov x30, x3j + mov x3j, x31 + rjmp Sbox_one_column +load_column2: + mov x31, x3j + mov x3j, x32 + rjmp Sbox_one_column +load_column3: + mov x32, x3j + mov x3j, x33 + rjmp Sbox_one_column +load_column4: + mov x33, x3j + mov x3j, x34 + rjmp Sbox_one_column +load_column5: + mov x34, x3j + mov x3j, x35 + rjmp Sbox_one_column +load_column6: + mov x35, x3j + mov x3j, x36 + rjmp Sbox_one_column +load_column7: + mov x36, x3j + mov x3j, x37 + rjmp Sbox_one_column +load_column8: + mov x37, x3j + mov x3j, x38 + rjmp Sbox_one_column +load_column9: + mov x38, x3j + mov x3j, x39 + rjmp Sbox_one_column +load_columna: + mov x39, x3j + mov x3j, x3a + rjmp Sbox_one_column +load_columnb: + mov x3a, x3j + mov x3j, x3b + rjmp Sbox_one_column +load_columnc: + mov x3b, x3j + mov x3j, x3c + rjmp Sbox_one_column +load_columnd: + mov x3c, x3j + mov x3j, x3d + rjmp Sbox_one_column +load_columne: + mov x3d, x3j + mov x3j, x3e + rjmp Sbox_one_column +load_columnf: + mov x3e, x3j + mov x3j, x3f + rjmp Sbox_one_column + +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) +LFSR_table: + rjmp LFSR7 + rjmp LFSR8 +LFSR7: + LFSR7_MACRO + rjmp LFSR_DONE +LFSR8: + LFSR8_MACRO + rjmp LFSR_DONE +#endif + +;;;;;;;;;;;;;;;;;;;;;;;; Real Start +AddRC_SubColumns_Start: + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + clr ccnt + ld x0j, Y + eor x0j, rc + +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) + ldi ZL, pm_lo8(LFSR_table) + ldi ZH, pm_hi8(LFSR_table) + sbrc AEDH, 2 ; AEDH[2] = 0 for AEAD and AEDH[1] = 1 for HASH + adiw ZL, 1 + ijmp +LFSR_DONE: +#elif defined(CRYPTO_AEAD) + LFSR7_MACRO ; only AEAD +#else + LFSR8_MACRO ; only HASH +#endif + + ldd x1j, Y + ROW_INBYTES + ldd x2j, Y + 2 * ROW_INBYTES + ldd t2j, Y + 2 * ROW_INBYTES + 1 + ldi ZL, pm_lo8(load_columns_table) + ldi ZH, pm_hi8(load_columns_table) + ijmp +Sbox_one_column: + Sbox x0j, x1j, x2j, x3j + + ; f e d c b a 9 8 7 6 5 4 3 2 1 0 + ; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- x- 0 + ; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- x' 0 + ; -- -- -- -- -- -- -- -- -- -- -- -- -- x- -- -- 2 + ; -- -- -- -- -- -- -- -- -- -- -- -- x' -- -- -- 3 + ; c b a 9 8 7 6 5 4 3 2 1 0 f e d + ; Store a byte to Row 0 + st Y, x0j + ; Store a byte combined with ShiftRow1 + lsl t1j + mov t1j, x1j ; back up the last updated byte in t1j, to be used in shiftRow1 (1 bit left) + rol x1j + std Y + ROW_INBYTES, x1j + ; Store a byte combined with ShiftRow2 + inc ccnt + cpi ccnt, ROW_INBYTES - 1 + brsh ROW2_WRAP + ldd tmp0, Y + 2 * ROW_INBYTES + 2 ; load next byte, the last updated byte needed to be shifted to the address of the next bytes + std Y + 2 * ROW_INBYTES + 2, x2j + mov x2j, t2j + mov t2j, tmp0 + jmp NO_ROW2_WRAP +ROW2_WRAP: + std Y + ROW_INBYTES + 2, x2j + mov x2j, t2j + + ; remain ShiftRow3 to be done at 'amend_shiftRow' +NO_ROW2_WRAP: + adiw YL, 1 + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + + adiw ZL, 1 + ijmp + +amend_shiftRow: + ldi YH, hi8(SRAM_STATE + ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + ROW_INBYTES) + + ld x1j, Y + bst t1j, 7 + bld x1j, 0 + st Y, x1j + + ; <<< 1 + mov x3f, x3j + rol x3j + rol x30 + rol x31 + rol x32 + rol x33 + rol x34 + rol x35 + rol x36 + rol x37 + rol x38 + rol x39 + rol x3a + rol x3b + rol x3c + rol x3d + rol x3e + rol x3f + ; <<< 24 + ; f e d c b a 9 8 7 6 5 4 3 2 1 0 => + ; c b a 9 8 7 6 5 4 3 2 1 0 f e d + mov x3j, x30 + mov x30, x3d + mov x3d, x3a + mov x3a, x37 + mov x37, x34 + mov x34, x31 + mov x31, x3e + mov x3e, x3b + mov x3b, x38 + mov x38, x35 + mov x35, x32 + mov x32, x3f + mov x3f, x3c + mov x3c, x39 + mov x39, x36 + mov x36, x33 + mov x33, x3j + + dec rcnt + breq round_loop_end + rjmp round_loop_start + +round_loop_end: + + ldi YH, hi8(SRAM_STATE + 3 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 3 * ROW_INBYTES) + st Y+, x30 + st Y+, x31 + st Y+, x32 + st Y+, x33 + st Y+, x34 + st Y+, x35 + st Y+, x36 + st Y+, x37 + st Y+, x38 + st Y+, x39 + st Y+, x3a + st Y+, x3b + st Y+, x3c + st Y+, x3d + st Y+, x3e + st Y+, x3f + + POP_CONFLICT +ret \ No newline at end of file diff --git a/knot/Implementations/crypto_aead/knot192/avr8_lowrom/permutation.h b/knot/Implementations/crypto_aead/knot192/avr8_lowrom/permutation.h new file mode 100644 index 0000000..a57c5d3 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot192/avr8_lowrom/permutation.h @@ -0,0 +1,109 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by KNOT Team * +; ********************************************** +; + +; +; ============================================ +; R E G I S T E R D E F I N I T I O N S +; ============================================ +; + +#define mclen r16 +#define radlen r17 +#define tcnt r17 +#define tmp0 r20 +#define tmp1 r21 +#define cnt0 r22 +#define rn r23 +#define rate r24 + +; +; ; AEDH = 0b000: for authenticate AD +; ; AEDH = 0b001: for encryption +; ; AEDH = 0b011: for decryption +; ; AEDH = 0b100: for hash +; #define AEDH r25 ; Register used globally within this program +; +; #define x30 r0 ; Register used without overlapping +; #define x31 r1 ; Register used without overlapping +; #define x32 r2 ; Register used without overlapping +; #define x33 r3 ; Register used without overlapping +; #define x34 r4 ; Register used without overlapping +; #define x35 r5 ; Register used without overlapping +; #define x36 r6 ; Register used without overlapping +; #define x37 r7 ; Register used without overlapping +; #define x38 r8 ; Register used without overlapping +; #define x39 r9 ; Register used without overlapping +; #define x3a r10 ; Register used without overlapping +; #define x3b r11 ; Register used without overlapping +; #define x3c r12 ; Register used without overlapping +; #define x3d r13 ; Register used without overlapping +; #define x3e r14 ; Register used without overlapping +; #define x3f r15 ; Register used without overlapping +; +; #define x0j r16 ; Register used overlapped, should be backed up before using +; #define x1j r17 ; Register used overlapped, should be backed up before using +; #define x2j r18 ; Register used overlapped, should be backed up before using +; #define x3j r19 ; Register used overlapped, should be backed up before using +; +; ; t2j used in knot512 to keep one byte in Row2 (because of rotating 16-bit), +; ; will not be interupt with LFSR which uses the overlapped register tmp1 +; #define t2j r21 ; Temporary register, used freely +; #define t1j r22 ; Temporary register, used freely +; #define t3j r23 ; Temporary register, used freely +; +; #define rc r24 ; Register used overlapped, should be backed up before using +; #define rcnt r26 ; Register used overlapped, should be backed up before using +; #define ccnt r27 ; Register used overlapped, should be backed up before using + +#define AEDH r25 +#define x30 r0 +#define x31 r1 +#define x32 r2 +#define x33 r3 +#define x34 r4 +#define x35 r5 +#define x36 r6 +#define x37 r7 +#define x38 r8 +#define x39 r9 +#define x3a r10 +#define x3b r11 +#define x3c r12 +#define x3d r13 +#define x3e r14 +#define x3f r15 + +#define x0j r16 +#define x1j r17 +#define x2j r18 +#define x3j r19 + +; t2j used in knot512 to keep one byte in Row2 (because of rotating 16-bit), +; will not be interupt with LFSR which uses the overlapped register tmp1 +#define t2j r21 +#define t1j r22 +#define t3j r23 + +#define rc r24 +#define rcnt r26 +#define ccnt r27 + +#if (STATE_INBITS==256) +#include "knot256.h" +#elif (STATE_INBITS==384) +#include "knot384.h" +#elif (STATE_INBITS==512) +#include "knot512.h" +#else +#error "Not specified key size and state size" +#endif + + diff --git a/knot/Implementations/crypto_aead/knot192/avr8_speed/api.h b/knot/Implementations/crypto_aead/knot192/avr8_speed/api.h new file mode 100644 index 0000000..0146d82 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot192/avr8_speed/api.h @@ -0,0 +1,5 @@ +#define CRYPTO_KEYBYTES 24 +#define CRYPTO_NSECBYTES 0 +#define CRYPTO_NPUBBYTES 24 +#define CRYPTO_ABYTES 24 +#define CRYPTO_NOOVERLAP 1 diff --git a/knot/Implementations/crypto_aead/knot192/avr8_speed/assist.h b/knot/Implementations/crypto_aead/knot192/avr8_speed/assist.h new file mode 100644 index 0000000..f95a717 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot192/avr8_speed/assist.h @@ -0,0 +1,86 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.1 2020 by KNOT Team * +; ********************************************** +; +.macro PUSH_CONFLICT + push r16 + push r17 + push r18 + push r19 + + push r23 + push r24 + push r25 + push r26 + push r27 + push r28 + push r29 + push r30 + push r31 +.endm + +.macro POP_CONFLICT + pop r31 + pop r30 + pop r29 + pop r28 + pop r27 + pop r26 + pop r25 + pop r24 + pop r23 + + pop r19 + pop r18 + pop r17 + pop r16 +.endm + +.macro PUSH_ALL + push r2 + push r3 + push r4 + push r5 + push r6 + push r7 + push r8 + push r9 + push r10 + push r11 + push r12 + push r13 + push r14 + push r15 + push r16 + push r17 + push r28 + push r29 +.endm + +.macro POP_ALL + pop r29 + pop r28 + pop r17 + pop r16 + pop r15 + pop r14 + pop r13 + pop r12 + pop r11 + pop r10 + pop r9 + pop r8 + pop r7 + pop r6 + pop r5 + pop r4 + pop r3 + pop r2 + clr r1 +.endm \ No newline at end of file diff --git a/knot/Implementations/crypto_aead/knot192/avr8_speed/config.h b/knot/Implementations/crypto_aead/knot192/avr8_speed/config.h new file mode 100644 index 0000000..173a40a --- /dev/null +++ b/knot/Implementations/crypto_aead/knot192/avr8_speed/config.h @@ -0,0 +1,131 @@ +#ifndef __CONFIG_H__ +#define __CONFIG_H__ + +#define CRYPTO_AEAD +//#define CRYPTO_HASH + +#define MAX_MESSAGE_LENGTH 128 + +#define STATE_INBITS 384 +/* For CRYPTO_AEAD */ +#define CRYPTO_KEYBITS 192 +/* For CRYPTO_HASH */ +#define CRYPTO_BITS 384 + +#define STATE_INBYTES ((STATE_INBITS + 7) / 8) +#define ROW_INBITS ((STATE_INBITS + 3) / 4) +#define ROW_INBYTES ((ROW_INBITS + 7) / 8) + +/* For CRYPTO_AEAD */ +#define CRYPTO_KEYBYTES ((CRYPTO_KEYBITS + 7) / 8) +#define CRYPTO_NSECBYTES 0 +#define CRYPTO_NPUBBYTES CRYPTO_KEYBYTES +#define CRYPTO_ABYTES CRYPTO_KEYBYTES +#define CRYPTO_NOOVERLAP 1 + +#define MAX_ASSOCIATED_DATA_LENGTH 32 +#define MAX_CIPHER_LENGTH (MAX_MESSAGE_LENGTH + CRYPTO_ABYTES) + +#define TAG_MATCH 0 +#define TAG_UNMATCH -1 +#define OTHER_FAILURES -2 + +/* For CRYPTO_HASH */ +#define CRYPTO_BYTES ((CRYPTO_BITS + 7) / 8) + + + +#define DOMAIN_BITS 0x80 +#define PAD_BITS 0x01 +#define S384_R192_BITS 0x80 + +#if (STATE_INBITS==256) +#define C1 1 +#define C2 8 +#define C3 25 +#elif (STATE_INBITS==384) +#define C1 1 +#define C2 8 +#define C3 55 +#elif (STATE_INBITS==512) +#define C1 1 +#define C2 16 +#define C3 25 +#else +#error "Not specified state size" +#endif + +#ifdef CRYPTO_AEAD +/* For CRYPTO_AEAD */ +#define KEY_INBITS (CRYPTO_KEYBYTES * 8) +#define KEY_INBYTES (CRYPTO_KEYBYTES) + +#define NONCE_INBITS (CRYPTO_NPUBBYTES * 8) +#define NONCE_INBYTES (CRYPTO_NPUBBYTES) + +#define TAG_INBITS (CRYPTO_ABYTES * 8) +#define TAG_INBYTES (CRYPTO_ABYTES) + +#if (KEY_INBITS==128) && (STATE_INBITS==256) +#define RATE_INBITS 64 +#define NR_0 52 +#define NR_i 28 +#define NR_f 32 +#elif (KEY_INBITS==128) && (STATE_INBITS==384) +#define RATE_INBITS 192 +#define NR_0 76 +#define NR_i 28 +#define NR_f 32 +#elif (KEY_INBITS==192) && (STATE_INBITS==384) +#define RATE_INBITS 96 +#define NR_0 76 +#define NR_i 40 +#define NR_f 44 +#elif (KEY_INBITS==256) && (STATE_INBITS==512) +#define RATE_INBITS 128 +#define NR_0 100 +#define NR_i 52 +#define NR_f 56 +#else +#error "Not specified key size and state size" +#endif + +#define RATE_INBYTES ((RATE_INBITS + 7) / 8) +#define SQUEEZE_RATE_INBYTES TAG_INBYTES + +#endif + +#ifdef CRYPTO_HASH +/* For CRYPTO_HASH */ +#define HASH_DIGEST_INBITS (CRYPTO_BYTES * 8) + +#if (HASH_DIGEST_INBITS==256) && (STATE_INBITS==256) +#define HASH_RATE_INBITS 32 +#define HASH_SQUEEZE_RATE_INBITS 128 +#define NR_h 68 +#elif (HASH_DIGEST_INBITS==256) && (STATE_INBITS==384) +#define HASH_RATE_INBITS 128 +#define HASH_SQUEEZE_RATE_INBITS 128 +#define NR_h 80 +#elif (HASH_DIGEST_INBITS==384) && (STATE_INBITS==384) +#define HASH_RATE_INBITS 48 +#define HASH_SQUEEZE_RATE_INBITS 192 +#define NR_h 104 +#elif (HASH_DIGEST_INBITS==512) && (STATE_INBITS==512) +#define HASH_RATE_INBITS 64 +#define HASH_SQUEEZE_RATE_INBITS 256 +#define NR_h 140 +#else +#error "Not specified hash digest size and state size" +#endif + +#define HASH_RATE_INBYTES ((HASH_RATE_INBITS + 7) / 8) +#define HASH_SQUEEZE_RATE_INBYTES ((HASH_SQUEEZE_RATE_INBITS + 7) / 8) + +#endif + +#define TAG_MATCH 0 +#define TAG_UNMATCH -1 +#define OTHER_FAILURES -2 + +#endif \ No newline at end of file diff --git a/knot/Implementations/crypto_aead/knot192/avr8_speed/crypto_aead.h b/knot/Implementations/crypto_aead/knot192/avr8_speed/crypto_aead.h new file mode 100644 index 0000000..cd820d3 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot192/avr8_speed/crypto_aead.h @@ -0,0 +1,26 @@ +#ifdef __cplusplus +extern "C" { +#endif + +int crypto_aead_encrypt( + unsigned char *c,unsigned long long *clen, + const unsigned char *m,unsigned long long mlen, + const unsigned char *ad,unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k + ); + + +int crypto_aead_decrypt( + unsigned char *m,unsigned long long *outputmlen, + unsigned char *nsec, + const unsigned char *c,unsigned long long clen, + const unsigned char *ad,unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k + ); + +#ifdef __cplusplus +} +#endif diff --git a/knot/Implementations/crypto_aead/knot192/avr8_speed/encrypt.c b/knot/Implementations/crypto_aead/knot192/avr8_speed/encrypt.c new file mode 100644 index 0000000..baf0a3b --- /dev/null +++ b/knot/Implementations/crypto_aead/knot192/avr8_speed/encrypt.c @@ -0,0 +1,106 @@ +#include +#include +#include +#include +#include "config.h" + +extern void crypto_aead_encrypt_asm( + unsigned char *c, + const unsigned char *m, + unsigned char mlen, + const unsigned char *ad, + unsigned char adlen, + const unsigned char *npub, + const unsigned char *k + ); + +extern int crypto_aead_decrypt_asm( + unsigned char *m, + const unsigned char *c, + unsigned char clen, + const unsigned char *ad, + unsigned char adlen, + const unsigned char *npub, + const unsigned char *k + ); + +extern void crypto_hash_asm( + unsigned char *out, + const unsigned char *in, + unsigned char inlen + ); + + +int crypto_aead_encrypt( + unsigned char *c, unsigned long long *clen, + const unsigned char *m, unsigned long long mlen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k + ) +{ + /* + ... + ... the code for the cipher implementation goes here, + ... generating a ciphertext c[0],c[1],...,c[*clen-1] + ... from a plaintext m[0],m[1],...,m[mlen-1] + ... and associated data ad[0],ad[1],...,ad[adlen-1] + ... and nonce npub[0],npub[1],.. + ... and secret key k[0],k[1],... + ... the implementation shall not use nsec + ... + ... return 0; + */ + + (void)nsec; + + crypto_aead_encrypt_asm(c, m, mlen, ad, adlen, npub, k); + + *clen = mlen + TAG_INBYTES; + return 0; +} + + + +int crypto_aead_decrypt( + unsigned char *m, unsigned long long *mlen, + unsigned char *nsec, + const unsigned char *c, unsigned long long clen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k + ) +{ + /* + ... + ... the code for the AEAD implementation goes here, + ... generating a plaintext m[0],m[1],...,m[*mlen-1] + ... and secret message number nsec[0],nsec[1],... + ... from a ciphertext c[0],c[1],...,c[clen-1] + ... and associated data ad[0],ad[1],...,ad[adlen-1] + ... and nonce number npub[0],npub[1],... + ... and secret key k[0],k[1],... + ... + ... return 0; + */ + unsigned long long mlen_; + unsigned char tag_is_match; + + (void)nsec; + if (clen < CRYPTO_ABYTES) { + return -1; + } + mlen_ = clen - CRYPTO_ABYTES; + + tag_is_match = crypto_aead_decrypt_asm(m, c, mlen_, ad, adlen, npub, k); + + if (tag_is_match != 0) + { + memset(m, 0, (size_t)mlen_); + return -1; + } + + *mlen = mlen_; + return 0; +} \ No newline at end of file diff --git a/knot/Implementations/crypto_aead/knot192/avr8_speed/encrypt_core.S b/knot/Implementations/crypto_aead/knot192/avr8_speed/encrypt_core.S new file mode 100644 index 0000000..bd74f93 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot192/avr8_speed/encrypt_core.S @@ -0,0 +1,555 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.1 2020 by KNOT Team * +; ********************************************** +; + +; +; ============================================ +; S R A M D E F I N I T I O N S +; ============================================ +; +#include +#include "config.h" + +.section .noinit + SRAM_STATE: .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#if (STATE_INBYTES > 32) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif +#if (STATE_INBYTES > 48) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif + SRAM_MESSAGE_OUT_ADDR: .BYTE 0, 0 + SRAM_MESSAGE_IN_ADDR: .BYTE 0, 0 + SRAM_MESSAGE_IN_LEN: .BYTE 0, 0 +#ifdef CRYPTO_AEAD +; For CRYPTO_AEAD + SRAM_ASSOCIATED_DATA_ADDR: .BYTE 0, 0 + SRAM_ADLEN: .BYTE 0, 0 + SRAM_NONCE_ADDR: .BYTE 0, 0 + SRAM_KEY_ADDR: .BYTE 0, 0 + + SRAM_ADDITIONAL: + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#if (CRYPTO_ABYTES > 16) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif +#if (CRYPTO_ABYTES > 24) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif + +#endif + +.section .text + +#include "permutation.h" + +; require YH:YL be the address of the current associated data/cipher/message block +; for enc and dec, store ciphertext or plaintext +; require ZH:ZL be the address of the current cipher/message block +.macro XOR_to_State_ENCDEC + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + mov cnt0, rate +XOR_to_State_loop_ENCDEC: + ld tmp0, Y+ ; plaintext/ciphertext + ld tmp1, X ; state + eor tmp1, tmp0 ; ciphertext/plaintext + st Z+, tmp1 ; store ciphertext/plaintext + sbrc AEDH, 1 ; test auth/enc or dec, if AEDH[1] == 0, skip repalce state byte + mov tmp1, tmp0 ; if dec, replace state + st X+, tmp1 ; store state byte + dec cnt0 + brne XOR_to_State_loop_ENCDEC +; YH:YL are now the address of the next associated data block +.endm + +; require YH:YL be the address of the current associated data/cipher/message block +; for enc and dec, store ciphertext or plaintext +; require ZH:ZL be the address of the current cipher/message block +.macro XOR_to_State_AUTH + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + mov cnt0, rate +XOR_to_State_loop_AUTH: + ld tmp0, Y+ ; plaintext/ciphertext + ld tmp1, X ; state + eor tmp1, tmp0 ; ciphertext/plaintext + st X+, tmp1 ; store state byte + dec cnt0 + brne XOR_to_State_loop_AUTH +; YH:YL are now the address of the next associated data block +.endm + + + +; require YH:YL pointed to the input data +; require ZH:ZL pointed to the output data +; require cnt0 containes the nubmer of bytes in source data +; require number of bytes in source data less than rate, i.e., 0 <= cnt0 < rate +; +; the 0th bit in AEDH is used to distinguish (auth AD) or (enc/dec M/C): +; AEDH[0] = 0 for (auth AD), AEDH[0] = 1 for (enc/dec M/C) +; the 1th bit in AEDH is used to distinguish (auth AD/enc M) or (dec C): +; AEDH[1] = 0 for (auth AD/enc M), AEDH[1] = 1 for (dec C) +; AEDH = 0b000 for (auth AD) +; AEDH = 0b001 for (enc M) +; AEDH = 0b011 for (dec C) +Pad_XOR_to_State: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + tst cnt0 + breq XOR_padded_data +XOR_source_data_loop: + ld tmp0, Y+ ; plaintext/ciphertext + ld tmp1, X ; state + eor tmp1, tmp0 ; ciphertext/plaintext + sbrc AEDH, 0 ; test auth or enc/dec, if AEDH[0] == 0, skip store result + st Z+, tmp1 ; store ciphertext/plaintext + sbrc AEDH, 1 ; test auth/enc or dec, if AEDH[1] == 0, skip repalce state byte + mov tmp1, tmp0 ; if dec, replace state + st X+, tmp1 ; store state byte + dec cnt0 + brne XOR_source_data_loop +XOR_padded_data: + ldi tmp0, PAD_BITS + ld tmp1, X + eor tmp1, tmp0 + st X, tmp1 +ret + +AddDomain: + ldi XH, hi8(SRAM_STATE + STATE_INBYTES - 1) + ldi XL, lo8(SRAM_STATE + STATE_INBYTES - 1) + ldi tmp0, DOMAIN_BITS + ld tmp1, X + eor tmp0, tmp1 + st X, tmp0 +ret + +; require ZH:ZL be the address of the destination +EXTRACT_from_State: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + mov tmp1, rate +EXTRACT_from_State_loop: + ld tmp0, X+ + st Z+, tmp0 + dec tmp1 + brne EXTRACT_from_State_loop +ret + +AUTH: + tst radlen + breq AUTH_end + + cp radlen, rate + brlo auth_ad_padded_block + +auth_ad_loop: + XOR_to_State_AUTH + rcall Permutation + sub radlen, rate + cp radlen, rate + brlo auth_ad_padded_block + rjmp auth_ad_loop + +auth_ad_padded_block: + mov cnt0, radlen + rcall Pad_XOR_to_State + rcall Permutation + +AUTH_end: +ret + +#ifdef CRYPTO_AEAD +Initialization: + ldi rn, NR_0 + ldi XL, lo8(SRAM_STATE) + ldi XH, hi8(SRAM_STATE) + + lds YH, SRAM_NONCE_ADDR + lds YL, SRAM_NONCE_ADDR + 1 + ldi cnt0, CRYPTO_NPUBBYTES +load_nonce_loop: + ld tmp0, Y+ + st X+, tmp0 + dec cnt0 + brne load_nonce_loop + + lds YH, SRAM_KEY_ADDR + lds YL, SRAM_KEY_ADDR + 1 + ldi cnt0, CRYPTO_KEYBYTES +load_key_loop: + ld tmp0, Y+ + st X+, tmp0 + dec cnt0 + brne load_key_loop + +#if (STATE_INBITS==384) && (RATE_INBITS==192) + ldi cnt0, (STATE_INBYTES - CRYPTO_NPUBBYTES - CRYPTO_KEYBYTES - 1) + clr tmp0 +empty_state_loop: + st X+, tmp0 + dec cnt0 + brne empty_state_loop + ldi tmp0, S384_R192_BITS + st X+, tmp0 +#endif + + rcall Permutation +ret + +ENC: + tst mclen + breq ENC_end + + cp mclen, rate + brlo enc_padded_block + +enc_loop: + XOR_to_State_ENCDEC + ldi rn, NR_i + rcall Permutation + sub mclen, rate + cp mclen, rate + brlo enc_padded_block + rjmp enc_loop + +enc_padded_block: + mov cnt0, mclen + rcall Pad_XOR_to_State +ENC_end: +ret + +Finalization: + ldi rate, SQUEEZE_RATE_INBYTES + ldi rn, NR_f + rcall Permutation + rcall EXTRACT_from_State +ret + +; void crypto_aead_encrypt_asm( +; unsigned char *c, +; const unsigned char *m, +; unsigned long long mlen, +; const unsigned char *ad, +; unsigned long long adlen, +; const unsigned char *npub, +; const unsigned char *k +; ) +; +; unsigned char *c, is passed in r24:r25 +; const unsigned char *m, is passed in r22:r23 +; unsigned long long mlen, is passed in r20:r21, only LSB (r20) is used +; const unsigned char *ad, is passed in r18:r19 +; unsigned long long adlen, is passed in r16:r17, only LSB (r16) is used +; const unsigned char *npub, is passed in r14:r15 +; const unsigned char *k is passed in r12:r13 +.global crypto_aead_encrypt_asm +crypto_aead_encrypt_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store cipher address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store message address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store message length in SRAM_MESSAGE_IN_LEN + st X+, r20 + st X+, r19 ;store associated data address in SRAM_ASSOCIATED_DATA_ADDR + st X+, r18 + st X+, r17 ;store associated data length in SRAM_ADLEN + st X+, r16 + st X+, r15 ;store nonce address in SRAM_NONCE_ADDR + st X+, r14 + st X+, r13 ;store key address in SRAM_KEY_ADDR + st X+, r12 + mov radlen, r16 + mov mclen, r20 + + rcall Initialization + + ldi rn, NR_i + ldi rate, RATE_INBYTES + ldi AEDH, 0b000 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_ASSOCIATED_DATA_ADDR + lds YL, SRAM_ASSOCIATED_DATA_ADDR + 1 + rcall AUTH + rcall AddDomain + ldi AEDH, 0b001 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_MESSAGE_IN_ADDR + lds YL, SRAM_MESSAGE_IN_ADDR + 1 + lds ZH, SRAM_MESSAGE_OUT_ADDR + lds ZL, SRAM_MESSAGE_OUT_ADDR + 1 + rcall ENC + rcall Finalization + POP_ALL +ret + +; int crypto_aead_decrypt_asm( +; unsigned char *m, +; const unsigned char *c, +; unsigned long long clen, +; const unsigned char *ad, +; unsigned long long adlen, +; const unsigned char *npub, +; const unsigned char *k +; ) +; +; unsigned char *m, is passed in r24:r25 +; const unsigned char *c, is passed in r22:r23 +; unsigned long long clen, is passed in r20:r21, only LSB (r20) is used +; const unsigned char *ad, is passed in r18:r19 +; unsigned long long adlen, is passed in r16:r17, only LSB (r16) is used +; const unsigned char *npub, is passed in r14:r15 +; const unsigned char *k is passed in r12:r13 +.global crypto_aead_decrypt_asm +crypto_aead_decrypt_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store message address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store cipher address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store cipher length in SRAM_MESSAGE_IN_LEN + st X+, r20 + st X+, r19 ;store associated data address in SRAM_ASSOCIATED_DATA_ADDR + st X+, r18 + st X+, r17 ;store associated data length in SRAM_ADLEN + st X+, r16 + st X+, r15 ;store nonce address in SRAM_NONCE_ADDR + st X+, r14 + st X+, r13 ;store key address in SRAM_KEY_ADDR + st X+, r12 + mov radlen, r16 + mov mclen, r20 + + rcall Initialization + + ldi rn, NR_i + ldi rate, RATE_INBYTES + ldi AEDH, 0b000 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_ASSOCIATED_DATA_ADDR + lds YL, SRAM_ASSOCIATED_DATA_ADDR + 1 + rcall AUTH + rcall AddDomain + ldi AEDH, 0b011 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_MESSAGE_IN_ADDR + lds YL, SRAM_MESSAGE_IN_ADDR + 1 + lds ZH, SRAM_MESSAGE_OUT_ADDR + lds ZL, SRAM_MESSAGE_OUT_ADDR + 1 + rcall ENC + + ldi ZH, hi8(SRAM_ADDITIONAL) + ldi ZL, lo8(SRAM_ADDITIONAL) + rcall Finalization + + sbiw ZL, CRYPTO_ABYTES + ldi cnt0, CRYPTO_ABYTES +compare_tag: + ld tmp0, Z+ + ld tmp1, Y+ + cp tmp0, tmp1 + brne return_tag_not_match + dec cnt0 + brne compare_tag + rjmp return_tag_match + +return_tag_not_match: + ldi r25, 0xFF + ldi r24, 0xFF + rjmp crypto_aead_decrypt_end + +return_tag_match: + clr r25 + clr r24 +crypto_aead_decrypt_end: + POP_ALL +ret + +; #ifdef CRYPTO_AEAD +#endif + + +#ifdef CRYPTO_HASH + +; void crypto_hash_asm( +; unsigned char *out, +; const unsigned char *in, +; unsigned long long inlen +; ) +; +; unsigned char *out, is passed in r24:r25 +; const unsigned char *in, is passed in r22:r23 +; unsigned long long inlen, is passed in r20:r21, only LSB (r20) is used +.global crypto_hash_asm +crypto_hash_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store message address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store cipher address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store cipher length in SRAM_MESSAGE_IN_LEN + st X+, r20 + mov mclen, r20 + + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) +#if (STATE_INBITS==384) && (HASH_RATE_INBITS==128) + ldi cnt0, STATE_INBYTES - 1 +#else + ldi cnt0, STATE_INBYTES +#endif + clr tmp0 +zero_state: + st X+, tmp0 + dec cnt0 + brne zero_state + +#if (STATE_INBITS==384) && (HASH_RATE_INBITS==128) + ldi tmp0, S384_R192_BITS + st X+, tmp0 +#endif + + ldi rn, NR_h + ldi AEDH, 0b100 + +HASH_ABSORBING: + mov radlen, mclen + tst radlen + breq EMPTY_M + ldi rate, HASH_RATE_INBYTES + lds YH, SRAM_MESSAGE_IN_ADDR + lds YL, SRAM_MESSAGE_IN_ADDR + 1 + rcall AUTH + rjmp HASH_SQUEEZING + +EMPTY_M: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + ldi tmp0, PAD_BITS + ld tmp1, X + eor tmp1, tmp0 + st X, tmp1 + rcall Permutation + +HASH_SQUEEZING: + ldi rate, HASH_SQUEEZE_RATE_INBYTES + lds ZH, SRAM_MESSAGE_OUT_ADDR + lds ZL, SRAM_MESSAGE_OUT_ADDR + 1 + ldi tcnt, CRYPTO_BYTES +SQUEEZING_loop: + rcall EXTRACT_from_State + subi tcnt, HASH_SQUEEZE_RATE_INBYTES + breq HASH_SQUEEZING_end + rcall Permutation + rjmp SQUEEZING_loop +HASH_SQUEEZING_end: + POP_ALL +ret + +#endif + + +; Byte Order In AVR 8: +; KNOT-AEAD(128, 256, 64): +; N[ 0] AEAD_State[ 0] | Message[ 0] Perm_row_0[0] 0 Tag[ 0] +; N[ 1] AEAD_State[ 1] | Message[ 1] Perm_row_0[1] 0 Tag[ 1] +; N[ 2] AEAD_State[ 2] | Message[ 2] Perm_row_0[2] 0 Tag[ 2] +; N[ 3] AEAD_State[ 3] | Message[ 3] Perm_row_0[3] 0 Tag[ 3] +; N[ 4] AEAD_State[ 4] | Message[ 4] 0x01 Perm_row_0[4] 0 Tag[ 4] +; N[ 5] AEAD_State[ 5] | Message[ 5] 0x00 Perm_row_0[5] 0 Tag[ 5] +; N[ 6] AEAD_State[ 6] | Message[ 6] 0x00 Perm_row_0[6] 0 Tag[ 6] +; N[ 7] AEAD_State[ 7] | Message[ 7] 0x00 Perm_row_0[7] <<< 0 Tag[ 7] +; N[ 8] AEAD_State[ 8] | Perm_row_1[0] 1 +; N[ 9] AEAD_State[ 9] | Perm_row_1[1] 1 +; N[10] AEAD_State[10] | Perm_row_1[2] 1 +; N[11] AEAD_State[11] | Perm_row_1[3] 1 +; N[12] AEAD_State[12] | Perm_row_1[4] 1 +; N[13] AEAD_State[13] | Perm_row_1[5] 1 +; N[14] AEAD_State[14] | Perm_row_1[6] 1 +; N[15] AEAD_State[15] | Perm_row_1[7] <<< 1 +; K[ 0] AEAD_State[16] | Perm_row_2[0] 8 +; K[ 1] AEAD_State[17] | Perm_row_2[1] 8 +; K[ 2] AEAD_State[18] | Perm_row_2[2] 8 +; K[ 3] AEAD_State[19] | Perm_row_2[3] 8 +; K[ 4] AEAD_State[20] | Perm_row_2[4] 8 +; K[ 5] AEAD_State[21] | Perm_row_2[5] 8 +; K[ 6] AEAD_State[22] | Perm_row_2[6] 8 +; K[ 7] AEAD_State[23] | Perm_row_2[7] <<< 8 +; K[ 8] AEAD_State[24] | Perm_row_3[0] 25 +; K[ 9] AEAD_State[25] | Perm_row_3[1] 25 +; K[10] AEAD_State[26] | Perm_row_3[2] 25 +; K[11] AEAD_State[27] | Perm_row_3[3] 25 +; K[12] AEAD_State[28] | Perm_row_3[4] 25 +; K[13] AEAD_State[29] | Perm_row_3[5] 25 +; K[14] AEAD_State[30] | Perm_row_3[6] 25 +; K[15] AEAD_State[31] | ^0x80 Perm_row_3[7] <<< 25 +; +; +; KNOT-AEAD(128, 384, 192): +; Initalization +; N[ 0] AEAD_State[ 0] | Message[ 0] Perm_row_0[ 0] 0 Tag[ 0] +; N[ 1] AEAD_State[ 1] | Message[ 1] Perm_row_0[ 1] 0 Tag[ 1] +; N[ 2] AEAD_State[ 2] | Message[ 2] Perm_row_0[ 2] 0 Tag[ 2] +; N[ 3] AEAD_State[ 3] | Message[ 3] Perm_row_0[ 3] 0 Tag[ 3] +; N[ 4] AEAD_State[ 4] | Message[ 4] 0x01 Perm_row_0[ 4] 0 Tag[ 4] +; N[ 5] AEAD_State[ 5] | Message[ 5] 0x00 Perm_row_0[ 5] 0 Tag[ 5] +; N[ 6] AEAD_State[ 6] | Message[ 6] 0x00 Perm_row_0[ 6] 0 Tag[ 6] +; N[ 7] AEAD_State[ 7] | Message[ 7] 0x00 Perm_row_0[ 7] 0 Tag[ 7] +; N[ 8] AEAD_State[ 8] | Message[ 8] 0x00 Perm_row_0[ 8] 0 Tag[ 8] +; N[ 9] AEAD_State[ 9] | Message[ 9] 0x00 Perm_row_0[ 9] 0 Tag[ 9] +; N[10] AEAD_State[10] | Message[10] 0x00 Perm_row_0[10] 0 Tag[10] +; N[11] AEAD_State[11] | Message[11] 0x00 Perm_row_0[11] <<< 0 Tag[11] +; N[12] AEAD_State[12] | Message[12] 0x00 Perm_row_1[ 0] 1 Tag[12] +; N[13] AEAD_State[13] | Message[13] 0x00 Perm_row_1[ 1] 1 Tag[13] +; N[14] AEAD_State[14] | Message[14] 0x00 Perm_row_1[ 2] 1 Tag[14] +; N[15] AEAD_State[15] | Message[15] 0x00 Perm_row_1[ 3] 1 Tag[15] +; K[ 0] AEAD_State[16] | Message[16] 0x00 Perm_row_1[ 4] 1 +; K[ 1] AEAD_State[17] | Message[17] 0x00 Perm_row_1[ 5] 1 +; K[ 2] AEAD_State[18] | Message[18] 0x00 Perm_row_1[ 6] 1 +; K[ 3] AEAD_State[19] | Message[19] 0x00 Perm_row_1[ 7] 1 +; K[ 4] AEAD_State[20] | Message[20] 0x00 Perm_row_1[ 8] 1 +; K[ 5] AEAD_State[21] | Message[21] 0x00 Perm_row_1[ 9] 1 +; K[ 6] AEAD_State[22] | Message[22] 0x00 Perm_row_1[10] 1 +; K[ 7] AEAD_State[23] | Message[23] 0x00 Perm_row_1[11] <<< 1 +; K[ 8] AEAD_State[24] | Perm_row_2[ 0] 8 +; K[ 9] AEAD_State[25] | Perm_row_2[ 1] 8 +; K[10] AEAD_State[26] | Perm_row_2[ 2] 8 +; K[11] AEAD_State[27] | Perm_row_2[ 3] 8 +; K[12] AEAD_State[28] | Perm_row_2[ 4] 8 +; K[13] AEAD_State[29] | Perm_row_2[ 5] 8 +; K[14] AEAD_State[30] | Perm_row_2[ 6] 8 +; K[15] AEAD_State[31] | Perm_row_2[ 7] 8 +; 0x00 AEAD_State[32] | Perm_row_2[ 8] 8 +; 0x00 AEAD_State[33] | Perm_row_2[ 9] 8 +; 0x00 AEAD_State[34] | Perm_row_2[10] 8 +; 0x00 AEAD_State[35] | Perm_row_2[11] <<< 8 +; 0x00 AEAD_State[36] | Perm_row_3[ 0] 55 +; 0x00 AEAD_State[37] | Perm_row_3[ 1] 55 +; 0x00 AEAD_State[38] | Perm_row_3[ 2] 55 +; 0x00 AEAD_State[39] | Perm_row_3[ 3] 55 +; 0x00 AEAD_State[40] | Perm_row_3[ 4] 55 +; 0x00 AEAD_State[41] | Perm_row_3[ 5] 55 +; 0x00 AEAD_State[42] | Perm_row_3[ 6] 55 +; 0x00 AEAD_State[43] | Perm_row_3[ 7] 55 +; 0x00 AEAD_State[44] | Perm_row_3[ 8] 55 +; 0x00 AEAD_State[45] | Perm_row_3[ 9] 55 +; 0x00 AEAD_State[46] | Perm_row_3[10] 55 +; 0x00 ^0x80 AEAD_State[47] | ^0x80 Perm_row_3[11] <<< 55 diff --git a/knot/Implementations/crypto_aead/knot192/avr8_speed/knot256.h b/knot/Implementations/crypto_aead/knot192/avr8_speed/knot256.h new file mode 100644 index 0000000..f99f68b --- /dev/null +++ b/knot/Implementations/crypto_aead/knot192/avr8_speed/knot256.h @@ -0,0 +1,306 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.1 2020 by KNOT Team * +; ********************************************** +; +#define x10 r0 +#define x11 r1 +#define x12 r2 +#define x13 r3 +#define x14 r4 +#define x15 r5 +#define x16 r6 +#define x17 r7 + +; an intentionally arrangement of registers to facilitate movw +#define x20 r8 +#define x21 r10 +#define x22 r12 +#define x23 r14 +#define x24 r9 +#define x25 r11 +#define x26 r13 +#define x27 r15 + +; an intentionally arrangement of registers to facilitate movw +#define x30 r16 +#define x35 r18 +#define x32 r20 +#define x37 r22 +#define x34 r17 +#define x31 r19 +#define x36 r21 +#define x33 r23 + +#define t0j r24 +#define t1j r25 +#define x0j r27 + +#include "assist.h" + +.macro Sbox i0, i1, i2, i3 + mov t0j, \i1 + com \i0 + and \i1, \i0 + eor \i1, \i2 + or \i2, t0j + eor \i0, \i3 + eor \i2, \i0 + eor t0j, \i3 + and \i0, \i1 + eor \i3, \i1 + eor \i0, t0j + and t0j, \i2 + eor \i1, t0j +.endm + +Permutation: + PUSH_CONFLICT + mov rcnt, rn + + ldi YH, hi8(SRAM_STATE + ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + ROW_INBYTES) + ld x10, Y+ + ld x11, Y+ + ld x12, Y+ + ld x13, Y+ + ld x14, Y+ + ld x15, Y+ + ld x16, Y+ + ld x17, Y+ + ld x20, Y+ + ld x21, Y+ + ld x22, Y+ + ld x23, Y+ + ld x24, Y+ + ld x25, Y+ + ld x26, Y+ + ld x27, Y+ + ld x30, Y+ + ld x31, Y+ + ld x32, Y+ + ld x33, Y+ + ld x34, Y+ + ld x35, Y+ + ld x36, Y+ + ld x37, Y+ + +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) + sbrc AEDH, 2 ; AEDH[2] = 0 for AEAD and AEDH[2] = 1 for HASH + rjmp For_Hash +For_AEAD: + ldi ZL, lo8(RC_LFSR6) + ldi ZH, hi8(RC_LFSR6) + rjmp round_loop_start +For_Hash: + ldi ZL, lo8(RC_LFSR7) + ldi ZH, hi8(RC_LFSR7) +#elif defined(CRYPTO_AEAD) + ldi ZL, lo8(RC_LFSR6) + ldi ZH, hi8(RC_LFSR6) +#else + ldi ZL, lo8(RC_LFSR7) + ldi ZH, hi8(RC_LFSR7) +#endif + +round_loop_start: + ; AddRC + lpm t0j, Z+ + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + ld x0j, Y + eor x0j, t0j + + ; SubColumns + Sbox x0j, x10, x20, x30 + st Y+, x0j + ld x0j, Y + Sbox x0j, x11, x21, x31 + st Y+, x0j + ld x0j, Y + Sbox x0j, x12, x22, x32 + st Y+, x0j + ld x0j, Y + Sbox x0j, x13, x23, x33 + st Y+, x0j + ld x0j, Y + Sbox x0j, x14, x24, x34 + st Y+, x0j + ld x0j, Y + Sbox x0j, x15, x25, x35 + st Y+, x0j + ld x0j, Y + Sbox x0j, x16, x26, x36 + st Y+, x0j + ld x0j, Y + Sbox x0j, x17, x27, x37 + st Y, x0j + + ; ShiftRows + ; <<< 1 + mov t0j, x17 + rol t0j + rol x10 + rol x11 + rol x12 + rol x13 + rol x14 + rol x15 + rol x16 + rol x17 + + ; <<< 8 + ; 7 6 5 4 3 2 1 0 => 6 5 4 3 2 1 0 7 + ;mov t0j, x27 + ;mov x27, x26 + ;mov x26, x25 + ;mov x25, x24 + ;mov x24, x23 + ;mov x23, x22 + ;mov x22, x21 + ;mov x21, x20 + ;mov x20, t0j + ; an intentionally arrangement of registers to facilitate movw + movw t0j, x23 ; t1j:t0j <= x27:x23 + movw x23, x22 ; x27:x23 <= x26:x22 + movw x22, x21 ; x26:x22 <= x25:x21 + movw x21, x20 ; x25:x21 <= x24:x20 + mov x20, t1j ; x20 <= t1j + mov x24, t0j ; x24 <= t0j + + ; <<< 1 + mov t0j, x37 + rol t0j + rol x30 + rol x31 + rol x32 + rol x33 + rol x34 + rol x35 + rol x36 + rol x37 + ; <<< 24 + ; 7 6 5 4 3 2 1 0 => 4 3 2 1 0 7 6 5 + ;mov t0j, x30 + ;mov x30, x35 + ;mov x35, x32 + ;mov x32, x37 + ;mov x37, x34 + ;mov x34, x31 + ;mov x31, x36 + ;mov x36, x33 + ;mov x33, t0j + ; an intentionally arrangement of registers to facilitate movw + ;x30 r16 + ;x35 r18 + ;x32 r20 + ;x37 r22 + ;x34 r17 + ;x31 r19 + ;x36 r21 + ;x33 r23 + movw t0j, x30 ; t1j:t0j <= x34:x30 + movw x30, x35 ; x34:x30 <= x31:x35 + movw x35, x32 ; x31:x35 <= x36:x32 + movw x32, x37 ; x36:x32 <= x33:x37 + mov x37, t1j ; x37 <= x34 + mov x33, t0j ; x33 <= x30 + + dec rcnt + breq round_loop_end + jmp round_loop_start + +round_loop_end: + ldi YH, hi8(SRAM_STATE + ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + ROW_INBYTES) + st Y+, x10 + st Y+, x11 + st Y+, x12 + st Y+, x13 + st Y+, x14 + st Y+, x15 + st Y+, x16 + st Y+, x17 + st Y+, x20 + st Y+, x21 + st Y+, x22 + st Y+, x23 + st Y+, x24 + st Y+, x25 + st Y+, x26 + st Y+, x27 + st Y+, x30 + st Y+, x31 + st Y+, x32 + st Y+, x33 + st Y+, x34 + st Y+, x35 + st Y+, x36 + st Y+, x37 + + POP_CONFLICT +ret + + +.section .text +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) +RC_LFSR6: +.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x21, 0x03, 0x06 +.byte 0x0c, 0x18, 0x31, 0x22, 0x05, 0x0a, 0x14, 0x29 +.byte 0x13, 0x27, 0x0f, 0x1e, 0x3d, 0x3a, 0x34, 0x28 +.byte 0x11, 0x23, 0x07, 0x0e, 0x1c, 0x39, 0x32, 0x24 +.byte 0x09, 0x12, 0x25, 0x0b, 0x16, 0x2d, 0x1b, 0x37 +.byte 0x2e, 0x1d, 0x3b, 0x36, 0x2c, 0x19, 0x33, 0x26 +.byte 0x0d, 0x1a, 0x35, 0x2a, 0x15, 0x2b, 0x17, 0x2f +.byte 0x1f, 0x3f, 0x3e, 0x3c, 0x38, 0x30, 0x20, 0x00 +RC_LFSR7: +.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x41, 0x03 +.byte 0x06, 0x0c, 0x18, 0x30, 0x61, 0x42, 0x05, 0x0a +.byte 0x14, 0x28, 0x51, 0x23, 0x47, 0x0f, 0x1e, 0x3c +.byte 0x79, 0x72, 0x64, 0x48, 0x11, 0x22, 0x45, 0x0b +.byte 0x16, 0x2c, 0x59, 0x33, 0x67, 0x4e, 0x1d, 0x3a +.byte 0x75, 0x6a, 0x54, 0x29, 0x53, 0x27, 0x4f, 0x1f +.byte 0x3e, 0x7d, 0x7a, 0x74, 0x68, 0x50, 0x21, 0x43 +.byte 0x07, 0x0e, 0x1c, 0x38, 0x71, 0x62, 0x44, 0x09 +.byte 0x12, 0x24, 0x49, 0x13, 0x26, 0x4d, 0x1b, 0x36 +.byte 0x6d, 0x5a, 0x35, 0x6b, 0x56, 0x2d, 0x5b, 0x37 +.byte 0x6f, 0x5e, 0x3d, 0x7b, 0x76, 0x6c, 0x58, 0x31 +.byte 0x63, 0x46, 0x0d, 0x1a, 0x34, 0x69, 0x52, 0x25 +.byte 0x4b, 0x17, 0x2e, 0x5d, 0x3b, 0x77, 0x6e, 0x5c +.byte 0x39, 0x73, 0x66, 0x4c, 0x19, 0x32, 0x65, 0x4a +.byte 0x15, 0x2a, 0x55, 0x2b, 0x57, 0x2f, 0x5f, 0x3f +.byte 0x7f, 0x7e, 0x7c, 0x78, 0x70, 0x60, 0x40, 0x00 +#elif defined(CRYPTO_AEAD) +RC_LFSR6: +.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x21, 0x03, 0x06 +.byte 0x0c, 0x18, 0x31, 0x22, 0x05, 0x0a, 0x14, 0x29 +.byte 0x13, 0x27, 0x0f, 0x1e, 0x3d, 0x3a, 0x34, 0x28 +.byte 0x11, 0x23, 0x07, 0x0e, 0x1c, 0x39, 0x32, 0x24 +.byte 0x09, 0x12, 0x25, 0x0b, 0x16, 0x2d, 0x1b, 0x37 +.byte 0x2e, 0x1d, 0x3b, 0x36, 0x2c, 0x19, 0x33, 0x26 +.byte 0x0d, 0x1a, 0x35, 0x2a, 0x15, 0x2b, 0x17, 0x2f +.byte 0x1f, 0x3f, 0x3e, 0x3c, 0x38, 0x30, 0x20, 0x00 +#else +RC_LFSR7: +.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x41, 0x03 +.byte 0x06, 0x0c, 0x18, 0x30, 0x61, 0x42, 0x05, 0x0a +.byte 0x14, 0x28, 0x51, 0x23, 0x47, 0x0f, 0x1e, 0x3c +.byte 0x79, 0x72, 0x64, 0x48, 0x11, 0x22, 0x45, 0x0b +.byte 0x16, 0x2c, 0x59, 0x33, 0x67, 0x4e, 0x1d, 0x3a +.byte 0x75, 0x6a, 0x54, 0x29, 0x53, 0x27, 0x4f, 0x1f +.byte 0x3e, 0x7d, 0x7a, 0x74, 0x68, 0x50, 0x21, 0x43 +.byte 0x07, 0x0e, 0x1c, 0x38, 0x71, 0x62, 0x44, 0x09 +.byte 0x12, 0x24, 0x49, 0x13, 0x26, 0x4d, 0x1b, 0x36 +.byte 0x6d, 0x5a, 0x35, 0x6b, 0x56, 0x2d, 0x5b, 0x37 +.byte 0x6f, 0x5e, 0x3d, 0x7b, 0x76, 0x6c, 0x58, 0x31 +.byte 0x63, 0x46, 0x0d, 0x1a, 0x34, 0x69, 0x52, 0x25 +.byte 0x4b, 0x17, 0x2e, 0x5d, 0x3b, 0x77, 0x6e, 0x5c +.byte 0x39, 0x73, 0x66, 0x4c, 0x19, 0x32, 0x65, 0x4a +.byte 0x15, 0x2a, 0x55, 0x2b, 0x57, 0x2f, 0x5f, 0x3f +.byte 0x7f, 0x7e, 0x7c, 0x78, 0x70, 0x60, 0x40, 0x00 +#endif \ No newline at end of file diff --git a/knot/Implementations/crypto_aead/knot192/avr8_speed/knot384.h b/knot/Implementations/crypto_aead/knot192/avr8_speed/knot384.h new file mode 100644 index 0000000..0b3dd75 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot192/avr8_speed/knot384.h @@ -0,0 +1,261 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.1 2020 by KNOT Team * +; ********************************************** +; + +; an intentionally arrangement of registers to facilitate movw +#define x20 r0 +#define x21 r2 +#define x22 r4 +#define x23 r6 +#define x24 r8 +#define x25 r10 +#define x26 r1 +#define x27 r3 +#define x28 r5 +#define x29 r7 +#define x2a r9 +#define x2b r11 + +; an intentionally arrangement of registers to facilitate movw +#define x30 r22 +#define x35 r20 +#define x3a r18 +#define x33 r16 +#define x38 r14 +#define x31 r12 +#define x36 r23 +#define x3b r21 +#define x34 r19 +#define x39 r17 +#define x32 r15 +#define x37 r13 + +#define t0j r24 +#define t1j r25 +#define x0j r25 +#define x1j r27 + +#include "assist.h" + +.macro Sbox i0, i1, i2, i3 + ldi t0j, 0xFF + eor \i0, t0j + mov t0j, \i1 + and \i1, \i0 + eor \i1, \i2 + or \i2, t0j + eor \i0, \i3 + eor \i2, \i0 + eor t0j, \i3 + and \i0, \i1 + eor \i3, \i1 + eor \i0, t0j + and t0j, \i2 + eor \i1, t0j +.endm + +.macro OneColumn i0, i1, i2, i3 + ld \i0, Y + ldd \i1, Y + ROW_INBYTES + Sbox \i0, \i1, \i2, \i3 + st Y+, \i0 + rol \i1 ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES -1, \i1 +.endm + +Permutation: + PUSH_CONFLICT + mov rcnt, rn + + ldi YH, hi8(SRAM_STATE + 2 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 2 * ROW_INBYTES) + ld x20, Y+ + ld x21, Y+ + ld x22, Y+ + ld x23, Y+ + ld x24, Y+ + ld x25, Y+ + ld x26, Y+ + ld x27, Y+ + ld x28, Y+ + ld x29, Y+ + ld x2a, Y+ + ld x2b, Y+ + ld x30, Y+ + ld x31, Y+ + ld x32, Y+ + ld x33, Y+ + ld x34, Y+ + ld x35, Y+ + ld x36, Y+ + ld x37, Y+ + ld x38, Y+ + ld x39, Y+ + ld x3a, Y+ + ld x3b, Y+ + + ldi ZL, lo8(RC_LFSR7) + ldi ZH, hi8(RC_LFSR7) + +round_loop_start: + ; AddRC + lpm t0j, Z+ + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + ld x0j, Y + eor x0j, t0j + + ldd x1j, Y + ROW_INBYTES + Sbox x0j, x1j, x20, x30 + st Y+, x0j + lsl x1j ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES -1, x1j + + OneColumn x0j, x1j, x21, x31 + OneColumn x0j, x1j, x22, x32 + OneColumn x0j, x1j, x23, x33 + OneColumn x0j, x1j, x24, x34 + OneColumn x0j, x1j, x25, x35 + OneColumn x0j, x1j, x26, x36 + OneColumn x0j, x1j, x27, x37 + OneColumn x0j, x1j, x28, x38 + OneColumn x0j, x1j, x29, x39 + OneColumn x0j, x1j, x2a, x3a + OneColumn x0j, x1j, x2b, x3b + + ld x1j, Y + eor t0j, t0j + adc x1j, t0j + st Y, x1j + + ; b a 9 8 7 6 5 4 3 2 1 0 + ; -- -- -- -- -- -- -- -- -- -- -- x- 0 + ; -- -- -- -- -- -- -- -- -- -- -- x' 0 + ; -- -- -- -- -- -- -- -- -- -- x- -- 1 + ; -- -- -- -- x' -- -- -- -- -- -- -- 7 + ; 4 3 2 1 0 b a 9 8 7 6 5 + + ; ShiftRows -- the last two rows + ; <<< 8 + ; b a 9 8 7 6 5 4 3 2 1 0 => a 9 8 7 6 5 4 3 2 1 0 b + movw t0j, x25 ; t1j:t0j <= x2b:x25 + movw x25, x24 ; x2b:x25 <= x2a:x24 + movw x24, x23 ; x2a:x24 <= x29:x23 + movw x23, x22 ; x29:x23 <= x28:x22 + movw x22, x21 ; x28:x22 <= x27:x21 + movw x21, x20 ; x27:x21 <= x26:x20 + mov x26, t0j ; x26 <= x25 + mov x20, t1j ; x20 <= x2b + + ; >>> 1 + mov t0j, x3b + ror t0j + ror x3a + ror x39 + ror x38 + ror x37 + ror x36 + ror x35 + ror x34 + ror x33 + ror x32 + ror x31 + ror x30 + ror x3b + ; <<< 56 + ; b a 9 8 7 6 5 4 3 2 1 0 => 4 3 2 1 0 b a 9 8 7 6 5 + ; mov x3j, x30 + ; mov x30, x35 + ; mov x35, x3a + ; mov x3a, x33 + ; mov x33, x38 + ; mov x38, x31 + ; mov x31, x36 + ; mov x36, x3b + ; mov x3b, x34 + ; mov x34, x39 + ; mov x39, x32 + ; mov x32, x37 + ; mov x37, x3j + ; an intentionally arrangement of registers to facilitate movw + ; x30 r22 + ; x35 r20 + ; x3a r18 + ; x33 r16 + ; x38 r14 + ; x31 r12 + ; x36 r23 + ; x3b r21 + ; x34 r19 + ; x39 r17 + ; x32 r15 + ; x37 r13 + movw t0j, x30 ; t1j:t0j <= x36:x30 + movw x30, x35 ; x36:x30 <= x3b:x35 + movw x35, x3a ; x3b:x35 <= x34:x3a + movw x3a, x33 ; x34:x3a <= x39:x33 + movw x33, x38 ; x39:x33 <= x32:x38 + movw x38, x31 ; x32:x38 <= x37:x31 + mov x31, t1j ; x31 <= x36 + mov x37, t0j ; x37 <= x30 + + dec rcnt + breq round_loop_end + jmp round_loop_start + +round_loop_end: + + ldi YH, hi8(SRAM_STATE + 2 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 2 * ROW_INBYTES) + st Y+, x20 + st Y+, x21 + st Y+, x22 + st Y+, x23 + st Y+, x24 + st Y+, x25 + st Y+, x26 + st Y+, x27 + st Y+, x28 + st Y+, x29 + st Y+, x2a + st Y+, x2b + st Y+, x30 + st Y+, x31 + st Y+, x32 + st Y+, x33 + st Y+, x34 + st Y+, x35 + st Y+, x36 + st Y+, x37 + st Y+, x38 + st Y+, x39 + st Y+, x3a + st Y+, x3b + + POP_CONFLICT +ret + +RC_LFSR7: +.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x41, 0x03 +.byte 0x06, 0x0c, 0x18, 0x30, 0x61, 0x42, 0x05, 0x0a +.byte 0x14, 0x28, 0x51, 0x23, 0x47, 0x0f, 0x1e, 0x3c +.byte 0x79, 0x72, 0x64, 0x48, 0x11, 0x22, 0x45, 0x0b +.byte 0x16, 0x2c, 0x59, 0x33, 0x67, 0x4e, 0x1d, 0x3a +.byte 0x75, 0x6a, 0x54, 0x29, 0x53, 0x27, 0x4f, 0x1f +.byte 0x3e, 0x7d, 0x7a, 0x74, 0x68, 0x50, 0x21, 0x43 +.byte 0x07, 0x0e, 0x1c, 0x38, 0x71, 0x62, 0x44, 0x09 +.byte 0x12, 0x24, 0x49, 0x13, 0x26, 0x4d, 0x1b, 0x36 +.byte 0x6d, 0x5a, 0x35, 0x6b, 0x56, 0x2d, 0x5b, 0x37 +.byte 0x6f, 0x5e, 0x3d, 0x7b, 0x76, 0x6c, 0x58, 0x31 +.byte 0x63, 0x46, 0x0d, 0x1a, 0x34, 0x69, 0x52, 0x25 +.byte 0x4b, 0x17, 0x2e, 0x5d, 0x3b, 0x77, 0x6e, 0x5c +.byte 0x39, 0x73, 0x66, 0x4c, 0x19, 0x32, 0x65, 0x4a +.byte 0x15, 0x2a, 0x55, 0x2b, 0x57, 0x2f, 0x5f, 0x3f +.byte 0x7f, 0x7e, 0x7c, 0x78, 0x70, 0x60, 0x40, 0x00 \ No newline at end of file diff --git a/knot/Implementations/crypto_aead/knot192/avr8_speed/knot512.h b/knot/Implementations/crypto_aead/knot192/avr8_speed/knot512.h new file mode 100644 index 0000000..b0e4319 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot192/avr8_speed/knot512.h @@ -0,0 +1,435 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.1 2020 by KNOT Team * +; ********************************************** +; +#define x20 r0 +#define x22 r2 +#define x24 r4 +#define x26 r6 +#define x28 r1 +#define x2a r3 +#define x2c r5 +#define x2e r7 + +#define x30 r8 +#define x3d r10 +#define x3a r12 +#define x37 r14 +#define x34 r16 +#define x31 r18 +#define x3e r20 +#define x3b r22 +#define x38 r9 +#define x35 r11 +#define x32 r13 +#define x3f r15 +#define x3c r17 +#define x39 r19 +#define x36 r21 +#define x33 r23 + +#define t0j r24 +#define t1j r25 +#define x0j r25 +#define x1j r27 +#define x2j r26 + +#include "assist.h" + +.macro Sbox i0, i1, i2, i3 + ldi t0j, 0xFF + eor \i0, t0j + mov t0j, \i1 + and \i1, \i0 + eor \i1, \i2 + or \i2, t0j + eor \i0, \i3 + eor \i2, \i0 + eor t0j, \i3 + and \i0, \i1 + eor \i3, \i1 + eor \i0, t0j + and t0j, \i2 + eor \i1, t0j +.endm + +.macro TwoColumns i2_e, i3_e, i3_o + ; column 2i + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + Sbox x0j, x1j, \i2_e, \i3_e + st Y+, x0j + rol x1j ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES - 1, x1j + + ; column 2i+1 + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + Sbox x0j, x1j, x2j, \i3_o + st Y+, x0j + rol x1j ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES - 1, x1j + ldd t0j, Y + 2 * ROW_INBYTES + 1 + std Y + 2 * ROW_INBYTES + 1, x2j + mov x2j, t0j +.endm + +Permutation: + PUSH_CONFLICT + mov rcnt, rn + push rcnt + + ldi YH, hi8(SRAM_STATE + 2 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 2 * ROW_INBYTES) + + ldd x20, Y + 0x00 + ldd x22, Y + 0x02 + ldd x24, Y + 0x04 + ldd x26, Y + 0x06 + ldd x28, Y + 0x08 + ldd x2a, Y + 0x0a + ldd x2c, Y + 0x0c + ldd x2e, Y + 0x0e + + adiw YL, ROW_INBYTES + + ld x30, Y+ + ld x31, Y+ + ld x32, Y+ + ld x33, Y+ + ld x34, Y+ + ld x35, Y+ + ld x36, Y+ + ld x37, Y+ + ld x38, Y+ + ld x39, Y+ + ld x3a, Y+ + ld x3b, Y+ + ld x3c, Y+ + ld x3d, Y+ + ld x3e, Y+ + ld x3f, Y+ + +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) + sbrc AEDH, 2 ; AEDH[2] = 0 for AEAD and AEDH[2] = 1 for HASH + rjmp For_Hash +For_AEAD: + ldi ZL, lo8(RC_LFSR7) + ldi ZH, hi8(RC_LFSR7) + rjmp round_loop_start +For_Hash: + ldi ZL, lo8(RC_LFSR8) + ldi ZH, hi8(RC_LFSR8) +#elif defined(CRYPTO_AEAD) + ldi ZL, lo8(RC_LFSR7) + ldi ZH, hi8(RC_LFSR7) +#else + ldi ZL, lo8(RC_LFSR8) + ldi ZH, hi8(RC_LFSR8) +#endif + + +round_loop_start: + ; AddRC + lpm t0j, Z+ + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + + ; column 0 + ld x0j, Y + eor x0j, t0j + ldd x1j, Y + ROW_INBYTES + Sbox x0j, x1j, x20, x30 + st Y+, x0j + lsl x1j ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES - 1, x1j + + ; column 1 + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + ldd x2j, Y + 2 * ROW_INBYTES + Sbox x0j, x1j, x2j, x31 + st Y+, x0j + rol x1j ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES - 1, x1j + ldd t0j, Y + 2 * ROW_INBYTES + 1 + std Y + 2 * ROW_INBYTES + 1, x2j + mov x2j, t0j + + ; column 2, 3 + TwoColumns x22, x32, x33 + ; column 4, 5 + TwoColumns x24, x34, x35 + ; column 6, 7 + TwoColumns x26, x36, x37 + ; column 8, 9 + TwoColumns x28, x38, x39 + ; column 10, 11 + TwoColumns x2a, x3a, x3b + ; column 12, 13 + TwoColumns x2c, x3c, x3d + + ; column 14 + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + Sbox x0j, x1j, x2e, x3e + st Y+, x0j + rol x1j ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES - 1, x1j + + ; column 15 + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + Sbox x0j, x1j, x2j, x3f + st Y+, x0j + rol x1j ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES - 1, x1j + + ld x1j, Y + eor t0j, t0j + adc x1j, t0j + st Y, x1j + std Y + ROW_INBYTES + 1, x2j + + ; f e d c b a 9 8 7 6 5 4 3 2 1 0 + ; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- x- 0 + ; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- x' 0 + ; -- -- -- -- -- -- -- -- -- -- -- -- -- x- -- -- 2 + ; -- -- -- -- -- -- -- -- -- -- -- -- x' -- -- -- 3 + ; c b a 9 8 7 6 5 4 3 2 1 0 f e d + ; x2e x2c x2a x28 x26 x24 x22 x20 => x2c x2a x28 x26 x24 x22 x20 x2e + ;mov t0j, x2e + ;mov x2e, x2c + ;mov x2c, x2a + ;mov x2a, x28 + ;mov x28, x26 + ;mov x26, x24 + ;mov x24, x22 + ;mov x22, x20 + ;mov x20, t0j + ; an intentionally arrangement of registers to facilitate movw + movw t0j, x26 ; t1j:t0j <= x2e:x26 + movw x26, x24 ; x2e:x26 <= x2c:x24 + movw x24, x22 ; x2c:x24 <= x2a:x22 + movw x22, x20 ; x2a:x22 <= x28:x20 + mov x20, t1j ; x20 <= t1j + mov x28, t0j ; x28 <= t0j + + ; <<< 1 + mov t0j, x3f + rol t0j + rol x30 + rol x31 + rol x32 + rol x33 + rol x34 + rol x35 + rol x36 + rol x37 + rol x38 + rol x39 + rol x3a + rol x3b + rol x3c + rol x3d + rol x3e + rol x3f + ; <<< 24 + ; f e d c b a 9 8 7 6 5 4 3 2 1 0 => + ; c b a 9 8 7 6 5 4 3 2 1 0 f e d + ; mov x3j, x30 + ; mov x30, x3d + ; mov x3d, x3a + ; mov x3a, x37 + ; mov x37, x34 + ; mov x34, x31 + ; mov x31, x3e + ; mov x3e, x3b + ; mov x3b, x38 + ; mov x38, x35 + ; mov x35, x32 + ; mov x32, x3f + ; mov x3f, x3c + ; mov x3c, x39 + ; mov x39, x36 + ; mov x36, x33 + ; mov x33, x3j + ; an intentionally arrangement of registers to facilitate movw + ; x30 r8 + ; x3d r10 + ; x3a r12 + ; x37 r14 + ; x34 r16 + ; x31 r18 + ; x3e r20 + ; x3b r22 + ; x38 r9 + ; x35 r11 + ; x32 r13 + ; x3f r15 + ; x3c r17 + ; x39 r19 + ; x36 r21 + ; x33 r23 + movw t0j, x30 ; t1j:t0j <= x38:x30 + movw x30, x3d ; x38:x30 <= x35:x3d + movw x3d, x3a ; x35:x3d <= x32:x3a + movw x3a, x37 ; x32:x3a <= x3f:x37 + movw x37, x34 ; x3f:x37 <= x3c:x34 + movw x34, x31 ; x3c:x34 <= x39:x31 + movw x31, x3e ; x39:x31 <= x36:x3e + movw x3e, x3b ; x36:x3e <= x33:x3b + mov x3b, t1j ; x3b <= x38 + mov x33, t0j ; x33 <= x30 + + pop rcnt + dec rcnt + push rcnt + breq round_loop_end + rjmp round_loop_start + +round_loop_end: + pop rcnt + + ldi YH, hi8(SRAM_STATE + 2 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 2 * ROW_INBYTES) + std Y + 0x00, x20 + std Y + 0x02, x22 + std Y + 0x04, x24 + std Y + 0x06, x26 + std Y + 0x08, x28 + std Y + 0x0a, x2a + std Y + 0x0c, x2c + std Y + 0x0e, x2e + adiw YL, ROW_INBYTES + st Y+, x30 + st Y+, x31 + st Y+, x32 + st Y+, x33 + st Y+, x34 + st Y+, x35 + st Y+, x36 + st Y+, x37 + st Y+, x38 + st Y+, x39 + st Y+, x3a + st Y+, x3b + st Y+, x3c + st Y+, x3d + st Y+, x3e + st Y+, x3f + + POP_CONFLICT +ret + +.section .text +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) +RC_LFSR7: +.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x41, 0x03 +.byte 0x06, 0x0c, 0x18, 0x30, 0x61, 0x42, 0x05, 0x0a +.byte 0x14, 0x28, 0x51, 0x23, 0x47, 0x0f, 0x1e, 0x3c +.byte 0x79, 0x72, 0x64, 0x48, 0x11, 0x22, 0x45, 0x0b +.byte 0x16, 0x2c, 0x59, 0x33, 0x67, 0x4e, 0x1d, 0x3a +.byte 0x75, 0x6a, 0x54, 0x29, 0x53, 0x27, 0x4f, 0x1f +.byte 0x3e, 0x7d, 0x7a, 0x74, 0x68, 0x50, 0x21, 0x43 +.byte 0x07, 0x0e, 0x1c, 0x38, 0x71, 0x62, 0x44, 0x09 +.byte 0x12, 0x24, 0x49, 0x13, 0x26, 0x4d, 0x1b, 0x36 +.byte 0x6d, 0x5a, 0x35, 0x6b, 0x56, 0x2d, 0x5b, 0x37 +.byte 0x6f, 0x5e, 0x3d, 0x7b, 0x76, 0x6c, 0x58, 0x31 +.byte 0x63, 0x46, 0x0d, 0x1a, 0x34, 0x69, 0x52, 0x25 +.byte 0x4b, 0x17, 0x2e, 0x5d, 0x3b, 0x77, 0x6e, 0x5c +.byte 0x39, 0x73, 0x66, 0x4c, 0x19, 0x32, 0x65, 0x4a +.byte 0x15, 0x2a, 0x55, 0x2b, 0x57, 0x2f, 0x5f, 0x3f +.byte 0x7f, 0x7e, 0x7c, 0x78, 0x70, 0x60, 0x40, 0x00 +RC_LFSR8: +.byte 0x01, 0x02, 0x04, 0x08, 0x11, 0x23, 0x47, 0x8e +.byte 0x1c, 0x38, 0x71, 0xe2, 0xc4, 0x89, 0x12, 0x25 +.byte 0x4b, 0x97, 0x2e, 0x5c, 0xb8, 0x70, 0xe0, 0xc0 +.byte 0x81, 0x03, 0x06, 0x0c, 0x19, 0x32, 0x64, 0xc9 +.byte 0x92, 0x24, 0x49, 0x93, 0x26, 0x4d, 0x9b, 0x37 +.byte 0x6e, 0xdc, 0xb9, 0x72, 0xe4, 0xc8, 0x90, 0x20 +.byte 0x41, 0x82, 0x05, 0x0a, 0x15, 0x2b, 0x56, 0xad +.byte 0x5b, 0xb6, 0x6d, 0xda, 0xb5, 0x6b, 0xd6, 0xac +.byte 0x59, 0xb2, 0x65, 0xcb, 0x96, 0x2c, 0x58, 0xb0 +.byte 0x61, 0xc3, 0x87, 0x0f, 0x1f, 0x3e, 0x7d, 0xfb +.byte 0xf6, 0xed, 0xdb, 0xb7, 0x6f, 0xde, 0xbd, 0x7a +.byte 0xf5, 0xeb, 0xd7, 0xae, 0x5d, 0xba, 0x74, 0xe8 +.byte 0xd1, 0xa2, 0x44, 0x88, 0x10, 0x21, 0x43, 0x86 +.byte 0x0d, 0x1b, 0x36, 0x6c, 0xd8, 0xb1, 0x63, 0xc7 +.byte 0x8f, 0x1e, 0x3c, 0x79, 0xf3, 0xe7, 0xce, 0x9c +.byte 0x39, 0x73, 0xe6, 0xcc, 0x98, 0x31, 0x62, 0xc5 +.byte 0x8b, 0x16, 0x2d, 0x5a, 0xb4, 0x69, 0xd2, 0xa4 +.byte 0x48, 0x91, 0x22, 0x45, 0x8a, 0x14, 0x29, 0x52 +.byte 0xa5, 0x4a, 0x95, 0x2a, 0x54, 0xa9, 0x53, 0xa7 +.byte 0x4e, 0x9d, 0x3b, 0x77, 0xee, 0xdd, 0xbb, 0x76 +.byte 0xec, 0xd9, 0xb3, 0x67, 0xcf, 0x9e, 0x3d, 0x7b +.byte 0xf7, 0xef, 0xdf, 0xbf, 0x7e, 0xfd, 0xfa, 0xf4 +.byte 0xe9, 0xd3, 0xa6, 0x4c, 0x99, 0x33, 0x66, 0xcd +.byte 0x9a, 0x35, 0x6a, 0xd4, 0xa8, 0x51, 0xa3, 0x46 +.byte 0x8c, 0x18, 0x30, 0x60, 0xc1, 0x83, 0x07, 0x0e +.byte 0x1d, 0x3a, 0x75, 0xea, 0xd5, 0xaa, 0x55, 0xab +.byte 0x57, 0xaf, 0x5f, 0xbe, 0x7c, 0xf9, 0xf2, 0xe5 +.byte 0xca, 0x94, 0x28, 0x50, 0xa1, 0x42, 0x84, 0x09 +.byte 0x13, 0x27, 0x4f, 0x9f, 0x3f, 0x7f, 0xff, 0xfe +.byte 0xfc, 0xf8, 0xf0, 0xe1, 0xc2, 0x85, 0x0b, 0x17 +.byte 0x2f, 0x5e, 0xbc, 0x78, 0xf1, 0xe3, 0xc6, 0x8d +.byte 0x1a, 0x34, 0x68, 0xd0, 0xa0, 0x40, 0x80, 0x00 +#elif defined(CRYPTO_AEAD) +RC_LFSR7: +.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x41, 0x03 +.byte 0x06, 0x0c, 0x18, 0x30, 0x61, 0x42, 0x05, 0x0a +.byte 0x14, 0x28, 0x51, 0x23, 0x47, 0x0f, 0x1e, 0x3c +.byte 0x79, 0x72, 0x64, 0x48, 0x11, 0x22, 0x45, 0x0b +.byte 0x16, 0x2c, 0x59, 0x33, 0x67, 0x4e, 0x1d, 0x3a +.byte 0x75, 0x6a, 0x54, 0x29, 0x53, 0x27, 0x4f, 0x1f +.byte 0x3e, 0x7d, 0x7a, 0x74, 0x68, 0x50, 0x21, 0x43 +.byte 0x07, 0x0e, 0x1c, 0x38, 0x71, 0x62, 0x44, 0x09 +.byte 0x12, 0x24, 0x49, 0x13, 0x26, 0x4d, 0x1b, 0x36 +.byte 0x6d, 0x5a, 0x35, 0x6b, 0x56, 0x2d, 0x5b, 0x37 +.byte 0x6f, 0x5e, 0x3d, 0x7b, 0x76, 0x6c, 0x58, 0x31 +.byte 0x63, 0x46, 0x0d, 0x1a, 0x34, 0x69, 0x52, 0x25 +.byte 0x4b, 0x17, 0x2e, 0x5d, 0x3b, 0x77, 0x6e, 0x5c +.byte 0x39, 0x73, 0x66, 0x4c, 0x19, 0x32, 0x65, 0x4a +.byte 0x15, 0x2a, 0x55, 0x2b, 0x57, 0x2f, 0x5f, 0x3f +.byte 0x7f, 0x7e, 0x7c, 0x78, 0x70, 0x60, 0x40, 0x00 +#else +RC_LFSR8: +.byte 0x01, 0x02, 0x04, 0x08, 0x11, 0x23, 0x47, 0x8e +.byte 0x1c, 0x38, 0x71, 0xe2, 0xc4, 0x89, 0x12, 0x25 +.byte 0x4b, 0x97, 0x2e, 0x5c, 0xb8, 0x70, 0xe0, 0xc0 +.byte 0x81, 0x03, 0x06, 0x0c, 0x19, 0x32, 0x64, 0xc9 +.byte 0x92, 0x24, 0x49, 0x93, 0x26, 0x4d, 0x9b, 0x37 +.byte 0x6e, 0xdc, 0xb9, 0x72, 0xe4, 0xc8, 0x90, 0x20 +.byte 0x41, 0x82, 0x05, 0x0a, 0x15, 0x2b, 0x56, 0xad +.byte 0x5b, 0xb6, 0x6d, 0xda, 0xb5, 0x6b, 0xd6, 0xac +.byte 0x59, 0xb2, 0x65, 0xcb, 0x96, 0x2c, 0x58, 0xb0 +.byte 0x61, 0xc3, 0x87, 0x0f, 0x1f, 0x3e, 0x7d, 0xfb +.byte 0xf6, 0xed, 0xdb, 0xb7, 0x6f, 0xde, 0xbd, 0x7a +.byte 0xf5, 0xeb, 0xd7, 0xae, 0x5d, 0xba, 0x74, 0xe8 +.byte 0xd1, 0xa2, 0x44, 0x88, 0x10, 0x21, 0x43, 0x86 +.byte 0x0d, 0x1b, 0x36, 0x6c, 0xd8, 0xb1, 0x63, 0xc7 +.byte 0x8f, 0x1e, 0x3c, 0x79, 0xf3, 0xe7, 0xce, 0x9c +.byte 0x39, 0x73, 0xe6, 0xcc, 0x98, 0x31, 0x62, 0xc5 +.byte 0x8b, 0x16, 0x2d, 0x5a, 0xb4, 0x69, 0xd2, 0xa4 +.byte 0x48, 0x91, 0x22, 0x45, 0x8a, 0x14, 0x29, 0x52 +.byte 0xa5, 0x4a, 0x95, 0x2a, 0x54, 0xa9, 0x53, 0xa7 +.byte 0x4e, 0x9d, 0x3b, 0x77, 0xee, 0xdd, 0xbb, 0x76 +.byte 0xec, 0xd9, 0xb3, 0x67, 0xcf, 0x9e, 0x3d, 0x7b +.byte 0xf7, 0xef, 0xdf, 0xbf, 0x7e, 0xfd, 0xfa, 0xf4 +.byte 0xe9, 0xd3, 0xa6, 0x4c, 0x99, 0x33, 0x66, 0xcd +.byte 0x9a, 0x35, 0x6a, 0xd4, 0xa8, 0x51, 0xa3, 0x46 +.byte 0x8c, 0x18, 0x30, 0x60, 0xc1, 0x83, 0x07, 0x0e +.byte 0x1d, 0x3a, 0x75, 0xea, 0xd5, 0xaa, 0x55, 0xab +.byte 0x57, 0xaf, 0x5f, 0xbe, 0x7c, 0xf9, 0xf2, 0xe5 +.byte 0xca, 0x94, 0x28, 0x50, 0xa1, 0x42, 0x84, 0x09 +.byte 0x13, 0x27, 0x4f, 0x9f, 0x3f, 0x7f, 0xff, 0xfe +.byte 0xfc, 0xf8, 0xf0, 0xe1, 0xc2, 0x85, 0x0b, 0x17 +.byte 0x2f, 0x5e, 0xbc, 0x78, 0xf1, 0xe3, 0xc6, 0x8d +.byte 0x1a, 0x34, 0x68, 0xd0, 0xa0, 0x40, 0x80, 0x00 +#endif \ No newline at end of file diff --git a/knot/Implementations/crypto_aead/knot192/avr8_speed/permutation.h b/knot/Implementations/crypto_aead/knot192/avr8_speed/permutation.h new file mode 100644 index 0000000..e6c9793 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot192/avr8_speed/permutation.h @@ -0,0 +1,45 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.1 2020 by KNOT Team * +; ********************************************** +; + +; +; ============================================ +; R E G I S T E R D E F I N I T I O N S +; ============================================ +; + +#define mclen r16 +#define radlen r17 +#define tcnt r17 +#define tmp0 r20 +#define tmp1 r21 +#define cnt0 r22 +#define rn r23 +#define rate r24 + + +; AEDH = 0b000: for authenticate AD +; AEDH = 0b001: for encryption +; AEDH = 0b011: for decryption +; AEDH = 0b100: for hash +#define AEDH r25 +#define rcnt r26 + +#if (STATE_INBITS==256) +#include "knot256.h" +#elif (STATE_INBITS==384) +#include "knot384.h" +#elif (STATE_INBITS==512) +#include "knot512.h" +#else +#error "Not specified key size and state size" +#endif + + diff --git a/knot/Implementations/crypto_aead/knot256/armcortexm_2/auxFormat.c b/knot/Implementations/crypto_aead/knot256/armcortexm_2/auxFormat.c new file mode 100644 index 0000000..93f0bb8 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot256/armcortexm_2/auxFormat.c @@ -0,0 +1,81 @@ +#include"auxFormat.h" + +void P512(unsigned int *s, unsigned char *round, unsigned char rounds) { + u32 rci,t1,t2,t3,t9; + unsigned char i; + for (i = 0; i < rounds; i++) { + rci=round[0]; \ + P512_ARC_1(rci);\ + for (i = 1;i < rounds;i++) {\ + P512_2SC(s[0],s[4],s[8] ,s[12],s[1],s[5],s[9] ,s[13]);\ + P512_2SC(s[2],s[6],s[10],s[14],s[3],s[7],s[11],s[15]);\ + P512_SR_1();\ + rci=round[i];\ + P512_SR_ARC_2(rci);\ + }\ + P512_2SC(s[0],s[4],s[8] ,s[12],s[1],s[5],s[9] ,s[13]);\ + P512_2SC(s[2],s[6],s[10],s[14],s[3],s[7],s[11],s[15]);\ + P512_SR_1();\ + P512_SR_2();\ + + } +} +void packU128FormatToFourPacket(u32 * out, u8 * in) { + u32 t0 = U32BIG(((u32* )in)[0]); + u32 t1 = U32BIG(((u32* )in)[1]); + u32 t2 = U32BIG(((u32* )in)[2]); + u32 t3 = U32BIG(((u32* )in)[3]); + u32 temp1; + puck32(t0); + puck32(t0); + puck32(t1); + puck32(t1); + puck32(t2); + puck32(t2); + puck32(t3); + puck32(t3); + out[3] = (t3 & 0xff000000) | ((t2 >> 8) & 0x00ff0000) + | ((t1 >> 16) & 0x0000ff00) | (t0 >> 24); + out[2] = ((t3 << 8) & 0xff000000) | (t2 & 0x00ff0000) + | ((t1 >> 8) & 0x0000ff00) | ((t0 >> 16) & 0x000000ff); + out[1] = ((t3 << 16) & 0xff000000) | ((t2 << 8) & 0x00ff0000) + | (t1 & 0x0000ff00) | ((t0 >> 8) & 0x000000ff); + out[0] = ((t3 << 24) & 0xff000000) | ((t2 << 16) & 0x00ff0000) + | ((t1 << 8) & 0x0000ff00) | (t0 & 0x000000ff); +} +void unpackU128FormatToFourPacket(u8 * out, u32 * in) { + u32 t[4] = { 0 }; + u32 r0; + t[3] = (in[3] & 0xff000000 )| ((in[2] >> 8) & 0x00ff0000) + | ((in[1] >> 16) & 0x0000ff00) | (in[0] >> 24); + t[2] = ((in[3] << 8) & 0xff000000) | (in[2] & 0x00ff0000) + | ((in[1] >> 8) & 0x0000ff00) | ((in[0] >> 16) & 0x000000ff); + t[1] = ((in[3] << 16) & 0xff000000) | ((in[2] << 8) & 0x00ff0000) + | (in[1] & 0x0000ff00) | ((in[0] >> 8) & 0x000000ff); + t[0] = ((in[3] << 24) & 0xff000000) | ((in[2] << 16) & 0x00ff0000) + | ((in[1] << 8) & 0x0000ff00) | (in[0] & 0x000000ff); + unpuck32(t[0]); + unpuck32(t[0]); + unpuck32(t[1]); + unpuck32(t[1]); + unpuck32(t[2]); + unpuck32(t[2]); + unpuck32(t[3]); + unpuck32(t[3]); + memcpy(out, t, 16 * sizeof(unsigned char)); +} + + +unsigned char constant7Format_aead[100] = { +/*constant7_aead_256*/ +0x1, 0x4, 0x10, 0x40, 0x2, 0x8, 0x21, 0x5, 0x14, 0x50, 0x42, 0xa, 0x29, 0x24, + 0x11, 0x44, 0x12, 0x48, 0x23, 0xd, 0x35, 0x55, 0x56, 0x5a, 0x6b, 0x2e, + 0x38, 0x60, 0x3, 0xc, 0x31, 0x45, 0x16, 0x58, 0x63, 0xf, 0x3d, 0x74, + 0x53, 0x4e, 0x3b, 0x6c, 0x32, 0x49, 0x27, 0x1d, 0x75, 0x57, 0x5e, 0x7b, + 0x6e, 0x3a, 0x68, 0x22, 0x9, 0x25, 0x15, 0x54, 0x52, 0x4a, 0x2b, 0x2c, + 0x30, 0x41, 0x6, 0x18, 0x61, 0x7, 0x1c, 0x71, 0x47, 0x1e, 0x79, 0x66, + 0x1b, 0x6d, 0x36, 0x59, 0x67, 0x1f, 0x7d, 0x76, 0x5b, 0x6f, 0x3e, 0x78, + 0x62, 0xb, 0x2d, 0x34, 0x51, 0x46, 0x1a, 0x69, 0x26, 0x19, 0x65, 0x17, + 0x5c, 0x73, + +}; diff --git a/knot/Implementations/crypto_aead/knot256/armcortexm_2/auxFormat.h b/knot/Implementations/crypto_aead/knot256/armcortexm_2/auxFormat.h index d7d877f..b8a7864 100644 --- a/knot/Implementations/crypto_aead/knot256/armcortexm_2/auxFormat.h +++ b/knot/Implementations/crypto_aead/knot256/armcortexm_2/auxFormat.h @@ -1,115 +1,147 @@ -//#include #include"crypto_aead.h" #include"api.h" #include -#include -#include #define U32BIG(x) (x) + #define ARR_SIZE(a) (sizeof((a))/sizeof((a[0]))) #define LOTR32(x,n) (((x)<<(n))|((x)>>(32-(n)))) -#define sbox(a, b, c, d, e, f, g, h) \ -{ \ - t1 = ~a; t2 = b & t1;t3 = c ^ t2; h = d ^ t3; t5 = b | c; t6 = d ^ t1; g = t5 ^ t6; t8 = b ^ d; t9 = t3 & t6; e = t8 ^ t9; t11 = g & t8; f = t3 ^ t11; \ -} - typedef unsigned char u8; typedef unsigned int u32; typedef unsigned long long u64; -void printfU128Format(char name[], u32 * in); -void printU8(char name[], u8 var[], long len, int offset); +//new +void puckU8FormatToFourPacket(u8 in, u8 *out); -//ʹÓÃt9 #define puck32(in)\ {\ -t9 = (in ^ (in >> 1)) & 0x22222222; in ^= t9 ^ (t9 << 1);\ -t9 = (in ^ (in >> 2)) & 0x0C0C0C0C; in ^= t9 ^ (t9 << 2);\ -t9 = (in ^ (in >> 4)) & 0x00F000F0; in ^= t9 ^ (t9 << 4);\ -t9 = (in ^ (in >> 8)) & 0x0000FF00; in ^= t9 ^ (t9 << 8);\ +temp1 = (in ^ (in >> 1)) & 0x22222222; in ^= temp1 ^ (temp1 << 1);\ +temp1 = (in ^ (in >> 2)) & 0x0C0C0C0C; in ^= temp1 ^ (temp1 << 2);\ +temp1 = (in ^ (in >> 4)) & 0x00F000F0; in ^= temp1 ^ (temp1 << 4);\ +temp1 = (in ^ (in >> 8)) & 0x0000FF00; in ^= temp1 ^ (temp1 << 8);\ } -//ʹÓÃt9 #define unpuck32(t0){\ - t9 = (t0 ^ (t0 >> 8)) & 0x0000FF00, t0 ^= t9 ^ (t9 << 8); \ - t9 = (t0 ^ (t0 >> 4)) & 0x00F000F0, t0 ^= t9 ^ (t9 << 4); \ - t9 = (t0 ^ (t0 >> 2)) & 0x0C0C0C0C, t0 ^= t9 ^ (t9 << 2); \ - t9 = (t0 ^ (t0 >> 1)) & 0x22222222, t0 ^= t9 ^ (t9 << 1); \ -} -//u32 t1, t2, t3,t8, -#define packU128FormatToFourPacket(out,in) {\ - t8 = U32BIG(((u32*)in)[0]); \ - t1 = U32BIG(((u32*)in)[1]); \ - t2 = U32BIG(((u32*)in)[2]); \ - t3 = U32BIG(((u32*)in)[3]); \ - puck32(t8); puck32(t8); \ - puck32(t1); puck32(t1); \ - puck32(t2); puck32(t2); \ - puck32(t3); puck32(t3); \ - out[3] = t3 & 0xff000000 | ((t2 >> 8) & 0x00ff0000) | ((t1 >> 16) & 0x0000ff00) | (t8 >> 24); \ - out[2] = ((t3 << 8) & 0xff000000) | (t2 & 0x00ff0000) | ((t1 >> 8) & 0x0000ff00) | ((t8 >> 16) & 0x000000ff); \ - out[1] = ((t3 << 16) & 0xff000000) | ((t2 << 8) & 0x00ff0000) | (t1 & 0x0000ff00) | ((t8 >> 8) & 0x000000ff); \ - out[0] = ((t3 << 24) & 0xff000000) | ((t2 << 16) & 0x00ff0000) | ((t1 << 8) & 0x0000ff00) | (t8 & 0x000000ff); \ -} -//u32 dataFormat[4],u32 t1, t2, t3,t8, -#define unpackU128FormatToFourPacket( out, in) {\ -memcpy(dataFormat, in, sizeof(unsigned int) * 4); \ -t3 = dataFormat[3] & 0xff000000 | ((dataFormat[2] >> 8) & 0x00ff0000) | ((dataFormat[1] >> 16) & 0x0000ff00) | (dataFormat[0] >> 24); \ -t2 = ((dataFormat[3] << 8) & 0xff000000) | (dataFormat[2] & 0x00ff0000) | ((dataFormat[1] >> 8) & 0x0000ff00) | ((dataFormat[0] >> 16) & 0x000000ff); \ -t1 = ((dataFormat[3] << 16) & 0xff000000) | ((dataFormat[2] << 8) & 0x00ff0000) | (dataFormat[1] & 0x0000ff00) | ((dataFormat[0] >> 8) & 0x000000ff); \ -t8 = ((dataFormat[3] << 24) & 0xff000000) | ((dataFormat[2] << 16) & 0x00ff0000) | ((dataFormat[1] << 8) & 0x0000ff00) | (dataFormat[0] & 0x000000ff); \ -unpuck32(t8); unpuck32(t8); \ -unpuck32(t1); unpuck32(t1); \ -unpuck32(t2); unpuck32(t2); \ -unpuck32(t3); unpuck32(t3); \ -((u32*)out)[0] = U32BIG(t8); \ -((u32*)out)[1] = U32BIG(t1); \ -((u32*)out)[2] = U32BIG(t2); \ -((u32*)out)[3] = U32BIG(t3); \ -} -//u32 t1 ;u32 t2 = -#define packU64FormatToFourPacket( out, in) {\ -t1 = U32BIG(((u32*)in)[0]); \ -t2 = U32BIG(((u32*)in)[1]); \ -puck32(t1); \ -puck32(t1); \ -puck32(t2); \ -puck32(t2); \ -out[3] = ((t2 >> 16) & 0x0000ff00) | ((t1 >> 24)); \ -out[2] = ((t2 >> 8) & 0x0000ff00) | ((t1 >> 16) & 0x000000ff); \ -out[1] = (t2 & 0x0000ff00) | ((t1 >> 8) & 0x000000ff); \ -out[0] = ((t2 << 8) & 0x0000ff00) | (t1 & 0x000000ff); \ -} -#define BIT_LOTR32_1(t0,t1,t2,t3,t4,t5,t6,t7){\ -t4= LOTR32(t3, 1);\ -t5 = t0;\ -t6 = t1; \ -t7 = t2; \ -} -#define BIT_LOTR32_16(t0,t1,t2,t3,t4,t5,t6,t7){\ -t4= LOTR32(t0, 4);\ -t5 = LOTR32(t1, 4);\ -t6 = LOTR32(t2, 4); \ -t7 = LOTR32(t3, 4); \ -} -#define BIT_LOTR32_25(t0,t1,t2,t3,t4,t5,t6,t7){\ -t4= LOTR32(t3, 7);\ -t5 = LOTR32(t0, 6);\ -t6 = LOTR32(t1, 6); \ -t7 = LOTR32(t2, 6); \ + r0 = (t0 ^ (t0 >> 8)) & 0x0000FF00, t0 ^= r0 ^ (r0 << 8); \ + r0 = (t0 ^ (t0 >> 4)) & 0x00F000F0, t0 ^= r0 ^ (r0 << 4); \ + r0 = (t0 ^ (t0 >> 2)) & 0x0C0C0C0C, t0 ^= r0 ^ (r0 << 2); \ + r0 = (t0 ^ (t0 >> 1)) & 0x22222222, t0 ^= r0 ^ (r0 << 1); \ } -#define ROUND512( arr,lunNum) {\ -s[3] ^= (arr[lunNum] >> 6) & 0x3;\ -s[2] ^= (arr[lunNum] >> 4) & 0x3;\ -s[1] ^= (arr[lunNum] >> 2) & 0x3;\ -s[0] ^= arr[lunNum] & 0x3;\ -sbox(s[0], s[4], s[8], s[12], s_temp[0], s_temp[4], s_temp[8], s_temp[12]);\ -sbox(s[1], s[5], s[9], s[13], s_temp[1], s_temp[5], s_temp[9], s_temp[13]);\ -sbox(s[2], s[6], s[10], s[14], s_temp[2], s_temp[6], s_temp[10], s_temp[14]);\ -sbox(s[3], s[7], s[11], s[15], s_temp[3], s_temp[7], s_temp[11], s_temp[15]);\ -s[0] = s_temp[0], s[1] = s_temp[1], s[2] = s_temp[2], s[3] = s_temp[3];\ -BIT_LOTR32_1(s_temp[4], s_temp[5], s_temp[6], s_temp[7], s[4], s[5], s[6], s[7]);\ -BIT_LOTR32_16(s_temp[8], s_temp[9], s_temp[10], s_temp[11], s[8], s[9], s[10], s[11]);\ -BIT_LOTR32_25(s_temp[12], s_temp[13], s_temp[14], s_temp[15], s[12], s[13], s[14], s[15]);\ -} +unsigned char constant7Format_aead[100]; + +//t1 +#define P512_ARC_1(rci) \ + do { \ + __asm__ __volatile__ ( \ + "/*add round const s0 s1 s2 s3*/ \n\t"\ + "ands %[t1] , %[rci], #0xc0\n\t" \ + "eors %[S_3], %[S_3], %[t1], LSR #6 \n\t" /*s[3] ^= (constant7Format_aead[lunNum] >> 6) & 0x3;*/\ + "ands %[t2] , %[rci], #0x30\n\t" \ + "eors %[S_2], %[S_2], %[t2], LSR #4 \n\t" /*s[2] ^= (constant7Format_aead[lunNum] >> 4) & 0x3;*/\ + "ands %[t3] , %[rci], #0xc\n\t" \ + "eors %[S_1], %[S_1], %[t3], LSR #2 \n\t" /*s[1] ^= (constant7Format_aead[lunNum] >> 2) & 0x3;*/\ + "ands %[t4] , %[rci], #0x3\n\t" \ + "eors %[S_0], %[S_0], %[t4] \n\t" /*s[0] ^= constant7Format_aead[lunNum] & 0x3;*/\ + : /* output variables - including inputs that are changed */\ + [t1] "=r" (t1), [t2] "=r" (t2), [t3] "=r" (t3), [t4] "=r" (t9), [rci] "+r" (rci),\ + [S_0] "+r" (s[0]), [S_1] "+r" (s[1]), [S_2] "+r" (s[2]),[S_3] "+r" (s[3])\ + : : );\ +}while (0) +//t1 t2 +#define P512_2SC(S1,S2,S3,S4,S5,S6,S7,S8) \ + do { \ + __asm__ __volatile__ ( \ + "/*sbox column*/ \n\t"\ + "mvns %[S_0], %[S_0] \n\t"\ + "ands %[t1], %[S_2], %[S_0] \n\t"\ + "eors %[t1], %[S_4], %[t1] \n\t"\ + "orrs %[S_4], %[S_2], %[S_4] \n\t"\ + "eors %[S_0], %[S_6], %[S_0] \n\t"\ + "eors %[S_4], %[S_4], %[S_0] \n\t"\ + "eors %[t2], %[S_2], %[S_6] \n\t"\ + "eors %[S_6], %[S_6], %[t1] \n\t"\ + "ands %[S_0], %[t1] , %[S_0] \n\t"\ + "eors %[S_0], %[t2] , %[S_0] \n\t"\ + "ands %[S_2], %[S_4], %[t2] \n\t"\ + "eors %[S_2], %[t1] , %[S_2] \n\t"\ + "/*sbox column*/ \n\t"\ + "mvns %[S_1], %[S_1] \n\t"\ + "ands %[t3], %[S_3], %[S_1] \n\t"\ + "eors %[t3], %[S_5], %[t3] \n\t"\ + "orrs %[S_5], %[S_3], %[S_5] \n\t"\ + "eors %[S_1], %[S_7], %[S_1] \n\t"\ + "eors %[S_5], %[S_5], %[S_1] \n\t"\ + "eors %[t4], %[S_3], %[S_7] \n\t"\ + "eors %[S_7], %[S_7], %[t3] \n\t"\ + "ands %[S_1], %[t3] , %[S_1] \n\t"\ + "eors %[S_1], %[t4] , %[S_1] \n\t"\ + "ands %[S_3], %[S_5], %[t4] \n\t"\ + "eors %[S_3], %[t3] , %[S_3] \n\t"\ + : /* output variables - including inputs that are changed */\ + [t1] "=r" (t1), [t2] "=r" (t2), [t3] "=r" (t3), [t4] "=r" (t9),\ + [S_0] "+r" (S1), [S_2] "+r" (S2), [S_4] "+r" (S3), [S_6] "+r" (S4) ,\ + [S_1] "+r" (S5), [S_3] "+r" (S6), [S_5] "+r" (S7), [S_7] "+r" (S8)\ + : : );\ +}while (0) +#define P512_SR_1() \ + do { \ + __asm__ __volatile__ ( \ + "/*rotate shift left 1 bit [w9 w5 w1-> (w1,1) w9 w5] */ \n\t"\ + "mov %[t1], %[S_7] \n\t"\ + "mov %[S_7], %[S_6] \n\t"\ + "mov %[S_6], %[S_5] \n\t"\ + "mov %[S_5], %[S_4] \n\t"\ + "ROR %[S_4], %[t1] , #31 \n\t"\ + "/*rotate shift left 8 bits [w10 w6 w2-> (w6,3) (w2,3) ( w10,2)]*/ \n\t"\ + "ROR %[S_11], %[S_11] , #28 \n\t"\ + "ROR %[S_10], %[S_10] , #28 \n\t"\ + "ROR %[S_9], %[S_9] , #28 \n\t"\ + "ROR %[S_8], %[S_8] , #28 \n\t"\ + : /* output variables - including inputs that are changed */\ + [t1] "=r" (t1),\ + [S_4] "+r" (s[4]), [S_8] "+r" (s[8]) ,\ + [S_5] "+r" (s[5]), [S_9] "+r" (s[9]) ,\ + [S_6] "+r" (s[6]), [S_10] "+r" (s[10]),\ + [S_7] "+r" (s[7]), [S_11] "+r" (s[11])\ + : : );\ +}while (0) + //t1 t2 +#define P512_SR_ARC_2(rci) \ + do { \ + __asm__ __volatile__ ( \ + "/*rotate shift left 25 bit [w11 w7 w3-> (w3,13) (w11,14) ( w7,14)] */ \n\t"\ + "mov %[t3], %[S_15] \n\t"\ + "ROR %[S_15], %[S_14] , #26 \n\t"\ + "ROR %[S_14], %[S_13] , #26 \n\t"\ + "ROR %[S_13], %[S_12] , #26 \n\t"\ + "ROR %[S_12], %[t3] , #25 \n\t"\ + "/*add round const s0 s1 s2 s3*/ \n\t"\ + "ands %[t1] , %[rci] , #0xc0\n\t" \ + "eors %[S_3] , %[S_3] , %[t1], LSR #6 \n\t" /*s[3] ^= (constant7Format_aead[lunNum] >> 6) & 0x3;*/\ + "ands %[t2] , %[rci] , #0x30\n\t" \ + "eors %[S_2] , %[S_2] , %[t2], LSR #4 \n\t" /*s[2] ^= (constant7Format_aead[lunNum] >> 4) & 0x3;*/\ + "ands %[t3] , %[rci] , #0xc\n\t" \ + "eors %[S_1] , %[S_1] , %[t3], LSR #2 \n\t" /*s[1] ^= (constant7Format_aead[lunNum] >> 2) & 0x3;*/\ + "ands %[t1] , %[rci] , #0x3\n\t" \ + "eors %[S_0] , %[S_0] , %[t1] \n\t" /*s[0] ^= constant7Format_aead[lunNum] & 0x3;*/\ + : /* output variables - including inputs that are changed */\ + [t1] "=r" (t1), [t2] "=r" (t2), [t3] "=r" (t3), [rci] "+r" (rci),\ + [S_0] "+r" (s[0]), [S_1] "+r" (s[1]), [S_2] "+r" (s[2]), [S_3] "+r" (s[3]),\ + [S_12] "+r" (s[12]),[S_13] "+r" (s[13]),[S_14] "+r" (s[14]),[S_15] "+r" (s[15])\ + : : );\ +}while (0) + //t1 +#define P512_SR_2() \ + do { \ + __asm__ __volatile__ ( \ + "/*rotate shift left 25 bit [w11 w7 w3-> (w3,13) (w11,14) ( w7,14)] */ \n\t"\ + "mov %[t1], %[S_15] \n\t"\ + "ROR %[S_15], %[S_14] , #26 \n\t"\ + "ROR %[S_14], %[S_13] , #26 \n\t"\ + "ROR %[S_13], %[S_12] , #26 \n\t"\ + "ROR %[S_12], %[t1] , #25 \n\t"\ + : /* output variables - including inputs that are changed */\ + [S_12] "+r" (s[12]),[S_13] "+r" (s[13]),[S_14] "+r" (s[14]),[S_15] "+r" (s[15]),\ + [t1] "=r" (t1): : );\ +}while (0) diff --git a/knot/Implementations/crypto_aead/knot256/armcortexm_2/crypto_aead.h b/knot/Implementations/crypto_aead/knot256/armcortexm_2/crypto_aead.h index cdfdf19..10ecefb 100644 --- a/knot/Implementations/crypto_aead/knot256/armcortexm_2/crypto_aead.h +++ b/knot/Implementations/crypto_aead/knot256/armcortexm_2/crypto_aead.h @@ -1,17 +1,10 @@ -int crypto_aead_encrypt( - unsigned char *c, unsigned long long *clen, - const unsigned char *m, unsigned long long mlen, - const unsigned char *ad, unsigned long long adlen, - const unsigned char *nsec, - const unsigned char *npub, - const unsigned char *k -); +int crypto_aead_encrypt(unsigned char *c, unsigned long long *clen, + const unsigned char *m, unsigned long long mlen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *nsec, const unsigned char *npub, + const unsigned char *k); -int crypto_aead_decrypt( - unsigned char *m, unsigned long long *mlen, - unsigned char *nsec, - const unsigned char *c, unsigned long long clen, - const unsigned char *ad, unsigned long long adlen, - const unsigned char *npub, - const unsigned char *k -); +int crypto_aead_decrypt(unsigned char *m, unsigned long long *mlen, + unsigned char *nsec, const unsigned char *c, unsigned long long clen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *npub, const unsigned char *k); diff --git a/knot/Implementations/crypto_aead/knot256/armcortexm_2/encrypt.c b/knot/Implementations/crypto_aead/knot256/armcortexm_2/encrypt.c index 17041b6..d30e162 100644 --- a/knot/Implementations/crypto_aead/knot256/armcortexm_2/encrypt.c +++ b/knot/Implementations/crypto_aead/knot256/armcortexm_2/encrypt.c @@ -1,308 +1,19 @@ - #include"auxFormat.h" #define aead_RATE (128 / 8) #define PR0_ROUNDS 100 #define PR_ROUNDS 52 #define PRF_ROUNDS 56 -unsigned char constant7Format_aead[127] = { - /*constant7_aead_256*/ -0x1, -0x4, -0x10, -0x40, -0x2, -0x8, -0x21, -0x5, -0x14, -0x50, -0x42, -0xa, -0x29, -0x24, -0x11, -0x44, -0x12, -0x48, -0x23, -0xd, -0x35, -0x55, -0x56, -0x5a, -0x6b, -0x2e, -0x38, -0x60, -0x3, -0xc, -0x31, -0x45, -0x16, -0x58, -0x63, -0xf, -0x3d, -0x74, -0x53, -0x4e, -0x3b, -0x6c, -0x32, -0x49, -0x27, -0x1d, -0x75, -0x57, -0x5e, -0x7b, -0x6e, -0x3a, -0x68, -0x22, -0x9, -0x25, -0x15, -0x54, -0x52, -0x4a, -0x2b, -0x2c, -0x30, -0x41, -0x6, -0x18, -0x61, -0x7, -0x1c, -0x71, -0x47, -0x1e, -0x79, -0x66, -0x1b, -0x6d, -0x36, -0x59, -0x67, -0x1f, -0x7d, -0x76, -0x5b, -0x6f, -0x3e, -0x78, -0x62, -0xb, -0x2d, -0x34, -0x51, -0x46, -0x1a, -0x69, -0x26, -0x19, -0x65, -0x17, -0x5c, -0x73, -0x4f, -0x3f, -0x7c, -0x72, -0x4b, -0x2f, -0x3c, -0x70, -0x43, -0xe, -0x39, -0x64, -0x13, -0x4c, -0x33, -0x4d, -0x37, -0x5d, -0x77, -0x5f, -0x7f, -0x7e, -0x7a, -0x6a, -0x2a, -0x28, -0x20, -}; - - - - -/* State - * w12 w8 w4 w0 - * w13 w9 w5 w1 - * w14 w10 w6 w2 - * w15 w11 w7 w3 - * - */ - static void permutation512(unsigned int *in, int rounds, unsigned char *rc) { - uint32_t w0, w1, w2, w3, w4, w5, w6, w7; - uint32_t w8, w9, w10, w11, w12, w13, w14, w15; - uint32_t s0, s1, s2,s3; - uint32_t i=0; - __asm volatile( - "ldr w0, [in] \n\t" - "ldr w4, [in, #4] \n\t" - "ldr w8, [in, #8] \n\t" - "ldr w12, [in, #12] \n\t" - "ldr w1, [in, #16] \n\t" - "ldr w5, [in, #20] \n\t" - "ldr w9, [in, #24] \n\t" - "ldr w13, [in, #28] \n\t" - "ldr w2, [in, #32] \n\t" - "ldr w6, [in, #36] \n\t" - "ldr w10, [in, #40] \n\t" - "ldr w14, [in, #44] \n\t" - "ldr w3, [in, #48] \n\t" - "ldr w7, [in, #52] \n\t" - "ldr w11, [in, #56] \n\t" - "ldr w15, [in, #60] \n\t" - "enc_loop: \n\t" - "/*add round const s0 s1 s2 s3*/ \n\t" - "ldrb s3, [rc] \n\t" - - "LSR s0, s3, #6 \n\t" - "and s0, s0, 0x3 \n\t" - - "LSR s1, s3, #4 \n\t" - "and s1, s1, 0x3 \n\t" - - "LSR s2, s3, #2 \n\t" - "and s2, s2, 0x3 \n\t" - - "and s3, s3, 0x3 \n\t" - - "eors w12, w12, s0 \n\t" - "eors w8, w8, s1 \n\t" - "eors w4, w4, s2 \n\t" - "eors w0, w0, s3 \n\t" - "/*sbox first column*/ \n\t" - "mvns w0, w0 \n\t" - "ands s0, w1, w0 \n\t" - "eors s0, w2, s0 \n\t" - "orrs w2, w1, w2 \n\t" - "eors w0, w3, w0 \n\t" - "eors w2, w2, w0 \n\t" - "eors s1, w1, w3 \n\t" - "eors w3, w3, s0 \n\t" - "ands w0, s0, w0 \n\t" - "eors w0, s1, w0 \n\t" - "ands w1, w2, s1 \n\t" - "eors w1, s0, w1 \n\t" - "/*sbox second column*/ \n\t" - "mvns w4, w4 \n\t" - "ands s0, w5, w4 \n\t" - "eors s0, w6, s0 \n\t" - "orrs w6, w5, w6 \n\t" - "eors w4, w7, w4 \n\t" - "eors w6, w6, w4 \n\t" - "eors s1, w5, w7 \n\t" - "eors w7, w7, s0 \n\t" - "ands w4, s0, w4 \n\t" - "eors w4, s1, w4 \n\t" - "ands w5, w6, s1 \n\t" - "eors w5, s0, w5 \n\t" - "/*sbox third column*/ \n\t" - "mvns w8, w8 \n\t" - "ands s0, w9, w8 \n\t" - "eors s0, w10, s0 \n\t" - "orrs w10, w9, w10 \n\t" - "eors w8, w11, w8 \n\t" - "eors w10, w10, w8 \n\t" - "eors s1, w9, w11 \n\t" - "eors w11, w11, s0 \n\t" - "ands w8, s0, w8 \n\t" - "eors w8, s1, w8 \n\t" - "ands w9, w10, s1 \n\t" - "eors w9, s0, w9 \n\t" - "/*sbox forth column*/ \n\t" - "mvns w12, w12 \n\t" - "ands s0, w13, w12 \n\t" - "eors s0, w14, s0 \n\t" - "orrs w14, w13, w14 \n\t" - "eors w12, w15, w12 \n\t" - "eors w14, w14, w12 \n\t" - "eors s1, w13, w15 \n\t" - "eors w15, w15, s0 \n\t" - "ands w12, s0, w12 \n\t" - "eors w12, s1, w12 \n\t" - "ands w13, w14, s1 \n\t" - "eors w13, s0, w13 \n\t" - "/*rotate shift left 1 bit [ w13 w9 w5 w1-> w9 w5 w1 (w13,1)] */ \n\t" - "mov s0, w13 \n\t" - "mov w13, w9 \n\t" - "mov w9, w5 \n\t" - "mov w5, w1 \n\t" - "ROR w1, s0 , #31 \n\t" - "/*rotate shift left 8 bits [w14 w10 w6 w2->£¨w14,4) £¨w10,4) (w6,4) ( w2,4)]*/ \n\t" - "ROR w14, w14 , #28 \n\t" - "ROR w10, w10 , #28 \n\t" - "ROR w6, w6 , #28 \n\t" - "ROR w2, w2 , #28 \n\t" - "/*rotate shift left 25 bit [w15 w11 w7 w3-> £¨w11,13) (w7,14) ( w3,14) ( w15,14)] */ \n\t" - "mov s0, w15 \n\t" - "ROR w15, w11 , #26 \n\t" - "ROR w11, w7 , #26 \n\t" - "ROR w7 , w3 , #26 \n\t" - "ROR w3 , s0 , #25 \n\t" - "/*loop control*/ \n\t" - "adds rc, rc, #1 \n\t" - "subs rounds, rounds, #1 \n\t" - "bne enc_loop \n\t" - "str w0, [in] \n\t" - "str w4, [in, #4] \n\t" - "str w8, [in, #8] \n\t" - "str w12, [in, #12] \n\t" - "str w1, [in, #16] \n\t" - "str w5, [in, #20] \n\t" - "str w9, [in, #24] \n\t" - "str w13, [in, #28] \n\t" - "str w2, [in, #32] \n\t" - "str w6, [in, #36] \n\t" - "str w10, [in, #40] \n\t" - "str w14, [in, #44] \n\t" - "str w3, [in, #48] \n\t" - "str w7, [in, #52] \n\t" - "str w11, [in, #56] \n\t" - "str w15, [in, #60] \n\t" - ); +void Initialize(u32 *s, const unsigned char *npub, const unsigned char *k) { + packU128FormatToFourPacket(s, npub); + packU128FormatToFourPacket(s + 4, npub + 16); + packU128FormatToFourPacket(s + 8, k); + packU128FormatToFourPacket(s + 12, k + 16); + P512(s, constant7Format_aead, PR0_ROUNDS); } - - -int crypto_aead_encrypt( - unsigned char *c, unsigned long long *clen, - const unsigned char *m, unsigned long long mlen, - const unsigned char *ad, unsigned long long adlen, - const unsigned char *nsec, - const unsigned char *npub, - const unsigned char *k -) { - u32 i, j; - u32 s_temp[16] = { 0 }; - u32 t1, t2, t3, t5, t6, t8, t9, t11; - // initialization - u32 s[16] = { 0 }; +void ProcessAssocData(u32 *s, const u8* ad, unsigned long long adlen) { u32 dataFormat[4] = { 0 }; - u8 tempData[16] = {0}; - *clen = mlen + CRYPTO_ABYTES; - //initialization - packU128FormatToFourPacket(s, npub); - packU128FormatToFourPacket((s + 4), (npub + 16)); - packU128FormatToFourPacket((s + 8), k); - packU128FormatToFourPacket((s + 12), (k + 16)); - permutation512(s,PR0_ROUNDS,constant7Format_aead); - // process associated data + u8 tempData[16] = { 0 }; if (adlen) { while (adlen >= aead_RATE) { packU128FormatToFourPacket(dataFormat, ad); @@ -310,7 +21,7 @@ int crypto_aead_encrypt( s[1] ^= dataFormat[1]; s[2] ^= dataFormat[2]; s[3] ^= dataFormat[3]; - permutation512(s,PR_ROUNDS,constant7Format_aead); + P512(s, constant7Format_aead, PR_ROUNDS); adlen -= aead_RATE; ad += aead_RATE; } @@ -322,9 +33,14 @@ int crypto_aead_encrypt( s[1] ^= dataFormat[1]; s[2] ^= dataFormat[2]; s[3] ^= dataFormat[3]; - permutation512(s,PR_ROUNDS,constant7Format_aead); + P512(s, constant7Format_aead, PR_ROUNDS); } s[15] ^= 0x80000000; +} +void ProcessPlaintext(u32 *s, const u8* m, unsigned long long mlen, + unsigned char *c) { + u32 dataFormat[4] = { 0 }; + u8 tempData[16] = { 0 }; if (mlen) { while (mlen >= aead_RATE) { packU128FormatToFourPacket(dataFormat, m); @@ -333,14 +49,14 @@ int crypto_aead_encrypt( s[2] ^= dataFormat[2]; s[3] ^= dataFormat[3]; unpackU128FormatToFourPacket(c, s); - permutation512(s,PR_ROUNDS,constant7Format_aead); + P512(s, constant7Format_aead, PR_ROUNDS); mlen -= aead_RATE; m += aead_RATE; c += aead_RATE; } memset(tempData, 0, sizeof(tempData)); memcpy(tempData, m, mlen * sizeof(unsigned char)); - tempData[mlen]= 0x01; + tempData[mlen] = 0x01; packU128FormatToFourPacket(dataFormat, tempData); s[0] ^= dataFormat[0]; s[1] ^= dataFormat[1]; @@ -348,105 +64,92 @@ int crypto_aead_encrypt( s[3] ^= dataFormat[3]; unpackU128FormatToFourPacket(tempData, s); memcpy(c, tempData, mlen * sizeof(unsigned char)); - c += mlen; + //c += mlen; } - // finalization - permutation512(s,PRF_ROUNDS,constant7Format_aead); +} + +void Finalize_GenerateTag(u32 *s, unsigned char *c) { + P512(s, constant7Format_aead, PRF_ROUNDS); // return tag unpackU128FormatToFourPacket(c, s); - unpackU128FormatToFourPacket((c+16), (s+4)); - return 0; + unpackU128FormatToFourPacket(c + 16, s + 4); } - -int crypto_aead_decrypt( - unsigned char *m, unsigned long long *mlen, - unsigned char *nsec, - const unsigned char *c, unsigned long long clen, - const unsigned char *ad, unsigned long long adlen, - const unsigned char *npub, - const unsigned char *k -){ - u32 s_temp[16] = { 0 }; - u32 t1, t2, t3, t5, t6, t8, t9, t11; - u8 i, j; - // initialization - u32 s[16] = { 0 }; - u32 dataFormat[4] = { 0 }; - u32 dataFormat_1[4] = { 0 }; - u32 dataFormat_2[4] = { 0 }; - u8 tempData[16] = { 0 }; - u8 tempU8[64] = { 0 }; - - if (clen < CRYPTO_ABYTES) +int Finalize_VerifyTag(u32 *s, const unsigned char *c, unsigned char *m, + unsigned long long *mlen) { + u8 tempU8[32] = { 0 }; + P512(s, constant7Format_aead, PRF_ROUNDS); + unpackU128FormatToFourPacket(tempU8, s); + unpackU128FormatToFourPacket(tempU8 + 16, s + 4); + if (memcmp((void*) tempU8, (void*) (c), CRYPTO_ABYTES)) { + memset(m, 0, sizeof(unsigned char) * (*mlen)); + *mlen = 0; return -1; - *mlen = clen - CRYPTO_ABYTES; - //initialization - packU128FormatToFourPacket(s, npub); - packU128FormatToFourPacket((s + 4), (npub + 16)); - packU128FormatToFourPacket((s + 8), k); - packU128FormatToFourPacket((s + 12), (k + 16)); - permutation512(s,PR0_ROUNDS,constant7Format_aead); - // process associated data - if (adlen) { - while (adlen >= aead_RATE) { - packU128FormatToFourPacket(dataFormat, ad); - s[0] ^= dataFormat[0]; - s[1] ^= dataFormat[1]; - s[2] ^= dataFormat[2]; - s[3] ^= dataFormat[3]; - permutation512(s,PR_ROUNDS,constant7Format_aead); - adlen -= aead_RATE; - ad += aead_RATE; - } - memset(tempData, 0, sizeof(tempData)); - - memcpy(tempData, ad, adlen * sizeof(unsigned char)); - tempData[adlen] = 0x01; - packU128FormatToFourPacket(dataFormat, tempData); - s[0] ^= dataFormat[0]; - s[1] ^= dataFormat[1]; - s[2] ^= dataFormat[2]; - s[3] ^= dataFormat[3]; - permutation512(s,PR_ROUNDS,constant7Format_aead); } - s[15] ^= 0x80000000; - clen = clen - CRYPTO_KEYBYTES; - + return 0; +} +void ProcessCiphertext(u32 *s, unsigned char *m, const unsigned char *c, + unsigned long long clen) { + u32 dataFormat[8] = { 0 }; + u32 dataFormat_1[4] = { 0 }; + u8 i, tempU8[64] = { 0 }; if (clen) { while (clen >= aead_RATE) { - packU128FormatToFourPacket(dataFormat_2, c); - dataFormat_1[0] = s[0] ^ dataFormat_2[0]; - dataFormat_1[1] = s[1] ^ dataFormat_2[1]; - dataFormat_1[2] = s[2] ^ dataFormat_2[2]; - dataFormat_1[3] = s[3] ^ dataFormat_2[3]; + packU128FormatToFourPacket(dataFormat, c); + dataFormat_1[0] = s[0] ^ dataFormat[0]; + dataFormat_1[1] = s[1] ^ dataFormat[1]; + dataFormat_1[2] = s[2] ^ dataFormat[2]; + dataFormat_1[3] = s[3] ^ dataFormat[3]; unpackU128FormatToFourPacket(m, dataFormat_1); - s[0] = dataFormat_2[0]; - s[1] = dataFormat_2[1]; - s[2] = dataFormat_2[2]; - s[3] = dataFormat_2[3]; - permutation512(s,PR_ROUNDS,constant7Format_aead); + s[0] = dataFormat[0]; + s[1] = dataFormat[1]; + s[2] = dataFormat[2]; + s[3] = dataFormat[3]; + P512(s, constant7Format_aead, PR_ROUNDS); clen -= aead_RATE; m += aead_RATE; c += aead_RATE; } unpackU128FormatToFourPacket(tempU8, s); - for (i = 0; i < clen; ++i, ++m, ++c) - { + for (i = 0; i < clen; ++i, ++m, ++c) { *m = tempU8[i] ^ *c; tempU8[i] = *c; } tempU8[i] ^= 0x01; packU128FormatToFourPacket(s, tempU8); } +} + +int crypto_aead_encrypt(unsigned char *c, unsigned long long *clen, + const unsigned char *m, unsigned long long mlen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *nsec, const unsigned char *npub, + const unsigned char *k) { + u32 s[16] = { 0 }; + *clen = mlen + CRYPTO_ABYTES; + //initialization + Initialize(s, npub, k); + // process associated data + + ProcessAssocData(s, ad, adlen); + + ProcessPlaintext(s, m, mlen, c); + // finalization - permutation512(s,PRF_ROUNDS,constant7Format_aead); - // return tag - packU128FormatToFourPacket(dataFormat, c); - packU128FormatToFourPacket(dataFormat_1, (c + 16)); - if (dataFormat[0] != s[0] || dataFormat[1] != s[1] || dataFormat[2] != s[2] || dataFormat[3] != s[3] - || dataFormat_1[0] != s[4] || dataFormat_1[1] != s[5] || dataFormat_1[2] != s[6] || dataFormat_1[3] != s[7]) { - return -1; - } + Finalize_GenerateTag(s, c + mlen); return 0; - -} \ No newline at end of file +} +int crypto_aead_decrypt(unsigned char *m, unsigned long long *mlen, + unsigned char *nsec, const unsigned char *c, unsigned long long clen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *npub, const unsigned char *k) { + u32 s[16] = { 0 }; + if (clen < CRYPTO_ABYTES) + return -1; + *mlen = clen - CRYPTO_ABYTES; + //initialization + Initialize(s, npub, k); + ProcessAssocData(s, ad, adlen); + ProcessCiphertext(s, m, c, clen - CRYPTO_ABYTES); + // finalization + return Finalize_VerifyTag(s, c + clen - CRYPTO_KEYBYTES, m, mlen); +} diff --git a/knot/Implementations/crypto_aead/knot256/armcortexm_4/api.h b/knot/Implementations/crypto_aead/knot256/armcortexm_4/api.h new file mode 100644 index 0000000..3eb57e5 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot256/armcortexm_4/api.h @@ -0,0 +1,6 @@ +#define CRYPTO_KEYBYTES 32 //256/8=32 +#define CRYPTO_NSECBYTES 0 +#define CRYPTO_NPUBBYTES 32 +#define CRYPTO_ABYTES 32 +#define CRYPTO_NOOVERLAP 1 + diff --git a/knot/Implementations/crypto_aead/knot256/armcortexm_4/auxFormat.c b/knot/Implementations/crypto_aead/knot256/armcortexm_4/auxFormat.c new file mode 100644 index 0000000..63f20be --- /dev/null +++ b/knot/Implementations/crypto_aead/knot256/armcortexm_4/auxFormat.c @@ -0,0 +1,82 @@ +#include"auxFormat.h" + +void P512(unsigned int *s, unsigned char *round, unsigned char lunNum) { + u32 s_temp[16] = { 0 }; + u32 t1, t2, t3, t5, t6, t8, t9, t11; + unsigned char i; + for (i = 0; i < lunNum; i++) { + s[3] ^= (round[i] >> 6) & 0x3; + s[2] ^= (round[i] >> 4) & 0x3; + s[1] ^= (round[i] >> 2) & 0x3; + s[0] ^= round[i] & 0x3; + sbox(s[3], s[7], s[11], s[15], s_temp[7], s_temp[11], s_temp[15]); + sbox(s[2], s[6], s[10], s[14], s[7], s_temp[10], s_temp[14]); + sbox(s[1], s[5], s[9], s[13], s[6], s_temp[9], s_temp[13]); + sbox(s[0], s[4], s[8], s[12], s[5], s_temp[8], s_temp[12]); + s[4] = LOTR32(s_temp[7], 1); + BIT_LOTR32_16(s_temp[8], s_temp[9], s_temp[10], s_temp[11], s[8], s[9], + s[10], s[11]); + BIT_LOTR32_25(s_temp[12], s_temp[13], s_temp[14], s_temp[15], s[12], + s[13], s[14], s[15]); + + } +} +void packU128FormatToFourPacket(u32 * out, u8 * in) { + u32 t0 = U32BIG(((u32* )in)[0]); + u32 t1 = U32BIG(((u32* )in)[1]); + u32 t2 = U32BIG(((u32* )in)[2]); + u32 t3 = U32BIG(((u32* )in)[3]); + u32 temp1; + puck32(t0); + puck32(t0); + puck32(t1); + puck32(t1); + puck32(t2); + puck32(t2); + puck32(t3); + puck32(t3); + out[3] = (t3 & 0xff000000) | ((t2 >> 8) & 0x00ff0000) + | ((t1 >> 16) & 0x0000ff00) | (t0 >> 24); + out[2] = ((t3 << 8) & 0xff000000) | (t2 & 0x00ff0000) + | ((t1 >> 8) & 0x0000ff00) | ((t0 >> 16) & 0x000000ff); + out[1] = ((t3 << 16) & 0xff000000) | ((t2 << 8) & 0x00ff0000) + | (t1 & 0x0000ff00) | ((t0 >> 8) & 0x000000ff); + out[0] = ((t3 << 24) & 0xff000000) | ((t2 << 16) & 0x00ff0000) + | ((t1 << 8) & 0x0000ff00) | (t0 & 0x000000ff); +} +void unpackU128FormatToFourPacket(u8 * out, u32 * in) { + u32 t[4] = { 0 }; + u32 r0; + t[3] = (in[3] & 0xff000000 )| ((in[2] >> 8) & 0x00ff0000) + | ((in[1] >> 16) & 0x0000ff00) | (in[0] >> 24); + t[2] = ((in[3] << 8) & 0xff000000) | (in[2] & 0x00ff0000) + | ((in[1] >> 8) & 0x0000ff00) | ((in[0] >> 16) & 0x000000ff); + t[1] = ((in[3] << 16) & 0xff000000) | ((in[2] << 8) & 0x00ff0000) + | (in[1] & 0x0000ff00) | ((in[0] >> 8) & 0x000000ff); + t[0] = ((in[3] << 24) & 0xff000000) | ((in[2] << 16) & 0x00ff0000) + | ((in[1] << 8) & 0x0000ff00) | (in[0] & 0x000000ff); + unpuck32(t[0]); + unpuck32(t[0]); + unpuck32(t[1]); + unpuck32(t[1]); + unpuck32(t[2]); + unpuck32(t[2]); + unpuck32(t[3]); + unpuck32(t[3]); + memcpy(out, t, 16 * sizeof(unsigned char)); +} + + +unsigned char constant7Format_aead[100] = { +/*constant7_aead_256*/ +0x1, 0x4, 0x10, 0x40, 0x2, 0x8, 0x21, 0x5, 0x14, 0x50, 0x42, 0xa, 0x29, 0x24, + 0x11, 0x44, 0x12, 0x48, 0x23, 0xd, 0x35, 0x55, 0x56, 0x5a, 0x6b, 0x2e, + 0x38, 0x60, 0x3, 0xc, 0x31, 0x45, 0x16, 0x58, 0x63, 0xf, 0x3d, 0x74, + 0x53, 0x4e, 0x3b, 0x6c, 0x32, 0x49, 0x27, 0x1d, 0x75, 0x57, 0x5e, 0x7b, + 0x6e, 0x3a, 0x68, 0x22, 0x9, 0x25, 0x15, 0x54, 0x52, 0x4a, 0x2b, 0x2c, + 0x30, 0x41, 0x6, 0x18, 0x61, 0x7, 0x1c, 0x71, 0x47, 0x1e, 0x79, 0x66, + 0x1b, 0x6d, 0x36, 0x59, 0x67, 0x1f, 0x7d, 0x76, 0x5b, 0x6f, 0x3e, 0x78, + 0x62, 0xb, 0x2d, 0x34, 0x51, 0x46, 0x1a, 0x69, 0x26, 0x19, 0x65, 0x17, + 0x5c, 0x73, + +}; diff --git a/knot/Implementations/crypto_aead/knot256/armcortexm_4/auxFormat.h b/knot/Implementations/crypto_aead/knot256/armcortexm_4/auxFormat.h new file mode 100644 index 0000000..37a8c45 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot256/armcortexm_4/auxFormat.h @@ -0,0 +1,49 @@ +#include"crypto_aead.h" +#include"api.h" +#include +#define U32BIG(x) (x) + +#define ARR_SIZE(a) (sizeof((a))/sizeof((a[0]))) +#define LOTR32(x,n) (((x)<<(n))|((x)>>(32-(n)))) + +#define sbox(a, b, c, d, f, g, h) \ +{ \ + t1 = ~a; t2 = b & t1;t3 = c ^ t2; h = d ^ t3; t5 = b | c; t6 = d ^ t1; g = t5 ^ t6; t8 = b ^ d; t9 = t3 & t6; a = t8 ^ t9; t11 = g & t8; f = t3 ^ t11; \ +} + +typedef unsigned char u8; +typedef unsigned int u32; +typedef unsigned long long u64; +void printU8(char name[], u8 var[], long len, int offset); + +//new +void puckU8FormatToFourPacket(u8 in, u8 *out); + +#define puck32(in)\ +{\ +temp1 = (in ^ (in >> 1)) & 0x22222222; in ^= temp1 ^ (temp1 << 1);\ +temp1 = (in ^ (in >> 2)) & 0x0C0C0C0C; in ^= temp1 ^ (temp1 << 2);\ +temp1 = (in ^ (in >> 4)) & 0x00F000F0; in ^= temp1 ^ (temp1 << 4);\ +temp1 = (in ^ (in >> 8)) & 0x0000FF00; in ^= temp1 ^ (temp1 << 8);\ +} +#define unpuck32(t0){\ + r0 = (t0 ^ (t0 >> 8)) & 0x0000FF00, t0 ^= r0 ^ (r0 << 8); \ + r0 = (t0 ^ (t0 >> 4)) & 0x00F000F0, t0 ^= r0 ^ (r0 << 4); \ + r0 = (t0 ^ (t0 >> 2)) & 0x0C0C0C0C, t0 ^= r0 ^ (r0 << 2); \ + r0 = (t0 ^ (t0 >> 1)) & 0x22222222, t0 ^= r0 ^ (r0 << 1); \ +} + +#define BIT_LOTR32_16(t0,t1,t2,t3,t4,t5,t6,t7){\ +t4= LOTR32(t0, 4);\ +t5 = LOTR32(t1, 4);\ +t6 = LOTR32(t2, 4); \ +t7 = LOTR32(t3, 4); \ +} +#define BIT_LOTR32_25(t0,t1,t2,t3,t4,t5,t6,t7){\ +t4= LOTR32(t3, 7);\ +t5 = LOTR32(t0, 6);\ +t6 = LOTR32(t1, 6); \ +t7 = LOTR32(t2, 6); \ +} + +unsigned char constant7Format_aead[100]; diff --git a/knot/Implementations/crypto_aead/knot256/armcortexm_4/crypto_aead.h b/knot/Implementations/crypto_aead/knot256/armcortexm_4/crypto_aead.h new file mode 100644 index 0000000..10ecefb --- /dev/null +++ b/knot/Implementations/crypto_aead/knot256/armcortexm_4/crypto_aead.h @@ -0,0 +1,10 @@ +int crypto_aead_encrypt(unsigned char *c, unsigned long long *clen, + const unsigned char *m, unsigned long long mlen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *nsec, const unsigned char *npub, + const unsigned char *k); + +int crypto_aead_decrypt(unsigned char *m, unsigned long long *mlen, + unsigned char *nsec, const unsigned char *c, unsigned long long clen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *npub, const unsigned char *k); diff --git a/knot/Implementations/crypto_aead/knot256/armcortexm_4/encrypt.c b/knot/Implementations/crypto_aead/knot256/armcortexm_4/encrypt.c new file mode 100644 index 0000000..31a9ce9 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot256/armcortexm_4/encrypt.c @@ -0,0 +1,153 @@ +#include"auxFormat.h" + +#define aead_RATE (128 / 8) +#define PR0_ROUNDS 100 +#define PR_ROUNDS 52 +#define PRF_ROUNDS 56 +void Initialize(u32 *s, const unsigned char *npub, const unsigned char *k) { + packU128FormatToFourPacket(s, npub); + packU128FormatToFourPacket(s + 4, npub + 16); + packU128FormatToFourPacket(s + 8, k); + packU128FormatToFourPacket(s + 12, k + 16); + P512(s, constant7Format_aead, PR0_ROUNDS); +} +void ProcessAssocData(u32 *s, const u8* ad, unsigned long long adlen) { + + u32 dataFormat[4] = { 0 }; + u8 tempData[16] = { 0 }; + if (adlen) { + while (adlen >= aead_RATE) { + packU128FormatToFourPacket(dataFormat, ad); + s[0] ^= dataFormat[0]; + s[1] ^= dataFormat[1]; + s[2] ^= dataFormat[2]; + s[3] ^= dataFormat[3]; + P512(s, constant7Format_aead, PR_ROUNDS); + adlen -= aead_RATE; + ad += aead_RATE; + } + memset(tempData, 0, sizeof(tempData)); + memcpy(tempData, ad, adlen * sizeof(unsigned char)); + tempData[adlen] = 0x01; + packU128FormatToFourPacket(dataFormat, tempData); + s[0] ^= dataFormat[0]; + s[1] ^= dataFormat[1]; + s[2] ^= dataFormat[2]; + s[3] ^= dataFormat[3]; + P512(s, constant7Format_aead, PR_ROUNDS); + } + s[15] ^= 0x80000000; +} +void ProcessPlaintext(u32 *s, const u8* m, unsigned long long mlen, + unsigned char *c) { + u32 dataFormat[4] = { 0 }; + u8 tempData[16] = { 0 }; + if (mlen) { + while (mlen >= aead_RATE) { + packU128FormatToFourPacket(dataFormat, m); + s[0] ^= dataFormat[0]; + s[1] ^= dataFormat[1]; + s[2] ^= dataFormat[2]; + s[3] ^= dataFormat[3]; + unpackU128FormatToFourPacket(c, s); + P512(s, constant7Format_aead, PR_ROUNDS); + mlen -= aead_RATE; + m += aead_RATE; + c += aead_RATE; + } + memset(tempData, 0, sizeof(tempData)); + memcpy(tempData, m, mlen * sizeof(unsigned char)); + tempData[mlen] = 0x01; + packU128FormatToFourPacket(dataFormat, tempData); + s[0] ^= dataFormat[0]; + s[1] ^= dataFormat[1]; + s[2] ^= dataFormat[2]; + s[3] ^= dataFormat[3]; + unpackU128FormatToFourPacket(tempData, s); + memcpy(c, tempData, mlen * sizeof(unsigned char)); + //c += mlen; + } +} + +void Finalize_GenerateTag(u32 *s, unsigned char *c) { + P512(s, constant7Format_aead, PRF_ROUNDS); + // return tag + unpackU128FormatToFourPacket(c, s); + unpackU128FormatToFourPacket(c + 16, s + 4); +} +int Finalize_VerifyTag(u32 *s, const unsigned char *c, unsigned char *m, + unsigned long long *mlen) { + u8 tempU8[32] = { 0 }; + P512(s, constant7Format_aead, PRF_ROUNDS); + unpackU128FormatToFourPacket(tempU8, s); + unpackU128FormatToFourPacket(tempU8 + 16, s + 4); + if (memcmp((void*) tempU8, (void*) (c), CRYPTO_ABYTES)) { + memset(m, 0, sizeof(unsigned char) * (*mlen)); + *mlen = 0; + return -1; + } + return 0; +} +void ProcessCiphertext(u32 *s, unsigned char *m, const unsigned char *c, + unsigned long long clen) { + u32 dataFormat[8] = { 0 }; + u32 dataFormat_1[4] = { 0 }; + u8 i, tempU8[64] = { 0 }; + if (clen) { + while (clen >= aead_RATE) { + packU128FormatToFourPacket(dataFormat, c); + dataFormat_1[0] = s[0] ^ dataFormat[0]; + dataFormat_1[1] = s[1] ^ dataFormat[1]; + dataFormat_1[2] = s[2] ^ dataFormat[2]; + dataFormat_1[3] = s[3] ^ dataFormat[3]; + unpackU128FormatToFourPacket(m, dataFormat_1); + s[0] = dataFormat[0]; + s[1] = dataFormat[1]; + s[2] = dataFormat[2]; + s[3] = dataFormat[3]; + P512(s, constant7Format_aead, PR_ROUNDS); + clen -= aead_RATE; + m += aead_RATE; + c += aead_RATE; + } + unpackU128FormatToFourPacket(tempU8, s); + for (i = 0; i < clen; ++i, ++m, ++c) { + *m = tempU8[i] ^ *c; + tempU8[i] = *c; + } + tempU8[i] ^= 0x01; + packU128FormatToFourPacket(s, tempU8); + } +} + +int crypto_aead_encrypt(unsigned char *c, unsigned long long *clen, + const unsigned char *m, unsigned long long mlen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *nsec, const unsigned char *npub, + const unsigned char *k) { + u32 s[16] = { 0 }; + *clen = mlen + CRYPTO_ABYTES; + //initialization + Initialize(s, npub, k); + // process associated data + ProcessAssocData(s, ad, adlen); + ProcessPlaintext(s, m, mlen, c); + // finalization + Finalize_GenerateTag(s, c + mlen); + return 0; +} +int crypto_aead_decrypt(unsigned char *m, unsigned long long *mlen, + unsigned char *nsec, const unsigned char *c, unsigned long long clen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *npub, const unsigned char *k) { + u32 s[16] = { 0 }; + if (clen < CRYPTO_ABYTES) + return -1; + *mlen = clen - CRYPTO_ABYTES; + //initialization + Initialize(s, npub, k); + ProcessAssocData(s, ad, adlen); + ProcessCiphertext(s, m, c, clen - CRYPTO_ABYTES); + // finalization + return Finalize_VerifyTag(s, c + clen - CRYPTO_KEYBYTES, m, mlen); +} diff --git a/knot/Implementations/crypto_aead/knot256/avr8_lowrom/api.h b/knot/Implementations/crypto_aead/knot256/avr8_lowrom/api.h new file mode 100644 index 0000000..5c0f032 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot256/avr8_lowrom/api.h @@ -0,0 +1,5 @@ +#define CRYPTO_KEYBYTES 32 +#define CRYPTO_NSECBYTES 0 +#define CRYPTO_NPUBBYTES 32 +#define CRYPTO_ABYTES 32 +#define CRYPTO_NOOVERLAP 1 diff --git a/knot/Implementations/crypto_aead/knot256/avr8_lowrom/assist.h b/knot/Implementations/crypto_aead/knot256/avr8_lowrom/assist.h new file mode 100644 index 0000000..cb903a5 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot256/avr8_lowrom/assist.h @@ -0,0 +1,140 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by KNOT Team * +; ********************************************** +; +.macro LFSR6_MACRO + bst rc, 5 + bld tmp0, 0 + bst rc, 4 + bld tmp1, 0 + eor tmp0, tmp1 + ror tmp0 + rol rc + andi rc, 0x3F +.endm + +.macro LFSR7_MACRO + bst rc, 6 + bld tmp0, 0 + bst rc, 5 + bld tmp1, 0 + eor tmp0, tmp1 + ror tmp0 + rol rc + andi rc, 0x7F +.endm + +.macro LFSR8_MACRO + bst rc, 7 + bld tmp0, 0 + bst rc, 5 + bld tmp1, 0 + eor tmp0, tmp1 + bst rc, 4 + bld tmp1, 0 + eor tmp0, tmp1 + bst rc, 3 + bld tmp1, 0 + eor tmp0, tmp1 + ror tmp0 + rol rc +.endm + +.macro Sbox i0, i1, i2, i3 + mov tmp0, \i1 + com \i0 + and \i1, \i0 + eor \i1, \i2 + or \i2, tmp0 + eor \i0, \i3 + eor \i2, \i0 + eor tmp0, \i3 + and \i0, \i1 + eor \i3, \i1 + eor \i0, tmp0 + and tmp0, \i2 + eor \i1, tmp0 +.endm + +.macro PUSH_CONFLICT + push r16 + push r17 + push r18 + push r19 + + push r23 + push r24 + + push r26 + push r27 + push r28 + push r29 + push r30 + push r31 +.endm + +.macro POP_CONFLICT + pop r31 + pop r30 + pop r29 + pop r28 + pop r27 + pop r26 + + pop r24 + pop r23 + + pop r19 + pop r18 + pop r17 + pop r16 +.endm + +.macro PUSH_ALL + push r2 + push r3 + push r4 + push r5 + push r6 + push r7 + push r8 + push r9 + push r10 + push r11 + push r12 + push r13 + push r14 + push r15 + push r16 + push r17 + push r28 + push r29 +.endm + +.macro POP_ALL + pop r29 + pop r28 + pop r17 + pop r16 + pop r15 + pop r14 + pop r13 + pop r12 + pop r11 + pop r10 + pop r9 + pop r8 + pop r7 + pop r6 + pop r5 + pop r4 + pop r3 + pop r2 + clr r1 +.endm \ No newline at end of file diff --git a/knot/Implementations/crypto_aead/knot256/avr8_lowrom/config.h b/knot/Implementations/crypto_aead/knot256/avr8_lowrom/config.h new file mode 100644 index 0000000..8fb6034 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot256/avr8_lowrom/config.h @@ -0,0 +1,131 @@ +#ifndef __CONFIG_H__ +#define __CONFIG_H__ + +#define CRYPTO_AEAD +//#define CRYPTO_HASH + +#define MAX_MESSAGE_LENGTH 128 + +#define STATE_INBITS 512 +/* For CRYPTO_AEAD */ +#define CRYPTO_KEYBITS 256 +/* For CRYPTO_HASH */ +#define CRYPTO_BITS 512 + +#define STATE_INBYTES ((STATE_INBITS + 7) / 8) +#define ROW_INBITS ((STATE_INBITS + 3) / 4) +#define ROW_INBYTES ((ROW_INBITS + 7) / 8) + +/* For CRYPTO_AEAD */ +#define CRYPTO_KEYBYTES ((CRYPTO_KEYBITS + 7) / 8) +#define CRYPTO_NSECBYTES 0 +#define CRYPTO_NPUBBYTES CRYPTO_KEYBYTES +#define CRYPTO_ABYTES CRYPTO_KEYBYTES +#define CRYPTO_NOOVERLAP 1 + +#define MAX_ASSOCIATED_DATA_LENGTH 32 +#define MAX_CIPHER_LENGTH (MAX_MESSAGE_LENGTH + CRYPTO_ABYTES) + +#define TAG_MATCH 0 +#define TAG_UNMATCH -1 +#define OTHER_FAILURES -2 + +/* For CRYPTO_HASH */ +#define CRYPTO_BYTES ((CRYPTO_BITS + 7) / 8) + + + +#define DOMAIN_BITS 0x80 +#define PAD_BITS 0x01 +#define S384_R192_BITS 0x80 + +#if (STATE_INBITS==256) +#define C1 1 +#define C2 8 +#define C3 25 +#elif (STATE_INBITS==384) +#define C1 1 +#define C2 8 +#define C3 55 +#elif (STATE_INBITS==512) +#define C1 1 +#define C2 16 +#define C3 25 +#else +#error "Not specified state size" +#endif + +#ifdef CRYPTO_AEAD +/* For CRYPTO_AEAD */ +#define KEY_INBITS (CRYPTO_KEYBYTES * 8) +#define KEY_INBYTES (CRYPTO_KEYBYTES) + +#define NONCE_INBITS (CRYPTO_NPUBBYTES * 8) +#define NONCE_INBYTES (CRYPTO_NPUBBYTES) + +#define TAG_INBITS (CRYPTO_ABYTES * 8) +#define TAG_INBYTES (CRYPTO_ABYTES) + +#if (KEY_INBITS==128) && (STATE_INBITS==256) +#define RATE_INBITS 64 +#define NR_0 52 +#define NR_i 28 +#define NR_f 32 +#elif (KEY_INBITS==128) && (STATE_INBITS==384) +#define RATE_INBITS 192 +#define NR_0 76 +#define NR_i 28 +#define NR_f 32 +#elif (KEY_INBITS==192) && (STATE_INBITS==384) +#define RATE_INBITS 96 +#define NR_0 76 +#define NR_i 40 +#define NR_f 44 +#elif (KEY_INBITS==256) && (STATE_INBITS==512) +#define RATE_INBITS 128 +#define NR_0 100 +#define NR_i 52 +#define NR_f 56 +#else +#error "Not specified key size and state size" +#endif + +#define RATE_INBYTES ((RATE_INBITS + 7) / 8) +#define SQUEEZE_RATE_INBYTES TAG_INBYTES + +#endif + +#ifdef CRYPTO_HASH +/* For CRYPTO_HASH */ +#define HASH_DIGEST_INBITS (CRYPTO_BYTES * 8) + +#if (HASH_DIGEST_INBITS==256) && (STATE_INBITS==256) +#define HASH_RATE_INBITS 32 +#define HASH_SQUEEZE_RATE_INBITS 128 +#define NR_h 68 +#elif (HASH_DIGEST_INBITS==256) && (STATE_INBITS==384) +#define HASH_RATE_INBITS 128 +#define HASH_SQUEEZE_RATE_INBITS 128 +#define NR_h 80 +#elif (HASH_DIGEST_INBITS==384) && (STATE_INBITS==384) +#define HASH_RATE_INBITS 48 +#define HASH_SQUEEZE_RATE_INBITS 192 +#define NR_h 104 +#elif (HASH_DIGEST_INBITS==512) && (STATE_INBITS==512) +#define HASH_RATE_INBITS 64 +#define HASH_SQUEEZE_RATE_INBITS 256 +#define NR_h 140 +#else +#error "Not specified hash digest size and state size" +#endif + +#define HASH_RATE_INBYTES ((HASH_RATE_INBITS + 7) / 8) +#define HASH_SQUEEZE_RATE_INBYTES ((HASH_SQUEEZE_RATE_INBITS + 7) / 8) + +#endif + +#define TAG_MATCH 0 +#define TAG_UNMATCH -1 +#define OTHER_FAILURES -2 + +#endif \ No newline at end of file diff --git a/knot/Implementations/crypto_aead/knot256/avr8_lowrom/crypto_aead.h b/knot/Implementations/crypto_aead/knot256/avr8_lowrom/crypto_aead.h new file mode 100644 index 0000000..cd820d3 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot256/avr8_lowrom/crypto_aead.h @@ -0,0 +1,26 @@ +#ifdef __cplusplus +extern "C" { +#endif + +int crypto_aead_encrypt( + unsigned char *c,unsigned long long *clen, + const unsigned char *m,unsigned long long mlen, + const unsigned char *ad,unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k + ); + + +int crypto_aead_decrypt( + unsigned char *m,unsigned long long *outputmlen, + unsigned char *nsec, + const unsigned char *c,unsigned long long clen, + const unsigned char *ad,unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k + ); + +#ifdef __cplusplus +} +#endif diff --git a/knot/Implementations/crypto_aead/knot256/avr8_lowrom/encrypt.c b/knot/Implementations/crypto_aead/knot256/avr8_lowrom/encrypt.c new file mode 100644 index 0000000..baf0a3b --- /dev/null +++ b/knot/Implementations/crypto_aead/knot256/avr8_lowrom/encrypt.c @@ -0,0 +1,106 @@ +#include +#include +#include +#include +#include "config.h" + +extern void crypto_aead_encrypt_asm( + unsigned char *c, + const unsigned char *m, + unsigned char mlen, + const unsigned char *ad, + unsigned char adlen, + const unsigned char *npub, + const unsigned char *k + ); + +extern int crypto_aead_decrypt_asm( + unsigned char *m, + const unsigned char *c, + unsigned char clen, + const unsigned char *ad, + unsigned char adlen, + const unsigned char *npub, + const unsigned char *k + ); + +extern void crypto_hash_asm( + unsigned char *out, + const unsigned char *in, + unsigned char inlen + ); + + +int crypto_aead_encrypt( + unsigned char *c, unsigned long long *clen, + const unsigned char *m, unsigned long long mlen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k + ) +{ + /* + ... + ... the code for the cipher implementation goes here, + ... generating a ciphertext c[0],c[1],...,c[*clen-1] + ... from a plaintext m[0],m[1],...,m[mlen-1] + ... and associated data ad[0],ad[1],...,ad[adlen-1] + ... and nonce npub[0],npub[1],.. + ... and secret key k[0],k[1],... + ... the implementation shall not use nsec + ... + ... return 0; + */ + + (void)nsec; + + crypto_aead_encrypt_asm(c, m, mlen, ad, adlen, npub, k); + + *clen = mlen + TAG_INBYTES; + return 0; +} + + + +int crypto_aead_decrypt( + unsigned char *m, unsigned long long *mlen, + unsigned char *nsec, + const unsigned char *c, unsigned long long clen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k + ) +{ + /* + ... + ... the code for the AEAD implementation goes here, + ... generating a plaintext m[0],m[1],...,m[*mlen-1] + ... and secret message number nsec[0],nsec[1],... + ... from a ciphertext c[0],c[1],...,c[clen-1] + ... and associated data ad[0],ad[1],...,ad[adlen-1] + ... and nonce number npub[0],npub[1],... + ... and secret key k[0],k[1],... + ... + ... return 0; + */ + unsigned long long mlen_; + unsigned char tag_is_match; + + (void)nsec; + if (clen < CRYPTO_ABYTES) { + return -1; + } + mlen_ = clen - CRYPTO_ABYTES; + + tag_is_match = crypto_aead_decrypt_asm(m, c, mlen_, ad, adlen, npub, k); + + if (tag_is_match != 0) + { + memset(m, 0, (size_t)mlen_); + return -1; + } + + *mlen = mlen_; + return 0; +} \ No newline at end of file diff --git a/knot/Implementations/crypto_aead/knot256/avr8_lowrom/encrypt_core.S b/knot/Implementations/crypto_aead/knot256/avr8_lowrom/encrypt_core.S new file mode 100644 index 0000000..cb7aed5 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot256/avr8_lowrom/encrypt_core.S @@ -0,0 +1,537 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by KNOT Team * +; ********************************************** +; + +; +; ============================================ +; S R A M D E F I N I T I O N S +; ============================================ +; +#include +#include "config.h" + +.section .noinit + SRAM_STATE: .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#if (STATE_INBYTES > 32) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif +#if (STATE_INBYTES > 48) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif + SRAM_MESSAGE_OUT_ADDR: .BYTE 0, 0 + SRAM_MESSAGE_IN_ADDR: .BYTE 0, 0 + SRAM_MESSAGE_IN_LEN: .BYTE 0, 0 +#ifdef CRYPTO_AEAD +; For CRYPTO_AEAD + SRAM_ASSOCIATED_DATA_ADDR: .BYTE 0, 0 + SRAM_ADLEN: .BYTE 0, 0 + SRAM_NONCE_ADDR: .BYTE 0, 0 + SRAM_KEY_ADDR: .BYTE 0, 0 + + SRAM_ADDITIONAL: + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#if (CRYPTO_ABYTES > 16) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif +#if (CRYPTO_ABYTES > 24) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif + +#endif + +.section .text + +#include "permutation.h" + +; require YH:YL be the address of the current associated data/cipher/message block +; for enc and dec, store ciphertext or plaintext +; require ZH:ZL be the address of the current cipher/message block +XOR_to_State: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + mov cnt0, rate +XOR_to_State_loop: + ld tmp0, Y+ ; plaintext/ciphertext + ld tmp1, X ; state + eor tmp1, tmp0 ; ciphertext/plaintext + sbrc AEDH, 0 ; test auth or enc/dec, if AEDH[0] == 0, skip store result + st Z+, tmp1 ; store ciphertext/plaintext + sbrc AEDH, 1 ; test auth/enc or dec, if AEDH[1] == 0, skip repalce state byte + mov tmp1, tmp0 ; if dec, replace state + st X+, tmp1 ; store state byte + dec cnt0 + brne XOR_to_State_loop +; YH:YL are now the address of the next associated data block +ret + +; require YH:YL pointed to the input data +; require ZH:ZL pointed to the output data +; require cnt0 containes the nubmer of bytes in source data +; require number of bytes in source data less than rate, i.e., 0 <= cnt0 < rate +; +; the 0th bit in AEDH is used to distinguish (auth AD) or (enc/dec M/C): +; AEDH[0] = 0 for (auth AD), AEDH[0] = 1 for (enc/dec M/C) +; the 1th bit in AEDH is used to distinguish (auth AD/enc M) or (dec C): +; AEDH[1] = 0 for (auth AD/enc M), AEDH[1] = 1 for (dec C) +; AEDH = 0b000 for (auth AD) +; AEDH = 0b001 for (enc M) +; AEDH = 0b011 for (dec C) +Pad_XOR_to_State: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + tst cnt0 + breq XOR_padded_data +XOR_source_data_loop: + ld tmp0, Y+ ; plaintext/ciphertext + ld tmp1, X ; state + eor tmp1, tmp0 ; ciphertext/plaintext + sbrc AEDH, 0 ; test auth or enc/dec, if AEDH[0] == 0, skip store result + st Z+, tmp1 ; store ciphertext/plaintext + sbrc AEDH, 1 ; test auth/enc or dec, if AEDH[1] == 0, skip repalce state byte + mov tmp1, tmp0 ; if dec, replace state + st X+, tmp1 ; store state byte + dec cnt0 + brne XOR_source_data_loop +XOR_padded_data: + ldi tmp0, PAD_BITS + ld tmp1, X + eor tmp1, tmp0 + st X, tmp1 +ret + +AddDomain: + ldi XH, hi8(SRAM_STATE + STATE_INBYTES - 1) + ldi XL, lo8(SRAM_STATE + STATE_INBYTES - 1) + ldi tmp0, DOMAIN_BITS + ld tmp1, X + eor tmp0, tmp1 + st X, tmp0 +ret + +; require ZH:ZL be the address of the destination +EXTRACT_from_State: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + mov tmp1, rate +EXTRACT_from_State_loop: + ld tmp0, X+ + st Z+, tmp0 + dec tmp1 + brne EXTRACT_from_State_loop +ret + +AUTH: + tst radlen + breq AUTH_end + + cp radlen, rate + brlo auth_ad_padded_block + +auth_ad_loop: + rcall XOR_to_State + rcall Permutation + sub radlen, rate + cp radlen, rate + brlo auth_ad_padded_block + rjmp auth_ad_loop + +auth_ad_padded_block: + mov cnt0, radlen + rcall Pad_XOR_to_State + rcall Permutation + +AUTH_end: +ret + +#ifdef CRYPTO_AEAD +Initialization: + ldi rn, NR_0 + ldi XL, lo8(SRAM_STATE) + ldi XH, hi8(SRAM_STATE) + + lds YH, SRAM_NONCE_ADDR + lds YL, SRAM_NONCE_ADDR + 1 + ldi cnt0, CRYPTO_NPUBBYTES +load_nonce_loop: + ld tmp0, Y+ + st X+, tmp0 + dec cnt0 + brne load_nonce_loop + + lds YH, SRAM_KEY_ADDR + lds YL, SRAM_KEY_ADDR + 1 + ldi cnt0, CRYPTO_KEYBYTES +load_key_loop: + ld tmp0, Y+ + st X+, tmp0 + dec cnt0 + brne load_key_loop + +#if (STATE_INBITS==384) && (RATE_INBITS==192) + ldi cnt0, (STATE_INBYTES - CRYPTO_NPUBBYTES - CRYPTO_KEYBYTES - 1) + clr tmp0 +empty_state_loop: + st X+, tmp0 + dec cnt0 + brne empty_state_loop + ldi tmp0, S384_R192_BITS + st X+, tmp0 +#endif + + rcall Permutation +ret + +ENC: + tst mclen + breq ENC_end + + cp mclen, rate + brlo enc_padded_block + +enc_loop: + rcall XOR_to_State + ldi rn, NR_i + rcall Permutation + sub mclen, rate + cp mclen, rate + brlo enc_padded_block + rjmp enc_loop + +enc_padded_block: + mov cnt0, mclen + rcall Pad_XOR_to_State +ENC_end: +ret + +Finalization: + ldi rate, SQUEEZE_RATE_INBYTES + ldi rn, NR_f + rcall Permutation + rcall EXTRACT_from_State +ret + +; void crypto_aead_encrypt_asm( +; unsigned char *c, +; const unsigned char *m, +; unsigned long long mlen, +; const unsigned char *ad, +; unsigned long long adlen, +; const unsigned char *npub, +; const unsigned char *k +; ) +; +; unsigned char *c, is passed in r24:r25 +; const unsigned char *m, is passed in r22:r23 +; unsigned long long mlen, is passed in r20:r21, only LSB (r20) is used +; const unsigned char *ad, is passed in r18:r19 +; unsigned long long adlen, is passed in r16:r17, only LSB (r16) is used +; const unsigned char *npub, is passed in r14:r15 +; const unsigned char *k is passed in r12:r13 +.global crypto_aead_encrypt_asm +crypto_aead_encrypt_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store cipher address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store message address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store message length in SRAM_MESSAGE_IN_LEN + st X+, r20 + st X+, r19 ;store associated data address in SRAM_ASSOCIATED_DATA_ADDR + st X+, r18 + st X+, r17 ;store associated data length in SRAM_ADLEN + st X+, r16 + st X+, r15 ;store nonce address in SRAM_NONCE_ADDR + st X+, r14 + st X+, r13 ;store key address in SRAM_KEY_ADDR + st X+, r12 + mov radlen, r16 + mov mclen, r20 + + rcall Initialization + + ldi rn, NR_i + ldi rate, RATE_INBYTES + ldi AEDH, 0b000 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_ASSOCIATED_DATA_ADDR + lds YL, SRAM_ASSOCIATED_DATA_ADDR + 1 + rcall AUTH + rcall AddDomain + ldi AEDH, 0b001 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_MESSAGE_IN_ADDR + lds YL, SRAM_MESSAGE_IN_ADDR + 1 + lds ZH, SRAM_MESSAGE_OUT_ADDR + lds ZL, SRAM_MESSAGE_OUT_ADDR + 1 + rcall ENC + rcall Finalization + POP_ALL +ret + +; int crypto_aead_decrypt_asm( +; unsigned char *m, +; const unsigned char *c, +; unsigned long long clen, +; const unsigned char *ad, +; unsigned long long adlen, +; const unsigned char *npub, +; const unsigned char *k +; ) +; +; unsigned char *m, is passed in r24:r25 +; const unsigned char *c, is passed in r22:r23 +; unsigned long long clen, is passed in r20:r21, only LSB (r20) is used +; const unsigned char *ad, is passed in r18:r19 +; unsigned long long adlen, is passed in r16:r17, only LSB (r16) is used +; const unsigned char *npub, is passed in r14:r15 +; const unsigned char *k is passed in r12:r13 +.global crypto_aead_decrypt_asm +crypto_aead_decrypt_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store message address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store cipher address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store cipher length in SRAM_MESSAGE_IN_LEN + st X+, r20 + st X+, r19 ;store associated data address in SRAM_ASSOCIATED_DATA_ADDR + st X+, r18 + st X+, r17 ;store associated data length in SRAM_ADLEN + st X+, r16 + st X+, r15 ;store nonce address in SRAM_NONCE_ADDR + st X+, r14 + st X+, r13 ;store key address in SRAM_KEY_ADDR + st X+, r12 + mov radlen, r16 + mov mclen, r20 + + rcall Initialization + + ldi rn, NR_i + ldi rate, RATE_INBYTES + ldi AEDH, 0b000 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_ASSOCIATED_DATA_ADDR + lds YL, SRAM_ASSOCIATED_DATA_ADDR + 1 + rcall AUTH + rcall AddDomain + ldi AEDH, 0b011 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_MESSAGE_IN_ADDR + lds YL, SRAM_MESSAGE_IN_ADDR + 1 + lds ZH, SRAM_MESSAGE_OUT_ADDR + lds ZL, SRAM_MESSAGE_OUT_ADDR + 1 + rcall ENC + + ldi ZH, hi8(SRAM_ADDITIONAL) + ldi ZL, lo8(SRAM_ADDITIONAL) + rcall Finalization + + sbiw ZL, CRYPTO_ABYTES + ldi cnt0, CRYPTO_ABYTES +compare_tag: + ld tmp0, Z+ + ld tmp1, Y+ + cp tmp0, tmp1 + brne return_tag_not_match + dec cnt0 + brne compare_tag + rjmp return_tag_match + +return_tag_not_match: + ldi r25, 0xFF + ldi r24, 0xFF + rjmp crypto_aead_decrypt_end + +return_tag_match: + clr r25 + clr r24 +crypto_aead_decrypt_end: + POP_ALL +ret + +; #ifdef CRYPTO_AEAD +#endif + + +#ifdef CRYPTO_HASH + +; void crypto_hash_asm( +; unsigned char *out, +; const unsigned char *in, +; unsigned long long inlen +; ) +; +; unsigned char *out, is passed in r24:r25 +; const unsigned char *in, is passed in r22:r23 +; unsigned long long inlen, is passed in r20:r21, only LSB (r20) is used +.global crypto_hash_asm +crypto_hash_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store message address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store cipher address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store cipher length in SRAM_MESSAGE_IN_LEN + st X+, r20 + mov mclen, r20 + + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) +#if (STATE_INBITS==384) && (HASH_RATE_INBITS==128) + ldi cnt0, STATE_INBYTES - 1 +#else + ldi cnt0, STATE_INBYTES +#endif + clr tmp0 +zero_state: + st X+, tmp0 + dec cnt0 + brne zero_state + +#if (STATE_INBITS==384) && (HASH_RATE_INBITS==128) + ldi tmp0, S384_R192_BITS + st X+, tmp0 +#endif + + ldi rn, NR_h + ldi AEDH, 0b100 + +HASH_ABSORBING: + mov radlen, mclen + tst radlen + breq EMPTY_M + ldi rate, HASH_RATE_INBYTES + lds YH, SRAM_MESSAGE_IN_ADDR + lds YL, SRAM_MESSAGE_IN_ADDR + 1 + rcall AUTH + rjmp HASH_SQUEEZING + +EMPTY_M: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + ldi tmp0, PAD_BITS + ld tmp1, X + eor tmp1, tmp0 + st X, tmp1 + rcall Permutation + +HASH_SQUEEZING: + ldi rate, HASH_SQUEEZE_RATE_INBYTES + lds ZH, SRAM_MESSAGE_OUT_ADDR + lds ZL, SRAM_MESSAGE_OUT_ADDR + 1 + ldi tcnt, CRYPTO_BYTES +SQUEEZING_loop: + rcall EXTRACT_from_State + subi tcnt, HASH_SQUEEZE_RATE_INBYTES + breq HASH_SQUEEZING_end + rcall Permutation + rjmp SQUEEZING_loop +HASH_SQUEEZING_end: + POP_ALL +ret + +#endif + + +; Byte Order In AVR 8: +; KNOT-AEAD(128, 256, 64): +; N[ 0] AEAD_State[ 0] | Message[ 0] Perm_row_0[0] 0 Tag[ 0] +; N[ 1] AEAD_State[ 1] | Message[ 1] Perm_row_0[1] 0 Tag[ 1] +; N[ 2] AEAD_State[ 2] | Message[ 2] Perm_row_0[2] 0 Tag[ 2] +; N[ 3] AEAD_State[ 3] | Message[ 3] Perm_row_0[3] 0 Tag[ 3] +; N[ 4] AEAD_State[ 4] | Message[ 4] 0x01 Perm_row_0[4] 0 Tag[ 4] +; N[ 5] AEAD_State[ 5] | Message[ 5] 0x00 Perm_row_0[5] 0 Tag[ 5] +; N[ 6] AEAD_State[ 6] | Message[ 6] 0x00 Perm_row_0[6] 0 Tag[ 6] +; N[ 7] AEAD_State[ 7] | Message[ 7] 0x00 Perm_row_0[7] <<< 0 Tag[ 7] +; N[ 8] AEAD_State[ 8] | Perm_row_1[0] 1 +; N[ 9] AEAD_State[ 9] | Perm_row_1[1] 1 +; N[10] AEAD_State[10] | Perm_row_1[2] 1 +; N[11] AEAD_State[11] | Perm_row_1[3] 1 +; N[12] AEAD_State[12] | Perm_row_1[4] 1 +; N[13] AEAD_State[13] | Perm_row_1[5] 1 +; N[14] AEAD_State[14] | Perm_row_1[6] 1 +; N[15] AEAD_State[15] | Perm_row_1[7] <<< 1 +; K[ 0] AEAD_State[16] | Perm_row_2[0] 8 +; K[ 1] AEAD_State[17] | Perm_row_2[1] 8 +; K[ 2] AEAD_State[18] | Perm_row_2[2] 8 +; K[ 3] AEAD_State[19] | Perm_row_2[3] 8 +; K[ 4] AEAD_State[20] | Perm_row_2[4] 8 +; K[ 5] AEAD_State[21] | Perm_row_2[5] 8 +; K[ 6] AEAD_State[22] | Perm_row_2[6] 8 +; K[ 7] AEAD_State[23] | Perm_row_2[7] <<< 8 +; K[ 8] AEAD_State[24] | Perm_row_3[0] 25 +; K[ 9] AEAD_State[25] | Perm_row_3[1] 25 +; K[10] AEAD_State[26] | Perm_row_3[2] 25 +; K[11] AEAD_State[27] | Perm_row_3[3] 25 +; K[12] AEAD_State[28] | Perm_row_3[4] 25 +; K[13] AEAD_State[29] | Perm_row_3[5] 25 +; K[14] AEAD_State[30] | Perm_row_3[6] 25 +; K[15] AEAD_State[31] | ^0x80 Perm_row_3[7] <<< 25 +; +; +; KNOT-AEAD(128, 384, 192): +; Initalization +; N[ 0] AEAD_State[ 0] | Message[ 0] Perm_row_0[ 0] 0 Tag[ 0] +; N[ 1] AEAD_State[ 1] | Message[ 1] Perm_row_0[ 1] 0 Tag[ 1] +; N[ 2] AEAD_State[ 2] | Message[ 2] Perm_row_0[ 2] 0 Tag[ 2] +; N[ 3] AEAD_State[ 3] | Message[ 3] Perm_row_0[ 3] 0 Tag[ 3] +; N[ 4] AEAD_State[ 4] | Message[ 4] 0x01 Perm_row_0[ 4] 0 Tag[ 4] +; N[ 5] AEAD_State[ 5] | Message[ 5] 0x00 Perm_row_0[ 5] 0 Tag[ 5] +; N[ 6] AEAD_State[ 6] | Message[ 6] 0x00 Perm_row_0[ 6] 0 Tag[ 6] +; N[ 7] AEAD_State[ 7] | Message[ 7] 0x00 Perm_row_0[ 7] 0 Tag[ 7] +; N[ 8] AEAD_State[ 8] | Message[ 8] 0x00 Perm_row_0[ 8] 0 Tag[ 8] +; N[ 9] AEAD_State[ 9] | Message[ 9] 0x00 Perm_row_0[ 9] 0 Tag[ 9] +; N[10] AEAD_State[10] | Message[10] 0x00 Perm_row_0[10] 0 Tag[10] +; N[11] AEAD_State[11] | Message[11] 0x00 Perm_row_0[11] <<< 0 Tag[11] +; N[12] AEAD_State[12] | Message[12] 0x00 Perm_row_1[ 0] 1 Tag[12] +; N[13] AEAD_State[13] | Message[13] 0x00 Perm_row_1[ 1] 1 Tag[13] +; N[14] AEAD_State[14] | Message[14] 0x00 Perm_row_1[ 2] 1 Tag[14] +; N[15] AEAD_State[15] | Message[15] 0x00 Perm_row_1[ 3] 1 Tag[15] +; K[ 0] AEAD_State[16] | Message[16] 0x00 Perm_row_1[ 4] 1 +; K[ 1] AEAD_State[17] | Message[17] 0x00 Perm_row_1[ 5] 1 +; K[ 2] AEAD_State[18] | Message[18] 0x00 Perm_row_1[ 6] 1 +; K[ 3] AEAD_State[19] | Message[19] 0x00 Perm_row_1[ 7] 1 +; K[ 4] AEAD_State[20] | Message[20] 0x00 Perm_row_1[ 8] 1 +; K[ 5] AEAD_State[21] | Message[21] 0x00 Perm_row_1[ 9] 1 +; K[ 6] AEAD_State[22] | Message[22] 0x00 Perm_row_1[10] 1 +; K[ 7] AEAD_State[23] | Message[23] 0x00 Perm_row_1[11] <<< 1 +; K[ 8] AEAD_State[24] | Perm_row_2[ 0] 8 +; K[ 9] AEAD_State[25] | Perm_row_2[ 1] 8 +; K[10] AEAD_State[26] | Perm_row_2[ 2] 8 +; K[11] AEAD_State[27] | Perm_row_2[ 3] 8 +; K[12] AEAD_State[28] | Perm_row_2[ 4] 8 +; K[13] AEAD_State[29] | Perm_row_2[ 5] 8 +; K[14] AEAD_State[30] | Perm_row_2[ 6] 8 +; K[15] AEAD_State[31] | Perm_row_2[ 7] 8 +; 0x00 AEAD_State[32] | Perm_row_2[ 8] 8 +; 0x00 AEAD_State[33] | Perm_row_2[ 9] 8 +; 0x00 AEAD_State[34] | Perm_row_2[10] 8 +; 0x00 AEAD_State[35] | Perm_row_2[11] <<< 8 +; 0x00 AEAD_State[36] | Perm_row_3[ 0] 55 +; 0x00 AEAD_State[37] | Perm_row_3[ 1] 55 +; 0x00 AEAD_State[38] | Perm_row_3[ 2] 55 +; 0x00 AEAD_State[39] | Perm_row_3[ 3] 55 +; 0x00 AEAD_State[40] | Perm_row_3[ 4] 55 +; 0x00 AEAD_State[41] | Perm_row_3[ 5] 55 +; 0x00 AEAD_State[42] | Perm_row_3[ 6] 55 +; 0x00 AEAD_State[43] | Perm_row_3[ 7] 55 +; 0x00 AEAD_State[44] | Perm_row_3[ 8] 55 +; 0x00 AEAD_State[45] | Perm_row_3[ 9] 55 +; 0x00 AEAD_State[46] | Perm_row_3[10] 55 +; 0x00 ^0x80 AEAD_State[47] | ^0x80 Perm_row_3[11] <<< 55 diff --git a/knot/Implementations/crypto_aead/knot256/avr8_lowrom/knot256.h b/knot/Implementations/crypto_aead/knot256/avr8_lowrom/knot256.h new file mode 100644 index 0000000..d16bf8c --- /dev/null +++ b/knot/Implementations/crypto_aead/knot256/avr8_lowrom/knot256.h @@ -0,0 +1,197 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by KNOT Team * +; ********************************************** +; +#include "assist.h" + +Permutation: + PUSH_CONFLICT + mov rcnt, rn + + ldi rc, 0x01 + ldi YH, hi8(SRAM_STATE + 3 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 3 * ROW_INBYTES) + ld x30, Y+ + ld x31, Y+ + ld x32, Y+ + ld x33, Y+ + ld x34, Y+ + ld x35, Y+ + ld x36, Y+ + ld x37, Y+ + +round_loop_start: + rjmp AddRC_SubColumns_Start + +load_columns_table: + rjmp load_column0 + rjmp load_column1 + rjmp load_column2 + rjmp load_column3 + rjmp load_column4 + rjmp load_column5 + rjmp load_column6 + rjmp load_column7 + rjmp amend_shiftRow + +load_column0: + mov x3j, x30 + rjmp Sbox_one_column +load_column1: + mov x30, x3j + mov x3j, x31 + rjmp Sbox_one_column +load_column2: + mov x31, x3j + mov x3j, x32 + rjmp Sbox_one_column +load_column3: + mov x32, x3j + mov x3j, x33 + rjmp Sbox_one_column +load_column4: + mov x33, x3j + mov x3j, x34 + rjmp Sbox_one_column +load_column5: + mov x34, x3j + mov x3j, x35 + rjmp Sbox_one_column +load_column6: + mov x35, x3j + mov x3j, x36 + rjmp Sbox_one_column +load_column7: + mov x36, x3j + mov x3j, x37 + rjmp Sbox_one_column + +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) +LFSR_table: + rjmp LFSR6 + rjmp LFSR7 +LFSR6: + LFSR6_MACRO + rjmp LFSR_DONE +LFSR7: + LFSR7_MACRO + rjmp LFSR_DONE +#endif + +;;;;;;;;;;;;;;;;;;;;;;;; Real Start +AddRC_SubColumns_Start: + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + clr ccnt + ld x0j, Y + eor x0j, rc + +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) + ldi ZL, pm_lo8(LFSR_table) + ldi ZH, pm_hi8(LFSR_table) + sbrc AEDH, 2 ; AEDH[2] = 0 for AEAD and AEDH[1] = 1 for HASH + adiw ZL, 1 + ijmp +LFSR_DONE: +#elif defined(CRYPTO_AEAD) + LFSR6_MACRO ; only AEAD +#else + LFSR7_MACRO ; only HASH +#endif + + ldd x1j, Y + ROW_INBYTES + ldd x2j, Y + 2 * ROW_INBYTES + ldi ZL, pm_lo8(load_columns_table) + ldi ZH, pm_hi8(load_columns_table) + ijmp +Sbox_one_column: + Sbox x0j, x1j, x2j, x3j + + ; 7 6 5 4 3 2 1 0 + ; -- -- -- -- -- -- -- x- 0 + ; -- -- -- -- -- -- -- x' 0 + ; -- -- -- -- -- -- x- -- 1 + ; -- -- -- -- x' -- -- -- 3 + ; 4 3 2 1 0 7 6 5 + ; Store a byte to Row 0 + st Y, x0j + ; Store a byte combined with ShiftRow1 + lsl t1j + mov t1j, x1j ; back up the last updated byte in t1j, to be used in shiftRow1 (1 bit left) + rol x1j + std Y + ROW_INBYTES, x1j + ; Store a byte combined with ShiftRow2 + inc ccnt + cpi ccnt, ROW_INBYTES + breq ROW2_WRAP + ldd t2j, Y + 2 * ROW_INBYTES + 1 ; load next byte, the last updated byte needed to be shifted to the address of the next bytes + std Y + 2 * ROW_INBYTES + 1, x2j + mov x2j, t2j + jmp NO_ROW2_WRAP +ROW2_WRAP: + std Y + ROW_INBYTES + 1, x2j + ; remain ShiftRow3 to be done at 'amend_shiftRow' +NO_ROW2_WRAP: + adiw YL, 1 + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + + adiw ZL, 1 + ijmp + +amend_shiftRow: + ldi YH, hi8(SRAM_STATE + ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + ROW_INBYTES) + + ld x1j, Y + bst t1j, 7 + bld x1j, 0 + st Y, x1j + + ; <<< 1 + mov x37, x3j + rol x3j + rol x30 + rol x31 + rol x32 + rol x33 + rol x34 + rol x35 + rol x36 + rol x37 + ; <<< 24 + ; 7 6 5 4 3 2 1 0 => 4 3 2 1 0 7 6 5 + mov x3j, x30 + mov x30, x35 + mov x35, x32 + mov x32, x37 + mov x37, x34 + mov x34, x31 + mov x31, x36 + mov x36, x33 + mov x33, x3j + + dec rcnt + breq round_loop_end + rjmp round_loop_start + +round_loop_end: + ldi YH, hi8(SRAM_STATE + 3 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 3 * ROW_INBYTES) + st Y+, x30 + st Y+, x31 + st Y+, x32 + st Y+, x33 + st Y+, x34 + st Y+, x35 + st Y+, x36 + st Y+, x37 + + POP_CONFLICT +ret \ No newline at end of file diff --git a/knot/Implementations/crypto_aead/knot256/avr8_lowrom/knot384.h b/knot/Implementations/crypto_aead/knot256/avr8_lowrom/knot384.h new file mode 100644 index 0000000..65c474a --- /dev/null +++ b/knot/Implementations/crypto_aead/knot256/avr8_lowrom/knot384.h @@ -0,0 +1,219 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by KNOT Team * +; ********************************************** +; +#include "assist.h" + +Permutation: + PUSH_CONFLICT + mov rcnt, rn + + ldi rc, 0x01 + ldi YH, hi8(SRAM_STATE + 3 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 3 * ROW_INBYTES) + ld x30, Y+ + ld x31, Y+ + ld x32, Y+ + ld x33, Y+ + ld x34, Y+ + ld x35, Y+ + ld x36, Y+ + ld x37, Y+ + ld x38, Y+ + ld x39, Y+ + ld x3a, Y+ + ld x3b, Y+ + +round_loop_start: + rjmp AddRC_SubColumns_Start + +load_columns_table: + rjmp load_column0 + rjmp load_column1 + rjmp load_column2 + rjmp load_column3 + rjmp load_column4 + rjmp load_column5 + rjmp load_column6 + rjmp load_column7 + rjmp load_column8 + rjmp load_column9 + rjmp load_columna + rjmp load_columnb + rjmp amend_shiftRow + +load_column0: + mov x3j, x30 + rjmp Sbox_one_column +load_column1: + mov x30, x3j + mov x3j, x31 + rjmp Sbox_one_column +load_column2: + mov x31, x3j + mov x3j, x32 + rjmp Sbox_one_column +load_column3: + mov x32, x3j + mov x3j, x33 + rjmp Sbox_one_column +load_column4: + mov x33, x3j + mov x3j, x34 + rjmp Sbox_one_column +load_column5: + mov x34, x3j + mov x3j, x35 + rjmp Sbox_one_column +load_column6: + mov x35, x3j + mov x3j, x36 + rjmp Sbox_one_column +load_column7: + mov x36, x3j + mov x3j, x37 + rjmp Sbox_one_column +load_column8: + mov x37, x3j + mov x3j, x38 + rjmp Sbox_one_column +load_column9: + mov x38, x3j + mov x3j, x39 + rjmp Sbox_one_column +load_columna: + mov x39, x3j + mov x3j, x3a + rjmp Sbox_one_column +load_columnb: + mov x3a, x3j + mov x3j, x3b + rjmp Sbox_one_column + +;;;;;;;;;;;;;;;;;;;;;;;; Real Start +AddRC_SubColumns_Start: + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + ldi ZL, pm_lo8(load_columns_table) + ldi ZH, pm_hi8(load_columns_table) + clr ccnt + ld x0j, Y + eor x0j, rc + LFSR7_MACRO + + ldd x1j, Y + ROW_INBYTES + ldd x2j, Y + 2 * ROW_INBYTES + ijmp +Sbox_one_column: + Sbox x0j, x1j, x2j, x3j + + ; b a 9 8 7 6 5 4 3 2 1 0 + ; -- -- -- -- -- -- -- -- -- -- -- x- 0 + ; -- -- -- -- -- -- -- -- -- -- -- x' 0 + ; -- -- -- -- -- -- -- -- -- -- x- -- 1 + ; -- -- -- -- x' -- -- -- -- -- -- -- 7 + ; 4 3 2 1 0 b a 9 8 7 6 5 + ; Store a byte to Row 0 + st Y, x0j + ; Store a byte combined with ShiftRow 1 + lsl t1j + mov t1j, x1j ; back up the last updated byte in t1j, to be used in shiftRow1 (1 bit left) + rol x1j + std Y + ROW_INBYTES, x1j + ; Store a byte combined with ShiftRow 2 + inc ccnt + cpi ccnt, ROW_INBYTES + breq ROW2_WRAP + ldd t2j, Y + 2 * ROW_INBYTES + 1 ; load next byte, the last updated byte needed to be shifted to the address of the next bytes + std Y + 2 * ROW_INBYTES + 1, x2j + mov x2j, t2j + jmp NO_ROW2_WRAP +ROW2_WRAP: + std Y + ROW_INBYTES + 1, x2j + ; remain ShiftRow3 to be done at 'amend_shiftRow' +NO_ROW2_WRAP: + adiw YL, 1 + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + + adiw ZL, 1 + ijmp + +amend_shiftRow: + ldi YH, hi8(SRAM_STATE + ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + ROW_INBYTES) + + ld x1j, Y + bst t1j, 7 + bld x1j, 0 + st Y, x1j + + ; >>> 1 + mov x3b, x3j + ror x3j + ror x3a + ror x39 + ror x38 + ror x37 + ror x36 + ror x35 + ror x34 + ror x33 + ror x32 + ror x31 + ror x30 + ror x3b + ; <<< 56 + ; b a 9 8 7 6 5 4 3 2 1 0 => 4 3 2 1 0 b a 9 8 7 6 5 + ;mov x3j, x30 + ;mov x30, x35 + ;mov x35, x32 + ;mov x32, x37 + ;mov x37, x34 + ;mov x34, x31 + ;mov x31, x36 + ;mov x36, x33 + ;mov x33, x3j + mov x3j, x30 + mov x30, x35 + mov x35, x3a + mov x3a, x33 + mov x33, x38 + mov x38, x31 + mov x31, x36 + mov x36, x3b + mov x3b, x34 + mov x34, x39 + mov x39, x32 + mov x32, x37 + mov x37, x3j + + dec rcnt + breq round_loop_end + rjmp round_loop_start + +round_loop_end: + + ldi YH, hi8(SRAM_STATE + 3 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 3 * ROW_INBYTES) + st Y+, x30 + st Y+, x31 + st Y+, x32 + st Y+, x33 + st Y+, x34 + st Y+, x35 + st Y+, x36 + st Y+, x37 + st Y+, x38 + st Y+, x39 + st Y+, x3a + st Y+, x3b + + POP_CONFLICT +ret \ No newline at end of file diff --git a/knot/Implementations/crypto_aead/knot256/avr8_lowrom/knot512.h b/knot/Implementations/crypto_aead/knot256/avr8_lowrom/knot512.h new file mode 100644 index 0000000..d24b353 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot256/avr8_lowrom/knot512.h @@ -0,0 +1,275 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by KNOT Team * +; ********************************************** +; +#include "assist.h" + +Permutation: + PUSH_CONFLICT + mov rcnt, rn + + ldi rc, 0x01 + ldi YH, hi8(SRAM_STATE + 3 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 3 * ROW_INBYTES) + ld x30, Y+ + ld x31, Y+ + ld x32, Y+ + ld x33, Y+ + ld x34, Y+ + ld x35, Y+ + ld x36, Y+ + ld x37, Y+ + ld x38, Y+ + ld x39, Y+ + ld x3a, Y+ + ld x3b, Y+ + ld x3c, Y+ + ld x3d, Y+ + ld x3e, Y+ + ld x3f, Y+ + +round_loop_start: + rjmp AddRC_SubColumns_Start + +load_columns_table: + rjmp load_column0 + rjmp load_column1 + rjmp load_column2 + rjmp load_column3 + rjmp load_column4 + rjmp load_column5 + rjmp load_column6 + rjmp load_column7 + rjmp load_column8 + rjmp load_column9 + rjmp load_columna + rjmp load_columnb + rjmp load_columnc + rjmp load_columnd + rjmp load_columne + rjmp load_columnf + rjmp amend_shiftRow + +load_column0: + mov x3j, x30 + rjmp Sbox_one_column +load_column1: + mov x30, x3j + mov x3j, x31 + rjmp Sbox_one_column +load_column2: + mov x31, x3j + mov x3j, x32 + rjmp Sbox_one_column +load_column3: + mov x32, x3j + mov x3j, x33 + rjmp Sbox_one_column +load_column4: + mov x33, x3j + mov x3j, x34 + rjmp Sbox_one_column +load_column5: + mov x34, x3j + mov x3j, x35 + rjmp Sbox_one_column +load_column6: + mov x35, x3j + mov x3j, x36 + rjmp Sbox_one_column +load_column7: + mov x36, x3j + mov x3j, x37 + rjmp Sbox_one_column +load_column8: + mov x37, x3j + mov x3j, x38 + rjmp Sbox_one_column +load_column9: + mov x38, x3j + mov x3j, x39 + rjmp Sbox_one_column +load_columna: + mov x39, x3j + mov x3j, x3a + rjmp Sbox_one_column +load_columnb: + mov x3a, x3j + mov x3j, x3b + rjmp Sbox_one_column +load_columnc: + mov x3b, x3j + mov x3j, x3c + rjmp Sbox_one_column +load_columnd: + mov x3c, x3j + mov x3j, x3d + rjmp Sbox_one_column +load_columne: + mov x3d, x3j + mov x3j, x3e + rjmp Sbox_one_column +load_columnf: + mov x3e, x3j + mov x3j, x3f + rjmp Sbox_one_column + +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) +LFSR_table: + rjmp LFSR7 + rjmp LFSR8 +LFSR7: + LFSR7_MACRO + rjmp LFSR_DONE +LFSR8: + LFSR8_MACRO + rjmp LFSR_DONE +#endif + +;;;;;;;;;;;;;;;;;;;;;;;; Real Start +AddRC_SubColumns_Start: + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + clr ccnt + ld x0j, Y + eor x0j, rc + +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) + ldi ZL, pm_lo8(LFSR_table) + ldi ZH, pm_hi8(LFSR_table) + sbrc AEDH, 2 ; AEDH[2] = 0 for AEAD and AEDH[1] = 1 for HASH + adiw ZL, 1 + ijmp +LFSR_DONE: +#elif defined(CRYPTO_AEAD) + LFSR7_MACRO ; only AEAD +#else + LFSR8_MACRO ; only HASH +#endif + + ldd x1j, Y + ROW_INBYTES + ldd x2j, Y + 2 * ROW_INBYTES + ldd t2j, Y + 2 * ROW_INBYTES + 1 + ldi ZL, pm_lo8(load_columns_table) + ldi ZH, pm_hi8(load_columns_table) + ijmp +Sbox_one_column: + Sbox x0j, x1j, x2j, x3j + + ; f e d c b a 9 8 7 6 5 4 3 2 1 0 + ; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- x- 0 + ; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- x' 0 + ; -- -- -- -- -- -- -- -- -- -- -- -- -- x- -- -- 2 + ; -- -- -- -- -- -- -- -- -- -- -- -- x' -- -- -- 3 + ; c b a 9 8 7 6 5 4 3 2 1 0 f e d + ; Store a byte to Row 0 + st Y, x0j + ; Store a byte combined with ShiftRow1 + lsl t1j + mov t1j, x1j ; back up the last updated byte in t1j, to be used in shiftRow1 (1 bit left) + rol x1j + std Y + ROW_INBYTES, x1j + ; Store a byte combined with ShiftRow2 + inc ccnt + cpi ccnt, ROW_INBYTES - 1 + brsh ROW2_WRAP + ldd tmp0, Y + 2 * ROW_INBYTES + 2 ; load next byte, the last updated byte needed to be shifted to the address of the next bytes + std Y + 2 * ROW_INBYTES + 2, x2j + mov x2j, t2j + mov t2j, tmp0 + jmp NO_ROW2_WRAP +ROW2_WRAP: + std Y + ROW_INBYTES + 2, x2j + mov x2j, t2j + + ; remain ShiftRow3 to be done at 'amend_shiftRow' +NO_ROW2_WRAP: + adiw YL, 1 + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + + adiw ZL, 1 + ijmp + +amend_shiftRow: + ldi YH, hi8(SRAM_STATE + ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + ROW_INBYTES) + + ld x1j, Y + bst t1j, 7 + bld x1j, 0 + st Y, x1j + + ; <<< 1 + mov x3f, x3j + rol x3j + rol x30 + rol x31 + rol x32 + rol x33 + rol x34 + rol x35 + rol x36 + rol x37 + rol x38 + rol x39 + rol x3a + rol x3b + rol x3c + rol x3d + rol x3e + rol x3f + ; <<< 24 + ; f e d c b a 9 8 7 6 5 4 3 2 1 0 => + ; c b a 9 8 7 6 5 4 3 2 1 0 f e d + mov x3j, x30 + mov x30, x3d + mov x3d, x3a + mov x3a, x37 + mov x37, x34 + mov x34, x31 + mov x31, x3e + mov x3e, x3b + mov x3b, x38 + mov x38, x35 + mov x35, x32 + mov x32, x3f + mov x3f, x3c + mov x3c, x39 + mov x39, x36 + mov x36, x33 + mov x33, x3j + + dec rcnt + breq round_loop_end + rjmp round_loop_start + +round_loop_end: + + ldi YH, hi8(SRAM_STATE + 3 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 3 * ROW_INBYTES) + st Y+, x30 + st Y+, x31 + st Y+, x32 + st Y+, x33 + st Y+, x34 + st Y+, x35 + st Y+, x36 + st Y+, x37 + st Y+, x38 + st Y+, x39 + st Y+, x3a + st Y+, x3b + st Y+, x3c + st Y+, x3d + st Y+, x3e + st Y+, x3f + + POP_CONFLICT +ret \ No newline at end of file diff --git a/knot/Implementations/crypto_aead/knot256/avr8_lowrom/permutation.h b/knot/Implementations/crypto_aead/knot256/avr8_lowrom/permutation.h new file mode 100644 index 0000000..a57c5d3 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot256/avr8_lowrom/permutation.h @@ -0,0 +1,109 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by KNOT Team * +; ********************************************** +; + +; +; ============================================ +; R E G I S T E R D E F I N I T I O N S +; ============================================ +; + +#define mclen r16 +#define radlen r17 +#define tcnt r17 +#define tmp0 r20 +#define tmp1 r21 +#define cnt0 r22 +#define rn r23 +#define rate r24 + +; +; ; AEDH = 0b000: for authenticate AD +; ; AEDH = 0b001: for encryption +; ; AEDH = 0b011: for decryption +; ; AEDH = 0b100: for hash +; #define AEDH r25 ; Register used globally within this program +; +; #define x30 r0 ; Register used without overlapping +; #define x31 r1 ; Register used without overlapping +; #define x32 r2 ; Register used without overlapping +; #define x33 r3 ; Register used without overlapping +; #define x34 r4 ; Register used without overlapping +; #define x35 r5 ; Register used without overlapping +; #define x36 r6 ; Register used without overlapping +; #define x37 r7 ; Register used without overlapping +; #define x38 r8 ; Register used without overlapping +; #define x39 r9 ; Register used without overlapping +; #define x3a r10 ; Register used without overlapping +; #define x3b r11 ; Register used without overlapping +; #define x3c r12 ; Register used without overlapping +; #define x3d r13 ; Register used without overlapping +; #define x3e r14 ; Register used without overlapping +; #define x3f r15 ; Register used without overlapping +; +; #define x0j r16 ; Register used overlapped, should be backed up before using +; #define x1j r17 ; Register used overlapped, should be backed up before using +; #define x2j r18 ; Register used overlapped, should be backed up before using +; #define x3j r19 ; Register used overlapped, should be backed up before using +; +; ; t2j used in knot512 to keep one byte in Row2 (because of rotating 16-bit), +; ; will not be interupt with LFSR which uses the overlapped register tmp1 +; #define t2j r21 ; Temporary register, used freely +; #define t1j r22 ; Temporary register, used freely +; #define t3j r23 ; Temporary register, used freely +; +; #define rc r24 ; Register used overlapped, should be backed up before using +; #define rcnt r26 ; Register used overlapped, should be backed up before using +; #define ccnt r27 ; Register used overlapped, should be backed up before using + +#define AEDH r25 +#define x30 r0 +#define x31 r1 +#define x32 r2 +#define x33 r3 +#define x34 r4 +#define x35 r5 +#define x36 r6 +#define x37 r7 +#define x38 r8 +#define x39 r9 +#define x3a r10 +#define x3b r11 +#define x3c r12 +#define x3d r13 +#define x3e r14 +#define x3f r15 + +#define x0j r16 +#define x1j r17 +#define x2j r18 +#define x3j r19 + +; t2j used in knot512 to keep one byte in Row2 (because of rotating 16-bit), +; will not be interupt with LFSR which uses the overlapped register tmp1 +#define t2j r21 +#define t1j r22 +#define t3j r23 + +#define rc r24 +#define rcnt r26 +#define ccnt r27 + +#if (STATE_INBITS==256) +#include "knot256.h" +#elif (STATE_INBITS==384) +#include "knot384.h" +#elif (STATE_INBITS==512) +#include "knot512.h" +#else +#error "Not specified key size and state size" +#endif + + diff --git a/knot/Implementations/crypto_aead/knot256/avr8_speed/api.h b/knot/Implementations/crypto_aead/knot256/avr8_speed/api.h new file mode 100644 index 0000000..5c0f032 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot256/avr8_speed/api.h @@ -0,0 +1,5 @@ +#define CRYPTO_KEYBYTES 32 +#define CRYPTO_NSECBYTES 0 +#define CRYPTO_NPUBBYTES 32 +#define CRYPTO_ABYTES 32 +#define CRYPTO_NOOVERLAP 1 diff --git a/knot/Implementations/crypto_aead/knot256/avr8_speed/assist.h b/knot/Implementations/crypto_aead/knot256/avr8_speed/assist.h new file mode 100644 index 0000000..f95a717 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot256/avr8_speed/assist.h @@ -0,0 +1,86 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.1 2020 by KNOT Team * +; ********************************************** +; +.macro PUSH_CONFLICT + push r16 + push r17 + push r18 + push r19 + + push r23 + push r24 + push r25 + push r26 + push r27 + push r28 + push r29 + push r30 + push r31 +.endm + +.macro POP_CONFLICT + pop r31 + pop r30 + pop r29 + pop r28 + pop r27 + pop r26 + pop r25 + pop r24 + pop r23 + + pop r19 + pop r18 + pop r17 + pop r16 +.endm + +.macro PUSH_ALL + push r2 + push r3 + push r4 + push r5 + push r6 + push r7 + push r8 + push r9 + push r10 + push r11 + push r12 + push r13 + push r14 + push r15 + push r16 + push r17 + push r28 + push r29 +.endm + +.macro POP_ALL + pop r29 + pop r28 + pop r17 + pop r16 + pop r15 + pop r14 + pop r13 + pop r12 + pop r11 + pop r10 + pop r9 + pop r8 + pop r7 + pop r6 + pop r5 + pop r4 + pop r3 + pop r2 + clr r1 +.endm \ No newline at end of file diff --git a/knot/Implementations/crypto_aead/knot256/avr8_speed/config.h b/knot/Implementations/crypto_aead/knot256/avr8_speed/config.h new file mode 100644 index 0000000..8fb6034 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot256/avr8_speed/config.h @@ -0,0 +1,131 @@ +#ifndef __CONFIG_H__ +#define __CONFIG_H__ + +#define CRYPTO_AEAD +//#define CRYPTO_HASH + +#define MAX_MESSAGE_LENGTH 128 + +#define STATE_INBITS 512 +/* For CRYPTO_AEAD */ +#define CRYPTO_KEYBITS 256 +/* For CRYPTO_HASH */ +#define CRYPTO_BITS 512 + +#define STATE_INBYTES ((STATE_INBITS + 7) / 8) +#define ROW_INBITS ((STATE_INBITS + 3) / 4) +#define ROW_INBYTES ((ROW_INBITS + 7) / 8) + +/* For CRYPTO_AEAD */ +#define CRYPTO_KEYBYTES ((CRYPTO_KEYBITS + 7) / 8) +#define CRYPTO_NSECBYTES 0 +#define CRYPTO_NPUBBYTES CRYPTO_KEYBYTES +#define CRYPTO_ABYTES CRYPTO_KEYBYTES +#define CRYPTO_NOOVERLAP 1 + +#define MAX_ASSOCIATED_DATA_LENGTH 32 +#define MAX_CIPHER_LENGTH (MAX_MESSAGE_LENGTH + CRYPTO_ABYTES) + +#define TAG_MATCH 0 +#define TAG_UNMATCH -1 +#define OTHER_FAILURES -2 + +/* For CRYPTO_HASH */ +#define CRYPTO_BYTES ((CRYPTO_BITS + 7) / 8) + + + +#define DOMAIN_BITS 0x80 +#define PAD_BITS 0x01 +#define S384_R192_BITS 0x80 + +#if (STATE_INBITS==256) +#define C1 1 +#define C2 8 +#define C3 25 +#elif (STATE_INBITS==384) +#define C1 1 +#define C2 8 +#define C3 55 +#elif (STATE_INBITS==512) +#define C1 1 +#define C2 16 +#define C3 25 +#else +#error "Not specified state size" +#endif + +#ifdef CRYPTO_AEAD +/* For CRYPTO_AEAD */ +#define KEY_INBITS (CRYPTO_KEYBYTES * 8) +#define KEY_INBYTES (CRYPTO_KEYBYTES) + +#define NONCE_INBITS (CRYPTO_NPUBBYTES * 8) +#define NONCE_INBYTES (CRYPTO_NPUBBYTES) + +#define TAG_INBITS (CRYPTO_ABYTES * 8) +#define TAG_INBYTES (CRYPTO_ABYTES) + +#if (KEY_INBITS==128) && (STATE_INBITS==256) +#define RATE_INBITS 64 +#define NR_0 52 +#define NR_i 28 +#define NR_f 32 +#elif (KEY_INBITS==128) && (STATE_INBITS==384) +#define RATE_INBITS 192 +#define NR_0 76 +#define NR_i 28 +#define NR_f 32 +#elif (KEY_INBITS==192) && (STATE_INBITS==384) +#define RATE_INBITS 96 +#define NR_0 76 +#define NR_i 40 +#define NR_f 44 +#elif (KEY_INBITS==256) && (STATE_INBITS==512) +#define RATE_INBITS 128 +#define NR_0 100 +#define NR_i 52 +#define NR_f 56 +#else +#error "Not specified key size and state size" +#endif + +#define RATE_INBYTES ((RATE_INBITS + 7) / 8) +#define SQUEEZE_RATE_INBYTES TAG_INBYTES + +#endif + +#ifdef CRYPTO_HASH +/* For CRYPTO_HASH */ +#define HASH_DIGEST_INBITS (CRYPTO_BYTES * 8) + +#if (HASH_DIGEST_INBITS==256) && (STATE_INBITS==256) +#define HASH_RATE_INBITS 32 +#define HASH_SQUEEZE_RATE_INBITS 128 +#define NR_h 68 +#elif (HASH_DIGEST_INBITS==256) && (STATE_INBITS==384) +#define HASH_RATE_INBITS 128 +#define HASH_SQUEEZE_RATE_INBITS 128 +#define NR_h 80 +#elif (HASH_DIGEST_INBITS==384) && (STATE_INBITS==384) +#define HASH_RATE_INBITS 48 +#define HASH_SQUEEZE_RATE_INBITS 192 +#define NR_h 104 +#elif (HASH_DIGEST_INBITS==512) && (STATE_INBITS==512) +#define HASH_RATE_INBITS 64 +#define HASH_SQUEEZE_RATE_INBITS 256 +#define NR_h 140 +#else +#error "Not specified hash digest size and state size" +#endif + +#define HASH_RATE_INBYTES ((HASH_RATE_INBITS + 7) / 8) +#define HASH_SQUEEZE_RATE_INBYTES ((HASH_SQUEEZE_RATE_INBITS + 7) / 8) + +#endif + +#define TAG_MATCH 0 +#define TAG_UNMATCH -1 +#define OTHER_FAILURES -2 + +#endif \ No newline at end of file diff --git a/knot/Implementations/crypto_aead/knot256/avr8_speed/crypto_aead.h b/knot/Implementations/crypto_aead/knot256/avr8_speed/crypto_aead.h new file mode 100644 index 0000000..cd820d3 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot256/avr8_speed/crypto_aead.h @@ -0,0 +1,26 @@ +#ifdef __cplusplus +extern "C" { +#endif + +int crypto_aead_encrypt( + unsigned char *c,unsigned long long *clen, + const unsigned char *m,unsigned long long mlen, + const unsigned char *ad,unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k + ); + + +int crypto_aead_decrypt( + unsigned char *m,unsigned long long *outputmlen, + unsigned char *nsec, + const unsigned char *c,unsigned long long clen, + const unsigned char *ad,unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k + ); + +#ifdef __cplusplus +} +#endif diff --git a/knot/Implementations/crypto_aead/knot256/avr8_speed/encrypt.c b/knot/Implementations/crypto_aead/knot256/avr8_speed/encrypt.c new file mode 100644 index 0000000..baf0a3b --- /dev/null +++ b/knot/Implementations/crypto_aead/knot256/avr8_speed/encrypt.c @@ -0,0 +1,106 @@ +#include +#include +#include +#include +#include "config.h" + +extern void crypto_aead_encrypt_asm( + unsigned char *c, + const unsigned char *m, + unsigned char mlen, + const unsigned char *ad, + unsigned char adlen, + const unsigned char *npub, + const unsigned char *k + ); + +extern int crypto_aead_decrypt_asm( + unsigned char *m, + const unsigned char *c, + unsigned char clen, + const unsigned char *ad, + unsigned char adlen, + const unsigned char *npub, + const unsigned char *k + ); + +extern void crypto_hash_asm( + unsigned char *out, + const unsigned char *in, + unsigned char inlen + ); + + +int crypto_aead_encrypt( + unsigned char *c, unsigned long long *clen, + const unsigned char *m, unsigned long long mlen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k + ) +{ + /* + ... + ... the code for the cipher implementation goes here, + ... generating a ciphertext c[0],c[1],...,c[*clen-1] + ... from a plaintext m[0],m[1],...,m[mlen-1] + ... and associated data ad[0],ad[1],...,ad[adlen-1] + ... and nonce npub[0],npub[1],.. + ... and secret key k[0],k[1],... + ... the implementation shall not use nsec + ... + ... return 0; + */ + + (void)nsec; + + crypto_aead_encrypt_asm(c, m, mlen, ad, adlen, npub, k); + + *clen = mlen + TAG_INBYTES; + return 0; +} + + + +int crypto_aead_decrypt( + unsigned char *m, unsigned long long *mlen, + unsigned char *nsec, + const unsigned char *c, unsigned long long clen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k + ) +{ + /* + ... + ... the code for the AEAD implementation goes here, + ... generating a plaintext m[0],m[1],...,m[*mlen-1] + ... and secret message number nsec[0],nsec[1],... + ... from a ciphertext c[0],c[1],...,c[clen-1] + ... and associated data ad[0],ad[1],...,ad[adlen-1] + ... and nonce number npub[0],npub[1],... + ... and secret key k[0],k[1],... + ... + ... return 0; + */ + unsigned long long mlen_; + unsigned char tag_is_match; + + (void)nsec; + if (clen < CRYPTO_ABYTES) { + return -1; + } + mlen_ = clen - CRYPTO_ABYTES; + + tag_is_match = crypto_aead_decrypt_asm(m, c, mlen_, ad, adlen, npub, k); + + if (tag_is_match != 0) + { + memset(m, 0, (size_t)mlen_); + return -1; + } + + *mlen = mlen_; + return 0; +} \ No newline at end of file diff --git a/knot/Implementations/crypto_aead/knot256/avr8_speed/encrypt_core.S b/knot/Implementations/crypto_aead/knot256/avr8_speed/encrypt_core.S new file mode 100644 index 0000000..bd74f93 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot256/avr8_speed/encrypt_core.S @@ -0,0 +1,555 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.1 2020 by KNOT Team * +; ********************************************** +; + +; +; ============================================ +; S R A M D E F I N I T I O N S +; ============================================ +; +#include +#include "config.h" + +.section .noinit + SRAM_STATE: .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#if (STATE_INBYTES > 32) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif +#if (STATE_INBYTES > 48) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif + SRAM_MESSAGE_OUT_ADDR: .BYTE 0, 0 + SRAM_MESSAGE_IN_ADDR: .BYTE 0, 0 + SRAM_MESSAGE_IN_LEN: .BYTE 0, 0 +#ifdef CRYPTO_AEAD +; For CRYPTO_AEAD + SRAM_ASSOCIATED_DATA_ADDR: .BYTE 0, 0 + SRAM_ADLEN: .BYTE 0, 0 + SRAM_NONCE_ADDR: .BYTE 0, 0 + SRAM_KEY_ADDR: .BYTE 0, 0 + + SRAM_ADDITIONAL: + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#if (CRYPTO_ABYTES > 16) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif +#if (CRYPTO_ABYTES > 24) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif + +#endif + +.section .text + +#include "permutation.h" + +; require YH:YL be the address of the current associated data/cipher/message block +; for enc and dec, store ciphertext or plaintext +; require ZH:ZL be the address of the current cipher/message block +.macro XOR_to_State_ENCDEC + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + mov cnt0, rate +XOR_to_State_loop_ENCDEC: + ld tmp0, Y+ ; plaintext/ciphertext + ld tmp1, X ; state + eor tmp1, tmp0 ; ciphertext/plaintext + st Z+, tmp1 ; store ciphertext/plaintext + sbrc AEDH, 1 ; test auth/enc or dec, if AEDH[1] == 0, skip repalce state byte + mov tmp1, tmp0 ; if dec, replace state + st X+, tmp1 ; store state byte + dec cnt0 + brne XOR_to_State_loop_ENCDEC +; YH:YL are now the address of the next associated data block +.endm + +; require YH:YL be the address of the current associated data/cipher/message block +; for enc and dec, store ciphertext or plaintext +; require ZH:ZL be the address of the current cipher/message block +.macro XOR_to_State_AUTH + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + mov cnt0, rate +XOR_to_State_loop_AUTH: + ld tmp0, Y+ ; plaintext/ciphertext + ld tmp1, X ; state + eor tmp1, tmp0 ; ciphertext/plaintext + st X+, tmp1 ; store state byte + dec cnt0 + brne XOR_to_State_loop_AUTH +; YH:YL are now the address of the next associated data block +.endm + + + +; require YH:YL pointed to the input data +; require ZH:ZL pointed to the output data +; require cnt0 containes the nubmer of bytes in source data +; require number of bytes in source data less than rate, i.e., 0 <= cnt0 < rate +; +; the 0th bit in AEDH is used to distinguish (auth AD) or (enc/dec M/C): +; AEDH[0] = 0 for (auth AD), AEDH[0] = 1 for (enc/dec M/C) +; the 1th bit in AEDH is used to distinguish (auth AD/enc M) or (dec C): +; AEDH[1] = 0 for (auth AD/enc M), AEDH[1] = 1 for (dec C) +; AEDH = 0b000 for (auth AD) +; AEDH = 0b001 for (enc M) +; AEDH = 0b011 for (dec C) +Pad_XOR_to_State: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + tst cnt0 + breq XOR_padded_data +XOR_source_data_loop: + ld tmp0, Y+ ; plaintext/ciphertext + ld tmp1, X ; state + eor tmp1, tmp0 ; ciphertext/plaintext + sbrc AEDH, 0 ; test auth or enc/dec, if AEDH[0] == 0, skip store result + st Z+, tmp1 ; store ciphertext/plaintext + sbrc AEDH, 1 ; test auth/enc or dec, if AEDH[1] == 0, skip repalce state byte + mov tmp1, tmp0 ; if dec, replace state + st X+, tmp1 ; store state byte + dec cnt0 + brne XOR_source_data_loop +XOR_padded_data: + ldi tmp0, PAD_BITS + ld tmp1, X + eor tmp1, tmp0 + st X, tmp1 +ret + +AddDomain: + ldi XH, hi8(SRAM_STATE + STATE_INBYTES - 1) + ldi XL, lo8(SRAM_STATE + STATE_INBYTES - 1) + ldi tmp0, DOMAIN_BITS + ld tmp1, X + eor tmp0, tmp1 + st X, tmp0 +ret + +; require ZH:ZL be the address of the destination +EXTRACT_from_State: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + mov tmp1, rate +EXTRACT_from_State_loop: + ld tmp0, X+ + st Z+, tmp0 + dec tmp1 + brne EXTRACT_from_State_loop +ret + +AUTH: + tst radlen + breq AUTH_end + + cp radlen, rate + brlo auth_ad_padded_block + +auth_ad_loop: + XOR_to_State_AUTH + rcall Permutation + sub radlen, rate + cp radlen, rate + brlo auth_ad_padded_block + rjmp auth_ad_loop + +auth_ad_padded_block: + mov cnt0, radlen + rcall Pad_XOR_to_State + rcall Permutation + +AUTH_end: +ret + +#ifdef CRYPTO_AEAD +Initialization: + ldi rn, NR_0 + ldi XL, lo8(SRAM_STATE) + ldi XH, hi8(SRAM_STATE) + + lds YH, SRAM_NONCE_ADDR + lds YL, SRAM_NONCE_ADDR + 1 + ldi cnt0, CRYPTO_NPUBBYTES +load_nonce_loop: + ld tmp0, Y+ + st X+, tmp0 + dec cnt0 + brne load_nonce_loop + + lds YH, SRAM_KEY_ADDR + lds YL, SRAM_KEY_ADDR + 1 + ldi cnt0, CRYPTO_KEYBYTES +load_key_loop: + ld tmp0, Y+ + st X+, tmp0 + dec cnt0 + brne load_key_loop + +#if (STATE_INBITS==384) && (RATE_INBITS==192) + ldi cnt0, (STATE_INBYTES - CRYPTO_NPUBBYTES - CRYPTO_KEYBYTES - 1) + clr tmp0 +empty_state_loop: + st X+, tmp0 + dec cnt0 + brne empty_state_loop + ldi tmp0, S384_R192_BITS + st X+, tmp0 +#endif + + rcall Permutation +ret + +ENC: + tst mclen + breq ENC_end + + cp mclen, rate + brlo enc_padded_block + +enc_loop: + XOR_to_State_ENCDEC + ldi rn, NR_i + rcall Permutation + sub mclen, rate + cp mclen, rate + brlo enc_padded_block + rjmp enc_loop + +enc_padded_block: + mov cnt0, mclen + rcall Pad_XOR_to_State +ENC_end: +ret + +Finalization: + ldi rate, SQUEEZE_RATE_INBYTES + ldi rn, NR_f + rcall Permutation + rcall EXTRACT_from_State +ret + +; void crypto_aead_encrypt_asm( +; unsigned char *c, +; const unsigned char *m, +; unsigned long long mlen, +; const unsigned char *ad, +; unsigned long long adlen, +; const unsigned char *npub, +; const unsigned char *k +; ) +; +; unsigned char *c, is passed in r24:r25 +; const unsigned char *m, is passed in r22:r23 +; unsigned long long mlen, is passed in r20:r21, only LSB (r20) is used +; const unsigned char *ad, is passed in r18:r19 +; unsigned long long adlen, is passed in r16:r17, only LSB (r16) is used +; const unsigned char *npub, is passed in r14:r15 +; const unsigned char *k is passed in r12:r13 +.global crypto_aead_encrypt_asm +crypto_aead_encrypt_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store cipher address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store message address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store message length in SRAM_MESSAGE_IN_LEN + st X+, r20 + st X+, r19 ;store associated data address in SRAM_ASSOCIATED_DATA_ADDR + st X+, r18 + st X+, r17 ;store associated data length in SRAM_ADLEN + st X+, r16 + st X+, r15 ;store nonce address in SRAM_NONCE_ADDR + st X+, r14 + st X+, r13 ;store key address in SRAM_KEY_ADDR + st X+, r12 + mov radlen, r16 + mov mclen, r20 + + rcall Initialization + + ldi rn, NR_i + ldi rate, RATE_INBYTES + ldi AEDH, 0b000 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_ASSOCIATED_DATA_ADDR + lds YL, SRAM_ASSOCIATED_DATA_ADDR + 1 + rcall AUTH + rcall AddDomain + ldi AEDH, 0b001 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_MESSAGE_IN_ADDR + lds YL, SRAM_MESSAGE_IN_ADDR + 1 + lds ZH, SRAM_MESSAGE_OUT_ADDR + lds ZL, SRAM_MESSAGE_OUT_ADDR + 1 + rcall ENC + rcall Finalization + POP_ALL +ret + +; int crypto_aead_decrypt_asm( +; unsigned char *m, +; const unsigned char *c, +; unsigned long long clen, +; const unsigned char *ad, +; unsigned long long adlen, +; const unsigned char *npub, +; const unsigned char *k +; ) +; +; unsigned char *m, is passed in r24:r25 +; const unsigned char *c, is passed in r22:r23 +; unsigned long long clen, is passed in r20:r21, only LSB (r20) is used +; const unsigned char *ad, is passed in r18:r19 +; unsigned long long adlen, is passed in r16:r17, only LSB (r16) is used +; const unsigned char *npub, is passed in r14:r15 +; const unsigned char *k is passed in r12:r13 +.global crypto_aead_decrypt_asm +crypto_aead_decrypt_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store message address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store cipher address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store cipher length in SRAM_MESSAGE_IN_LEN + st X+, r20 + st X+, r19 ;store associated data address in SRAM_ASSOCIATED_DATA_ADDR + st X+, r18 + st X+, r17 ;store associated data length in SRAM_ADLEN + st X+, r16 + st X+, r15 ;store nonce address in SRAM_NONCE_ADDR + st X+, r14 + st X+, r13 ;store key address in SRAM_KEY_ADDR + st X+, r12 + mov radlen, r16 + mov mclen, r20 + + rcall Initialization + + ldi rn, NR_i + ldi rate, RATE_INBYTES + ldi AEDH, 0b000 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_ASSOCIATED_DATA_ADDR + lds YL, SRAM_ASSOCIATED_DATA_ADDR + 1 + rcall AUTH + rcall AddDomain + ldi AEDH, 0b011 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_MESSAGE_IN_ADDR + lds YL, SRAM_MESSAGE_IN_ADDR + 1 + lds ZH, SRAM_MESSAGE_OUT_ADDR + lds ZL, SRAM_MESSAGE_OUT_ADDR + 1 + rcall ENC + + ldi ZH, hi8(SRAM_ADDITIONAL) + ldi ZL, lo8(SRAM_ADDITIONAL) + rcall Finalization + + sbiw ZL, CRYPTO_ABYTES + ldi cnt0, CRYPTO_ABYTES +compare_tag: + ld tmp0, Z+ + ld tmp1, Y+ + cp tmp0, tmp1 + brne return_tag_not_match + dec cnt0 + brne compare_tag + rjmp return_tag_match + +return_tag_not_match: + ldi r25, 0xFF + ldi r24, 0xFF + rjmp crypto_aead_decrypt_end + +return_tag_match: + clr r25 + clr r24 +crypto_aead_decrypt_end: + POP_ALL +ret + +; #ifdef CRYPTO_AEAD +#endif + + +#ifdef CRYPTO_HASH + +; void crypto_hash_asm( +; unsigned char *out, +; const unsigned char *in, +; unsigned long long inlen +; ) +; +; unsigned char *out, is passed in r24:r25 +; const unsigned char *in, is passed in r22:r23 +; unsigned long long inlen, is passed in r20:r21, only LSB (r20) is used +.global crypto_hash_asm +crypto_hash_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store message address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store cipher address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store cipher length in SRAM_MESSAGE_IN_LEN + st X+, r20 + mov mclen, r20 + + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) +#if (STATE_INBITS==384) && (HASH_RATE_INBITS==128) + ldi cnt0, STATE_INBYTES - 1 +#else + ldi cnt0, STATE_INBYTES +#endif + clr tmp0 +zero_state: + st X+, tmp0 + dec cnt0 + brne zero_state + +#if (STATE_INBITS==384) && (HASH_RATE_INBITS==128) + ldi tmp0, S384_R192_BITS + st X+, tmp0 +#endif + + ldi rn, NR_h + ldi AEDH, 0b100 + +HASH_ABSORBING: + mov radlen, mclen + tst radlen + breq EMPTY_M + ldi rate, HASH_RATE_INBYTES + lds YH, SRAM_MESSAGE_IN_ADDR + lds YL, SRAM_MESSAGE_IN_ADDR + 1 + rcall AUTH + rjmp HASH_SQUEEZING + +EMPTY_M: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + ldi tmp0, PAD_BITS + ld tmp1, X + eor tmp1, tmp0 + st X, tmp1 + rcall Permutation + +HASH_SQUEEZING: + ldi rate, HASH_SQUEEZE_RATE_INBYTES + lds ZH, SRAM_MESSAGE_OUT_ADDR + lds ZL, SRAM_MESSAGE_OUT_ADDR + 1 + ldi tcnt, CRYPTO_BYTES +SQUEEZING_loop: + rcall EXTRACT_from_State + subi tcnt, HASH_SQUEEZE_RATE_INBYTES + breq HASH_SQUEEZING_end + rcall Permutation + rjmp SQUEEZING_loop +HASH_SQUEEZING_end: + POP_ALL +ret + +#endif + + +; Byte Order In AVR 8: +; KNOT-AEAD(128, 256, 64): +; N[ 0] AEAD_State[ 0] | Message[ 0] Perm_row_0[0] 0 Tag[ 0] +; N[ 1] AEAD_State[ 1] | Message[ 1] Perm_row_0[1] 0 Tag[ 1] +; N[ 2] AEAD_State[ 2] | Message[ 2] Perm_row_0[2] 0 Tag[ 2] +; N[ 3] AEAD_State[ 3] | Message[ 3] Perm_row_0[3] 0 Tag[ 3] +; N[ 4] AEAD_State[ 4] | Message[ 4] 0x01 Perm_row_0[4] 0 Tag[ 4] +; N[ 5] AEAD_State[ 5] | Message[ 5] 0x00 Perm_row_0[5] 0 Tag[ 5] +; N[ 6] AEAD_State[ 6] | Message[ 6] 0x00 Perm_row_0[6] 0 Tag[ 6] +; N[ 7] AEAD_State[ 7] | Message[ 7] 0x00 Perm_row_0[7] <<< 0 Tag[ 7] +; N[ 8] AEAD_State[ 8] | Perm_row_1[0] 1 +; N[ 9] AEAD_State[ 9] | Perm_row_1[1] 1 +; N[10] AEAD_State[10] | Perm_row_1[2] 1 +; N[11] AEAD_State[11] | Perm_row_1[3] 1 +; N[12] AEAD_State[12] | Perm_row_1[4] 1 +; N[13] AEAD_State[13] | Perm_row_1[5] 1 +; N[14] AEAD_State[14] | Perm_row_1[6] 1 +; N[15] AEAD_State[15] | Perm_row_1[7] <<< 1 +; K[ 0] AEAD_State[16] | Perm_row_2[0] 8 +; K[ 1] AEAD_State[17] | Perm_row_2[1] 8 +; K[ 2] AEAD_State[18] | Perm_row_2[2] 8 +; K[ 3] AEAD_State[19] | Perm_row_2[3] 8 +; K[ 4] AEAD_State[20] | Perm_row_2[4] 8 +; K[ 5] AEAD_State[21] | Perm_row_2[5] 8 +; K[ 6] AEAD_State[22] | Perm_row_2[6] 8 +; K[ 7] AEAD_State[23] | Perm_row_2[7] <<< 8 +; K[ 8] AEAD_State[24] | Perm_row_3[0] 25 +; K[ 9] AEAD_State[25] | Perm_row_3[1] 25 +; K[10] AEAD_State[26] | Perm_row_3[2] 25 +; K[11] AEAD_State[27] | Perm_row_3[3] 25 +; K[12] AEAD_State[28] | Perm_row_3[4] 25 +; K[13] AEAD_State[29] | Perm_row_3[5] 25 +; K[14] AEAD_State[30] | Perm_row_3[6] 25 +; K[15] AEAD_State[31] | ^0x80 Perm_row_3[7] <<< 25 +; +; +; KNOT-AEAD(128, 384, 192): +; Initalization +; N[ 0] AEAD_State[ 0] | Message[ 0] Perm_row_0[ 0] 0 Tag[ 0] +; N[ 1] AEAD_State[ 1] | Message[ 1] Perm_row_0[ 1] 0 Tag[ 1] +; N[ 2] AEAD_State[ 2] | Message[ 2] Perm_row_0[ 2] 0 Tag[ 2] +; N[ 3] AEAD_State[ 3] | Message[ 3] Perm_row_0[ 3] 0 Tag[ 3] +; N[ 4] AEAD_State[ 4] | Message[ 4] 0x01 Perm_row_0[ 4] 0 Tag[ 4] +; N[ 5] AEAD_State[ 5] | Message[ 5] 0x00 Perm_row_0[ 5] 0 Tag[ 5] +; N[ 6] AEAD_State[ 6] | Message[ 6] 0x00 Perm_row_0[ 6] 0 Tag[ 6] +; N[ 7] AEAD_State[ 7] | Message[ 7] 0x00 Perm_row_0[ 7] 0 Tag[ 7] +; N[ 8] AEAD_State[ 8] | Message[ 8] 0x00 Perm_row_0[ 8] 0 Tag[ 8] +; N[ 9] AEAD_State[ 9] | Message[ 9] 0x00 Perm_row_0[ 9] 0 Tag[ 9] +; N[10] AEAD_State[10] | Message[10] 0x00 Perm_row_0[10] 0 Tag[10] +; N[11] AEAD_State[11] | Message[11] 0x00 Perm_row_0[11] <<< 0 Tag[11] +; N[12] AEAD_State[12] | Message[12] 0x00 Perm_row_1[ 0] 1 Tag[12] +; N[13] AEAD_State[13] | Message[13] 0x00 Perm_row_1[ 1] 1 Tag[13] +; N[14] AEAD_State[14] | Message[14] 0x00 Perm_row_1[ 2] 1 Tag[14] +; N[15] AEAD_State[15] | Message[15] 0x00 Perm_row_1[ 3] 1 Tag[15] +; K[ 0] AEAD_State[16] | Message[16] 0x00 Perm_row_1[ 4] 1 +; K[ 1] AEAD_State[17] | Message[17] 0x00 Perm_row_1[ 5] 1 +; K[ 2] AEAD_State[18] | Message[18] 0x00 Perm_row_1[ 6] 1 +; K[ 3] AEAD_State[19] | Message[19] 0x00 Perm_row_1[ 7] 1 +; K[ 4] AEAD_State[20] | Message[20] 0x00 Perm_row_1[ 8] 1 +; K[ 5] AEAD_State[21] | Message[21] 0x00 Perm_row_1[ 9] 1 +; K[ 6] AEAD_State[22] | Message[22] 0x00 Perm_row_1[10] 1 +; K[ 7] AEAD_State[23] | Message[23] 0x00 Perm_row_1[11] <<< 1 +; K[ 8] AEAD_State[24] | Perm_row_2[ 0] 8 +; K[ 9] AEAD_State[25] | Perm_row_2[ 1] 8 +; K[10] AEAD_State[26] | Perm_row_2[ 2] 8 +; K[11] AEAD_State[27] | Perm_row_2[ 3] 8 +; K[12] AEAD_State[28] | Perm_row_2[ 4] 8 +; K[13] AEAD_State[29] | Perm_row_2[ 5] 8 +; K[14] AEAD_State[30] | Perm_row_2[ 6] 8 +; K[15] AEAD_State[31] | Perm_row_2[ 7] 8 +; 0x00 AEAD_State[32] | Perm_row_2[ 8] 8 +; 0x00 AEAD_State[33] | Perm_row_2[ 9] 8 +; 0x00 AEAD_State[34] | Perm_row_2[10] 8 +; 0x00 AEAD_State[35] | Perm_row_2[11] <<< 8 +; 0x00 AEAD_State[36] | Perm_row_3[ 0] 55 +; 0x00 AEAD_State[37] | Perm_row_3[ 1] 55 +; 0x00 AEAD_State[38] | Perm_row_3[ 2] 55 +; 0x00 AEAD_State[39] | Perm_row_3[ 3] 55 +; 0x00 AEAD_State[40] | Perm_row_3[ 4] 55 +; 0x00 AEAD_State[41] | Perm_row_3[ 5] 55 +; 0x00 AEAD_State[42] | Perm_row_3[ 6] 55 +; 0x00 AEAD_State[43] | Perm_row_3[ 7] 55 +; 0x00 AEAD_State[44] | Perm_row_3[ 8] 55 +; 0x00 AEAD_State[45] | Perm_row_3[ 9] 55 +; 0x00 AEAD_State[46] | Perm_row_3[10] 55 +; 0x00 ^0x80 AEAD_State[47] | ^0x80 Perm_row_3[11] <<< 55 diff --git a/knot/Implementations/crypto_aead/knot256/avr8_speed/knot256.h b/knot/Implementations/crypto_aead/knot256/avr8_speed/knot256.h new file mode 100644 index 0000000..f99f68b --- /dev/null +++ b/knot/Implementations/crypto_aead/knot256/avr8_speed/knot256.h @@ -0,0 +1,306 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.1 2020 by KNOT Team * +; ********************************************** +; +#define x10 r0 +#define x11 r1 +#define x12 r2 +#define x13 r3 +#define x14 r4 +#define x15 r5 +#define x16 r6 +#define x17 r7 + +; an intentionally arrangement of registers to facilitate movw +#define x20 r8 +#define x21 r10 +#define x22 r12 +#define x23 r14 +#define x24 r9 +#define x25 r11 +#define x26 r13 +#define x27 r15 + +; an intentionally arrangement of registers to facilitate movw +#define x30 r16 +#define x35 r18 +#define x32 r20 +#define x37 r22 +#define x34 r17 +#define x31 r19 +#define x36 r21 +#define x33 r23 + +#define t0j r24 +#define t1j r25 +#define x0j r27 + +#include "assist.h" + +.macro Sbox i0, i1, i2, i3 + mov t0j, \i1 + com \i0 + and \i1, \i0 + eor \i1, \i2 + or \i2, t0j + eor \i0, \i3 + eor \i2, \i0 + eor t0j, \i3 + and \i0, \i1 + eor \i3, \i1 + eor \i0, t0j + and t0j, \i2 + eor \i1, t0j +.endm + +Permutation: + PUSH_CONFLICT + mov rcnt, rn + + ldi YH, hi8(SRAM_STATE + ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + ROW_INBYTES) + ld x10, Y+ + ld x11, Y+ + ld x12, Y+ + ld x13, Y+ + ld x14, Y+ + ld x15, Y+ + ld x16, Y+ + ld x17, Y+ + ld x20, Y+ + ld x21, Y+ + ld x22, Y+ + ld x23, Y+ + ld x24, Y+ + ld x25, Y+ + ld x26, Y+ + ld x27, Y+ + ld x30, Y+ + ld x31, Y+ + ld x32, Y+ + ld x33, Y+ + ld x34, Y+ + ld x35, Y+ + ld x36, Y+ + ld x37, Y+ + +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) + sbrc AEDH, 2 ; AEDH[2] = 0 for AEAD and AEDH[2] = 1 for HASH + rjmp For_Hash +For_AEAD: + ldi ZL, lo8(RC_LFSR6) + ldi ZH, hi8(RC_LFSR6) + rjmp round_loop_start +For_Hash: + ldi ZL, lo8(RC_LFSR7) + ldi ZH, hi8(RC_LFSR7) +#elif defined(CRYPTO_AEAD) + ldi ZL, lo8(RC_LFSR6) + ldi ZH, hi8(RC_LFSR6) +#else + ldi ZL, lo8(RC_LFSR7) + ldi ZH, hi8(RC_LFSR7) +#endif + +round_loop_start: + ; AddRC + lpm t0j, Z+ + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + ld x0j, Y + eor x0j, t0j + + ; SubColumns + Sbox x0j, x10, x20, x30 + st Y+, x0j + ld x0j, Y + Sbox x0j, x11, x21, x31 + st Y+, x0j + ld x0j, Y + Sbox x0j, x12, x22, x32 + st Y+, x0j + ld x0j, Y + Sbox x0j, x13, x23, x33 + st Y+, x0j + ld x0j, Y + Sbox x0j, x14, x24, x34 + st Y+, x0j + ld x0j, Y + Sbox x0j, x15, x25, x35 + st Y+, x0j + ld x0j, Y + Sbox x0j, x16, x26, x36 + st Y+, x0j + ld x0j, Y + Sbox x0j, x17, x27, x37 + st Y, x0j + + ; ShiftRows + ; <<< 1 + mov t0j, x17 + rol t0j + rol x10 + rol x11 + rol x12 + rol x13 + rol x14 + rol x15 + rol x16 + rol x17 + + ; <<< 8 + ; 7 6 5 4 3 2 1 0 => 6 5 4 3 2 1 0 7 + ;mov t0j, x27 + ;mov x27, x26 + ;mov x26, x25 + ;mov x25, x24 + ;mov x24, x23 + ;mov x23, x22 + ;mov x22, x21 + ;mov x21, x20 + ;mov x20, t0j + ; an intentionally arrangement of registers to facilitate movw + movw t0j, x23 ; t1j:t0j <= x27:x23 + movw x23, x22 ; x27:x23 <= x26:x22 + movw x22, x21 ; x26:x22 <= x25:x21 + movw x21, x20 ; x25:x21 <= x24:x20 + mov x20, t1j ; x20 <= t1j + mov x24, t0j ; x24 <= t0j + + ; <<< 1 + mov t0j, x37 + rol t0j + rol x30 + rol x31 + rol x32 + rol x33 + rol x34 + rol x35 + rol x36 + rol x37 + ; <<< 24 + ; 7 6 5 4 3 2 1 0 => 4 3 2 1 0 7 6 5 + ;mov t0j, x30 + ;mov x30, x35 + ;mov x35, x32 + ;mov x32, x37 + ;mov x37, x34 + ;mov x34, x31 + ;mov x31, x36 + ;mov x36, x33 + ;mov x33, t0j + ; an intentionally arrangement of registers to facilitate movw + ;x30 r16 + ;x35 r18 + ;x32 r20 + ;x37 r22 + ;x34 r17 + ;x31 r19 + ;x36 r21 + ;x33 r23 + movw t0j, x30 ; t1j:t0j <= x34:x30 + movw x30, x35 ; x34:x30 <= x31:x35 + movw x35, x32 ; x31:x35 <= x36:x32 + movw x32, x37 ; x36:x32 <= x33:x37 + mov x37, t1j ; x37 <= x34 + mov x33, t0j ; x33 <= x30 + + dec rcnt + breq round_loop_end + jmp round_loop_start + +round_loop_end: + ldi YH, hi8(SRAM_STATE + ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + ROW_INBYTES) + st Y+, x10 + st Y+, x11 + st Y+, x12 + st Y+, x13 + st Y+, x14 + st Y+, x15 + st Y+, x16 + st Y+, x17 + st Y+, x20 + st Y+, x21 + st Y+, x22 + st Y+, x23 + st Y+, x24 + st Y+, x25 + st Y+, x26 + st Y+, x27 + st Y+, x30 + st Y+, x31 + st Y+, x32 + st Y+, x33 + st Y+, x34 + st Y+, x35 + st Y+, x36 + st Y+, x37 + + POP_CONFLICT +ret + + +.section .text +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) +RC_LFSR6: +.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x21, 0x03, 0x06 +.byte 0x0c, 0x18, 0x31, 0x22, 0x05, 0x0a, 0x14, 0x29 +.byte 0x13, 0x27, 0x0f, 0x1e, 0x3d, 0x3a, 0x34, 0x28 +.byte 0x11, 0x23, 0x07, 0x0e, 0x1c, 0x39, 0x32, 0x24 +.byte 0x09, 0x12, 0x25, 0x0b, 0x16, 0x2d, 0x1b, 0x37 +.byte 0x2e, 0x1d, 0x3b, 0x36, 0x2c, 0x19, 0x33, 0x26 +.byte 0x0d, 0x1a, 0x35, 0x2a, 0x15, 0x2b, 0x17, 0x2f +.byte 0x1f, 0x3f, 0x3e, 0x3c, 0x38, 0x30, 0x20, 0x00 +RC_LFSR7: +.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x41, 0x03 +.byte 0x06, 0x0c, 0x18, 0x30, 0x61, 0x42, 0x05, 0x0a +.byte 0x14, 0x28, 0x51, 0x23, 0x47, 0x0f, 0x1e, 0x3c +.byte 0x79, 0x72, 0x64, 0x48, 0x11, 0x22, 0x45, 0x0b +.byte 0x16, 0x2c, 0x59, 0x33, 0x67, 0x4e, 0x1d, 0x3a +.byte 0x75, 0x6a, 0x54, 0x29, 0x53, 0x27, 0x4f, 0x1f +.byte 0x3e, 0x7d, 0x7a, 0x74, 0x68, 0x50, 0x21, 0x43 +.byte 0x07, 0x0e, 0x1c, 0x38, 0x71, 0x62, 0x44, 0x09 +.byte 0x12, 0x24, 0x49, 0x13, 0x26, 0x4d, 0x1b, 0x36 +.byte 0x6d, 0x5a, 0x35, 0x6b, 0x56, 0x2d, 0x5b, 0x37 +.byte 0x6f, 0x5e, 0x3d, 0x7b, 0x76, 0x6c, 0x58, 0x31 +.byte 0x63, 0x46, 0x0d, 0x1a, 0x34, 0x69, 0x52, 0x25 +.byte 0x4b, 0x17, 0x2e, 0x5d, 0x3b, 0x77, 0x6e, 0x5c +.byte 0x39, 0x73, 0x66, 0x4c, 0x19, 0x32, 0x65, 0x4a +.byte 0x15, 0x2a, 0x55, 0x2b, 0x57, 0x2f, 0x5f, 0x3f +.byte 0x7f, 0x7e, 0x7c, 0x78, 0x70, 0x60, 0x40, 0x00 +#elif defined(CRYPTO_AEAD) +RC_LFSR6: +.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x21, 0x03, 0x06 +.byte 0x0c, 0x18, 0x31, 0x22, 0x05, 0x0a, 0x14, 0x29 +.byte 0x13, 0x27, 0x0f, 0x1e, 0x3d, 0x3a, 0x34, 0x28 +.byte 0x11, 0x23, 0x07, 0x0e, 0x1c, 0x39, 0x32, 0x24 +.byte 0x09, 0x12, 0x25, 0x0b, 0x16, 0x2d, 0x1b, 0x37 +.byte 0x2e, 0x1d, 0x3b, 0x36, 0x2c, 0x19, 0x33, 0x26 +.byte 0x0d, 0x1a, 0x35, 0x2a, 0x15, 0x2b, 0x17, 0x2f +.byte 0x1f, 0x3f, 0x3e, 0x3c, 0x38, 0x30, 0x20, 0x00 +#else +RC_LFSR7: +.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x41, 0x03 +.byte 0x06, 0x0c, 0x18, 0x30, 0x61, 0x42, 0x05, 0x0a +.byte 0x14, 0x28, 0x51, 0x23, 0x47, 0x0f, 0x1e, 0x3c +.byte 0x79, 0x72, 0x64, 0x48, 0x11, 0x22, 0x45, 0x0b +.byte 0x16, 0x2c, 0x59, 0x33, 0x67, 0x4e, 0x1d, 0x3a +.byte 0x75, 0x6a, 0x54, 0x29, 0x53, 0x27, 0x4f, 0x1f +.byte 0x3e, 0x7d, 0x7a, 0x74, 0x68, 0x50, 0x21, 0x43 +.byte 0x07, 0x0e, 0x1c, 0x38, 0x71, 0x62, 0x44, 0x09 +.byte 0x12, 0x24, 0x49, 0x13, 0x26, 0x4d, 0x1b, 0x36 +.byte 0x6d, 0x5a, 0x35, 0x6b, 0x56, 0x2d, 0x5b, 0x37 +.byte 0x6f, 0x5e, 0x3d, 0x7b, 0x76, 0x6c, 0x58, 0x31 +.byte 0x63, 0x46, 0x0d, 0x1a, 0x34, 0x69, 0x52, 0x25 +.byte 0x4b, 0x17, 0x2e, 0x5d, 0x3b, 0x77, 0x6e, 0x5c +.byte 0x39, 0x73, 0x66, 0x4c, 0x19, 0x32, 0x65, 0x4a +.byte 0x15, 0x2a, 0x55, 0x2b, 0x57, 0x2f, 0x5f, 0x3f +.byte 0x7f, 0x7e, 0x7c, 0x78, 0x70, 0x60, 0x40, 0x00 +#endif \ No newline at end of file diff --git a/knot/Implementations/crypto_aead/knot256/avr8_speed/knot384.h b/knot/Implementations/crypto_aead/knot256/avr8_speed/knot384.h new file mode 100644 index 0000000..0b3dd75 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot256/avr8_speed/knot384.h @@ -0,0 +1,261 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.1 2020 by KNOT Team * +; ********************************************** +; + +; an intentionally arrangement of registers to facilitate movw +#define x20 r0 +#define x21 r2 +#define x22 r4 +#define x23 r6 +#define x24 r8 +#define x25 r10 +#define x26 r1 +#define x27 r3 +#define x28 r5 +#define x29 r7 +#define x2a r9 +#define x2b r11 + +; an intentionally arrangement of registers to facilitate movw +#define x30 r22 +#define x35 r20 +#define x3a r18 +#define x33 r16 +#define x38 r14 +#define x31 r12 +#define x36 r23 +#define x3b r21 +#define x34 r19 +#define x39 r17 +#define x32 r15 +#define x37 r13 + +#define t0j r24 +#define t1j r25 +#define x0j r25 +#define x1j r27 + +#include "assist.h" + +.macro Sbox i0, i1, i2, i3 + ldi t0j, 0xFF + eor \i0, t0j + mov t0j, \i1 + and \i1, \i0 + eor \i1, \i2 + or \i2, t0j + eor \i0, \i3 + eor \i2, \i0 + eor t0j, \i3 + and \i0, \i1 + eor \i3, \i1 + eor \i0, t0j + and t0j, \i2 + eor \i1, t0j +.endm + +.macro OneColumn i0, i1, i2, i3 + ld \i0, Y + ldd \i1, Y + ROW_INBYTES + Sbox \i0, \i1, \i2, \i3 + st Y+, \i0 + rol \i1 ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES -1, \i1 +.endm + +Permutation: + PUSH_CONFLICT + mov rcnt, rn + + ldi YH, hi8(SRAM_STATE + 2 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 2 * ROW_INBYTES) + ld x20, Y+ + ld x21, Y+ + ld x22, Y+ + ld x23, Y+ + ld x24, Y+ + ld x25, Y+ + ld x26, Y+ + ld x27, Y+ + ld x28, Y+ + ld x29, Y+ + ld x2a, Y+ + ld x2b, Y+ + ld x30, Y+ + ld x31, Y+ + ld x32, Y+ + ld x33, Y+ + ld x34, Y+ + ld x35, Y+ + ld x36, Y+ + ld x37, Y+ + ld x38, Y+ + ld x39, Y+ + ld x3a, Y+ + ld x3b, Y+ + + ldi ZL, lo8(RC_LFSR7) + ldi ZH, hi8(RC_LFSR7) + +round_loop_start: + ; AddRC + lpm t0j, Z+ + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + ld x0j, Y + eor x0j, t0j + + ldd x1j, Y + ROW_INBYTES + Sbox x0j, x1j, x20, x30 + st Y+, x0j + lsl x1j ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES -1, x1j + + OneColumn x0j, x1j, x21, x31 + OneColumn x0j, x1j, x22, x32 + OneColumn x0j, x1j, x23, x33 + OneColumn x0j, x1j, x24, x34 + OneColumn x0j, x1j, x25, x35 + OneColumn x0j, x1j, x26, x36 + OneColumn x0j, x1j, x27, x37 + OneColumn x0j, x1j, x28, x38 + OneColumn x0j, x1j, x29, x39 + OneColumn x0j, x1j, x2a, x3a + OneColumn x0j, x1j, x2b, x3b + + ld x1j, Y + eor t0j, t0j + adc x1j, t0j + st Y, x1j + + ; b a 9 8 7 6 5 4 3 2 1 0 + ; -- -- -- -- -- -- -- -- -- -- -- x- 0 + ; -- -- -- -- -- -- -- -- -- -- -- x' 0 + ; -- -- -- -- -- -- -- -- -- -- x- -- 1 + ; -- -- -- -- x' -- -- -- -- -- -- -- 7 + ; 4 3 2 1 0 b a 9 8 7 6 5 + + ; ShiftRows -- the last two rows + ; <<< 8 + ; b a 9 8 7 6 5 4 3 2 1 0 => a 9 8 7 6 5 4 3 2 1 0 b + movw t0j, x25 ; t1j:t0j <= x2b:x25 + movw x25, x24 ; x2b:x25 <= x2a:x24 + movw x24, x23 ; x2a:x24 <= x29:x23 + movw x23, x22 ; x29:x23 <= x28:x22 + movw x22, x21 ; x28:x22 <= x27:x21 + movw x21, x20 ; x27:x21 <= x26:x20 + mov x26, t0j ; x26 <= x25 + mov x20, t1j ; x20 <= x2b + + ; >>> 1 + mov t0j, x3b + ror t0j + ror x3a + ror x39 + ror x38 + ror x37 + ror x36 + ror x35 + ror x34 + ror x33 + ror x32 + ror x31 + ror x30 + ror x3b + ; <<< 56 + ; b a 9 8 7 6 5 4 3 2 1 0 => 4 3 2 1 0 b a 9 8 7 6 5 + ; mov x3j, x30 + ; mov x30, x35 + ; mov x35, x3a + ; mov x3a, x33 + ; mov x33, x38 + ; mov x38, x31 + ; mov x31, x36 + ; mov x36, x3b + ; mov x3b, x34 + ; mov x34, x39 + ; mov x39, x32 + ; mov x32, x37 + ; mov x37, x3j + ; an intentionally arrangement of registers to facilitate movw + ; x30 r22 + ; x35 r20 + ; x3a r18 + ; x33 r16 + ; x38 r14 + ; x31 r12 + ; x36 r23 + ; x3b r21 + ; x34 r19 + ; x39 r17 + ; x32 r15 + ; x37 r13 + movw t0j, x30 ; t1j:t0j <= x36:x30 + movw x30, x35 ; x36:x30 <= x3b:x35 + movw x35, x3a ; x3b:x35 <= x34:x3a + movw x3a, x33 ; x34:x3a <= x39:x33 + movw x33, x38 ; x39:x33 <= x32:x38 + movw x38, x31 ; x32:x38 <= x37:x31 + mov x31, t1j ; x31 <= x36 + mov x37, t0j ; x37 <= x30 + + dec rcnt + breq round_loop_end + jmp round_loop_start + +round_loop_end: + + ldi YH, hi8(SRAM_STATE + 2 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 2 * ROW_INBYTES) + st Y+, x20 + st Y+, x21 + st Y+, x22 + st Y+, x23 + st Y+, x24 + st Y+, x25 + st Y+, x26 + st Y+, x27 + st Y+, x28 + st Y+, x29 + st Y+, x2a + st Y+, x2b + st Y+, x30 + st Y+, x31 + st Y+, x32 + st Y+, x33 + st Y+, x34 + st Y+, x35 + st Y+, x36 + st Y+, x37 + st Y+, x38 + st Y+, x39 + st Y+, x3a + st Y+, x3b + + POP_CONFLICT +ret + +RC_LFSR7: +.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x41, 0x03 +.byte 0x06, 0x0c, 0x18, 0x30, 0x61, 0x42, 0x05, 0x0a +.byte 0x14, 0x28, 0x51, 0x23, 0x47, 0x0f, 0x1e, 0x3c +.byte 0x79, 0x72, 0x64, 0x48, 0x11, 0x22, 0x45, 0x0b +.byte 0x16, 0x2c, 0x59, 0x33, 0x67, 0x4e, 0x1d, 0x3a +.byte 0x75, 0x6a, 0x54, 0x29, 0x53, 0x27, 0x4f, 0x1f +.byte 0x3e, 0x7d, 0x7a, 0x74, 0x68, 0x50, 0x21, 0x43 +.byte 0x07, 0x0e, 0x1c, 0x38, 0x71, 0x62, 0x44, 0x09 +.byte 0x12, 0x24, 0x49, 0x13, 0x26, 0x4d, 0x1b, 0x36 +.byte 0x6d, 0x5a, 0x35, 0x6b, 0x56, 0x2d, 0x5b, 0x37 +.byte 0x6f, 0x5e, 0x3d, 0x7b, 0x76, 0x6c, 0x58, 0x31 +.byte 0x63, 0x46, 0x0d, 0x1a, 0x34, 0x69, 0x52, 0x25 +.byte 0x4b, 0x17, 0x2e, 0x5d, 0x3b, 0x77, 0x6e, 0x5c +.byte 0x39, 0x73, 0x66, 0x4c, 0x19, 0x32, 0x65, 0x4a +.byte 0x15, 0x2a, 0x55, 0x2b, 0x57, 0x2f, 0x5f, 0x3f +.byte 0x7f, 0x7e, 0x7c, 0x78, 0x70, 0x60, 0x40, 0x00 \ No newline at end of file diff --git a/knot/Implementations/crypto_aead/knot256/avr8_speed/knot512.h b/knot/Implementations/crypto_aead/knot256/avr8_speed/knot512.h new file mode 100644 index 0000000..b0e4319 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot256/avr8_speed/knot512.h @@ -0,0 +1,435 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.1 2020 by KNOT Team * +; ********************************************** +; +#define x20 r0 +#define x22 r2 +#define x24 r4 +#define x26 r6 +#define x28 r1 +#define x2a r3 +#define x2c r5 +#define x2e r7 + +#define x30 r8 +#define x3d r10 +#define x3a r12 +#define x37 r14 +#define x34 r16 +#define x31 r18 +#define x3e r20 +#define x3b r22 +#define x38 r9 +#define x35 r11 +#define x32 r13 +#define x3f r15 +#define x3c r17 +#define x39 r19 +#define x36 r21 +#define x33 r23 + +#define t0j r24 +#define t1j r25 +#define x0j r25 +#define x1j r27 +#define x2j r26 + +#include "assist.h" + +.macro Sbox i0, i1, i2, i3 + ldi t0j, 0xFF + eor \i0, t0j + mov t0j, \i1 + and \i1, \i0 + eor \i1, \i2 + or \i2, t0j + eor \i0, \i3 + eor \i2, \i0 + eor t0j, \i3 + and \i0, \i1 + eor \i3, \i1 + eor \i0, t0j + and t0j, \i2 + eor \i1, t0j +.endm + +.macro TwoColumns i2_e, i3_e, i3_o + ; column 2i + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + Sbox x0j, x1j, \i2_e, \i3_e + st Y+, x0j + rol x1j ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES - 1, x1j + + ; column 2i+1 + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + Sbox x0j, x1j, x2j, \i3_o + st Y+, x0j + rol x1j ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES - 1, x1j + ldd t0j, Y + 2 * ROW_INBYTES + 1 + std Y + 2 * ROW_INBYTES + 1, x2j + mov x2j, t0j +.endm + +Permutation: + PUSH_CONFLICT + mov rcnt, rn + push rcnt + + ldi YH, hi8(SRAM_STATE + 2 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 2 * ROW_INBYTES) + + ldd x20, Y + 0x00 + ldd x22, Y + 0x02 + ldd x24, Y + 0x04 + ldd x26, Y + 0x06 + ldd x28, Y + 0x08 + ldd x2a, Y + 0x0a + ldd x2c, Y + 0x0c + ldd x2e, Y + 0x0e + + adiw YL, ROW_INBYTES + + ld x30, Y+ + ld x31, Y+ + ld x32, Y+ + ld x33, Y+ + ld x34, Y+ + ld x35, Y+ + ld x36, Y+ + ld x37, Y+ + ld x38, Y+ + ld x39, Y+ + ld x3a, Y+ + ld x3b, Y+ + ld x3c, Y+ + ld x3d, Y+ + ld x3e, Y+ + ld x3f, Y+ + +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) + sbrc AEDH, 2 ; AEDH[2] = 0 for AEAD and AEDH[2] = 1 for HASH + rjmp For_Hash +For_AEAD: + ldi ZL, lo8(RC_LFSR7) + ldi ZH, hi8(RC_LFSR7) + rjmp round_loop_start +For_Hash: + ldi ZL, lo8(RC_LFSR8) + ldi ZH, hi8(RC_LFSR8) +#elif defined(CRYPTO_AEAD) + ldi ZL, lo8(RC_LFSR7) + ldi ZH, hi8(RC_LFSR7) +#else + ldi ZL, lo8(RC_LFSR8) + ldi ZH, hi8(RC_LFSR8) +#endif + + +round_loop_start: + ; AddRC + lpm t0j, Z+ + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + + ; column 0 + ld x0j, Y + eor x0j, t0j + ldd x1j, Y + ROW_INBYTES + Sbox x0j, x1j, x20, x30 + st Y+, x0j + lsl x1j ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES - 1, x1j + + ; column 1 + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + ldd x2j, Y + 2 * ROW_INBYTES + Sbox x0j, x1j, x2j, x31 + st Y+, x0j + rol x1j ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES - 1, x1j + ldd t0j, Y + 2 * ROW_INBYTES + 1 + std Y + 2 * ROW_INBYTES + 1, x2j + mov x2j, t0j + + ; column 2, 3 + TwoColumns x22, x32, x33 + ; column 4, 5 + TwoColumns x24, x34, x35 + ; column 6, 7 + TwoColumns x26, x36, x37 + ; column 8, 9 + TwoColumns x28, x38, x39 + ; column 10, 11 + TwoColumns x2a, x3a, x3b + ; column 12, 13 + TwoColumns x2c, x3c, x3d + + ; column 14 + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + Sbox x0j, x1j, x2e, x3e + st Y+, x0j + rol x1j ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES - 1, x1j + + ; column 15 + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + Sbox x0j, x1j, x2j, x3f + st Y+, x0j + rol x1j ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES - 1, x1j + + ld x1j, Y + eor t0j, t0j + adc x1j, t0j + st Y, x1j + std Y + ROW_INBYTES + 1, x2j + + ; f e d c b a 9 8 7 6 5 4 3 2 1 0 + ; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- x- 0 + ; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- x' 0 + ; -- -- -- -- -- -- -- -- -- -- -- -- -- x- -- -- 2 + ; -- -- -- -- -- -- -- -- -- -- -- -- x' -- -- -- 3 + ; c b a 9 8 7 6 5 4 3 2 1 0 f e d + ; x2e x2c x2a x28 x26 x24 x22 x20 => x2c x2a x28 x26 x24 x22 x20 x2e + ;mov t0j, x2e + ;mov x2e, x2c + ;mov x2c, x2a + ;mov x2a, x28 + ;mov x28, x26 + ;mov x26, x24 + ;mov x24, x22 + ;mov x22, x20 + ;mov x20, t0j + ; an intentionally arrangement of registers to facilitate movw + movw t0j, x26 ; t1j:t0j <= x2e:x26 + movw x26, x24 ; x2e:x26 <= x2c:x24 + movw x24, x22 ; x2c:x24 <= x2a:x22 + movw x22, x20 ; x2a:x22 <= x28:x20 + mov x20, t1j ; x20 <= t1j + mov x28, t0j ; x28 <= t0j + + ; <<< 1 + mov t0j, x3f + rol t0j + rol x30 + rol x31 + rol x32 + rol x33 + rol x34 + rol x35 + rol x36 + rol x37 + rol x38 + rol x39 + rol x3a + rol x3b + rol x3c + rol x3d + rol x3e + rol x3f + ; <<< 24 + ; f e d c b a 9 8 7 6 5 4 3 2 1 0 => + ; c b a 9 8 7 6 5 4 3 2 1 0 f e d + ; mov x3j, x30 + ; mov x30, x3d + ; mov x3d, x3a + ; mov x3a, x37 + ; mov x37, x34 + ; mov x34, x31 + ; mov x31, x3e + ; mov x3e, x3b + ; mov x3b, x38 + ; mov x38, x35 + ; mov x35, x32 + ; mov x32, x3f + ; mov x3f, x3c + ; mov x3c, x39 + ; mov x39, x36 + ; mov x36, x33 + ; mov x33, x3j + ; an intentionally arrangement of registers to facilitate movw + ; x30 r8 + ; x3d r10 + ; x3a r12 + ; x37 r14 + ; x34 r16 + ; x31 r18 + ; x3e r20 + ; x3b r22 + ; x38 r9 + ; x35 r11 + ; x32 r13 + ; x3f r15 + ; x3c r17 + ; x39 r19 + ; x36 r21 + ; x33 r23 + movw t0j, x30 ; t1j:t0j <= x38:x30 + movw x30, x3d ; x38:x30 <= x35:x3d + movw x3d, x3a ; x35:x3d <= x32:x3a + movw x3a, x37 ; x32:x3a <= x3f:x37 + movw x37, x34 ; x3f:x37 <= x3c:x34 + movw x34, x31 ; x3c:x34 <= x39:x31 + movw x31, x3e ; x39:x31 <= x36:x3e + movw x3e, x3b ; x36:x3e <= x33:x3b + mov x3b, t1j ; x3b <= x38 + mov x33, t0j ; x33 <= x30 + + pop rcnt + dec rcnt + push rcnt + breq round_loop_end + rjmp round_loop_start + +round_loop_end: + pop rcnt + + ldi YH, hi8(SRAM_STATE + 2 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 2 * ROW_INBYTES) + std Y + 0x00, x20 + std Y + 0x02, x22 + std Y + 0x04, x24 + std Y + 0x06, x26 + std Y + 0x08, x28 + std Y + 0x0a, x2a + std Y + 0x0c, x2c + std Y + 0x0e, x2e + adiw YL, ROW_INBYTES + st Y+, x30 + st Y+, x31 + st Y+, x32 + st Y+, x33 + st Y+, x34 + st Y+, x35 + st Y+, x36 + st Y+, x37 + st Y+, x38 + st Y+, x39 + st Y+, x3a + st Y+, x3b + st Y+, x3c + st Y+, x3d + st Y+, x3e + st Y+, x3f + + POP_CONFLICT +ret + +.section .text +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) +RC_LFSR7: +.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x41, 0x03 +.byte 0x06, 0x0c, 0x18, 0x30, 0x61, 0x42, 0x05, 0x0a +.byte 0x14, 0x28, 0x51, 0x23, 0x47, 0x0f, 0x1e, 0x3c +.byte 0x79, 0x72, 0x64, 0x48, 0x11, 0x22, 0x45, 0x0b +.byte 0x16, 0x2c, 0x59, 0x33, 0x67, 0x4e, 0x1d, 0x3a +.byte 0x75, 0x6a, 0x54, 0x29, 0x53, 0x27, 0x4f, 0x1f +.byte 0x3e, 0x7d, 0x7a, 0x74, 0x68, 0x50, 0x21, 0x43 +.byte 0x07, 0x0e, 0x1c, 0x38, 0x71, 0x62, 0x44, 0x09 +.byte 0x12, 0x24, 0x49, 0x13, 0x26, 0x4d, 0x1b, 0x36 +.byte 0x6d, 0x5a, 0x35, 0x6b, 0x56, 0x2d, 0x5b, 0x37 +.byte 0x6f, 0x5e, 0x3d, 0x7b, 0x76, 0x6c, 0x58, 0x31 +.byte 0x63, 0x46, 0x0d, 0x1a, 0x34, 0x69, 0x52, 0x25 +.byte 0x4b, 0x17, 0x2e, 0x5d, 0x3b, 0x77, 0x6e, 0x5c +.byte 0x39, 0x73, 0x66, 0x4c, 0x19, 0x32, 0x65, 0x4a +.byte 0x15, 0x2a, 0x55, 0x2b, 0x57, 0x2f, 0x5f, 0x3f +.byte 0x7f, 0x7e, 0x7c, 0x78, 0x70, 0x60, 0x40, 0x00 +RC_LFSR8: +.byte 0x01, 0x02, 0x04, 0x08, 0x11, 0x23, 0x47, 0x8e +.byte 0x1c, 0x38, 0x71, 0xe2, 0xc4, 0x89, 0x12, 0x25 +.byte 0x4b, 0x97, 0x2e, 0x5c, 0xb8, 0x70, 0xe0, 0xc0 +.byte 0x81, 0x03, 0x06, 0x0c, 0x19, 0x32, 0x64, 0xc9 +.byte 0x92, 0x24, 0x49, 0x93, 0x26, 0x4d, 0x9b, 0x37 +.byte 0x6e, 0xdc, 0xb9, 0x72, 0xe4, 0xc8, 0x90, 0x20 +.byte 0x41, 0x82, 0x05, 0x0a, 0x15, 0x2b, 0x56, 0xad +.byte 0x5b, 0xb6, 0x6d, 0xda, 0xb5, 0x6b, 0xd6, 0xac +.byte 0x59, 0xb2, 0x65, 0xcb, 0x96, 0x2c, 0x58, 0xb0 +.byte 0x61, 0xc3, 0x87, 0x0f, 0x1f, 0x3e, 0x7d, 0xfb +.byte 0xf6, 0xed, 0xdb, 0xb7, 0x6f, 0xde, 0xbd, 0x7a +.byte 0xf5, 0xeb, 0xd7, 0xae, 0x5d, 0xba, 0x74, 0xe8 +.byte 0xd1, 0xa2, 0x44, 0x88, 0x10, 0x21, 0x43, 0x86 +.byte 0x0d, 0x1b, 0x36, 0x6c, 0xd8, 0xb1, 0x63, 0xc7 +.byte 0x8f, 0x1e, 0x3c, 0x79, 0xf3, 0xe7, 0xce, 0x9c +.byte 0x39, 0x73, 0xe6, 0xcc, 0x98, 0x31, 0x62, 0xc5 +.byte 0x8b, 0x16, 0x2d, 0x5a, 0xb4, 0x69, 0xd2, 0xa4 +.byte 0x48, 0x91, 0x22, 0x45, 0x8a, 0x14, 0x29, 0x52 +.byte 0xa5, 0x4a, 0x95, 0x2a, 0x54, 0xa9, 0x53, 0xa7 +.byte 0x4e, 0x9d, 0x3b, 0x77, 0xee, 0xdd, 0xbb, 0x76 +.byte 0xec, 0xd9, 0xb3, 0x67, 0xcf, 0x9e, 0x3d, 0x7b +.byte 0xf7, 0xef, 0xdf, 0xbf, 0x7e, 0xfd, 0xfa, 0xf4 +.byte 0xe9, 0xd3, 0xa6, 0x4c, 0x99, 0x33, 0x66, 0xcd +.byte 0x9a, 0x35, 0x6a, 0xd4, 0xa8, 0x51, 0xa3, 0x46 +.byte 0x8c, 0x18, 0x30, 0x60, 0xc1, 0x83, 0x07, 0x0e +.byte 0x1d, 0x3a, 0x75, 0xea, 0xd5, 0xaa, 0x55, 0xab +.byte 0x57, 0xaf, 0x5f, 0xbe, 0x7c, 0xf9, 0xf2, 0xe5 +.byte 0xca, 0x94, 0x28, 0x50, 0xa1, 0x42, 0x84, 0x09 +.byte 0x13, 0x27, 0x4f, 0x9f, 0x3f, 0x7f, 0xff, 0xfe +.byte 0xfc, 0xf8, 0xf0, 0xe1, 0xc2, 0x85, 0x0b, 0x17 +.byte 0x2f, 0x5e, 0xbc, 0x78, 0xf1, 0xe3, 0xc6, 0x8d +.byte 0x1a, 0x34, 0x68, 0xd0, 0xa0, 0x40, 0x80, 0x00 +#elif defined(CRYPTO_AEAD) +RC_LFSR7: +.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x41, 0x03 +.byte 0x06, 0x0c, 0x18, 0x30, 0x61, 0x42, 0x05, 0x0a +.byte 0x14, 0x28, 0x51, 0x23, 0x47, 0x0f, 0x1e, 0x3c +.byte 0x79, 0x72, 0x64, 0x48, 0x11, 0x22, 0x45, 0x0b +.byte 0x16, 0x2c, 0x59, 0x33, 0x67, 0x4e, 0x1d, 0x3a +.byte 0x75, 0x6a, 0x54, 0x29, 0x53, 0x27, 0x4f, 0x1f +.byte 0x3e, 0x7d, 0x7a, 0x74, 0x68, 0x50, 0x21, 0x43 +.byte 0x07, 0x0e, 0x1c, 0x38, 0x71, 0x62, 0x44, 0x09 +.byte 0x12, 0x24, 0x49, 0x13, 0x26, 0x4d, 0x1b, 0x36 +.byte 0x6d, 0x5a, 0x35, 0x6b, 0x56, 0x2d, 0x5b, 0x37 +.byte 0x6f, 0x5e, 0x3d, 0x7b, 0x76, 0x6c, 0x58, 0x31 +.byte 0x63, 0x46, 0x0d, 0x1a, 0x34, 0x69, 0x52, 0x25 +.byte 0x4b, 0x17, 0x2e, 0x5d, 0x3b, 0x77, 0x6e, 0x5c +.byte 0x39, 0x73, 0x66, 0x4c, 0x19, 0x32, 0x65, 0x4a +.byte 0x15, 0x2a, 0x55, 0x2b, 0x57, 0x2f, 0x5f, 0x3f +.byte 0x7f, 0x7e, 0x7c, 0x78, 0x70, 0x60, 0x40, 0x00 +#else +RC_LFSR8: +.byte 0x01, 0x02, 0x04, 0x08, 0x11, 0x23, 0x47, 0x8e +.byte 0x1c, 0x38, 0x71, 0xe2, 0xc4, 0x89, 0x12, 0x25 +.byte 0x4b, 0x97, 0x2e, 0x5c, 0xb8, 0x70, 0xe0, 0xc0 +.byte 0x81, 0x03, 0x06, 0x0c, 0x19, 0x32, 0x64, 0xc9 +.byte 0x92, 0x24, 0x49, 0x93, 0x26, 0x4d, 0x9b, 0x37 +.byte 0x6e, 0xdc, 0xb9, 0x72, 0xe4, 0xc8, 0x90, 0x20 +.byte 0x41, 0x82, 0x05, 0x0a, 0x15, 0x2b, 0x56, 0xad +.byte 0x5b, 0xb6, 0x6d, 0xda, 0xb5, 0x6b, 0xd6, 0xac +.byte 0x59, 0xb2, 0x65, 0xcb, 0x96, 0x2c, 0x58, 0xb0 +.byte 0x61, 0xc3, 0x87, 0x0f, 0x1f, 0x3e, 0x7d, 0xfb +.byte 0xf6, 0xed, 0xdb, 0xb7, 0x6f, 0xde, 0xbd, 0x7a +.byte 0xf5, 0xeb, 0xd7, 0xae, 0x5d, 0xba, 0x74, 0xe8 +.byte 0xd1, 0xa2, 0x44, 0x88, 0x10, 0x21, 0x43, 0x86 +.byte 0x0d, 0x1b, 0x36, 0x6c, 0xd8, 0xb1, 0x63, 0xc7 +.byte 0x8f, 0x1e, 0x3c, 0x79, 0xf3, 0xe7, 0xce, 0x9c +.byte 0x39, 0x73, 0xe6, 0xcc, 0x98, 0x31, 0x62, 0xc5 +.byte 0x8b, 0x16, 0x2d, 0x5a, 0xb4, 0x69, 0xd2, 0xa4 +.byte 0x48, 0x91, 0x22, 0x45, 0x8a, 0x14, 0x29, 0x52 +.byte 0xa5, 0x4a, 0x95, 0x2a, 0x54, 0xa9, 0x53, 0xa7 +.byte 0x4e, 0x9d, 0x3b, 0x77, 0xee, 0xdd, 0xbb, 0x76 +.byte 0xec, 0xd9, 0xb3, 0x67, 0xcf, 0x9e, 0x3d, 0x7b +.byte 0xf7, 0xef, 0xdf, 0xbf, 0x7e, 0xfd, 0xfa, 0xf4 +.byte 0xe9, 0xd3, 0xa6, 0x4c, 0x99, 0x33, 0x66, 0xcd +.byte 0x9a, 0x35, 0x6a, 0xd4, 0xa8, 0x51, 0xa3, 0x46 +.byte 0x8c, 0x18, 0x30, 0x60, 0xc1, 0x83, 0x07, 0x0e +.byte 0x1d, 0x3a, 0x75, 0xea, 0xd5, 0xaa, 0x55, 0xab +.byte 0x57, 0xaf, 0x5f, 0xbe, 0x7c, 0xf9, 0xf2, 0xe5 +.byte 0xca, 0x94, 0x28, 0x50, 0xa1, 0x42, 0x84, 0x09 +.byte 0x13, 0x27, 0x4f, 0x9f, 0x3f, 0x7f, 0xff, 0xfe +.byte 0xfc, 0xf8, 0xf0, 0xe1, 0xc2, 0x85, 0x0b, 0x17 +.byte 0x2f, 0x5e, 0xbc, 0x78, 0xf1, 0xe3, 0xc6, 0x8d +.byte 0x1a, 0x34, 0x68, 0xd0, 0xa0, 0x40, 0x80, 0x00 +#endif \ No newline at end of file diff --git a/knot/Implementations/crypto_aead/knot256/avr8_speed/permutation.h b/knot/Implementations/crypto_aead/knot256/avr8_speed/permutation.h new file mode 100644 index 0000000..e6c9793 --- /dev/null +++ b/knot/Implementations/crypto_aead/knot256/avr8_speed/permutation.h @@ -0,0 +1,45 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.1 2020 by KNOT Team * +; ********************************************** +; + +; +; ============================================ +; R E G I S T E R D E F I N I T I O N S +; ============================================ +; + +#define mclen r16 +#define radlen r17 +#define tcnt r17 +#define tmp0 r20 +#define tmp1 r21 +#define cnt0 r22 +#define rn r23 +#define rate r24 + + +; AEDH = 0b000: for authenticate AD +; AEDH = 0b001: for encryption +; AEDH = 0b011: for decryption +; AEDH = 0b100: for hash +#define AEDH r25 +#define rcnt r26 + +#if (STATE_INBITS==256) +#include "knot256.h" +#elif (STATE_INBITS==384) +#include "knot384.h" +#elif (STATE_INBITS==512) +#include "knot512.h" +#else +#error "Not specified key size and state size" +#endif + + diff --git a/knot/Implementations/crypto_hash/knot256v1/avr8_lowrom/api.h b/knot/Implementations/crypto_hash/knot256v1/avr8_lowrom/api.h new file mode 100644 index 0000000..cb530c7 --- /dev/null +++ b/knot/Implementations/crypto_hash/knot256v1/avr8_lowrom/api.h @@ -0,0 +1 @@ +#define CRYPTO_BYTES 32 \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot256v1/avr8_lowrom/assist.h b/knot/Implementations/crypto_hash/knot256v1/avr8_lowrom/assist.h new file mode 100644 index 0000000..cb903a5 --- /dev/null +++ b/knot/Implementations/crypto_hash/knot256v1/avr8_lowrom/assist.h @@ -0,0 +1,140 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by KNOT Team * +; ********************************************** +; +.macro LFSR6_MACRO + bst rc, 5 + bld tmp0, 0 + bst rc, 4 + bld tmp1, 0 + eor tmp0, tmp1 + ror tmp0 + rol rc + andi rc, 0x3F +.endm + +.macro LFSR7_MACRO + bst rc, 6 + bld tmp0, 0 + bst rc, 5 + bld tmp1, 0 + eor tmp0, tmp1 + ror tmp0 + rol rc + andi rc, 0x7F +.endm + +.macro LFSR8_MACRO + bst rc, 7 + bld tmp0, 0 + bst rc, 5 + bld tmp1, 0 + eor tmp0, tmp1 + bst rc, 4 + bld tmp1, 0 + eor tmp0, tmp1 + bst rc, 3 + bld tmp1, 0 + eor tmp0, tmp1 + ror tmp0 + rol rc +.endm + +.macro Sbox i0, i1, i2, i3 + mov tmp0, \i1 + com \i0 + and \i1, \i0 + eor \i1, \i2 + or \i2, tmp0 + eor \i0, \i3 + eor \i2, \i0 + eor tmp0, \i3 + and \i0, \i1 + eor \i3, \i1 + eor \i0, tmp0 + and tmp0, \i2 + eor \i1, tmp0 +.endm + +.macro PUSH_CONFLICT + push r16 + push r17 + push r18 + push r19 + + push r23 + push r24 + + push r26 + push r27 + push r28 + push r29 + push r30 + push r31 +.endm + +.macro POP_CONFLICT + pop r31 + pop r30 + pop r29 + pop r28 + pop r27 + pop r26 + + pop r24 + pop r23 + + pop r19 + pop r18 + pop r17 + pop r16 +.endm + +.macro PUSH_ALL + push r2 + push r3 + push r4 + push r5 + push r6 + push r7 + push r8 + push r9 + push r10 + push r11 + push r12 + push r13 + push r14 + push r15 + push r16 + push r17 + push r28 + push r29 +.endm + +.macro POP_ALL + pop r29 + pop r28 + pop r17 + pop r16 + pop r15 + pop r14 + pop r13 + pop r12 + pop r11 + pop r10 + pop r9 + pop r8 + pop r7 + pop r6 + pop r5 + pop r4 + pop r3 + pop r2 + clr r1 +.endm \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot256v1/avr8_lowrom/config.h b/knot/Implementations/crypto_hash/knot256v1/avr8_lowrom/config.h new file mode 100644 index 0000000..467fedb --- /dev/null +++ b/knot/Implementations/crypto_hash/knot256v1/avr8_lowrom/config.h @@ -0,0 +1,131 @@ +#ifndef __CONFIG_H__ +#define __CONFIG_H__ + +//#define CRYPTO_AEAD +#define CRYPTO_HASH + +#define MAX_MESSAGE_LENGTH 128 + +#define STATE_INBITS 256 +/* For CRYPTO_AEAD */ +#define CRYPTO_KEYBITS 128 +/* For CRYPTO_HASH */ +#define CRYPTO_BITS 256 + +#define STATE_INBYTES ((STATE_INBITS + 7) / 8) +#define ROW_INBITS ((STATE_INBITS + 3) / 4) +#define ROW_INBYTES ((ROW_INBITS + 7) / 8) + +/* For CRYPTO_AEAD */ +#define CRYPTO_KEYBYTES ((CRYPTO_KEYBITS + 7) / 8) +#define CRYPTO_NSECBYTES 0 +#define CRYPTO_NPUBBYTES CRYPTO_KEYBYTES +#define CRYPTO_ABYTES CRYPTO_KEYBYTES +#define CRYPTO_NOOVERLAP 1 + +#define MAX_ASSOCIATED_DATA_LENGTH 32 +#define MAX_CIPHER_LENGTH (MAX_MESSAGE_LENGTH + CRYPTO_ABYTES) + +#define TAG_MATCH 0 +#define TAG_UNMATCH -1 +#define OTHER_FAILURES -2 + +/* For CRYPTO_HASH */ +#define CRYPTO_BYTES ((CRYPTO_BITS + 7) / 8) + + + +#define DOMAIN_BITS 0x80 +#define PAD_BITS 0x01 +#define S384_R192_BITS 0x80 + +#if (STATE_INBITS==256) +#define C1 1 +#define C2 8 +#define C3 25 +#elif (STATE_INBITS==384) +#define C1 1 +#define C2 8 +#define C3 55 +#elif (STATE_INBITS==512) +#define C1 1 +#define C2 16 +#define C3 25 +#else +#error "Not specified state size" +#endif + +#ifdef CRYPTO_AEAD +/* For CRYPTO_AEAD */ +#define KEY_INBITS (CRYPTO_KEYBYTES * 8) +#define KEY_INBYTES (CRYPTO_KEYBYTES) + +#define NONCE_INBITS (CRYPTO_NPUBBYTES * 8) +#define NONCE_INBYTES (CRYPTO_NPUBBYTES) + +#define TAG_INBITS (CRYPTO_ABYTES * 8) +#define TAG_INBYTES (CRYPTO_ABYTES) + +#if (KEY_INBITS==128) && (STATE_INBITS==256) +#define RATE_INBITS 64 +#define NR_0 52 +#define NR_i 28 +#define NR_f 32 +#elif (KEY_INBITS==128) && (STATE_INBITS==384) +#define RATE_INBITS 192 +#define NR_0 76 +#define NR_i 28 +#define NR_f 32 +#elif (KEY_INBITS==192) && (STATE_INBITS==384) +#define RATE_INBITS 96 +#define NR_0 76 +#define NR_i 40 +#define NR_f 44 +#elif (KEY_INBITS==256) && (STATE_INBITS==512) +#define RATE_INBITS 128 +#define NR_0 100 +#define NR_i 52 +#define NR_f 56 +#else +#error "Not specified key size and state size" +#endif + +#define RATE_INBYTES ((RATE_INBITS + 7) / 8) +#define SQUEEZE_RATE_INBYTES TAG_INBYTES + +#endif + +#ifdef CRYPTO_HASH +/* For CRYPTO_HASH */ +#define HASH_DIGEST_INBITS (CRYPTO_BYTES * 8) + +#if (HASH_DIGEST_INBITS==256) && (STATE_INBITS==256) +#define HASH_RATE_INBITS 32 +#define HASH_SQUEEZE_RATE_INBITS 128 +#define NR_h 68 +#elif (HASH_DIGEST_INBITS==256) && (STATE_INBITS==384) +#define HASH_RATE_INBITS 128 +#define HASH_SQUEEZE_RATE_INBITS 128 +#define NR_h 80 +#elif (HASH_DIGEST_INBITS==384) && (STATE_INBITS==384) +#define HASH_RATE_INBITS 48 +#define HASH_SQUEEZE_RATE_INBITS 192 +#define NR_h 104 +#elif (HASH_DIGEST_INBITS==512) && (STATE_INBITS==512) +#define HASH_RATE_INBITS 64 +#define HASH_SQUEEZE_RATE_INBITS 256 +#define NR_h 140 +#else +#error "Not specified hash digest size and state size" +#endif + +#define HASH_RATE_INBYTES ((HASH_RATE_INBITS + 7) / 8) +#define HASH_SQUEEZE_RATE_INBYTES ((HASH_SQUEEZE_RATE_INBITS + 7) / 8) + +#endif + +#define TAG_MATCH 0 +#define TAG_UNMATCH -1 +#define OTHER_FAILURES -2 + +#endif \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot256v1/avr8_lowrom/crypto_hash.h b/knot/Implementations/crypto_hash/knot256v1/avr8_lowrom/crypto_hash.h new file mode 100644 index 0000000..342a639 --- /dev/null +++ b/knot/Implementations/crypto_hash/knot256v1/avr8_lowrom/crypto_hash.h @@ -0,0 +1,13 @@ +#ifdef __cplusplus +extern "C" { +#endif + +int crypto_hash( + unsigned char *out, + const unsigned char *in, + unsigned long long inlen + ); + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot256v1/avr8_lowrom/encrypt.c b/knot/Implementations/crypto_hash/knot256v1/avr8_lowrom/encrypt.c new file mode 100644 index 0000000..baf0a3b --- /dev/null +++ b/knot/Implementations/crypto_hash/knot256v1/avr8_lowrom/encrypt.c @@ -0,0 +1,106 @@ +#include +#include +#include +#include +#include "config.h" + +extern void crypto_aead_encrypt_asm( + unsigned char *c, + const unsigned char *m, + unsigned char mlen, + const unsigned char *ad, + unsigned char adlen, + const unsigned char *npub, + const unsigned char *k + ); + +extern int crypto_aead_decrypt_asm( + unsigned char *m, + const unsigned char *c, + unsigned char clen, + const unsigned char *ad, + unsigned char adlen, + const unsigned char *npub, + const unsigned char *k + ); + +extern void crypto_hash_asm( + unsigned char *out, + const unsigned char *in, + unsigned char inlen + ); + + +int crypto_aead_encrypt( + unsigned char *c, unsigned long long *clen, + const unsigned char *m, unsigned long long mlen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k + ) +{ + /* + ... + ... the code for the cipher implementation goes here, + ... generating a ciphertext c[0],c[1],...,c[*clen-1] + ... from a plaintext m[0],m[1],...,m[mlen-1] + ... and associated data ad[0],ad[1],...,ad[adlen-1] + ... and nonce npub[0],npub[1],.. + ... and secret key k[0],k[1],... + ... the implementation shall not use nsec + ... + ... return 0; + */ + + (void)nsec; + + crypto_aead_encrypt_asm(c, m, mlen, ad, adlen, npub, k); + + *clen = mlen + TAG_INBYTES; + return 0; +} + + + +int crypto_aead_decrypt( + unsigned char *m, unsigned long long *mlen, + unsigned char *nsec, + const unsigned char *c, unsigned long long clen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k + ) +{ + /* + ... + ... the code for the AEAD implementation goes here, + ... generating a plaintext m[0],m[1],...,m[*mlen-1] + ... and secret message number nsec[0],nsec[1],... + ... from a ciphertext c[0],c[1],...,c[clen-1] + ... and associated data ad[0],ad[1],...,ad[adlen-1] + ... and nonce number npub[0],npub[1],... + ... and secret key k[0],k[1],... + ... + ... return 0; + */ + unsigned long long mlen_; + unsigned char tag_is_match; + + (void)nsec; + if (clen < CRYPTO_ABYTES) { + return -1; + } + mlen_ = clen - CRYPTO_ABYTES; + + tag_is_match = crypto_aead_decrypt_asm(m, c, mlen_, ad, adlen, npub, k); + + if (tag_is_match != 0) + { + memset(m, 0, (size_t)mlen_); + return -1; + } + + *mlen = mlen_; + return 0; +} \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot256v1/avr8_lowrom/encrypt_core.S b/knot/Implementations/crypto_hash/knot256v1/avr8_lowrom/encrypt_core.S new file mode 100644 index 0000000..cb7aed5 --- /dev/null +++ b/knot/Implementations/crypto_hash/knot256v1/avr8_lowrom/encrypt_core.S @@ -0,0 +1,537 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by KNOT Team * +; ********************************************** +; + +; +; ============================================ +; S R A M D E F I N I T I O N S +; ============================================ +; +#include +#include "config.h" + +.section .noinit + SRAM_STATE: .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#if (STATE_INBYTES > 32) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif +#if (STATE_INBYTES > 48) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif + SRAM_MESSAGE_OUT_ADDR: .BYTE 0, 0 + SRAM_MESSAGE_IN_ADDR: .BYTE 0, 0 + SRAM_MESSAGE_IN_LEN: .BYTE 0, 0 +#ifdef CRYPTO_AEAD +; For CRYPTO_AEAD + SRAM_ASSOCIATED_DATA_ADDR: .BYTE 0, 0 + SRAM_ADLEN: .BYTE 0, 0 + SRAM_NONCE_ADDR: .BYTE 0, 0 + SRAM_KEY_ADDR: .BYTE 0, 0 + + SRAM_ADDITIONAL: + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#if (CRYPTO_ABYTES > 16) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif +#if (CRYPTO_ABYTES > 24) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif + +#endif + +.section .text + +#include "permutation.h" + +; require YH:YL be the address of the current associated data/cipher/message block +; for enc and dec, store ciphertext or plaintext +; require ZH:ZL be the address of the current cipher/message block +XOR_to_State: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + mov cnt0, rate +XOR_to_State_loop: + ld tmp0, Y+ ; plaintext/ciphertext + ld tmp1, X ; state + eor tmp1, tmp0 ; ciphertext/plaintext + sbrc AEDH, 0 ; test auth or enc/dec, if AEDH[0] == 0, skip store result + st Z+, tmp1 ; store ciphertext/plaintext + sbrc AEDH, 1 ; test auth/enc or dec, if AEDH[1] == 0, skip repalce state byte + mov tmp1, tmp0 ; if dec, replace state + st X+, tmp1 ; store state byte + dec cnt0 + brne XOR_to_State_loop +; YH:YL are now the address of the next associated data block +ret + +; require YH:YL pointed to the input data +; require ZH:ZL pointed to the output data +; require cnt0 containes the nubmer of bytes in source data +; require number of bytes in source data less than rate, i.e., 0 <= cnt0 < rate +; +; the 0th bit in AEDH is used to distinguish (auth AD) or (enc/dec M/C): +; AEDH[0] = 0 for (auth AD), AEDH[0] = 1 for (enc/dec M/C) +; the 1th bit in AEDH is used to distinguish (auth AD/enc M) or (dec C): +; AEDH[1] = 0 for (auth AD/enc M), AEDH[1] = 1 for (dec C) +; AEDH = 0b000 for (auth AD) +; AEDH = 0b001 for (enc M) +; AEDH = 0b011 for (dec C) +Pad_XOR_to_State: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + tst cnt0 + breq XOR_padded_data +XOR_source_data_loop: + ld tmp0, Y+ ; plaintext/ciphertext + ld tmp1, X ; state + eor tmp1, tmp0 ; ciphertext/plaintext + sbrc AEDH, 0 ; test auth or enc/dec, if AEDH[0] == 0, skip store result + st Z+, tmp1 ; store ciphertext/plaintext + sbrc AEDH, 1 ; test auth/enc or dec, if AEDH[1] == 0, skip repalce state byte + mov tmp1, tmp0 ; if dec, replace state + st X+, tmp1 ; store state byte + dec cnt0 + brne XOR_source_data_loop +XOR_padded_data: + ldi tmp0, PAD_BITS + ld tmp1, X + eor tmp1, tmp0 + st X, tmp1 +ret + +AddDomain: + ldi XH, hi8(SRAM_STATE + STATE_INBYTES - 1) + ldi XL, lo8(SRAM_STATE + STATE_INBYTES - 1) + ldi tmp0, DOMAIN_BITS + ld tmp1, X + eor tmp0, tmp1 + st X, tmp0 +ret + +; require ZH:ZL be the address of the destination +EXTRACT_from_State: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + mov tmp1, rate +EXTRACT_from_State_loop: + ld tmp0, X+ + st Z+, tmp0 + dec tmp1 + brne EXTRACT_from_State_loop +ret + +AUTH: + tst radlen + breq AUTH_end + + cp radlen, rate + brlo auth_ad_padded_block + +auth_ad_loop: + rcall XOR_to_State + rcall Permutation + sub radlen, rate + cp radlen, rate + brlo auth_ad_padded_block + rjmp auth_ad_loop + +auth_ad_padded_block: + mov cnt0, radlen + rcall Pad_XOR_to_State + rcall Permutation + +AUTH_end: +ret + +#ifdef CRYPTO_AEAD +Initialization: + ldi rn, NR_0 + ldi XL, lo8(SRAM_STATE) + ldi XH, hi8(SRAM_STATE) + + lds YH, SRAM_NONCE_ADDR + lds YL, SRAM_NONCE_ADDR + 1 + ldi cnt0, CRYPTO_NPUBBYTES +load_nonce_loop: + ld tmp0, Y+ + st X+, tmp0 + dec cnt0 + brne load_nonce_loop + + lds YH, SRAM_KEY_ADDR + lds YL, SRAM_KEY_ADDR + 1 + ldi cnt0, CRYPTO_KEYBYTES +load_key_loop: + ld tmp0, Y+ + st X+, tmp0 + dec cnt0 + brne load_key_loop + +#if (STATE_INBITS==384) && (RATE_INBITS==192) + ldi cnt0, (STATE_INBYTES - CRYPTO_NPUBBYTES - CRYPTO_KEYBYTES - 1) + clr tmp0 +empty_state_loop: + st X+, tmp0 + dec cnt0 + brne empty_state_loop + ldi tmp0, S384_R192_BITS + st X+, tmp0 +#endif + + rcall Permutation +ret + +ENC: + tst mclen + breq ENC_end + + cp mclen, rate + brlo enc_padded_block + +enc_loop: + rcall XOR_to_State + ldi rn, NR_i + rcall Permutation + sub mclen, rate + cp mclen, rate + brlo enc_padded_block + rjmp enc_loop + +enc_padded_block: + mov cnt0, mclen + rcall Pad_XOR_to_State +ENC_end: +ret + +Finalization: + ldi rate, SQUEEZE_RATE_INBYTES + ldi rn, NR_f + rcall Permutation + rcall EXTRACT_from_State +ret + +; void crypto_aead_encrypt_asm( +; unsigned char *c, +; const unsigned char *m, +; unsigned long long mlen, +; const unsigned char *ad, +; unsigned long long adlen, +; const unsigned char *npub, +; const unsigned char *k +; ) +; +; unsigned char *c, is passed in r24:r25 +; const unsigned char *m, is passed in r22:r23 +; unsigned long long mlen, is passed in r20:r21, only LSB (r20) is used +; const unsigned char *ad, is passed in r18:r19 +; unsigned long long adlen, is passed in r16:r17, only LSB (r16) is used +; const unsigned char *npub, is passed in r14:r15 +; const unsigned char *k is passed in r12:r13 +.global crypto_aead_encrypt_asm +crypto_aead_encrypt_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store cipher address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store message address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store message length in SRAM_MESSAGE_IN_LEN + st X+, r20 + st X+, r19 ;store associated data address in SRAM_ASSOCIATED_DATA_ADDR + st X+, r18 + st X+, r17 ;store associated data length in SRAM_ADLEN + st X+, r16 + st X+, r15 ;store nonce address in SRAM_NONCE_ADDR + st X+, r14 + st X+, r13 ;store key address in SRAM_KEY_ADDR + st X+, r12 + mov radlen, r16 + mov mclen, r20 + + rcall Initialization + + ldi rn, NR_i + ldi rate, RATE_INBYTES + ldi AEDH, 0b000 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_ASSOCIATED_DATA_ADDR + lds YL, SRAM_ASSOCIATED_DATA_ADDR + 1 + rcall AUTH + rcall AddDomain + ldi AEDH, 0b001 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_MESSAGE_IN_ADDR + lds YL, SRAM_MESSAGE_IN_ADDR + 1 + lds ZH, SRAM_MESSAGE_OUT_ADDR + lds ZL, SRAM_MESSAGE_OUT_ADDR + 1 + rcall ENC + rcall Finalization + POP_ALL +ret + +; int crypto_aead_decrypt_asm( +; unsigned char *m, +; const unsigned char *c, +; unsigned long long clen, +; const unsigned char *ad, +; unsigned long long adlen, +; const unsigned char *npub, +; const unsigned char *k +; ) +; +; unsigned char *m, is passed in r24:r25 +; const unsigned char *c, is passed in r22:r23 +; unsigned long long clen, is passed in r20:r21, only LSB (r20) is used +; const unsigned char *ad, is passed in r18:r19 +; unsigned long long adlen, is passed in r16:r17, only LSB (r16) is used +; const unsigned char *npub, is passed in r14:r15 +; const unsigned char *k is passed in r12:r13 +.global crypto_aead_decrypt_asm +crypto_aead_decrypt_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store message address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store cipher address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store cipher length in SRAM_MESSAGE_IN_LEN + st X+, r20 + st X+, r19 ;store associated data address in SRAM_ASSOCIATED_DATA_ADDR + st X+, r18 + st X+, r17 ;store associated data length in SRAM_ADLEN + st X+, r16 + st X+, r15 ;store nonce address in SRAM_NONCE_ADDR + st X+, r14 + st X+, r13 ;store key address in SRAM_KEY_ADDR + st X+, r12 + mov radlen, r16 + mov mclen, r20 + + rcall Initialization + + ldi rn, NR_i + ldi rate, RATE_INBYTES + ldi AEDH, 0b000 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_ASSOCIATED_DATA_ADDR + lds YL, SRAM_ASSOCIATED_DATA_ADDR + 1 + rcall AUTH + rcall AddDomain + ldi AEDH, 0b011 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_MESSAGE_IN_ADDR + lds YL, SRAM_MESSAGE_IN_ADDR + 1 + lds ZH, SRAM_MESSAGE_OUT_ADDR + lds ZL, SRAM_MESSAGE_OUT_ADDR + 1 + rcall ENC + + ldi ZH, hi8(SRAM_ADDITIONAL) + ldi ZL, lo8(SRAM_ADDITIONAL) + rcall Finalization + + sbiw ZL, CRYPTO_ABYTES + ldi cnt0, CRYPTO_ABYTES +compare_tag: + ld tmp0, Z+ + ld tmp1, Y+ + cp tmp0, tmp1 + brne return_tag_not_match + dec cnt0 + brne compare_tag + rjmp return_tag_match + +return_tag_not_match: + ldi r25, 0xFF + ldi r24, 0xFF + rjmp crypto_aead_decrypt_end + +return_tag_match: + clr r25 + clr r24 +crypto_aead_decrypt_end: + POP_ALL +ret + +; #ifdef CRYPTO_AEAD +#endif + + +#ifdef CRYPTO_HASH + +; void crypto_hash_asm( +; unsigned char *out, +; const unsigned char *in, +; unsigned long long inlen +; ) +; +; unsigned char *out, is passed in r24:r25 +; const unsigned char *in, is passed in r22:r23 +; unsigned long long inlen, is passed in r20:r21, only LSB (r20) is used +.global crypto_hash_asm +crypto_hash_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store message address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store cipher address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store cipher length in SRAM_MESSAGE_IN_LEN + st X+, r20 + mov mclen, r20 + + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) +#if (STATE_INBITS==384) && (HASH_RATE_INBITS==128) + ldi cnt0, STATE_INBYTES - 1 +#else + ldi cnt0, STATE_INBYTES +#endif + clr tmp0 +zero_state: + st X+, tmp0 + dec cnt0 + brne zero_state + +#if (STATE_INBITS==384) && (HASH_RATE_INBITS==128) + ldi tmp0, S384_R192_BITS + st X+, tmp0 +#endif + + ldi rn, NR_h + ldi AEDH, 0b100 + +HASH_ABSORBING: + mov radlen, mclen + tst radlen + breq EMPTY_M + ldi rate, HASH_RATE_INBYTES + lds YH, SRAM_MESSAGE_IN_ADDR + lds YL, SRAM_MESSAGE_IN_ADDR + 1 + rcall AUTH + rjmp HASH_SQUEEZING + +EMPTY_M: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + ldi tmp0, PAD_BITS + ld tmp1, X + eor tmp1, tmp0 + st X, tmp1 + rcall Permutation + +HASH_SQUEEZING: + ldi rate, HASH_SQUEEZE_RATE_INBYTES + lds ZH, SRAM_MESSAGE_OUT_ADDR + lds ZL, SRAM_MESSAGE_OUT_ADDR + 1 + ldi tcnt, CRYPTO_BYTES +SQUEEZING_loop: + rcall EXTRACT_from_State + subi tcnt, HASH_SQUEEZE_RATE_INBYTES + breq HASH_SQUEEZING_end + rcall Permutation + rjmp SQUEEZING_loop +HASH_SQUEEZING_end: + POP_ALL +ret + +#endif + + +; Byte Order In AVR 8: +; KNOT-AEAD(128, 256, 64): +; N[ 0] AEAD_State[ 0] | Message[ 0] Perm_row_0[0] 0 Tag[ 0] +; N[ 1] AEAD_State[ 1] | Message[ 1] Perm_row_0[1] 0 Tag[ 1] +; N[ 2] AEAD_State[ 2] | Message[ 2] Perm_row_0[2] 0 Tag[ 2] +; N[ 3] AEAD_State[ 3] | Message[ 3] Perm_row_0[3] 0 Tag[ 3] +; N[ 4] AEAD_State[ 4] | Message[ 4] 0x01 Perm_row_0[4] 0 Tag[ 4] +; N[ 5] AEAD_State[ 5] | Message[ 5] 0x00 Perm_row_0[5] 0 Tag[ 5] +; N[ 6] AEAD_State[ 6] | Message[ 6] 0x00 Perm_row_0[6] 0 Tag[ 6] +; N[ 7] AEAD_State[ 7] | Message[ 7] 0x00 Perm_row_0[7] <<< 0 Tag[ 7] +; N[ 8] AEAD_State[ 8] | Perm_row_1[0] 1 +; N[ 9] AEAD_State[ 9] | Perm_row_1[1] 1 +; N[10] AEAD_State[10] | Perm_row_1[2] 1 +; N[11] AEAD_State[11] | Perm_row_1[3] 1 +; N[12] AEAD_State[12] | Perm_row_1[4] 1 +; N[13] AEAD_State[13] | Perm_row_1[5] 1 +; N[14] AEAD_State[14] | Perm_row_1[6] 1 +; N[15] AEAD_State[15] | Perm_row_1[7] <<< 1 +; K[ 0] AEAD_State[16] | Perm_row_2[0] 8 +; K[ 1] AEAD_State[17] | Perm_row_2[1] 8 +; K[ 2] AEAD_State[18] | Perm_row_2[2] 8 +; K[ 3] AEAD_State[19] | Perm_row_2[3] 8 +; K[ 4] AEAD_State[20] | Perm_row_2[4] 8 +; K[ 5] AEAD_State[21] | Perm_row_2[5] 8 +; K[ 6] AEAD_State[22] | Perm_row_2[6] 8 +; K[ 7] AEAD_State[23] | Perm_row_2[7] <<< 8 +; K[ 8] AEAD_State[24] | Perm_row_3[0] 25 +; K[ 9] AEAD_State[25] | Perm_row_3[1] 25 +; K[10] AEAD_State[26] | Perm_row_3[2] 25 +; K[11] AEAD_State[27] | Perm_row_3[3] 25 +; K[12] AEAD_State[28] | Perm_row_3[4] 25 +; K[13] AEAD_State[29] | Perm_row_3[5] 25 +; K[14] AEAD_State[30] | Perm_row_3[6] 25 +; K[15] AEAD_State[31] | ^0x80 Perm_row_3[7] <<< 25 +; +; +; KNOT-AEAD(128, 384, 192): +; Initalization +; N[ 0] AEAD_State[ 0] | Message[ 0] Perm_row_0[ 0] 0 Tag[ 0] +; N[ 1] AEAD_State[ 1] | Message[ 1] Perm_row_0[ 1] 0 Tag[ 1] +; N[ 2] AEAD_State[ 2] | Message[ 2] Perm_row_0[ 2] 0 Tag[ 2] +; N[ 3] AEAD_State[ 3] | Message[ 3] Perm_row_0[ 3] 0 Tag[ 3] +; N[ 4] AEAD_State[ 4] | Message[ 4] 0x01 Perm_row_0[ 4] 0 Tag[ 4] +; N[ 5] AEAD_State[ 5] | Message[ 5] 0x00 Perm_row_0[ 5] 0 Tag[ 5] +; N[ 6] AEAD_State[ 6] | Message[ 6] 0x00 Perm_row_0[ 6] 0 Tag[ 6] +; N[ 7] AEAD_State[ 7] | Message[ 7] 0x00 Perm_row_0[ 7] 0 Tag[ 7] +; N[ 8] AEAD_State[ 8] | Message[ 8] 0x00 Perm_row_0[ 8] 0 Tag[ 8] +; N[ 9] AEAD_State[ 9] | Message[ 9] 0x00 Perm_row_0[ 9] 0 Tag[ 9] +; N[10] AEAD_State[10] | Message[10] 0x00 Perm_row_0[10] 0 Tag[10] +; N[11] AEAD_State[11] | Message[11] 0x00 Perm_row_0[11] <<< 0 Tag[11] +; N[12] AEAD_State[12] | Message[12] 0x00 Perm_row_1[ 0] 1 Tag[12] +; N[13] AEAD_State[13] | Message[13] 0x00 Perm_row_1[ 1] 1 Tag[13] +; N[14] AEAD_State[14] | Message[14] 0x00 Perm_row_1[ 2] 1 Tag[14] +; N[15] AEAD_State[15] | Message[15] 0x00 Perm_row_1[ 3] 1 Tag[15] +; K[ 0] AEAD_State[16] | Message[16] 0x00 Perm_row_1[ 4] 1 +; K[ 1] AEAD_State[17] | Message[17] 0x00 Perm_row_1[ 5] 1 +; K[ 2] AEAD_State[18] | Message[18] 0x00 Perm_row_1[ 6] 1 +; K[ 3] AEAD_State[19] | Message[19] 0x00 Perm_row_1[ 7] 1 +; K[ 4] AEAD_State[20] | Message[20] 0x00 Perm_row_1[ 8] 1 +; K[ 5] AEAD_State[21] | Message[21] 0x00 Perm_row_1[ 9] 1 +; K[ 6] AEAD_State[22] | Message[22] 0x00 Perm_row_1[10] 1 +; K[ 7] AEAD_State[23] | Message[23] 0x00 Perm_row_1[11] <<< 1 +; K[ 8] AEAD_State[24] | Perm_row_2[ 0] 8 +; K[ 9] AEAD_State[25] | Perm_row_2[ 1] 8 +; K[10] AEAD_State[26] | Perm_row_2[ 2] 8 +; K[11] AEAD_State[27] | Perm_row_2[ 3] 8 +; K[12] AEAD_State[28] | Perm_row_2[ 4] 8 +; K[13] AEAD_State[29] | Perm_row_2[ 5] 8 +; K[14] AEAD_State[30] | Perm_row_2[ 6] 8 +; K[15] AEAD_State[31] | Perm_row_2[ 7] 8 +; 0x00 AEAD_State[32] | Perm_row_2[ 8] 8 +; 0x00 AEAD_State[33] | Perm_row_2[ 9] 8 +; 0x00 AEAD_State[34] | Perm_row_2[10] 8 +; 0x00 AEAD_State[35] | Perm_row_2[11] <<< 8 +; 0x00 AEAD_State[36] | Perm_row_3[ 0] 55 +; 0x00 AEAD_State[37] | Perm_row_3[ 1] 55 +; 0x00 AEAD_State[38] | Perm_row_3[ 2] 55 +; 0x00 AEAD_State[39] | Perm_row_3[ 3] 55 +; 0x00 AEAD_State[40] | Perm_row_3[ 4] 55 +; 0x00 AEAD_State[41] | Perm_row_3[ 5] 55 +; 0x00 AEAD_State[42] | Perm_row_3[ 6] 55 +; 0x00 AEAD_State[43] | Perm_row_3[ 7] 55 +; 0x00 AEAD_State[44] | Perm_row_3[ 8] 55 +; 0x00 AEAD_State[45] | Perm_row_3[ 9] 55 +; 0x00 AEAD_State[46] | Perm_row_3[10] 55 +; 0x00 ^0x80 AEAD_State[47] | ^0x80 Perm_row_3[11] <<< 55 diff --git a/knot/Implementations/crypto_hash/knot256v1/avr8_lowrom/hash.c b/knot/Implementations/crypto_hash/knot256v1/avr8_lowrom/hash.c new file mode 100644 index 0000000..dbbe4df --- /dev/null +++ b/knot/Implementations/crypto_hash/knot256v1/avr8_lowrom/hash.c @@ -0,0 +1,32 @@ +#include +#include +#include +#include +#include "api.h" +#include "crypto_hash.h" + +extern void crypto_hash_asm( + unsigned char *out, + const unsigned char *in, + unsigned char inlen + ); + +int crypto_hash( + unsigned char *out, + const unsigned char *in, + unsigned long long inlen +) +{ + /* + ... + ... the code for the hash function implementation goes here + ... generating a hash value out[0],out[1],...,out[CRYPTO_BYTES-1] + ... from a message in[0],in[1],...,in[in-1] + ... + ... return 0; + */ + + crypto_hash_asm(out, in, inlen); + + return 0; +} \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot256v1/avr8_lowrom/knot256.h b/knot/Implementations/crypto_hash/knot256v1/avr8_lowrom/knot256.h new file mode 100644 index 0000000..d16bf8c --- /dev/null +++ b/knot/Implementations/crypto_hash/knot256v1/avr8_lowrom/knot256.h @@ -0,0 +1,197 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by KNOT Team * +; ********************************************** +; +#include "assist.h" + +Permutation: + PUSH_CONFLICT + mov rcnt, rn + + ldi rc, 0x01 + ldi YH, hi8(SRAM_STATE + 3 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 3 * ROW_INBYTES) + ld x30, Y+ + ld x31, Y+ + ld x32, Y+ + ld x33, Y+ + ld x34, Y+ + ld x35, Y+ + ld x36, Y+ + ld x37, Y+ + +round_loop_start: + rjmp AddRC_SubColumns_Start + +load_columns_table: + rjmp load_column0 + rjmp load_column1 + rjmp load_column2 + rjmp load_column3 + rjmp load_column4 + rjmp load_column5 + rjmp load_column6 + rjmp load_column7 + rjmp amend_shiftRow + +load_column0: + mov x3j, x30 + rjmp Sbox_one_column +load_column1: + mov x30, x3j + mov x3j, x31 + rjmp Sbox_one_column +load_column2: + mov x31, x3j + mov x3j, x32 + rjmp Sbox_one_column +load_column3: + mov x32, x3j + mov x3j, x33 + rjmp Sbox_one_column +load_column4: + mov x33, x3j + mov x3j, x34 + rjmp Sbox_one_column +load_column5: + mov x34, x3j + mov x3j, x35 + rjmp Sbox_one_column +load_column6: + mov x35, x3j + mov x3j, x36 + rjmp Sbox_one_column +load_column7: + mov x36, x3j + mov x3j, x37 + rjmp Sbox_one_column + +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) +LFSR_table: + rjmp LFSR6 + rjmp LFSR7 +LFSR6: + LFSR6_MACRO + rjmp LFSR_DONE +LFSR7: + LFSR7_MACRO + rjmp LFSR_DONE +#endif + +;;;;;;;;;;;;;;;;;;;;;;;; Real Start +AddRC_SubColumns_Start: + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + clr ccnt + ld x0j, Y + eor x0j, rc + +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) + ldi ZL, pm_lo8(LFSR_table) + ldi ZH, pm_hi8(LFSR_table) + sbrc AEDH, 2 ; AEDH[2] = 0 for AEAD and AEDH[1] = 1 for HASH + adiw ZL, 1 + ijmp +LFSR_DONE: +#elif defined(CRYPTO_AEAD) + LFSR6_MACRO ; only AEAD +#else + LFSR7_MACRO ; only HASH +#endif + + ldd x1j, Y + ROW_INBYTES + ldd x2j, Y + 2 * ROW_INBYTES + ldi ZL, pm_lo8(load_columns_table) + ldi ZH, pm_hi8(load_columns_table) + ijmp +Sbox_one_column: + Sbox x0j, x1j, x2j, x3j + + ; 7 6 5 4 3 2 1 0 + ; -- -- -- -- -- -- -- x- 0 + ; -- -- -- -- -- -- -- x' 0 + ; -- -- -- -- -- -- x- -- 1 + ; -- -- -- -- x' -- -- -- 3 + ; 4 3 2 1 0 7 6 5 + ; Store a byte to Row 0 + st Y, x0j + ; Store a byte combined with ShiftRow1 + lsl t1j + mov t1j, x1j ; back up the last updated byte in t1j, to be used in shiftRow1 (1 bit left) + rol x1j + std Y + ROW_INBYTES, x1j + ; Store a byte combined with ShiftRow2 + inc ccnt + cpi ccnt, ROW_INBYTES + breq ROW2_WRAP + ldd t2j, Y + 2 * ROW_INBYTES + 1 ; load next byte, the last updated byte needed to be shifted to the address of the next bytes + std Y + 2 * ROW_INBYTES + 1, x2j + mov x2j, t2j + jmp NO_ROW2_WRAP +ROW2_WRAP: + std Y + ROW_INBYTES + 1, x2j + ; remain ShiftRow3 to be done at 'amend_shiftRow' +NO_ROW2_WRAP: + adiw YL, 1 + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + + adiw ZL, 1 + ijmp + +amend_shiftRow: + ldi YH, hi8(SRAM_STATE + ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + ROW_INBYTES) + + ld x1j, Y + bst t1j, 7 + bld x1j, 0 + st Y, x1j + + ; <<< 1 + mov x37, x3j + rol x3j + rol x30 + rol x31 + rol x32 + rol x33 + rol x34 + rol x35 + rol x36 + rol x37 + ; <<< 24 + ; 7 6 5 4 3 2 1 0 => 4 3 2 1 0 7 6 5 + mov x3j, x30 + mov x30, x35 + mov x35, x32 + mov x32, x37 + mov x37, x34 + mov x34, x31 + mov x31, x36 + mov x36, x33 + mov x33, x3j + + dec rcnt + breq round_loop_end + rjmp round_loop_start + +round_loop_end: + ldi YH, hi8(SRAM_STATE + 3 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 3 * ROW_INBYTES) + st Y+, x30 + st Y+, x31 + st Y+, x32 + st Y+, x33 + st Y+, x34 + st Y+, x35 + st Y+, x36 + st Y+, x37 + + POP_CONFLICT +ret \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot256v1/avr8_lowrom/knot384.h b/knot/Implementations/crypto_hash/knot256v1/avr8_lowrom/knot384.h new file mode 100644 index 0000000..65c474a --- /dev/null +++ b/knot/Implementations/crypto_hash/knot256v1/avr8_lowrom/knot384.h @@ -0,0 +1,219 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by KNOT Team * +; ********************************************** +; +#include "assist.h" + +Permutation: + PUSH_CONFLICT + mov rcnt, rn + + ldi rc, 0x01 + ldi YH, hi8(SRAM_STATE + 3 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 3 * ROW_INBYTES) + ld x30, Y+ + ld x31, Y+ + ld x32, Y+ + ld x33, Y+ + ld x34, Y+ + ld x35, Y+ + ld x36, Y+ + ld x37, Y+ + ld x38, Y+ + ld x39, Y+ + ld x3a, Y+ + ld x3b, Y+ + +round_loop_start: + rjmp AddRC_SubColumns_Start + +load_columns_table: + rjmp load_column0 + rjmp load_column1 + rjmp load_column2 + rjmp load_column3 + rjmp load_column4 + rjmp load_column5 + rjmp load_column6 + rjmp load_column7 + rjmp load_column8 + rjmp load_column9 + rjmp load_columna + rjmp load_columnb + rjmp amend_shiftRow + +load_column0: + mov x3j, x30 + rjmp Sbox_one_column +load_column1: + mov x30, x3j + mov x3j, x31 + rjmp Sbox_one_column +load_column2: + mov x31, x3j + mov x3j, x32 + rjmp Sbox_one_column +load_column3: + mov x32, x3j + mov x3j, x33 + rjmp Sbox_one_column +load_column4: + mov x33, x3j + mov x3j, x34 + rjmp Sbox_one_column +load_column5: + mov x34, x3j + mov x3j, x35 + rjmp Sbox_one_column +load_column6: + mov x35, x3j + mov x3j, x36 + rjmp Sbox_one_column +load_column7: + mov x36, x3j + mov x3j, x37 + rjmp Sbox_one_column +load_column8: + mov x37, x3j + mov x3j, x38 + rjmp Sbox_one_column +load_column9: + mov x38, x3j + mov x3j, x39 + rjmp Sbox_one_column +load_columna: + mov x39, x3j + mov x3j, x3a + rjmp Sbox_one_column +load_columnb: + mov x3a, x3j + mov x3j, x3b + rjmp Sbox_one_column + +;;;;;;;;;;;;;;;;;;;;;;;; Real Start +AddRC_SubColumns_Start: + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + ldi ZL, pm_lo8(load_columns_table) + ldi ZH, pm_hi8(load_columns_table) + clr ccnt + ld x0j, Y + eor x0j, rc + LFSR7_MACRO + + ldd x1j, Y + ROW_INBYTES + ldd x2j, Y + 2 * ROW_INBYTES + ijmp +Sbox_one_column: + Sbox x0j, x1j, x2j, x3j + + ; b a 9 8 7 6 5 4 3 2 1 0 + ; -- -- -- -- -- -- -- -- -- -- -- x- 0 + ; -- -- -- -- -- -- -- -- -- -- -- x' 0 + ; -- -- -- -- -- -- -- -- -- -- x- -- 1 + ; -- -- -- -- x' -- -- -- -- -- -- -- 7 + ; 4 3 2 1 0 b a 9 8 7 6 5 + ; Store a byte to Row 0 + st Y, x0j + ; Store a byte combined with ShiftRow 1 + lsl t1j + mov t1j, x1j ; back up the last updated byte in t1j, to be used in shiftRow1 (1 bit left) + rol x1j + std Y + ROW_INBYTES, x1j + ; Store a byte combined with ShiftRow 2 + inc ccnt + cpi ccnt, ROW_INBYTES + breq ROW2_WRAP + ldd t2j, Y + 2 * ROW_INBYTES + 1 ; load next byte, the last updated byte needed to be shifted to the address of the next bytes + std Y + 2 * ROW_INBYTES + 1, x2j + mov x2j, t2j + jmp NO_ROW2_WRAP +ROW2_WRAP: + std Y + ROW_INBYTES + 1, x2j + ; remain ShiftRow3 to be done at 'amend_shiftRow' +NO_ROW2_WRAP: + adiw YL, 1 + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + + adiw ZL, 1 + ijmp + +amend_shiftRow: + ldi YH, hi8(SRAM_STATE + ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + ROW_INBYTES) + + ld x1j, Y + bst t1j, 7 + bld x1j, 0 + st Y, x1j + + ; >>> 1 + mov x3b, x3j + ror x3j + ror x3a + ror x39 + ror x38 + ror x37 + ror x36 + ror x35 + ror x34 + ror x33 + ror x32 + ror x31 + ror x30 + ror x3b + ; <<< 56 + ; b a 9 8 7 6 5 4 3 2 1 0 => 4 3 2 1 0 b a 9 8 7 6 5 + ;mov x3j, x30 + ;mov x30, x35 + ;mov x35, x32 + ;mov x32, x37 + ;mov x37, x34 + ;mov x34, x31 + ;mov x31, x36 + ;mov x36, x33 + ;mov x33, x3j + mov x3j, x30 + mov x30, x35 + mov x35, x3a + mov x3a, x33 + mov x33, x38 + mov x38, x31 + mov x31, x36 + mov x36, x3b + mov x3b, x34 + mov x34, x39 + mov x39, x32 + mov x32, x37 + mov x37, x3j + + dec rcnt + breq round_loop_end + rjmp round_loop_start + +round_loop_end: + + ldi YH, hi8(SRAM_STATE + 3 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 3 * ROW_INBYTES) + st Y+, x30 + st Y+, x31 + st Y+, x32 + st Y+, x33 + st Y+, x34 + st Y+, x35 + st Y+, x36 + st Y+, x37 + st Y+, x38 + st Y+, x39 + st Y+, x3a + st Y+, x3b + + POP_CONFLICT +ret \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot256v1/avr8_lowrom/knot512.h b/knot/Implementations/crypto_hash/knot256v1/avr8_lowrom/knot512.h new file mode 100644 index 0000000..d24b353 --- /dev/null +++ b/knot/Implementations/crypto_hash/knot256v1/avr8_lowrom/knot512.h @@ -0,0 +1,275 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by KNOT Team * +; ********************************************** +; +#include "assist.h" + +Permutation: + PUSH_CONFLICT + mov rcnt, rn + + ldi rc, 0x01 + ldi YH, hi8(SRAM_STATE + 3 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 3 * ROW_INBYTES) + ld x30, Y+ + ld x31, Y+ + ld x32, Y+ + ld x33, Y+ + ld x34, Y+ + ld x35, Y+ + ld x36, Y+ + ld x37, Y+ + ld x38, Y+ + ld x39, Y+ + ld x3a, Y+ + ld x3b, Y+ + ld x3c, Y+ + ld x3d, Y+ + ld x3e, Y+ + ld x3f, Y+ + +round_loop_start: + rjmp AddRC_SubColumns_Start + +load_columns_table: + rjmp load_column0 + rjmp load_column1 + rjmp load_column2 + rjmp load_column3 + rjmp load_column4 + rjmp load_column5 + rjmp load_column6 + rjmp load_column7 + rjmp load_column8 + rjmp load_column9 + rjmp load_columna + rjmp load_columnb + rjmp load_columnc + rjmp load_columnd + rjmp load_columne + rjmp load_columnf + rjmp amend_shiftRow + +load_column0: + mov x3j, x30 + rjmp Sbox_one_column +load_column1: + mov x30, x3j + mov x3j, x31 + rjmp Sbox_one_column +load_column2: + mov x31, x3j + mov x3j, x32 + rjmp Sbox_one_column +load_column3: + mov x32, x3j + mov x3j, x33 + rjmp Sbox_one_column +load_column4: + mov x33, x3j + mov x3j, x34 + rjmp Sbox_one_column +load_column5: + mov x34, x3j + mov x3j, x35 + rjmp Sbox_one_column +load_column6: + mov x35, x3j + mov x3j, x36 + rjmp Sbox_one_column +load_column7: + mov x36, x3j + mov x3j, x37 + rjmp Sbox_one_column +load_column8: + mov x37, x3j + mov x3j, x38 + rjmp Sbox_one_column +load_column9: + mov x38, x3j + mov x3j, x39 + rjmp Sbox_one_column +load_columna: + mov x39, x3j + mov x3j, x3a + rjmp Sbox_one_column +load_columnb: + mov x3a, x3j + mov x3j, x3b + rjmp Sbox_one_column +load_columnc: + mov x3b, x3j + mov x3j, x3c + rjmp Sbox_one_column +load_columnd: + mov x3c, x3j + mov x3j, x3d + rjmp Sbox_one_column +load_columne: + mov x3d, x3j + mov x3j, x3e + rjmp Sbox_one_column +load_columnf: + mov x3e, x3j + mov x3j, x3f + rjmp Sbox_one_column + +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) +LFSR_table: + rjmp LFSR7 + rjmp LFSR8 +LFSR7: + LFSR7_MACRO + rjmp LFSR_DONE +LFSR8: + LFSR8_MACRO + rjmp LFSR_DONE +#endif + +;;;;;;;;;;;;;;;;;;;;;;;; Real Start +AddRC_SubColumns_Start: + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + clr ccnt + ld x0j, Y + eor x0j, rc + +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) + ldi ZL, pm_lo8(LFSR_table) + ldi ZH, pm_hi8(LFSR_table) + sbrc AEDH, 2 ; AEDH[2] = 0 for AEAD and AEDH[1] = 1 for HASH + adiw ZL, 1 + ijmp +LFSR_DONE: +#elif defined(CRYPTO_AEAD) + LFSR7_MACRO ; only AEAD +#else + LFSR8_MACRO ; only HASH +#endif + + ldd x1j, Y + ROW_INBYTES + ldd x2j, Y + 2 * ROW_INBYTES + ldd t2j, Y + 2 * ROW_INBYTES + 1 + ldi ZL, pm_lo8(load_columns_table) + ldi ZH, pm_hi8(load_columns_table) + ijmp +Sbox_one_column: + Sbox x0j, x1j, x2j, x3j + + ; f e d c b a 9 8 7 6 5 4 3 2 1 0 + ; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- x- 0 + ; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- x' 0 + ; -- -- -- -- -- -- -- -- -- -- -- -- -- x- -- -- 2 + ; -- -- -- -- -- -- -- -- -- -- -- -- x' -- -- -- 3 + ; c b a 9 8 7 6 5 4 3 2 1 0 f e d + ; Store a byte to Row 0 + st Y, x0j + ; Store a byte combined with ShiftRow1 + lsl t1j + mov t1j, x1j ; back up the last updated byte in t1j, to be used in shiftRow1 (1 bit left) + rol x1j + std Y + ROW_INBYTES, x1j + ; Store a byte combined with ShiftRow2 + inc ccnt + cpi ccnt, ROW_INBYTES - 1 + brsh ROW2_WRAP + ldd tmp0, Y + 2 * ROW_INBYTES + 2 ; load next byte, the last updated byte needed to be shifted to the address of the next bytes + std Y + 2 * ROW_INBYTES + 2, x2j + mov x2j, t2j + mov t2j, tmp0 + jmp NO_ROW2_WRAP +ROW2_WRAP: + std Y + ROW_INBYTES + 2, x2j + mov x2j, t2j + + ; remain ShiftRow3 to be done at 'amend_shiftRow' +NO_ROW2_WRAP: + adiw YL, 1 + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + + adiw ZL, 1 + ijmp + +amend_shiftRow: + ldi YH, hi8(SRAM_STATE + ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + ROW_INBYTES) + + ld x1j, Y + bst t1j, 7 + bld x1j, 0 + st Y, x1j + + ; <<< 1 + mov x3f, x3j + rol x3j + rol x30 + rol x31 + rol x32 + rol x33 + rol x34 + rol x35 + rol x36 + rol x37 + rol x38 + rol x39 + rol x3a + rol x3b + rol x3c + rol x3d + rol x3e + rol x3f + ; <<< 24 + ; f e d c b a 9 8 7 6 5 4 3 2 1 0 => + ; c b a 9 8 7 6 5 4 3 2 1 0 f e d + mov x3j, x30 + mov x30, x3d + mov x3d, x3a + mov x3a, x37 + mov x37, x34 + mov x34, x31 + mov x31, x3e + mov x3e, x3b + mov x3b, x38 + mov x38, x35 + mov x35, x32 + mov x32, x3f + mov x3f, x3c + mov x3c, x39 + mov x39, x36 + mov x36, x33 + mov x33, x3j + + dec rcnt + breq round_loop_end + rjmp round_loop_start + +round_loop_end: + + ldi YH, hi8(SRAM_STATE + 3 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 3 * ROW_INBYTES) + st Y+, x30 + st Y+, x31 + st Y+, x32 + st Y+, x33 + st Y+, x34 + st Y+, x35 + st Y+, x36 + st Y+, x37 + st Y+, x38 + st Y+, x39 + st Y+, x3a + st Y+, x3b + st Y+, x3c + st Y+, x3d + st Y+, x3e + st Y+, x3f + + POP_CONFLICT +ret \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot256v1/avr8_lowrom/permutation.h b/knot/Implementations/crypto_hash/knot256v1/avr8_lowrom/permutation.h new file mode 100644 index 0000000..a57c5d3 --- /dev/null +++ b/knot/Implementations/crypto_hash/knot256v1/avr8_lowrom/permutation.h @@ -0,0 +1,109 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by KNOT Team * +; ********************************************** +; + +; +; ============================================ +; R E G I S T E R D E F I N I T I O N S +; ============================================ +; + +#define mclen r16 +#define radlen r17 +#define tcnt r17 +#define tmp0 r20 +#define tmp1 r21 +#define cnt0 r22 +#define rn r23 +#define rate r24 + +; +; ; AEDH = 0b000: for authenticate AD +; ; AEDH = 0b001: for encryption +; ; AEDH = 0b011: for decryption +; ; AEDH = 0b100: for hash +; #define AEDH r25 ; Register used globally within this program +; +; #define x30 r0 ; Register used without overlapping +; #define x31 r1 ; Register used without overlapping +; #define x32 r2 ; Register used without overlapping +; #define x33 r3 ; Register used without overlapping +; #define x34 r4 ; Register used without overlapping +; #define x35 r5 ; Register used without overlapping +; #define x36 r6 ; Register used without overlapping +; #define x37 r7 ; Register used without overlapping +; #define x38 r8 ; Register used without overlapping +; #define x39 r9 ; Register used without overlapping +; #define x3a r10 ; Register used without overlapping +; #define x3b r11 ; Register used without overlapping +; #define x3c r12 ; Register used without overlapping +; #define x3d r13 ; Register used without overlapping +; #define x3e r14 ; Register used without overlapping +; #define x3f r15 ; Register used without overlapping +; +; #define x0j r16 ; Register used overlapped, should be backed up before using +; #define x1j r17 ; Register used overlapped, should be backed up before using +; #define x2j r18 ; Register used overlapped, should be backed up before using +; #define x3j r19 ; Register used overlapped, should be backed up before using +; +; ; t2j used in knot512 to keep one byte in Row2 (because of rotating 16-bit), +; ; will not be interupt with LFSR which uses the overlapped register tmp1 +; #define t2j r21 ; Temporary register, used freely +; #define t1j r22 ; Temporary register, used freely +; #define t3j r23 ; Temporary register, used freely +; +; #define rc r24 ; Register used overlapped, should be backed up before using +; #define rcnt r26 ; Register used overlapped, should be backed up before using +; #define ccnt r27 ; Register used overlapped, should be backed up before using + +#define AEDH r25 +#define x30 r0 +#define x31 r1 +#define x32 r2 +#define x33 r3 +#define x34 r4 +#define x35 r5 +#define x36 r6 +#define x37 r7 +#define x38 r8 +#define x39 r9 +#define x3a r10 +#define x3b r11 +#define x3c r12 +#define x3d r13 +#define x3e r14 +#define x3f r15 + +#define x0j r16 +#define x1j r17 +#define x2j r18 +#define x3j r19 + +; t2j used in knot512 to keep one byte in Row2 (because of rotating 16-bit), +; will not be interupt with LFSR which uses the overlapped register tmp1 +#define t2j r21 +#define t1j r22 +#define t3j r23 + +#define rc r24 +#define rcnt r26 +#define ccnt r27 + +#if (STATE_INBITS==256) +#include "knot256.h" +#elif (STATE_INBITS==384) +#include "knot384.h" +#elif (STATE_INBITS==512) +#include "knot512.h" +#else +#error "Not specified key size and state size" +#endif + + diff --git a/knot/Implementations/crypto_hash/knot256v1/avr8_speed/api.h b/knot/Implementations/crypto_hash/knot256v1/avr8_speed/api.h new file mode 100644 index 0000000..cb530c7 --- /dev/null +++ b/knot/Implementations/crypto_hash/knot256v1/avr8_speed/api.h @@ -0,0 +1 @@ +#define CRYPTO_BYTES 32 \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot256v1/avr8_speed/assist.h b/knot/Implementations/crypto_hash/knot256v1/avr8_speed/assist.h new file mode 100644 index 0000000..f95a717 --- /dev/null +++ b/knot/Implementations/crypto_hash/knot256v1/avr8_speed/assist.h @@ -0,0 +1,86 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.1 2020 by KNOT Team * +; ********************************************** +; +.macro PUSH_CONFLICT + push r16 + push r17 + push r18 + push r19 + + push r23 + push r24 + push r25 + push r26 + push r27 + push r28 + push r29 + push r30 + push r31 +.endm + +.macro POP_CONFLICT + pop r31 + pop r30 + pop r29 + pop r28 + pop r27 + pop r26 + pop r25 + pop r24 + pop r23 + + pop r19 + pop r18 + pop r17 + pop r16 +.endm + +.macro PUSH_ALL + push r2 + push r3 + push r4 + push r5 + push r6 + push r7 + push r8 + push r9 + push r10 + push r11 + push r12 + push r13 + push r14 + push r15 + push r16 + push r17 + push r28 + push r29 +.endm + +.macro POP_ALL + pop r29 + pop r28 + pop r17 + pop r16 + pop r15 + pop r14 + pop r13 + pop r12 + pop r11 + pop r10 + pop r9 + pop r8 + pop r7 + pop r6 + pop r5 + pop r4 + pop r3 + pop r2 + clr r1 +.endm \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot256v1/avr8_speed/config.h b/knot/Implementations/crypto_hash/knot256v1/avr8_speed/config.h new file mode 100644 index 0000000..467fedb --- /dev/null +++ b/knot/Implementations/crypto_hash/knot256v1/avr8_speed/config.h @@ -0,0 +1,131 @@ +#ifndef __CONFIG_H__ +#define __CONFIG_H__ + +//#define CRYPTO_AEAD +#define CRYPTO_HASH + +#define MAX_MESSAGE_LENGTH 128 + +#define STATE_INBITS 256 +/* For CRYPTO_AEAD */ +#define CRYPTO_KEYBITS 128 +/* For CRYPTO_HASH */ +#define CRYPTO_BITS 256 + +#define STATE_INBYTES ((STATE_INBITS + 7) / 8) +#define ROW_INBITS ((STATE_INBITS + 3) / 4) +#define ROW_INBYTES ((ROW_INBITS + 7) / 8) + +/* For CRYPTO_AEAD */ +#define CRYPTO_KEYBYTES ((CRYPTO_KEYBITS + 7) / 8) +#define CRYPTO_NSECBYTES 0 +#define CRYPTO_NPUBBYTES CRYPTO_KEYBYTES +#define CRYPTO_ABYTES CRYPTO_KEYBYTES +#define CRYPTO_NOOVERLAP 1 + +#define MAX_ASSOCIATED_DATA_LENGTH 32 +#define MAX_CIPHER_LENGTH (MAX_MESSAGE_LENGTH + CRYPTO_ABYTES) + +#define TAG_MATCH 0 +#define TAG_UNMATCH -1 +#define OTHER_FAILURES -2 + +/* For CRYPTO_HASH */ +#define CRYPTO_BYTES ((CRYPTO_BITS + 7) / 8) + + + +#define DOMAIN_BITS 0x80 +#define PAD_BITS 0x01 +#define S384_R192_BITS 0x80 + +#if (STATE_INBITS==256) +#define C1 1 +#define C2 8 +#define C3 25 +#elif (STATE_INBITS==384) +#define C1 1 +#define C2 8 +#define C3 55 +#elif (STATE_INBITS==512) +#define C1 1 +#define C2 16 +#define C3 25 +#else +#error "Not specified state size" +#endif + +#ifdef CRYPTO_AEAD +/* For CRYPTO_AEAD */ +#define KEY_INBITS (CRYPTO_KEYBYTES * 8) +#define KEY_INBYTES (CRYPTO_KEYBYTES) + +#define NONCE_INBITS (CRYPTO_NPUBBYTES * 8) +#define NONCE_INBYTES (CRYPTO_NPUBBYTES) + +#define TAG_INBITS (CRYPTO_ABYTES * 8) +#define TAG_INBYTES (CRYPTO_ABYTES) + +#if (KEY_INBITS==128) && (STATE_INBITS==256) +#define RATE_INBITS 64 +#define NR_0 52 +#define NR_i 28 +#define NR_f 32 +#elif (KEY_INBITS==128) && (STATE_INBITS==384) +#define RATE_INBITS 192 +#define NR_0 76 +#define NR_i 28 +#define NR_f 32 +#elif (KEY_INBITS==192) && (STATE_INBITS==384) +#define RATE_INBITS 96 +#define NR_0 76 +#define NR_i 40 +#define NR_f 44 +#elif (KEY_INBITS==256) && (STATE_INBITS==512) +#define RATE_INBITS 128 +#define NR_0 100 +#define NR_i 52 +#define NR_f 56 +#else +#error "Not specified key size and state size" +#endif + +#define RATE_INBYTES ((RATE_INBITS + 7) / 8) +#define SQUEEZE_RATE_INBYTES TAG_INBYTES + +#endif + +#ifdef CRYPTO_HASH +/* For CRYPTO_HASH */ +#define HASH_DIGEST_INBITS (CRYPTO_BYTES * 8) + +#if (HASH_DIGEST_INBITS==256) && (STATE_INBITS==256) +#define HASH_RATE_INBITS 32 +#define HASH_SQUEEZE_RATE_INBITS 128 +#define NR_h 68 +#elif (HASH_DIGEST_INBITS==256) && (STATE_INBITS==384) +#define HASH_RATE_INBITS 128 +#define HASH_SQUEEZE_RATE_INBITS 128 +#define NR_h 80 +#elif (HASH_DIGEST_INBITS==384) && (STATE_INBITS==384) +#define HASH_RATE_INBITS 48 +#define HASH_SQUEEZE_RATE_INBITS 192 +#define NR_h 104 +#elif (HASH_DIGEST_INBITS==512) && (STATE_INBITS==512) +#define HASH_RATE_INBITS 64 +#define HASH_SQUEEZE_RATE_INBITS 256 +#define NR_h 140 +#else +#error "Not specified hash digest size and state size" +#endif + +#define HASH_RATE_INBYTES ((HASH_RATE_INBITS + 7) / 8) +#define HASH_SQUEEZE_RATE_INBYTES ((HASH_SQUEEZE_RATE_INBITS + 7) / 8) + +#endif + +#define TAG_MATCH 0 +#define TAG_UNMATCH -1 +#define OTHER_FAILURES -2 + +#endif \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot256v1/avr8_speed/crypto_hash.h b/knot/Implementations/crypto_hash/knot256v1/avr8_speed/crypto_hash.h new file mode 100644 index 0000000..342a639 --- /dev/null +++ b/knot/Implementations/crypto_hash/knot256v1/avr8_speed/crypto_hash.h @@ -0,0 +1,13 @@ +#ifdef __cplusplus +extern "C" { +#endif + +int crypto_hash( + unsigned char *out, + const unsigned char *in, + unsigned long long inlen + ); + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot256v1/avr8_speed/encrypt.c b/knot/Implementations/crypto_hash/knot256v1/avr8_speed/encrypt.c new file mode 100644 index 0000000..baf0a3b --- /dev/null +++ b/knot/Implementations/crypto_hash/knot256v1/avr8_speed/encrypt.c @@ -0,0 +1,106 @@ +#include +#include +#include +#include +#include "config.h" + +extern void crypto_aead_encrypt_asm( + unsigned char *c, + const unsigned char *m, + unsigned char mlen, + const unsigned char *ad, + unsigned char adlen, + const unsigned char *npub, + const unsigned char *k + ); + +extern int crypto_aead_decrypt_asm( + unsigned char *m, + const unsigned char *c, + unsigned char clen, + const unsigned char *ad, + unsigned char adlen, + const unsigned char *npub, + const unsigned char *k + ); + +extern void crypto_hash_asm( + unsigned char *out, + const unsigned char *in, + unsigned char inlen + ); + + +int crypto_aead_encrypt( + unsigned char *c, unsigned long long *clen, + const unsigned char *m, unsigned long long mlen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k + ) +{ + /* + ... + ... the code for the cipher implementation goes here, + ... generating a ciphertext c[0],c[1],...,c[*clen-1] + ... from a plaintext m[0],m[1],...,m[mlen-1] + ... and associated data ad[0],ad[1],...,ad[adlen-1] + ... and nonce npub[0],npub[1],.. + ... and secret key k[0],k[1],... + ... the implementation shall not use nsec + ... + ... return 0; + */ + + (void)nsec; + + crypto_aead_encrypt_asm(c, m, mlen, ad, adlen, npub, k); + + *clen = mlen + TAG_INBYTES; + return 0; +} + + + +int crypto_aead_decrypt( + unsigned char *m, unsigned long long *mlen, + unsigned char *nsec, + const unsigned char *c, unsigned long long clen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k + ) +{ + /* + ... + ... the code for the AEAD implementation goes here, + ... generating a plaintext m[0],m[1],...,m[*mlen-1] + ... and secret message number nsec[0],nsec[1],... + ... from a ciphertext c[0],c[1],...,c[clen-1] + ... and associated data ad[0],ad[1],...,ad[adlen-1] + ... and nonce number npub[0],npub[1],... + ... and secret key k[0],k[1],... + ... + ... return 0; + */ + unsigned long long mlen_; + unsigned char tag_is_match; + + (void)nsec; + if (clen < CRYPTO_ABYTES) { + return -1; + } + mlen_ = clen - CRYPTO_ABYTES; + + tag_is_match = crypto_aead_decrypt_asm(m, c, mlen_, ad, adlen, npub, k); + + if (tag_is_match != 0) + { + memset(m, 0, (size_t)mlen_); + return -1; + } + + *mlen = mlen_; + return 0; +} \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot256v1/avr8_speed/encrypt_core.S b/knot/Implementations/crypto_hash/knot256v1/avr8_speed/encrypt_core.S new file mode 100644 index 0000000..bd74f93 --- /dev/null +++ b/knot/Implementations/crypto_hash/knot256v1/avr8_speed/encrypt_core.S @@ -0,0 +1,555 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.1 2020 by KNOT Team * +; ********************************************** +; + +; +; ============================================ +; S R A M D E F I N I T I O N S +; ============================================ +; +#include +#include "config.h" + +.section .noinit + SRAM_STATE: .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#if (STATE_INBYTES > 32) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif +#if (STATE_INBYTES > 48) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif + SRAM_MESSAGE_OUT_ADDR: .BYTE 0, 0 + SRAM_MESSAGE_IN_ADDR: .BYTE 0, 0 + SRAM_MESSAGE_IN_LEN: .BYTE 0, 0 +#ifdef CRYPTO_AEAD +; For CRYPTO_AEAD + SRAM_ASSOCIATED_DATA_ADDR: .BYTE 0, 0 + SRAM_ADLEN: .BYTE 0, 0 + SRAM_NONCE_ADDR: .BYTE 0, 0 + SRAM_KEY_ADDR: .BYTE 0, 0 + + SRAM_ADDITIONAL: + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#if (CRYPTO_ABYTES > 16) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif +#if (CRYPTO_ABYTES > 24) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif + +#endif + +.section .text + +#include "permutation.h" + +; require YH:YL be the address of the current associated data/cipher/message block +; for enc and dec, store ciphertext or plaintext +; require ZH:ZL be the address of the current cipher/message block +.macro XOR_to_State_ENCDEC + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + mov cnt0, rate +XOR_to_State_loop_ENCDEC: + ld tmp0, Y+ ; plaintext/ciphertext + ld tmp1, X ; state + eor tmp1, tmp0 ; ciphertext/plaintext + st Z+, tmp1 ; store ciphertext/plaintext + sbrc AEDH, 1 ; test auth/enc or dec, if AEDH[1] == 0, skip repalce state byte + mov tmp1, tmp0 ; if dec, replace state + st X+, tmp1 ; store state byte + dec cnt0 + brne XOR_to_State_loop_ENCDEC +; YH:YL are now the address of the next associated data block +.endm + +; require YH:YL be the address of the current associated data/cipher/message block +; for enc and dec, store ciphertext or plaintext +; require ZH:ZL be the address of the current cipher/message block +.macro XOR_to_State_AUTH + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + mov cnt0, rate +XOR_to_State_loop_AUTH: + ld tmp0, Y+ ; plaintext/ciphertext + ld tmp1, X ; state + eor tmp1, tmp0 ; ciphertext/plaintext + st X+, tmp1 ; store state byte + dec cnt0 + brne XOR_to_State_loop_AUTH +; YH:YL are now the address of the next associated data block +.endm + + + +; require YH:YL pointed to the input data +; require ZH:ZL pointed to the output data +; require cnt0 containes the nubmer of bytes in source data +; require number of bytes in source data less than rate, i.e., 0 <= cnt0 < rate +; +; the 0th bit in AEDH is used to distinguish (auth AD) or (enc/dec M/C): +; AEDH[0] = 0 for (auth AD), AEDH[0] = 1 for (enc/dec M/C) +; the 1th bit in AEDH is used to distinguish (auth AD/enc M) or (dec C): +; AEDH[1] = 0 for (auth AD/enc M), AEDH[1] = 1 for (dec C) +; AEDH = 0b000 for (auth AD) +; AEDH = 0b001 for (enc M) +; AEDH = 0b011 for (dec C) +Pad_XOR_to_State: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + tst cnt0 + breq XOR_padded_data +XOR_source_data_loop: + ld tmp0, Y+ ; plaintext/ciphertext + ld tmp1, X ; state + eor tmp1, tmp0 ; ciphertext/plaintext + sbrc AEDH, 0 ; test auth or enc/dec, if AEDH[0] == 0, skip store result + st Z+, tmp1 ; store ciphertext/plaintext + sbrc AEDH, 1 ; test auth/enc or dec, if AEDH[1] == 0, skip repalce state byte + mov tmp1, tmp0 ; if dec, replace state + st X+, tmp1 ; store state byte + dec cnt0 + brne XOR_source_data_loop +XOR_padded_data: + ldi tmp0, PAD_BITS + ld tmp1, X + eor tmp1, tmp0 + st X, tmp1 +ret + +AddDomain: + ldi XH, hi8(SRAM_STATE + STATE_INBYTES - 1) + ldi XL, lo8(SRAM_STATE + STATE_INBYTES - 1) + ldi tmp0, DOMAIN_BITS + ld tmp1, X + eor tmp0, tmp1 + st X, tmp0 +ret + +; require ZH:ZL be the address of the destination +EXTRACT_from_State: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + mov tmp1, rate +EXTRACT_from_State_loop: + ld tmp0, X+ + st Z+, tmp0 + dec tmp1 + brne EXTRACT_from_State_loop +ret + +AUTH: + tst radlen + breq AUTH_end + + cp radlen, rate + brlo auth_ad_padded_block + +auth_ad_loop: + XOR_to_State_AUTH + rcall Permutation + sub radlen, rate + cp radlen, rate + brlo auth_ad_padded_block + rjmp auth_ad_loop + +auth_ad_padded_block: + mov cnt0, radlen + rcall Pad_XOR_to_State + rcall Permutation + +AUTH_end: +ret + +#ifdef CRYPTO_AEAD +Initialization: + ldi rn, NR_0 + ldi XL, lo8(SRAM_STATE) + ldi XH, hi8(SRAM_STATE) + + lds YH, SRAM_NONCE_ADDR + lds YL, SRAM_NONCE_ADDR + 1 + ldi cnt0, CRYPTO_NPUBBYTES +load_nonce_loop: + ld tmp0, Y+ + st X+, tmp0 + dec cnt0 + brne load_nonce_loop + + lds YH, SRAM_KEY_ADDR + lds YL, SRAM_KEY_ADDR + 1 + ldi cnt0, CRYPTO_KEYBYTES +load_key_loop: + ld tmp0, Y+ + st X+, tmp0 + dec cnt0 + brne load_key_loop + +#if (STATE_INBITS==384) && (RATE_INBITS==192) + ldi cnt0, (STATE_INBYTES - CRYPTO_NPUBBYTES - CRYPTO_KEYBYTES - 1) + clr tmp0 +empty_state_loop: + st X+, tmp0 + dec cnt0 + brne empty_state_loop + ldi tmp0, S384_R192_BITS + st X+, tmp0 +#endif + + rcall Permutation +ret + +ENC: + tst mclen + breq ENC_end + + cp mclen, rate + brlo enc_padded_block + +enc_loop: + XOR_to_State_ENCDEC + ldi rn, NR_i + rcall Permutation + sub mclen, rate + cp mclen, rate + brlo enc_padded_block + rjmp enc_loop + +enc_padded_block: + mov cnt0, mclen + rcall Pad_XOR_to_State +ENC_end: +ret + +Finalization: + ldi rate, SQUEEZE_RATE_INBYTES + ldi rn, NR_f + rcall Permutation + rcall EXTRACT_from_State +ret + +; void crypto_aead_encrypt_asm( +; unsigned char *c, +; const unsigned char *m, +; unsigned long long mlen, +; const unsigned char *ad, +; unsigned long long adlen, +; const unsigned char *npub, +; const unsigned char *k +; ) +; +; unsigned char *c, is passed in r24:r25 +; const unsigned char *m, is passed in r22:r23 +; unsigned long long mlen, is passed in r20:r21, only LSB (r20) is used +; const unsigned char *ad, is passed in r18:r19 +; unsigned long long adlen, is passed in r16:r17, only LSB (r16) is used +; const unsigned char *npub, is passed in r14:r15 +; const unsigned char *k is passed in r12:r13 +.global crypto_aead_encrypt_asm +crypto_aead_encrypt_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store cipher address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store message address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store message length in SRAM_MESSAGE_IN_LEN + st X+, r20 + st X+, r19 ;store associated data address in SRAM_ASSOCIATED_DATA_ADDR + st X+, r18 + st X+, r17 ;store associated data length in SRAM_ADLEN + st X+, r16 + st X+, r15 ;store nonce address in SRAM_NONCE_ADDR + st X+, r14 + st X+, r13 ;store key address in SRAM_KEY_ADDR + st X+, r12 + mov radlen, r16 + mov mclen, r20 + + rcall Initialization + + ldi rn, NR_i + ldi rate, RATE_INBYTES + ldi AEDH, 0b000 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_ASSOCIATED_DATA_ADDR + lds YL, SRAM_ASSOCIATED_DATA_ADDR + 1 + rcall AUTH + rcall AddDomain + ldi AEDH, 0b001 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_MESSAGE_IN_ADDR + lds YL, SRAM_MESSAGE_IN_ADDR + 1 + lds ZH, SRAM_MESSAGE_OUT_ADDR + lds ZL, SRAM_MESSAGE_OUT_ADDR + 1 + rcall ENC + rcall Finalization + POP_ALL +ret + +; int crypto_aead_decrypt_asm( +; unsigned char *m, +; const unsigned char *c, +; unsigned long long clen, +; const unsigned char *ad, +; unsigned long long adlen, +; const unsigned char *npub, +; const unsigned char *k +; ) +; +; unsigned char *m, is passed in r24:r25 +; const unsigned char *c, is passed in r22:r23 +; unsigned long long clen, is passed in r20:r21, only LSB (r20) is used +; const unsigned char *ad, is passed in r18:r19 +; unsigned long long adlen, is passed in r16:r17, only LSB (r16) is used +; const unsigned char *npub, is passed in r14:r15 +; const unsigned char *k is passed in r12:r13 +.global crypto_aead_decrypt_asm +crypto_aead_decrypt_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store message address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store cipher address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store cipher length in SRAM_MESSAGE_IN_LEN + st X+, r20 + st X+, r19 ;store associated data address in SRAM_ASSOCIATED_DATA_ADDR + st X+, r18 + st X+, r17 ;store associated data length in SRAM_ADLEN + st X+, r16 + st X+, r15 ;store nonce address in SRAM_NONCE_ADDR + st X+, r14 + st X+, r13 ;store key address in SRAM_KEY_ADDR + st X+, r12 + mov radlen, r16 + mov mclen, r20 + + rcall Initialization + + ldi rn, NR_i + ldi rate, RATE_INBYTES + ldi AEDH, 0b000 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_ASSOCIATED_DATA_ADDR + lds YL, SRAM_ASSOCIATED_DATA_ADDR + 1 + rcall AUTH + rcall AddDomain + ldi AEDH, 0b011 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_MESSAGE_IN_ADDR + lds YL, SRAM_MESSAGE_IN_ADDR + 1 + lds ZH, SRAM_MESSAGE_OUT_ADDR + lds ZL, SRAM_MESSAGE_OUT_ADDR + 1 + rcall ENC + + ldi ZH, hi8(SRAM_ADDITIONAL) + ldi ZL, lo8(SRAM_ADDITIONAL) + rcall Finalization + + sbiw ZL, CRYPTO_ABYTES + ldi cnt0, CRYPTO_ABYTES +compare_tag: + ld tmp0, Z+ + ld tmp1, Y+ + cp tmp0, tmp1 + brne return_tag_not_match + dec cnt0 + brne compare_tag + rjmp return_tag_match + +return_tag_not_match: + ldi r25, 0xFF + ldi r24, 0xFF + rjmp crypto_aead_decrypt_end + +return_tag_match: + clr r25 + clr r24 +crypto_aead_decrypt_end: + POP_ALL +ret + +; #ifdef CRYPTO_AEAD +#endif + + +#ifdef CRYPTO_HASH + +; void crypto_hash_asm( +; unsigned char *out, +; const unsigned char *in, +; unsigned long long inlen +; ) +; +; unsigned char *out, is passed in r24:r25 +; const unsigned char *in, is passed in r22:r23 +; unsigned long long inlen, is passed in r20:r21, only LSB (r20) is used +.global crypto_hash_asm +crypto_hash_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store message address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store cipher address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store cipher length in SRAM_MESSAGE_IN_LEN + st X+, r20 + mov mclen, r20 + + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) +#if (STATE_INBITS==384) && (HASH_RATE_INBITS==128) + ldi cnt0, STATE_INBYTES - 1 +#else + ldi cnt0, STATE_INBYTES +#endif + clr tmp0 +zero_state: + st X+, tmp0 + dec cnt0 + brne zero_state + +#if (STATE_INBITS==384) && (HASH_RATE_INBITS==128) + ldi tmp0, S384_R192_BITS + st X+, tmp0 +#endif + + ldi rn, NR_h + ldi AEDH, 0b100 + +HASH_ABSORBING: + mov radlen, mclen + tst radlen + breq EMPTY_M + ldi rate, HASH_RATE_INBYTES + lds YH, SRAM_MESSAGE_IN_ADDR + lds YL, SRAM_MESSAGE_IN_ADDR + 1 + rcall AUTH + rjmp HASH_SQUEEZING + +EMPTY_M: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + ldi tmp0, PAD_BITS + ld tmp1, X + eor tmp1, tmp0 + st X, tmp1 + rcall Permutation + +HASH_SQUEEZING: + ldi rate, HASH_SQUEEZE_RATE_INBYTES + lds ZH, SRAM_MESSAGE_OUT_ADDR + lds ZL, SRAM_MESSAGE_OUT_ADDR + 1 + ldi tcnt, CRYPTO_BYTES +SQUEEZING_loop: + rcall EXTRACT_from_State + subi tcnt, HASH_SQUEEZE_RATE_INBYTES + breq HASH_SQUEEZING_end + rcall Permutation + rjmp SQUEEZING_loop +HASH_SQUEEZING_end: + POP_ALL +ret + +#endif + + +; Byte Order In AVR 8: +; KNOT-AEAD(128, 256, 64): +; N[ 0] AEAD_State[ 0] | Message[ 0] Perm_row_0[0] 0 Tag[ 0] +; N[ 1] AEAD_State[ 1] | Message[ 1] Perm_row_0[1] 0 Tag[ 1] +; N[ 2] AEAD_State[ 2] | Message[ 2] Perm_row_0[2] 0 Tag[ 2] +; N[ 3] AEAD_State[ 3] | Message[ 3] Perm_row_0[3] 0 Tag[ 3] +; N[ 4] AEAD_State[ 4] | Message[ 4] 0x01 Perm_row_0[4] 0 Tag[ 4] +; N[ 5] AEAD_State[ 5] | Message[ 5] 0x00 Perm_row_0[5] 0 Tag[ 5] +; N[ 6] AEAD_State[ 6] | Message[ 6] 0x00 Perm_row_0[6] 0 Tag[ 6] +; N[ 7] AEAD_State[ 7] | Message[ 7] 0x00 Perm_row_0[7] <<< 0 Tag[ 7] +; N[ 8] AEAD_State[ 8] | Perm_row_1[0] 1 +; N[ 9] AEAD_State[ 9] | Perm_row_1[1] 1 +; N[10] AEAD_State[10] | Perm_row_1[2] 1 +; N[11] AEAD_State[11] | Perm_row_1[3] 1 +; N[12] AEAD_State[12] | Perm_row_1[4] 1 +; N[13] AEAD_State[13] | Perm_row_1[5] 1 +; N[14] AEAD_State[14] | Perm_row_1[6] 1 +; N[15] AEAD_State[15] | Perm_row_1[7] <<< 1 +; K[ 0] AEAD_State[16] | Perm_row_2[0] 8 +; K[ 1] AEAD_State[17] | Perm_row_2[1] 8 +; K[ 2] AEAD_State[18] | Perm_row_2[2] 8 +; K[ 3] AEAD_State[19] | Perm_row_2[3] 8 +; K[ 4] AEAD_State[20] | Perm_row_2[4] 8 +; K[ 5] AEAD_State[21] | Perm_row_2[5] 8 +; K[ 6] AEAD_State[22] | Perm_row_2[6] 8 +; K[ 7] AEAD_State[23] | Perm_row_2[7] <<< 8 +; K[ 8] AEAD_State[24] | Perm_row_3[0] 25 +; K[ 9] AEAD_State[25] | Perm_row_3[1] 25 +; K[10] AEAD_State[26] | Perm_row_3[2] 25 +; K[11] AEAD_State[27] | Perm_row_3[3] 25 +; K[12] AEAD_State[28] | Perm_row_3[4] 25 +; K[13] AEAD_State[29] | Perm_row_3[5] 25 +; K[14] AEAD_State[30] | Perm_row_3[6] 25 +; K[15] AEAD_State[31] | ^0x80 Perm_row_3[7] <<< 25 +; +; +; KNOT-AEAD(128, 384, 192): +; Initalization +; N[ 0] AEAD_State[ 0] | Message[ 0] Perm_row_0[ 0] 0 Tag[ 0] +; N[ 1] AEAD_State[ 1] | Message[ 1] Perm_row_0[ 1] 0 Tag[ 1] +; N[ 2] AEAD_State[ 2] | Message[ 2] Perm_row_0[ 2] 0 Tag[ 2] +; N[ 3] AEAD_State[ 3] | Message[ 3] Perm_row_0[ 3] 0 Tag[ 3] +; N[ 4] AEAD_State[ 4] | Message[ 4] 0x01 Perm_row_0[ 4] 0 Tag[ 4] +; N[ 5] AEAD_State[ 5] | Message[ 5] 0x00 Perm_row_0[ 5] 0 Tag[ 5] +; N[ 6] AEAD_State[ 6] | Message[ 6] 0x00 Perm_row_0[ 6] 0 Tag[ 6] +; N[ 7] AEAD_State[ 7] | Message[ 7] 0x00 Perm_row_0[ 7] 0 Tag[ 7] +; N[ 8] AEAD_State[ 8] | Message[ 8] 0x00 Perm_row_0[ 8] 0 Tag[ 8] +; N[ 9] AEAD_State[ 9] | Message[ 9] 0x00 Perm_row_0[ 9] 0 Tag[ 9] +; N[10] AEAD_State[10] | Message[10] 0x00 Perm_row_0[10] 0 Tag[10] +; N[11] AEAD_State[11] | Message[11] 0x00 Perm_row_0[11] <<< 0 Tag[11] +; N[12] AEAD_State[12] | Message[12] 0x00 Perm_row_1[ 0] 1 Tag[12] +; N[13] AEAD_State[13] | Message[13] 0x00 Perm_row_1[ 1] 1 Tag[13] +; N[14] AEAD_State[14] | Message[14] 0x00 Perm_row_1[ 2] 1 Tag[14] +; N[15] AEAD_State[15] | Message[15] 0x00 Perm_row_1[ 3] 1 Tag[15] +; K[ 0] AEAD_State[16] | Message[16] 0x00 Perm_row_1[ 4] 1 +; K[ 1] AEAD_State[17] | Message[17] 0x00 Perm_row_1[ 5] 1 +; K[ 2] AEAD_State[18] | Message[18] 0x00 Perm_row_1[ 6] 1 +; K[ 3] AEAD_State[19] | Message[19] 0x00 Perm_row_1[ 7] 1 +; K[ 4] AEAD_State[20] | Message[20] 0x00 Perm_row_1[ 8] 1 +; K[ 5] AEAD_State[21] | Message[21] 0x00 Perm_row_1[ 9] 1 +; K[ 6] AEAD_State[22] | Message[22] 0x00 Perm_row_1[10] 1 +; K[ 7] AEAD_State[23] | Message[23] 0x00 Perm_row_1[11] <<< 1 +; K[ 8] AEAD_State[24] | Perm_row_2[ 0] 8 +; K[ 9] AEAD_State[25] | Perm_row_2[ 1] 8 +; K[10] AEAD_State[26] | Perm_row_2[ 2] 8 +; K[11] AEAD_State[27] | Perm_row_2[ 3] 8 +; K[12] AEAD_State[28] | Perm_row_2[ 4] 8 +; K[13] AEAD_State[29] | Perm_row_2[ 5] 8 +; K[14] AEAD_State[30] | Perm_row_2[ 6] 8 +; K[15] AEAD_State[31] | Perm_row_2[ 7] 8 +; 0x00 AEAD_State[32] | Perm_row_2[ 8] 8 +; 0x00 AEAD_State[33] | Perm_row_2[ 9] 8 +; 0x00 AEAD_State[34] | Perm_row_2[10] 8 +; 0x00 AEAD_State[35] | Perm_row_2[11] <<< 8 +; 0x00 AEAD_State[36] | Perm_row_3[ 0] 55 +; 0x00 AEAD_State[37] | Perm_row_3[ 1] 55 +; 0x00 AEAD_State[38] | Perm_row_3[ 2] 55 +; 0x00 AEAD_State[39] | Perm_row_3[ 3] 55 +; 0x00 AEAD_State[40] | Perm_row_3[ 4] 55 +; 0x00 AEAD_State[41] | Perm_row_3[ 5] 55 +; 0x00 AEAD_State[42] | Perm_row_3[ 6] 55 +; 0x00 AEAD_State[43] | Perm_row_3[ 7] 55 +; 0x00 AEAD_State[44] | Perm_row_3[ 8] 55 +; 0x00 AEAD_State[45] | Perm_row_3[ 9] 55 +; 0x00 AEAD_State[46] | Perm_row_3[10] 55 +; 0x00 ^0x80 AEAD_State[47] | ^0x80 Perm_row_3[11] <<< 55 diff --git a/knot/Implementations/crypto_hash/knot256v1/avr8_speed/hash.c b/knot/Implementations/crypto_hash/knot256v1/avr8_speed/hash.c new file mode 100644 index 0000000..dbbe4df --- /dev/null +++ b/knot/Implementations/crypto_hash/knot256v1/avr8_speed/hash.c @@ -0,0 +1,32 @@ +#include +#include +#include +#include +#include "api.h" +#include "crypto_hash.h" + +extern void crypto_hash_asm( + unsigned char *out, + const unsigned char *in, + unsigned char inlen + ); + +int crypto_hash( + unsigned char *out, + const unsigned char *in, + unsigned long long inlen +) +{ + /* + ... + ... the code for the hash function implementation goes here + ... generating a hash value out[0],out[1],...,out[CRYPTO_BYTES-1] + ... from a message in[0],in[1],...,in[in-1] + ... + ... return 0; + */ + + crypto_hash_asm(out, in, inlen); + + return 0; +} \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot256v1/avr8_speed/knot256.h b/knot/Implementations/crypto_hash/knot256v1/avr8_speed/knot256.h new file mode 100644 index 0000000..f99f68b --- /dev/null +++ b/knot/Implementations/crypto_hash/knot256v1/avr8_speed/knot256.h @@ -0,0 +1,306 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.1 2020 by KNOT Team * +; ********************************************** +; +#define x10 r0 +#define x11 r1 +#define x12 r2 +#define x13 r3 +#define x14 r4 +#define x15 r5 +#define x16 r6 +#define x17 r7 + +; an intentionally arrangement of registers to facilitate movw +#define x20 r8 +#define x21 r10 +#define x22 r12 +#define x23 r14 +#define x24 r9 +#define x25 r11 +#define x26 r13 +#define x27 r15 + +; an intentionally arrangement of registers to facilitate movw +#define x30 r16 +#define x35 r18 +#define x32 r20 +#define x37 r22 +#define x34 r17 +#define x31 r19 +#define x36 r21 +#define x33 r23 + +#define t0j r24 +#define t1j r25 +#define x0j r27 + +#include "assist.h" + +.macro Sbox i0, i1, i2, i3 + mov t0j, \i1 + com \i0 + and \i1, \i0 + eor \i1, \i2 + or \i2, t0j + eor \i0, \i3 + eor \i2, \i0 + eor t0j, \i3 + and \i0, \i1 + eor \i3, \i1 + eor \i0, t0j + and t0j, \i2 + eor \i1, t0j +.endm + +Permutation: + PUSH_CONFLICT + mov rcnt, rn + + ldi YH, hi8(SRAM_STATE + ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + ROW_INBYTES) + ld x10, Y+ + ld x11, Y+ + ld x12, Y+ + ld x13, Y+ + ld x14, Y+ + ld x15, Y+ + ld x16, Y+ + ld x17, Y+ + ld x20, Y+ + ld x21, Y+ + ld x22, Y+ + ld x23, Y+ + ld x24, Y+ + ld x25, Y+ + ld x26, Y+ + ld x27, Y+ + ld x30, Y+ + ld x31, Y+ + ld x32, Y+ + ld x33, Y+ + ld x34, Y+ + ld x35, Y+ + ld x36, Y+ + ld x37, Y+ + +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) + sbrc AEDH, 2 ; AEDH[2] = 0 for AEAD and AEDH[2] = 1 for HASH + rjmp For_Hash +For_AEAD: + ldi ZL, lo8(RC_LFSR6) + ldi ZH, hi8(RC_LFSR6) + rjmp round_loop_start +For_Hash: + ldi ZL, lo8(RC_LFSR7) + ldi ZH, hi8(RC_LFSR7) +#elif defined(CRYPTO_AEAD) + ldi ZL, lo8(RC_LFSR6) + ldi ZH, hi8(RC_LFSR6) +#else + ldi ZL, lo8(RC_LFSR7) + ldi ZH, hi8(RC_LFSR7) +#endif + +round_loop_start: + ; AddRC + lpm t0j, Z+ + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + ld x0j, Y + eor x0j, t0j + + ; SubColumns + Sbox x0j, x10, x20, x30 + st Y+, x0j + ld x0j, Y + Sbox x0j, x11, x21, x31 + st Y+, x0j + ld x0j, Y + Sbox x0j, x12, x22, x32 + st Y+, x0j + ld x0j, Y + Sbox x0j, x13, x23, x33 + st Y+, x0j + ld x0j, Y + Sbox x0j, x14, x24, x34 + st Y+, x0j + ld x0j, Y + Sbox x0j, x15, x25, x35 + st Y+, x0j + ld x0j, Y + Sbox x0j, x16, x26, x36 + st Y+, x0j + ld x0j, Y + Sbox x0j, x17, x27, x37 + st Y, x0j + + ; ShiftRows + ; <<< 1 + mov t0j, x17 + rol t0j + rol x10 + rol x11 + rol x12 + rol x13 + rol x14 + rol x15 + rol x16 + rol x17 + + ; <<< 8 + ; 7 6 5 4 3 2 1 0 => 6 5 4 3 2 1 0 7 + ;mov t0j, x27 + ;mov x27, x26 + ;mov x26, x25 + ;mov x25, x24 + ;mov x24, x23 + ;mov x23, x22 + ;mov x22, x21 + ;mov x21, x20 + ;mov x20, t0j + ; an intentionally arrangement of registers to facilitate movw + movw t0j, x23 ; t1j:t0j <= x27:x23 + movw x23, x22 ; x27:x23 <= x26:x22 + movw x22, x21 ; x26:x22 <= x25:x21 + movw x21, x20 ; x25:x21 <= x24:x20 + mov x20, t1j ; x20 <= t1j + mov x24, t0j ; x24 <= t0j + + ; <<< 1 + mov t0j, x37 + rol t0j + rol x30 + rol x31 + rol x32 + rol x33 + rol x34 + rol x35 + rol x36 + rol x37 + ; <<< 24 + ; 7 6 5 4 3 2 1 0 => 4 3 2 1 0 7 6 5 + ;mov t0j, x30 + ;mov x30, x35 + ;mov x35, x32 + ;mov x32, x37 + ;mov x37, x34 + ;mov x34, x31 + ;mov x31, x36 + ;mov x36, x33 + ;mov x33, t0j + ; an intentionally arrangement of registers to facilitate movw + ;x30 r16 + ;x35 r18 + ;x32 r20 + ;x37 r22 + ;x34 r17 + ;x31 r19 + ;x36 r21 + ;x33 r23 + movw t0j, x30 ; t1j:t0j <= x34:x30 + movw x30, x35 ; x34:x30 <= x31:x35 + movw x35, x32 ; x31:x35 <= x36:x32 + movw x32, x37 ; x36:x32 <= x33:x37 + mov x37, t1j ; x37 <= x34 + mov x33, t0j ; x33 <= x30 + + dec rcnt + breq round_loop_end + jmp round_loop_start + +round_loop_end: + ldi YH, hi8(SRAM_STATE + ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + ROW_INBYTES) + st Y+, x10 + st Y+, x11 + st Y+, x12 + st Y+, x13 + st Y+, x14 + st Y+, x15 + st Y+, x16 + st Y+, x17 + st Y+, x20 + st Y+, x21 + st Y+, x22 + st Y+, x23 + st Y+, x24 + st Y+, x25 + st Y+, x26 + st Y+, x27 + st Y+, x30 + st Y+, x31 + st Y+, x32 + st Y+, x33 + st Y+, x34 + st Y+, x35 + st Y+, x36 + st Y+, x37 + + POP_CONFLICT +ret + + +.section .text +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) +RC_LFSR6: +.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x21, 0x03, 0x06 +.byte 0x0c, 0x18, 0x31, 0x22, 0x05, 0x0a, 0x14, 0x29 +.byte 0x13, 0x27, 0x0f, 0x1e, 0x3d, 0x3a, 0x34, 0x28 +.byte 0x11, 0x23, 0x07, 0x0e, 0x1c, 0x39, 0x32, 0x24 +.byte 0x09, 0x12, 0x25, 0x0b, 0x16, 0x2d, 0x1b, 0x37 +.byte 0x2e, 0x1d, 0x3b, 0x36, 0x2c, 0x19, 0x33, 0x26 +.byte 0x0d, 0x1a, 0x35, 0x2a, 0x15, 0x2b, 0x17, 0x2f +.byte 0x1f, 0x3f, 0x3e, 0x3c, 0x38, 0x30, 0x20, 0x00 +RC_LFSR7: +.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x41, 0x03 +.byte 0x06, 0x0c, 0x18, 0x30, 0x61, 0x42, 0x05, 0x0a +.byte 0x14, 0x28, 0x51, 0x23, 0x47, 0x0f, 0x1e, 0x3c +.byte 0x79, 0x72, 0x64, 0x48, 0x11, 0x22, 0x45, 0x0b +.byte 0x16, 0x2c, 0x59, 0x33, 0x67, 0x4e, 0x1d, 0x3a +.byte 0x75, 0x6a, 0x54, 0x29, 0x53, 0x27, 0x4f, 0x1f +.byte 0x3e, 0x7d, 0x7a, 0x74, 0x68, 0x50, 0x21, 0x43 +.byte 0x07, 0x0e, 0x1c, 0x38, 0x71, 0x62, 0x44, 0x09 +.byte 0x12, 0x24, 0x49, 0x13, 0x26, 0x4d, 0x1b, 0x36 +.byte 0x6d, 0x5a, 0x35, 0x6b, 0x56, 0x2d, 0x5b, 0x37 +.byte 0x6f, 0x5e, 0x3d, 0x7b, 0x76, 0x6c, 0x58, 0x31 +.byte 0x63, 0x46, 0x0d, 0x1a, 0x34, 0x69, 0x52, 0x25 +.byte 0x4b, 0x17, 0x2e, 0x5d, 0x3b, 0x77, 0x6e, 0x5c +.byte 0x39, 0x73, 0x66, 0x4c, 0x19, 0x32, 0x65, 0x4a +.byte 0x15, 0x2a, 0x55, 0x2b, 0x57, 0x2f, 0x5f, 0x3f +.byte 0x7f, 0x7e, 0x7c, 0x78, 0x70, 0x60, 0x40, 0x00 +#elif defined(CRYPTO_AEAD) +RC_LFSR6: +.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x21, 0x03, 0x06 +.byte 0x0c, 0x18, 0x31, 0x22, 0x05, 0x0a, 0x14, 0x29 +.byte 0x13, 0x27, 0x0f, 0x1e, 0x3d, 0x3a, 0x34, 0x28 +.byte 0x11, 0x23, 0x07, 0x0e, 0x1c, 0x39, 0x32, 0x24 +.byte 0x09, 0x12, 0x25, 0x0b, 0x16, 0x2d, 0x1b, 0x37 +.byte 0x2e, 0x1d, 0x3b, 0x36, 0x2c, 0x19, 0x33, 0x26 +.byte 0x0d, 0x1a, 0x35, 0x2a, 0x15, 0x2b, 0x17, 0x2f +.byte 0x1f, 0x3f, 0x3e, 0x3c, 0x38, 0x30, 0x20, 0x00 +#else +RC_LFSR7: +.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x41, 0x03 +.byte 0x06, 0x0c, 0x18, 0x30, 0x61, 0x42, 0x05, 0x0a +.byte 0x14, 0x28, 0x51, 0x23, 0x47, 0x0f, 0x1e, 0x3c +.byte 0x79, 0x72, 0x64, 0x48, 0x11, 0x22, 0x45, 0x0b +.byte 0x16, 0x2c, 0x59, 0x33, 0x67, 0x4e, 0x1d, 0x3a +.byte 0x75, 0x6a, 0x54, 0x29, 0x53, 0x27, 0x4f, 0x1f +.byte 0x3e, 0x7d, 0x7a, 0x74, 0x68, 0x50, 0x21, 0x43 +.byte 0x07, 0x0e, 0x1c, 0x38, 0x71, 0x62, 0x44, 0x09 +.byte 0x12, 0x24, 0x49, 0x13, 0x26, 0x4d, 0x1b, 0x36 +.byte 0x6d, 0x5a, 0x35, 0x6b, 0x56, 0x2d, 0x5b, 0x37 +.byte 0x6f, 0x5e, 0x3d, 0x7b, 0x76, 0x6c, 0x58, 0x31 +.byte 0x63, 0x46, 0x0d, 0x1a, 0x34, 0x69, 0x52, 0x25 +.byte 0x4b, 0x17, 0x2e, 0x5d, 0x3b, 0x77, 0x6e, 0x5c +.byte 0x39, 0x73, 0x66, 0x4c, 0x19, 0x32, 0x65, 0x4a +.byte 0x15, 0x2a, 0x55, 0x2b, 0x57, 0x2f, 0x5f, 0x3f +.byte 0x7f, 0x7e, 0x7c, 0x78, 0x70, 0x60, 0x40, 0x00 +#endif \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot256v1/avr8_speed/knot384.h b/knot/Implementations/crypto_hash/knot256v1/avr8_speed/knot384.h new file mode 100644 index 0000000..0b3dd75 --- /dev/null +++ b/knot/Implementations/crypto_hash/knot256v1/avr8_speed/knot384.h @@ -0,0 +1,261 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.1 2020 by KNOT Team * +; ********************************************** +; + +; an intentionally arrangement of registers to facilitate movw +#define x20 r0 +#define x21 r2 +#define x22 r4 +#define x23 r6 +#define x24 r8 +#define x25 r10 +#define x26 r1 +#define x27 r3 +#define x28 r5 +#define x29 r7 +#define x2a r9 +#define x2b r11 + +; an intentionally arrangement of registers to facilitate movw +#define x30 r22 +#define x35 r20 +#define x3a r18 +#define x33 r16 +#define x38 r14 +#define x31 r12 +#define x36 r23 +#define x3b r21 +#define x34 r19 +#define x39 r17 +#define x32 r15 +#define x37 r13 + +#define t0j r24 +#define t1j r25 +#define x0j r25 +#define x1j r27 + +#include "assist.h" + +.macro Sbox i0, i1, i2, i3 + ldi t0j, 0xFF + eor \i0, t0j + mov t0j, \i1 + and \i1, \i0 + eor \i1, \i2 + or \i2, t0j + eor \i0, \i3 + eor \i2, \i0 + eor t0j, \i3 + and \i0, \i1 + eor \i3, \i1 + eor \i0, t0j + and t0j, \i2 + eor \i1, t0j +.endm + +.macro OneColumn i0, i1, i2, i3 + ld \i0, Y + ldd \i1, Y + ROW_INBYTES + Sbox \i0, \i1, \i2, \i3 + st Y+, \i0 + rol \i1 ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES -1, \i1 +.endm + +Permutation: + PUSH_CONFLICT + mov rcnt, rn + + ldi YH, hi8(SRAM_STATE + 2 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 2 * ROW_INBYTES) + ld x20, Y+ + ld x21, Y+ + ld x22, Y+ + ld x23, Y+ + ld x24, Y+ + ld x25, Y+ + ld x26, Y+ + ld x27, Y+ + ld x28, Y+ + ld x29, Y+ + ld x2a, Y+ + ld x2b, Y+ + ld x30, Y+ + ld x31, Y+ + ld x32, Y+ + ld x33, Y+ + ld x34, Y+ + ld x35, Y+ + ld x36, Y+ + ld x37, Y+ + ld x38, Y+ + ld x39, Y+ + ld x3a, Y+ + ld x3b, Y+ + + ldi ZL, lo8(RC_LFSR7) + ldi ZH, hi8(RC_LFSR7) + +round_loop_start: + ; AddRC + lpm t0j, Z+ + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + ld x0j, Y + eor x0j, t0j + + ldd x1j, Y + ROW_INBYTES + Sbox x0j, x1j, x20, x30 + st Y+, x0j + lsl x1j ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES -1, x1j + + OneColumn x0j, x1j, x21, x31 + OneColumn x0j, x1j, x22, x32 + OneColumn x0j, x1j, x23, x33 + OneColumn x0j, x1j, x24, x34 + OneColumn x0j, x1j, x25, x35 + OneColumn x0j, x1j, x26, x36 + OneColumn x0j, x1j, x27, x37 + OneColumn x0j, x1j, x28, x38 + OneColumn x0j, x1j, x29, x39 + OneColumn x0j, x1j, x2a, x3a + OneColumn x0j, x1j, x2b, x3b + + ld x1j, Y + eor t0j, t0j + adc x1j, t0j + st Y, x1j + + ; b a 9 8 7 6 5 4 3 2 1 0 + ; -- -- -- -- -- -- -- -- -- -- -- x- 0 + ; -- -- -- -- -- -- -- -- -- -- -- x' 0 + ; -- -- -- -- -- -- -- -- -- -- x- -- 1 + ; -- -- -- -- x' -- -- -- -- -- -- -- 7 + ; 4 3 2 1 0 b a 9 8 7 6 5 + + ; ShiftRows -- the last two rows + ; <<< 8 + ; b a 9 8 7 6 5 4 3 2 1 0 => a 9 8 7 6 5 4 3 2 1 0 b + movw t0j, x25 ; t1j:t0j <= x2b:x25 + movw x25, x24 ; x2b:x25 <= x2a:x24 + movw x24, x23 ; x2a:x24 <= x29:x23 + movw x23, x22 ; x29:x23 <= x28:x22 + movw x22, x21 ; x28:x22 <= x27:x21 + movw x21, x20 ; x27:x21 <= x26:x20 + mov x26, t0j ; x26 <= x25 + mov x20, t1j ; x20 <= x2b + + ; >>> 1 + mov t0j, x3b + ror t0j + ror x3a + ror x39 + ror x38 + ror x37 + ror x36 + ror x35 + ror x34 + ror x33 + ror x32 + ror x31 + ror x30 + ror x3b + ; <<< 56 + ; b a 9 8 7 6 5 4 3 2 1 0 => 4 3 2 1 0 b a 9 8 7 6 5 + ; mov x3j, x30 + ; mov x30, x35 + ; mov x35, x3a + ; mov x3a, x33 + ; mov x33, x38 + ; mov x38, x31 + ; mov x31, x36 + ; mov x36, x3b + ; mov x3b, x34 + ; mov x34, x39 + ; mov x39, x32 + ; mov x32, x37 + ; mov x37, x3j + ; an intentionally arrangement of registers to facilitate movw + ; x30 r22 + ; x35 r20 + ; x3a r18 + ; x33 r16 + ; x38 r14 + ; x31 r12 + ; x36 r23 + ; x3b r21 + ; x34 r19 + ; x39 r17 + ; x32 r15 + ; x37 r13 + movw t0j, x30 ; t1j:t0j <= x36:x30 + movw x30, x35 ; x36:x30 <= x3b:x35 + movw x35, x3a ; x3b:x35 <= x34:x3a + movw x3a, x33 ; x34:x3a <= x39:x33 + movw x33, x38 ; x39:x33 <= x32:x38 + movw x38, x31 ; x32:x38 <= x37:x31 + mov x31, t1j ; x31 <= x36 + mov x37, t0j ; x37 <= x30 + + dec rcnt + breq round_loop_end + jmp round_loop_start + +round_loop_end: + + ldi YH, hi8(SRAM_STATE + 2 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 2 * ROW_INBYTES) + st Y+, x20 + st Y+, x21 + st Y+, x22 + st Y+, x23 + st Y+, x24 + st Y+, x25 + st Y+, x26 + st Y+, x27 + st Y+, x28 + st Y+, x29 + st Y+, x2a + st Y+, x2b + st Y+, x30 + st Y+, x31 + st Y+, x32 + st Y+, x33 + st Y+, x34 + st Y+, x35 + st Y+, x36 + st Y+, x37 + st Y+, x38 + st Y+, x39 + st Y+, x3a + st Y+, x3b + + POP_CONFLICT +ret + +RC_LFSR7: +.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x41, 0x03 +.byte 0x06, 0x0c, 0x18, 0x30, 0x61, 0x42, 0x05, 0x0a +.byte 0x14, 0x28, 0x51, 0x23, 0x47, 0x0f, 0x1e, 0x3c +.byte 0x79, 0x72, 0x64, 0x48, 0x11, 0x22, 0x45, 0x0b +.byte 0x16, 0x2c, 0x59, 0x33, 0x67, 0x4e, 0x1d, 0x3a +.byte 0x75, 0x6a, 0x54, 0x29, 0x53, 0x27, 0x4f, 0x1f +.byte 0x3e, 0x7d, 0x7a, 0x74, 0x68, 0x50, 0x21, 0x43 +.byte 0x07, 0x0e, 0x1c, 0x38, 0x71, 0x62, 0x44, 0x09 +.byte 0x12, 0x24, 0x49, 0x13, 0x26, 0x4d, 0x1b, 0x36 +.byte 0x6d, 0x5a, 0x35, 0x6b, 0x56, 0x2d, 0x5b, 0x37 +.byte 0x6f, 0x5e, 0x3d, 0x7b, 0x76, 0x6c, 0x58, 0x31 +.byte 0x63, 0x46, 0x0d, 0x1a, 0x34, 0x69, 0x52, 0x25 +.byte 0x4b, 0x17, 0x2e, 0x5d, 0x3b, 0x77, 0x6e, 0x5c +.byte 0x39, 0x73, 0x66, 0x4c, 0x19, 0x32, 0x65, 0x4a +.byte 0x15, 0x2a, 0x55, 0x2b, 0x57, 0x2f, 0x5f, 0x3f +.byte 0x7f, 0x7e, 0x7c, 0x78, 0x70, 0x60, 0x40, 0x00 \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot256v1/avr8_speed/knot512.h b/knot/Implementations/crypto_hash/knot256v1/avr8_speed/knot512.h new file mode 100644 index 0000000..b0e4319 --- /dev/null +++ b/knot/Implementations/crypto_hash/knot256v1/avr8_speed/knot512.h @@ -0,0 +1,435 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.1 2020 by KNOT Team * +; ********************************************** +; +#define x20 r0 +#define x22 r2 +#define x24 r4 +#define x26 r6 +#define x28 r1 +#define x2a r3 +#define x2c r5 +#define x2e r7 + +#define x30 r8 +#define x3d r10 +#define x3a r12 +#define x37 r14 +#define x34 r16 +#define x31 r18 +#define x3e r20 +#define x3b r22 +#define x38 r9 +#define x35 r11 +#define x32 r13 +#define x3f r15 +#define x3c r17 +#define x39 r19 +#define x36 r21 +#define x33 r23 + +#define t0j r24 +#define t1j r25 +#define x0j r25 +#define x1j r27 +#define x2j r26 + +#include "assist.h" + +.macro Sbox i0, i1, i2, i3 + ldi t0j, 0xFF + eor \i0, t0j + mov t0j, \i1 + and \i1, \i0 + eor \i1, \i2 + or \i2, t0j + eor \i0, \i3 + eor \i2, \i0 + eor t0j, \i3 + and \i0, \i1 + eor \i3, \i1 + eor \i0, t0j + and t0j, \i2 + eor \i1, t0j +.endm + +.macro TwoColumns i2_e, i3_e, i3_o + ; column 2i + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + Sbox x0j, x1j, \i2_e, \i3_e + st Y+, x0j + rol x1j ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES - 1, x1j + + ; column 2i+1 + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + Sbox x0j, x1j, x2j, \i3_o + st Y+, x0j + rol x1j ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES - 1, x1j + ldd t0j, Y + 2 * ROW_INBYTES + 1 + std Y + 2 * ROW_INBYTES + 1, x2j + mov x2j, t0j +.endm + +Permutation: + PUSH_CONFLICT + mov rcnt, rn + push rcnt + + ldi YH, hi8(SRAM_STATE + 2 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 2 * ROW_INBYTES) + + ldd x20, Y + 0x00 + ldd x22, Y + 0x02 + ldd x24, Y + 0x04 + ldd x26, Y + 0x06 + ldd x28, Y + 0x08 + ldd x2a, Y + 0x0a + ldd x2c, Y + 0x0c + ldd x2e, Y + 0x0e + + adiw YL, ROW_INBYTES + + ld x30, Y+ + ld x31, Y+ + ld x32, Y+ + ld x33, Y+ + ld x34, Y+ + ld x35, Y+ + ld x36, Y+ + ld x37, Y+ + ld x38, Y+ + ld x39, Y+ + ld x3a, Y+ + ld x3b, Y+ + ld x3c, Y+ + ld x3d, Y+ + ld x3e, Y+ + ld x3f, Y+ + +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) + sbrc AEDH, 2 ; AEDH[2] = 0 for AEAD and AEDH[2] = 1 for HASH + rjmp For_Hash +For_AEAD: + ldi ZL, lo8(RC_LFSR7) + ldi ZH, hi8(RC_LFSR7) + rjmp round_loop_start +For_Hash: + ldi ZL, lo8(RC_LFSR8) + ldi ZH, hi8(RC_LFSR8) +#elif defined(CRYPTO_AEAD) + ldi ZL, lo8(RC_LFSR7) + ldi ZH, hi8(RC_LFSR7) +#else + ldi ZL, lo8(RC_LFSR8) + ldi ZH, hi8(RC_LFSR8) +#endif + + +round_loop_start: + ; AddRC + lpm t0j, Z+ + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + + ; column 0 + ld x0j, Y + eor x0j, t0j + ldd x1j, Y + ROW_INBYTES + Sbox x0j, x1j, x20, x30 + st Y+, x0j + lsl x1j ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES - 1, x1j + + ; column 1 + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + ldd x2j, Y + 2 * ROW_INBYTES + Sbox x0j, x1j, x2j, x31 + st Y+, x0j + rol x1j ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES - 1, x1j + ldd t0j, Y + 2 * ROW_INBYTES + 1 + std Y + 2 * ROW_INBYTES + 1, x2j + mov x2j, t0j + + ; column 2, 3 + TwoColumns x22, x32, x33 + ; column 4, 5 + TwoColumns x24, x34, x35 + ; column 6, 7 + TwoColumns x26, x36, x37 + ; column 8, 9 + TwoColumns x28, x38, x39 + ; column 10, 11 + TwoColumns x2a, x3a, x3b + ; column 12, 13 + TwoColumns x2c, x3c, x3d + + ; column 14 + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + Sbox x0j, x1j, x2e, x3e + st Y+, x0j + rol x1j ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES - 1, x1j + + ; column 15 + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + Sbox x0j, x1j, x2j, x3f + st Y+, x0j + rol x1j ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES - 1, x1j + + ld x1j, Y + eor t0j, t0j + adc x1j, t0j + st Y, x1j + std Y + ROW_INBYTES + 1, x2j + + ; f e d c b a 9 8 7 6 5 4 3 2 1 0 + ; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- x- 0 + ; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- x' 0 + ; -- -- -- -- -- -- -- -- -- -- -- -- -- x- -- -- 2 + ; -- -- -- -- -- -- -- -- -- -- -- -- x' -- -- -- 3 + ; c b a 9 8 7 6 5 4 3 2 1 0 f e d + ; x2e x2c x2a x28 x26 x24 x22 x20 => x2c x2a x28 x26 x24 x22 x20 x2e + ;mov t0j, x2e + ;mov x2e, x2c + ;mov x2c, x2a + ;mov x2a, x28 + ;mov x28, x26 + ;mov x26, x24 + ;mov x24, x22 + ;mov x22, x20 + ;mov x20, t0j + ; an intentionally arrangement of registers to facilitate movw + movw t0j, x26 ; t1j:t0j <= x2e:x26 + movw x26, x24 ; x2e:x26 <= x2c:x24 + movw x24, x22 ; x2c:x24 <= x2a:x22 + movw x22, x20 ; x2a:x22 <= x28:x20 + mov x20, t1j ; x20 <= t1j + mov x28, t0j ; x28 <= t0j + + ; <<< 1 + mov t0j, x3f + rol t0j + rol x30 + rol x31 + rol x32 + rol x33 + rol x34 + rol x35 + rol x36 + rol x37 + rol x38 + rol x39 + rol x3a + rol x3b + rol x3c + rol x3d + rol x3e + rol x3f + ; <<< 24 + ; f e d c b a 9 8 7 6 5 4 3 2 1 0 => + ; c b a 9 8 7 6 5 4 3 2 1 0 f e d + ; mov x3j, x30 + ; mov x30, x3d + ; mov x3d, x3a + ; mov x3a, x37 + ; mov x37, x34 + ; mov x34, x31 + ; mov x31, x3e + ; mov x3e, x3b + ; mov x3b, x38 + ; mov x38, x35 + ; mov x35, x32 + ; mov x32, x3f + ; mov x3f, x3c + ; mov x3c, x39 + ; mov x39, x36 + ; mov x36, x33 + ; mov x33, x3j + ; an intentionally arrangement of registers to facilitate movw + ; x30 r8 + ; x3d r10 + ; x3a r12 + ; x37 r14 + ; x34 r16 + ; x31 r18 + ; x3e r20 + ; x3b r22 + ; x38 r9 + ; x35 r11 + ; x32 r13 + ; x3f r15 + ; x3c r17 + ; x39 r19 + ; x36 r21 + ; x33 r23 + movw t0j, x30 ; t1j:t0j <= x38:x30 + movw x30, x3d ; x38:x30 <= x35:x3d + movw x3d, x3a ; x35:x3d <= x32:x3a + movw x3a, x37 ; x32:x3a <= x3f:x37 + movw x37, x34 ; x3f:x37 <= x3c:x34 + movw x34, x31 ; x3c:x34 <= x39:x31 + movw x31, x3e ; x39:x31 <= x36:x3e + movw x3e, x3b ; x36:x3e <= x33:x3b + mov x3b, t1j ; x3b <= x38 + mov x33, t0j ; x33 <= x30 + + pop rcnt + dec rcnt + push rcnt + breq round_loop_end + rjmp round_loop_start + +round_loop_end: + pop rcnt + + ldi YH, hi8(SRAM_STATE + 2 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 2 * ROW_INBYTES) + std Y + 0x00, x20 + std Y + 0x02, x22 + std Y + 0x04, x24 + std Y + 0x06, x26 + std Y + 0x08, x28 + std Y + 0x0a, x2a + std Y + 0x0c, x2c + std Y + 0x0e, x2e + adiw YL, ROW_INBYTES + st Y+, x30 + st Y+, x31 + st Y+, x32 + st Y+, x33 + st Y+, x34 + st Y+, x35 + st Y+, x36 + st Y+, x37 + st Y+, x38 + st Y+, x39 + st Y+, x3a + st Y+, x3b + st Y+, x3c + st Y+, x3d + st Y+, x3e + st Y+, x3f + + POP_CONFLICT +ret + +.section .text +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) +RC_LFSR7: +.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x41, 0x03 +.byte 0x06, 0x0c, 0x18, 0x30, 0x61, 0x42, 0x05, 0x0a +.byte 0x14, 0x28, 0x51, 0x23, 0x47, 0x0f, 0x1e, 0x3c +.byte 0x79, 0x72, 0x64, 0x48, 0x11, 0x22, 0x45, 0x0b +.byte 0x16, 0x2c, 0x59, 0x33, 0x67, 0x4e, 0x1d, 0x3a +.byte 0x75, 0x6a, 0x54, 0x29, 0x53, 0x27, 0x4f, 0x1f +.byte 0x3e, 0x7d, 0x7a, 0x74, 0x68, 0x50, 0x21, 0x43 +.byte 0x07, 0x0e, 0x1c, 0x38, 0x71, 0x62, 0x44, 0x09 +.byte 0x12, 0x24, 0x49, 0x13, 0x26, 0x4d, 0x1b, 0x36 +.byte 0x6d, 0x5a, 0x35, 0x6b, 0x56, 0x2d, 0x5b, 0x37 +.byte 0x6f, 0x5e, 0x3d, 0x7b, 0x76, 0x6c, 0x58, 0x31 +.byte 0x63, 0x46, 0x0d, 0x1a, 0x34, 0x69, 0x52, 0x25 +.byte 0x4b, 0x17, 0x2e, 0x5d, 0x3b, 0x77, 0x6e, 0x5c +.byte 0x39, 0x73, 0x66, 0x4c, 0x19, 0x32, 0x65, 0x4a +.byte 0x15, 0x2a, 0x55, 0x2b, 0x57, 0x2f, 0x5f, 0x3f +.byte 0x7f, 0x7e, 0x7c, 0x78, 0x70, 0x60, 0x40, 0x00 +RC_LFSR8: +.byte 0x01, 0x02, 0x04, 0x08, 0x11, 0x23, 0x47, 0x8e +.byte 0x1c, 0x38, 0x71, 0xe2, 0xc4, 0x89, 0x12, 0x25 +.byte 0x4b, 0x97, 0x2e, 0x5c, 0xb8, 0x70, 0xe0, 0xc0 +.byte 0x81, 0x03, 0x06, 0x0c, 0x19, 0x32, 0x64, 0xc9 +.byte 0x92, 0x24, 0x49, 0x93, 0x26, 0x4d, 0x9b, 0x37 +.byte 0x6e, 0xdc, 0xb9, 0x72, 0xe4, 0xc8, 0x90, 0x20 +.byte 0x41, 0x82, 0x05, 0x0a, 0x15, 0x2b, 0x56, 0xad +.byte 0x5b, 0xb6, 0x6d, 0xda, 0xb5, 0x6b, 0xd6, 0xac +.byte 0x59, 0xb2, 0x65, 0xcb, 0x96, 0x2c, 0x58, 0xb0 +.byte 0x61, 0xc3, 0x87, 0x0f, 0x1f, 0x3e, 0x7d, 0xfb +.byte 0xf6, 0xed, 0xdb, 0xb7, 0x6f, 0xde, 0xbd, 0x7a +.byte 0xf5, 0xeb, 0xd7, 0xae, 0x5d, 0xba, 0x74, 0xe8 +.byte 0xd1, 0xa2, 0x44, 0x88, 0x10, 0x21, 0x43, 0x86 +.byte 0x0d, 0x1b, 0x36, 0x6c, 0xd8, 0xb1, 0x63, 0xc7 +.byte 0x8f, 0x1e, 0x3c, 0x79, 0xf3, 0xe7, 0xce, 0x9c +.byte 0x39, 0x73, 0xe6, 0xcc, 0x98, 0x31, 0x62, 0xc5 +.byte 0x8b, 0x16, 0x2d, 0x5a, 0xb4, 0x69, 0xd2, 0xa4 +.byte 0x48, 0x91, 0x22, 0x45, 0x8a, 0x14, 0x29, 0x52 +.byte 0xa5, 0x4a, 0x95, 0x2a, 0x54, 0xa9, 0x53, 0xa7 +.byte 0x4e, 0x9d, 0x3b, 0x77, 0xee, 0xdd, 0xbb, 0x76 +.byte 0xec, 0xd9, 0xb3, 0x67, 0xcf, 0x9e, 0x3d, 0x7b +.byte 0xf7, 0xef, 0xdf, 0xbf, 0x7e, 0xfd, 0xfa, 0xf4 +.byte 0xe9, 0xd3, 0xa6, 0x4c, 0x99, 0x33, 0x66, 0xcd +.byte 0x9a, 0x35, 0x6a, 0xd4, 0xa8, 0x51, 0xa3, 0x46 +.byte 0x8c, 0x18, 0x30, 0x60, 0xc1, 0x83, 0x07, 0x0e +.byte 0x1d, 0x3a, 0x75, 0xea, 0xd5, 0xaa, 0x55, 0xab +.byte 0x57, 0xaf, 0x5f, 0xbe, 0x7c, 0xf9, 0xf2, 0xe5 +.byte 0xca, 0x94, 0x28, 0x50, 0xa1, 0x42, 0x84, 0x09 +.byte 0x13, 0x27, 0x4f, 0x9f, 0x3f, 0x7f, 0xff, 0xfe +.byte 0xfc, 0xf8, 0xf0, 0xe1, 0xc2, 0x85, 0x0b, 0x17 +.byte 0x2f, 0x5e, 0xbc, 0x78, 0xf1, 0xe3, 0xc6, 0x8d +.byte 0x1a, 0x34, 0x68, 0xd0, 0xa0, 0x40, 0x80, 0x00 +#elif defined(CRYPTO_AEAD) +RC_LFSR7: +.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x41, 0x03 +.byte 0x06, 0x0c, 0x18, 0x30, 0x61, 0x42, 0x05, 0x0a +.byte 0x14, 0x28, 0x51, 0x23, 0x47, 0x0f, 0x1e, 0x3c +.byte 0x79, 0x72, 0x64, 0x48, 0x11, 0x22, 0x45, 0x0b +.byte 0x16, 0x2c, 0x59, 0x33, 0x67, 0x4e, 0x1d, 0x3a +.byte 0x75, 0x6a, 0x54, 0x29, 0x53, 0x27, 0x4f, 0x1f +.byte 0x3e, 0x7d, 0x7a, 0x74, 0x68, 0x50, 0x21, 0x43 +.byte 0x07, 0x0e, 0x1c, 0x38, 0x71, 0x62, 0x44, 0x09 +.byte 0x12, 0x24, 0x49, 0x13, 0x26, 0x4d, 0x1b, 0x36 +.byte 0x6d, 0x5a, 0x35, 0x6b, 0x56, 0x2d, 0x5b, 0x37 +.byte 0x6f, 0x5e, 0x3d, 0x7b, 0x76, 0x6c, 0x58, 0x31 +.byte 0x63, 0x46, 0x0d, 0x1a, 0x34, 0x69, 0x52, 0x25 +.byte 0x4b, 0x17, 0x2e, 0x5d, 0x3b, 0x77, 0x6e, 0x5c +.byte 0x39, 0x73, 0x66, 0x4c, 0x19, 0x32, 0x65, 0x4a +.byte 0x15, 0x2a, 0x55, 0x2b, 0x57, 0x2f, 0x5f, 0x3f +.byte 0x7f, 0x7e, 0x7c, 0x78, 0x70, 0x60, 0x40, 0x00 +#else +RC_LFSR8: +.byte 0x01, 0x02, 0x04, 0x08, 0x11, 0x23, 0x47, 0x8e +.byte 0x1c, 0x38, 0x71, 0xe2, 0xc4, 0x89, 0x12, 0x25 +.byte 0x4b, 0x97, 0x2e, 0x5c, 0xb8, 0x70, 0xe0, 0xc0 +.byte 0x81, 0x03, 0x06, 0x0c, 0x19, 0x32, 0x64, 0xc9 +.byte 0x92, 0x24, 0x49, 0x93, 0x26, 0x4d, 0x9b, 0x37 +.byte 0x6e, 0xdc, 0xb9, 0x72, 0xe4, 0xc8, 0x90, 0x20 +.byte 0x41, 0x82, 0x05, 0x0a, 0x15, 0x2b, 0x56, 0xad +.byte 0x5b, 0xb6, 0x6d, 0xda, 0xb5, 0x6b, 0xd6, 0xac +.byte 0x59, 0xb2, 0x65, 0xcb, 0x96, 0x2c, 0x58, 0xb0 +.byte 0x61, 0xc3, 0x87, 0x0f, 0x1f, 0x3e, 0x7d, 0xfb +.byte 0xf6, 0xed, 0xdb, 0xb7, 0x6f, 0xde, 0xbd, 0x7a +.byte 0xf5, 0xeb, 0xd7, 0xae, 0x5d, 0xba, 0x74, 0xe8 +.byte 0xd1, 0xa2, 0x44, 0x88, 0x10, 0x21, 0x43, 0x86 +.byte 0x0d, 0x1b, 0x36, 0x6c, 0xd8, 0xb1, 0x63, 0xc7 +.byte 0x8f, 0x1e, 0x3c, 0x79, 0xf3, 0xe7, 0xce, 0x9c +.byte 0x39, 0x73, 0xe6, 0xcc, 0x98, 0x31, 0x62, 0xc5 +.byte 0x8b, 0x16, 0x2d, 0x5a, 0xb4, 0x69, 0xd2, 0xa4 +.byte 0x48, 0x91, 0x22, 0x45, 0x8a, 0x14, 0x29, 0x52 +.byte 0xa5, 0x4a, 0x95, 0x2a, 0x54, 0xa9, 0x53, 0xa7 +.byte 0x4e, 0x9d, 0x3b, 0x77, 0xee, 0xdd, 0xbb, 0x76 +.byte 0xec, 0xd9, 0xb3, 0x67, 0xcf, 0x9e, 0x3d, 0x7b +.byte 0xf7, 0xef, 0xdf, 0xbf, 0x7e, 0xfd, 0xfa, 0xf4 +.byte 0xe9, 0xd3, 0xa6, 0x4c, 0x99, 0x33, 0x66, 0xcd +.byte 0x9a, 0x35, 0x6a, 0xd4, 0xa8, 0x51, 0xa3, 0x46 +.byte 0x8c, 0x18, 0x30, 0x60, 0xc1, 0x83, 0x07, 0x0e +.byte 0x1d, 0x3a, 0x75, 0xea, 0xd5, 0xaa, 0x55, 0xab +.byte 0x57, 0xaf, 0x5f, 0xbe, 0x7c, 0xf9, 0xf2, 0xe5 +.byte 0xca, 0x94, 0x28, 0x50, 0xa1, 0x42, 0x84, 0x09 +.byte 0x13, 0x27, 0x4f, 0x9f, 0x3f, 0x7f, 0xff, 0xfe +.byte 0xfc, 0xf8, 0xf0, 0xe1, 0xc2, 0x85, 0x0b, 0x17 +.byte 0x2f, 0x5e, 0xbc, 0x78, 0xf1, 0xe3, 0xc6, 0x8d +.byte 0x1a, 0x34, 0x68, 0xd0, 0xa0, 0x40, 0x80, 0x00 +#endif \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot256v1/avr8_speed/permutation.h b/knot/Implementations/crypto_hash/knot256v1/avr8_speed/permutation.h new file mode 100644 index 0000000..e6c9793 --- /dev/null +++ b/knot/Implementations/crypto_hash/knot256v1/avr8_speed/permutation.h @@ -0,0 +1,45 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.1 2020 by KNOT Team * +; ********************************************** +; + +; +; ============================================ +; R E G I S T E R D E F I N I T I O N S +; ============================================ +; + +#define mclen r16 +#define radlen r17 +#define tcnt r17 +#define tmp0 r20 +#define tmp1 r21 +#define cnt0 r22 +#define rn r23 +#define rate r24 + + +; AEDH = 0b000: for authenticate AD +; AEDH = 0b001: for encryption +; AEDH = 0b011: for decryption +; AEDH = 0b100: for hash +#define AEDH r25 +#define rcnt r26 + +#if (STATE_INBITS==256) +#include "knot256.h" +#elif (STATE_INBITS==384) +#include "knot384.h" +#elif (STATE_INBITS==512) +#include "knot512.h" +#else +#error "Not specified key size and state size" +#endif + + diff --git a/knot/Implementations/crypto_hash/knot256v2/avr8_lowrom/api.h b/knot/Implementations/crypto_hash/knot256v2/avr8_lowrom/api.h new file mode 100644 index 0000000..cb530c7 --- /dev/null +++ b/knot/Implementations/crypto_hash/knot256v2/avr8_lowrom/api.h @@ -0,0 +1 @@ +#define CRYPTO_BYTES 32 \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot256v2/avr8_lowrom/assist.h b/knot/Implementations/crypto_hash/knot256v2/avr8_lowrom/assist.h new file mode 100644 index 0000000..cb903a5 --- /dev/null +++ b/knot/Implementations/crypto_hash/knot256v2/avr8_lowrom/assist.h @@ -0,0 +1,140 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by KNOT Team * +; ********************************************** +; +.macro LFSR6_MACRO + bst rc, 5 + bld tmp0, 0 + bst rc, 4 + bld tmp1, 0 + eor tmp0, tmp1 + ror tmp0 + rol rc + andi rc, 0x3F +.endm + +.macro LFSR7_MACRO + bst rc, 6 + bld tmp0, 0 + bst rc, 5 + bld tmp1, 0 + eor tmp0, tmp1 + ror tmp0 + rol rc + andi rc, 0x7F +.endm + +.macro LFSR8_MACRO + bst rc, 7 + bld tmp0, 0 + bst rc, 5 + bld tmp1, 0 + eor tmp0, tmp1 + bst rc, 4 + bld tmp1, 0 + eor tmp0, tmp1 + bst rc, 3 + bld tmp1, 0 + eor tmp0, tmp1 + ror tmp0 + rol rc +.endm + +.macro Sbox i0, i1, i2, i3 + mov tmp0, \i1 + com \i0 + and \i1, \i0 + eor \i1, \i2 + or \i2, tmp0 + eor \i0, \i3 + eor \i2, \i0 + eor tmp0, \i3 + and \i0, \i1 + eor \i3, \i1 + eor \i0, tmp0 + and tmp0, \i2 + eor \i1, tmp0 +.endm + +.macro PUSH_CONFLICT + push r16 + push r17 + push r18 + push r19 + + push r23 + push r24 + + push r26 + push r27 + push r28 + push r29 + push r30 + push r31 +.endm + +.macro POP_CONFLICT + pop r31 + pop r30 + pop r29 + pop r28 + pop r27 + pop r26 + + pop r24 + pop r23 + + pop r19 + pop r18 + pop r17 + pop r16 +.endm + +.macro PUSH_ALL + push r2 + push r3 + push r4 + push r5 + push r6 + push r7 + push r8 + push r9 + push r10 + push r11 + push r12 + push r13 + push r14 + push r15 + push r16 + push r17 + push r28 + push r29 +.endm + +.macro POP_ALL + pop r29 + pop r28 + pop r17 + pop r16 + pop r15 + pop r14 + pop r13 + pop r12 + pop r11 + pop r10 + pop r9 + pop r8 + pop r7 + pop r6 + pop r5 + pop r4 + pop r3 + pop r2 + clr r1 +.endm \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot256v2/avr8_lowrom/config.h b/knot/Implementations/crypto_hash/knot256v2/avr8_lowrom/config.h new file mode 100644 index 0000000..f6fb82b --- /dev/null +++ b/knot/Implementations/crypto_hash/knot256v2/avr8_lowrom/config.h @@ -0,0 +1,131 @@ +#ifndef __CONFIG_H__ +#define __CONFIG_H__ + +//#define CRYPTO_AEAD +#define CRYPTO_HASH + +#define MAX_MESSAGE_LENGTH 128 + +#define STATE_INBITS 384 +/* For CRYPTO_AEAD */ +#define CRYPTO_KEYBITS 128 +/* For CRYPTO_HASH */ +#define CRYPTO_BITS 256 + +#define STATE_INBYTES ((STATE_INBITS + 7) / 8) +#define ROW_INBITS ((STATE_INBITS + 3) / 4) +#define ROW_INBYTES ((ROW_INBITS + 7) / 8) + +/* For CRYPTO_AEAD */ +#define CRYPTO_KEYBYTES ((CRYPTO_KEYBITS + 7) / 8) +#define CRYPTO_NSECBYTES 0 +#define CRYPTO_NPUBBYTES CRYPTO_KEYBYTES +#define CRYPTO_ABYTES CRYPTO_KEYBYTES +#define CRYPTO_NOOVERLAP 1 + +#define MAX_ASSOCIATED_DATA_LENGTH 32 +#define MAX_CIPHER_LENGTH (MAX_MESSAGE_LENGTH + CRYPTO_ABYTES) + +#define TAG_MATCH 0 +#define TAG_UNMATCH -1 +#define OTHER_FAILURES -2 + +/* For CRYPTO_HASH */ +#define CRYPTO_BYTES ((CRYPTO_BITS + 7) / 8) + + + +#define DOMAIN_BITS 0x80 +#define PAD_BITS 0x01 +#define S384_R192_BITS 0x80 + +#if (STATE_INBITS==256) +#define C1 1 +#define C2 8 +#define C3 25 +#elif (STATE_INBITS==384) +#define C1 1 +#define C2 8 +#define C3 55 +#elif (STATE_INBITS==512) +#define C1 1 +#define C2 16 +#define C3 25 +#else +#error "Not specified state size" +#endif + +#ifdef CRYPTO_AEAD +/* For CRYPTO_AEAD */ +#define KEY_INBITS (CRYPTO_KEYBYTES * 8) +#define KEY_INBYTES (CRYPTO_KEYBYTES) + +#define NONCE_INBITS (CRYPTO_NPUBBYTES * 8) +#define NONCE_INBYTES (CRYPTO_NPUBBYTES) + +#define TAG_INBITS (CRYPTO_ABYTES * 8) +#define TAG_INBYTES (CRYPTO_ABYTES) + +#if (KEY_INBITS==128) && (STATE_INBITS==256) +#define RATE_INBITS 64 +#define NR_0 52 +#define NR_i 28 +#define NR_f 32 +#elif (KEY_INBITS==128) && (STATE_INBITS==384) +#define RATE_INBITS 192 +#define NR_0 76 +#define NR_i 28 +#define NR_f 32 +#elif (KEY_INBITS==192) && (STATE_INBITS==384) +#define RATE_INBITS 96 +#define NR_0 76 +#define NR_i 40 +#define NR_f 44 +#elif (KEY_INBITS==256) && (STATE_INBITS==512) +#define RATE_INBITS 128 +#define NR_0 100 +#define NR_i 52 +#define NR_f 56 +#else +#error "Not specified key size and state size" +#endif + +#define RATE_INBYTES ((RATE_INBITS + 7) / 8) +#define SQUEEZE_RATE_INBYTES TAG_INBYTES + +#endif + +#ifdef CRYPTO_HASH +/* For CRYPTO_HASH */ +#define HASH_DIGEST_INBITS (CRYPTO_BYTES * 8) + +#if (HASH_DIGEST_INBITS==256) && (STATE_INBITS==256) +#define HASH_RATE_INBITS 32 +#define HASH_SQUEEZE_RATE_INBITS 128 +#define NR_h 68 +#elif (HASH_DIGEST_INBITS==256) && (STATE_INBITS==384) +#define HASH_RATE_INBITS 128 +#define HASH_SQUEEZE_RATE_INBITS 128 +#define NR_h 80 +#elif (HASH_DIGEST_INBITS==384) && (STATE_INBITS==384) +#define HASH_RATE_INBITS 48 +#define HASH_SQUEEZE_RATE_INBITS 192 +#define NR_h 104 +#elif (HASH_DIGEST_INBITS==512) && (STATE_INBITS==512) +#define HASH_RATE_INBITS 64 +#define HASH_SQUEEZE_RATE_INBITS 256 +#define NR_h 140 +#else +#error "Not specified hash digest size and state size" +#endif + +#define HASH_RATE_INBYTES ((HASH_RATE_INBITS + 7) / 8) +#define HASH_SQUEEZE_RATE_INBYTES ((HASH_SQUEEZE_RATE_INBITS + 7) / 8) + +#endif + +#define TAG_MATCH 0 +#define TAG_UNMATCH -1 +#define OTHER_FAILURES -2 + +#endif \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot256v2/avr8_lowrom/crypto_hash.h b/knot/Implementations/crypto_hash/knot256v2/avr8_lowrom/crypto_hash.h new file mode 100644 index 0000000..342a639 --- /dev/null +++ b/knot/Implementations/crypto_hash/knot256v2/avr8_lowrom/crypto_hash.h @@ -0,0 +1,13 @@ +#ifdef __cplusplus +extern "C" { +#endif + +int crypto_hash( + unsigned char *out, + const unsigned char *in, + unsigned long long inlen + ); + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot256v2/avr8_lowrom/encrypt.c b/knot/Implementations/crypto_hash/knot256v2/avr8_lowrom/encrypt.c new file mode 100644 index 0000000..baf0a3b --- /dev/null +++ b/knot/Implementations/crypto_hash/knot256v2/avr8_lowrom/encrypt.c @@ -0,0 +1,106 @@ +#include +#include +#include +#include +#include "config.h" + +extern void crypto_aead_encrypt_asm( + unsigned char *c, + const unsigned char *m, + unsigned char mlen, + const unsigned char *ad, + unsigned char adlen, + const unsigned char *npub, + const unsigned char *k + ); + +extern int crypto_aead_decrypt_asm( + unsigned char *m, + const unsigned char *c, + unsigned char clen, + const unsigned char *ad, + unsigned char adlen, + const unsigned char *npub, + const unsigned char *k + ); + +extern void crypto_hash_asm( + unsigned char *out, + const unsigned char *in, + unsigned char inlen + ); + + +int crypto_aead_encrypt( + unsigned char *c, unsigned long long *clen, + const unsigned char *m, unsigned long long mlen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k + ) +{ + /* + ... + ... the code for the cipher implementation goes here, + ... generating a ciphertext c[0],c[1],...,c[*clen-1] + ... from a plaintext m[0],m[1],...,m[mlen-1] + ... and associated data ad[0],ad[1],...,ad[adlen-1] + ... and nonce npub[0],npub[1],.. + ... and secret key k[0],k[1],... + ... the implementation shall not use nsec + ... + ... return 0; + */ + + (void)nsec; + + crypto_aead_encrypt_asm(c, m, mlen, ad, adlen, npub, k); + + *clen = mlen + TAG_INBYTES; + return 0; +} + + + +int crypto_aead_decrypt( + unsigned char *m, unsigned long long *mlen, + unsigned char *nsec, + const unsigned char *c, unsigned long long clen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k + ) +{ + /* + ... + ... the code for the AEAD implementation goes here, + ... generating a plaintext m[0],m[1],...,m[*mlen-1] + ... and secret message number nsec[0],nsec[1],... + ... from a ciphertext c[0],c[1],...,c[clen-1] + ... and associated data ad[0],ad[1],...,ad[adlen-1] + ... and nonce number npub[0],npub[1],... + ... and secret key k[0],k[1],... + ... + ... return 0; + */ + unsigned long long mlen_; + unsigned char tag_is_match; + + (void)nsec; + if (clen < CRYPTO_ABYTES) { + return -1; + } + mlen_ = clen - CRYPTO_ABYTES; + + tag_is_match = crypto_aead_decrypt_asm(m, c, mlen_, ad, adlen, npub, k); + + if (tag_is_match != 0) + { + memset(m, 0, (size_t)mlen_); + return -1; + } + + *mlen = mlen_; + return 0; +} \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot256v2/avr8_lowrom/encrypt_core.S b/knot/Implementations/crypto_hash/knot256v2/avr8_lowrom/encrypt_core.S new file mode 100644 index 0000000..cb7aed5 --- /dev/null +++ b/knot/Implementations/crypto_hash/knot256v2/avr8_lowrom/encrypt_core.S @@ -0,0 +1,537 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by KNOT Team * +; ********************************************** +; + +; +; ============================================ +; S R A M D E F I N I T I O N S +; ============================================ +; +#include +#include "config.h" + +.section .noinit + SRAM_STATE: .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#if (STATE_INBYTES > 32) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif +#if (STATE_INBYTES > 48) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif + SRAM_MESSAGE_OUT_ADDR: .BYTE 0, 0 + SRAM_MESSAGE_IN_ADDR: .BYTE 0, 0 + SRAM_MESSAGE_IN_LEN: .BYTE 0, 0 +#ifdef CRYPTO_AEAD +; For CRYPTO_AEAD + SRAM_ASSOCIATED_DATA_ADDR: .BYTE 0, 0 + SRAM_ADLEN: .BYTE 0, 0 + SRAM_NONCE_ADDR: .BYTE 0, 0 + SRAM_KEY_ADDR: .BYTE 0, 0 + + SRAM_ADDITIONAL: + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#if (CRYPTO_ABYTES > 16) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif +#if (CRYPTO_ABYTES > 24) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif + +#endif + +.section .text + +#include "permutation.h" + +; require YH:YL be the address of the current associated data/cipher/message block +; for enc and dec, store ciphertext or plaintext +; require ZH:ZL be the address of the current cipher/message block +XOR_to_State: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + mov cnt0, rate +XOR_to_State_loop: + ld tmp0, Y+ ; plaintext/ciphertext + ld tmp1, X ; state + eor tmp1, tmp0 ; ciphertext/plaintext + sbrc AEDH, 0 ; test auth or enc/dec, if AEDH[0] == 0, skip store result + st Z+, tmp1 ; store ciphertext/plaintext + sbrc AEDH, 1 ; test auth/enc or dec, if AEDH[1] == 0, skip repalce state byte + mov tmp1, tmp0 ; if dec, replace state + st X+, tmp1 ; store state byte + dec cnt0 + brne XOR_to_State_loop +; YH:YL are now the address of the next associated data block +ret + +; require YH:YL pointed to the input data +; require ZH:ZL pointed to the output data +; require cnt0 containes the nubmer of bytes in source data +; require number of bytes in source data less than rate, i.e., 0 <= cnt0 < rate +; +; the 0th bit in AEDH is used to distinguish (auth AD) or (enc/dec M/C): +; AEDH[0] = 0 for (auth AD), AEDH[0] = 1 for (enc/dec M/C) +; the 1th bit in AEDH is used to distinguish (auth AD/enc M) or (dec C): +; AEDH[1] = 0 for (auth AD/enc M), AEDH[1] = 1 for (dec C) +; AEDH = 0b000 for (auth AD) +; AEDH = 0b001 for (enc M) +; AEDH = 0b011 for (dec C) +Pad_XOR_to_State: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + tst cnt0 + breq XOR_padded_data +XOR_source_data_loop: + ld tmp0, Y+ ; plaintext/ciphertext + ld tmp1, X ; state + eor tmp1, tmp0 ; ciphertext/plaintext + sbrc AEDH, 0 ; test auth or enc/dec, if AEDH[0] == 0, skip store result + st Z+, tmp1 ; store ciphertext/plaintext + sbrc AEDH, 1 ; test auth/enc or dec, if AEDH[1] == 0, skip repalce state byte + mov tmp1, tmp0 ; if dec, replace state + st X+, tmp1 ; store state byte + dec cnt0 + brne XOR_source_data_loop +XOR_padded_data: + ldi tmp0, PAD_BITS + ld tmp1, X + eor tmp1, tmp0 + st X, tmp1 +ret + +AddDomain: + ldi XH, hi8(SRAM_STATE + STATE_INBYTES - 1) + ldi XL, lo8(SRAM_STATE + STATE_INBYTES - 1) + ldi tmp0, DOMAIN_BITS + ld tmp1, X + eor tmp0, tmp1 + st X, tmp0 +ret + +; require ZH:ZL be the address of the destination +EXTRACT_from_State: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + mov tmp1, rate +EXTRACT_from_State_loop: + ld tmp0, X+ + st Z+, tmp0 + dec tmp1 + brne EXTRACT_from_State_loop +ret + +AUTH: + tst radlen + breq AUTH_end + + cp radlen, rate + brlo auth_ad_padded_block + +auth_ad_loop: + rcall XOR_to_State + rcall Permutation + sub radlen, rate + cp radlen, rate + brlo auth_ad_padded_block + rjmp auth_ad_loop + +auth_ad_padded_block: + mov cnt0, radlen + rcall Pad_XOR_to_State + rcall Permutation + +AUTH_end: +ret + +#ifdef CRYPTO_AEAD +Initialization: + ldi rn, NR_0 + ldi XL, lo8(SRAM_STATE) + ldi XH, hi8(SRAM_STATE) + + lds YH, SRAM_NONCE_ADDR + lds YL, SRAM_NONCE_ADDR + 1 + ldi cnt0, CRYPTO_NPUBBYTES +load_nonce_loop: + ld tmp0, Y+ + st X+, tmp0 + dec cnt0 + brne load_nonce_loop + + lds YH, SRAM_KEY_ADDR + lds YL, SRAM_KEY_ADDR + 1 + ldi cnt0, CRYPTO_KEYBYTES +load_key_loop: + ld tmp0, Y+ + st X+, tmp0 + dec cnt0 + brne load_key_loop + +#if (STATE_INBITS==384) && (RATE_INBITS==192) + ldi cnt0, (STATE_INBYTES - CRYPTO_NPUBBYTES - CRYPTO_KEYBYTES - 1) + clr tmp0 +empty_state_loop: + st X+, tmp0 + dec cnt0 + brne empty_state_loop + ldi tmp0, S384_R192_BITS + st X+, tmp0 +#endif + + rcall Permutation +ret + +ENC: + tst mclen + breq ENC_end + + cp mclen, rate + brlo enc_padded_block + +enc_loop: + rcall XOR_to_State + ldi rn, NR_i + rcall Permutation + sub mclen, rate + cp mclen, rate + brlo enc_padded_block + rjmp enc_loop + +enc_padded_block: + mov cnt0, mclen + rcall Pad_XOR_to_State +ENC_end: +ret + +Finalization: + ldi rate, SQUEEZE_RATE_INBYTES + ldi rn, NR_f + rcall Permutation + rcall EXTRACT_from_State +ret + +; void crypto_aead_encrypt_asm( +; unsigned char *c, +; const unsigned char *m, +; unsigned long long mlen, +; const unsigned char *ad, +; unsigned long long adlen, +; const unsigned char *npub, +; const unsigned char *k +; ) +; +; unsigned char *c, is passed in r24:r25 +; const unsigned char *m, is passed in r22:r23 +; unsigned long long mlen, is passed in r20:r21, only LSB (r20) is used +; const unsigned char *ad, is passed in r18:r19 +; unsigned long long adlen, is passed in r16:r17, only LSB (r16) is used +; const unsigned char *npub, is passed in r14:r15 +; const unsigned char *k is passed in r12:r13 +.global crypto_aead_encrypt_asm +crypto_aead_encrypt_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store cipher address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store message address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store message length in SRAM_MESSAGE_IN_LEN + st X+, r20 + st X+, r19 ;store associated data address in SRAM_ASSOCIATED_DATA_ADDR + st X+, r18 + st X+, r17 ;store associated data length in SRAM_ADLEN + st X+, r16 + st X+, r15 ;store nonce address in SRAM_NONCE_ADDR + st X+, r14 + st X+, r13 ;store key address in SRAM_KEY_ADDR + st X+, r12 + mov radlen, r16 + mov mclen, r20 + + rcall Initialization + + ldi rn, NR_i + ldi rate, RATE_INBYTES + ldi AEDH, 0b000 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_ASSOCIATED_DATA_ADDR + lds YL, SRAM_ASSOCIATED_DATA_ADDR + 1 + rcall AUTH + rcall AddDomain + ldi AEDH, 0b001 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_MESSAGE_IN_ADDR + lds YL, SRAM_MESSAGE_IN_ADDR + 1 + lds ZH, SRAM_MESSAGE_OUT_ADDR + lds ZL, SRAM_MESSAGE_OUT_ADDR + 1 + rcall ENC + rcall Finalization + POP_ALL +ret + +; int crypto_aead_decrypt_asm( +; unsigned char *m, +; const unsigned char *c, +; unsigned long long clen, +; const unsigned char *ad, +; unsigned long long adlen, +; const unsigned char *npub, +; const unsigned char *k +; ) +; +; unsigned char *m, is passed in r24:r25 +; const unsigned char *c, is passed in r22:r23 +; unsigned long long clen, is passed in r20:r21, only LSB (r20) is used +; const unsigned char *ad, is passed in r18:r19 +; unsigned long long adlen, is passed in r16:r17, only LSB (r16) is used +; const unsigned char *npub, is passed in r14:r15 +; const unsigned char *k is passed in r12:r13 +.global crypto_aead_decrypt_asm +crypto_aead_decrypt_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store message address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store cipher address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store cipher length in SRAM_MESSAGE_IN_LEN + st X+, r20 + st X+, r19 ;store associated data address in SRAM_ASSOCIATED_DATA_ADDR + st X+, r18 + st X+, r17 ;store associated data length in SRAM_ADLEN + st X+, r16 + st X+, r15 ;store nonce address in SRAM_NONCE_ADDR + st X+, r14 + st X+, r13 ;store key address in SRAM_KEY_ADDR + st X+, r12 + mov radlen, r16 + mov mclen, r20 + + rcall Initialization + + ldi rn, NR_i + ldi rate, RATE_INBYTES + ldi AEDH, 0b000 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_ASSOCIATED_DATA_ADDR + lds YL, SRAM_ASSOCIATED_DATA_ADDR + 1 + rcall AUTH + rcall AddDomain + ldi AEDH, 0b011 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_MESSAGE_IN_ADDR + lds YL, SRAM_MESSAGE_IN_ADDR + 1 + lds ZH, SRAM_MESSAGE_OUT_ADDR + lds ZL, SRAM_MESSAGE_OUT_ADDR + 1 + rcall ENC + + ldi ZH, hi8(SRAM_ADDITIONAL) + ldi ZL, lo8(SRAM_ADDITIONAL) + rcall Finalization + + sbiw ZL, CRYPTO_ABYTES + ldi cnt0, CRYPTO_ABYTES +compare_tag: + ld tmp0, Z+ + ld tmp1, Y+ + cp tmp0, tmp1 + brne return_tag_not_match + dec cnt0 + brne compare_tag + rjmp return_tag_match + +return_tag_not_match: + ldi r25, 0xFF + ldi r24, 0xFF + rjmp crypto_aead_decrypt_end + +return_tag_match: + clr r25 + clr r24 +crypto_aead_decrypt_end: + POP_ALL +ret + +; #ifdef CRYPTO_AEAD +#endif + + +#ifdef CRYPTO_HASH + +; void crypto_hash_asm( +; unsigned char *out, +; const unsigned char *in, +; unsigned long long inlen +; ) +; +; unsigned char *out, is passed in r24:r25 +; const unsigned char *in, is passed in r22:r23 +; unsigned long long inlen, is passed in r20:r21, only LSB (r20) is used +.global crypto_hash_asm +crypto_hash_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store message address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store cipher address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store cipher length in SRAM_MESSAGE_IN_LEN + st X+, r20 + mov mclen, r20 + + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) +#if (STATE_INBITS==384) && (HASH_RATE_INBITS==128) + ldi cnt0, STATE_INBYTES - 1 +#else + ldi cnt0, STATE_INBYTES +#endif + clr tmp0 +zero_state: + st X+, tmp0 + dec cnt0 + brne zero_state + +#if (STATE_INBITS==384) && (HASH_RATE_INBITS==128) + ldi tmp0, S384_R192_BITS + st X+, tmp0 +#endif + + ldi rn, NR_h + ldi AEDH, 0b100 + +HASH_ABSORBING: + mov radlen, mclen + tst radlen + breq EMPTY_M + ldi rate, HASH_RATE_INBYTES + lds YH, SRAM_MESSAGE_IN_ADDR + lds YL, SRAM_MESSAGE_IN_ADDR + 1 + rcall AUTH + rjmp HASH_SQUEEZING + +EMPTY_M: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + ldi tmp0, PAD_BITS + ld tmp1, X + eor tmp1, tmp0 + st X, tmp1 + rcall Permutation + +HASH_SQUEEZING: + ldi rate, HASH_SQUEEZE_RATE_INBYTES + lds ZH, SRAM_MESSAGE_OUT_ADDR + lds ZL, SRAM_MESSAGE_OUT_ADDR + 1 + ldi tcnt, CRYPTO_BYTES +SQUEEZING_loop: + rcall EXTRACT_from_State + subi tcnt, HASH_SQUEEZE_RATE_INBYTES + breq HASH_SQUEEZING_end + rcall Permutation + rjmp SQUEEZING_loop +HASH_SQUEEZING_end: + POP_ALL +ret + +#endif + + +; Byte Order In AVR 8: +; KNOT-AEAD(128, 256, 64): +; N[ 0] AEAD_State[ 0] | Message[ 0] Perm_row_0[0] 0 Tag[ 0] +; N[ 1] AEAD_State[ 1] | Message[ 1] Perm_row_0[1] 0 Tag[ 1] +; N[ 2] AEAD_State[ 2] | Message[ 2] Perm_row_0[2] 0 Tag[ 2] +; N[ 3] AEAD_State[ 3] | Message[ 3] Perm_row_0[3] 0 Tag[ 3] +; N[ 4] AEAD_State[ 4] | Message[ 4] 0x01 Perm_row_0[4] 0 Tag[ 4] +; N[ 5] AEAD_State[ 5] | Message[ 5] 0x00 Perm_row_0[5] 0 Tag[ 5] +; N[ 6] AEAD_State[ 6] | Message[ 6] 0x00 Perm_row_0[6] 0 Tag[ 6] +; N[ 7] AEAD_State[ 7] | Message[ 7] 0x00 Perm_row_0[7] <<< 0 Tag[ 7] +; N[ 8] AEAD_State[ 8] | Perm_row_1[0] 1 +; N[ 9] AEAD_State[ 9] | Perm_row_1[1] 1 +; N[10] AEAD_State[10] | Perm_row_1[2] 1 +; N[11] AEAD_State[11] | Perm_row_1[3] 1 +; N[12] AEAD_State[12] | Perm_row_1[4] 1 +; N[13] AEAD_State[13] | Perm_row_1[5] 1 +; N[14] AEAD_State[14] | Perm_row_1[6] 1 +; N[15] AEAD_State[15] | Perm_row_1[7] <<< 1 +; K[ 0] AEAD_State[16] | Perm_row_2[0] 8 +; K[ 1] AEAD_State[17] | Perm_row_2[1] 8 +; K[ 2] AEAD_State[18] | Perm_row_2[2] 8 +; K[ 3] AEAD_State[19] | Perm_row_2[3] 8 +; K[ 4] AEAD_State[20] | Perm_row_2[4] 8 +; K[ 5] AEAD_State[21] | Perm_row_2[5] 8 +; K[ 6] AEAD_State[22] | Perm_row_2[6] 8 +; K[ 7] AEAD_State[23] | Perm_row_2[7] <<< 8 +; K[ 8] AEAD_State[24] | Perm_row_3[0] 25 +; K[ 9] AEAD_State[25] | Perm_row_3[1] 25 +; K[10] AEAD_State[26] | Perm_row_3[2] 25 +; K[11] AEAD_State[27] | Perm_row_3[3] 25 +; K[12] AEAD_State[28] | Perm_row_3[4] 25 +; K[13] AEAD_State[29] | Perm_row_3[5] 25 +; K[14] AEAD_State[30] | Perm_row_3[6] 25 +; K[15] AEAD_State[31] | ^0x80 Perm_row_3[7] <<< 25 +; +; +; KNOT-AEAD(128, 384, 192): +; Initalization +; N[ 0] AEAD_State[ 0] | Message[ 0] Perm_row_0[ 0] 0 Tag[ 0] +; N[ 1] AEAD_State[ 1] | Message[ 1] Perm_row_0[ 1] 0 Tag[ 1] +; N[ 2] AEAD_State[ 2] | Message[ 2] Perm_row_0[ 2] 0 Tag[ 2] +; N[ 3] AEAD_State[ 3] | Message[ 3] Perm_row_0[ 3] 0 Tag[ 3] +; N[ 4] AEAD_State[ 4] | Message[ 4] 0x01 Perm_row_0[ 4] 0 Tag[ 4] +; N[ 5] AEAD_State[ 5] | Message[ 5] 0x00 Perm_row_0[ 5] 0 Tag[ 5] +; N[ 6] AEAD_State[ 6] | Message[ 6] 0x00 Perm_row_0[ 6] 0 Tag[ 6] +; N[ 7] AEAD_State[ 7] | Message[ 7] 0x00 Perm_row_0[ 7] 0 Tag[ 7] +; N[ 8] AEAD_State[ 8] | Message[ 8] 0x00 Perm_row_0[ 8] 0 Tag[ 8] +; N[ 9] AEAD_State[ 9] | Message[ 9] 0x00 Perm_row_0[ 9] 0 Tag[ 9] +; N[10] AEAD_State[10] | Message[10] 0x00 Perm_row_0[10] 0 Tag[10] +; N[11] AEAD_State[11] | Message[11] 0x00 Perm_row_0[11] <<< 0 Tag[11] +; N[12] AEAD_State[12] | Message[12] 0x00 Perm_row_1[ 0] 1 Tag[12] +; N[13] AEAD_State[13] | Message[13] 0x00 Perm_row_1[ 1] 1 Tag[13] +; N[14] AEAD_State[14] | Message[14] 0x00 Perm_row_1[ 2] 1 Tag[14] +; N[15] AEAD_State[15] | Message[15] 0x00 Perm_row_1[ 3] 1 Tag[15] +; K[ 0] AEAD_State[16] | Message[16] 0x00 Perm_row_1[ 4] 1 +; K[ 1] AEAD_State[17] | Message[17] 0x00 Perm_row_1[ 5] 1 +; K[ 2] AEAD_State[18] | Message[18] 0x00 Perm_row_1[ 6] 1 +; K[ 3] AEAD_State[19] | Message[19] 0x00 Perm_row_1[ 7] 1 +; K[ 4] AEAD_State[20] | Message[20] 0x00 Perm_row_1[ 8] 1 +; K[ 5] AEAD_State[21] | Message[21] 0x00 Perm_row_1[ 9] 1 +; K[ 6] AEAD_State[22] | Message[22] 0x00 Perm_row_1[10] 1 +; K[ 7] AEAD_State[23] | Message[23] 0x00 Perm_row_1[11] <<< 1 +; K[ 8] AEAD_State[24] | Perm_row_2[ 0] 8 +; K[ 9] AEAD_State[25] | Perm_row_2[ 1] 8 +; K[10] AEAD_State[26] | Perm_row_2[ 2] 8 +; K[11] AEAD_State[27] | Perm_row_2[ 3] 8 +; K[12] AEAD_State[28] | Perm_row_2[ 4] 8 +; K[13] AEAD_State[29] | Perm_row_2[ 5] 8 +; K[14] AEAD_State[30] | Perm_row_2[ 6] 8 +; K[15] AEAD_State[31] | Perm_row_2[ 7] 8 +; 0x00 AEAD_State[32] | Perm_row_2[ 8] 8 +; 0x00 AEAD_State[33] | Perm_row_2[ 9] 8 +; 0x00 AEAD_State[34] | Perm_row_2[10] 8 +; 0x00 AEAD_State[35] | Perm_row_2[11] <<< 8 +; 0x00 AEAD_State[36] | Perm_row_3[ 0] 55 +; 0x00 AEAD_State[37] | Perm_row_3[ 1] 55 +; 0x00 AEAD_State[38] | Perm_row_3[ 2] 55 +; 0x00 AEAD_State[39] | Perm_row_3[ 3] 55 +; 0x00 AEAD_State[40] | Perm_row_3[ 4] 55 +; 0x00 AEAD_State[41] | Perm_row_3[ 5] 55 +; 0x00 AEAD_State[42] | Perm_row_3[ 6] 55 +; 0x00 AEAD_State[43] | Perm_row_3[ 7] 55 +; 0x00 AEAD_State[44] | Perm_row_3[ 8] 55 +; 0x00 AEAD_State[45] | Perm_row_3[ 9] 55 +; 0x00 AEAD_State[46] | Perm_row_3[10] 55 +; 0x00 ^0x80 AEAD_State[47] | ^0x80 Perm_row_3[11] <<< 55 diff --git a/knot/Implementations/crypto_hash/knot256v2/avr8_lowrom/hash.c b/knot/Implementations/crypto_hash/knot256v2/avr8_lowrom/hash.c new file mode 100644 index 0000000..dbbe4df --- /dev/null +++ b/knot/Implementations/crypto_hash/knot256v2/avr8_lowrom/hash.c @@ -0,0 +1,32 @@ +#include +#include +#include +#include +#include "api.h" +#include "crypto_hash.h" + +extern void crypto_hash_asm( + unsigned char *out, + const unsigned char *in, + unsigned char inlen + ); + +int crypto_hash( + unsigned char *out, + const unsigned char *in, + unsigned long long inlen +) +{ + /* + ... + ... the code for the hash function implementation goes here + ... generating a hash value out[0],out[1],...,out[CRYPTO_BYTES-1] + ... from a message in[0],in[1],...,in[in-1] + ... + ... return 0; + */ + + crypto_hash_asm(out, in, inlen); + + return 0; +} \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot256v2/avr8_lowrom/knot256.h b/knot/Implementations/crypto_hash/knot256v2/avr8_lowrom/knot256.h new file mode 100644 index 0000000..d16bf8c --- /dev/null +++ b/knot/Implementations/crypto_hash/knot256v2/avr8_lowrom/knot256.h @@ -0,0 +1,197 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by KNOT Team * +; ********************************************** +; +#include "assist.h" + +Permutation: + PUSH_CONFLICT + mov rcnt, rn + + ldi rc, 0x01 + ldi YH, hi8(SRAM_STATE + 3 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 3 * ROW_INBYTES) + ld x30, Y+ + ld x31, Y+ + ld x32, Y+ + ld x33, Y+ + ld x34, Y+ + ld x35, Y+ + ld x36, Y+ + ld x37, Y+ + +round_loop_start: + rjmp AddRC_SubColumns_Start + +load_columns_table: + rjmp load_column0 + rjmp load_column1 + rjmp load_column2 + rjmp load_column3 + rjmp load_column4 + rjmp load_column5 + rjmp load_column6 + rjmp load_column7 + rjmp amend_shiftRow + +load_column0: + mov x3j, x30 + rjmp Sbox_one_column +load_column1: + mov x30, x3j + mov x3j, x31 + rjmp Sbox_one_column +load_column2: + mov x31, x3j + mov x3j, x32 + rjmp Sbox_one_column +load_column3: + mov x32, x3j + mov x3j, x33 + rjmp Sbox_one_column +load_column4: + mov x33, x3j + mov x3j, x34 + rjmp Sbox_one_column +load_column5: + mov x34, x3j + mov x3j, x35 + rjmp Sbox_one_column +load_column6: + mov x35, x3j + mov x3j, x36 + rjmp Sbox_one_column +load_column7: + mov x36, x3j + mov x3j, x37 + rjmp Sbox_one_column + +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) +LFSR_table: + rjmp LFSR6 + rjmp LFSR7 +LFSR6: + LFSR6_MACRO + rjmp LFSR_DONE +LFSR7: + LFSR7_MACRO + rjmp LFSR_DONE +#endif + +;;;;;;;;;;;;;;;;;;;;;;;; Real Start +AddRC_SubColumns_Start: + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + clr ccnt + ld x0j, Y + eor x0j, rc + +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) + ldi ZL, pm_lo8(LFSR_table) + ldi ZH, pm_hi8(LFSR_table) + sbrc AEDH, 2 ; AEDH[2] = 0 for AEAD and AEDH[1] = 1 for HASH + adiw ZL, 1 + ijmp +LFSR_DONE: +#elif defined(CRYPTO_AEAD) + LFSR6_MACRO ; only AEAD +#else + LFSR7_MACRO ; only HASH +#endif + + ldd x1j, Y + ROW_INBYTES + ldd x2j, Y + 2 * ROW_INBYTES + ldi ZL, pm_lo8(load_columns_table) + ldi ZH, pm_hi8(load_columns_table) + ijmp +Sbox_one_column: + Sbox x0j, x1j, x2j, x3j + + ; 7 6 5 4 3 2 1 0 + ; -- -- -- -- -- -- -- x- 0 + ; -- -- -- -- -- -- -- x' 0 + ; -- -- -- -- -- -- x- -- 1 + ; -- -- -- -- x' -- -- -- 3 + ; 4 3 2 1 0 7 6 5 + ; Store a byte to Row 0 + st Y, x0j + ; Store a byte combined with ShiftRow1 + lsl t1j + mov t1j, x1j ; back up the last updated byte in t1j, to be used in shiftRow1 (1 bit left) + rol x1j + std Y + ROW_INBYTES, x1j + ; Store a byte combined with ShiftRow2 + inc ccnt + cpi ccnt, ROW_INBYTES + breq ROW2_WRAP + ldd t2j, Y + 2 * ROW_INBYTES + 1 ; load next byte, the last updated byte needed to be shifted to the address of the next bytes + std Y + 2 * ROW_INBYTES + 1, x2j + mov x2j, t2j + jmp NO_ROW2_WRAP +ROW2_WRAP: + std Y + ROW_INBYTES + 1, x2j + ; remain ShiftRow3 to be done at 'amend_shiftRow' +NO_ROW2_WRAP: + adiw YL, 1 + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + + adiw ZL, 1 + ijmp + +amend_shiftRow: + ldi YH, hi8(SRAM_STATE + ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + ROW_INBYTES) + + ld x1j, Y + bst t1j, 7 + bld x1j, 0 + st Y, x1j + + ; <<< 1 + mov x37, x3j + rol x3j + rol x30 + rol x31 + rol x32 + rol x33 + rol x34 + rol x35 + rol x36 + rol x37 + ; <<< 24 + ; 7 6 5 4 3 2 1 0 => 4 3 2 1 0 7 6 5 + mov x3j, x30 + mov x30, x35 + mov x35, x32 + mov x32, x37 + mov x37, x34 + mov x34, x31 + mov x31, x36 + mov x36, x33 + mov x33, x3j + + dec rcnt + breq round_loop_end + rjmp round_loop_start + +round_loop_end: + ldi YH, hi8(SRAM_STATE + 3 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 3 * ROW_INBYTES) + st Y+, x30 + st Y+, x31 + st Y+, x32 + st Y+, x33 + st Y+, x34 + st Y+, x35 + st Y+, x36 + st Y+, x37 + + POP_CONFLICT +ret \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot256v2/avr8_lowrom/knot384.h b/knot/Implementations/crypto_hash/knot256v2/avr8_lowrom/knot384.h new file mode 100644 index 0000000..65c474a --- /dev/null +++ b/knot/Implementations/crypto_hash/knot256v2/avr8_lowrom/knot384.h @@ -0,0 +1,219 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by KNOT Team * +; ********************************************** +; +#include "assist.h" + +Permutation: + PUSH_CONFLICT + mov rcnt, rn + + ldi rc, 0x01 + ldi YH, hi8(SRAM_STATE + 3 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 3 * ROW_INBYTES) + ld x30, Y+ + ld x31, Y+ + ld x32, Y+ + ld x33, Y+ + ld x34, Y+ + ld x35, Y+ + ld x36, Y+ + ld x37, Y+ + ld x38, Y+ + ld x39, Y+ + ld x3a, Y+ + ld x3b, Y+ + +round_loop_start: + rjmp AddRC_SubColumns_Start + +load_columns_table: + rjmp load_column0 + rjmp load_column1 + rjmp load_column2 + rjmp load_column3 + rjmp load_column4 + rjmp load_column5 + rjmp load_column6 + rjmp load_column7 + rjmp load_column8 + rjmp load_column9 + rjmp load_columna + rjmp load_columnb + rjmp amend_shiftRow + +load_column0: + mov x3j, x30 + rjmp Sbox_one_column +load_column1: + mov x30, x3j + mov x3j, x31 + rjmp Sbox_one_column +load_column2: + mov x31, x3j + mov x3j, x32 + rjmp Sbox_one_column +load_column3: + mov x32, x3j + mov x3j, x33 + rjmp Sbox_one_column +load_column4: + mov x33, x3j + mov x3j, x34 + rjmp Sbox_one_column +load_column5: + mov x34, x3j + mov x3j, x35 + rjmp Sbox_one_column +load_column6: + mov x35, x3j + mov x3j, x36 + rjmp Sbox_one_column +load_column7: + mov x36, x3j + mov x3j, x37 + rjmp Sbox_one_column +load_column8: + mov x37, x3j + mov x3j, x38 + rjmp Sbox_one_column +load_column9: + mov x38, x3j + mov x3j, x39 + rjmp Sbox_one_column +load_columna: + mov x39, x3j + mov x3j, x3a + rjmp Sbox_one_column +load_columnb: + mov x3a, x3j + mov x3j, x3b + rjmp Sbox_one_column + +;;;;;;;;;;;;;;;;;;;;;;;; Real Start +AddRC_SubColumns_Start: + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + ldi ZL, pm_lo8(load_columns_table) + ldi ZH, pm_hi8(load_columns_table) + clr ccnt + ld x0j, Y + eor x0j, rc + LFSR7_MACRO + + ldd x1j, Y + ROW_INBYTES + ldd x2j, Y + 2 * ROW_INBYTES + ijmp +Sbox_one_column: + Sbox x0j, x1j, x2j, x3j + + ; b a 9 8 7 6 5 4 3 2 1 0 + ; -- -- -- -- -- -- -- -- -- -- -- x- 0 + ; -- -- -- -- -- -- -- -- -- -- -- x' 0 + ; -- -- -- -- -- -- -- -- -- -- x- -- 1 + ; -- -- -- -- x' -- -- -- -- -- -- -- 7 + ; 4 3 2 1 0 b a 9 8 7 6 5 + ; Store a byte to Row 0 + st Y, x0j + ; Store a byte combined with ShiftRow 1 + lsl t1j + mov t1j, x1j ; back up the last updated byte in t1j, to be used in shiftRow1 (1 bit left) + rol x1j + std Y + ROW_INBYTES, x1j + ; Store a byte combined with ShiftRow 2 + inc ccnt + cpi ccnt, ROW_INBYTES + breq ROW2_WRAP + ldd t2j, Y + 2 * ROW_INBYTES + 1 ; load next byte, the last updated byte needed to be shifted to the address of the next bytes + std Y + 2 * ROW_INBYTES + 1, x2j + mov x2j, t2j + jmp NO_ROW2_WRAP +ROW2_WRAP: + std Y + ROW_INBYTES + 1, x2j + ; remain ShiftRow3 to be done at 'amend_shiftRow' +NO_ROW2_WRAP: + adiw YL, 1 + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + + adiw ZL, 1 + ijmp + +amend_shiftRow: + ldi YH, hi8(SRAM_STATE + ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + ROW_INBYTES) + + ld x1j, Y + bst t1j, 7 + bld x1j, 0 + st Y, x1j + + ; >>> 1 + mov x3b, x3j + ror x3j + ror x3a + ror x39 + ror x38 + ror x37 + ror x36 + ror x35 + ror x34 + ror x33 + ror x32 + ror x31 + ror x30 + ror x3b + ; <<< 56 + ; b a 9 8 7 6 5 4 3 2 1 0 => 4 3 2 1 0 b a 9 8 7 6 5 + ;mov x3j, x30 + ;mov x30, x35 + ;mov x35, x32 + ;mov x32, x37 + ;mov x37, x34 + ;mov x34, x31 + ;mov x31, x36 + ;mov x36, x33 + ;mov x33, x3j + mov x3j, x30 + mov x30, x35 + mov x35, x3a + mov x3a, x33 + mov x33, x38 + mov x38, x31 + mov x31, x36 + mov x36, x3b + mov x3b, x34 + mov x34, x39 + mov x39, x32 + mov x32, x37 + mov x37, x3j + + dec rcnt + breq round_loop_end + rjmp round_loop_start + +round_loop_end: + + ldi YH, hi8(SRAM_STATE + 3 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 3 * ROW_INBYTES) + st Y+, x30 + st Y+, x31 + st Y+, x32 + st Y+, x33 + st Y+, x34 + st Y+, x35 + st Y+, x36 + st Y+, x37 + st Y+, x38 + st Y+, x39 + st Y+, x3a + st Y+, x3b + + POP_CONFLICT +ret \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot256v2/avr8_lowrom/knot512.h b/knot/Implementations/crypto_hash/knot256v2/avr8_lowrom/knot512.h new file mode 100644 index 0000000..d24b353 --- /dev/null +++ b/knot/Implementations/crypto_hash/knot256v2/avr8_lowrom/knot512.h @@ -0,0 +1,275 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by KNOT Team * +; ********************************************** +; +#include "assist.h" + +Permutation: + PUSH_CONFLICT + mov rcnt, rn + + ldi rc, 0x01 + ldi YH, hi8(SRAM_STATE + 3 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 3 * ROW_INBYTES) + ld x30, Y+ + ld x31, Y+ + ld x32, Y+ + ld x33, Y+ + ld x34, Y+ + ld x35, Y+ + ld x36, Y+ + ld x37, Y+ + ld x38, Y+ + ld x39, Y+ + ld x3a, Y+ + ld x3b, Y+ + ld x3c, Y+ + ld x3d, Y+ + ld x3e, Y+ + ld x3f, Y+ + +round_loop_start: + rjmp AddRC_SubColumns_Start + +load_columns_table: + rjmp load_column0 + rjmp load_column1 + rjmp load_column2 + rjmp load_column3 + rjmp load_column4 + rjmp load_column5 + rjmp load_column6 + rjmp load_column7 + rjmp load_column8 + rjmp load_column9 + rjmp load_columna + rjmp load_columnb + rjmp load_columnc + rjmp load_columnd + rjmp load_columne + rjmp load_columnf + rjmp amend_shiftRow + +load_column0: + mov x3j, x30 + rjmp Sbox_one_column +load_column1: + mov x30, x3j + mov x3j, x31 + rjmp Sbox_one_column +load_column2: + mov x31, x3j + mov x3j, x32 + rjmp Sbox_one_column +load_column3: + mov x32, x3j + mov x3j, x33 + rjmp Sbox_one_column +load_column4: + mov x33, x3j + mov x3j, x34 + rjmp Sbox_one_column +load_column5: + mov x34, x3j + mov x3j, x35 + rjmp Sbox_one_column +load_column6: + mov x35, x3j + mov x3j, x36 + rjmp Sbox_one_column +load_column7: + mov x36, x3j + mov x3j, x37 + rjmp Sbox_one_column +load_column8: + mov x37, x3j + mov x3j, x38 + rjmp Sbox_one_column +load_column9: + mov x38, x3j + mov x3j, x39 + rjmp Sbox_one_column +load_columna: + mov x39, x3j + mov x3j, x3a + rjmp Sbox_one_column +load_columnb: + mov x3a, x3j + mov x3j, x3b + rjmp Sbox_one_column +load_columnc: + mov x3b, x3j + mov x3j, x3c + rjmp Sbox_one_column +load_columnd: + mov x3c, x3j + mov x3j, x3d + rjmp Sbox_one_column +load_columne: + mov x3d, x3j + mov x3j, x3e + rjmp Sbox_one_column +load_columnf: + mov x3e, x3j + mov x3j, x3f + rjmp Sbox_one_column + +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) +LFSR_table: + rjmp LFSR7 + rjmp LFSR8 +LFSR7: + LFSR7_MACRO + rjmp LFSR_DONE +LFSR8: + LFSR8_MACRO + rjmp LFSR_DONE +#endif + +;;;;;;;;;;;;;;;;;;;;;;;; Real Start +AddRC_SubColumns_Start: + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + clr ccnt + ld x0j, Y + eor x0j, rc + +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) + ldi ZL, pm_lo8(LFSR_table) + ldi ZH, pm_hi8(LFSR_table) + sbrc AEDH, 2 ; AEDH[2] = 0 for AEAD and AEDH[1] = 1 for HASH + adiw ZL, 1 + ijmp +LFSR_DONE: +#elif defined(CRYPTO_AEAD) + LFSR7_MACRO ; only AEAD +#else + LFSR8_MACRO ; only HASH +#endif + + ldd x1j, Y + ROW_INBYTES + ldd x2j, Y + 2 * ROW_INBYTES + ldd t2j, Y + 2 * ROW_INBYTES + 1 + ldi ZL, pm_lo8(load_columns_table) + ldi ZH, pm_hi8(load_columns_table) + ijmp +Sbox_one_column: + Sbox x0j, x1j, x2j, x3j + + ; f e d c b a 9 8 7 6 5 4 3 2 1 0 + ; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- x- 0 + ; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- x' 0 + ; -- -- -- -- -- -- -- -- -- -- -- -- -- x- -- -- 2 + ; -- -- -- -- -- -- -- -- -- -- -- -- x' -- -- -- 3 + ; c b a 9 8 7 6 5 4 3 2 1 0 f e d + ; Store a byte to Row 0 + st Y, x0j + ; Store a byte combined with ShiftRow1 + lsl t1j + mov t1j, x1j ; back up the last updated byte in t1j, to be used in shiftRow1 (1 bit left) + rol x1j + std Y + ROW_INBYTES, x1j + ; Store a byte combined with ShiftRow2 + inc ccnt + cpi ccnt, ROW_INBYTES - 1 + brsh ROW2_WRAP + ldd tmp0, Y + 2 * ROW_INBYTES + 2 ; load next byte, the last updated byte needed to be shifted to the address of the next bytes + std Y + 2 * ROW_INBYTES + 2, x2j + mov x2j, t2j + mov t2j, tmp0 + jmp NO_ROW2_WRAP +ROW2_WRAP: + std Y + ROW_INBYTES + 2, x2j + mov x2j, t2j + + ; remain ShiftRow3 to be done at 'amend_shiftRow' +NO_ROW2_WRAP: + adiw YL, 1 + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + + adiw ZL, 1 + ijmp + +amend_shiftRow: + ldi YH, hi8(SRAM_STATE + ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + ROW_INBYTES) + + ld x1j, Y + bst t1j, 7 + bld x1j, 0 + st Y, x1j + + ; <<< 1 + mov x3f, x3j + rol x3j + rol x30 + rol x31 + rol x32 + rol x33 + rol x34 + rol x35 + rol x36 + rol x37 + rol x38 + rol x39 + rol x3a + rol x3b + rol x3c + rol x3d + rol x3e + rol x3f + ; <<< 24 + ; f e d c b a 9 8 7 6 5 4 3 2 1 0 => + ; c b a 9 8 7 6 5 4 3 2 1 0 f e d + mov x3j, x30 + mov x30, x3d + mov x3d, x3a + mov x3a, x37 + mov x37, x34 + mov x34, x31 + mov x31, x3e + mov x3e, x3b + mov x3b, x38 + mov x38, x35 + mov x35, x32 + mov x32, x3f + mov x3f, x3c + mov x3c, x39 + mov x39, x36 + mov x36, x33 + mov x33, x3j + + dec rcnt + breq round_loop_end + rjmp round_loop_start + +round_loop_end: + + ldi YH, hi8(SRAM_STATE + 3 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 3 * ROW_INBYTES) + st Y+, x30 + st Y+, x31 + st Y+, x32 + st Y+, x33 + st Y+, x34 + st Y+, x35 + st Y+, x36 + st Y+, x37 + st Y+, x38 + st Y+, x39 + st Y+, x3a + st Y+, x3b + st Y+, x3c + st Y+, x3d + st Y+, x3e + st Y+, x3f + + POP_CONFLICT +ret \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot256v2/avr8_lowrom/permutation.h b/knot/Implementations/crypto_hash/knot256v2/avr8_lowrom/permutation.h new file mode 100644 index 0000000..a57c5d3 --- /dev/null +++ b/knot/Implementations/crypto_hash/knot256v2/avr8_lowrom/permutation.h @@ -0,0 +1,109 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by KNOT Team * +; ********************************************** +; + +; +; ============================================ +; R E G I S T E R D E F I N I T I O N S +; ============================================ +; + +#define mclen r16 +#define radlen r17 +#define tcnt r17 +#define tmp0 r20 +#define tmp1 r21 +#define cnt0 r22 +#define rn r23 +#define rate r24 + +; +; ; AEDH = 0b000: for authenticate AD +; ; AEDH = 0b001: for encryption +; ; AEDH = 0b011: for decryption +; ; AEDH = 0b100: for hash +; #define AEDH r25 ; Register used globally within this program +; +; #define x30 r0 ; Register used without overlapping +; #define x31 r1 ; Register used without overlapping +; #define x32 r2 ; Register used without overlapping +; #define x33 r3 ; Register used without overlapping +; #define x34 r4 ; Register used without overlapping +; #define x35 r5 ; Register used without overlapping +; #define x36 r6 ; Register used without overlapping +; #define x37 r7 ; Register used without overlapping +; #define x38 r8 ; Register used without overlapping +; #define x39 r9 ; Register used without overlapping +; #define x3a r10 ; Register used without overlapping +; #define x3b r11 ; Register used without overlapping +; #define x3c r12 ; Register used without overlapping +; #define x3d r13 ; Register used without overlapping +; #define x3e r14 ; Register used without overlapping +; #define x3f r15 ; Register used without overlapping +; +; #define x0j r16 ; Register used overlapped, should be backed up before using +; #define x1j r17 ; Register used overlapped, should be backed up before using +; #define x2j r18 ; Register used overlapped, should be backed up before using +; #define x3j r19 ; Register used overlapped, should be backed up before using +; +; ; t2j used in knot512 to keep one byte in Row2 (because of rotating 16-bit), +; ; will not be interupt with LFSR which uses the overlapped register tmp1 +; #define t2j r21 ; Temporary register, used freely +; #define t1j r22 ; Temporary register, used freely +; #define t3j r23 ; Temporary register, used freely +; +; #define rc r24 ; Register used overlapped, should be backed up before using +; #define rcnt r26 ; Register used overlapped, should be backed up before using +; #define ccnt r27 ; Register used overlapped, should be backed up before using + +#define AEDH r25 +#define x30 r0 +#define x31 r1 +#define x32 r2 +#define x33 r3 +#define x34 r4 +#define x35 r5 +#define x36 r6 +#define x37 r7 +#define x38 r8 +#define x39 r9 +#define x3a r10 +#define x3b r11 +#define x3c r12 +#define x3d r13 +#define x3e r14 +#define x3f r15 + +#define x0j r16 +#define x1j r17 +#define x2j r18 +#define x3j r19 + +; t2j used in knot512 to keep one byte in Row2 (because of rotating 16-bit), +; will not be interupt with LFSR which uses the overlapped register tmp1 +#define t2j r21 +#define t1j r22 +#define t3j r23 + +#define rc r24 +#define rcnt r26 +#define ccnt r27 + +#if (STATE_INBITS==256) +#include "knot256.h" +#elif (STATE_INBITS==384) +#include "knot384.h" +#elif (STATE_INBITS==512) +#include "knot512.h" +#else +#error "Not specified key size and state size" +#endif + + diff --git a/knot/Implementations/crypto_hash/knot256v2/avr8_speed/api.h b/knot/Implementations/crypto_hash/knot256v2/avr8_speed/api.h new file mode 100644 index 0000000..cb530c7 --- /dev/null +++ b/knot/Implementations/crypto_hash/knot256v2/avr8_speed/api.h @@ -0,0 +1 @@ +#define CRYPTO_BYTES 32 \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot256v2/avr8_speed/assist.h b/knot/Implementations/crypto_hash/knot256v2/avr8_speed/assist.h new file mode 100644 index 0000000..f95a717 --- /dev/null +++ b/knot/Implementations/crypto_hash/knot256v2/avr8_speed/assist.h @@ -0,0 +1,86 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.1 2020 by KNOT Team * +; ********************************************** +; +.macro PUSH_CONFLICT + push r16 + push r17 + push r18 + push r19 + + push r23 + push r24 + push r25 + push r26 + push r27 + push r28 + push r29 + push r30 + push r31 +.endm + +.macro POP_CONFLICT + pop r31 + pop r30 + pop r29 + pop r28 + pop r27 + pop r26 + pop r25 + pop r24 + pop r23 + + pop r19 + pop r18 + pop r17 + pop r16 +.endm + +.macro PUSH_ALL + push r2 + push r3 + push r4 + push r5 + push r6 + push r7 + push r8 + push r9 + push r10 + push r11 + push r12 + push r13 + push r14 + push r15 + push r16 + push r17 + push r28 + push r29 +.endm + +.macro POP_ALL + pop r29 + pop r28 + pop r17 + pop r16 + pop r15 + pop r14 + pop r13 + pop r12 + pop r11 + pop r10 + pop r9 + pop r8 + pop r7 + pop r6 + pop r5 + pop r4 + pop r3 + pop r2 + clr r1 +.endm \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot256v2/avr8_speed/config.h b/knot/Implementations/crypto_hash/knot256v2/avr8_speed/config.h new file mode 100644 index 0000000..f6fb82b --- /dev/null +++ b/knot/Implementations/crypto_hash/knot256v2/avr8_speed/config.h @@ -0,0 +1,131 @@ +#ifndef __CONFIG_H__ +#define __CONFIG_H__ + +//#define CRYPTO_AEAD +#define CRYPTO_HASH + +#define MAX_MESSAGE_LENGTH 128 + +#define STATE_INBITS 384 +/* For CRYPTO_AEAD */ +#define CRYPTO_KEYBITS 128 +/* For CRYPTO_HASH */ +#define CRYPTO_BITS 256 + +#define STATE_INBYTES ((STATE_INBITS + 7) / 8) +#define ROW_INBITS ((STATE_INBITS + 3) / 4) +#define ROW_INBYTES ((ROW_INBITS + 7) / 8) + +/* For CRYPTO_AEAD */ +#define CRYPTO_KEYBYTES ((CRYPTO_KEYBITS + 7) / 8) +#define CRYPTO_NSECBYTES 0 +#define CRYPTO_NPUBBYTES CRYPTO_KEYBYTES +#define CRYPTO_ABYTES CRYPTO_KEYBYTES +#define CRYPTO_NOOVERLAP 1 + +#define MAX_ASSOCIATED_DATA_LENGTH 32 +#define MAX_CIPHER_LENGTH (MAX_MESSAGE_LENGTH + CRYPTO_ABYTES) + +#define TAG_MATCH 0 +#define TAG_UNMATCH -1 +#define OTHER_FAILURES -2 + +/* For CRYPTO_HASH */ +#define CRYPTO_BYTES ((CRYPTO_BITS + 7) / 8) + + + +#define DOMAIN_BITS 0x80 +#define PAD_BITS 0x01 +#define S384_R192_BITS 0x80 + +#if (STATE_INBITS==256) +#define C1 1 +#define C2 8 +#define C3 25 +#elif (STATE_INBITS==384) +#define C1 1 +#define C2 8 +#define C3 55 +#elif (STATE_INBITS==512) +#define C1 1 +#define C2 16 +#define C3 25 +#else +#error "Not specified state size" +#endif + +#ifdef CRYPTO_AEAD +/* For CRYPTO_AEAD */ +#define KEY_INBITS (CRYPTO_KEYBYTES * 8) +#define KEY_INBYTES (CRYPTO_KEYBYTES) + +#define NONCE_INBITS (CRYPTO_NPUBBYTES * 8) +#define NONCE_INBYTES (CRYPTO_NPUBBYTES) + +#define TAG_INBITS (CRYPTO_ABYTES * 8) +#define TAG_INBYTES (CRYPTO_ABYTES) + +#if (KEY_INBITS==128) && (STATE_INBITS==256) +#define RATE_INBITS 64 +#define NR_0 52 +#define NR_i 28 +#define NR_f 32 +#elif (KEY_INBITS==128) && (STATE_INBITS==384) +#define RATE_INBITS 192 +#define NR_0 76 +#define NR_i 28 +#define NR_f 32 +#elif (KEY_INBITS==192) && (STATE_INBITS==384) +#define RATE_INBITS 96 +#define NR_0 76 +#define NR_i 40 +#define NR_f 44 +#elif (KEY_INBITS==256) && (STATE_INBITS==512) +#define RATE_INBITS 128 +#define NR_0 100 +#define NR_i 52 +#define NR_f 56 +#else +#error "Not specified key size and state size" +#endif + +#define RATE_INBYTES ((RATE_INBITS + 7) / 8) +#define SQUEEZE_RATE_INBYTES TAG_INBYTES + +#endif + +#ifdef CRYPTO_HASH +/* For CRYPTO_HASH */ +#define HASH_DIGEST_INBITS (CRYPTO_BYTES * 8) + +#if (HASH_DIGEST_INBITS==256) && (STATE_INBITS==256) +#define HASH_RATE_INBITS 32 +#define HASH_SQUEEZE_RATE_INBITS 128 +#define NR_h 68 +#elif (HASH_DIGEST_INBITS==256) && (STATE_INBITS==384) +#define HASH_RATE_INBITS 128 +#define HASH_SQUEEZE_RATE_INBITS 128 +#define NR_h 80 +#elif (HASH_DIGEST_INBITS==384) && (STATE_INBITS==384) +#define HASH_RATE_INBITS 48 +#define HASH_SQUEEZE_RATE_INBITS 192 +#define NR_h 104 +#elif (HASH_DIGEST_INBITS==512) && (STATE_INBITS==512) +#define HASH_RATE_INBITS 64 +#define HASH_SQUEEZE_RATE_INBITS 256 +#define NR_h 140 +#else +#error "Not specified hash digest size and state size" +#endif + +#define HASH_RATE_INBYTES ((HASH_RATE_INBITS + 7) / 8) +#define HASH_SQUEEZE_RATE_INBYTES ((HASH_SQUEEZE_RATE_INBITS + 7) / 8) + +#endif + +#define TAG_MATCH 0 +#define TAG_UNMATCH -1 +#define OTHER_FAILURES -2 + +#endif \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot256v2/avr8_speed/crypto_hash.h b/knot/Implementations/crypto_hash/knot256v2/avr8_speed/crypto_hash.h new file mode 100644 index 0000000..342a639 --- /dev/null +++ b/knot/Implementations/crypto_hash/knot256v2/avr8_speed/crypto_hash.h @@ -0,0 +1,13 @@ +#ifdef __cplusplus +extern "C" { +#endif + +int crypto_hash( + unsigned char *out, + const unsigned char *in, + unsigned long long inlen + ); + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot256v2/avr8_speed/encrypt.c b/knot/Implementations/crypto_hash/knot256v2/avr8_speed/encrypt.c new file mode 100644 index 0000000..baf0a3b --- /dev/null +++ b/knot/Implementations/crypto_hash/knot256v2/avr8_speed/encrypt.c @@ -0,0 +1,106 @@ +#include +#include +#include +#include +#include "config.h" + +extern void crypto_aead_encrypt_asm( + unsigned char *c, + const unsigned char *m, + unsigned char mlen, + const unsigned char *ad, + unsigned char adlen, + const unsigned char *npub, + const unsigned char *k + ); + +extern int crypto_aead_decrypt_asm( + unsigned char *m, + const unsigned char *c, + unsigned char clen, + const unsigned char *ad, + unsigned char adlen, + const unsigned char *npub, + const unsigned char *k + ); + +extern void crypto_hash_asm( + unsigned char *out, + const unsigned char *in, + unsigned char inlen + ); + + +int crypto_aead_encrypt( + unsigned char *c, unsigned long long *clen, + const unsigned char *m, unsigned long long mlen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k + ) +{ + /* + ... + ... the code for the cipher implementation goes here, + ... generating a ciphertext c[0],c[1],...,c[*clen-1] + ... from a plaintext m[0],m[1],...,m[mlen-1] + ... and associated data ad[0],ad[1],...,ad[adlen-1] + ... and nonce npub[0],npub[1],.. + ... and secret key k[0],k[1],... + ... the implementation shall not use nsec + ... + ... return 0; + */ + + (void)nsec; + + crypto_aead_encrypt_asm(c, m, mlen, ad, adlen, npub, k); + + *clen = mlen + TAG_INBYTES; + return 0; +} + + + +int crypto_aead_decrypt( + unsigned char *m, unsigned long long *mlen, + unsigned char *nsec, + const unsigned char *c, unsigned long long clen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k + ) +{ + /* + ... + ... the code for the AEAD implementation goes here, + ... generating a plaintext m[0],m[1],...,m[*mlen-1] + ... and secret message number nsec[0],nsec[1],... + ... from a ciphertext c[0],c[1],...,c[clen-1] + ... and associated data ad[0],ad[1],...,ad[adlen-1] + ... and nonce number npub[0],npub[1],... + ... and secret key k[0],k[1],... + ... + ... return 0; + */ + unsigned long long mlen_; + unsigned char tag_is_match; + + (void)nsec; + if (clen < CRYPTO_ABYTES) { + return -1; + } + mlen_ = clen - CRYPTO_ABYTES; + + tag_is_match = crypto_aead_decrypt_asm(m, c, mlen_, ad, adlen, npub, k); + + if (tag_is_match != 0) + { + memset(m, 0, (size_t)mlen_); + return -1; + } + + *mlen = mlen_; + return 0; +} \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot256v2/avr8_speed/encrypt_core.S b/knot/Implementations/crypto_hash/knot256v2/avr8_speed/encrypt_core.S new file mode 100644 index 0000000..bd74f93 --- /dev/null +++ b/knot/Implementations/crypto_hash/knot256v2/avr8_speed/encrypt_core.S @@ -0,0 +1,555 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.1 2020 by KNOT Team * +; ********************************************** +; + +; +; ============================================ +; S R A M D E F I N I T I O N S +; ============================================ +; +#include +#include "config.h" + +.section .noinit + SRAM_STATE: .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#if (STATE_INBYTES > 32) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif +#if (STATE_INBYTES > 48) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif + SRAM_MESSAGE_OUT_ADDR: .BYTE 0, 0 + SRAM_MESSAGE_IN_ADDR: .BYTE 0, 0 + SRAM_MESSAGE_IN_LEN: .BYTE 0, 0 +#ifdef CRYPTO_AEAD +; For CRYPTO_AEAD + SRAM_ASSOCIATED_DATA_ADDR: .BYTE 0, 0 + SRAM_ADLEN: .BYTE 0, 0 + SRAM_NONCE_ADDR: .BYTE 0, 0 + SRAM_KEY_ADDR: .BYTE 0, 0 + + SRAM_ADDITIONAL: + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#if (CRYPTO_ABYTES > 16) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif +#if (CRYPTO_ABYTES > 24) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif + +#endif + +.section .text + +#include "permutation.h" + +; require YH:YL be the address of the current associated data/cipher/message block +; for enc and dec, store ciphertext or plaintext +; require ZH:ZL be the address of the current cipher/message block +.macro XOR_to_State_ENCDEC + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + mov cnt0, rate +XOR_to_State_loop_ENCDEC: + ld tmp0, Y+ ; plaintext/ciphertext + ld tmp1, X ; state + eor tmp1, tmp0 ; ciphertext/plaintext + st Z+, tmp1 ; store ciphertext/plaintext + sbrc AEDH, 1 ; test auth/enc or dec, if AEDH[1] == 0, skip repalce state byte + mov tmp1, tmp0 ; if dec, replace state + st X+, tmp1 ; store state byte + dec cnt0 + brne XOR_to_State_loop_ENCDEC +; YH:YL are now the address of the next associated data block +.endm + +; require YH:YL be the address of the current associated data/cipher/message block +; for enc and dec, store ciphertext or plaintext +; require ZH:ZL be the address of the current cipher/message block +.macro XOR_to_State_AUTH + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + mov cnt0, rate +XOR_to_State_loop_AUTH: + ld tmp0, Y+ ; plaintext/ciphertext + ld tmp1, X ; state + eor tmp1, tmp0 ; ciphertext/plaintext + st X+, tmp1 ; store state byte + dec cnt0 + brne XOR_to_State_loop_AUTH +; YH:YL are now the address of the next associated data block +.endm + + + +; require YH:YL pointed to the input data +; require ZH:ZL pointed to the output data +; require cnt0 containes the nubmer of bytes in source data +; require number of bytes in source data less than rate, i.e., 0 <= cnt0 < rate +; +; the 0th bit in AEDH is used to distinguish (auth AD) or (enc/dec M/C): +; AEDH[0] = 0 for (auth AD), AEDH[0] = 1 for (enc/dec M/C) +; the 1th bit in AEDH is used to distinguish (auth AD/enc M) or (dec C): +; AEDH[1] = 0 for (auth AD/enc M), AEDH[1] = 1 for (dec C) +; AEDH = 0b000 for (auth AD) +; AEDH = 0b001 for (enc M) +; AEDH = 0b011 for (dec C) +Pad_XOR_to_State: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + tst cnt0 + breq XOR_padded_data +XOR_source_data_loop: + ld tmp0, Y+ ; plaintext/ciphertext + ld tmp1, X ; state + eor tmp1, tmp0 ; ciphertext/plaintext + sbrc AEDH, 0 ; test auth or enc/dec, if AEDH[0] == 0, skip store result + st Z+, tmp1 ; store ciphertext/plaintext + sbrc AEDH, 1 ; test auth/enc or dec, if AEDH[1] == 0, skip repalce state byte + mov tmp1, tmp0 ; if dec, replace state + st X+, tmp1 ; store state byte + dec cnt0 + brne XOR_source_data_loop +XOR_padded_data: + ldi tmp0, PAD_BITS + ld tmp1, X + eor tmp1, tmp0 + st X, tmp1 +ret + +AddDomain: + ldi XH, hi8(SRAM_STATE + STATE_INBYTES - 1) + ldi XL, lo8(SRAM_STATE + STATE_INBYTES - 1) + ldi tmp0, DOMAIN_BITS + ld tmp1, X + eor tmp0, tmp1 + st X, tmp0 +ret + +; require ZH:ZL be the address of the destination +EXTRACT_from_State: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + mov tmp1, rate +EXTRACT_from_State_loop: + ld tmp0, X+ + st Z+, tmp0 + dec tmp1 + brne EXTRACT_from_State_loop +ret + +AUTH: + tst radlen + breq AUTH_end + + cp radlen, rate + brlo auth_ad_padded_block + +auth_ad_loop: + XOR_to_State_AUTH + rcall Permutation + sub radlen, rate + cp radlen, rate + brlo auth_ad_padded_block + rjmp auth_ad_loop + +auth_ad_padded_block: + mov cnt0, radlen + rcall Pad_XOR_to_State + rcall Permutation + +AUTH_end: +ret + +#ifdef CRYPTO_AEAD +Initialization: + ldi rn, NR_0 + ldi XL, lo8(SRAM_STATE) + ldi XH, hi8(SRAM_STATE) + + lds YH, SRAM_NONCE_ADDR + lds YL, SRAM_NONCE_ADDR + 1 + ldi cnt0, CRYPTO_NPUBBYTES +load_nonce_loop: + ld tmp0, Y+ + st X+, tmp0 + dec cnt0 + brne load_nonce_loop + + lds YH, SRAM_KEY_ADDR + lds YL, SRAM_KEY_ADDR + 1 + ldi cnt0, CRYPTO_KEYBYTES +load_key_loop: + ld tmp0, Y+ + st X+, tmp0 + dec cnt0 + brne load_key_loop + +#if (STATE_INBITS==384) && (RATE_INBITS==192) + ldi cnt0, (STATE_INBYTES - CRYPTO_NPUBBYTES - CRYPTO_KEYBYTES - 1) + clr tmp0 +empty_state_loop: + st X+, tmp0 + dec cnt0 + brne empty_state_loop + ldi tmp0, S384_R192_BITS + st X+, tmp0 +#endif + + rcall Permutation +ret + +ENC: + tst mclen + breq ENC_end + + cp mclen, rate + brlo enc_padded_block + +enc_loop: + XOR_to_State_ENCDEC + ldi rn, NR_i + rcall Permutation + sub mclen, rate + cp mclen, rate + brlo enc_padded_block + rjmp enc_loop + +enc_padded_block: + mov cnt0, mclen + rcall Pad_XOR_to_State +ENC_end: +ret + +Finalization: + ldi rate, SQUEEZE_RATE_INBYTES + ldi rn, NR_f + rcall Permutation + rcall EXTRACT_from_State +ret + +; void crypto_aead_encrypt_asm( +; unsigned char *c, +; const unsigned char *m, +; unsigned long long mlen, +; const unsigned char *ad, +; unsigned long long adlen, +; const unsigned char *npub, +; const unsigned char *k +; ) +; +; unsigned char *c, is passed in r24:r25 +; const unsigned char *m, is passed in r22:r23 +; unsigned long long mlen, is passed in r20:r21, only LSB (r20) is used +; const unsigned char *ad, is passed in r18:r19 +; unsigned long long adlen, is passed in r16:r17, only LSB (r16) is used +; const unsigned char *npub, is passed in r14:r15 +; const unsigned char *k is passed in r12:r13 +.global crypto_aead_encrypt_asm +crypto_aead_encrypt_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store cipher address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store message address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store message length in SRAM_MESSAGE_IN_LEN + st X+, r20 + st X+, r19 ;store associated data address in SRAM_ASSOCIATED_DATA_ADDR + st X+, r18 + st X+, r17 ;store associated data length in SRAM_ADLEN + st X+, r16 + st X+, r15 ;store nonce address in SRAM_NONCE_ADDR + st X+, r14 + st X+, r13 ;store key address in SRAM_KEY_ADDR + st X+, r12 + mov radlen, r16 + mov mclen, r20 + + rcall Initialization + + ldi rn, NR_i + ldi rate, RATE_INBYTES + ldi AEDH, 0b000 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_ASSOCIATED_DATA_ADDR + lds YL, SRAM_ASSOCIATED_DATA_ADDR + 1 + rcall AUTH + rcall AddDomain + ldi AEDH, 0b001 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_MESSAGE_IN_ADDR + lds YL, SRAM_MESSAGE_IN_ADDR + 1 + lds ZH, SRAM_MESSAGE_OUT_ADDR + lds ZL, SRAM_MESSAGE_OUT_ADDR + 1 + rcall ENC + rcall Finalization + POP_ALL +ret + +; int crypto_aead_decrypt_asm( +; unsigned char *m, +; const unsigned char *c, +; unsigned long long clen, +; const unsigned char *ad, +; unsigned long long adlen, +; const unsigned char *npub, +; const unsigned char *k +; ) +; +; unsigned char *m, is passed in r24:r25 +; const unsigned char *c, is passed in r22:r23 +; unsigned long long clen, is passed in r20:r21, only LSB (r20) is used +; const unsigned char *ad, is passed in r18:r19 +; unsigned long long adlen, is passed in r16:r17, only LSB (r16) is used +; const unsigned char *npub, is passed in r14:r15 +; const unsigned char *k is passed in r12:r13 +.global crypto_aead_decrypt_asm +crypto_aead_decrypt_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store message address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store cipher address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store cipher length in SRAM_MESSAGE_IN_LEN + st X+, r20 + st X+, r19 ;store associated data address in SRAM_ASSOCIATED_DATA_ADDR + st X+, r18 + st X+, r17 ;store associated data length in SRAM_ADLEN + st X+, r16 + st X+, r15 ;store nonce address in SRAM_NONCE_ADDR + st X+, r14 + st X+, r13 ;store key address in SRAM_KEY_ADDR + st X+, r12 + mov radlen, r16 + mov mclen, r20 + + rcall Initialization + + ldi rn, NR_i + ldi rate, RATE_INBYTES + ldi AEDH, 0b000 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_ASSOCIATED_DATA_ADDR + lds YL, SRAM_ASSOCIATED_DATA_ADDR + 1 + rcall AUTH + rcall AddDomain + ldi AEDH, 0b011 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_MESSAGE_IN_ADDR + lds YL, SRAM_MESSAGE_IN_ADDR + 1 + lds ZH, SRAM_MESSAGE_OUT_ADDR + lds ZL, SRAM_MESSAGE_OUT_ADDR + 1 + rcall ENC + + ldi ZH, hi8(SRAM_ADDITIONAL) + ldi ZL, lo8(SRAM_ADDITIONAL) + rcall Finalization + + sbiw ZL, CRYPTO_ABYTES + ldi cnt0, CRYPTO_ABYTES +compare_tag: + ld tmp0, Z+ + ld tmp1, Y+ + cp tmp0, tmp1 + brne return_tag_not_match + dec cnt0 + brne compare_tag + rjmp return_tag_match + +return_tag_not_match: + ldi r25, 0xFF + ldi r24, 0xFF + rjmp crypto_aead_decrypt_end + +return_tag_match: + clr r25 + clr r24 +crypto_aead_decrypt_end: + POP_ALL +ret + +; #ifdef CRYPTO_AEAD +#endif + + +#ifdef CRYPTO_HASH + +; void crypto_hash_asm( +; unsigned char *out, +; const unsigned char *in, +; unsigned long long inlen +; ) +; +; unsigned char *out, is passed in r24:r25 +; const unsigned char *in, is passed in r22:r23 +; unsigned long long inlen, is passed in r20:r21, only LSB (r20) is used +.global crypto_hash_asm +crypto_hash_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store message address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store cipher address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store cipher length in SRAM_MESSAGE_IN_LEN + st X+, r20 + mov mclen, r20 + + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) +#if (STATE_INBITS==384) && (HASH_RATE_INBITS==128) + ldi cnt0, STATE_INBYTES - 1 +#else + ldi cnt0, STATE_INBYTES +#endif + clr tmp0 +zero_state: + st X+, tmp0 + dec cnt0 + brne zero_state + +#if (STATE_INBITS==384) && (HASH_RATE_INBITS==128) + ldi tmp0, S384_R192_BITS + st X+, tmp0 +#endif + + ldi rn, NR_h + ldi AEDH, 0b100 + +HASH_ABSORBING: + mov radlen, mclen + tst radlen + breq EMPTY_M + ldi rate, HASH_RATE_INBYTES + lds YH, SRAM_MESSAGE_IN_ADDR + lds YL, SRAM_MESSAGE_IN_ADDR + 1 + rcall AUTH + rjmp HASH_SQUEEZING + +EMPTY_M: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + ldi tmp0, PAD_BITS + ld tmp1, X + eor tmp1, tmp0 + st X, tmp1 + rcall Permutation + +HASH_SQUEEZING: + ldi rate, HASH_SQUEEZE_RATE_INBYTES + lds ZH, SRAM_MESSAGE_OUT_ADDR + lds ZL, SRAM_MESSAGE_OUT_ADDR + 1 + ldi tcnt, CRYPTO_BYTES +SQUEEZING_loop: + rcall EXTRACT_from_State + subi tcnt, HASH_SQUEEZE_RATE_INBYTES + breq HASH_SQUEEZING_end + rcall Permutation + rjmp SQUEEZING_loop +HASH_SQUEEZING_end: + POP_ALL +ret + +#endif + + +; Byte Order In AVR 8: +; KNOT-AEAD(128, 256, 64): +; N[ 0] AEAD_State[ 0] | Message[ 0] Perm_row_0[0] 0 Tag[ 0] +; N[ 1] AEAD_State[ 1] | Message[ 1] Perm_row_0[1] 0 Tag[ 1] +; N[ 2] AEAD_State[ 2] | Message[ 2] Perm_row_0[2] 0 Tag[ 2] +; N[ 3] AEAD_State[ 3] | Message[ 3] Perm_row_0[3] 0 Tag[ 3] +; N[ 4] AEAD_State[ 4] | Message[ 4] 0x01 Perm_row_0[4] 0 Tag[ 4] +; N[ 5] AEAD_State[ 5] | Message[ 5] 0x00 Perm_row_0[5] 0 Tag[ 5] +; N[ 6] AEAD_State[ 6] | Message[ 6] 0x00 Perm_row_0[6] 0 Tag[ 6] +; N[ 7] AEAD_State[ 7] | Message[ 7] 0x00 Perm_row_0[7] <<< 0 Tag[ 7] +; N[ 8] AEAD_State[ 8] | Perm_row_1[0] 1 +; N[ 9] AEAD_State[ 9] | Perm_row_1[1] 1 +; N[10] AEAD_State[10] | Perm_row_1[2] 1 +; N[11] AEAD_State[11] | Perm_row_1[3] 1 +; N[12] AEAD_State[12] | Perm_row_1[4] 1 +; N[13] AEAD_State[13] | Perm_row_1[5] 1 +; N[14] AEAD_State[14] | Perm_row_1[6] 1 +; N[15] AEAD_State[15] | Perm_row_1[7] <<< 1 +; K[ 0] AEAD_State[16] | Perm_row_2[0] 8 +; K[ 1] AEAD_State[17] | Perm_row_2[1] 8 +; K[ 2] AEAD_State[18] | Perm_row_2[2] 8 +; K[ 3] AEAD_State[19] | Perm_row_2[3] 8 +; K[ 4] AEAD_State[20] | Perm_row_2[4] 8 +; K[ 5] AEAD_State[21] | Perm_row_2[5] 8 +; K[ 6] AEAD_State[22] | Perm_row_2[6] 8 +; K[ 7] AEAD_State[23] | Perm_row_2[7] <<< 8 +; K[ 8] AEAD_State[24] | Perm_row_3[0] 25 +; K[ 9] AEAD_State[25] | Perm_row_3[1] 25 +; K[10] AEAD_State[26] | Perm_row_3[2] 25 +; K[11] AEAD_State[27] | Perm_row_3[3] 25 +; K[12] AEAD_State[28] | Perm_row_3[4] 25 +; K[13] AEAD_State[29] | Perm_row_3[5] 25 +; K[14] AEAD_State[30] | Perm_row_3[6] 25 +; K[15] AEAD_State[31] | ^0x80 Perm_row_3[7] <<< 25 +; +; +; KNOT-AEAD(128, 384, 192): +; Initalization +; N[ 0] AEAD_State[ 0] | Message[ 0] Perm_row_0[ 0] 0 Tag[ 0] +; N[ 1] AEAD_State[ 1] | Message[ 1] Perm_row_0[ 1] 0 Tag[ 1] +; N[ 2] AEAD_State[ 2] | Message[ 2] Perm_row_0[ 2] 0 Tag[ 2] +; N[ 3] AEAD_State[ 3] | Message[ 3] Perm_row_0[ 3] 0 Tag[ 3] +; N[ 4] AEAD_State[ 4] | Message[ 4] 0x01 Perm_row_0[ 4] 0 Tag[ 4] +; N[ 5] AEAD_State[ 5] | Message[ 5] 0x00 Perm_row_0[ 5] 0 Tag[ 5] +; N[ 6] AEAD_State[ 6] | Message[ 6] 0x00 Perm_row_0[ 6] 0 Tag[ 6] +; N[ 7] AEAD_State[ 7] | Message[ 7] 0x00 Perm_row_0[ 7] 0 Tag[ 7] +; N[ 8] AEAD_State[ 8] | Message[ 8] 0x00 Perm_row_0[ 8] 0 Tag[ 8] +; N[ 9] AEAD_State[ 9] | Message[ 9] 0x00 Perm_row_0[ 9] 0 Tag[ 9] +; N[10] AEAD_State[10] | Message[10] 0x00 Perm_row_0[10] 0 Tag[10] +; N[11] AEAD_State[11] | Message[11] 0x00 Perm_row_0[11] <<< 0 Tag[11] +; N[12] AEAD_State[12] | Message[12] 0x00 Perm_row_1[ 0] 1 Tag[12] +; N[13] AEAD_State[13] | Message[13] 0x00 Perm_row_1[ 1] 1 Tag[13] +; N[14] AEAD_State[14] | Message[14] 0x00 Perm_row_1[ 2] 1 Tag[14] +; N[15] AEAD_State[15] | Message[15] 0x00 Perm_row_1[ 3] 1 Tag[15] +; K[ 0] AEAD_State[16] | Message[16] 0x00 Perm_row_1[ 4] 1 +; K[ 1] AEAD_State[17] | Message[17] 0x00 Perm_row_1[ 5] 1 +; K[ 2] AEAD_State[18] | Message[18] 0x00 Perm_row_1[ 6] 1 +; K[ 3] AEAD_State[19] | Message[19] 0x00 Perm_row_1[ 7] 1 +; K[ 4] AEAD_State[20] | Message[20] 0x00 Perm_row_1[ 8] 1 +; K[ 5] AEAD_State[21] | Message[21] 0x00 Perm_row_1[ 9] 1 +; K[ 6] AEAD_State[22] | Message[22] 0x00 Perm_row_1[10] 1 +; K[ 7] AEAD_State[23] | Message[23] 0x00 Perm_row_1[11] <<< 1 +; K[ 8] AEAD_State[24] | Perm_row_2[ 0] 8 +; K[ 9] AEAD_State[25] | Perm_row_2[ 1] 8 +; K[10] AEAD_State[26] | Perm_row_2[ 2] 8 +; K[11] AEAD_State[27] | Perm_row_2[ 3] 8 +; K[12] AEAD_State[28] | Perm_row_2[ 4] 8 +; K[13] AEAD_State[29] | Perm_row_2[ 5] 8 +; K[14] AEAD_State[30] | Perm_row_2[ 6] 8 +; K[15] AEAD_State[31] | Perm_row_2[ 7] 8 +; 0x00 AEAD_State[32] | Perm_row_2[ 8] 8 +; 0x00 AEAD_State[33] | Perm_row_2[ 9] 8 +; 0x00 AEAD_State[34] | Perm_row_2[10] 8 +; 0x00 AEAD_State[35] | Perm_row_2[11] <<< 8 +; 0x00 AEAD_State[36] | Perm_row_3[ 0] 55 +; 0x00 AEAD_State[37] | Perm_row_3[ 1] 55 +; 0x00 AEAD_State[38] | Perm_row_3[ 2] 55 +; 0x00 AEAD_State[39] | Perm_row_3[ 3] 55 +; 0x00 AEAD_State[40] | Perm_row_3[ 4] 55 +; 0x00 AEAD_State[41] | Perm_row_3[ 5] 55 +; 0x00 AEAD_State[42] | Perm_row_3[ 6] 55 +; 0x00 AEAD_State[43] | Perm_row_3[ 7] 55 +; 0x00 AEAD_State[44] | Perm_row_3[ 8] 55 +; 0x00 AEAD_State[45] | Perm_row_3[ 9] 55 +; 0x00 AEAD_State[46] | Perm_row_3[10] 55 +; 0x00 ^0x80 AEAD_State[47] | ^0x80 Perm_row_3[11] <<< 55 diff --git a/knot/Implementations/crypto_hash/knot256v2/avr8_speed/hash.c b/knot/Implementations/crypto_hash/knot256v2/avr8_speed/hash.c new file mode 100644 index 0000000..dbbe4df --- /dev/null +++ b/knot/Implementations/crypto_hash/knot256v2/avr8_speed/hash.c @@ -0,0 +1,32 @@ +#include +#include +#include +#include +#include "api.h" +#include "crypto_hash.h" + +extern void crypto_hash_asm( + unsigned char *out, + const unsigned char *in, + unsigned char inlen + ); + +int crypto_hash( + unsigned char *out, + const unsigned char *in, + unsigned long long inlen +) +{ + /* + ... + ... the code for the hash function implementation goes here + ... generating a hash value out[0],out[1],...,out[CRYPTO_BYTES-1] + ... from a message in[0],in[1],...,in[in-1] + ... + ... return 0; + */ + + crypto_hash_asm(out, in, inlen); + + return 0; +} \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot256v2/avr8_speed/knot256.h b/knot/Implementations/crypto_hash/knot256v2/avr8_speed/knot256.h new file mode 100644 index 0000000..f99f68b --- /dev/null +++ b/knot/Implementations/crypto_hash/knot256v2/avr8_speed/knot256.h @@ -0,0 +1,306 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.1 2020 by KNOT Team * +; ********************************************** +; +#define x10 r0 +#define x11 r1 +#define x12 r2 +#define x13 r3 +#define x14 r4 +#define x15 r5 +#define x16 r6 +#define x17 r7 + +; an intentionally arrangement of registers to facilitate movw +#define x20 r8 +#define x21 r10 +#define x22 r12 +#define x23 r14 +#define x24 r9 +#define x25 r11 +#define x26 r13 +#define x27 r15 + +; an intentionally arrangement of registers to facilitate movw +#define x30 r16 +#define x35 r18 +#define x32 r20 +#define x37 r22 +#define x34 r17 +#define x31 r19 +#define x36 r21 +#define x33 r23 + +#define t0j r24 +#define t1j r25 +#define x0j r27 + +#include "assist.h" + +.macro Sbox i0, i1, i2, i3 + mov t0j, \i1 + com \i0 + and \i1, \i0 + eor \i1, \i2 + or \i2, t0j + eor \i0, \i3 + eor \i2, \i0 + eor t0j, \i3 + and \i0, \i1 + eor \i3, \i1 + eor \i0, t0j + and t0j, \i2 + eor \i1, t0j +.endm + +Permutation: + PUSH_CONFLICT + mov rcnt, rn + + ldi YH, hi8(SRAM_STATE + ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + ROW_INBYTES) + ld x10, Y+ + ld x11, Y+ + ld x12, Y+ + ld x13, Y+ + ld x14, Y+ + ld x15, Y+ + ld x16, Y+ + ld x17, Y+ + ld x20, Y+ + ld x21, Y+ + ld x22, Y+ + ld x23, Y+ + ld x24, Y+ + ld x25, Y+ + ld x26, Y+ + ld x27, Y+ + ld x30, Y+ + ld x31, Y+ + ld x32, Y+ + ld x33, Y+ + ld x34, Y+ + ld x35, Y+ + ld x36, Y+ + ld x37, Y+ + +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) + sbrc AEDH, 2 ; AEDH[2] = 0 for AEAD and AEDH[2] = 1 for HASH + rjmp For_Hash +For_AEAD: + ldi ZL, lo8(RC_LFSR6) + ldi ZH, hi8(RC_LFSR6) + rjmp round_loop_start +For_Hash: + ldi ZL, lo8(RC_LFSR7) + ldi ZH, hi8(RC_LFSR7) +#elif defined(CRYPTO_AEAD) + ldi ZL, lo8(RC_LFSR6) + ldi ZH, hi8(RC_LFSR6) +#else + ldi ZL, lo8(RC_LFSR7) + ldi ZH, hi8(RC_LFSR7) +#endif + +round_loop_start: + ; AddRC + lpm t0j, Z+ + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + ld x0j, Y + eor x0j, t0j + + ; SubColumns + Sbox x0j, x10, x20, x30 + st Y+, x0j + ld x0j, Y + Sbox x0j, x11, x21, x31 + st Y+, x0j + ld x0j, Y + Sbox x0j, x12, x22, x32 + st Y+, x0j + ld x0j, Y + Sbox x0j, x13, x23, x33 + st Y+, x0j + ld x0j, Y + Sbox x0j, x14, x24, x34 + st Y+, x0j + ld x0j, Y + Sbox x0j, x15, x25, x35 + st Y+, x0j + ld x0j, Y + Sbox x0j, x16, x26, x36 + st Y+, x0j + ld x0j, Y + Sbox x0j, x17, x27, x37 + st Y, x0j + + ; ShiftRows + ; <<< 1 + mov t0j, x17 + rol t0j + rol x10 + rol x11 + rol x12 + rol x13 + rol x14 + rol x15 + rol x16 + rol x17 + + ; <<< 8 + ; 7 6 5 4 3 2 1 0 => 6 5 4 3 2 1 0 7 + ;mov t0j, x27 + ;mov x27, x26 + ;mov x26, x25 + ;mov x25, x24 + ;mov x24, x23 + ;mov x23, x22 + ;mov x22, x21 + ;mov x21, x20 + ;mov x20, t0j + ; an intentionally arrangement of registers to facilitate movw + movw t0j, x23 ; t1j:t0j <= x27:x23 + movw x23, x22 ; x27:x23 <= x26:x22 + movw x22, x21 ; x26:x22 <= x25:x21 + movw x21, x20 ; x25:x21 <= x24:x20 + mov x20, t1j ; x20 <= t1j + mov x24, t0j ; x24 <= t0j + + ; <<< 1 + mov t0j, x37 + rol t0j + rol x30 + rol x31 + rol x32 + rol x33 + rol x34 + rol x35 + rol x36 + rol x37 + ; <<< 24 + ; 7 6 5 4 3 2 1 0 => 4 3 2 1 0 7 6 5 + ;mov t0j, x30 + ;mov x30, x35 + ;mov x35, x32 + ;mov x32, x37 + ;mov x37, x34 + ;mov x34, x31 + ;mov x31, x36 + ;mov x36, x33 + ;mov x33, t0j + ; an intentionally arrangement of registers to facilitate movw + ;x30 r16 + ;x35 r18 + ;x32 r20 + ;x37 r22 + ;x34 r17 + ;x31 r19 + ;x36 r21 + ;x33 r23 + movw t0j, x30 ; t1j:t0j <= x34:x30 + movw x30, x35 ; x34:x30 <= x31:x35 + movw x35, x32 ; x31:x35 <= x36:x32 + movw x32, x37 ; x36:x32 <= x33:x37 + mov x37, t1j ; x37 <= x34 + mov x33, t0j ; x33 <= x30 + + dec rcnt + breq round_loop_end + jmp round_loop_start + +round_loop_end: + ldi YH, hi8(SRAM_STATE + ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + ROW_INBYTES) + st Y+, x10 + st Y+, x11 + st Y+, x12 + st Y+, x13 + st Y+, x14 + st Y+, x15 + st Y+, x16 + st Y+, x17 + st Y+, x20 + st Y+, x21 + st Y+, x22 + st Y+, x23 + st Y+, x24 + st Y+, x25 + st Y+, x26 + st Y+, x27 + st Y+, x30 + st Y+, x31 + st Y+, x32 + st Y+, x33 + st Y+, x34 + st Y+, x35 + st Y+, x36 + st Y+, x37 + + POP_CONFLICT +ret + + +.section .text +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) +RC_LFSR6: +.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x21, 0x03, 0x06 +.byte 0x0c, 0x18, 0x31, 0x22, 0x05, 0x0a, 0x14, 0x29 +.byte 0x13, 0x27, 0x0f, 0x1e, 0x3d, 0x3a, 0x34, 0x28 +.byte 0x11, 0x23, 0x07, 0x0e, 0x1c, 0x39, 0x32, 0x24 +.byte 0x09, 0x12, 0x25, 0x0b, 0x16, 0x2d, 0x1b, 0x37 +.byte 0x2e, 0x1d, 0x3b, 0x36, 0x2c, 0x19, 0x33, 0x26 +.byte 0x0d, 0x1a, 0x35, 0x2a, 0x15, 0x2b, 0x17, 0x2f +.byte 0x1f, 0x3f, 0x3e, 0x3c, 0x38, 0x30, 0x20, 0x00 +RC_LFSR7: +.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x41, 0x03 +.byte 0x06, 0x0c, 0x18, 0x30, 0x61, 0x42, 0x05, 0x0a +.byte 0x14, 0x28, 0x51, 0x23, 0x47, 0x0f, 0x1e, 0x3c +.byte 0x79, 0x72, 0x64, 0x48, 0x11, 0x22, 0x45, 0x0b +.byte 0x16, 0x2c, 0x59, 0x33, 0x67, 0x4e, 0x1d, 0x3a +.byte 0x75, 0x6a, 0x54, 0x29, 0x53, 0x27, 0x4f, 0x1f +.byte 0x3e, 0x7d, 0x7a, 0x74, 0x68, 0x50, 0x21, 0x43 +.byte 0x07, 0x0e, 0x1c, 0x38, 0x71, 0x62, 0x44, 0x09 +.byte 0x12, 0x24, 0x49, 0x13, 0x26, 0x4d, 0x1b, 0x36 +.byte 0x6d, 0x5a, 0x35, 0x6b, 0x56, 0x2d, 0x5b, 0x37 +.byte 0x6f, 0x5e, 0x3d, 0x7b, 0x76, 0x6c, 0x58, 0x31 +.byte 0x63, 0x46, 0x0d, 0x1a, 0x34, 0x69, 0x52, 0x25 +.byte 0x4b, 0x17, 0x2e, 0x5d, 0x3b, 0x77, 0x6e, 0x5c +.byte 0x39, 0x73, 0x66, 0x4c, 0x19, 0x32, 0x65, 0x4a +.byte 0x15, 0x2a, 0x55, 0x2b, 0x57, 0x2f, 0x5f, 0x3f +.byte 0x7f, 0x7e, 0x7c, 0x78, 0x70, 0x60, 0x40, 0x00 +#elif defined(CRYPTO_AEAD) +RC_LFSR6: +.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x21, 0x03, 0x06 +.byte 0x0c, 0x18, 0x31, 0x22, 0x05, 0x0a, 0x14, 0x29 +.byte 0x13, 0x27, 0x0f, 0x1e, 0x3d, 0x3a, 0x34, 0x28 +.byte 0x11, 0x23, 0x07, 0x0e, 0x1c, 0x39, 0x32, 0x24 +.byte 0x09, 0x12, 0x25, 0x0b, 0x16, 0x2d, 0x1b, 0x37 +.byte 0x2e, 0x1d, 0x3b, 0x36, 0x2c, 0x19, 0x33, 0x26 +.byte 0x0d, 0x1a, 0x35, 0x2a, 0x15, 0x2b, 0x17, 0x2f +.byte 0x1f, 0x3f, 0x3e, 0x3c, 0x38, 0x30, 0x20, 0x00 +#else +RC_LFSR7: +.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x41, 0x03 +.byte 0x06, 0x0c, 0x18, 0x30, 0x61, 0x42, 0x05, 0x0a +.byte 0x14, 0x28, 0x51, 0x23, 0x47, 0x0f, 0x1e, 0x3c +.byte 0x79, 0x72, 0x64, 0x48, 0x11, 0x22, 0x45, 0x0b +.byte 0x16, 0x2c, 0x59, 0x33, 0x67, 0x4e, 0x1d, 0x3a +.byte 0x75, 0x6a, 0x54, 0x29, 0x53, 0x27, 0x4f, 0x1f +.byte 0x3e, 0x7d, 0x7a, 0x74, 0x68, 0x50, 0x21, 0x43 +.byte 0x07, 0x0e, 0x1c, 0x38, 0x71, 0x62, 0x44, 0x09 +.byte 0x12, 0x24, 0x49, 0x13, 0x26, 0x4d, 0x1b, 0x36 +.byte 0x6d, 0x5a, 0x35, 0x6b, 0x56, 0x2d, 0x5b, 0x37 +.byte 0x6f, 0x5e, 0x3d, 0x7b, 0x76, 0x6c, 0x58, 0x31 +.byte 0x63, 0x46, 0x0d, 0x1a, 0x34, 0x69, 0x52, 0x25 +.byte 0x4b, 0x17, 0x2e, 0x5d, 0x3b, 0x77, 0x6e, 0x5c +.byte 0x39, 0x73, 0x66, 0x4c, 0x19, 0x32, 0x65, 0x4a +.byte 0x15, 0x2a, 0x55, 0x2b, 0x57, 0x2f, 0x5f, 0x3f +.byte 0x7f, 0x7e, 0x7c, 0x78, 0x70, 0x60, 0x40, 0x00 +#endif \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot256v2/avr8_speed/knot384.h b/knot/Implementations/crypto_hash/knot256v2/avr8_speed/knot384.h new file mode 100644 index 0000000..0b3dd75 --- /dev/null +++ b/knot/Implementations/crypto_hash/knot256v2/avr8_speed/knot384.h @@ -0,0 +1,261 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.1 2020 by KNOT Team * +; ********************************************** +; + +; an intentionally arrangement of registers to facilitate movw +#define x20 r0 +#define x21 r2 +#define x22 r4 +#define x23 r6 +#define x24 r8 +#define x25 r10 +#define x26 r1 +#define x27 r3 +#define x28 r5 +#define x29 r7 +#define x2a r9 +#define x2b r11 + +; an intentionally arrangement of registers to facilitate movw +#define x30 r22 +#define x35 r20 +#define x3a r18 +#define x33 r16 +#define x38 r14 +#define x31 r12 +#define x36 r23 +#define x3b r21 +#define x34 r19 +#define x39 r17 +#define x32 r15 +#define x37 r13 + +#define t0j r24 +#define t1j r25 +#define x0j r25 +#define x1j r27 + +#include "assist.h" + +.macro Sbox i0, i1, i2, i3 + ldi t0j, 0xFF + eor \i0, t0j + mov t0j, \i1 + and \i1, \i0 + eor \i1, \i2 + or \i2, t0j + eor \i0, \i3 + eor \i2, \i0 + eor t0j, \i3 + and \i0, \i1 + eor \i3, \i1 + eor \i0, t0j + and t0j, \i2 + eor \i1, t0j +.endm + +.macro OneColumn i0, i1, i2, i3 + ld \i0, Y + ldd \i1, Y + ROW_INBYTES + Sbox \i0, \i1, \i2, \i3 + st Y+, \i0 + rol \i1 ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES -1, \i1 +.endm + +Permutation: + PUSH_CONFLICT + mov rcnt, rn + + ldi YH, hi8(SRAM_STATE + 2 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 2 * ROW_INBYTES) + ld x20, Y+ + ld x21, Y+ + ld x22, Y+ + ld x23, Y+ + ld x24, Y+ + ld x25, Y+ + ld x26, Y+ + ld x27, Y+ + ld x28, Y+ + ld x29, Y+ + ld x2a, Y+ + ld x2b, Y+ + ld x30, Y+ + ld x31, Y+ + ld x32, Y+ + ld x33, Y+ + ld x34, Y+ + ld x35, Y+ + ld x36, Y+ + ld x37, Y+ + ld x38, Y+ + ld x39, Y+ + ld x3a, Y+ + ld x3b, Y+ + + ldi ZL, lo8(RC_LFSR7) + ldi ZH, hi8(RC_LFSR7) + +round_loop_start: + ; AddRC + lpm t0j, Z+ + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + ld x0j, Y + eor x0j, t0j + + ldd x1j, Y + ROW_INBYTES + Sbox x0j, x1j, x20, x30 + st Y+, x0j + lsl x1j ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES -1, x1j + + OneColumn x0j, x1j, x21, x31 + OneColumn x0j, x1j, x22, x32 + OneColumn x0j, x1j, x23, x33 + OneColumn x0j, x1j, x24, x34 + OneColumn x0j, x1j, x25, x35 + OneColumn x0j, x1j, x26, x36 + OneColumn x0j, x1j, x27, x37 + OneColumn x0j, x1j, x28, x38 + OneColumn x0j, x1j, x29, x39 + OneColumn x0j, x1j, x2a, x3a + OneColumn x0j, x1j, x2b, x3b + + ld x1j, Y + eor t0j, t0j + adc x1j, t0j + st Y, x1j + + ; b a 9 8 7 6 5 4 3 2 1 0 + ; -- -- -- -- -- -- -- -- -- -- -- x- 0 + ; -- -- -- -- -- -- -- -- -- -- -- x' 0 + ; -- -- -- -- -- -- -- -- -- -- x- -- 1 + ; -- -- -- -- x' -- -- -- -- -- -- -- 7 + ; 4 3 2 1 0 b a 9 8 7 6 5 + + ; ShiftRows -- the last two rows + ; <<< 8 + ; b a 9 8 7 6 5 4 3 2 1 0 => a 9 8 7 6 5 4 3 2 1 0 b + movw t0j, x25 ; t1j:t0j <= x2b:x25 + movw x25, x24 ; x2b:x25 <= x2a:x24 + movw x24, x23 ; x2a:x24 <= x29:x23 + movw x23, x22 ; x29:x23 <= x28:x22 + movw x22, x21 ; x28:x22 <= x27:x21 + movw x21, x20 ; x27:x21 <= x26:x20 + mov x26, t0j ; x26 <= x25 + mov x20, t1j ; x20 <= x2b + + ; >>> 1 + mov t0j, x3b + ror t0j + ror x3a + ror x39 + ror x38 + ror x37 + ror x36 + ror x35 + ror x34 + ror x33 + ror x32 + ror x31 + ror x30 + ror x3b + ; <<< 56 + ; b a 9 8 7 6 5 4 3 2 1 0 => 4 3 2 1 0 b a 9 8 7 6 5 + ; mov x3j, x30 + ; mov x30, x35 + ; mov x35, x3a + ; mov x3a, x33 + ; mov x33, x38 + ; mov x38, x31 + ; mov x31, x36 + ; mov x36, x3b + ; mov x3b, x34 + ; mov x34, x39 + ; mov x39, x32 + ; mov x32, x37 + ; mov x37, x3j + ; an intentionally arrangement of registers to facilitate movw + ; x30 r22 + ; x35 r20 + ; x3a r18 + ; x33 r16 + ; x38 r14 + ; x31 r12 + ; x36 r23 + ; x3b r21 + ; x34 r19 + ; x39 r17 + ; x32 r15 + ; x37 r13 + movw t0j, x30 ; t1j:t0j <= x36:x30 + movw x30, x35 ; x36:x30 <= x3b:x35 + movw x35, x3a ; x3b:x35 <= x34:x3a + movw x3a, x33 ; x34:x3a <= x39:x33 + movw x33, x38 ; x39:x33 <= x32:x38 + movw x38, x31 ; x32:x38 <= x37:x31 + mov x31, t1j ; x31 <= x36 + mov x37, t0j ; x37 <= x30 + + dec rcnt + breq round_loop_end + jmp round_loop_start + +round_loop_end: + + ldi YH, hi8(SRAM_STATE + 2 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 2 * ROW_INBYTES) + st Y+, x20 + st Y+, x21 + st Y+, x22 + st Y+, x23 + st Y+, x24 + st Y+, x25 + st Y+, x26 + st Y+, x27 + st Y+, x28 + st Y+, x29 + st Y+, x2a + st Y+, x2b + st Y+, x30 + st Y+, x31 + st Y+, x32 + st Y+, x33 + st Y+, x34 + st Y+, x35 + st Y+, x36 + st Y+, x37 + st Y+, x38 + st Y+, x39 + st Y+, x3a + st Y+, x3b + + POP_CONFLICT +ret + +RC_LFSR7: +.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x41, 0x03 +.byte 0x06, 0x0c, 0x18, 0x30, 0x61, 0x42, 0x05, 0x0a +.byte 0x14, 0x28, 0x51, 0x23, 0x47, 0x0f, 0x1e, 0x3c +.byte 0x79, 0x72, 0x64, 0x48, 0x11, 0x22, 0x45, 0x0b +.byte 0x16, 0x2c, 0x59, 0x33, 0x67, 0x4e, 0x1d, 0x3a +.byte 0x75, 0x6a, 0x54, 0x29, 0x53, 0x27, 0x4f, 0x1f +.byte 0x3e, 0x7d, 0x7a, 0x74, 0x68, 0x50, 0x21, 0x43 +.byte 0x07, 0x0e, 0x1c, 0x38, 0x71, 0x62, 0x44, 0x09 +.byte 0x12, 0x24, 0x49, 0x13, 0x26, 0x4d, 0x1b, 0x36 +.byte 0x6d, 0x5a, 0x35, 0x6b, 0x56, 0x2d, 0x5b, 0x37 +.byte 0x6f, 0x5e, 0x3d, 0x7b, 0x76, 0x6c, 0x58, 0x31 +.byte 0x63, 0x46, 0x0d, 0x1a, 0x34, 0x69, 0x52, 0x25 +.byte 0x4b, 0x17, 0x2e, 0x5d, 0x3b, 0x77, 0x6e, 0x5c +.byte 0x39, 0x73, 0x66, 0x4c, 0x19, 0x32, 0x65, 0x4a +.byte 0x15, 0x2a, 0x55, 0x2b, 0x57, 0x2f, 0x5f, 0x3f +.byte 0x7f, 0x7e, 0x7c, 0x78, 0x70, 0x60, 0x40, 0x00 \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot256v2/avr8_speed/knot512.h b/knot/Implementations/crypto_hash/knot256v2/avr8_speed/knot512.h new file mode 100644 index 0000000..b0e4319 --- /dev/null +++ b/knot/Implementations/crypto_hash/knot256v2/avr8_speed/knot512.h @@ -0,0 +1,435 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.1 2020 by KNOT Team * +; ********************************************** +; +#define x20 r0 +#define x22 r2 +#define x24 r4 +#define x26 r6 +#define x28 r1 +#define x2a r3 +#define x2c r5 +#define x2e r7 + +#define x30 r8 +#define x3d r10 +#define x3a r12 +#define x37 r14 +#define x34 r16 +#define x31 r18 +#define x3e r20 +#define x3b r22 +#define x38 r9 +#define x35 r11 +#define x32 r13 +#define x3f r15 +#define x3c r17 +#define x39 r19 +#define x36 r21 +#define x33 r23 + +#define t0j r24 +#define t1j r25 +#define x0j r25 +#define x1j r27 +#define x2j r26 + +#include "assist.h" + +.macro Sbox i0, i1, i2, i3 + ldi t0j, 0xFF + eor \i0, t0j + mov t0j, \i1 + and \i1, \i0 + eor \i1, \i2 + or \i2, t0j + eor \i0, \i3 + eor \i2, \i0 + eor t0j, \i3 + and \i0, \i1 + eor \i3, \i1 + eor \i0, t0j + and t0j, \i2 + eor \i1, t0j +.endm + +.macro TwoColumns i2_e, i3_e, i3_o + ; column 2i + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + Sbox x0j, x1j, \i2_e, \i3_e + st Y+, x0j + rol x1j ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES - 1, x1j + + ; column 2i+1 + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + Sbox x0j, x1j, x2j, \i3_o + st Y+, x0j + rol x1j ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES - 1, x1j + ldd t0j, Y + 2 * ROW_INBYTES + 1 + std Y + 2 * ROW_INBYTES + 1, x2j + mov x2j, t0j +.endm + +Permutation: + PUSH_CONFLICT + mov rcnt, rn + push rcnt + + ldi YH, hi8(SRAM_STATE + 2 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 2 * ROW_INBYTES) + + ldd x20, Y + 0x00 + ldd x22, Y + 0x02 + ldd x24, Y + 0x04 + ldd x26, Y + 0x06 + ldd x28, Y + 0x08 + ldd x2a, Y + 0x0a + ldd x2c, Y + 0x0c + ldd x2e, Y + 0x0e + + adiw YL, ROW_INBYTES + + ld x30, Y+ + ld x31, Y+ + ld x32, Y+ + ld x33, Y+ + ld x34, Y+ + ld x35, Y+ + ld x36, Y+ + ld x37, Y+ + ld x38, Y+ + ld x39, Y+ + ld x3a, Y+ + ld x3b, Y+ + ld x3c, Y+ + ld x3d, Y+ + ld x3e, Y+ + ld x3f, Y+ + +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) + sbrc AEDH, 2 ; AEDH[2] = 0 for AEAD and AEDH[2] = 1 for HASH + rjmp For_Hash +For_AEAD: + ldi ZL, lo8(RC_LFSR7) + ldi ZH, hi8(RC_LFSR7) + rjmp round_loop_start +For_Hash: + ldi ZL, lo8(RC_LFSR8) + ldi ZH, hi8(RC_LFSR8) +#elif defined(CRYPTO_AEAD) + ldi ZL, lo8(RC_LFSR7) + ldi ZH, hi8(RC_LFSR7) +#else + ldi ZL, lo8(RC_LFSR8) + ldi ZH, hi8(RC_LFSR8) +#endif + + +round_loop_start: + ; AddRC + lpm t0j, Z+ + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + + ; column 0 + ld x0j, Y + eor x0j, t0j + ldd x1j, Y + ROW_INBYTES + Sbox x0j, x1j, x20, x30 + st Y+, x0j + lsl x1j ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES - 1, x1j + + ; column 1 + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + ldd x2j, Y + 2 * ROW_INBYTES + Sbox x0j, x1j, x2j, x31 + st Y+, x0j + rol x1j ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES - 1, x1j + ldd t0j, Y + 2 * ROW_INBYTES + 1 + std Y + 2 * ROW_INBYTES + 1, x2j + mov x2j, t0j + + ; column 2, 3 + TwoColumns x22, x32, x33 + ; column 4, 5 + TwoColumns x24, x34, x35 + ; column 6, 7 + TwoColumns x26, x36, x37 + ; column 8, 9 + TwoColumns x28, x38, x39 + ; column 10, 11 + TwoColumns x2a, x3a, x3b + ; column 12, 13 + TwoColumns x2c, x3c, x3d + + ; column 14 + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + Sbox x0j, x1j, x2e, x3e + st Y+, x0j + rol x1j ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES - 1, x1j + + ; column 15 + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + Sbox x0j, x1j, x2j, x3f + st Y+, x0j + rol x1j ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES - 1, x1j + + ld x1j, Y + eor t0j, t0j + adc x1j, t0j + st Y, x1j + std Y + ROW_INBYTES + 1, x2j + + ; f e d c b a 9 8 7 6 5 4 3 2 1 0 + ; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- x- 0 + ; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- x' 0 + ; -- -- -- -- -- -- -- -- -- -- -- -- -- x- -- -- 2 + ; -- -- -- -- -- -- -- -- -- -- -- -- x' -- -- -- 3 + ; c b a 9 8 7 6 5 4 3 2 1 0 f e d + ; x2e x2c x2a x28 x26 x24 x22 x20 => x2c x2a x28 x26 x24 x22 x20 x2e + ;mov t0j, x2e + ;mov x2e, x2c + ;mov x2c, x2a + ;mov x2a, x28 + ;mov x28, x26 + ;mov x26, x24 + ;mov x24, x22 + ;mov x22, x20 + ;mov x20, t0j + ; an intentionally arrangement of registers to facilitate movw + movw t0j, x26 ; t1j:t0j <= x2e:x26 + movw x26, x24 ; x2e:x26 <= x2c:x24 + movw x24, x22 ; x2c:x24 <= x2a:x22 + movw x22, x20 ; x2a:x22 <= x28:x20 + mov x20, t1j ; x20 <= t1j + mov x28, t0j ; x28 <= t0j + + ; <<< 1 + mov t0j, x3f + rol t0j + rol x30 + rol x31 + rol x32 + rol x33 + rol x34 + rol x35 + rol x36 + rol x37 + rol x38 + rol x39 + rol x3a + rol x3b + rol x3c + rol x3d + rol x3e + rol x3f + ; <<< 24 + ; f e d c b a 9 8 7 6 5 4 3 2 1 0 => + ; c b a 9 8 7 6 5 4 3 2 1 0 f e d + ; mov x3j, x30 + ; mov x30, x3d + ; mov x3d, x3a + ; mov x3a, x37 + ; mov x37, x34 + ; mov x34, x31 + ; mov x31, x3e + ; mov x3e, x3b + ; mov x3b, x38 + ; mov x38, x35 + ; mov x35, x32 + ; mov x32, x3f + ; mov x3f, x3c + ; mov x3c, x39 + ; mov x39, x36 + ; mov x36, x33 + ; mov x33, x3j + ; an intentionally arrangement of registers to facilitate movw + ; x30 r8 + ; x3d r10 + ; x3a r12 + ; x37 r14 + ; x34 r16 + ; x31 r18 + ; x3e r20 + ; x3b r22 + ; x38 r9 + ; x35 r11 + ; x32 r13 + ; x3f r15 + ; x3c r17 + ; x39 r19 + ; x36 r21 + ; x33 r23 + movw t0j, x30 ; t1j:t0j <= x38:x30 + movw x30, x3d ; x38:x30 <= x35:x3d + movw x3d, x3a ; x35:x3d <= x32:x3a + movw x3a, x37 ; x32:x3a <= x3f:x37 + movw x37, x34 ; x3f:x37 <= x3c:x34 + movw x34, x31 ; x3c:x34 <= x39:x31 + movw x31, x3e ; x39:x31 <= x36:x3e + movw x3e, x3b ; x36:x3e <= x33:x3b + mov x3b, t1j ; x3b <= x38 + mov x33, t0j ; x33 <= x30 + + pop rcnt + dec rcnt + push rcnt + breq round_loop_end + rjmp round_loop_start + +round_loop_end: + pop rcnt + + ldi YH, hi8(SRAM_STATE + 2 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 2 * ROW_INBYTES) + std Y + 0x00, x20 + std Y + 0x02, x22 + std Y + 0x04, x24 + std Y + 0x06, x26 + std Y + 0x08, x28 + std Y + 0x0a, x2a + std Y + 0x0c, x2c + std Y + 0x0e, x2e + adiw YL, ROW_INBYTES + st Y+, x30 + st Y+, x31 + st Y+, x32 + st Y+, x33 + st Y+, x34 + st Y+, x35 + st Y+, x36 + st Y+, x37 + st Y+, x38 + st Y+, x39 + st Y+, x3a + st Y+, x3b + st Y+, x3c + st Y+, x3d + st Y+, x3e + st Y+, x3f + + POP_CONFLICT +ret + +.section .text +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) +RC_LFSR7: +.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x41, 0x03 +.byte 0x06, 0x0c, 0x18, 0x30, 0x61, 0x42, 0x05, 0x0a +.byte 0x14, 0x28, 0x51, 0x23, 0x47, 0x0f, 0x1e, 0x3c +.byte 0x79, 0x72, 0x64, 0x48, 0x11, 0x22, 0x45, 0x0b +.byte 0x16, 0x2c, 0x59, 0x33, 0x67, 0x4e, 0x1d, 0x3a +.byte 0x75, 0x6a, 0x54, 0x29, 0x53, 0x27, 0x4f, 0x1f +.byte 0x3e, 0x7d, 0x7a, 0x74, 0x68, 0x50, 0x21, 0x43 +.byte 0x07, 0x0e, 0x1c, 0x38, 0x71, 0x62, 0x44, 0x09 +.byte 0x12, 0x24, 0x49, 0x13, 0x26, 0x4d, 0x1b, 0x36 +.byte 0x6d, 0x5a, 0x35, 0x6b, 0x56, 0x2d, 0x5b, 0x37 +.byte 0x6f, 0x5e, 0x3d, 0x7b, 0x76, 0x6c, 0x58, 0x31 +.byte 0x63, 0x46, 0x0d, 0x1a, 0x34, 0x69, 0x52, 0x25 +.byte 0x4b, 0x17, 0x2e, 0x5d, 0x3b, 0x77, 0x6e, 0x5c +.byte 0x39, 0x73, 0x66, 0x4c, 0x19, 0x32, 0x65, 0x4a +.byte 0x15, 0x2a, 0x55, 0x2b, 0x57, 0x2f, 0x5f, 0x3f +.byte 0x7f, 0x7e, 0x7c, 0x78, 0x70, 0x60, 0x40, 0x00 +RC_LFSR8: +.byte 0x01, 0x02, 0x04, 0x08, 0x11, 0x23, 0x47, 0x8e +.byte 0x1c, 0x38, 0x71, 0xe2, 0xc4, 0x89, 0x12, 0x25 +.byte 0x4b, 0x97, 0x2e, 0x5c, 0xb8, 0x70, 0xe0, 0xc0 +.byte 0x81, 0x03, 0x06, 0x0c, 0x19, 0x32, 0x64, 0xc9 +.byte 0x92, 0x24, 0x49, 0x93, 0x26, 0x4d, 0x9b, 0x37 +.byte 0x6e, 0xdc, 0xb9, 0x72, 0xe4, 0xc8, 0x90, 0x20 +.byte 0x41, 0x82, 0x05, 0x0a, 0x15, 0x2b, 0x56, 0xad +.byte 0x5b, 0xb6, 0x6d, 0xda, 0xb5, 0x6b, 0xd6, 0xac +.byte 0x59, 0xb2, 0x65, 0xcb, 0x96, 0x2c, 0x58, 0xb0 +.byte 0x61, 0xc3, 0x87, 0x0f, 0x1f, 0x3e, 0x7d, 0xfb +.byte 0xf6, 0xed, 0xdb, 0xb7, 0x6f, 0xde, 0xbd, 0x7a +.byte 0xf5, 0xeb, 0xd7, 0xae, 0x5d, 0xba, 0x74, 0xe8 +.byte 0xd1, 0xa2, 0x44, 0x88, 0x10, 0x21, 0x43, 0x86 +.byte 0x0d, 0x1b, 0x36, 0x6c, 0xd8, 0xb1, 0x63, 0xc7 +.byte 0x8f, 0x1e, 0x3c, 0x79, 0xf3, 0xe7, 0xce, 0x9c +.byte 0x39, 0x73, 0xe6, 0xcc, 0x98, 0x31, 0x62, 0xc5 +.byte 0x8b, 0x16, 0x2d, 0x5a, 0xb4, 0x69, 0xd2, 0xa4 +.byte 0x48, 0x91, 0x22, 0x45, 0x8a, 0x14, 0x29, 0x52 +.byte 0xa5, 0x4a, 0x95, 0x2a, 0x54, 0xa9, 0x53, 0xa7 +.byte 0x4e, 0x9d, 0x3b, 0x77, 0xee, 0xdd, 0xbb, 0x76 +.byte 0xec, 0xd9, 0xb3, 0x67, 0xcf, 0x9e, 0x3d, 0x7b +.byte 0xf7, 0xef, 0xdf, 0xbf, 0x7e, 0xfd, 0xfa, 0xf4 +.byte 0xe9, 0xd3, 0xa6, 0x4c, 0x99, 0x33, 0x66, 0xcd +.byte 0x9a, 0x35, 0x6a, 0xd4, 0xa8, 0x51, 0xa3, 0x46 +.byte 0x8c, 0x18, 0x30, 0x60, 0xc1, 0x83, 0x07, 0x0e +.byte 0x1d, 0x3a, 0x75, 0xea, 0xd5, 0xaa, 0x55, 0xab +.byte 0x57, 0xaf, 0x5f, 0xbe, 0x7c, 0xf9, 0xf2, 0xe5 +.byte 0xca, 0x94, 0x28, 0x50, 0xa1, 0x42, 0x84, 0x09 +.byte 0x13, 0x27, 0x4f, 0x9f, 0x3f, 0x7f, 0xff, 0xfe +.byte 0xfc, 0xf8, 0xf0, 0xe1, 0xc2, 0x85, 0x0b, 0x17 +.byte 0x2f, 0x5e, 0xbc, 0x78, 0xf1, 0xe3, 0xc6, 0x8d +.byte 0x1a, 0x34, 0x68, 0xd0, 0xa0, 0x40, 0x80, 0x00 +#elif defined(CRYPTO_AEAD) +RC_LFSR7: +.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x41, 0x03 +.byte 0x06, 0x0c, 0x18, 0x30, 0x61, 0x42, 0x05, 0x0a +.byte 0x14, 0x28, 0x51, 0x23, 0x47, 0x0f, 0x1e, 0x3c +.byte 0x79, 0x72, 0x64, 0x48, 0x11, 0x22, 0x45, 0x0b +.byte 0x16, 0x2c, 0x59, 0x33, 0x67, 0x4e, 0x1d, 0x3a +.byte 0x75, 0x6a, 0x54, 0x29, 0x53, 0x27, 0x4f, 0x1f +.byte 0x3e, 0x7d, 0x7a, 0x74, 0x68, 0x50, 0x21, 0x43 +.byte 0x07, 0x0e, 0x1c, 0x38, 0x71, 0x62, 0x44, 0x09 +.byte 0x12, 0x24, 0x49, 0x13, 0x26, 0x4d, 0x1b, 0x36 +.byte 0x6d, 0x5a, 0x35, 0x6b, 0x56, 0x2d, 0x5b, 0x37 +.byte 0x6f, 0x5e, 0x3d, 0x7b, 0x76, 0x6c, 0x58, 0x31 +.byte 0x63, 0x46, 0x0d, 0x1a, 0x34, 0x69, 0x52, 0x25 +.byte 0x4b, 0x17, 0x2e, 0x5d, 0x3b, 0x77, 0x6e, 0x5c +.byte 0x39, 0x73, 0x66, 0x4c, 0x19, 0x32, 0x65, 0x4a +.byte 0x15, 0x2a, 0x55, 0x2b, 0x57, 0x2f, 0x5f, 0x3f +.byte 0x7f, 0x7e, 0x7c, 0x78, 0x70, 0x60, 0x40, 0x00 +#else +RC_LFSR8: +.byte 0x01, 0x02, 0x04, 0x08, 0x11, 0x23, 0x47, 0x8e +.byte 0x1c, 0x38, 0x71, 0xe2, 0xc4, 0x89, 0x12, 0x25 +.byte 0x4b, 0x97, 0x2e, 0x5c, 0xb8, 0x70, 0xe0, 0xc0 +.byte 0x81, 0x03, 0x06, 0x0c, 0x19, 0x32, 0x64, 0xc9 +.byte 0x92, 0x24, 0x49, 0x93, 0x26, 0x4d, 0x9b, 0x37 +.byte 0x6e, 0xdc, 0xb9, 0x72, 0xe4, 0xc8, 0x90, 0x20 +.byte 0x41, 0x82, 0x05, 0x0a, 0x15, 0x2b, 0x56, 0xad +.byte 0x5b, 0xb6, 0x6d, 0xda, 0xb5, 0x6b, 0xd6, 0xac +.byte 0x59, 0xb2, 0x65, 0xcb, 0x96, 0x2c, 0x58, 0xb0 +.byte 0x61, 0xc3, 0x87, 0x0f, 0x1f, 0x3e, 0x7d, 0xfb +.byte 0xf6, 0xed, 0xdb, 0xb7, 0x6f, 0xde, 0xbd, 0x7a +.byte 0xf5, 0xeb, 0xd7, 0xae, 0x5d, 0xba, 0x74, 0xe8 +.byte 0xd1, 0xa2, 0x44, 0x88, 0x10, 0x21, 0x43, 0x86 +.byte 0x0d, 0x1b, 0x36, 0x6c, 0xd8, 0xb1, 0x63, 0xc7 +.byte 0x8f, 0x1e, 0x3c, 0x79, 0xf3, 0xe7, 0xce, 0x9c +.byte 0x39, 0x73, 0xe6, 0xcc, 0x98, 0x31, 0x62, 0xc5 +.byte 0x8b, 0x16, 0x2d, 0x5a, 0xb4, 0x69, 0xd2, 0xa4 +.byte 0x48, 0x91, 0x22, 0x45, 0x8a, 0x14, 0x29, 0x52 +.byte 0xa5, 0x4a, 0x95, 0x2a, 0x54, 0xa9, 0x53, 0xa7 +.byte 0x4e, 0x9d, 0x3b, 0x77, 0xee, 0xdd, 0xbb, 0x76 +.byte 0xec, 0xd9, 0xb3, 0x67, 0xcf, 0x9e, 0x3d, 0x7b +.byte 0xf7, 0xef, 0xdf, 0xbf, 0x7e, 0xfd, 0xfa, 0xf4 +.byte 0xe9, 0xd3, 0xa6, 0x4c, 0x99, 0x33, 0x66, 0xcd +.byte 0x9a, 0x35, 0x6a, 0xd4, 0xa8, 0x51, 0xa3, 0x46 +.byte 0x8c, 0x18, 0x30, 0x60, 0xc1, 0x83, 0x07, 0x0e +.byte 0x1d, 0x3a, 0x75, 0xea, 0xd5, 0xaa, 0x55, 0xab +.byte 0x57, 0xaf, 0x5f, 0xbe, 0x7c, 0xf9, 0xf2, 0xe5 +.byte 0xca, 0x94, 0x28, 0x50, 0xa1, 0x42, 0x84, 0x09 +.byte 0x13, 0x27, 0x4f, 0x9f, 0x3f, 0x7f, 0xff, 0xfe +.byte 0xfc, 0xf8, 0xf0, 0xe1, 0xc2, 0x85, 0x0b, 0x17 +.byte 0x2f, 0x5e, 0xbc, 0x78, 0xf1, 0xe3, 0xc6, 0x8d +.byte 0x1a, 0x34, 0x68, 0xd0, 0xa0, 0x40, 0x80, 0x00 +#endif \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot256v2/avr8_speed/permutation.h b/knot/Implementations/crypto_hash/knot256v2/avr8_speed/permutation.h new file mode 100644 index 0000000..e6c9793 --- /dev/null +++ b/knot/Implementations/crypto_hash/knot256v2/avr8_speed/permutation.h @@ -0,0 +1,45 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.1 2020 by KNOT Team * +; ********************************************** +; + +; +; ============================================ +; R E G I S T E R D E F I N I T I O N S +; ============================================ +; + +#define mclen r16 +#define radlen r17 +#define tcnt r17 +#define tmp0 r20 +#define tmp1 r21 +#define cnt0 r22 +#define rn r23 +#define rate r24 + + +; AEDH = 0b000: for authenticate AD +; AEDH = 0b001: for encryption +; AEDH = 0b011: for decryption +; AEDH = 0b100: for hash +#define AEDH r25 +#define rcnt r26 + +#if (STATE_INBITS==256) +#include "knot256.h" +#elif (STATE_INBITS==384) +#include "knot384.h" +#elif (STATE_INBITS==512) +#include "knot512.h" +#else +#error "Not specified key size and state size" +#endif + + diff --git a/knot/Implementations/crypto_hash/knot384/avr8_lowrom/api.h b/knot/Implementations/crypto_hash/knot384/avr8_lowrom/api.h new file mode 100644 index 0000000..1656d0c --- /dev/null +++ b/knot/Implementations/crypto_hash/knot384/avr8_lowrom/api.h @@ -0,0 +1 @@ +#define CRYPTO_BYTES 48 \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot384/avr8_lowrom/assist.h b/knot/Implementations/crypto_hash/knot384/avr8_lowrom/assist.h new file mode 100644 index 0000000..cb903a5 --- /dev/null +++ b/knot/Implementations/crypto_hash/knot384/avr8_lowrom/assist.h @@ -0,0 +1,140 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by KNOT Team * +; ********************************************** +; +.macro LFSR6_MACRO + bst rc, 5 + bld tmp0, 0 + bst rc, 4 + bld tmp1, 0 + eor tmp0, tmp1 + ror tmp0 + rol rc + andi rc, 0x3F +.endm + +.macro LFSR7_MACRO + bst rc, 6 + bld tmp0, 0 + bst rc, 5 + bld tmp1, 0 + eor tmp0, tmp1 + ror tmp0 + rol rc + andi rc, 0x7F +.endm + +.macro LFSR8_MACRO + bst rc, 7 + bld tmp0, 0 + bst rc, 5 + bld tmp1, 0 + eor tmp0, tmp1 + bst rc, 4 + bld tmp1, 0 + eor tmp0, tmp1 + bst rc, 3 + bld tmp1, 0 + eor tmp0, tmp1 + ror tmp0 + rol rc +.endm + +.macro Sbox i0, i1, i2, i3 + mov tmp0, \i1 + com \i0 + and \i1, \i0 + eor \i1, \i2 + or \i2, tmp0 + eor \i0, \i3 + eor \i2, \i0 + eor tmp0, \i3 + and \i0, \i1 + eor \i3, \i1 + eor \i0, tmp0 + and tmp0, \i2 + eor \i1, tmp0 +.endm + +.macro PUSH_CONFLICT + push r16 + push r17 + push r18 + push r19 + + push r23 + push r24 + + push r26 + push r27 + push r28 + push r29 + push r30 + push r31 +.endm + +.macro POP_CONFLICT + pop r31 + pop r30 + pop r29 + pop r28 + pop r27 + pop r26 + + pop r24 + pop r23 + + pop r19 + pop r18 + pop r17 + pop r16 +.endm + +.macro PUSH_ALL + push r2 + push r3 + push r4 + push r5 + push r6 + push r7 + push r8 + push r9 + push r10 + push r11 + push r12 + push r13 + push r14 + push r15 + push r16 + push r17 + push r28 + push r29 +.endm + +.macro POP_ALL + pop r29 + pop r28 + pop r17 + pop r16 + pop r15 + pop r14 + pop r13 + pop r12 + pop r11 + pop r10 + pop r9 + pop r8 + pop r7 + pop r6 + pop r5 + pop r4 + pop r3 + pop r2 + clr r1 +.endm \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot384/avr8_lowrom/config.h b/knot/Implementations/crypto_hash/knot384/avr8_lowrom/config.h new file mode 100644 index 0000000..c9f6bf2 --- /dev/null +++ b/knot/Implementations/crypto_hash/knot384/avr8_lowrom/config.h @@ -0,0 +1,131 @@ +#ifndef __CONFIG_H__ +#define __CONFIG_H__ + +//#define CRYPTO_AEAD +#define CRYPTO_HASH + +#define MAX_MESSAGE_LENGTH 128 + +#define STATE_INBITS 384 +/* For CRYPTO_AEAD */ +#define CRYPTO_KEYBITS 192 +/* For CRYPTO_HASH */ +#define CRYPTO_BITS 384 + +#define STATE_INBYTES ((STATE_INBITS + 7) / 8) +#define ROW_INBITS ((STATE_INBITS + 3) / 4) +#define ROW_INBYTES ((ROW_INBITS + 7) / 8) + +/* For CRYPTO_AEAD */ +#define CRYPTO_KEYBYTES ((CRYPTO_KEYBITS + 7) / 8) +#define CRYPTO_NSECBYTES 0 +#define CRYPTO_NPUBBYTES CRYPTO_KEYBYTES +#define CRYPTO_ABYTES CRYPTO_KEYBYTES +#define CRYPTO_NOOVERLAP 1 + +#define MAX_ASSOCIATED_DATA_LENGTH 32 +#define MAX_CIPHER_LENGTH (MAX_MESSAGE_LENGTH + CRYPTO_ABYTES) + +#define TAG_MATCH 0 +#define TAG_UNMATCH -1 +#define OTHER_FAILURES -2 + +/* For CRYPTO_HASH */ +#define CRYPTO_BYTES ((CRYPTO_BITS + 7) / 8) + + + +#define DOMAIN_BITS 0x80 +#define PAD_BITS 0x01 +#define S384_R192_BITS 0x80 + +#if (STATE_INBITS==256) +#define C1 1 +#define C2 8 +#define C3 25 +#elif (STATE_INBITS==384) +#define C1 1 +#define C2 8 +#define C3 55 +#elif (STATE_INBITS==512) +#define C1 1 +#define C2 16 +#define C3 25 +#else +#error "Not specified state size" +#endif + +#ifdef CRYPTO_AEAD +/* For CRYPTO_AEAD */ +#define KEY_INBITS (CRYPTO_KEYBYTES * 8) +#define KEY_INBYTES (CRYPTO_KEYBYTES) + +#define NONCE_INBITS (CRYPTO_NPUBBYTES * 8) +#define NONCE_INBYTES (CRYPTO_NPUBBYTES) + +#define TAG_INBITS (CRYPTO_ABYTES * 8) +#define TAG_INBYTES (CRYPTO_ABYTES) + +#if (KEY_INBITS==128) && (STATE_INBITS==256) +#define RATE_INBITS 64 +#define NR_0 52 +#define NR_i 28 +#define NR_f 32 +#elif (KEY_INBITS==128) && (STATE_INBITS==384) +#define RATE_INBITS 192 +#define NR_0 76 +#define NR_i 28 +#define NR_f 32 +#elif (KEY_INBITS==192) && (STATE_INBITS==384) +#define RATE_INBITS 96 +#define NR_0 76 +#define NR_i 40 +#define NR_f 44 +#elif (KEY_INBITS==256) && (STATE_INBITS==512) +#define RATE_INBITS 128 +#define NR_0 100 +#define NR_i 52 +#define NR_f 56 +#else +#error "Not specified key size and state size" +#endif + +#define RATE_INBYTES ((RATE_INBITS + 7) / 8) +#define SQUEEZE_RATE_INBYTES TAG_INBYTES + +#endif + +#ifdef CRYPTO_HASH +/* For CRYPTO_HASH */ +#define HASH_DIGEST_INBITS (CRYPTO_BYTES * 8) + +#if (HASH_DIGEST_INBITS==256) && (STATE_INBITS==256) +#define HASH_RATE_INBITS 32 +#define HASH_SQUEEZE_RATE_INBITS 128 +#define NR_h 68 +#elif (HASH_DIGEST_INBITS==256) && (STATE_INBITS==384) +#define HASH_RATE_INBITS 128 +#define HASH_SQUEEZE_RATE_INBITS 128 +#define NR_h 80 +#elif (HASH_DIGEST_INBITS==384) && (STATE_INBITS==384) +#define HASH_RATE_INBITS 48 +#define HASH_SQUEEZE_RATE_INBITS 192 +#define NR_h 104 +#elif (HASH_DIGEST_INBITS==512) && (STATE_INBITS==512) +#define HASH_RATE_INBITS 64 +#define HASH_SQUEEZE_RATE_INBITS 256 +#define NR_h 140 +#else +#error "Not specified hash digest size and state size" +#endif + +#define HASH_RATE_INBYTES ((HASH_RATE_INBITS + 7) / 8) +#define HASH_SQUEEZE_RATE_INBYTES ((HASH_SQUEEZE_RATE_INBITS + 7) / 8) + +#endif + +#define TAG_MATCH 0 +#define TAG_UNMATCH -1 +#define OTHER_FAILURES -2 + +#endif \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot384/avr8_lowrom/crypto_hash.h b/knot/Implementations/crypto_hash/knot384/avr8_lowrom/crypto_hash.h new file mode 100644 index 0000000..342a639 --- /dev/null +++ b/knot/Implementations/crypto_hash/knot384/avr8_lowrom/crypto_hash.h @@ -0,0 +1,13 @@ +#ifdef __cplusplus +extern "C" { +#endif + +int crypto_hash( + unsigned char *out, + const unsigned char *in, + unsigned long long inlen + ); + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot384/avr8_lowrom/encrypt.c b/knot/Implementations/crypto_hash/knot384/avr8_lowrom/encrypt.c new file mode 100644 index 0000000..baf0a3b --- /dev/null +++ b/knot/Implementations/crypto_hash/knot384/avr8_lowrom/encrypt.c @@ -0,0 +1,106 @@ +#include +#include +#include +#include +#include "config.h" + +extern void crypto_aead_encrypt_asm( + unsigned char *c, + const unsigned char *m, + unsigned char mlen, + const unsigned char *ad, + unsigned char adlen, + const unsigned char *npub, + const unsigned char *k + ); + +extern int crypto_aead_decrypt_asm( + unsigned char *m, + const unsigned char *c, + unsigned char clen, + const unsigned char *ad, + unsigned char adlen, + const unsigned char *npub, + const unsigned char *k + ); + +extern void crypto_hash_asm( + unsigned char *out, + const unsigned char *in, + unsigned char inlen + ); + + +int crypto_aead_encrypt( + unsigned char *c, unsigned long long *clen, + const unsigned char *m, unsigned long long mlen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k + ) +{ + /* + ... + ... the code for the cipher implementation goes here, + ... generating a ciphertext c[0],c[1],...,c[*clen-1] + ... from a plaintext m[0],m[1],...,m[mlen-1] + ... and associated data ad[0],ad[1],...,ad[adlen-1] + ... and nonce npub[0],npub[1],.. + ... and secret key k[0],k[1],... + ... the implementation shall not use nsec + ... + ... return 0; + */ + + (void)nsec; + + crypto_aead_encrypt_asm(c, m, mlen, ad, adlen, npub, k); + + *clen = mlen + TAG_INBYTES; + return 0; +} + + + +int crypto_aead_decrypt( + unsigned char *m, unsigned long long *mlen, + unsigned char *nsec, + const unsigned char *c, unsigned long long clen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k + ) +{ + /* + ... + ... the code for the AEAD implementation goes here, + ... generating a plaintext m[0],m[1],...,m[*mlen-1] + ... and secret message number nsec[0],nsec[1],... + ... from a ciphertext c[0],c[1],...,c[clen-1] + ... and associated data ad[0],ad[1],...,ad[adlen-1] + ... and nonce number npub[0],npub[1],... + ... and secret key k[0],k[1],... + ... + ... return 0; + */ + unsigned long long mlen_; + unsigned char tag_is_match; + + (void)nsec; + if (clen < CRYPTO_ABYTES) { + return -1; + } + mlen_ = clen - CRYPTO_ABYTES; + + tag_is_match = crypto_aead_decrypt_asm(m, c, mlen_, ad, adlen, npub, k); + + if (tag_is_match != 0) + { + memset(m, 0, (size_t)mlen_); + return -1; + } + + *mlen = mlen_; + return 0; +} \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot384/avr8_lowrom/encrypt_core.S b/knot/Implementations/crypto_hash/knot384/avr8_lowrom/encrypt_core.S new file mode 100644 index 0000000..cb7aed5 --- /dev/null +++ b/knot/Implementations/crypto_hash/knot384/avr8_lowrom/encrypt_core.S @@ -0,0 +1,537 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by KNOT Team * +; ********************************************** +; + +; +; ============================================ +; S R A M D E F I N I T I O N S +; ============================================ +; +#include +#include "config.h" + +.section .noinit + SRAM_STATE: .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#if (STATE_INBYTES > 32) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif +#if (STATE_INBYTES > 48) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif + SRAM_MESSAGE_OUT_ADDR: .BYTE 0, 0 + SRAM_MESSAGE_IN_ADDR: .BYTE 0, 0 + SRAM_MESSAGE_IN_LEN: .BYTE 0, 0 +#ifdef CRYPTO_AEAD +; For CRYPTO_AEAD + SRAM_ASSOCIATED_DATA_ADDR: .BYTE 0, 0 + SRAM_ADLEN: .BYTE 0, 0 + SRAM_NONCE_ADDR: .BYTE 0, 0 + SRAM_KEY_ADDR: .BYTE 0, 0 + + SRAM_ADDITIONAL: + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#if (CRYPTO_ABYTES > 16) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif +#if (CRYPTO_ABYTES > 24) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif + +#endif + +.section .text + +#include "permutation.h" + +; require YH:YL be the address of the current associated data/cipher/message block +; for enc and dec, store ciphertext or plaintext +; require ZH:ZL be the address of the current cipher/message block +XOR_to_State: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + mov cnt0, rate +XOR_to_State_loop: + ld tmp0, Y+ ; plaintext/ciphertext + ld tmp1, X ; state + eor tmp1, tmp0 ; ciphertext/plaintext + sbrc AEDH, 0 ; test auth or enc/dec, if AEDH[0] == 0, skip store result + st Z+, tmp1 ; store ciphertext/plaintext + sbrc AEDH, 1 ; test auth/enc or dec, if AEDH[1] == 0, skip repalce state byte + mov tmp1, tmp0 ; if dec, replace state + st X+, tmp1 ; store state byte + dec cnt0 + brne XOR_to_State_loop +; YH:YL are now the address of the next associated data block +ret + +; require YH:YL pointed to the input data +; require ZH:ZL pointed to the output data +; require cnt0 containes the nubmer of bytes in source data +; require number of bytes in source data less than rate, i.e., 0 <= cnt0 < rate +; +; the 0th bit in AEDH is used to distinguish (auth AD) or (enc/dec M/C): +; AEDH[0] = 0 for (auth AD), AEDH[0] = 1 for (enc/dec M/C) +; the 1th bit in AEDH is used to distinguish (auth AD/enc M) or (dec C): +; AEDH[1] = 0 for (auth AD/enc M), AEDH[1] = 1 for (dec C) +; AEDH = 0b000 for (auth AD) +; AEDH = 0b001 for (enc M) +; AEDH = 0b011 for (dec C) +Pad_XOR_to_State: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + tst cnt0 + breq XOR_padded_data +XOR_source_data_loop: + ld tmp0, Y+ ; plaintext/ciphertext + ld tmp1, X ; state + eor tmp1, tmp0 ; ciphertext/plaintext + sbrc AEDH, 0 ; test auth or enc/dec, if AEDH[0] == 0, skip store result + st Z+, tmp1 ; store ciphertext/plaintext + sbrc AEDH, 1 ; test auth/enc or dec, if AEDH[1] == 0, skip repalce state byte + mov tmp1, tmp0 ; if dec, replace state + st X+, tmp1 ; store state byte + dec cnt0 + brne XOR_source_data_loop +XOR_padded_data: + ldi tmp0, PAD_BITS + ld tmp1, X + eor tmp1, tmp0 + st X, tmp1 +ret + +AddDomain: + ldi XH, hi8(SRAM_STATE + STATE_INBYTES - 1) + ldi XL, lo8(SRAM_STATE + STATE_INBYTES - 1) + ldi tmp0, DOMAIN_BITS + ld tmp1, X + eor tmp0, tmp1 + st X, tmp0 +ret + +; require ZH:ZL be the address of the destination +EXTRACT_from_State: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + mov tmp1, rate +EXTRACT_from_State_loop: + ld tmp0, X+ + st Z+, tmp0 + dec tmp1 + brne EXTRACT_from_State_loop +ret + +AUTH: + tst radlen + breq AUTH_end + + cp radlen, rate + brlo auth_ad_padded_block + +auth_ad_loop: + rcall XOR_to_State + rcall Permutation + sub radlen, rate + cp radlen, rate + brlo auth_ad_padded_block + rjmp auth_ad_loop + +auth_ad_padded_block: + mov cnt0, radlen + rcall Pad_XOR_to_State + rcall Permutation + +AUTH_end: +ret + +#ifdef CRYPTO_AEAD +Initialization: + ldi rn, NR_0 + ldi XL, lo8(SRAM_STATE) + ldi XH, hi8(SRAM_STATE) + + lds YH, SRAM_NONCE_ADDR + lds YL, SRAM_NONCE_ADDR + 1 + ldi cnt0, CRYPTO_NPUBBYTES +load_nonce_loop: + ld tmp0, Y+ + st X+, tmp0 + dec cnt0 + brne load_nonce_loop + + lds YH, SRAM_KEY_ADDR + lds YL, SRAM_KEY_ADDR + 1 + ldi cnt0, CRYPTO_KEYBYTES +load_key_loop: + ld tmp0, Y+ + st X+, tmp0 + dec cnt0 + brne load_key_loop + +#if (STATE_INBITS==384) && (RATE_INBITS==192) + ldi cnt0, (STATE_INBYTES - CRYPTO_NPUBBYTES - CRYPTO_KEYBYTES - 1) + clr tmp0 +empty_state_loop: + st X+, tmp0 + dec cnt0 + brne empty_state_loop + ldi tmp0, S384_R192_BITS + st X+, tmp0 +#endif + + rcall Permutation +ret + +ENC: + tst mclen + breq ENC_end + + cp mclen, rate + brlo enc_padded_block + +enc_loop: + rcall XOR_to_State + ldi rn, NR_i + rcall Permutation + sub mclen, rate + cp mclen, rate + brlo enc_padded_block + rjmp enc_loop + +enc_padded_block: + mov cnt0, mclen + rcall Pad_XOR_to_State +ENC_end: +ret + +Finalization: + ldi rate, SQUEEZE_RATE_INBYTES + ldi rn, NR_f + rcall Permutation + rcall EXTRACT_from_State +ret + +; void crypto_aead_encrypt_asm( +; unsigned char *c, +; const unsigned char *m, +; unsigned long long mlen, +; const unsigned char *ad, +; unsigned long long adlen, +; const unsigned char *npub, +; const unsigned char *k +; ) +; +; unsigned char *c, is passed in r24:r25 +; const unsigned char *m, is passed in r22:r23 +; unsigned long long mlen, is passed in r20:r21, only LSB (r20) is used +; const unsigned char *ad, is passed in r18:r19 +; unsigned long long adlen, is passed in r16:r17, only LSB (r16) is used +; const unsigned char *npub, is passed in r14:r15 +; const unsigned char *k is passed in r12:r13 +.global crypto_aead_encrypt_asm +crypto_aead_encrypt_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store cipher address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store message address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store message length in SRAM_MESSAGE_IN_LEN + st X+, r20 + st X+, r19 ;store associated data address in SRAM_ASSOCIATED_DATA_ADDR + st X+, r18 + st X+, r17 ;store associated data length in SRAM_ADLEN + st X+, r16 + st X+, r15 ;store nonce address in SRAM_NONCE_ADDR + st X+, r14 + st X+, r13 ;store key address in SRAM_KEY_ADDR + st X+, r12 + mov radlen, r16 + mov mclen, r20 + + rcall Initialization + + ldi rn, NR_i + ldi rate, RATE_INBYTES + ldi AEDH, 0b000 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_ASSOCIATED_DATA_ADDR + lds YL, SRAM_ASSOCIATED_DATA_ADDR + 1 + rcall AUTH + rcall AddDomain + ldi AEDH, 0b001 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_MESSAGE_IN_ADDR + lds YL, SRAM_MESSAGE_IN_ADDR + 1 + lds ZH, SRAM_MESSAGE_OUT_ADDR + lds ZL, SRAM_MESSAGE_OUT_ADDR + 1 + rcall ENC + rcall Finalization + POP_ALL +ret + +; int crypto_aead_decrypt_asm( +; unsigned char *m, +; const unsigned char *c, +; unsigned long long clen, +; const unsigned char *ad, +; unsigned long long adlen, +; const unsigned char *npub, +; const unsigned char *k +; ) +; +; unsigned char *m, is passed in r24:r25 +; const unsigned char *c, is passed in r22:r23 +; unsigned long long clen, is passed in r20:r21, only LSB (r20) is used +; const unsigned char *ad, is passed in r18:r19 +; unsigned long long adlen, is passed in r16:r17, only LSB (r16) is used +; const unsigned char *npub, is passed in r14:r15 +; const unsigned char *k is passed in r12:r13 +.global crypto_aead_decrypt_asm +crypto_aead_decrypt_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store message address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store cipher address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store cipher length in SRAM_MESSAGE_IN_LEN + st X+, r20 + st X+, r19 ;store associated data address in SRAM_ASSOCIATED_DATA_ADDR + st X+, r18 + st X+, r17 ;store associated data length in SRAM_ADLEN + st X+, r16 + st X+, r15 ;store nonce address in SRAM_NONCE_ADDR + st X+, r14 + st X+, r13 ;store key address in SRAM_KEY_ADDR + st X+, r12 + mov radlen, r16 + mov mclen, r20 + + rcall Initialization + + ldi rn, NR_i + ldi rate, RATE_INBYTES + ldi AEDH, 0b000 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_ASSOCIATED_DATA_ADDR + lds YL, SRAM_ASSOCIATED_DATA_ADDR + 1 + rcall AUTH + rcall AddDomain + ldi AEDH, 0b011 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_MESSAGE_IN_ADDR + lds YL, SRAM_MESSAGE_IN_ADDR + 1 + lds ZH, SRAM_MESSAGE_OUT_ADDR + lds ZL, SRAM_MESSAGE_OUT_ADDR + 1 + rcall ENC + + ldi ZH, hi8(SRAM_ADDITIONAL) + ldi ZL, lo8(SRAM_ADDITIONAL) + rcall Finalization + + sbiw ZL, CRYPTO_ABYTES + ldi cnt0, CRYPTO_ABYTES +compare_tag: + ld tmp0, Z+ + ld tmp1, Y+ + cp tmp0, tmp1 + brne return_tag_not_match + dec cnt0 + brne compare_tag + rjmp return_tag_match + +return_tag_not_match: + ldi r25, 0xFF + ldi r24, 0xFF + rjmp crypto_aead_decrypt_end + +return_tag_match: + clr r25 + clr r24 +crypto_aead_decrypt_end: + POP_ALL +ret + +; #ifdef CRYPTO_AEAD +#endif + + +#ifdef CRYPTO_HASH + +; void crypto_hash_asm( +; unsigned char *out, +; const unsigned char *in, +; unsigned long long inlen +; ) +; +; unsigned char *out, is passed in r24:r25 +; const unsigned char *in, is passed in r22:r23 +; unsigned long long inlen, is passed in r20:r21, only LSB (r20) is used +.global crypto_hash_asm +crypto_hash_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store message address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store cipher address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store cipher length in SRAM_MESSAGE_IN_LEN + st X+, r20 + mov mclen, r20 + + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) +#if (STATE_INBITS==384) && (HASH_RATE_INBITS==128) + ldi cnt0, STATE_INBYTES - 1 +#else + ldi cnt0, STATE_INBYTES +#endif + clr tmp0 +zero_state: + st X+, tmp0 + dec cnt0 + brne zero_state + +#if (STATE_INBITS==384) && (HASH_RATE_INBITS==128) + ldi tmp0, S384_R192_BITS + st X+, tmp0 +#endif + + ldi rn, NR_h + ldi AEDH, 0b100 + +HASH_ABSORBING: + mov radlen, mclen + tst radlen + breq EMPTY_M + ldi rate, HASH_RATE_INBYTES + lds YH, SRAM_MESSAGE_IN_ADDR + lds YL, SRAM_MESSAGE_IN_ADDR + 1 + rcall AUTH + rjmp HASH_SQUEEZING + +EMPTY_M: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + ldi tmp0, PAD_BITS + ld tmp1, X + eor tmp1, tmp0 + st X, tmp1 + rcall Permutation + +HASH_SQUEEZING: + ldi rate, HASH_SQUEEZE_RATE_INBYTES + lds ZH, SRAM_MESSAGE_OUT_ADDR + lds ZL, SRAM_MESSAGE_OUT_ADDR + 1 + ldi tcnt, CRYPTO_BYTES +SQUEEZING_loop: + rcall EXTRACT_from_State + subi tcnt, HASH_SQUEEZE_RATE_INBYTES + breq HASH_SQUEEZING_end + rcall Permutation + rjmp SQUEEZING_loop +HASH_SQUEEZING_end: + POP_ALL +ret + +#endif + + +; Byte Order In AVR 8: +; KNOT-AEAD(128, 256, 64): +; N[ 0] AEAD_State[ 0] | Message[ 0] Perm_row_0[0] 0 Tag[ 0] +; N[ 1] AEAD_State[ 1] | Message[ 1] Perm_row_0[1] 0 Tag[ 1] +; N[ 2] AEAD_State[ 2] | Message[ 2] Perm_row_0[2] 0 Tag[ 2] +; N[ 3] AEAD_State[ 3] | Message[ 3] Perm_row_0[3] 0 Tag[ 3] +; N[ 4] AEAD_State[ 4] | Message[ 4] 0x01 Perm_row_0[4] 0 Tag[ 4] +; N[ 5] AEAD_State[ 5] | Message[ 5] 0x00 Perm_row_0[5] 0 Tag[ 5] +; N[ 6] AEAD_State[ 6] | Message[ 6] 0x00 Perm_row_0[6] 0 Tag[ 6] +; N[ 7] AEAD_State[ 7] | Message[ 7] 0x00 Perm_row_0[7] <<< 0 Tag[ 7] +; N[ 8] AEAD_State[ 8] | Perm_row_1[0] 1 +; N[ 9] AEAD_State[ 9] | Perm_row_1[1] 1 +; N[10] AEAD_State[10] | Perm_row_1[2] 1 +; N[11] AEAD_State[11] | Perm_row_1[3] 1 +; N[12] AEAD_State[12] | Perm_row_1[4] 1 +; N[13] AEAD_State[13] | Perm_row_1[5] 1 +; N[14] AEAD_State[14] | Perm_row_1[6] 1 +; N[15] AEAD_State[15] | Perm_row_1[7] <<< 1 +; K[ 0] AEAD_State[16] | Perm_row_2[0] 8 +; K[ 1] AEAD_State[17] | Perm_row_2[1] 8 +; K[ 2] AEAD_State[18] | Perm_row_2[2] 8 +; K[ 3] AEAD_State[19] | Perm_row_2[3] 8 +; K[ 4] AEAD_State[20] | Perm_row_2[4] 8 +; K[ 5] AEAD_State[21] | Perm_row_2[5] 8 +; K[ 6] AEAD_State[22] | Perm_row_2[6] 8 +; K[ 7] AEAD_State[23] | Perm_row_2[7] <<< 8 +; K[ 8] AEAD_State[24] | Perm_row_3[0] 25 +; K[ 9] AEAD_State[25] | Perm_row_3[1] 25 +; K[10] AEAD_State[26] | Perm_row_3[2] 25 +; K[11] AEAD_State[27] | Perm_row_3[3] 25 +; K[12] AEAD_State[28] | Perm_row_3[4] 25 +; K[13] AEAD_State[29] | Perm_row_3[5] 25 +; K[14] AEAD_State[30] | Perm_row_3[6] 25 +; K[15] AEAD_State[31] | ^0x80 Perm_row_3[7] <<< 25 +; +; +; KNOT-AEAD(128, 384, 192): +; Initalization +; N[ 0] AEAD_State[ 0] | Message[ 0] Perm_row_0[ 0] 0 Tag[ 0] +; N[ 1] AEAD_State[ 1] | Message[ 1] Perm_row_0[ 1] 0 Tag[ 1] +; N[ 2] AEAD_State[ 2] | Message[ 2] Perm_row_0[ 2] 0 Tag[ 2] +; N[ 3] AEAD_State[ 3] | Message[ 3] Perm_row_0[ 3] 0 Tag[ 3] +; N[ 4] AEAD_State[ 4] | Message[ 4] 0x01 Perm_row_0[ 4] 0 Tag[ 4] +; N[ 5] AEAD_State[ 5] | Message[ 5] 0x00 Perm_row_0[ 5] 0 Tag[ 5] +; N[ 6] AEAD_State[ 6] | Message[ 6] 0x00 Perm_row_0[ 6] 0 Tag[ 6] +; N[ 7] AEAD_State[ 7] | Message[ 7] 0x00 Perm_row_0[ 7] 0 Tag[ 7] +; N[ 8] AEAD_State[ 8] | Message[ 8] 0x00 Perm_row_0[ 8] 0 Tag[ 8] +; N[ 9] AEAD_State[ 9] | Message[ 9] 0x00 Perm_row_0[ 9] 0 Tag[ 9] +; N[10] AEAD_State[10] | Message[10] 0x00 Perm_row_0[10] 0 Tag[10] +; N[11] AEAD_State[11] | Message[11] 0x00 Perm_row_0[11] <<< 0 Tag[11] +; N[12] AEAD_State[12] | Message[12] 0x00 Perm_row_1[ 0] 1 Tag[12] +; N[13] AEAD_State[13] | Message[13] 0x00 Perm_row_1[ 1] 1 Tag[13] +; N[14] AEAD_State[14] | Message[14] 0x00 Perm_row_1[ 2] 1 Tag[14] +; N[15] AEAD_State[15] | Message[15] 0x00 Perm_row_1[ 3] 1 Tag[15] +; K[ 0] AEAD_State[16] | Message[16] 0x00 Perm_row_1[ 4] 1 +; K[ 1] AEAD_State[17] | Message[17] 0x00 Perm_row_1[ 5] 1 +; K[ 2] AEAD_State[18] | Message[18] 0x00 Perm_row_1[ 6] 1 +; K[ 3] AEAD_State[19] | Message[19] 0x00 Perm_row_1[ 7] 1 +; K[ 4] AEAD_State[20] | Message[20] 0x00 Perm_row_1[ 8] 1 +; K[ 5] AEAD_State[21] | Message[21] 0x00 Perm_row_1[ 9] 1 +; K[ 6] AEAD_State[22] | Message[22] 0x00 Perm_row_1[10] 1 +; K[ 7] AEAD_State[23] | Message[23] 0x00 Perm_row_1[11] <<< 1 +; K[ 8] AEAD_State[24] | Perm_row_2[ 0] 8 +; K[ 9] AEAD_State[25] | Perm_row_2[ 1] 8 +; K[10] AEAD_State[26] | Perm_row_2[ 2] 8 +; K[11] AEAD_State[27] | Perm_row_2[ 3] 8 +; K[12] AEAD_State[28] | Perm_row_2[ 4] 8 +; K[13] AEAD_State[29] | Perm_row_2[ 5] 8 +; K[14] AEAD_State[30] | Perm_row_2[ 6] 8 +; K[15] AEAD_State[31] | Perm_row_2[ 7] 8 +; 0x00 AEAD_State[32] | Perm_row_2[ 8] 8 +; 0x00 AEAD_State[33] | Perm_row_2[ 9] 8 +; 0x00 AEAD_State[34] | Perm_row_2[10] 8 +; 0x00 AEAD_State[35] | Perm_row_2[11] <<< 8 +; 0x00 AEAD_State[36] | Perm_row_3[ 0] 55 +; 0x00 AEAD_State[37] | Perm_row_3[ 1] 55 +; 0x00 AEAD_State[38] | Perm_row_3[ 2] 55 +; 0x00 AEAD_State[39] | Perm_row_3[ 3] 55 +; 0x00 AEAD_State[40] | Perm_row_3[ 4] 55 +; 0x00 AEAD_State[41] | Perm_row_3[ 5] 55 +; 0x00 AEAD_State[42] | Perm_row_3[ 6] 55 +; 0x00 AEAD_State[43] | Perm_row_3[ 7] 55 +; 0x00 AEAD_State[44] | Perm_row_3[ 8] 55 +; 0x00 AEAD_State[45] | Perm_row_3[ 9] 55 +; 0x00 AEAD_State[46] | Perm_row_3[10] 55 +; 0x00 ^0x80 AEAD_State[47] | ^0x80 Perm_row_3[11] <<< 55 diff --git a/knot/Implementations/crypto_hash/knot384/avr8_lowrom/hash.c b/knot/Implementations/crypto_hash/knot384/avr8_lowrom/hash.c new file mode 100644 index 0000000..dbbe4df --- /dev/null +++ b/knot/Implementations/crypto_hash/knot384/avr8_lowrom/hash.c @@ -0,0 +1,32 @@ +#include +#include +#include +#include +#include "api.h" +#include "crypto_hash.h" + +extern void crypto_hash_asm( + unsigned char *out, + const unsigned char *in, + unsigned char inlen + ); + +int crypto_hash( + unsigned char *out, + const unsigned char *in, + unsigned long long inlen +) +{ + /* + ... + ... the code for the hash function implementation goes here + ... generating a hash value out[0],out[1],...,out[CRYPTO_BYTES-1] + ... from a message in[0],in[1],...,in[in-1] + ... + ... return 0; + */ + + crypto_hash_asm(out, in, inlen); + + return 0; +} \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot384/avr8_lowrom/knot256.h b/knot/Implementations/crypto_hash/knot384/avr8_lowrom/knot256.h new file mode 100644 index 0000000..d16bf8c --- /dev/null +++ b/knot/Implementations/crypto_hash/knot384/avr8_lowrom/knot256.h @@ -0,0 +1,197 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by KNOT Team * +; ********************************************** +; +#include "assist.h" + +Permutation: + PUSH_CONFLICT + mov rcnt, rn + + ldi rc, 0x01 + ldi YH, hi8(SRAM_STATE + 3 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 3 * ROW_INBYTES) + ld x30, Y+ + ld x31, Y+ + ld x32, Y+ + ld x33, Y+ + ld x34, Y+ + ld x35, Y+ + ld x36, Y+ + ld x37, Y+ + +round_loop_start: + rjmp AddRC_SubColumns_Start + +load_columns_table: + rjmp load_column0 + rjmp load_column1 + rjmp load_column2 + rjmp load_column3 + rjmp load_column4 + rjmp load_column5 + rjmp load_column6 + rjmp load_column7 + rjmp amend_shiftRow + +load_column0: + mov x3j, x30 + rjmp Sbox_one_column +load_column1: + mov x30, x3j + mov x3j, x31 + rjmp Sbox_one_column +load_column2: + mov x31, x3j + mov x3j, x32 + rjmp Sbox_one_column +load_column3: + mov x32, x3j + mov x3j, x33 + rjmp Sbox_one_column +load_column4: + mov x33, x3j + mov x3j, x34 + rjmp Sbox_one_column +load_column5: + mov x34, x3j + mov x3j, x35 + rjmp Sbox_one_column +load_column6: + mov x35, x3j + mov x3j, x36 + rjmp Sbox_one_column +load_column7: + mov x36, x3j + mov x3j, x37 + rjmp Sbox_one_column + +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) +LFSR_table: + rjmp LFSR6 + rjmp LFSR7 +LFSR6: + LFSR6_MACRO + rjmp LFSR_DONE +LFSR7: + LFSR7_MACRO + rjmp LFSR_DONE +#endif + +;;;;;;;;;;;;;;;;;;;;;;;; Real Start +AddRC_SubColumns_Start: + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + clr ccnt + ld x0j, Y + eor x0j, rc + +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) + ldi ZL, pm_lo8(LFSR_table) + ldi ZH, pm_hi8(LFSR_table) + sbrc AEDH, 2 ; AEDH[2] = 0 for AEAD and AEDH[1] = 1 for HASH + adiw ZL, 1 + ijmp +LFSR_DONE: +#elif defined(CRYPTO_AEAD) + LFSR6_MACRO ; only AEAD +#else + LFSR7_MACRO ; only HASH +#endif + + ldd x1j, Y + ROW_INBYTES + ldd x2j, Y + 2 * ROW_INBYTES + ldi ZL, pm_lo8(load_columns_table) + ldi ZH, pm_hi8(load_columns_table) + ijmp +Sbox_one_column: + Sbox x0j, x1j, x2j, x3j + + ; 7 6 5 4 3 2 1 0 + ; -- -- -- -- -- -- -- x- 0 + ; -- -- -- -- -- -- -- x' 0 + ; -- -- -- -- -- -- x- -- 1 + ; -- -- -- -- x' -- -- -- 3 + ; 4 3 2 1 0 7 6 5 + ; Store a byte to Row 0 + st Y, x0j + ; Store a byte combined with ShiftRow1 + lsl t1j + mov t1j, x1j ; back up the last updated byte in t1j, to be used in shiftRow1 (1 bit left) + rol x1j + std Y + ROW_INBYTES, x1j + ; Store a byte combined with ShiftRow2 + inc ccnt + cpi ccnt, ROW_INBYTES + breq ROW2_WRAP + ldd t2j, Y + 2 * ROW_INBYTES + 1 ; load next byte, the last updated byte needed to be shifted to the address of the next bytes + std Y + 2 * ROW_INBYTES + 1, x2j + mov x2j, t2j + jmp NO_ROW2_WRAP +ROW2_WRAP: + std Y + ROW_INBYTES + 1, x2j + ; remain ShiftRow3 to be done at 'amend_shiftRow' +NO_ROW2_WRAP: + adiw YL, 1 + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + + adiw ZL, 1 + ijmp + +amend_shiftRow: + ldi YH, hi8(SRAM_STATE + ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + ROW_INBYTES) + + ld x1j, Y + bst t1j, 7 + bld x1j, 0 + st Y, x1j + + ; <<< 1 + mov x37, x3j + rol x3j + rol x30 + rol x31 + rol x32 + rol x33 + rol x34 + rol x35 + rol x36 + rol x37 + ; <<< 24 + ; 7 6 5 4 3 2 1 0 => 4 3 2 1 0 7 6 5 + mov x3j, x30 + mov x30, x35 + mov x35, x32 + mov x32, x37 + mov x37, x34 + mov x34, x31 + mov x31, x36 + mov x36, x33 + mov x33, x3j + + dec rcnt + breq round_loop_end + rjmp round_loop_start + +round_loop_end: + ldi YH, hi8(SRAM_STATE + 3 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 3 * ROW_INBYTES) + st Y+, x30 + st Y+, x31 + st Y+, x32 + st Y+, x33 + st Y+, x34 + st Y+, x35 + st Y+, x36 + st Y+, x37 + + POP_CONFLICT +ret \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot384/avr8_lowrom/knot384.h b/knot/Implementations/crypto_hash/knot384/avr8_lowrom/knot384.h new file mode 100644 index 0000000..65c474a --- /dev/null +++ b/knot/Implementations/crypto_hash/knot384/avr8_lowrom/knot384.h @@ -0,0 +1,219 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by KNOT Team * +; ********************************************** +; +#include "assist.h" + +Permutation: + PUSH_CONFLICT + mov rcnt, rn + + ldi rc, 0x01 + ldi YH, hi8(SRAM_STATE + 3 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 3 * ROW_INBYTES) + ld x30, Y+ + ld x31, Y+ + ld x32, Y+ + ld x33, Y+ + ld x34, Y+ + ld x35, Y+ + ld x36, Y+ + ld x37, Y+ + ld x38, Y+ + ld x39, Y+ + ld x3a, Y+ + ld x3b, Y+ + +round_loop_start: + rjmp AddRC_SubColumns_Start + +load_columns_table: + rjmp load_column0 + rjmp load_column1 + rjmp load_column2 + rjmp load_column3 + rjmp load_column4 + rjmp load_column5 + rjmp load_column6 + rjmp load_column7 + rjmp load_column8 + rjmp load_column9 + rjmp load_columna + rjmp load_columnb + rjmp amend_shiftRow + +load_column0: + mov x3j, x30 + rjmp Sbox_one_column +load_column1: + mov x30, x3j + mov x3j, x31 + rjmp Sbox_one_column +load_column2: + mov x31, x3j + mov x3j, x32 + rjmp Sbox_one_column +load_column3: + mov x32, x3j + mov x3j, x33 + rjmp Sbox_one_column +load_column4: + mov x33, x3j + mov x3j, x34 + rjmp Sbox_one_column +load_column5: + mov x34, x3j + mov x3j, x35 + rjmp Sbox_one_column +load_column6: + mov x35, x3j + mov x3j, x36 + rjmp Sbox_one_column +load_column7: + mov x36, x3j + mov x3j, x37 + rjmp Sbox_one_column +load_column8: + mov x37, x3j + mov x3j, x38 + rjmp Sbox_one_column +load_column9: + mov x38, x3j + mov x3j, x39 + rjmp Sbox_one_column +load_columna: + mov x39, x3j + mov x3j, x3a + rjmp Sbox_one_column +load_columnb: + mov x3a, x3j + mov x3j, x3b + rjmp Sbox_one_column + +;;;;;;;;;;;;;;;;;;;;;;;; Real Start +AddRC_SubColumns_Start: + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + ldi ZL, pm_lo8(load_columns_table) + ldi ZH, pm_hi8(load_columns_table) + clr ccnt + ld x0j, Y + eor x0j, rc + LFSR7_MACRO + + ldd x1j, Y + ROW_INBYTES + ldd x2j, Y + 2 * ROW_INBYTES + ijmp +Sbox_one_column: + Sbox x0j, x1j, x2j, x3j + + ; b a 9 8 7 6 5 4 3 2 1 0 + ; -- -- -- -- -- -- -- -- -- -- -- x- 0 + ; -- -- -- -- -- -- -- -- -- -- -- x' 0 + ; -- -- -- -- -- -- -- -- -- -- x- -- 1 + ; -- -- -- -- x' -- -- -- -- -- -- -- 7 + ; 4 3 2 1 0 b a 9 8 7 6 5 + ; Store a byte to Row 0 + st Y, x0j + ; Store a byte combined with ShiftRow 1 + lsl t1j + mov t1j, x1j ; back up the last updated byte in t1j, to be used in shiftRow1 (1 bit left) + rol x1j + std Y + ROW_INBYTES, x1j + ; Store a byte combined with ShiftRow 2 + inc ccnt + cpi ccnt, ROW_INBYTES + breq ROW2_WRAP + ldd t2j, Y + 2 * ROW_INBYTES + 1 ; load next byte, the last updated byte needed to be shifted to the address of the next bytes + std Y + 2 * ROW_INBYTES + 1, x2j + mov x2j, t2j + jmp NO_ROW2_WRAP +ROW2_WRAP: + std Y + ROW_INBYTES + 1, x2j + ; remain ShiftRow3 to be done at 'amend_shiftRow' +NO_ROW2_WRAP: + adiw YL, 1 + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + + adiw ZL, 1 + ijmp + +amend_shiftRow: + ldi YH, hi8(SRAM_STATE + ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + ROW_INBYTES) + + ld x1j, Y + bst t1j, 7 + bld x1j, 0 + st Y, x1j + + ; >>> 1 + mov x3b, x3j + ror x3j + ror x3a + ror x39 + ror x38 + ror x37 + ror x36 + ror x35 + ror x34 + ror x33 + ror x32 + ror x31 + ror x30 + ror x3b + ; <<< 56 + ; b a 9 8 7 6 5 4 3 2 1 0 => 4 3 2 1 0 b a 9 8 7 6 5 + ;mov x3j, x30 + ;mov x30, x35 + ;mov x35, x32 + ;mov x32, x37 + ;mov x37, x34 + ;mov x34, x31 + ;mov x31, x36 + ;mov x36, x33 + ;mov x33, x3j + mov x3j, x30 + mov x30, x35 + mov x35, x3a + mov x3a, x33 + mov x33, x38 + mov x38, x31 + mov x31, x36 + mov x36, x3b + mov x3b, x34 + mov x34, x39 + mov x39, x32 + mov x32, x37 + mov x37, x3j + + dec rcnt + breq round_loop_end + rjmp round_loop_start + +round_loop_end: + + ldi YH, hi8(SRAM_STATE + 3 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 3 * ROW_INBYTES) + st Y+, x30 + st Y+, x31 + st Y+, x32 + st Y+, x33 + st Y+, x34 + st Y+, x35 + st Y+, x36 + st Y+, x37 + st Y+, x38 + st Y+, x39 + st Y+, x3a + st Y+, x3b + + POP_CONFLICT +ret \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot384/avr8_lowrom/knot512.h b/knot/Implementations/crypto_hash/knot384/avr8_lowrom/knot512.h new file mode 100644 index 0000000..d24b353 --- /dev/null +++ b/knot/Implementations/crypto_hash/knot384/avr8_lowrom/knot512.h @@ -0,0 +1,275 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by KNOT Team * +; ********************************************** +; +#include "assist.h" + +Permutation: + PUSH_CONFLICT + mov rcnt, rn + + ldi rc, 0x01 + ldi YH, hi8(SRAM_STATE + 3 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 3 * ROW_INBYTES) + ld x30, Y+ + ld x31, Y+ + ld x32, Y+ + ld x33, Y+ + ld x34, Y+ + ld x35, Y+ + ld x36, Y+ + ld x37, Y+ + ld x38, Y+ + ld x39, Y+ + ld x3a, Y+ + ld x3b, Y+ + ld x3c, Y+ + ld x3d, Y+ + ld x3e, Y+ + ld x3f, Y+ + +round_loop_start: + rjmp AddRC_SubColumns_Start + +load_columns_table: + rjmp load_column0 + rjmp load_column1 + rjmp load_column2 + rjmp load_column3 + rjmp load_column4 + rjmp load_column5 + rjmp load_column6 + rjmp load_column7 + rjmp load_column8 + rjmp load_column9 + rjmp load_columna + rjmp load_columnb + rjmp load_columnc + rjmp load_columnd + rjmp load_columne + rjmp load_columnf + rjmp amend_shiftRow + +load_column0: + mov x3j, x30 + rjmp Sbox_one_column +load_column1: + mov x30, x3j + mov x3j, x31 + rjmp Sbox_one_column +load_column2: + mov x31, x3j + mov x3j, x32 + rjmp Sbox_one_column +load_column3: + mov x32, x3j + mov x3j, x33 + rjmp Sbox_one_column +load_column4: + mov x33, x3j + mov x3j, x34 + rjmp Sbox_one_column +load_column5: + mov x34, x3j + mov x3j, x35 + rjmp Sbox_one_column +load_column6: + mov x35, x3j + mov x3j, x36 + rjmp Sbox_one_column +load_column7: + mov x36, x3j + mov x3j, x37 + rjmp Sbox_one_column +load_column8: + mov x37, x3j + mov x3j, x38 + rjmp Sbox_one_column +load_column9: + mov x38, x3j + mov x3j, x39 + rjmp Sbox_one_column +load_columna: + mov x39, x3j + mov x3j, x3a + rjmp Sbox_one_column +load_columnb: + mov x3a, x3j + mov x3j, x3b + rjmp Sbox_one_column +load_columnc: + mov x3b, x3j + mov x3j, x3c + rjmp Sbox_one_column +load_columnd: + mov x3c, x3j + mov x3j, x3d + rjmp Sbox_one_column +load_columne: + mov x3d, x3j + mov x3j, x3e + rjmp Sbox_one_column +load_columnf: + mov x3e, x3j + mov x3j, x3f + rjmp Sbox_one_column + +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) +LFSR_table: + rjmp LFSR7 + rjmp LFSR8 +LFSR7: + LFSR7_MACRO + rjmp LFSR_DONE +LFSR8: + LFSR8_MACRO + rjmp LFSR_DONE +#endif + +;;;;;;;;;;;;;;;;;;;;;;;; Real Start +AddRC_SubColumns_Start: + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + clr ccnt + ld x0j, Y + eor x0j, rc + +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) + ldi ZL, pm_lo8(LFSR_table) + ldi ZH, pm_hi8(LFSR_table) + sbrc AEDH, 2 ; AEDH[2] = 0 for AEAD and AEDH[1] = 1 for HASH + adiw ZL, 1 + ijmp +LFSR_DONE: +#elif defined(CRYPTO_AEAD) + LFSR7_MACRO ; only AEAD +#else + LFSR8_MACRO ; only HASH +#endif + + ldd x1j, Y + ROW_INBYTES + ldd x2j, Y + 2 * ROW_INBYTES + ldd t2j, Y + 2 * ROW_INBYTES + 1 + ldi ZL, pm_lo8(load_columns_table) + ldi ZH, pm_hi8(load_columns_table) + ijmp +Sbox_one_column: + Sbox x0j, x1j, x2j, x3j + + ; f e d c b a 9 8 7 6 5 4 3 2 1 0 + ; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- x- 0 + ; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- x' 0 + ; -- -- -- -- -- -- -- -- -- -- -- -- -- x- -- -- 2 + ; -- -- -- -- -- -- -- -- -- -- -- -- x' -- -- -- 3 + ; c b a 9 8 7 6 5 4 3 2 1 0 f e d + ; Store a byte to Row 0 + st Y, x0j + ; Store a byte combined with ShiftRow1 + lsl t1j + mov t1j, x1j ; back up the last updated byte in t1j, to be used in shiftRow1 (1 bit left) + rol x1j + std Y + ROW_INBYTES, x1j + ; Store a byte combined with ShiftRow2 + inc ccnt + cpi ccnt, ROW_INBYTES - 1 + brsh ROW2_WRAP + ldd tmp0, Y + 2 * ROW_INBYTES + 2 ; load next byte, the last updated byte needed to be shifted to the address of the next bytes + std Y + 2 * ROW_INBYTES + 2, x2j + mov x2j, t2j + mov t2j, tmp0 + jmp NO_ROW2_WRAP +ROW2_WRAP: + std Y + ROW_INBYTES + 2, x2j + mov x2j, t2j + + ; remain ShiftRow3 to be done at 'amend_shiftRow' +NO_ROW2_WRAP: + adiw YL, 1 + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + + adiw ZL, 1 + ijmp + +amend_shiftRow: + ldi YH, hi8(SRAM_STATE + ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + ROW_INBYTES) + + ld x1j, Y + bst t1j, 7 + bld x1j, 0 + st Y, x1j + + ; <<< 1 + mov x3f, x3j + rol x3j + rol x30 + rol x31 + rol x32 + rol x33 + rol x34 + rol x35 + rol x36 + rol x37 + rol x38 + rol x39 + rol x3a + rol x3b + rol x3c + rol x3d + rol x3e + rol x3f + ; <<< 24 + ; f e d c b a 9 8 7 6 5 4 3 2 1 0 => + ; c b a 9 8 7 6 5 4 3 2 1 0 f e d + mov x3j, x30 + mov x30, x3d + mov x3d, x3a + mov x3a, x37 + mov x37, x34 + mov x34, x31 + mov x31, x3e + mov x3e, x3b + mov x3b, x38 + mov x38, x35 + mov x35, x32 + mov x32, x3f + mov x3f, x3c + mov x3c, x39 + mov x39, x36 + mov x36, x33 + mov x33, x3j + + dec rcnt + breq round_loop_end + rjmp round_loop_start + +round_loop_end: + + ldi YH, hi8(SRAM_STATE + 3 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 3 * ROW_INBYTES) + st Y+, x30 + st Y+, x31 + st Y+, x32 + st Y+, x33 + st Y+, x34 + st Y+, x35 + st Y+, x36 + st Y+, x37 + st Y+, x38 + st Y+, x39 + st Y+, x3a + st Y+, x3b + st Y+, x3c + st Y+, x3d + st Y+, x3e + st Y+, x3f + + POP_CONFLICT +ret \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot384/avr8_lowrom/permutation.h b/knot/Implementations/crypto_hash/knot384/avr8_lowrom/permutation.h new file mode 100644 index 0000000..a57c5d3 --- /dev/null +++ b/knot/Implementations/crypto_hash/knot384/avr8_lowrom/permutation.h @@ -0,0 +1,109 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by KNOT Team * +; ********************************************** +; + +; +; ============================================ +; R E G I S T E R D E F I N I T I O N S +; ============================================ +; + +#define mclen r16 +#define radlen r17 +#define tcnt r17 +#define tmp0 r20 +#define tmp1 r21 +#define cnt0 r22 +#define rn r23 +#define rate r24 + +; +; ; AEDH = 0b000: for authenticate AD +; ; AEDH = 0b001: for encryption +; ; AEDH = 0b011: for decryption +; ; AEDH = 0b100: for hash +; #define AEDH r25 ; Register used globally within this program +; +; #define x30 r0 ; Register used without overlapping +; #define x31 r1 ; Register used without overlapping +; #define x32 r2 ; Register used without overlapping +; #define x33 r3 ; Register used without overlapping +; #define x34 r4 ; Register used without overlapping +; #define x35 r5 ; Register used without overlapping +; #define x36 r6 ; Register used without overlapping +; #define x37 r7 ; Register used without overlapping +; #define x38 r8 ; Register used without overlapping +; #define x39 r9 ; Register used without overlapping +; #define x3a r10 ; Register used without overlapping +; #define x3b r11 ; Register used without overlapping +; #define x3c r12 ; Register used without overlapping +; #define x3d r13 ; Register used without overlapping +; #define x3e r14 ; Register used without overlapping +; #define x3f r15 ; Register used without overlapping +; +; #define x0j r16 ; Register used overlapped, should be backed up before using +; #define x1j r17 ; Register used overlapped, should be backed up before using +; #define x2j r18 ; Register used overlapped, should be backed up before using +; #define x3j r19 ; Register used overlapped, should be backed up before using +; +; ; t2j used in knot512 to keep one byte in Row2 (because of rotating 16-bit), +; ; will not be interupt with LFSR which uses the overlapped register tmp1 +; #define t2j r21 ; Temporary register, used freely +; #define t1j r22 ; Temporary register, used freely +; #define t3j r23 ; Temporary register, used freely +; +; #define rc r24 ; Register used overlapped, should be backed up before using +; #define rcnt r26 ; Register used overlapped, should be backed up before using +; #define ccnt r27 ; Register used overlapped, should be backed up before using + +#define AEDH r25 +#define x30 r0 +#define x31 r1 +#define x32 r2 +#define x33 r3 +#define x34 r4 +#define x35 r5 +#define x36 r6 +#define x37 r7 +#define x38 r8 +#define x39 r9 +#define x3a r10 +#define x3b r11 +#define x3c r12 +#define x3d r13 +#define x3e r14 +#define x3f r15 + +#define x0j r16 +#define x1j r17 +#define x2j r18 +#define x3j r19 + +; t2j used in knot512 to keep one byte in Row2 (because of rotating 16-bit), +; will not be interupt with LFSR which uses the overlapped register tmp1 +#define t2j r21 +#define t1j r22 +#define t3j r23 + +#define rc r24 +#define rcnt r26 +#define ccnt r27 + +#if (STATE_INBITS==256) +#include "knot256.h" +#elif (STATE_INBITS==384) +#include "knot384.h" +#elif (STATE_INBITS==512) +#include "knot512.h" +#else +#error "Not specified key size and state size" +#endif + + diff --git a/knot/Implementations/crypto_hash/knot384/avr8_speed/api.h b/knot/Implementations/crypto_hash/knot384/avr8_speed/api.h new file mode 100644 index 0000000..1656d0c --- /dev/null +++ b/knot/Implementations/crypto_hash/knot384/avr8_speed/api.h @@ -0,0 +1 @@ +#define CRYPTO_BYTES 48 \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot384/avr8_speed/assist.h b/knot/Implementations/crypto_hash/knot384/avr8_speed/assist.h new file mode 100644 index 0000000..f95a717 --- /dev/null +++ b/knot/Implementations/crypto_hash/knot384/avr8_speed/assist.h @@ -0,0 +1,86 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.1 2020 by KNOT Team * +; ********************************************** +; +.macro PUSH_CONFLICT + push r16 + push r17 + push r18 + push r19 + + push r23 + push r24 + push r25 + push r26 + push r27 + push r28 + push r29 + push r30 + push r31 +.endm + +.macro POP_CONFLICT + pop r31 + pop r30 + pop r29 + pop r28 + pop r27 + pop r26 + pop r25 + pop r24 + pop r23 + + pop r19 + pop r18 + pop r17 + pop r16 +.endm + +.macro PUSH_ALL + push r2 + push r3 + push r4 + push r5 + push r6 + push r7 + push r8 + push r9 + push r10 + push r11 + push r12 + push r13 + push r14 + push r15 + push r16 + push r17 + push r28 + push r29 +.endm + +.macro POP_ALL + pop r29 + pop r28 + pop r17 + pop r16 + pop r15 + pop r14 + pop r13 + pop r12 + pop r11 + pop r10 + pop r9 + pop r8 + pop r7 + pop r6 + pop r5 + pop r4 + pop r3 + pop r2 + clr r1 +.endm \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot384/avr8_speed/config.h b/knot/Implementations/crypto_hash/knot384/avr8_speed/config.h new file mode 100644 index 0000000..c9f6bf2 --- /dev/null +++ b/knot/Implementations/crypto_hash/knot384/avr8_speed/config.h @@ -0,0 +1,131 @@ +#ifndef __CONFIG_H__ +#define __CONFIG_H__ + +//#define CRYPTO_AEAD +#define CRYPTO_HASH + +#define MAX_MESSAGE_LENGTH 128 + +#define STATE_INBITS 384 +/* For CRYPTO_AEAD */ +#define CRYPTO_KEYBITS 192 +/* For CRYPTO_HASH */ +#define CRYPTO_BITS 384 + +#define STATE_INBYTES ((STATE_INBITS + 7) / 8) +#define ROW_INBITS ((STATE_INBITS + 3) / 4) +#define ROW_INBYTES ((ROW_INBITS + 7) / 8) + +/* For CRYPTO_AEAD */ +#define CRYPTO_KEYBYTES ((CRYPTO_KEYBITS + 7) / 8) +#define CRYPTO_NSECBYTES 0 +#define CRYPTO_NPUBBYTES CRYPTO_KEYBYTES +#define CRYPTO_ABYTES CRYPTO_KEYBYTES +#define CRYPTO_NOOVERLAP 1 + +#define MAX_ASSOCIATED_DATA_LENGTH 32 +#define MAX_CIPHER_LENGTH (MAX_MESSAGE_LENGTH + CRYPTO_ABYTES) + +#define TAG_MATCH 0 +#define TAG_UNMATCH -1 +#define OTHER_FAILURES -2 + +/* For CRYPTO_HASH */ +#define CRYPTO_BYTES ((CRYPTO_BITS + 7) / 8) + + + +#define DOMAIN_BITS 0x80 +#define PAD_BITS 0x01 +#define S384_R192_BITS 0x80 + +#if (STATE_INBITS==256) +#define C1 1 +#define C2 8 +#define C3 25 +#elif (STATE_INBITS==384) +#define C1 1 +#define C2 8 +#define C3 55 +#elif (STATE_INBITS==512) +#define C1 1 +#define C2 16 +#define C3 25 +#else +#error "Not specified state size" +#endif + +#ifdef CRYPTO_AEAD +/* For CRYPTO_AEAD */ +#define KEY_INBITS (CRYPTO_KEYBYTES * 8) +#define KEY_INBYTES (CRYPTO_KEYBYTES) + +#define NONCE_INBITS (CRYPTO_NPUBBYTES * 8) +#define NONCE_INBYTES (CRYPTO_NPUBBYTES) + +#define TAG_INBITS (CRYPTO_ABYTES * 8) +#define TAG_INBYTES (CRYPTO_ABYTES) + +#if (KEY_INBITS==128) && (STATE_INBITS==256) +#define RATE_INBITS 64 +#define NR_0 52 +#define NR_i 28 +#define NR_f 32 +#elif (KEY_INBITS==128) && (STATE_INBITS==384) +#define RATE_INBITS 192 +#define NR_0 76 +#define NR_i 28 +#define NR_f 32 +#elif (KEY_INBITS==192) && (STATE_INBITS==384) +#define RATE_INBITS 96 +#define NR_0 76 +#define NR_i 40 +#define NR_f 44 +#elif (KEY_INBITS==256) && (STATE_INBITS==512) +#define RATE_INBITS 128 +#define NR_0 100 +#define NR_i 52 +#define NR_f 56 +#else +#error "Not specified key size and state size" +#endif + +#define RATE_INBYTES ((RATE_INBITS + 7) / 8) +#define SQUEEZE_RATE_INBYTES TAG_INBYTES + +#endif + +#ifdef CRYPTO_HASH +/* For CRYPTO_HASH */ +#define HASH_DIGEST_INBITS (CRYPTO_BYTES * 8) + +#if (HASH_DIGEST_INBITS==256) && (STATE_INBITS==256) +#define HASH_RATE_INBITS 32 +#define HASH_SQUEEZE_RATE_INBITS 128 +#define NR_h 68 +#elif (HASH_DIGEST_INBITS==256) && (STATE_INBITS==384) +#define HASH_RATE_INBITS 128 +#define HASH_SQUEEZE_RATE_INBITS 128 +#define NR_h 80 +#elif (HASH_DIGEST_INBITS==384) && (STATE_INBITS==384) +#define HASH_RATE_INBITS 48 +#define HASH_SQUEEZE_RATE_INBITS 192 +#define NR_h 104 +#elif (HASH_DIGEST_INBITS==512) && (STATE_INBITS==512) +#define HASH_RATE_INBITS 64 +#define HASH_SQUEEZE_RATE_INBITS 256 +#define NR_h 140 +#else +#error "Not specified hash digest size and state size" +#endif + +#define HASH_RATE_INBYTES ((HASH_RATE_INBITS + 7) / 8) +#define HASH_SQUEEZE_RATE_INBYTES ((HASH_SQUEEZE_RATE_INBITS + 7) / 8) + +#endif + +#define TAG_MATCH 0 +#define TAG_UNMATCH -1 +#define OTHER_FAILURES -2 + +#endif \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot384/avr8_speed/crypto_hash.h b/knot/Implementations/crypto_hash/knot384/avr8_speed/crypto_hash.h new file mode 100644 index 0000000..342a639 --- /dev/null +++ b/knot/Implementations/crypto_hash/knot384/avr8_speed/crypto_hash.h @@ -0,0 +1,13 @@ +#ifdef __cplusplus +extern "C" { +#endif + +int crypto_hash( + unsigned char *out, + const unsigned char *in, + unsigned long long inlen + ); + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot384/avr8_speed/encrypt.c b/knot/Implementations/crypto_hash/knot384/avr8_speed/encrypt.c new file mode 100644 index 0000000..baf0a3b --- /dev/null +++ b/knot/Implementations/crypto_hash/knot384/avr8_speed/encrypt.c @@ -0,0 +1,106 @@ +#include +#include +#include +#include +#include "config.h" + +extern void crypto_aead_encrypt_asm( + unsigned char *c, + const unsigned char *m, + unsigned char mlen, + const unsigned char *ad, + unsigned char adlen, + const unsigned char *npub, + const unsigned char *k + ); + +extern int crypto_aead_decrypt_asm( + unsigned char *m, + const unsigned char *c, + unsigned char clen, + const unsigned char *ad, + unsigned char adlen, + const unsigned char *npub, + const unsigned char *k + ); + +extern void crypto_hash_asm( + unsigned char *out, + const unsigned char *in, + unsigned char inlen + ); + + +int crypto_aead_encrypt( + unsigned char *c, unsigned long long *clen, + const unsigned char *m, unsigned long long mlen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k + ) +{ + /* + ... + ... the code for the cipher implementation goes here, + ... generating a ciphertext c[0],c[1],...,c[*clen-1] + ... from a plaintext m[0],m[1],...,m[mlen-1] + ... and associated data ad[0],ad[1],...,ad[adlen-1] + ... and nonce npub[0],npub[1],.. + ... and secret key k[0],k[1],... + ... the implementation shall not use nsec + ... + ... return 0; + */ + + (void)nsec; + + crypto_aead_encrypt_asm(c, m, mlen, ad, adlen, npub, k); + + *clen = mlen + TAG_INBYTES; + return 0; +} + + + +int crypto_aead_decrypt( + unsigned char *m, unsigned long long *mlen, + unsigned char *nsec, + const unsigned char *c, unsigned long long clen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k + ) +{ + /* + ... + ... the code for the AEAD implementation goes here, + ... generating a plaintext m[0],m[1],...,m[*mlen-1] + ... and secret message number nsec[0],nsec[1],... + ... from a ciphertext c[0],c[1],...,c[clen-1] + ... and associated data ad[0],ad[1],...,ad[adlen-1] + ... and nonce number npub[0],npub[1],... + ... and secret key k[0],k[1],... + ... + ... return 0; + */ + unsigned long long mlen_; + unsigned char tag_is_match; + + (void)nsec; + if (clen < CRYPTO_ABYTES) { + return -1; + } + mlen_ = clen - CRYPTO_ABYTES; + + tag_is_match = crypto_aead_decrypt_asm(m, c, mlen_, ad, adlen, npub, k); + + if (tag_is_match != 0) + { + memset(m, 0, (size_t)mlen_); + return -1; + } + + *mlen = mlen_; + return 0; +} \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot384/avr8_speed/encrypt_core.S b/knot/Implementations/crypto_hash/knot384/avr8_speed/encrypt_core.S new file mode 100644 index 0000000..bd74f93 --- /dev/null +++ b/knot/Implementations/crypto_hash/knot384/avr8_speed/encrypt_core.S @@ -0,0 +1,555 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.1 2020 by KNOT Team * +; ********************************************** +; + +; +; ============================================ +; S R A M D E F I N I T I O N S +; ============================================ +; +#include +#include "config.h" + +.section .noinit + SRAM_STATE: .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#if (STATE_INBYTES > 32) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif +#if (STATE_INBYTES > 48) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif + SRAM_MESSAGE_OUT_ADDR: .BYTE 0, 0 + SRAM_MESSAGE_IN_ADDR: .BYTE 0, 0 + SRAM_MESSAGE_IN_LEN: .BYTE 0, 0 +#ifdef CRYPTO_AEAD +; For CRYPTO_AEAD + SRAM_ASSOCIATED_DATA_ADDR: .BYTE 0, 0 + SRAM_ADLEN: .BYTE 0, 0 + SRAM_NONCE_ADDR: .BYTE 0, 0 + SRAM_KEY_ADDR: .BYTE 0, 0 + + SRAM_ADDITIONAL: + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#if (CRYPTO_ABYTES > 16) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif +#if (CRYPTO_ABYTES > 24) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif + +#endif + +.section .text + +#include "permutation.h" + +; require YH:YL be the address of the current associated data/cipher/message block +; for enc and dec, store ciphertext or plaintext +; require ZH:ZL be the address of the current cipher/message block +.macro XOR_to_State_ENCDEC + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + mov cnt0, rate +XOR_to_State_loop_ENCDEC: + ld tmp0, Y+ ; plaintext/ciphertext + ld tmp1, X ; state + eor tmp1, tmp0 ; ciphertext/plaintext + st Z+, tmp1 ; store ciphertext/plaintext + sbrc AEDH, 1 ; test auth/enc or dec, if AEDH[1] == 0, skip repalce state byte + mov tmp1, tmp0 ; if dec, replace state + st X+, tmp1 ; store state byte + dec cnt0 + brne XOR_to_State_loop_ENCDEC +; YH:YL are now the address of the next associated data block +.endm + +; require YH:YL be the address of the current associated data/cipher/message block +; for enc and dec, store ciphertext or plaintext +; require ZH:ZL be the address of the current cipher/message block +.macro XOR_to_State_AUTH + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + mov cnt0, rate +XOR_to_State_loop_AUTH: + ld tmp0, Y+ ; plaintext/ciphertext + ld tmp1, X ; state + eor tmp1, tmp0 ; ciphertext/plaintext + st X+, tmp1 ; store state byte + dec cnt0 + brne XOR_to_State_loop_AUTH +; YH:YL are now the address of the next associated data block +.endm + + + +; require YH:YL pointed to the input data +; require ZH:ZL pointed to the output data +; require cnt0 containes the nubmer of bytes in source data +; require number of bytes in source data less than rate, i.e., 0 <= cnt0 < rate +; +; the 0th bit in AEDH is used to distinguish (auth AD) or (enc/dec M/C): +; AEDH[0] = 0 for (auth AD), AEDH[0] = 1 for (enc/dec M/C) +; the 1th bit in AEDH is used to distinguish (auth AD/enc M) or (dec C): +; AEDH[1] = 0 for (auth AD/enc M), AEDH[1] = 1 for (dec C) +; AEDH = 0b000 for (auth AD) +; AEDH = 0b001 for (enc M) +; AEDH = 0b011 for (dec C) +Pad_XOR_to_State: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + tst cnt0 + breq XOR_padded_data +XOR_source_data_loop: + ld tmp0, Y+ ; plaintext/ciphertext + ld tmp1, X ; state + eor tmp1, tmp0 ; ciphertext/plaintext + sbrc AEDH, 0 ; test auth or enc/dec, if AEDH[0] == 0, skip store result + st Z+, tmp1 ; store ciphertext/plaintext + sbrc AEDH, 1 ; test auth/enc or dec, if AEDH[1] == 0, skip repalce state byte + mov tmp1, tmp0 ; if dec, replace state + st X+, tmp1 ; store state byte + dec cnt0 + brne XOR_source_data_loop +XOR_padded_data: + ldi tmp0, PAD_BITS + ld tmp1, X + eor tmp1, tmp0 + st X, tmp1 +ret + +AddDomain: + ldi XH, hi8(SRAM_STATE + STATE_INBYTES - 1) + ldi XL, lo8(SRAM_STATE + STATE_INBYTES - 1) + ldi tmp0, DOMAIN_BITS + ld tmp1, X + eor tmp0, tmp1 + st X, tmp0 +ret + +; require ZH:ZL be the address of the destination +EXTRACT_from_State: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + mov tmp1, rate +EXTRACT_from_State_loop: + ld tmp0, X+ + st Z+, tmp0 + dec tmp1 + brne EXTRACT_from_State_loop +ret + +AUTH: + tst radlen + breq AUTH_end + + cp radlen, rate + brlo auth_ad_padded_block + +auth_ad_loop: + XOR_to_State_AUTH + rcall Permutation + sub radlen, rate + cp radlen, rate + brlo auth_ad_padded_block + rjmp auth_ad_loop + +auth_ad_padded_block: + mov cnt0, radlen + rcall Pad_XOR_to_State + rcall Permutation + +AUTH_end: +ret + +#ifdef CRYPTO_AEAD +Initialization: + ldi rn, NR_0 + ldi XL, lo8(SRAM_STATE) + ldi XH, hi8(SRAM_STATE) + + lds YH, SRAM_NONCE_ADDR + lds YL, SRAM_NONCE_ADDR + 1 + ldi cnt0, CRYPTO_NPUBBYTES +load_nonce_loop: + ld tmp0, Y+ + st X+, tmp0 + dec cnt0 + brne load_nonce_loop + + lds YH, SRAM_KEY_ADDR + lds YL, SRAM_KEY_ADDR + 1 + ldi cnt0, CRYPTO_KEYBYTES +load_key_loop: + ld tmp0, Y+ + st X+, tmp0 + dec cnt0 + brne load_key_loop + +#if (STATE_INBITS==384) && (RATE_INBITS==192) + ldi cnt0, (STATE_INBYTES - CRYPTO_NPUBBYTES - CRYPTO_KEYBYTES - 1) + clr tmp0 +empty_state_loop: + st X+, tmp0 + dec cnt0 + brne empty_state_loop + ldi tmp0, S384_R192_BITS + st X+, tmp0 +#endif + + rcall Permutation +ret + +ENC: + tst mclen + breq ENC_end + + cp mclen, rate + brlo enc_padded_block + +enc_loop: + XOR_to_State_ENCDEC + ldi rn, NR_i + rcall Permutation + sub mclen, rate + cp mclen, rate + brlo enc_padded_block + rjmp enc_loop + +enc_padded_block: + mov cnt0, mclen + rcall Pad_XOR_to_State +ENC_end: +ret + +Finalization: + ldi rate, SQUEEZE_RATE_INBYTES + ldi rn, NR_f + rcall Permutation + rcall EXTRACT_from_State +ret + +; void crypto_aead_encrypt_asm( +; unsigned char *c, +; const unsigned char *m, +; unsigned long long mlen, +; const unsigned char *ad, +; unsigned long long adlen, +; const unsigned char *npub, +; const unsigned char *k +; ) +; +; unsigned char *c, is passed in r24:r25 +; const unsigned char *m, is passed in r22:r23 +; unsigned long long mlen, is passed in r20:r21, only LSB (r20) is used +; const unsigned char *ad, is passed in r18:r19 +; unsigned long long adlen, is passed in r16:r17, only LSB (r16) is used +; const unsigned char *npub, is passed in r14:r15 +; const unsigned char *k is passed in r12:r13 +.global crypto_aead_encrypt_asm +crypto_aead_encrypt_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store cipher address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store message address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store message length in SRAM_MESSAGE_IN_LEN + st X+, r20 + st X+, r19 ;store associated data address in SRAM_ASSOCIATED_DATA_ADDR + st X+, r18 + st X+, r17 ;store associated data length in SRAM_ADLEN + st X+, r16 + st X+, r15 ;store nonce address in SRAM_NONCE_ADDR + st X+, r14 + st X+, r13 ;store key address in SRAM_KEY_ADDR + st X+, r12 + mov radlen, r16 + mov mclen, r20 + + rcall Initialization + + ldi rn, NR_i + ldi rate, RATE_INBYTES + ldi AEDH, 0b000 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_ASSOCIATED_DATA_ADDR + lds YL, SRAM_ASSOCIATED_DATA_ADDR + 1 + rcall AUTH + rcall AddDomain + ldi AEDH, 0b001 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_MESSAGE_IN_ADDR + lds YL, SRAM_MESSAGE_IN_ADDR + 1 + lds ZH, SRAM_MESSAGE_OUT_ADDR + lds ZL, SRAM_MESSAGE_OUT_ADDR + 1 + rcall ENC + rcall Finalization + POP_ALL +ret + +; int crypto_aead_decrypt_asm( +; unsigned char *m, +; const unsigned char *c, +; unsigned long long clen, +; const unsigned char *ad, +; unsigned long long adlen, +; const unsigned char *npub, +; const unsigned char *k +; ) +; +; unsigned char *m, is passed in r24:r25 +; const unsigned char *c, is passed in r22:r23 +; unsigned long long clen, is passed in r20:r21, only LSB (r20) is used +; const unsigned char *ad, is passed in r18:r19 +; unsigned long long adlen, is passed in r16:r17, only LSB (r16) is used +; const unsigned char *npub, is passed in r14:r15 +; const unsigned char *k is passed in r12:r13 +.global crypto_aead_decrypt_asm +crypto_aead_decrypt_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store message address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store cipher address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store cipher length in SRAM_MESSAGE_IN_LEN + st X+, r20 + st X+, r19 ;store associated data address in SRAM_ASSOCIATED_DATA_ADDR + st X+, r18 + st X+, r17 ;store associated data length in SRAM_ADLEN + st X+, r16 + st X+, r15 ;store nonce address in SRAM_NONCE_ADDR + st X+, r14 + st X+, r13 ;store key address in SRAM_KEY_ADDR + st X+, r12 + mov radlen, r16 + mov mclen, r20 + + rcall Initialization + + ldi rn, NR_i + ldi rate, RATE_INBYTES + ldi AEDH, 0b000 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_ASSOCIATED_DATA_ADDR + lds YL, SRAM_ASSOCIATED_DATA_ADDR + 1 + rcall AUTH + rcall AddDomain + ldi AEDH, 0b011 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_MESSAGE_IN_ADDR + lds YL, SRAM_MESSAGE_IN_ADDR + 1 + lds ZH, SRAM_MESSAGE_OUT_ADDR + lds ZL, SRAM_MESSAGE_OUT_ADDR + 1 + rcall ENC + + ldi ZH, hi8(SRAM_ADDITIONAL) + ldi ZL, lo8(SRAM_ADDITIONAL) + rcall Finalization + + sbiw ZL, CRYPTO_ABYTES + ldi cnt0, CRYPTO_ABYTES +compare_tag: + ld tmp0, Z+ + ld tmp1, Y+ + cp tmp0, tmp1 + brne return_tag_not_match + dec cnt0 + brne compare_tag + rjmp return_tag_match + +return_tag_not_match: + ldi r25, 0xFF + ldi r24, 0xFF + rjmp crypto_aead_decrypt_end + +return_tag_match: + clr r25 + clr r24 +crypto_aead_decrypt_end: + POP_ALL +ret + +; #ifdef CRYPTO_AEAD +#endif + + +#ifdef CRYPTO_HASH + +; void crypto_hash_asm( +; unsigned char *out, +; const unsigned char *in, +; unsigned long long inlen +; ) +; +; unsigned char *out, is passed in r24:r25 +; const unsigned char *in, is passed in r22:r23 +; unsigned long long inlen, is passed in r20:r21, only LSB (r20) is used +.global crypto_hash_asm +crypto_hash_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store message address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store cipher address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store cipher length in SRAM_MESSAGE_IN_LEN + st X+, r20 + mov mclen, r20 + + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) +#if (STATE_INBITS==384) && (HASH_RATE_INBITS==128) + ldi cnt0, STATE_INBYTES - 1 +#else + ldi cnt0, STATE_INBYTES +#endif + clr tmp0 +zero_state: + st X+, tmp0 + dec cnt0 + brne zero_state + +#if (STATE_INBITS==384) && (HASH_RATE_INBITS==128) + ldi tmp0, S384_R192_BITS + st X+, tmp0 +#endif + + ldi rn, NR_h + ldi AEDH, 0b100 + +HASH_ABSORBING: + mov radlen, mclen + tst radlen + breq EMPTY_M + ldi rate, HASH_RATE_INBYTES + lds YH, SRAM_MESSAGE_IN_ADDR + lds YL, SRAM_MESSAGE_IN_ADDR + 1 + rcall AUTH + rjmp HASH_SQUEEZING + +EMPTY_M: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + ldi tmp0, PAD_BITS + ld tmp1, X + eor tmp1, tmp0 + st X, tmp1 + rcall Permutation + +HASH_SQUEEZING: + ldi rate, HASH_SQUEEZE_RATE_INBYTES + lds ZH, SRAM_MESSAGE_OUT_ADDR + lds ZL, SRAM_MESSAGE_OUT_ADDR + 1 + ldi tcnt, CRYPTO_BYTES +SQUEEZING_loop: + rcall EXTRACT_from_State + subi tcnt, HASH_SQUEEZE_RATE_INBYTES + breq HASH_SQUEEZING_end + rcall Permutation + rjmp SQUEEZING_loop +HASH_SQUEEZING_end: + POP_ALL +ret + +#endif + + +; Byte Order In AVR 8: +; KNOT-AEAD(128, 256, 64): +; N[ 0] AEAD_State[ 0] | Message[ 0] Perm_row_0[0] 0 Tag[ 0] +; N[ 1] AEAD_State[ 1] | Message[ 1] Perm_row_0[1] 0 Tag[ 1] +; N[ 2] AEAD_State[ 2] | Message[ 2] Perm_row_0[2] 0 Tag[ 2] +; N[ 3] AEAD_State[ 3] | Message[ 3] Perm_row_0[3] 0 Tag[ 3] +; N[ 4] AEAD_State[ 4] | Message[ 4] 0x01 Perm_row_0[4] 0 Tag[ 4] +; N[ 5] AEAD_State[ 5] | Message[ 5] 0x00 Perm_row_0[5] 0 Tag[ 5] +; N[ 6] AEAD_State[ 6] | Message[ 6] 0x00 Perm_row_0[6] 0 Tag[ 6] +; N[ 7] AEAD_State[ 7] | Message[ 7] 0x00 Perm_row_0[7] <<< 0 Tag[ 7] +; N[ 8] AEAD_State[ 8] | Perm_row_1[0] 1 +; N[ 9] AEAD_State[ 9] | Perm_row_1[1] 1 +; N[10] AEAD_State[10] | Perm_row_1[2] 1 +; N[11] AEAD_State[11] | Perm_row_1[3] 1 +; N[12] AEAD_State[12] | Perm_row_1[4] 1 +; N[13] AEAD_State[13] | Perm_row_1[5] 1 +; N[14] AEAD_State[14] | Perm_row_1[6] 1 +; N[15] AEAD_State[15] | Perm_row_1[7] <<< 1 +; K[ 0] AEAD_State[16] | Perm_row_2[0] 8 +; K[ 1] AEAD_State[17] | Perm_row_2[1] 8 +; K[ 2] AEAD_State[18] | Perm_row_2[2] 8 +; K[ 3] AEAD_State[19] | Perm_row_2[3] 8 +; K[ 4] AEAD_State[20] | Perm_row_2[4] 8 +; K[ 5] AEAD_State[21] | Perm_row_2[5] 8 +; K[ 6] AEAD_State[22] | Perm_row_2[6] 8 +; K[ 7] AEAD_State[23] | Perm_row_2[7] <<< 8 +; K[ 8] AEAD_State[24] | Perm_row_3[0] 25 +; K[ 9] AEAD_State[25] | Perm_row_3[1] 25 +; K[10] AEAD_State[26] | Perm_row_3[2] 25 +; K[11] AEAD_State[27] | Perm_row_3[3] 25 +; K[12] AEAD_State[28] | Perm_row_3[4] 25 +; K[13] AEAD_State[29] | Perm_row_3[5] 25 +; K[14] AEAD_State[30] | Perm_row_3[6] 25 +; K[15] AEAD_State[31] | ^0x80 Perm_row_3[7] <<< 25 +; +; +; KNOT-AEAD(128, 384, 192): +; Initalization +; N[ 0] AEAD_State[ 0] | Message[ 0] Perm_row_0[ 0] 0 Tag[ 0] +; N[ 1] AEAD_State[ 1] | Message[ 1] Perm_row_0[ 1] 0 Tag[ 1] +; N[ 2] AEAD_State[ 2] | Message[ 2] Perm_row_0[ 2] 0 Tag[ 2] +; N[ 3] AEAD_State[ 3] | Message[ 3] Perm_row_0[ 3] 0 Tag[ 3] +; N[ 4] AEAD_State[ 4] | Message[ 4] 0x01 Perm_row_0[ 4] 0 Tag[ 4] +; N[ 5] AEAD_State[ 5] | Message[ 5] 0x00 Perm_row_0[ 5] 0 Tag[ 5] +; N[ 6] AEAD_State[ 6] | Message[ 6] 0x00 Perm_row_0[ 6] 0 Tag[ 6] +; N[ 7] AEAD_State[ 7] | Message[ 7] 0x00 Perm_row_0[ 7] 0 Tag[ 7] +; N[ 8] AEAD_State[ 8] | Message[ 8] 0x00 Perm_row_0[ 8] 0 Tag[ 8] +; N[ 9] AEAD_State[ 9] | Message[ 9] 0x00 Perm_row_0[ 9] 0 Tag[ 9] +; N[10] AEAD_State[10] | Message[10] 0x00 Perm_row_0[10] 0 Tag[10] +; N[11] AEAD_State[11] | Message[11] 0x00 Perm_row_0[11] <<< 0 Tag[11] +; N[12] AEAD_State[12] | Message[12] 0x00 Perm_row_1[ 0] 1 Tag[12] +; N[13] AEAD_State[13] | Message[13] 0x00 Perm_row_1[ 1] 1 Tag[13] +; N[14] AEAD_State[14] | Message[14] 0x00 Perm_row_1[ 2] 1 Tag[14] +; N[15] AEAD_State[15] | Message[15] 0x00 Perm_row_1[ 3] 1 Tag[15] +; K[ 0] AEAD_State[16] | Message[16] 0x00 Perm_row_1[ 4] 1 +; K[ 1] AEAD_State[17] | Message[17] 0x00 Perm_row_1[ 5] 1 +; K[ 2] AEAD_State[18] | Message[18] 0x00 Perm_row_1[ 6] 1 +; K[ 3] AEAD_State[19] | Message[19] 0x00 Perm_row_1[ 7] 1 +; K[ 4] AEAD_State[20] | Message[20] 0x00 Perm_row_1[ 8] 1 +; K[ 5] AEAD_State[21] | Message[21] 0x00 Perm_row_1[ 9] 1 +; K[ 6] AEAD_State[22] | Message[22] 0x00 Perm_row_1[10] 1 +; K[ 7] AEAD_State[23] | Message[23] 0x00 Perm_row_1[11] <<< 1 +; K[ 8] AEAD_State[24] | Perm_row_2[ 0] 8 +; K[ 9] AEAD_State[25] | Perm_row_2[ 1] 8 +; K[10] AEAD_State[26] | Perm_row_2[ 2] 8 +; K[11] AEAD_State[27] | Perm_row_2[ 3] 8 +; K[12] AEAD_State[28] | Perm_row_2[ 4] 8 +; K[13] AEAD_State[29] | Perm_row_2[ 5] 8 +; K[14] AEAD_State[30] | Perm_row_2[ 6] 8 +; K[15] AEAD_State[31] | Perm_row_2[ 7] 8 +; 0x00 AEAD_State[32] | Perm_row_2[ 8] 8 +; 0x00 AEAD_State[33] | Perm_row_2[ 9] 8 +; 0x00 AEAD_State[34] | Perm_row_2[10] 8 +; 0x00 AEAD_State[35] | Perm_row_2[11] <<< 8 +; 0x00 AEAD_State[36] | Perm_row_3[ 0] 55 +; 0x00 AEAD_State[37] | Perm_row_3[ 1] 55 +; 0x00 AEAD_State[38] | Perm_row_3[ 2] 55 +; 0x00 AEAD_State[39] | Perm_row_3[ 3] 55 +; 0x00 AEAD_State[40] | Perm_row_3[ 4] 55 +; 0x00 AEAD_State[41] | Perm_row_3[ 5] 55 +; 0x00 AEAD_State[42] | Perm_row_3[ 6] 55 +; 0x00 AEAD_State[43] | Perm_row_3[ 7] 55 +; 0x00 AEAD_State[44] | Perm_row_3[ 8] 55 +; 0x00 AEAD_State[45] | Perm_row_3[ 9] 55 +; 0x00 AEAD_State[46] | Perm_row_3[10] 55 +; 0x00 ^0x80 AEAD_State[47] | ^0x80 Perm_row_3[11] <<< 55 diff --git a/knot/Implementations/crypto_hash/knot384/avr8_speed/hash.c b/knot/Implementations/crypto_hash/knot384/avr8_speed/hash.c new file mode 100644 index 0000000..dbbe4df --- /dev/null +++ b/knot/Implementations/crypto_hash/knot384/avr8_speed/hash.c @@ -0,0 +1,32 @@ +#include +#include +#include +#include +#include "api.h" +#include "crypto_hash.h" + +extern void crypto_hash_asm( + unsigned char *out, + const unsigned char *in, + unsigned char inlen + ); + +int crypto_hash( + unsigned char *out, + const unsigned char *in, + unsigned long long inlen +) +{ + /* + ... + ... the code for the hash function implementation goes here + ... generating a hash value out[0],out[1],...,out[CRYPTO_BYTES-1] + ... from a message in[0],in[1],...,in[in-1] + ... + ... return 0; + */ + + crypto_hash_asm(out, in, inlen); + + return 0; +} \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot384/avr8_speed/knot256.h b/knot/Implementations/crypto_hash/knot384/avr8_speed/knot256.h new file mode 100644 index 0000000..f99f68b --- /dev/null +++ b/knot/Implementations/crypto_hash/knot384/avr8_speed/knot256.h @@ -0,0 +1,306 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.1 2020 by KNOT Team * +; ********************************************** +; +#define x10 r0 +#define x11 r1 +#define x12 r2 +#define x13 r3 +#define x14 r4 +#define x15 r5 +#define x16 r6 +#define x17 r7 + +; an intentionally arrangement of registers to facilitate movw +#define x20 r8 +#define x21 r10 +#define x22 r12 +#define x23 r14 +#define x24 r9 +#define x25 r11 +#define x26 r13 +#define x27 r15 + +; an intentionally arrangement of registers to facilitate movw +#define x30 r16 +#define x35 r18 +#define x32 r20 +#define x37 r22 +#define x34 r17 +#define x31 r19 +#define x36 r21 +#define x33 r23 + +#define t0j r24 +#define t1j r25 +#define x0j r27 + +#include "assist.h" + +.macro Sbox i0, i1, i2, i3 + mov t0j, \i1 + com \i0 + and \i1, \i0 + eor \i1, \i2 + or \i2, t0j + eor \i0, \i3 + eor \i2, \i0 + eor t0j, \i3 + and \i0, \i1 + eor \i3, \i1 + eor \i0, t0j + and t0j, \i2 + eor \i1, t0j +.endm + +Permutation: + PUSH_CONFLICT + mov rcnt, rn + + ldi YH, hi8(SRAM_STATE + ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + ROW_INBYTES) + ld x10, Y+ + ld x11, Y+ + ld x12, Y+ + ld x13, Y+ + ld x14, Y+ + ld x15, Y+ + ld x16, Y+ + ld x17, Y+ + ld x20, Y+ + ld x21, Y+ + ld x22, Y+ + ld x23, Y+ + ld x24, Y+ + ld x25, Y+ + ld x26, Y+ + ld x27, Y+ + ld x30, Y+ + ld x31, Y+ + ld x32, Y+ + ld x33, Y+ + ld x34, Y+ + ld x35, Y+ + ld x36, Y+ + ld x37, Y+ + +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) + sbrc AEDH, 2 ; AEDH[2] = 0 for AEAD and AEDH[2] = 1 for HASH + rjmp For_Hash +For_AEAD: + ldi ZL, lo8(RC_LFSR6) + ldi ZH, hi8(RC_LFSR6) + rjmp round_loop_start +For_Hash: + ldi ZL, lo8(RC_LFSR7) + ldi ZH, hi8(RC_LFSR7) +#elif defined(CRYPTO_AEAD) + ldi ZL, lo8(RC_LFSR6) + ldi ZH, hi8(RC_LFSR6) +#else + ldi ZL, lo8(RC_LFSR7) + ldi ZH, hi8(RC_LFSR7) +#endif + +round_loop_start: + ; AddRC + lpm t0j, Z+ + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + ld x0j, Y + eor x0j, t0j + + ; SubColumns + Sbox x0j, x10, x20, x30 + st Y+, x0j + ld x0j, Y + Sbox x0j, x11, x21, x31 + st Y+, x0j + ld x0j, Y + Sbox x0j, x12, x22, x32 + st Y+, x0j + ld x0j, Y + Sbox x0j, x13, x23, x33 + st Y+, x0j + ld x0j, Y + Sbox x0j, x14, x24, x34 + st Y+, x0j + ld x0j, Y + Sbox x0j, x15, x25, x35 + st Y+, x0j + ld x0j, Y + Sbox x0j, x16, x26, x36 + st Y+, x0j + ld x0j, Y + Sbox x0j, x17, x27, x37 + st Y, x0j + + ; ShiftRows + ; <<< 1 + mov t0j, x17 + rol t0j + rol x10 + rol x11 + rol x12 + rol x13 + rol x14 + rol x15 + rol x16 + rol x17 + + ; <<< 8 + ; 7 6 5 4 3 2 1 0 => 6 5 4 3 2 1 0 7 + ;mov t0j, x27 + ;mov x27, x26 + ;mov x26, x25 + ;mov x25, x24 + ;mov x24, x23 + ;mov x23, x22 + ;mov x22, x21 + ;mov x21, x20 + ;mov x20, t0j + ; an intentionally arrangement of registers to facilitate movw + movw t0j, x23 ; t1j:t0j <= x27:x23 + movw x23, x22 ; x27:x23 <= x26:x22 + movw x22, x21 ; x26:x22 <= x25:x21 + movw x21, x20 ; x25:x21 <= x24:x20 + mov x20, t1j ; x20 <= t1j + mov x24, t0j ; x24 <= t0j + + ; <<< 1 + mov t0j, x37 + rol t0j + rol x30 + rol x31 + rol x32 + rol x33 + rol x34 + rol x35 + rol x36 + rol x37 + ; <<< 24 + ; 7 6 5 4 3 2 1 0 => 4 3 2 1 0 7 6 5 + ;mov t0j, x30 + ;mov x30, x35 + ;mov x35, x32 + ;mov x32, x37 + ;mov x37, x34 + ;mov x34, x31 + ;mov x31, x36 + ;mov x36, x33 + ;mov x33, t0j + ; an intentionally arrangement of registers to facilitate movw + ;x30 r16 + ;x35 r18 + ;x32 r20 + ;x37 r22 + ;x34 r17 + ;x31 r19 + ;x36 r21 + ;x33 r23 + movw t0j, x30 ; t1j:t0j <= x34:x30 + movw x30, x35 ; x34:x30 <= x31:x35 + movw x35, x32 ; x31:x35 <= x36:x32 + movw x32, x37 ; x36:x32 <= x33:x37 + mov x37, t1j ; x37 <= x34 + mov x33, t0j ; x33 <= x30 + + dec rcnt + breq round_loop_end + jmp round_loop_start + +round_loop_end: + ldi YH, hi8(SRAM_STATE + ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + ROW_INBYTES) + st Y+, x10 + st Y+, x11 + st Y+, x12 + st Y+, x13 + st Y+, x14 + st Y+, x15 + st Y+, x16 + st Y+, x17 + st Y+, x20 + st Y+, x21 + st Y+, x22 + st Y+, x23 + st Y+, x24 + st Y+, x25 + st Y+, x26 + st Y+, x27 + st Y+, x30 + st Y+, x31 + st Y+, x32 + st Y+, x33 + st Y+, x34 + st Y+, x35 + st Y+, x36 + st Y+, x37 + + POP_CONFLICT +ret + + +.section .text +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) +RC_LFSR6: +.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x21, 0x03, 0x06 +.byte 0x0c, 0x18, 0x31, 0x22, 0x05, 0x0a, 0x14, 0x29 +.byte 0x13, 0x27, 0x0f, 0x1e, 0x3d, 0x3a, 0x34, 0x28 +.byte 0x11, 0x23, 0x07, 0x0e, 0x1c, 0x39, 0x32, 0x24 +.byte 0x09, 0x12, 0x25, 0x0b, 0x16, 0x2d, 0x1b, 0x37 +.byte 0x2e, 0x1d, 0x3b, 0x36, 0x2c, 0x19, 0x33, 0x26 +.byte 0x0d, 0x1a, 0x35, 0x2a, 0x15, 0x2b, 0x17, 0x2f +.byte 0x1f, 0x3f, 0x3e, 0x3c, 0x38, 0x30, 0x20, 0x00 +RC_LFSR7: +.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x41, 0x03 +.byte 0x06, 0x0c, 0x18, 0x30, 0x61, 0x42, 0x05, 0x0a +.byte 0x14, 0x28, 0x51, 0x23, 0x47, 0x0f, 0x1e, 0x3c +.byte 0x79, 0x72, 0x64, 0x48, 0x11, 0x22, 0x45, 0x0b +.byte 0x16, 0x2c, 0x59, 0x33, 0x67, 0x4e, 0x1d, 0x3a +.byte 0x75, 0x6a, 0x54, 0x29, 0x53, 0x27, 0x4f, 0x1f +.byte 0x3e, 0x7d, 0x7a, 0x74, 0x68, 0x50, 0x21, 0x43 +.byte 0x07, 0x0e, 0x1c, 0x38, 0x71, 0x62, 0x44, 0x09 +.byte 0x12, 0x24, 0x49, 0x13, 0x26, 0x4d, 0x1b, 0x36 +.byte 0x6d, 0x5a, 0x35, 0x6b, 0x56, 0x2d, 0x5b, 0x37 +.byte 0x6f, 0x5e, 0x3d, 0x7b, 0x76, 0x6c, 0x58, 0x31 +.byte 0x63, 0x46, 0x0d, 0x1a, 0x34, 0x69, 0x52, 0x25 +.byte 0x4b, 0x17, 0x2e, 0x5d, 0x3b, 0x77, 0x6e, 0x5c +.byte 0x39, 0x73, 0x66, 0x4c, 0x19, 0x32, 0x65, 0x4a +.byte 0x15, 0x2a, 0x55, 0x2b, 0x57, 0x2f, 0x5f, 0x3f +.byte 0x7f, 0x7e, 0x7c, 0x78, 0x70, 0x60, 0x40, 0x00 +#elif defined(CRYPTO_AEAD) +RC_LFSR6: +.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x21, 0x03, 0x06 +.byte 0x0c, 0x18, 0x31, 0x22, 0x05, 0x0a, 0x14, 0x29 +.byte 0x13, 0x27, 0x0f, 0x1e, 0x3d, 0x3a, 0x34, 0x28 +.byte 0x11, 0x23, 0x07, 0x0e, 0x1c, 0x39, 0x32, 0x24 +.byte 0x09, 0x12, 0x25, 0x0b, 0x16, 0x2d, 0x1b, 0x37 +.byte 0x2e, 0x1d, 0x3b, 0x36, 0x2c, 0x19, 0x33, 0x26 +.byte 0x0d, 0x1a, 0x35, 0x2a, 0x15, 0x2b, 0x17, 0x2f +.byte 0x1f, 0x3f, 0x3e, 0x3c, 0x38, 0x30, 0x20, 0x00 +#else +RC_LFSR7: +.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x41, 0x03 +.byte 0x06, 0x0c, 0x18, 0x30, 0x61, 0x42, 0x05, 0x0a +.byte 0x14, 0x28, 0x51, 0x23, 0x47, 0x0f, 0x1e, 0x3c +.byte 0x79, 0x72, 0x64, 0x48, 0x11, 0x22, 0x45, 0x0b +.byte 0x16, 0x2c, 0x59, 0x33, 0x67, 0x4e, 0x1d, 0x3a +.byte 0x75, 0x6a, 0x54, 0x29, 0x53, 0x27, 0x4f, 0x1f +.byte 0x3e, 0x7d, 0x7a, 0x74, 0x68, 0x50, 0x21, 0x43 +.byte 0x07, 0x0e, 0x1c, 0x38, 0x71, 0x62, 0x44, 0x09 +.byte 0x12, 0x24, 0x49, 0x13, 0x26, 0x4d, 0x1b, 0x36 +.byte 0x6d, 0x5a, 0x35, 0x6b, 0x56, 0x2d, 0x5b, 0x37 +.byte 0x6f, 0x5e, 0x3d, 0x7b, 0x76, 0x6c, 0x58, 0x31 +.byte 0x63, 0x46, 0x0d, 0x1a, 0x34, 0x69, 0x52, 0x25 +.byte 0x4b, 0x17, 0x2e, 0x5d, 0x3b, 0x77, 0x6e, 0x5c +.byte 0x39, 0x73, 0x66, 0x4c, 0x19, 0x32, 0x65, 0x4a +.byte 0x15, 0x2a, 0x55, 0x2b, 0x57, 0x2f, 0x5f, 0x3f +.byte 0x7f, 0x7e, 0x7c, 0x78, 0x70, 0x60, 0x40, 0x00 +#endif \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot384/avr8_speed/knot384.h b/knot/Implementations/crypto_hash/knot384/avr8_speed/knot384.h new file mode 100644 index 0000000..0b3dd75 --- /dev/null +++ b/knot/Implementations/crypto_hash/knot384/avr8_speed/knot384.h @@ -0,0 +1,261 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.1 2020 by KNOT Team * +; ********************************************** +; + +; an intentionally arrangement of registers to facilitate movw +#define x20 r0 +#define x21 r2 +#define x22 r4 +#define x23 r6 +#define x24 r8 +#define x25 r10 +#define x26 r1 +#define x27 r3 +#define x28 r5 +#define x29 r7 +#define x2a r9 +#define x2b r11 + +; an intentionally arrangement of registers to facilitate movw +#define x30 r22 +#define x35 r20 +#define x3a r18 +#define x33 r16 +#define x38 r14 +#define x31 r12 +#define x36 r23 +#define x3b r21 +#define x34 r19 +#define x39 r17 +#define x32 r15 +#define x37 r13 + +#define t0j r24 +#define t1j r25 +#define x0j r25 +#define x1j r27 + +#include "assist.h" + +.macro Sbox i0, i1, i2, i3 + ldi t0j, 0xFF + eor \i0, t0j + mov t0j, \i1 + and \i1, \i0 + eor \i1, \i2 + or \i2, t0j + eor \i0, \i3 + eor \i2, \i0 + eor t0j, \i3 + and \i0, \i1 + eor \i3, \i1 + eor \i0, t0j + and t0j, \i2 + eor \i1, t0j +.endm + +.macro OneColumn i0, i1, i2, i3 + ld \i0, Y + ldd \i1, Y + ROW_INBYTES + Sbox \i0, \i1, \i2, \i3 + st Y+, \i0 + rol \i1 ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES -1, \i1 +.endm + +Permutation: + PUSH_CONFLICT + mov rcnt, rn + + ldi YH, hi8(SRAM_STATE + 2 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 2 * ROW_INBYTES) + ld x20, Y+ + ld x21, Y+ + ld x22, Y+ + ld x23, Y+ + ld x24, Y+ + ld x25, Y+ + ld x26, Y+ + ld x27, Y+ + ld x28, Y+ + ld x29, Y+ + ld x2a, Y+ + ld x2b, Y+ + ld x30, Y+ + ld x31, Y+ + ld x32, Y+ + ld x33, Y+ + ld x34, Y+ + ld x35, Y+ + ld x36, Y+ + ld x37, Y+ + ld x38, Y+ + ld x39, Y+ + ld x3a, Y+ + ld x3b, Y+ + + ldi ZL, lo8(RC_LFSR7) + ldi ZH, hi8(RC_LFSR7) + +round_loop_start: + ; AddRC + lpm t0j, Z+ + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + ld x0j, Y + eor x0j, t0j + + ldd x1j, Y + ROW_INBYTES + Sbox x0j, x1j, x20, x30 + st Y+, x0j + lsl x1j ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES -1, x1j + + OneColumn x0j, x1j, x21, x31 + OneColumn x0j, x1j, x22, x32 + OneColumn x0j, x1j, x23, x33 + OneColumn x0j, x1j, x24, x34 + OneColumn x0j, x1j, x25, x35 + OneColumn x0j, x1j, x26, x36 + OneColumn x0j, x1j, x27, x37 + OneColumn x0j, x1j, x28, x38 + OneColumn x0j, x1j, x29, x39 + OneColumn x0j, x1j, x2a, x3a + OneColumn x0j, x1j, x2b, x3b + + ld x1j, Y + eor t0j, t0j + adc x1j, t0j + st Y, x1j + + ; b a 9 8 7 6 5 4 3 2 1 0 + ; -- -- -- -- -- -- -- -- -- -- -- x- 0 + ; -- -- -- -- -- -- -- -- -- -- -- x' 0 + ; -- -- -- -- -- -- -- -- -- -- x- -- 1 + ; -- -- -- -- x' -- -- -- -- -- -- -- 7 + ; 4 3 2 1 0 b a 9 8 7 6 5 + + ; ShiftRows -- the last two rows + ; <<< 8 + ; b a 9 8 7 6 5 4 3 2 1 0 => a 9 8 7 6 5 4 3 2 1 0 b + movw t0j, x25 ; t1j:t0j <= x2b:x25 + movw x25, x24 ; x2b:x25 <= x2a:x24 + movw x24, x23 ; x2a:x24 <= x29:x23 + movw x23, x22 ; x29:x23 <= x28:x22 + movw x22, x21 ; x28:x22 <= x27:x21 + movw x21, x20 ; x27:x21 <= x26:x20 + mov x26, t0j ; x26 <= x25 + mov x20, t1j ; x20 <= x2b + + ; >>> 1 + mov t0j, x3b + ror t0j + ror x3a + ror x39 + ror x38 + ror x37 + ror x36 + ror x35 + ror x34 + ror x33 + ror x32 + ror x31 + ror x30 + ror x3b + ; <<< 56 + ; b a 9 8 7 6 5 4 3 2 1 0 => 4 3 2 1 0 b a 9 8 7 6 5 + ; mov x3j, x30 + ; mov x30, x35 + ; mov x35, x3a + ; mov x3a, x33 + ; mov x33, x38 + ; mov x38, x31 + ; mov x31, x36 + ; mov x36, x3b + ; mov x3b, x34 + ; mov x34, x39 + ; mov x39, x32 + ; mov x32, x37 + ; mov x37, x3j + ; an intentionally arrangement of registers to facilitate movw + ; x30 r22 + ; x35 r20 + ; x3a r18 + ; x33 r16 + ; x38 r14 + ; x31 r12 + ; x36 r23 + ; x3b r21 + ; x34 r19 + ; x39 r17 + ; x32 r15 + ; x37 r13 + movw t0j, x30 ; t1j:t0j <= x36:x30 + movw x30, x35 ; x36:x30 <= x3b:x35 + movw x35, x3a ; x3b:x35 <= x34:x3a + movw x3a, x33 ; x34:x3a <= x39:x33 + movw x33, x38 ; x39:x33 <= x32:x38 + movw x38, x31 ; x32:x38 <= x37:x31 + mov x31, t1j ; x31 <= x36 + mov x37, t0j ; x37 <= x30 + + dec rcnt + breq round_loop_end + jmp round_loop_start + +round_loop_end: + + ldi YH, hi8(SRAM_STATE + 2 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 2 * ROW_INBYTES) + st Y+, x20 + st Y+, x21 + st Y+, x22 + st Y+, x23 + st Y+, x24 + st Y+, x25 + st Y+, x26 + st Y+, x27 + st Y+, x28 + st Y+, x29 + st Y+, x2a + st Y+, x2b + st Y+, x30 + st Y+, x31 + st Y+, x32 + st Y+, x33 + st Y+, x34 + st Y+, x35 + st Y+, x36 + st Y+, x37 + st Y+, x38 + st Y+, x39 + st Y+, x3a + st Y+, x3b + + POP_CONFLICT +ret + +RC_LFSR7: +.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x41, 0x03 +.byte 0x06, 0x0c, 0x18, 0x30, 0x61, 0x42, 0x05, 0x0a +.byte 0x14, 0x28, 0x51, 0x23, 0x47, 0x0f, 0x1e, 0x3c +.byte 0x79, 0x72, 0x64, 0x48, 0x11, 0x22, 0x45, 0x0b +.byte 0x16, 0x2c, 0x59, 0x33, 0x67, 0x4e, 0x1d, 0x3a +.byte 0x75, 0x6a, 0x54, 0x29, 0x53, 0x27, 0x4f, 0x1f +.byte 0x3e, 0x7d, 0x7a, 0x74, 0x68, 0x50, 0x21, 0x43 +.byte 0x07, 0x0e, 0x1c, 0x38, 0x71, 0x62, 0x44, 0x09 +.byte 0x12, 0x24, 0x49, 0x13, 0x26, 0x4d, 0x1b, 0x36 +.byte 0x6d, 0x5a, 0x35, 0x6b, 0x56, 0x2d, 0x5b, 0x37 +.byte 0x6f, 0x5e, 0x3d, 0x7b, 0x76, 0x6c, 0x58, 0x31 +.byte 0x63, 0x46, 0x0d, 0x1a, 0x34, 0x69, 0x52, 0x25 +.byte 0x4b, 0x17, 0x2e, 0x5d, 0x3b, 0x77, 0x6e, 0x5c +.byte 0x39, 0x73, 0x66, 0x4c, 0x19, 0x32, 0x65, 0x4a +.byte 0x15, 0x2a, 0x55, 0x2b, 0x57, 0x2f, 0x5f, 0x3f +.byte 0x7f, 0x7e, 0x7c, 0x78, 0x70, 0x60, 0x40, 0x00 \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot384/avr8_speed/knot512.h b/knot/Implementations/crypto_hash/knot384/avr8_speed/knot512.h new file mode 100644 index 0000000..b0e4319 --- /dev/null +++ b/knot/Implementations/crypto_hash/knot384/avr8_speed/knot512.h @@ -0,0 +1,435 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.1 2020 by KNOT Team * +; ********************************************** +; +#define x20 r0 +#define x22 r2 +#define x24 r4 +#define x26 r6 +#define x28 r1 +#define x2a r3 +#define x2c r5 +#define x2e r7 + +#define x30 r8 +#define x3d r10 +#define x3a r12 +#define x37 r14 +#define x34 r16 +#define x31 r18 +#define x3e r20 +#define x3b r22 +#define x38 r9 +#define x35 r11 +#define x32 r13 +#define x3f r15 +#define x3c r17 +#define x39 r19 +#define x36 r21 +#define x33 r23 + +#define t0j r24 +#define t1j r25 +#define x0j r25 +#define x1j r27 +#define x2j r26 + +#include "assist.h" + +.macro Sbox i0, i1, i2, i3 + ldi t0j, 0xFF + eor \i0, t0j + mov t0j, \i1 + and \i1, \i0 + eor \i1, \i2 + or \i2, t0j + eor \i0, \i3 + eor \i2, \i0 + eor t0j, \i3 + and \i0, \i1 + eor \i3, \i1 + eor \i0, t0j + and t0j, \i2 + eor \i1, t0j +.endm + +.macro TwoColumns i2_e, i3_e, i3_o + ; column 2i + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + Sbox x0j, x1j, \i2_e, \i3_e + st Y+, x0j + rol x1j ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES - 1, x1j + + ; column 2i+1 + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + Sbox x0j, x1j, x2j, \i3_o + st Y+, x0j + rol x1j ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES - 1, x1j + ldd t0j, Y + 2 * ROW_INBYTES + 1 + std Y + 2 * ROW_INBYTES + 1, x2j + mov x2j, t0j +.endm + +Permutation: + PUSH_CONFLICT + mov rcnt, rn + push rcnt + + ldi YH, hi8(SRAM_STATE + 2 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 2 * ROW_INBYTES) + + ldd x20, Y + 0x00 + ldd x22, Y + 0x02 + ldd x24, Y + 0x04 + ldd x26, Y + 0x06 + ldd x28, Y + 0x08 + ldd x2a, Y + 0x0a + ldd x2c, Y + 0x0c + ldd x2e, Y + 0x0e + + adiw YL, ROW_INBYTES + + ld x30, Y+ + ld x31, Y+ + ld x32, Y+ + ld x33, Y+ + ld x34, Y+ + ld x35, Y+ + ld x36, Y+ + ld x37, Y+ + ld x38, Y+ + ld x39, Y+ + ld x3a, Y+ + ld x3b, Y+ + ld x3c, Y+ + ld x3d, Y+ + ld x3e, Y+ + ld x3f, Y+ + +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) + sbrc AEDH, 2 ; AEDH[2] = 0 for AEAD and AEDH[2] = 1 for HASH + rjmp For_Hash +For_AEAD: + ldi ZL, lo8(RC_LFSR7) + ldi ZH, hi8(RC_LFSR7) + rjmp round_loop_start +For_Hash: + ldi ZL, lo8(RC_LFSR8) + ldi ZH, hi8(RC_LFSR8) +#elif defined(CRYPTO_AEAD) + ldi ZL, lo8(RC_LFSR7) + ldi ZH, hi8(RC_LFSR7) +#else + ldi ZL, lo8(RC_LFSR8) + ldi ZH, hi8(RC_LFSR8) +#endif + + +round_loop_start: + ; AddRC + lpm t0j, Z+ + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + + ; column 0 + ld x0j, Y + eor x0j, t0j + ldd x1j, Y + ROW_INBYTES + Sbox x0j, x1j, x20, x30 + st Y+, x0j + lsl x1j ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES - 1, x1j + + ; column 1 + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + ldd x2j, Y + 2 * ROW_INBYTES + Sbox x0j, x1j, x2j, x31 + st Y+, x0j + rol x1j ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES - 1, x1j + ldd t0j, Y + 2 * ROW_INBYTES + 1 + std Y + 2 * ROW_INBYTES + 1, x2j + mov x2j, t0j + + ; column 2, 3 + TwoColumns x22, x32, x33 + ; column 4, 5 + TwoColumns x24, x34, x35 + ; column 6, 7 + TwoColumns x26, x36, x37 + ; column 8, 9 + TwoColumns x28, x38, x39 + ; column 10, 11 + TwoColumns x2a, x3a, x3b + ; column 12, 13 + TwoColumns x2c, x3c, x3d + + ; column 14 + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + Sbox x0j, x1j, x2e, x3e + st Y+, x0j + rol x1j ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES - 1, x1j + + ; column 15 + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + Sbox x0j, x1j, x2j, x3f + st Y+, x0j + rol x1j ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES - 1, x1j + + ld x1j, Y + eor t0j, t0j + adc x1j, t0j + st Y, x1j + std Y + ROW_INBYTES + 1, x2j + + ; f e d c b a 9 8 7 6 5 4 3 2 1 0 + ; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- x- 0 + ; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- x' 0 + ; -- -- -- -- -- -- -- -- -- -- -- -- -- x- -- -- 2 + ; -- -- -- -- -- -- -- -- -- -- -- -- x' -- -- -- 3 + ; c b a 9 8 7 6 5 4 3 2 1 0 f e d + ; x2e x2c x2a x28 x26 x24 x22 x20 => x2c x2a x28 x26 x24 x22 x20 x2e + ;mov t0j, x2e + ;mov x2e, x2c + ;mov x2c, x2a + ;mov x2a, x28 + ;mov x28, x26 + ;mov x26, x24 + ;mov x24, x22 + ;mov x22, x20 + ;mov x20, t0j + ; an intentionally arrangement of registers to facilitate movw + movw t0j, x26 ; t1j:t0j <= x2e:x26 + movw x26, x24 ; x2e:x26 <= x2c:x24 + movw x24, x22 ; x2c:x24 <= x2a:x22 + movw x22, x20 ; x2a:x22 <= x28:x20 + mov x20, t1j ; x20 <= t1j + mov x28, t0j ; x28 <= t0j + + ; <<< 1 + mov t0j, x3f + rol t0j + rol x30 + rol x31 + rol x32 + rol x33 + rol x34 + rol x35 + rol x36 + rol x37 + rol x38 + rol x39 + rol x3a + rol x3b + rol x3c + rol x3d + rol x3e + rol x3f + ; <<< 24 + ; f e d c b a 9 8 7 6 5 4 3 2 1 0 => + ; c b a 9 8 7 6 5 4 3 2 1 0 f e d + ; mov x3j, x30 + ; mov x30, x3d + ; mov x3d, x3a + ; mov x3a, x37 + ; mov x37, x34 + ; mov x34, x31 + ; mov x31, x3e + ; mov x3e, x3b + ; mov x3b, x38 + ; mov x38, x35 + ; mov x35, x32 + ; mov x32, x3f + ; mov x3f, x3c + ; mov x3c, x39 + ; mov x39, x36 + ; mov x36, x33 + ; mov x33, x3j + ; an intentionally arrangement of registers to facilitate movw + ; x30 r8 + ; x3d r10 + ; x3a r12 + ; x37 r14 + ; x34 r16 + ; x31 r18 + ; x3e r20 + ; x3b r22 + ; x38 r9 + ; x35 r11 + ; x32 r13 + ; x3f r15 + ; x3c r17 + ; x39 r19 + ; x36 r21 + ; x33 r23 + movw t0j, x30 ; t1j:t0j <= x38:x30 + movw x30, x3d ; x38:x30 <= x35:x3d + movw x3d, x3a ; x35:x3d <= x32:x3a + movw x3a, x37 ; x32:x3a <= x3f:x37 + movw x37, x34 ; x3f:x37 <= x3c:x34 + movw x34, x31 ; x3c:x34 <= x39:x31 + movw x31, x3e ; x39:x31 <= x36:x3e + movw x3e, x3b ; x36:x3e <= x33:x3b + mov x3b, t1j ; x3b <= x38 + mov x33, t0j ; x33 <= x30 + + pop rcnt + dec rcnt + push rcnt + breq round_loop_end + rjmp round_loop_start + +round_loop_end: + pop rcnt + + ldi YH, hi8(SRAM_STATE + 2 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 2 * ROW_INBYTES) + std Y + 0x00, x20 + std Y + 0x02, x22 + std Y + 0x04, x24 + std Y + 0x06, x26 + std Y + 0x08, x28 + std Y + 0x0a, x2a + std Y + 0x0c, x2c + std Y + 0x0e, x2e + adiw YL, ROW_INBYTES + st Y+, x30 + st Y+, x31 + st Y+, x32 + st Y+, x33 + st Y+, x34 + st Y+, x35 + st Y+, x36 + st Y+, x37 + st Y+, x38 + st Y+, x39 + st Y+, x3a + st Y+, x3b + st Y+, x3c + st Y+, x3d + st Y+, x3e + st Y+, x3f + + POP_CONFLICT +ret + +.section .text +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) +RC_LFSR7: +.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x41, 0x03 +.byte 0x06, 0x0c, 0x18, 0x30, 0x61, 0x42, 0x05, 0x0a +.byte 0x14, 0x28, 0x51, 0x23, 0x47, 0x0f, 0x1e, 0x3c +.byte 0x79, 0x72, 0x64, 0x48, 0x11, 0x22, 0x45, 0x0b +.byte 0x16, 0x2c, 0x59, 0x33, 0x67, 0x4e, 0x1d, 0x3a +.byte 0x75, 0x6a, 0x54, 0x29, 0x53, 0x27, 0x4f, 0x1f +.byte 0x3e, 0x7d, 0x7a, 0x74, 0x68, 0x50, 0x21, 0x43 +.byte 0x07, 0x0e, 0x1c, 0x38, 0x71, 0x62, 0x44, 0x09 +.byte 0x12, 0x24, 0x49, 0x13, 0x26, 0x4d, 0x1b, 0x36 +.byte 0x6d, 0x5a, 0x35, 0x6b, 0x56, 0x2d, 0x5b, 0x37 +.byte 0x6f, 0x5e, 0x3d, 0x7b, 0x76, 0x6c, 0x58, 0x31 +.byte 0x63, 0x46, 0x0d, 0x1a, 0x34, 0x69, 0x52, 0x25 +.byte 0x4b, 0x17, 0x2e, 0x5d, 0x3b, 0x77, 0x6e, 0x5c +.byte 0x39, 0x73, 0x66, 0x4c, 0x19, 0x32, 0x65, 0x4a +.byte 0x15, 0x2a, 0x55, 0x2b, 0x57, 0x2f, 0x5f, 0x3f +.byte 0x7f, 0x7e, 0x7c, 0x78, 0x70, 0x60, 0x40, 0x00 +RC_LFSR8: +.byte 0x01, 0x02, 0x04, 0x08, 0x11, 0x23, 0x47, 0x8e +.byte 0x1c, 0x38, 0x71, 0xe2, 0xc4, 0x89, 0x12, 0x25 +.byte 0x4b, 0x97, 0x2e, 0x5c, 0xb8, 0x70, 0xe0, 0xc0 +.byte 0x81, 0x03, 0x06, 0x0c, 0x19, 0x32, 0x64, 0xc9 +.byte 0x92, 0x24, 0x49, 0x93, 0x26, 0x4d, 0x9b, 0x37 +.byte 0x6e, 0xdc, 0xb9, 0x72, 0xe4, 0xc8, 0x90, 0x20 +.byte 0x41, 0x82, 0x05, 0x0a, 0x15, 0x2b, 0x56, 0xad +.byte 0x5b, 0xb6, 0x6d, 0xda, 0xb5, 0x6b, 0xd6, 0xac +.byte 0x59, 0xb2, 0x65, 0xcb, 0x96, 0x2c, 0x58, 0xb0 +.byte 0x61, 0xc3, 0x87, 0x0f, 0x1f, 0x3e, 0x7d, 0xfb +.byte 0xf6, 0xed, 0xdb, 0xb7, 0x6f, 0xde, 0xbd, 0x7a +.byte 0xf5, 0xeb, 0xd7, 0xae, 0x5d, 0xba, 0x74, 0xe8 +.byte 0xd1, 0xa2, 0x44, 0x88, 0x10, 0x21, 0x43, 0x86 +.byte 0x0d, 0x1b, 0x36, 0x6c, 0xd8, 0xb1, 0x63, 0xc7 +.byte 0x8f, 0x1e, 0x3c, 0x79, 0xf3, 0xe7, 0xce, 0x9c +.byte 0x39, 0x73, 0xe6, 0xcc, 0x98, 0x31, 0x62, 0xc5 +.byte 0x8b, 0x16, 0x2d, 0x5a, 0xb4, 0x69, 0xd2, 0xa4 +.byte 0x48, 0x91, 0x22, 0x45, 0x8a, 0x14, 0x29, 0x52 +.byte 0xa5, 0x4a, 0x95, 0x2a, 0x54, 0xa9, 0x53, 0xa7 +.byte 0x4e, 0x9d, 0x3b, 0x77, 0xee, 0xdd, 0xbb, 0x76 +.byte 0xec, 0xd9, 0xb3, 0x67, 0xcf, 0x9e, 0x3d, 0x7b +.byte 0xf7, 0xef, 0xdf, 0xbf, 0x7e, 0xfd, 0xfa, 0xf4 +.byte 0xe9, 0xd3, 0xa6, 0x4c, 0x99, 0x33, 0x66, 0xcd +.byte 0x9a, 0x35, 0x6a, 0xd4, 0xa8, 0x51, 0xa3, 0x46 +.byte 0x8c, 0x18, 0x30, 0x60, 0xc1, 0x83, 0x07, 0x0e +.byte 0x1d, 0x3a, 0x75, 0xea, 0xd5, 0xaa, 0x55, 0xab +.byte 0x57, 0xaf, 0x5f, 0xbe, 0x7c, 0xf9, 0xf2, 0xe5 +.byte 0xca, 0x94, 0x28, 0x50, 0xa1, 0x42, 0x84, 0x09 +.byte 0x13, 0x27, 0x4f, 0x9f, 0x3f, 0x7f, 0xff, 0xfe +.byte 0xfc, 0xf8, 0xf0, 0xe1, 0xc2, 0x85, 0x0b, 0x17 +.byte 0x2f, 0x5e, 0xbc, 0x78, 0xf1, 0xe3, 0xc6, 0x8d +.byte 0x1a, 0x34, 0x68, 0xd0, 0xa0, 0x40, 0x80, 0x00 +#elif defined(CRYPTO_AEAD) +RC_LFSR7: +.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x41, 0x03 +.byte 0x06, 0x0c, 0x18, 0x30, 0x61, 0x42, 0x05, 0x0a +.byte 0x14, 0x28, 0x51, 0x23, 0x47, 0x0f, 0x1e, 0x3c +.byte 0x79, 0x72, 0x64, 0x48, 0x11, 0x22, 0x45, 0x0b +.byte 0x16, 0x2c, 0x59, 0x33, 0x67, 0x4e, 0x1d, 0x3a +.byte 0x75, 0x6a, 0x54, 0x29, 0x53, 0x27, 0x4f, 0x1f +.byte 0x3e, 0x7d, 0x7a, 0x74, 0x68, 0x50, 0x21, 0x43 +.byte 0x07, 0x0e, 0x1c, 0x38, 0x71, 0x62, 0x44, 0x09 +.byte 0x12, 0x24, 0x49, 0x13, 0x26, 0x4d, 0x1b, 0x36 +.byte 0x6d, 0x5a, 0x35, 0x6b, 0x56, 0x2d, 0x5b, 0x37 +.byte 0x6f, 0x5e, 0x3d, 0x7b, 0x76, 0x6c, 0x58, 0x31 +.byte 0x63, 0x46, 0x0d, 0x1a, 0x34, 0x69, 0x52, 0x25 +.byte 0x4b, 0x17, 0x2e, 0x5d, 0x3b, 0x77, 0x6e, 0x5c +.byte 0x39, 0x73, 0x66, 0x4c, 0x19, 0x32, 0x65, 0x4a +.byte 0x15, 0x2a, 0x55, 0x2b, 0x57, 0x2f, 0x5f, 0x3f +.byte 0x7f, 0x7e, 0x7c, 0x78, 0x70, 0x60, 0x40, 0x00 +#else +RC_LFSR8: +.byte 0x01, 0x02, 0x04, 0x08, 0x11, 0x23, 0x47, 0x8e +.byte 0x1c, 0x38, 0x71, 0xe2, 0xc4, 0x89, 0x12, 0x25 +.byte 0x4b, 0x97, 0x2e, 0x5c, 0xb8, 0x70, 0xe0, 0xc0 +.byte 0x81, 0x03, 0x06, 0x0c, 0x19, 0x32, 0x64, 0xc9 +.byte 0x92, 0x24, 0x49, 0x93, 0x26, 0x4d, 0x9b, 0x37 +.byte 0x6e, 0xdc, 0xb9, 0x72, 0xe4, 0xc8, 0x90, 0x20 +.byte 0x41, 0x82, 0x05, 0x0a, 0x15, 0x2b, 0x56, 0xad +.byte 0x5b, 0xb6, 0x6d, 0xda, 0xb5, 0x6b, 0xd6, 0xac +.byte 0x59, 0xb2, 0x65, 0xcb, 0x96, 0x2c, 0x58, 0xb0 +.byte 0x61, 0xc3, 0x87, 0x0f, 0x1f, 0x3e, 0x7d, 0xfb +.byte 0xf6, 0xed, 0xdb, 0xb7, 0x6f, 0xde, 0xbd, 0x7a +.byte 0xf5, 0xeb, 0xd7, 0xae, 0x5d, 0xba, 0x74, 0xe8 +.byte 0xd1, 0xa2, 0x44, 0x88, 0x10, 0x21, 0x43, 0x86 +.byte 0x0d, 0x1b, 0x36, 0x6c, 0xd8, 0xb1, 0x63, 0xc7 +.byte 0x8f, 0x1e, 0x3c, 0x79, 0xf3, 0xe7, 0xce, 0x9c +.byte 0x39, 0x73, 0xe6, 0xcc, 0x98, 0x31, 0x62, 0xc5 +.byte 0x8b, 0x16, 0x2d, 0x5a, 0xb4, 0x69, 0xd2, 0xa4 +.byte 0x48, 0x91, 0x22, 0x45, 0x8a, 0x14, 0x29, 0x52 +.byte 0xa5, 0x4a, 0x95, 0x2a, 0x54, 0xa9, 0x53, 0xa7 +.byte 0x4e, 0x9d, 0x3b, 0x77, 0xee, 0xdd, 0xbb, 0x76 +.byte 0xec, 0xd9, 0xb3, 0x67, 0xcf, 0x9e, 0x3d, 0x7b +.byte 0xf7, 0xef, 0xdf, 0xbf, 0x7e, 0xfd, 0xfa, 0xf4 +.byte 0xe9, 0xd3, 0xa6, 0x4c, 0x99, 0x33, 0x66, 0xcd +.byte 0x9a, 0x35, 0x6a, 0xd4, 0xa8, 0x51, 0xa3, 0x46 +.byte 0x8c, 0x18, 0x30, 0x60, 0xc1, 0x83, 0x07, 0x0e +.byte 0x1d, 0x3a, 0x75, 0xea, 0xd5, 0xaa, 0x55, 0xab +.byte 0x57, 0xaf, 0x5f, 0xbe, 0x7c, 0xf9, 0xf2, 0xe5 +.byte 0xca, 0x94, 0x28, 0x50, 0xa1, 0x42, 0x84, 0x09 +.byte 0x13, 0x27, 0x4f, 0x9f, 0x3f, 0x7f, 0xff, 0xfe +.byte 0xfc, 0xf8, 0xf0, 0xe1, 0xc2, 0x85, 0x0b, 0x17 +.byte 0x2f, 0x5e, 0xbc, 0x78, 0xf1, 0xe3, 0xc6, 0x8d +.byte 0x1a, 0x34, 0x68, 0xd0, 0xa0, 0x40, 0x80, 0x00 +#endif \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot384/avr8_speed/permutation.h b/knot/Implementations/crypto_hash/knot384/avr8_speed/permutation.h new file mode 100644 index 0000000..e6c9793 --- /dev/null +++ b/knot/Implementations/crypto_hash/knot384/avr8_speed/permutation.h @@ -0,0 +1,45 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.1 2020 by KNOT Team * +; ********************************************** +; + +; +; ============================================ +; R E G I S T E R D E F I N I T I O N S +; ============================================ +; + +#define mclen r16 +#define radlen r17 +#define tcnt r17 +#define tmp0 r20 +#define tmp1 r21 +#define cnt0 r22 +#define rn r23 +#define rate r24 + + +; AEDH = 0b000: for authenticate AD +; AEDH = 0b001: for encryption +; AEDH = 0b011: for decryption +; AEDH = 0b100: for hash +#define AEDH r25 +#define rcnt r26 + +#if (STATE_INBITS==256) +#include "knot256.h" +#elif (STATE_INBITS==384) +#include "knot384.h" +#elif (STATE_INBITS==512) +#include "knot512.h" +#else +#error "Not specified key size and state size" +#endif + + diff --git a/knot/Implementations/crypto_hash/knot512/avr8_lowrom/api.h b/knot/Implementations/crypto_hash/knot512/avr8_lowrom/api.h new file mode 100644 index 0000000..a46499d --- /dev/null +++ b/knot/Implementations/crypto_hash/knot512/avr8_lowrom/api.h @@ -0,0 +1 @@ +#define CRYPTO_BYTES 64 \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot512/avr8_lowrom/assist.h b/knot/Implementations/crypto_hash/knot512/avr8_lowrom/assist.h new file mode 100644 index 0000000..cb903a5 --- /dev/null +++ b/knot/Implementations/crypto_hash/knot512/avr8_lowrom/assist.h @@ -0,0 +1,140 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by KNOT Team * +; ********************************************** +; +.macro LFSR6_MACRO + bst rc, 5 + bld tmp0, 0 + bst rc, 4 + bld tmp1, 0 + eor tmp0, tmp1 + ror tmp0 + rol rc + andi rc, 0x3F +.endm + +.macro LFSR7_MACRO + bst rc, 6 + bld tmp0, 0 + bst rc, 5 + bld tmp1, 0 + eor tmp0, tmp1 + ror tmp0 + rol rc + andi rc, 0x7F +.endm + +.macro LFSR8_MACRO + bst rc, 7 + bld tmp0, 0 + bst rc, 5 + bld tmp1, 0 + eor tmp0, tmp1 + bst rc, 4 + bld tmp1, 0 + eor tmp0, tmp1 + bst rc, 3 + bld tmp1, 0 + eor tmp0, tmp1 + ror tmp0 + rol rc +.endm + +.macro Sbox i0, i1, i2, i3 + mov tmp0, \i1 + com \i0 + and \i1, \i0 + eor \i1, \i2 + or \i2, tmp0 + eor \i0, \i3 + eor \i2, \i0 + eor tmp0, \i3 + and \i0, \i1 + eor \i3, \i1 + eor \i0, tmp0 + and tmp0, \i2 + eor \i1, tmp0 +.endm + +.macro PUSH_CONFLICT + push r16 + push r17 + push r18 + push r19 + + push r23 + push r24 + + push r26 + push r27 + push r28 + push r29 + push r30 + push r31 +.endm + +.macro POP_CONFLICT + pop r31 + pop r30 + pop r29 + pop r28 + pop r27 + pop r26 + + pop r24 + pop r23 + + pop r19 + pop r18 + pop r17 + pop r16 +.endm + +.macro PUSH_ALL + push r2 + push r3 + push r4 + push r5 + push r6 + push r7 + push r8 + push r9 + push r10 + push r11 + push r12 + push r13 + push r14 + push r15 + push r16 + push r17 + push r28 + push r29 +.endm + +.macro POP_ALL + pop r29 + pop r28 + pop r17 + pop r16 + pop r15 + pop r14 + pop r13 + pop r12 + pop r11 + pop r10 + pop r9 + pop r8 + pop r7 + pop r6 + pop r5 + pop r4 + pop r3 + pop r2 + clr r1 +.endm \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot512/avr8_lowrom/config.h b/knot/Implementations/crypto_hash/knot512/avr8_lowrom/config.h new file mode 100644 index 0000000..70fa8d6 --- /dev/null +++ b/knot/Implementations/crypto_hash/knot512/avr8_lowrom/config.h @@ -0,0 +1,131 @@ +#ifndef __CONFIG_H__ +#define __CONFIG_H__ + +//#define CRYPTO_AEAD +#define CRYPTO_HASH + +#define MAX_MESSAGE_LENGTH 128 + +#define STATE_INBITS 512 +/* For CRYPTO_AEAD */ +#define CRYPTO_KEYBITS 256 +/* For CRYPTO_HASH */ +#define CRYPTO_BITS 512 + +#define STATE_INBYTES ((STATE_INBITS + 7) / 8) +#define ROW_INBITS ((STATE_INBITS + 3) / 4) +#define ROW_INBYTES ((ROW_INBITS + 7) / 8) + +/* For CRYPTO_AEAD */ +#define CRYPTO_KEYBYTES ((CRYPTO_KEYBITS + 7) / 8) +#define CRYPTO_NSECBYTES 0 +#define CRYPTO_NPUBBYTES CRYPTO_KEYBYTES +#define CRYPTO_ABYTES CRYPTO_KEYBYTES +#define CRYPTO_NOOVERLAP 1 + +#define MAX_ASSOCIATED_DATA_LENGTH 32 +#define MAX_CIPHER_LENGTH (MAX_MESSAGE_LENGTH + CRYPTO_ABYTES) + +#define TAG_MATCH 0 +#define TAG_UNMATCH -1 +#define OTHER_FAILURES -2 + +/* For CRYPTO_HASH */ +#define CRYPTO_BYTES ((CRYPTO_BITS + 7) / 8) + + + +#define DOMAIN_BITS 0x80 +#define PAD_BITS 0x01 +#define S384_R192_BITS 0x80 + +#if (STATE_INBITS==256) +#define C1 1 +#define C2 8 +#define C3 25 +#elif (STATE_INBITS==384) +#define C1 1 +#define C2 8 +#define C3 55 +#elif (STATE_INBITS==512) +#define C1 1 +#define C2 16 +#define C3 25 +#else +#error "Not specified state size" +#endif + +#ifdef CRYPTO_AEAD +/* For CRYPTO_AEAD */ +#define KEY_INBITS (CRYPTO_KEYBYTES * 8) +#define KEY_INBYTES (CRYPTO_KEYBYTES) + +#define NONCE_INBITS (CRYPTO_NPUBBYTES * 8) +#define NONCE_INBYTES (CRYPTO_NPUBBYTES) + +#define TAG_INBITS (CRYPTO_ABYTES * 8) +#define TAG_INBYTES (CRYPTO_ABYTES) + +#if (KEY_INBITS==128) && (STATE_INBITS==256) +#define RATE_INBITS 64 +#define NR_0 52 +#define NR_i 28 +#define NR_f 32 +#elif (KEY_INBITS==128) && (STATE_INBITS==384) +#define RATE_INBITS 192 +#define NR_0 76 +#define NR_i 28 +#define NR_f 32 +#elif (KEY_INBITS==192) && (STATE_INBITS==384) +#define RATE_INBITS 96 +#define NR_0 76 +#define NR_i 40 +#define NR_f 44 +#elif (KEY_INBITS==256) && (STATE_INBITS==512) +#define RATE_INBITS 128 +#define NR_0 100 +#define NR_i 52 +#define NR_f 56 +#else +#error "Not specified key size and state size" +#endif + +#define RATE_INBYTES ((RATE_INBITS + 7) / 8) +#define SQUEEZE_RATE_INBYTES TAG_INBYTES + +#endif + +#ifdef CRYPTO_HASH +/* For CRYPTO_HASH */ +#define HASH_DIGEST_INBITS (CRYPTO_BYTES * 8) + +#if (HASH_DIGEST_INBITS==256) && (STATE_INBITS==256) +#define HASH_RATE_INBITS 32 +#define HASH_SQUEEZE_RATE_INBITS 128 +#define NR_h 68 +#elif (HASH_DIGEST_INBITS==256) && (STATE_INBITS==384) +#define HASH_RATE_INBITS 128 +#define HASH_SQUEEZE_RATE_INBITS 128 +#define NR_h 80 +#elif (HASH_DIGEST_INBITS==384) && (STATE_INBITS==384) +#define HASH_RATE_INBITS 48 +#define HASH_SQUEEZE_RATE_INBITS 192 +#define NR_h 104 +#elif (HASH_DIGEST_INBITS==512) && (STATE_INBITS==512) +#define HASH_RATE_INBITS 64 +#define HASH_SQUEEZE_RATE_INBITS 256 +#define NR_h 140 +#else +#error "Not specified hash digest size and state size" +#endif + +#define HASH_RATE_INBYTES ((HASH_RATE_INBITS + 7) / 8) +#define HASH_SQUEEZE_RATE_INBYTES ((HASH_SQUEEZE_RATE_INBITS + 7) / 8) + +#endif + +#define TAG_MATCH 0 +#define TAG_UNMATCH -1 +#define OTHER_FAILURES -2 + +#endif \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot512/avr8_lowrom/crypto_hash.h b/knot/Implementations/crypto_hash/knot512/avr8_lowrom/crypto_hash.h new file mode 100644 index 0000000..342a639 --- /dev/null +++ b/knot/Implementations/crypto_hash/knot512/avr8_lowrom/crypto_hash.h @@ -0,0 +1,13 @@ +#ifdef __cplusplus +extern "C" { +#endif + +int crypto_hash( + unsigned char *out, + const unsigned char *in, + unsigned long long inlen + ); + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot512/avr8_lowrom/encrypt.c b/knot/Implementations/crypto_hash/knot512/avr8_lowrom/encrypt.c new file mode 100644 index 0000000..baf0a3b --- /dev/null +++ b/knot/Implementations/crypto_hash/knot512/avr8_lowrom/encrypt.c @@ -0,0 +1,106 @@ +#include +#include +#include +#include +#include "config.h" + +extern void crypto_aead_encrypt_asm( + unsigned char *c, + const unsigned char *m, + unsigned char mlen, + const unsigned char *ad, + unsigned char adlen, + const unsigned char *npub, + const unsigned char *k + ); + +extern int crypto_aead_decrypt_asm( + unsigned char *m, + const unsigned char *c, + unsigned char clen, + const unsigned char *ad, + unsigned char adlen, + const unsigned char *npub, + const unsigned char *k + ); + +extern void crypto_hash_asm( + unsigned char *out, + const unsigned char *in, + unsigned char inlen + ); + + +int crypto_aead_encrypt( + unsigned char *c, unsigned long long *clen, + const unsigned char *m, unsigned long long mlen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k + ) +{ + /* + ... + ... the code for the cipher implementation goes here, + ... generating a ciphertext c[0],c[1],...,c[*clen-1] + ... from a plaintext m[0],m[1],...,m[mlen-1] + ... and associated data ad[0],ad[1],...,ad[adlen-1] + ... and nonce npub[0],npub[1],.. + ... and secret key k[0],k[1],... + ... the implementation shall not use nsec + ... + ... return 0; + */ + + (void)nsec; + + crypto_aead_encrypt_asm(c, m, mlen, ad, adlen, npub, k); + + *clen = mlen + TAG_INBYTES; + return 0; +} + + + +int crypto_aead_decrypt( + unsigned char *m, unsigned long long *mlen, + unsigned char *nsec, + const unsigned char *c, unsigned long long clen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k + ) +{ + /* + ... + ... the code for the AEAD implementation goes here, + ... generating a plaintext m[0],m[1],...,m[*mlen-1] + ... and secret message number nsec[0],nsec[1],... + ... from a ciphertext c[0],c[1],...,c[clen-1] + ... and associated data ad[0],ad[1],...,ad[adlen-1] + ... and nonce number npub[0],npub[1],... + ... and secret key k[0],k[1],... + ... + ... return 0; + */ + unsigned long long mlen_; + unsigned char tag_is_match; + + (void)nsec; + if (clen < CRYPTO_ABYTES) { + return -1; + } + mlen_ = clen - CRYPTO_ABYTES; + + tag_is_match = crypto_aead_decrypt_asm(m, c, mlen_, ad, adlen, npub, k); + + if (tag_is_match != 0) + { + memset(m, 0, (size_t)mlen_); + return -1; + } + + *mlen = mlen_; + return 0; +} \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot512/avr8_lowrom/encrypt_core.S b/knot/Implementations/crypto_hash/knot512/avr8_lowrom/encrypt_core.S new file mode 100644 index 0000000..cb7aed5 --- /dev/null +++ b/knot/Implementations/crypto_hash/knot512/avr8_lowrom/encrypt_core.S @@ -0,0 +1,537 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by KNOT Team * +; ********************************************** +; + +; +; ============================================ +; S R A M D E F I N I T I O N S +; ============================================ +; +#include +#include "config.h" + +.section .noinit + SRAM_STATE: .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#if (STATE_INBYTES > 32) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif +#if (STATE_INBYTES > 48) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif + SRAM_MESSAGE_OUT_ADDR: .BYTE 0, 0 + SRAM_MESSAGE_IN_ADDR: .BYTE 0, 0 + SRAM_MESSAGE_IN_LEN: .BYTE 0, 0 +#ifdef CRYPTO_AEAD +; For CRYPTO_AEAD + SRAM_ASSOCIATED_DATA_ADDR: .BYTE 0, 0 + SRAM_ADLEN: .BYTE 0, 0 + SRAM_NONCE_ADDR: .BYTE 0, 0 + SRAM_KEY_ADDR: .BYTE 0, 0 + + SRAM_ADDITIONAL: + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#if (CRYPTO_ABYTES > 16) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif +#if (CRYPTO_ABYTES > 24) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif + +#endif + +.section .text + +#include "permutation.h" + +; require YH:YL be the address of the current associated data/cipher/message block +; for enc and dec, store ciphertext or plaintext +; require ZH:ZL be the address of the current cipher/message block +XOR_to_State: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + mov cnt0, rate +XOR_to_State_loop: + ld tmp0, Y+ ; plaintext/ciphertext + ld tmp1, X ; state + eor tmp1, tmp0 ; ciphertext/plaintext + sbrc AEDH, 0 ; test auth or enc/dec, if AEDH[0] == 0, skip store result + st Z+, tmp1 ; store ciphertext/plaintext + sbrc AEDH, 1 ; test auth/enc or dec, if AEDH[1] == 0, skip repalce state byte + mov tmp1, tmp0 ; if dec, replace state + st X+, tmp1 ; store state byte + dec cnt0 + brne XOR_to_State_loop +; YH:YL are now the address of the next associated data block +ret + +; require YH:YL pointed to the input data +; require ZH:ZL pointed to the output data +; require cnt0 containes the nubmer of bytes in source data +; require number of bytes in source data less than rate, i.e., 0 <= cnt0 < rate +; +; the 0th bit in AEDH is used to distinguish (auth AD) or (enc/dec M/C): +; AEDH[0] = 0 for (auth AD), AEDH[0] = 1 for (enc/dec M/C) +; the 1th bit in AEDH is used to distinguish (auth AD/enc M) or (dec C): +; AEDH[1] = 0 for (auth AD/enc M), AEDH[1] = 1 for (dec C) +; AEDH = 0b000 for (auth AD) +; AEDH = 0b001 for (enc M) +; AEDH = 0b011 for (dec C) +Pad_XOR_to_State: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + tst cnt0 + breq XOR_padded_data +XOR_source_data_loop: + ld tmp0, Y+ ; plaintext/ciphertext + ld tmp1, X ; state + eor tmp1, tmp0 ; ciphertext/plaintext + sbrc AEDH, 0 ; test auth or enc/dec, if AEDH[0] == 0, skip store result + st Z+, tmp1 ; store ciphertext/plaintext + sbrc AEDH, 1 ; test auth/enc or dec, if AEDH[1] == 0, skip repalce state byte + mov tmp1, tmp0 ; if dec, replace state + st X+, tmp1 ; store state byte + dec cnt0 + brne XOR_source_data_loop +XOR_padded_data: + ldi tmp0, PAD_BITS + ld tmp1, X + eor tmp1, tmp0 + st X, tmp1 +ret + +AddDomain: + ldi XH, hi8(SRAM_STATE + STATE_INBYTES - 1) + ldi XL, lo8(SRAM_STATE + STATE_INBYTES - 1) + ldi tmp0, DOMAIN_BITS + ld tmp1, X + eor tmp0, tmp1 + st X, tmp0 +ret + +; require ZH:ZL be the address of the destination +EXTRACT_from_State: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + mov tmp1, rate +EXTRACT_from_State_loop: + ld tmp0, X+ + st Z+, tmp0 + dec tmp1 + brne EXTRACT_from_State_loop +ret + +AUTH: + tst radlen + breq AUTH_end + + cp radlen, rate + brlo auth_ad_padded_block + +auth_ad_loop: + rcall XOR_to_State + rcall Permutation + sub radlen, rate + cp radlen, rate + brlo auth_ad_padded_block + rjmp auth_ad_loop + +auth_ad_padded_block: + mov cnt0, radlen + rcall Pad_XOR_to_State + rcall Permutation + +AUTH_end: +ret + +#ifdef CRYPTO_AEAD +Initialization: + ldi rn, NR_0 + ldi XL, lo8(SRAM_STATE) + ldi XH, hi8(SRAM_STATE) + + lds YH, SRAM_NONCE_ADDR + lds YL, SRAM_NONCE_ADDR + 1 + ldi cnt0, CRYPTO_NPUBBYTES +load_nonce_loop: + ld tmp0, Y+ + st X+, tmp0 + dec cnt0 + brne load_nonce_loop + + lds YH, SRAM_KEY_ADDR + lds YL, SRAM_KEY_ADDR + 1 + ldi cnt0, CRYPTO_KEYBYTES +load_key_loop: + ld tmp0, Y+ + st X+, tmp0 + dec cnt0 + brne load_key_loop + +#if (STATE_INBITS==384) && (RATE_INBITS==192) + ldi cnt0, (STATE_INBYTES - CRYPTO_NPUBBYTES - CRYPTO_KEYBYTES - 1) + clr tmp0 +empty_state_loop: + st X+, tmp0 + dec cnt0 + brne empty_state_loop + ldi tmp0, S384_R192_BITS + st X+, tmp0 +#endif + + rcall Permutation +ret + +ENC: + tst mclen + breq ENC_end + + cp mclen, rate + brlo enc_padded_block + +enc_loop: + rcall XOR_to_State + ldi rn, NR_i + rcall Permutation + sub mclen, rate + cp mclen, rate + brlo enc_padded_block + rjmp enc_loop + +enc_padded_block: + mov cnt0, mclen + rcall Pad_XOR_to_State +ENC_end: +ret + +Finalization: + ldi rate, SQUEEZE_RATE_INBYTES + ldi rn, NR_f + rcall Permutation + rcall EXTRACT_from_State +ret + +; void crypto_aead_encrypt_asm( +; unsigned char *c, +; const unsigned char *m, +; unsigned long long mlen, +; const unsigned char *ad, +; unsigned long long adlen, +; const unsigned char *npub, +; const unsigned char *k +; ) +; +; unsigned char *c, is passed in r24:r25 +; const unsigned char *m, is passed in r22:r23 +; unsigned long long mlen, is passed in r20:r21, only LSB (r20) is used +; const unsigned char *ad, is passed in r18:r19 +; unsigned long long adlen, is passed in r16:r17, only LSB (r16) is used +; const unsigned char *npub, is passed in r14:r15 +; const unsigned char *k is passed in r12:r13 +.global crypto_aead_encrypt_asm +crypto_aead_encrypt_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store cipher address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store message address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store message length in SRAM_MESSAGE_IN_LEN + st X+, r20 + st X+, r19 ;store associated data address in SRAM_ASSOCIATED_DATA_ADDR + st X+, r18 + st X+, r17 ;store associated data length in SRAM_ADLEN + st X+, r16 + st X+, r15 ;store nonce address in SRAM_NONCE_ADDR + st X+, r14 + st X+, r13 ;store key address in SRAM_KEY_ADDR + st X+, r12 + mov radlen, r16 + mov mclen, r20 + + rcall Initialization + + ldi rn, NR_i + ldi rate, RATE_INBYTES + ldi AEDH, 0b000 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_ASSOCIATED_DATA_ADDR + lds YL, SRAM_ASSOCIATED_DATA_ADDR + 1 + rcall AUTH + rcall AddDomain + ldi AEDH, 0b001 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_MESSAGE_IN_ADDR + lds YL, SRAM_MESSAGE_IN_ADDR + 1 + lds ZH, SRAM_MESSAGE_OUT_ADDR + lds ZL, SRAM_MESSAGE_OUT_ADDR + 1 + rcall ENC + rcall Finalization + POP_ALL +ret + +; int crypto_aead_decrypt_asm( +; unsigned char *m, +; const unsigned char *c, +; unsigned long long clen, +; const unsigned char *ad, +; unsigned long long adlen, +; const unsigned char *npub, +; const unsigned char *k +; ) +; +; unsigned char *m, is passed in r24:r25 +; const unsigned char *c, is passed in r22:r23 +; unsigned long long clen, is passed in r20:r21, only LSB (r20) is used +; const unsigned char *ad, is passed in r18:r19 +; unsigned long long adlen, is passed in r16:r17, only LSB (r16) is used +; const unsigned char *npub, is passed in r14:r15 +; const unsigned char *k is passed in r12:r13 +.global crypto_aead_decrypt_asm +crypto_aead_decrypt_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store message address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store cipher address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store cipher length in SRAM_MESSAGE_IN_LEN + st X+, r20 + st X+, r19 ;store associated data address in SRAM_ASSOCIATED_DATA_ADDR + st X+, r18 + st X+, r17 ;store associated data length in SRAM_ADLEN + st X+, r16 + st X+, r15 ;store nonce address in SRAM_NONCE_ADDR + st X+, r14 + st X+, r13 ;store key address in SRAM_KEY_ADDR + st X+, r12 + mov radlen, r16 + mov mclen, r20 + + rcall Initialization + + ldi rn, NR_i + ldi rate, RATE_INBYTES + ldi AEDH, 0b000 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_ASSOCIATED_DATA_ADDR + lds YL, SRAM_ASSOCIATED_DATA_ADDR + 1 + rcall AUTH + rcall AddDomain + ldi AEDH, 0b011 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_MESSAGE_IN_ADDR + lds YL, SRAM_MESSAGE_IN_ADDR + 1 + lds ZH, SRAM_MESSAGE_OUT_ADDR + lds ZL, SRAM_MESSAGE_OUT_ADDR + 1 + rcall ENC + + ldi ZH, hi8(SRAM_ADDITIONAL) + ldi ZL, lo8(SRAM_ADDITIONAL) + rcall Finalization + + sbiw ZL, CRYPTO_ABYTES + ldi cnt0, CRYPTO_ABYTES +compare_tag: + ld tmp0, Z+ + ld tmp1, Y+ + cp tmp0, tmp1 + brne return_tag_not_match + dec cnt0 + brne compare_tag + rjmp return_tag_match + +return_tag_not_match: + ldi r25, 0xFF + ldi r24, 0xFF + rjmp crypto_aead_decrypt_end + +return_tag_match: + clr r25 + clr r24 +crypto_aead_decrypt_end: + POP_ALL +ret + +; #ifdef CRYPTO_AEAD +#endif + + +#ifdef CRYPTO_HASH + +; void crypto_hash_asm( +; unsigned char *out, +; const unsigned char *in, +; unsigned long long inlen +; ) +; +; unsigned char *out, is passed in r24:r25 +; const unsigned char *in, is passed in r22:r23 +; unsigned long long inlen, is passed in r20:r21, only LSB (r20) is used +.global crypto_hash_asm +crypto_hash_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store message address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store cipher address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store cipher length in SRAM_MESSAGE_IN_LEN + st X+, r20 + mov mclen, r20 + + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) +#if (STATE_INBITS==384) && (HASH_RATE_INBITS==128) + ldi cnt0, STATE_INBYTES - 1 +#else + ldi cnt0, STATE_INBYTES +#endif + clr tmp0 +zero_state: + st X+, tmp0 + dec cnt0 + brne zero_state + +#if (STATE_INBITS==384) && (HASH_RATE_INBITS==128) + ldi tmp0, S384_R192_BITS + st X+, tmp0 +#endif + + ldi rn, NR_h + ldi AEDH, 0b100 + +HASH_ABSORBING: + mov radlen, mclen + tst radlen + breq EMPTY_M + ldi rate, HASH_RATE_INBYTES + lds YH, SRAM_MESSAGE_IN_ADDR + lds YL, SRAM_MESSAGE_IN_ADDR + 1 + rcall AUTH + rjmp HASH_SQUEEZING + +EMPTY_M: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + ldi tmp0, PAD_BITS + ld tmp1, X + eor tmp1, tmp0 + st X, tmp1 + rcall Permutation + +HASH_SQUEEZING: + ldi rate, HASH_SQUEEZE_RATE_INBYTES + lds ZH, SRAM_MESSAGE_OUT_ADDR + lds ZL, SRAM_MESSAGE_OUT_ADDR + 1 + ldi tcnt, CRYPTO_BYTES +SQUEEZING_loop: + rcall EXTRACT_from_State + subi tcnt, HASH_SQUEEZE_RATE_INBYTES + breq HASH_SQUEEZING_end + rcall Permutation + rjmp SQUEEZING_loop +HASH_SQUEEZING_end: + POP_ALL +ret + +#endif + + +; Byte Order In AVR 8: +; KNOT-AEAD(128, 256, 64): +; N[ 0] AEAD_State[ 0] | Message[ 0] Perm_row_0[0] 0 Tag[ 0] +; N[ 1] AEAD_State[ 1] | Message[ 1] Perm_row_0[1] 0 Tag[ 1] +; N[ 2] AEAD_State[ 2] | Message[ 2] Perm_row_0[2] 0 Tag[ 2] +; N[ 3] AEAD_State[ 3] | Message[ 3] Perm_row_0[3] 0 Tag[ 3] +; N[ 4] AEAD_State[ 4] | Message[ 4] 0x01 Perm_row_0[4] 0 Tag[ 4] +; N[ 5] AEAD_State[ 5] | Message[ 5] 0x00 Perm_row_0[5] 0 Tag[ 5] +; N[ 6] AEAD_State[ 6] | Message[ 6] 0x00 Perm_row_0[6] 0 Tag[ 6] +; N[ 7] AEAD_State[ 7] | Message[ 7] 0x00 Perm_row_0[7] <<< 0 Tag[ 7] +; N[ 8] AEAD_State[ 8] | Perm_row_1[0] 1 +; N[ 9] AEAD_State[ 9] | Perm_row_1[1] 1 +; N[10] AEAD_State[10] | Perm_row_1[2] 1 +; N[11] AEAD_State[11] | Perm_row_1[3] 1 +; N[12] AEAD_State[12] | Perm_row_1[4] 1 +; N[13] AEAD_State[13] | Perm_row_1[5] 1 +; N[14] AEAD_State[14] | Perm_row_1[6] 1 +; N[15] AEAD_State[15] | Perm_row_1[7] <<< 1 +; K[ 0] AEAD_State[16] | Perm_row_2[0] 8 +; K[ 1] AEAD_State[17] | Perm_row_2[1] 8 +; K[ 2] AEAD_State[18] | Perm_row_2[2] 8 +; K[ 3] AEAD_State[19] | Perm_row_2[3] 8 +; K[ 4] AEAD_State[20] | Perm_row_2[4] 8 +; K[ 5] AEAD_State[21] | Perm_row_2[5] 8 +; K[ 6] AEAD_State[22] | Perm_row_2[6] 8 +; K[ 7] AEAD_State[23] | Perm_row_2[7] <<< 8 +; K[ 8] AEAD_State[24] | Perm_row_3[0] 25 +; K[ 9] AEAD_State[25] | Perm_row_3[1] 25 +; K[10] AEAD_State[26] | Perm_row_3[2] 25 +; K[11] AEAD_State[27] | Perm_row_3[3] 25 +; K[12] AEAD_State[28] | Perm_row_3[4] 25 +; K[13] AEAD_State[29] | Perm_row_3[5] 25 +; K[14] AEAD_State[30] | Perm_row_3[6] 25 +; K[15] AEAD_State[31] | ^0x80 Perm_row_3[7] <<< 25 +; +; +; KNOT-AEAD(128, 384, 192): +; Initalization +; N[ 0] AEAD_State[ 0] | Message[ 0] Perm_row_0[ 0] 0 Tag[ 0] +; N[ 1] AEAD_State[ 1] | Message[ 1] Perm_row_0[ 1] 0 Tag[ 1] +; N[ 2] AEAD_State[ 2] | Message[ 2] Perm_row_0[ 2] 0 Tag[ 2] +; N[ 3] AEAD_State[ 3] | Message[ 3] Perm_row_0[ 3] 0 Tag[ 3] +; N[ 4] AEAD_State[ 4] | Message[ 4] 0x01 Perm_row_0[ 4] 0 Tag[ 4] +; N[ 5] AEAD_State[ 5] | Message[ 5] 0x00 Perm_row_0[ 5] 0 Tag[ 5] +; N[ 6] AEAD_State[ 6] | Message[ 6] 0x00 Perm_row_0[ 6] 0 Tag[ 6] +; N[ 7] AEAD_State[ 7] | Message[ 7] 0x00 Perm_row_0[ 7] 0 Tag[ 7] +; N[ 8] AEAD_State[ 8] | Message[ 8] 0x00 Perm_row_0[ 8] 0 Tag[ 8] +; N[ 9] AEAD_State[ 9] | Message[ 9] 0x00 Perm_row_0[ 9] 0 Tag[ 9] +; N[10] AEAD_State[10] | Message[10] 0x00 Perm_row_0[10] 0 Tag[10] +; N[11] AEAD_State[11] | Message[11] 0x00 Perm_row_0[11] <<< 0 Tag[11] +; N[12] AEAD_State[12] | Message[12] 0x00 Perm_row_1[ 0] 1 Tag[12] +; N[13] AEAD_State[13] | Message[13] 0x00 Perm_row_1[ 1] 1 Tag[13] +; N[14] AEAD_State[14] | Message[14] 0x00 Perm_row_1[ 2] 1 Tag[14] +; N[15] AEAD_State[15] | Message[15] 0x00 Perm_row_1[ 3] 1 Tag[15] +; K[ 0] AEAD_State[16] | Message[16] 0x00 Perm_row_1[ 4] 1 +; K[ 1] AEAD_State[17] | Message[17] 0x00 Perm_row_1[ 5] 1 +; K[ 2] AEAD_State[18] | Message[18] 0x00 Perm_row_1[ 6] 1 +; K[ 3] AEAD_State[19] | Message[19] 0x00 Perm_row_1[ 7] 1 +; K[ 4] AEAD_State[20] | Message[20] 0x00 Perm_row_1[ 8] 1 +; K[ 5] AEAD_State[21] | Message[21] 0x00 Perm_row_1[ 9] 1 +; K[ 6] AEAD_State[22] | Message[22] 0x00 Perm_row_1[10] 1 +; K[ 7] AEAD_State[23] | Message[23] 0x00 Perm_row_1[11] <<< 1 +; K[ 8] AEAD_State[24] | Perm_row_2[ 0] 8 +; K[ 9] AEAD_State[25] | Perm_row_2[ 1] 8 +; K[10] AEAD_State[26] | Perm_row_2[ 2] 8 +; K[11] AEAD_State[27] | Perm_row_2[ 3] 8 +; K[12] AEAD_State[28] | Perm_row_2[ 4] 8 +; K[13] AEAD_State[29] | Perm_row_2[ 5] 8 +; K[14] AEAD_State[30] | Perm_row_2[ 6] 8 +; K[15] AEAD_State[31] | Perm_row_2[ 7] 8 +; 0x00 AEAD_State[32] | Perm_row_2[ 8] 8 +; 0x00 AEAD_State[33] | Perm_row_2[ 9] 8 +; 0x00 AEAD_State[34] | Perm_row_2[10] 8 +; 0x00 AEAD_State[35] | Perm_row_2[11] <<< 8 +; 0x00 AEAD_State[36] | Perm_row_3[ 0] 55 +; 0x00 AEAD_State[37] | Perm_row_3[ 1] 55 +; 0x00 AEAD_State[38] | Perm_row_3[ 2] 55 +; 0x00 AEAD_State[39] | Perm_row_3[ 3] 55 +; 0x00 AEAD_State[40] | Perm_row_3[ 4] 55 +; 0x00 AEAD_State[41] | Perm_row_3[ 5] 55 +; 0x00 AEAD_State[42] | Perm_row_3[ 6] 55 +; 0x00 AEAD_State[43] | Perm_row_3[ 7] 55 +; 0x00 AEAD_State[44] | Perm_row_3[ 8] 55 +; 0x00 AEAD_State[45] | Perm_row_3[ 9] 55 +; 0x00 AEAD_State[46] | Perm_row_3[10] 55 +; 0x00 ^0x80 AEAD_State[47] | ^0x80 Perm_row_3[11] <<< 55 diff --git a/knot/Implementations/crypto_hash/knot512/avr8_lowrom/hash.c b/knot/Implementations/crypto_hash/knot512/avr8_lowrom/hash.c new file mode 100644 index 0000000..dbbe4df --- /dev/null +++ b/knot/Implementations/crypto_hash/knot512/avr8_lowrom/hash.c @@ -0,0 +1,32 @@ +#include +#include +#include +#include +#include "api.h" +#include "crypto_hash.h" + +extern void crypto_hash_asm( + unsigned char *out, + const unsigned char *in, + unsigned char inlen + ); + +int crypto_hash( + unsigned char *out, + const unsigned char *in, + unsigned long long inlen +) +{ + /* + ... + ... the code for the hash function implementation goes here + ... generating a hash value out[0],out[1],...,out[CRYPTO_BYTES-1] + ... from a message in[0],in[1],...,in[in-1] + ... + ... return 0; + */ + + crypto_hash_asm(out, in, inlen); + + return 0; +} \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot512/avr8_lowrom/knot256.h b/knot/Implementations/crypto_hash/knot512/avr8_lowrom/knot256.h new file mode 100644 index 0000000..d16bf8c --- /dev/null +++ b/knot/Implementations/crypto_hash/knot512/avr8_lowrom/knot256.h @@ -0,0 +1,197 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by KNOT Team * +; ********************************************** +; +#include "assist.h" + +Permutation: + PUSH_CONFLICT + mov rcnt, rn + + ldi rc, 0x01 + ldi YH, hi8(SRAM_STATE + 3 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 3 * ROW_INBYTES) + ld x30, Y+ + ld x31, Y+ + ld x32, Y+ + ld x33, Y+ + ld x34, Y+ + ld x35, Y+ + ld x36, Y+ + ld x37, Y+ + +round_loop_start: + rjmp AddRC_SubColumns_Start + +load_columns_table: + rjmp load_column0 + rjmp load_column1 + rjmp load_column2 + rjmp load_column3 + rjmp load_column4 + rjmp load_column5 + rjmp load_column6 + rjmp load_column7 + rjmp amend_shiftRow + +load_column0: + mov x3j, x30 + rjmp Sbox_one_column +load_column1: + mov x30, x3j + mov x3j, x31 + rjmp Sbox_one_column +load_column2: + mov x31, x3j + mov x3j, x32 + rjmp Sbox_one_column +load_column3: + mov x32, x3j + mov x3j, x33 + rjmp Sbox_one_column +load_column4: + mov x33, x3j + mov x3j, x34 + rjmp Sbox_one_column +load_column5: + mov x34, x3j + mov x3j, x35 + rjmp Sbox_one_column +load_column6: + mov x35, x3j + mov x3j, x36 + rjmp Sbox_one_column +load_column7: + mov x36, x3j + mov x3j, x37 + rjmp Sbox_one_column + +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) +LFSR_table: + rjmp LFSR6 + rjmp LFSR7 +LFSR6: + LFSR6_MACRO + rjmp LFSR_DONE +LFSR7: + LFSR7_MACRO + rjmp LFSR_DONE +#endif + +;;;;;;;;;;;;;;;;;;;;;;;; Real Start +AddRC_SubColumns_Start: + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + clr ccnt + ld x0j, Y + eor x0j, rc + +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) + ldi ZL, pm_lo8(LFSR_table) + ldi ZH, pm_hi8(LFSR_table) + sbrc AEDH, 2 ; AEDH[2] = 0 for AEAD and AEDH[1] = 1 for HASH + adiw ZL, 1 + ijmp +LFSR_DONE: +#elif defined(CRYPTO_AEAD) + LFSR6_MACRO ; only AEAD +#else + LFSR7_MACRO ; only HASH +#endif + + ldd x1j, Y + ROW_INBYTES + ldd x2j, Y + 2 * ROW_INBYTES + ldi ZL, pm_lo8(load_columns_table) + ldi ZH, pm_hi8(load_columns_table) + ijmp +Sbox_one_column: + Sbox x0j, x1j, x2j, x3j + + ; 7 6 5 4 3 2 1 0 + ; -- -- -- -- -- -- -- x- 0 + ; -- -- -- -- -- -- -- x' 0 + ; -- -- -- -- -- -- x- -- 1 + ; -- -- -- -- x' -- -- -- 3 + ; 4 3 2 1 0 7 6 5 + ; Store a byte to Row 0 + st Y, x0j + ; Store a byte combined with ShiftRow1 + lsl t1j + mov t1j, x1j ; back up the last updated byte in t1j, to be used in shiftRow1 (1 bit left) + rol x1j + std Y + ROW_INBYTES, x1j + ; Store a byte combined with ShiftRow2 + inc ccnt + cpi ccnt, ROW_INBYTES + breq ROW2_WRAP + ldd t2j, Y + 2 * ROW_INBYTES + 1 ; load next byte, the last updated byte needed to be shifted to the address of the next bytes + std Y + 2 * ROW_INBYTES + 1, x2j + mov x2j, t2j + jmp NO_ROW2_WRAP +ROW2_WRAP: + std Y + ROW_INBYTES + 1, x2j + ; remain ShiftRow3 to be done at 'amend_shiftRow' +NO_ROW2_WRAP: + adiw YL, 1 + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + + adiw ZL, 1 + ijmp + +amend_shiftRow: + ldi YH, hi8(SRAM_STATE + ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + ROW_INBYTES) + + ld x1j, Y + bst t1j, 7 + bld x1j, 0 + st Y, x1j + + ; <<< 1 + mov x37, x3j + rol x3j + rol x30 + rol x31 + rol x32 + rol x33 + rol x34 + rol x35 + rol x36 + rol x37 + ; <<< 24 + ; 7 6 5 4 3 2 1 0 => 4 3 2 1 0 7 6 5 + mov x3j, x30 + mov x30, x35 + mov x35, x32 + mov x32, x37 + mov x37, x34 + mov x34, x31 + mov x31, x36 + mov x36, x33 + mov x33, x3j + + dec rcnt + breq round_loop_end + rjmp round_loop_start + +round_loop_end: + ldi YH, hi8(SRAM_STATE + 3 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 3 * ROW_INBYTES) + st Y+, x30 + st Y+, x31 + st Y+, x32 + st Y+, x33 + st Y+, x34 + st Y+, x35 + st Y+, x36 + st Y+, x37 + + POP_CONFLICT +ret \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot512/avr8_lowrom/knot384.h b/knot/Implementations/crypto_hash/knot512/avr8_lowrom/knot384.h new file mode 100644 index 0000000..65c474a --- /dev/null +++ b/knot/Implementations/crypto_hash/knot512/avr8_lowrom/knot384.h @@ -0,0 +1,219 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by KNOT Team * +; ********************************************** +; +#include "assist.h" + +Permutation: + PUSH_CONFLICT + mov rcnt, rn + + ldi rc, 0x01 + ldi YH, hi8(SRAM_STATE + 3 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 3 * ROW_INBYTES) + ld x30, Y+ + ld x31, Y+ + ld x32, Y+ + ld x33, Y+ + ld x34, Y+ + ld x35, Y+ + ld x36, Y+ + ld x37, Y+ + ld x38, Y+ + ld x39, Y+ + ld x3a, Y+ + ld x3b, Y+ + +round_loop_start: + rjmp AddRC_SubColumns_Start + +load_columns_table: + rjmp load_column0 + rjmp load_column1 + rjmp load_column2 + rjmp load_column3 + rjmp load_column4 + rjmp load_column5 + rjmp load_column6 + rjmp load_column7 + rjmp load_column8 + rjmp load_column9 + rjmp load_columna + rjmp load_columnb + rjmp amend_shiftRow + +load_column0: + mov x3j, x30 + rjmp Sbox_one_column +load_column1: + mov x30, x3j + mov x3j, x31 + rjmp Sbox_one_column +load_column2: + mov x31, x3j + mov x3j, x32 + rjmp Sbox_one_column +load_column3: + mov x32, x3j + mov x3j, x33 + rjmp Sbox_one_column +load_column4: + mov x33, x3j + mov x3j, x34 + rjmp Sbox_one_column +load_column5: + mov x34, x3j + mov x3j, x35 + rjmp Sbox_one_column +load_column6: + mov x35, x3j + mov x3j, x36 + rjmp Sbox_one_column +load_column7: + mov x36, x3j + mov x3j, x37 + rjmp Sbox_one_column +load_column8: + mov x37, x3j + mov x3j, x38 + rjmp Sbox_one_column +load_column9: + mov x38, x3j + mov x3j, x39 + rjmp Sbox_one_column +load_columna: + mov x39, x3j + mov x3j, x3a + rjmp Sbox_one_column +load_columnb: + mov x3a, x3j + mov x3j, x3b + rjmp Sbox_one_column + +;;;;;;;;;;;;;;;;;;;;;;;; Real Start +AddRC_SubColumns_Start: + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + ldi ZL, pm_lo8(load_columns_table) + ldi ZH, pm_hi8(load_columns_table) + clr ccnt + ld x0j, Y + eor x0j, rc + LFSR7_MACRO + + ldd x1j, Y + ROW_INBYTES + ldd x2j, Y + 2 * ROW_INBYTES + ijmp +Sbox_one_column: + Sbox x0j, x1j, x2j, x3j + + ; b a 9 8 7 6 5 4 3 2 1 0 + ; -- -- -- -- -- -- -- -- -- -- -- x- 0 + ; -- -- -- -- -- -- -- -- -- -- -- x' 0 + ; -- -- -- -- -- -- -- -- -- -- x- -- 1 + ; -- -- -- -- x' -- -- -- -- -- -- -- 7 + ; 4 3 2 1 0 b a 9 8 7 6 5 + ; Store a byte to Row 0 + st Y, x0j + ; Store a byte combined with ShiftRow 1 + lsl t1j + mov t1j, x1j ; back up the last updated byte in t1j, to be used in shiftRow1 (1 bit left) + rol x1j + std Y + ROW_INBYTES, x1j + ; Store a byte combined with ShiftRow 2 + inc ccnt + cpi ccnt, ROW_INBYTES + breq ROW2_WRAP + ldd t2j, Y + 2 * ROW_INBYTES + 1 ; load next byte, the last updated byte needed to be shifted to the address of the next bytes + std Y + 2 * ROW_INBYTES + 1, x2j + mov x2j, t2j + jmp NO_ROW2_WRAP +ROW2_WRAP: + std Y + ROW_INBYTES + 1, x2j + ; remain ShiftRow3 to be done at 'amend_shiftRow' +NO_ROW2_WRAP: + adiw YL, 1 + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + + adiw ZL, 1 + ijmp + +amend_shiftRow: + ldi YH, hi8(SRAM_STATE + ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + ROW_INBYTES) + + ld x1j, Y + bst t1j, 7 + bld x1j, 0 + st Y, x1j + + ; >>> 1 + mov x3b, x3j + ror x3j + ror x3a + ror x39 + ror x38 + ror x37 + ror x36 + ror x35 + ror x34 + ror x33 + ror x32 + ror x31 + ror x30 + ror x3b + ; <<< 56 + ; b a 9 8 7 6 5 4 3 2 1 0 => 4 3 2 1 0 b a 9 8 7 6 5 + ;mov x3j, x30 + ;mov x30, x35 + ;mov x35, x32 + ;mov x32, x37 + ;mov x37, x34 + ;mov x34, x31 + ;mov x31, x36 + ;mov x36, x33 + ;mov x33, x3j + mov x3j, x30 + mov x30, x35 + mov x35, x3a + mov x3a, x33 + mov x33, x38 + mov x38, x31 + mov x31, x36 + mov x36, x3b + mov x3b, x34 + mov x34, x39 + mov x39, x32 + mov x32, x37 + mov x37, x3j + + dec rcnt + breq round_loop_end + rjmp round_loop_start + +round_loop_end: + + ldi YH, hi8(SRAM_STATE + 3 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 3 * ROW_INBYTES) + st Y+, x30 + st Y+, x31 + st Y+, x32 + st Y+, x33 + st Y+, x34 + st Y+, x35 + st Y+, x36 + st Y+, x37 + st Y+, x38 + st Y+, x39 + st Y+, x3a + st Y+, x3b + + POP_CONFLICT +ret \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot512/avr8_lowrom/knot512.h b/knot/Implementations/crypto_hash/knot512/avr8_lowrom/knot512.h new file mode 100644 index 0000000..d24b353 --- /dev/null +++ b/knot/Implementations/crypto_hash/knot512/avr8_lowrom/knot512.h @@ -0,0 +1,275 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by KNOT Team * +; ********************************************** +; +#include "assist.h" + +Permutation: + PUSH_CONFLICT + mov rcnt, rn + + ldi rc, 0x01 + ldi YH, hi8(SRAM_STATE + 3 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 3 * ROW_INBYTES) + ld x30, Y+ + ld x31, Y+ + ld x32, Y+ + ld x33, Y+ + ld x34, Y+ + ld x35, Y+ + ld x36, Y+ + ld x37, Y+ + ld x38, Y+ + ld x39, Y+ + ld x3a, Y+ + ld x3b, Y+ + ld x3c, Y+ + ld x3d, Y+ + ld x3e, Y+ + ld x3f, Y+ + +round_loop_start: + rjmp AddRC_SubColumns_Start + +load_columns_table: + rjmp load_column0 + rjmp load_column1 + rjmp load_column2 + rjmp load_column3 + rjmp load_column4 + rjmp load_column5 + rjmp load_column6 + rjmp load_column7 + rjmp load_column8 + rjmp load_column9 + rjmp load_columna + rjmp load_columnb + rjmp load_columnc + rjmp load_columnd + rjmp load_columne + rjmp load_columnf + rjmp amend_shiftRow + +load_column0: + mov x3j, x30 + rjmp Sbox_one_column +load_column1: + mov x30, x3j + mov x3j, x31 + rjmp Sbox_one_column +load_column2: + mov x31, x3j + mov x3j, x32 + rjmp Sbox_one_column +load_column3: + mov x32, x3j + mov x3j, x33 + rjmp Sbox_one_column +load_column4: + mov x33, x3j + mov x3j, x34 + rjmp Sbox_one_column +load_column5: + mov x34, x3j + mov x3j, x35 + rjmp Sbox_one_column +load_column6: + mov x35, x3j + mov x3j, x36 + rjmp Sbox_one_column +load_column7: + mov x36, x3j + mov x3j, x37 + rjmp Sbox_one_column +load_column8: + mov x37, x3j + mov x3j, x38 + rjmp Sbox_one_column +load_column9: + mov x38, x3j + mov x3j, x39 + rjmp Sbox_one_column +load_columna: + mov x39, x3j + mov x3j, x3a + rjmp Sbox_one_column +load_columnb: + mov x3a, x3j + mov x3j, x3b + rjmp Sbox_one_column +load_columnc: + mov x3b, x3j + mov x3j, x3c + rjmp Sbox_one_column +load_columnd: + mov x3c, x3j + mov x3j, x3d + rjmp Sbox_one_column +load_columne: + mov x3d, x3j + mov x3j, x3e + rjmp Sbox_one_column +load_columnf: + mov x3e, x3j + mov x3j, x3f + rjmp Sbox_one_column + +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) +LFSR_table: + rjmp LFSR7 + rjmp LFSR8 +LFSR7: + LFSR7_MACRO + rjmp LFSR_DONE +LFSR8: + LFSR8_MACRO + rjmp LFSR_DONE +#endif + +;;;;;;;;;;;;;;;;;;;;;;;; Real Start +AddRC_SubColumns_Start: + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + clr ccnt + ld x0j, Y + eor x0j, rc + +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) + ldi ZL, pm_lo8(LFSR_table) + ldi ZH, pm_hi8(LFSR_table) + sbrc AEDH, 2 ; AEDH[2] = 0 for AEAD and AEDH[1] = 1 for HASH + adiw ZL, 1 + ijmp +LFSR_DONE: +#elif defined(CRYPTO_AEAD) + LFSR7_MACRO ; only AEAD +#else + LFSR8_MACRO ; only HASH +#endif + + ldd x1j, Y + ROW_INBYTES + ldd x2j, Y + 2 * ROW_INBYTES + ldd t2j, Y + 2 * ROW_INBYTES + 1 + ldi ZL, pm_lo8(load_columns_table) + ldi ZH, pm_hi8(load_columns_table) + ijmp +Sbox_one_column: + Sbox x0j, x1j, x2j, x3j + + ; f e d c b a 9 8 7 6 5 4 3 2 1 0 + ; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- x- 0 + ; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- x' 0 + ; -- -- -- -- -- -- -- -- -- -- -- -- -- x- -- -- 2 + ; -- -- -- -- -- -- -- -- -- -- -- -- x' -- -- -- 3 + ; c b a 9 8 7 6 5 4 3 2 1 0 f e d + ; Store a byte to Row 0 + st Y, x0j + ; Store a byte combined with ShiftRow1 + lsl t1j + mov t1j, x1j ; back up the last updated byte in t1j, to be used in shiftRow1 (1 bit left) + rol x1j + std Y + ROW_INBYTES, x1j + ; Store a byte combined with ShiftRow2 + inc ccnt + cpi ccnt, ROW_INBYTES - 1 + brsh ROW2_WRAP + ldd tmp0, Y + 2 * ROW_INBYTES + 2 ; load next byte, the last updated byte needed to be shifted to the address of the next bytes + std Y + 2 * ROW_INBYTES + 2, x2j + mov x2j, t2j + mov t2j, tmp0 + jmp NO_ROW2_WRAP +ROW2_WRAP: + std Y + ROW_INBYTES + 2, x2j + mov x2j, t2j + + ; remain ShiftRow3 to be done at 'amend_shiftRow' +NO_ROW2_WRAP: + adiw YL, 1 + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + + adiw ZL, 1 + ijmp + +amend_shiftRow: + ldi YH, hi8(SRAM_STATE + ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + ROW_INBYTES) + + ld x1j, Y + bst t1j, 7 + bld x1j, 0 + st Y, x1j + + ; <<< 1 + mov x3f, x3j + rol x3j + rol x30 + rol x31 + rol x32 + rol x33 + rol x34 + rol x35 + rol x36 + rol x37 + rol x38 + rol x39 + rol x3a + rol x3b + rol x3c + rol x3d + rol x3e + rol x3f + ; <<< 24 + ; f e d c b a 9 8 7 6 5 4 3 2 1 0 => + ; c b a 9 8 7 6 5 4 3 2 1 0 f e d + mov x3j, x30 + mov x30, x3d + mov x3d, x3a + mov x3a, x37 + mov x37, x34 + mov x34, x31 + mov x31, x3e + mov x3e, x3b + mov x3b, x38 + mov x38, x35 + mov x35, x32 + mov x32, x3f + mov x3f, x3c + mov x3c, x39 + mov x39, x36 + mov x36, x33 + mov x33, x3j + + dec rcnt + breq round_loop_end + rjmp round_loop_start + +round_loop_end: + + ldi YH, hi8(SRAM_STATE + 3 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 3 * ROW_INBYTES) + st Y+, x30 + st Y+, x31 + st Y+, x32 + st Y+, x33 + st Y+, x34 + st Y+, x35 + st Y+, x36 + st Y+, x37 + st Y+, x38 + st Y+, x39 + st Y+, x3a + st Y+, x3b + st Y+, x3c + st Y+, x3d + st Y+, x3e + st Y+, x3f + + POP_CONFLICT +ret \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot512/avr8_lowrom/permutation.h b/knot/Implementations/crypto_hash/knot512/avr8_lowrom/permutation.h new file mode 100644 index 0000000..a57c5d3 --- /dev/null +++ b/knot/Implementations/crypto_hash/knot512/avr8_lowrom/permutation.h @@ -0,0 +1,109 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by KNOT Team * +; ********************************************** +; + +; +; ============================================ +; R E G I S T E R D E F I N I T I O N S +; ============================================ +; + +#define mclen r16 +#define radlen r17 +#define tcnt r17 +#define tmp0 r20 +#define tmp1 r21 +#define cnt0 r22 +#define rn r23 +#define rate r24 + +; +; ; AEDH = 0b000: for authenticate AD +; ; AEDH = 0b001: for encryption +; ; AEDH = 0b011: for decryption +; ; AEDH = 0b100: for hash +; #define AEDH r25 ; Register used globally within this program +; +; #define x30 r0 ; Register used without overlapping +; #define x31 r1 ; Register used without overlapping +; #define x32 r2 ; Register used without overlapping +; #define x33 r3 ; Register used without overlapping +; #define x34 r4 ; Register used without overlapping +; #define x35 r5 ; Register used without overlapping +; #define x36 r6 ; Register used without overlapping +; #define x37 r7 ; Register used without overlapping +; #define x38 r8 ; Register used without overlapping +; #define x39 r9 ; Register used without overlapping +; #define x3a r10 ; Register used without overlapping +; #define x3b r11 ; Register used without overlapping +; #define x3c r12 ; Register used without overlapping +; #define x3d r13 ; Register used without overlapping +; #define x3e r14 ; Register used without overlapping +; #define x3f r15 ; Register used without overlapping +; +; #define x0j r16 ; Register used overlapped, should be backed up before using +; #define x1j r17 ; Register used overlapped, should be backed up before using +; #define x2j r18 ; Register used overlapped, should be backed up before using +; #define x3j r19 ; Register used overlapped, should be backed up before using +; +; ; t2j used in knot512 to keep one byte in Row2 (because of rotating 16-bit), +; ; will not be interupt with LFSR which uses the overlapped register tmp1 +; #define t2j r21 ; Temporary register, used freely +; #define t1j r22 ; Temporary register, used freely +; #define t3j r23 ; Temporary register, used freely +; +; #define rc r24 ; Register used overlapped, should be backed up before using +; #define rcnt r26 ; Register used overlapped, should be backed up before using +; #define ccnt r27 ; Register used overlapped, should be backed up before using + +#define AEDH r25 +#define x30 r0 +#define x31 r1 +#define x32 r2 +#define x33 r3 +#define x34 r4 +#define x35 r5 +#define x36 r6 +#define x37 r7 +#define x38 r8 +#define x39 r9 +#define x3a r10 +#define x3b r11 +#define x3c r12 +#define x3d r13 +#define x3e r14 +#define x3f r15 + +#define x0j r16 +#define x1j r17 +#define x2j r18 +#define x3j r19 + +; t2j used in knot512 to keep one byte in Row2 (because of rotating 16-bit), +; will not be interupt with LFSR which uses the overlapped register tmp1 +#define t2j r21 +#define t1j r22 +#define t3j r23 + +#define rc r24 +#define rcnt r26 +#define ccnt r27 + +#if (STATE_INBITS==256) +#include "knot256.h" +#elif (STATE_INBITS==384) +#include "knot384.h" +#elif (STATE_INBITS==512) +#include "knot512.h" +#else +#error "Not specified key size and state size" +#endif + + diff --git a/knot/Implementations/crypto_hash/knot512/avr8_speed/api.h b/knot/Implementations/crypto_hash/knot512/avr8_speed/api.h new file mode 100644 index 0000000..a46499d --- /dev/null +++ b/knot/Implementations/crypto_hash/knot512/avr8_speed/api.h @@ -0,0 +1 @@ +#define CRYPTO_BYTES 64 \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot512/avr8_speed/assist.h b/knot/Implementations/crypto_hash/knot512/avr8_speed/assist.h new file mode 100644 index 0000000..f95a717 --- /dev/null +++ b/knot/Implementations/crypto_hash/knot512/avr8_speed/assist.h @@ -0,0 +1,86 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.1 2020 by KNOT Team * +; ********************************************** +; +.macro PUSH_CONFLICT + push r16 + push r17 + push r18 + push r19 + + push r23 + push r24 + push r25 + push r26 + push r27 + push r28 + push r29 + push r30 + push r31 +.endm + +.macro POP_CONFLICT + pop r31 + pop r30 + pop r29 + pop r28 + pop r27 + pop r26 + pop r25 + pop r24 + pop r23 + + pop r19 + pop r18 + pop r17 + pop r16 +.endm + +.macro PUSH_ALL + push r2 + push r3 + push r4 + push r5 + push r6 + push r7 + push r8 + push r9 + push r10 + push r11 + push r12 + push r13 + push r14 + push r15 + push r16 + push r17 + push r28 + push r29 +.endm + +.macro POP_ALL + pop r29 + pop r28 + pop r17 + pop r16 + pop r15 + pop r14 + pop r13 + pop r12 + pop r11 + pop r10 + pop r9 + pop r8 + pop r7 + pop r6 + pop r5 + pop r4 + pop r3 + pop r2 + clr r1 +.endm \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot512/avr8_speed/config.h b/knot/Implementations/crypto_hash/knot512/avr8_speed/config.h new file mode 100644 index 0000000..70fa8d6 --- /dev/null +++ b/knot/Implementations/crypto_hash/knot512/avr8_speed/config.h @@ -0,0 +1,131 @@ +#ifndef __CONFIG_H__ +#define __CONFIG_H__ + +//#define CRYPTO_AEAD +#define CRYPTO_HASH + +#define MAX_MESSAGE_LENGTH 128 + +#define STATE_INBITS 512 +/* For CRYPTO_AEAD */ +#define CRYPTO_KEYBITS 256 +/* For CRYPTO_HASH */ +#define CRYPTO_BITS 512 + +#define STATE_INBYTES ((STATE_INBITS + 7) / 8) +#define ROW_INBITS ((STATE_INBITS + 3) / 4) +#define ROW_INBYTES ((ROW_INBITS + 7) / 8) + +/* For CRYPTO_AEAD */ +#define CRYPTO_KEYBYTES ((CRYPTO_KEYBITS + 7) / 8) +#define CRYPTO_NSECBYTES 0 +#define CRYPTO_NPUBBYTES CRYPTO_KEYBYTES +#define CRYPTO_ABYTES CRYPTO_KEYBYTES +#define CRYPTO_NOOVERLAP 1 + +#define MAX_ASSOCIATED_DATA_LENGTH 32 +#define MAX_CIPHER_LENGTH (MAX_MESSAGE_LENGTH + CRYPTO_ABYTES) + +#define TAG_MATCH 0 +#define TAG_UNMATCH -1 +#define OTHER_FAILURES -2 + +/* For CRYPTO_HASH */ +#define CRYPTO_BYTES ((CRYPTO_BITS + 7) / 8) + + + +#define DOMAIN_BITS 0x80 +#define PAD_BITS 0x01 +#define S384_R192_BITS 0x80 + +#if (STATE_INBITS==256) +#define C1 1 +#define C2 8 +#define C3 25 +#elif (STATE_INBITS==384) +#define C1 1 +#define C2 8 +#define C3 55 +#elif (STATE_INBITS==512) +#define C1 1 +#define C2 16 +#define C3 25 +#else +#error "Not specified state size" +#endif + +#ifdef CRYPTO_AEAD +/* For CRYPTO_AEAD */ +#define KEY_INBITS (CRYPTO_KEYBYTES * 8) +#define KEY_INBYTES (CRYPTO_KEYBYTES) + +#define NONCE_INBITS (CRYPTO_NPUBBYTES * 8) +#define NONCE_INBYTES (CRYPTO_NPUBBYTES) + +#define TAG_INBITS (CRYPTO_ABYTES * 8) +#define TAG_INBYTES (CRYPTO_ABYTES) + +#if (KEY_INBITS==128) && (STATE_INBITS==256) +#define RATE_INBITS 64 +#define NR_0 52 +#define NR_i 28 +#define NR_f 32 +#elif (KEY_INBITS==128) && (STATE_INBITS==384) +#define RATE_INBITS 192 +#define NR_0 76 +#define NR_i 28 +#define NR_f 32 +#elif (KEY_INBITS==192) && (STATE_INBITS==384) +#define RATE_INBITS 96 +#define NR_0 76 +#define NR_i 40 +#define NR_f 44 +#elif (KEY_INBITS==256) && (STATE_INBITS==512) +#define RATE_INBITS 128 +#define NR_0 100 +#define NR_i 52 +#define NR_f 56 +#else +#error "Not specified key size and state size" +#endif + +#define RATE_INBYTES ((RATE_INBITS + 7) / 8) +#define SQUEEZE_RATE_INBYTES TAG_INBYTES + +#endif + +#ifdef CRYPTO_HASH +/* For CRYPTO_HASH */ +#define HASH_DIGEST_INBITS (CRYPTO_BYTES * 8) + +#if (HASH_DIGEST_INBITS==256) && (STATE_INBITS==256) +#define HASH_RATE_INBITS 32 +#define HASH_SQUEEZE_RATE_INBITS 128 +#define NR_h 68 +#elif (HASH_DIGEST_INBITS==256) && (STATE_INBITS==384) +#define HASH_RATE_INBITS 128 +#define HASH_SQUEEZE_RATE_INBITS 128 +#define NR_h 80 +#elif (HASH_DIGEST_INBITS==384) && (STATE_INBITS==384) +#define HASH_RATE_INBITS 48 +#define HASH_SQUEEZE_RATE_INBITS 192 +#define NR_h 104 +#elif (HASH_DIGEST_INBITS==512) && (STATE_INBITS==512) +#define HASH_RATE_INBITS 64 +#define HASH_SQUEEZE_RATE_INBITS 256 +#define NR_h 140 +#else +#error "Not specified hash digest size and state size" +#endif + +#define HASH_RATE_INBYTES ((HASH_RATE_INBITS + 7) / 8) +#define HASH_SQUEEZE_RATE_INBYTES ((HASH_SQUEEZE_RATE_INBITS + 7) / 8) + +#endif + +#define TAG_MATCH 0 +#define TAG_UNMATCH -1 +#define OTHER_FAILURES -2 + +#endif \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot512/avr8_speed/crypto_hash.h b/knot/Implementations/crypto_hash/knot512/avr8_speed/crypto_hash.h new file mode 100644 index 0000000..342a639 --- /dev/null +++ b/knot/Implementations/crypto_hash/knot512/avr8_speed/crypto_hash.h @@ -0,0 +1,13 @@ +#ifdef __cplusplus +extern "C" { +#endif + +int crypto_hash( + unsigned char *out, + const unsigned char *in, + unsigned long long inlen + ); + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot512/avr8_speed/encrypt.c b/knot/Implementations/crypto_hash/knot512/avr8_speed/encrypt.c new file mode 100644 index 0000000..baf0a3b --- /dev/null +++ b/knot/Implementations/crypto_hash/knot512/avr8_speed/encrypt.c @@ -0,0 +1,106 @@ +#include +#include +#include +#include +#include "config.h" + +extern void crypto_aead_encrypt_asm( + unsigned char *c, + const unsigned char *m, + unsigned char mlen, + const unsigned char *ad, + unsigned char adlen, + const unsigned char *npub, + const unsigned char *k + ); + +extern int crypto_aead_decrypt_asm( + unsigned char *m, + const unsigned char *c, + unsigned char clen, + const unsigned char *ad, + unsigned char adlen, + const unsigned char *npub, + const unsigned char *k + ); + +extern void crypto_hash_asm( + unsigned char *out, + const unsigned char *in, + unsigned char inlen + ); + + +int crypto_aead_encrypt( + unsigned char *c, unsigned long long *clen, + const unsigned char *m, unsigned long long mlen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k + ) +{ + /* + ... + ... the code for the cipher implementation goes here, + ... generating a ciphertext c[0],c[1],...,c[*clen-1] + ... from a plaintext m[0],m[1],...,m[mlen-1] + ... and associated data ad[0],ad[1],...,ad[adlen-1] + ... and nonce npub[0],npub[1],.. + ... and secret key k[0],k[1],... + ... the implementation shall not use nsec + ... + ... return 0; + */ + + (void)nsec; + + crypto_aead_encrypt_asm(c, m, mlen, ad, adlen, npub, k); + + *clen = mlen + TAG_INBYTES; + return 0; +} + + + +int crypto_aead_decrypt( + unsigned char *m, unsigned long long *mlen, + unsigned char *nsec, + const unsigned char *c, unsigned long long clen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k + ) +{ + /* + ... + ... the code for the AEAD implementation goes here, + ... generating a plaintext m[0],m[1],...,m[*mlen-1] + ... and secret message number nsec[0],nsec[1],... + ... from a ciphertext c[0],c[1],...,c[clen-1] + ... and associated data ad[0],ad[1],...,ad[adlen-1] + ... and nonce number npub[0],npub[1],... + ... and secret key k[0],k[1],... + ... + ... return 0; + */ + unsigned long long mlen_; + unsigned char tag_is_match; + + (void)nsec; + if (clen < CRYPTO_ABYTES) { + return -1; + } + mlen_ = clen - CRYPTO_ABYTES; + + tag_is_match = crypto_aead_decrypt_asm(m, c, mlen_, ad, adlen, npub, k); + + if (tag_is_match != 0) + { + memset(m, 0, (size_t)mlen_); + return -1; + } + + *mlen = mlen_; + return 0; +} \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot512/avr8_speed/encrypt_core.S b/knot/Implementations/crypto_hash/knot512/avr8_speed/encrypt_core.S new file mode 100644 index 0000000..bd74f93 --- /dev/null +++ b/knot/Implementations/crypto_hash/knot512/avr8_speed/encrypt_core.S @@ -0,0 +1,555 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.1 2020 by KNOT Team * +; ********************************************** +; + +; +; ============================================ +; S R A M D E F I N I T I O N S +; ============================================ +; +#include +#include "config.h" + +.section .noinit + SRAM_STATE: .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#if (STATE_INBYTES > 32) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif +#if (STATE_INBYTES > 48) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif + SRAM_MESSAGE_OUT_ADDR: .BYTE 0, 0 + SRAM_MESSAGE_IN_ADDR: .BYTE 0, 0 + SRAM_MESSAGE_IN_LEN: .BYTE 0, 0 +#ifdef CRYPTO_AEAD +; For CRYPTO_AEAD + SRAM_ASSOCIATED_DATA_ADDR: .BYTE 0, 0 + SRAM_ADLEN: .BYTE 0, 0 + SRAM_NONCE_ADDR: .BYTE 0, 0 + SRAM_KEY_ADDR: .BYTE 0, 0 + + SRAM_ADDITIONAL: + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#if (CRYPTO_ABYTES > 16) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif +#if (CRYPTO_ABYTES > 24) + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 +#endif + +#endif + +.section .text + +#include "permutation.h" + +; require YH:YL be the address of the current associated data/cipher/message block +; for enc and dec, store ciphertext or plaintext +; require ZH:ZL be the address of the current cipher/message block +.macro XOR_to_State_ENCDEC + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + mov cnt0, rate +XOR_to_State_loop_ENCDEC: + ld tmp0, Y+ ; plaintext/ciphertext + ld tmp1, X ; state + eor tmp1, tmp0 ; ciphertext/plaintext + st Z+, tmp1 ; store ciphertext/plaintext + sbrc AEDH, 1 ; test auth/enc or dec, if AEDH[1] == 0, skip repalce state byte + mov tmp1, tmp0 ; if dec, replace state + st X+, tmp1 ; store state byte + dec cnt0 + brne XOR_to_State_loop_ENCDEC +; YH:YL are now the address of the next associated data block +.endm + +; require YH:YL be the address of the current associated data/cipher/message block +; for enc and dec, store ciphertext or plaintext +; require ZH:ZL be the address of the current cipher/message block +.macro XOR_to_State_AUTH + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + mov cnt0, rate +XOR_to_State_loop_AUTH: + ld tmp0, Y+ ; plaintext/ciphertext + ld tmp1, X ; state + eor tmp1, tmp0 ; ciphertext/plaintext + st X+, tmp1 ; store state byte + dec cnt0 + brne XOR_to_State_loop_AUTH +; YH:YL are now the address of the next associated data block +.endm + + + +; require YH:YL pointed to the input data +; require ZH:ZL pointed to the output data +; require cnt0 containes the nubmer of bytes in source data +; require number of bytes in source data less than rate, i.e., 0 <= cnt0 < rate +; +; the 0th bit in AEDH is used to distinguish (auth AD) or (enc/dec M/C): +; AEDH[0] = 0 for (auth AD), AEDH[0] = 1 for (enc/dec M/C) +; the 1th bit in AEDH is used to distinguish (auth AD/enc M) or (dec C): +; AEDH[1] = 0 for (auth AD/enc M), AEDH[1] = 1 for (dec C) +; AEDH = 0b000 for (auth AD) +; AEDH = 0b001 for (enc M) +; AEDH = 0b011 for (dec C) +Pad_XOR_to_State: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + tst cnt0 + breq XOR_padded_data +XOR_source_data_loop: + ld tmp0, Y+ ; plaintext/ciphertext + ld tmp1, X ; state + eor tmp1, tmp0 ; ciphertext/plaintext + sbrc AEDH, 0 ; test auth or enc/dec, if AEDH[0] == 0, skip store result + st Z+, tmp1 ; store ciphertext/plaintext + sbrc AEDH, 1 ; test auth/enc or dec, if AEDH[1] == 0, skip repalce state byte + mov tmp1, tmp0 ; if dec, replace state + st X+, tmp1 ; store state byte + dec cnt0 + brne XOR_source_data_loop +XOR_padded_data: + ldi tmp0, PAD_BITS + ld tmp1, X + eor tmp1, tmp0 + st X, tmp1 +ret + +AddDomain: + ldi XH, hi8(SRAM_STATE + STATE_INBYTES - 1) + ldi XL, lo8(SRAM_STATE + STATE_INBYTES - 1) + ldi tmp0, DOMAIN_BITS + ld tmp1, X + eor tmp0, tmp1 + st X, tmp0 +ret + +; require ZH:ZL be the address of the destination +EXTRACT_from_State: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + mov tmp1, rate +EXTRACT_from_State_loop: + ld tmp0, X+ + st Z+, tmp0 + dec tmp1 + brne EXTRACT_from_State_loop +ret + +AUTH: + tst radlen + breq AUTH_end + + cp radlen, rate + brlo auth_ad_padded_block + +auth_ad_loop: + XOR_to_State_AUTH + rcall Permutation + sub radlen, rate + cp radlen, rate + brlo auth_ad_padded_block + rjmp auth_ad_loop + +auth_ad_padded_block: + mov cnt0, radlen + rcall Pad_XOR_to_State + rcall Permutation + +AUTH_end: +ret + +#ifdef CRYPTO_AEAD +Initialization: + ldi rn, NR_0 + ldi XL, lo8(SRAM_STATE) + ldi XH, hi8(SRAM_STATE) + + lds YH, SRAM_NONCE_ADDR + lds YL, SRAM_NONCE_ADDR + 1 + ldi cnt0, CRYPTO_NPUBBYTES +load_nonce_loop: + ld tmp0, Y+ + st X+, tmp0 + dec cnt0 + brne load_nonce_loop + + lds YH, SRAM_KEY_ADDR + lds YL, SRAM_KEY_ADDR + 1 + ldi cnt0, CRYPTO_KEYBYTES +load_key_loop: + ld tmp0, Y+ + st X+, tmp0 + dec cnt0 + brne load_key_loop + +#if (STATE_INBITS==384) && (RATE_INBITS==192) + ldi cnt0, (STATE_INBYTES - CRYPTO_NPUBBYTES - CRYPTO_KEYBYTES - 1) + clr tmp0 +empty_state_loop: + st X+, tmp0 + dec cnt0 + brne empty_state_loop + ldi tmp0, S384_R192_BITS + st X+, tmp0 +#endif + + rcall Permutation +ret + +ENC: + tst mclen + breq ENC_end + + cp mclen, rate + brlo enc_padded_block + +enc_loop: + XOR_to_State_ENCDEC + ldi rn, NR_i + rcall Permutation + sub mclen, rate + cp mclen, rate + brlo enc_padded_block + rjmp enc_loop + +enc_padded_block: + mov cnt0, mclen + rcall Pad_XOR_to_State +ENC_end: +ret + +Finalization: + ldi rate, SQUEEZE_RATE_INBYTES + ldi rn, NR_f + rcall Permutation + rcall EXTRACT_from_State +ret + +; void crypto_aead_encrypt_asm( +; unsigned char *c, +; const unsigned char *m, +; unsigned long long mlen, +; const unsigned char *ad, +; unsigned long long adlen, +; const unsigned char *npub, +; const unsigned char *k +; ) +; +; unsigned char *c, is passed in r24:r25 +; const unsigned char *m, is passed in r22:r23 +; unsigned long long mlen, is passed in r20:r21, only LSB (r20) is used +; const unsigned char *ad, is passed in r18:r19 +; unsigned long long adlen, is passed in r16:r17, only LSB (r16) is used +; const unsigned char *npub, is passed in r14:r15 +; const unsigned char *k is passed in r12:r13 +.global crypto_aead_encrypt_asm +crypto_aead_encrypt_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store cipher address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store message address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store message length in SRAM_MESSAGE_IN_LEN + st X+, r20 + st X+, r19 ;store associated data address in SRAM_ASSOCIATED_DATA_ADDR + st X+, r18 + st X+, r17 ;store associated data length in SRAM_ADLEN + st X+, r16 + st X+, r15 ;store nonce address in SRAM_NONCE_ADDR + st X+, r14 + st X+, r13 ;store key address in SRAM_KEY_ADDR + st X+, r12 + mov radlen, r16 + mov mclen, r20 + + rcall Initialization + + ldi rn, NR_i + ldi rate, RATE_INBYTES + ldi AEDH, 0b000 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_ASSOCIATED_DATA_ADDR + lds YL, SRAM_ASSOCIATED_DATA_ADDR + 1 + rcall AUTH + rcall AddDomain + ldi AEDH, 0b001 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_MESSAGE_IN_ADDR + lds YL, SRAM_MESSAGE_IN_ADDR + 1 + lds ZH, SRAM_MESSAGE_OUT_ADDR + lds ZL, SRAM_MESSAGE_OUT_ADDR + 1 + rcall ENC + rcall Finalization + POP_ALL +ret + +; int crypto_aead_decrypt_asm( +; unsigned char *m, +; const unsigned char *c, +; unsigned long long clen, +; const unsigned char *ad, +; unsigned long long adlen, +; const unsigned char *npub, +; const unsigned char *k +; ) +; +; unsigned char *m, is passed in r24:r25 +; const unsigned char *c, is passed in r22:r23 +; unsigned long long clen, is passed in r20:r21, only LSB (r20) is used +; const unsigned char *ad, is passed in r18:r19 +; unsigned long long adlen, is passed in r16:r17, only LSB (r16) is used +; const unsigned char *npub, is passed in r14:r15 +; const unsigned char *k is passed in r12:r13 +.global crypto_aead_decrypt_asm +crypto_aead_decrypt_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store message address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store cipher address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store cipher length in SRAM_MESSAGE_IN_LEN + st X+, r20 + st X+, r19 ;store associated data address in SRAM_ASSOCIATED_DATA_ADDR + st X+, r18 + st X+, r17 ;store associated data length in SRAM_ADLEN + st X+, r16 + st X+, r15 ;store nonce address in SRAM_NONCE_ADDR + st X+, r14 + st X+, r13 ;store key address in SRAM_KEY_ADDR + st X+, r12 + mov radlen, r16 + mov mclen, r20 + + rcall Initialization + + ldi rn, NR_i + ldi rate, RATE_INBYTES + ldi AEDH, 0b000 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_ASSOCIATED_DATA_ADDR + lds YL, SRAM_ASSOCIATED_DATA_ADDR + 1 + rcall AUTH + rcall AddDomain + ldi AEDH, 0b011 ; AEDH = 0b000 for (auth AD), AEDH = 0b001 for (enc M), AEDH = 0b011 for (dec C) + lds YH, SRAM_MESSAGE_IN_ADDR + lds YL, SRAM_MESSAGE_IN_ADDR + 1 + lds ZH, SRAM_MESSAGE_OUT_ADDR + lds ZL, SRAM_MESSAGE_OUT_ADDR + 1 + rcall ENC + + ldi ZH, hi8(SRAM_ADDITIONAL) + ldi ZL, lo8(SRAM_ADDITIONAL) + rcall Finalization + + sbiw ZL, CRYPTO_ABYTES + ldi cnt0, CRYPTO_ABYTES +compare_tag: + ld tmp0, Z+ + ld tmp1, Y+ + cp tmp0, tmp1 + brne return_tag_not_match + dec cnt0 + brne compare_tag + rjmp return_tag_match + +return_tag_not_match: + ldi r25, 0xFF + ldi r24, 0xFF + rjmp crypto_aead_decrypt_end + +return_tag_match: + clr r25 + clr r24 +crypto_aead_decrypt_end: + POP_ALL +ret + +; #ifdef CRYPTO_AEAD +#endif + + +#ifdef CRYPTO_HASH + +; void crypto_hash_asm( +; unsigned char *out, +; const unsigned char *in, +; unsigned long long inlen +; ) +; +; unsigned char *out, is passed in r24:r25 +; const unsigned char *in, is passed in r22:r23 +; unsigned long long inlen, is passed in r20:r21, only LSB (r20) is used +.global crypto_hash_asm +crypto_hash_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store message address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store cipher address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store cipher length in SRAM_MESSAGE_IN_LEN + st X+, r20 + mov mclen, r20 + + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) +#if (STATE_INBITS==384) && (HASH_RATE_INBITS==128) + ldi cnt0, STATE_INBYTES - 1 +#else + ldi cnt0, STATE_INBYTES +#endif + clr tmp0 +zero_state: + st X+, tmp0 + dec cnt0 + brne zero_state + +#if (STATE_INBITS==384) && (HASH_RATE_INBITS==128) + ldi tmp0, S384_R192_BITS + st X+, tmp0 +#endif + + ldi rn, NR_h + ldi AEDH, 0b100 + +HASH_ABSORBING: + mov radlen, mclen + tst radlen + breq EMPTY_M + ldi rate, HASH_RATE_INBYTES + lds YH, SRAM_MESSAGE_IN_ADDR + lds YL, SRAM_MESSAGE_IN_ADDR + 1 + rcall AUTH + rjmp HASH_SQUEEZING + +EMPTY_M: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + ldi tmp0, PAD_BITS + ld tmp1, X + eor tmp1, tmp0 + st X, tmp1 + rcall Permutation + +HASH_SQUEEZING: + ldi rate, HASH_SQUEEZE_RATE_INBYTES + lds ZH, SRAM_MESSAGE_OUT_ADDR + lds ZL, SRAM_MESSAGE_OUT_ADDR + 1 + ldi tcnt, CRYPTO_BYTES +SQUEEZING_loop: + rcall EXTRACT_from_State + subi tcnt, HASH_SQUEEZE_RATE_INBYTES + breq HASH_SQUEEZING_end + rcall Permutation + rjmp SQUEEZING_loop +HASH_SQUEEZING_end: + POP_ALL +ret + +#endif + + +; Byte Order In AVR 8: +; KNOT-AEAD(128, 256, 64): +; N[ 0] AEAD_State[ 0] | Message[ 0] Perm_row_0[0] 0 Tag[ 0] +; N[ 1] AEAD_State[ 1] | Message[ 1] Perm_row_0[1] 0 Tag[ 1] +; N[ 2] AEAD_State[ 2] | Message[ 2] Perm_row_0[2] 0 Tag[ 2] +; N[ 3] AEAD_State[ 3] | Message[ 3] Perm_row_0[3] 0 Tag[ 3] +; N[ 4] AEAD_State[ 4] | Message[ 4] 0x01 Perm_row_0[4] 0 Tag[ 4] +; N[ 5] AEAD_State[ 5] | Message[ 5] 0x00 Perm_row_0[5] 0 Tag[ 5] +; N[ 6] AEAD_State[ 6] | Message[ 6] 0x00 Perm_row_0[6] 0 Tag[ 6] +; N[ 7] AEAD_State[ 7] | Message[ 7] 0x00 Perm_row_0[7] <<< 0 Tag[ 7] +; N[ 8] AEAD_State[ 8] | Perm_row_1[0] 1 +; N[ 9] AEAD_State[ 9] | Perm_row_1[1] 1 +; N[10] AEAD_State[10] | Perm_row_1[2] 1 +; N[11] AEAD_State[11] | Perm_row_1[3] 1 +; N[12] AEAD_State[12] | Perm_row_1[4] 1 +; N[13] AEAD_State[13] | Perm_row_1[5] 1 +; N[14] AEAD_State[14] | Perm_row_1[6] 1 +; N[15] AEAD_State[15] | Perm_row_1[7] <<< 1 +; K[ 0] AEAD_State[16] | Perm_row_2[0] 8 +; K[ 1] AEAD_State[17] | Perm_row_2[1] 8 +; K[ 2] AEAD_State[18] | Perm_row_2[2] 8 +; K[ 3] AEAD_State[19] | Perm_row_2[3] 8 +; K[ 4] AEAD_State[20] | Perm_row_2[4] 8 +; K[ 5] AEAD_State[21] | Perm_row_2[5] 8 +; K[ 6] AEAD_State[22] | Perm_row_2[6] 8 +; K[ 7] AEAD_State[23] | Perm_row_2[7] <<< 8 +; K[ 8] AEAD_State[24] | Perm_row_3[0] 25 +; K[ 9] AEAD_State[25] | Perm_row_3[1] 25 +; K[10] AEAD_State[26] | Perm_row_3[2] 25 +; K[11] AEAD_State[27] | Perm_row_3[3] 25 +; K[12] AEAD_State[28] | Perm_row_3[4] 25 +; K[13] AEAD_State[29] | Perm_row_3[5] 25 +; K[14] AEAD_State[30] | Perm_row_3[6] 25 +; K[15] AEAD_State[31] | ^0x80 Perm_row_3[7] <<< 25 +; +; +; KNOT-AEAD(128, 384, 192): +; Initalization +; N[ 0] AEAD_State[ 0] | Message[ 0] Perm_row_0[ 0] 0 Tag[ 0] +; N[ 1] AEAD_State[ 1] | Message[ 1] Perm_row_0[ 1] 0 Tag[ 1] +; N[ 2] AEAD_State[ 2] | Message[ 2] Perm_row_0[ 2] 0 Tag[ 2] +; N[ 3] AEAD_State[ 3] | Message[ 3] Perm_row_0[ 3] 0 Tag[ 3] +; N[ 4] AEAD_State[ 4] | Message[ 4] 0x01 Perm_row_0[ 4] 0 Tag[ 4] +; N[ 5] AEAD_State[ 5] | Message[ 5] 0x00 Perm_row_0[ 5] 0 Tag[ 5] +; N[ 6] AEAD_State[ 6] | Message[ 6] 0x00 Perm_row_0[ 6] 0 Tag[ 6] +; N[ 7] AEAD_State[ 7] | Message[ 7] 0x00 Perm_row_0[ 7] 0 Tag[ 7] +; N[ 8] AEAD_State[ 8] | Message[ 8] 0x00 Perm_row_0[ 8] 0 Tag[ 8] +; N[ 9] AEAD_State[ 9] | Message[ 9] 0x00 Perm_row_0[ 9] 0 Tag[ 9] +; N[10] AEAD_State[10] | Message[10] 0x00 Perm_row_0[10] 0 Tag[10] +; N[11] AEAD_State[11] | Message[11] 0x00 Perm_row_0[11] <<< 0 Tag[11] +; N[12] AEAD_State[12] | Message[12] 0x00 Perm_row_1[ 0] 1 Tag[12] +; N[13] AEAD_State[13] | Message[13] 0x00 Perm_row_1[ 1] 1 Tag[13] +; N[14] AEAD_State[14] | Message[14] 0x00 Perm_row_1[ 2] 1 Tag[14] +; N[15] AEAD_State[15] | Message[15] 0x00 Perm_row_1[ 3] 1 Tag[15] +; K[ 0] AEAD_State[16] | Message[16] 0x00 Perm_row_1[ 4] 1 +; K[ 1] AEAD_State[17] | Message[17] 0x00 Perm_row_1[ 5] 1 +; K[ 2] AEAD_State[18] | Message[18] 0x00 Perm_row_1[ 6] 1 +; K[ 3] AEAD_State[19] | Message[19] 0x00 Perm_row_1[ 7] 1 +; K[ 4] AEAD_State[20] | Message[20] 0x00 Perm_row_1[ 8] 1 +; K[ 5] AEAD_State[21] | Message[21] 0x00 Perm_row_1[ 9] 1 +; K[ 6] AEAD_State[22] | Message[22] 0x00 Perm_row_1[10] 1 +; K[ 7] AEAD_State[23] | Message[23] 0x00 Perm_row_1[11] <<< 1 +; K[ 8] AEAD_State[24] | Perm_row_2[ 0] 8 +; K[ 9] AEAD_State[25] | Perm_row_2[ 1] 8 +; K[10] AEAD_State[26] | Perm_row_2[ 2] 8 +; K[11] AEAD_State[27] | Perm_row_2[ 3] 8 +; K[12] AEAD_State[28] | Perm_row_2[ 4] 8 +; K[13] AEAD_State[29] | Perm_row_2[ 5] 8 +; K[14] AEAD_State[30] | Perm_row_2[ 6] 8 +; K[15] AEAD_State[31] | Perm_row_2[ 7] 8 +; 0x00 AEAD_State[32] | Perm_row_2[ 8] 8 +; 0x00 AEAD_State[33] | Perm_row_2[ 9] 8 +; 0x00 AEAD_State[34] | Perm_row_2[10] 8 +; 0x00 AEAD_State[35] | Perm_row_2[11] <<< 8 +; 0x00 AEAD_State[36] | Perm_row_3[ 0] 55 +; 0x00 AEAD_State[37] | Perm_row_3[ 1] 55 +; 0x00 AEAD_State[38] | Perm_row_3[ 2] 55 +; 0x00 AEAD_State[39] | Perm_row_3[ 3] 55 +; 0x00 AEAD_State[40] | Perm_row_3[ 4] 55 +; 0x00 AEAD_State[41] | Perm_row_3[ 5] 55 +; 0x00 AEAD_State[42] | Perm_row_3[ 6] 55 +; 0x00 AEAD_State[43] | Perm_row_3[ 7] 55 +; 0x00 AEAD_State[44] | Perm_row_3[ 8] 55 +; 0x00 AEAD_State[45] | Perm_row_3[ 9] 55 +; 0x00 AEAD_State[46] | Perm_row_3[10] 55 +; 0x00 ^0x80 AEAD_State[47] | ^0x80 Perm_row_3[11] <<< 55 diff --git a/knot/Implementations/crypto_hash/knot512/avr8_speed/hash.c b/knot/Implementations/crypto_hash/knot512/avr8_speed/hash.c new file mode 100644 index 0000000..dbbe4df --- /dev/null +++ b/knot/Implementations/crypto_hash/knot512/avr8_speed/hash.c @@ -0,0 +1,32 @@ +#include +#include +#include +#include +#include "api.h" +#include "crypto_hash.h" + +extern void crypto_hash_asm( + unsigned char *out, + const unsigned char *in, + unsigned char inlen + ); + +int crypto_hash( + unsigned char *out, + const unsigned char *in, + unsigned long long inlen +) +{ + /* + ... + ... the code for the hash function implementation goes here + ... generating a hash value out[0],out[1],...,out[CRYPTO_BYTES-1] + ... from a message in[0],in[1],...,in[in-1] + ... + ... return 0; + */ + + crypto_hash_asm(out, in, inlen); + + return 0; +} \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot512/avr8_speed/knot256.h b/knot/Implementations/crypto_hash/knot512/avr8_speed/knot256.h new file mode 100644 index 0000000..f99f68b --- /dev/null +++ b/knot/Implementations/crypto_hash/knot512/avr8_speed/knot256.h @@ -0,0 +1,306 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.1 2020 by KNOT Team * +; ********************************************** +; +#define x10 r0 +#define x11 r1 +#define x12 r2 +#define x13 r3 +#define x14 r4 +#define x15 r5 +#define x16 r6 +#define x17 r7 + +; an intentionally arrangement of registers to facilitate movw +#define x20 r8 +#define x21 r10 +#define x22 r12 +#define x23 r14 +#define x24 r9 +#define x25 r11 +#define x26 r13 +#define x27 r15 + +; an intentionally arrangement of registers to facilitate movw +#define x30 r16 +#define x35 r18 +#define x32 r20 +#define x37 r22 +#define x34 r17 +#define x31 r19 +#define x36 r21 +#define x33 r23 + +#define t0j r24 +#define t1j r25 +#define x0j r27 + +#include "assist.h" + +.macro Sbox i0, i1, i2, i3 + mov t0j, \i1 + com \i0 + and \i1, \i0 + eor \i1, \i2 + or \i2, t0j + eor \i0, \i3 + eor \i2, \i0 + eor t0j, \i3 + and \i0, \i1 + eor \i3, \i1 + eor \i0, t0j + and t0j, \i2 + eor \i1, t0j +.endm + +Permutation: + PUSH_CONFLICT + mov rcnt, rn + + ldi YH, hi8(SRAM_STATE + ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + ROW_INBYTES) + ld x10, Y+ + ld x11, Y+ + ld x12, Y+ + ld x13, Y+ + ld x14, Y+ + ld x15, Y+ + ld x16, Y+ + ld x17, Y+ + ld x20, Y+ + ld x21, Y+ + ld x22, Y+ + ld x23, Y+ + ld x24, Y+ + ld x25, Y+ + ld x26, Y+ + ld x27, Y+ + ld x30, Y+ + ld x31, Y+ + ld x32, Y+ + ld x33, Y+ + ld x34, Y+ + ld x35, Y+ + ld x36, Y+ + ld x37, Y+ + +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) + sbrc AEDH, 2 ; AEDH[2] = 0 for AEAD and AEDH[2] = 1 for HASH + rjmp For_Hash +For_AEAD: + ldi ZL, lo8(RC_LFSR6) + ldi ZH, hi8(RC_LFSR6) + rjmp round_loop_start +For_Hash: + ldi ZL, lo8(RC_LFSR7) + ldi ZH, hi8(RC_LFSR7) +#elif defined(CRYPTO_AEAD) + ldi ZL, lo8(RC_LFSR6) + ldi ZH, hi8(RC_LFSR6) +#else + ldi ZL, lo8(RC_LFSR7) + ldi ZH, hi8(RC_LFSR7) +#endif + +round_loop_start: + ; AddRC + lpm t0j, Z+ + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + ld x0j, Y + eor x0j, t0j + + ; SubColumns + Sbox x0j, x10, x20, x30 + st Y+, x0j + ld x0j, Y + Sbox x0j, x11, x21, x31 + st Y+, x0j + ld x0j, Y + Sbox x0j, x12, x22, x32 + st Y+, x0j + ld x0j, Y + Sbox x0j, x13, x23, x33 + st Y+, x0j + ld x0j, Y + Sbox x0j, x14, x24, x34 + st Y+, x0j + ld x0j, Y + Sbox x0j, x15, x25, x35 + st Y+, x0j + ld x0j, Y + Sbox x0j, x16, x26, x36 + st Y+, x0j + ld x0j, Y + Sbox x0j, x17, x27, x37 + st Y, x0j + + ; ShiftRows + ; <<< 1 + mov t0j, x17 + rol t0j + rol x10 + rol x11 + rol x12 + rol x13 + rol x14 + rol x15 + rol x16 + rol x17 + + ; <<< 8 + ; 7 6 5 4 3 2 1 0 => 6 5 4 3 2 1 0 7 + ;mov t0j, x27 + ;mov x27, x26 + ;mov x26, x25 + ;mov x25, x24 + ;mov x24, x23 + ;mov x23, x22 + ;mov x22, x21 + ;mov x21, x20 + ;mov x20, t0j + ; an intentionally arrangement of registers to facilitate movw + movw t0j, x23 ; t1j:t0j <= x27:x23 + movw x23, x22 ; x27:x23 <= x26:x22 + movw x22, x21 ; x26:x22 <= x25:x21 + movw x21, x20 ; x25:x21 <= x24:x20 + mov x20, t1j ; x20 <= t1j + mov x24, t0j ; x24 <= t0j + + ; <<< 1 + mov t0j, x37 + rol t0j + rol x30 + rol x31 + rol x32 + rol x33 + rol x34 + rol x35 + rol x36 + rol x37 + ; <<< 24 + ; 7 6 5 4 3 2 1 0 => 4 3 2 1 0 7 6 5 + ;mov t0j, x30 + ;mov x30, x35 + ;mov x35, x32 + ;mov x32, x37 + ;mov x37, x34 + ;mov x34, x31 + ;mov x31, x36 + ;mov x36, x33 + ;mov x33, t0j + ; an intentionally arrangement of registers to facilitate movw + ;x30 r16 + ;x35 r18 + ;x32 r20 + ;x37 r22 + ;x34 r17 + ;x31 r19 + ;x36 r21 + ;x33 r23 + movw t0j, x30 ; t1j:t0j <= x34:x30 + movw x30, x35 ; x34:x30 <= x31:x35 + movw x35, x32 ; x31:x35 <= x36:x32 + movw x32, x37 ; x36:x32 <= x33:x37 + mov x37, t1j ; x37 <= x34 + mov x33, t0j ; x33 <= x30 + + dec rcnt + breq round_loop_end + jmp round_loop_start + +round_loop_end: + ldi YH, hi8(SRAM_STATE + ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + ROW_INBYTES) + st Y+, x10 + st Y+, x11 + st Y+, x12 + st Y+, x13 + st Y+, x14 + st Y+, x15 + st Y+, x16 + st Y+, x17 + st Y+, x20 + st Y+, x21 + st Y+, x22 + st Y+, x23 + st Y+, x24 + st Y+, x25 + st Y+, x26 + st Y+, x27 + st Y+, x30 + st Y+, x31 + st Y+, x32 + st Y+, x33 + st Y+, x34 + st Y+, x35 + st Y+, x36 + st Y+, x37 + + POP_CONFLICT +ret + + +.section .text +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) +RC_LFSR6: +.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x21, 0x03, 0x06 +.byte 0x0c, 0x18, 0x31, 0x22, 0x05, 0x0a, 0x14, 0x29 +.byte 0x13, 0x27, 0x0f, 0x1e, 0x3d, 0x3a, 0x34, 0x28 +.byte 0x11, 0x23, 0x07, 0x0e, 0x1c, 0x39, 0x32, 0x24 +.byte 0x09, 0x12, 0x25, 0x0b, 0x16, 0x2d, 0x1b, 0x37 +.byte 0x2e, 0x1d, 0x3b, 0x36, 0x2c, 0x19, 0x33, 0x26 +.byte 0x0d, 0x1a, 0x35, 0x2a, 0x15, 0x2b, 0x17, 0x2f +.byte 0x1f, 0x3f, 0x3e, 0x3c, 0x38, 0x30, 0x20, 0x00 +RC_LFSR7: +.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x41, 0x03 +.byte 0x06, 0x0c, 0x18, 0x30, 0x61, 0x42, 0x05, 0x0a +.byte 0x14, 0x28, 0x51, 0x23, 0x47, 0x0f, 0x1e, 0x3c +.byte 0x79, 0x72, 0x64, 0x48, 0x11, 0x22, 0x45, 0x0b +.byte 0x16, 0x2c, 0x59, 0x33, 0x67, 0x4e, 0x1d, 0x3a +.byte 0x75, 0x6a, 0x54, 0x29, 0x53, 0x27, 0x4f, 0x1f +.byte 0x3e, 0x7d, 0x7a, 0x74, 0x68, 0x50, 0x21, 0x43 +.byte 0x07, 0x0e, 0x1c, 0x38, 0x71, 0x62, 0x44, 0x09 +.byte 0x12, 0x24, 0x49, 0x13, 0x26, 0x4d, 0x1b, 0x36 +.byte 0x6d, 0x5a, 0x35, 0x6b, 0x56, 0x2d, 0x5b, 0x37 +.byte 0x6f, 0x5e, 0x3d, 0x7b, 0x76, 0x6c, 0x58, 0x31 +.byte 0x63, 0x46, 0x0d, 0x1a, 0x34, 0x69, 0x52, 0x25 +.byte 0x4b, 0x17, 0x2e, 0x5d, 0x3b, 0x77, 0x6e, 0x5c +.byte 0x39, 0x73, 0x66, 0x4c, 0x19, 0x32, 0x65, 0x4a +.byte 0x15, 0x2a, 0x55, 0x2b, 0x57, 0x2f, 0x5f, 0x3f +.byte 0x7f, 0x7e, 0x7c, 0x78, 0x70, 0x60, 0x40, 0x00 +#elif defined(CRYPTO_AEAD) +RC_LFSR6: +.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x21, 0x03, 0x06 +.byte 0x0c, 0x18, 0x31, 0x22, 0x05, 0x0a, 0x14, 0x29 +.byte 0x13, 0x27, 0x0f, 0x1e, 0x3d, 0x3a, 0x34, 0x28 +.byte 0x11, 0x23, 0x07, 0x0e, 0x1c, 0x39, 0x32, 0x24 +.byte 0x09, 0x12, 0x25, 0x0b, 0x16, 0x2d, 0x1b, 0x37 +.byte 0x2e, 0x1d, 0x3b, 0x36, 0x2c, 0x19, 0x33, 0x26 +.byte 0x0d, 0x1a, 0x35, 0x2a, 0x15, 0x2b, 0x17, 0x2f +.byte 0x1f, 0x3f, 0x3e, 0x3c, 0x38, 0x30, 0x20, 0x00 +#else +RC_LFSR7: +.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x41, 0x03 +.byte 0x06, 0x0c, 0x18, 0x30, 0x61, 0x42, 0x05, 0x0a +.byte 0x14, 0x28, 0x51, 0x23, 0x47, 0x0f, 0x1e, 0x3c +.byte 0x79, 0x72, 0x64, 0x48, 0x11, 0x22, 0x45, 0x0b +.byte 0x16, 0x2c, 0x59, 0x33, 0x67, 0x4e, 0x1d, 0x3a +.byte 0x75, 0x6a, 0x54, 0x29, 0x53, 0x27, 0x4f, 0x1f +.byte 0x3e, 0x7d, 0x7a, 0x74, 0x68, 0x50, 0x21, 0x43 +.byte 0x07, 0x0e, 0x1c, 0x38, 0x71, 0x62, 0x44, 0x09 +.byte 0x12, 0x24, 0x49, 0x13, 0x26, 0x4d, 0x1b, 0x36 +.byte 0x6d, 0x5a, 0x35, 0x6b, 0x56, 0x2d, 0x5b, 0x37 +.byte 0x6f, 0x5e, 0x3d, 0x7b, 0x76, 0x6c, 0x58, 0x31 +.byte 0x63, 0x46, 0x0d, 0x1a, 0x34, 0x69, 0x52, 0x25 +.byte 0x4b, 0x17, 0x2e, 0x5d, 0x3b, 0x77, 0x6e, 0x5c +.byte 0x39, 0x73, 0x66, 0x4c, 0x19, 0x32, 0x65, 0x4a +.byte 0x15, 0x2a, 0x55, 0x2b, 0x57, 0x2f, 0x5f, 0x3f +.byte 0x7f, 0x7e, 0x7c, 0x78, 0x70, 0x60, 0x40, 0x00 +#endif \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot512/avr8_speed/knot384.h b/knot/Implementations/crypto_hash/knot512/avr8_speed/knot384.h new file mode 100644 index 0000000..0b3dd75 --- /dev/null +++ b/knot/Implementations/crypto_hash/knot512/avr8_speed/knot384.h @@ -0,0 +1,261 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.1 2020 by KNOT Team * +; ********************************************** +; + +; an intentionally arrangement of registers to facilitate movw +#define x20 r0 +#define x21 r2 +#define x22 r4 +#define x23 r6 +#define x24 r8 +#define x25 r10 +#define x26 r1 +#define x27 r3 +#define x28 r5 +#define x29 r7 +#define x2a r9 +#define x2b r11 + +; an intentionally arrangement of registers to facilitate movw +#define x30 r22 +#define x35 r20 +#define x3a r18 +#define x33 r16 +#define x38 r14 +#define x31 r12 +#define x36 r23 +#define x3b r21 +#define x34 r19 +#define x39 r17 +#define x32 r15 +#define x37 r13 + +#define t0j r24 +#define t1j r25 +#define x0j r25 +#define x1j r27 + +#include "assist.h" + +.macro Sbox i0, i1, i2, i3 + ldi t0j, 0xFF + eor \i0, t0j + mov t0j, \i1 + and \i1, \i0 + eor \i1, \i2 + or \i2, t0j + eor \i0, \i3 + eor \i2, \i0 + eor t0j, \i3 + and \i0, \i1 + eor \i3, \i1 + eor \i0, t0j + and t0j, \i2 + eor \i1, t0j +.endm + +.macro OneColumn i0, i1, i2, i3 + ld \i0, Y + ldd \i1, Y + ROW_INBYTES + Sbox \i0, \i1, \i2, \i3 + st Y+, \i0 + rol \i1 ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES -1, \i1 +.endm + +Permutation: + PUSH_CONFLICT + mov rcnt, rn + + ldi YH, hi8(SRAM_STATE + 2 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 2 * ROW_INBYTES) + ld x20, Y+ + ld x21, Y+ + ld x22, Y+ + ld x23, Y+ + ld x24, Y+ + ld x25, Y+ + ld x26, Y+ + ld x27, Y+ + ld x28, Y+ + ld x29, Y+ + ld x2a, Y+ + ld x2b, Y+ + ld x30, Y+ + ld x31, Y+ + ld x32, Y+ + ld x33, Y+ + ld x34, Y+ + ld x35, Y+ + ld x36, Y+ + ld x37, Y+ + ld x38, Y+ + ld x39, Y+ + ld x3a, Y+ + ld x3b, Y+ + + ldi ZL, lo8(RC_LFSR7) + ldi ZH, hi8(RC_LFSR7) + +round_loop_start: + ; AddRC + lpm t0j, Z+ + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + ld x0j, Y + eor x0j, t0j + + ldd x1j, Y + ROW_INBYTES + Sbox x0j, x1j, x20, x30 + st Y+, x0j + lsl x1j ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES -1, x1j + + OneColumn x0j, x1j, x21, x31 + OneColumn x0j, x1j, x22, x32 + OneColumn x0j, x1j, x23, x33 + OneColumn x0j, x1j, x24, x34 + OneColumn x0j, x1j, x25, x35 + OneColumn x0j, x1j, x26, x36 + OneColumn x0j, x1j, x27, x37 + OneColumn x0j, x1j, x28, x38 + OneColumn x0j, x1j, x29, x39 + OneColumn x0j, x1j, x2a, x3a + OneColumn x0j, x1j, x2b, x3b + + ld x1j, Y + eor t0j, t0j + adc x1j, t0j + st Y, x1j + + ; b a 9 8 7 6 5 4 3 2 1 0 + ; -- -- -- -- -- -- -- -- -- -- -- x- 0 + ; -- -- -- -- -- -- -- -- -- -- -- x' 0 + ; -- -- -- -- -- -- -- -- -- -- x- -- 1 + ; -- -- -- -- x' -- -- -- -- -- -- -- 7 + ; 4 3 2 1 0 b a 9 8 7 6 5 + + ; ShiftRows -- the last two rows + ; <<< 8 + ; b a 9 8 7 6 5 4 3 2 1 0 => a 9 8 7 6 5 4 3 2 1 0 b + movw t0j, x25 ; t1j:t0j <= x2b:x25 + movw x25, x24 ; x2b:x25 <= x2a:x24 + movw x24, x23 ; x2a:x24 <= x29:x23 + movw x23, x22 ; x29:x23 <= x28:x22 + movw x22, x21 ; x28:x22 <= x27:x21 + movw x21, x20 ; x27:x21 <= x26:x20 + mov x26, t0j ; x26 <= x25 + mov x20, t1j ; x20 <= x2b + + ; >>> 1 + mov t0j, x3b + ror t0j + ror x3a + ror x39 + ror x38 + ror x37 + ror x36 + ror x35 + ror x34 + ror x33 + ror x32 + ror x31 + ror x30 + ror x3b + ; <<< 56 + ; b a 9 8 7 6 5 4 3 2 1 0 => 4 3 2 1 0 b a 9 8 7 6 5 + ; mov x3j, x30 + ; mov x30, x35 + ; mov x35, x3a + ; mov x3a, x33 + ; mov x33, x38 + ; mov x38, x31 + ; mov x31, x36 + ; mov x36, x3b + ; mov x3b, x34 + ; mov x34, x39 + ; mov x39, x32 + ; mov x32, x37 + ; mov x37, x3j + ; an intentionally arrangement of registers to facilitate movw + ; x30 r22 + ; x35 r20 + ; x3a r18 + ; x33 r16 + ; x38 r14 + ; x31 r12 + ; x36 r23 + ; x3b r21 + ; x34 r19 + ; x39 r17 + ; x32 r15 + ; x37 r13 + movw t0j, x30 ; t1j:t0j <= x36:x30 + movw x30, x35 ; x36:x30 <= x3b:x35 + movw x35, x3a ; x3b:x35 <= x34:x3a + movw x3a, x33 ; x34:x3a <= x39:x33 + movw x33, x38 ; x39:x33 <= x32:x38 + movw x38, x31 ; x32:x38 <= x37:x31 + mov x31, t1j ; x31 <= x36 + mov x37, t0j ; x37 <= x30 + + dec rcnt + breq round_loop_end + jmp round_loop_start + +round_loop_end: + + ldi YH, hi8(SRAM_STATE + 2 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 2 * ROW_INBYTES) + st Y+, x20 + st Y+, x21 + st Y+, x22 + st Y+, x23 + st Y+, x24 + st Y+, x25 + st Y+, x26 + st Y+, x27 + st Y+, x28 + st Y+, x29 + st Y+, x2a + st Y+, x2b + st Y+, x30 + st Y+, x31 + st Y+, x32 + st Y+, x33 + st Y+, x34 + st Y+, x35 + st Y+, x36 + st Y+, x37 + st Y+, x38 + st Y+, x39 + st Y+, x3a + st Y+, x3b + + POP_CONFLICT +ret + +RC_LFSR7: +.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x41, 0x03 +.byte 0x06, 0x0c, 0x18, 0x30, 0x61, 0x42, 0x05, 0x0a +.byte 0x14, 0x28, 0x51, 0x23, 0x47, 0x0f, 0x1e, 0x3c +.byte 0x79, 0x72, 0x64, 0x48, 0x11, 0x22, 0x45, 0x0b +.byte 0x16, 0x2c, 0x59, 0x33, 0x67, 0x4e, 0x1d, 0x3a +.byte 0x75, 0x6a, 0x54, 0x29, 0x53, 0x27, 0x4f, 0x1f +.byte 0x3e, 0x7d, 0x7a, 0x74, 0x68, 0x50, 0x21, 0x43 +.byte 0x07, 0x0e, 0x1c, 0x38, 0x71, 0x62, 0x44, 0x09 +.byte 0x12, 0x24, 0x49, 0x13, 0x26, 0x4d, 0x1b, 0x36 +.byte 0x6d, 0x5a, 0x35, 0x6b, 0x56, 0x2d, 0x5b, 0x37 +.byte 0x6f, 0x5e, 0x3d, 0x7b, 0x76, 0x6c, 0x58, 0x31 +.byte 0x63, 0x46, 0x0d, 0x1a, 0x34, 0x69, 0x52, 0x25 +.byte 0x4b, 0x17, 0x2e, 0x5d, 0x3b, 0x77, 0x6e, 0x5c +.byte 0x39, 0x73, 0x66, 0x4c, 0x19, 0x32, 0x65, 0x4a +.byte 0x15, 0x2a, 0x55, 0x2b, 0x57, 0x2f, 0x5f, 0x3f +.byte 0x7f, 0x7e, 0x7c, 0x78, 0x70, 0x60, 0x40, 0x00 \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot512/avr8_speed/knot512.h b/knot/Implementations/crypto_hash/knot512/avr8_speed/knot512.h new file mode 100644 index 0000000..b0e4319 --- /dev/null +++ b/knot/Implementations/crypto_hash/knot512/avr8_speed/knot512.h @@ -0,0 +1,435 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.1 2020 by KNOT Team * +; ********************************************** +; +#define x20 r0 +#define x22 r2 +#define x24 r4 +#define x26 r6 +#define x28 r1 +#define x2a r3 +#define x2c r5 +#define x2e r7 + +#define x30 r8 +#define x3d r10 +#define x3a r12 +#define x37 r14 +#define x34 r16 +#define x31 r18 +#define x3e r20 +#define x3b r22 +#define x38 r9 +#define x35 r11 +#define x32 r13 +#define x3f r15 +#define x3c r17 +#define x39 r19 +#define x36 r21 +#define x33 r23 + +#define t0j r24 +#define t1j r25 +#define x0j r25 +#define x1j r27 +#define x2j r26 + +#include "assist.h" + +.macro Sbox i0, i1, i2, i3 + ldi t0j, 0xFF + eor \i0, t0j + mov t0j, \i1 + and \i1, \i0 + eor \i1, \i2 + or \i2, t0j + eor \i0, \i3 + eor \i2, \i0 + eor t0j, \i3 + and \i0, \i1 + eor \i3, \i1 + eor \i0, t0j + and t0j, \i2 + eor \i1, t0j +.endm + +.macro TwoColumns i2_e, i3_e, i3_o + ; column 2i + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + Sbox x0j, x1j, \i2_e, \i3_e + st Y+, x0j + rol x1j ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES - 1, x1j + + ; column 2i+1 + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + Sbox x0j, x1j, x2j, \i3_o + st Y+, x0j + rol x1j ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES - 1, x1j + ldd t0j, Y + 2 * ROW_INBYTES + 1 + std Y + 2 * ROW_INBYTES + 1, x2j + mov x2j, t0j +.endm + +Permutation: + PUSH_CONFLICT + mov rcnt, rn + push rcnt + + ldi YH, hi8(SRAM_STATE + 2 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 2 * ROW_INBYTES) + + ldd x20, Y + 0x00 + ldd x22, Y + 0x02 + ldd x24, Y + 0x04 + ldd x26, Y + 0x06 + ldd x28, Y + 0x08 + ldd x2a, Y + 0x0a + ldd x2c, Y + 0x0c + ldd x2e, Y + 0x0e + + adiw YL, ROW_INBYTES + + ld x30, Y+ + ld x31, Y+ + ld x32, Y+ + ld x33, Y+ + ld x34, Y+ + ld x35, Y+ + ld x36, Y+ + ld x37, Y+ + ld x38, Y+ + ld x39, Y+ + ld x3a, Y+ + ld x3b, Y+ + ld x3c, Y+ + ld x3d, Y+ + ld x3e, Y+ + ld x3f, Y+ + +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) + sbrc AEDH, 2 ; AEDH[2] = 0 for AEAD and AEDH[2] = 1 for HASH + rjmp For_Hash +For_AEAD: + ldi ZL, lo8(RC_LFSR7) + ldi ZH, hi8(RC_LFSR7) + rjmp round_loop_start +For_Hash: + ldi ZL, lo8(RC_LFSR8) + ldi ZH, hi8(RC_LFSR8) +#elif defined(CRYPTO_AEAD) + ldi ZL, lo8(RC_LFSR7) + ldi ZH, hi8(RC_LFSR7) +#else + ldi ZL, lo8(RC_LFSR8) + ldi ZH, hi8(RC_LFSR8) +#endif + + +round_loop_start: + ; AddRC + lpm t0j, Z+ + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + + ; column 0 + ld x0j, Y + eor x0j, t0j + ldd x1j, Y + ROW_INBYTES + Sbox x0j, x1j, x20, x30 + st Y+, x0j + lsl x1j ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES - 1, x1j + + ; column 1 + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + ldd x2j, Y + 2 * ROW_INBYTES + Sbox x0j, x1j, x2j, x31 + st Y+, x0j + rol x1j ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES - 1, x1j + ldd t0j, Y + 2 * ROW_INBYTES + 1 + std Y + 2 * ROW_INBYTES + 1, x2j + mov x2j, t0j + + ; column 2, 3 + TwoColumns x22, x32, x33 + ; column 4, 5 + TwoColumns x24, x34, x35 + ; column 6, 7 + TwoColumns x26, x36, x37 + ; column 8, 9 + TwoColumns x28, x38, x39 + ; column 10, 11 + TwoColumns x2a, x3a, x3b + ; column 12, 13 + TwoColumns x2c, x3c, x3d + + ; column 14 + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + Sbox x0j, x1j, x2e, x3e + st Y+, x0j + rol x1j ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES - 1, x1j + + ; column 15 + ld x0j, Y + ldd x1j, Y + ROW_INBYTES + Sbox x0j, x1j, x2j, x3f + st Y+, x0j + rol x1j ; ShiftRows -- Row 1 <<< 1 + std Y + ROW_INBYTES - 1, x1j + + ld x1j, Y + eor t0j, t0j + adc x1j, t0j + st Y, x1j + std Y + ROW_INBYTES + 1, x2j + + ; f e d c b a 9 8 7 6 5 4 3 2 1 0 + ; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- x- 0 + ; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- x' 0 + ; -- -- -- -- -- -- -- -- -- -- -- -- -- x- -- -- 2 + ; -- -- -- -- -- -- -- -- -- -- -- -- x' -- -- -- 3 + ; c b a 9 8 7 6 5 4 3 2 1 0 f e d + ; x2e x2c x2a x28 x26 x24 x22 x20 => x2c x2a x28 x26 x24 x22 x20 x2e + ;mov t0j, x2e + ;mov x2e, x2c + ;mov x2c, x2a + ;mov x2a, x28 + ;mov x28, x26 + ;mov x26, x24 + ;mov x24, x22 + ;mov x22, x20 + ;mov x20, t0j + ; an intentionally arrangement of registers to facilitate movw + movw t0j, x26 ; t1j:t0j <= x2e:x26 + movw x26, x24 ; x2e:x26 <= x2c:x24 + movw x24, x22 ; x2c:x24 <= x2a:x22 + movw x22, x20 ; x2a:x22 <= x28:x20 + mov x20, t1j ; x20 <= t1j + mov x28, t0j ; x28 <= t0j + + ; <<< 1 + mov t0j, x3f + rol t0j + rol x30 + rol x31 + rol x32 + rol x33 + rol x34 + rol x35 + rol x36 + rol x37 + rol x38 + rol x39 + rol x3a + rol x3b + rol x3c + rol x3d + rol x3e + rol x3f + ; <<< 24 + ; f e d c b a 9 8 7 6 5 4 3 2 1 0 => + ; c b a 9 8 7 6 5 4 3 2 1 0 f e d + ; mov x3j, x30 + ; mov x30, x3d + ; mov x3d, x3a + ; mov x3a, x37 + ; mov x37, x34 + ; mov x34, x31 + ; mov x31, x3e + ; mov x3e, x3b + ; mov x3b, x38 + ; mov x38, x35 + ; mov x35, x32 + ; mov x32, x3f + ; mov x3f, x3c + ; mov x3c, x39 + ; mov x39, x36 + ; mov x36, x33 + ; mov x33, x3j + ; an intentionally arrangement of registers to facilitate movw + ; x30 r8 + ; x3d r10 + ; x3a r12 + ; x37 r14 + ; x34 r16 + ; x31 r18 + ; x3e r20 + ; x3b r22 + ; x38 r9 + ; x35 r11 + ; x32 r13 + ; x3f r15 + ; x3c r17 + ; x39 r19 + ; x36 r21 + ; x33 r23 + movw t0j, x30 ; t1j:t0j <= x38:x30 + movw x30, x3d ; x38:x30 <= x35:x3d + movw x3d, x3a ; x35:x3d <= x32:x3a + movw x3a, x37 ; x32:x3a <= x3f:x37 + movw x37, x34 ; x3f:x37 <= x3c:x34 + movw x34, x31 ; x3c:x34 <= x39:x31 + movw x31, x3e ; x39:x31 <= x36:x3e + movw x3e, x3b ; x36:x3e <= x33:x3b + mov x3b, t1j ; x3b <= x38 + mov x33, t0j ; x33 <= x30 + + pop rcnt + dec rcnt + push rcnt + breq round_loop_end + rjmp round_loop_start + +round_loop_end: + pop rcnt + + ldi YH, hi8(SRAM_STATE + 2 * ROW_INBYTES) + ldi YL, lo8(SRAM_STATE + 2 * ROW_INBYTES) + std Y + 0x00, x20 + std Y + 0x02, x22 + std Y + 0x04, x24 + std Y + 0x06, x26 + std Y + 0x08, x28 + std Y + 0x0a, x2a + std Y + 0x0c, x2c + std Y + 0x0e, x2e + adiw YL, ROW_INBYTES + st Y+, x30 + st Y+, x31 + st Y+, x32 + st Y+, x33 + st Y+, x34 + st Y+, x35 + st Y+, x36 + st Y+, x37 + st Y+, x38 + st Y+, x39 + st Y+, x3a + st Y+, x3b + st Y+, x3c + st Y+, x3d + st Y+, x3e + st Y+, x3f + + POP_CONFLICT +ret + +.section .text +#if defined(CRYPTO_AEAD) && defined(CRYPTO_HASH) +RC_LFSR7: +.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x41, 0x03 +.byte 0x06, 0x0c, 0x18, 0x30, 0x61, 0x42, 0x05, 0x0a +.byte 0x14, 0x28, 0x51, 0x23, 0x47, 0x0f, 0x1e, 0x3c +.byte 0x79, 0x72, 0x64, 0x48, 0x11, 0x22, 0x45, 0x0b +.byte 0x16, 0x2c, 0x59, 0x33, 0x67, 0x4e, 0x1d, 0x3a +.byte 0x75, 0x6a, 0x54, 0x29, 0x53, 0x27, 0x4f, 0x1f +.byte 0x3e, 0x7d, 0x7a, 0x74, 0x68, 0x50, 0x21, 0x43 +.byte 0x07, 0x0e, 0x1c, 0x38, 0x71, 0x62, 0x44, 0x09 +.byte 0x12, 0x24, 0x49, 0x13, 0x26, 0x4d, 0x1b, 0x36 +.byte 0x6d, 0x5a, 0x35, 0x6b, 0x56, 0x2d, 0x5b, 0x37 +.byte 0x6f, 0x5e, 0x3d, 0x7b, 0x76, 0x6c, 0x58, 0x31 +.byte 0x63, 0x46, 0x0d, 0x1a, 0x34, 0x69, 0x52, 0x25 +.byte 0x4b, 0x17, 0x2e, 0x5d, 0x3b, 0x77, 0x6e, 0x5c +.byte 0x39, 0x73, 0x66, 0x4c, 0x19, 0x32, 0x65, 0x4a +.byte 0x15, 0x2a, 0x55, 0x2b, 0x57, 0x2f, 0x5f, 0x3f +.byte 0x7f, 0x7e, 0x7c, 0x78, 0x70, 0x60, 0x40, 0x00 +RC_LFSR8: +.byte 0x01, 0x02, 0x04, 0x08, 0x11, 0x23, 0x47, 0x8e +.byte 0x1c, 0x38, 0x71, 0xe2, 0xc4, 0x89, 0x12, 0x25 +.byte 0x4b, 0x97, 0x2e, 0x5c, 0xb8, 0x70, 0xe0, 0xc0 +.byte 0x81, 0x03, 0x06, 0x0c, 0x19, 0x32, 0x64, 0xc9 +.byte 0x92, 0x24, 0x49, 0x93, 0x26, 0x4d, 0x9b, 0x37 +.byte 0x6e, 0xdc, 0xb9, 0x72, 0xe4, 0xc8, 0x90, 0x20 +.byte 0x41, 0x82, 0x05, 0x0a, 0x15, 0x2b, 0x56, 0xad +.byte 0x5b, 0xb6, 0x6d, 0xda, 0xb5, 0x6b, 0xd6, 0xac +.byte 0x59, 0xb2, 0x65, 0xcb, 0x96, 0x2c, 0x58, 0xb0 +.byte 0x61, 0xc3, 0x87, 0x0f, 0x1f, 0x3e, 0x7d, 0xfb +.byte 0xf6, 0xed, 0xdb, 0xb7, 0x6f, 0xde, 0xbd, 0x7a +.byte 0xf5, 0xeb, 0xd7, 0xae, 0x5d, 0xba, 0x74, 0xe8 +.byte 0xd1, 0xa2, 0x44, 0x88, 0x10, 0x21, 0x43, 0x86 +.byte 0x0d, 0x1b, 0x36, 0x6c, 0xd8, 0xb1, 0x63, 0xc7 +.byte 0x8f, 0x1e, 0x3c, 0x79, 0xf3, 0xe7, 0xce, 0x9c +.byte 0x39, 0x73, 0xe6, 0xcc, 0x98, 0x31, 0x62, 0xc5 +.byte 0x8b, 0x16, 0x2d, 0x5a, 0xb4, 0x69, 0xd2, 0xa4 +.byte 0x48, 0x91, 0x22, 0x45, 0x8a, 0x14, 0x29, 0x52 +.byte 0xa5, 0x4a, 0x95, 0x2a, 0x54, 0xa9, 0x53, 0xa7 +.byte 0x4e, 0x9d, 0x3b, 0x77, 0xee, 0xdd, 0xbb, 0x76 +.byte 0xec, 0xd9, 0xb3, 0x67, 0xcf, 0x9e, 0x3d, 0x7b +.byte 0xf7, 0xef, 0xdf, 0xbf, 0x7e, 0xfd, 0xfa, 0xf4 +.byte 0xe9, 0xd3, 0xa6, 0x4c, 0x99, 0x33, 0x66, 0xcd +.byte 0x9a, 0x35, 0x6a, 0xd4, 0xa8, 0x51, 0xa3, 0x46 +.byte 0x8c, 0x18, 0x30, 0x60, 0xc1, 0x83, 0x07, 0x0e +.byte 0x1d, 0x3a, 0x75, 0xea, 0xd5, 0xaa, 0x55, 0xab +.byte 0x57, 0xaf, 0x5f, 0xbe, 0x7c, 0xf9, 0xf2, 0xe5 +.byte 0xca, 0x94, 0x28, 0x50, 0xa1, 0x42, 0x84, 0x09 +.byte 0x13, 0x27, 0x4f, 0x9f, 0x3f, 0x7f, 0xff, 0xfe +.byte 0xfc, 0xf8, 0xf0, 0xe1, 0xc2, 0x85, 0x0b, 0x17 +.byte 0x2f, 0x5e, 0xbc, 0x78, 0xf1, 0xe3, 0xc6, 0x8d +.byte 0x1a, 0x34, 0x68, 0xd0, 0xa0, 0x40, 0x80, 0x00 +#elif defined(CRYPTO_AEAD) +RC_LFSR7: +.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x41, 0x03 +.byte 0x06, 0x0c, 0x18, 0x30, 0x61, 0x42, 0x05, 0x0a +.byte 0x14, 0x28, 0x51, 0x23, 0x47, 0x0f, 0x1e, 0x3c +.byte 0x79, 0x72, 0x64, 0x48, 0x11, 0x22, 0x45, 0x0b +.byte 0x16, 0x2c, 0x59, 0x33, 0x67, 0x4e, 0x1d, 0x3a +.byte 0x75, 0x6a, 0x54, 0x29, 0x53, 0x27, 0x4f, 0x1f +.byte 0x3e, 0x7d, 0x7a, 0x74, 0x68, 0x50, 0x21, 0x43 +.byte 0x07, 0x0e, 0x1c, 0x38, 0x71, 0x62, 0x44, 0x09 +.byte 0x12, 0x24, 0x49, 0x13, 0x26, 0x4d, 0x1b, 0x36 +.byte 0x6d, 0x5a, 0x35, 0x6b, 0x56, 0x2d, 0x5b, 0x37 +.byte 0x6f, 0x5e, 0x3d, 0x7b, 0x76, 0x6c, 0x58, 0x31 +.byte 0x63, 0x46, 0x0d, 0x1a, 0x34, 0x69, 0x52, 0x25 +.byte 0x4b, 0x17, 0x2e, 0x5d, 0x3b, 0x77, 0x6e, 0x5c +.byte 0x39, 0x73, 0x66, 0x4c, 0x19, 0x32, 0x65, 0x4a +.byte 0x15, 0x2a, 0x55, 0x2b, 0x57, 0x2f, 0x5f, 0x3f +.byte 0x7f, 0x7e, 0x7c, 0x78, 0x70, 0x60, 0x40, 0x00 +#else +RC_LFSR8: +.byte 0x01, 0x02, 0x04, 0x08, 0x11, 0x23, 0x47, 0x8e +.byte 0x1c, 0x38, 0x71, 0xe2, 0xc4, 0x89, 0x12, 0x25 +.byte 0x4b, 0x97, 0x2e, 0x5c, 0xb8, 0x70, 0xe0, 0xc0 +.byte 0x81, 0x03, 0x06, 0x0c, 0x19, 0x32, 0x64, 0xc9 +.byte 0x92, 0x24, 0x49, 0x93, 0x26, 0x4d, 0x9b, 0x37 +.byte 0x6e, 0xdc, 0xb9, 0x72, 0xe4, 0xc8, 0x90, 0x20 +.byte 0x41, 0x82, 0x05, 0x0a, 0x15, 0x2b, 0x56, 0xad +.byte 0x5b, 0xb6, 0x6d, 0xda, 0xb5, 0x6b, 0xd6, 0xac +.byte 0x59, 0xb2, 0x65, 0xcb, 0x96, 0x2c, 0x58, 0xb0 +.byte 0x61, 0xc3, 0x87, 0x0f, 0x1f, 0x3e, 0x7d, 0xfb +.byte 0xf6, 0xed, 0xdb, 0xb7, 0x6f, 0xde, 0xbd, 0x7a +.byte 0xf5, 0xeb, 0xd7, 0xae, 0x5d, 0xba, 0x74, 0xe8 +.byte 0xd1, 0xa2, 0x44, 0x88, 0x10, 0x21, 0x43, 0x86 +.byte 0x0d, 0x1b, 0x36, 0x6c, 0xd8, 0xb1, 0x63, 0xc7 +.byte 0x8f, 0x1e, 0x3c, 0x79, 0xf3, 0xe7, 0xce, 0x9c +.byte 0x39, 0x73, 0xe6, 0xcc, 0x98, 0x31, 0x62, 0xc5 +.byte 0x8b, 0x16, 0x2d, 0x5a, 0xb4, 0x69, 0xd2, 0xa4 +.byte 0x48, 0x91, 0x22, 0x45, 0x8a, 0x14, 0x29, 0x52 +.byte 0xa5, 0x4a, 0x95, 0x2a, 0x54, 0xa9, 0x53, 0xa7 +.byte 0x4e, 0x9d, 0x3b, 0x77, 0xee, 0xdd, 0xbb, 0x76 +.byte 0xec, 0xd9, 0xb3, 0x67, 0xcf, 0x9e, 0x3d, 0x7b +.byte 0xf7, 0xef, 0xdf, 0xbf, 0x7e, 0xfd, 0xfa, 0xf4 +.byte 0xe9, 0xd3, 0xa6, 0x4c, 0x99, 0x33, 0x66, 0xcd +.byte 0x9a, 0x35, 0x6a, 0xd4, 0xa8, 0x51, 0xa3, 0x46 +.byte 0x8c, 0x18, 0x30, 0x60, 0xc1, 0x83, 0x07, 0x0e +.byte 0x1d, 0x3a, 0x75, 0xea, 0xd5, 0xaa, 0x55, 0xab +.byte 0x57, 0xaf, 0x5f, 0xbe, 0x7c, 0xf9, 0xf2, 0xe5 +.byte 0xca, 0x94, 0x28, 0x50, 0xa1, 0x42, 0x84, 0x09 +.byte 0x13, 0x27, 0x4f, 0x9f, 0x3f, 0x7f, 0xff, 0xfe +.byte 0xfc, 0xf8, 0xf0, 0xe1, 0xc2, 0x85, 0x0b, 0x17 +.byte 0x2f, 0x5e, 0xbc, 0x78, 0xf1, 0xe3, 0xc6, 0x8d +.byte 0x1a, 0x34, 0x68, 0xd0, 0xa0, 0x40, 0x80, 0x00 +#endif \ No newline at end of file diff --git a/knot/Implementations/crypto_hash/knot512/avr8_speed/permutation.h b/knot/Implementations/crypto_hash/knot512/avr8_speed/permutation.h new file mode 100644 index 0000000..e6c9793 --- /dev/null +++ b/knot/Implementations/crypto_hash/knot512/avr8_speed/permutation.h @@ -0,0 +1,45 @@ +; +; ********************************************** +; * KNOT: a family of bit-slice lightweight * +; * authenticated encryption algorithms * +; * and hash functions * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.1 2020 by KNOT Team * +; ********************************************** +; + +; +; ============================================ +; R E G I S T E R D E F I N I T I O N S +; ============================================ +; + +#define mclen r16 +#define radlen r17 +#define tcnt r17 +#define tmp0 r20 +#define tmp1 r21 +#define cnt0 r22 +#define rn r23 +#define rate r24 + + +; AEDH = 0b000: for authenticate AD +; AEDH = 0b001: for encryption +; AEDH = 0b011: for decryption +; AEDH = 0b100: for hash +#define AEDH r25 +#define rcnt r26 + +#if (STATE_INBITS==256) +#include "knot256.h" +#elif (STATE_INBITS==384) +#include "knot384.h" +#elif (STATE_INBITS==512) +#include "knot512.h" +#else +#error "Not specified key size and state size" +#endif + + diff --git a/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate128v1/avr8_lowrom/api.h b/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate128v1/avr8_lowrom/api.h new file mode 100644 index 0000000..4ceda96 --- /dev/null +++ b/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate128v1/avr8_lowrom/api.h @@ -0,0 +1,5 @@ +#define CRYPTO_KEYBYTES 16 +#define CRYPTO_NSECBYTES 0 +#define CRYPTO_NPUBBYTES 16 +#define CRYPTO_ABYTES 16 +#define CRYPTO_NOOVERLAP 1 diff --git a/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate128v1/avr8_lowrom/assist.h b/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate128v1/avr8_lowrom/assist.h new file mode 100644 index 0000000..fdf3c68 --- /dev/null +++ b/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate128v1/avr8_lowrom/assist.h @@ -0,0 +1,140 @@ +; +; ********************************************** +; * PHOTON-Beetle * +; * Authenticated Encryption and Hash Family * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by PHOTON-Beetle Team * +; ********************************************** +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Bitslice +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +.MACRO Reorder_8_bits i0, i1, i2, i3, i4 + ror \i0 + ror \i1 + ror \i0 + ror \i2 + ror \i0 + ror \i3 + ror \i0 + ror \i4 + ror \i0 + ror \i1 + ror \i0 + ror \i2 + ror \i0 + ror \i3 + ror \i0 + ror \i4 +.ENDM + +.MACRO InvReorder_8_bits i0, i1, i2, i3, i4 + ror \i1 + ror \i0 + ror \i2 + ror \i0 + ror \i3 + ror \i0 + ror \i4 + ror \i0 + ror \i1 + ror \i0 + ror \i2 + ror \i0 + ror \i3 + ror \i0 + ror \i4 + ror \i0 +.ENDM + +; require XH:XL be the address of the input +Load_Reorder_32_bits: + ldi cnt1, 4 +reorder_8_bits_loop: + ld rmp, X+ + Reorder_8_bits rmp, x0, x1, x2, x3 + dec cnt1 + brne reorder_8_bits_loop +ret + +; require YH:YL be the address of the output +invReorder_Store_32_bits: + ldi cnt1, 4 +invreorder_8_bits_loop: + InvReorder_8_bits rmp, x0, x1, x2, x3 + st Y+, rmp + dec cnt1 + brne invreorder_8_bits_loop +ret + +; require XH:XL be the address of the input +; require YH:YL be the address of the output +Load_Reorder_Store_128_bits: + ldi cnt0, 4 +reorder_32_bits_loop: + rcall Load_Reorder_32_bits + st Y+, x0 + st Y+, x1 + st Y+, x2 + st Y+, x3 + dec cnt0 + brne reorder_32_bits_loop +ret + +; require XH:XL be the address of the input +; require YH:YL be the address of the output +Load_invReorder_Store_128_bits: + ldi cnt0, 4 +invreorder_32_bits_loop: + ld x0, X+ + ld x1, X+ + ld x2, X+ + ld x3, X+ + rcall invReorder_Store_32_bits + dec cnt0 + brne invreorder_32_bits_loop +ret + +.macro PUSH_ALL +push r2 +push r3 +push r4 +push r5 +push r6 +push r7 +push r8 +push r9 +push r10 +push r11 +push r12 +push r13 +push r14 +push r15 +push r16 +push r17 +push r28 +push r29 +.endm + +.macro POP_ALL +pop r29 +pop r28 +pop r17 +pop r16 +pop r15 +pop r14 +pop r13 +pop r12 +pop r11 +pop r10 +pop r9 +pop r8 +pop r7 +pop r6 +pop r5 +pop r4 +pop r3 +pop r2 +clr r1 +.endm diff --git a/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate128v1/avr8_lowrom/crypto_aead.h b/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate128v1/avr8_lowrom/crypto_aead.h new file mode 100644 index 0000000..cd820d3 --- /dev/null +++ b/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate128v1/avr8_lowrom/crypto_aead.h @@ -0,0 +1,26 @@ +#ifdef __cplusplus +extern "C" { +#endif + +int crypto_aead_encrypt( + unsigned char *c,unsigned long long *clen, + const unsigned char *m,unsigned long long mlen, + const unsigned char *ad,unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k + ); + + +int crypto_aead_decrypt( + unsigned char *m,unsigned long long *outputmlen, + unsigned char *nsec, + const unsigned char *c,unsigned long long clen, + const unsigned char *ad,unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k + ); + +#ifdef __cplusplus +} +#endif diff --git a/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate128v1/avr8_lowrom/encrypt.c b/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate128v1/avr8_lowrom/encrypt.c new file mode 100644 index 0000000..9db22d2 --- /dev/null +++ b/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate128v1/avr8_lowrom/encrypt.c @@ -0,0 +1,105 @@ +#include +#include +#include +#include +#include "api.h" + +extern void crypto_aead_encrypt_asm( + unsigned char *c, + const unsigned char *m, + unsigned char mlen, + const unsigned char *ad, + unsigned char adlen, + const unsigned char *npub, + const unsigned char *k + ); + +extern char crypto_aead_decrypt_asm( + unsigned char *m, + const unsigned char *c, + unsigned char clen, + const unsigned char *ad, + unsigned char adlen, + const unsigned char *npub, + const unsigned char *k + ); + +extern void crypto_hash_asm( + unsigned char *out, + const unsigned char *in, + unsigned char inlen + ); + + +int crypto_aead_encrypt( + unsigned char *c, unsigned long long *clen, + const unsigned char *m, unsigned long long mlen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k + ) +{ + /* + ... + ... the code for the cipher implementation goes here, + ... generating a ciphertext c[0],c[1],...,c[*clen-1] + ... from a plaintext m[0],m[1],...,m[mlen-1] + ... and associated data ad[0],ad[1],...,ad[adlen-1] + ... and nonce npub[0],npub[1],.. + ... and secret key k[0],k[1],... + ... the implementation shall not use nsec + ... + ... return 0; + */ + + (void)nsec; + + crypto_aead_encrypt_asm(c, m, mlen, ad, adlen, npub, k); + + *clen = mlen + CRYPTO_ABYTES; + return 0; +} + + + +int crypto_aead_decrypt( + unsigned char *m, unsigned long long *mlen, + unsigned char *nsec, + const unsigned char *c, unsigned long long clen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k + ) +{ + /* + ... + ... the code for the AEAD implementation goes here, + ... generating a plaintext m[0],m[1],...,m[*mlen-1] + ... and secret message number nsec[0],nsec[1],... + ... from a ciphertext c[0],c[1],...,c[clen-1] + ... and associated data ad[0],ad[1],...,ad[adlen-1] + ... and nonce number npub[0],npub[1],... + ... and secret key k[0],k[1],... + ... + ... return 0; + */ + unsigned long long mlen_; + char tag_is_match; + + (void)nsec; + if (clen < CRYPTO_ABYTES) { + return -1; + } + mlen_ = clen - CRYPTO_ABYTES; + + tag_is_match = crypto_aead_decrypt_asm(m, c, mlen_, ad, adlen, npub, k); + + if (tag_is_match != 0) + { + memset(m, 0, (size_t)mlen_); + return -1; + } + *mlen = mlen_; + return 0; +} \ No newline at end of file diff --git a/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate128v1/avr8_lowrom/encrypt_core.S b/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate128v1/avr8_lowrom/encrypt_core.S new file mode 100644 index 0000000..d9ebcc0 --- /dev/null +++ b/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate128v1/avr8_lowrom/encrypt_core.S @@ -0,0 +1,733 @@ +; +; ********************************************** +; * PHOTON-Beetle * +; * Authenticated Encryption and Hash Family * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by PHOTON-Beetle Team * +; ********************************************** +; +#include "api.h" + +#define CRYPTO_AEAD + +#define STATE_INBITS 256 +#define STATE_INBYTES ((STATE_INBITS + 7) / 8) +#define RATE_INBITS 128 +#define RATE_INBYTES ((RATE_INBITS + 7) / 8) +#define RATE_INBYTES_MASK (RATE_INBYTES - 1) +#define TAG_MATCH 0 +#define TAG_UNMATCH -1 +#define OTHER_FAILURES -2 + + +; For CRYPTO_HASH +#define CRYPTO_BYTES 32 +#define INITIAL_RATE_INBITS 128 +#define INITIAL_RATE_INBYTES ((INITIAL_RATE_INBITS + 7) / 8) +#define HASH_RATE_INBITS 32 +#define HASH_RATE_INBYTES ((HASH_RATE_INBITS + 7) / 8) +#define HASH_RATE_INBYTES_MASK (HASH_RATE_INBYTES - 1) + +; +; ============================================ +; R E G I S T E R D E F I N I T I O N S +; ============================================ +; +; [Add all register names here, include info on +; all used registers without specific names] +; rmp: Multipurpose register +#define rmp r16 +#define rate r17 +#define mclen r18 +#define radlen r19 +#define adlen_org r0 + +#define cnt0 r20 +#define cnt1 r21 +#define cnt2 r22 + +#define SQUEEZE_RATE_INBITS 128 +#define SQUEEZE_RATE_INBYTES ((SQUEEZE_RATE_INBITS + 7) / 8) +#define SQUEEZE_RATE_MASK (SQUEEZE_RATE_INBYTES - 1) + +#define CAPACITY_INBITS (STATE_INBITS - RATE_INBITS) +#define CAPACITY_INBYTES ((CAPACITY_INBITS + 7) / 8) + +; For CRYPTO_AEAD +#define KEY_INBITS (CRYPTO_KEYBYTES * 8) +#define KEY_INBYTES (CRYPTO_KEYBYTES) + +#define NONCE_INBITS (CRYPTO_NPUBBYTES * 8) +#define NONCE_INBYTES (CRYPTO_NPUBBYTES) + +#define TAG_INBITS (CRYPTO_ABYTES * 8) +#define TAG_INBYTES (CRYPTO_ABYTES) + +#define t0 r8 +#define t1 r9 +#define t2 r10 +#define t3 r11 + +#define x0 r12 +#define x1 r13 +#define x2 r14 +#define x3 r15 + +#define ed r1 + +#define addr0 r2 +#define addr1 r3 +#define addr2 r4 +#define addr3 r5 +#define addr4 r6 +#define addr5 r7 + +; domain_cnt overlap with cnt0, only temporarily used, no need to back up +#define domain_cnt r20 +#define domain_cnt0 r23 +#define domain_cnt1 r24 + +.section .noinit + SRAM_STATE: .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + SRAM_MESSAGE_OUT_ADDR: .BYTE 0, 0 + SRAM_MESSAGE_IN_ADDR: .BYTE 0, 0 + SRAM_MESSAGE_IN_LEN: .BYTE 0, 0 +#ifdef CRYPTO_AEAD +; For CRYPTO_AEAD + SRAM_ASSOCIATED_DATA_ADDR: .BYTE 0, 0 + SRAM_ADLEN: .BYTE 0, 0 + SRAM_NONCE_ADDR: .BYTE 0, 0 + SRAM_KEY_ADDR: .BYTE 0, 0 + SRAM_ADDITIONAL: .BYTE 0, 0, 0, 0 + .BYTE 0, 0, 0, 0 + .BYTE 0, 0, 0, 0 + .BYTE 0, 0, 0, 0 +#endif + +; SRAM required additionally, besides those used for API + SRAM_PAD: .BYTE 0, 0, 0, 0 +#if ((defined(CRYPTO_AEAD) && (RATE_INBYTES > 4)) || defined(CRYPTO_HASH)) + .BYTE 0, 0, 0, 0 + .BYTE 0, 0, 0, 0 + .BYTE 0, 0, 0, 0 +#endif + +.section .text + +#include "assist.h" +#include "photon.h" + +AddDomainCounter: + ldi YH, hi8(SRAM_STATE + STATE_INBYTES - 3) + ldi YL, lo8(SRAM_STATE + STATE_INBYTES - 3) + ldi rmp, 0x80 + ldi cnt1, 3 +check_domain_bit: + ror domain_cnt + brcc no_xor + ld x0, Y + eor x0, rmp + st Y, x0 +no_xor: + adiw YL, 1 + dec cnt1 + brne check_domain_bit +ret + +; require XH:XL be the address of the current associated data/message block +XOR_to_State: + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + mov cnt0, rate + dec cnt0 +XOR_to_State_loop: + rcall Load_Reorder_32_bits + ld rmp, Y + eor rmp, x0 + st Y+, rmp + ld rmp, Y + eor rmp, x1 + st Y+, rmp + ld rmp, Y + eor rmp, x2 + st Y+, rmp + ld rmp, Y + eor rmp, x3 + st Y+, rmp + subi cnt0, 4 + brsh XOR_to_State_loop +; XH:XL are now the address of the next associated data/message block if this is not the last block +ret + +; require XH:XL pointed to the source data to be padded +PAD_OneZero: + ldi YH, hi8(SRAM_PAD) + ldi YL, lo8(SRAM_PAD) + mov cnt1, rate +pad_copy: + ld rmp, X+ + st Y+, rmp + dec cnt1 + dec cnt0 + brne pad_copy +pad_one: + ldi rmp, 1 + st Y+, rmp + dec cnt1 + breq pad_end + clr rmp +pad_zero: + st Y+, rmp + dec cnt1 + brne pad_zero +pad_end: + ldi XH, hi8(SRAM_PAD) + ldi XL, lo8(SRAM_PAD) +; XH:XL are now pointed to last block needed to be processed +ret + +HASH: + movw addr0, XL +hash_block_loop: + rcall PHOTON_Permutation + movw XL, addr0 + cp rate, radlen + brsh hash_last_block + rcall XOR_to_State + movw addr0, XL + sub radlen, rate + rjmp hash_block_loop + +hash_last_block: + cp radlen, rate + breq hash_xor_domain + mov cnt0, radlen + rcall PAD_OneZero + +hash_xor_domain: + clr radlen + rcall XOR_to_State + mov domain_cnt, domain_cnt0 + rcall AddDomainCounter +ret + +TAG: + rcall PHOTON_Permutation + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + movw YL, addr2 + rcall Load_invReorder_Store_128_bits +ret + +#ifdef CRYPTO_AEAD +.IF (RATE_INBITS == 128) +XOR_to_Cipher: + mov t2, rate + cp t2, mclen + brlo XOR_to_Cipher_Start + mov t2, mclen ; backup the real length of the remaining message + +XOR_to_Cipher_Start: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + ldi YH, hi8(SRAM_ADDITIONAL) + ldi YL, lo8(SRAM_ADDITIONAL) + rcall Load_invReorder_Store_128_bits ; State move to additional SRAM and reorder + + movw XL, addr0 + movw ZL, addr2 + + ; XOR Part 2 + sbiw YL, (RATE_INBYTES>>1) ; Pointed to Part 2 + ldi cnt0, (RATE_INBYTES>>1) + cp cnt0, mclen + brlo XOR_Part2_Store_Cipher_begin + mov cnt0, mclen +XOR_Part2_Store_Cipher_begin: + sub mclen, cnt0 +XOR_Part2_Store_Cipher_loop: + ld t0, Y+ + ld x0, X+ + eor x0, t0 + st Z+, x0 + dec cnt0 + brne XOR_Part2_Store_Cipher_loop + + cpi mclen, 1 + brlo XOR_to_Cipher_END + + ; XOR (Part 1 >>> 1) + ldi cnt0, (RATE_INBYTES>>1) + cp cnt0, mclen + brlo XOR_Part1_Store_Cipher_begin + mov cnt0, mclen +XOR_Part1_Store_Cipher_begin: + sub mclen, cnt0 + ldi YH, hi8(SRAM_ADDITIONAL) + ldi YL, lo8(SRAM_ADDITIONAL) + ld t0, Y + bst t0, 0 + adiw YL, (RATE_INBYTES>>1)-1 + ld t0, Y + ror t0 + bld t0, 7 + st Y, t0 + ldi cnt1, (RATE_INBYTES>>1)-1 +ROR_part1_loop: + ld t0, -Y + ror t0 + st Y, t0 + dec cnt1 + brne ROR_part1_loop + +XOR_Part1_Store_Cipher_loop: + ld t0, Y+ + ld x0, X+ + eor x0, t0 + st Z+, x0 + dec cnt0 + brne XOR_Part1_Store_Cipher_loop + +XOR_to_Cipher_END: + tst ed + brne XOR_to_Cipher_dec + +XOR_to_Cipher_enc: + movw XL, addr0 + cp t2, rate + brsh XOR_to_Cipher_XOR_to_State + mov cnt0, t2 + rcall PAD_OneZero + rjmp XOR_to_Cipher_XOR_to_State + +XOR_to_Cipher_dec: + movw XL, addr2 + cp t2, rate + brsh XOR_to_Cipher_XOR_to_State + ; need to be padded + mov cnt0, t2 + rcall PAD_OneZero + +XOR_to_Cipher_XOR_to_State: + rcall XOR_to_State + + clr rmp + add addr0, t2 + adc addr1, rmp + add addr2, t2 + adc addr3, rmp +ret +.ELSE +; RATE_INBITS == 32 +XOR_to_Cipher: + mov t2, rate + cp t2, mclen + brlo XOR_to_Cipher_Start + mov t2, mclen ; backup the real length of the remaining message + +XOR_to_Cipher_Start: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + ld x0, X+ + ld x1, X+ + ld x2, X+ + ld x3, X+ + ldi YH, hi8(SRAM_ADDITIONAL) + ldi YL, lo8(SRAM_ADDITIONAL) + rcall invReorder_Store_32_bits + + movw XL, addr0 + movw ZL, addr2 + + ; XOR Part 2 + sbiw YL, (RATE_INBYTES>>1) ; Pointed to Part 2 + ldi cnt0, (RATE_INBYTES>>1) + cp cnt0, mclen + brlo XOR_Part2_Store_Cipher_begin + mov cnt0, mclen +XOR_Part2_Store_Cipher_begin: + sub mclen, cnt0 +XOR_Part2_Store_Cipher_loop: + ld t0, Y+ + ld x0, X+ + eor x0, t0 + st Z+, x0 + dec cnt0 + brne XOR_Part2_Store_Cipher_loop + + cpi mclen, 1 + brlo XOR_to_Cipher_END + + ; XOR (Part 1 >>> 1) + ldi cnt0, (RATE_INBYTES>>1) + cp cnt0, mclen + brlo XOR_Part1_Store_Cipher_begin + mov cnt0, mclen +XOR_Part1_Store_Cipher_begin: + sub mclen, cnt0 + ldi YH, hi8(SRAM_ADDITIONAL) + ldi YL, lo8(SRAM_ADDITIONAL) + ld t0, Y+ + ld t1, Y+ + bst t0, 0 + ror t1 + ror t0 + bld t1, 7 + + ld x0, X+ + eor x0, t0 + st Z+, x0 + dec cnt0 + breq XOR_to_Cipher_END + ld x0, X+ + eor x0, t1 + st Z+, x0 + +XOR_to_Cipher_END: + tst ed + brne XOR_to_Cipher_dec + +XOR_to_Cipher_enc: + movw XL, addr0 + cp t2, rate + brsh XOR_to_Cipher_XOR_to_State + mov cnt0, t2 + rcall PAD_OneZero + rjmp XOR_to_Cipher_XOR_to_State + +XOR_to_Cipher_dec: + movw XL, addr2 + cp t2, rate + brsh XOR_to_Cipher_XOR_to_State + ; need to be padded + mov cnt0, t2 + rcall PAD_OneZero + +XOR_to_Cipher_XOR_to_State: + rcall XOR_to_State + + clr rmp + add addr0, t2 + adc addr1, rmp + add addr2, t2 + adc addr3, rmp +ret +.ENDIF + +ENC: + lds ZH, SRAM_MESSAGE_OUT_ADDR + lds ZL, SRAM_MESSAGE_OUT_ADDR + 1 + lds XH, SRAM_MESSAGE_IN_ADDR + lds XL, SRAM_MESSAGE_IN_ADDR + 1 + + movw addr0, XL + movw addr2, ZL + +enc_block_loop: + rcall PHOTON_Permutation + rcall XOR_to_Cipher + cpi mclen, 1 + brsh enc_block_loop + + mov domain_cnt, domain_cnt1 + rcall AddDomainCounter +ret + +AUTH_AND_ENCDEC: + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + + lds XH, SRAM_NONCE_ADDR + lds XL, SRAM_NONCE_ADDR + 1 + rcall Load_Reorder_Store_128_bits + lds XH, SRAM_KEY_ADDR + lds XL, SRAM_KEY_ADDR + 1 + rcall Load_Reorder_Store_128_bits + + ldi domain_cnt0, 1 + ldi domain_cnt1, 1 + +test_adlen_zero: + tst radlen + breq adlen_zero_test_mlen_zero + + ; radlen != 0 +adlen_nzero_test_mlen_zero: + tst mclen + brne test_adlen_divisible + ldi domain_cnt0, 3 +test_adlen_divisible: + mov rmp, radlen + andi rmp, RATE_INBYTES_MASK + breq hash_ad + inc domain_cnt0 ; 2 or 4 +hash_ad: + lds XH, SRAM_ASSOCIATED_DATA_ADDR + lds XL, SRAM_ASSOCIATED_DATA_ADDR + 1 + rcall HASH + tst mclen + breq mlen_zero_inputout_address + rjmp test_mlen_divisible + +adlen_zero_test_mlen_zero: + ldi domain_cnt1, 5 + tst mclen + breq adlen_zero_mlen_zero + + ; mclen != 0 +test_mlen_divisible: + mov rmp, mclen + andi rmp, RATE_INBYTES_MASK + breq enc_dec_m + inc domain_cnt1 ; 2 or 6 +enc_dec_m: + rcall ENC + rjmp AUTH_AND_ENCDEC_end + +adlen_zero_mlen_zero: + ; empty message and empty associated data + ldi YH, hi8(SRAM_STATE + STATE_INBYTES - 3) + ldi YL, lo8(SRAM_STATE + STATE_INBYTES - 3) + ld x0, Y + ldi rmp, 0x80 + eor x0, rmp + st Y, x0 + +mlen_zero_inputout_address: + tst ed + brne dec_inputout_address +enc_inputout_address: + lds ZH, SRAM_MESSAGE_OUT_ADDR + lds ZL, SRAM_MESSAGE_OUT_ADDR + 1 + movw addr2, ZL + rjmp AUTH_AND_ENCDEC_end +dec_inputout_address: + lds ZH, SRAM_MESSAGE_IN_ADDR + lds ZL, SRAM_MESSAGE_IN_ADDR + 1 + movw addr0, ZL + +AUTH_AND_ENCDEC_end: +ret + + +; void crypto_aead_encrypt_asm( +; unsigned char *c, +; const unsigned char *m, +; unsigned long long mlen, +; const unsigned char *ad, +; unsigned long long radlen, +; const unsigned char *npub, +; const unsigned char *k +; ) +; +; unsigned char *c, is passed in r24:r25 +; const unsigned char *m, is passed in r22:r23 +; unsigned long long mlen, is passed in r20:r21, only LSB (r20) is used +; const unsigned char *ad, is passed in r18:r19 +; unsigned long long radlen, is passed in r16:r17, only LSB (r16) is used +; const unsigned char *npub, is passed in r14:r15 +; const unsigned char *k is passed in r12:r13 +.global crypto_aead_encrypt_asm +crypto_aead_encrypt_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store cipher address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store message address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store message length in SRAM_MESSAGE_IN_LEN + st X+, r20 + st X+, r19 ;store associated data address in SRAM_ASSOCIATED_DATA_ADDR + st X+, r18 + st X+, r17 ;store associated data length in SRAM_ADLEN + st X+, r16 + st X+, r15 ;store nonce address in SRAM_NONCE_ADDR + st X+, r14 + st X+, r13 ;store key address in SRAM_KEY_ADDR + st X+, r12 + mov mclen, r20 + mov radlen, r16 + + ldi rate, RATE_INBYTES + clr ed + + rcall AUTH_AND_ENCDEC + rcall TAG + + POP_ALL +ret + +; int crypto_aead_decrypt_asm( +; unsigned char *m, +; const unsigned char *c, +; unsigned long long clen, +; const unsigned char *ad, +; unsigned long long radlen, +; const unsigned char *npub, +; const unsigned char *k +; ) +; +; unsigned char *m, is passed in r24:r25 +; const unsigned char *c, is passed in r22:r23 +; unsigned long long clen, is passed in r20:r21, only LSB (r20) is used +; const unsigned char *ad, is passed in r18:r19 +; unsigned long long radlen, is passed in r16:r17, only LSB (r16) is used +; const unsigned char *npub, is passed in r14:r15 +; const unsigned char *k is passed in r12:r13 +.global crypto_aead_decrypt_asm +crypto_aead_decrypt_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store message address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store cipher address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store cipher length in SRAM_MESSAGE_IN_LEN + st X+, r20 + st X+, r19 ;store associated data address in SRAM_ASSOCIATED_DATA_ADDR + st X+, r18 + st X+, r17 ;store associated data length in SRAM_ADLEN + st X+, r16 + st X+, r15 ;store nonce address in SRAM_NONCE_ADDR + st X+, r14 + st X+, r13 ;store key address in SRAM_KEY_ADDR + st X+, r12 + mov mclen, r20 + mov radlen, r16 + + ldi rate, RATE_INBYTES + clr ed + inc ed + + rcall AUTH_AND_ENCDEC + + ldi YH, hi8(SRAM_ADDITIONAL) + ldi YL, lo8(SRAM_ADDITIONAL) + movw addr2, YL + rcall TAG + + sbiw YL, CRYPTO_ABYTES + movw XL, addr0 + + ldi cnt0, CRYPTO_ABYTES +compare_tag: + ld t0, Y+ + ld x0, X+ + cp t0, x0 + brne return_tag_not_match + dec cnt0 + brne compare_tag + rjmp return_tag_match + +return_tag_not_match: + ldi r25, 0xFF + ldi r24, 0xFF + rjmp crypto_aead_decrypt_end +return_tag_match: + clr r25 + clr r24 + +crypto_aead_decrypt_end: + POP_ALL +ret + +; #ifdef CRYPTO_AEAD +#endif + +#ifdef CRYPTO_HASH +; void crypto_hash_asm( +; unsigned char *out, +; const unsigned char *in, +; unsigned long long inlen +; ) +; +; unsigned char *out, is passed in r24:r25 +; const unsigned char *in, is passed in r22:r23 +; unsigned long long inlen, is passed in r20:r21, only LSB (r20) is used +.global crypto_hash_asm +crypto_hash_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store message address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store cipher address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store cipher length in SRAM_MESSAGE_IN_LEN + st X+, r20 + mov mclen, r20 + + ; empty half state + ldi YH, hi8(SRAM_STATE + INITIAL_RATE_INBYTES) + ldi YL, lo8(SRAM_STATE + INITIAL_RATE_INBYTES) + clr rmp + ldi cnt1, (STATE_INBYTES - INITIAL_RATE_INBYTES) +zero_state: + st Y+, rmp + dec cnt1 + brne zero_state + + ldi domain_cnt0, 1 + sbiw YL, (STATE_INBYTES - INITIAL_RATE_INBYTES) + lds XH, SRAM_MESSAGE_IN_ADDR + lds XL, SRAM_MESSAGE_IN_ADDR + 1 + + tst mclen + breq add_domain + +test_mlen_initrate: + ; mclen != 0 + cpi mclen, INITIAL_RATE_INBYTES + brlo less_than_initial_rate + breq equal_to_initial_rate + +more_than_initial_rate: + rcall Load_Reorder_Store_128_bits + ldi rate, HASH_RATE_INBYTES + mov radlen, mclen + subi radlen, INITIAL_RATE_INBYTES + mov rmp, radlen + andi rmp, HASH_RATE_INBYTES_MASK + breq hash_message + inc domain_cnt0 +hash_message: + rcall HASH + rjmp gen_digest + +equal_to_initial_rate: + inc domain_cnt0 + rcall Load_Reorder_Store_128_bits + rjmp add_domain + +less_than_initial_rate: + mov cnt0, mclen + ldi rate, INITIAL_RATE_INBYTES + rcall PAD_OneZero + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + rcall Load_Reorder_Store_128_bits + rjmp add_domain + +add_domain: + mov domain_cnt, domain_cnt0 + rcall AddDomainCounter +gen_digest: + lds XH, SRAM_MESSAGE_OUT_ADDR + lds XL, SRAM_MESSAGE_OUT_ADDR + 1 + movw addr2, XL + rcall TAG + movw XL, addr2 + adiw XL, SQUEEZE_RATE_INBYTES + movw addr2, XL + rcall TAG + + POP_ALL +ret + +#endif \ No newline at end of file diff --git a/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate128v1/avr8_lowrom/photon.h b/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate128v1/avr8_lowrom/photon.h new file mode 100644 index 0000000..52b0ee3 --- /dev/null +++ b/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate128v1/avr8_lowrom/photon.h @@ -0,0 +1,345 @@ +; +; ********************************************** +; * PHOTON-Beetle * +; * Authenticated Encryption and Hash Family * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by PHOTON-Beetle Team * +; ********************************************** +; +#define ROUND_N 12 +#define DIM 8 + +.MACRO Store_OneRow + st X+, x0 + st X+, x1 + st X+, x2 + st X+, x3 +.ENDM + +.MACRO ROTL_1 i0 + bst \i0, 7 + lsl \i0 + bld \i0, 0 +.ENDM + +.MACRO ROTR_1 i0 + bst \i0, 0 + lsr \i0 + bld \i0, 7 +.ENDM + +.MACRO ROTR_4 i0 + swap \i0 +.ENDM + +ROTR_1_ROW: + ROTR_1 x0 + ROTR_1 x1 + ROTR_1 x2 + ROTR_1 x3 +ret + +ROTL_1_ROW: + ROTL_1 x0 + ROTL_1 x1 + ROTL_1 x2 + ROTL_1 x3 +ret + +ROTR_4_ROW: + ROTR_4 x0 + ROTR_4 x1 + ROTR_4 x2 + ROTR_4 x3 +ret + +RoundFunction: + + rjmp AddRC_Sbox_ShiftRow_Start + +ShiftRow_routine_table: + rjmp ShiftRow_RecoverZ_NoLPM + rjmp ShiftRow_1 + rjmp ShiftRow_2 + rjmp ShiftRow_3 + rjmp ShiftRow_4 + rjmp ShiftRow_5 + rjmp ShiftRow_6 + rjmp ShiftRow_7 + +ShiftRow_1: + rcall ROTR_1_ROW + rjmp ShiftRow_RecoverZ_LPM + +ShiftRow_2: + rcall ROTR_1_ROW + rcall ROTR_1_ROW + rjmp ShiftRow_RecoverZ_NoLPM + +ShiftRow_3: + rcall ROTR_4_ROW + rcall ROTL_1_ROW + rjmp ShiftRow_RecoverZ_LPM + +ShiftRow_4: + rcall ROTR_4_ROW + rjmp ShiftRow_RecoverZ_NoLPM + +ShiftRow_5: + rcall ROTR_4_ROW + rcall ROTR_1_ROW + rjmp ShiftRow_RecoverZ_LPM + +ShiftRow_6: + rcall ROTL_1_ROW + rcall ROTL_1_ROW + rjmp ShiftRow_RecoverZ_NoLPM + +ShiftRow_7: + rcall ROTL_1_ROW + rjmp ShiftRow_RecoverZ_NoLPM + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Start AddRC_Sbox_ShiftRow +AddRC_Sbox_ShiftRow_Start: + clr t3 + inc t3 + + ldi XL, lo8(SRAM_STATE) + ldi XH, hi8(SRAM_STATE) + + ldi YL, pm_lo8(ShiftRow_routine_table) + ldi YH, pm_hi8(ShiftRow_routine_table) + ldi rmp, DIM + + lpm t0, Z+ ; Load two nibbles of round constant for row 0, 1 +AddRC_Sbox_ShiftRow_Loop: + ; AddRC_TwoRows + ld x0, X+ + ld x1, X+ + ld x2, X+ + ld x3, X+ + sbiw XL, 4 + + ror t0 + brcc next1 + eor x0, t3 +next1: + ror t0 + brcc next2 + eor x1, t3 +next2: + ror t0 + brcc next3 + eor x2, t3 +next3: + ror t0 + brcc next4 + eor x3, t3 +next4: + ; Sbox_TwoRows + eor x1, x2 + mov t1, x2 + and t1, x1 + eor x3, t1 + mov t1, x3 + and x3, x1 + eor x3, x2 + mov t2, x3 + eor x3, x0 + com x3 + mov x2, x3 + or t2, x0 + eor x0, t1 + eor x1, x0 + or x2, x1 + eor x2, t1 + eor x1, t2 + eor x3, x1 + + movw cnt0, ZL + movw ZL, YL + ijmp + +ShiftRow_RecoverZ_NoLPM: + movw ZL, cnt0 + rjmp ShiftRow_STORE_ROW +ShiftRow_RecoverZ_LPM: + movw ZL, cnt0 + lpm t0, Z+ ; Load two nibbles of round constant for row 2i, 2i+1 +ShiftRow_STORE_ROW: + Store_OneRow + adiw YL, 1 + dec rmp + brne AddRC_Sbox_ShiftRow_Loop + +;;;;;;;;;;;;;;;;;;;;;;;; MixColumn Subroutnes + + rjmp MC_Start + +mul_routine_table: + rjmp mul2_GF16_0x13_xor + rjmp mul4_GF16_0x13_xor + rjmp mul2_GF16_0x13_xor + rjmp mulb_GF16_0x13_xor + rjmp mul2_GF16_0x13_xor + rjmp mul8_GF16_0x13_xor + rjmp mul5_GF16_0x13_xor + rjmp mul6_GF16_0x13_xor + +; For all mul2_GF16_0x13_xor: +; Input +; MSB........LSB +; x0=@0: x1=@1: x2=@2: x3=@3 +mul2_GF16_0x13_xor: + ; # define mul2_GF16_0x13 (x0 ,x1 ,x2 ,x3) do { \ + ; x3 = XOR (x3 ,x0); \ + ; } while (0) ; /* Output : ( MSB ) x1 ,x2 ,x3 , x0 ( LSB ) */ + eor t3, t0 + eor x0, t0 + eor x1, t3 + eor x2, t2 + eor x3, t1 + rjmp MC_INC_CNT1 + +mul4_GF16_0x13_xor: + ; # define mul4_GF16_0x13 (x0 ,x1 ,x2 ,x3) do { \ + ; x3 = XOR (x3 ,x0); x0 = XOR (x0 ,x1); \ + ; } while (0) ; /* Output : ( MSB ) x2 ,x3 ,x0 , x1 ( LSB ) */ + eor t3, t0 + eor t0, t1 + eor x0, t1 + eor x1, t0 + eor x2, t3 + eor x3, t2 + rjmp MC_INC_CNT1 + +mul5_GF16_0x13_xor: + ; # define mul5_GF16_0x13 (x0 ,x1 ,x2 ,x3) do { \ + ; x2 = XOR (x2 ,x0); x3 = XOR (x3 ,x1); \ + ; x1 = XOR (x1 ,x2); x0 = XOR (x0 ,x3); \ + ; } while (0) ; /* Output : ( MSB ) x2 ,x0 ,x1 , x3 ( LSB ) */ + eor t2, t0 + eor t3, t1 + eor t1, t2 + eor t0, t3 + eor x0, t3 + eor x1, t1 + eor x2, t0 + eor x3, t2 + rjmp MC_INC_CNT1 + +mul6_GF16_0x13_xor: + ; # define mul6_GF16_0x13 (x0 ,x1 ,x2 ,x3) do { \ + ; x3 = XOR (x3 ,x1); x1 = XOR (x1 ,x0); \ + ; x2 = XOR (x2 ,x1); x0 = XOR (x0 ,x2); \ + ; x2 = XOR (x2 ,x3); \ + ; } while (0) ; /* Output : ( MSB ) x0 ,x2 ,x3 , x1 ( LSB ) */ + eor t3, t1 + eor t1, t0 + eor t2, t1 + eor t0, t2 + eor t2, t3 + eor x0, t1 + eor x1, t3 + eor x2, t2 + eor x3, t0 + rjmp MC_STORE_ROW + +mul8_GF16_0x13_xor: + ; # define mul8_GF16_0x13 (x0 ,x1 ,x2 ,x3) do { \ + ; x3 = XOR (x3 ,x0); x0 = XOR (x0 ,x1); \ + ; x1 = XOR (x1 ,x2); \ + ; } while (0) ; /* Output : ( MSB ) x3 ,x0 ,x1 , x2 ( LSB ) */ + eor t3, t0 + eor t0, t1 + eor t1, t2 + eor x0, t2 + eor x1, t1 + eor x2, t0 + eor x3, t3 + rjmp MC_INC_CNT1 + +mulb_GF16_0x13_xor: + ; # define mul11_GF16_0x13 (x0 ,x1 ,x2 ,x3) do { \ + ; x2 = XOR (x2 ,x0); x1 = XOR (x1 ,x3); \ + ; x0 = XOR (x0 ,x1); x3 = XOR (x3 ,x2); \ + ; } while (0) ; /* Output : ( MSB ) x1 ,x2 ,x0 , x3 ( LSB ) */ + eor t2, t0 + eor t1, t3 + eor t0, t1 + eor t3, t2 + eor x0, t3 + eor x1, t0 + eor x2, t2 + eor x3, t1 + rjmp MC_INC_CNT1 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Start MixColumns +MC_Start: + movw addr4, ZL + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + movw YL, XL + clr cnt0 + clr cnt1 +A1: + mov cnt1, cnt0 + clr x0 + clr x1 + clr x2 + clr x3 + ldi ZH, pm_hi8(mul_routine_table) + ldi ZL, pm_lo8(mul_routine_table) +MC_MUL_LOOP: + ld t3, X+ + ld t2, X+ + ld t1, X+ + ld t0, X+ + ijmp +MC_INC_CNT1: + inc cnt1 + cpi cnt1, DIM + brne MC_MUL_NEXT + clr cnt1 + movw XL, YL +MC_MUL_NEXT: + adiw ZL, 1 + rjmp MC_MUL_LOOP +MC_STORE_ROW: + cpi cnt0, 0 + brne MC_STORE_DIRECT + sbiw XL, STATE_INBYTES +MC_STORE_DIRECT: + Store_OneRow + + inc cnt0 + cpi cnt0, DIM + brne A1 + movw ZL, addr4 +ret + +PHOTON_Permutation: + ldi ZH, hi8(RC) + ldi ZL, lo8(RC) + ldi cnt2, ROUND_N +round_loop_start: + rcall RoundFunction + dec cnt2 + brne round_loop_start +ret + +.section .text +RC: +.byte 0x01,0x62,0xFE,0x9D +.byte 0x23,0x40,0xDC,0xBF +.byte 0x67,0x04,0x98,0xFB +.byte 0xFE,0x9D,0x01,0x62 +.byte 0xCD,0xAE,0x32,0x51 +.byte 0xAB,0xC8,0x54,0x37 +.byte 0x76,0x15,0x89,0xEA +.byte 0xDC,0xBF,0x23,0x40 +.byte 0x89,0xEA,0x76,0x15 +.byte 0x32,0x51,0xCD,0xAE +.byte 0x45,0x26,0xBA,0xD9 +.byte 0xBA,0xD9,0x45,0x26 diff --git a/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate128v1/avr8_speed/api.h b/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate128v1/avr8_speed/api.h new file mode 100644 index 0000000..4ceda96 --- /dev/null +++ b/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate128v1/avr8_speed/api.h @@ -0,0 +1,5 @@ +#define CRYPTO_KEYBYTES 16 +#define CRYPTO_NSECBYTES 0 +#define CRYPTO_NPUBBYTES 16 +#define CRYPTO_ABYTES 16 +#define CRYPTO_NOOVERLAP 1 diff --git a/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate128v1/avr8_speed/assist.h b/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate128v1/avr8_speed/assist.h new file mode 100644 index 0000000..fdf3c68 --- /dev/null +++ b/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate128v1/avr8_speed/assist.h @@ -0,0 +1,140 @@ +; +; ********************************************** +; * PHOTON-Beetle * +; * Authenticated Encryption and Hash Family * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by PHOTON-Beetle Team * +; ********************************************** +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Bitslice +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +.MACRO Reorder_8_bits i0, i1, i2, i3, i4 + ror \i0 + ror \i1 + ror \i0 + ror \i2 + ror \i0 + ror \i3 + ror \i0 + ror \i4 + ror \i0 + ror \i1 + ror \i0 + ror \i2 + ror \i0 + ror \i3 + ror \i0 + ror \i4 +.ENDM + +.MACRO InvReorder_8_bits i0, i1, i2, i3, i4 + ror \i1 + ror \i0 + ror \i2 + ror \i0 + ror \i3 + ror \i0 + ror \i4 + ror \i0 + ror \i1 + ror \i0 + ror \i2 + ror \i0 + ror \i3 + ror \i0 + ror \i4 + ror \i0 +.ENDM + +; require XH:XL be the address of the input +Load_Reorder_32_bits: + ldi cnt1, 4 +reorder_8_bits_loop: + ld rmp, X+ + Reorder_8_bits rmp, x0, x1, x2, x3 + dec cnt1 + brne reorder_8_bits_loop +ret + +; require YH:YL be the address of the output +invReorder_Store_32_bits: + ldi cnt1, 4 +invreorder_8_bits_loop: + InvReorder_8_bits rmp, x0, x1, x2, x3 + st Y+, rmp + dec cnt1 + brne invreorder_8_bits_loop +ret + +; require XH:XL be the address of the input +; require YH:YL be the address of the output +Load_Reorder_Store_128_bits: + ldi cnt0, 4 +reorder_32_bits_loop: + rcall Load_Reorder_32_bits + st Y+, x0 + st Y+, x1 + st Y+, x2 + st Y+, x3 + dec cnt0 + brne reorder_32_bits_loop +ret + +; require XH:XL be the address of the input +; require YH:YL be the address of the output +Load_invReorder_Store_128_bits: + ldi cnt0, 4 +invreorder_32_bits_loop: + ld x0, X+ + ld x1, X+ + ld x2, X+ + ld x3, X+ + rcall invReorder_Store_32_bits + dec cnt0 + brne invreorder_32_bits_loop +ret + +.macro PUSH_ALL +push r2 +push r3 +push r4 +push r5 +push r6 +push r7 +push r8 +push r9 +push r10 +push r11 +push r12 +push r13 +push r14 +push r15 +push r16 +push r17 +push r28 +push r29 +.endm + +.macro POP_ALL +pop r29 +pop r28 +pop r17 +pop r16 +pop r15 +pop r14 +pop r13 +pop r12 +pop r11 +pop r10 +pop r9 +pop r8 +pop r7 +pop r6 +pop r5 +pop r4 +pop r3 +pop r2 +clr r1 +.endm diff --git a/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate128v1/avr8_speed/crypto_aead.h b/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate128v1/avr8_speed/crypto_aead.h new file mode 100644 index 0000000..cd820d3 --- /dev/null +++ b/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate128v1/avr8_speed/crypto_aead.h @@ -0,0 +1,26 @@ +#ifdef __cplusplus +extern "C" { +#endif + +int crypto_aead_encrypt( + unsigned char *c,unsigned long long *clen, + const unsigned char *m,unsigned long long mlen, + const unsigned char *ad,unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k + ); + + +int crypto_aead_decrypt( + unsigned char *m,unsigned long long *outputmlen, + unsigned char *nsec, + const unsigned char *c,unsigned long long clen, + const unsigned char *ad,unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k + ); + +#ifdef __cplusplus +} +#endif diff --git a/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate128v1/avr8_speed/encrypt.c b/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate128v1/avr8_speed/encrypt.c new file mode 100644 index 0000000..31bc9c4 --- /dev/null +++ b/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate128v1/avr8_speed/encrypt.c @@ -0,0 +1,98 @@ +#include +#include +#include +#include +#include "api.h" + +extern void crypto_aead_encrypt_asm( + unsigned char *c, + const unsigned char *m, + unsigned char mlen, + const unsigned char *ad, + unsigned char adlen, + const unsigned char *npub, + const unsigned char *k + ); + +extern char crypto_aead_decrypt_asm( + unsigned char *m, + const unsigned char *c, + unsigned char clen, + const unsigned char *ad, + unsigned char adlen, + const unsigned char *npub, + const unsigned char *k + ); + +int crypto_aead_encrypt( + unsigned char *c, unsigned long long *clen, + const unsigned char *m, unsigned long long mlen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k + ) +{ + /* + ... + ... the code for the cipher implementation goes here, + ... generating a ciphertext c[0],c[1],...,c[*clen-1] + ... from a plaintext m[0],m[1],...,m[mlen-1] + ... and associated data ad[0],ad[1],...,ad[adlen-1] + ... and nonce npub[0],npub[1],.. + ... and secret key k[0],k[1],... + ... the implementation shall not use nsec + ... + ... return 0; + */ + + (void)nsec; + + crypto_aead_encrypt_asm(c, m, mlen, ad, adlen, npub, k); + + *clen = mlen + CRYPTO_ABYTES; + return 0; +} + + + +int crypto_aead_decrypt( + unsigned char *m, unsigned long long *mlen, + unsigned char *nsec, + const unsigned char *c, unsigned long long clen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k + ) +{ + /* + ... + ... the code for the AEAD implementation goes here, + ... generating a plaintext m[0],m[1],...,m[*mlen-1] + ... and secret message number nsec[0],nsec[1],... + ... from a ciphertext c[0],c[1],...,c[clen-1] + ... and associated data ad[0],ad[1],...,ad[adlen-1] + ... and nonce number npub[0],npub[1],... + ... and secret key k[0],k[1],... + ... + ... return 0; + */ + unsigned long long mlen_; + char tag_is_match; + + (void)nsec; + if (clen < CRYPTO_ABYTES) { + return -1; + } + mlen_ = clen - CRYPTO_ABYTES; + + tag_is_match = crypto_aead_decrypt_asm(m, c, mlen_, ad, adlen, npub, k); + + if (tag_is_match != 0) + { + memset(m, 0, (size_t)mlen_); + return -1; + } + *mlen = mlen_; + return 0; +} \ No newline at end of file diff --git a/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate128v1/avr8_speed/encrypt_core.S b/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate128v1/avr8_speed/encrypt_core.S new file mode 100644 index 0000000..d9ebcc0 --- /dev/null +++ b/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate128v1/avr8_speed/encrypt_core.S @@ -0,0 +1,733 @@ +; +; ********************************************** +; * PHOTON-Beetle * +; * Authenticated Encryption and Hash Family * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by PHOTON-Beetle Team * +; ********************************************** +; +#include "api.h" + +#define CRYPTO_AEAD + +#define STATE_INBITS 256 +#define STATE_INBYTES ((STATE_INBITS + 7) / 8) +#define RATE_INBITS 128 +#define RATE_INBYTES ((RATE_INBITS + 7) / 8) +#define RATE_INBYTES_MASK (RATE_INBYTES - 1) +#define TAG_MATCH 0 +#define TAG_UNMATCH -1 +#define OTHER_FAILURES -2 + + +; For CRYPTO_HASH +#define CRYPTO_BYTES 32 +#define INITIAL_RATE_INBITS 128 +#define INITIAL_RATE_INBYTES ((INITIAL_RATE_INBITS + 7) / 8) +#define HASH_RATE_INBITS 32 +#define HASH_RATE_INBYTES ((HASH_RATE_INBITS + 7) / 8) +#define HASH_RATE_INBYTES_MASK (HASH_RATE_INBYTES - 1) + +; +; ============================================ +; R E G I S T E R D E F I N I T I O N S +; ============================================ +; +; [Add all register names here, include info on +; all used registers without specific names] +; rmp: Multipurpose register +#define rmp r16 +#define rate r17 +#define mclen r18 +#define radlen r19 +#define adlen_org r0 + +#define cnt0 r20 +#define cnt1 r21 +#define cnt2 r22 + +#define SQUEEZE_RATE_INBITS 128 +#define SQUEEZE_RATE_INBYTES ((SQUEEZE_RATE_INBITS + 7) / 8) +#define SQUEEZE_RATE_MASK (SQUEEZE_RATE_INBYTES - 1) + +#define CAPACITY_INBITS (STATE_INBITS - RATE_INBITS) +#define CAPACITY_INBYTES ((CAPACITY_INBITS + 7) / 8) + +; For CRYPTO_AEAD +#define KEY_INBITS (CRYPTO_KEYBYTES * 8) +#define KEY_INBYTES (CRYPTO_KEYBYTES) + +#define NONCE_INBITS (CRYPTO_NPUBBYTES * 8) +#define NONCE_INBYTES (CRYPTO_NPUBBYTES) + +#define TAG_INBITS (CRYPTO_ABYTES * 8) +#define TAG_INBYTES (CRYPTO_ABYTES) + +#define t0 r8 +#define t1 r9 +#define t2 r10 +#define t3 r11 + +#define x0 r12 +#define x1 r13 +#define x2 r14 +#define x3 r15 + +#define ed r1 + +#define addr0 r2 +#define addr1 r3 +#define addr2 r4 +#define addr3 r5 +#define addr4 r6 +#define addr5 r7 + +; domain_cnt overlap with cnt0, only temporarily used, no need to back up +#define domain_cnt r20 +#define domain_cnt0 r23 +#define domain_cnt1 r24 + +.section .noinit + SRAM_STATE: .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + SRAM_MESSAGE_OUT_ADDR: .BYTE 0, 0 + SRAM_MESSAGE_IN_ADDR: .BYTE 0, 0 + SRAM_MESSAGE_IN_LEN: .BYTE 0, 0 +#ifdef CRYPTO_AEAD +; For CRYPTO_AEAD + SRAM_ASSOCIATED_DATA_ADDR: .BYTE 0, 0 + SRAM_ADLEN: .BYTE 0, 0 + SRAM_NONCE_ADDR: .BYTE 0, 0 + SRAM_KEY_ADDR: .BYTE 0, 0 + SRAM_ADDITIONAL: .BYTE 0, 0, 0, 0 + .BYTE 0, 0, 0, 0 + .BYTE 0, 0, 0, 0 + .BYTE 0, 0, 0, 0 +#endif + +; SRAM required additionally, besides those used for API + SRAM_PAD: .BYTE 0, 0, 0, 0 +#if ((defined(CRYPTO_AEAD) && (RATE_INBYTES > 4)) || defined(CRYPTO_HASH)) + .BYTE 0, 0, 0, 0 + .BYTE 0, 0, 0, 0 + .BYTE 0, 0, 0, 0 +#endif + +.section .text + +#include "assist.h" +#include "photon.h" + +AddDomainCounter: + ldi YH, hi8(SRAM_STATE + STATE_INBYTES - 3) + ldi YL, lo8(SRAM_STATE + STATE_INBYTES - 3) + ldi rmp, 0x80 + ldi cnt1, 3 +check_domain_bit: + ror domain_cnt + brcc no_xor + ld x0, Y + eor x0, rmp + st Y, x0 +no_xor: + adiw YL, 1 + dec cnt1 + brne check_domain_bit +ret + +; require XH:XL be the address of the current associated data/message block +XOR_to_State: + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + mov cnt0, rate + dec cnt0 +XOR_to_State_loop: + rcall Load_Reorder_32_bits + ld rmp, Y + eor rmp, x0 + st Y+, rmp + ld rmp, Y + eor rmp, x1 + st Y+, rmp + ld rmp, Y + eor rmp, x2 + st Y+, rmp + ld rmp, Y + eor rmp, x3 + st Y+, rmp + subi cnt0, 4 + brsh XOR_to_State_loop +; XH:XL are now the address of the next associated data/message block if this is not the last block +ret + +; require XH:XL pointed to the source data to be padded +PAD_OneZero: + ldi YH, hi8(SRAM_PAD) + ldi YL, lo8(SRAM_PAD) + mov cnt1, rate +pad_copy: + ld rmp, X+ + st Y+, rmp + dec cnt1 + dec cnt0 + brne pad_copy +pad_one: + ldi rmp, 1 + st Y+, rmp + dec cnt1 + breq pad_end + clr rmp +pad_zero: + st Y+, rmp + dec cnt1 + brne pad_zero +pad_end: + ldi XH, hi8(SRAM_PAD) + ldi XL, lo8(SRAM_PAD) +; XH:XL are now pointed to last block needed to be processed +ret + +HASH: + movw addr0, XL +hash_block_loop: + rcall PHOTON_Permutation + movw XL, addr0 + cp rate, radlen + brsh hash_last_block + rcall XOR_to_State + movw addr0, XL + sub radlen, rate + rjmp hash_block_loop + +hash_last_block: + cp radlen, rate + breq hash_xor_domain + mov cnt0, radlen + rcall PAD_OneZero + +hash_xor_domain: + clr radlen + rcall XOR_to_State + mov domain_cnt, domain_cnt0 + rcall AddDomainCounter +ret + +TAG: + rcall PHOTON_Permutation + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + movw YL, addr2 + rcall Load_invReorder_Store_128_bits +ret + +#ifdef CRYPTO_AEAD +.IF (RATE_INBITS == 128) +XOR_to_Cipher: + mov t2, rate + cp t2, mclen + brlo XOR_to_Cipher_Start + mov t2, mclen ; backup the real length of the remaining message + +XOR_to_Cipher_Start: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + ldi YH, hi8(SRAM_ADDITIONAL) + ldi YL, lo8(SRAM_ADDITIONAL) + rcall Load_invReorder_Store_128_bits ; State move to additional SRAM and reorder + + movw XL, addr0 + movw ZL, addr2 + + ; XOR Part 2 + sbiw YL, (RATE_INBYTES>>1) ; Pointed to Part 2 + ldi cnt0, (RATE_INBYTES>>1) + cp cnt0, mclen + brlo XOR_Part2_Store_Cipher_begin + mov cnt0, mclen +XOR_Part2_Store_Cipher_begin: + sub mclen, cnt0 +XOR_Part2_Store_Cipher_loop: + ld t0, Y+ + ld x0, X+ + eor x0, t0 + st Z+, x0 + dec cnt0 + brne XOR_Part2_Store_Cipher_loop + + cpi mclen, 1 + brlo XOR_to_Cipher_END + + ; XOR (Part 1 >>> 1) + ldi cnt0, (RATE_INBYTES>>1) + cp cnt0, mclen + brlo XOR_Part1_Store_Cipher_begin + mov cnt0, mclen +XOR_Part1_Store_Cipher_begin: + sub mclen, cnt0 + ldi YH, hi8(SRAM_ADDITIONAL) + ldi YL, lo8(SRAM_ADDITIONAL) + ld t0, Y + bst t0, 0 + adiw YL, (RATE_INBYTES>>1)-1 + ld t0, Y + ror t0 + bld t0, 7 + st Y, t0 + ldi cnt1, (RATE_INBYTES>>1)-1 +ROR_part1_loop: + ld t0, -Y + ror t0 + st Y, t0 + dec cnt1 + brne ROR_part1_loop + +XOR_Part1_Store_Cipher_loop: + ld t0, Y+ + ld x0, X+ + eor x0, t0 + st Z+, x0 + dec cnt0 + brne XOR_Part1_Store_Cipher_loop + +XOR_to_Cipher_END: + tst ed + brne XOR_to_Cipher_dec + +XOR_to_Cipher_enc: + movw XL, addr0 + cp t2, rate + brsh XOR_to_Cipher_XOR_to_State + mov cnt0, t2 + rcall PAD_OneZero + rjmp XOR_to_Cipher_XOR_to_State + +XOR_to_Cipher_dec: + movw XL, addr2 + cp t2, rate + brsh XOR_to_Cipher_XOR_to_State + ; need to be padded + mov cnt0, t2 + rcall PAD_OneZero + +XOR_to_Cipher_XOR_to_State: + rcall XOR_to_State + + clr rmp + add addr0, t2 + adc addr1, rmp + add addr2, t2 + adc addr3, rmp +ret +.ELSE +; RATE_INBITS == 32 +XOR_to_Cipher: + mov t2, rate + cp t2, mclen + brlo XOR_to_Cipher_Start + mov t2, mclen ; backup the real length of the remaining message + +XOR_to_Cipher_Start: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + ld x0, X+ + ld x1, X+ + ld x2, X+ + ld x3, X+ + ldi YH, hi8(SRAM_ADDITIONAL) + ldi YL, lo8(SRAM_ADDITIONAL) + rcall invReorder_Store_32_bits + + movw XL, addr0 + movw ZL, addr2 + + ; XOR Part 2 + sbiw YL, (RATE_INBYTES>>1) ; Pointed to Part 2 + ldi cnt0, (RATE_INBYTES>>1) + cp cnt0, mclen + brlo XOR_Part2_Store_Cipher_begin + mov cnt0, mclen +XOR_Part2_Store_Cipher_begin: + sub mclen, cnt0 +XOR_Part2_Store_Cipher_loop: + ld t0, Y+ + ld x0, X+ + eor x0, t0 + st Z+, x0 + dec cnt0 + brne XOR_Part2_Store_Cipher_loop + + cpi mclen, 1 + brlo XOR_to_Cipher_END + + ; XOR (Part 1 >>> 1) + ldi cnt0, (RATE_INBYTES>>1) + cp cnt0, mclen + brlo XOR_Part1_Store_Cipher_begin + mov cnt0, mclen +XOR_Part1_Store_Cipher_begin: + sub mclen, cnt0 + ldi YH, hi8(SRAM_ADDITIONAL) + ldi YL, lo8(SRAM_ADDITIONAL) + ld t0, Y+ + ld t1, Y+ + bst t0, 0 + ror t1 + ror t0 + bld t1, 7 + + ld x0, X+ + eor x0, t0 + st Z+, x0 + dec cnt0 + breq XOR_to_Cipher_END + ld x0, X+ + eor x0, t1 + st Z+, x0 + +XOR_to_Cipher_END: + tst ed + brne XOR_to_Cipher_dec + +XOR_to_Cipher_enc: + movw XL, addr0 + cp t2, rate + brsh XOR_to_Cipher_XOR_to_State + mov cnt0, t2 + rcall PAD_OneZero + rjmp XOR_to_Cipher_XOR_to_State + +XOR_to_Cipher_dec: + movw XL, addr2 + cp t2, rate + brsh XOR_to_Cipher_XOR_to_State + ; need to be padded + mov cnt0, t2 + rcall PAD_OneZero + +XOR_to_Cipher_XOR_to_State: + rcall XOR_to_State + + clr rmp + add addr0, t2 + adc addr1, rmp + add addr2, t2 + adc addr3, rmp +ret +.ENDIF + +ENC: + lds ZH, SRAM_MESSAGE_OUT_ADDR + lds ZL, SRAM_MESSAGE_OUT_ADDR + 1 + lds XH, SRAM_MESSAGE_IN_ADDR + lds XL, SRAM_MESSAGE_IN_ADDR + 1 + + movw addr0, XL + movw addr2, ZL + +enc_block_loop: + rcall PHOTON_Permutation + rcall XOR_to_Cipher + cpi mclen, 1 + brsh enc_block_loop + + mov domain_cnt, domain_cnt1 + rcall AddDomainCounter +ret + +AUTH_AND_ENCDEC: + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + + lds XH, SRAM_NONCE_ADDR + lds XL, SRAM_NONCE_ADDR + 1 + rcall Load_Reorder_Store_128_bits + lds XH, SRAM_KEY_ADDR + lds XL, SRAM_KEY_ADDR + 1 + rcall Load_Reorder_Store_128_bits + + ldi domain_cnt0, 1 + ldi domain_cnt1, 1 + +test_adlen_zero: + tst radlen + breq adlen_zero_test_mlen_zero + + ; radlen != 0 +adlen_nzero_test_mlen_zero: + tst mclen + brne test_adlen_divisible + ldi domain_cnt0, 3 +test_adlen_divisible: + mov rmp, radlen + andi rmp, RATE_INBYTES_MASK + breq hash_ad + inc domain_cnt0 ; 2 or 4 +hash_ad: + lds XH, SRAM_ASSOCIATED_DATA_ADDR + lds XL, SRAM_ASSOCIATED_DATA_ADDR + 1 + rcall HASH + tst mclen + breq mlen_zero_inputout_address + rjmp test_mlen_divisible + +adlen_zero_test_mlen_zero: + ldi domain_cnt1, 5 + tst mclen + breq adlen_zero_mlen_zero + + ; mclen != 0 +test_mlen_divisible: + mov rmp, mclen + andi rmp, RATE_INBYTES_MASK + breq enc_dec_m + inc domain_cnt1 ; 2 or 6 +enc_dec_m: + rcall ENC + rjmp AUTH_AND_ENCDEC_end + +adlen_zero_mlen_zero: + ; empty message and empty associated data + ldi YH, hi8(SRAM_STATE + STATE_INBYTES - 3) + ldi YL, lo8(SRAM_STATE + STATE_INBYTES - 3) + ld x0, Y + ldi rmp, 0x80 + eor x0, rmp + st Y, x0 + +mlen_zero_inputout_address: + tst ed + brne dec_inputout_address +enc_inputout_address: + lds ZH, SRAM_MESSAGE_OUT_ADDR + lds ZL, SRAM_MESSAGE_OUT_ADDR + 1 + movw addr2, ZL + rjmp AUTH_AND_ENCDEC_end +dec_inputout_address: + lds ZH, SRAM_MESSAGE_IN_ADDR + lds ZL, SRAM_MESSAGE_IN_ADDR + 1 + movw addr0, ZL + +AUTH_AND_ENCDEC_end: +ret + + +; void crypto_aead_encrypt_asm( +; unsigned char *c, +; const unsigned char *m, +; unsigned long long mlen, +; const unsigned char *ad, +; unsigned long long radlen, +; const unsigned char *npub, +; const unsigned char *k +; ) +; +; unsigned char *c, is passed in r24:r25 +; const unsigned char *m, is passed in r22:r23 +; unsigned long long mlen, is passed in r20:r21, only LSB (r20) is used +; const unsigned char *ad, is passed in r18:r19 +; unsigned long long radlen, is passed in r16:r17, only LSB (r16) is used +; const unsigned char *npub, is passed in r14:r15 +; const unsigned char *k is passed in r12:r13 +.global crypto_aead_encrypt_asm +crypto_aead_encrypt_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store cipher address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store message address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store message length in SRAM_MESSAGE_IN_LEN + st X+, r20 + st X+, r19 ;store associated data address in SRAM_ASSOCIATED_DATA_ADDR + st X+, r18 + st X+, r17 ;store associated data length in SRAM_ADLEN + st X+, r16 + st X+, r15 ;store nonce address in SRAM_NONCE_ADDR + st X+, r14 + st X+, r13 ;store key address in SRAM_KEY_ADDR + st X+, r12 + mov mclen, r20 + mov radlen, r16 + + ldi rate, RATE_INBYTES + clr ed + + rcall AUTH_AND_ENCDEC + rcall TAG + + POP_ALL +ret + +; int crypto_aead_decrypt_asm( +; unsigned char *m, +; const unsigned char *c, +; unsigned long long clen, +; const unsigned char *ad, +; unsigned long long radlen, +; const unsigned char *npub, +; const unsigned char *k +; ) +; +; unsigned char *m, is passed in r24:r25 +; const unsigned char *c, is passed in r22:r23 +; unsigned long long clen, is passed in r20:r21, only LSB (r20) is used +; const unsigned char *ad, is passed in r18:r19 +; unsigned long long radlen, is passed in r16:r17, only LSB (r16) is used +; const unsigned char *npub, is passed in r14:r15 +; const unsigned char *k is passed in r12:r13 +.global crypto_aead_decrypt_asm +crypto_aead_decrypt_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store message address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store cipher address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store cipher length in SRAM_MESSAGE_IN_LEN + st X+, r20 + st X+, r19 ;store associated data address in SRAM_ASSOCIATED_DATA_ADDR + st X+, r18 + st X+, r17 ;store associated data length in SRAM_ADLEN + st X+, r16 + st X+, r15 ;store nonce address in SRAM_NONCE_ADDR + st X+, r14 + st X+, r13 ;store key address in SRAM_KEY_ADDR + st X+, r12 + mov mclen, r20 + mov radlen, r16 + + ldi rate, RATE_INBYTES + clr ed + inc ed + + rcall AUTH_AND_ENCDEC + + ldi YH, hi8(SRAM_ADDITIONAL) + ldi YL, lo8(SRAM_ADDITIONAL) + movw addr2, YL + rcall TAG + + sbiw YL, CRYPTO_ABYTES + movw XL, addr0 + + ldi cnt0, CRYPTO_ABYTES +compare_tag: + ld t0, Y+ + ld x0, X+ + cp t0, x0 + brne return_tag_not_match + dec cnt0 + brne compare_tag + rjmp return_tag_match + +return_tag_not_match: + ldi r25, 0xFF + ldi r24, 0xFF + rjmp crypto_aead_decrypt_end +return_tag_match: + clr r25 + clr r24 + +crypto_aead_decrypt_end: + POP_ALL +ret + +; #ifdef CRYPTO_AEAD +#endif + +#ifdef CRYPTO_HASH +; void crypto_hash_asm( +; unsigned char *out, +; const unsigned char *in, +; unsigned long long inlen +; ) +; +; unsigned char *out, is passed in r24:r25 +; const unsigned char *in, is passed in r22:r23 +; unsigned long long inlen, is passed in r20:r21, only LSB (r20) is used +.global crypto_hash_asm +crypto_hash_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store message address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store cipher address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store cipher length in SRAM_MESSAGE_IN_LEN + st X+, r20 + mov mclen, r20 + + ; empty half state + ldi YH, hi8(SRAM_STATE + INITIAL_RATE_INBYTES) + ldi YL, lo8(SRAM_STATE + INITIAL_RATE_INBYTES) + clr rmp + ldi cnt1, (STATE_INBYTES - INITIAL_RATE_INBYTES) +zero_state: + st Y+, rmp + dec cnt1 + brne zero_state + + ldi domain_cnt0, 1 + sbiw YL, (STATE_INBYTES - INITIAL_RATE_INBYTES) + lds XH, SRAM_MESSAGE_IN_ADDR + lds XL, SRAM_MESSAGE_IN_ADDR + 1 + + tst mclen + breq add_domain + +test_mlen_initrate: + ; mclen != 0 + cpi mclen, INITIAL_RATE_INBYTES + brlo less_than_initial_rate + breq equal_to_initial_rate + +more_than_initial_rate: + rcall Load_Reorder_Store_128_bits + ldi rate, HASH_RATE_INBYTES + mov radlen, mclen + subi radlen, INITIAL_RATE_INBYTES + mov rmp, radlen + andi rmp, HASH_RATE_INBYTES_MASK + breq hash_message + inc domain_cnt0 +hash_message: + rcall HASH + rjmp gen_digest + +equal_to_initial_rate: + inc domain_cnt0 + rcall Load_Reorder_Store_128_bits + rjmp add_domain + +less_than_initial_rate: + mov cnt0, mclen + ldi rate, INITIAL_RATE_INBYTES + rcall PAD_OneZero + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + rcall Load_Reorder_Store_128_bits + rjmp add_domain + +add_domain: + mov domain_cnt, domain_cnt0 + rcall AddDomainCounter +gen_digest: + lds XH, SRAM_MESSAGE_OUT_ADDR + lds XL, SRAM_MESSAGE_OUT_ADDR + 1 + movw addr2, XL + rcall TAG + movw XL, addr2 + adiw XL, SQUEEZE_RATE_INBYTES + movw addr2, XL + rcall TAG + + POP_ALL +ret + +#endif \ No newline at end of file diff --git a/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate128v1/avr8_speed/photon.h b/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate128v1/avr8_speed/photon.h new file mode 100644 index 0000000..d764e16 --- /dev/null +++ b/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate128v1/avr8_speed/photon.h @@ -0,0 +1,714 @@ +; +; ********************************************** +; * PHOTON-Beetle * +; * Authenticated Encryption and Hash Family * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.1 2020 by PHOTON-Beetle Team * +; ********************************************** +; +#define ROUND_N 12 +#define DIM 8 + +.MACRO Store_OneRow + st X+, x0 + st X+, x1 + st X+, x2 + st X+, x3 +.ENDM + +.MACRO ROTL_1 i0 + bst \i0, 7 + lsl \i0 + bld \i0, 0 +.ENDM + +.MACRO ROTR_1 i0 + bst \i0, 0 + lsr \i0 + bld \i0, 7 +.ENDM + +.MACRO ROTR_4 i0 + swap \i0 +.ENDM + +.MACRO ROTR_1_ROW + ROTR_1 x0 + ROTR_1 x1 + ROTR_1 x2 + ROTR_1 x3 +.ENDM + +.MACRO ROTL_1_ROW + ROTL_1 x0 + ROTL_1 x1 + ROTL_1 x2 + ROTL_1 x3 +.ENDM + +.MACRO ROTR_4_ROW + ROTR_4 x0 + ROTR_4 x1 + ROTR_4 x2 + ROTR_4 x3 +.ENDM + + +; For all mul2_GF16_0x13_xor: +; Input +; MSB........LSB +; x0=@0: x1=@1: x2=@2: x3=@3 + ; # define mul2_GF16_0x13 (x0 ,x1 ,x2 ,x3) do { \ + ; x3 = XOR (x3 ,x0); \ + ; } while (0) ; /* Output : ( MSB ) x1 ,x2 ,x3 , x0 ( LSB ) */ +.MACRO mul2_GF16_0x13_xor + ld t3, X+ + ld t2, X+ + ld t1, X+ + ld t0, X+ + eor t3, t0 + eor x0, t0 + eor x1, t3 + eor x2, t2 + eor x3, t1 +.ENDM + + ; # define mul4_GF16_0x13 (x0 ,x1 ,x2 ,x3) do { \ + ; x3 = XOR (x3 ,x0); x0 = XOR (x0 ,x1); \ + ; } while (0) ; /* Output : ( MSB ) x2 ,x3 ,x0 , x1 ( LSB ) */ +.MACRO mul4_GF16_0x13_xor + ld t3, X+ + ld t2, X+ + ld t1, X+ + ld t0, X+ + eor t3, t0 + eor t0, t1 + eor x0, t1 + eor x1, t0 + eor x2, t3 + eor x3, t2 +.ENDM + + ; # define mul5_GF16_0x13 (x0 ,x1 ,x2 ,x3) do { \ + ; x2 = XOR (x2 ,x0); x3 = XOR (x3 ,x1); \ + ; x1 = XOR (x1 ,x2); x0 = XOR (x0 ,x3); \ + ; } while (0) ; /* Output : ( MSB ) x2 ,x0 ,x1 , x3 ( LSB ) */ +.MACRO mul5_GF16_0x13_xor + ld t3, X+ + ld t2, X+ + ld t1, X+ + ld t0, X+ + eor t2, t0 + eor t3, t1 + eor t1, t2 + eor t0, t3 + eor x0, t3 + eor x1, t1 + eor x2, t0 + eor x3, t2 +.ENDM + + ; # define mul6_GF16_0x13 (x0 ,x1 ,x2 ,x3) do { \ + ; x3 = XOR (x3 ,x1); x1 = XOR (x1 ,x0); \ + ; x2 = XOR (x2 ,x1); x0 = XOR (x0 ,x2); \ + ; x2 = XOR (x2 ,x3); \ + ; } while (0) ; /* Output : ( MSB ) x0 ,x2 ,x3 , x1 ( LSB ) */ +.MACRO mul6_GF16_0x13_xor + ld t3, X+ + ld t2, X+ + ld t1, X+ + ld t0, X+ + eor t3, t1 + eor t1, t0 + eor t2, t1 + eor t0, t2 + eor t2, t3 + eor x0, t1 + eor x1, t3 + eor x2, t2 + eor x3, t0 +.ENDM + + ; # define mul8_GF16_0x13 (x0 ,x1 ,x2 ,x3) do { \ + ; x3 = XOR (x3 ,x0); x0 = XOR (x0 ,x1); \ + ; x1 = XOR (x1 ,x2); \ + ; } while (0) ; /* Output : ( MSB ) x3 ,x0 ,x1 , x2 ( LSB ) */ +.MACRO mul8_GF16_0x13_xor + ld t3, X+ + ld t2, X+ + ld t1, X+ + ld t0, X+ + eor t3, t0 + eor t0, t1 + eor t1, t2 + eor x0, t2 + eor x1, t1 + eor x2, t0 + eor x3, t3 +.ENDM + + ; # define mul11_GF16_0x13 (x0 ,x1 ,x2 ,x3) do { \ + ; x2 = XOR (x2 ,x0); x1 = XOR (x1 ,x3); \ + ; x0 = XOR (x0 ,x1); x3 = XOR (x3 ,x2); \ + ; } while (0) ; /* Output : ( MSB ) x1 ,x2 ,x0 , x3 ( LSB ) */ +.MACRO mulb_GF16_0x13_xor + ld t3, X+ + ld t2, X+ + ld t1, X+ + ld t0, X+ + eor t2, t0 + eor t1, t3 + eor t0, t1 + eor t3, t2 + eor x0, t3 + eor x1, t0 + eor x2, t2 + eor x3, t1 +.ENDM + + +.MACRO RoundFunction +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Start AddRC_Sbox_ShiftRow +AddRC_Sbox_ShiftRow_Start: + clr t3 + inc t3 + + ldi XL, lo8(SRAM_STATE) + ldi XH, hi8(SRAM_STATE) + + lpm t0, Z+ ; Load two nibbles of round constant for row 0, 1 + ; AddRC_TwoRows + ld x0, X+ + ld x1, X+ + ld x2, X+ + ld x3, X+ + sbiw XL, 4 + + ror t0 + brcc row0_next1 + eor x0, t3 +row0_next1: + ror t0 + brcc row0_next2 + eor x1, t3 +row0_next2: + ror t0 + brcc row0_next3 + eor x2, t3 +row0_next3: + ror t0 + brcc row0_next4 + eor x3, t3 +row0_next4: + ; Sbox_TwoRows + eor x1, x2 + mov t1, x2 + and t1, x1 + eor x3, t1 + mov t1, x3 + and x3, x1 + eor x3, x2 + mov t2, x3 + eor x3, x0 + com x3 + mov x2, x3 + or t2, x0 + eor x0, t1 + eor x1, x0 + or x2, x1 + eor x2, t1 + eor x1, t2 + eor x3, x1 + Store_OneRow + + ; AddRC_TwoRows + ld x0, X+ + ld x1, X+ + ld x2, X+ + ld x3, X+ + sbiw XL, 4 + + ror t0 + brcc row1_next1 + eor x0, t3 +row1_next1: + ror t0 + brcc row1_next2 + eor x1, t3 +row1_next2: + ror t0 + brcc row1_next3 + eor x2, t3 +row1_next3: + ror t0 + brcc row1_next4 + eor x3, t3 +row1_next4: + ; Sbox_TwoRows + eor x1, x2 + mov t1, x2 + and t1, x1 + eor x3, t1 + mov t1, x3 + and x3, x1 + eor x3, x2 + mov t2, x3 + eor x3, x0 + com x3 + mov x2, x3 + or t2, x0 + eor x0, t1 + eor x1, x0 + or x2, x1 + eor x2, t1 + eor x1, t2 + eor x3, x1 + + ROTR_1_ROW + Store_OneRow + + lpm t0, Z+ ; Load two nibbles of round constant for row 2i, 2i+1 + ; AddRC_TwoRows + ld x0, X+ + ld x1, X+ + ld x2, X+ + ld x3, X+ + sbiw XL, 4 + + ror t0 + brcc row2_next1 + eor x0, t3 +row2_next1: + ror t0 + brcc row2_next2 + eor x1, t3 +row2_next2: + ror t0 + brcc row2_next3 + eor x2, t3 +row2_next3: + ror t0 + brcc row2_next4 + eor x3, t3 +row2_next4: + ; Sbox_TwoRows + eor x1, x2 + mov t1, x2 + and t1, x1 + eor x3, t1 + mov t1, x3 + and x3, x1 + eor x3, x2 + mov t2, x3 + eor x3, x0 + com x3 + mov x2, x3 + or t2, x0 + eor x0, t1 + eor x1, x0 + or x2, x1 + eor x2, t1 + eor x1, t2 + eor x3, x1 + + ROTR_1_ROW + ROTR_1_ROW + Store_OneRow + + ; AddRC_TwoRows + ld x0, X+ + ld x1, X+ + ld x2, X+ + ld x3, X+ + sbiw XL, 4 + + ror t0 + brcc row3_next1 + eor x0, t3 +row3_next1: + ror t0 + brcc row3_next2 + eor x1, t3 +row3_next2: + ror t0 + brcc row3_next3 + eor x2, t3 +row3_next3: + ror t0 + brcc row3_next4 + eor x3, t3 +row3_next4: + ; Sbox_TwoRows + eor x1, x2 + mov t1, x2 + and t1, x1 + eor x3, t1 + mov t1, x3 + and x3, x1 + eor x3, x2 + mov t2, x3 + eor x3, x0 + com x3 + mov x2, x3 + or t2, x0 + eor x0, t1 + eor x1, x0 + or x2, x1 + eor x2, t1 + eor x1, t2 + eor x3, x1 + + ROTR_4_ROW + ROTL_1_ROW + Store_OneRow + + lpm t0, Z+ ; Load two nibbles of round constant for row 2i, 2i+1 + ; AddRC_TwoRows + ld x0, X+ + ld x1, X+ + ld x2, X+ + ld x3, X+ + sbiw XL, 4 + + ror t0 + brcc row4_next1 + eor x0, t3 +row4_next1: + ror t0 + brcc row4_next2 + eor x1, t3 +row4_next2: + ror t0 + brcc row4_next3 + eor x2, t3 +row4_next3: + ror t0 + brcc row4_next4 + eor x3, t3 +row4_next4: + ; Sbox_TwoRows + eor x1, x2 + mov t1, x2 + and t1, x1 + eor x3, t1 + mov t1, x3 + and x3, x1 + eor x3, x2 + mov t2, x3 + eor x3, x0 + com x3 + mov x2, x3 + or t2, x0 + eor x0, t1 + eor x1, x0 + or x2, x1 + eor x2, t1 + eor x1, t2 + eor x3, x1 + + ROTR_4_ROW + Store_OneRow + + ; AddRC_TwoRows + ld x0, X+ + ld x1, X+ + ld x2, X+ + ld x3, X+ + sbiw XL, 4 + + ror t0 + brcc row5_next1 + eor x0, t3 +row5_next1: + ror t0 + brcc row5_next2 + eor x1, t3 +row5_next2: + ror t0 + brcc row5_next3 + eor x2, t3 +row5_next3: + ror t0 + brcc row5_next4 + eor x3, t3 +row5_next4: + ; Sbox_TwoRows + eor x1, x2 + mov t1, x2 + and t1, x1 + eor x3, t1 + mov t1, x3 + and x3, x1 + eor x3, x2 + mov t2, x3 + eor x3, x0 + com x3 + mov x2, x3 + or t2, x0 + eor x0, t1 + eor x1, x0 + or x2, x1 + eor x2, t1 + eor x1, t2 + eor x3, x1 + + ROTR_4_ROW + ROTR_1_ROW + Store_OneRow + + lpm t0, Z+ ; Load two nibbles of round constant for row 2i, 2i+1 + ; AddRC_TwoRows + ld x0, X+ + ld x1, X+ + ld x2, X+ + ld x3, X+ + sbiw XL, 4 + + ror t0 + brcc row6_next1 + eor x0, t3 +row6_next1: + ror t0 + brcc row6_next2 + eor x1, t3 +row6_next2: + ror t0 + brcc row6_next3 + eor x2, t3 +row6_next3: + ror t0 + brcc row6_next4 + eor x3, t3 +row6_next4: + ; Sbox_TwoRows + eor x1, x2 + mov t1, x2 + and t1, x1 + eor x3, t1 + mov t1, x3 + and x3, x1 + eor x3, x2 + mov t2, x3 + eor x3, x0 + com x3 + mov x2, x3 + or t2, x0 + eor x0, t1 + eor x1, x0 + or x2, x1 + eor x2, t1 + eor x1, t2 + eor x3, x1 + + ROTL_1_ROW + ROTL_1_ROW + Store_OneRow + + ; AddRC_TwoRows + ld x0, X+ + ld x1, X+ + ld x2, X+ + ld x3, X+ + sbiw XL, 4 + + ror t0 + brcc row7_next1 + eor x0, t3 +row7_next1: + ror t0 + brcc row7_next2 + eor x1, t3 +row7_next2: + ror t0 + brcc row7_next3 + eor x2, t3 +row7_next3: + ror t0 + brcc row7_next4 + eor x3, t3 +row7_next4: + ; Sbox_TwoRows + eor x1, x2 + mov t1, x2 + and t1, x1 + eor x3, t1 + mov t1, x3 + and x3, x1 + eor x3, x2 + mov t2, x3 + eor x3, x0 + com x3 + mov x2, x3 + or t2, x0 + eor x0, t1 + eor x1, x0 + or x2, x1 + eor x2, t1 + eor x1, t2 + eor x3, x1 + + ROTL_1_ROW + Store_OneRow + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Start MixColumns +MC_Start: + + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + movw YL, XL +A0: + clr x0 + clr x1 + clr x2 + clr x3 + mul2_GF16_0x13_xor + mul4_GF16_0x13_xor + mul2_GF16_0x13_xor + mulb_GF16_0x13_xor + mul2_GF16_0x13_xor + mul8_GF16_0x13_xor + mul5_GF16_0x13_xor + mul6_GF16_0x13_xor + movw XL, YL + Store_OneRow + +A1: + clr x0 + clr x1 + clr x2 + clr x3 + mul2_GF16_0x13_xor + mul4_GF16_0x13_xor + mul2_GF16_0x13_xor + mulb_GF16_0x13_xor + mul2_GF16_0x13_xor + mul8_GF16_0x13_xor + mul5_GF16_0x13_xor + movw XL, YL + mul6_GF16_0x13_xor + Store_OneRow + +A2: + clr x0 + clr x1 + clr x2 + clr x3 + mul2_GF16_0x13_xor + mul4_GF16_0x13_xor + mul2_GF16_0x13_xor + mulb_GF16_0x13_xor + mul2_GF16_0x13_xor + mul8_GF16_0x13_xor + movw XL, YL + mul5_GF16_0x13_xor + mul6_GF16_0x13_xor + Store_OneRow + +A3: + clr x0 + clr x1 + clr x2 + clr x3 + mul2_GF16_0x13_xor + mul4_GF16_0x13_xor + mul2_GF16_0x13_xor + mulb_GF16_0x13_xor + mul2_GF16_0x13_xor + movw XL, YL + mul8_GF16_0x13_xor + mul5_GF16_0x13_xor + mul6_GF16_0x13_xor + Store_OneRow + +A4: + clr x0 + clr x1 + clr x2 + clr x3 + mul2_GF16_0x13_xor + mul4_GF16_0x13_xor + mul2_GF16_0x13_xor + mulb_GF16_0x13_xor + movw XL, YL + mul2_GF16_0x13_xor + mul8_GF16_0x13_xor + mul5_GF16_0x13_xor + mul6_GF16_0x13_xor + Store_OneRow + +A5: + clr x0 + clr x1 + clr x2 + clr x3 + mul2_GF16_0x13_xor + mul4_GF16_0x13_xor + mul2_GF16_0x13_xor + movw XL, YL + mulb_GF16_0x13_xor + mul2_GF16_0x13_xor + mul8_GF16_0x13_xor + mul5_GF16_0x13_xor + mul6_GF16_0x13_xor + Store_OneRow + +A6: + clr x0 + clr x1 + clr x2 + clr x3 + mul2_GF16_0x13_xor + mul4_GF16_0x13_xor + movw XL, YL + mul2_GF16_0x13_xor + mulb_GF16_0x13_xor + mul2_GF16_0x13_xor + mul8_GF16_0x13_xor + mul5_GF16_0x13_xor + mul6_GF16_0x13_xor + Store_OneRow + +A7: + clr x0 + clr x1 + clr x2 + clr x3 + mul2_GF16_0x13_xor + movw XL, YL + mul4_GF16_0x13_xor + mul2_GF16_0x13_xor + mulb_GF16_0x13_xor + mul2_GF16_0x13_xor + mul8_GF16_0x13_xor + mul5_GF16_0x13_xor + mul6_GF16_0x13_xor + Store_OneRow +.ENDM + +PHOTON_Permutation: + ldi ZH, hi8(RC) + ldi ZL, lo8(RC) + ldi cnt2, ROUND_N +round_loop_start: + RoundFunction + dec cnt2 + breq round_loop_end + jmp round_loop_start +round_loop_end: +ret + +.section .text +RC: +.byte 0x01,0x62,0xFE,0x9D +.byte 0x23,0x40,0xDC,0xBF +.byte 0x67,0x04,0x98,0xFB +.byte 0xFE,0x9D,0x01,0x62 +.byte 0xCD,0xAE,0x32,0x51 +.byte 0xAB,0xC8,0x54,0x37 +.byte 0x76,0x15,0x89,0xEA +.byte 0xDC,0xBF,0x23,0x40 +.byte 0x89,0xEA,0x76,0x15 +.byte 0x32,0x51,0xCD,0xAE +.byte 0x45,0x26,0xBA,0xD9 +.byte 0xBA,0xD9,0x45,0x26 diff --git a/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate32v1/avr8_lowrom/api.h b/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate32v1/avr8_lowrom/api.h new file mode 100644 index 0000000..4ceda96 --- /dev/null +++ b/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate32v1/avr8_lowrom/api.h @@ -0,0 +1,5 @@ +#define CRYPTO_KEYBYTES 16 +#define CRYPTO_NSECBYTES 0 +#define CRYPTO_NPUBBYTES 16 +#define CRYPTO_ABYTES 16 +#define CRYPTO_NOOVERLAP 1 diff --git a/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate32v1/avr8_lowrom/assist.h b/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate32v1/avr8_lowrom/assist.h new file mode 100644 index 0000000..fdf3c68 --- /dev/null +++ b/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate32v1/avr8_lowrom/assist.h @@ -0,0 +1,140 @@ +; +; ********************************************** +; * PHOTON-Beetle * +; * Authenticated Encryption and Hash Family * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by PHOTON-Beetle Team * +; ********************************************** +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Bitslice +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +.MACRO Reorder_8_bits i0, i1, i2, i3, i4 + ror \i0 + ror \i1 + ror \i0 + ror \i2 + ror \i0 + ror \i3 + ror \i0 + ror \i4 + ror \i0 + ror \i1 + ror \i0 + ror \i2 + ror \i0 + ror \i3 + ror \i0 + ror \i4 +.ENDM + +.MACRO InvReorder_8_bits i0, i1, i2, i3, i4 + ror \i1 + ror \i0 + ror \i2 + ror \i0 + ror \i3 + ror \i0 + ror \i4 + ror \i0 + ror \i1 + ror \i0 + ror \i2 + ror \i0 + ror \i3 + ror \i0 + ror \i4 + ror \i0 +.ENDM + +; require XH:XL be the address of the input +Load_Reorder_32_bits: + ldi cnt1, 4 +reorder_8_bits_loop: + ld rmp, X+ + Reorder_8_bits rmp, x0, x1, x2, x3 + dec cnt1 + brne reorder_8_bits_loop +ret + +; require YH:YL be the address of the output +invReorder_Store_32_bits: + ldi cnt1, 4 +invreorder_8_bits_loop: + InvReorder_8_bits rmp, x0, x1, x2, x3 + st Y+, rmp + dec cnt1 + brne invreorder_8_bits_loop +ret + +; require XH:XL be the address of the input +; require YH:YL be the address of the output +Load_Reorder_Store_128_bits: + ldi cnt0, 4 +reorder_32_bits_loop: + rcall Load_Reorder_32_bits + st Y+, x0 + st Y+, x1 + st Y+, x2 + st Y+, x3 + dec cnt0 + brne reorder_32_bits_loop +ret + +; require XH:XL be the address of the input +; require YH:YL be the address of the output +Load_invReorder_Store_128_bits: + ldi cnt0, 4 +invreorder_32_bits_loop: + ld x0, X+ + ld x1, X+ + ld x2, X+ + ld x3, X+ + rcall invReorder_Store_32_bits + dec cnt0 + brne invreorder_32_bits_loop +ret + +.macro PUSH_ALL +push r2 +push r3 +push r4 +push r5 +push r6 +push r7 +push r8 +push r9 +push r10 +push r11 +push r12 +push r13 +push r14 +push r15 +push r16 +push r17 +push r28 +push r29 +.endm + +.macro POP_ALL +pop r29 +pop r28 +pop r17 +pop r16 +pop r15 +pop r14 +pop r13 +pop r12 +pop r11 +pop r10 +pop r9 +pop r8 +pop r7 +pop r6 +pop r5 +pop r4 +pop r3 +pop r2 +clr r1 +.endm diff --git a/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate32v1/avr8_lowrom/crypto_aead.h b/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate32v1/avr8_lowrom/crypto_aead.h new file mode 100644 index 0000000..cd820d3 --- /dev/null +++ b/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate32v1/avr8_lowrom/crypto_aead.h @@ -0,0 +1,26 @@ +#ifdef __cplusplus +extern "C" { +#endif + +int crypto_aead_encrypt( + unsigned char *c,unsigned long long *clen, + const unsigned char *m,unsigned long long mlen, + const unsigned char *ad,unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k + ); + + +int crypto_aead_decrypt( + unsigned char *m,unsigned long long *outputmlen, + unsigned char *nsec, + const unsigned char *c,unsigned long long clen, + const unsigned char *ad,unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k + ); + +#ifdef __cplusplus +} +#endif diff --git a/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate32v1/avr8_lowrom/encrypt.c b/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate32v1/avr8_lowrom/encrypt.c new file mode 100644 index 0000000..9db22d2 --- /dev/null +++ b/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate32v1/avr8_lowrom/encrypt.c @@ -0,0 +1,105 @@ +#include +#include +#include +#include +#include "api.h" + +extern void crypto_aead_encrypt_asm( + unsigned char *c, + const unsigned char *m, + unsigned char mlen, + const unsigned char *ad, + unsigned char adlen, + const unsigned char *npub, + const unsigned char *k + ); + +extern char crypto_aead_decrypt_asm( + unsigned char *m, + const unsigned char *c, + unsigned char clen, + const unsigned char *ad, + unsigned char adlen, + const unsigned char *npub, + const unsigned char *k + ); + +extern void crypto_hash_asm( + unsigned char *out, + const unsigned char *in, + unsigned char inlen + ); + + +int crypto_aead_encrypt( + unsigned char *c, unsigned long long *clen, + const unsigned char *m, unsigned long long mlen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k + ) +{ + /* + ... + ... the code for the cipher implementation goes here, + ... generating a ciphertext c[0],c[1],...,c[*clen-1] + ... from a plaintext m[0],m[1],...,m[mlen-1] + ... and associated data ad[0],ad[1],...,ad[adlen-1] + ... and nonce npub[0],npub[1],.. + ... and secret key k[0],k[1],... + ... the implementation shall not use nsec + ... + ... return 0; + */ + + (void)nsec; + + crypto_aead_encrypt_asm(c, m, mlen, ad, adlen, npub, k); + + *clen = mlen + CRYPTO_ABYTES; + return 0; +} + + + +int crypto_aead_decrypt( + unsigned char *m, unsigned long long *mlen, + unsigned char *nsec, + const unsigned char *c, unsigned long long clen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k + ) +{ + /* + ... + ... the code for the AEAD implementation goes here, + ... generating a plaintext m[0],m[1],...,m[*mlen-1] + ... and secret message number nsec[0],nsec[1],... + ... from a ciphertext c[0],c[1],...,c[clen-1] + ... and associated data ad[0],ad[1],...,ad[adlen-1] + ... and nonce number npub[0],npub[1],... + ... and secret key k[0],k[1],... + ... + ... return 0; + */ + unsigned long long mlen_; + char tag_is_match; + + (void)nsec; + if (clen < CRYPTO_ABYTES) { + return -1; + } + mlen_ = clen - CRYPTO_ABYTES; + + tag_is_match = crypto_aead_decrypt_asm(m, c, mlen_, ad, adlen, npub, k); + + if (tag_is_match != 0) + { + memset(m, 0, (size_t)mlen_); + return -1; + } + *mlen = mlen_; + return 0; +} \ No newline at end of file diff --git a/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate32v1/avr8_lowrom/encrypt_core.S b/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate32v1/avr8_lowrom/encrypt_core.S new file mode 100644 index 0000000..e18201e --- /dev/null +++ b/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate32v1/avr8_lowrom/encrypt_core.S @@ -0,0 +1,734 @@ +; +; ********************************************** +; * PHOTON-Beetle * +; * Authenticated Encryption and Hash Family * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by PHOTON-Beetle Team * +; ********************************************** +; +#include "api.h" + +#define CRYPTO_AEAD + +#define STATE_INBITS 256 +#define STATE_INBYTES ((STATE_INBITS + 7) / 8) +#define RATE_INBITS 32 +#define RATE_INBYTES ((RATE_INBITS + 7) / 8) +#define RATE_INBYTES_MASK (RATE_INBYTES - 1) +#define TAG_MATCH 0 +#define TAG_UNMATCH -1 +#define OTHER_FAILURES -2 + + +; For CRYPTO_HASH +#define CRYPTO_BYTES 32 +#define INITIAL_RATE_INBITS 128 +#define INITIAL_RATE_INBYTES ((INITIAL_RATE_INBITS + 7) / 8) +#define HASH_RATE_INBITS 32 +#define HASH_RATE_INBYTES ((HASH_RATE_INBITS + 7) / 8) +#define HASH_RATE_INBYTES_MASK (HASH_RATE_INBYTES - 1) + +; +; ============================================ +; R E G I S T E R D E F I N I T I O N S +; ============================================ +; +; [Add all register names here, include info on +; all used registers without specific names] +; rmp: Multipurpose register +#define rmp r16 +#define rate r17 +#define mclen r18 +#define radlen r19 +#define adlen_org r0 + +#define cnt0 r20 +#define cnt1 r21 +#define cnt2 r22 + +#define SQUEEZE_RATE_INBITS 128 +#define SQUEEZE_RATE_INBYTES ((SQUEEZE_RATE_INBITS + 7) / 8) +#define SQUEEZE_RATE_MASK (SQUEEZE_RATE_INBYTES - 1) + +#define CAPACITY_INBITS (STATE_INBITS - RATE_INBITS) +#define CAPACITY_INBYTES ((CAPACITY_INBITS + 7) / 8) + +; For CRYPTO_AEAD +#define KEY_INBITS (CRYPTO_KEYBYTES * 8) +#define KEY_INBYTES (CRYPTO_KEYBYTES) + +#define NONCE_INBITS (CRYPTO_NPUBBYTES * 8) +#define NONCE_INBYTES (CRYPTO_NPUBBYTES) + +#define TAG_INBITS (CRYPTO_ABYTES * 8) +#define TAG_INBYTES (CRYPTO_ABYTES) + +#define t0 r8 +#define t1 r9 +#define t2 r10 +#define t3 r11 + +#define x0 r12 +#define x1 r13 +#define x2 r14 +#define x3 r15 + +#define ed r1 + +#define addr0 r2 +#define addr1 r3 +#define addr2 r4 +#define addr3 r5 +#define addr4 r6 +#define addr5 r7 + +; domain_cnt overlap with cnt0, only temporarily used, no need to back up +#define domain_cnt r20 +#define domain_cnt0 r23 +#define domain_cnt1 r24 + +.section .noinit + SRAM_STATE: .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + SRAM_MESSAGE_OUT_ADDR: .BYTE 0, 0 + SRAM_MESSAGE_IN_ADDR: .BYTE 0, 0 + SRAM_MESSAGE_IN_LEN: .BYTE 0, 0 +#ifdef CRYPTO_AEAD +; For CRYPTO_AEAD + SRAM_ASSOCIATED_DATA_ADDR: .BYTE 0, 0 + SRAM_ADLEN: .BYTE 0, 0 + SRAM_NONCE_ADDR: .BYTE 0, 0 + SRAM_KEY_ADDR: .BYTE 0, 0 + SRAM_ADDITIONAL: .BYTE 0, 0, 0, 0 + .BYTE 0, 0, 0, 0 + .BYTE 0, 0, 0, 0 + .BYTE 0, 0, 0, 0 +#endif + +; SRAM required additionally, besides those used for API + SRAM_PAD: .BYTE 0, 0, 0, 0 +#if ((defined(CRYPTO_AEAD) && (RATE_INBYTES > 4)) || defined(CRYPTO_HASH)) + .BYTE 0, 0, 0, 0 + .BYTE 0, 0, 0, 0 + .BYTE 0, 0, 0, 0 +#endif + + +.section .text + +#include "assist.h" +#include "photon.h" + +AddDomainCounter: + ldi YH, hi8(SRAM_STATE + STATE_INBYTES - 3) + ldi YL, lo8(SRAM_STATE + STATE_INBYTES - 3) + ldi rmp, 0x80 + ldi cnt1, 3 +check_domain_bit: + ror domain_cnt + brcc no_xor + ld x0, Y + eor x0, rmp + st Y, x0 +no_xor: + adiw YL, 1 + dec cnt1 + brne check_domain_bit +ret + +; require XH:XL be the address of the current associated data/message block +XOR_to_State: + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + mov cnt0, rate + dec cnt0 +XOR_to_State_loop: + rcall Load_Reorder_32_bits + ld rmp, Y + eor rmp, x0 + st Y+, rmp + ld rmp, Y + eor rmp, x1 + st Y+, rmp + ld rmp, Y + eor rmp, x2 + st Y+, rmp + ld rmp, Y + eor rmp, x3 + st Y+, rmp + subi cnt0, 4 + brsh XOR_to_State_loop +; XH:XL are now the address of the next associated data/message block if this is not the last block +ret + +; require XH:XL pointed to the source data to be padded +PAD_OneZero: + ldi YH, hi8(SRAM_PAD) + ldi YL, lo8(SRAM_PAD) + mov cnt1, rate +pad_copy: + ld rmp, X+ + st Y+, rmp + dec cnt1 + dec cnt0 + brne pad_copy +pad_one: + ldi rmp, 1 + st Y+, rmp + dec cnt1 + breq pad_end + clr rmp +pad_zero: + st Y+, rmp + dec cnt1 + brne pad_zero +pad_end: + ldi XH, hi8(SRAM_PAD) + ldi XL, lo8(SRAM_PAD) +; XH:XL are now pointed to last block needed to be processed +ret + +HASH: + movw addr0, XL +hash_block_loop: + rcall PHOTON_Permutation + movw XL, addr0 + cp rate, radlen + brsh hash_last_block + rcall XOR_to_State + movw addr0, XL + sub radlen, rate + rjmp hash_block_loop + +hash_last_block: + cp radlen, rate + breq hash_xor_domain + mov cnt0, radlen + rcall PAD_OneZero + +hash_xor_domain: + clr radlen + rcall XOR_to_State + mov domain_cnt, domain_cnt0 + rcall AddDomainCounter +ret + +TAG: + rcall PHOTON_Permutation + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + movw YL, addr2 + rcall Load_invReorder_Store_128_bits +ret + +#ifdef CRYPTO_AEAD +.IF (RATE_INBITS == 128) +XOR_to_Cipher: + mov t2, rate + cp t2, mclen + brlo XOR_to_Cipher_Start + mov t2, mclen ; backup the real length of the remaining message + +XOR_to_Cipher_Start: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + ldi YH, hi8(SRAM_ADDITIONAL) + ldi YL, lo8(SRAM_ADDITIONAL) + rcall Load_invReorder_Store_128_bits ; State move to additional SRAM and reorder + + movw XL, addr0 + movw ZL, addr2 + + ; XOR Part 2 + sbiw YL, (RATE_INBYTES>>1) ; Pointed to Part 2 + ldi cnt0, (RATE_INBYTES>>1) + cp cnt0, mclen + brlo XOR_Part2_Store_Cipher_begin + mov cnt0, mclen +XOR_Part2_Store_Cipher_begin: + sub mclen, cnt0 +XOR_Part2_Store_Cipher_loop: + ld t0, Y+ + ld x0, X+ + eor x0, t0 + st Z+, x0 + dec cnt0 + brne XOR_Part2_Store_Cipher_loop + + cpi mclen, 1 + brlo XOR_to_Cipher_END + + ; XOR (Part 1 >>> 1) + ldi cnt0, (RATE_INBYTES>>1) + cp cnt0, mclen + brlo XOR_Part1_Store_Cipher_begin + mov cnt0, mclen +XOR_Part1_Store_Cipher_begin: + sub mclen, cnt0 + ldi YH, hi8(SRAM_ADDITIONAL) + ldi YL, lo8(SRAM_ADDITIONAL) + ld t0, Y + bst t0, 0 + adiw YL, (RATE_INBYTES>>1)-1 + ld t0, Y + ror t0 + bld t0, 7 + st Y, t0 + ldi cnt1, (RATE_INBYTES>>1)-1 +ROR_part1_loop: + ld t0, -Y + ror t0 + st Y, t0 + dec cnt1 + brne ROR_part1_loop + +XOR_Part1_Store_Cipher_loop: + ld t0, Y+ + ld x0, X+ + eor x0, t0 + st Z+, x0 + dec cnt0 + brne XOR_Part1_Store_Cipher_loop + +XOR_to_Cipher_END: + tst ed + brne XOR_to_Cipher_dec + +XOR_to_Cipher_enc: + movw XL, addr0 + cp t2, rate + brsh XOR_to_Cipher_XOR_to_State + mov cnt0, t2 + rcall PAD_OneZero + rjmp XOR_to_Cipher_XOR_to_State + +XOR_to_Cipher_dec: + movw XL, addr2 + cp t2, rate + brsh XOR_to_Cipher_XOR_to_State + ; need to be padded + mov cnt0, t2 + rcall PAD_OneZero + +XOR_to_Cipher_XOR_to_State: + rcall XOR_to_State + + clr rmp + add addr0, t2 + adc addr1, rmp + add addr2, t2 + adc addr3, rmp +ret +.ELSE +; RATE_INBITS == 32 +XOR_to_Cipher: + mov t2, rate + cp t2, mclen + brlo XOR_to_Cipher_Start + mov t2, mclen ; backup the real length of the remaining message + +XOR_to_Cipher_Start: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + ld x0, X+ + ld x1, X+ + ld x2, X+ + ld x3, X+ + ldi YH, hi8(SRAM_ADDITIONAL) + ldi YL, lo8(SRAM_ADDITIONAL) + rcall invReorder_Store_32_bits + + movw XL, addr0 + movw ZL, addr2 + + ; XOR Part 2 + sbiw YL, (RATE_INBYTES>>1) ; Pointed to Part 2 + ldi cnt0, (RATE_INBYTES>>1) + cp cnt0, mclen + brlo XOR_Part2_Store_Cipher_begin + mov cnt0, mclen +XOR_Part2_Store_Cipher_begin: + sub mclen, cnt0 +XOR_Part2_Store_Cipher_loop: + ld t0, Y+ + ld x0, X+ + eor x0, t0 + st Z+, x0 + dec cnt0 + brne XOR_Part2_Store_Cipher_loop + + cpi mclen, 1 + brlo XOR_to_Cipher_END + + ; XOR (Part 1 >>> 1) + ldi cnt0, (RATE_INBYTES>>1) + cp cnt0, mclen + brlo XOR_Part1_Store_Cipher_begin + mov cnt0, mclen +XOR_Part1_Store_Cipher_begin: + sub mclen, cnt0 + ldi YH, hi8(SRAM_ADDITIONAL) + ldi YL, lo8(SRAM_ADDITIONAL) + ld t0, Y+ + ld t1, Y+ + bst t0, 0 + ror t1 + ror t0 + bld t1, 7 + + ld x0, X+ + eor x0, t0 + st Z+, x0 + dec cnt0 + breq XOR_to_Cipher_END + ld x0, X+ + eor x0, t1 + st Z+, x0 + +XOR_to_Cipher_END: + tst ed + brne XOR_to_Cipher_dec + +XOR_to_Cipher_enc: + movw XL, addr0 + cp t2, rate + brsh XOR_to_Cipher_XOR_to_State + mov cnt0, t2 + rcall PAD_OneZero + rjmp XOR_to_Cipher_XOR_to_State + +XOR_to_Cipher_dec: + movw XL, addr2 + cp t2, rate + brsh XOR_to_Cipher_XOR_to_State + ; need to be padded + mov cnt0, t2 + rcall PAD_OneZero + +XOR_to_Cipher_XOR_to_State: + rcall XOR_to_State + + clr rmp + add addr0, t2 + adc addr1, rmp + add addr2, t2 + adc addr3, rmp +ret +.ENDIF + +ENC: + lds ZH, SRAM_MESSAGE_OUT_ADDR + lds ZL, SRAM_MESSAGE_OUT_ADDR + 1 + lds XH, SRAM_MESSAGE_IN_ADDR + lds XL, SRAM_MESSAGE_IN_ADDR + 1 + + movw addr0, XL + movw addr2, ZL + +enc_block_loop: + rcall PHOTON_Permutation + rcall XOR_to_Cipher + cpi mclen, 1 + brsh enc_block_loop + + mov domain_cnt, domain_cnt1 + rcall AddDomainCounter +ret + +AUTH_AND_ENCDEC: + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + + lds XH, SRAM_NONCE_ADDR + lds XL, SRAM_NONCE_ADDR + 1 + rcall Load_Reorder_Store_128_bits + lds XH, SRAM_KEY_ADDR + lds XL, SRAM_KEY_ADDR + 1 + rcall Load_Reorder_Store_128_bits + + ldi domain_cnt0, 1 + ldi domain_cnt1, 1 + +test_adlen_zero: + tst radlen + breq adlen_zero_test_mlen_zero + + ; radlen != 0 +adlen_nzero_test_mlen_zero: + tst mclen + brne test_adlen_divisible + ldi domain_cnt0, 3 +test_adlen_divisible: + mov rmp, radlen + andi rmp, RATE_INBYTES_MASK + breq hash_ad + inc domain_cnt0 ; 2 or 4 +hash_ad: + lds XH, SRAM_ASSOCIATED_DATA_ADDR + lds XL, SRAM_ASSOCIATED_DATA_ADDR + 1 + rcall HASH + tst mclen + breq mlen_zero_inputout_address + rjmp test_mlen_divisible + +adlen_zero_test_mlen_zero: + ldi domain_cnt1, 5 + tst mclen + breq adlen_zero_mlen_zero + + ; mclen != 0 +test_mlen_divisible: + mov rmp, mclen + andi rmp, RATE_INBYTES_MASK + breq enc_dec_m + inc domain_cnt1 ; 2 or 6 +enc_dec_m: + rcall ENC + rjmp AUTH_AND_ENCDEC_end + +adlen_zero_mlen_zero: + ; empty message and empty associated data + ldi YH, hi8(SRAM_STATE + STATE_INBYTES - 3) + ldi YL, lo8(SRAM_STATE + STATE_INBYTES - 3) + ld x0, Y + ldi rmp, 0x80 + eor x0, rmp + st Y, x0 + +mlen_zero_inputout_address: + tst ed + brne dec_inputout_address +enc_inputout_address: + lds ZH, SRAM_MESSAGE_OUT_ADDR + lds ZL, SRAM_MESSAGE_OUT_ADDR + 1 + movw addr2, ZL + rjmp AUTH_AND_ENCDEC_end +dec_inputout_address: + lds ZH, SRAM_MESSAGE_IN_ADDR + lds ZL, SRAM_MESSAGE_IN_ADDR + 1 + movw addr0, ZL + +AUTH_AND_ENCDEC_end: +ret + + +; void crypto_aead_encrypt_asm( +; unsigned char *c, +; const unsigned char *m, +; unsigned long long mlen, +; const unsigned char *ad, +; unsigned long long radlen, +; const unsigned char *npub, +; const unsigned char *k +; ) +; +; unsigned char *c, is passed in r24:r25 +; const unsigned char *m, is passed in r22:r23 +; unsigned long long mlen, is passed in r20:r21, only LSB (r20) is used +; const unsigned char *ad, is passed in r18:r19 +; unsigned long long radlen, is passed in r16:r17, only LSB (r16) is used +; const unsigned char *npub, is passed in r14:r15 +; const unsigned char *k is passed in r12:r13 +.global crypto_aead_encrypt_asm +crypto_aead_encrypt_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store cipher address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store message address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store message length in SRAM_MESSAGE_IN_LEN + st X+, r20 + st X+, r19 ;store associated data address in SRAM_ASSOCIATED_DATA_ADDR + st X+, r18 + st X+, r17 ;store associated data length in SRAM_ADLEN + st X+, r16 + st X+, r15 ;store nonce address in SRAM_NONCE_ADDR + st X+, r14 + st X+, r13 ;store key address in SRAM_KEY_ADDR + st X+, r12 + mov mclen, r20 + mov radlen, r16 + + ldi rate, RATE_INBYTES + clr ed + + rcall AUTH_AND_ENCDEC + rcall TAG + + POP_ALL +ret + +; int crypto_aead_decrypt_asm( +; unsigned char *m, +; const unsigned char *c, +; unsigned long long clen, +; const unsigned char *ad, +; unsigned long long radlen, +; const unsigned char *npub, +; const unsigned char *k +; ) +; +; unsigned char *m, is passed in r24:r25 +; const unsigned char *c, is passed in r22:r23 +; unsigned long long clen, is passed in r20:r21, only LSB (r20) is used +; const unsigned char *ad, is passed in r18:r19 +; unsigned long long radlen, is passed in r16:r17, only LSB (r16) is used +; const unsigned char *npub, is passed in r14:r15 +; const unsigned char *k is passed in r12:r13 +.global crypto_aead_decrypt_asm +crypto_aead_decrypt_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store message address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store cipher address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store cipher length in SRAM_MESSAGE_IN_LEN + st X+, r20 + st X+, r19 ;store associated data address in SRAM_ASSOCIATED_DATA_ADDR + st X+, r18 + st X+, r17 ;store associated data length in SRAM_ADLEN + st X+, r16 + st X+, r15 ;store nonce address in SRAM_NONCE_ADDR + st X+, r14 + st X+, r13 ;store key address in SRAM_KEY_ADDR + st X+, r12 + mov mclen, r20 + mov radlen, r16 + + ldi rate, RATE_INBYTES + clr ed + inc ed + + rcall AUTH_AND_ENCDEC + + ldi YH, hi8(SRAM_ADDITIONAL) + ldi YL, lo8(SRAM_ADDITIONAL) + movw addr2, YL + rcall TAG + + sbiw YL, CRYPTO_ABYTES + movw XL, addr0 + + ldi cnt0, CRYPTO_ABYTES +compare_tag: + ld t0, Y+ + ld x0, X+ + cp t0, x0 + brne return_tag_not_match + dec cnt0 + brne compare_tag + rjmp return_tag_match + +return_tag_not_match: + ldi r25, 0xFF + ldi r24, 0xFF + rjmp crypto_aead_decrypt_end +return_tag_match: + clr r25 + clr r24 + +crypto_aead_decrypt_end: + POP_ALL +ret + +; #ifdef CRYPTO_AEAD +#endif + +#ifdef CRYPTO_HASH +; void crypto_hash_asm( +; unsigned char *out, +; const unsigned char *in, +; unsigned long long inlen +; ) +; +; unsigned char *out, is passed in r24:r25 +; const unsigned char *in, is passed in r22:r23 +; unsigned long long inlen, is passed in r20:r21, only LSB (r20) is used +.global crypto_hash_asm +crypto_hash_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store message address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store cipher address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store cipher length in SRAM_MESSAGE_IN_LEN + st X+, r20 + mov mclen, r20 + + ; empty half state + ldi YH, hi8(SRAM_STATE + INITIAL_RATE_INBYTES) + ldi YL, lo8(SRAM_STATE + INITIAL_RATE_INBYTES) + clr rmp + ldi cnt1, (STATE_INBYTES - INITIAL_RATE_INBYTES) +zero_state: + st Y+, rmp + dec cnt1 + brne zero_state + + ldi domain_cnt0, 1 + sbiw YL, (STATE_INBYTES - INITIAL_RATE_INBYTES) + lds XH, SRAM_MESSAGE_IN_ADDR + lds XL, SRAM_MESSAGE_IN_ADDR + 1 + + tst mclen + breq add_domain + +test_mlen_initrate: + ; mclen != 0 + cpi mclen, INITIAL_RATE_INBYTES + brlo less_than_initial_rate + breq equal_to_initial_rate + +more_than_initial_rate: + rcall Load_Reorder_Store_128_bits + ldi rate, HASH_RATE_INBYTES + mov radlen, mclen + subi radlen, INITIAL_RATE_INBYTES + mov rmp, radlen + andi rmp, HASH_RATE_INBYTES_MASK + breq hash_message + inc domain_cnt0 +hash_message: + rcall HASH + rjmp gen_digest + +equal_to_initial_rate: + inc domain_cnt0 + rcall Load_Reorder_Store_128_bits + rjmp add_domain + +less_than_initial_rate: + mov cnt0, mclen + ldi rate, INITIAL_RATE_INBYTES + rcall PAD_OneZero + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + rcall Load_Reorder_Store_128_bits + rjmp add_domain + +add_domain: + mov domain_cnt, domain_cnt0 + rcall AddDomainCounter +gen_digest: + lds XH, SRAM_MESSAGE_OUT_ADDR + lds XL, SRAM_MESSAGE_OUT_ADDR + 1 + movw addr2, XL + rcall TAG + movw XL, addr2 + adiw XL, SQUEEZE_RATE_INBYTES + movw addr2, XL + rcall TAG + + POP_ALL +ret + +#endif \ No newline at end of file diff --git a/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate32v1/avr8_lowrom/photon.h b/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate32v1/avr8_lowrom/photon.h new file mode 100644 index 0000000..52b0ee3 --- /dev/null +++ b/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate32v1/avr8_lowrom/photon.h @@ -0,0 +1,345 @@ +; +; ********************************************** +; * PHOTON-Beetle * +; * Authenticated Encryption and Hash Family * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by PHOTON-Beetle Team * +; ********************************************** +; +#define ROUND_N 12 +#define DIM 8 + +.MACRO Store_OneRow + st X+, x0 + st X+, x1 + st X+, x2 + st X+, x3 +.ENDM + +.MACRO ROTL_1 i0 + bst \i0, 7 + lsl \i0 + bld \i0, 0 +.ENDM + +.MACRO ROTR_1 i0 + bst \i0, 0 + lsr \i0 + bld \i0, 7 +.ENDM + +.MACRO ROTR_4 i0 + swap \i0 +.ENDM + +ROTR_1_ROW: + ROTR_1 x0 + ROTR_1 x1 + ROTR_1 x2 + ROTR_1 x3 +ret + +ROTL_1_ROW: + ROTL_1 x0 + ROTL_1 x1 + ROTL_1 x2 + ROTL_1 x3 +ret + +ROTR_4_ROW: + ROTR_4 x0 + ROTR_4 x1 + ROTR_4 x2 + ROTR_4 x3 +ret + +RoundFunction: + + rjmp AddRC_Sbox_ShiftRow_Start + +ShiftRow_routine_table: + rjmp ShiftRow_RecoverZ_NoLPM + rjmp ShiftRow_1 + rjmp ShiftRow_2 + rjmp ShiftRow_3 + rjmp ShiftRow_4 + rjmp ShiftRow_5 + rjmp ShiftRow_6 + rjmp ShiftRow_7 + +ShiftRow_1: + rcall ROTR_1_ROW + rjmp ShiftRow_RecoverZ_LPM + +ShiftRow_2: + rcall ROTR_1_ROW + rcall ROTR_1_ROW + rjmp ShiftRow_RecoverZ_NoLPM + +ShiftRow_3: + rcall ROTR_4_ROW + rcall ROTL_1_ROW + rjmp ShiftRow_RecoverZ_LPM + +ShiftRow_4: + rcall ROTR_4_ROW + rjmp ShiftRow_RecoverZ_NoLPM + +ShiftRow_5: + rcall ROTR_4_ROW + rcall ROTR_1_ROW + rjmp ShiftRow_RecoverZ_LPM + +ShiftRow_6: + rcall ROTL_1_ROW + rcall ROTL_1_ROW + rjmp ShiftRow_RecoverZ_NoLPM + +ShiftRow_7: + rcall ROTL_1_ROW + rjmp ShiftRow_RecoverZ_NoLPM + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Start AddRC_Sbox_ShiftRow +AddRC_Sbox_ShiftRow_Start: + clr t3 + inc t3 + + ldi XL, lo8(SRAM_STATE) + ldi XH, hi8(SRAM_STATE) + + ldi YL, pm_lo8(ShiftRow_routine_table) + ldi YH, pm_hi8(ShiftRow_routine_table) + ldi rmp, DIM + + lpm t0, Z+ ; Load two nibbles of round constant for row 0, 1 +AddRC_Sbox_ShiftRow_Loop: + ; AddRC_TwoRows + ld x0, X+ + ld x1, X+ + ld x2, X+ + ld x3, X+ + sbiw XL, 4 + + ror t0 + brcc next1 + eor x0, t3 +next1: + ror t0 + brcc next2 + eor x1, t3 +next2: + ror t0 + brcc next3 + eor x2, t3 +next3: + ror t0 + brcc next4 + eor x3, t3 +next4: + ; Sbox_TwoRows + eor x1, x2 + mov t1, x2 + and t1, x1 + eor x3, t1 + mov t1, x3 + and x3, x1 + eor x3, x2 + mov t2, x3 + eor x3, x0 + com x3 + mov x2, x3 + or t2, x0 + eor x0, t1 + eor x1, x0 + or x2, x1 + eor x2, t1 + eor x1, t2 + eor x3, x1 + + movw cnt0, ZL + movw ZL, YL + ijmp + +ShiftRow_RecoverZ_NoLPM: + movw ZL, cnt0 + rjmp ShiftRow_STORE_ROW +ShiftRow_RecoverZ_LPM: + movw ZL, cnt0 + lpm t0, Z+ ; Load two nibbles of round constant for row 2i, 2i+1 +ShiftRow_STORE_ROW: + Store_OneRow + adiw YL, 1 + dec rmp + brne AddRC_Sbox_ShiftRow_Loop + +;;;;;;;;;;;;;;;;;;;;;;;; MixColumn Subroutnes + + rjmp MC_Start + +mul_routine_table: + rjmp mul2_GF16_0x13_xor + rjmp mul4_GF16_0x13_xor + rjmp mul2_GF16_0x13_xor + rjmp mulb_GF16_0x13_xor + rjmp mul2_GF16_0x13_xor + rjmp mul8_GF16_0x13_xor + rjmp mul5_GF16_0x13_xor + rjmp mul6_GF16_0x13_xor + +; For all mul2_GF16_0x13_xor: +; Input +; MSB........LSB +; x0=@0: x1=@1: x2=@2: x3=@3 +mul2_GF16_0x13_xor: + ; # define mul2_GF16_0x13 (x0 ,x1 ,x2 ,x3) do { \ + ; x3 = XOR (x3 ,x0); \ + ; } while (0) ; /* Output : ( MSB ) x1 ,x2 ,x3 , x0 ( LSB ) */ + eor t3, t0 + eor x0, t0 + eor x1, t3 + eor x2, t2 + eor x3, t1 + rjmp MC_INC_CNT1 + +mul4_GF16_0x13_xor: + ; # define mul4_GF16_0x13 (x0 ,x1 ,x2 ,x3) do { \ + ; x3 = XOR (x3 ,x0); x0 = XOR (x0 ,x1); \ + ; } while (0) ; /* Output : ( MSB ) x2 ,x3 ,x0 , x1 ( LSB ) */ + eor t3, t0 + eor t0, t1 + eor x0, t1 + eor x1, t0 + eor x2, t3 + eor x3, t2 + rjmp MC_INC_CNT1 + +mul5_GF16_0x13_xor: + ; # define mul5_GF16_0x13 (x0 ,x1 ,x2 ,x3) do { \ + ; x2 = XOR (x2 ,x0); x3 = XOR (x3 ,x1); \ + ; x1 = XOR (x1 ,x2); x0 = XOR (x0 ,x3); \ + ; } while (0) ; /* Output : ( MSB ) x2 ,x0 ,x1 , x3 ( LSB ) */ + eor t2, t0 + eor t3, t1 + eor t1, t2 + eor t0, t3 + eor x0, t3 + eor x1, t1 + eor x2, t0 + eor x3, t2 + rjmp MC_INC_CNT1 + +mul6_GF16_0x13_xor: + ; # define mul6_GF16_0x13 (x0 ,x1 ,x2 ,x3) do { \ + ; x3 = XOR (x3 ,x1); x1 = XOR (x1 ,x0); \ + ; x2 = XOR (x2 ,x1); x0 = XOR (x0 ,x2); \ + ; x2 = XOR (x2 ,x3); \ + ; } while (0) ; /* Output : ( MSB ) x0 ,x2 ,x3 , x1 ( LSB ) */ + eor t3, t1 + eor t1, t0 + eor t2, t1 + eor t0, t2 + eor t2, t3 + eor x0, t1 + eor x1, t3 + eor x2, t2 + eor x3, t0 + rjmp MC_STORE_ROW + +mul8_GF16_0x13_xor: + ; # define mul8_GF16_0x13 (x0 ,x1 ,x2 ,x3) do { \ + ; x3 = XOR (x3 ,x0); x0 = XOR (x0 ,x1); \ + ; x1 = XOR (x1 ,x2); \ + ; } while (0) ; /* Output : ( MSB ) x3 ,x0 ,x1 , x2 ( LSB ) */ + eor t3, t0 + eor t0, t1 + eor t1, t2 + eor x0, t2 + eor x1, t1 + eor x2, t0 + eor x3, t3 + rjmp MC_INC_CNT1 + +mulb_GF16_0x13_xor: + ; # define mul11_GF16_0x13 (x0 ,x1 ,x2 ,x3) do { \ + ; x2 = XOR (x2 ,x0); x1 = XOR (x1 ,x3); \ + ; x0 = XOR (x0 ,x1); x3 = XOR (x3 ,x2); \ + ; } while (0) ; /* Output : ( MSB ) x1 ,x2 ,x0 , x3 ( LSB ) */ + eor t2, t0 + eor t1, t3 + eor t0, t1 + eor t3, t2 + eor x0, t3 + eor x1, t0 + eor x2, t2 + eor x3, t1 + rjmp MC_INC_CNT1 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Start MixColumns +MC_Start: + movw addr4, ZL + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + movw YL, XL + clr cnt0 + clr cnt1 +A1: + mov cnt1, cnt0 + clr x0 + clr x1 + clr x2 + clr x3 + ldi ZH, pm_hi8(mul_routine_table) + ldi ZL, pm_lo8(mul_routine_table) +MC_MUL_LOOP: + ld t3, X+ + ld t2, X+ + ld t1, X+ + ld t0, X+ + ijmp +MC_INC_CNT1: + inc cnt1 + cpi cnt1, DIM + brne MC_MUL_NEXT + clr cnt1 + movw XL, YL +MC_MUL_NEXT: + adiw ZL, 1 + rjmp MC_MUL_LOOP +MC_STORE_ROW: + cpi cnt0, 0 + brne MC_STORE_DIRECT + sbiw XL, STATE_INBYTES +MC_STORE_DIRECT: + Store_OneRow + + inc cnt0 + cpi cnt0, DIM + brne A1 + movw ZL, addr4 +ret + +PHOTON_Permutation: + ldi ZH, hi8(RC) + ldi ZL, lo8(RC) + ldi cnt2, ROUND_N +round_loop_start: + rcall RoundFunction + dec cnt2 + brne round_loop_start +ret + +.section .text +RC: +.byte 0x01,0x62,0xFE,0x9D +.byte 0x23,0x40,0xDC,0xBF +.byte 0x67,0x04,0x98,0xFB +.byte 0xFE,0x9D,0x01,0x62 +.byte 0xCD,0xAE,0x32,0x51 +.byte 0xAB,0xC8,0x54,0x37 +.byte 0x76,0x15,0x89,0xEA +.byte 0xDC,0xBF,0x23,0x40 +.byte 0x89,0xEA,0x76,0x15 +.byte 0x32,0x51,0xCD,0xAE +.byte 0x45,0x26,0xBA,0xD9 +.byte 0xBA,0xD9,0x45,0x26 diff --git a/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate32v1/avr8_speed/api.h b/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate32v1/avr8_speed/api.h new file mode 100644 index 0000000..4ceda96 --- /dev/null +++ b/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate32v1/avr8_speed/api.h @@ -0,0 +1,5 @@ +#define CRYPTO_KEYBYTES 16 +#define CRYPTO_NSECBYTES 0 +#define CRYPTO_NPUBBYTES 16 +#define CRYPTO_ABYTES 16 +#define CRYPTO_NOOVERLAP 1 diff --git a/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate32v1/avr8_speed/assist.h b/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate32v1/avr8_speed/assist.h new file mode 100644 index 0000000..fdf3c68 --- /dev/null +++ b/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate32v1/avr8_speed/assist.h @@ -0,0 +1,140 @@ +; +; ********************************************** +; * PHOTON-Beetle * +; * Authenticated Encryption and Hash Family * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by PHOTON-Beetle Team * +; ********************************************** +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Bitslice +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +.MACRO Reorder_8_bits i0, i1, i2, i3, i4 + ror \i0 + ror \i1 + ror \i0 + ror \i2 + ror \i0 + ror \i3 + ror \i0 + ror \i4 + ror \i0 + ror \i1 + ror \i0 + ror \i2 + ror \i0 + ror \i3 + ror \i0 + ror \i4 +.ENDM + +.MACRO InvReorder_8_bits i0, i1, i2, i3, i4 + ror \i1 + ror \i0 + ror \i2 + ror \i0 + ror \i3 + ror \i0 + ror \i4 + ror \i0 + ror \i1 + ror \i0 + ror \i2 + ror \i0 + ror \i3 + ror \i0 + ror \i4 + ror \i0 +.ENDM + +; require XH:XL be the address of the input +Load_Reorder_32_bits: + ldi cnt1, 4 +reorder_8_bits_loop: + ld rmp, X+ + Reorder_8_bits rmp, x0, x1, x2, x3 + dec cnt1 + brne reorder_8_bits_loop +ret + +; require YH:YL be the address of the output +invReorder_Store_32_bits: + ldi cnt1, 4 +invreorder_8_bits_loop: + InvReorder_8_bits rmp, x0, x1, x2, x3 + st Y+, rmp + dec cnt1 + brne invreorder_8_bits_loop +ret + +; require XH:XL be the address of the input +; require YH:YL be the address of the output +Load_Reorder_Store_128_bits: + ldi cnt0, 4 +reorder_32_bits_loop: + rcall Load_Reorder_32_bits + st Y+, x0 + st Y+, x1 + st Y+, x2 + st Y+, x3 + dec cnt0 + brne reorder_32_bits_loop +ret + +; require XH:XL be the address of the input +; require YH:YL be the address of the output +Load_invReorder_Store_128_bits: + ldi cnt0, 4 +invreorder_32_bits_loop: + ld x0, X+ + ld x1, X+ + ld x2, X+ + ld x3, X+ + rcall invReorder_Store_32_bits + dec cnt0 + brne invreorder_32_bits_loop +ret + +.macro PUSH_ALL +push r2 +push r3 +push r4 +push r5 +push r6 +push r7 +push r8 +push r9 +push r10 +push r11 +push r12 +push r13 +push r14 +push r15 +push r16 +push r17 +push r28 +push r29 +.endm + +.macro POP_ALL +pop r29 +pop r28 +pop r17 +pop r16 +pop r15 +pop r14 +pop r13 +pop r12 +pop r11 +pop r10 +pop r9 +pop r8 +pop r7 +pop r6 +pop r5 +pop r4 +pop r3 +pop r2 +clr r1 +.endm diff --git a/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate32v1/avr8_speed/crypto_aead.h b/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate32v1/avr8_speed/crypto_aead.h new file mode 100644 index 0000000..cd820d3 --- /dev/null +++ b/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate32v1/avr8_speed/crypto_aead.h @@ -0,0 +1,26 @@ +#ifdef __cplusplus +extern "C" { +#endif + +int crypto_aead_encrypt( + unsigned char *c,unsigned long long *clen, + const unsigned char *m,unsigned long long mlen, + const unsigned char *ad,unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k + ); + + +int crypto_aead_decrypt( + unsigned char *m,unsigned long long *outputmlen, + unsigned char *nsec, + const unsigned char *c,unsigned long long clen, + const unsigned char *ad,unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k + ); + +#ifdef __cplusplus +} +#endif diff --git a/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate32v1/avr8_speed/encrypt.c b/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate32v1/avr8_speed/encrypt.c new file mode 100644 index 0000000..31bc9c4 --- /dev/null +++ b/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate32v1/avr8_speed/encrypt.c @@ -0,0 +1,98 @@ +#include +#include +#include +#include +#include "api.h" + +extern void crypto_aead_encrypt_asm( + unsigned char *c, + const unsigned char *m, + unsigned char mlen, + const unsigned char *ad, + unsigned char adlen, + const unsigned char *npub, + const unsigned char *k + ); + +extern char crypto_aead_decrypt_asm( + unsigned char *m, + const unsigned char *c, + unsigned char clen, + const unsigned char *ad, + unsigned char adlen, + const unsigned char *npub, + const unsigned char *k + ); + +int crypto_aead_encrypt( + unsigned char *c, unsigned long long *clen, + const unsigned char *m, unsigned long long mlen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k + ) +{ + /* + ... + ... the code for the cipher implementation goes here, + ... generating a ciphertext c[0],c[1],...,c[*clen-1] + ... from a plaintext m[0],m[1],...,m[mlen-1] + ... and associated data ad[0],ad[1],...,ad[adlen-1] + ... and nonce npub[0],npub[1],.. + ... and secret key k[0],k[1],... + ... the implementation shall not use nsec + ... + ... return 0; + */ + + (void)nsec; + + crypto_aead_encrypt_asm(c, m, mlen, ad, adlen, npub, k); + + *clen = mlen + CRYPTO_ABYTES; + return 0; +} + + + +int crypto_aead_decrypt( + unsigned char *m, unsigned long long *mlen, + unsigned char *nsec, + const unsigned char *c, unsigned long long clen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k + ) +{ + /* + ... + ... the code for the AEAD implementation goes here, + ... generating a plaintext m[0],m[1],...,m[*mlen-1] + ... and secret message number nsec[0],nsec[1],... + ... from a ciphertext c[0],c[1],...,c[clen-1] + ... and associated data ad[0],ad[1],...,ad[adlen-1] + ... and nonce number npub[0],npub[1],... + ... and secret key k[0],k[1],... + ... + ... return 0; + */ + unsigned long long mlen_; + char tag_is_match; + + (void)nsec; + if (clen < CRYPTO_ABYTES) { + return -1; + } + mlen_ = clen - CRYPTO_ABYTES; + + tag_is_match = crypto_aead_decrypt_asm(m, c, mlen_, ad, adlen, npub, k); + + if (tag_is_match != 0) + { + memset(m, 0, (size_t)mlen_); + return -1; + } + *mlen = mlen_; + return 0; +} \ No newline at end of file diff --git a/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate32v1/avr8_speed/encrypt_core.S b/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate32v1/avr8_speed/encrypt_core.S new file mode 100644 index 0000000..e18201e --- /dev/null +++ b/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate32v1/avr8_speed/encrypt_core.S @@ -0,0 +1,734 @@ +; +; ********************************************** +; * PHOTON-Beetle * +; * Authenticated Encryption and Hash Family * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by PHOTON-Beetle Team * +; ********************************************** +; +#include "api.h" + +#define CRYPTO_AEAD + +#define STATE_INBITS 256 +#define STATE_INBYTES ((STATE_INBITS + 7) / 8) +#define RATE_INBITS 32 +#define RATE_INBYTES ((RATE_INBITS + 7) / 8) +#define RATE_INBYTES_MASK (RATE_INBYTES - 1) +#define TAG_MATCH 0 +#define TAG_UNMATCH -1 +#define OTHER_FAILURES -2 + + +; For CRYPTO_HASH +#define CRYPTO_BYTES 32 +#define INITIAL_RATE_INBITS 128 +#define INITIAL_RATE_INBYTES ((INITIAL_RATE_INBITS + 7) / 8) +#define HASH_RATE_INBITS 32 +#define HASH_RATE_INBYTES ((HASH_RATE_INBITS + 7) / 8) +#define HASH_RATE_INBYTES_MASK (HASH_RATE_INBYTES - 1) + +; +; ============================================ +; R E G I S T E R D E F I N I T I O N S +; ============================================ +; +; [Add all register names here, include info on +; all used registers without specific names] +; rmp: Multipurpose register +#define rmp r16 +#define rate r17 +#define mclen r18 +#define radlen r19 +#define adlen_org r0 + +#define cnt0 r20 +#define cnt1 r21 +#define cnt2 r22 + +#define SQUEEZE_RATE_INBITS 128 +#define SQUEEZE_RATE_INBYTES ((SQUEEZE_RATE_INBITS + 7) / 8) +#define SQUEEZE_RATE_MASK (SQUEEZE_RATE_INBYTES - 1) + +#define CAPACITY_INBITS (STATE_INBITS - RATE_INBITS) +#define CAPACITY_INBYTES ((CAPACITY_INBITS + 7) / 8) + +; For CRYPTO_AEAD +#define KEY_INBITS (CRYPTO_KEYBYTES * 8) +#define KEY_INBYTES (CRYPTO_KEYBYTES) + +#define NONCE_INBITS (CRYPTO_NPUBBYTES * 8) +#define NONCE_INBYTES (CRYPTO_NPUBBYTES) + +#define TAG_INBITS (CRYPTO_ABYTES * 8) +#define TAG_INBYTES (CRYPTO_ABYTES) + +#define t0 r8 +#define t1 r9 +#define t2 r10 +#define t3 r11 + +#define x0 r12 +#define x1 r13 +#define x2 r14 +#define x3 r15 + +#define ed r1 + +#define addr0 r2 +#define addr1 r3 +#define addr2 r4 +#define addr3 r5 +#define addr4 r6 +#define addr5 r7 + +; domain_cnt overlap with cnt0, only temporarily used, no need to back up +#define domain_cnt r20 +#define domain_cnt0 r23 +#define domain_cnt1 r24 + +.section .noinit + SRAM_STATE: .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + SRAM_MESSAGE_OUT_ADDR: .BYTE 0, 0 + SRAM_MESSAGE_IN_ADDR: .BYTE 0, 0 + SRAM_MESSAGE_IN_LEN: .BYTE 0, 0 +#ifdef CRYPTO_AEAD +; For CRYPTO_AEAD + SRAM_ASSOCIATED_DATA_ADDR: .BYTE 0, 0 + SRAM_ADLEN: .BYTE 0, 0 + SRAM_NONCE_ADDR: .BYTE 0, 0 + SRAM_KEY_ADDR: .BYTE 0, 0 + SRAM_ADDITIONAL: .BYTE 0, 0, 0, 0 + .BYTE 0, 0, 0, 0 + .BYTE 0, 0, 0, 0 + .BYTE 0, 0, 0, 0 +#endif + +; SRAM required additionally, besides those used for API + SRAM_PAD: .BYTE 0, 0, 0, 0 +#if ((defined(CRYPTO_AEAD) && (RATE_INBYTES > 4)) || defined(CRYPTO_HASH)) + .BYTE 0, 0, 0, 0 + .BYTE 0, 0, 0, 0 + .BYTE 0, 0, 0, 0 +#endif + + +.section .text + +#include "assist.h" +#include "photon.h" + +AddDomainCounter: + ldi YH, hi8(SRAM_STATE + STATE_INBYTES - 3) + ldi YL, lo8(SRAM_STATE + STATE_INBYTES - 3) + ldi rmp, 0x80 + ldi cnt1, 3 +check_domain_bit: + ror domain_cnt + brcc no_xor + ld x0, Y + eor x0, rmp + st Y, x0 +no_xor: + adiw YL, 1 + dec cnt1 + brne check_domain_bit +ret + +; require XH:XL be the address of the current associated data/message block +XOR_to_State: + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + mov cnt0, rate + dec cnt0 +XOR_to_State_loop: + rcall Load_Reorder_32_bits + ld rmp, Y + eor rmp, x0 + st Y+, rmp + ld rmp, Y + eor rmp, x1 + st Y+, rmp + ld rmp, Y + eor rmp, x2 + st Y+, rmp + ld rmp, Y + eor rmp, x3 + st Y+, rmp + subi cnt0, 4 + brsh XOR_to_State_loop +; XH:XL are now the address of the next associated data/message block if this is not the last block +ret + +; require XH:XL pointed to the source data to be padded +PAD_OneZero: + ldi YH, hi8(SRAM_PAD) + ldi YL, lo8(SRAM_PAD) + mov cnt1, rate +pad_copy: + ld rmp, X+ + st Y+, rmp + dec cnt1 + dec cnt0 + brne pad_copy +pad_one: + ldi rmp, 1 + st Y+, rmp + dec cnt1 + breq pad_end + clr rmp +pad_zero: + st Y+, rmp + dec cnt1 + brne pad_zero +pad_end: + ldi XH, hi8(SRAM_PAD) + ldi XL, lo8(SRAM_PAD) +; XH:XL are now pointed to last block needed to be processed +ret + +HASH: + movw addr0, XL +hash_block_loop: + rcall PHOTON_Permutation + movw XL, addr0 + cp rate, radlen + brsh hash_last_block + rcall XOR_to_State + movw addr0, XL + sub radlen, rate + rjmp hash_block_loop + +hash_last_block: + cp radlen, rate + breq hash_xor_domain + mov cnt0, radlen + rcall PAD_OneZero + +hash_xor_domain: + clr radlen + rcall XOR_to_State + mov domain_cnt, domain_cnt0 + rcall AddDomainCounter +ret + +TAG: + rcall PHOTON_Permutation + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + movw YL, addr2 + rcall Load_invReorder_Store_128_bits +ret + +#ifdef CRYPTO_AEAD +.IF (RATE_INBITS == 128) +XOR_to_Cipher: + mov t2, rate + cp t2, mclen + brlo XOR_to_Cipher_Start + mov t2, mclen ; backup the real length of the remaining message + +XOR_to_Cipher_Start: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + ldi YH, hi8(SRAM_ADDITIONAL) + ldi YL, lo8(SRAM_ADDITIONAL) + rcall Load_invReorder_Store_128_bits ; State move to additional SRAM and reorder + + movw XL, addr0 + movw ZL, addr2 + + ; XOR Part 2 + sbiw YL, (RATE_INBYTES>>1) ; Pointed to Part 2 + ldi cnt0, (RATE_INBYTES>>1) + cp cnt0, mclen + brlo XOR_Part2_Store_Cipher_begin + mov cnt0, mclen +XOR_Part2_Store_Cipher_begin: + sub mclen, cnt0 +XOR_Part2_Store_Cipher_loop: + ld t0, Y+ + ld x0, X+ + eor x0, t0 + st Z+, x0 + dec cnt0 + brne XOR_Part2_Store_Cipher_loop + + cpi mclen, 1 + brlo XOR_to_Cipher_END + + ; XOR (Part 1 >>> 1) + ldi cnt0, (RATE_INBYTES>>1) + cp cnt0, mclen + brlo XOR_Part1_Store_Cipher_begin + mov cnt0, mclen +XOR_Part1_Store_Cipher_begin: + sub mclen, cnt0 + ldi YH, hi8(SRAM_ADDITIONAL) + ldi YL, lo8(SRAM_ADDITIONAL) + ld t0, Y + bst t0, 0 + adiw YL, (RATE_INBYTES>>1)-1 + ld t0, Y + ror t0 + bld t0, 7 + st Y, t0 + ldi cnt1, (RATE_INBYTES>>1)-1 +ROR_part1_loop: + ld t0, -Y + ror t0 + st Y, t0 + dec cnt1 + brne ROR_part1_loop + +XOR_Part1_Store_Cipher_loop: + ld t0, Y+ + ld x0, X+ + eor x0, t0 + st Z+, x0 + dec cnt0 + brne XOR_Part1_Store_Cipher_loop + +XOR_to_Cipher_END: + tst ed + brne XOR_to_Cipher_dec + +XOR_to_Cipher_enc: + movw XL, addr0 + cp t2, rate + brsh XOR_to_Cipher_XOR_to_State + mov cnt0, t2 + rcall PAD_OneZero + rjmp XOR_to_Cipher_XOR_to_State + +XOR_to_Cipher_dec: + movw XL, addr2 + cp t2, rate + brsh XOR_to_Cipher_XOR_to_State + ; need to be padded + mov cnt0, t2 + rcall PAD_OneZero + +XOR_to_Cipher_XOR_to_State: + rcall XOR_to_State + + clr rmp + add addr0, t2 + adc addr1, rmp + add addr2, t2 + adc addr3, rmp +ret +.ELSE +; RATE_INBITS == 32 +XOR_to_Cipher: + mov t2, rate + cp t2, mclen + brlo XOR_to_Cipher_Start + mov t2, mclen ; backup the real length of the remaining message + +XOR_to_Cipher_Start: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + ld x0, X+ + ld x1, X+ + ld x2, X+ + ld x3, X+ + ldi YH, hi8(SRAM_ADDITIONAL) + ldi YL, lo8(SRAM_ADDITIONAL) + rcall invReorder_Store_32_bits + + movw XL, addr0 + movw ZL, addr2 + + ; XOR Part 2 + sbiw YL, (RATE_INBYTES>>1) ; Pointed to Part 2 + ldi cnt0, (RATE_INBYTES>>1) + cp cnt0, mclen + brlo XOR_Part2_Store_Cipher_begin + mov cnt0, mclen +XOR_Part2_Store_Cipher_begin: + sub mclen, cnt0 +XOR_Part2_Store_Cipher_loop: + ld t0, Y+ + ld x0, X+ + eor x0, t0 + st Z+, x0 + dec cnt0 + brne XOR_Part2_Store_Cipher_loop + + cpi mclen, 1 + brlo XOR_to_Cipher_END + + ; XOR (Part 1 >>> 1) + ldi cnt0, (RATE_INBYTES>>1) + cp cnt0, mclen + brlo XOR_Part1_Store_Cipher_begin + mov cnt0, mclen +XOR_Part1_Store_Cipher_begin: + sub mclen, cnt0 + ldi YH, hi8(SRAM_ADDITIONAL) + ldi YL, lo8(SRAM_ADDITIONAL) + ld t0, Y+ + ld t1, Y+ + bst t0, 0 + ror t1 + ror t0 + bld t1, 7 + + ld x0, X+ + eor x0, t0 + st Z+, x0 + dec cnt0 + breq XOR_to_Cipher_END + ld x0, X+ + eor x0, t1 + st Z+, x0 + +XOR_to_Cipher_END: + tst ed + brne XOR_to_Cipher_dec + +XOR_to_Cipher_enc: + movw XL, addr0 + cp t2, rate + brsh XOR_to_Cipher_XOR_to_State + mov cnt0, t2 + rcall PAD_OneZero + rjmp XOR_to_Cipher_XOR_to_State + +XOR_to_Cipher_dec: + movw XL, addr2 + cp t2, rate + brsh XOR_to_Cipher_XOR_to_State + ; need to be padded + mov cnt0, t2 + rcall PAD_OneZero + +XOR_to_Cipher_XOR_to_State: + rcall XOR_to_State + + clr rmp + add addr0, t2 + adc addr1, rmp + add addr2, t2 + adc addr3, rmp +ret +.ENDIF + +ENC: + lds ZH, SRAM_MESSAGE_OUT_ADDR + lds ZL, SRAM_MESSAGE_OUT_ADDR + 1 + lds XH, SRAM_MESSAGE_IN_ADDR + lds XL, SRAM_MESSAGE_IN_ADDR + 1 + + movw addr0, XL + movw addr2, ZL + +enc_block_loop: + rcall PHOTON_Permutation + rcall XOR_to_Cipher + cpi mclen, 1 + brsh enc_block_loop + + mov domain_cnt, domain_cnt1 + rcall AddDomainCounter +ret + +AUTH_AND_ENCDEC: + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + + lds XH, SRAM_NONCE_ADDR + lds XL, SRAM_NONCE_ADDR + 1 + rcall Load_Reorder_Store_128_bits + lds XH, SRAM_KEY_ADDR + lds XL, SRAM_KEY_ADDR + 1 + rcall Load_Reorder_Store_128_bits + + ldi domain_cnt0, 1 + ldi domain_cnt1, 1 + +test_adlen_zero: + tst radlen + breq adlen_zero_test_mlen_zero + + ; radlen != 0 +adlen_nzero_test_mlen_zero: + tst mclen + brne test_adlen_divisible + ldi domain_cnt0, 3 +test_adlen_divisible: + mov rmp, radlen + andi rmp, RATE_INBYTES_MASK + breq hash_ad + inc domain_cnt0 ; 2 or 4 +hash_ad: + lds XH, SRAM_ASSOCIATED_DATA_ADDR + lds XL, SRAM_ASSOCIATED_DATA_ADDR + 1 + rcall HASH + tst mclen + breq mlen_zero_inputout_address + rjmp test_mlen_divisible + +adlen_zero_test_mlen_zero: + ldi domain_cnt1, 5 + tst mclen + breq adlen_zero_mlen_zero + + ; mclen != 0 +test_mlen_divisible: + mov rmp, mclen + andi rmp, RATE_INBYTES_MASK + breq enc_dec_m + inc domain_cnt1 ; 2 or 6 +enc_dec_m: + rcall ENC + rjmp AUTH_AND_ENCDEC_end + +adlen_zero_mlen_zero: + ; empty message and empty associated data + ldi YH, hi8(SRAM_STATE + STATE_INBYTES - 3) + ldi YL, lo8(SRAM_STATE + STATE_INBYTES - 3) + ld x0, Y + ldi rmp, 0x80 + eor x0, rmp + st Y, x0 + +mlen_zero_inputout_address: + tst ed + brne dec_inputout_address +enc_inputout_address: + lds ZH, SRAM_MESSAGE_OUT_ADDR + lds ZL, SRAM_MESSAGE_OUT_ADDR + 1 + movw addr2, ZL + rjmp AUTH_AND_ENCDEC_end +dec_inputout_address: + lds ZH, SRAM_MESSAGE_IN_ADDR + lds ZL, SRAM_MESSAGE_IN_ADDR + 1 + movw addr0, ZL + +AUTH_AND_ENCDEC_end: +ret + + +; void crypto_aead_encrypt_asm( +; unsigned char *c, +; const unsigned char *m, +; unsigned long long mlen, +; const unsigned char *ad, +; unsigned long long radlen, +; const unsigned char *npub, +; const unsigned char *k +; ) +; +; unsigned char *c, is passed in r24:r25 +; const unsigned char *m, is passed in r22:r23 +; unsigned long long mlen, is passed in r20:r21, only LSB (r20) is used +; const unsigned char *ad, is passed in r18:r19 +; unsigned long long radlen, is passed in r16:r17, only LSB (r16) is used +; const unsigned char *npub, is passed in r14:r15 +; const unsigned char *k is passed in r12:r13 +.global crypto_aead_encrypt_asm +crypto_aead_encrypt_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store cipher address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store message address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store message length in SRAM_MESSAGE_IN_LEN + st X+, r20 + st X+, r19 ;store associated data address in SRAM_ASSOCIATED_DATA_ADDR + st X+, r18 + st X+, r17 ;store associated data length in SRAM_ADLEN + st X+, r16 + st X+, r15 ;store nonce address in SRAM_NONCE_ADDR + st X+, r14 + st X+, r13 ;store key address in SRAM_KEY_ADDR + st X+, r12 + mov mclen, r20 + mov radlen, r16 + + ldi rate, RATE_INBYTES + clr ed + + rcall AUTH_AND_ENCDEC + rcall TAG + + POP_ALL +ret + +; int crypto_aead_decrypt_asm( +; unsigned char *m, +; const unsigned char *c, +; unsigned long long clen, +; const unsigned char *ad, +; unsigned long long radlen, +; const unsigned char *npub, +; const unsigned char *k +; ) +; +; unsigned char *m, is passed in r24:r25 +; const unsigned char *c, is passed in r22:r23 +; unsigned long long clen, is passed in r20:r21, only LSB (r20) is used +; const unsigned char *ad, is passed in r18:r19 +; unsigned long long radlen, is passed in r16:r17, only LSB (r16) is used +; const unsigned char *npub, is passed in r14:r15 +; const unsigned char *k is passed in r12:r13 +.global crypto_aead_decrypt_asm +crypto_aead_decrypt_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store message address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store cipher address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store cipher length in SRAM_MESSAGE_IN_LEN + st X+, r20 + st X+, r19 ;store associated data address in SRAM_ASSOCIATED_DATA_ADDR + st X+, r18 + st X+, r17 ;store associated data length in SRAM_ADLEN + st X+, r16 + st X+, r15 ;store nonce address in SRAM_NONCE_ADDR + st X+, r14 + st X+, r13 ;store key address in SRAM_KEY_ADDR + st X+, r12 + mov mclen, r20 + mov radlen, r16 + + ldi rate, RATE_INBYTES + clr ed + inc ed + + rcall AUTH_AND_ENCDEC + + ldi YH, hi8(SRAM_ADDITIONAL) + ldi YL, lo8(SRAM_ADDITIONAL) + movw addr2, YL + rcall TAG + + sbiw YL, CRYPTO_ABYTES + movw XL, addr0 + + ldi cnt0, CRYPTO_ABYTES +compare_tag: + ld t0, Y+ + ld x0, X+ + cp t0, x0 + brne return_tag_not_match + dec cnt0 + brne compare_tag + rjmp return_tag_match + +return_tag_not_match: + ldi r25, 0xFF + ldi r24, 0xFF + rjmp crypto_aead_decrypt_end +return_tag_match: + clr r25 + clr r24 + +crypto_aead_decrypt_end: + POP_ALL +ret + +; #ifdef CRYPTO_AEAD +#endif + +#ifdef CRYPTO_HASH +; void crypto_hash_asm( +; unsigned char *out, +; const unsigned char *in, +; unsigned long long inlen +; ) +; +; unsigned char *out, is passed in r24:r25 +; const unsigned char *in, is passed in r22:r23 +; unsigned long long inlen, is passed in r20:r21, only LSB (r20) is used +.global crypto_hash_asm +crypto_hash_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store message address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store cipher address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store cipher length in SRAM_MESSAGE_IN_LEN + st X+, r20 + mov mclen, r20 + + ; empty half state + ldi YH, hi8(SRAM_STATE + INITIAL_RATE_INBYTES) + ldi YL, lo8(SRAM_STATE + INITIAL_RATE_INBYTES) + clr rmp + ldi cnt1, (STATE_INBYTES - INITIAL_RATE_INBYTES) +zero_state: + st Y+, rmp + dec cnt1 + brne zero_state + + ldi domain_cnt0, 1 + sbiw YL, (STATE_INBYTES - INITIAL_RATE_INBYTES) + lds XH, SRAM_MESSAGE_IN_ADDR + lds XL, SRAM_MESSAGE_IN_ADDR + 1 + + tst mclen + breq add_domain + +test_mlen_initrate: + ; mclen != 0 + cpi mclen, INITIAL_RATE_INBYTES + brlo less_than_initial_rate + breq equal_to_initial_rate + +more_than_initial_rate: + rcall Load_Reorder_Store_128_bits + ldi rate, HASH_RATE_INBYTES + mov radlen, mclen + subi radlen, INITIAL_RATE_INBYTES + mov rmp, radlen + andi rmp, HASH_RATE_INBYTES_MASK + breq hash_message + inc domain_cnt0 +hash_message: + rcall HASH + rjmp gen_digest + +equal_to_initial_rate: + inc domain_cnt0 + rcall Load_Reorder_Store_128_bits + rjmp add_domain + +less_than_initial_rate: + mov cnt0, mclen + ldi rate, INITIAL_RATE_INBYTES + rcall PAD_OneZero + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + rcall Load_Reorder_Store_128_bits + rjmp add_domain + +add_domain: + mov domain_cnt, domain_cnt0 + rcall AddDomainCounter +gen_digest: + lds XH, SRAM_MESSAGE_OUT_ADDR + lds XL, SRAM_MESSAGE_OUT_ADDR + 1 + movw addr2, XL + rcall TAG + movw XL, addr2 + adiw XL, SQUEEZE_RATE_INBYTES + movw addr2, XL + rcall TAG + + POP_ALL +ret + +#endif \ No newline at end of file diff --git a/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate32v1/avr8_speed/photon.h b/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate32v1/avr8_speed/photon.h new file mode 100644 index 0000000..d764e16 --- /dev/null +++ b/photon-beetle/Implementations/crypto_aead/photonbeetleaead128rate32v1/avr8_speed/photon.h @@ -0,0 +1,714 @@ +; +; ********************************************** +; * PHOTON-Beetle * +; * Authenticated Encryption and Hash Family * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.1 2020 by PHOTON-Beetle Team * +; ********************************************** +; +#define ROUND_N 12 +#define DIM 8 + +.MACRO Store_OneRow + st X+, x0 + st X+, x1 + st X+, x2 + st X+, x3 +.ENDM + +.MACRO ROTL_1 i0 + bst \i0, 7 + lsl \i0 + bld \i0, 0 +.ENDM + +.MACRO ROTR_1 i0 + bst \i0, 0 + lsr \i0 + bld \i0, 7 +.ENDM + +.MACRO ROTR_4 i0 + swap \i0 +.ENDM + +.MACRO ROTR_1_ROW + ROTR_1 x0 + ROTR_1 x1 + ROTR_1 x2 + ROTR_1 x3 +.ENDM + +.MACRO ROTL_1_ROW + ROTL_1 x0 + ROTL_1 x1 + ROTL_1 x2 + ROTL_1 x3 +.ENDM + +.MACRO ROTR_4_ROW + ROTR_4 x0 + ROTR_4 x1 + ROTR_4 x2 + ROTR_4 x3 +.ENDM + + +; For all mul2_GF16_0x13_xor: +; Input +; MSB........LSB +; x0=@0: x1=@1: x2=@2: x3=@3 + ; # define mul2_GF16_0x13 (x0 ,x1 ,x2 ,x3) do { \ + ; x3 = XOR (x3 ,x0); \ + ; } while (0) ; /* Output : ( MSB ) x1 ,x2 ,x3 , x0 ( LSB ) */ +.MACRO mul2_GF16_0x13_xor + ld t3, X+ + ld t2, X+ + ld t1, X+ + ld t0, X+ + eor t3, t0 + eor x0, t0 + eor x1, t3 + eor x2, t2 + eor x3, t1 +.ENDM + + ; # define mul4_GF16_0x13 (x0 ,x1 ,x2 ,x3) do { \ + ; x3 = XOR (x3 ,x0); x0 = XOR (x0 ,x1); \ + ; } while (0) ; /* Output : ( MSB ) x2 ,x3 ,x0 , x1 ( LSB ) */ +.MACRO mul4_GF16_0x13_xor + ld t3, X+ + ld t2, X+ + ld t1, X+ + ld t0, X+ + eor t3, t0 + eor t0, t1 + eor x0, t1 + eor x1, t0 + eor x2, t3 + eor x3, t2 +.ENDM + + ; # define mul5_GF16_0x13 (x0 ,x1 ,x2 ,x3) do { \ + ; x2 = XOR (x2 ,x0); x3 = XOR (x3 ,x1); \ + ; x1 = XOR (x1 ,x2); x0 = XOR (x0 ,x3); \ + ; } while (0) ; /* Output : ( MSB ) x2 ,x0 ,x1 , x3 ( LSB ) */ +.MACRO mul5_GF16_0x13_xor + ld t3, X+ + ld t2, X+ + ld t1, X+ + ld t0, X+ + eor t2, t0 + eor t3, t1 + eor t1, t2 + eor t0, t3 + eor x0, t3 + eor x1, t1 + eor x2, t0 + eor x3, t2 +.ENDM + + ; # define mul6_GF16_0x13 (x0 ,x1 ,x2 ,x3) do { \ + ; x3 = XOR (x3 ,x1); x1 = XOR (x1 ,x0); \ + ; x2 = XOR (x2 ,x1); x0 = XOR (x0 ,x2); \ + ; x2 = XOR (x2 ,x3); \ + ; } while (0) ; /* Output : ( MSB ) x0 ,x2 ,x3 , x1 ( LSB ) */ +.MACRO mul6_GF16_0x13_xor + ld t3, X+ + ld t2, X+ + ld t1, X+ + ld t0, X+ + eor t3, t1 + eor t1, t0 + eor t2, t1 + eor t0, t2 + eor t2, t3 + eor x0, t1 + eor x1, t3 + eor x2, t2 + eor x3, t0 +.ENDM + + ; # define mul8_GF16_0x13 (x0 ,x1 ,x2 ,x3) do { \ + ; x3 = XOR (x3 ,x0); x0 = XOR (x0 ,x1); \ + ; x1 = XOR (x1 ,x2); \ + ; } while (0) ; /* Output : ( MSB ) x3 ,x0 ,x1 , x2 ( LSB ) */ +.MACRO mul8_GF16_0x13_xor + ld t3, X+ + ld t2, X+ + ld t1, X+ + ld t0, X+ + eor t3, t0 + eor t0, t1 + eor t1, t2 + eor x0, t2 + eor x1, t1 + eor x2, t0 + eor x3, t3 +.ENDM + + ; # define mul11_GF16_0x13 (x0 ,x1 ,x2 ,x3) do { \ + ; x2 = XOR (x2 ,x0); x1 = XOR (x1 ,x3); \ + ; x0 = XOR (x0 ,x1); x3 = XOR (x3 ,x2); \ + ; } while (0) ; /* Output : ( MSB ) x1 ,x2 ,x0 , x3 ( LSB ) */ +.MACRO mulb_GF16_0x13_xor + ld t3, X+ + ld t2, X+ + ld t1, X+ + ld t0, X+ + eor t2, t0 + eor t1, t3 + eor t0, t1 + eor t3, t2 + eor x0, t3 + eor x1, t0 + eor x2, t2 + eor x3, t1 +.ENDM + + +.MACRO RoundFunction +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Start AddRC_Sbox_ShiftRow +AddRC_Sbox_ShiftRow_Start: + clr t3 + inc t3 + + ldi XL, lo8(SRAM_STATE) + ldi XH, hi8(SRAM_STATE) + + lpm t0, Z+ ; Load two nibbles of round constant for row 0, 1 + ; AddRC_TwoRows + ld x0, X+ + ld x1, X+ + ld x2, X+ + ld x3, X+ + sbiw XL, 4 + + ror t0 + brcc row0_next1 + eor x0, t3 +row0_next1: + ror t0 + brcc row0_next2 + eor x1, t3 +row0_next2: + ror t0 + brcc row0_next3 + eor x2, t3 +row0_next3: + ror t0 + brcc row0_next4 + eor x3, t3 +row0_next4: + ; Sbox_TwoRows + eor x1, x2 + mov t1, x2 + and t1, x1 + eor x3, t1 + mov t1, x3 + and x3, x1 + eor x3, x2 + mov t2, x3 + eor x3, x0 + com x3 + mov x2, x3 + or t2, x0 + eor x0, t1 + eor x1, x0 + or x2, x1 + eor x2, t1 + eor x1, t2 + eor x3, x1 + Store_OneRow + + ; AddRC_TwoRows + ld x0, X+ + ld x1, X+ + ld x2, X+ + ld x3, X+ + sbiw XL, 4 + + ror t0 + brcc row1_next1 + eor x0, t3 +row1_next1: + ror t0 + brcc row1_next2 + eor x1, t3 +row1_next2: + ror t0 + brcc row1_next3 + eor x2, t3 +row1_next3: + ror t0 + brcc row1_next4 + eor x3, t3 +row1_next4: + ; Sbox_TwoRows + eor x1, x2 + mov t1, x2 + and t1, x1 + eor x3, t1 + mov t1, x3 + and x3, x1 + eor x3, x2 + mov t2, x3 + eor x3, x0 + com x3 + mov x2, x3 + or t2, x0 + eor x0, t1 + eor x1, x0 + or x2, x1 + eor x2, t1 + eor x1, t2 + eor x3, x1 + + ROTR_1_ROW + Store_OneRow + + lpm t0, Z+ ; Load two nibbles of round constant for row 2i, 2i+1 + ; AddRC_TwoRows + ld x0, X+ + ld x1, X+ + ld x2, X+ + ld x3, X+ + sbiw XL, 4 + + ror t0 + brcc row2_next1 + eor x0, t3 +row2_next1: + ror t0 + brcc row2_next2 + eor x1, t3 +row2_next2: + ror t0 + brcc row2_next3 + eor x2, t3 +row2_next3: + ror t0 + brcc row2_next4 + eor x3, t3 +row2_next4: + ; Sbox_TwoRows + eor x1, x2 + mov t1, x2 + and t1, x1 + eor x3, t1 + mov t1, x3 + and x3, x1 + eor x3, x2 + mov t2, x3 + eor x3, x0 + com x3 + mov x2, x3 + or t2, x0 + eor x0, t1 + eor x1, x0 + or x2, x1 + eor x2, t1 + eor x1, t2 + eor x3, x1 + + ROTR_1_ROW + ROTR_1_ROW + Store_OneRow + + ; AddRC_TwoRows + ld x0, X+ + ld x1, X+ + ld x2, X+ + ld x3, X+ + sbiw XL, 4 + + ror t0 + brcc row3_next1 + eor x0, t3 +row3_next1: + ror t0 + brcc row3_next2 + eor x1, t3 +row3_next2: + ror t0 + brcc row3_next3 + eor x2, t3 +row3_next3: + ror t0 + brcc row3_next4 + eor x3, t3 +row3_next4: + ; Sbox_TwoRows + eor x1, x2 + mov t1, x2 + and t1, x1 + eor x3, t1 + mov t1, x3 + and x3, x1 + eor x3, x2 + mov t2, x3 + eor x3, x0 + com x3 + mov x2, x3 + or t2, x0 + eor x0, t1 + eor x1, x0 + or x2, x1 + eor x2, t1 + eor x1, t2 + eor x3, x1 + + ROTR_4_ROW + ROTL_1_ROW + Store_OneRow + + lpm t0, Z+ ; Load two nibbles of round constant for row 2i, 2i+1 + ; AddRC_TwoRows + ld x0, X+ + ld x1, X+ + ld x2, X+ + ld x3, X+ + sbiw XL, 4 + + ror t0 + brcc row4_next1 + eor x0, t3 +row4_next1: + ror t0 + brcc row4_next2 + eor x1, t3 +row4_next2: + ror t0 + brcc row4_next3 + eor x2, t3 +row4_next3: + ror t0 + brcc row4_next4 + eor x3, t3 +row4_next4: + ; Sbox_TwoRows + eor x1, x2 + mov t1, x2 + and t1, x1 + eor x3, t1 + mov t1, x3 + and x3, x1 + eor x3, x2 + mov t2, x3 + eor x3, x0 + com x3 + mov x2, x3 + or t2, x0 + eor x0, t1 + eor x1, x0 + or x2, x1 + eor x2, t1 + eor x1, t2 + eor x3, x1 + + ROTR_4_ROW + Store_OneRow + + ; AddRC_TwoRows + ld x0, X+ + ld x1, X+ + ld x2, X+ + ld x3, X+ + sbiw XL, 4 + + ror t0 + brcc row5_next1 + eor x0, t3 +row5_next1: + ror t0 + brcc row5_next2 + eor x1, t3 +row5_next2: + ror t0 + brcc row5_next3 + eor x2, t3 +row5_next3: + ror t0 + brcc row5_next4 + eor x3, t3 +row5_next4: + ; Sbox_TwoRows + eor x1, x2 + mov t1, x2 + and t1, x1 + eor x3, t1 + mov t1, x3 + and x3, x1 + eor x3, x2 + mov t2, x3 + eor x3, x0 + com x3 + mov x2, x3 + or t2, x0 + eor x0, t1 + eor x1, x0 + or x2, x1 + eor x2, t1 + eor x1, t2 + eor x3, x1 + + ROTR_4_ROW + ROTR_1_ROW + Store_OneRow + + lpm t0, Z+ ; Load two nibbles of round constant for row 2i, 2i+1 + ; AddRC_TwoRows + ld x0, X+ + ld x1, X+ + ld x2, X+ + ld x3, X+ + sbiw XL, 4 + + ror t0 + brcc row6_next1 + eor x0, t3 +row6_next1: + ror t0 + brcc row6_next2 + eor x1, t3 +row6_next2: + ror t0 + brcc row6_next3 + eor x2, t3 +row6_next3: + ror t0 + brcc row6_next4 + eor x3, t3 +row6_next4: + ; Sbox_TwoRows + eor x1, x2 + mov t1, x2 + and t1, x1 + eor x3, t1 + mov t1, x3 + and x3, x1 + eor x3, x2 + mov t2, x3 + eor x3, x0 + com x3 + mov x2, x3 + or t2, x0 + eor x0, t1 + eor x1, x0 + or x2, x1 + eor x2, t1 + eor x1, t2 + eor x3, x1 + + ROTL_1_ROW + ROTL_1_ROW + Store_OneRow + + ; AddRC_TwoRows + ld x0, X+ + ld x1, X+ + ld x2, X+ + ld x3, X+ + sbiw XL, 4 + + ror t0 + brcc row7_next1 + eor x0, t3 +row7_next1: + ror t0 + brcc row7_next2 + eor x1, t3 +row7_next2: + ror t0 + brcc row7_next3 + eor x2, t3 +row7_next3: + ror t0 + brcc row7_next4 + eor x3, t3 +row7_next4: + ; Sbox_TwoRows + eor x1, x2 + mov t1, x2 + and t1, x1 + eor x3, t1 + mov t1, x3 + and x3, x1 + eor x3, x2 + mov t2, x3 + eor x3, x0 + com x3 + mov x2, x3 + or t2, x0 + eor x0, t1 + eor x1, x0 + or x2, x1 + eor x2, t1 + eor x1, t2 + eor x3, x1 + + ROTL_1_ROW + Store_OneRow + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Start MixColumns +MC_Start: + + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + movw YL, XL +A0: + clr x0 + clr x1 + clr x2 + clr x3 + mul2_GF16_0x13_xor + mul4_GF16_0x13_xor + mul2_GF16_0x13_xor + mulb_GF16_0x13_xor + mul2_GF16_0x13_xor + mul8_GF16_0x13_xor + mul5_GF16_0x13_xor + mul6_GF16_0x13_xor + movw XL, YL + Store_OneRow + +A1: + clr x0 + clr x1 + clr x2 + clr x3 + mul2_GF16_0x13_xor + mul4_GF16_0x13_xor + mul2_GF16_0x13_xor + mulb_GF16_0x13_xor + mul2_GF16_0x13_xor + mul8_GF16_0x13_xor + mul5_GF16_0x13_xor + movw XL, YL + mul6_GF16_0x13_xor + Store_OneRow + +A2: + clr x0 + clr x1 + clr x2 + clr x3 + mul2_GF16_0x13_xor + mul4_GF16_0x13_xor + mul2_GF16_0x13_xor + mulb_GF16_0x13_xor + mul2_GF16_0x13_xor + mul8_GF16_0x13_xor + movw XL, YL + mul5_GF16_0x13_xor + mul6_GF16_0x13_xor + Store_OneRow + +A3: + clr x0 + clr x1 + clr x2 + clr x3 + mul2_GF16_0x13_xor + mul4_GF16_0x13_xor + mul2_GF16_0x13_xor + mulb_GF16_0x13_xor + mul2_GF16_0x13_xor + movw XL, YL + mul8_GF16_0x13_xor + mul5_GF16_0x13_xor + mul6_GF16_0x13_xor + Store_OneRow + +A4: + clr x0 + clr x1 + clr x2 + clr x3 + mul2_GF16_0x13_xor + mul4_GF16_0x13_xor + mul2_GF16_0x13_xor + mulb_GF16_0x13_xor + movw XL, YL + mul2_GF16_0x13_xor + mul8_GF16_0x13_xor + mul5_GF16_0x13_xor + mul6_GF16_0x13_xor + Store_OneRow + +A5: + clr x0 + clr x1 + clr x2 + clr x3 + mul2_GF16_0x13_xor + mul4_GF16_0x13_xor + mul2_GF16_0x13_xor + movw XL, YL + mulb_GF16_0x13_xor + mul2_GF16_0x13_xor + mul8_GF16_0x13_xor + mul5_GF16_0x13_xor + mul6_GF16_0x13_xor + Store_OneRow + +A6: + clr x0 + clr x1 + clr x2 + clr x3 + mul2_GF16_0x13_xor + mul4_GF16_0x13_xor + movw XL, YL + mul2_GF16_0x13_xor + mulb_GF16_0x13_xor + mul2_GF16_0x13_xor + mul8_GF16_0x13_xor + mul5_GF16_0x13_xor + mul6_GF16_0x13_xor + Store_OneRow + +A7: + clr x0 + clr x1 + clr x2 + clr x3 + mul2_GF16_0x13_xor + movw XL, YL + mul4_GF16_0x13_xor + mul2_GF16_0x13_xor + mulb_GF16_0x13_xor + mul2_GF16_0x13_xor + mul8_GF16_0x13_xor + mul5_GF16_0x13_xor + mul6_GF16_0x13_xor + Store_OneRow +.ENDM + +PHOTON_Permutation: + ldi ZH, hi8(RC) + ldi ZL, lo8(RC) + ldi cnt2, ROUND_N +round_loop_start: + RoundFunction + dec cnt2 + breq round_loop_end + jmp round_loop_start +round_loop_end: +ret + +.section .text +RC: +.byte 0x01,0x62,0xFE,0x9D +.byte 0x23,0x40,0xDC,0xBF +.byte 0x67,0x04,0x98,0xFB +.byte 0xFE,0x9D,0x01,0x62 +.byte 0xCD,0xAE,0x32,0x51 +.byte 0xAB,0xC8,0x54,0x37 +.byte 0x76,0x15,0x89,0xEA +.byte 0xDC,0xBF,0x23,0x40 +.byte 0x89,0xEA,0x76,0x15 +.byte 0x32,0x51,0xCD,0xAE +.byte 0x45,0x26,0xBA,0xD9 +.byte 0xBA,0xD9,0x45,0x26 diff --git a/photon-beetle/Implementations/crypto_hash/photonbeetlehash256rate32v1/avr8_lowrom/api.h b/photon-beetle/Implementations/crypto_hash/photonbeetlehash256rate32v1/avr8_lowrom/api.h new file mode 100644 index 0000000..cb530c7 --- /dev/null +++ b/photon-beetle/Implementations/crypto_hash/photonbeetlehash256rate32v1/avr8_lowrom/api.h @@ -0,0 +1 @@ +#define CRYPTO_BYTES 32 \ No newline at end of file diff --git a/photon-beetle/Implementations/crypto_hash/photonbeetlehash256rate32v1/avr8_lowrom/assist.h b/photon-beetle/Implementations/crypto_hash/photonbeetlehash256rate32v1/avr8_lowrom/assist.h new file mode 100644 index 0000000..fdf3c68 --- /dev/null +++ b/photon-beetle/Implementations/crypto_hash/photonbeetlehash256rate32v1/avr8_lowrom/assist.h @@ -0,0 +1,140 @@ +; +; ********************************************** +; * PHOTON-Beetle * +; * Authenticated Encryption and Hash Family * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by PHOTON-Beetle Team * +; ********************************************** +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Bitslice +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +.MACRO Reorder_8_bits i0, i1, i2, i3, i4 + ror \i0 + ror \i1 + ror \i0 + ror \i2 + ror \i0 + ror \i3 + ror \i0 + ror \i4 + ror \i0 + ror \i1 + ror \i0 + ror \i2 + ror \i0 + ror \i3 + ror \i0 + ror \i4 +.ENDM + +.MACRO InvReorder_8_bits i0, i1, i2, i3, i4 + ror \i1 + ror \i0 + ror \i2 + ror \i0 + ror \i3 + ror \i0 + ror \i4 + ror \i0 + ror \i1 + ror \i0 + ror \i2 + ror \i0 + ror \i3 + ror \i0 + ror \i4 + ror \i0 +.ENDM + +; require XH:XL be the address of the input +Load_Reorder_32_bits: + ldi cnt1, 4 +reorder_8_bits_loop: + ld rmp, X+ + Reorder_8_bits rmp, x0, x1, x2, x3 + dec cnt1 + brne reorder_8_bits_loop +ret + +; require YH:YL be the address of the output +invReorder_Store_32_bits: + ldi cnt1, 4 +invreorder_8_bits_loop: + InvReorder_8_bits rmp, x0, x1, x2, x3 + st Y+, rmp + dec cnt1 + brne invreorder_8_bits_loop +ret + +; require XH:XL be the address of the input +; require YH:YL be the address of the output +Load_Reorder_Store_128_bits: + ldi cnt0, 4 +reorder_32_bits_loop: + rcall Load_Reorder_32_bits + st Y+, x0 + st Y+, x1 + st Y+, x2 + st Y+, x3 + dec cnt0 + brne reorder_32_bits_loop +ret + +; require XH:XL be the address of the input +; require YH:YL be the address of the output +Load_invReorder_Store_128_bits: + ldi cnt0, 4 +invreorder_32_bits_loop: + ld x0, X+ + ld x1, X+ + ld x2, X+ + ld x3, X+ + rcall invReorder_Store_32_bits + dec cnt0 + brne invreorder_32_bits_loop +ret + +.macro PUSH_ALL +push r2 +push r3 +push r4 +push r5 +push r6 +push r7 +push r8 +push r9 +push r10 +push r11 +push r12 +push r13 +push r14 +push r15 +push r16 +push r17 +push r28 +push r29 +.endm + +.macro POP_ALL +pop r29 +pop r28 +pop r17 +pop r16 +pop r15 +pop r14 +pop r13 +pop r12 +pop r11 +pop r10 +pop r9 +pop r8 +pop r7 +pop r6 +pop r5 +pop r4 +pop r3 +pop r2 +clr r1 +.endm diff --git a/photon-beetle/Implementations/crypto_hash/photonbeetlehash256rate32v1/avr8_lowrom/crypto_hash.h b/photon-beetle/Implementations/crypto_hash/photonbeetlehash256rate32v1/avr8_lowrom/crypto_hash.h new file mode 100644 index 0000000..342a639 --- /dev/null +++ b/photon-beetle/Implementations/crypto_hash/photonbeetlehash256rate32v1/avr8_lowrom/crypto_hash.h @@ -0,0 +1,13 @@ +#ifdef __cplusplus +extern "C" { +#endif + +int crypto_hash( + unsigned char *out, + const unsigned char *in, + unsigned long long inlen + ); + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/photon-beetle/Implementations/crypto_hash/photonbeetlehash256rate32v1/avr8_lowrom/encrypt_core.S b/photon-beetle/Implementations/crypto_hash/photonbeetlehash256rate32v1/avr8_lowrom/encrypt_core.S new file mode 100644 index 0000000..dabe731 --- /dev/null +++ b/photon-beetle/Implementations/crypto_hash/photonbeetlehash256rate32v1/avr8_lowrom/encrypt_core.S @@ -0,0 +1,734 @@ +; +; ********************************************** +; * PHOTON-Beetle * +; * Authenticated Encryption and Hash Family * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by PHOTON-Beetle Team * +; ********************************************** +; +#include "api.h" + +;#define CRYPTO_AEAD +#define CRYPTO_HASH + +#define STATE_INBITS 256 +#define STATE_INBYTES ((STATE_INBITS + 7) / 8) +#define RATE_INBITS 128 +#define RATE_INBYTES ((RATE_INBITS + 7) / 8) +#define RATE_INBYTES_MASK (RATE_INBYTES - 1) +#define TAG_MATCH 0 +#define TAG_UNMATCH -1 +#define OTHER_FAILURES -2 + + +; For CRYPTO_HASH +#define INITIAL_RATE_INBITS 128 +#define INITIAL_RATE_INBYTES ((INITIAL_RATE_INBITS + 7) / 8) +#define HASH_RATE_INBITS 32 +#define HASH_RATE_INBYTES ((HASH_RATE_INBITS + 7) / 8) +#define HASH_RATE_INBYTES_MASK (HASH_RATE_INBYTES - 1) + +; +; ============================================ +; R E G I S T E R D E F I N I T I O N S +; ============================================ +; +; [Add all register names here, include info on +; all used registers without specific names] +; rmp: Multipurpose register +#define rmp r16 +#define rate r17 +#define mclen r18 +#define radlen r19 +#define adlen_org r0 + +#define cnt0 r20 +#define cnt1 r21 +#define cnt2 r22 + +#define SQUEEZE_RATE_INBITS 128 +#define SQUEEZE_RATE_INBYTES ((SQUEEZE_RATE_INBITS + 7) / 8) +#define SQUEEZE_RATE_MASK (SQUEEZE_RATE_INBYTES - 1) + +#define CAPACITY_INBITS (STATE_INBITS - RATE_INBITS) +#define CAPACITY_INBYTES ((CAPACITY_INBITS + 7) / 8) + +; For CRYPTO_AEAD +#define KEY_INBITS (CRYPTO_KEYBYTES * 8) +#define KEY_INBYTES (CRYPTO_KEYBYTES) + +#define NONCE_INBITS (CRYPTO_NPUBBYTES * 8) +#define NONCE_INBYTES (CRYPTO_NPUBBYTES) + +#define TAG_INBITS (CRYPTO_ABYTES * 8) +#define TAG_INBYTES (CRYPTO_ABYTES) + +#define t0 r8 +#define t1 r9 +#define t2 r10 +#define t3 r11 + +#define x0 r12 +#define x1 r13 +#define x2 r14 +#define x3 r15 + +#define ed r1 + +#define addr0 r2 +#define addr1 r3 +#define addr2 r4 +#define addr3 r5 +#define addr4 r6 +#define addr5 r7 + +; domain_cnt overlap with cnt0, only temporarily used, no need to back up +#define domain_cnt r20 +#define domain_cnt0 r23 +#define domain_cnt1 r24 + +.section .noinit + SRAM_STATE: .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + SRAM_MESSAGE_OUT_ADDR: .BYTE 0, 0 + SRAM_MESSAGE_IN_ADDR: .BYTE 0, 0 + SRAM_MESSAGE_IN_LEN: .BYTE 0, 0 +#ifdef CRYPTO_AEAD +; For CRYPTO_AEAD + SRAM_ASSOCIATED_DATA_ADDR: .BYTE 0, 0 + SRAM_ADLEN: .BYTE 0, 0 + SRAM_NONCE_ADDR: .BYTE 0, 0 + SRAM_KEY_ADDR: .BYTE 0, 0 + SRAM_ADDITIONAL: .BYTE 0, 0, 0, 0 + .BYTE 0, 0, 0, 0 + .BYTE 0, 0, 0, 0 + .BYTE 0, 0, 0, 0 +#endif + +; SRAM required additionally, besides those used for API + SRAM_PAD: .BYTE 0, 0, 0, 0 +#if ((defined(CRYPTO_AEAD) && (RATE_INBYTES > 4)) || defined(CRYPTO_HASH)) + .BYTE 0, 0, 0, 0 + .BYTE 0, 0, 0, 0 + .BYTE 0, 0, 0, 0 +#endif + + +.section .text + +#include "assist.h" +#include "photon.h" + +AddDomainCounter: + ldi YH, hi8(SRAM_STATE + STATE_INBYTES - 3) + ldi YL, lo8(SRAM_STATE + STATE_INBYTES - 3) + ldi rmp, 0x80 + ldi cnt1, 3 +check_domain_bit: + ror domain_cnt + brcc no_xor + ld x0, Y + eor x0, rmp + st Y, x0 +no_xor: + adiw YL, 1 + dec cnt1 + brne check_domain_bit +ret + +; require XH:XL be the address of the current associated data/message block +XOR_to_State: + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + mov cnt0, rate + dec cnt0 +XOR_to_State_loop: + rcall Load_Reorder_32_bits + ld rmp, Y + eor rmp, x0 + st Y+, rmp + ld rmp, Y + eor rmp, x1 + st Y+, rmp + ld rmp, Y + eor rmp, x2 + st Y+, rmp + ld rmp, Y + eor rmp, x3 + st Y+, rmp + subi cnt0, 4 + brsh XOR_to_State_loop +; XH:XL are now the address of the next associated data/message block if this is not the last block +ret + +; require XH:XL pointed to the source data to be padded +PAD_OneZero: + ldi YH, hi8(SRAM_PAD) + ldi YL, lo8(SRAM_PAD) + mov cnt1, rate +pad_copy: + ld rmp, X+ + st Y+, rmp + dec cnt1 + dec cnt0 + brne pad_copy +pad_one: + ldi rmp, 1 + st Y+, rmp + dec cnt1 + breq pad_end + clr rmp +pad_zero: + st Y+, rmp + dec cnt1 + brne pad_zero +pad_end: + ldi XH, hi8(SRAM_PAD) + ldi XL, lo8(SRAM_PAD) +; XH:XL are now pointed to last block needed to be processed +ret + +HASH: + movw addr0, XL +hash_block_loop: + rcall PHOTON_Permutation + movw XL, addr0 + cp rate, radlen + brsh hash_last_block + rcall XOR_to_State + movw addr0, XL + sub radlen, rate + rjmp hash_block_loop + +hash_last_block: + cp radlen, rate + breq hash_xor_domain + mov cnt0, radlen + rcall PAD_OneZero + +hash_xor_domain: + clr radlen + rcall XOR_to_State + mov domain_cnt, domain_cnt0 + rcall AddDomainCounter +ret + +TAG: + rcall PHOTON_Permutation + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + movw YL, addr2 + rcall Load_invReorder_Store_128_bits +ret + +#ifdef CRYPTO_AEAD +.IF (RATE_INBITS == 128) +XOR_to_Cipher: + mov t2, rate + cp t2, mclen + brlo XOR_to_Cipher_Start + mov t2, mclen ; backup the real length of the remaining message + +XOR_to_Cipher_Start: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + ldi YH, hi8(SRAM_ADDITIONAL) + ldi YL, lo8(SRAM_ADDITIONAL) + rcall Load_invReorder_Store_128_bits ; State move to additional SRAM and reorder + + movw XL, addr0 + movw ZL, addr2 + + ; XOR Part 2 + sbiw YL, (RATE_INBYTES>>1) ; Pointed to Part 2 + ldi cnt0, (RATE_INBYTES>>1) + cp cnt0, mclen + brlo XOR_Part2_Store_Cipher_begin + mov cnt0, mclen +XOR_Part2_Store_Cipher_begin: + sub mclen, cnt0 +XOR_Part2_Store_Cipher_loop: + ld t0, Y+ + ld x0, X+ + eor x0, t0 + st Z+, x0 + dec cnt0 + brne XOR_Part2_Store_Cipher_loop + + cpi mclen, 1 + brlo XOR_to_Cipher_END + + ; XOR (Part 1 >>> 1) + ldi cnt0, (RATE_INBYTES>>1) + cp cnt0, mclen + brlo XOR_Part1_Store_Cipher_begin + mov cnt0, mclen +XOR_Part1_Store_Cipher_begin: + sub mclen, cnt0 + ldi YH, hi8(SRAM_ADDITIONAL) + ldi YL, lo8(SRAM_ADDITIONAL) + ld t0, Y + bst t0, 0 + adiw YL, (RATE_INBYTES>>1)-1 + ld t0, Y + ror t0 + bld t0, 7 + st Y, t0 + ldi cnt1, (RATE_INBYTES>>1)-1 +ROR_part1_loop: + ld t0, -Y + ror t0 + st Y, t0 + dec cnt1 + brne ROR_part1_loop + +XOR_Part1_Store_Cipher_loop: + ld t0, Y+ + ld x0, X+ + eor x0, t0 + st Z+, x0 + dec cnt0 + brne XOR_Part1_Store_Cipher_loop + +XOR_to_Cipher_END: + tst ed + brne XOR_to_Cipher_dec + +XOR_to_Cipher_enc: + movw XL, addr0 + cp t2, rate + brsh XOR_to_Cipher_XOR_to_State + mov cnt0, t2 + rcall PAD_OneZero + rjmp XOR_to_Cipher_XOR_to_State + +XOR_to_Cipher_dec: + movw XL, addr2 + cp t2, rate + brsh XOR_to_Cipher_XOR_to_State + ; need to be padded + mov cnt0, t2 + rcall PAD_OneZero + +XOR_to_Cipher_XOR_to_State: + rcall XOR_to_State + + clr rmp + add addr0, t2 + adc addr1, rmp + add addr2, t2 + adc addr3, rmp +ret +.ELSE +; RATE_INBITS == 32 +XOR_to_Cipher: + mov t2, rate + cp t2, mclen + brlo XOR_to_Cipher_Start + mov t2, mclen ; backup the real length of the remaining message + +XOR_to_Cipher_Start: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + ld x0, X+ + ld x1, X+ + ld x2, X+ + ld x3, X+ + ldi YH, hi8(SRAM_ADDITIONAL) + ldi YL, lo8(SRAM_ADDITIONAL) + rcall invReorder_Store_32_bits + + movw XL, addr0 + movw ZL, addr2 + + ; XOR Part 2 + sbiw YL, (RATE_INBYTES>>1) ; Pointed to Part 2 + ldi cnt0, (RATE_INBYTES>>1) + cp cnt0, mclen + brlo XOR_Part2_Store_Cipher_begin + mov cnt0, mclen +XOR_Part2_Store_Cipher_begin: + sub mclen, cnt0 +XOR_Part2_Store_Cipher_loop: + ld t0, Y+ + ld x0, X+ + eor x0, t0 + st Z+, x0 + dec cnt0 + brne XOR_Part2_Store_Cipher_loop + + cpi mclen, 1 + brlo XOR_to_Cipher_END + + ; XOR (Part 1 >>> 1) + ldi cnt0, (RATE_INBYTES>>1) + cp cnt0, mclen + brlo XOR_Part1_Store_Cipher_begin + mov cnt0, mclen +XOR_Part1_Store_Cipher_begin: + sub mclen, cnt0 + ldi YH, hi8(SRAM_ADDITIONAL) + ldi YL, lo8(SRAM_ADDITIONAL) + ld t0, Y+ + ld t1, Y+ + bst t0, 0 + ror t1 + ror t0 + bld t1, 7 + + ld x0, X+ + eor x0, t0 + st Z+, x0 + dec cnt0 + breq XOR_to_Cipher_END + ld x0, X+ + eor x0, t1 + st Z+, x0 + +XOR_to_Cipher_END: + tst ed + brne XOR_to_Cipher_dec + +XOR_to_Cipher_enc: + movw XL, addr0 + cp t2, rate + brsh XOR_to_Cipher_XOR_to_State + mov cnt0, t2 + rcall PAD_OneZero + rjmp XOR_to_Cipher_XOR_to_State + +XOR_to_Cipher_dec: + movw XL, addr2 + cp t2, rate + brsh XOR_to_Cipher_XOR_to_State + ; need to be padded + mov cnt0, t2 + rcall PAD_OneZero + +XOR_to_Cipher_XOR_to_State: + rcall XOR_to_State + + clr rmp + add addr0, t2 + adc addr1, rmp + add addr2, t2 + adc addr3, rmp +ret +.ENDIF + +ENC: + lds ZH, SRAM_MESSAGE_OUT_ADDR + lds ZL, SRAM_MESSAGE_OUT_ADDR + 1 + lds XH, SRAM_MESSAGE_IN_ADDR + lds XL, SRAM_MESSAGE_IN_ADDR + 1 + + movw addr0, XL + movw addr2, ZL + +enc_block_loop: + rcall PHOTON_Permutation + rcall XOR_to_Cipher + cpi mclen, 1 + brsh enc_block_loop + + mov domain_cnt, domain_cnt1 + rcall AddDomainCounter +ret + +AUTH_AND_ENCDEC: + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + + lds XH, SRAM_NONCE_ADDR + lds XL, SRAM_NONCE_ADDR + 1 + rcall Load_Reorder_Store_128_bits + lds XH, SRAM_KEY_ADDR + lds XL, SRAM_KEY_ADDR + 1 + rcall Load_Reorder_Store_128_bits + + ldi domain_cnt0, 1 + ldi domain_cnt1, 1 + +test_adlen_zero: + tst radlen + breq adlen_zero_test_mlen_zero + + ; radlen != 0 +adlen_nzero_test_mlen_zero: + tst mclen + brne test_adlen_divisible + ldi domain_cnt0, 3 +test_adlen_divisible: + mov rmp, radlen + andi rmp, RATE_INBYTES_MASK + breq hash_ad + inc domain_cnt0 ; 2 or 4 +hash_ad: + lds XH, SRAM_ASSOCIATED_DATA_ADDR + lds XL, SRAM_ASSOCIATED_DATA_ADDR + 1 + rcall HASH + tst mclen + breq mlen_zero_inputout_address + rjmp test_mlen_divisible + +adlen_zero_test_mlen_zero: + ldi domain_cnt1, 5 + tst mclen + breq adlen_zero_mlen_zero + + ; mclen != 0 +test_mlen_divisible: + mov rmp, mclen + andi rmp, RATE_INBYTES_MASK + breq enc_dec_m + inc domain_cnt1 ; 2 or 6 +enc_dec_m: + rcall ENC + rjmp AUTH_AND_ENCDEC_end + +adlen_zero_mlen_zero: + ; empty message and empty associated data + ldi YH, hi8(SRAM_STATE + STATE_INBYTES - 3) + ldi YL, lo8(SRAM_STATE + STATE_INBYTES - 3) + ld x0, Y + ldi rmp, 0x80 + eor x0, rmp + st Y, x0 + +mlen_zero_inputout_address: + tst ed + brne dec_inputout_address +enc_inputout_address: + lds ZH, SRAM_MESSAGE_OUT_ADDR + lds ZL, SRAM_MESSAGE_OUT_ADDR + 1 + movw addr2, ZL + rjmp AUTH_AND_ENCDEC_end +dec_inputout_address: + lds ZH, SRAM_MESSAGE_IN_ADDR + lds ZL, SRAM_MESSAGE_IN_ADDR + 1 + movw addr0, ZL + +AUTH_AND_ENCDEC_end: +ret + + +; void crypto_aead_encrypt_asm( +; unsigned char *c, +; const unsigned char *m, +; unsigned long long mlen, +; const unsigned char *ad, +; unsigned long long radlen, +; const unsigned char *npub, +; const unsigned char *k +; ) +; +; unsigned char *c, is passed in r24:r25 +; const unsigned char *m, is passed in r22:r23 +; unsigned long long mlen, is passed in r20:r21, only LSB (r20) is used +; const unsigned char *ad, is passed in r18:r19 +; unsigned long long radlen, is passed in r16:r17, only LSB (r16) is used +; const unsigned char *npub, is passed in r14:r15 +; const unsigned char *k is passed in r12:r13 +.global crypto_aead_encrypt_asm +crypto_aead_encrypt_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store cipher address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store message address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store message length in SRAM_MESSAGE_IN_LEN + st X+, r20 + st X+, r19 ;store associated data address in SRAM_ASSOCIATED_DATA_ADDR + st X+, r18 + st X+, r17 ;store associated data length in SRAM_ADLEN + st X+, r16 + st X+, r15 ;store nonce address in SRAM_NONCE_ADDR + st X+, r14 + st X+, r13 ;store key address in SRAM_KEY_ADDR + st X+, r12 + mov mclen, r20 + mov radlen, r16 + + ldi rate, RATE_INBYTES + clr ed + + rcall AUTH_AND_ENCDEC + rcall TAG + + POP_ALL +ret + +; int crypto_aead_decrypt_asm( +; unsigned char *m, +; const unsigned char *c, +; unsigned long long clen, +; const unsigned char *ad, +; unsigned long long radlen, +; const unsigned char *npub, +; const unsigned char *k +; ) +; +; unsigned char *m, is passed in r24:r25 +; const unsigned char *c, is passed in r22:r23 +; unsigned long long clen, is passed in r20:r21, only LSB (r20) is used +; const unsigned char *ad, is passed in r18:r19 +; unsigned long long radlen, is passed in r16:r17, only LSB (r16) is used +; const unsigned char *npub, is passed in r14:r15 +; const unsigned char *k is passed in r12:r13 +.global crypto_aead_decrypt_asm +crypto_aead_decrypt_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store message address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store cipher address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store cipher length in SRAM_MESSAGE_IN_LEN + st X+, r20 + st X+, r19 ;store associated data address in SRAM_ASSOCIATED_DATA_ADDR + st X+, r18 + st X+, r17 ;store associated data length in SRAM_ADLEN + st X+, r16 + st X+, r15 ;store nonce address in SRAM_NONCE_ADDR + st X+, r14 + st X+, r13 ;store key address in SRAM_KEY_ADDR + st X+, r12 + mov mclen, r20 + mov radlen, r16 + + ldi rate, RATE_INBYTES + clr ed + inc ed + + rcall AUTH_AND_ENCDEC + + ldi YH, hi8(SRAM_ADDITIONAL) + ldi YL, lo8(SRAM_ADDITIONAL) + movw addr2, YL + rcall TAG + + sbiw YL, CRYPTO_ABYTES + movw XL, addr0 + + ldi cnt0, CRYPTO_ABYTES +compare_tag: + ld t0, Y+ + ld x0, X+ + cp t0, x0 + brne return_tag_not_match + dec cnt0 + brne compare_tag + rjmp return_tag_match + +return_tag_not_match: + ldi r25, 0xFF + ldi r24, 0xFF + rjmp crypto_aead_decrypt_end +return_tag_match: + clr r25 + clr r24 + +crypto_aead_decrypt_end: + POP_ALL +ret + +; #ifdef CRYPTO_AEAD +#endif + +#ifdef CRYPTO_HASH +; void crypto_hash_asm( +; unsigned char *out, +; const unsigned char *in, +; unsigned long long inlen +; ) +; +; unsigned char *out, is passed in r24:r25 +; const unsigned char *in, is passed in r22:r23 +; unsigned long long inlen, is passed in r20:r21, only LSB (r20) is used +.global crypto_hash_asm +crypto_hash_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store message address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store cipher address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store cipher length in SRAM_MESSAGE_IN_LEN + st X+, r20 + mov mclen, r20 + + ; empty half state + ldi YH, hi8(SRAM_STATE + INITIAL_RATE_INBYTES) + ldi YL, lo8(SRAM_STATE + INITIAL_RATE_INBYTES) + clr rmp + ldi cnt1, (STATE_INBYTES - INITIAL_RATE_INBYTES) +zero_state: + st Y+, rmp + dec cnt1 + brne zero_state + + ldi domain_cnt0, 1 + sbiw YL, STATE_INBYTES + lds XH, SRAM_MESSAGE_IN_ADDR + lds XL, SRAM_MESSAGE_IN_ADDR + 1 + + tst mclen + breq add_domain + +test_mlen_initrate: + ; mclen != 0 + cpi mclen, INITIAL_RATE_INBYTES + brlo less_than_initial_rate + breq equal_to_initial_rate + +more_than_initial_rate: + rcall Load_Reorder_Store_128_bits + ldi rate, HASH_RATE_INBYTES + mov radlen, mclen + subi radlen, INITIAL_RATE_INBYTES + mov rmp, radlen + andi rmp, HASH_RATE_INBYTES_MASK + breq hash_message + inc domain_cnt0 +hash_message: + rcall HASH + rjmp gen_digest + +equal_to_initial_rate: + inc domain_cnt0 + rcall Load_Reorder_Store_128_bits + rjmp add_domain + +less_than_initial_rate: + mov cnt0, mclen + ldi rate, INITIAL_RATE_INBYTES + rcall PAD_OneZero + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + rcall Load_Reorder_Store_128_bits + rjmp add_domain + +add_domain: + mov domain_cnt, domain_cnt0 + rcall AddDomainCounter +gen_digest: + lds XH, SRAM_MESSAGE_OUT_ADDR + lds XL, SRAM_MESSAGE_OUT_ADDR + 1 + movw addr2, XL + rcall TAG + movw XL, addr2 + adiw XL, SQUEEZE_RATE_INBYTES + movw addr2, XL + rcall TAG + + POP_ALL +ret + +#endif \ No newline at end of file diff --git a/photon-beetle/Implementations/crypto_hash/photonbeetlehash256rate32v1/avr8_lowrom/hash.c b/photon-beetle/Implementations/crypto_hash/photonbeetlehash256rate32v1/avr8_lowrom/hash.c new file mode 100644 index 0000000..dbbe4df --- /dev/null +++ b/photon-beetle/Implementations/crypto_hash/photonbeetlehash256rate32v1/avr8_lowrom/hash.c @@ -0,0 +1,32 @@ +#include +#include +#include +#include +#include "api.h" +#include "crypto_hash.h" + +extern void crypto_hash_asm( + unsigned char *out, + const unsigned char *in, + unsigned char inlen + ); + +int crypto_hash( + unsigned char *out, + const unsigned char *in, + unsigned long long inlen +) +{ + /* + ... + ... the code for the hash function implementation goes here + ... generating a hash value out[0],out[1],...,out[CRYPTO_BYTES-1] + ... from a message in[0],in[1],...,in[in-1] + ... + ... return 0; + */ + + crypto_hash_asm(out, in, inlen); + + return 0; +} \ No newline at end of file diff --git a/photon-beetle/Implementations/crypto_hash/photonbeetlehash256rate32v1/avr8_lowrom/photon.h b/photon-beetle/Implementations/crypto_hash/photonbeetlehash256rate32v1/avr8_lowrom/photon.h new file mode 100644 index 0000000..52b0ee3 --- /dev/null +++ b/photon-beetle/Implementations/crypto_hash/photonbeetlehash256rate32v1/avr8_lowrom/photon.h @@ -0,0 +1,345 @@ +; +; ********************************************** +; * PHOTON-Beetle * +; * Authenticated Encryption and Hash Family * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by PHOTON-Beetle Team * +; ********************************************** +; +#define ROUND_N 12 +#define DIM 8 + +.MACRO Store_OneRow + st X+, x0 + st X+, x1 + st X+, x2 + st X+, x3 +.ENDM + +.MACRO ROTL_1 i0 + bst \i0, 7 + lsl \i0 + bld \i0, 0 +.ENDM + +.MACRO ROTR_1 i0 + bst \i0, 0 + lsr \i0 + bld \i0, 7 +.ENDM + +.MACRO ROTR_4 i0 + swap \i0 +.ENDM + +ROTR_1_ROW: + ROTR_1 x0 + ROTR_1 x1 + ROTR_1 x2 + ROTR_1 x3 +ret + +ROTL_1_ROW: + ROTL_1 x0 + ROTL_1 x1 + ROTL_1 x2 + ROTL_1 x3 +ret + +ROTR_4_ROW: + ROTR_4 x0 + ROTR_4 x1 + ROTR_4 x2 + ROTR_4 x3 +ret + +RoundFunction: + + rjmp AddRC_Sbox_ShiftRow_Start + +ShiftRow_routine_table: + rjmp ShiftRow_RecoverZ_NoLPM + rjmp ShiftRow_1 + rjmp ShiftRow_2 + rjmp ShiftRow_3 + rjmp ShiftRow_4 + rjmp ShiftRow_5 + rjmp ShiftRow_6 + rjmp ShiftRow_7 + +ShiftRow_1: + rcall ROTR_1_ROW + rjmp ShiftRow_RecoverZ_LPM + +ShiftRow_2: + rcall ROTR_1_ROW + rcall ROTR_1_ROW + rjmp ShiftRow_RecoverZ_NoLPM + +ShiftRow_3: + rcall ROTR_4_ROW + rcall ROTL_1_ROW + rjmp ShiftRow_RecoverZ_LPM + +ShiftRow_4: + rcall ROTR_4_ROW + rjmp ShiftRow_RecoverZ_NoLPM + +ShiftRow_5: + rcall ROTR_4_ROW + rcall ROTR_1_ROW + rjmp ShiftRow_RecoverZ_LPM + +ShiftRow_6: + rcall ROTL_1_ROW + rcall ROTL_1_ROW + rjmp ShiftRow_RecoverZ_NoLPM + +ShiftRow_7: + rcall ROTL_1_ROW + rjmp ShiftRow_RecoverZ_NoLPM + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Start AddRC_Sbox_ShiftRow +AddRC_Sbox_ShiftRow_Start: + clr t3 + inc t3 + + ldi XL, lo8(SRAM_STATE) + ldi XH, hi8(SRAM_STATE) + + ldi YL, pm_lo8(ShiftRow_routine_table) + ldi YH, pm_hi8(ShiftRow_routine_table) + ldi rmp, DIM + + lpm t0, Z+ ; Load two nibbles of round constant for row 0, 1 +AddRC_Sbox_ShiftRow_Loop: + ; AddRC_TwoRows + ld x0, X+ + ld x1, X+ + ld x2, X+ + ld x3, X+ + sbiw XL, 4 + + ror t0 + brcc next1 + eor x0, t3 +next1: + ror t0 + brcc next2 + eor x1, t3 +next2: + ror t0 + brcc next3 + eor x2, t3 +next3: + ror t0 + brcc next4 + eor x3, t3 +next4: + ; Sbox_TwoRows + eor x1, x2 + mov t1, x2 + and t1, x1 + eor x3, t1 + mov t1, x3 + and x3, x1 + eor x3, x2 + mov t2, x3 + eor x3, x0 + com x3 + mov x2, x3 + or t2, x0 + eor x0, t1 + eor x1, x0 + or x2, x1 + eor x2, t1 + eor x1, t2 + eor x3, x1 + + movw cnt0, ZL + movw ZL, YL + ijmp + +ShiftRow_RecoverZ_NoLPM: + movw ZL, cnt0 + rjmp ShiftRow_STORE_ROW +ShiftRow_RecoverZ_LPM: + movw ZL, cnt0 + lpm t0, Z+ ; Load two nibbles of round constant for row 2i, 2i+1 +ShiftRow_STORE_ROW: + Store_OneRow + adiw YL, 1 + dec rmp + brne AddRC_Sbox_ShiftRow_Loop + +;;;;;;;;;;;;;;;;;;;;;;;; MixColumn Subroutnes + + rjmp MC_Start + +mul_routine_table: + rjmp mul2_GF16_0x13_xor + rjmp mul4_GF16_0x13_xor + rjmp mul2_GF16_0x13_xor + rjmp mulb_GF16_0x13_xor + rjmp mul2_GF16_0x13_xor + rjmp mul8_GF16_0x13_xor + rjmp mul5_GF16_0x13_xor + rjmp mul6_GF16_0x13_xor + +; For all mul2_GF16_0x13_xor: +; Input +; MSB........LSB +; x0=@0: x1=@1: x2=@2: x3=@3 +mul2_GF16_0x13_xor: + ; # define mul2_GF16_0x13 (x0 ,x1 ,x2 ,x3) do { \ + ; x3 = XOR (x3 ,x0); \ + ; } while (0) ; /* Output : ( MSB ) x1 ,x2 ,x3 , x0 ( LSB ) */ + eor t3, t0 + eor x0, t0 + eor x1, t3 + eor x2, t2 + eor x3, t1 + rjmp MC_INC_CNT1 + +mul4_GF16_0x13_xor: + ; # define mul4_GF16_0x13 (x0 ,x1 ,x2 ,x3) do { \ + ; x3 = XOR (x3 ,x0); x0 = XOR (x0 ,x1); \ + ; } while (0) ; /* Output : ( MSB ) x2 ,x3 ,x0 , x1 ( LSB ) */ + eor t3, t0 + eor t0, t1 + eor x0, t1 + eor x1, t0 + eor x2, t3 + eor x3, t2 + rjmp MC_INC_CNT1 + +mul5_GF16_0x13_xor: + ; # define mul5_GF16_0x13 (x0 ,x1 ,x2 ,x3) do { \ + ; x2 = XOR (x2 ,x0); x3 = XOR (x3 ,x1); \ + ; x1 = XOR (x1 ,x2); x0 = XOR (x0 ,x3); \ + ; } while (0) ; /* Output : ( MSB ) x2 ,x0 ,x1 , x3 ( LSB ) */ + eor t2, t0 + eor t3, t1 + eor t1, t2 + eor t0, t3 + eor x0, t3 + eor x1, t1 + eor x2, t0 + eor x3, t2 + rjmp MC_INC_CNT1 + +mul6_GF16_0x13_xor: + ; # define mul6_GF16_0x13 (x0 ,x1 ,x2 ,x3) do { \ + ; x3 = XOR (x3 ,x1); x1 = XOR (x1 ,x0); \ + ; x2 = XOR (x2 ,x1); x0 = XOR (x0 ,x2); \ + ; x2 = XOR (x2 ,x3); \ + ; } while (0) ; /* Output : ( MSB ) x0 ,x2 ,x3 , x1 ( LSB ) */ + eor t3, t1 + eor t1, t0 + eor t2, t1 + eor t0, t2 + eor t2, t3 + eor x0, t1 + eor x1, t3 + eor x2, t2 + eor x3, t0 + rjmp MC_STORE_ROW + +mul8_GF16_0x13_xor: + ; # define mul8_GF16_0x13 (x0 ,x1 ,x2 ,x3) do { \ + ; x3 = XOR (x3 ,x0); x0 = XOR (x0 ,x1); \ + ; x1 = XOR (x1 ,x2); \ + ; } while (0) ; /* Output : ( MSB ) x3 ,x0 ,x1 , x2 ( LSB ) */ + eor t3, t0 + eor t0, t1 + eor t1, t2 + eor x0, t2 + eor x1, t1 + eor x2, t0 + eor x3, t3 + rjmp MC_INC_CNT1 + +mulb_GF16_0x13_xor: + ; # define mul11_GF16_0x13 (x0 ,x1 ,x2 ,x3) do { \ + ; x2 = XOR (x2 ,x0); x1 = XOR (x1 ,x3); \ + ; x0 = XOR (x0 ,x1); x3 = XOR (x3 ,x2); \ + ; } while (0) ; /* Output : ( MSB ) x1 ,x2 ,x0 , x3 ( LSB ) */ + eor t2, t0 + eor t1, t3 + eor t0, t1 + eor t3, t2 + eor x0, t3 + eor x1, t0 + eor x2, t2 + eor x3, t1 + rjmp MC_INC_CNT1 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Start MixColumns +MC_Start: + movw addr4, ZL + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + movw YL, XL + clr cnt0 + clr cnt1 +A1: + mov cnt1, cnt0 + clr x0 + clr x1 + clr x2 + clr x3 + ldi ZH, pm_hi8(mul_routine_table) + ldi ZL, pm_lo8(mul_routine_table) +MC_MUL_LOOP: + ld t3, X+ + ld t2, X+ + ld t1, X+ + ld t0, X+ + ijmp +MC_INC_CNT1: + inc cnt1 + cpi cnt1, DIM + brne MC_MUL_NEXT + clr cnt1 + movw XL, YL +MC_MUL_NEXT: + adiw ZL, 1 + rjmp MC_MUL_LOOP +MC_STORE_ROW: + cpi cnt0, 0 + brne MC_STORE_DIRECT + sbiw XL, STATE_INBYTES +MC_STORE_DIRECT: + Store_OneRow + + inc cnt0 + cpi cnt0, DIM + brne A1 + movw ZL, addr4 +ret + +PHOTON_Permutation: + ldi ZH, hi8(RC) + ldi ZL, lo8(RC) + ldi cnt2, ROUND_N +round_loop_start: + rcall RoundFunction + dec cnt2 + brne round_loop_start +ret + +.section .text +RC: +.byte 0x01,0x62,0xFE,0x9D +.byte 0x23,0x40,0xDC,0xBF +.byte 0x67,0x04,0x98,0xFB +.byte 0xFE,0x9D,0x01,0x62 +.byte 0xCD,0xAE,0x32,0x51 +.byte 0xAB,0xC8,0x54,0x37 +.byte 0x76,0x15,0x89,0xEA +.byte 0xDC,0xBF,0x23,0x40 +.byte 0x89,0xEA,0x76,0x15 +.byte 0x32,0x51,0xCD,0xAE +.byte 0x45,0x26,0xBA,0xD9 +.byte 0xBA,0xD9,0x45,0x26 diff --git a/photon-beetle/Implementations/crypto_hash/photonbeetlehash256rate32v1/avr8_speed/api.h b/photon-beetle/Implementations/crypto_hash/photonbeetlehash256rate32v1/avr8_speed/api.h new file mode 100644 index 0000000..cb530c7 --- /dev/null +++ b/photon-beetle/Implementations/crypto_hash/photonbeetlehash256rate32v1/avr8_speed/api.h @@ -0,0 +1 @@ +#define CRYPTO_BYTES 32 \ No newline at end of file diff --git a/photon-beetle/Implementations/crypto_hash/photonbeetlehash256rate32v1/avr8_speed/assist.h b/photon-beetle/Implementations/crypto_hash/photonbeetlehash256rate32v1/avr8_speed/assist.h new file mode 100644 index 0000000..fdf3c68 --- /dev/null +++ b/photon-beetle/Implementations/crypto_hash/photonbeetlehash256rate32v1/avr8_speed/assist.h @@ -0,0 +1,140 @@ +; +; ********************************************** +; * PHOTON-Beetle * +; * Authenticated Encryption and Hash Family * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by PHOTON-Beetle Team * +; ********************************************** +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Bitslice +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +.MACRO Reorder_8_bits i0, i1, i2, i3, i4 + ror \i0 + ror \i1 + ror \i0 + ror \i2 + ror \i0 + ror \i3 + ror \i0 + ror \i4 + ror \i0 + ror \i1 + ror \i0 + ror \i2 + ror \i0 + ror \i3 + ror \i0 + ror \i4 +.ENDM + +.MACRO InvReorder_8_bits i0, i1, i2, i3, i4 + ror \i1 + ror \i0 + ror \i2 + ror \i0 + ror \i3 + ror \i0 + ror \i4 + ror \i0 + ror \i1 + ror \i0 + ror \i2 + ror \i0 + ror \i3 + ror \i0 + ror \i4 + ror \i0 +.ENDM + +; require XH:XL be the address of the input +Load_Reorder_32_bits: + ldi cnt1, 4 +reorder_8_bits_loop: + ld rmp, X+ + Reorder_8_bits rmp, x0, x1, x2, x3 + dec cnt1 + brne reorder_8_bits_loop +ret + +; require YH:YL be the address of the output +invReorder_Store_32_bits: + ldi cnt1, 4 +invreorder_8_bits_loop: + InvReorder_8_bits rmp, x0, x1, x2, x3 + st Y+, rmp + dec cnt1 + brne invreorder_8_bits_loop +ret + +; require XH:XL be the address of the input +; require YH:YL be the address of the output +Load_Reorder_Store_128_bits: + ldi cnt0, 4 +reorder_32_bits_loop: + rcall Load_Reorder_32_bits + st Y+, x0 + st Y+, x1 + st Y+, x2 + st Y+, x3 + dec cnt0 + brne reorder_32_bits_loop +ret + +; require XH:XL be the address of the input +; require YH:YL be the address of the output +Load_invReorder_Store_128_bits: + ldi cnt0, 4 +invreorder_32_bits_loop: + ld x0, X+ + ld x1, X+ + ld x2, X+ + ld x3, X+ + rcall invReorder_Store_32_bits + dec cnt0 + brne invreorder_32_bits_loop +ret + +.macro PUSH_ALL +push r2 +push r3 +push r4 +push r5 +push r6 +push r7 +push r8 +push r9 +push r10 +push r11 +push r12 +push r13 +push r14 +push r15 +push r16 +push r17 +push r28 +push r29 +.endm + +.macro POP_ALL +pop r29 +pop r28 +pop r17 +pop r16 +pop r15 +pop r14 +pop r13 +pop r12 +pop r11 +pop r10 +pop r9 +pop r8 +pop r7 +pop r6 +pop r5 +pop r4 +pop r3 +pop r2 +clr r1 +.endm diff --git a/photon-beetle/Implementations/crypto_hash/photonbeetlehash256rate32v1/avr8_speed/crypto_hash.h b/photon-beetle/Implementations/crypto_hash/photonbeetlehash256rate32v1/avr8_speed/crypto_hash.h new file mode 100644 index 0000000..342a639 --- /dev/null +++ b/photon-beetle/Implementations/crypto_hash/photonbeetlehash256rate32v1/avr8_speed/crypto_hash.h @@ -0,0 +1,13 @@ +#ifdef __cplusplus +extern "C" { +#endif + +int crypto_hash( + unsigned char *out, + const unsigned char *in, + unsigned long long inlen + ); + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/photon-beetle/Implementations/crypto_hash/photonbeetlehash256rate32v1/avr8_speed/encrypt_core.S b/photon-beetle/Implementations/crypto_hash/photonbeetlehash256rate32v1/avr8_speed/encrypt_core.S new file mode 100644 index 0000000..dabe731 --- /dev/null +++ b/photon-beetle/Implementations/crypto_hash/photonbeetlehash256rate32v1/avr8_speed/encrypt_core.S @@ -0,0 +1,734 @@ +; +; ********************************************** +; * PHOTON-Beetle * +; * Authenticated Encryption and Hash Family * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.0 2020 by PHOTON-Beetle Team * +; ********************************************** +; +#include "api.h" + +;#define CRYPTO_AEAD +#define CRYPTO_HASH + +#define STATE_INBITS 256 +#define STATE_INBYTES ((STATE_INBITS + 7) / 8) +#define RATE_INBITS 128 +#define RATE_INBYTES ((RATE_INBITS + 7) / 8) +#define RATE_INBYTES_MASK (RATE_INBYTES - 1) +#define TAG_MATCH 0 +#define TAG_UNMATCH -1 +#define OTHER_FAILURES -2 + + +; For CRYPTO_HASH +#define INITIAL_RATE_INBITS 128 +#define INITIAL_RATE_INBYTES ((INITIAL_RATE_INBITS + 7) / 8) +#define HASH_RATE_INBITS 32 +#define HASH_RATE_INBYTES ((HASH_RATE_INBITS + 7) / 8) +#define HASH_RATE_INBYTES_MASK (HASH_RATE_INBYTES - 1) + +; +; ============================================ +; R E G I S T E R D E F I N I T I O N S +; ============================================ +; +; [Add all register names here, include info on +; all used registers without specific names] +; rmp: Multipurpose register +#define rmp r16 +#define rate r17 +#define mclen r18 +#define radlen r19 +#define adlen_org r0 + +#define cnt0 r20 +#define cnt1 r21 +#define cnt2 r22 + +#define SQUEEZE_RATE_INBITS 128 +#define SQUEEZE_RATE_INBYTES ((SQUEEZE_RATE_INBITS + 7) / 8) +#define SQUEEZE_RATE_MASK (SQUEEZE_RATE_INBYTES - 1) + +#define CAPACITY_INBITS (STATE_INBITS - RATE_INBITS) +#define CAPACITY_INBYTES ((CAPACITY_INBITS + 7) / 8) + +; For CRYPTO_AEAD +#define KEY_INBITS (CRYPTO_KEYBYTES * 8) +#define KEY_INBYTES (CRYPTO_KEYBYTES) + +#define NONCE_INBITS (CRYPTO_NPUBBYTES * 8) +#define NONCE_INBYTES (CRYPTO_NPUBBYTES) + +#define TAG_INBITS (CRYPTO_ABYTES * 8) +#define TAG_INBYTES (CRYPTO_ABYTES) + +#define t0 r8 +#define t1 r9 +#define t2 r10 +#define t3 r11 + +#define x0 r12 +#define x1 r13 +#define x2 r14 +#define x3 r15 + +#define ed r1 + +#define addr0 r2 +#define addr1 r3 +#define addr2 r4 +#define addr3 r5 +#define addr4 r6 +#define addr5 r7 + +; domain_cnt overlap with cnt0, only temporarily used, no need to back up +#define domain_cnt r20 +#define domain_cnt0 r23 +#define domain_cnt1 r24 + +.section .noinit + SRAM_STATE: .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + .BYTE 0, 0, 0, 0, 0, 0, 0, 0 + SRAM_MESSAGE_OUT_ADDR: .BYTE 0, 0 + SRAM_MESSAGE_IN_ADDR: .BYTE 0, 0 + SRAM_MESSAGE_IN_LEN: .BYTE 0, 0 +#ifdef CRYPTO_AEAD +; For CRYPTO_AEAD + SRAM_ASSOCIATED_DATA_ADDR: .BYTE 0, 0 + SRAM_ADLEN: .BYTE 0, 0 + SRAM_NONCE_ADDR: .BYTE 0, 0 + SRAM_KEY_ADDR: .BYTE 0, 0 + SRAM_ADDITIONAL: .BYTE 0, 0, 0, 0 + .BYTE 0, 0, 0, 0 + .BYTE 0, 0, 0, 0 + .BYTE 0, 0, 0, 0 +#endif + +; SRAM required additionally, besides those used for API + SRAM_PAD: .BYTE 0, 0, 0, 0 +#if ((defined(CRYPTO_AEAD) && (RATE_INBYTES > 4)) || defined(CRYPTO_HASH)) + .BYTE 0, 0, 0, 0 + .BYTE 0, 0, 0, 0 + .BYTE 0, 0, 0, 0 +#endif + + +.section .text + +#include "assist.h" +#include "photon.h" + +AddDomainCounter: + ldi YH, hi8(SRAM_STATE + STATE_INBYTES - 3) + ldi YL, lo8(SRAM_STATE + STATE_INBYTES - 3) + ldi rmp, 0x80 + ldi cnt1, 3 +check_domain_bit: + ror domain_cnt + brcc no_xor + ld x0, Y + eor x0, rmp + st Y, x0 +no_xor: + adiw YL, 1 + dec cnt1 + brne check_domain_bit +ret + +; require XH:XL be the address of the current associated data/message block +XOR_to_State: + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + mov cnt0, rate + dec cnt0 +XOR_to_State_loop: + rcall Load_Reorder_32_bits + ld rmp, Y + eor rmp, x0 + st Y+, rmp + ld rmp, Y + eor rmp, x1 + st Y+, rmp + ld rmp, Y + eor rmp, x2 + st Y+, rmp + ld rmp, Y + eor rmp, x3 + st Y+, rmp + subi cnt0, 4 + brsh XOR_to_State_loop +; XH:XL are now the address of the next associated data/message block if this is not the last block +ret + +; require XH:XL pointed to the source data to be padded +PAD_OneZero: + ldi YH, hi8(SRAM_PAD) + ldi YL, lo8(SRAM_PAD) + mov cnt1, rate +pad_copy: + ld rmp, X+ + st Y+, rmp + dec cnt1 + dec cnt0 + brne pad_copy +pad_one: + ldi rmp, 1 + st Y+, rmp + dec cnt1 + breq pad_end + clr rmp +pad_zero: + st Y+, rmp + dec cnt1 + brne pad_zero +pad_end: + ldi XH, hi8(SRAM_PAD) + ldi XL, lo8(SRAM_PAD) +; XH:XL are now pointed to last block needed to be processed +ret + +HASH: + movw addr0, XL +hash_block_loop: + rcall PHOTON_Permutation + movw XL, addr0 + cp rate, radlen + brsh hash_last_block + rcall XOR_to_State + movw addr0, XL + sub radlen, rate + rjmp hash_block_loop + +hash_last_block: + cp radlen, rate + breq hash_xor_domain + mov cnt0, radlen + rcall PAD_OneZero + +hash_xor_domain: + clr radlen + rcall XOR_to_State + mov domain_cnt, domain_cnt0 + rcall AddDomainCounter +ret + +TAG: + rcall PHOTON_Permutation + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + movw YL, addr2 + rcall Load_invReorder_Store_128_bits +ret + +#ifdef CRYPTO_AEAD +.IF (RATE_INBITS == 128) +XOR_to_Cipher: + mov t2, rate + cp t2, mclen + brlo XOR_to_Cipher_Start + mov t2, mclen ; backup the real length of the remaining message + +XOR_to_Cipher_Start: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + ldi YH, hi8(SRAM_ADDITIONAL) + ldi YL, lo8(SRAM_ADDITIONAL) + rcall Load_invReorder_Store_128_bits ; State move to additional SRAM and reorder + + movw XL, addr0 + movw ZL, addr2 + + ; XOR Part 2 + sbiw YL, (RATE_INBYTES>>1) ; Pointed to Part 2 + ldi cnt0, (RATE_INBYTES>>1) + cp cnt0, mclen + brlo XOR_Part2_Store_Cipher_begin + mov cnt0, mclen +XOR_Part2_Store_Cipher_begin: + sub mclen, cnt0 +XOR_Part2_Store_Cipher_loop: + ld t0, Y+ + ld x0, X+ + eor x0, t0 + st Z+, x0 + dec cnt0 + brne XOR_Part2_Store_Cipher_loop + + cpi mclen, 1 + brlo XOR_to_Cipher_END + + ; XOR (Part 1 >>> 1) + ldi cnt0, (RATE_INBYTES>>1) + cp cnt0, mclen + brlo XOR_Part1_Store_Cipher_begin + mov cnt0, mclen +XOR_Part1_Store_Cipher_begin: + sub mclen, cnt0 + ldi YH, hi8(SRAM_ADDITIONAL) + ldi YL, lo8(SRAM_ADDITIONAL) + ld t0, Y + bst t0, 0 + adiw YL, (RATE_INBYTES>>1)-1 + ld t0, Y + ror t0 + bld t0, 7 + st Y, t0 + ldi cnt1, (RATE_INBYTES>>1)-1 +ROR_part1_loop: + ld t0, -Y + ror t0 + st Y, t0 + dec cnt1 + brne ROR_part1_loop + +XOR_Part1_Store_Cipher_loop: + ld t0, Y+ + ld x0, X+ + eor x0, t0 + st Z+, x0 + dec cnt0 + brne XOR_Part1_Store_Cipher_loop + +XOR_to_Cipher_END: + tst ed + brne XOR_to_Cipher_dec + +XOR_to_Cipher_enc: + movw XL, addr0 + cp t2, rate + brsh XOR_to_Cipher_XOR_to_State + mov cnt0, t2 + rcall PAD_OneZero + rjmp XOR_to_Cipher_XOR_to_State + +XOR_to_Cipher_dec: + movw XL, addr2 + cp t2, rate + brsh XOR_to_Cipher_XOR_to_State + ; need to be padded + mov cnt0, t2 + rcall PAD_OneZero + +XOR_to_Cipher_XOR_to_State: + rcall XOR_to_State + + clr rmp + add addr0, t2 + adc addr1, rmp + add addr2, t2 + adc addr3, rmp +ret +.ELSE +; RATE_INBITS == 32 +XOR_to_Cipher: + mov t2, rate + cp t2, mclen + brlo XOR_to_Cipher_Start + mov t2, mclen ; backup the real length of the remaining message + +XOR_to_Cipher_Start: + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + ld x0, X+ + ld x1, X+ + ld x2, X+ + ld x3, X+ + ldi YH, hi8(SRAM_ADDITIONAL) + ldi YL, lo8(SRAM_ADDITIONAL) + rcall invReorder_Store_32_bits + + movw XL, addr0 + movw ZL, addr2 + + ; XOR Part 2 + sbiw YL, (RATE_INBYTES>>1) ; Pointed to Part 2 + ldi cnt0, (RATE_INBYTES>>1) + cp cnt0, mclen + brlo XOR_Part2_Store_Cipher_begin + mov cnt0, mclen +XOR_Part2_Store_Cipher_begin: + sub mclen, cnt0 +XOR_Part2_Store_Cipher_loop: + ld t0, Y+ + ld x0, X+ + eor x0, t0 + st Z+, x0 + dec cnt0 + brne XOR_Part2_Store_Cipher_loop + + cpi mclen, 1 + brlo XOR_to_Cipher_END + + ; XOR (Part 1 >>> 1) + ldi cnt0, (RATE_INBYTES>>1) + cp cnt0, mclen + brlo XOR_Part1_Store_Cipher_begin + mov cnt0, mclen +XOR_Part1_Store_Cipher_begin: + sub mclen, cnt0 + ldi YH, hi8(SRAM_ADDITIONAL) + ldi YL, lo8(SRAM_ADDITIONAL) + ld t0, Y+ + ld t1, Y+ + bst t0, 0 + ror t1 + ror t0 + bld t1, 7 + + ld x0, X+ + eor x0, t0 + st Z+, x0 + dec cnt0 + breq XOR_to_Cipher_END + ld x0, X+ + eor x0, t1 + st Z+, x0 + +XOR_to_Cipher_END: + tst ed + brne XOR_to_Cipher_dec + +XOR_to_Cipher_enc: + movw XL, addr0 + cp t2, rate + brsh XOR_to_Cipher_XOR_to_State + mov cnt0, t2 + rcall PAD_OneZero + rjmp XOR_to_Cipher_XOR_to_State + +XOR_to_Cipher_dec: + movw XL, addr2 + cp t2, rate + brsh XOR_to_Cipher_XOR_to_State + ; need to be padded + mov cnt0, t2 + rcall PAD_OneZero + +XOR_to_Cipher_XOR_to_State: + rcall XOR_to_State + + clr rmp + add addr0, t2 + adc addr1, rmp + add addr2, t2 + adc addr3, rmp +ret +.ENDIF + +ENC: + lds ZH, SRAM_MESSAGE_OUT_ADDR + lds ZL, SRAM_MESSAGE_OUT_ADDR + 1 + lds XH, SRAM_MESSAGE_IN_ADDR + lds XL, SRAM_MESSAGE_IN_ADDR + 1 + + movw addr0, XL + movw addr2, ZL + +enc_block_loop: + rcall PHOTON_Permutation + rcall XOR_to_Cipher + cpi mclen, 1 + brsh enc_block_loop + + mov domain_cnt, domain_cnt1 + rcall AddDomainCounter +ret + +AUTH_AND_ENCDEC: + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + + lds XH, SRAM_NONCE_ADDR + lds XL, SRAM_NONCE_ADDR + 1 + rcall Load_Reorder_Store_128_bits + lds XH, SRAM_KEY_ADDR + lds XL, SRAM_KEY_ADDR + 1 + rcall Load_Reorder_Store_128_bits + + ldi domain_cnt0, 1 + ldi domain_cnt1, 1 + +test_adlen_zero: + tst radlen + breq adlen_zero_test_mlen_zero + + ; radlen != 0 +adlen_nzero_test_mlen_zero: + tst mclen + brne test_adlen_divisible + ldi domain_cnt0, 3 +test_adlen_divisible: + mov rmp, radlen + andi rmp, RATE_INBYTES_MASK + breq hash_ad + inc domain_cnt0 ; 2 or 4 +hash_ad: + lds XH, SRAM_ASSOCIATED_DATA_ADDR + lds XL, SRAM_ASSOCIATED_DATA_ADDR + 1 + rcall HASH + tst mclen + breq mlen_zero_inputout_address + rjmp test_mlen_divisible + +adlen_zero_test_mlen_zero: + ldi domain_cnt1, 5 + tst mclen + breq adlen_zero_mlen_zero + + ; mclen != 0 +test_mlen_divisible: + mov rmp, mclen + andi rmp, RATE_INBYTES_MASK + breq enc_dec_m + inc domain_cnt1 ; 2 or 6 +enc_dec_m: + rcall ENC + rjmp AUTH_AND_ENCDEC_end + +adlen_zero_mlen_zero: + ; empty message and empty associated data + ldi YH, hi8(SRAM_STATE + STATE_INBYTES - 3) + ldi YL, lo8(SRAM_STATE + STATE_INBYTES - 3) + ld x0, Y + ldi rmp, 0x80 + eor x0, rmp + st Y, x0 + +mlen_zero_inputout_address: + tst ed + brne dec_inputout_address +enc_inputout_address: + lds ZH, SRAM_MESSAGE_OUT_ADDR + lds ZL, SRAM_MESSAGE_OUT_ADDR + 1 + movw addr2, ZL + rjmp AUTH_AND_ENCDEC_end +dec_inputout_address: + lds ZH, SRAM_MESSAGE_IN_ADDR + lds ZL, SRAM_MESSAGE_IN_ADDR + 1 + movw addr0, ZL + +AUTH_AND_ENCDEC_end: +ret + + +; void crypto_aead_encrypt_asm( +; unsigned char *c, +; const unsigned char *m, +; unsigned long long mlen, +; const unsigned char *ad, +; unsigned long long radlen, +; const unsigned char *npub, +; const unsigned char *k +; ) +; +; unsigned char *c, is passed in r24:r25 +; const unsigned char *m, is passed in r22:r23 +; unsigned long long mlen, is passed in r20:r21, only LSB (r20) is used +; const unsigned char *ad, is passed in r18:r19 +; unsigned long long radlen, is passed in r16:r17, only LSB (r16) is used +; const unsigned char *npub, is passed in r14:r15 +; const unsigned char *k is passed in r12:r13 +.global crypto_aead_encrypt_asm +crypto_aead_encrypt_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store cipher address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store message address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store message length in SRAM_MESSAGE_IN_LEN + st X+, r20 + st X+, r19 ;store associated data address in SRAM_ASSOCIATED_DATA_ADDR + st X+, r18 + st X+, r17 ;store associated data length in SRAM_ADLEN + st X+, r16 + st X+, r15 ;store nonce address in SRAM_NONCE_ADDR + st X+, r14 + st X+, r13 ;store key address in SRAM_KEY_ADDR + st X+, r12 + mov mclen, r20 + mov radlen, r16 + + ldi rate, RATE_INBYTES + clr ed + + rcall AUTH_AND_ENCDEC + rcall TAG + + POP_ALL +ret + +; int crypto_aead_decrypt_asm( +; unsigned char *m, +; const unsigned char *c, +; unsigned long long clen, +; const unsigned char *ad, +; unsigned long long radlen, +; const unsigned char *npub, +; const unsigned char *k +; ) +; +; unsigned char *m, is passed in r24:r25 +; const unsigned char *c, is passed in r22:r23 +; unsigned long long clen, is passed in r20:r21, only LSB (r20) is used +; const unsigned char *ad, is passed in r18:r19 +; unsigned long long radlen, is passed in r16:r17, only LSB (r16) is used +; const unsigned char *npub, is passed in r14:r15 +; const unsigned char *k is passed in r12:r13 +.global crypto_aead_decrypt_asm +crypto_aead_decrypt_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store message address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store cipher address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store cipher length in SRAM_MESSAGE_IN_LEN + st X+, r20 + st X+, r19 ;store associated data address in SRAM_ASSOCIATED_DATA_ADDR + st X+, r18 + st X+, r17 ;store associated data length in SRAM_ADLEN + st X+, r16 + st X+, r15 ;store nonce address in SRAM_NONCE_ADDR + st X+, r14 + st X+, r13 ;store key address in SRAM_KEY_ADDR + st X+, r12 + mov mclen, r20 + mov radlen, r16 + + ldi rate, RATE_INBYTES + clr ed + inc ed + + rcall AUTH_AND_ENCDEC + + ldi YH, hi8(SRAM_ADDITIONAL) + ldi YL, lo8(SRAM_ADDITIONAL) + movw addr2, YL + rcall TAG + + sbiw YL, CRYPTO_ABYTES + movw XL, addr0 + + ldi cnt0, CRYPTO_ABYTES +compare_tag: + ld t0, Y+ + ld x0, X+ + cp t0, x0 + brne return_tag_not_match + dec cnt0 + brne compare_tag + rjmp return_tag_match + +return_tag_not_match: + ldi r25, 0xFF + ldi r24, 0xFF + rjmp crypto_aead_decrypt_end +return_tag_match: + clr r25 + clr r24 + +crypto_aead_decrypt_end: + POP_ALL +ret + +; #ifdef CRYPTO_AEAD +#endif + +#ifdef CRYPTO_HASH +; void crypto_hash_asm( +; unsigned char *out, +; const unsigned char *in, +; unsigned long long inlen +; ) +; +; unsigned char *out, is passed in r24:r25 +; const unsigned char *in, is passed in r22:r23 +; unsigned long long inlen, is passed in r20:r21, only LSB (r20) is used +.global crypto_hash_asm +crypto_hash_asm: + PUSH_ALL + ldi XH, hi8(SRAM_MESSAGE_OUT_ADDR) + ldi XL, lo8(SRAM_MESSAGE_OUT_ADDR) + st X+, r25 ;store message address in SRAM_MESSAGE_OUT_ADDR + st X+, r24 + st X+, r23 ;store cipher address in SRAM_MESSAGE_IN_ADDR + st X+, r22 + st X+, r21 ;store cipher length in SRAM_MESSAGE_IN_LEN + st X+, r20 + mov mclen, r20 + + ; empty half state + ldi YH, hi8(SRAM_STATE + INITIAL_RATE_INBYTES) + ldi YL, lo8(SRAM_STATE + INITIAL_RATE_INBYTES) + clr rmp + ldi cnt1, (STATE_INBYTES - INITIAL_RATE_INBYTES) +zero_state: + st Y+, rmp + dec cnt1 + brne zero_state + + ldi domain_cnt0, 1 + sbiw YL, STATE_INBYTES + lds XH, SRAM_MESSAGE_IN_ADDR + lds XL, SRAM_MESSAGE_IN_ADDR + 1 + + tst mclen + breq add_domain + +test_mlen_initrate: + ; mclen != 0 + cpi mclen, INITIAL_RATE_INBYTES + brlo less_than_initial_rate + breq equal_to_initial_rate + +more_than_initial_rate: + rcall Load_Reorder_Store_128_bits + ldi rate, HASH_RATE_INBYTES + mov radlen, mclen + subi radlen, INITIAL_RATE_INBYTES + mov rmp, radlen + andi rmp, HASH_RATE_INBYTES_MASK + breq hash_message + inc domain_cnt0 +hash_message: + rcall HASH + rjmp gen_digest + +equal_to_initial_rate: + inc domain_cnt0 + rcall Load_Reorder_Store_128_bits + rjmp add_domain + +less_than_initial_rate: + mov cnt0, mclen + ldi rate, INITIAL_RATE_INBYTES + rcall PAD_OneZero + ldi YH, hi8(SRAM_STATE) + ldi YL, lo8(SRAM_STATE) + rcall Load_Reorder_Store_128_bits + rjmp add_domain + +add_domain: + mov domain_cnt, domain_cnt0 + rcall AddDomainCounter +gen_digest: + lds XH, SRAM_MESSAGE_OUT_ADDR + lds XL, SRAM_MESSAGE_OUT_ADDR + 1 + movw addr2, XL + rcall TAG + movw XL, addr2 + adiw XL, SQUEEZE_RATE_INBYTES + movw addr2, XL + rcall TAG + + POP_ALL +ret + +#endif \ No newline at end of file diff --git a/photon-beetle/Implementations/crypto_hash/photonbeetlehash256rate32v1/avr8_speed/hash.c b/photon-beetle/Implementations/crypto_hash/photonbeetlehash256rate32v1/avr8_speed/hash.c new file mode 100644 index 0000000..dbbe4df --- /dev/null +++ b/photon-beetle/Implementations/crypto_hash/photonbeetlehash256rate32v1/avr8_speed/hash.c @@ -0,0 +1,32 @@ +#include +#include +#include +#include +#include "api.h" +#include "crypto_hash.h" + +extern void crypto_hash_asm( + unsigned char *out, + const unsigned char *in, + unsigned char inlen + ); + +int crypto_hash( + unsigned char *out, + const unsigned char *in, + unsigned long long inlen +) +{ + /* + ... + ... the code for the hash function implementation goes here + ... generating a hash value out[0],out[1],...,out[CRYPTO_BYTES-1] + ... from a message in[0],in[1],...,in[in-1] + ... + ... return 0; + */ + + crypto_hash_asm(out, in, inlen); + + return 0; +} \ No newline at end of file diff --git a/photon-beetle/Implementations/crypto_hash/photonbeetlehash256rate32v1/avr8_speed/photon.h b/photon-beetle/Implementations/crypto_hash/photonbeetlehash256rate32v1/avr8_speed/photon.h new file mode 100644 index 0000000..d764e16 --- /dev/null +++ b/photon-beetle/Implementations/crypto_hash/photonbeetlehash256rate32v1/avr8_speed/photon.h @@ -0,0 +1,714 @@ +; +; ********************************************** +; * PHOTON-Beetle * +; * Authenticated Encryption and Hash Family * +; * * +; * Assembly implementation for 8-bit AVR CPU * +; * Version 1.1 2020 by PHOTON-Beetle Team * +; ********************************************** +; +#define ROUND_N 12 +#define DIM 8 + +.MACRO Store_OneRow + st X+, x0 + st X+, x1 + st X+, x2 + st X+, x3 +.ENDM + +.MACRO ROTL_1 i0 + bst \i0, 7 + lsl \i0 + bld \i0, 0 +.ENDM + +.MACRO ROTR_1 i0 + bst \i0, 0 + lsr \i0 + bld \i0, 7 +.ENDM + +.MACRO ROTR_4 i0 + swap \i0 +.ENDM + +.MACRO ROTR_1_ROW + ROTR_1 x0 + ROTR_1 x1 + ROTR_1 x2 + ROTR_1 x3 +.ENDM + +.MACRO ROTL_1_ROW + ROTL_1 x0 + ROTL_1 x1 + ROTL_1 x2 + ROTL_1 x3 +.ENDM + +.MACRO ROTR_4_ROW + ROTR_4 x0 + ROTR_4 x1 + ROTR_4 x2 + ROTR_4 x3 +.ENDM + + +; For all mul2_GF16_0x13_xor: +; Input +; MSB........LSB +; x0=@0: x1=@1: x2=@2: x3=@3 + ; # define mul2_GF16_0x13 (x0 ,x1 ,x2 ,x3) do { \ + ; x3 = XOR (x3 ,x0); \ + ; } while (0) ; /* Output : ( MSB ) x1 ,x2 ,x3 , x0 ( LSB ) */ +.MACRO mul2_GF16_0x13_xor + ld t3, X+ + ld t2, X+ + ld t1, X+ + ld t0, X+ + eor t3, t0 + eor x0, t0 + eor x1, t3 + eor x2, t2 + eor x3, t1 +.ENDM + + ; # define mul4_GF16_0x13 (x0 ,x1 ,x2 ,x3) do { \ + ; x3 = XOR (x3 ,x0); x0 = XOR (x0 ,x1); \ + ; } while (0) ; /* Output : ( MSB ) x2 ,x3 ,x0 , x1 ( LSB ) */ +.MACRO mul4_GF16_0x13_xor + ld t3, X+ + ld t2, X+ + ld t1, X+ + ld t0, X+ + eor t3, t0 + eor t0, t1 + eor x0, t1 + eor x1, t0 + eor x2, t3 + eor x3, t2 +.ENDM + + ; # define mul5_GF16_0x13 (x0 ,x1 ,x2 ,x3) do { \ + ; x2 = XOR (x2 ,x0); x3 = XOR (x3 ,x1); \ + ; x1 = XOR (x1 ,x2); x0 = XOR (x0 ,x3); \ + ; } while (0) ; /* Output : ( MSB ) x2 ,x0 ,x1 , x3 ( LSB ) */ +.MACRO mul5_GF16_0x13_xor + ld t3, X+ + ld t2, X+ + ld t1, X+ + ld t0, X+ + eor t2, t0 + eor t3, t1 + eor t1, t2 + eor t0, t3 + eor x0, t3 + eor x1, t1 + eor x2, t0 + eor x3, t2 +.ENDM + + ; # define mul6_GF16_0x13 (x0 ,x1 ,x2 ,x3) do { \ + ; x3 = XOR (x3 ,x1); x1 = XOR (x1 ,x0); \ + ; x2 = XOR (x2 ,x1); x0 = XOR (x0 ,x2); \ + ; x2 = XOR (x2 ,x3); \ + ; } while (0) ; /* Output : ( MSB ) x0 ,x2 ,x3 , x1 ( LSB ) */ +.MACRO mul6_GF16_0x13_xor + ld t3, X+ + ld t2, X+ + ld t1, X+ + ld t0, X+ + eor t3, t1 + eor t1, t0 + eor t2, t1 + eor t0, t2 + eor t2, t3 + eor x0, t1 + eor x1, t3 + eor x2, t2 + eor x3, t0 +.ENDM + + ; # define mul8_GF16_0x13 (x0 ,x1 ,x2 ,x3) do { \ + ; x3 = XOR (x3 ,x0); x0 = XOR (x0 ,x1); \ + ; x1 = XOR (x1 ,x2); \ + ; } while (0) ; /* Output : ( MSB ) x3 ,x0 ,x1 , x2 ( LSB ) */ +.MACRO mul8_GF16_0x13_xor + ld t3, X+ + ld t2, X+ + ld t1, X+ + ld t0, X+ + eor t3, t0 + eor t0, t1 + eor t1, t2 + eor x0, t2 + eor x1, t1 + eor x2, t0 + eor x3, t3 +.ENDM + + ; # define mul11_GF16_0x13 (x0 ,x1 ,x2 ,x3) do { \ + ; x2 = XOR (x2 ,x0); x1 = XOR (x1 ,x3); \ + ; x0 = XOR (x0 ,x1); x3 = XOR (x3 ,x2); \ + ; } while (0) ; /* Output : ( MSB ) x1 ,x2 ,x0 , x3 ( LSB ) */ +.MACRO mulb_GF16_0x13_xor + ld t3, X+ + ld t2, X+ + ld t1, X+ + ld t0, X+ + eor t2, t0 + eor t1, t3 + eor t0, t1 + eor t3, t2 + eor x0, t3 + eor x1, t0 + eor x2, t2 + eor x3, t1 +.ENDM + + +.MACRO RoundFunction +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Start AddRC_Sbox_ShiftRow +AddRC_Sbox_ShiftRow_Start: + clr t3 + inc t3 + + ldi XL, lo8(SRAM_STATE) + ldi XH, hi8(SRAM_STATE) + + lpm t0, Z+ ; Load two nibbles of round constant for row 0, 1 + ; AddRC_TwoRows + ld x0, X+ + ld x1, X+ + ld x2, X+ + ld x3, X+ + sbiw XL, 4 + + ror t0 + brcc row0_next1 + eor x0, t3 +row0_next1: + ror t0 + brcc row0_next2 + eor x1, t3 +row0_next2: + ror t0 + brcc row0_next3 + eor x2, t3 +row0_next3: + ror t0 + brcc row0_next4 + eor x3, t3 +row0_next4: + ; Sbox_TwoRows + eor x1, x2 + mov t1, x2 + and t1, x1 + eor x3, t1 + mov t1, x3 + and x3, x1 + eor x3, x2 + mov t2, x3 + eor x3, x0 + com x3 + mov x2, x3 + or t2, x0 + eor x0, t1 + eor x1, x0 + or x2, x1 + eor x2, t1 + eor x1, t2 + eor x3, x1 + Store_OneRow + + ; AddRC_TwoRows + ld x0, X+ + ld x1, X+ + ld x2, X+ + ld x3, X+ + sbiw XL, 4 + + ror t0 + brcc row1_next1 + eor x0, t3 +row1_next1: + ror t0 + brcc row1_next2 + eor x1, t3 +row1_next2: + ror t0 + brcc row1_next3 + eor x2, t3 +row1_next3: + ror t0 + brcc row1_next4 + eor x3, t3 +row1_next4: + ; Sbox_TwoRows + eor x1, x2 + mov t1, x2 + and t1, x1 + eor x3, t1 + mov t1, x3 + and x3, x1 + eor x3, x2 + mov t2, x3 + eor x3, x0 + com x3 + mov x2, x3 + or t2, x0 + eor x0, t1 + eor x1, x0 + or x2, x1 + eor x2, t1 + eor x1, t2 + eor x3, x1 + + ROTR_1_ROW + Store_OneRow + + lpm t0, Z+ ; Load two nibbles of round constant for row 2i, 2i+1 + ; AddRC_TwoRows + ld x0, X+ + ld x1, X+ + ld x2, X+ + ld x3, X+ + sbiw XL, 4 + + ror t0 + brcc row2_next1 + eor x0, t3 +row2_next1: + ror t0 + brcc row2_next2 + eor x1, t3 +row2_next2: + ror t0 + brcc row2_next3 + eor x2, t3 +row2_next3: + ror t0 + brcc row2_next4 + eor x3, t3 +row2_next4: + ; Sbox_TwoRows + eor x1, x2 + mov t1, x2 + and t1, x1 + eor x3, t1 + mov t1, x3 + and x3, x1 + eor x3, x2 + mov t2, x3 + eor x3, x0 + com x3 + mov x2, x3 + or t2, x0 + eor x0, t1 + eor x1, x0 + or x2, x1 + eor x2, t1 + eor x1, t2 + eor x3, x1 + + ROTR_1_ROW + ROTR_1_ROW + Store_OneRow + + ; AddRC_TwoRows + ld x0, X+ + ld x1, X+ + ld x2, X+ + ld x3, X+ + sbiw XL, 4 + + ror t0 + brcc row3_next1 + eor x0, t3 +row3_next1: + ror t0 + brcc row3_next2 + eor x1, t3 +row3_next2: + ror t0 + brcc row3_next3 + eor x2, t3 +row3_next3: + ror t0 + brcc row3_next4 + eor x3, t3 +row3_next4: + ; Sbox_TwoRows + eor x1, x2 + mov t1, x2 + and t1, x1 + eor x3, t1 + mov t1, x3 + and x3, x1 + eor x3, x2 + mov t2, x3 + eor x3, x0 + com x3 + mov x2, x3 + or t2, x0 + eor x0, t1 + eor x1, x0 + or x2, x1 + eor x2, t1 + eor x1, t2 + eor x3, x1 + + ROTR_4_ROW + ROTL_1_ROW + Store_OneRow + + lpm t0, Z+ ; Load two nibbles of round constant for row 2i, 2i+1 + ; AddRC_TwoRows + ld x0, X+ + ld x1, X+ + ld x2, X+ + ld x3, X+ + sbiw XL, 4 + + ror t0 + brcc row4_next1 + eor x0, t3 +row4_next1: + ror t0 + brcc row4_next2 + eor x1, t3 +row4_next2: + ror t0 + brcc row4_next3 + eor x2, t3 +row4_next3: + ror t0 + brcc row4_next4 + eor x3, t3 +row4_next4: + ; Sbox_TwoRows + eor x1, x2 + mov t1, x2 + and t1, x1 + eor x3, t1 + mov t1, x3 + and x3, x1 + eor x3, x2 + mov t2, x3 + eor x3, x0 + com x3 + mov x2, x3 + or t2, x0 + eor x0, t1 + eor x1, x0 + or x2, x1 + eor x2, t1 + eor x1, t2 + eor x3, x1 + + ROTR_4_ROW + Store_OneRow + + ; AddRC_TwoRows + ld x0, X+ + ld x1, X+ + ld x2, X+ + ld x3, X+ + sbiw XL, 4 + + ror t0 + brcc row5_next1 + eor x0, t3 +row5_next1: + ror t0 + brcc row5_next2 + eor x1, t3 +row5_next2: + ror t0 + brcc row5_next3 + eor x2, t3 +row5_next3: + ror t0 + brcc row5_next4 + eor x3, t3 +row5_next4: + ; Sbox_TwoRows + eor x1, x2 + mov t1, x2 + and t1, x1 + eor x3, t1 + mov t1, x3 + and x3, x1 + eor x3, x2 + mov t2, x3 + eor x3, x0 + com x3 + mov x2, x3 + or t2, x0 + eor x0, t1 + eor x1, x0 + or x2, x1 + eor x2, t1 + eor x1, t2 + eor x3, x1 + + ROTR_4_ROW + ROTR_1_ROW + Store_OneRow + + lpm t0, Z+ ; Load two nibbles of round constant for row 2i, 2i+1 + ; AddRC_TwoRows + ld x0, X+ + ld x1, X+ + ld x2, X+ + ld x3, X+ + sbiw XL, 4 + + ror t0 + brcc row6_next1 + eor x0, t3 +row6_next1: + ror t0 + brcc row6_next2 + eor x1, t3 +row6_next2: + ror t0 + brcc row6_next3 + eor x2, t3 +row6_next3: + ror t0 + brcc row6_next4 + eor x3, t3 +row6_next4: + ; Sbox_TwoRows + eor x1, x2 + mov t1, x2 + and t1, x1 + eor x3, t1 + mov t1, x3 + and x3, x1 + eor x3, x2 + mov t2, x3 + eor x3, x0 + com x3 + mov x2, x3 + or t2, x0 + eor x0, t1 + eor x1, x0 + or x2, x1 + eor x2, t1 + eor x1, t2 + eor x3, x1 + + ROTL_1_ROW + ROTL_1_ROW + Store_OneRow + + ; AddRC_TwoRows + ld x0, X+ + ld x1, X+ + ld x2, X+ + ld x3, X+ + sbiw XL, 4 + + ror t0 + brcc row7_next1 + eor x0, t3 +row7_next1: + ror t0 + brcc row7_next2 + eor x1, t3 +row7_next2: + ror t0 + brcc row7_next3 + eor x2, t3 +row7_next3: + ror t0 + brcc row7_next4 + eor x3, t3 +row7_next4: + ; Sbox_TwoRows + eor x1, x2 + mov t1, x2 + and t1, x1 + eor x3, t1 + mov t1, x3 + and x3, x1 + eor x3, x2 + mov t2, x3 + eor x3, x0 + com x3 + mov x2, x3 + or t2, x0 + eor x0, t1 + eor x1, x0 + or x2, x1 + eor x2, t1 + eor x1, t2 + eor x3, x1 + + ROTL_1_ROW + Store_OneRow + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Start MixColumns +MC_Start: + + ldi XH, hi8(SRAM_STATE) + ldi XL, lo8(SRAM_STATE) + movw YL, XL +A0: + clr x0 + clr x1 + clr x2 + clr x3 + mul2_GF16_0x13_xor + mul4_GF16_0x13_xor + mul2_GF16_0x13_xor + mulb_GF16_0x13_xor + mul2_GF16_0x13_xor + mul8_GF16_0x13_xor + mul5_GF16_0x13_xor + mul6_GF16_0x13_xor + movw XL, YL + Store_OneRow + +A1: + clr x0 + clr x1 + clr x2 + clr x3 + mul2_GF16_0x13_xor + mul4_GF16_0x13_xor + mul2_GF16_0x13_xor + mulb_GF16_0x13_xor + mul2_GF16_0x13_xor + mul8_GF16_0x13_xor + mul5_GF16_0x13_xor + movw XL, YL + mul6_GF16_0x13_xor + Store_OneRow + +A2: + clr x0 + clr x1 + clr x2 + clr x3 + mul2_GF16_0x13_xor + mul4_GF16_0x13_xor + mul2_GF16_0x13_xor + mulb_GF16_0x13_xor + mul2_GF16_0x13_xor + mul8_GF16_0x13_xor + movw XL, YL + mul5_GF16_0x13_xor + mul6_GF16_0x13_xor + Store_OneRow + +A3: + clr x0 + clr x1 + clr x2 + clr x3 + mul2_GF16_0x13_xor + mul4_GF16_0x13_xor + mul2_GF16_0x13_xor + mulb_GF16_0x13_xor + mul2_GF16_0x13_xor + movw XL, YL + mul8_GF16_0x13_xor + mul5_GF16_0x13_xor + mul6_GF16_0x13_xor + Store_OneRow + +A4: + clr x0 + clr x1 + clr x2 + clr x3 + mul2_GF16_0x13_xor + mul4_GF16_0x13_xor + mul2_GF16_0x13_xor + mulb_GF16_0x13_xor + movw XL, YL + mul2_GF16_0x13_xor + mul8_GF16_0x13_xor + mul5_GF16_0x13_xor + mul6_GF16_0x13_xor + Store_OneRow + +A5: + clr x0 + clr x1 + clr x2 + clr x3 + mul2_GF16_0x13_xor + mul4_GF16_0x13_xor + mul2_GF16_0x13_xor + movw XL, YL + mulb_GF16_0x13_xor + mul2_GF16_0x13_xor + mul8_GF16_0x13_xor + mul5_GF16_0x13_xor + mul6_GF16_0x13_xor + Store_OneRow + +A6: + clr x0 + clr x1 + clr x2 + clr x3 + mul2_GF16_0x13_xor + mul4_GF16_0x13_xor + movw XL, YL + mul2_GF16_0x13_xor + mulb_GF16_0x13_xor + mul2_GF16_0x13_xor + mul8_GF16_0x13_xor + mul5_GF16_0x13_xor + mul6_GF16_0x13_xor + Store_OneRow + +A7: + clr x0 + clr x1 + clr x2 + clr x3 + mul2_GF16_0x13_xor + movw XL, YL + mul4_GF16_0x13_xor + mul2_GF16_0x13_xor + mulb_GF16_0x13_xor + mul2_GF16_0x13_xor + mul8_GF16_0x13_xor + mul5_GF16_0x13_xor + mul6_GF16_0x13_xor + Store_OneRow +.ENDM + +PHOTON_Permutation: + ldi ZH, hi8(RC) + ldi ZL, lo8(RC) + ldi cnt2, ROUND_N +round_loop_start: + RoundFunction + dec cnt2 + breq round_loop_end + jmp round_loop_start +round_loop_end: +ret + +.section .text +RC: +.byte 0x01,0x62,0xFE,0x9D +.byte 0x23,0x40,0xDC,0xBF +.byte 0x67,0x04,0x98,0xFB +.byte 0xFE,0x9D,0x01,0x62 +.byte 0xCD,0xAE,0x32,0x51 +.byte 0xAB,0xC8,0x54,0x37 +.byte 0x76,0x15,0x89,0xEA +.byte 0xDC,0xBF,0x23,0x40 +.byte 0x89,0xEA,0x76,0x15 +.byte 0x32,0x51,0xCD,0xAE +.byte 0x45,0x26,0xBA,0xD9 +.byte 0xBA,0xD9,0x45,0x26 diff --git a/spook/Implementations/crypto_aead/spook128mu384v2/LWC_AEAD_KAT_256_128.txt b/spook/Implementations/crypto_aead/spook128mu384v2/LWC_AEAD_KAT_256_128.txt new file mode 100644 index 0000000..bd6395b --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128mu384v2/LWC_AEAD_KAT_256_128.txt @@ -0,0 +1,7623 @@ +Count = 1 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = +CT = FFB9F39D71BE65A047856FA593AEEA0E + +Count = 2 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 00 +CT = 25F96916694475D5179BE8E92A2847AD + +Count = 3 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 0001 +CT = 23F0A62283E426EAC4A5E1839DD96BBA + +Count = 4 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102 +CT = 4B2CEE1FC0A142481CF82FD0AE1A5C28 + +Count = 5 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 00010203 +CT = 4B8B3D04C1B10497D560F4BA1765F666 + +Count = 6 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 0001020304 +CT = 81D08615DD2B368EC217C5E28EA5FAB9 + +Count = 7 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405 +CT = 29EA8503A119DA309D408DE47720E6A7 + +Count = 8 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 00010203040506 +CT = 952A992254BF6F4724C9FF692B1D1523 + +Count = 9 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 0001020304050607 +CT = AB162ADB3AD2EF8073C7811CB00F71A4 + +Count = 10 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708 +CT = 38F5822F9CCE273BC56FE0CF3FDF6A67 + +Count = 11 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 00010203040506070809 +CT = BCA92DCE93AECB683F05DFB4D22A2A19 + +Count = 12 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A +CT = 62D097F5F3400D226CD05B862C1BF5D5 + +Count = 13 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B +CT = 371BD31F6D9806A5C849C8B68443BC5C + +Count = 14 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C +CT = 19B41266304E8863A08C176942769266 + +Count = 15 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D +CT = 2F119581C44D9461C13071C9BCEF4FA8 + +Count = 16 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E +CT = A093049BE9ED47E9A69A891B42E83CAA + +Count = 17 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F +CT = D9ACD9EE10D2824B6CC68FDAC6885A1B + +Count = 18 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 5F27869C76997B28498A98752479E104 + +Count = 19 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = B26F142A706F9F7206BF2729584EAABF + +Count = 20 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 6FB891B8B76627044DFCDFE9EF30B76A + +Count = 21 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = A71024631ABAB1371AF26113D65E036E + +Count = 22 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 82015CE752F708A13D3FF936EEC08C9B + +Count = 23 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = F097942771BAF447543AEA8E6522646D + +Count = 24 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = FE9291177F926EDA7F1F6D7450DB7C7E + +Count = 25 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 8FD3B85BF91FC705F3D04886C01D369C + +Count = 26 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = D4F7C8D7A325D380DCB2972A105C0962 + +Count = 27 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 1125240A9F1F6A5702053C6F40ED71EF + +Count = 28 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 6A94296919151930B7905070155F5C96 + +Count = 29 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 5E8792FD706A5F9279BCC26A1A67F421 + +Count = 30 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 5D2EE2DB2973B97CF61CFEA8962FC4BB + +Count = 31 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 308A013BF9130CDE047AA486CF9BB0D2 + +Count = 32 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = B023B7CD735AA4F114DB8DD9537B56B6 + +Count = 33 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 6A6BEB6ACDAF5DD912AE248FC401DA80 + +Count = 34 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = +CT = F6A72423415532048B06879053D8558039 + +Count = 35 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 00 +CT = 4AB00EFDBE4D32F822FDBCF71061E0BA65 + +Count = 36 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 0001 +CT = 4D1206F0F777E8E255A9F3A8778C3FF256 + +Count = 37 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102 +CT = 203E3D17919B29630797BF7BE82DBC8F40 + +Count = 38 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 00010203 +CT = C89A41B90C06E5099AAB133F7578210139 + +Count = 39 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 0001020304 +CT = D85328613F226B01379C30D08659704118 + +Count = 40 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405 +CT = 2F72856CED90C8C4C84A3BB93F5BD9DD9B + +Count = 41 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 00010203040506 +CT = 6308BBD31AFEAB17EF7BE5853561A3E1AA + +Count = 42 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 0001020304050607 +CT = 55BA36252FDD93F1DD2D90AF233BB2ADB0 + +Count = 43 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708 +CT = 819D42213DCF5601143FF9ECE53BB38B17 + +Count = 44 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 00010203040506070809 +CT = 17BE3825CA575095B6D71564CFC1EAC34D + +Count = 45 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A +CT = 446C42E06D201EFDC718F7EA98BAF16168 + +Count = 46 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B +CT = C3DFFE09193C4222AB954CF91D94B84AA7 + +Count = 47 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C +CT = 297389BEC8EE391F00DB03D5C8AB8D73A1 + +Count = 48 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D +CT = D1805D792711EC3AA6F79964A6923F5F55 + +Count = 49 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E +CT = D0A69853A364392314C3DE5260D2637330 + +Count = 50 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F +CT = AAC98C73F7D817CBC0A50DE8AE36147104 + +Count = 51 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 8DB71B8C09B527FFFF8EC462075AB90FA9 + +Count = 52 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 52DB5DD768C9FA2CF11F1B46C2C94402A5 + +Count = 53 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 454E4EE8ADB0408456D6D15B862EC6961D + +Count = 54 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 040605E1CF7A00CBFC03BA11C574B72D75 + +Count = 55 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 7EE7B5D624F9BF389BD4052BDE78C8A75C + +Count = 56 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 1D0C7B79DAB6D3C5794B08AAABFFDC5284 + +Count = 57 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = D29AED148EF9A7926695C35B25D05ACBA0 + +Count = 58 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 7BA31954B56F35C7888E939317A41E4C8A + +Count = 59 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 32326F392BB349BC7FD8FD5EDFC0BF5559 + +Count = 60 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = DCB194A9121899BA9FFB4D367067CD5BBC + +Count = 61 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = A0DA0940E9F12BAEC132E6F4C931DDECCE + +Count = 62 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 313B0F59B9D4C19B974C3202AF07411B52 + +Count = 63 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 267B77A845E6B4680837FD8DD0482BF84E + +Count = 64 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 3CA21742F7B97EA11514FA09E0C20E5E99 + +Count = 65 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 9CA7017E3377A8CBB8CE584EF2C8E55846 + +Count = 66 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 698CEA9247B14B850F64DE19B9C12EED4E + +Count = 67 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = +CT = F65736961F795F29D4106D86934B74F7F6BD + +Count = 68 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 00 +CT = 4AE50FB148496912BEEE4E58329DE974B266 + +Count = 69 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 0001 +CT = 4DCE271D497EF13276E5B09F56314EBA39AC + +Count = 70 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102 +CT = 205D1E65DA47E3CF63EB96EFC45977385F45 + +Count = 71 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 00010203 +CT = C87A18516A292BA5B9499CF11EFC3933E2AB + +Count = 72 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 0001020304 +CT = D8E9C48CCBB09F80415B26A9C513511ED6E0 + +Count = 73 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405 +CT = 2FA09A3980CF6D11F9C8228346D238B130B0 + +Count = 74 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 00010203040506 +CT = 63CACF0692345E9FC21078B64C1D509698F6 + +Count = 75 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 0001020304050607 +CT = 552E108C7C659E68F4F37D60D0A147D2EC5E + +Count = 76 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708 +CT = 8108465ADC25DF9C6116F92CEC4C57BC55A7 + +Count = 77 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 00010203040506070809 +CT = 176C46F9E94FED5D279FE5E0B2811780039E + +Count = 78 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A +CT = 44F835131CE60CEC519A085387CD66EF7EE4 + +Count = 79 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B +CT = C385D1C17844DF170B67739C61EC37500779 + +Count = 80 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C +CT = 2917D331735BE667340987CBBEC8C411E206 + +Count = 81 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D +CT = D1AA5F531DA99BEDE0674530CDDDEB06BC42 + +Count = 82 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E +CT = D038275D0988822464725E99F4F95A941A4B + +Count = 83 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F +CT = AA262069F07703496420B33ABDB09BA14A6B + +Count = 84 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 8DFD33D8931CE9E670F72939AE136DC55D45 + +Count = 85 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 52BE4EF3312CD566B13B94E12794ADC6CF1D + +Count = 86 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 4585D43A146D0F67EC4FB45C1994C6E31CF0 + +Count = 87 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 04DC36F538940B03876AFB8401831D13515A + +Count = 88 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 7E02C351FC0ECFEA1C932B087F87D6B752EA + +Count = 89 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 1D3A45372BC2AA32986CDD2A5328BAD33E8D + +Count = 90 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = D2BA9454E64459F9CF483FEF1A2BAFE6A7A0 + +Count = 91 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 7B7ABD9251426199850799245BB7B4F81DAF + +Count = 92 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 32B0CDBFCDA8BBFD32F05355C488BE7BF59D + +Count = 93 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = DCA12E19D9CF19B48C0B8BFD26576D6DD589 + +Count = 94 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = A0CA080AA85DB0F084F8F29BCDB32CED4BDE + +Count = 95 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 3104C20BFE72C4CE0AEFAEF086889869FEAF + +Count = 96 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 26CF3F8C4B8415831BC6AD86903BEF042A5A + +Count = 97 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 3C39A6BE97589A67B0304A8A68373DF8B8DA + +Count = 98 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 9CC4CA8FA5F5124A294ACA2B81A10DEFC064 + +Count = 99 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 6919B3AD07238CDA4B856F91F6B6AF8E6514 + +Count = 100 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = +CT = F657620A64D6D5E5D32AA9594580B768FEA2F3 + +Count = 101 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 00 +CT = 4AE505CD2EE3AF938301BE36980876A46C1A0A + +Count = 102 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 0001 +CT = 4DCE34E626B3E05346EC101CE70E4D8598629B + +Count = 103 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102 +CT = 205DFAD7C4A533A237345CA398B44218E1DAD0 + +Count = 104 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 00010203 +CT = C87AD12FEC4E721CC7B7660D24B0257478F445 + +Count = 105 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 0001020304 +CT = D8E99B232B0149D999643455E1C594E7A7DD3C + +Count = 106 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405 +CT = 2FA0F6B54FB67BA86624241D89BD6D06BF5DDB + +Count = 107 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 00010203040506 +CT = 63CAA3FE2B82E9856ED913DC465AA1B40491F3 + +Count = 108 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 0001020304050607 +CT = 552EE5A3B6689A60C376385ECDB56DCE72F1EA + +Count = 109 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708 +CT = 81084229027F9279DB8AB75E0BE88560BCA4A9 + +Count = 110 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 00010203040506070809 +CT = 176C13D6D220413ABCD15D5564035FE30E2E17 + +Count = 111 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A +CT = 44F82088AF7C3FDBC6B4802F9D8DC2CDE1A4E7 + +Count = 112 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B +CT = C3851C80DE2A368A8C20165B9F9E54BC5B387E + +Count = 113 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C +CT = 2917930F8EB28FD1DB103635654AF1FA30B2AC + +Count = 114 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D +CT = D1AA307CFB25B808434D57D9344AE9B64BA8CE + +Count = 115 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E +CT = D0382B3FB01709B0E44F11D86713D315B5719E + +Count = 116 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F +CT = AA2693AACE4324DEFFF72633B2119C17B15C7C + +Count = 117 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 8DFD8DE569F5E02B2C4D995B26A62DF1D558FF + +Count = 118 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 52BE12F390D8379D6BF0741F8E1BC7E08A1682 + +Count = 119 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 4585DF8FE02FD1BEA8D93F5ABB364C36D2E1F0 + +Count = 120 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 04DCEFD13AFA893D974D8535D2064015365FF5 + +Count = 121 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 7E020F9F937195BF630E57F546EED5FDC71AF1 + +Count = 122 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 1D3A30B0C4384D2614BE09E0CF3840C3ABC2DE + +Count = 123 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = D2BA4563AEFCBD3274065CAC0393C56F158D92 + +Count = 124 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 7B7ADB990A712EB64F520B852DFB5D5DC1FA7B + +Count = 125 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 32B0DC087551910A33752E345DCFE444579B9E + +Count = 126 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = DCA1D425EADEEDF1A689BFA48206C7420A8B24 + +Count = 127 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = A0CA30C1ED2B1C219C115E068B0DEB3CD2C8A4 + +Count = 128 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 3104900DEF0B570C27F855F9EC1EA742F6FAF5 + +Count = 129 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 26CF400979795DAA8FCCBA408E6A9632746175 + +Count = 130 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 3C3982E4C00EB08068C187A5BF4F8735D77F8D + +Count = 131 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 9CC4F99C216A5630891D39760A7623F0F6E6EC + +Count = 132 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 69199DF665E5AB65F7EDCFBA5CBF2F90B73FB0 + +Count = 133 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = +CT = F65762E7D238CEAC36846ACB4A500BFE945AEDB0 + +Count = 134 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 00 +CT = 4AE50553A0ACA195C8ECB9D8D0679D9BE1610A59 + +Count = 135 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 0001 +CT = 4DCE342F21952B3A4D3F98BA094E881675DF47D1 + +Count = 136 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102 +CT = 205DFA3CC145F1BCF5D61788EEA2B99218E62C65 + +Count = 137 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 00010203 +CT = C87AD14D9DE5C48DD6B9C0C31E3AA202D3316955 + +Count = 138 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 0001020304 +CT = D8E99B30D65C6BB5088978A2CC48906A390590D8 + +Count = 139 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405 +CT = 2FA0F64098F0236C049D39D39143F2E9A6C05EC0 + +Count = 140 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 00010203040506 +CT = 63CAA3B97BB2B96FB85C0DEFDF30BC1C94902EED + +Count = 141 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 0001020304050607 +CT = 552EE50BB777664B6BBADF1DB6B1430B7F7816C5 + +Count = 142 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708 +CT = 810842200D3086096BDF4A649E9E54A3C9ACBF7B + +Count = 143 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 00010203040506070809 +CT = 176C13159C485651D572B7CF1A9EC6692DF5EB65 + +Count = 144 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A +CT = 44F820FB8B3C5CFE3068DE93BEFB534612912054 + +Count = 145 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B +CT = C3851CAAFD70B2DC2C33FFE3D4EDE0CD5727C7CC + +Count = 146 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C +CT = 2917932B8B9AD8B1B026D7091536EC50058EFF90 + +Count = 147 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D +CT = D1AA3099C66F0689A9C2ED31070A0FED156442BC + +Count = 148 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E +CT = D0382BEFA8176A335B4C802D5C8B4BF588C10477 + +Count = 149 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F +CT = AA269303EFBF1AEE065645A32E32754CC880BCA6 + +Count = 150 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 8DFD8D54FC2F223650694C411424AA9E63EC4EC3 + +Count = 151 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 52BE1230525432E8EE93FBD071D52D6A84287245 + +Count = 152 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 4585DF813039F2C338E6D85BC8A07073EA2B5A0C + +Count = 153 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 04DCEF19BFF2EC93F9D8C6EDBDA01E1F3EFACE88 + +Count = 154 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 7E020FE5FB37DB21DAFF01C3E5B9EEEA3484216C + +Count = 155 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 1D3A306EFD7B6E8D87DE2F2ADF11B485FB0FDAFA + +Count = 156 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = D2BA45E36E1D3AB4CC8BCC43596022511DD79D55 + +Count = 157 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 7B7ADB408D8D13F47FD6557B885292A2DE8ABE0C + +Count = 158 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 32B0DCA21E7DF927C6E01140CEFD956809194527 + +Count = 159 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = DCA1D44E676B4A3479EBA34687852666A12E0EB4 + +Count = 160 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = A0CA308D0F1E941997069ACC0A8A718536CAC4B4 + +Count = 161 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 31049030DAF5DE0F4CB94F2E732847E63E7F68EE + +Count = 162 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 26CF401B22E24D0C018FD0A943883AD8E624805C + +Count = 163 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 3C398223BD9D568C623B8A19674265AFB72ACF1E + +Count = 164 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 9CC4F9BF82AC57D9EFC8054A38FA2E88C262D007 + +Count = 165 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 69199DA75C6AD46AC35DF8E53C46D520D5F4D01B + +Count = 166 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = +CT = F65762E72D4FAE9D36ABF5BFECDAFA367B6F2C73F7 + +Count = 167 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 00 +CT = 4AE505537189EDF133810F9CB0580D781034BCD42C + +Count = 168 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 0001 +CT = 4DCE342F925051047638121295185B9C9310BBA093 + +Count = 169 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102 +CT = 205DFA3C636FB3BEB15A0778A75627EB80802963E5 + +Count = 170 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 00010203 +CT = C87AD14D08C6CDF3FA899FE6A189261DFA8AC98806 + +Count = 171 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 0001020304 +CT = D8E99B303D2E64C89B15C5B06CD7BDAFA663A83552 + +Count = 172 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405 +CT = 2FA0F640377DD5276F69E2DCBFF9E12B93D78A0F5B + +Count = 173 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 00010203040506 +CT = 63CAA3B9A79005DBCE2F3682931C421FDA1AE48383 + +Count = 174 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 0001020304050607 +CT = 552EE50BF862816530BA3922253069BF334265F699 + +Count = 175 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708 +CT = 8108422091AE74381029A941C4D07B32248B8D0131 + +Count = 176 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 00010203040506070809 +CT = 176C1315071B5B087F01095FD4361E0727FC53045F + +Count = 177 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A +CT = 44F820FBC5CC87E6963307ABDBA350CC7720FEB4D7 + +Count = 178 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B +CT = C3851CAA87D17915AE0CCA88DD50B65A4232019036 + +Count = 179 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C +CT = 2917932BB5AAB039B24A4CA7D4B35849DC1B6D58E1 + +Count = 180 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D +CT = D1AA30993AF10E952C8C5807E55B32340FBBE8FE69 + +Count = 181 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E +CT = D0382BEF328D0601AFDC9469810EB8132FED0AA3C2 + +Count = 182 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F +CT = AA269303B2DAB6ED39A4CB3BC9E846EDE4F04E607C + +Count = 183 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 8DFD8D547633D4CA6D651EF3034469F998905CBC96 + +Count = 184 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 52BE1230D284FC36546A98345FD690E7190D959BD2 + +Count = 185 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 4585DF81345D654F9332A23A3B1694B64467E269EE + +Count = 186 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 04DCEF193B9903193BF1ADEE29FE880855D68F2563 + +Count = 187 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 7E020FE57A5DC380BFA4AD06FB22EB605269840073 + +Count = 188 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 1D3A306E3F45E1F09F1AB4F3D2F9CB674778F84449 + +Count = 189 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = D2BA45E32924AEF546B3B29C0ED62312A02244DA5D + +Count = 190 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 7B7ADB40B31C687BBF1156685D0C6C1AA81B768841 + +Count = 191 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 32B0DCA264FEE712B7057A6A7022FD24A305558688 + +Count = 192 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = DCA1D44EC269B2CA6887423C3F0B8D1653F0231810 + +Count = 193 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = A0CA308D97FB7BBDFE7A8BA1CDCAD962C4DFE07045 + +Count = 194 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 310490306A4AFFBC3466777F74CC694F6D3CFA4626 + +Count = 195 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 26CF401BC4EC33C0F30043314DB1ED49E3FC169555 + +Count = 196 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 3C3982239C0B7ED2D45479D7164899A4DE1A4F0F70 + +Count = 197 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 9CC4F9BF3B783E309EFCA25E462ED2230C7C1E6079 + +Count = 198 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 69199DA76E82FD0C0530E043CF742254CC4ED629D6 + +Count = 199 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = +CT = F65762E72D83A5B4B3D9EC9E834E8FF20C513E535BC4 + +Count = 200 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 00 +CT = 4AE50553719B925070C0C8A786002E1ADFE0BBBFAFBE + +Count = 201 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 0001 +CT = 4DCE342F9270A7B1D9926E669ABB9E3ED1221D1A1D59 + +Count = 202 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102 +CT = 205DFA3C63009EE73670B162888E657FFAE190915C97 + +Count = 203 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 00010203 +CT = C87AD14D0881D4893B942F4629AA66233861CAB1BC2B + +Count = 204 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 0001020304 +CT = D8E99B303D1C47A97354B8E2B29DEAA3580A067B0235 + +Count = 205 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405 +CT = 2FA0F64037560C4CDA6F99C52A3C41CB4212FCE1B33D + +Count = 206 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 00010203040506 +CT = 63CAA3B9A7276E17FC72E7E6F36D9BA3EA615EFFD7F0 + +Count = 207 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 0001020304050607 +CT = 552EE50BF8FF84FFC3CCA44DF059F9DC56F11AED708F + +Count = 208 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708 +CT = 81084220919B66856ACBE68CF59F3D6B61B41FA3FADF + +Count = 209 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 00010203040506070809 +CT = 176C131507854474D0EF339E647D6246ABB3719B04FE + +Count = 210 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A +CT = 44F820FBC52694EC9432F4F98E85EA4B9A02D5495D6B + +Count = 211 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B +CT = C3851CAA87F7C94D3ABD0AED860523975751D9F37CD0 + +Count = 212 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C +CT = 2917932BB5B097E9727499746F908ABF72833B28BF2B + +Count = 213 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D +CT = D1AA30993A1DB996AE4B076D01E72EA578272C55849C + +Count = 214 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E +CT = D0382BEF32AAEFF20C0966F075AD72B758CBA5259022 + +Count = 215 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F +CT = AA269303B27E2190F827A802A8D0F1E4AFAC93923A96 + +Count = 216 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 8DFD8D5476859E1B8537983B30035C4618C1759F6D82 + +Count = 217 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 52BE1230D2AA786800098672FEDABF90FDA5352EA092 + +Count = 218 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 4585DF8134B9130E2A77713E5ACAB88A6C480B2B7036 + +Count = 219 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 04DCEF193B194E2BB0099EC820CA8CEE2421E3EC7788 + +Count = 220 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 7E020FE57AD8BE2EAA56FD5F2D744141F1920AF3711D + +Count = 221 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 1D3A306E3F6E43BBF2E50D28E5F27CD0CFECFE754BE0 + +Count = 222 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = D2BA45E3290834C53B55AFD23F98765802D98B008D4F + +Count = 223 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 7B7ADB40B371BCA10F521520C200787EA0EFB427DC11 + +Count = 224 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 32B0DCA264AECD5AC214270AC4E6835C9EA6D31E4BF8 + +Count = 225 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = DCA1D44EC26E8A0B490A260897DA7178DFFB84DAB8B5 + +Count = 226 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = A0CA308D97ECDD260B96ECE93B716A240BB40D053BEE + +Count = 227 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 310490306A3B610D5A7AA3F0599628317A4B63B8048E + +Count = 228 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 26CF401BC474CC60C5EE6282888F212691F090CCC839 + +Count = 229 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 3C3982239CE18A589D256D544274163BC8C1EF8BA74D + +Count = 230 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 9CC4F9BF3B13056DA25B39295065C036008B4B026969 + +Count = 231 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 69199DA76E16A7B584401C086EA962367A6B2A4FCBEA + +Count = 232 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = +CT = F65762E72D837375F0C1744E1A9E43D5C0795762EF77B1 + +Count = 233 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 00 +CT = 4AE50553719B10C2B9C40D765552EC41F132B97E0A0DAC + +Count = 234 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 0001 +CT = 4DCE342F92709F531A7ED439FC28E504899B35AC09A66D + +Count = 235 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102 +CT = 205DFA3C63008BE8F69C18FBC77E2DECA987EE9176B723 + +Count = 236 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 00010203 +CT = C87AD14D08811AB65EE41172AD8069E5316E573D66F754 + +Count = 237 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 0001020304 +CT = D8E99B303D1C1BECC78AA6DC059501F8829BF6CDC3090E + +Count = 238 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405 +CT = 2FA0F6403756D4A78670493BC2FC038E4E2B3A78C221D2 + +Count = 239 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 00010203040506 +CT = 63CAA3B9A7273B6733240AC6EF1374B8396677C92B29BB + +Count = 240 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 0001020304050607 +CT = 552EE50BF8FF2738239345456C42234BCEE5469AB9D3E8 + +Count = 241 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708 +CT = 81084220919BC809638992F8ACF310E8847D164B787ED5 + +Count = 242 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 00010203040506070809 +CT = 176C131507852ADA33F1EC3C62EC0F3072A23EC7B30B9C + +Count = 243 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A +CT = 44F820FBC526885392F54BB4B8328BFB3637B45B44101B + +Count = 244 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B +CT = C3851CAA87F7D41F0B198AF5A21497DF16F04F1AEB11DC + +Count = 245 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C +CT = 2917932BB5B0F15DAE3D5D12DC2D0DA57BE6541A3C6667 + +Count = 246 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D +CT = D1AA30993A1D822CB126D27073B8FD8C10778007C98FA4 + +Count = 247 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E +CT = D0382BEF32AA161BC056D46EDD1051DC394189B28CB840 + +Count = 248 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F +CT = AA269303B27EA79BA169B0E752460D1DAD32DF30A84C4A + +Count = 249 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 8DFD8D54768576252CCFFB4713286633A88E19E4904F76 + +Count = 250 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 52BE1230D2AA3146EDD4E4A6C81B058CCFA7800A598C00 + +Count = 251 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 4585DF8134B9764B04625CC92298443C02A428E0C7F558 + +Count = 252 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 04DCEF193B191177B2AA60363B075DD203A0605947DBE1 + +Count = 253 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 7E020FE57AD8171202655C82DFBA016D5B9D4505A383EF + +Count = 254 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 1D3A306E3F6ED9FC5A14B52FB3E876CA01FCE17CCBD0D7 + +Count = 255 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = D2BA45E329081E07F40D43FD7EA8D2149BBEAF7C3B6063 + +Count = 256 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 7B7ADB40B3718EB0C8757E33D5572AEE0E90982583BEAC + +Count = 257 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 32B0DCA264AED83602F865D460730E6B45EAE23A6ED29A + +Count = 258 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = DCA1D44EC26EC0893A173FAE1BCD4323C437AED3541E6B + +Count = 259 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = A0CA308D97EC788D3FE06B2C9DBC6EAF21189B607AB841 + +Count = 260 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 310490306A3B5E8DC5ADA00FB67939FDAF9258A12B944F + +Count = 261 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 26CF401BC4747E3B26C198A5630F9F3C80FE7DE78870CF + +Count = 262 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 3C3982239CE1B9DE7838706E1D73AF9596781513C64604 + +Count = 263 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 9CC4F9BF3B13B967740268412463C6AA7CA9EB4E8348F8 + +Count = 264 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 69199DA76E16F6BA10C985D842203D85CD8BF5492D3AAA + +Count = 265 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = +CT = F65762E72D83738EA863884A59292B6975AE030F0E47020D + +Count = 266 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 00 +CT = 4AE50553719B101644DF4507C9B5117419C3629EA8C73A30 + +Count = 267 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 0001 +CT = 4DCE342F92709F329A5DB88A5EF53E431EFF2B907BEA2CFF + +Count = 268 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102 +CT = 205DFA3C63008B099E419B2A2DF0D8C41097053146CAE120 + +Count = 269 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 00010203 +CT = C87AD14D08811A727E906ABDCC71636E104E1E04685A2570 + +Count = 270 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 0001020304 +CT = D8E99B303D1C1B8001DBCA1FC5E96E8B9F3365A1D90A357A + +Count = 271 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405 +CT = 2FA0F6403756D41DDE9EE04CD241BBD61F86C7777BB5057D + +Count = 272 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 00010203040506 +CT = 63CAA3B9A7273B19C9265BDEC662CFA741C5977D6E46720B + +Count = 273 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 0001020304050607 +CT = 552EE50BF8FF278FB261380D1F2246DA34946760A6EB0B07 + +Count = 274 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708 +CT = 81084220919BC8016342DC8BDE611788D6940E47635A51AA + +Count = 275 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 00010203040506070809 +CT = 176C131507852AD8CEF1C44AD5F0B34E48A6C015BEF9ED05 + +Count = 276 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A +CT = 44F820FBC5268819F34FFAC18F2086C8CB473B19E3F46B48 + +Count = 277 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B +CT = C3851CAA87F7D4256A5E67B8DD7D0C3B0B510CD435971AC7 + +Count = 278 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C +CT = 2917932BB5B0F161EF1D76DC0035B6AD8D04899199E812F6 + +Count = 279 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D +CT = D1AA30993A1D82CA544E1CA4A6178CF023525960D909DB63 + +Count = 280 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E +CT = D0382BEF32AA160BFC364C38A4D16A2A7289F6219C104D14 + +Count = 281 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F +CT = AA269303B27EA790C87D51E6745CBB45136156B283AA35C6 + +Count = 282 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 8DFD8D54768576392DFA108CBCD8B762B14A6A04987BCFBB + +Count = 283 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 52BE1230D2AA31E96272F7A38C21B8F2D72F9E4313C5D142 + +Count = 284 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 4585DF8134B976823AF2641D82A40E3E79CA9014E8541E01 + +Count = 285 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 04DCEF193B19114574B4A8ECC5CE1C1A008676816AED590F + +Count = 286 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 7E020FE57AD817155A18EEC9E0899DE17E77948D709088AA + +Count = 287 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 1D3A306E3F6ED9D22E974D31B52F3067AB560E18DE73D5A7 + +Count = 288 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = D2BA45E329081E6E52853EBA47717B77AC3257ADBD064D8C + +Count = 289 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 7B7ADB40B3718EE268AB2F89D0F08505FD892EC2F6DC8BB5 + +Count = 290 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 32B0DCA264AED873E44D15DBE610A74EE0E4A4FE995C24CB + +Count = 291 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = DCA1D44EC26EC0986D6DD3FC903257D8760004F44D83AAE1 + +Count = 292 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = A0CA308D97EC78D01F1AF00C8FCB31584BBE76B737BEB2FC + +Count = 293 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 310490306A3B5E797AFDB7F9483D320CB60D036249564CF9 + +Count = 294 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 26CF401BC4747EA97BDE8CD35D820642F6D77C2A28AFF8F9 + +Count = 295 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 3C3982239CE1B9CA80145796D10F4267BC2258D6223DAF88 + +Count = 296 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 9CC4F9BF3B13B90E80D20E4F76BB4918ADC6A22DF9FE885F + +Count = 297 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 69199DA76E16F693A138216C08DBE1DD1C82BBD6D45C1610 + +Count = 298 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = +CT = F65762E72D83738E7076D8FAAE183A1920F5B4E7FC39A8861A + +Count = 299 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 00 +CT = 4AE50553719B101622EE329D70A10D64FA5D030EF6BD6E2A61 + +Count = 300 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 0001 +CT = 4DCE342F92709F3235637EC915E59C1D4730CC84AE91CFA5C9 + +Count = 301 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102 +CT = 205DFA3C63008B098C552AA697A0D982B244FE29AE1EB2AB7D + +Count = 302 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 00010203 +CT = C87AD14D08811A728843413C033EEA07066204B69DE24DBF2D + +Count = 303 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 0001020304 +CT = D8E99B303D1C1B805212ACCF1502C037442ADEAD82E765FDB1 + +Count = 304 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405 +CT = 2FA0F6403756D41DD3975455EC37A97FD18B2B9C1B02D986BF + +Count = 305 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 00010203040506 +CT = 63CAA3B9A7273B19FBA789CA4CDBCAEA71E8324FE184688CB1 + +Count = 306 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 0001020304050607 +CT = 552EE50BF8FF278F28ACDF86CA6FCF4845AD2982814AC05EC8 + +Count = 307 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708 +CT = 81084220919BC801D2884F7A64914D767AC5E1A8F529802E58 + +Count = 308 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 00010203040506070809 +CT = 176C131507852AD86769D60C48B1435C3C3A2B7D3647E4B3A9 + +Count = 309 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A +CT = 44F820FBC52688195EA57FBF2BDD60839DB42530E2FA0ABDE7 + +Count = 310 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B +CT = C3851CAA87F7D42542BE60D6A688B4A803D7CEBABF9BD35966 + +Count = 311 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C +CT = 2917932BB5B0F1613D68E82CB8B97A011CD8543A9626F21565 + +Count = 312 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D +CT = D1AA30993A1D82CADFB0FD602442ED2C254578A25D4BB0B6A5 + +Count = 313 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E +CT = D0382BEF32AA160B812845EF7D44124CF6D349FC5A461E1498 + +Count = 314 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F +CT = AA269303B27EA790F1FB296554F1A098889EB36DE1B4FE3B00 + +Count = 315 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 8DFD8D54768576390BFF0347A8FBEBB274170E81AB8A058602 + +Count = 316 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 52BE1230D2AA31E969D9D625CAE091AC39710FC96D102BFC3C + +Count = 317 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 4585DF8134B976825BC727083A5FB48576EB0317D64841177D + +Count = 318 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 04DCEF193B191145B33E21AE20DDE67A90FFAC141863B3D053 + +Count = 319 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 7E020FE57AD817158A2A2C1279CFF5993ECA5B94FCCB7C152A + +Count = 320 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 1D3A306E3F6ED9D2A977C0206E1477E2D040A0960E3710A2A6 + +Count = 321 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = D2BA45E329081E6EFC636CEEA926D31FC691B132214D4B7739 + +Count = 322 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 7B7ADB40B3718EE2C1655F855AAA54ECD0D7C631DA45BCCC39 + +Count = 323 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 32B0DCA264AED8730FCEF36819B599185B662C6CFFF51B2503 + +Count = 324 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = DCA1D44EC26EC098CDF6E746056A564A987AFACAB9E4FA1E75 + +Count = 325 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = A0CA308D97EC78D01E9751825FE366149E64053738C3468C8F + +Count = 326 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 310490306A3B5E79BFC516C4AA2A38DC723EAE02DEA4001D6E + +Count = 327 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 26CF401BC4747EA96FAC6D5A023D0F558D77C7573B8BCF7ACE + +Count = 328 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 3C3982239CE1B9CAF8A55DD94AF5CD14CF5F023637EEDFA188 + +Count = 329 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 9CC4F9BF3B13B90EC508CAA527F9FF72FED3895F16F412079E + +Count = 330 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 69199DA76E16F693EE3BE35F9381C4F66D70D2AE85D1E26576 + +Count = 331 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = +CT = F65762E72D83738E70493BA1D156E157D971D15A33A8E1AE553B + +Count = 332 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 00 +CT = 4AE50553719B1016223C228E679D899BB8640A1CE096C9E5FC6E + +Count = 333 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 0001 +CT = 4DCE342F92709F323532CDA1F7F9BE59FB2708F814AFF520EE39 + +Count = 334 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102 +CT = 205DFA3C63008B098CD68684B3D6B5F94D45346218BA45F3EAE0 + +Count = 335 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 00010203 +CT = C87AD14D08811A72884016A77F986AA608FB125885A91A0CF160 + +Count = 336 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 0001020304 +CT = D8E99B303D1C1B8052D847CCE074B085E9044505D7B8F11F2455 + +Count = 337 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405 +CT = 2FA0F6403756D41DD30FD4ADBF674BAF70C57023C87AE0028C94 + +Count = 338 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 00010203040506 +CT = 63CAA3B9A7273B19FBB1674A3A60A65D60EA32B443EECBC384F7 + +Count = 339 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 0001020304050607 +CT = 552EE50BF8FF278F287286F7E1D62893D3E73A1E37025760B82B + +Count = 340 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708 +CT = 81084220919BC801D2B2537568355C9010E8343A55CCB608335C + +Count = 341 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 00010203040506070809 +CT = 176C131507852AD8677851A87EB77B1463D0BBA3BCDA974FCF1E + +Count = 342 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A +CT = 44F820FBC52688195E88A160D48112D1600280C15DD7823DEB44 + +Count = 343 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B +CT = C3851CAA87F7D42542045393414C0F2E5C70E0176D22ADEA9E35 + +Count = 344 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C +CT = 2917932BB5B0F1613D633A421726C0314006F7C94BAE96E0F0F2 + +Count = 345 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D +CT = D1AA30993A1D82CADFD3F02086311B85AE89F0F84AC6577ACD0B + +Count = 346 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E +CT = D0382BEF32AA160B81DD21CC45CAA472A6CC9F6B33C702E2EDD2 + +Count = 347 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F +CT = AA269303B27EA790F1650B9D8D4F7796DD83F59F24076FA55945 + +Count = 348 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 8DFD8D54768576390BE81F32AD782C102AB6091FDF13154F6374 + +Count = 349 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 52BE1230D2AA31E9698B349B7CCF80428B259745ADA4117AF272 + +Count = 350 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 4585DF8134B976825B316EB0F1CF36C2375525ADD834C25D86A2 + +Count = 351 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 04DCEF193B191145B3166CFEBEB012AC0D9B84492909F32DDF65 + +Count = 352 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 7E020FE57AD817158A8DE33A4B30E14C78147BEC8B6D9FA04E1E + +Count = 353 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 1D3A306E3F6ED9D2A95DE61856AEE3A3973B20A186F48F7A64E9 + +Count = 354 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = D2BA45E329081E6EFCB7ADC912D64243BAEE6EE6C0055C6FBA85 + +Count = 355 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 7B7ADB40B3718EE2C1C51E9964884A096FD34534C45A91789453 + +Count = 356 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 32B0DCA264AED8730F307009E0319192C887B13682200B928259 + +Count = 357 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = DCA1D44EC26EC098CD42FF71EE037FE7D7887B3A5C32E172FB4D + +Count = 358 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = A0CA308D97EC78D01EF427D8A25A1433F1658DD5B17DF0B153F9 + +Count = 359 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 310490306A3B5E79BF22A983208F2A353AD63E7A03C703382341 + +Count = 360 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 26CF401BC4747EA96F03F696FBDDB27F5FF35B21689108439A50 + +Count = 361 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 3C3982239CE1B9CAF876B7C45F95A814F0C27F0A8A323640EFBA + +Count = 362 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 9CC4F9BF3B13B90EC536DDB74BE68D85377FBEEE0EC1015E2DFD + +Count = 363 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 69199DA76E16F693EEB1F826ACE8FECDF0F2868EE88342FA0AD7 + +Count = 364 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = +CT = F65762E72D83738E70498E4E4F03B7B4133062F30B1436AA086EE5 + +Count = 365 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 00 +CT = 4AE50553719B1016223C20BF83A22E45761BE01A31137EA026E031 + +Count = 366 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 0001 +CT = 4DCE342F92709F323532F64395F0537959E790F742E91B5D43B2FE + +Count = 367 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102 +CT = 205DFA3C63008B098CD6A7AFA8E0F81A9211693A67BE22E1BB9BA1 + +Count = 368 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 00010203 +CT = C87AD14D08811A728840A7CF1061273A62DE2A090E33CF26448F25 + +Count = 369 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 0001020304 +CT = D8E99B303D1C1B8052D8FA7E19874982D080D3592A33EACED2C94A + +Count = 370 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405 +CT = 2FA0F6403756D41DD30F3F6DE794EF1E73E465C5376A5CF0D8786E + +Count = 371 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 00010203040506 +CT = 63CAA3B9A7273B19FBB1E1E981F1AD6082331A7ADD164C3342B973 + +Count = 372 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 0001020304050607 +CT = 552EE50BF8FF278F28723DADC10DDFF0C4D173F1A171AFB8E2C89E + +Count = 373 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708 +CT = 81084220919BC801D2B2BA2F77D9283129D6EB2BE3D48E0EEBD97E + +Count = 374 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 00010203040506070809 +CT = 176C131507852AD867788FEC9377D7B5676C13F7B6384270B1A378 + +Count = 375 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A +CT = 44F820FBC52688195E88135570F84460869C9E6B0A19D237DB0883 + +Count = 376 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B +CT = C3851CAA87F7D42542047350B7F8F619B779610D216862C3ABC058 + +Count = 377 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C +CT = 2917932BB5B0F1613D6330BED44250876E4BBC9EE30848EFC29146 + +Count = 378 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D +CT = D1AA30993A1D82CADFD3324E0F130F3091F6D781ED8097C4BF4206 + +Count = 379 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E +CT = D0382BEF32AA160B81DD720273E39DB24B7725E606A224DB6FE976 + +Count = 380 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F +CT = AA269303B27EA790F165A891403348744EB3F7090BC1D816B87DDD + +Count = 381 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 8DFD8D54768576390BE82BBDBC5DAD54D6B4895988AA7423DBFACF + +Count = 382 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 52BE1230D2AA31E9698B60E340323085B488B98363EF3BEFB935BB + +Count = 383 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 4585DF8134B976825B3172192DB9E3B49025BE13CC3AB3E771F938 + +Count = 384 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 04DCEF193B191145B3163E73A9BE2EDDDFEA9CBF26233D0B503115 + +Count = 385 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 7E020FE57AD817158A8D304B90E22E88A91D582C6FCA027B76E1C1 + +Count = 386 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 1D3A306E3F6ED9D2A95D290A94E53F41CC84AAB9B677A5C4F1DC21 + +Count = 387 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = D2BA45E329081E6EFCB743ED6B25394C492B47587FDDD68F6653DF + +Count = 388 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 7B7ADB40B3718EE2C1C5D66ED041FFECD50A801253BF5E593FF2DC + +Count = 389 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 32B0DCA264AED8730F306AD2BC02FEABCCA1C5865FF90684387140 + +Count = 390 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = DCA1D44EC26EC098CD42BFB671A3B3265B6239557622FE1306F67E + +Count = 391 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = A0CA308D97EC78D01EF45BC314C84828DE7A5BE9F7E76154F2123B + +Count = 392 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 310490306A3B5E79BF2247FD0000E43C2FBA4DF4D591EA271FAAFF + +Count = 393 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 26CF401BC4747EA96F035415000A1494F64AB21929FC37A7870618 + +Count = 394 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 3C3982239CE1B9CAF876E4F28483867265793578930B94BA1A7924 + +Count = 395 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 9CC4F9BF3B13B90EC5365D7B7FFCA49A9A29AD04E237C98FC3DCBE + +Count = 396 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 69199DA76E16F693EEB1BA6149B62E8AE0858E78C89CC424EBDF89 + +Count = 397 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = +CT = F65762E72D83738E70498EADBDFBB6302D5B689EC62CC701E76A8A02 + +Count = 398 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 00 +CT = 4AE50553719B1016223C203A5EB84A092116E2E90E37356F1F83ADE4 + +Count = 399 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 0001 +CT = 4DCE342F92709F323532F63B5F0E583B27667FE194621C88156682E9 + +Count = 400 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102 +CT = 205DFA3C63008B098CD6A7D55362B83FA75A1208D421D9D7B39FAC23 + +Count = 401 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 00010203 +CT = C87AD14D08811A728840A7B44B85CCA68DDA05D615CE5A7BAD9805BA + +Count = 402 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 0001020304 +CT = D8E99B303D1C1B8052D8FA66605AB4E5E740643A0A48B6014E05D893 + +Count = 403 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405 +CT = 2FA0F6403756D41DD30F3F34CD76F5012F438640BCE9AD4830DFD5C0 + +Count = 404 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 00010203040506 +CT = 63CAA3B9A7273B19FBB1E10E01C53D3C99CDE03B148A3E2595498262 + +Count = 405 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 0001020304050607 +CT = 552EE50BF8FF278F28723DDAC79962F38792CE7A62CB4CC51CD4F744 + +Count = 406 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708 +CT = 81084220919BC801D2B2BAAA5BB23BEFF16B86F45318533950A99C55 + +Count = 407 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 00010203040506070809 +CT = 176C131507852AD867788F1BFEDF2A9046361FEA74BCD301C23D4DB0 + +Count = 408 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A +CT = 44F820FBC52688195E88130DDFE7CD4E1D8E94D536248754AEA38AE0 + +Count = 409 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B +CT = C3851CAA87F7D4254204738C6D40C8A4FEE3A82764719306628C3508 + +Count = 410 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C +CT = 2917932BB5B0F1613D63304490A987682DF2E0A128F03FDE7EC7E2AB + +Count = 411 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D +CT = D1AA30993A1D82CADFD332D7882F3EE43F8416B7331EC73AA8FFDC64 + +Count = 412 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E +CT = D0382BEF32AA160B81DD72003268E7B10A410E27CB7BB12180D00E12 + +Count = 413 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F +CT = AA269303B27EA790F165A847DE1977EA3A7BDBAEB4F53D6ADA4D8987 + +Count = 414 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 8DFD8D54768576390BE82B936DE522FDB17FC0AA5A21DE0B5081661A + +Count = 415 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 52BE1230D2AA31E9698B60505278E27B96738BBD3EB290104D81088C + +Count = 416 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 4585DF8134B976825B317254D0BA557E1F9C7B70370A9328AEDF2127 + +Count = 417 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 04DCEF193B191145B3163E193504254022E5567DC5B529C53E99C873 + +Count = 418 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 7E020FE57AD817158A8D30E6B8BEFEF0B7FE4A641923A4C18B798546 + +Count = 419 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 1D3A306E3F6ED9D2A95D293C959CC7D958ACB5C050FE42423FD1245D + +Count = 420 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = D2BA45E329081E6EFCB7432211AF6203F5EDE9E1594266B49A43F8AC + +Count = 421 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 7B7ADB40B3718EE2C1C5D6EE54B9014606D38C42007BB0E98935CFC0 + +Count = 422 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 32B0DCA264AED8730F306A24C0FC845A26D1FC847209456C0BA15028 + +Count = 423 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = DCA1D44EC26EC098CD42BF050245BB19070EE2F3BE4A2413FF44F4E8 + +Count = 424 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = A0CA308D97EC78D01EF45BD311318FABEB704C7CC262C108978A8CE1 + +Count = 425 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 310490306A3B5E79BF2247B002CBD11592CAD0CBB7F1FF996E29C6E1 + +Count = 426 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 26CF401BC4747EA96F03545551F5CD81C91F12FC79F417F18F9E8F10 + +Count = 427 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 3C3982239CE1B9CAF876E432CA8E918543872062DD9C296A13BD7F12 + +Count = 428 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 9CC4F9BF3B13B90EC5365DC2897896A9E32EE2CCBFA572B602CEF53B + +Count = 429 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 69199DA76E16F693EEB1BAE168E2F8EE1E19F7DE9E8067443D6E9AC9 + +Count = 430 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = +CT = F65762E72D83738E70498EAD2730A55DA8921921D036ADC6704954F96F + +Count = 431 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 00 +CT = 4AE50553719B1016223C203ABC46DF32C5CD7B736DD9D8A266DE1DD8A5 + +Count = 432 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 0001 +CT = 4DCE342F92709F323532F63B6462DAE58AC31C2719F18C1F3177F492EE + +Count = 433 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102 +CT = 205DFA3C63008B098CD6A7D520CCF457067FA63DF333F0E5A8ACA42E6B + +Count = 434 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 00010203 +CT = C87AD14D08811A728840A7B4B4A491C52771AACEDE0F182E60D3BDB386 + +Count = 435 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 0001020304 +CT = D8E99B303D1C1B8052D8FA66966CB718233F96E2B0330616CE0A0B993D + +Count = 436 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405 +CT = 2FA0F6403756D41DD30F3F34066A9DD9FC965352D7EC53A8146D2B7856 + +Count = 437 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 00010203040506 +CT = 63CAA3B9A7273B19FBB1E10EFCCA69ACB4328FA367A55507F758848611 + +Count = 438 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 0001020304050607 +CT = 552EE50BF8FF278F28723DDA1BC68B9B1D2066748E69742F26C34796BE + +Count = 439 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708 +CT = 81084220919BC801D2B2BAAA353C6AA9D9D077D24D6D4AACC9CB47CAC7 + +Count = 440 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 00010203040506070809 +CT = 176C131507852AD867788F1B8CDE3540FC621A20FEA7F8CFC828747AB2 + +Count = 441 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A +CT = 44F820FBC52688195E88130DF700933652501B91365A90691D7D946147 + +Count = 442 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B +CT = C3851CAA87F7D4254204738CCE6A80B22149EE8AFA3B18A3FC5671D0F5 + +Count = 443 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C +CT = 2917932BB5B0F1613D63304478A30AFE1306569B8EB62A7757251DC678 + +Count = 444 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D +CT = D1AA30993A1D82CADFD332D716E3289F4BD18668B4D2342702C16C2042 + +Count = 445 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E +CT = D0382BEF32AA160B81DD720006EB79500B75BDF04A69660804C873827F + +Count = 446 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F +CT = AA269303B27EA790F165A84756909B6191645A384ECB9331DEC6D6438E + +Count = 447 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 8DFD8D54768576390BE82B9363750EF53EC8FFB8261FC47301784EBDEC + +Count = 448 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 52BE1230D2AA31E9698B6050832D3AB7B5D8DE87E54CAD4AC39F0C34EE + +Count = 449 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 4585DF8134B976825B31725459377C659B21FD3B736E5F41198FA56E8F + +Count = 450 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 04DCEF193B191145B3163E192B686EDD1A43A3B84B04AD602661184FA9 + +Count = 451 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 7E020FE57AD817158A8D30E6888B3D53987D3164803F1E5AE0198A8C9F + +Count = 452 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 1D3A306E3F6ED9D2A95D293C6BED9C94BF47BD39029C5C0D166DE00C49 + +Count = 453 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = D2BA45E329081E6EFCB7432250CF6F036D461158C6E71EC21829F3E170 + +Count = 454 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 7B7ADB40B3718EE2C1C5D6EEBA51776A9630D1E414E31F3CAC90FC1D14 + +Count = 455 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 32B0DCA264AED8730F306A245FAD86E1112A0A490480ED9E91346FB872 + +Count = 456 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = DCA1D44EC26EC098CD42BF05C66064C08482DB4762A309A2800B2C05B3 + +Count = 457 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = A0CA308D97EC78D01EF45BD386939B4A471B77A02FE9699D46D2494E3E + +Count = 458 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 310490306A3B5E79BF2247B09A7C9AE925AE0FD55418C8F9B16FF06F1B + +Count = 459 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 26CF401BC4747EA96F0354556EC7F1B8C03BE6A33579CE66F685F646C7 + +Count = 460 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 3C3982239CE1B9CAF876E432F3E96856B7B9B92EC4687DD20BDBD1EEDB + +Count = 461 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 9CC4F9BF3B13B90EC5365DC2E885F99AABC0F2B03024684F243C448B6D + +Count = 462 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 69199DA76E16F693EEB1BAE1C2DD79F679AE91D053281B9B7C7C693772 + +Count = 463 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = +CT = F65762E72D83738E70498EAD27BEFE0B770192BB8F71B47B8BE5D0A40A4B + +Count = 464 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 00 +CT = 4AE50553719B1016223C203ABC3245D9FF42B3D0ED3C531048A741393D3E + +Count = 465 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 0001 +CT = 4DCE342F92709F323532F63B646B699B77021EE3EDF95DA9EE2F4854C8D0 + +Count = 466 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102 +CT = 205DFA3C63008B098CD6A7D52015004DF8551CB218185D1774D72C7CD93B + +Count = 467 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 00010203 +CT = C87AD14D08811A728840A7B4B4450DD67F30D14A4D2728633EE890E3C6FD + +Count = 468 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 0001020304 +CT = D8E99B303D1C1B8052D8FA6696787A22F758CD58CC4198F38C809E2A2575 + +Count = 469 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405 +CT = 2FA0F6403756D41DD30F3F3406D8AC5A5547DF5289A5F8EF32B38C72FA29 + +Count = 470 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 00010203040506 +CT = 63CAA3B9A7273B19FBB1E10EFCBF803AFBDC287B74F711B965631D175DCD + +Count = 471 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 0001020304050607 +CT = 552EE50BF8FF278F28723DDA1BED9B780594D0FCF8A89DCCCE65ABA20E21 + +Count = 472 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708 +CT = 81084220919BC801D2B2BAAA35ED965FB41EE122E972A0882DA436E9A6F2 + +Count = 473 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 00010203040506070809 +CT = 176C131507852AD867788F1B8C33761607570E47B2EBC67893A3287FA99A + +Count = 474 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A +CT = 44F820FBC52688195E88130DF72A3EE908FEF69D09CD59E61A739DD91868 + +Count = 475 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B +CT = C3851CAA87F7D4254204738CCE31B831609A966F5A241F692D5677C229E4 + +Count = 476 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C +CT = 2917932BB5B0F1613D63304478A7DF4094532156B6DEFEDD9C108B6A4F7A + +Count = 477 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D +CT = D1AA30993A1D82CADFD332D716AF687D499149F40C1CD8CC8A8AD29B6BCA + +Count = 478 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E +CT = D0382BEF32AA160B81DD7200060B92741FF20737584FAA8EB1C957FA69A5 + +Count = 479 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F +CT = AA269303B27EA790F165A847560F22AAE60C5C295C7DE1AC291640E53EC2 + +Count = 480 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 8DFD8D54768576390BE82B93636A596F71B381952A353F3A320268CDB46E + +Count = 481 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 52BE1230D2AA31E9698B6050836D92F8B73B68B3AA7EF000E9195F959717 + +Count = 482 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 4585DF8134B976825B31725459E0D99FCD7F6DA9E7849D4A32733C127387 + +Count = 483 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 04DCEF193B191145B3163E192B1FEA2D9AD0DDAC3D96C183B68FC1FCB36A + +Count = 484 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 7E020FE57AD817158A8D30E6883AE920689A5062A1209664F78E3AF0F15B + +Count = 485 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 1D3A306E3F6ED9D2A95D293C6B01F2DD1E799D91E40FB19D2403523F87E5 + +Count = 486 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = D2BA45E329081E6EFCB743225084A653CF95A21B724E410D6B30F123BE88 + +Count = 487 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 7B7ADB40B3718EE2C1C5D6EEBAEF4B9829561BF7236B8225322DCF0B4823 + +Count = 488 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 32B0DCA264AED8730F306A245F39C42B1B1CC7E24FA4C013C19586FDBB81 + +Count = 489 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = DCA1D44EC26EC098CD42BF05C6A4770F0A683B78AACD23CC3F817A8814B0 + +Count = 490 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = A0CA308D97EC78D01EF45BD386EFB90318C22F04096F53D69D07D36339B8 + +Count = 491 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 310490306A3B5E79BF2247B09A2D6AF4D63A83A1EB38D554B52761A367EB + +Count = 492 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 26CF401BC4747EA96F0354556EBF849D71BDB9CB4DE72F38DA9F35ADCDF5 + +Count = 493 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 3C3982239CE1B9CAF876E432F3D9E7BC62149EFB5DBF71F1EE00333C959A + +Count = 494 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 9CC4F9BF3B13B90EC5365DC2E831DDA68BDF324FC01FD66B1AB8EF031F96 + +Count = 495 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 69199DA76E16F693EEB1BAE1C2C8D3EC00E9D95BC5B53DE09D8EA7F282CE + +Count = 496 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = +CT = F65762E72D83738E70498EAD27BEDD57AF9414B78EA7813ACF1D727CEAEDD0 + +Count = 497 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 00 +CT = 4AE50553719B1016223C203ABC320FEE9C5BC0A858B55F2628F9CBF1042F84 + +Count = 498 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 0001 +CT = 4DCE342F92709F323532F63B646B546A546589BEF3069FC8DE577EBB0BC6A7 + +Count = 499 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102 +CT = 205DFA3C63008B098CD6A7D52015BE32AA0CCE58E875B568A682803A00F9A3 + +Count = 500 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 00010203 +CT = C87AD14D08811A728840A7B4B4459E4AFB17B1552E73BF078EA97FE75BAF5D + +Count = 501 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 0001020304 +CT = D8E99B303D1C1B8052D8FA66967821C43C023E7EFBC3A0237ACA3EB8D0E0BF + +Count = 502 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405 +CT = 2FA0F6403756D41DD30F3F3406D833EE01E82AC02A55CFF3AA4904FFD937D9 + +Count = 503 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 00010203040506 +CT = 63CAA3B9A7273B19FBB1E10EFCBF74B91C9D987A5BD060906527A9513563ED + +Count = 504 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 0001020304050607 +CT = 552EE50BF8FF278F28723DDA1BED2F6B8719571701C134C65451E8C602AC8E + +Count = 505 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708 +CT = 81084220919BC801D2B2BAAA35ED7DB9CBB1A9F9613CE468A59968967F9517 + +Count = 506 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 00010203040506070809 +CT = 176C131507852AD867788F1B8C33527718930519CC1F450F1094FAE52682D0 + +Count = 507 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A +CT = 44F820FBC52688195E88130DF72AFCD322C1294D1EC19076973ECEE471A02A + +Count = 508 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B +CT = C3851CAA87F7D4254204738CCE31911D3079F96A32215D535E1953C9DAFA83 + +Count = 509 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C +CT = 2917932BB5B0F1613D63304478A780045DD2086A814FFAE983277F817A14C0 + +Count = 510 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D +CT = D1AA30993A1D82CADFD332D716AF31798EE92B4B3B594B936CDC705C19679F + +Count = 511 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E +CT = D0382BEF32AA160B81DD7200060BAB455245908DD21A33E9DCCCB6B9564177 + +Count = 512 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F +CT = AA269303B27EA790F165A847560F1371AFDA11491A72F228CFB73DD7523985 + +Count = 513 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 8DFD8D54768576390BE82B93636A5CF4DC61DE3E80CD9750A3D5705E30FD73 + +Count = 514 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 52BE1230D2AA31E9698B6050836D30C7C6C0721B6E037ADE76D995674711BA + +Count = 515 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 4585DF8134B976825B31725459E0A15D45F56CE094A116E68543FC2298E413 + +Count = 516 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 04DCEF193B191145B3163E192B1F6CAA8C87C9BDAAEBEA653CEFCFA42E4E2B + +Count = 517 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 7E020FE57AD817158A8D30E6883A19464F2D4F70A587502431E117E7FCB03B + +Count = 518 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 1D3A306E3F6ED9D2A95D293C6B019C596A9E00AAA7193B505DE83417BCFE9D + +Count = 519 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = D2BA45E329081E6EFCB7432250842B7ACB01990F9AD79DB9BBE49DB9064A0E + +Count = 520 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 7B7ADB40B3718EE2C1C5D6EEBAEFF5E84F6C83811F3F26156061AAB00D5DBF + +Count = 521 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 32B0DCA264AED8730F306A245F39A8F11C40635276AA6463E377913B7F448B + +Count = 522 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = DCA1D44EC26EC098CD42BF05C6A41090F17514D26A99818824BF7485D811E7 + +Count = 523 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = A0CA308D97EC78D01EF45BD386EF4F1608B1B2D7E89909C95C0FFE297B1ED6 + +Count = 524 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 310490306A3B5E79BF2247B09A2D5C4B000EE7855E623F02E550F4E966CF22 + +Count = 525 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 26CF401BC4747EA96F0354556EBF97D988760F55388F868F3316FCA7D49481 + +Count = 526 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 3C3982239CE1B9CAF876E432F3D9F1C4A0A8295AE2118593EAA50D03C6715A + +Count = 527 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 9CC4F9BF3B13B90EC5365DC2E8318CE93D1BAE41DF5CD424963234F212B90E + +Count = 528 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 69199DA76E16F693EEB1BAE1C2C861FE8179F0CCD70E60A4D862222E1B04AB + +Count = 529 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = +CT = F65762E72D83738E70498EAD27BEDDA224D9646B4CAFE1A7B77B223E1B276B2B + +Count = 530 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 00 +CT = 4AE50553719B1016223C203ABC320FBD56B1D7E15F0C5F0A21CB908B071735E2 + +Count = 531 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 0001 +CT = 4DCE342F92709F323532F63B646B547232D8A7F3F8454F464B242523AC94E273 + +Count = 532 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102 +CT = 205DFA3C63008B098CD6A7D52015BE4A76C04F7166E20B88C7C363803112051B + +Count = 533 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 00010203 +CT = C87AD14D08811A728840A7B4B4459EB7351BA143721FCE05E36712DFB9EF73C7 + +Count = 534 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 0001020304 +CT = D8E99B303D1C1B8052D8FA66967821544BEAD0135446A2810B088EF0DE1A4FDA + +Count = 535 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405 +CT = 2FA0F6403756D41DD30F3F3406D83389FCC3553B4F2E7DA1B7B470B6AA14CAD0 + +Count = 536 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 00010203040506 +CT = 63CAA3B9A7273B19FBB1E10EFCBF745DDDB33910C158E36628CDE01015DE5C15 + +Count = 537 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 0001020304050607 +CT = 552EE50BF8FF278F28723DDA1BED2F59C12C22FB2D29B9137854ED4B0EF7AF0A + +Count = 538 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708 +CT = 81084220919BC801D2B2BAAA35ED7DC04486D2633D0DFC8AAE73AD25AD1339A3 + +Count = 539 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 00010203040506070809 +CT = 176C131507852AD867788F1B8C3352B40987ABB67447BFAE2B8A1C243A9F50A4 + +Count = 540 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A +CT = 44F820FBC52688195E88130DF72AFC3EB4A03E76629FC8478006BB93C15B3F2A + +Count = 541 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B +CT = C3851CAA87F7D4254204738CCE319106C5C9856B480658DADE620D88A8563806 + +Count = 542 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C +CT = 2917932BB5B0F1613D63304478A78067B3ECE114709190E86B47AF58925D520A + +Count = 543 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D +CT = D1AA30993A1D82CADFD332D716AF317A510175C0C835FB836A545A7CB35051E9 + +Count = 544 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E +CT = D0382BEF32AA160B81DD7200060BAB438988B1AF6C8437FDC54274D733F4351C + +Count = 545 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F +CT = AA269303B27EA790F165A847560F1326C2F0E8B50A87F69AEFBD01D0FCAFB49A + +Count = 546 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 8DFD8D54768576390BE82B93636A5C16892D0E3E42A795092876A77ADD3FC29C + +Count = 547 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 52BE1230D2AA31E9698B6050836D30135BE96ED43D96B972DD0054A888961539 + +Count = 548 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 4585DF8134B976825B31725459E0A155757376B4DEC6C22641FBC5591B3119E5 + +Count = 549 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 04DCEF193B191145B3163E192B1F6CC9CA6EE4B2D3E735BCCFDCE653CF533F58 + +Count = 550 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 7E020FE57AD817158A8D30E6883A19DC4443C1C10490E2451DDBA5009B88A185 + +Count = 551 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 1D3A306E3F6ED9D2A95D293C6B019C79A8CD8C727DD0B7F0A2A8EDA2E5DC20B9 + +Count = 552 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = D2BA45E329081E6EFCB7432250842B189B177F08D9DB3D70CD00E7B363852A85 + +Count = 553 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 7B7ADB40B3718EE2C1C5D6EEBAEFF57BD09C4C497FA66B35D78B396611F9E35B + +Count = 554 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 32B0DCA264AED8730F306A245F39A8746EFD970A1D185EBCCE6A71E82C298AA8 + +Count = 555 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = DCA1D44EC26EC098CD42BF05C6A4109F48BC64272C423D08F57BEC9485874441 + +Count = 556 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = A0CA308D97EC78D01EF45BD386EF4F3A12A703C15CEEB139A582305E32E84888 + +Count = 557 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 310490306A3B5E79BF2247B09A2D5CF4B84C53C5858D4A02158EAE3965505AAE + +Count = 558 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 26CF401BC4747EA96F0354556EBF97F8F0A27B2E9CE1642C109A18C513636FAA + +Count = 559 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 3C3982239CE1B9CAF876E432F3D9F192D8E27CA884803E604C50D94C91DF7B21 + +Count = 560 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 9CC4F9BF3B13B90EC5365DC2E8318CAC8F7CCB0628A3C3AD4FA89DDD32B3EC7B + +Count = 561 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 69199DA76E16F693EEB1BAE1C2C8614DB4A0649A89AC425986FFEAD9C6EE4035 + +Count = 562 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = +CT = F65762E72D83738E70498EAD27BEDDA242D4B258E4C78F07714BED2E66308464E7 + +Count = 563 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 00 +CT = 4AE50553719B1016223C203ABC320FBD75733F9325BD3510B4B06DF55385AA743E + +Count = 564 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 0001 +CT = 4DCE342F92709F323532F63B646B5472FF25450474D1D2431558DA755527DCEADC + +Count = 565 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102 +CT = 205DFA3C63008B098CD6A7D52015BE4AC86FD561ACCF7234FCEE278D60B8BD045B + +Count = 566 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 00010203 +CT = C87AD14D08811A728840A7B4B4459EB7C024B7477BD4AA0921402EB6F507C9BB36 + +Count = 567 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 0001020304 +CT = D8E99B303D1C1B8052D8FA66967821547747F0522516749D92B7C893A4C40F4B18 + +Count = 568 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405 +CT = 2FA0F6403756D41DD30F3F3406D833895257E70822CA2CF2390317F146F16DDCB3 + +Count = 569 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 00010203040506 +CT = 63CAA3B9A7273B19FBB1E10EFCBF745DDA4A93F797613997F54FF9A2DE2B9B8104 + +Count = 570 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 0001020304050607 +CT = 552EE50BF8FF278F28723DDA1BED2F59573E77B2F1B1856DA66B3923B35967F0A4 + +Count = 571 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708 +CT = 81084220919BC801D2B2BAAA35ED7DC06B0ABA3838230BB8570560F9938D03B8C5 + +Count = 572 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 00010203040506070809 +CT = 176C131507852AD867788F1B8C3352B41ADE273C13FFA51300C60280D38443052D + +Count = 573 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A +CT = 44F820FBC52688195E88130DF72AFC3E40494FB9F1F243569337015ECD28BD336C + +Count = 574 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B +CT = C3851CAA87F7D4254204738CCE319106F6F5020B9BD85DEED3089FC810F026C99C + +Count = 575 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C +CT = 2917932BB5B0F1613D63304478A7806763F27F2F0EDE2FAFBCD82EFB56FC27E7C6 + +Count = 576 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D +CT = D1AA30993A1D82CADFD332D716AF317ADF43488DE4A101B664F3C3166962D673D3 + +Count = 577 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E +CT = D0382BEF32AA160B81DD7200060BAB43479BF1284A792E751C51F2CE7A8C375FD9 + +Count = 578 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F +CT = AA269303B27EA790F165A847560F1326A054FCB565B8267774C05E6CAA5B0744B6 + +Count = 579 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 8DFD8D54768576390BE82B93636A5C16C98A54D8183EE96B1D0815F7CE0C3B4B80 + +Count = 580 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 52BE1230D2AA31E9698B6050836D301388E756C45526351213A149DF6FD0B5F2E2 + +Count = 581 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 4585DF8134B976825B31725459E0A155E568BFDEC0606B3DBAB2385DAD7BD3C5FF + +Count = 582 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 04DCEF193B191145B3163E192B1F6CC9CF54F64125F06B167D628EBBD614563F34 + +Count = 583 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 7E020FE57AD817158A8D30E6883A19DC7A92A1857B190424C2C6EFB22082A67986 + +Count = 584 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 1D3A306E3F6ED9D2A95D293C6B019C79560C66385410AA4F3BF6EF9D54041171B5 + +Count = 585 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = D2BA45E329081E6EFCB7432250842B18DFEFD3B1FD03B21082A82FFA023EF5295E + +Count = 586 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 7B7ADB40B3718EE2C1C5D6EEBAEFF57B53BAA90CACDA4A359AF13A8EA8F0983651 + +Count = 587 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 32B0DCA264AED8730F306A245F39A8740357E2B04CB710B1F5C24F2C370817FD14 + +Count = 588 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = DCA1D44EC26EC098CD42BF05C6A4109F13A59E9D18D20683328B571936847BE42B + +Count = 589 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = A0CA308D97EC78D01EF45BD386EF4F3ADAFD8B33613BEE615141FAC42306CEFED5 + +Count = 590 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 310490306A3B5E79BF2247B09A2D5CF482B03D21FB13404189D57B087B6FBABE8E + +Count = 591 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 26CF401BC4747EA96F0354556EBF97F8429CFB73CE60BE0C313C484586A07D0C2E + +Count = 592 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 3C3982239CE1B9CAF876E432F3D9F192F78F9D447A472986B66B0442E1AA92EFEB + +Count = 593 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 9CC4F9BF3B13B90EC5365DC2E8318CAC6F44D9B8B21880F9AD38102BBB2A5B9CBD + +Count = 594 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 69199DA76E16F693EEB1BAE1C2C8614D18299275FDA64F90802F00FE9F33CFF3CA + +Count = 595 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = +CT = F65762E72D83738E70498EAD27BEDDA2426C60F096214A838E83D8D63D74D2D0FBC5 + +Count = 596 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 00 +CT = 4AE50553719B1016223C203ABC320FBD758FF5D4D9E41ED34CD4D7C5C779A29B2060 + +Count = 597 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 0001 +CT = 4DCE342F92709F323532F63B646B5472FF7B1C1987D951F5044DEA7A58FF15D4BC32 + +Count = 598 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102 +CT = 205DFA3C63008B098CD6A7D52015BE4AC8FBDA0A6CFF9EBF8FB3067274222D484FDE + +Count = 599 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 00010203 +CT = C87AD14D08811A728840A7B4B4459EB7C03844895D8321B5AF824406E21B57C2FED9 + +Count = 600 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 0001020304 +CT = D8E99B303D1C1B8052D8FA6696782154773AB221B615185D18F9F20696FDF0AFF377 + +Count = 601 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405 +CT = 2FA0F6403756D41DD30F3F3406D83389520BF609CA3F814CDAA776952FBC5D3AA794 + +Count = 602 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 00010203040506 +CT = 63CAA3B9A7273B19FBB1E10EFCBF745DDADFF1EA3AA381971D8D039DE5FAA374F31D + +Count = 603 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 0001020304050607 +CT = 552EE50BF8FF278F28723DDA1BED2F5957D43B10BA12D6818404678029821DFEE810 + +Count = 604 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708 +CT = 81084220919BC801D2B2BAAA35ED7DC06B805265CB4E038FC955EB822BC22E98EE44 + +Count = 605 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 00010203040506070809 +CT = 176C131507852AD867788F1B8C3352B41AECE5D31653A9B26792FEB37674ABCD4CF3 + +Count = 606 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A +CT = 44F820FBC52688195E88130DF72AFC3E40E8DFE1B6A62AD1F5AB6D9F006CBD70F31D + +Count = 607 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B +CT = C3851CAA87F7D4254204738CCE319106F6465E491FE296CFCAF931964E6AEC595BFD + +Count = 608 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C +CT = 2917932BB5B0F1613D63304478A7806763AEB17D7CC7A5686312A8419597D23C407D + +Count = 609 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D +CT = D1AA30993A1D82CADFD332D716AF317ADF9566A90754B1385E4F5B6BA930BFBCA959 + +Count = 610 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E +CT = D0382BEF32AA160B81DD7200060BAB4347A0BCD1A0F3C5A9C8ECD92662D309DFEF5C + +Count = 611 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F +CT = AA269303B27EA790F165A847560F1326A092EF263C2279483CEFA1C942D47243D916 + +Count = 612 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 8DFD8D54768576390BE82B93636A5C16C91DE839463D36A80F00CAC6BBF495C3FA70 + +Count = 613 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 52BE1230D2AA31E9698B6050836D301388F638AFEE461257FF3FD286CAF8270C0092 + +Count = 614 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 4585DF8134B976825B31725459E0A155E5D05CDF9E0664A31F61748F77AA69D7A019 + +Count = 615 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 04DCEF193B191145B3163E192B1F6CC9CF82B6E770789CD75235240B17AEA0AFB81B + +Count = 616 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 7E020FE57AD817158A8D30E6883A19DC7A93CC2D8E1225E466A44257FABAE9D1100F + +Count = 617 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 1D3A306E3F6ED9D2A95D293C6B019C7956B664591F08C879457EB890F7F6FCA52A6C + +Count = 618 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = D2BA45E329081E6EFCB7432250842B18DFB7FEF4303D8E9A9DE66735ACB5E105FA32 + +Count = 619 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 7B7ADB40B3718EE2C1C5D6EEBAEFF57B53E716779D91C48BBC9C71094085D9B43A14 + +Count = 620 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 32B0DCA264AED8730F306A245F39A87403137641933B54B796CF816432CE9BEC24CB + +Count = 621 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = DCA1D44EC26EC098CD42BF05C6A4109F138CAAE0A749A4035BDD995B5F4B9962575F + +Count = 622 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = A0CA308D97EC78D01EF45BD386EF4F3ADA399260AD6ADFBA9C9A655CF583900501F0 + +Count = 623 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 310490306A3B5E79BF2247B09A2D5CF482427B29CB91C587E3AEAF989D6120F7121F + +Count = 624 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 26CF401BC4747EA96F0354556EBF97F842509FAB90C3ED2C6EDB1347A6F82B41D106 + +Count = 625 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 3C3982239CE1B9CAF876E432F3D9F192F7D0285BCCDCE94F3E2811FC9C7DBFDE8E24 + +Count = 626 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 9CC4F9BF3B13B90EC5365DC2E8318CAC6F9EEA5C1D1DFF6EC72716806890F6802CBF + +Count = 627 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 69199DA76E16F693EEB1BAE1C2C8614D1822119E5A10755DC2EA4F72A6ABDD444719 + +Count = 628 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = +CT = F65762E72D83738E70498EAD27BEDDA2426C1B83D5899DBD698C79CDE3D52733F75D5E + +Count = 629 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 00 +CT = 4AE50553719B1016223C203ABC320FBD758F45E5D1C5ACD98ABDB3BBAB3258A28E1DC1 + +Count = 630 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 0001 +CT = 4DCE342F92709F323532F63B646B5472FF7B6D8BF0F238EBC748B43655D2EE14613F33 + +Count = 631 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102 +CT = 205DFA3C63008B098CD6A7D52015BE4AC8FBBE9A38CC9B28667217CD54BCA80F0EDDCB + +Count = 632 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 00010203 +CT = C87AD14D08811A728840A7B4B4459EB7C0387EEE7205F909BEB593C1FEF0A81B7D2AF7 + +Count = 633 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 0001020304 +CT = D8E99B303D1C1B8052D8FA6696782154773AB61D34DC7042762F71DC313A2ECA111578 + +Count = 634 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405 +CT = 2FA0F6403756D41DD30F3F3406D83389520BA90A493B9DBFA2DD0448FEC7D711151A39 + +Count = 635 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 00010203040506 +CT = 63CAA3B9A7273B19FBB1E10EFCBF745DDADFE4B908DD4818112CEEC9A545E8D07BD1E9 + +Count = 636 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 0001020304050607 +CT = 552EE50BF8FF278F28723DDA1BED2F5957D4FCF0C4B83625F4C0496CBE40FDA6568FC1 + +Count = 637 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708 +CT = 81084220919BC801D2B2BAAA35ED7DC06B809C3D1FBFB500391731F76A5CDBAF1FC1B6 + +Count = 638 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 00010203040506070809 +CT = 176C131507852AD867788F1B8C3352B41AEC73DC3EEE2FCA02061FCBA603FB6DDCF9A1 + +Count = 639 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A +CT = 44F820FBC52688195E88130DF72AFC3E40E8C6FFEB9D621F692D4541549EF8DCD08D21 + +Count = 640 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B +CT = C3851CAA87F7D4254204738CCE319106F646A0B6F8DC3D990ACE1A5BF5391B512DC532 + +Count = 641 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C +CT = 2917932BB5B0F1613D63304478A7806763AEEDC5E40289E3E52106BECBE1B3363E3587 + +Count = 642 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D +CT = D1AA30993A1D82CADFD332D716AF317ADF959B246CAD60561BF0E19BA458B356ABB5F4 + +Count = 643 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E +CT = D0382BEF32AA160B81DD7200060BAB4347A0B498F53DC5938FF9A3AB9E1FC84C25A149 + +Count = 644 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F +CT = AA269303B27EA790F165A847560F1326A092CEA6C0A67F94AE29E7A17C8C96FC4271C2 + +Count = 645 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 8DFD8D54768576390BE82B93636A5C16C91D45FA78067E37F339ED347D43A00D366716 + +Count = 646 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 52BE1230D2AA31E9698B6050836D301388F666EEE26A6E6F052297F58FD1D66BE3120D + +Count = 647 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 4585DF8134B976825B31725459E0A155E5D0EE8FBC72906B3AC808FA2B8911CE618421 + +Count = 648 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 04DCEF193B191145B3163E192B1F6CC9CF82BDEF081AE14E74BD13C9EF11096677DC8C + +Count = 649 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 7E020FE57AD817158A8D30E6883A19DC7A9357FAF41EEA60BB55C10DDC951229A45EA8 + +Count = 650 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 1D3A306E3F6ED9D2A95D293C6B019C7956B6AFAF96D989DAA8B3D9C3DBCB3AE9EAD01E + +Count = 651 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = D2BA45E329081E6EFCB7432250842B18DFB7232A20A4B8C4A8C99EFCE2756B261DE862 + +Count = 652 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 7B7ADB40B3718EE2C1C5D6EEBAEFF57B53E742B08FABB7005398A2127A86D510831B46 + +Count = 653 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 32B0DCA264AED8730F306A245F39A874031303DAD73FA8D073B0A0A00EA48A66AA5FD5 + +Count = 654 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = DCA1D44EC26EC098CD42BF05C6A4109F138C81AA1FD36D748FDE38DCE0C405063597B8 + +Count = 655 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = A0CA308D97EC78D01EF45BD386EF4F3ADA395DA0AB370433CA43CB3CC0FADDB0EF44B3 + +Count = 656 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 310490306A3B5E79BF2247B09A2D5CF482420BA89A52438F1DAC7447CB8C7930643A89 + +Count = 657 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 26CF401BC4747EA96F0354556EBF97F84250D7BBC7988A59489AE9208748CDBE11CD84 + +Count = 658 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 3C3982239CE1B9CAF876E432F3D9F192F7D01C49C842D342EEB009965D67411CFF4A0D + +Count = 659 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 9CC4F9BF3B13B90EC5365DC2E8318CAC6F9E0FBBC878805379EAA90D81A7354F23BA87 + +Count = 660 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 69199DA76E16F693EEB1BAE1C2C8614D1822E7295A72876D7988B4A66676CD2F0D5F5A + +Count = 661 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = +CT = F65762E72D83738E70498EAD27BEDDA2426C1BF5D32619E8859466C6D721815613BAE2E2 + +Count = 662 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 00 +CT = 4AE50553719B1016223C203ABC320FBD758F459B25E2FCE21C9575A5F853EAF31CF6A03E + +Count = 663 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 0001 +CT = 4DCE342F92709F323532F63B646B5472FF7B6DCF434411526969FDF9EA14E12AFF35D196 + +Count = 664 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102 +CT = 205DFA3C63008B098CD6A7D52015BE4AC8FBBE40C4344484A3BB77348B1308B4F60AE388 + +Count = 665 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 00010203 +CT = C87AD14D08811A728840A7B4B4459EB7C0387E96F6B3C6AD43EF2BEC793E4CF6097F2675 + +Count = 666 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 0001020304 +CT = D8E99B303D1C1B8052D8FA6696782154773AB6D4D074152F285DF364CA2B9F299B1857FE + +Count = 667 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405 +CT = 2FA0F6403756D41DD30F3F3406D83389520BA97C7EFD03C172900629A7F40044F5043809 + +Count = 668 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 00010203040506 +CT = 63CAA3B9A7273B19FBB1E10EFCBF745DDADFE43109622A3F2FEA38753BDF86873930C563 + +Count = 669 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 0001020304050607 +CT = 552EE50BF8FF278F28723DDA1BED2F5957D4FC71D1B6E62C668CC286BB61DE4CC0E1B7C6 + +Count = 670 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708 +CT = 81084220919BC801D2B2BAAA35ED7DC06B809C32DAF187562759CDB62DA8DE45DD8DB70D + +Count = 671 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 00010203040506070809 +CT = 176C131507852AD867788F1B8C3352B41AEC73AE911982E2269D4CFF8E540B3BA0C546A6 + +Count = 672 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A +CT = 44F820FBC52688195E88130DF72AFC3E40E8C6317CCB41DB29735796CA1FE5E204E4B083 + +Count = 673 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B +CT = C3851CAA87F7D4254204738CCE319106F646A04193FF21CE92AA1FE3629231E434A1DDE5 + +Count = 674 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C +CT = 2917932BB5B0F1613D63304478A7806763AEED7A0E166314D431AAC122309ABA3D006AF5 + +Count = 675 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D +CT = D1AA30993A1D82CADFD332D716AF317ADF959BCA6BFFF806CCE88FE0A2295388AFEB202C + +Count = 676 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E +CT = D0382BEF32AA160B81DD7200060BAB4347A0B42E3F6CE192A90C916D047DD46919892031 + +Count = 677 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F +CT = AA269303B27EA790F165A847560F1326A092CE2C6DCD1BBDC8EFA1B43D7E0E8D8632F96C + +Count = 678 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 8DFD8D54768576390BE82B93636A5C16C91D45767FFDF35D53857E9D8F0F2119D1BA5F86 + +Count = 679 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 52BE1230D2AA31E9698B6050836D301388F6665E8236CFF50E7A8A8EC1F6AA14CA00E08B + +Count = 680 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 4585DF8134B976825B31725459E0A155E5D0EE442C9FD2130D3F3728898815BEB79DAE05 + +Count = 681 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 04DCEF193B191145B3163E192B1F6CC9CF82BD3A81F38ADB3CC5FD6CC0C71AEA68B1B500 + +Count = 682 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 7E020FE57AD817158A8D30E6883A19DC7A9357E2AD1C53459EEF379BDCACB9744130B8C6 + +Count = 683 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 1D3A306E3F6ED9D2A95D293C6B019C7956B6AFD04E9679A41BFA2A0FD56EB4EA72C57349 + +Count = 684 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = D2BA45E329081E6EFCB7432250842B18DFB7236FF398DCCE1C6A80C0D060839B4C496EA3 + +Count = 685 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 7B7ADB40B3718EE2C1C5D6EEBAEFF57B53E742C20533EDA3DB893B0DFDC3F605A87CC32F + +Count = 686 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 32B0DCA264AED8730F306A245F39A8740313034F500E61C9322CCA96228DAEA19A5A6168 + +Count = 687 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = DCA1D44EC26EC098CD42BF05C6A4109F138C810EDF941841F6AD7D3E5F1A3457ADEFFAC8 + +Count = 688 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = A0CA308D97EC78D01EF45BD386EF4F3ADA395D5082D9BA9673F50969E8701E7213A466A1 + +Count = 689 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 310490306A3B5E79BF2247B09A2D5CF482420B13FC77072F3377460F968C4980B0AF1A6A + +Count = 690 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 26CF401BC4747EA96F0354556EBF97F84250D7308940434D4DDE203D9CA3C765315B27EE + +Count = 691 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 3C3982239CE1B9CAF876E432F3D9F192F7D01C9C2E4043210F6077BA1C852B6AE491CDFA + +Count = 692 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 9CC4F9BF3B13B90EC5365DC2E8318CAC6F9E0F5831DBF493FEB8DD1E41393920CC0FD88F + +Count = 693 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 69199DA76E16F693EEB1BAE1C2C8614D1822E7CFE170A8A8B2839CF5E6087307F0563501 + +Count = 694 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = +CT = F65762E72D83738E70498EAD27BEDDA2426C1BF58F85CEB8BDB6A2D58EB4D29E578AEE1732 + +Count = 695 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 00 +CT = 4AE50553719B1016223C203ABC320FBD758F459BB12BC309F9C51A1AA95D4A72E5DAADDB2E + +Count = 696 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 0001 +CT = 4DCE342F92709F323532F63B646B5472FF7B6DCF34D1FAB52D72A30DD228B64B553B2F5AC5 + +Count = 697 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102 +CT = 205DFA3C63008B098CD6A7D52015BE4AC8FBBE401C657F0A038FD25B6CD58DDDD3C721418A + +Count = 698 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 00010203 +CT = C87AD14D08811A728840A7B4B4459EB7C0387E9614B662F201962FFE833E401B7A335EAD21 + +Count = 699 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 0001020304 +CT = D8E99B303D1C1B8052D8FA6696782154773AB6D46C35ECCFDD32A9A247BE75191F24FB3497 + +Count = 700 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405 +CT = 2FA0F6403756D41DD30F3F3406D83389520BA97CD5FE064B3EE37F186F2C0AF9FD5C9C54DF + +Count = 701 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 00010203040506 +CT = 63CAA3B9A7273B19FBB1E10EFCBF745DDADFE43138C722BA8945DCDF635F6616C7CF28AF97 + +Count = 702 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 0001020304050607 +CT = 552EE50BF8FF278F28723DDA1BED2F5957D4FC7169FA34E46AD037C2F02A105AA814255224 + +Count = 703 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708 +CT = 81084220919BC801D2B2BAAA35ED7DC06B809C32AAA46380C90ACAD16D49B5131EFDD620BF + +Count = 704 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 00010203040506070809 +CT = 176C131507852AD867788F1B8C3352B41AEC73AE3833741DD97B05B89AAEC57AB3C1FF0BAC + +Count = 705 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A +CT = 44F820FBC52688195E88130DF72AFC3E40E8C63113B35F10310EC22368545EEC536664FEA0 + +Count = 706 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B +CT = C3851CAA87F7D4254204738CCE319106F646A0412609B4F127B40E2F32772454AFAA6BA84C + +Count = 707 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C +CT = 2917932BB5B0F1613D63304478A7806763AEED7AA94C6B4157AAB90834CF158B2357B774CB + +Count = 708 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D +CT = D1AA30993A1D82CADFD332D716AF317ADF959BCABBD144116F61419D9C8C4C04C521918E02 + +Count = 709 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E +CT = D0382BEF32AA160B81DD7200060BAB4347A0B42EB6AFE6A556E2F29EAFE7930B7342DB8AE9 + +Count = 710 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F +CT = AA269303B27EA790F165A847560F1326A092CE2C80E5738F12C2AEE1CF1638C0A990474A2E + +Count = 711 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 8DFD8D54768576390BE82B93636A5C16C91D4576C4AF86DBC4232938A1465EC6B6BC3E5960 + +Count = 712 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 52BE1230D2AA31E9698B6050836D301388F6665E2B064598305605D6341E310ADFCF262EAF + +Count = 713 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 4585DF8134B976825B31725459E0A155E5D0EE44DF0B14454E363F1813E1245534838B5670 + +Count = 714 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 04DCEF193B191145B3163E192B1F6CC9CF82BD3AE2B45DC6BD1F44AE97B4AC3C6097763B43 + +Count = 715 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 7E020FE57AD817158A8D30E6883A19DC7A9357E2212DECD2BDA94914DD8B0E05E198203C71 + +Count = 716 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 1D3A306E3F6ED9D2A95D293C6B019C7956B6AFD0844E58B8B3DEF5AF88E6D2BF52979C6B84 + +Count = 717 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = D2BA45E329081E6EFCB7432250842B18DFB7236FC3FA2BCBD14327A90F0468D2F8C6CC60F7 + +Count = 718 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 7B7ADB40B3718EE2C1C5D6EEBAEFF57B53E742C28EE97B6FD2DCA2AE8F7CB6B6F264B7820D + +Count = 719 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 32B0DCA264AED8730F306A245F39A8740313034F2326104318642AE08946C8E66A9F096C48 + +Count = 720 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = DCA1D44EC26EC098CD42BF05C6A4109F138C810ED88A7DAD48AB0AC4681B02C81EFAAAC48A + +Count = 721 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = A0CA308D97EC78D01EF45BD386EF4F3ADA395D50EC0C860BCACE4D5347FC0575C63D30E45B + +Count = 722 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 310490306A3B5E79BF2247B09A2D5CF482420B1323704F8C55659A38E71AC566D8B4175D95 + +Count = 723 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 26CF401BC4747EA96F0354556EBF97F84250D7304680AA8243BB8DC6AC5A31927C04255EC6 + +Count = 724 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 3C3982239CE1B9CAF876E432F3D9F192F7D01C9C3FED8DB2ABFE36590DCCBEDE0B35D14998 + +Count = 725 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 9CC4F9BF3B13B90EC5365DC2E8318CAC6F9E0F58AC5027BB1654D1ED1E544A881B458F0D3C + +Count = 726 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 69199DA76E16F693EEB1BAE1C2C8614D1822E7CF6EE9FB728246570B950EC9725DBC8044C9 + +Count = 727 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = +CT = F65762E72D83738E70498EAD27BEDDA2426C1BF58F1B0256485E06826EB37D20C409D5111633 + +Count = 728 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 00 +CT = 4AE50553719B1016223C203ABC320FBD758F459BB131CFB52C8706914E77C954640A8C701D57 + +Count = 729 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 0001 +CT = 4DCE342F92709F323532F63B646B5472FF7B6DCF341D59A91254BC34F11B8F1F2C3527AEC759 + +Count = 730 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102 +CT = 205DFA3C63008B098CD6A7D52015BE4AC8FBBE401C072502FE4D083CF27C88F5228CBBDBBE66 + +Count = 731 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 00010203 +CT = C87AD14D08811A728840A7B4B4459EB7C0387E9614B659B31181C1F98DF1320E6105F643503F + +Count = 732 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 0001020304 +CT = D8E99B303D1C1B8052D8FA6696782154773AB6D46C05C24602E8CFE44DA7867E739BAA9AB001 + +Count = 733 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405 +CT = 2FA0F6403756D41DD30F3F3406D83389520BA97CD50E3AD3B109AA6E58F7ADBD27E244849C98 + +Count = 734 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 00010203040506 +CT = 63CAA3B9A7273B19FBB1E10EFCBF745DDADFE431382C0290EB93EBD1F1C8B6A6A9038698BE1E + +Count = 735 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 0001020304050607 +CT = 552EE50BF8FF278F28723DDA1BED2F5957D4FC71691969B7B5534D24D481E0F52D4471473FC8 + +Count = 736 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708 +CT = 81084220919BC801D2B2BAAA35ED7DC06B809C32AA89A9F8ECEDC04379B624308A0650AE2D33 + +Count = 737 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 00010203040506070809 +CT = 176C131507852AD867788F1B8C3352B41AEC73AE38A5420929DA81F7CF1A6493AE1771F9C1FB + +Count = 738 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A +CT = 44F820FBC52688195E88130DF72AFC3E40E8C63113BF304BA2692B8B3CD69539ED896FD5FFFD + +Count = 739 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B +CT = C3851CAA87F7D4254204738CCE319106F646A04126D0B42BEF8FFF6E480908C0B3EB1D279713 + +Count = 740 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C +CT = 2917932BB5B0F1613D63304478A7806763AEED7AA9CAE1D4AA897B398F02D293B0EE49E70A60 + +Count = 741 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D +CT = D1AA30993A1D82CADFD332D716AF317ADF959BCABBA4FB975B6EF67A62D95777357DDE4B62CE + +Count = 742 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E +CT = D0382BEF32AA160B81DD7200060BAB4347A0B42EB6F3C077B1055D1F8BCF79DE0A09C37B22FC + +Count = 743 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F +CT = AA269303B27EA790F165A847560F1326A092CE2C80B15604367CD8B4BD613207FBD3380254DB + +Count = 744 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 8DFD8D54768576390BE82B93636A5C16C91D4576C4F1A0CBA181B9795D6A437237BD77B90ED3 + +Count = 745 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 52BE1230D2AA31E9698B6050836D301388F6665E2B3C2735C802EDA51D73C2E4F0C9DF7DBE56 + +Count = 746 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 4585DF8134B976825B31725459E0A155E5D0EE44DFD45CE2E583BE861805DF5F7710DCEBA6E8 + +Count = 747 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 04DCEF193B191145B3163E192B1F6CC9CF82BD3AE21C5530D34D728A8AA09ED6778E345713D4 + +Count = 748 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 7E020FE57AD817158A8D30E6883A19DC7A9357E221948F7ACD56C8C81EE83587ADF0F541CCF3 + +Count = 749 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 1D3A306E3F6ED9D2A95D293C6B019C7956B6AFD0847A6B2FC604D659680C21779E870E494F47 + +Count = 750 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = D2BA45E329081E6EFCB7432250842B18DFB7236FC3765C9884C870C24458B301FA0A9436D17D + +Count = 751 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 7B7ADB40B3718EE2C1C5D6EEBAEFF57B53E742C28EA36ECAF4111B9FFEADD1C9A61273F34FDB + +Count = 752 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 32B0DCA264AED8730F306A245F39A8740313034F2304E42C710EE081BE57659DE9B8A3434218 + +Count = 753 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = DCA1D44EC26EC098CD42BF05C6A4109F138C810ED811A73102E1450887547D90E8513F7453EB + +Count = 754 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = A0CA308D97EC78D01EF45BD386EF4F3ADA395D50EC71E22946C81AF8FB1D7A752AB9F99568AF + +Count = 755 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 310490306A3B5E79BF2247B09A2D5CF482420B1323BEC0DF136F27E56624E42D19D4D0BD6CDD + +Count = 756 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 26CF401BC4747EA96F0354556EBF97F84250D730461C5ACF4F0E410854A9BA7C02DF8FFCB97D + +Count = 757 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 3C3982239CE1B9CAF876E432F3D9F192F7D01C9C3FF3884332AC1A33DE42FDB6A2985BB5B173 + +Count = 758 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 9CC4F9BF3B13B90EC5365DC2E8318CAC6F9E0F58AC079C7112EF459D70BA0C7AFB0AE71C2708 + +Count = 759 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 69199DA76E16F693EEB1BAE1C2C8614D1822E7CF6E0DFF309808D7E9689424E23E0F3F195EBF + +Count = 760 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = +CT = F65762E72D83738E70498EAD27BEDDA2426C1BF58F1BE7143DEA71C24C231F7D2ED073B9B4C19C + +Count = 761 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 00 +CT = 4AE50553719B1016223C203ABC320FBD758F459BB131CC4E3D41D683D18A1D2FFD8538BD751FAD + +Count = 762 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 0001 +CT = 4DCE342F92709F323532F63B646B5472FF7B6DCF341D044EC3605941DE26EE4447BA094FDAE04C + +Count = 763 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102 +CT = 205DFA3C63008B098CD6A7D52015BE4AC8FBBE401C07819CB606B95A3D6FFCCDB562C1E65C334C + +Count = 764 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 00010203 +CT = C87AD14D08811A728840A7B4B4459EB7C0387E9614B649137DB9EDC1AA992658A76B35F51C5AE5 + +Count = 765 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 0001020304 +CT = D8E99B303D1C1B8052D8FA6696782154773AB6D46C05CA212E6E31BA64987A963FFB56256FA6AB + +Count = 766 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405 +CT = 2FA0F6403756D41DD30F3F3406D83389520BA97CD50EE2A0D77C7190DE06FCB70829EC9BFBBFEC + +Count = 767 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 00010203040506 +CT = 63CAA3B9A7273B19FBB1E10EFCBF745DDADFE431382C8D71642B3FFAFD5955B47DA2ED813E47BB + +Count = 768 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 0001020304050607 +CT = 552EE50BF8FF278F28723DDA1BED2F5957D4FC716919FF99945D58F7745D788A32F0E9198D37A7 + +Count = 769 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708 +CT = 81084220919BC801D2B2BAAA35ED7DC06B809C32AA89919CD6C937F18725734E03F8BB28FDC271 + +Count = 770 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 00010203040506070809 +CT = 176C131507852AD867788F1B8C3352B41AEC73AE38A59E2AE38544A6BE903E2322AB90805A1A13 + +Count = 771 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A +CT = 44F820FBC52688195E88130DF72AFC3E40E8C63113BF2C0B4BA6226BB4F7571273114A43663EF6 + +Count = 772 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B +CT = C3851CAA87F7D4254204738CCE319106F646A04126D0FE1BCF13BF14ED7AD81D138CE9E0EEE413 + +Count = 773 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C +CT = 2917932BB5B0F1613D63304478A7806763AEED7AA9CADAE9C9683BFADE0554C5325DC3C153AB86 + +Count = 774 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D +CT = D1AA30993A1D82CADFD332D716AF317ADF959BCABBA4CF59C6CF1B6A810EBAC8B2F839CC387039 + +Count = 775 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E +CT = D0382BEF32AA160B81DD7200060BAB4347A0B42EB6F3D4668D767E62A6EBBC47751C9E7B9F12D9 + +Count = 776 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F +CT = AA269303B27EA790F165A847560F1326A092CE2C80B1B787157A94760E6B5E02B47FF2D1B4615A + +Count = 777 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 8DFD8D54768576390BE82B93636A5C16C91D4576C4F1A67AE82A287BF4BA7D89D32D00254B3F8E + +Count = 778 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 52BE1230D2AA31E9698B6050836D301388F6665E2B3C8BC8E1DE0CDAEF07A0C31FCAE4B92578F7 + +Count = 779 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 4585DF8134B976825B31725459E0A155E5D0EE44DFD4442B52159C6B22258BC28F575BE76CF99F + +Count = 780 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 04DCEF193B191145B3163E192B1F6CC9CF82BD3AE21CA46F0902FAC6A33B1D8B5CAD92CA3E8D60 + +Count = 781 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 7E020FE57AD817158A8D30E6883A19DC7A9357E221944B0D1560984A9C791FBDCC3A3A3D7B62C4 + +Count = 782 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 1D3A306E3F6ED9D2A95D293C6B019C7956B6AFD0847ADB155D16186B969EA6BBC4392E21364600 + +Count = 783 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = D2BA45E329081E6EFCB7432250842B18DFB7236FC376822D74CF4E2F45C3E50FCF8EC56A54E1C3 + +Count = 784 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 7B7ADB40B3718EE2C1C5D6EEBAEFF57B53E742C28EA331C13F10C2C4E4FD9B6E7D065D17B45135 + +Count = 785 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 32B0DCA264AED8730F306A245F39A8740313034F2304B749B0AB49A74CAA5466FCA0CB787DC748 + +Count = 786 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = DCA1D44EC26EC098CD42BF05C6A4109F138C810ED811C28B87C2B33C3E064F062042442A1002E1 + +Count = 787 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = A0CA308D97EC78D01EF45BD386EF4F3ADA395D50EC71B468736C47A55B2E8A74948F9775CC87AF + +Count = 788 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 310490306A3B5E79BF2247B09A2D5CF482420B1323BE1D4B56CB7A53417335E217CE7F4E8D82ED + +Count = 789 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 26CF401BC4747EA96F0354556EBF97F84250D730461C68E4011C9DBA4B8E01594A14E0589A9892 + +Count = 790 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 3C3982239CE1B9CAF876E432F3D9F192F7D01C9C3FF3CAF0DACAE28F1F68D7573E485ED4427802 + +Count = 791 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 9CC4F9BF3B13B90EC5365DC2E8318CAC6F9E0F58AC078BF941FDB88D3C41EA8B9DC2BF14882A8E + +Count = 792 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 69199DA76E16F693EEB1BAE1C2C8614D1822E7CF6E0D0D4C4A8FE32B9E1C3A8D1811C405F2E9BE + +Count = 793 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = +CT = F65762E72D83738E70498EAD27BEDDA2426C1BF58F1BE71411E97EB06A15EA51F4E010A8ADC0E04F + +Count = 794 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 00 +CT = 4AE50553719B1016223C203ABC320FBD758F459BB131CC0B4A3583861287BFB259C22050FB8BEE86 + +Count = 795 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 0001 +CT = 4DCE342F92709F323532F63B646B5472FF7B6DCF341D04AFA3F41B1513E94CD21D5A9D5454AD44DF + +Count = 796 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102 +CT = 205DFA3C63008B098CD6A7D52015BE4AC8FBBE401C0781E44273673D1893318FB6E4780B29DAA1C0 + +Count = 797 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 00010203 +CT = C87AD14D08811A728840A7B4B4459EB7C0387E9614B6492DCA917FF029763A24C2C74FF30AB63214 + +Count = 798 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 0001020304 +CT = D8E99B303D1C1B8052D8FA6696782154773AB6D46C05CADCF7AB6667CCC2E49D26937683ECCD16F6 + +Count = 799 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405 +CT = 2FA0F6403756D41DD30F3F3406D83389520BA97CD50EE2889474100FC068FFEA315ED1F205CB4F79 + +Count = 800 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 00010203040506 +CT = 63CAA3B9A7273B19FBB1E10EFCBF745DDADFE431382C8DDAED0EA1EE1510A9E7A0C9DEAC4552ECCB + +Count = 801 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 0001020304050607 +CT = 552EE50BF8FF278F28723DDA1BED2F5957D4FC716919FF3DD19A39D6FD6C7C55D80D088C934A4B65 + +Count = 802 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708 +CT = 81084220919BC801D2B2BAAA35ED7DC06B809C32AA8991338E7F33BCC4A5A7FA0EA2A65989BB756F + +Count = 803 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 00010203040506070809 +CT = 176C131507852AD867788F1B8C3352B41AEC73AE38A59E6FA0F2AC5A2C774E141B5B8B58E2553A7A + +Count = 804 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A +CT = 44F820FBC52688195E88130DF72AFC3E40E8C63113BF2CF9204C5F5AD8B0C2D967C0B45C50C04534 + +Count = 805 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B +CT = C3851CAA87F7D4254204738CCE319106F646A04126D0FE44EFC23FAA05D006922844250B489F568D + +Count = 806 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C +CT = 2917932BB5B0F1613D63304478A7806763AEED7AA9CADA93074EEC97AE41BF78C86E1BE38D6565CE + +Count = 807 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D +CT = D1AA30993A1D82CADFD332D716AF317ADF959BCABBA4CF7A1C9FBB4BB61C4904F3CE27EE1A9AC550 + +Count = 808 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E +CT = D0382BEF32AA160B81DD7200060BAB4347A0B42EB6F3D46977D0FA3E6990763F9EF38F18FA665018 + +Count = 809 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F +CT = AA269303B27EA790F165A847560F1326A092CE2C80B1B7382D5B2E54A68B60849587225E36816A5A + +Count = 810 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 8DFD8D54768576390BE82B93636A5C16C91D4576C4F1A6A6C72A57BD61EF77F2EC8CD536A014B4B3 + +Count = 811 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 52BE1230D2AA31E9698B6050836D301388F6665E2B3C8B2E8E30CBD9B2308CB8E3A631E41533CEB3 + +Count = 812 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 4585DF8134B976825B31725459E0A155E5D0EE44DFD444D2F613B862E3372ADFD3249130B6121F3E + +Count = 813 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 04DCEF193B191145B3163E192B1F6CC9CF82BD3AE21CA42B2D7344BACA1B34EACDA1F62435671389 + +Count = 814 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 7E020FE57AD817158A8D30E6883A19DC7A9357E221944B23E165C72258DB28D49310EBA1355A12C6 + +Count = 815 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 1D3A306E3F6ED9D2A95D293C6B019C7956B6AFD0847ADB1D84A94FAAD5DDD3E000368EFDFCFD2EA8 + +Count = 816 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = D2BA45E329081E6EFCB7432250842B18DFB7236FC37682E1F97976A6CA241BCB41AA28F0CE7448B7 + +Count = 817 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 7B7ADB40B3718EE2C1C5D6EEBAEFF57B53E742C28EA331F63C69A0B1B06695098FE140E3BEEE6594 + +Count = 818 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 32B0DCA264AED8730F306A245F39A8740313034F2304B79380726F01491AF45E7AF17901AB3F4249 + +Count = 819 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = DCA1D44EC26EC098CD42BF05C6A4109F138C810ED811C22820CC09DDD9CFE36B9D51FABE3F9F89A4 + +Count = 820 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = A0CA308D97EC78D01EF45BD386EF4F3ADA395D50EC71B491355B0BC41DF9F033A6C599050D286ED8 + +Count = 821 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 310490306A3B5E79BF2247B09A2D5CF482420B1323BE1DE8EAC0DFD7650CC871C388202D3C1CF630 + +Count = 822 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 26CF401BC4747EA96F0354556EBF97F84250D730461C68031D17DE6ECA0FEB4B85F15ED66EA182E8 + +Count = 823 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 3C3982239CE1B9CAF876E432F3D9F192F7D01C9C3FF3CA5EF9A52F10DBF1E56372A053BB94DA4C8F + +Count = 824 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 9CC4F9BF3B13B90EC5365DC2E8318CAC6F9E0F58AC078B71F2E332A4CFA6137DB669566C848E1A83 + +Count = 825 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 69199DA76E16F693EEB1BAE1C2C8614D1822E7CF6E0D0D331A09C378669A40AB95362B7C417F044F + +Count = 826 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = +CT = F65762E72D83738E70498EAD27BEDDA2426C1BF58F1BE714529C2BC59604BE6EFD5B8C977911302B62 + +Count = 827 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 00 +CT = 4AE50553719B1016223C203ABC320FBD758F459BB131CC0B65EA4E78714503DDE2E4828B6022A6B78E + +Count = 828 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 0001 +CT = 4DCE342F92709F323532F63B646B5472FF7B6DCF341D04AF0F598FA1C130B7FA0FC68D037936F40A83 + +Count = 829 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102 +CT = 205DFA3C63008B098CD6A7D52015BE4AC8FBBE401C0781E4F4DAC8C72C8D8A5487EFC2C361E657D9D9 + +Count = 830 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 00010203 +CT = C87AD14D08811A728840A7B4B4459EB7C0387E9614B6492D9D9EBE7F66F8B36428457DBDDDD6305CAB + +Count = 831 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 0001020304 +CT = D8E99B303D1C1B8052D8FA6696782154773AB6D46C05CADC20FFDF78B6E96557DC052E26AA39560679 + +Count = 832 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405 +CT = 2FA0F6403756D41DD30F3F3406D83389520BA97CD50EE288D627B8C8653A72B9A0EB0925E7983AEF90 + +Count = 833 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 00010203040506 +CT = 63CAA3B9A7273B19FBB1E10EFCBF745DDADFE431382C8DDA0EB881199AB32BDEE22D9D911339427617 + +Count = 834 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 0001020304050607 +CT = 552EE50BF8FF278F28723DDA1BED2F5957D4FC716919FF3D7943EBB472EB7680EC8F63214F17DBA71A + +Count = 835 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708 +CT = 81084220919BC801D2B2BAAA35ED7DC06B809C32AA8991332F1ECCAAEF731EF7C63D6A8A8EB397F9C3 + +Count = 836 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 00010203040506070809 +CT = 176C131507852AD867788F1B8C3352B41AEC73AE38A59E6FE9406CCA5820BBE9C4BD26806FFE7F7108 + +Count = 837 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A +CT = 44F820FBC52688195E88130DF72AFC3E40E8C63113BF2CF9609A0F9F061879D68B17E6E8BE00E1911A + +Count = 838 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B +CT = C3851CAA87F7D4254204738CCE319106F646A04126D0FE445F1146E3F7BE4F8F05668296C42BEB8D6E + +Count = 839 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C +CT = 2917932BB5B0F1613D63304478A7806763AEED7AA9CADA93359B55F8C008D5896EC31CF8B8266506A1 + +Count = 840 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D +CT = D1AA30993A1D82CADFD332D716AF317ADF959BCABBA4CF7AD3FE3566751A20C94AD95C97EC4A8ED31B + +Count = 841 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E +CT = D0382BEF32AA160B81DD7200060BAB4347A0B42EB6F3D4696C2E1E45725FCDEE8ACF6CEB03D8DA1A73 + +Count = 842 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F +CT = AA269303B27EA790F165A847560F1326A092CE2C80B1B738D251F8A4C8B37D21CCFC0C1D5DFF904ADB + +Count = 843 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 8DFD8D54768576390BE82B93636A5C16C91D4576C4F1A6A6C0D8C89AA966B82BCE05361FCCB9471DDA + +Count = 844 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 52BE1230D2AA31E9698B6050836D301388F6665E2B3C8B2ECED2CE4972003366A1F2E51DFC0E41387C + +Count = 845 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 4585DF8134B976825B31725459E0A155E5D0EE44DFD444D2E3B5818389226E834749BE00A348C2913C + +Count = 846 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 04DCEF193B191145B3163E192B1F6CC9CF82BD3AE21CA42B9F07EEF9D2B18862A57752337F37E6310C + +Count = 847 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 7E020FE57AD817158A8D30E6883A19DC7A9357E221944B236D38C8A20671CDA21E47178D57A9E7E365 + +Count = 848 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 1D3A306E3F6ED9D2A95D293C6B019C7956B6AFD0847ADB1D49E57AEFB87ACD352DAFE499B340922636 + +Count = 849 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = D2BA45E329081E6EFCB7432250842B18DFB7236FC37682E1CBAE0677080594C4713DEAB2B24E27A52A + +Count = 850 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 7B7ADB40B3718EE2C1C5D6EEBAEFF57B53E742C28EA331F6E11A37C8FB3F5FBC88A536CF3B671A832E + +Count = 851 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 32B0DCA264AED8730F306A245F39A8740313034F2304B793B2A35A5D779CB16DFFF9CBF036867321C6 + +Count = 852 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = DCA1D44EC26EC098CD42BF05C6A4109F138C810ED811C22820D42CC6AADEB24EFD97D67187557D87D3 + +Count = 853 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = A0CA308D97EC78D01EF45BD386EF4F3ADA395D50EC71B4916A0324D28E24B52B94626E8A16C59AA10E + +Count = 854 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 310490306A3B5E79BF2247B09A2D5CF482420B1323BE1DE896164A51D1DF756324075FC12F435DA5A6 + +Count = 855 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 26CF401BC4747EA96F0354556EBF97F84250D730461C68036D4C8528C5D7F004E3C21F1194D95D968B + +Count = 856 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 3C3982239CE1B9CAF876E432F3D9F192F7D01C9C3FF3CA5E82DBAFE4E4A9B290ADB23221747110FEA0 + +Count = 857 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 9CC4F9BF3B13B90EC5365DC2E8318CAC6F9E0F58AC078B71C83C40516C83D8681F9EF0751EF3A0ED69 + +Count = 858 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 69199DA76E16F693EEB1BAE1C2C8614D1822E7CF6E0D0D33AE606C6FD93436C62FD69945B5280BCC05 + +Count = 859 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = +CT = F65762E72D83738E70498EAD27BEDDA2426C1BF58F1BE714527BE080ACEC80AD90DF7CA98B94616BEF0A + +Count = 860 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 00 +CT = 4AE50553719B1016223C203ABC320FBD758F459BB131CC0B65CBABF1AF57918980B3BE4E365883015D9D + +Count = 861 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 0001 +CT = 4DCE342F92709F323532F63B646B5472FF7B6DCF341D04AF0FD66360D78E8B32EE652E7808824865C5A8 + +Count = 862 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102 +CT = 205DFA3C63008B098CD6A7D52015BE4AC8FBBE401C0781E4F4B70F8DCB0F35A6E510E012D0CA24053ED5 + +Count = 863 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 00010203 +CT = C87AD14D08811A728840A7B4B4459EB7C0387E9614B6492D9DB41B91DD8334124EFD279C447504959C92 + +Count = 864 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 0001020304 +CT = D8E99B303D1C1B8052D8FA6696782154773AB6D46C05CADC20796ACCB9C4F9F089CB4E90E4FD96BFD9AB + +Count = 865 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405 +CT = 2FA0F6403756D41DD30F3F3406D83389520BA97CD50EE288D6520A90DEEE5BD0C71AA6D1475FE8B8F4F2 + +Count = 866 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 00010203040506 +CT = 63CAA3B9A7273B19FBB1E10EFCBF745DDADFE431382C8DDA0E597C017533E0B00FA19080884210A04A8C + +Count = 867 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 0001020304050607 +CT = 552EE50BF8FF278F28723DDA1BED2F5957D4FC716919FF3D79497D69604DECE1308E4B1F1CE03CB73C6E + +Count = 868 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708 +CT = 81084220919BC801D2B2BAAA35ED7DC06B809C32AA8991332FB41F82ABFE068D4CE0D9D2928E272EBE5F + +Count = 869 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 00010203040506070809 +CT = 176C131507852AD867788F1B8C3352B41AEC73AE38A59E6FE9534A0F6A4FB0654F6F4955D3B35F0E64C3 + +Count = 870 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A +CT = 44F820FBC52688195E88130DF72AFC3E40E8C63113BF2CF96079F84435427A4F4FCEF6E81F16E45C0C21 + +Count = 871 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B +CT = C3851CAA87F7D4254204738CCE319106F646A04126D0FE445F5814AEE4B00075A5FD68251B2B48111FB6 + +Count = 872 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C +CT = 2917932BB5B0F1613D63304478A7806763AEED7AA9CADA9335F8B9167DBECF39A3DDBD76431B9963452B + +Count = 873 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D +CT = D1AA30993A1D82CADFD332D716AF317ADF959BCABBA4CF7AD3E8A55FB0FF83CE75B750D498EB134EE7AC + +Count = 874 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E +CT = D0382BEF32AA160B81DD7200060BAB4347A0B42EB6F3D4696C1008206192BC5BF611A9AFF8EE44E267D6 + +Count = 875 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F +CT = AA269303B27EA790F165A847560F1326A092CE2C80B1B738D2E6E0F1160DC1A51C5C7DCAC6D5F582D5B2 + +Count = 876 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 8DFD8D54768576390BE82B93636A5C16C91D4576C4F1A6A6C051FD3517CBD32FA1526DC9FA694974B84E + +Count = 877 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 52BE1230D2AA31E9698B6050836D301388F6665E2B3C8B2ECEC32FC870F1E30E4093BD5CD82E1F67E481 + +Count = 878 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 4585DF8134B976825B31725459E0A155E5D0EE44DFD444D2E3102A9B0EDC2517C3166D6E960412B0FC69 + +Count = 879 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 04DCEF193B191145B3163E192B1F6CC9CF82BD3AE21CA42B9FEAA2F0A119A1B0B3A717723EFAC2924689 + +Count = 880 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 7E020FE57AD817158A8D30E6883A19DC7A9357E221944B236D3E6825318EDD97959B3DD412238CCC6F75 + +Count = 881 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 1D3A306E3F6ED9D2A95D293C6B019C7956B6AFD0847ADB1D49765A438222C9B503117A093852C29AEE95 + +Count = 882 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = D2BA45E329081E6EFCB7432250842B18DFB7236FC37682E1CBF4925F481C6C708D0D804AC95FA4052720 + +Count = 883 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 7B7ADB40B3718EE2C1C5D6EEBAEFF57B53E742C28EA331F6E18361318DD2C5E1B79BE5330605A394BFD8 + +Count = 884 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 32B0DCA264AED8730F306A245F39A8740313034F2304B793B2A21DEBDE3162DADEC80A780A9852A5AFC5 + +Count = 885 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = DCA1D44EC26EC098CD42BF05C6A4109F138C810ED811C22820F3F1AFD19A5634C04C12E0EBF489040E41 + +Count = 886 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = A0CA308D97EC78D01EF45BD386EF4F3ADA395D50EC71B4916AA45DD419195653DB49512A4EB6C0E3CBC1 + +Count = 887 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 310490306A3B5E79BF2247B09A2D5CF482420B1323BE1DE89646D670A42631409DA1338A1F69F3C1D6DA + +Count = 888 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 26CF401BC4747EA96F0354556EBF97F84250D730461C68036D68FC3CD091A3E7E1A6847EE410713AC1C7 + +Count = 889 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 3C3982239CE1B9CAF876E432F3D9F192F7D01C9C3FF3CA5E828A7761B8E9799AC8B1BCACABABE2C88C0C + +Count = 890 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 9CC4F9BF3B13B90EC5365DC2E8318CAC6F9E0F58AC078B71C8F1BA2AB8FE666C348E1D2ABC632164FE4B + +Count = 891 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 69199DA76E16F693EEB1BAE1C2C8614D1822E7CF6E0D0D33AE3C602FE3DE6DC43B3D7FEAB8EF369C14CE + +Count = 892 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = +CT = F65762E72D83738E70498EAD27BEDDA2426C1BF58F1BE714527B99EFEB88E140558A2A0A6E8C6E40FA7A10 + +Count = 893 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 00 +CT = 4AE50553719B1016223C203ABC320FBD758F459BB131CC0B65CBEB22A6F907BE000998507A5DEC57FC3BD4 + +Count = 894 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 0001 +CT = 4DCE342F92709F323532F63B646B5472FF7B6DCF341D04AF0FD66672F782A4EF8D053955994769C136F7E3 + +Count = 895 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102 +CT = 205DFA3C63008B098CD6A7D52015BE4AC8FBBE401C0781E4F4B7F744D0D9C9EB32E6C5E6F8A78A6CB3AF93 + +Count = 896 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 00010203 +CT = C87AD14D08811A728840A7B4B4459EB7C0387E9614B6492D9DB4856073716DB8867BE9B0F0DF39087B32AE + +Count = 897 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 0001020304 +CT = D8E99B303D1C1B8052D8FA6696782154773AB6D46C05CADC2079728F84E8A0E8A213EB53836AA670F597AE + +Count = 898 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405 +CT = 2FA0F6403756D41DD30F3F3406D83389520BA97CD50EE288D652C0E67583370C62FBB25B7E67A5A26A2D77 + +Count = 899 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 00010203040506 +CT = 63CAA3B9A7273B19FBB1E10EFCBF745DDADFE431382C8DDA0E593930D5F1D777C36D399BDFA89A22AD27E9 + +Count = 900 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 0001020304050607 +CT = 552EE50BF8FF278F28723DDA1BED2F5957D4FC716919FF3D79492304FEFE6F621D04E4F6D183A17B19394F + +Count = 901 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708 +CT = 81084220919BC801D2B2BAAA35ED7DC06B809C32AA8991332FB4282BAF3AC06B6892653D615779C86A8C6D + +Count = 902 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 00010203040506070809 +CT = 176C131507852AD867788F1B8C3352B41AEC73AE38A59E6FE953781AB77194627958639521EB6F07EF53AD + +Count = 903 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A +CT = 44F820FBC52688195E88130DF72AFC3E40E8C63113BF2CF96079BEDF3541AE9285DD936E585108EF42194F + +Count = 904 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B +CT = C3851CAA87F7D4254204738CCE319106F646A04126D0FE445F5898B4EBFBE48645E1708C1D7581ED66C048 + +Count = 905 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C +CT = 2917932BB5B0F1613D63304478A7806763AEED7AA9CADA9335F87C633F6ABAE73F30D67E0C7EFAD4527325 + +Count = 906 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D +CT = D1AA30993A1D82CADFD332D716AF317ADF959BCABBA4CF7AD3E8A7BD5E2506875015750C5B284115D32B9B + +Count = 907 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E +CT = D0382BEF32AA160B81DD7200060BAB4347A0B42EB6F3D4696C109D558D7E5CF2C39FDA66BFE45763073D2B + +Count = 908 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F +CT = AA269303B27EA790F165A847560F1326A092CE2C80B1B738D2E65A1098EB002ED3AAD54E7FF3F2BF04146F + +Count = 909 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 8DFD8D54768576390BE82B93636A5C16C91D4576C4F1A6A6C0514967B791363AADB6B55A2577829151E6B9 + +Count = 910 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 52BE1230D2AA31E9698B6050836D301388F6665E2B3C8B2ECEC3F92ABAC951754C2F6B32819B7088E28ABD + +Count = 911 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 4585DF8134B976825B31725459E0A155E5D0EE44DFD444D2E3108AB335646103EDC71D4A7D4D4F4079D147 + +Count = 912 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 04DCEF193B191145B3163E192B1F6CC9CF82BD3AE21CA42B9FEA3A6FB5E61560562BE0A867984993C28769 + +Count = 913 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 7E020FE57AD817158A8D30E6883A19DC7A9357E221944B236D3EE6AA4B2F6288B53C92AC7AC9687925BC0C + +Count = 914 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 1D3A306E3F6ED9D2A95D293C6B019C7956B6AFD0847ADB1D4976F6F19EE4752EFC4CE3F84BE190C7AE3448 + +Count = 915 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = D2BA45E329081E6EFCB7432250842B18DFB7236FC37682E1CBF46FB04EE534575419F7189B18ADD55A466D + +Count = 916 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 7B7ADB40B3718EE2C1C5D6EEBAEFF57B53E742C28EA331F6E183345DE40E075F7A2F1352A2FED3AC22374F + +Count = 917 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 32B0DCA264AED8730F306A245F39A8740313034F2304B793B2A2A6A23BBD7382C6F476A309B087ECD31E8D + +Count = 918 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = DCA1D44EC26EC098CD42BF05C6A4109F138C810ED811C22820F32F795CF01EE540AA13B227A61DD1D5E2FC + +Count = 919 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = A0CA308D97EC78D01EF45BD386EF4F3ADA395D50EC71B4916AA4807C7B42A2A5A29C3E65E4473E39FA7555 + +Count = 920 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 310490306A3B5E79BF2247B09A2D5CF482420B1323BE1DE896468D917FE6712F7908CA763050BF9AADF5A1 + +Count = 921 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 26CF401BC4747EA96F0354556EBF97F84250D730461C68036D682CC6D95D333BCF7209A3B6C5E0FCD12F7A + +Count = 922 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 3C3982239CE1B9CAF876E432F3D9F192F7D01C9C3FF3CA5E828A42E7948C7D7B07469246CE8715B781187B + +Count = 923 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 9CC4F9BF3B13B90EC5365DC2E8318CAC6F9E0F58AC078B71C8F10F4E3C49ABB2A3EA5A072350039E737DC9 + +Count = 924 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 69199DA76E16F693EEB1BAE1C2C8614D1822E7CF6E0D0D33AE3C08CC5C284E32AFD16AF78B7352827AFE5C + +Count = 925 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = +CT = F65762E72D83738E70498EAD27BEDDA2426C1BF58F1BE714527B992C5A00251F0FCFCF9BA6C0E3F96E0D1838 + +Count = 926 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 00 +CT = 4AE50553719B1016223C203ABC320FBD758F459BB131CC0B65CBEB7C79685E8D646FA7901BEEF94AA41EA6EB + +Count = 927 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 0001 +CT = 4DCE342F92709F323532F63B646B5472FF7B6DCF341D04AF0FD6660AE7D4E171DB881D3C14C58669760E06BE + +Count = 928 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102 +CT = 205DFA3C63008B098CD6A7D52015BE4AC8FBBE401C0781E4F4B7F788DA096BA0FCB556273B15D13462862DE0 + +Count = 929 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 00010203 +CT = C87AD14D08811A728840A7B4B4459EB7C0387E9614B6492D9DB485C3C2956DA68932DCE255679B6C5A31CB05 + +Count = 930 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 0001020304 +CT = D8E99B303D1C1B8052D8FA6696782154773AB6D46C05CADC20797294A1AFD9FAF7A5366CCD31107EF8AF6621 + +Count = 931 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405 +CT = 2FA0F6403756D41DD30F3F3406D83389520BA97CD50EE288D652C03BF12AE944F8E9857397824A3520D17D69 + +Count = 932 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 00010203040506 +CT = 63CAA3B9A7273B19FBB1E10EFCBF745DDADFE431382C8DDA0E59392CA25216491DFA926A45D6D58255607581 + +Count = 933 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 0001020304050607 +CT = 552EE50BF8FF278F28723DDA1BED2F5957D4FC716919FF3D79492325B524D08FAFA6A850196DFA02F0485AAB + +Count = 934 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708 +CT = 81084220919BC801D2B2BAAA35ED7DC06B809C32AA8991332FB428E4FC9CA92DC91D26DBC84413A4E6D50DDF + +Count = 935 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 00010203040506070809 +CT = 176C131507852AD867788F1B8C3352B41AEC73AE38A59E6FE95378BA15D46FDBD67215DB110B6F2C06015497 + +Count = 936 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A +CT = 44F820FBC52688195E88130DF72AFC3E40E8C63113BF2CF96079BE108CDFEBCF5009ADA10F770D500319B7A9 + +Count = 937 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B +CT = C3851CAA87F7D4254204738CCE319106F646A04126D0FE445F58982471E7533E41E21670F2FE24C86A118F97 + +Count = 938 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C +CT = 2917932BB5B0F1613D63304478A7806763AEED7AA9CADA9335F87C31ED6BEC4C638A540C71EF1800AA56A017 + +Count = 939 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D +CT = D1AA30993A1D82CADFD332D716AF317ADF959BCABBA4CF7AD3E8A70720E5A3FBC72C194030C1F47FA8A61BCC + +Count = 940 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E +CT = D0382BEF32AA160B81DD7200060BAB4347A0B42EB6F3D4696C109D9956F9A1B675695F9E79F76EFCC41BA099 + +Count = 941 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F +CT = AA269303B27EA790F165A847560F1326A092CE2C80B1B738D2E65A07B93E4F2C8952A07F0A4D5B1B7A93DBBE + +Count = 942 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 8DFD8D54768576390BE82B93636A5C16C91D4576C4F1A6A6C05149651954154279CDDE6E15764A07D89559DA + +Count = 943 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 52BE1230D2AA31E9698B6050836D301388F6665E2B3C8B2ECEC3F9DBD3F4410446A6FB0B793E1EA2644CBC49 + +Count = 944 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 4585DF8134B976825B31725459E0A155E5D0EE44DFD444D2E3108AB35DE836FB790234873FDD28FFC17B760A + +Count = 945 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 04DCEF193B191145B3163E192B1F6CC9CF82BD3AE21CA42B9FEA3A882B5C10E833C2337D84A34F21949B2197 + +Count = 946 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 7E020FE57AD817158A8D30E6883A19DC7A9357E221944B236D3EE6A440800F8A0DCC0BDB330EB157D074AF7D + +Count = 947 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 1D3A306E3F6ED9D2A95D293C6B019C7956B6AFD0847ADB1D4976F6EA050622F804214FADD1AB996DD4F85B4C + +Count = 948 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = D2BA45E329081E6EFCB7432250842B18DFB7236FC37682E1CBF46F2367DCE7ED4908D4E08C2AEFE4DD624B71 + +Count = 949 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 7B7ADB40B3718EE2C1C5D6EEBAEFF57B53E742C28EA331F6E1833432B7FCC3F39583F12A7454B4A099130B35 + +Count = 950 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 32B0DCA264AED8730F306A245F39A8740313034F2304B793B2A2A669B6E8D3FD00CEEE93CCB280AD23E6FFDF + +Count = 951 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = DCA1D44EC26EC098CD42BF05C6A4109F138C810ED811C22820F32FF9E8FAF2DB0357EEA60697E8AD305512FF + +Count = 952 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = A0CA308D97EC78D01EF45BD386EF4F3ADA395D50EC71B4916AA4809DF7CCA5B49AAD0E1E1F2665639A694F90 + +Count = 953 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 310490306A3B5E79BF2247B09A2D5CF482420B1323BE1DE896468DF9798AEC476EDC3FD4AE731788D90B3243 + +Count = 954 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 26CF401BC4747EA96F0354556EBF97F84250D730461C68036D682C98DCE650C6B514A0AF4E6EDC5FAFDA3D15 + +Count = 955 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 3C3982239CE1B9CAF876E432F3D9F192F7D01C9C3FF3CA5E828A426DDE405A3E1616FCDA17B9BEF33AEDCF99 + +Count = 956 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 9CC4F9BF3B13B90EC5365DC2E8318CAC6F9E0F58AC078B71C8F10F51729CA9437A738B67E780F6401DAA3559 + +Count = 957 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 69199DA76E16F693EEB1BAE1C2C8614D1822E7CF6E0D0D33AE3C0807839C05838983D63BFC488EC8B5917470 + +Count = 958 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = +CT = F65762E72D83738E70498EAD27BEDDA2426C1BF58F1BE714527B992CD5504345C5EF7F86F91020D2AD73F5B84F + +Count = 959 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 00 +CT = 4AE50553719B1016223C203ABC320FBD758F459BB131CC0B65CBEB7CAE7F4678C94A12D32377FBD33EAB595A2E + +Count = 960 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 0001 +CT = 4DCE342F92709F323532F63B646B5472FF7B6DCF341D04AF0FD6660A689CD4273A5B1B62F767921765C8716585 + +Count = 961 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102 +CT = 205DFA3C63008B098CD6A7D52015BE4AC8FBBE401C0781E4F4B7F78841B3BDD1F64FEE23D7B904BA5A541B25FC + +Count = 962 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 00010203 +CT = C87AD14D08811A728840A7B4B4459EB7C0387E9614B6492D9DB485C375C3A071CB0C6F004442709E84F96A27DD + +Count = 963 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 0001020304 +CT = D8E99B303D1C1B8052D8FA6696782154773AB6D46C05CADC20797294D632A1769A769D20447F2942EB987F6258 + +Count = 964 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405 +CT = 2FA0F6403756D41DD30F3F3406D83389520BA97CD50EE288D652C03B3A8C2EC11652B8D445203149106F11408B + +Count = 965 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 00010203040506 +CT = 63CAA3B9A7273B19FBB1E10EFCBF745DDADFE431382C8DDA0E59392C3854CCE6A398657B11C058B34DE4B0E65D + +Count = 966 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 0001020304050607 +CT = 552EE50BF8FF278F28723DDA1BED2F5957D4FC716919FF3D7949232553856EB5A8F57774CD9A7638AE70A1DD73 + +Count = 967 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708 +CT = 81084220919BC801D2B2BAAA35ED7DC06B809C32AA8991332FB428E46F3D4B43F7DD52189745F520D28D0D3A3C + +Count = 968 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 00010203040506070809 +CT = 176C131507852AD867788F1B8C3352B41AEC73AE38A59E6FE95378BA72A32D3D86EB0F39C1CE9C02F5FF73CC5B + +Count = 969 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A +CT = 44F820FBC52688195E88130DF72AFC3E40E8C63113BF2CF96079BE1079333947B8E0B806F7427CB845778BD979 + +Count = 970 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B +CT = C3851CAA87F7D4254204738CCE319106F646A04126D0FE445F589824C472DCEEBEDA1A121A28AC2C8E12230732 + +Count = 971 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C +CT = 2917932BB5B0F1613D63304478A7806763AEED7AA9CADA9335F87C3158ADA99C25ECF9371052CE3D5367D27198 + +Count = 972 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D +CT = D1AA30993A1D82CADFD332D716AF317ADF959BCABBA4CF7AD3E8A707D03048D70A3E37E20FF792298B17CEA554 + +Count = 973 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E +CT = D0382BEF32AA160B81DD7200060BAB4347A0B42EB6F3D4696C109D991F0DE3E46EEE610B177B86A3021268977A + +Count = 974 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F +CT = AA269303B27EA790F165A847560F1326A092CE2C80B1B738D2E65A07246E97EFD82461677445A8EE0AC20640B1 + +Count = 975 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 8DFD8D54768576390BE82B93636A5C16C91D4576C4F1A6A6C05149656E1922B3DD99F4CB6C940129A0C6B1CF5C + +Count = 976 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 52BE1230D2AA31E9698B6050836D301388F6665E2B3C8B2ECEC3F9DB184454FEF09C2A797C79638C40CEDFFF42 + +Count = 977 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 4585DF8134B976825B31725459E0A155E5D0EE44DFD444D2E3108AB370057499C195758840604089FFDB7DACEE + +Count = 978 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 04DCEF193B191145B3163E192B1F6CC9CF82BD3AE21CA42B9FEA3A883360841ABDDF7CFABA043489F0837EA6AF + +Count = 979 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 7E020FE57AD817158A8D30E6883A19DC7A9357E221944B236D3EE6A458C8A2888FEEAA8074A91523FB4ECE5544 + +Count = 980 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 1D3A306E3F6ED9D2A95D293C6B019C7956B6AFD0847ADB1D4976F6EA79EC32F967D214F4696E066CB810F65B9E + +Count = 981 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = D2BA45E329081E6EFCB7432250842B18DFB7236FC37682E1CBF46F2391467EB803B6275B34D62B3B1582E8BE63 + +Count = 982 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 7B7ADB40B3718EE2C1C5D6EEBAEFF57B53E742C28EA331F6E18334328641224B5182901EBAC83C1D0B994DF347 + +Count = 983 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 32B0DCA264AED8730F306A245F39A8740313034F2304B793B2A2A6696E27A3151B08BBCEE15E7E9E6879F781E7 + +Count = 984 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = DCA1D44EC26EC098CD42BF05C6A4109F138C810ED811C22820F32FF9F99040DB0D575D844F7B7947CAF56878ED + +Count = 985 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = A0CA308D97EC78D01EF45BD386EF4F3ADA395D50EC71B4916AA4809D0716A56737273ED3B06EFB45B2D3DA7B27 + +Count = 986 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 310490306A3B5E79BF2247B09A2D5CF482420B1323BE1DE896468DF92E26391ECE781C0431FD62AED95CB5BC96 + +Count = 987 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 26CF401BC4747EA96F0354556EBF97F84250D730461C68036D682C98F35336C42B14C96B4931446A6856339A0B + +Count = 988 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 3C3982239CE1B9CAF876E432F3D9F192F7D01C9C3FF3CA5E828A426D6CEECD07C05B6A96F8BA588429CBC97EFA + +Count = 989 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 9CC4F9BF3B13B90EC5365DC2E8318CAC6F9E0F58AC078B71C8F10F5125CEEB1C964B8AB7886C4BDCDBFB1823B2 + +Count = 990 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 69199DA76E16F693EEB1BAE1C2C8614D1822E7CF6E0D0D33AE3C080755DFBEB6494E4F1ED297F7C9175737CD1E + +Count = 991 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = +CT = F65762E72D83738E70498EAD27BEDDA2426C1BF58F1BE714527B992CD59043A9AB599E666C7028645447F28F3435 + +Count = 992 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 00 +CT = 4AE50553719B1016223C203ABC320FBD758F459BB131CC0B65CBEB7CAEB0A410AD7028D8A882E569AF8F2BB99C76 + +Count = 993 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 0001 +CT = 4DCE342F92709F323532F63B646B5472FF7B6DCF341D04AF0FD6660A6809AE246D2A637887BBA8F059B477E2CBCD + +Count = 994 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102 +CT = 205DFA3C63008B098CD6A7D52015BE4AC8FBBE401C0781E4F4B7F78841CF92927A0B86F8793983FAE5FB2DD9A7E3 + +Count = 995 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 00010203 +CT = C87AD14D08811A728840A7B4B4459EB7C0387E9614B6492D9DB485C375012E9F9B3875C25A4DA19AF730A389630B + +Count = 996 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 0001020304 +CT = D8E99B303D1C1B8052D8FA6696782154773AB6D46C05CADC20797294D6A14B972A17AC56DE1E8E4E7A812F4B3E2A + +Count = 997 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405 +CT = 2FA0F6403756D41DD30F3F3406D83389520BA97CD50EE288D652C03B3A38180F1D134709F299B56C971AE09DC927 + +Count = 998 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 00010203040506 +CT = 63CAA3B9A7273B19FBB1E10EFCBF745DDADFE431382C8DDA0E59392C38246C58B8B740F05D083F7FE97D38569FBA + +Count = 999 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 0001020304050607 +CT = 552EE50BF8FF278F28723DDA1BED2F5957D4FC716919FF3D79492325536C90C57BFCA9F6D95109EDB95D66B7A741 + +Count = 1000 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708 +CT = 81084220919BC801D2B2BAAA35ED7DC06B809C32AA8991332FB428E46F03A12D04DEB5320321BB8A90A754A5ECEB + +Count = 1001 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 00010203040506070809 +CT = 176C131507852AD867788F1B8C3352B41AEC73AE38A59E6FE95378BA723503FEED65380AFF10076B46AB6F13300C + +Count = 1002 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A +CT = 44F820FBC52688195E88130DF72AFC3E40E8C63113BF2CF96079BE10798C4498A9E6F240C7FD28CD3B3842FBD5C3 + +Count = 1003 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B +CT = C3851CAA87F7D4254204738CCE319106F646A04126D0FE445F589824C4C21E278335994B0261EBC21A1794DFB4CD + +Count = 1004 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C +CT = 2917932BB5B0F1613D63304478A7806763AEED7AA9CADA9335F87C315825ECF0BE8DB11258FB087E82B24742871D + +Count = 1005 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D +CT = D1AA30993A1D82CADFD332D716AF317ADF959BCABBA4CF7AD3E8A707D0A991A9A7B125E7D217D7488706DC28528D + +Count = 1006 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E +CT = D0382BEF32AA160B81DD7200060BAB4347A0B42EB6F3D4696C109D991F97B5ED54BA9988B9DB1BA74A339BA81BF5 + +Count = 1007 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F +CT = AA269303B27EA790F165A847560F1326A092CE2C80B1B738D2E65A07242E9F6103DACE04DC09AB6EC80B38EB5EEA + +Count = 1008 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 8DFD8D54768576390BE82B93636A5C16C91D4576C4F1A6A6C05149656E500069A12D17EEFB06C2F331FE913AC334 + +Count = 1009 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 52BE1230D2AA31E9698B6050836D301388F6665E2B3C8B2ECEC3F9DB18857D5E1CB5E43FA6D6067E9F818BA5367B + +Count = 1010 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 4585DF8134B976825B31725459E0A155E5D0EE44DFD444D2E3108AB370E8BFB8A07877AFC4DA1855B7D9DE29AC40 + +Count = 1011 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 04DCEF193B191145B3163E192B1F6CC9CF82BD3AE21CA42B9FEA3A88330D0875B8B5705F899C2A00E3C7765FAF86 + +Count = 1012 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 7E020FE57AD817158A8D30E6883A19DC7A9357E221944B236D3EE6A458E09A9CD61C0D3CB918063C5B3FE6842804 + +Count = 1013 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 1D3A306E3F6ED9D2A95D293C6B019C7956B6AFD0847ADB1D4976F6EA79F9673697A28D064EC789748EE864438B23 + +Count = 1014 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = D2BA45E329081E6EFCB7432250842B18DFB7236FC37682E1CBF46F2391BB801B04D462AD4797215D6693A64604CA + +Count = 1015 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 7B7ADB40B3718EE2C1C5D6EEBAEFF57B53E742C28EA331F6E1833432863835019BD09F8FEAEB59373B54B0C706F2 + +Count = 1016 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 32B0DCA264AED8730F306A245F39A8740313034F2304B793B2A2A6696E71FEF74786FAA23DDAAE1D031C7B277F77 + +Count = 1017 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = DCA1D44EC26EC098CD42BF05C6A4109F138C810ED811C22820F32FF9F923EEE3D6610FD337A98811E6A57852B887 + +Count = 1018 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = A0CA308D97EC78D01EF45BD386EF4F3ADA395D50EC71B4916AA4809D07C25ADF3E7C80E572799F4FC73C4545E3D8 + +Count = 1019 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 310490306A3B5E79BF2247B09A2D5CF482420B1323BE1DE896468DF92EFBEF4C42DF6F2B5FBA013DAEE1CC0D5AC6 + +Count = 1020 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 26CF401BC4747EA96F0354556EBF97F84250D730461C68036D682C98F31BC64EB167A178488D28A762C4C57DAEA7 + +Count = 1021 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 3C3982239CE1B9CAF876E432F3D9F192F7D01C9C3FF3CA5E828A426D6C4A016C39BACED5B5210A54C419B86128DD + +Count = 1022 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 9CC4F9BF3B13B90EC5365DC2E8318CAC6F9E0F58AC078B71C8F10F5125DCDCAABCA86924B28CBF696B9FE918A2F4 + +Count = 1023 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 69199DA76E16F693EEB1BAE1C2C8614D1822E7CF6E0D0D33AE3C08075574CD2667600D654C92A2AF92ADD2C38047 + +Count = 1024 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = +CT = F65762E72D83738E70498EAD27BEDDA2426C1BF58F1BE714527B992CD590BFF5043755EBDCC8EE840259DD0BCD71F4 + +Count = 1025 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 00 +CT = 4AE50553719B1016223C203ABC320FBD758F459BB131CC0B65CBEB7CAEB0E25291FAB6ED7652FDA1DFDF0FAE2DDFDC + +Count = 1026 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 0001 +CT = 4DCE342F92709F323532F63B646B5472FF7B6DCF341D04AF0FD6660A6809A744FF041CC75BD15DD0B2F194E9A008F4 + +Count = 1027 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102 +CT = 205DFA3C63008B098CD6A7D52015BE4AC8FBBE401C0781E4F4B7F78841CFF526C5607F0E3D4BF2C375706C69A9E39B + +Count = 1028 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 00010203 +CT = C87AD14D08811A728840A7B4B4459EB7C0387E9614B6492D9DB485C37501C6CBFAFBCC3DEC0DA8C5ECB82CD546C998 + +Count = 1029 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 0001020304 +CT = D8E99B303D1C1B8052D8FA6696782154773AB6D46C05CADC20797294D6A17AD1FB2C120181A2662404C2303EBB52FC + +Count = 1030 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405 +CT = 2FA0F6403756D41DD30F3F3406D83389520BA97CD50EE288D652C03B3A38242C75BEB69C03F30154F6FFA5685AF875 + +Count = 1031 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 00010203040506 +CT = 63CAA3B9A7273B19FBB1E10EFCBF745DDADFE431382C8DDA0E59392C3824BF0DFBDED32A5AE09BD114A02C130595E5 + +Count = 1032 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 0001020304050607 +CT = 552EE50BF8FF278F28723DDA1BED2F5957D4FC716919FF3D79492325536C78CA0BA3A138320824CDCFBBE22ED7C6DE + +Count = 1033 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708 +CT = 81084220919BC801D2B2BAAA35ED7DC06B809C32AA8991332FB428E46F034F4E38D9FE2DD83E9B152B064F59529638 + +Count = 1034 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 00010203040506070809 +CT = 176C131507852AD867788F1B8C3352B41AEC73AE38A59E6FE95378BA7235AA58C4D0EA91A6C1BBEF7B6C0B1D565428 + +Count = 1035 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A +CT = 44F820FBC52688195E88130DF72AFC3E40E8C63113BF2CF96079BE10798C71EE2E074954EFC39F94E3B09F57F5B6DF + +Count = 1036 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B +CT = C3851CAA87F7D4254204738CCE319106F646A04126D0FE445F589824C4C2E3343A708CD6F94DC8E23C3B246035B6C2 + +Count = 1037 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C +CT = 2917932BB5B0F1613D63304478A7806763AEED7AA9CADA9335F87C315825B87382F860E247975BA60CDDC41054CB00 + +Count = 1038 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D +CT = D1AA30993A1D82CADFD332D716AF317ADF959BCABBA4CF7AD3E8A707D0A91249C0C503EA39B05F013D8FD62417E6F1 + +Count = 1039 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E +CT = D0382BEF32AA160B81DD7200060BAB4347A0B42EB6F3D4696C109D991F97E1ACDD6BA18879E581B81F5B708B0F2796 + +Count = 1040 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F +CT = AA269303B27EA790F165A847560F1326A092CE2C80B1B738D2E65A07242E464A919E314333D880A1CE0047504D66D9 + +Count = 1041 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 8DFD8D54768576390BE82B93636A5C16C91D4576C4F1A6A6C05149656E503F927E36499DA802228B5ED52C33E28205 + +Count = 1042 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 52BE1230D2AA31E9698B6050836D301388F6665E2B3C8B2ECEC3F9DB18851C5208D85F2D31905AD5532DDB210744E0 + +Count = 1043 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 4585DF8134B976825B31725459E0A155E5D0EE44DFD444D2E3108AB370E8FF652CBBF697D600EB2EFB617D51311B29 + +Count = 1044 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 04DCEF193B191145B3163E192B1F6CC9CF82BD3AE21CA42B9FEA3A88330DB4B97514375ABC8F9763D903FE8F6FCA8D + +Count = 1045 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 7E020FE57AD817158A8D30E6883A19DC7A9357E221944B236D3EE6A458E06B886604D438D5C1BCFCD8C3D7DBF9BE42 + +Count = 1046 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 1D3A306E3F6ED9D2A95D293C6B019C7956B6AFD0847ADB1D4976F6EA79F97E17BA6E1982C7ECCFD71FF3D4434825A8 + +Count = 1047 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = D2BA45E329081E6EFCB7432250842B18DFB7236FC37682E1CBF46F2391BB717F050B95A643EB2A92CCF6895E269579 + +Count = 1048 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 7B7ADB40B3718EE2C1C5D6EEBAEFF57B53E742C28EA331F6E18334328638F3290335EB85E993362AAFAA8ACFE1532B + +Count = 1049 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 32B0DCA264AED8730F306A245F39A8740313034F2304B793B2A2A6696E71A23721F0DEE75236BF71FFA2E6F4C356AF + +Count = 1050 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = DCA1D44EC26EC098CD42BF05C6A4109F138C810ED811C22820F32FF9F923AC336234C6293333984685EBB46A9111FA + +Count = 1051 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = A0CA308D97EC78D01EF45BD386EF4F3ADA395D50EC71B4916AA4809D07C27155E864C660ECC0D019D2F756ED4BADA2 + +Count = 1052 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 310490306A3B5E79BF2247B09A2D5CF482420B1323BE1DE896468DF92EFBC6F25E769193DE9216697B351F8BCB8823 + +Count = 1053 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 26CF401BC4747EA96F0354556EBF97F84250D730461C68036D682C98F31B1D654A11B3BEA1D91DD5AC3BFE14DE2B24 + +Count = 1054 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 3C3982239CE1B9CAF876E432F3D9F192F7D01C9C3FF3CA5E828A426D6C4A470E8749BE55BA408CEBA547A5120E4A68 + +Count = 1055 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 9CC4F9BF3B13B90EC5365DC2E8318CAC6F9E0F58AC078B71C8F10F5125DC4CBFB472B1B10B3180545CFCF796E17622 + +Count = 1056 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 69199DA76E16F693EEB1BAE1C2C8614D1822E7CF6E0D0D33AE3C08075574D9EDB3A1211188151E82FF5730EF075837 + +Count = 1057 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = +CT = F65762E72D83738E70498EAD27BEDDA2426C1BF58F1BE714527B992CD590BF660E0E4C24AD5D1FD077219F3202378674 + +Count = 1058 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 00 +CT = 4AE50553719B1016223C203ABC320FBD758F459BB131CC0B65CBEB7CAEB0E20F00C13F3B7B821DF746361FFF4AD57F14 + +Count = 1059 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 0001 +CT = 4DCE342F92709F323532F63B646B5472FF7B6DCF341D04AF0FD6660A6809A70228EB38F8BF34BD81B4EAF40103AC87B5 + +Count = 1060 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102 +CT = 205DFA3C63008B098CD6A7D52015BE4AC8FBBE401C0781E4F4B7F78841CFF57B9FCA99241D3E9FCEA90EE77F5C7BDC3D + +Count = 1061 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 00010203 +CT = C87AD14D08811A728840A7B4B4459EB7C0387E9614B6492D9DB485C37501C69DC4417FEDC37434B0B963FEE831972A0B + +Count = 1062 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 0001020304 +CT = D8E99B303D1C1B8052D8FA6696782154773AB6D46C05CADC20797294D6A17AA96148A735D768823ABD8CABA8621FF46C + +Count = 1063 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405 +CT = 2FA0F6403756D41DD30F3F3406D83389520BA97CD50EE288D652C03B3A3824AE949AE64D09F9F95750223390E03F5AAB + +Count = 1064 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 00010203040506 +CT = 63CAA3B9A7273B19FBB1E10EFCBF745DDADFE431382C8DDA0E59392C3824BF00574DF8B6646F6E8590290C73603DB464 + +Count = 1065 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 0001020304050607 +CT = 552EE50BF8FF278F28723DDA1BED2F5957D4FC716919FF3D79492325536C7832CE88E368A315BE6C73D81D9B20585CDC + +Count = 1066 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708 +CT = 81084220919BC801D2B2BAAA35ED7DC06B809C32AA8991332FB428E46F034F83F59B2AA941A06F7216ADE9A17B6C5FFB + +Count = 1067 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 00010203040506070809 +CT = 176C131507852AD867788F1B8C3352B41AEC73AE38A59E6FE95378BA7235AA74285C44ECCE0723F992ADE42FFB928DDC + +Count = 1068 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A +CT = 44F820FBC52688195E88130DF72AFC3E40E8C63113BF2CF96079BE10798C71903CEDD3A34DBF8019F3041B34A3B13057 + +Count = 1069 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B +CT = C3851CAA87F7D4254204738CCE319106F646A04126D0FE445F589824C4C2E35D69D88D89A8F0D2F60CC4EB2BCCC43938 + +Count = 1070 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C +CT = 2917932BB5B0F1613D63304478A7806763AEED7AA9CADA9335F87C315825B8EFC6BEDB48A642CD2E630F8DE0249C1953 + +Count = 1071 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D +CT = D1AA30993A1D82CADFD332D716AF317ADF959BCABBA4CF7AD3E8A707D0A912A2D05702E8235C5C646E2341E340E16EE3 + +Count = 1072 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E +CT = D0382BEF32AA160B81DD7200060BAB4347A0B42EB6F3D4696C109D991F97E13E580525301484D60D1ABB311EF28F01E9 + +Count = 1073 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F +CT = AA269303B27EA790F165A847560F1326A092CE2C80B1B738D2E65A07242E4604E179E77026F42C75995B88477BD79A23 + +Count = 1074 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 8DFD8D54768576390BE82B93636A5C16C91D4576C4F1A6A6C05149656E503FEFE1FD0C6D8166BEF6DD4B056B7D6F8B1E + +Count = 1075 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 52BE1230D2AA31E9698B6050836D301388F6665E2B3C8B2ECEC3F9DB18851CA53D7697F98EF96B9D2EEB8897A6E38036 + +Count = 1076 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 4585DF8134B976825B31725459E0A155E5D0EE44DFD444D2E3108AB370E8FF4FBB37F054B55ACCFD75225015A2765055 + +Count = 1077 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 04DCEF193B191145B3163E192B1F6CC9CF82BD3AE21CA42B9FEA3A88330DB411A6A064DAFB8AB891ADE0D87AA52C29B8 + +Count = 1078 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 7E020FE57AD817158A8D30E6883A19DC7A9357E221944B236D3EE6A458E06BFFF078F53E8EA9BC302D47EC9086FA217F + +Count = 1079 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 1D3A306E3F6ED9D2A95D293C6B019C7956B6AFD0847ADB1D4976F6EA79F97E37B675FC57EF9132E70C31EA9A1E48DF0B + +Count = 1080 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = D2BA45E329081E6EFCB7432250842B18DFB7236FC37682E1CBF46F2391BB71C17255CA0330591231E0DB7A6E102D1E60 + +Count = 1081 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 7B7ADB40B3718EE2C1C5D6EEBAEFF57B53E742C28EA331F6E18334328638F31AB2EACC522A88D0743FF2E0FF2B3EC1FB + +Count = 1082 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 32B0DCA264AED8730F306A245F39A8740313034F2304B793B2A2A6696E71A258AE98EC91482010AD0D2271E0CB6172C8 + +Count = 1083 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = DCA1D44EC26EC098CD42BF05C6A4109F138C810ED811C22820F32FF9F923AC050C1FC2E50F2B4FF4FF73756F279277E5 + +Count = 1084 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = A0CA308D97EC78D01EF45BD386EF4F3ADA395D50EC71B4916AA4809D07C271DC3FF478088D3781E7F932724680B76276 + +Count = 1085 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 310490306A3B5E79BF2247B09A2D5CF482420B1323BE1DE896468DF92EFBC624FF850B18637537DEDEE10A1077D90C0E + +Count = 1086 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 26CF401BC4747EA96F0354556EBF97F84250D730461C68036D682C98F31B1DE18CB6032FC0DA3565FC3600F6DE51FC1A + +Count = 1087 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 3C3982239CE1B9CAF876E432F3D9F192F7D01C9C3FF3CA5E828A426D6C4A479BBAFFBD2797E75C823E5F90ADB4EAA0A8 + +Count = 1088 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 9CC4F9BF3B13B90EC5365DC2E8318CAC6F9E0F58AC078B71C8F10F5125DC4CE034268356A201B578C3F8541F8F3C2397 + +Count = 1089 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 69199DA76E16F693EEB1BAE1C2C8614D1822E7CF6E0D0D33AE3C08075574D982AB536E9A5A1D2778CFF0D5AB8652F82E + diff --git a/spook/Implementations/crypto_aead/spook128mu384v2/opt_c/COPYING b/spook/Implementations/crypto_aead/spook128mu384v2/opt_c/COPYING new file mode 100644 index 0000000..0e259d4 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128mu384v2/opt_c/COPYING @@ -0,0 +1,121 @@ +Creative Commons Legal Code + +CC0 1.0 Universal + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS + PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM + THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED + HEREUNDER. + +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer +exclusive Copyright and Related Rights (defined below) upon the creator +and subsequent owner(s) (each and all, an "owner") of an original work of +authorship and/or a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for +the purpose of contributing to a commons of creative, cultural and +scientific works ("Commons") that the public can reliably and without fear +of later claims of infringement build upon, modify, incorporate in other +works, reuse and redistribute as freely as possible in any form whatsoever +and for any purposes, including without limitation commercial purposes. +These owners may contribute to the Commons to promote the ideal of a free +culture and the further production of creative, cultural and scientific +works, or to gain reputation or greater distribution for their Work in +part through the use and efforts of others. + +For these and/or other purposes and motivations, and without any +expectation of additional consideration or compensation, the person +associating CC0 with a Work (the "Affirmer"), to the extent that he or she +is an owner of Copyright and Related Rights in the Work, voluntarily +elects to apply CC0 to the Work and publicly distribute the Work under its +terms, with knowledge of his or her Copyright and Related Rights in the +Work and the meaning and intended legal effect of CC0 on those rights. + +1. Copyright and Related Rights. A Work made available under CC0 may be +protected by copyright and related or neighboring rights ("Copyright and +Related Rights"). Copyright and Related Rights include, but are not +limited to, the following: + + i. the right to reproduce, adapt, distribute, perform, display, + communicate, and translate a Work; + ii. moral rights retained by the original author(s) and/or performer(s); +iii. publicity and privacy rights pertaining to a person's image or + likeness depicted in a Work; + iv. rights protecting against unfair competition in regards to a Work, + subject to the limitations in paragraph 4(a), below; + v. rights protecting the extraction, dissemination, use and reuse of data + in a Work; + vi. database rights (such as those arising under Directive 96/9/EC of the + European Parliament and of the Council of 11 March 1996 on the legal + protection of databases, and under any national implementation + thereof, including any amended or successor version of such + directive); and +vii. other similar, equivalent or corresponding rights throughout the + world based on applicable law or treaty, and any national + implementations thereof. + +2. Waiver. To the greatest extent permitted by, but not in contravention +of, applicable law, Affirmer hereby overtly, fully, permanently, +irrevocably and unconditionally waives, abandons, and surrenders all of +Affirmer's Copyright and Related Rights and associated claims and causes +of action, whether now known or unknown (including existing as well as +future claims and causes of action), in the Work (i) in all territories +worldwide, (ii) for the maximum duration provided by applicable law or +treaty (including future time extensions), (iii) in any current or future +medium and for any number of copies, and (iv) for any purpose whatsoever, +including without limitation commercial, advertising or promotional +purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each +member of the public at large and to the detriment of Affirmer's heirs and +successors, fully intending that such Waiver shall not be subject to +revocation, rescission, cancellation, termination, or any other legal or +equitable action to disrupt the quiet enjoyment of the Work by the public +as contemplated by Affirmer's express Statement of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason +be judged legally invalid or ineffective under applicable law, then the +Waiver shall be preserved to the maximum extent permitted taking into +account Affirmer's express Statement of Purpose. In addition, to the +extent the Waiver is so judged Affirmer hereby grants to each affected +person a royalty-free, non transferable, non sublicensable, non exclusive, +irrevocable and unconditional license to exercise Affirmer's Copyright and +Related Rights in the Work (i) in all territories worldwide, (ii) for the +maximum duration provided by applicable law or treaty (including future +time extensions), (iii) in any current or future medium and for any number +of copies, and (iv) for any purpose whatsoever, including without +limitation commercial, advertising or promotional purposes (the +"License"). The License shall be deemed effective as of the date CC0 was +applied by Affirmer to the Work. Should any part of the License for any +reason be judged legally invalid or ineffective under applicable law, such +partial invalidity or ineffectiveness shall not invalidate the remainder +of the License, and in such case Affirmer hereby affirms that he or she +will not (i) exercise any of his or her remaining Copyright and Related +Rights in the Work or (ii) assert any associated claims and causes of +action with respect to the Work, in either case contrary to Affirmer's +express Statement of Purpose. + +4. Limitations and Disclaimers. + + a. No trademark or patent rights held by Affirmer are waived, abandoned, + surrendered, licensed or otherwise affected by this document. + b. Affirmer offers the Work as-is and makes no representations or + warranties of any kind concerning the Work, express, implied, + statutory or otherwise, including without limitation warranties of + title, merchantability, fitness for a particular purpose, non + infringement, or the absence of latent or other defects, accuracy, or + the present or absence of errors, whether or not discoverable, all to + the greatest extent permissible under applicable law. + c. Affirmer disclaims responsibility for clearing rights of other persons + that may apply to the Work or any use thereof, including without + limitation any person's Copyright and Related Rights in the Work. + Further, Affirmer disclaims responsibility for obtaining any necessary + consents, permissions or other rights required for any use of the + Work. + d. Affirmer understands and acknowledges that Creative Commons is not a + party to this document and has no duty or obligation with respect to + this CC0 or use of the Work. diff --git a/spook/Implementations/crypto_aead/spook128mu384v2/opt_c/api.h b/spook/Implementations/crypto_aead/spook128mu384v2/opt_c/api.h new file mode 100644 index 0000000..5cd4ad3 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128mu384v2/opt_c/api.h @@ -0,0 +1,7 @@ +#include "parameters.h" +#define CRYPTO_KEYBYTES KEYBYTES +#define CRYPTO_NPUBBYTES 16 +#define CRYPTO_NSECBYTES 0 +#define CRYPTO_ABYTES 16 +#define CRYPTO_NOOVERLAP 1 + diff --git a/spook/Implementations/crypto_aead/spook128mu384v2/opt_c/clyde_32bit.c b/spook/Implementations/crypto_aead/spook128mu384v2/opt_c/clyde_32bit.c new file mode 100644 index 0000000..694b708 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128mu384v2/opt_c/clyde_32bit.c @@ -0,0 +1,75 @@ +/* MIT License + * + * Copyright (c) 2019 Gaëtan Cassiers Olivier Bronchain + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +#include +#include +#include "primitives.h" +#include "primitives.c" +#define CLYDE_128_NS 6 // Number of steps +#define CLYDE_128_NR 2 * CLYDE_128_NS // Number of rounds +#define XORLS(DEST, OP) do { \ + (DEST)[0] ^= (OP)[0]; \ + (DEST)[1] ^= (OP)[1]; \ + (DEST)[2] ^= (OP)[2]; \ + (DEST)[3] ^= (OP)[3]; } while (0) + +#define XORCST(DEST, LFSR) do { \ + (DEST)[0] ^= ((LFSR)>>3 & 0x1); \ + (DEST)[1] ^= ((LFSR)>>2 & 0x1); \ + (DEST)[2] ^= ((LFSR)>>1 & 0x1); \ + (DEST)[3] ^= ((LFSR) & 0x1); } while (0) + +void clyde128_encrypt(clyde128_state state, const clyde128_state t, const unsigned char* k) { + // Key schedule + clyde128_state k_st; + memcpy(k_st, k, CLYDE128_NBYTES); + clyde128_state tk[3] = { + { t[0], t[1], t[2], t[3] }, + { t[0] ^ t[2], t[1] ^ t[3], t[0], t[1] }, + { t[2], t[3], t[0] ^ t[2], t[1] ^ t[3] } + }; + XORLS(tk[0], k_st); + XORLS(tk[1], k_st); + XORLS(tk[2], k_st); + + // Datapath + XORLS(state, tk[0]); + uint32_t off = 0x924; // 2-bits describing the round key + uint32_t lfsr = 0x8; // LFSR for round constant + for (uint32_t s = 0; s < CLYDE_128_NS; s++) { + sbox_layer(state); + lbox(&state[0], &state[1]); + lbox(&state[2], &state[3]); + XORCST(state,lfsr); + uint32_t b = lfsr & 0x1; + lfsr = (lfsr^(b<<3) | b<<4)>>1; // update LFSR + + sbox_layer(state); + lbox(&state[0], &state[1]); + lbox(&state[2], &state[3]); + XORCST(state,lfsr); + b = lfsr & 0x1; + lfsr = (lfsr^(b<<3) | b<<4)>>1; // update LFSR + off >>=2; + XORLS(state, tk[off&0x03]); + } +} diff --git a/spook/Implementations/crypto_aead/spook128mu384v2/opt_c/crypto_aead.h b/spook/Implementations/crypto_aead/spook128mu384v2/opt_c/crypto_aead.h new file mode 100644 index 0000000..53ec4a7 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128mu384v2/opt_c/crypto_aead.h @@ -0,0 +1,12 @@ + +int crypto_aead_encrypt(unsigned char* c, unsigned long long* clen, + const unsigned char* m, unsigned long long mlen, + const unsigned char* ad, unsigned long long adlen, + const unsigned char* nsec, const unsigned char* npub, + const unsigned char* k); + +int crypto_aead_decrypt(unsigned char* m, unsigned long long* mlen, + unsigned char* nsec, const unsigned char* c, + unsigned long long clen, const unsigned char* ad, + unsigned long long adlen, const unsigned char* npub, + const unsigned char* k); diff --git a/spook/Implementations/crypto_aead/spook128mu384v2/opt_c/encrypt.c b/spook/Implementations/crypto_aead/spook128mu384v2/opt_c/encrypt.c new file mode 100644 index 0000000..74d09fa --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128mu384v2/opt_c/encrypt.c @@ -0,0 +1,44 @@ +/* Spook Reference Implementation v1 + * + * Written in 2019 at UCLouvain (Belgium) by Olivier Bronchain, Gaetan Cassiers + * and Charles Momin. + * To the extent possible under law, the author(s) have dedicated all copyright + * and related and neighboring rights to this software to the public domain + * worldwide. This software is distributed without any warranty. + * + * You should have received a copy of the CC0 Public Domain Dedication along with + * this software. If not, see . + */ +#include "crypto_aead.h" +#include "s1p.h" + +#ifdef __GNUC__ +#define UNUSED __attribute__((unused)) +#else +#define UNUSED +#endif + +// Spook encryption. +int crypto_aead_encrypt(unsigned char* c, unsigned long long* clen, + const unsigned char* m, unsigned long long mlen, + const unsigned char* ad, unsigned long long adlen, + const unsigned char* nsec UNUSED, + const unsigned char* npub, const unsigned char* k) { + unsigned char p[P_NBYTES]; + const unsigned char* k_priv; + init_keys(&k_priv, p, k); + s1p_encrypt(c, clen, ad, adlen, m, mlen, k_priv, p, npub); + return 0; +} + +// Spook encryption. +int crypto_aead_decrypt(unsigned char* m, unsigned long long* mlen, + unsigned char* nsec UNUSED, const unsigned char* c, + unsigned long long clen, const unsigned char* ad, + unsigned long long adlen, const unsigned char* npub, + const unsigned char* k) { + unsigned char p[P_NBYTES]; + const unsigned char* k_priv; + init_keys(&k_priv, p, k); + return s1p_decrypt(m, mlen, ad, adlen, c, clen, k_priv, p, npub); +} diff --git a/spook/Implementations/crypto_aead/spook128mu384v2/opt_c/iacaMarks.h b/spook/Implementations/crypto_aead/spook128mu384v2/opt_c/iacaMarks.h new file mode 100644 index 0000000..be1973e --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128mu384v2/opt_c/iacaMarks.h @@ -0,0 +1,53 @@ +/* +* Copyright (2008-2009) Intel Corporation All Rights Reserved. +* The source code contained or described herein and all documents +* related to the source code ("Material") are owned by Intel Corporation +* or its suppliers or licensors. Title to the Material remains with +* Intel Corporation or its suppliers and licensors. The Material +* contains trade secrets and proprietary and confidential information +* of Intel or its suppliers and licensors. The Material is protected +* by worldwide copyright and trade secret laws and treaty provisions. +* No part of the Material may be used, copied, reproduced, modified, +* published, uploaded, posted, transmitted, distributed, or disclosed +* in any way without Intel(R)s prior express written permission. +* +* No license under any patent, copyright, trade secret or other +* intellectual property right is granted to or conferred upon you by +* disclosure or delivery of the Materials, either expressly, by implication, +* inducement, estoppel or otherwise. Any license under such intellectual +* property rights must be express and approved by Intel in writing. +*/ + +#if defined (__GNUC__) +#define IACA_SSC_MARK( MARK_ID ) \ +__asm__ __volatile__ ( \ + "\n\t movl $"#MARK_ID", %%ebx" \ + "\n\t .byte 0x64, 0x67, 0x90" \ + : : : "memory" ); + +#else +#define IACA_SSC_MARK(x) {__asm mov ebx, x\ + __asm _emit 0x64 \ + __asm _emit 0x67 \ + __asm _emit 0x90 } +#endif + +#define IACA_START {IACA_SSC_MARK(111)} +#define IACA_END {IACA_SSC_MARK(222)} + +#ifdef _WIN64 +#include +#define IACA_VC64_START __writegsbyte(111, 111); +#define IACA_VC64_END __writegsbyte(222, 222); +#endif + +/**************** asm ***************** +;START_MARKER +mov ebx, 111 +db 0x64, 0x67, 0x90 + +;END_MARKER +mov ebx, 222 +db 0x64, 0x67, 0x90 + +**************************************/ diff --git a/spook/Implementations/crypto_aead/spook128mu384v2/opt_c/parameters.h b/spook/Implementations/crypto_aead/spook128mu384v2/opt_c/parameters.h new file mode 100644 index 0000000..ba90431 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128mu384v2/opt_c/parameters.h @@ -0,0 +1,30 @@ +/* Spook Reference Implementation v1 + * + * Written in 2019 at UCLouvain (Belgium) by Olivier Bronchain, Gaetan Cassiers + * and Charles Momin. + * To the extent possible under law, the author(s) have dedicated all copyright + * and related and neighboring rights to this software to the public domain + * worldwide. This software is distributed without any warranty. + * + * You should have received a copy of the CC0 Public Domain Dedication along with + * this software. If not, see . + */ +#ifndef _PARAMETERS_H_ +#define _PARAMETERS_H_ + +#define MULTI_USER 1 +#define SMALL_PERM 1 + +#if MULTI_USER +#define KEYBYTES 32 +#else +#define KEYBYTES 16 +#endif + +#include "api.h" + +#if (KEYBYTES != CRYPTO_KEYBYTES) +#error "Wrong parameters in api.h" +#endif + +#endif //_PARAMETERS_H_ diff --git a/spook/Implementations/crypto_aead/spook128mu384v2/opt_c/primitives.c b/spook/Implementations/crypto_aead/spook128mu384v2/opt_c/primitives.c new file mode 100644 index 0000000..acab323 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128mu384v2/opt_c/primitives.c @@ -0,0 +1,94 @@ +#include "primitives.h" +#ifdef SHADOW +static uint32_t lfsr_poly; +static uint32_t xtime_poly; +#endif + +// Apply a S-box layer to a Clyde-128 state. +static void sbox_layer(uint32_t* state) { + uint32_t y1 = (state[0] & state[1]) ^ state[2]; + uint32_t y0 = (state[3] & state[0]) ^ state[1]; + uint32_t y3 = (y1 & state[3]) ^ state[0]; + uint32_t y2 = (y0 & y1) ^ state[3]; + state[0] = y0; + state[1] = y1; + state[2] = y2; + state[3] = y3; +} + +// Apply a L-box to a pair of Clyde-128 rows. +static void lbox(uint32_t* x, uint32_t* y) { + uint32_t a, b, c, d; + a = *x ^ ROT32(*x, 12); + b = *y ^ ROT32(*y, 12); + a = a ^ ROT32(a, 3); + b = b ^ ROT32(b, 3); + a = a ^ ROT32(*x, 17); + b = b ^ ROT32(*y, 17); + c = a ^ ROT32(a, 31); + d = b ^ ROT32(b, 31); + a = a ^ ROT32(d, 26); + b = b ^ ROT32(c, 25); + a = a ^ ROT32(c, 15); + b = b ^ ROT32(d, 15); + *x = a; + *y = b; +} + +#ifdef SHADOW +void set_poly_lfsr(uint32_t l){ + lfsr_poly = l; +} +void set_poly_xtime(uint32_t l){ + xtime_poly = l; +} + +static uint32_t update_lfsr(uint32_t x) { + int32_t tmp1 = x; + uint32_t tmp = (tmp1 >>31) & lfsr_poly; + return (x<<1) ^ tmp; +} + +static uint32_t xtime(uint32_t x) { + int32_t tmp1 = x; + uint32_t tmp = (tmp1 >>31) & xtime_poly; + return (x<<1) ^ tmp; +} + +// Apply a D-box layer to a Shadow state. +static void dbox_mls_layer(shadow_state state,uint32_t *lfsr) { +for (unsigned int row = 0; row < LS_ROWS; row++) { +#if SMALL_PERM + uint32_t x1 = state[0][row]; + uint32_t x2 = state[1][row]; + uint32_t x3 = state[2][row]; + + uint32_t a = x1 ^ x3; + uint32_t b = a ^ x2; + uint32_t c = xtime(a) ^ (x1 ^ x2); + state[0][row] = a ^ c; + state[1][row] = b; + state[2][row] = c; + + state[0][row] ^= *lfsr; + *lfsr = update_lfsr(*lfsr); + +#else + + state[0][row] ^= state[1][row]; + state[2][row] ^= state[3][row]; + state[1][row] ^= state[2][row]; + state[3][row] ^= xtime(state[0][row]); + state[2][row] ^= xtime(state[3][row]); + state[1][row] = xtime(state[1][row]); + state[0][row] ^= state[1][row]; + state[3][row] ^= state[0][row]; + state[1][row] ^= state[2][row]; + + state[0][row] ^= *lfsr; + *lfsr = update_lfsr(*lfsr); +#endif // SMALL_PERM + } + +} +#endif diff --git a/spook/Implementations/crypto_aead/spook128mu384v2/opt_c/primitives.h b/spook/Implementations/crypto_aead/spook128mu384v2/opt_c/primitives.h new file mode 100644 index 0000000..df99be9 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128mu384v2/opt_c/primitives.h @@ -0,0 +1,52 @@ +/* Spook Reference Implementation v1 + * + * Written in 2019 at UCLouvain (Belgium) by Olivier Bronchain, Gaetan Cassiers + * and Charles Momin. + * To the extent possible under law, the author(s) have dedicated all copyright + * and related and neighboring rights to this software to the public domain + * worldwide. This software is distributed without any warranty. + * + * You should have received a copy of the CC0 Public Domain Dedication along with + * this software. If not, see . + */ +#ifndef _H_PRIMITIVES_H_ +#define _H_PRIMITIVES_H_ + +#include +#include "parameters.h" + +#define CLYDE128_NBYTES 16 + +#define ROTL(x, n) ((x << n) | (x >> ((32-n) & 31))) +#ifndef SHCST +#define SHCST 1 +#endif + +#ifndef DBOX +#define DBOX 1 +#endif + +#if SMALL_PERM +#define SHADOW_NBYTES 48 +#else +#define SHADOW_NBYTES 64 +#endif // SMALL_PERM + +#define LS_ROWS 4 // Rows in the LS design +#define LS_ROW_BYTES 4 // number of bytes per row in the LS design +#define MLS_BUNDLES \ + (SHADOW_NBYTES / (LS_ROWS* LS_ROW_BYTES)) // Bundles in the mLS design + +#define ROT32(x,n) ((uint32_t)(((x)>>(n))|((x)<<(32-(n))))) +typedef __attribute__((aligned(16))) uint32_t clyde128_state[LS_ROWS]; +typedef __attribute__((aligned(64))) clyde128_state shadow_state[MLS_BUNDLES]; + +void clyde128_encrypt(clyde128_state state, + const clyde128_state t, const unsigned char* k); + +void shadow(shadow_state state); +static void sbox_layer(uint32_t* state); +static void dbox_mls_layer(shadow_state state,uint32_t *lfsr); +static void lbox(uint32_t* x, uint32_t* y); + +#endif //_H_PRIMITIVES_H_ diff --git a/spook/Implementations/crypto_aead/spook128mu384v2/opt_c/s1p.c b/spook/Implementations/crypto_aead/spook128mu384v2/opt_c/s1p.c new file mode 100644 index 0000000..a4b7166 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128mu384v2/opt_c/s1p.c @@ -0,0 +1,197 @@ +/* MIT License + * + * Copyright (c) 2019 Gaëtan Cassiers + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +#include +#include +#include +#include "primitives.h" +#include "s1p.h" +#include "parameters.h" + +#define CAPACITY_BYTES 32 +#define RATE_BYTES (SHADOW_NBYTES - CAPACITY_BYTES) +#define RATE_BUNDLES (RATE_BYTES/(LS_ROWS*LS_ROW_BYTES)) + +// Working mode for block compression. +typedef enum { + AD, + PLAINTEXT, + CIPHERTEXT +} compress_mode; + +static void compress_block(unsigned char *state, unsigned char *out, + const unsigned char *d, compress_mode mode, + unsigned long long offset, unsigned long long n); + +static unsigned long long compress_data(shadow_state state, + unsigned char *out, + const unsigned char *d, + unsigned long long dlen, + compress_mode mode); + +static void init_sponge_state(shadow_state state, + const unsigned char *k, const unsigned char *p, + const unsigned char *n); +static void xor_bytes(unsigned char* dest, const unsigned char* src1, + const unsigned char* src2, unsigned long long n); + +void init_keys(const unsigned char **k, unsigned char p[P_NBYTES], + const unsigned char *k_glob) { + *k = k_glob; +#if MULTI_USER + memcpy(p, k_glob + CLYDE128_NBYTES, P_NBYTES); + p[P_NBYTES - 1] &= 0x7F; // set last p bit to 0 + p[P_NBYTES - 1] |= 0x40; // set next to last p bit to 0 +#else + memset(p, 0, P_NBYTES); +#endif // MULTI_USER +} + +static void init_sponge_state(shadow_state state, + const unsigned char *k, const unsigned char *p, + const unsigned char *n) { +// init state + memset(state, 0, SHADOW_NBYTES); + memcpy(state[0], n, P_NBYTES); + memcpy(state[1], p, CRYPTO_NPUBBYTES); + + memcpy(state[2], n, CRYPTO_NPUBBYTES); + clyde128_encrypt(state[0], state[1], k); + + // initial permutation + shadow(state); +} + +void s1p_encrypt(unsigned char *c, unsigned long long *clen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *m, unsigned long long mlen, + const unsigned char *k, const unsigned char *p, + const unsigned char *n) { + // permutation state + shadow_state state; + init_sponge_state(state, k, p, n); + + // compress associated data + compress_data(state, NULL, ad, adlen, AD); + + // compress message + unsigned long long c_bytes = 0; + if (mlen > 0) { + state[RATE_BUNDLES][0] ^= 0x01; + c_bytes = compress_data(state, c, m, mlen, PLAINTEXT); + } + + // tag + state[1][LS_ROWS- 1] |= 0x80000000; + clyde128_encrypt(state[0], state[1], k); + memcpy(c+c_bytes, state[0], CLYDE128_NBYTES); + *clen = c_bytes + CLYDE128_NBYTES; +} + +int s1p_decrypt(unsigned char *m, unsigned long long *mlen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *c, unsigned long long clen, + const unsigned char *k, const unsigned char *p, + const unsigned char *n) { + // permutation state + shadow_state state; + init_sponge_state(state, k, p, n); + + // compress associated data + compress_data(state, NULL, ad, adlen, AD); + + // compress message + unsigned long long m_bytes = 0; + if (clen > CLYDE128_NBYTES) { + state[RATE_BUNDLES][0] ^= 0x01; + m_bytes = compress_data(state, m, c, clen - CLYDE128_NBYTES, CIPHERTEXT); + } + + // tag verification + state[1][LS_ROWS- 1] |= 0x80000000; + clyde128_encrypt(state[0], state[1], k); + unsigned char *st0 = (unsigned char *) state[0]; + int tag_ok = 1; + for (int i = 0; i < 4*LS_ROWS; i++) { + tag_ok &= (st0[i] == c[m_bytes+i]); + } + if (tag_ok) { + *mlen = m_bytes; + return 0; + } else { + // Reset output buffer to avoid unintended unauthenticated plaintext + // release. + memset(m, 0, clen - CLYDE128_NBYTES); + *mlen = 0; + return -1; + } +} + +// Compress a block into the state. Length of the block is n and buffers are +// accessed starting at offset. Input block is d, output is written into +// buffer out if mode is PLAINTEXT or CIPHERTEXT. +// Only the XOR operation is performed, not XORing of padding constants. +static void compress_block(unsigned char *state, unsigned char *out, + const unsigned char *d, compress_mode mode, + unsigned long long offset, unsigned long long n) { + if (mode == CIPHERTEXT) { + xor_bytes(out + offset, state, d + offset, n); + memcpy(state, d + offset, n); + } else { + xor_bytes(state, state, d + offset, n); + if (mode == PLAINTEXT) { + memcpy(out + offset, state, n); + } + } +} + +// Compress a block into the state (in duplex-sponge mode). +// Input data buffer is d with length dlen. +// Output is written into buffer out if mode is PLAINTEXT or CIPHERTEXT. +// Padding is handled if needed. +static unsigned long long compress_data(shadow_state state, + unsigned char *out, + const unsigned char *d, + unsigned long long dlen, + compress_mode mode) { + unsigned long long i; + for (i = 0; i < dlen / RATE_BYTES; i++) { + compress_block((uint8_t *)state, out, d, mode, i * RATE_BYTES, RATE_BYTES); + shadow(state); + } + int rem = dlen % RATE_BYTES; + if (rem != 0) { + compress_block((uint8_t *)state, out, d, mode, i * RATE_BYTES, rem); + ((uint8_t *)state)[rem] ^= 0x01; + ((uint8_t *)state)[RATE_BYTES] ^= 0x02; + shadow(state); + } + return i * RATE_BYTES + rem; +} + +// XOR buffers src1 and src2 into buffer dest (all buffers contain n bytes). +void xor_bytes(unsigned char* dest, const unsigned char* src1, + const unsigned char* src2, unsigned long long n) { + for ( unsigned long long i = 0; i < n; i++) { + dest[i] = src1[i] ^ src2[i]; + } +} diff --git a/spook/Implementations/crypto_aead/spook128mu384v2/opt_c/s1p.h b/spook/Implementations/crypto_aead/spook128mu384v2/opt_c/s1p.h new file mode 100644 index 0000000..314f86a --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128mu384v2/opt_c/s1p.h @@ -0,0 +1,47 @@ +/* MIT License + * + * Copyright (c) 2019 Gaëtan Cassiers + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#ifndef _H_S1P_H_ +#define _H_S1P_H_ + +#include "parameters.h" + +// Size of the P parameter +#define P_NBYTES 16 + +void s1p_encrypt(unsigned char *c, unsigned long long *clen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *m, unsigned long long mlen, + const unsigned char *k, const unsigned char *p, + const unsigned char *n); + +int s1p_decrypt(unsigned char *m, unsigned long long *mlen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *c, unsigned long long clen, + const unsigned char *k, const unsigned char *p, + const unsigned char *n); + +void init_keys(const unsigned char **k, unsigned char p[P_NBYTES], + const unsigned char *k_glob); + +#endif //_H_S1P_H_ diff --git a/spook/Implementations/crypto_aead/spook128mu384v2/opt_c/shadow_32bit.c b/spook/Implementations/crypto_aead/spook128mu384v2/opt_c/shadow_32bit.c new file mode 100644 index 0000000..fb79619 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128mu384v2/opt_c/shadow_32bit.c @@ -0,0 +1,53 @@ +/* MIT + * + * Copyright (c) 2019 Gaëtan Cassiers + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#include +#include +#include "primitives.h" + +#define SHADOW +#include "primitives.c" + +#define CLYDE_128_NS 6 // Number of steps +#define CLYDE_128_NR 2 * CLYDE_128_NS // Number of rounds +#define SHADOW_NS 6 // Number of steps +#define SHADOW_NR 2 * SHADOW_NS // Number of roundsv +void shadow(shadow_state state) { + uint32_t lfsr =0xf8737400; // LFSR for round constant + set_poly_xtime(0x101); + set_poly_lfsr(0xc5); + for (unsigned int s = 0; s < SHADOW_NS; s++) { + #pragma GCC unroll 0 + for (unsigned int b = 0; b < MLS_BUNDLES; b++){ + sbox_layer(state[b]); + lbox(&state[b][0], &state[b][1]); + lbox(&state[b][2], &state[b][3]); + + state[b][1] ^= lfsr; + lfsr = update_lfsr(lfsr); + sbox_layer(state[b]); + } + dbox_mls_layer(state,&lfsr); + + } +} diff --git a/spook/Implementations/crypto_aead/spook128mu384v2/opt_c/utils.c b/spook/Implementations/crypto_aead/spook128mu384v2/opt_c/utils.c new file mode 100644 index 0000000..6ce3172 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128mu384v2/opt_c/utils.c @@ -0,0 +1,44 @@ +/* Spook Reference Implementation v1 + * + * Written in 2019 at UCLouvain (Belgium) by Olivier Bronchain, Gaetan Cassiers + * and Charles Momin. + * To the extent possible under law, the author(s) have dedicated all copyright + * and related and neighboring rights to this software to the public domain + * worldwide. This software is distributed without any warranty. + * + * You should have received a copy of the CC0 Public Domain Dedication along with + * this software. If not, see . + */ +#include + +#include "utils.h" + +// XOR buffers src1 and src2 into buffer dest (all buffers contain n bytes). +void xor_bytes(unsigned char* dest, const unsigned char* src1, + const unsigned char* src2, unsigned long long n) { + for (unsigned long long i = 0; i < n; i++) { + dest[i] = src1[i] ^ src2[i]; + } +} + +// Rotate right x by amount c. +// We use right rotation of integers for the lboxes while the specification +// tells left rotation of bitstrings due to the bitsting -> integer +// little-endian mapping used in Spook. +//uint32_t rotr(uint32_t x, unsigned int c) { return (x >> c) | (x << (32 - c)); } + +// Convert 4 bytes into a uint32. Bytes are in little-endian. +uint32_t le32u_dec(const unsigned char bytes[4]) { + uint32_t res = 0; + for (unsigned int col = 0; col < 4; col++) { + res |= ((uint32_t)bytes[col]) << 8 * col; + } + return res; +} + +// Convert a uint32 into 4 bytes. Bytes are in little-endian. +void le32u_enc(unsigned char bytes[4], uint32_t x) { + for (unsigned int i = 0; i < 4; i++) { + bytes[i] = x >> 8 * i; + } +} diff --git a/spook/Implementations/crypto_aead/spook128mu384v2/opt_c/utils.h b/spook/Implementations/crypto_aead/spook128mu384v2/opt_c/utils.h new file mode 100644 index 0000000..c69647d --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128mu384v2/opt_c/utils.h @@ -0,0 +1,26 @@ +/* Spook Reference Implementation v1 + * + * Written in 2019 at UCLouvain (Belgium) by Olivier Bronchain, Gaetan Cassiers + * and Charles Momin. + * To the extent possible under law, the author(s) have dedicated all copyright + * and related and neighboring rights to this software to the public domain + * worldwide. This software is distributed without any warranty. + * + * You should have received a copy of the CC0 Public Domain Dedication along with + * this software. If not, see . + */ +#ifndef _H_UTILS_H_ +#define _H_UTILS_H_ + +#include + +void xor_bytes(unsigned char* dest, const unsigned char* src1, + const unsigned char* src2, unsigned long long n); + +//uint32_t rotr(uint32_t x, unsigned int c); + +uint32_t le32u_dec(const unsigned char bytes[4]); + +void le32u_enc(unsigned char bytes[4], uint32_t x); + +#endif // _H_UTILS_H_ diff --git a/spook/Implementations/crypto_aead/spook128mu384v2/ref/COPYING b/spook/Implementations/crypto_aead/spook128mu384v2/ref/COPYING new file mode 100644 index 0000000..0e259d4 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128mu384v2/ref/COPYING @@ -0,0 +1,121 @@ +Creative Commons Legal Code + +CC0 1.0 Universal + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS + PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM + THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED + HEREUNDER. + +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer +exclusive Copyright and Related Rights (defined below) upon the creator +and subsequent owner(s) (each and all, an "owner") of an original work of +authorship and/or a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for +the purpose of contributing to a commons of creative, cultural and +scientific works ("Commons") that the public can reliably and without fear +of later claims of infringement build upon, modify, incorporate in other +works, reuse and redistribute as freely as possible in any form whatsoever +and for any purposes, including without limitation commercial purposes. +These owners may contribute to the Commons to promote the ideal of a free +culture and the further production of creative, cultural and scientific +works, or to gain reputation or greater distribution for their Work in +part through the use and efforts of others. + +For these and/or other purposes and motivations, and without any +expectation of additional consideration or compensation, the person +associating CC0 with a Work (the "Affirmer"), to the extent that he or she +is an owner of Copyright and Related Rights in the Work, voluntarily +elects to apply CC0 to the Work and publicly distribute the Work under its +terms, with knowledge of his or her Copyright and Related Rights in the +Work and the meaning and intended legal effect of CC0 on those rights. + +1. Copyright and Related Rights. A Work made available under CC0 may be +protected by copyright and related or neighboring rights ("Copyright and +Related Rights"). Copyright and Related Rights include, but are not +limited to, the following: + + i. the right to reproduce, adapt, distribute, perform, display, + communicate, and translate a Work; + ii. moral rights retained by the original author(s) and/or performer(s); +iii. publicity and privacy rights pertaining to a person's image or + likeness depicted in a Work; + iv. rights protecting against unfair competition in regards to a Work, + subject to the limitations in paragraph 4(a), below; + v. rights protecting the extraction, dissemination, use and reuse of data + in a Work; + vi. database rights (such as those arising under Directive 96/9/EC of the + European Parliament and of the Council of 11 March 1996 on the legal + protection of databases, and under any national implementation + thereof, including any amended or successor version of such + directive); and +vii. other similar, equivalent or corresponding rights throughout the + world based on applicable law or treaty, and any national + implementations thereof. + +2. Waiver. To the greatest extent permitted by, but not in contravention +of, applicable law, Affirmer hereby overtly, fully, permanently, +irrevocably and unconditionally waives, abandons, and surrenders all of +Affirmer's Copyright and Related Rights and associated claims and causes +of action, whether now known or unknown (including existing as well as +future claims and causes of action), in the Work (i) in all territories +worldwide, (ii) for the maximum duration provided by applicable law or +treaty (including future time extensions), (iii) in any current or future +medium and for any number of copies, and (iv) for any purpose whatsoever, +including without limitation commercial, advertising or promotional +purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each +member of the public at large and to the detriment of Affirmer's heirs and +successors, fully intending that such Waiver shall not be subject to +revocation, rescission, cancellation, termination, or any other legal or +equitable action to disrupt the quiet enjoyment of the Work by the public +as contemplated by Affirmer's express Statement of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason +be judged legally invalid or ineffective under applicable law, then the +Waiver shall be preserved to the maximum extent permitted taking into +account Affirmer's express Statement of Purpose. In addition, to the +extent the Waiver is so judged Affirmer hereby grants to each affected +person a royalty-free, non transferable, non sublicensable, non exclusive, +irrevocable and unconditional license to exercise Affirmer's Copyright and +Related Rights in the Work (i) in all territories worldwide, (ii) for the +maximum duration provided by applicable law or treaty (including future +time extensions), (iii) in any current or future medium and for any number +of copies, and (iv) for any purpose whatsoever, including without +limitation commercial, advertising or promotional purposes (the +"License"). The License shall be deemed effective as of the date CC0 was +applied by Affirmer to the Work. Should any part of the License for any +reason be judged legally invalid or ineffective under applicable law, such +partial invalidity or ineffectiveness shall not invalidate the remainder +of the License, and in such case Affirmer hereby affirms that he or she +will not (i) exercise any of his or her remaining Copyright and Related +Rights in the Work or (ii) assert any associated claims and causes of +action with respect to the Work, in either case contrary to Affirmer's +express Statement of Purpose. + +4. Limitations and Disclaimers. + + a. No trademark or patent rights held by Affirmer are waived, abandoned, + surrendered, licensed or otherwise affected by this document. + b. Affirmer offers the Work as-is and makes no representations or + warranties of any kind concerning the Work, express, implied, + statutory or otherwise, including without limitation warranties of + title, merchantability, fitness for a particular purpose, non + infringement, or the absence of latent or other defects, accuracy, or + the present or absence of errors, whether or not discoverable, all to + the greatest extent permissible under applicable law. + c. Affirmer disclaims responsibility for clearing rights of other persons + that may apply to the Work or any use thereof, including without + limitation any person's Copyright and Related Rights in the Work. + Further, Affirmer disclaims responsibility for obtaining any necessary + consents, permissions or other rights required for any use of the + Work. + d. Affirmer understands and acknowledges that Creative Commons is not a + party to this document and has no duty or obligation with respect to + this CC0 or use of the Work. diff --git a/spook/Implementations/crypto_aead/spook128mu384v2/ref/api.h b/spook/Implementations/crypto_aead/spook128mu384v2/ref/api.h new file mode 100644 index 0000000..2c0c26e --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128mu384v2/ref/api.h @@ -0,0 +1,5 @@ +#define CRYPTO_KEYBYTES 32 +#define CRYPTO_NPUBBYTES 16 +#define CRYPTO_NSECBYTES 0 +#define CRYPTO_ABYTES 16 +#define CRYPTO_NOOVERLAP 1 diff --git a/spook/Implementations/crypto_aead/spook128mu384v2/ref/crypto_aead.h b/spook/Implementations/crypto_aead/spook128mu384v2/ref/crypto_aead.h new file mode 100644 index 0000000..53ec4a7 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128mu384v2/ref/crypto_aead.h @@ -0,0 +1,12 @@ + +int crypto_aead_encrypt(unsigned char* c, unsigned long long* clen, + const unsigned char* m, unsigned long long mlen, + const unsigned char* ad, unsigned long long adlen, + const unsigned char* nsec, const unsigned char* npub, + const unsigned char* k); + +int crypto_aead_decrypt(unsigned char* m, unsigned long long* mlen, + unsigned char* nsec, const unsigned char* c, + unsigned long long clen, const unsigned char* ad, + unsigned long long adlen, const unsigned char* npub, + const unsigned char* k); diff --git a/spook/Implementations/crypto_aead/spook128mu384v2/ref/encrypt.c b/spook/Implementations/crypto_aead/spook128mu384v2/ref/encrypt.c new file mode 100644 index 0000000..ff54a62 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128mu384v2/ref/encrypt.c @@ -0,0 +1,57 @@ +/* Spook Reference Implementation v1 + * + * Written in 2019 at UCLouvain (Belgium) by Olivier Bronchain, Gaetan Cassiers + * and Charles Momin. + * To the extent possible under law, the author(s) have dedicated all copyright + * and related and neighboring rights to this software to the public domain + * worldwide. This software is distributed without any warranty. + * + * You should have received a copy of the CC0 Public Domain Dedication along + * with this software. If not, see + * . + */ +#include "crypto_aead.h" +#include "s1p.h" + +#ifdef __GNUC__ +#define UNUSED __attribute__((unused)) +#else +#define UNUSED +#endif + +// Spook encryption. +int +crypto_aead_encrypt(unsigned char* c, + unsigned long long* clen, + const unsigned char* m, + unsigned long long mlen, + const unsigned char* ad, + unsigned long long adlen, + const unsigned char* nsec UNUSED, + const unsigned char* npub, + const unsigned char* k) +{ + unsigned char p[P_NBYTES]; + const unsigned char* k_priv; + init_keys(&k_priv, p, k); + s1p_encrypt(c, clen, ad, adlen, m, mlen, k_priv, p, npub); + return 0; +} + +// Spook encryption. +int +crypto_aead_decrypt(unsigned char* m, + unsigned long long* mlen, + unsigned char* nsec UNUSED, + const unsigned char* c, + unsigned long long clen, + const unsigned char* ad, + unsigned long long adlen, + const unsigned char* npub, + const unsigned char* k) +{ + unsigned char p[P_NBYTES]; + const unsigned char* k_priv; + init_keys(&k_priv, p, k); + return s1p_decrypt(m, mlen, ad, adlen, c, clen, k_priv, p, npub); +} diff --git a/spook/Implementations/crypto_aead/spook128mu384v2/ref/parameters.h b/spook/Implementations/crypto_aead/spook128mu384v2/ref/parameters.h new file mode 100644 index 0000000..ba90431 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128mu384v2/ref/parameters.h @@ -0,0 +1,30 @@ +/* Spook Reference Implementation v1 + * + * Written in 2019 at UCLouvain (Belgium) by Olivier Bronchain, Gaetan Cassiers + * and Charles Momin. + * To the extent possible under law, the author(s) have dedicated all copyright + * and related and neighboring rights to this software to the public domain + * worldwide. This software is distributed without any warranty. + * + * You should have received a copy of the CC0 Public Domain Dedication along with + * this software. If not, see . + */ +#ifndef _PARAMETERS_H_ +#define _PARAMETERS_H_ + +#define MULTI_USER 1 +#define SMALL_PERM 1 + +#if MULTI_USER +#define KEYBYTES 32 +#else +#define KEYBYTES 16 +#endif + +#include "api.h" + +#if (KEYBYTES != CRYPTO_KEYBYTES) +#error "Wrong parameters in api.h" +#endif + +#endif //_PARAMETERS_H_ diff --git a/spook/Implementations/crypto_aead/spook128mu384v2/ref/primitives.c b/spook/Implementations/crypto_aead/spook128mu384v2/ref/primitives.c new file mode 100644 index 0000000..3c8806a --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128mu384v2/ref/primitives.c @@ -0,0 +1,381 @@ +/* Spook Reference Implementation v1 + * + * Written in 2019 at UCLouvain (Belgium) by Olivier Bronchain, Gaetan Cassiers + * and Charles Momin. + * To the extent possible under law, the author(s) have dedicated all copyright + * and related and neighboring rights to this software to the public domain + * worldwide. This software is distributed without any warranty. + * + * You should have received a copy of the CC0 Public Domain Dedication along + * with this software. If not, see + * . + */ +#include +#include + +#include "primitives.h" +#include "utils.h" + +#define CLYDE_128_NS 6 // Number of steps +#define CLYDE_128_NR 2 * CLYDE_128_NS // Number of rounds +#define SHADOW_NS 6 // Number of steps +#define SHADOW_NR 2 * SHADOW_NS // Number of rounds + +#define LS_ROWS 4 // Rows in the LS design +#define LS_ROW_BYTES 4 // number of bytes per row in the LS design +#define MLS_BUNDLES \ + (SHADOW_NBYTES / (LS_ROWS * LS_ROW_BYTES)) // Bundles in the mLS design + +static void +sbox_layer(uint32_t* state); +static void +sbox_layer_inv(uint32_t* state); +static void +lbox(uint32_t* x, uint32_t* y); +static void +lbox_inv(uint32_t* x, uint32_t* y); +static void +lbox_layer(uint32_t* state); +static void +lbox_layer_inv(uint32_t* state); +static void +bytes2state(uint32_t* state, const unsigned char* byte); +static void +state2bytes(unsigned char* bytes, const uint32_t* state); +static void +xor_ls_state(uint32_t* state, const uint32_t* x); +static void +add_rc(uint32_t state[LS_ROWS], unsigned int round); +static void +tweakey(unsigned char tk[3][CLYDE128_NBYTES], + const unsigned char* k, + const unsigned char* t); +static uint32_t +update_lfsr(uint32_t lfsr); +static uint32_t +xtime(uint32_t x); +static void +dbox_mls_layer(uint32_t state[MLS_BUNDLES][LS_ROWS]); + +// Round constants for Clyde-128 +static const uint32_t clyde128_rc[CLYDE_128_NR][LS_ROWS] = { + { 1, 0, 0, 0 }, // 0 + { 0, 1, 0, 0 }, // 1 + { 0, 0, 1, 0 }, // 2 + { 0, 0, 0, 1 }, // 3 + { 1, 1, 0, 0 }, // 4 + { 0, 1, 1, 0 }, // 5 + { 0, 0, 1, 1 }, // 6 + { 1, 1, 0, 1 }, // 7 + { 1, 0, 1, 0 }, // 8 + { 0, 1, 0, 1 }, // 9 + { 1, 1, 1, 0 }, // 10 + { 0, 1, 1, 1 } // 11 +}; +static const uint32_t CST_LFSR_POLY_MASK = 0xc5; +// Initial value of the constant generation polynomial +// This is the result of applying the LFSR function 1024 times +// the value 0x1. +static const uint32_t CST_LFSR_INIT_VALUE = 0xf8737400; +// Row on which to XOR the constant in Shadow Round A +static const uint32_t SHADOW_RA_CST_ROW = 1; +// Bundle on which to XOR the constant in Shadow Round B +static const uint32_t SHADOW_RB_CST_BUNDLE = 0; + +// Apply a S-box layer to a Clyde-128 state. +static void +sbox_layer(uint32_t* state) +{ + uint32_t y1 = (state[0] & state[1]) ^ state[2]; + uint32_t y0 = (state[3] & state[0]) ^ state[1]; + uint32_t y3 = (y1 & state[3]) ^ state[0]; + uint32_t y2 = (y0 & y1) ^ state[3]; + state[0] = y0; + state[1] = y1; + state[2] = y2; + state[3] = y3; +} + +// Apply a inverse S-box layer to a Clyde-128 state. +static void +sbox_layer_inv(uint32_t* state) +{ + uint32_t y3 = (state[0] & state[1]) ^ state[2]; + uint32_t y0 = (state[1] & y3) ^ state[3]; + uint32_t y1 = (y3 & y0) ^ state[0]; + uint32_t y2 = (y0 & y1) ^ state[1]; + state[0] = y0; + state[1] = y1; + state[2] = y2; + state[3] = y3; +} + +// Apply a L-box to a pair of Clyde-128 rows. +static void +lbox(uint32_t* x, uint32_t* y) +{ + uint32_t a, b, c, d; + a = *x ^ rotr(*x, 12); + b = *y ^ rotr(*y, 12); + a = a ^ rotr(a, 3); + b = b ^ rotr(b, 3); + a = a ^ rotr(*x, 17); + b = b ^ rotr(*y, 17); + c = a ^ rotr(a, 31); + d = b ^ rotr(b, 31); + a = a ^ rotr(d, 26); + b = b ^ rotr(c, 25); + a = a ^ rotr(c, 15); + b = b ^ rotr(d, 15); + *x = a; + *y = b; +} + +// Apply a inverse L-box to a pair of Clyde-128 rows. +static void +lbox_inv(uint32_t* x, uint32_t* y) +{ + uint32_t a, b, c, d; + a = *x ^ rotr(*x, 25); + b = *y ^ rotr(*y, 25); + c = *x ^ rotr(a, 31); + d = *y ^ rotr(b, 31); + c = c ^ rotr(a, 20); + d = d ^ rotr(b, 20); + a = c ^ rotr(c, 31); + b = d ^ rotr(d, 31); + c = c ^ rotr(b, 26); + d = d ^ rotr(a, 25); + a = a ^ rotr(c, 17); + b = b ^ rotr(d, 17); + a = rotr(a, 16); + b = rotr(b, 16); + *x = a; + *y = b; +} + +// Apply a L-box layer to a Clyde-128 state. +static void +lbox_layer(uint32_t* state) +{ + lbox(&state[0], &state[1]); + lbox(&state[2], &state[3]); +} + +// Apply inverse L-box layer to a Clyde-128 state. +static void +lbox_layer_inv(uint32_t* state) +{ + lbox_inv(&state[0], &state[1]); + lbox_inv(&state[2], &state[3]); +} + +// Convert bytes to a Clyde-128 state. Bytes are in ordered by row (first-row +// first), and in little-endian order inside a row. +static void +bytes2state(uint32_t* state, const unsigned char* bytes) +{ + for (unsigned int row = 0; row < LS_ROWS; row++) { + state[row] = le32u_dec(bytes + 4 * row); + } +} + +// Convert Clyde-128 state to bytes. Bytes are in ordered by row (first-row +// first), and in little-endian order inside a row. +static void +state2bytes(unsigned char* bytes, const uint32_t* state) +{ + for (unsigned int row = 0; row < LS_ROWS; row++) { + le32u_enc(bytes + 4 * row, state[row]); + } +} + +// XOR the Clyde-128 state x into state. +static void +xor_ls_state(uint32_t* state, const uint32_t* x) +{ + for (unsigned int i = 0; i < LS_ROWS; i++) { + state[i] ^= x[i]; + } +} + +// XOR the Clyde-128 round constant of given round into state, left shifting +// each constant by shift. +static void +add_rc(uint32_t state[LS_ROWS], unsigned int round) +{ + for (unsigned int i = 0; i < LS_ROWS; i++) { + state[i] ^= clyde128_rc[round][i]; + } +} + +// Key schedule for Clyde-128. Generate 3 Clyde-128 states from key k and tweak +// t. +static void +tweakey(unsigned char tk[3][CLYDE128_NBYTES], + const unsigned char* k, + const unsigned char* t) +{ + const unsigned char* t0 = t; + const unsigned char* t1 = t + CLYDE128_NBYTES / 2; + unsigned char tx[CLYDE128_NBYTES / 2]; + xor_bytes(tx, t0, t1, CLYDE128_NBYTES / 2); + // TK[0] + xor_bytes(tk[0], k, t, CLYDE128_NBYTES); + // TK[1] + xor_bytes(tk[1], k, tx, CLYDE128_NBYTES / 2); + xor_bytes(tk[1] + CLYDE128_NBYTES / 2, + k + CLYDE128_NBYTES / 2, + t0, + CLYDE128_NBYTES / 2); + // TK[2] + xor_bytes(tk[2], k, t1, CLYDE128_NBYTES / 2); + xor_bytes(tk[2] + CLYDE128_NBYTES / 2, + k + CLYDE128_NBYTES / 2, + tx, + CLYDE128_NBYTES / 2); +} + +// Update (by 1 step) the constant generation LFSR +static uint32_t +update_lfsr(uint32_t lfsr) +{ + // Arithmetic shift left, equivalent to + // uint32_t b_out_ext = (lfsr & 0x80000000) ? 0xffffffff : 0x0; + // but constant-time. + uint32_t b_out_ext = (uint32_t)(((int32_t)lfsr) >> 31); + return (lfsr << 1) ^ (b_out_ext & CST_LFSR_POLY_MASK); +} + +// Multiplication by polynomial x modulo x^32+x^8+1 +static uint32_t +xtime(uint32_t x) +{ + uint32_t b = x >> 31; + return (x << 1) ^ b ^ (b << 8); +} + +// Apply a D-box layer to a Shadow state. +static void +dbox_mls_layer(uint32_t state[MLS_BUNDLES][LS_ROWS]) +{ + for (unsigned int row = 0; row < LS_ROWS; row++) { +#if SMALL_PERM + uint32_t x0 = state[0][row]; + uint32_t x1 = state[1][row]; + uint32_t x2 = state[2][row]; + uint32_t a = x0 ^ x1; + uint32_t b = x0 ^ x2; + uint32_t c = x1 ^ b; + uint32_t d = a ^ xtime(b); + state[0][row] = b ^ d; + state[1][row] = c; + state[2][row] = d; +#else + state[0][row] ^= state[1][row]; + state[2][row] ^= state[3][row]; + state[1][row] ^= state[2][row]; + state[3][row] ^= xtime(state[0][row]); + state[1][row] = xtime(state[1][row]); + state[0][row] ^= state[1][row]; + state[2][row] ^= xtime(state[3][row]); + state[1][row] ^= state[2][row]; + state[3][row] ^= state[0][row]; +#endif // SMALL_PERM + } +} + +// Clyde-128 TBC. +// Output in buffer c the TBC for block m, tweak t and key k. +// All buffers have length CLYDE128_NBYTES. +void +clyde128_encrypt(unsigned char* c, + const unsigned char* m, + const unsigned char* t, + const unsigned char* k) +{ + // Key schedule + unsigned char tkb[3][CLYDE128_NBYTES]; + uint32_t tk[3][LS_ROWS]; + tweakey(tkb, k, t); + bytes2state(tk[0], tkb[0]); + bytes2state(tk[1], tkb[1]); + bytes2state(tk[2], tkb[2]); + + // Datapath + uint32_t state[LS_ROWS]; + bytes2state(state, m); + xor_ls_state(state, tk[0]); + for (unsigned int s = 0; s < CLYDE_128_NS; s++) { + for (unsigned int rho = 0; rho < 2; rho++) { + unsigned int r = 2 * s + rho; + sbox_layer(state); + lbox_layer(state); + add_rc(state, r); + } + xor_ls_state(state, tk[(s + 1) % 3]); + } + + state2bytes(c, state); +} + +// Clyde-128 inverse TBC. +// Output in buffer m the inverse TBC for block c, tweak t and key k. +// All buffers have length CLYDE128_NBYTES. +void +clyde128_decrypt(unsigned char* m, + const unsigned char* c, + const unsigned char* t, + const unsigned char* k) +{ + // Key schedule + unsigned char tkb[3][CLYDE128_NBYTES]; + uint32_t tk[3][LS_ROWS]; + tweakey(tkb, k, t); + bytes2state(tk[0], tkb[0]); + bytes2state(tk[1], tkb[1]); + bytes2state(tk[2], tkb[2]); + + // Datapath + uint32_t state[LS_ROWS]; + bytes2state(state, c); + for (int s = CLYDE_128_NS - 1; s >= 0; s--) { + xor_ls_state(state, tk[(s + 1) % 3]); + for (int rho = 1; rho >= 0; rho--) { + unsigned int r = 2 * s + rho; + add_rc(state, r); + lbox_layer_inv(state); + sbox_layer_inv(state); + } + } + xor_ls_state(state, tk[0]); + state2bytes(m, state); +} + +// Shadow permutation. Updates x (array of SHADOW_NBYTES bytes). +void +shadow(unsigned char* x) +{ + uint32_t state[MLS_BUNDLES][LS_ROWS]; + uint32_t lfsr = CST_LFSR_INIT_VALUE; + for (unsigned int b = 0; b < MLS_BUNDLES; b++) { + bytes2state(state[b], x + (b * SHADOW_NBYTES / MLS_BUNDLES)); + } + for (unsigned int s = 0; s < SHADOW_NS; s++) { + for (unsigned int b = 0; b < MLS_BUNDLES; b++) { + sbox_layer(state[b]); + lbox_layer(state[b]); + state[b][SHADOW_RA_CST_ROW] ^= lfsr; + lfsr = update_lfsr(lfsr); + sbox_layer(state[b]); + } + dbox_mls_layer(state); + for (unsigned int row = 0; row < LS_ROWS; row++) { + state[SHADOW_RB_CST_BUNDLE][row] ^= lfsr; + lfsr = update_lfsr(lfsr); + } + } + for (unsigned int b = 0; b < MLS_BUNDLES; b++) { + state2bytes(x + (b * SHADOW_NBYTES / MLS_BUNDLES), state[b]); + } +} diff --git a/spook/Implementations/crypto_aead/spook128mu384v2/ref/primitives.h b/spook/Implementations/crypto_aead/spook128mu384v2/ref/primitives.h new file mode 100644 index 0000000..3a1467d --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128mu384v2/ref/primitives.h @@ -0,0 +1,41 @@ +/* Spook Reference Implementation v1 + * + * Written in 2019 at UCLouvain (Belgium) by Olivier Bronchain, Gaetan Cassiers + * and Charles Momin. + * To the extent possible under law, the author(s) have dedicated all copyright + * and related and neighboring rights to this software to the public domain + * worldwide. This software is distributed without any warranty. + * + * You should have received a copy of the CC0 Public Domain Dedication along + * with this software. If not, see + * . + */ +#ifndef _H_PRIMITIVES_H_ +#define _H_PRIMITIVES_H_ + +#include "parameters.h" + +#define CLYDE128_NBYTES 16 + +#if SMALL_PERM +#define SHADOW_NBYTES 48 +#else +#define SHADOW_NBYTES 64 +#endif // SMALL_PERM + +void +clyde128_encrypt(unsigned char* c, + const unsigned char* m, + const unsigned char* t, + const unsigned char* k); + +void +clyde128_decrypt(unsigned char* m, + const unsigned char* c, + const unsigned char* t, + const unsigned char* k); + +void +shadow(unsigned char* x); + +#endif //_H_PRIMITIVES_H_ diff --git a/spook/Implementations/crypto_aead/spook128mu384v2/ref/s1p.c b/spook/Implementations/crypto_aead/spook128mu384v2/ref/s1p.c new file mode 100644 index 0000000..4576c39 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128mu384v2/ref/s1p.c @@ -0,0 +1,188 @@ +/* Spook Reference Implementation v1 + * + * Written in 2019 at UCLouvain (Belgium) by Olivier Bronchain, Gaetan Cassiers + * and Charles Momin. + * To the extent possible under law, the author(s) have dedicated all copyright + * and related and neighboring rights to this software to the public domain + * worldwide. This software is distributed without any warranty. + * + * You should have received a copy of the CC0 Public Domain Dedication along with + * this software. If not, see . + */ +#include +#include +#include + +#include "s1p.h" +#include "parameters.h" +#include "primitives.h" +#include "utils.h" + +#define CAPACITY_BYTES 32 +#define RATE_BYTES (SHADOW_NBYTES - CAPACITY_BYTES) + +// Working mode for block compression. +typedef enum { + AD, + PLAINTEXT, + CIPHERTEXT +} compress_mode; + +static void compress_block(unsigned char *state, unsigned char *out, + const unsigned char *d, compress_mode mode, + unsigned long long offset, unsigned long long n); + +static unsigned long long compress_data(unsigned char *state, + unsigned char *out, + const unsigned char *d, + unsigned long long dlen, + compress_mode mode); + +static void init_sponge_state(unsigned char state[SHADOW_NBYTES], + const unsigned char *k, const unsigned char *p, + const unsigned char *n); + +void init_keys(const unsigned char **k, unsigned char p[P_NBYTES], + const unsigned char *k_glob) { + *k = k_glob; +#if MULTI_USER + memcpy(p, k_glob + CLYDE128_NBYTES, P_NBYTES); + p[P_NBYTES - 1] &= 0x7F; // set last p bit to 0 + p[P_NBYTES - 1] |= 0x40; // set next to last p bit to 0 +#else + memset(p, 0, P_NBYTES); +#endif // MULTI_USER +} + +static void init_sponge_state(unsigned char state[SHADOW_NBYTES], + const unsigned char *k, const unsigned char *p, + const unsigned char *n) { + // init state + memset(state, 0, SHADOW_NBYTES); + memcpy(state + CLYDE128_NBYTES, p, P_NBYTES); + memcpy(state + CLYDE128_NBYTES + P_NBYTES, n, CRYPTO_NPUBBYTES); + // TBC + unsigned char padded_nonce[CLYDE128_NBYTES] = { 0 }; + memcpy(padded_nonce, n, CRYPTO_NPUBBYTES); + unsigned char *b = state; + clyde128_encrypt(b, padded_nonce, p, k); + // initial permutation + shadow(state); +} + +void s1p_encrypt(unsigned char *c, unsigned long long *clen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *m, unsigned long long mlen, + const unsigned char *k, const unsigned char *p, + const unsigned char *n) { + // permutation state + unsigned char state[SHADOW_NBYTES]; + init_sponge_state(state, k, p, n); + + // compress associated data + compress_data(state, NULL, ad, adlen, AD); + + // compress message + unsigned long long c_bytes = 0; + if (mlen > 0) { + state[RATE_BYTES] ^= 0x01; + c_bytes = compress_data(state, c, m, mlen, PLAINTEXT); + } + + // tag + state[CLYDE128_NBYTES + CLYDE128_NBYTES - 1] |= 0x80; + clyde128_encrypt(c + c_bytes, state, state + CLYDE128_NBYTES, k); + *clen = c_bytes + CLYDE128_NBYTES; +} + +int s1p_decrypt(unsigned char *m, unsigned long long *mlen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *c, unsigned long long clen, + const unsigned char *k, const unsigned char *p, + const unsigned char *n) { + // permutation state + unsigned char state[SHADOW_NBYTES]; + init_sponge_state(state, k, p, n); + + // compress associated data + compress_data(state, NULL, ad, adlen, AD); + + // compress message + unsigned long long m_bytes = 0; + if (clen > CLYDE128_NBYTES) { + state[RATE_BYTES] ^= 0x01; + m_bytes = compress_data(state, m, c, clen - CLYDE128_NBYTES, CIPHERTEXT); + } + + // NOTE: We use here so-called "inverse-based tag verification", + // that is, we apply the inverse Clyde TBC to the tag extracted from + // the ciphertext and check the result against the output of Shadow. + // This way of verifying the tag is interesting in some specific cases + // such as side-channel protected implementations. + // In general implementations, the tag verification SHOULD be done in a + // more conventional way: encrypting the output of Shadow with Clyde and + // verifying the tag against the resulting value. + // This is more efficient as it does not require to implement the inverse + // Clyde. + // For more details, see the Spook specification at https://spook.dev. + unsigned char inv_tag[CLYDE128_NBYTES]; + unsigned char *u = state; + state[(2 * CLYDE128_NBYTES) - 1] |= 0x80; + clyde128_decrypt(inv_tag, c + m_bytes, state + CLYDE128_NBYTES, k); + int tag_ok = 1; + for (int i = 0; i < CLYDE128_NBYTES; i++) { + tag_ok &= (u[i] == inv_tag[i]); + } + if (tag_ok) { + *mlen = m_bytes; + return 0; + } else { + // Reset output buffer to avoid unintended unauthenticated plaintext + // release. + memset(m, 0, clen - CLYDE128_NBYTES); + *mlen = 0; + return -1; + } +} + +// Compress a block into the state. Length of the block is n and buffers are +// accessed starting at offset. Input block is d, output is written into +// buffer out if mode is PLAINTEXT or CIPHERTEXT. +// Only the XOR operation is performed, not XORing of padding constants. +static void compress_block(unsigned char *state, unsigned char *out, + const unsigned char *d, compress_mode mode, + unsigned long long offset, unsigned long long n) { + if (mode == CIPHERTEXT) { + xor_bytes(out + offset, state, d + offset, n); + memcpy(state, d + offset, n); + } else { + xor_bytes(state, state, d + offset, n); + if (mode == PLAINTEXT) { + memcpy(out + offset, state, n); + } + } +} + +// Compress a block into the state (in duplex-sponge mode). +// Input data buffer is d with length dlen. +// Output is written into buffer out if mode is PLAINTEXT or CIPHERTEXT. +// Padding is handled if needed. +static unsigned long long compress_data(unsigned char *state, + unsigned char *out, + const unsigned char *d, + unsigned long long dlen, + compress_mode mode) { + unsigned long long i; + for (i = 0; i < dlen / RATE_BYTES; i++) { + compress_block(state, out, d, mode, i * RATE_BYTES, RATE_BYTES); + shadow(state); + } + int rem = dlen % RATE_BYTES; + if (rem != 0) { + compress_block(state, out, d, mode, i * RATE_BYTES, rem); + state[rem] ^= 0x01; + state[RATE_BYTES] ^= 0x02; + shadow(state); + } + return i * RATE_BYTES + rem; +} diff --git a/spook/Implementations/crypto_aead/spook128mu384v2/ref/s1p.h b/spook/Implementations/crypto_aead/spook128mu384v2/ref/s1p.h new file mode 100644 index 0000000..2018568 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128mu384v2/ref/s1p.h @@ -0,0 +1,35 @@ +/* Spook Reference Implementation v1 + * + * Written in 2019 at UCLouvain (Belgium) by Olivier Bronchain, Gaetan Cassiers + * and Charles Momin. + * To the extent possible under law, the author(s) have dedicated all copyright + * and related and neighboring rights to this software to the public domain + * worldwide. This software is distributed without any warranty. + * + * You should have received a copy of the CC0 Public Domain Dedication along with + * this software. If not, see . + */ +#ifndef _H_S1P_H_ +#define _H_S1P_H_ + +#include "parameters.h" + +// Size of the P parameter +#define P_NBYTES 16 + +void s1p_encrypt(unsigned char *c, unsigned long long *clen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *m, unsigned long long mlen, + const unsigned char *k, const unsigned char *p, + const unsigned char *n); + +int s1p_decrypt(unsigned char *m, unsigned long long *mlen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *c, unsigned long long clen, + const unsigned char *k, const unsigned char *p, + const unsigned char *n); + +void init_keys(const unsigned char **k, unsigned char p[P_NBYTES], + const unsigned char *k_glob); + +#endif //_H_S1P_H_ diff --git a/spook/Implementations/crypto_aead/spook128mu384v2/ref/utils.c b/spook/Implementations/crypto_aead/spook128mu384v2/ref/utils.c new file mode 100644 index 0000000..e390c04 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128mu384v2/ref/utils.c @@ -0,0 +1,57 @@ +/* Spook Reference Implementation v1 + * + * Written in 2019 at UCLouvain (Belgium) by Olivier Bronchain, Gaetan Cassiers + * and Charles Momin. + * To the extent possible under law, the author(s) have dedicated all copyright + * and related and neighboring rights to this software to the public domain + * worldwide. This software is distributed without any warranty. + * + * You should have received a copy of the CC0 Public Domain Dedication along + * with this software. If not, see + * . + */ +#include + +#include "utils.h" + +// XOR buffers src1 and src2 into buffer dest (all buffers contain n bytes). +void +xor_bytes(unsigned char* dest, + const unsigned char* src1, + const unsigned char* src2, + unsigned long long n) +{ + for (unsigned long long i = 0; i < n; i++) { + dest[i] = src1[i] ^ src2[i]; + } +} + +// Rotate right x by amount c. +// We use right rotation of integers for the lboxes while the specification +// tells left rotation of bitstrings due to the bitsting -> integer +// little-endian mapping used in Spook. +uint32_t +rotr(uint32_t x, unsigned int c) +{ + return (x >> c) | (x << (32 - c)); +} + +// Convert 4 bytes into a uint32. Bytes are in little-endian. +uint32_t +le32u_dec(const unsigned char bytes[4]) +{ + uint32_t res = 0; + for (unsigned int col = 0; col < 4; col++) { + res |= ((uint32_t)bytes[col]) << 8 * col; + } + return res; +} + +// Convert a uint32 into 4 bytes. Bytes are in little-endian. +void +le32u_enc(unsigned char bytes[4], uint32_t x) +{ + for (unsigned int i = 0; i < 4; i++) { + bytes[i] = x >> 8 * i; + } +} diff --git a/spook/Implementations/crypto_aead/spook128mu384v2/ref/utils.h b/spook/Implementations/crypto_aead/spook128mu384v2/ref/utils.h new file mode 100644 index 0000000..013cdd6 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128mu384v2/ref/utils.h @@ -0,0 +1,33 @@ +/* Spook Reference Implementation v1 + * + * Written in 2019 at UCLouvain (Belgium) by Olivier Bronchain, Gaetan Cassiers + * and Charles Momin. + * To the extent possible under law, the author(s) have dedicated all copyright + * and related and neighboring rights to this software to the public domain + * worldwide. This software is distributed without any warranty. + * + * You should have received a copy of the CC0 Public Domain Dedication along + * with this software. If not, see + * . + */ +#ifndef _H_UTILS_H_ +#define _H_UTILS_H_ + +#include + +void +xor_bytes(unsigned char* dest, + const unsigned char* src1, + const unsigned char* src2, + unsigned long long n); + +uint32_t +rotr(uint32_t x, unsigned int c); + +uint32_t +le32u_dec(const unsigned char bytes[4]); + +void +le32u_enc(unsigned char bytes[4], uint32_t x); + +#endif // _H_UTILS_H_ diff --git a/spook/Implementations/crypto_aead/spook128mu512v2/LWC_AEAD_KAT_256_128.txt b/spook/Implementations/crypto_aead/spook128mu512v2/LWC_AEAD_KAT_256_128.txt new file mode 100644 index 0000000..3c34d18 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128mu512v2/LWC_AEAD_KAT_256_128.txt @@ -0,0 +1,7623 @@ +Count = 1 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = +CT = 8F0EB45A98359E1C18ADA3FD99166E3F + +Count = 2 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 00 +CT = DDBC7E67CA7668D7F0429E11ABB727CF + +Count = 3 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 0001 +CT = 76E81DE44A4F93FAEC1E9D5DFB251C98 + +Count = 4 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102 +CT = 30FE87BE0812BE8C050869D66FAC5763 + +Count = 5 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 00010203 +CT = CCAC43FA28E2BEF5DF585518E9C8FB9F + +Count = 6 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 0001020304 +CT = D32DF77EEB009D06BBBD65D632B4F111 + +Count = 7 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405 +CT = E8D5E5C831FEDBC60F31AF7C9A890A8A + +Count = 8 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 00010203040506 +CT = 294CB98D84EAB45E1EFA988C655684B3 + +Count = 9 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 0001020304050607 +CT = 2573D6845A76BB44A4C32596EFF47428 + +Count = 10 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708 +CT = 15F659656D4559EB58BBDBEF9DE16353 + +Count = 11 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 00010203040506070809 +CT = 199E2CFAA2DFEB5CE440E496A210B280 + +Count = 12 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A +CT = 0D5DB29FF4148F16DE10D236713E60D4 + +Count = 13 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B +CT = 7964B9C24D4B902520BC023C4E8D97EE + +Count = 14 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C +CT = 4324EA23AC882F7F571AD60CC8E02800 + +Count = 15 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D +CT = DCB9FA2143F809F86DDAE4B0BDC649A1 + +Count = 16 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E +CT = FE45D9DAD3BD30BC8B41F75F783C4CD7 + +Count = 17 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F +CT = C29E1DCF8260FA017F34D230488E4969 + +Count = 18 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 7F29BAD8EB652E88FD1F93E684318770 + +Count = 19 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = BABFA4FB19ADFF233E2AF5FC894C60BE + +Count = 20 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 8ECA0967843D8E927D1B145295AEFD3E + +Count = 21 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 927EE1B826BD052D60EFB3E745CA59AF + +Count = 22 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 5443103AC4D250582486CBAAF37C8BF5 + +Count = 23 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 15CBA22E9535EFC8E335B20EFC822999 + +Count = 24 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 5D66D01CF1CB098E1845A0C08D615E8B + +Count = 25 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 9FC3AF9E7FFE50CC65DC226E34F0B4D7 + +Count = 26 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 6A2F9B28EB1EDEF86B7975B520E6F540 + +Count = 27 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = E26E7D1583AC7C96F4BAA1BA12FC6D43 + +Count = 28 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 0F9E3D5EFB6A247508281225C4FBC23B + +Count = 29 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = D54954A47629F44B1DCBFCB37C788ED0 + +Count = 30 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 3EAE189482E7740F1F4060D2883F21AC + +Count = 31 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 02F66789F01BDF0E92F64336EC997D65 + +Count = 32 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 84DD9E09540E586BC2D8E8B6B164A785 + +Count = 33 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 3FDA28C51BC9639C94A8BEDD13A38779 + +Count = 34 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = +CT = A0F96551DE85ECA957E324D9F148C14489 + +Count = 35 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 00 +CT = 2E82A5E560A5909AA2E7B3B593521D78F9 + +Count = 36 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 0001 +CT = B3EA576C82F3AFD00CC8F086CEDBC71864 + +Count = 37 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102 +CT = B2ACC8E46197EFF7026B729614D8584E6A + +Count = 38 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 00010203 +CT = BD0A039733A09A31A899E4396444ECF6DA + +Count = 39 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 0001020304 +CT = 5795AAB55B5ED01F40CD0CD5B39AD6DAAB + +Count = 40 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405 +CT = 3BB99A239A4675CDB0ED915284E29D22C6 + +Count = 41 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 00010203040506 +CT = CD954AC3839D5A0D00AB15689770FF408E + +Count = 42 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 0001020304050607 +CT = 407B6862F072D8FF13C3B1E917558250BE + +Count = 43 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708 +CT = B671668148266D9FE67817A5D2F575A695 + +Count = 44 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 00010203040506070809 +CT = 352ACA688F7D105ED343D327005C9F5A66 + +Count = 45 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A +CT = 459EC895DC3DE0CD461CC8CF6C5FAE75E2 + +Count = 46 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B +CT = F2164C1C927790B763ED17E9CE11B86369 + +Count = 47 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C +CT = 80AC141BD47A0C1E3397D0465F7E49638A + +Count = 48 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D +CT = 75DBF18A563C4A4CDA708C810C84DE2BAE + +Count = 49 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E +CT = A01AD4CE63DB1030E867158B2E61B0852E + +Count = 50 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F +CT = 36E02249A5DB4FBBAD41A8A83CFEA8EF8F + +Count = 51 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 578EEE20861030CD9964C0764407928D95 + +Count = 52 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = B97152A4947D003F36EE2F7ADD15871D9F + +Count = 53 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 334755F030965CB771542B543474A45D83 + +Count = 54 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 4178F69EFC075F27408A1028EEF8BAD1CD + +Count = 55 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 80BAB5040C340D75AE11594C7158891B06 + +Count = 56 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 57A51D731BA1EC66927F677B0E826CE738 + +Count = 57 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = AC14C71E39CEA2E6C7381E6BFC4B0468ED + +Count = 58 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 91BDDA2D56EA78686BF494E70FDCF12F96 + +Count = 59 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 07DCDC4244D7CA8F367C515DEF6FE761C8 + +Count = 60 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 695DFB7F0DCDD298107DBEF7D3C4C932F2 + +Count = 61 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = D7ACABE09E31A6EE02233AE9E043E90849 + +Count = 62 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 9D78B6D9BDDFE663ACC96D493E77B0D95D + +Count = 63 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 1BF530042207A040854711082B8C30AB26 + +Count = 64 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = D0C8F79ECD13F77996B0CE7DA9634C013F + +Count = 65 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 4B94B40362E92A280A048D9F251E710B93 + +Count = 66 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = F6F96630678C8EFFE1A68A153CA5488F07 + +Count = 67 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = +CT = A07D25D31383C9E0E6990E8818AFD50F1670 + +Count = 68 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 00 +CT = 2E09019DA2D53B4115D29AB499C4BDD343B2 + +Count = 69 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 0001 +CT = B37F76452BFC5FF5E960EEEA89D839CAF9F8 + +Count = 70 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102 +CT = B22F82050ADA338E4979631BA19FC43BBB00 + +Count = 71 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 00010203 +CT = BD31582E2EFBE37D5E13EC45F851C2F0E9AA + +Count = 72 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 0001020304 +CT = 57B49179EE32B0596F8D5D5E767545543BE3 + +Count = 73 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405 +CT = 3BF95C8FFCD2997444378A64BEE5AC8D4508 + +Count = 74 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 00010203040506 +CT = CD6B75093F7241D9BB85D832B4DC6990A24B + +Count = 75 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 0001020304050607 +CT = 4041D50C2298B5B7F7A94539F2CAD8D4FC50 + +Count = 76 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708 +CT = B67EEA7BF292D79CAF7F1201978A66200BE0 + +Count = 77 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 00010203040506070809 +CT = 35DF22D6A2D9B14C6CA99732BF61D375BA65 + +Count = 78 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A +CT = 455AE4AD7440DD9487595408E66F17E2DF82 + +Count = 79 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B +CT = F26887B84236DE3B49B444B201782414BAC1 + +Count = 80 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C +CT = 80CBF5303A8C526F14F19D9C20CA302D44A1 + +Count = 81 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D +CT = 75428E1A4C2701AD9C12CD8EEEE92A7BE558 + +Count = 82 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E +CT = A01FBCEB084ADFBBE421683C39034F33F2A1 + +Count = 83 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F +CT = 3644104FA3D65C8CC412FF8308EFAFED087A + +Count = 84 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 579B2E6C2682526F02734273D7639C6088AD + +Count = 85 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = B99C3295C1FDD990B54CCBD225BCD35B3491 + +Count = 86 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 3302F6481B64E19A81DC64E367EC99D75D76 + +Count = 87 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 418A6231DD222175FC06A368FA273C75A243 + +Count = 88 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 8090C99574D0498DFD84B777C54815276ADD + +Count = 89 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 577BE197472B817B091691E2B466C6D762F3 + +Count = 90 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = AC95F33F569C7E5C563F4CD4DFCAEA0DF758 + +Count = 91 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 9146689C9F67845807DD103651C54E658F36 + +Count = 92 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 07C5748E4DC9D4D87006693CD2730E681D3D + +Count = 93 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 69EF39FF40F764C8BD9F9AAEFAF9EC7F167D + +Count = 94 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = D7E10FABB94FFDD47B4B9C14407D948C48B0 + +Count = 95 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 9D549DF0ABBAB1716C90F0CC64619FC48350 + +Count = 96 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 1B088985634BB3EE90F5909AF15BFF4EC527 + +Count = 97 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = D05F661C51BA5335AEC738B3D1EA6A80E394 + +Count = 98 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 4BA291650EFFE3E6890595D08CF100185590 + +Count = 99 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = F67DEAA92C7746AE990E2B134D5634D0392D + +Count = 100 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = +CT = A07DA49222B77374836BE9BC0C640514304A10 + +Count = 101 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 00 +CT = 2E09393D827F19529C90A9D4465D857EB1695A + +Count = 102 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 0001 +CT = B37F5AE11E3C1C6B5864DFB168492FD92F7E41 + +Count = 103 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102 +CT = B22F68D2CAF1160662E9AED131B76666A62187 + +Count = 104 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 00010203 +CT = BD31D30962005EFE57031EF7BA6CF2E3052F33 + +Count = 105 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 0001020304 +CT = 57B4188FEFC3FC478E231C5B92CE9549D5A009 + +Count = 106 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405 +CT = 3BF9C38942C90B6D6A3A00209CCC4ECA316002 + +Count = 107 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 00010203040506 +CT = CD6BCF3DC3D9C666819F16C037E421DE1B6768 + +Count = 108 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 0001020304050607 +CT = 4041C9E2C82BE23796E36A73E9205397CB7C2B + +Count = 109 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708 +CT = B67E0333674F1A412A9D7837D994FF7091B00D + +Count = 110 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 00010203040506070809 +CT = 35DFF5E752DDD86796B4BE00E46379E99337CC + +Count = 111 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A +CT = 455A9A411CAE399277F4ADB6BEB8875A30E80E + +Count = 112 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B +CT = F268C0B57AFD42DB6323FE184317849D61D6A4 + +Count = 113 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C +CT = 80CB40FDF19028D4642AF2819D5F4C2A32C201 + +Count = 114 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D +CT = 7542F48A1E326BFF6A2CDEC832DD27EE2420A5 + +Count = 115 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E +CT = A01FDEECD92ABEC5EB94EEC926860495FADF33 + +Count = 116 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F +CT = 3644AEA06257CB19FBE8CBE6EA19AC6454D4A5 + +Count = 117 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 579B884D762423AEE55EB07849EB7D11F196E2 + +Count = 118 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = B99CFA708822A3BEBFFA187E65A50A035BCFC6 + +Count = 119 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 3302EAFD4D48A9F2400B1FF16E946FEE812FD0 + +Count = 120 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 418AE677D187A5AA6C78C097AF012777605B7A + +Count = 121 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 8090ED0A384BABE9E2BEBD6CEAF443681A2235 + +Count = 122 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 577B6B5D3FE5AA79C8AB772929BF91793F0FFF + +Count = 123 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = AC9572CC9D1083234920562D9BA4BCB15A400E + +Count = 124 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 91460E9BC8A8201EFA19BD59687F2D69C9EBD0 + +Count = 125 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 07C59788D8DE3743AB6E57028A49542D6E9ABD + +Count = 126 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 69EF5369D2936F2FDA6DFB23D3D4586056FB44 + +Count = 127 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = D7E11002973F2B5C7E717376A747D267869B7E + +Count = 128 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 9D54482929D2E607A6AA62898C4E75F9E6352C + +Count = 129 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 1B08C43F8B511824640793804B6ECB2BCD8412 + +Count = 130 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = D05FC25B0F193174427EE1DCE3A36D80EBCAEC + +Count = 131 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 4BA2D7021A1A10B1BCD16FD8768304D4F152E5 + +Count = 132 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = F67D6A19DE5614B52A120795EC1A871762C07A + +Count = 133 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = +CT = A07DA4776C2FD2B350504D22F35A491D368EF78E + +Count = 134 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 00 +CT = 2E093931BCB0E0A5F132D4F32B31115BBE5AD7AE + +Count = 135 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 0001 +CT = B37F5AA3711991BA8F79BDAC7E175828FE2F528F + +Count = 136 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102 +CT = B22F68FCFC79B6DAAF6DE1E2704DD60CE8A1B3E9 + +Count = 137 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 00010203 +CT = BD31D313F3EB83567FC942A4F8B829D05E94FA98 + +Count = 138 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 0001020304 +CT = 57B41878132881CBC1D7B3DC2A85C08E65D069B0 + +Count = 139 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405 +CT = 3BF9C3E6F985774E0EDA83C3E0F03FAFD019D020 + +Count = 140 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 00010203040506 +CT = CD6BCF992D39CBFC06788C005648D1D20FD85795 + +Count = 141 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 0001020304050607 +CT = 4041C9D53198B57DDCF9F31589F829720D2A08B6 + +Count = 142 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708 +CT = B67E036C4DFB58D570E2D0428D2E6CBCEF35AD0A + +Count = 143 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 00010203040506070809 +CT = 35DFF559623E76811C4AA9F3A342D09A47DD372A + +Count = 144 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A +CT = 455A9AC57E3AA69AA70FB62A5E63EFDD6E5D3503 + +Count = 145 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B +CT = F268C004EB95D7AF5629E40974F1542B0113DA16 + +Count = 146 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C +CT = 80CB407A8E876BA0115BD49F5632CA591E963629 + +Count = 147 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D +CT = 7542F4D1F4DA80A63D554AC8FE0AFA23168398FE + +Count = 148 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E +CT = A01FDE841B79703DB80F00A4BADF600B99576FE9 + +Count = 149 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F +CT = 3644AE851373CC9A9145F9FDF5CF917D01AC94E4 + +Count = 150 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 579B88F006559198379F06B1334A6FCAD881E371 + +Count = 151 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = B99CFA477148D94933ACF9BBDF481530DDFE9244 + +Count = 152 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 3302EA64B18444713231930C7A7253B70023AA0F + +Count = 153 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 418AE6B4F98D8CAB75CF8B4B2EE8EB3FFE301EE3 + +Count = 154 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 8090EDD3F0C19BF493DE4BAB913D6224857DD1F1 + +Count = 155 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 577B6BC7A082D95EBEF680471332478430BA9C16 + +Count = 156 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = AC9572F94E3E3EA6E760B8080C0F7826E0DABCED + +Count = 157 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 91460EE62E428FB08B17FCC3C8ADBD4EA84D1D75 + +Count = 158 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 07C597D385DD3437181F4070978854411F4A4873 + +Count = 159 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 69EF5311B2C3EE59D885BCD07F361B9FF4E49AC9 + +Count = 160 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = D7E1106B0C9E989D768F43C8221BD27510A7D38C + +Count = 161 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 9D5448A088BA5F93334E7F825182F0980FC455BD + +Count = 162 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 1B08C41896BC0F1A2A775E569276A0D1D067C164 + +Count = 163 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = D05FC2A3A57E5602E91F28403F759C06ABD02ABD + +Count = 164 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 4BA2D7A177A812DFC8F34449FD4D2CD9CD6B9AFF + +Count = 165 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = F67D6A41B78CA107E55AB9D29180042A5C0E2E5F + +Count = 166 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = +CT = A07DA477C47973FC6DF72305BD21EE7CCFF918D2C0 + +Count = 167 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 00 +CT = 2E093931B499D94EE7D6CE56453E948668DC0E7E3A + +Count = 168 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 0001 +CT = B37F5AA3858852E1DC07BF8197E4E85E2AE447DA40 + +Count = 169 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102 +CT = B22F68FCC3C3B2603C804AC1E15458B0A68BBB0FEE + +Count = 170 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 00010203 +CT = BD31D31396A0044BAB414ECDC969A7F177F07A13EE + +Count = 171 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 0001020304 +CT = 57B4187820B4214B5092FEFB1B6A3538C4A6479FEC + +Count = 172 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405 +CT = 3BF9C3E6C0D86AC705A362D963F4D20314924BFDAB + +Count = 173 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 00010203040506 +CT = CD6BCF99372FC8D0D0BC43A48A13248DF3D46BFCD4 + +Count = 174 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 0001020304050607 +CT = 4041C9D54024ACE613592931050A8764409DEBC85B + +Count = 175 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708 +CT = B67E036C5A22DC3685743EF80978AC7C99D68A8A3B + +Count = 176 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 00010203040506070809 +CT = 35DFF559394A2CC0A621CC6C61E455464336C9657D + +Count = 177 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A +CT = 455A9AC5FF20B772D526378B3D02BB3BE447AA348B + +Count = 178 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B +CT = F268C004D33B1A71670CBEBA08A02D56E6F89C40FB + +Count = 179 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C +CT = 80CB407ADC881FF4F73784535D7F5389E5F33C2DD9 + +Count = 180 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D +CT = 7542F4D1044DF51394F6FE290C76889EF998F7E055 + +Count = 181 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E +CT = A01FDE8474139BA0B9358683F0A9B2583971CF4481 + +Count = 182 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F +CT = 3644AE853C018266A54A93A2DC0C9D502C2BEC2215 + +Count = 183 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 579B88F0E15FA308B925572414334AD7933A16C3CF + +Count = 184 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = B99CFA470622FC8BE3D9B8C567C74DA0D9B519B6BB + +Count = 185 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 3302EA6480023350EEFB81A62ACF6C9B26AA836304 + +Count = 186 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 418AE6B479DC3C17B128405BCDD6DD5F3A533C77AB + +Count = 187 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 8090EDD391541BB40548F7F5E069A752AE203147D4 + +Count = 188 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 577B6BC7CD7C3D9C0270E63573F1540024ABF84F88 + +Count = 189 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = AC9572F9816F829208ABF0BA9B395BD4469CDA3579 + +Count = 190 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 91460EE6B85FE5F433A4E0015112DEFB158C18F27F + +Count = 191 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 07C597D3761FE11F38B19B1D918FCB85C47BA97E23 + +Count = 192 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 69EF531194C6129DE96D99C8CAE39DBAFDA6289C39 + +Count = 193 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = D7E1106B1FC69CB7290573AFDF6C1AEBEC0CF2BC57 + +Count = 194 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 9D5448A0FE119DE9A891AAFE9A7AF09A489F26923B + +Count = 195 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 1B08C418771683B1AACD56ADECEB79170CCBE89407 + +Count = 196 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = D05FC2A3D01971967BDAF8A1B3FCA5F5EAF8B99C6D + +Count = 197 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 4BA2D7A1C764021451758EA0326166D88054FD9282 + +Count = 198 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = F67D6A419E1A8601510F130D49E602F8D7255329AF + +Count = 199 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = +CT = A07DA477C44F6F693DFE8A3E8886FE8B5681A0BF36B7 + +Count = 200 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 00 +CT = 2E093931B474F75ACBD7A242E5E6B392C41B117C40CB + +Count = 201 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 0001 +CT = B37F5AA385B3FA77B1C4F73DB356D2DBFFB5DF97C6ED + +Count = 202 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102 +CT = B22F68FCC388690858EA1696C45A4C36C900381FD127 + +Count = 203 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 00010203 +CT = BD31D313960F6017645655F852CBB2B37D62070749A9 + +Count = 204 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 0001020304 +CT = 57B418782022718E0872F62195CDCA479E2FB22B922D + +Count = 205 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405 +CT = 3BF9C3E6C0F2ABFE4FF404180B8A821787B24BD2F1FA + +Count = 206 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 00010203040506 +CT = CD6BCF9937558D9D90BEFE4CA79CB54BFC48A98EADDB + +Count = 207 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 0001020304050607 +CT = 4041C9D540600C0570DDD8DFC25909C91384F13860E1 + +Count = 208 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708 +CT = B67E036C5A83F0980F3DA28B4A45417E9A5C1431938F + +Count = 209 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 00010203040506070809 +CT = 35DFF55939252B92AF3192D049EF6F5E3A8F61BD679A + +Count = 210 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A +CT = 455A9AC5FFF4CE701A79FD15DAC4DAD2EECC07788C64 + +Count = 211 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B +CT = F268C004D35451F4EBE340F37CEFF4289699290A14A8 + +Count = 212 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C +CT = 80CB407ADCEB781AEA948A761E597563123BD0707971 + +Count = 213 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D +CT = 7542F4D104B57504286F9AB01ECA8B3D5ECE7BE63C38 + +Count = 214 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E +CT = A01FDE8474867FDC497C2705898E615033A0B44B8E90 + +Count = 215 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F +CT = 3644AE853CBA854F76CCB8CC9773FF9E805F6202C387 + +Count = 216 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 579B88F0E150D42A9ADD59F288D1611FD1E5D14190A5 + +Count = 217 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = B99CFA4706739FBC9385EDBE201FA25D26F8E96D1147 + +Count = 218 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 3302EA6480D7279A8672F8F3BD77420A804DE008CEAF + +Count = 219 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 418AE6B47952686C1E5EF941772833B0B9D30EECAA1F + +Count = 220 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 8090EDD3919D801BBD9E36C32EE2D5B28EC44E6DFFEE + +Count = 221 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 577B6BC7CD35FDA09BB1ED52094A063B8AB82D3AA4E8 + +Count = 222 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = AC9572F9816DF73287B05EF7E4C632905B79EC16D787 + +Count = 223 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 91460EE6B807B6D0DE3BE65561CEDCAA5F4C3C3A5040 + +Count = 224 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 07C597D3760DB3A7AE66B40437853220919571EEB4DA + +Count = 225 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 69EF531194ED51FF7BA0575EE9DBAB3A3296E787D88F + +Count = 226 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = D7E1106B1FC3EEB67A2303B6B7854DFBAAB03F6BA4FD + +Count = 227 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 9D5448A0FEFAD7647B2D538341125A23F83226C7FB77 + +Count = 228 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 1B08C4187720DBC3D703D11B27AAB7A6EAE2119C55DA + +Count = 229 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = D05FC2A3D00D7407E04FE0AB7C0F773AE44FE22AF960 + +Count = 230 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 4BA2D7A1C7FAFEBCD0E901D994F0DAF77241659BA1C1 + +Count = 231 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = F67D6A419E452575B93E2BA66281B9D7322A7704CFAE + +Count = 232 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = +CT = A07DA477C44F423B0308FF6FBFE3741CB2F96209709A63 + +Count = 233 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 00 +CT = 2E093931B47429730757A1FB43AB59146F6EB2B49A2086 + +Count = 234 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 0001 +CT = B37F5AA385B3CC1E6ECE03F41ED875945F8BD164EC1727 + +Count = 235 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102 +CT = B22F68FCC38867EBED4839E43DC4DC97AAAC0AAFBB28A3 + +Count = 236 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 00010203 +CT = BD31D313960F8F5EB0656A754FEBE98AADA7ED934FF2BF + +Count = 237 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 0001020304 +CT = 57B418782022C49B82CB1ECAD34AB2F968D5C116C3BA90 + +Count = 238 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405 +CT = 3BF9C3E6C0F2F018463921DDC235C34C59DEF8CD7F5D23 + +Count = 239 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 00010203040506 +CT = CD6BCF99375535121E0EFAAE55490CA025A855D520F971 + +Count = 240 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 0001020304050607 +CT = 4041C9D540608DF426DCD80E455F0904AE0D493B7096AC + +Count = 241 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708 +CT = B67E036C5A837419C1D40310B1D93F7FB18C76FA01CD1C + +Count = 242 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 00010203040506070809 +CT = 35DFF5593925B376A92D424D5E8B2CCBE071ED0481250E + +Count = 243 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A +CT = 455A9AC5FFF46D2ACB45732F0C4ED4B9CBDF23CB769663 + +Count = 244 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B +CT = F268C004D35420F009C13BEFA2860B4F6DFB70EDC08FE7 + +Count = 245 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C +CT = 80CB407ADCEB8BC5FE85B67570E15AD0D280999AF859C1 + +Count = 246 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D +CT = 7542F4D104B5C5C2EF3C6CBBD3CE70C8CDEE22E2794282 + +Count = 247 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E +CT = A01FDE847486CCF35F2FAE51E584DBD3936AF9B9FB6124 + +Count = 248 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F +CT = 3644AE853CBAFB50A9CB0264B12CBC2B2D2392362C4CA4 + +Count = 249 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 579B88F0E150FD24E799D62AEDF1183094310344AD9731 + +Count = 250 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = B99CFA470673E72EAEBC4EA84B97938AC2B2338E6C616F + +Count = 251 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 3302EA6480D7EF86346A5F427305D031680C53713F2F9D + +Count = 252 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 418AE6B4795221CA6422FC2498E421B82C303258B630DA + +Count = 253 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 8090EDD3919D3396CB190D65E943A4FB22271D5947BAD5 + +Count = 254 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 577B6BC7CD35BCBFEA724647EE8D0A553C86126EA4A07B + +Count = 255 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = AC9572F9816D4A38F4117939D2CDA0889590EF546468F2 + +Count = 256 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 91460EE6B807208746E9198246405C2B79FFC5F82835CD + +Count = 257 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 07C597D3760D236A87CC5E96326F744A67FB8DEA627633 + +Count = 258 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 69EF531194ED472F939294A7C850ABBD857C954EC768B5 + +Count = 259 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = D7E1106B1FC3C528ED027BBDB48E9988C6DFBDD5CC00F2 + +Count = 260 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 9D5448A0FEFA3DF43E52ED278155D8C1C15F22C3359B99 + +Count = 261 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 1B08C41877208F7AA7A5377DFDEE3C79769D1031F31331 + +Count = 262 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = D05FC2A3D00D363F7F720444E9A65E4E3F09B4BD0AA847 + +Count = 263 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 4BA2D7A1C7FAC138079B1CF0CAEE06E7AD055D23C5829E + +Count = 264 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = F67D6A419E45232F4F6F65641FF8E71497F0CE8409A325 + +Count = 265 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = +CT = A07DA477C44F42A745C21E0F44723BE572B0F6F9C1ECBCA2 + +Count = 266 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 00 +CT = 2E093931B47429635DCC19E903F879B4B59AC04F0FF018D6 + +Count = 267 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 0001 +CT = B37F5AA385B3CC4B96CC1D2F98DC529A4E47A72ED21B9A4A + +Count = 268 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102 +CT = B22F68FCC38867401A25DE7B8675F9F8B4FF53DEA7CD9874 + +Count = 269 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 00010203 +CT = BD31D313960F8FC3DBA1B8E52E26A0E92936AADA59630117 + +Count = 270 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 0001020304 +CT = 57B418782022C4EFC3AD2857B5A2A66CB527B5FBAB242AC2 + +Count = 271 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405 +CT = 3BF9C3E6C0F2F0E6229A42004F96DC415D3D353A4D3FF2A6 + +Count = 272 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 00010203040506 +CT = CD6BCF99375535AEC5158B5DE2D6A497FDCC84F168C6F02A + +Count = 273 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 0001020304050607 +CT = 4041C9D540608D5FE7C952952DB47B95EBAF259B421048C9 + +Count = 274 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708 +CT = B67E036C5A83745648BED6D5821CC4E304B451DEF0B89422 + +Count = 275 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 00010203040506070809 +CT = 35DFF5593925B34CF0463DAA5B9E4CF191561D475CBDACFD + +Count = 276 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A +CT = 455A9AC5FFF46D4300D92473428D952A59FB28E8781B823C + +Count = 277 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B +CT = F268C004D35420FC09FFAA1B87A489B84429A881C4F1050A + +Count = 278 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C +CT = 80CB407ADCEB8B0817FF03C15E2B33104348345001621127 + +Count = 279 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D +CT = 7542F4D104B5C523B034BF97F727887ADAA2FA6D408D21D6 + +Count = 280 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E +CT = A01FDE847486CC3157E75BFB2C28C2DDD2B543FF5149FA7A + +Count = 281 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F +CT = 3644AE853CBAFBCC24CC183501FBE66247E4C085533FD3FF + +Count = 282 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 579B88F0E150FDE95DFD90513EBA5560F38E698247667A66 + +Count = 283 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = B99CFA470673E7B1DDAE91B815A81BCEEC58120C50D3E6E3 + +Count = 284 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 3302EA6480D7EFBE9DD6C10384327020344A577129D5E27E + +Count = 285 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 418AE6B4795221E0D79A6B0E1183523378221D492B657B62 + +Count = 286 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 8090EDD3919D337EA9FB6CEFAEFCE29C33037E8E41B06C90 + +Count = 287 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 577B6BC7CD35BC1B4F7158B7EEFD029E336C2439E5E314F3 + +Count = 288 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = AC9572F9816D4A0ED0164A0AFF135AD251F5E1196B6DC3B6 + +Count = 289 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 91460EE6B80720F6C4CECD65F190411780EDF33869D7AC9B + +Count = 290 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 07C597D3760D2397F357093FA52515A75083E832D6EA3BE4 + +Count = 291 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 69EF531194ED47C47D1D95CAC0E276ACD5A8EEE09BABB479 + +Count = 292 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = D7E1106B1FC3C5C5545E7F13EF5A9543A63F32DCC8C04A14 + +Count = 293 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 9D5448A0FEFA3D6FDFA5799B2C54A5FBE982320E810F3036 + +Count = 294 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 1B08C41877208F0C85757DAAEF5560031D5F3D82A9E3E592 + +Count = 295 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = D05FC2A3D00D36601B8A916F3963101D1135430F0B1D78E8 + +Count = 296 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 4BA2D7A1C7FAC121E690C30B6C7EB7092AAB7F303A037006 + +Count = 297 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = F67D6A419E452375818FFC47E03E55CA14F43D21D7A37471 + +Count = 298 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = +CT = A07DA477C44F42A76C54F10CFE413C5D9C587FA96DA6F26F22 + +Count = 299 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 00 +CT = 2E093931B4742963DB1606B5EBE041ED15036EFF3591D64F56 + +Count = 300 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 0001 +CT = B37F5AA385B3CC4BFA532601BC71E4FDA1547FAFA5ED941D34 + +Count = 301 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102 +CT = B22F68FCC38867408F567CFE50885E68B0212C368A7D132180 + +Count = 302 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 00010203 +CT = BD31D313960F8FC34EFC800B108C307924FED103BF2B3BB292 + +Count = 303 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 0001020304 +CT = 57B418782022C4EFC64BDC3358129687D6E2EA63B3499AF5AE + +Count = 304 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405 +CT = 3BF9C3E6C0F2F0E68E2DC04632395AAFBC38846773576FF639 + +Count = 305 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 00010203040506 +CT = CD6BCF99375535AE654054D3A550EC9D14F9861925002010CF + +Count = 306 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 0001020304050607 +CT = 4041C9D540608D5FBD31F79472425B8C647E25F4355B112E08 + +Count = 307 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708 +CT = B67E036C5A8374566155342D07EC370201EB362A12968AB979 + +Count = 308 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 00010203040506070809 +CT = 35DFF5593925B34C35428B9AFB994A92BE306F793C7D4E956D + +Count = 309 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A +CT = 455A9AC5FFF46D43D383C163043D53B738DFCC315C45DC5E54 + +Count = 310 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B +CT = F268C004D35420FCAE761BADA2C4682E6FA943E9FE99842FBA + +Count = 311 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C +CT = 80CB407ADCEB8B08041F07A59078320EBE516D76B73D29F4B6 + +Count = 312 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D +CT = 7542F4D104B5C523A72DF155D205EE6EC685CD55A64BBBC57F + +Count = 313 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E +CT = A01FDE847486CC31D85A13AA9EDE116A87EC1FACA93CEA23AC + +Count = 314 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F +CT = 3644AE853CBAFBCCAB759F6DFDC4A452251713C572124B5BF9 + +Count = 315 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 579B88F0E150FDE9382A805B7C1601443272CFD1BD7E02B089 + +Count = 316 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = B99CFA470673E7B11F0E1A7CFC6F8A33B1BE3A63670C448E73 + +Count = 317 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 3302EA6480D7EFBEEFF87C5399E981A842C5A2AC7DCD0DABF3 + +Count = 318 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 418AE6B4795221E0F0B1E38CFD2D73734447B01F92F2C32176 + +Count = 319 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 8090EDD3919D337EFBF906076B2FAA0744509FA3AEED153AAC + +Count = 320 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 577B6BC7CD35BC1BADDA593652BD217A8C0D6907760BA1DD42 + +Count = 321 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = AC9572F9816D4A0E42ECDF0754D74B3AC0F469F0C6E72046EC + +Count = 322 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 91460EE6B80720F6215E23638B2950D1E21033969F70C01E07 + +Count = 323 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 07C597D3760D23979D8973CFD2ACEF7090B8E8B707BDE3A89A + +Count = 324 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 69EF531194ED47C492604312ACFAA926B5577D95778881596F + +Count = 325 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = D7E1106B1FC3C5C5251ACCC3AD89D5D1EE611157C92D75CAF5 + +Count = 326 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 9D5448A0FEFA3D6F0DE633213880D860BAE7F1E40B9AD85B5D + +Count = 327 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 1B08C41877208F0CB3DFFCDEC3FE1CC3FDE6A471AB006CF084 + +Count = 328 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = D05FC2A3D00D3660010946BA3E031D481A894933FD93EADE08 + +Count = 329 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 4BA2D7A1C7FAC121AD8149D580CA739D9A7CE29465255D682F + +Count = 330 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = F67D6A419E45237596CF4170B292E87858D7D0E6C9351B49DE + +Count = 331 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = +CT = A07DA477C44F42A76C6EE0C9F85C07F34E97FBB607EB456BC642 + +Count = 332 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 00 +CT = 2E093931B4742963DB5133D5A081A66DB4CF9CF1C7CE8F717051 + +Count = 333 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 0001 +CT = B37F5AA385B3CC4BFA5FD54CA400B3A778CD434CD774A27E2F14 + +Count = 334 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102 +CT = B22F68FCC38867408F7C690A26C1C8D34A88476A8D79730EC368 + +Count = 335 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 00010203 +CT = BD31D313960F8FC34EF120227BC6EAC4AD8EAB79F2AE22ED7A4A + +Count = 336 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 0001020304 +CT = 57B418782022C4EFC6288716F9B933CAA9F3CEA7C7761E67CF0A + +Count = 337 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405 +CT = 3BF9C3E6C0F2F0E68E65768A2AD6AD8BE0AB4B05D3C7AD44A072 + +Count = 338 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 00010203040506 +CT = CD6BCF99375535AE650A13ACEC2E09814AF1E5A6BC0ECC9242B2 + +Count = 339 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 0001020304050607 +CT = 4041C9D540608D5FBDF9293A75064FF980CE3DEFD21A1C9BB439 + +Count = 340 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708 +CT = B67E036C5A837456610522257F3F0DD26137F85B585A215B92F8 + +Count = 341 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 00010203040506070809 +CT = 35DFF5593925B34C35C88158A115F880B3408B5915FF63254AB5 + +Count = 342 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A +CT = 455A9AC5FFF46D43D3751D026A057C75DD35F7BBB294F27657D5 + +Count = 343 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B +CT = F268C004D35420FCAE7E0B34653C58201CBCA5B920F56984A48B + +Count = 344 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C +CT = 80CB407ADCEB8B08046E92D60B7C5A327FF849F1CF5AC23CF952 + +Count = 345 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D +CT = 7542F4D104B5C523A75D133E0A51B8ECC6143C99CE540A6A732F + +Count = 346 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E +CT = A01FDE847486CC31D806190C4AE4C0718F6C86E218D31FFD7828 + +Count = 347 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F +CT = 3644AE853CBAFBCCABE06AC474F86E06738043E52DF91413F5A4 + +Count = 348 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 579B88F0E150FDE938E757D2E8C24C9F6638C42F3BDCBD5DC436 + +Count = 349 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = B99CFA470673E7B11F2120A43A5383442E3701AD4C349EB57D0C + +Count = 350 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 3302EA6480D7EFBEEFFC6392455F66079876CD787899794B9A63 + +Count = 351 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 418AE6B4795221E0F01DDB3E860E14B9989F4E480538C25712DD + +Count = 352 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 8090EDD3919D337EFB951054EA5B98772B9B16FE17BEBFC8AC07 + +Count = 353 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 577B6BC7CD35BC1BAD1A6477F309D67C01D5CF0D394A7B6F8239 + +Count = 354 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = AC9572F9816D4A0E4279C9027233DD1CB77A143712E97DE14C35 + +Count = 355 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 91460EE6B80720F621260442A1F71F69F35F859220FCC54BEE64 + +Count = 356 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 07C597D3760D23979D4ADCB28228F42B388A9AB3A5FB78030B84 + +Count = 357 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 69EF531194ED47C4920B964272E8BA15E34D413B5E6561264975 + +Count = 358 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = D7E1106B1FC3C5C52552B0139EFFBE839635F4BE481AF1EBFADC + +Count = 359 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 9D5448A0FEFA3D6F0D03023068D6E0DFE0124C2403B92F1F6E61 + +Count = 360 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 1B08C41877208F0CB317501FBFFE55C63BD54864411C9D00C19B + +Count = 361 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = D05FC2A3D00D366001E7A11DB850786186F8BB63FF1CDE3AC326 + +Count = 362 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 4BA2D7A1C7FAC121AD7E0A199157BD04859926C6233F70C1585E + +Count = 363 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = F67D6A419E45237596D3F5ED1574FA21A4416C0CDB52781F5C8B + +Count = 364 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = +CT = A07DA477C44F42A76C6E5D9FEC3E6393C9E90A1C63C7EE1CFFC97E + +Count = 365 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 00 +CT = 2E093931B4742963DB512D6FAA790505B740E6A2923C483C8D40F5 + +Count = 366 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 0001 +CT = B37F5AA385B3CC4BFA5F00EFB594D2071C6D2AC8DA17C0E176A49C + +Count = 367 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102 +CT = B22F68FCC38867408F7CB50F417F1B6007C3C89F525E204A1F693A + +Count = 368 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 00010203 +CT = BD31D313960F8FC34EF14824B15D09BA1D63DB8D4F242C01F37C3C + +Count = 369 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 0001020304 +CT = 57B418782022C4EFC6286B74D0C7B9F60AF9B189FE004A15F9567F + +Count = 370 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405 +CT = 3BF9C3E6C0F2F0E68E6541271024699399C6C7B925826F29CBAB06 + +Count = 371 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 00010203040506 +CT = CD6BCF99375535AE650ABE30DB239985E9419680044DAF42C6F128 + +Count = 372 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 0001020304050607 +CT = 4041C9D540608D5FBDF9CE4639282FDB029D506B164870110B5589 + +Count = 373 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708 +CT = B67E036C5A837456610548671DFA5189D87856D081045906F801FF + +Count = 374 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 00010203040506070809 +CT = 35DFF5593925B34C35C8348E9FC750B63E58AEFC558F7F3F21D466 + +Count = 375 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A +CT = 455A9AC5FFF46D43D37556C02F4B4057280CE7236961E3AAC0A473 + +Count = 376 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B +CT = F268C004D35420FCAE7E94D4FF9EE2AFA50F97EE5D924DFF255290 + +Count = 377 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C +CT = 80CB407ADCEB8B08046ED3A52A88676F1E4C7CA1EDB4DB38212CAC + +Count = 378 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D +CT = 7542F4D104B5C523A75D58467D8D0684D3BA9ED88EAFAF3C7A2D69 + +Count = 379 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E +CT = A01FDE847486CC31D806B1CA7D46BB4EEA083E41B4DC601093D8C5 + +Count = 380 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F +CT = 3644AE853CBAFBCCABE0E3E2C065271004930CC2C49B928033A624 + +Count = 381 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 579B88F0E150FDE938E7B8766815E5D89D5B6972E1FFA0ABDAC28F + +Count = 382 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = B99CFA470673E7B11F21459AE9B02A4C1455FE98BB39616C359E70 + +Count = 383 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 3302EA6480D7EFBEEFFC5FC05A4185AADA21F09F606FDD5ADEA826 + +Count = 384 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 418AE6B4795221E0F01DCF142D225C984A36E31C4EDA23C2EDB5C0 + +Count = 385 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 8090EDD3919D337EFB95DA8A4571448CA30280D220CC9973DEF3C8 + +Count = 386 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 577B6BC7CD35BC1BAD1AB5793BC4EB93E946EBA61B15595E8F4A6C + +Count = 387 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = AC9572F9816D4A0E4279805C498BDA72874C6199B066016907A8A2 + +Count = 388 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 91460EE6B80720F621266FF43B8904CEC4340967799E3C6795E027 + +Count = 389 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 07C597D3760D23979D4A7AC969397EB9345831BB7F61DE6D03F827 + +Count = 390 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 69EF531194ED47C4920BBDEDB06D3DBC0ABC7705A9BABB372A71D7 + +Count = 391 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = D7E1106B1FC3C5C525522E1F6D1D37C6784919397C11A2A25A5D45 + +Count = 392 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 9D5448A0FEFA3D6F0D031FDFB777CB85708BC761488DFB2F785601 + +Count = 393 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 1B08C41877208F0CB317C0F89C38C0C0921554C8E8EC435B9BE34D + +Count = 394 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = D05FC2A3D00D366001E7DF1258D7398BF479EA21CCD11E900E841C + +Count = 395 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 4BA2D7A1C7FAC121AD7E9AFA10435B60E8F22857A4EE0E8772CDB4 + +Count = 396 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = F67D6A419E45237596D3CEEDAECE32AC94793DC449399FFF97C22B + +Count = 397 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = +CT = A07DA477C44F42A76C6E5DD9791E8DE01C56C41EE329CED493695564 + +Count = 398 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 00 +CT = 2E093931B4742963DB512D999C23A19272D744F966A9DE039CFD2332 + +Count = 399 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 0001 +CT = B37F5AA385B3CC4BFA5F00F1DB0A9E80100E5220A3A43544C518CF40 + +Count = 400 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102 +CT = B22F68FCC38867408F7CB5CEEF7687AF03AE00B2A0FFE0AB0F300702 + +Count = 401 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 00010203 +CT = BD31D313960F8FC34EF1489AF07D7FC96DBE4756F9F44197C687C879 + +Count = 402 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 0001020304 +CT = 57B418782022C4EFC6286B0DE41CEF3808FE6C2D4E191B566021B336 + +Count = 403 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405 +CT = 3BF9C3E6C0F2F0E68E654113CE820D8ACD181D7462EED76A021F457F + +Count = 404 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 00010203040506 +CT = CD6BCF99375535AE650ABE8C01378BF4989325EA580154C29B963B73 + +Count = 405 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 0001020304050607 +CT = 4041C9D540608D5FBDF9CEF74217D56BCC7A16565B7FB774FA43FF94 + +Count = 406 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708 +CT = B67E036C5A8374566105484D11E33B86FD46A871E3DB79235DAF4D61 + +Count = 407 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 00010203040506070809 +CT = 35DFF5593925B34C35C834D3E25CA777D035E78580C92EAC440B7BAD + +Count = 408 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A +CT = 455A9AC5FFF46D43D37556F75BE05F63C7F0ACE174EF97B8E2736131 + +Count = 409 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B +CT = F268C004D35420FCAE7E94B9D2435AFF0B130871EDC0CA7DFA5B1E8F + +Count = 410 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C +CT = 80CB407ADCEB8B08046ED3BA0C09FE85E1D468C95B497E23D603482A + +Count = 411 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D +CT = 7542F4D104B5C523A75D58D3FA5591BD8B8D854A43D48E40EF1E2E3D + +Count = 412 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E +CT = A01FDE847486CC31D806B1E5095CCEAC17CF285F1EC6EE3D25DB51C6 + +Count = 413 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F +CT = 3644AE853CBAFBCCABE0E35C05A68C5BFF98EA165B3F5D2ABF74E3EE + +Count = 414 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 579B88F0E150FDE938E7B8330FC3820DF0CC830C87C346A7444E8BA9 + +Count = 415 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = B99CFA470673E7B11F2145FB10EC6D0F7DDA8C9813E9086DD3F0CF5D + +Count = 416 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 3302EA6480D7EFBEEFFC5F1F38004566008AF118EAE0A4FEBFC81E07 + +Count = 417 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 418AE6B4795221E0F01DCFD8B686390C84ADAC257496232F1F92C1DA + +Count = 418 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 8090EDD3919D337EFB95DADA53B57613837F2CF8C2CFC12AA26CBDAD + +Count = 419 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 577B6BC7CD35BC1BAD1AB5D18E2E462E75E68EBC180B0A27896C7171 + +Count = 420 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = AC9572F9816D4A0E42798089CDBB93D948883FC57E23A1649C106FC7 + +Count = 421 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 91460EE6B80720F621266F8ABECF795E46870EC58AAB4C699D6661E3 + +Count = 422 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 07C597D3760D23979D4A7AB7D99CFFA85B55C8E1B23E2470A9818332 + +Count = 423 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 69EF531194ED47C4920BBD6AB4FA4ABD9F016195FA7A85B3AFB2CF9A + +Count = 424 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = D7E1106B1FC3C5C525522E3E369B35A6FB0133EF45739A1CF4D76FBD + +Count = 425 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 9D5448A0FEFA3D6F0D031FE05E6A93008DB0997E8AC6917A6E3DC161 + +Count = 426 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 1B08C41877208F0CB317C0265565BFB20C093AF1E5B53209D7443666 + +Count = 427 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = D05FC2A3D00D366001E7DF89D84E0703B3CE9F7132CB118F5D9FAE04 + +Count = 428 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 4BA2D7A1C7FAC121AD7E9A410A68609BDABF5E5CA71AB236FBDAF2AD + +Count = 429 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = F67D6A419E45237596D3CE34B548F027F924CCD68C171E675F4EBE40 + +Count = 430 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = +CT = A07DA477C44F42A76C6E5DD9FC81F6DC80AFBAFBD0AB56E686F30EAC8E + +Count = 431 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 00 +CT = 2E093931B4742963DB512D9963AD28F6DCD6619AB33A8772C98953A848 + +Count = 432 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 0001 +CT = B37F5AA385B3CC4BFA5F00F19F96446953CDCCBF632AF9B9E6392B2DAE + +Count = 433 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102 +CT = B22F68FCC38867408F7CB5CE8312C8B771224ECD7ED531BDC8751EB542 + +Count = 434 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 00010203 +CT = BD31D313960F8FC34EF1489AF6C6E2A671CB8A576CB63A134D1DD27DC0 + +Count = 435 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 0001020304 +CT = 57B418782022C4EFC6286B0DA028D85EA9EA75F3D8A93D5368B12836C5 + +Count = 436 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405 +CT = 3BF9C3E6C0F2F0E68E6541137AD4B40D7B9008247CA6893D4243C9AADC + +Count = 437 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 00010203040506 +CT = CD6BCF99375535AE650ABE8CBE996C5ADBA19714DD34BBCE1504BCFE4D + +Count = 438 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 0001020304050607 +CT = 4041C9D540608D5FBDF9CEF7CE195200B476FDA227F8DFBE49DDBA3108 + +Count = 439 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708 +CT = B67E036C5A8374566105484DD4E38ACD112E901BEB13CCD5DFA95294D5 + +Count = 440 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 00010203040506070809 +CT = 35DFF5593925B34C35C834D30284B53A3A41785C11696EDE6DDA09B172 + +Count = 441 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A +CT = 455A9AC5FFF46D43D37556F7F29BD8DCB051A42AD494ABA829AA2D0523 + +Count = 442 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B +CT = F268C004D35420FCAE7E94B9BD393FCECB7D85695DE8595EFD3968D647 + +Count = 443 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C +CT = 80CB407ADCEB8B08046ED3BA744EAAFA811D0CF651334C688DACF4DD13 + +Count = 444 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D +CT = 7542F4D104B5C523A75D58D31911E9C331FD6C788A39D0E885D4DFAEA0 + +Count = 445 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E +CT = A01FDE847486CC31D806B1E5C6EB0CBC3B1CAC05AD0366628A5CE0D560 + +Count = 446 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F +CT = 3644AE853CBAFBCCABE0E35CE2B33F2C693637AA3CAF3221765A110A58 + +Count = 447 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 579B88F0E150FDE938E7B83346041FACEBE267FE8361DF6A14795E5B30 + +Count = 448 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = B99CFA470673E7B11F2145FB4560AAB01AEA0A6CD155D0ACBAF290102C + +Count = 449 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 3302EA6480D7EFBEEFFC5F1F1AFC416DC7E187ADCF4B557859D1D00CE3 + +Count = 450 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 418AE6B4795221E0F01DCFD87AC9E1DD0323294711BA188E4DDC0FF0F3 + +Count = 451 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 8090EDD3919D337EFB95DADA71ABDAEABE80FEC5ACC885E9FEE5A269A7 + +Count = 452 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 577B6BC7CD35BC1BAD1AB5D1375EE1FCEB1512F85AEAE5DC0FACF76C72 + +Count = 453 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = AC9572F9816D4A0E42798089A77FB6F0DE233A6B3799F66B63E696E279 + +Count = 454 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 91460EE6B80720F621266F8AF933B7D843EC63597F5AB7574E1E0F18CC + +Count = 455 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 07C597D3760D23979D4A7AB77069AFD18D898D0E0F9C3871B83F9D2331 + +Count = 456 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 69EF531194ED47C4920BBD6A00265FEFA3AECB3F1FF5DC371EF114ACAB + +Count = 457 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = D7E1106B1FC3C5C525522E3E5CF7A66C1FEB3E242FE6ED2D0292C917F5 + +Count = 458 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 9D5448A0FEFA3D6F0D031FE03D32FA86523C261A0D0B14B5F5A4C972FC + +Count = 459 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 1B08C41877208F0CB317C026AFEFDBEA3B383891D694CB92412DE70771 + +Count = 460 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = D05FC2A3D00D366001E7DF89E033EE2AC50FCF11290E94C1EF7D89FB2C + +Count = 461 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 4BA2D7A1C7FAC121AD7E9A411F3C49E68B9CE3F068BB2C3C4F5730F9A6 + +Count = 462 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = F67D6A419E45237596D3CE343E7BC849AEABD2BF3E30E38AD6BEA4E6B6 + +Count = 463 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = +CT = A07DA477C44F42A76C6E5DD9FC1E04ED13C1D9C822BE515E2B2E98310576 + +Count = 464 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 00 +CT = 2E093931B4742963DB512D99633C0664C7975D871F9392CC43000BA28BEA + +Count = 465 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 0001 +CT = B37F5AA385B3CC4BFA5F00F19F2FEB48B208E00367328A5DA041CC0A9432 + +Count = 466 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102 +CT = B22F68FCC38867408F7CB5CE832E2C7DF787BDA6AE06A49D133864AA2C1F + +Count = 467 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 00010203 +CT = BD31D313960F8FC34EF1489AF61488C4BC365B0D9D10560867D3B8443E4B + +Count = 468 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 0001020304 +CT = 57B418782022C4EFC6286B0DA001F7F984F5A94EDA22D3614DF2CEF49472 + +Count = 469 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405 +CT = 3BF9C3E6C0F2F0E68E6541137A5D3A7B028D53A67D4C4517F12387377EDD + +Count = 470 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 00010203040506 +CT = CD6BCF99375535AE650ABE8CBE871CF3D8D7982FA28AB8A60BE9160B85DB + +Count = 471 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 0001020304050607 +CT = 4041C9D540608D5FBDF9CEF7CE416828B7B6DB489BCECA6835E16DA7E997 + +Count = 472 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708 +CT = B67E036C5A8374566105484DD4F0ED8BB63B11D8E9F05CB7FEB1096CF5E1 + +Count = 473 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 00010203040506070809 +CT = 35DFF5593925B34C35C834D3027A6F99F9D5C4839FA2C2461B47424E8137 + +Count = 474 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A +CT = 455A9AC5FFF46D43D37556F7F288C98AE98EBA8F4F0196FB5E02004BD8C3 + +Count = 475 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B +CT = F268C004D35420FCAE7E94B9BDC24BEA4FF7C844739F872953549F1FD816 + +Count = 476 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C +CT = 80CB407ADCEB8B08046ED3BA74F0A1E0252120DBFEAEA09EC6FF528CC402 + +Count = 477 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D +CT = 7542F4D104B5C523A75D58D319B67D5DDFD04294249FE68B52684AA2B6CF + +Count = 478 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E +CT = A01FDE847486CC31D806B1E5C6C3BC183DB2E15F8AD0CA36898B5EBDDCFB + +Count = 479 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F +CT = 3644AE853CBAFBCCABE0E35CE2D2BD9B89829655C040AFF231EBB5E2131E + +Count = 480 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 579B88F0E150FDE938E7B8334613F67A64EC201238BB08F3396B48B7BEDD + +Count = 481 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = B99CFA470673E7B11F2145FB45D9D2BDF6D8B7AAD10DF2405B5AC407E14E + +Count = 482 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 3302EA6480D7EFBEEFFC5F1F1A0B3C098E6CB001975A73D7E109135112E7 + +Count = 483 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 418AE6B4795221E0F01DCFD87AF36AB188B1381F35206B195A4ACF4134A2 + +Count = 484 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 8090EDD3919D337EFB95DADA715D9F1601574F00466F281008F2EDB1E7A3 + +Count = 485 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 577B6BC7CD35BC1BAD1AB5D13751FD4C69758C5B9AC56DABBD9B89DBC3CC + +Count = 486 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = AC9572F9816D4A0E42798089A7208EABAC8E0052FD9830F55B85754A92C5 + +Count = 487 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 91460EE6B80720F621266F8AF9AB2C766E06E185C2C04AF7340AA3ABD976 + +Count = 488 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 07C597D3760D23979D4A7AB770841A39433324AA84BF77DDE787AA21B5DF + +Count = 489 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 69EF531194ED47C4920BBD6A0007CE7A5F390917BF7B5FDF22D4C0C6CEF6 + +Count = 490 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = D7E1106B1FC3C5C525522E3E5CE934B03F6CB99525601CFAEC434C724EC3 + +Count = 491 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 9D5448A0FEFA3D6F0D031FE03DB117342D65487493CD4E024B8B3E10D998 + +Count = 492 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 1B08C41877208F0CB317C026AF056FE6D810D9BB72B14CF1E6EAA953CC2E + +Count = 493 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = D05FC2A3D00D366001E7DF89E0E592E083A341D0D74248068F45F06BC665 + +Count = 494 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 4BA2D7A1C7FAC121AD7E9A411F55C296B92CF53F82DC00DA4D3C77CBA939 + +Count = 495 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = F67D6A419E45237596D3CE343E8B8AC7391E1E0F4F95742528D1D6F2ED39 + +Count = 496 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = +CT = A07DA477C44F42A76C6E5DD9FC1E2579C7E82D70223CE27DEF385063270530 + +Count = 497 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 00 +CT = 2E093931B4742963DB512D99633C20E66E4C5BFD27B15DCA92A8778C4B59FD + +Count = 498 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 0001 +CT = B37F5AA385B3CC4BFA5F00F19F2F789BAD0211D766167D044C115E795A95EA + +Count = 499 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102 +CT = B22F68FCC38867408F7CB5CE832E75F8F3D1C62A0D23BAB0DB15A5A7FAE92A + +Count = 500 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 00010203 +CT = BD31D313960F8FC34EF1489AF6147644F004409DCF283C4769A6791EA8C176 + +Count = 501 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 0001020304 +CT = 57B418782022C4EFC6286B0DA0013509513E201DDD1DF6F1A3369F5759EDD1 + +Count = 502 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405 +CT = 3BF9C3E6C0F2F0E68E6541137A5D110EE17D6B202F5693ED4B2731E298BE78 + +Count = 503 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 00010203040506 +CT = CD6BCF99375535AE650ABE8CBE87BEF2CB0D73EFB1D123F6F25BB11FECB941 + +Count = 504 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 0001020304050607 +CT = 4041C9D540608D5FBDF9CEF7CE412D3A7C0F3D076538F8C9C2EEC047E1C43D + +Count = 505 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708 +CT = B67E036C5A8374566105484DD4F0608A0DCE66E5633D792D5A3D4ECBACE771 + +Count = 506 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 00010203040506070809 +CT = 35DFF5593925B34C35C834D3027A224560F39F546D2B10A309AB106DD01806 + +Count = 507 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A +CT = 455A9AC5FFF46D43D37556F7F2881B25F4F8E74719F18CD3E83D96FFC16066 + +Count = 508 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B +CT = F268C004D35420FCAE7E94B9BDC202C0CF587744DAD590FA04FC51DFA23375 + +Count = 509 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C +CT = 80CB407ADCEB8B08046ED3BA74F0DBBE116A02CC05D4284FD2B6D48ADBDB99 + +Count = 510 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D +CT = 7542F4D104B5C523A75D58D319B6444682D55CD885EBF2A6ECC3139132AF7F + +Count = 511 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E +CT = A01FDE847486CC31D806B1E5C6C35369B301107CC2EDB649FD0598777B4B4F + +Count = 512 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F +CT = 3644AE853CBAFBCCABE0E35CE2D2025B5A3C3E4FFF4A167D99000293509931 + +Count = 513 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 579B88F0E150FDE938E7B8334613B9FECCEB9DE628161D5AB94E133F6F6D89 + +Count = 514 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = B99CFA470673E7B11F2145FB45D9692668F5BB4BC65BED7C11EB9EA7072450 + +Count = 515 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 3302EA6480D7EFBEEFFC5F1F1A0B5412CEFE11164FCE9C5009D671C68D0E85 + +Count = 516 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 418AE6B4795221E0F01DCFD87AF385571E2A1A7460ED87A344B8B312C8B676 + +Count = 517 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 8090EDD3919D337EFB95DADA715D24645489ECB10935A1E91BE23A1524EC84 + +Count = 518 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 577B6BC7CD35BC1BAD1AB5D13751C36722E43289CCEADB7C3E4AD5F0304634 + +Count = 519 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = AC9572F9816D4A0E42798089A7200CD8AC7CAF7D09BA2100F9280F4E0C3E3A + +Count = 520 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 91460EE6B80720F621266F8AF9AB75FD9BA84F10F9D4871BA4AD318B61566F + +Count = 521 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 07C597D3760D23979D4A7AB77084A30F4A1878B5B99664078A7FAECDB566F2 + +Count = 522 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 69EF531194ED47C4920BBD6A0007D695D8D98F63CCE528DB05EA15172B1A81 + +Count = 523 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = D7E1106B1FC3C5C525522E3E5CE93604C98AAB6C34FE0326A1B73BCF73550C + +Count = 524 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 9D5448A0FEFA3D6F0D031FE03DB17AB133B94729D97092969D97988D962DB4 + +Count = 525 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 1B08C41877208F0CB317C026AF05CE6BF8374E16A84C52BE988B183DA11431 + +Count = 526 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = D05FC2A3D00D366001E7DF89E0E596C4FCD43BC2EA94EF11BEC793689ED7AC + +Count = 527 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 4BA2D7A1C7FAC121AD7E9A411F554F9976D9FDB1479CED54F232A53BCAB93E + +Count = 528 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = F67D6A419E45237596D3CE343E8BB14F3615339990FDBDAA5AD0C62046E6A7 + +Count = 529 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = +CT = A07DA477C44F42A76C6E5DD9FC1E251C7BF381672A199248DC308614DC9A62BD + +Count = 530 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 00 +CT = 2E093931B4742963DB512D99633C209BF48D55CF93B6B61FCF65959306A817E5 + +Count = 531 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 0001 +CT = B37F5AA385B3CC4BFA5F00F19F2F787B6BEB09C0E34699E28A7FAC8F7EB27377 + +Count = 532 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102 +CT = B22F68FCC38867408F7CB5CE832E75B049F7C6A8A660D29FEA1A127AFB6155BD + +Count = 533 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 00010203 +CT = BD31D313960F8FC34EF1489AF614765BF1AF35B92968BDB761815C010A8567D8 + +Count = 534 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 0001020304 +CT = 57B418782022C4EFC6286B0DA00135D4FB2275E93973E6F65496A62972141C7A + +Count = 535 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405 +CT = 3BF9C3E6C0F2F0E68E6541137A5D11A0073B29F3EB0670F62EC50ABA07950086 + +Count = 536 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 00010203040506 +CT = CD6BCF99375535AE650ABE8CBE87BE78C59D7EB0B3D6A3BF311D3CEACE75D75E + +Count = 537 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 0001020304050607 +CT = 4041C9D540608D5FBDF9CEF7CE412DC74099FD96DC2AFBAB7AD46B7CFF1D293E + +Count = 538 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708 +CT = B67E036C5A8374566105484DD4F060221F1C88F38607CA2CCDDA1E9F031E3FD6 + +Count = 539 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 00010203040506070809 +CT = 35DFF5593925B34C35C834D3027A22ABE9DC77D78E2E63979B0BCE205696177E + +Count = 540 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A +CT = 455A9AC5FFF46D43D37556F7F2881BD228551E00AB11F71552831BBC07F44853 + +Count = 541 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B +CT = F268C004D35420FCAE7E94B9BDC2025BC43CD22F27EC4A32E8319F5D79720159 + +Count = 542 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C +CT = 80CB407ADCEB8B08046ED3BA74F0DB4882516080B85274B9F2860B7C71D6D235 + +Count = 543 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D +CT = 7542F4D104B5C523A75D58D319B6440965D93BC93E29B1963CA77D82D3F9D3FF + +Count = 544 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E +CT = A01FDE847486CC31D806B1E5C6C3530778ABE325456FDD4218E94F148C2315B9 + +Count = 545 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F +CT = 3644AE853CBAFBCCABE0E35CE2D202840A6D39A1D6FE274D7A55F8BB5621C4AF + +Count = 546 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 579B88F0E150FDE938E7B8334613B9D8758F93FF5ED8C47EC238116F274276B5 + +Count = 547 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = B99CFA470673E7B11F2145FB45D9698026E902BAA5A71A1A8355AFB574FC7691 + +Count = 548 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 3302EA6480D7EFBEEFFC5F1F1A0B54D74351F786A8045E4AFFB89A566F7AA00D + +Count = 549 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 418AE6B4795221E0F01DCFD87AF385A844771FD3E389E54C9341BC9475F0CD54 + +Count = 550 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 8090EDD3919D337EFB95DADA715D24A9F3C2BF756FECF66215A89A013BCAFD62 + +Count = 551 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 577B6BC7CD35BC1BAD1AB5D13751C3DE0533D8CA1DF12F47CBC7828ADD1A7756 + +Count = 552 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = AC9572F9816D4A0E42798089A7200CAD612C7030E5FB02B234173B5EE4D186A5 + +Count = 553 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 91460EE6B80720F621266F8AF9AB75A068F2F5CA931CD6D609F9D61856D07104 + +Count = 554 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 07C597D3760D23979D4A7AB77084A329CC30F045AB242AA54A9F1EE0E67DA047 + +Count = 555 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 69EF531194ED47C4920BBD6A0007D6978DAC9AB3A150A7659B17FD50EF63AF70 + +Count = 556 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = D7E1106B1FC3C5C525522E3E5CE936DF9152E4A6BA97BBB92B4BF897B4D37D4B + +Count = 557 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 9D5448A0FEFA3D6F0D031FE03DB17AC913193FAEA5494A900494D558882AB719 + +Count = 558 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 1B08C41877208F0CB317C026AF05CE55ED16CC47D7E9602A15EBC7130DBF3A30 + +Count = 559 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = D05FC2A3D00D366001E7DF89E0E596DDBD18EF98442F7877D04081814820C42D + +Count = 560 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 4BA2D7A1C7FAC121AD7E9A411F554F43CDCD91AA76FA7F8D84A630E7EED22D5B + +Count = 561 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = F67D6A419E45237596D3CE343E8BB10779551F9377B1E2FAE8F583A196C1B6B8 + +Count = 562 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = +CT = A07DA477C44F42A76C6E5DD9FC1E251C8EE3F8D83C2EAD532B3BE8945372287522 + +Count = 563 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 00 +CT = 2E093931B4742963DB512D99633C209B2B04CAB4327D6D5626B996718565141D82 + +Count = 564 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 0001 +CT = B37F5AA385B3CC4BFA5F00F19F2F787B29A2838C3FCA0FA7547ECA284470D0CDBA + +Count = 565 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102 +CT = B22F68FCC38867408F7CB5CE832E75B0E094C809F2DA705912758CF522F3047056 + +Count = 566 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 00010203 +CT = BD31D313960F8FC34EF1489AF614765BE089F4162A9A122A3C04B56026F1622574 + +Count = 567 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 0001020304 +CT = 57B418782022C4EFC6286B0DA00135D4D0757C2DCF7C4B4B13D9DE8EE985ACCF1C + +Count = 568 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405 +CT = 3BF9C3E6C0F2F0E68E6541137A5D11A020A15F93057793A1DD7705D57DBC53E3DE + +Count = 569 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 00010203040506 +CT = CD6BCF99375535AE650ABE8CBE87BE78B4DDD025D8E90388961726DDE8BB7B4AE4 + +Count = 570 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 0001020304050607 +CT = 4041C9D540608D5FBDF9CEF7CE412DC7293D672980C36AFDC4EABF7A058CEA8D7B + +Count = 571 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708 +CT = B67E036C5A8374566105484DD4F0602293079A7CBE9D4490E341B58865904743D6 + +Count = 572 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 00010203040506070809 +CT = 35DFF5593925B34C35C834D3027A22ABC64D196545FB70F2EA5AA8EDD03694D351 + +Count = 573 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A +CT = 455A9AC5FFF46D43D37556F7F2881BD252AAF76A6B8894229CFFFC7C5059A79B29 + +Count = 574 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B +CT = F268C004D35420FCAE7E94B9BDC2025B52E1B9E08AA110BD186D348E2EBEBD1AF9 + +Count = 575 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C +CT = 80CB407ADCEB8B08046ED3BA74F0DB48AA328FDABAC081DAE56182BADE906E4F03 + +Count = 576 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D +CT = 7542F4D104B5C523A75D58D319B64409287966E1B3E93B2FD4DF536A1E06D93287 + +Count = 577 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E +CT = A01FDE847486CC31D806B1E5C6C353077DE51F8ED37BDA2235A54AECD71BCA2209 + +Count = 578 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F +CT = 3644AE853CBAFBCCABE0E35CE2D20284F060B55C25501877567DC04B39DDF0F69B + +Count = 579 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 579B88F0E150FDE938E7B8334613B9D8C1953149EF8BAF1CEDD6FDF54FD796911E + +Count = 580 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = B99CFA470673E7B11F2145FB45D96980F23D21C6784B3A94291C46883CCC61D4CA + +Count = 581 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 3302EA6480D7EFBEEFFC5F1F1A0B54D7411CB5B778FE590363D86634F3F67222F9 + +Count = 582 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 418AE6B4795221E0F01DCFD87AF385A8E44416B68B868134DD96088C930710D984 + +Count = 583 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 8090EDD3919D337EFB95DADA715D24A95EAF147DD7C172C3F42E456A4F5F8E3AF8 + +Count = 584 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 577B6BC7CD35BC1BAD1AB5D13751C3DE8E9AD5253F2CE258136108A675026505E8 + +Count = 585 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = AC9572F9816D4A0E42798089A7200CADF684AD6CB9009B58EEA4ACD0F2E9B9F203 + +Count = 586 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 91460EE6B80720F621266F8AF9AB75A017A87CA1BD6187F88FA2742D832150D527 + +Count = 587 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 07C597D3760D23979D4A7AB77084A329A509A06AB72852403E4751F020498565D6 + +Count = 588 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 69EF531194ED47C4920BBD6A0007D697490771FB6B2E886C02315DF7834B6C79A0 + +Count = 589 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = D7E1106B1FC3C5C525522E3E5CE936DFF78D842EBCF6D3A519D3894E47C246DAD7 + +Count = 590 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 9D5448A0FEFA3D6F0D031FE03DB17AC9BDA4178E8A2F46655B266464DB0EC8F6D8 + +Count = 591 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 1B08C41877208F0CB317C026AF05CE55C9BAC1AF537971A560D7B2B78288A39694 + +Count = 592 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = D05FC2A3D00D366001E7DF89E0E596DD0FD5A3AB409748442D92FF329E00F59EA7 + +Count = 593 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 4BA2D7A1C7FAC121AD7E9A411F554F430CDAC060B8D7C130A0098BF03B6933629B + +Count = 594 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = F67D6A419E45237596D3CE343E8BB10790642C1979A2317079620594C2303C66B6 + +Count = 595 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = +CT = A07DA477C44F42A76C6E5DD9FC1E251C8E2012098ADDD3FE1CBDBC3E8927971A6110 + +Count = 596 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 00 +CT = 2E093931B4742963DB512D99633C209B2BD981591303952082CBE6EF6D0475C34E14 + +Count = 597 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 0001 +CT = B37F5AA385B3CC4BFA5F00F19F2F787B29ACC45580C8E13B0164B70C118F5801B621 + +Count = 598 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102 +CT = B22F68FCC38867408F7CB5CE832E75B0E0C6DC23E9A146CBE08CC7FD379BB07CDA78 + +Count = 599 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 00010203 +CT = BD31D313960F8FC34EF1489AF614765BE05D2E810838C927ACF4A140B8A58F8832ED + +Count = 600 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 0001020304 +CT = 57B418782022C4EFC6286B0DA00135D4D0DB09B758299ED9EAD9C7040CEE520DEEA7 + +Count = 601 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405 +CT = 3BF9C3E6C0F2F0E68E6541137A5D11A02059F065C250C22CD194E78E63F5100A63C3 + +Count = 602 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 00010203040506 +CT = CD6BCF99375535AE650ABE8CBE87BE78B447FF32688B391B7BD4632D799749D5F56A + +Count = 603 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 0001020304050607 +CT = 4041C9D540608D5FBDF9CEF7CE412DC72941DB9FCF17F22AEF4CA305AAE3B5F529B4 + +Count = 604 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708 +CT = B67E036C5A8374566105484DD4F0602293E31F59D3C58BBD4B65EBEC0225D9DB34BB + +Count = 605 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 00010203040506070809 +CT = 35DFF5593925B34C35C834D3027A22ABC639F67FD6BFCDA38483728F239F4D79B6B4 + +Count = 606 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A +CT = 455A9AC5FFF46D43D37556F7F2881BD2521001A2F43DE7534B6B3EB26D17FACD1D16 + +Count = 607 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B +CT = F268C004D35420FCAE7E94B9BDC2025B52639CF997B7972BA71D1522A2A402075BA8 + +Count = 608 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C +CT = 80CB407ADCEB8B08046ED3BA74F0DB48AAD1396CBAAA025B4C82350C4999A7E14EBC + +Count = 609 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D +CT = 7542F4D104B5C523A75D58D319B64409289B6C66BC59EC41786732AB85A0C3724A60 + +Count = 610 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E +CT = A01FDE847486CC31D806B1E5C6C353077D4A029CAC4E96335EAE7C2A3C3AE8366B5E + +Count = 611 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F +CT = 3644AE853CBAFBCCABE0E35CE2D20284F050FC5770DC57D3B4AE03F09D5AA811B260 + +Count = 612 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 579B88F0E150FDE938E7B8334613B9D8C1EB5331716B702654B8FDDA0A15D8416FFB + +Count = 613 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = B99CFA470673E7B11F2145FB45D96980F24457B4629084A13F71AF8202FE0BE33E1D + +Count = 614 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 3302EA6480D7EFBEEFFC5F1F1A0B54D7414C387FE0548EEA37C76D9500DF6D2AB0DA + +Count = 615 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 418AE6B4795221E0F01DCFD87AF385A8E4B921F5E29633CE084E7B91DC5E2B88662F + +Count = 616 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 8090EDD3919D337EFB95DADA715D24A95EBA74A3A2C7F4C33D4AB34DD7F2C7E968DF + +Count = 617 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 577B6BC7CD35BC1BAD1AB5D13751C3DE8E7470987395A4F9CF8C9FC26C8B145D1E14 + +Count = 618 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = AC9572F9816D4A0E42798089A7200CADF697B722B2BB5960E164990B4EEC50409D26 + +Count = 619 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 91460EE6B80720F621266F8AF9AB75A01723257A010E397DC68E1B7BF4968C7987D0 + +Count = 620 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 07C597D3760D23979D4A7AB77084A329A53E906AABF4702F30FDE27A7B6F82A96C92 + +Count = 621 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 69EF531194ED47C4920BBD6A0007D69749D74814FFBACB4B28B0D1E858F2EF50CA7D + +Count = 622 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = D7E1106B1FC3C5C525522E3E5CE936DFF791FDC6FC20A7BED47207D99A41505ADC20 + +Count = 623 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 9D5448A0FEFA3D6F0D031FE03DB17AC9BD829C6BC647EC8F818C1CB884544F0212B0 + +Count = 624 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 1B08C41877208F0CB317C026AF05CE55C9F05AB3CB06BD588EADBDEE9F0831A36428 + +Count = 625 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = D05FC2A3D00D366001E7DF89E0E596DD0F8F4D8848C1AEFFC2AEB32E72A506B0B4BB + +Count = 626 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 4BA2D7A1C7FAC121AD7E9A411F554F430C5D686E42E4F91E2DC421ADB0A843E813B7 + +Count = 627 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = F67D6A419E45237596D3CE343E8BB10790634955F7DBD225C912DE8F560C9E76E1CB + +Count = 628 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = +CT = A07DA477C44F42A76C6E5DD9FC1E251C8E2096B0B942A21E06834D7FCD5E7FAFECDAC1 + +Count = 629 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 00 +CT = 2E093931B4742963DB512D99633C209B2BD99B393BF27B9B8532B930732BD428A700AB + +Count = 630 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 0001 +CT = B37F5AA385B3CC4BFA5F00F19F2F787B29ACEA58A17A7B3147B46905697BA82B9C6CA3 + +Count = 631 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102 +CT = B22F68FCC38867408F7CB5CE832E75B0E0C650CFF7E14A371BD3C11D6EAD22CE2AE475 + +Count = 632 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 00010203 +CT = BD31D313960F8FC34EF1489AF614765BE05DDB72C2A28136FB2DED4A7799705D8CDA48 + +Count = 633 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 0001020304 +CT = 57B418782022C4EFC6286B0DA00135D4D0DB544457A23F241B8F4030542F263B4B6D1A + +Count = 634 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405 +CT = 3BF9C3E6C0F2F0E68E6541137A5D11A02059BD50FAF3D39776E67FB37DEFBBE5511D05 + +Count = 635 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 00010203040506 +CT = CD6BCF99375535AE650ABE8CBE87BE78B447A7302EBB08E4348E530FC19DD9CE7C3455 + +Count = 636 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 0001020304050607 +CT = 4041C9D540608D5FBDF9CEF7CE412DC72941514905581D8F03F2C574A25A0A359B30D5 + +Count = 637 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708 +CT = B67E036C5A8374566105484DD4F0602293E34F91A2EC7F066C72B6B7B057E7751C14FA + +Count = 638 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 00010203040506070809 +CT = 35DFF5593925B34C35C834D3027A22ABC639A8922BF3E3BF1D737C7EC0826803AC5615 + +Count = 639 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A +CT = 455A9AC5FFF46D43D37556F7F2881BD25210293CE912C6B24FC80DCDEEEB590C82060B + +Count = 640 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B +CT = F268C004D35420FCAE7E94B9BDC2025B5263FBABE4CE7758FBBCB7D4F7E5001F21ED04 + +Count = 641 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C +CT = 80CB407ADCEB8B08046ED3BA74F0DB48AAD11F3AF0A90F8DD300DF940968359D92962F + +Count = 642 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D +CT = 7542F4D104B5C523A75D58D319B64409289BB784319F16F3B1AB9E5B1F58E04513C619 + +Count = 643 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E +CT = A01FDE847486CC31D806B1E5C6C353077D4A3EBBA005D6C18430291B1A3ACB6024759A + +Count = 644 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F +CT = 3644AE853CBAFBCCABE0E35CE2D20284F05000C72BBD36E5AA31B3F740A85E12D2400F + +Count = 645 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 579B88F0E150FDE938E7B8334613B9D8C1EB6179E17F2F961A32E6FC7FA08012CCB336 + +Count = 646 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = B99CFA470673E7B11F2145FB45D96980F24421FC94DCD76F65B841494DE00FCF14F7F0 + +Count = 647 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 3302EA6480D7EFBEEFFC5F1F1A0B54D7414C4490B2B3CAD190A11E5A0528D93EA1C4C7 + +Count = 648 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 418AE6B4795221E0F01DCFD87AF385A8E4B96F1F1812180ADBF0574274ABCD11EA70E6 + +Count = 649 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 8090EDD3919D337EFB95DADA715D24A95EBA7EDB259825BB0B545E20324AB0519AD5F5 + +Count = 650 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 577B6BC7CD35BC1BAD1AB5D13751C3DE8E74E52AFC83D159854EE442723322D0B9DA4C + +Count = 651 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = AC9572F9816D4A0E42798089A7200CADF69762227047910367ECFC207BEB70C974A2FD + +Count = 652 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 91460EE6B80720F621266F8AF9AB75A01723AA70F16EA6C3412BA6F0DF713EB6BF686A + +Count = 653 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 07C597D3760D23979D4A7AB77084A329A53EF97F59A55EA496B772CA2DE13B52F187DF + +Count = 654 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 69EF531194ED47C4920BBD6A0007D69749D791A2799D891B7CD880D460225B9A7F1D3A + +Count = 655 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = D7E1106B1FC3C5C525522E3E5CE936DFF79156721D0DA8F859424D586B27ADB97B061A + +Count = 656 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 9D5448A0FEFA3D6F0D031FE03DB17AC9BD823F83024B9E4B88975C5C198415A42567AB + +Count = 657 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 1B08C41877208F0CB317C026AF05CE55C9F0BB07677313981288D4690ABE038DFDDB0E + +Count = 658 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = D05FC2A3D00D366001E7DF89E0E596DD0F8FFCD93CB7059CBBBEC7D78B5A7D526AFEE3 + +Count = 659 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 4BA2D7A1C7FAC121AD7E9A411F554F430C5D8B0BF0B1D53875042152D49E2430B7B0B8 + +Count = 660 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = F67D6A419E45237596D3CE343E8BB107906372A5CE89A10920755F870936A242A95C12 + +Count = 661 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = +CT = A07DA477C44F42A76C6E5DD9FC1E251C8E2096DAC31167060AD40DF190E5CF3E1F8B2EC6 + +Count = 662 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 00 +CT = 2E093931B4742963DB512D99633C209B2BD99B979078AE115DBAA017223D4507ADE029E9 + +Count = 663 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 0001 +CT = B37F5AA385B3CC4BFA5F00F19F2F787B29ACEA335CC03821D89C781BA50D9994A734A125 + +Count = 664 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102 +CT = B22F68FCC38867408F7CB5CE832E75B0E0C65084BBEF522A167311D9A17537466DB7105E + +Count = 665 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 00010203 +CT = BD31D313960F8FC34EF1489AF614765BE05DDB77BDA9D8D886A13DC2AABB13D4A2485D87 + +Count = 666 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 0001020304 +CT = 57B418782022C4EFC6286B0DA00135D4D0DB5481ECC2D3FF85AB20514B9B59A6CBEF1911 + +Count = 667 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405 +CT = 3BF9C3E6C0F2F0E68E6541137A5D11A02059BDC839B1CD7FFC2AD5666DB7F4DB7E92D1D4 + +Count = 668 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 00010203040506 +CT = CD6BCF99375535AE650ABE8CBE87BE78B447A7C5968737C518FAE7C440D52BB21E805A9B + +Count = 669 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 0001020304050607 +CT = 4041C9D540608D5FBDF9CEF7CE412DC7294151CCC5C86B06BBFE9B3165938126398BF0E6 + +Count = 670 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708 +CT = B67E036C5A8374566105484DD4F0602293E34F0BCCA45665476F89A684D3F3992D50A626 + +Count = 671 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 00010203040506070809 +CT = 35DFF5593925B34C35C834D3027A22ABC639A828D3C56B76219C8411528C2B2C68A45502 + +Count = 672 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A +CT = 455A9AC5FFF46D43D37556F7F2881BD252102948B1198286F01DB31DC291C03DE6FEF76C + +Count = 673 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B +CT = F268C004D35420FCAE7E94B9BDC2025B5263FB5EF7831412BF78B58344F32542DDFC0F45 + +Count = 674 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C +CT = 80CB407ADCEB8B08046ED3BA74F0DB48AAD11FBD0A661891FC7A995B593A3C38AD8FAC73 + +Count = 675 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D +CT = 7542F4D104B5C523A75D58D319B64409289BB75A9DCF45B414AE6CC41A55820863E7E228 + +Count = 676 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E +CT = A01FDE847486CC31D806B1E5C6C353077D4A3E7165AD95AE5830A117617DAB77BA710832 + +Count = 677 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F +CT = 3644AE853CBAFBCCABE0E35CE2D20284F0500057FD54BFD88E895F5390ADAB6044734824 + +Count = 678 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 579B88F0E150FDE938E7B8334613B9D8C1EB61BE731C2A4037E9D7DC607B732A06A7532A + +Count = 679 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = B99CFA470673E7B11F2145FB45D96980F2442115DE71ADA11909E7DD1638911BD6E580C2 + +Count = 680 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 3302EA6480D7EFBEEFFC5F1F1A0B54D7414C44EC1A4DA94836BA246CBF693315ED640730 + +Count = 681 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 418AE6B4795221E0F01DCFD87AF385A8E4B96F536F5C2A36ED5B4DA9C167FF9A7862F21A + +Count = 682 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 8090EDD3919D337EFB95DADA715D24A95EBA7EC4B89E5B52F1CED2353004F5D099FA8427 + +Count = 683 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 577B6BC7CD35BC1BAD1AB5D13751C3DE8E74E5C5C0FAF15596918763BE3C88BBC193EF12 + +Count = 684 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = AC9572F9816D4A0E42798089A7200CADF69762D47D8E8247E022948555DFF821F63073BD + +Count = 685 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 91460EE6B80720F621266F8AF9AB75A01723AA0C1F469653FDC11341C3CA483E0B8F488A + +Count = 686 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 07C597D3760D23979D4A7AB77084A329A53EF9FA09FA691AD6DF7AFF7B3E2B365871372F + +Count = 687 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 69EF531194ED47C4920BBD6A0007D69749D7913507B73DF842CF054F977D9681632B6F65 + +Count = 688 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = D7E1106B1FC3C5C525522E3E5CE936DFF791564F901466ACE054D3BCCB0EBC2246703337 + +Count = 689 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 9D5448A0FEFA3D6F0D031FE03DB17AC9BD823F8110F92095166BFC93E337F4BE8B37AE3B + +Count = 690 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 1B08C41877208F0CB317C026AF05CE55C9F0BB2430C4BC65DB52D5DD49DD5F043998DA8B + +Count = 691 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = D05FC2A3D00D366001E7DF89E0E596DD0F8FFC0CC58451BA3CD544160CC1602DEE4C7235 + +Count = 692 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 4BA2D7A1C7FAC121AD7E9A411F554F430C5D8B5B36913DF23C6A9B964F59BA2AB71A30B7 + +Count = 693 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = F67D6A419E45237596D3CE343E8BB1079063725E3D92A02C5BA123C6DED878694D8A6921 + +Count = 694 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = +CT = A07DA477C44F42A76C6E5DD9FC1E251C8E2096DA39BA08B0A0941DAE83F1B2B100BE205712 + +Count = 695 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 00 +CT = 2E093931B4742963DB512D99633C209B2BD99B97479C329A27DCC59121C7A93DA8210B3A98 + +Count = 696 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 0001 +CT = B37F5AA385B3CC4BFA5F00F19F2F787B29ACEA339C92BD449EE71FB7E0B3F173E6F3E3A03E + +Count = 697 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102 +CT = B22F68FCC38867408F7CB5CE832E75B0E0C650842F572C9EC2F87C5E10A59884877B8EF0C1 + +Count = 698 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 00010203 +CT = BD31D313960F8FC34EF1489AF614765BE05DDB7716C5D2B273D551D8BCE4A9A7AC39267605 + +Count = 699 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 0001020304 +CT = 57B418782022C4EFC6286B0DA00135D4D0DB54810EF9969FF2210C3836846B94545AB1FDE3 + +Count = 700 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405 +CT = 3BF9C3E6C0F2F0E68E6541137A5D11A02059BDC8589FD48A915B750EC7408C18066DCE7591 + +Count = 701 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 00010203040506 +CT = CD6BCF99375535AE650ABE8CBE87BE78B447A7C5024FCCC9862B53E832CF428C2EF55EBB5E + +Count = 702 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 0001020304050607 +CT = 4041C9D540608D5FBDF9CEF7CE412DC7294151CC474BDC2CA36B02DC1695E80437B4322207 + +Count = 703 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708 +CT = B67E036C5A8374566105484DD4F0602293E34F0B01A3062ECFD9438B48A79B27F7DE9FF648 + +Count = 704 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 00010203040506070809 +CT = 35DFF5593925B34C35C834D3027A22ABC639A828CDB360E54D3C35FA4EFAAF42DAD6F61018 + +Count = 705 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A +CT = 455A9AC5FFF46D43D37556F7F2881BD2521029481837B4E59808CD99C22DF840B4AA8C7B90 + +Count = 706 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B +CT = F268C004D35420FCAE7E94B9BDC2025B5263FB5EE9B87800545CD85A6E870B8D8519F1E526 + +Count = 707 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C +CT = 80CB407ADCEB8B08046ED3BA74F0DB48AAD11FBD6CCD444C4CEFA641BB8C21359F0072C32C + +Count = 708 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D +CT = 7542F4D104B5C523A75D58D319B64409289BB75A1A966F6DC1096BBE3C545815C943E63E2F + +Count = 709 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E +CT = A01FDE847486CC31D806B1E5C6C353077D4A3E7142B37CC3CE698CDF1165A4B3660F1DED95 + +Count = 710 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F +CT = 3644AE853CBAFBCCABE0E35CE2D20284F050005791FD9BBEB7681A6384A423C04C32A1CB56 + +Count = 711 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 579B88F0E150FDE938E7B8334613B9D8C1EB61BE39BED247A2A639970791794F093FAD27FC + +Count = 712 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = B99CFA470673E7B11F2145FB45D96980F244211582F90994691DB330313F2D3D21A4A646D3 + +Count = 713 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 3302EA6480D7EFBEEFFC5F1F1A0B54D7414C44EC7C520A931DAC0073B5DB171EA2E5C83035 + +Count = 714 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 418AE6B4795221E0F01DCFD87AF385A8E4B96F53B73D0FD7AC353B567BD7A238739C3E5167 + +Count = 715 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 8090EDD3919D337EFB95DADA715D24A95EBA7EC4F2606AC6057017B2FA0780B55F09B9C812 + +Count = 716 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 577B6BC7CD35BC1BAD1AB5D13751C3DE8E74E5C5E76C660222B26898AD89ADF24ED1E152A0 + +Count = 717 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = AC9572F9816D4A0E42798089A7200CADF69762D49716F521E7FCD448F8DA960456E52CEF56 + +Count = 718 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 91460EE6B80720F621266F8AF9AB75A01723AA0C4F7FEF281A063C1DFDB5B4301D504C6097 + +Count = 719 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 07C597D3760D23979D4A7AB77084A329A53EF9FA66A9DB7224A7D03712D86505389D7A92F8 + +Count = 720 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 69EF531194ED47C4920BBD6A0007D69749D791357185A90751E99B088312EE4B88E8AF753C + +Count = 721 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = D7E1106B1FC3C5C525522E3E5CE936DFF791564FC39C5C7A44F86179ECD08A6B6ED2985AA6 + +Count = 722 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 9D5448A0FEFA3D6F0D031FE03DB17AC9BD823F81B1AA6D11B7F287F64808B5E8EA5F1A5CBE + +Count = 723 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 1B08C41877208F0CB317C026AF05CE55C9F0BB24EFF0C671974B54B73C255E161AD86A91CD + +Count = 724 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = D05FC2A3D00D366001E7DF89E0E596DD0F8FFC0C72B65EE521ACDCFBDF765EB31E705D4FAC + +Count = 725 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 4BA2D7A1C7FAC121AD7E9A411F554F430C5D8B5BBB08DAA8BFD73C31AEDF8571E410FD4A6E + +Count = 726 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = F67D6A419E45237596D3CE343E8BB1079063725EA0567CDD071409CF50DC64A00F0150557D + +Count = 727 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = +CT = A07DA477C44F42A76C6E5DD9FC1E251C8E2096DA395859EC0D12F7270EB7BF09EFA6E015B8D6 + +Count = 728 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 00 +CT = 2E093931B4742963DB512D99633C209B2BD99B9747C65401B45CDFC72BAEF74AF2566C03A889 + +Count = 729 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 0001 +CT = B37F5AA385B3CC4BFA5F00F19F2F787B29ACEA339CC61D9416DF7C7EFF2C204D977E65D8D744 + +Count = 730 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102 +CT = B22F68FCC38867408F7CB5CE832E75B0E0C650842F56C26A92EEB7C36E24BE5F38D64C9DCB42 + +Count = 731 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 00010203 +CT = BD31D313960F8FC34EF1489AF614765BE05DDB771652E33614472649298321EB26FBF73129E2 + +Count = 732 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 0001020304 +CT = 57B418782022C4EFC6286B0DA00135D4D0DB54810E720005D98BCEA7CFD15F3485C39EBFA305 + +Count = 733 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405 +CT = 3BF9C3E6C0F2F0E68E6541137A5D11A02059BDC8585DD4AB33C95AA2FD0A35A31016EB886712 + +Count = 734 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 00010203040506 +CT = CD6BCF99375535AE650ABE8CBE87BE78B447A7C50241EDCB41019BE37C110757315CF5387EE3 + +Count = 735 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 0001020304050607 +CT = 4041C9D540608D5FBDF9CEF7CE412DC7294151CC4741FE24E47CC4CDA48D724277C0369783BB + +Count = 736 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708 +CT = B67E036C5A8374566105484DD4F0602293E34F0B01ADFAE0384B5AC703CBCCCBB51392AF28F9 + +Count = 737 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 00010203040506070809 +CT = 35DFF5593925B34C35C834D3027A22ABC639A828CD82583A3AA4A47F544F148CDFBCA813EB8D + +Count = 738 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A +CT = 455A9AC5FFF46D43D37556F7F2881BD25210294818E2170C14FE3CD3728D9658C86F9FAB2F0B + +Count = 739 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B +CT = F268C004D35420FCAE7E94B9BDC2025B5263FB5EE997112D0E1EF31CBD3D5EF4DAE39EB414BF + +Count = 740 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C +CT = 80CB407ADCEB8B08046ED3BA74F0DB48AAD11FBD6CB36427C63394B8399DEC1EB36DAC986603 + +Count = 741 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D +CT = 7542F4D104B5C523A75D58D319B64409289BB75A1A263E673F728FA5F3884D3316D14CF1C429 + +Count = 742 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E +CT = A01FDE847486CC31D806B1E5C6C353077D4A3E7142CCB0290CFEE10225A7F9F8F46C39987494 + +Count = 743 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F +CT = 3644AE853CBAFBCCABE0E35CE2D20284F0500057913D22CDF8780BB5EEA8B4FE19038FF43354 + +Count = 744 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 579B88F0E150FDE938E7B8334613B9D8C1EB61BE39DF6948A98E2F0CE0C1803123F16206500D + +Count = 745 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = B99CFA470673E7B11F2145FB45D96980F2442115828D098877D91CFAB6C8BEEB6EABCA508D6E + +Count = 746 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 3302EA6480D7EFBEEFFC5F1F1A0B54D7414C44EC7C6CD959C608B40BBA4D7FBD7C47E1A2A911 + +Count = 747 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 418AE6B4795221E0F01DCFD87AF385A8E4B96F53B74A6C720CC6A0BA7CDB79A71E87A7AAD6A9 + +Count = 748 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 8090EDD3919D337EFB95DADA715D24A95EBA7EC4F2DB67599117B6B7B93E3A5452827243490D + +Count = 749 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 577B6BC7CD35BC1BAD1AB5D13751C3DE8E74E5C5E7CA19C4B51F086088B763776C9CE08DDEED + +Count = 750 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = AC9572F9816D4A0E42798089A7200CADF69762D497A543F559896B7698B1C67FDC1AC846D123 + +Count = 751 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 91460EE6B80720F621266F8AF9AB75A01723AA0C4FBBA6A1CCFFF41EF3CADE655E1C284F5214 + +Count = 752 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 07C597D3760D23979D4A7AB77084A329A53EF9FA66B07329346B0E1FB9438EA78C532D23DD6F + +Count = 753 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 69EF531194ED47C4920BBD6A0007D69749D7913571141AF73D7AA05D3B5FD80B6A9D8F4E7224 + +Count = 754 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = D7E1106B1FC3C5C525522E3E5CE936DFF791564FC3D9DB68C69B465CA277B573F46E259F4F68 + +Count = 755 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 9D5448A0FEFA3D6F0D031FE03DB17AC9BD823F81B1BA3FCF436D964AA467273E040409371836 + +Count = 756 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 1B08C41877208F0CB317C026AF05CE55C9F0BB24EFCAD24F3B1E1BB87EF21799A43F79829E98 + +Count = 757 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = D05FC2A3D00D366001E7DF89E0E596DD0F8FFC0C72E53775CF28EE480DFC2961083269E19150 + +Count = 758 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 4BA2D7A1C7FAC121AD7E9A411F554F430C5D8B5BBBEFB5B477482B0785372C27CB4E6946DE66 + +Count = 759 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = F67D6A419E45237596D3CE343E8BB1079063725EA003927E890727CEE4F72C1AB721791B8368 + +Count = 760 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = +CT = A07DA477C44F42A76C6E5DD9FC1E251C8E2096DA3958CA26A041C653BEDD71F085B7ADF329EF13 + +Count = 761 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 00 +CT = 2E093931B4742963DB512D99633C209B2BD99B9747C6E6A03D7FC45B15B7BE38FCC77B441211D7 + +Count = 762 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 0001 +CT = B37F5AA385B3CC4BFA5F00F19F2F787B29ACEA339CC6BAED5A2E4845558E7BD9BDB216F12EF993 + +Count = 763 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102 +CT = B22F68FCC38867408F7CB5CE832E75B0E0C650842F56483CC18149059527AC6527DABE78BF3AEE + +Count = 764 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 00010203 +CT = BD31D313960F8FC34EF1489AF614765BE05DDB771652CDDB1A724F4380D06AB2C4E5C9A94F1221 + +Count = 765 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 0001020304 +CT = 57B418782022C4EFC6286B0DA00135D4D0DB54810E723B7E4FA1BA3B62942B1E3082388874CD2C + +Count = 766 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405 +CT = 3BF9C3E6C0F2F0E68E6541137A5D11A02059BDC8585D56F808B5B34A359D2DA7A5A87E59D07FAD + +Count = 767 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 00010203040506 +CT = CD6BCF99375535AE650ABE8CBE87BE78B447A7C5024129E76A80CDF50C46FBB9805CA8B5D87AD3 + +Count = 768 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 0001020304050607 +CT = 4041C9D540608D5FBDF9CEF7CE412DC7294151CC47416834EC7C366294CB25819F7F0DC6779D96 + +Count = 769 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708 +CT = B67E036C5A8374566105484DD4F0602293E34F0B01ADDFFF006F7BBEC0E894127EBE7B70D2FE5E + +Count = 770 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 00010203040506070809 +CT = 35DFF5593925B34C35C834D3027A22ABC639A828CD82C50371BC818838BEE470AC6E6F4ADFE581 + +Count = 771 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A +CT = 455A9AC5FFF46D43D37556F7F2881BD25210294818E2EFD1A76BEEC0F05EB613E0A655C2E9A793 + +Count = 772 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B +CT = F268C004D35420FCAE7E94B9BDC2025B5263FB5EE9978D3BFA70D06AEB0D2E44E718E3C6A64547 + +Count = 773 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C +CT = 80CB407ADCEB8B08046ED3BA74F0DB48AAD11FBD6CB318262A399E58BB323A69D3389D20511870 + +Count = 774 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D +CT = 7542F4D104B5C523A75D58D319B64409289BB75A1A263E7E37E4CAA611F3B1B0BEFA3070C04A4A + +Count = 775 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E +CT = A01FDE847486CC31D806B1E5C6C353077D4A3E7142CCAA6EFC1C3ADE28AE221FC11A37D45C086E + +Count = 776 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F +CT = 3644AE853CBAFBCCABE0E35CE2D20284F0500057913D6D2CF18C14405C726717A7C14064084BED + +Count = 777 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 579B88F0E150FDE938E7B8334613B9D8C1EB61BE39DFFAE0E8DA9A03D7022597B868004A903CDB + +Count = 778 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = B99CFA470673E7B11F2145FB45D96980F2442115828D2A4575CEF258D8B3F2FF5E7690EC2BBE21 + +Count = 779 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 3302EA6480D7EFBEEFFC5F1F1A0B54D7414C44EC7C6CC6B26AEA88B04239977ED9D2442CA56559 + +Count = 780 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 418AE6B4795221E0F01DCFD87AF385A8E4B96F53B74A7B82FA0826D948773E39F9151D6B5F31D8 + +Count = 781 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 8090EDD3919D337EFB95DADA715D24A95EBA7EC4F2DB140628139062CFE478C51C90EEB4D41BF4 + +Count = 782 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 577B6BC7CD35BC1BAD1AB5D13751C3DE8E74E5C5E7CA24AAA53A45D2FAA01899987379CA74FB71 + +Count = 783 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = AC9572F9816D4A0E42798089A7200CADF69762D497A5CE7B6A955D5E8A6F5FBB207FADAD52CFD9 + +Count = 784 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 91460EE6B80720F621266F8AF9AB75A01723AA0C4FBBBDE3BB1C86F47FD33BEDD7482C47F0C548 + +Count = 785 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 07C597D3760D23979D4A7AB77084A329A53EF9FA66B0AD85C05C810C26B55CAFAE460919417D9A + +Count = 786 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 69EF531194ED47C4920BBD6A0007D69749D7913571146F5C89A84824BB44D4D48C62AC35182B9A + +Count = 787 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = D7E1106B1FC3C5C525522E3E5CE936DFF791564FC3D95689A97CDD265D01D1F82C246D1EF95998 + +Count = 788 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 9D5448A0FEFA3D6F0D031FE03DB17AC9BD823F81B1BABE17B804F13D968703F5AB4A28888DB9C6 + +Count = 789 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 1B08C41877208F0CB317C026AF05CE55C9F0BB24EFCA6545AF22060204AC144137970E5947104C + +Count = 790 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = D05FC2A3D00D366001E7DF89E0E596DD0F8FFC0C72E57EFF206588A2037A8405C76D675CEE65B7 + +Count = 791 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 4BA2D7A1C7FAC121AD7E9A411F554F430C5D8B5BBBEF9E472F56716253A68015193347DB781E51 + +Count = 792 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = F67D6A419E45237596D3CE343E8BB1079063725EA003FCF432D8F59DA6B80EBE118FD98D07312E + +Count = 793 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = +CT = A07DA477C44F42A76C6E5DD9FC1E251C8E2096DA3958CAEABBC44DE4FA34C51BC4285468DF064513 + +Count = 794 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 00 +CT = 2E093931B4742963DB512D99633C209B2BD99B9747C6E67BAB3EA4F5A46343237136CAF24B21DC01 + +Count = 795 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 0001 +CT = B37F5AA385B3CC4BFA5F00F19F2F787B29ACEA339CC6BA14C4D2926E395FEBE8161C0F245BC2FBBA + +Count = 796 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102 +CT = B22F68FCC38867408F7CB5CE832E75B0E0C650842F56485E0B424AAC0BA77BECBF7BBA6074B31952 + +Count = 797 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 00010203 +CT = BD31D313960F8FC34EF1489AF614765BE05DDB771652CDC1B60CD798BF8897E3A2908466B1AEBD1C + +Count = 798 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 0001020304 +CT = 57B418782022C4EFC6286B0DA00135D4D0DB54810E723B72C73C6C0C6ACA89EEB613E8AB9024713F + +Count = 799 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405 +CT = 3BF9C3E6C0F2F0E68E6541137A5D11A02059BDC8585D566D166EBF7A481C84F7E091965F15379E39 + +Count = 800 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 00010203040506 +CT = CD6BCF99375535AE650ABE8CBE87BE78B447A7C50241298C552CCD030EE3ECF2183029FFBC98669C + +Count = 801 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 0001020304050607 +CT = 4041C9D540608D5FBDF9CEF7CE412DC7294151CC474168F5D3A6074AD7EA64EFC3F05258D1A7AF51 + +Count = 802 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708 +CT = B67E036C5A8374566105484DD4F0602293E34F0B01ADDFA8F3E810B6332F19D383FED36290473383 + +Count = 803 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 00010203040506070809 +CT = 35DFF5593925B34C35C834D3027A22ABC639A828CD82C59F42939946C54169DDE53AA690E476FFD4 + +Count = 804 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A +CT = 455A9AC5FFF46D43D37556F7F2881BD25210294818E2EF4F19B8E919EE835451EC22DDDBAED41145 + +Count = 805 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B +CT = F268C004D35420FCAE7E94B9BDC2025B5263FB5EE9978D2E68850E011AA9AC133A6A68CEC8B921C0 + +Count = 806 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C +CT = 80CB407ADCEB8B08046ED3BA74F0DB48AAD11FBD6CB31873E834C08E0BDC2DBC1759EF11451AE79F + +Count = 807 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D +CT = 7542F4D104B5C523A75D58D319B64409289BB75A1A263EFE88A3CDA63D12057C94577080B22AE71B + +Count = 808 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E +CT = A01FDE847486CC31D806B1E5C6C353077D4A3E7142CCAA901100839CD2AECE077BE4CB49A7BA8C85 + +Count = 809 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F +CT = 3644AE853CBAFBCCABE0E35CE2D20284F0500057913D6DBEE595720559E6F94096AD5B5A9E9B45EC + +Count = 810 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 579B88F0E150FDE938E7B8334613B9D8C1EB61BE39DFFAA11C622A6B81C8E5D4FCAA56A83640BE9F + +Count = 811 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = B99CFA470673E7B11F2145FB45D96980F2442115828D2A428EAE2977E577B38E40D5C3D4CD6EF57A + +Count = 812 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 3302EA6480D7EFBEEFFC5F1F1A0B54D7414C44EC7C6CC6AD0D50437CC3D85F4847C4DBECDE292B72 + +Count = 813 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 418AE6B4795221E0F01DCFD87AF385A8E4B96F53B74A7B8FE4521284015C9D63BA94AD1A4826B131 + +Count = 814 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 8090EDD3919D337EFB95DADA715D24A95EBA7EC4F2DB14A2812D211ADDEE92BA9A4008A35F7DAC0B + +Count = 815 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 577B6BC7CD35BC1BAD1AB5D13751C3DE8E74E5C5E7CA24A1AC88D20DEF25C8DE0738CFF4C50476B6 + +Count = 816 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = AC9572F9816D4A0E42798089A7200CADF69762D497A5CE462F0EC47E965053E4C1AE4E5E40B7FA52 + +Count = 817 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 91460EE6B80720F621266F8AF9AB75A01723AA0C4FBBBD71BBD666C8237766855830BA4040844C7F + +Count = 818 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 07C597D3760D23979D4A7AB77084A329A53EF9FA66B0ADB14455C3271660331AD84AE3B9B61C0025 + +Count = 819 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 69EF531194ED47C4920BBD6A0007D69749D7913571146F9D6FACB7D733B57AF8B1CE4CE234091C73 + +Count = 820 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = D7E1106B1FC3C5C525522E3E5CE936DFF791564FC3D9565779ACBA506602B205B679D944907AC085 + +Count = 821 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 9D5448A0FEFA3D6F0D031FE03DB17AC9BD823F81B1BABE970C3B1E034F84D1D9A3155DE83102134D + +Count = 822 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 1B08C41877208F0CB317C026AF05CE55C9F0BB24EFCA65BC1BF2E1E335DD70C88C90D239BF54316F + +Count = 823 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = D05FC2A3D00D366001E7DF89E0E596DD0F8FFC0C72E57E9DA778FF6C5DB02C3CDAA3E6D734A39894 + +Count = 824 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 4BA2D7A1C7FAC121AD7E9A411F554F430C5D8B5BBBEF9E36B3B1F7CB2AA779D018BC670482E67D97 + +Count = 825 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = F67D6A419E45237596D3CE343E8BB1079063725EA003FCA57A0888A1D9513F40254C477B376FE8D6 + +Count = 826 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = +CT = A07DA477C44F42A76C6E5DD9FC1E251C8E2096DA3958CAEAFCBABC5864514EA6A6AEAB8778099D0C7A + +Count = 827 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 00 +CT = 2E093931B4742963DB512D99633C209B2BD99B9747C6E67B0B05C521706E9149FCFBB93FF0998CC705 + +Count = 828 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 0001 +CT = B37F5AA385B3CC4BFA5F00F19F2F787B29ACEA339CC6BA147716DA8071173977AB4A9B96BA6FE0EE83 + +Count = 829 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102 +CT = B22F68FCC38867408F7CB5CE832E75B0E0C650842F56485E33E3D1815CC1DDE60BA5D97AB7487504F1 + +Count = 830 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 00010203 +CT = BD31D313960F8FC34EF1489AF614765BE05DDB771652CDC19142845AA7C52684EE8393618CF80DCB8B + +Count = 831 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 0001020304 +CT = 57B418782022C4EFC6286B0DA00135D4D0DB54810E723B721D6F6A81B40C6240482E952019352AC9D7 + +Count = 832 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405 +CT = 3BF9C3E6C0F2F0E68E6541137A5D11A02059BDC8585D566D8124CD59A2AF5903D192C37866E9FB3BD1 + +Count = 833 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 00010203040506 +CT = CD6BCF99375535AE650ABE8CBE87BE78B447A7C50241298CD196F15F3BC08CA3113890DC47FFE5B8F4 + +Count = 834 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 0001020304050607 +CT = 4041C9D540608D5FBDF9CEF7CE412DC7294151CC474168F56053165ED14E966C695F87139EC1D7406C + +Count = 835 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708 +CT = B67E036C5A8374566105484DD4F0602293E34F0B01ADDFA80792C1F4840207C03674BC4C1A02402B8B + +Count = 836 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 00010203040506070809 +CT = 35DFF5593925B34C35C834D3027A22ABC639A828CD82C59FCCDC5BDB14CEEB57B548D670A58EA3DDE0 + +Count = 837 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A +CT = 455A9AC5FFF46D43D37556F7F2881BD25210294818E2EF4F36241C59A4003DC0216F4500C6BBD3EDDB + +Count = 838 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B +CT = F268C004D35420FCAE7E94B9BDC2025B5263FB5EE9978D2E202AB7057A5FEF3FCEC3A13B8DBDE00B69 + +Count = 839 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C +CT = 80CB407ADCEB8B08046ED3BA74F0DB48AAD11FBD6CB31873DE4EC8F883A3113F5FF26F5C95A6961FD6 + +Count = 840 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D +CT = 7542F4D104B5C523A75D58D319B64409289BB75A1A263EFE376A42FEE61F0A711E7F9B04E763FFE1D4 + +Count = 841 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E +CT = A01FDE847486CC31D806B1E5C6C353077D4A3E7142CCAA90D3F55CFBD0262E7E96A7EF8AE51B303E13 + +Count = 842 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F +CT = 3644AE853CBAFBCCABE0E35CE2D20284F0500057913D6DBE913B8A9B70A8C233F1362B6A36C8F5ABE5 + +Count = 843 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 579B88F0E150FDE938E7B8334613B9D8C1EB61BE39DFFAA1D0B7C3DD84B15E0E72357A8328F4883C75 + +Count = 844 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = B99CFA470673E7B11F2145FB45D96980F2442115828D2A4283089FE07062E362950523EF033FEBABCE + +Count = 845 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 3302EA6480D7EFBEEFFC5F1F1A0B54D7414C44EC7C6CC6ADAB2777AAB317AF18BBAAD31612FBD0C8F5 + +Count = 846 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 418AE6B4795221E0F01DCFD87AF385A8E4B96F53B74A7B8F409B6AACF8FAA9B66BDCFA4AF5E2674E31 + +Count = 847 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 8090EDD3919D337EFB95DADA715D24A95EBA7EC4F2DB14A2C041B04C6D5BC7D5AB6E804174B3A25556 + +Count = 848 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 577B6BC7CD35BC1BAD1AB5D13751C3DE8E74E5C5E7CA24A1C85E241E013E001AADACFF3504CAB0180F + +Count = 849 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = AC9572F9816D4A0E42798089A7200CADF69762D497A5CE4611755616141C356192F53A4A27AB4E7FE3 + +Count = 850 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 91460EE6B80720F621266F8AF9AB75A01723AA0C4FBBBD71E42DA04EDB9A4AF741A89F228A95FC351A + +Count = 851 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 07C597D3760D23979D4A7AB77084A329A53EF9FA66B0ADB1F051DC72827144647E45655CFBDAB1AE2E + +Count = 852 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 69EF531194ED47C4920BBD6A0007D69749D7913571146F9D40088FC71E529ACEBF998AC61CAF01B249 + +Count = 853 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = D7E1106B1FC3C5C525522E3E5CE936DFF791564FC3D9565771E3E71470E77C0AA2D08229F6C4F93FA3 + +Count = 854 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 9D5448A0FEFA3D6F0D031FE03DB17AC9BD823F81B1BABE97B0A907148966E3BBAE011CA4D6489918D5 + +Count = 855 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 1B08C41877208F0CB317C026AF05CE55C9F0BB24EFCA65BC29378371D668CC16B381DCB25F49E7E913 + +Count = 856 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = D05FC2A3D00D366001E7DF89E0E596DD0F8FFC0C72E57E9D2C20B9E2171BDFFEBCB54972B5F8047208 + +Count = 857 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 4BA2D7A1C7FAC121AD7E9A411F554F430C5D8B5BBBEF9E36DD734D491DFAADEB6F3F8B5216091261B2 + +Count = 858 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = F67D6A419E45237596D3CE343E8BB1079063725EA003FCA57A427295580EE63C8818FC304382794BA9 + +Count = 859 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = +CT = A07DA477C44F42A76C6E5DD9FC1E251C8E2096DA3958CAEAFCCB4BB4A7018DD048B0032DDCE99C68744F + +Count = 860 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 00 +CT = 2E093931B4742963DB512D99633C209B2BD99B9747C6E67B0B0959244BDDD3061E51D173F4FC4DE72121 + +Count = 861 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 0001 +CT = B37F5AA385B3CC4BFA5F00F19F2F787B29ACEA339CC6BA14778162EF311531AD90E9CCFCCA2A3B727CA0 + +Count = 862 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102 +CT = B22F68FCC38867408F7CB5CE832E75B0E0C650842F56485E334BD7D7AB815C7B65875C79D65889EC3F4E + +Count = 863 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 00010203 +CT = BD31D313960F8FC34EF1489AF614765BE05DDB771652CDC191C4EF117E66C15FCA775FF82BD3C153D92A + +Count = 864 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 0001020304 +CT = 57B418782022C4EFC6286B0DA00135D4D0DB54810E723B721DD42A1911D357016B17214C2999D5924C6F + +Count = 865 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405 +CT = 3BF9C3E6C0F2F0E68E6541137A5D11A02059BDC8585D566D81E16EB2BCDF591E47F9129BC6970FDC416D + +Count = 866 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 00010203040506 +CT = CD6BCF99375535AE650ABE8CBE87BE78B447A7C50241298CD10936B09B3A4733338F159738B4B4F9CC7C + +Count = 867 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 0001020304050607 +CT = 4041C9D540608D5FBDF9CEF7CE412DC7294151CC474168F5605A590CBCD6195E6252D271FA875DA4E6E7 + +Count = 868 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708 +CT = B67E036C5A8374566105484DD4F0602293E34F0B01ADDFA8071CB514E73770D78A06E7C015869E811BA3 + +Count = 869 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 00010203040506070809 +CT = 35DFF5593925B34C35C834D3027A22ABC639A828CD82C59FCC7A65A7B8FD819EAF36B019BF65403863BC + +Count = 870 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A +CT = 455A9AC5FFF46D43D37556F7F2881BD25210294818E2EF4F36E976CEB3FB9D170BCF754FF687951A78C1 + +Count = 871 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B +CT = F268C004D35420FCAE7E94B9BDC2025B5263FB5EE9978D2E20EDC1859ADA6A4E05915EF0C896F530E15B + +Count = 872 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C +CT = 80CB407ADCEB8B08046ED3BA74F0DB48AAD11FBD6CB31873DEAC86B71625237C26777BFA8A6167EC79EA + +Count = 873 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D +CT = 7542F4D104B5C523A75D58D319B64409289BB75A1A263EFE377BF5893B9A412FBC84D75336B903591837 + +Count = 874 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E +CT = A01FDE847486CC31D806B1E5C6C353077D4A3E7142CCAA90D3166F209EB1BDECD28962943F7C3E51BA04 + +Count = 875 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F +CT = 3644AE853CBAFBCCABE0E35CE2D20284F0500057913D6DBE91606010544693FEB12A3EE7A6907B58C216 + +Count = 876 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 579B88F0E150FDE938E7B8334613B9D8C1EB61BE39DFFAA1D0D6406B813F933ED2EE0286995DA5CA9059 + +Count = 877 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = B99CFA470673E7B11F2145FB45D96980F2442115828D2A42836DF573E77455E545B961BD34C087C8671F + +Count = 878 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 3302EA6480D7EFBEEFFC5F1F1A0B54D7414C44EC7C6CC6ADABDE8C0E46F9C411A965F8F6F3736AAFD768 + +Count = 879 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 418AE6B4795221E0F01DCFD87AF385A8E4B96F53B74A7B8F40EC4958EB87B7D5A7C4EFE0630FDD1B1387 + +Count = 880 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 8090EDD3919D337EFB95DADA715D24A95EBA7EC4F2DB14A2C0F93F62806E1BE2233C73D5F93757F56AE2 + +Count = 881 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 577B6BC7CD35BC1BAD1AB5D13751C3DE8E74E5C5E7CA24A1C8BA6DB6F7B4C9AA6970199F8730EB9C4AD6 + +Count = 882 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = AC9572F9816D4A0E42798089A7200CADF69762D497A5CE4611E108BE2ED94CD451523532F6139B6E252B + +Count = 883 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 91460EE6B80720F621266F8AF9AB75A01723AA0C4FBBBD71E47A9A1B2C791A84AE24E4AE27EF952D82EB + +Count = 884 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 07C597D3760D23979D4A7AB77084A329A53EF9FA66B0ADB1F038C1FAF700179B7EB495C24FF44F3C6A86 + +Count = 885 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 69EF531194ED47C4920BBD6A0007D69749D7913571146F9D40E590E9C873207DBFCBF2303739D5594772 + +Count = 886 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = D7E1106B1FC3C5C525522E3E5CE936DFF791564FC3D9565771FEBD3509233C66CF046639347335290977 + +Count = 887 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 9D5448A0FEFA3D6F0D031FE03DB17AC9BD823F81B1BABE97B07AE8B24C3D015B25DCE8154358809EB56F + +Count = 888 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 1B08C41877208F0CB317C026AF05CE55C9F0BB24EFCA65BC29EB166E485328CB93FEA133307E8EE29594 + +Count = 889 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = D05FC2A3D00D366001E7DF89E0E596DD0F8FFC0C72E57E9D2CADB9C180E3F22A82C65B2B8F48EAC1BF7B + +Count = 890 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 4BA2D7A1C7FAC121AD7E9A411F554F430C5D8B5BBBEF9E36DD76E89B7F08A94A780C554050D0AD4796B3 + +Count = 891 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = F67D6A419E45237596D3CE343E8BB1079063725EA003FCA57A0C0771AF13BEF4226F93D88120B0912744 + +Count = 892 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = +CT = A07DA477C44F42A76C6E5DD9FC1E251C8E2096DA3958CAEAFCCB5ECA99D771E142C59A49DA9DFE5F22F2B7 + +Count = 893 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 00 +CT = 2E093931B4742963DB512D99633C209B2BD99B9747C6E67B0B098EF93F77CCDC9726E02D48982FA66A603D + +Count = 894 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 0001 +CT = B37F5AA385B3CC4BFA5F00F19F2F787B29ACEA339CC6BA147781EB73D224C1AB821EEA768A6E318501B221 + +Count = 895 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102 +CT = B22F68FCC38867408F7CB5CE832E75B0E0C650842F56485E334BBC3009DB6B5112618945B5ADA4CF2C7CD4 + +Count = 896 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 00010203 +CT = BD31D313960F8FC34EF1489AF614765BE05DDB771652CDC191C42E95FDFB8D7955C81A7F5E8655BBB55D0E + +Count = 897 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 0001020304 +CT = 57B418782022C4EFC6286B0DA00135D4D0DB54810E723B721DD4B699CAE9072CA7F6C6A4654DB207FB0BF2 + +Count = 898 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405 +CT = 3BF9C3E6C0F2F0E68E6541137A5D11A02059BDC8585D566D81E1DD2CFF01C7AB950FC49398AE6B5A8119AE + +Count = 899 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 00010203040506 +CT = CD6BCF99375535AE650ABE8CBE87BE78B447A7C50241298CD109E12C33F320B6A26F216360B0F0D2C6A68E + +Count = 900 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 0001020304050607 +CT = 4041C9D540608D5FBDF9CEF7CE412DC7294151CC474168F5605A56B4D63FE0F8D6611AE3379B9B0A230A95 + +Count = 901 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708 +CT = B67E036C5A8374566105484DD4F0602293E34F0B01ADDFA8071CF08F2C1D39799FE96A600B47E0057E0AEC + +Count = 902 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 00010203040506070809 +CT = 35DFF5593925B34C35C834D3027A22ABC639A828CD82C59FCC7AD60BDE318ED428FC3E392EA47A6C038AE5 + +Count = 903 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A +CT = 455A9AC5FFF46D43D37556F7F2881BD25210294818E2EF4F36E912B7FC27B0295E69D2018983AA52EAE759 + +Count = 904 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B +CT = F268C004D35420FCAE7E94B9BDC2025B5263FB5EE9978D2E20EDC893DAAF3BF1FF5EC68A4DA283031ABA02 + +Count = 905 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C +CT = 80CB407ADCEB8B08046ED3BA74F0DB48AAD11FBD6CB31873DEACE0E339F3CF8D40F66807E9458CC4EE2881 + +Count = 906 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D +CT = 7542F4D104B5C523A75D58D319B64409289BB75A1A263EFE377B8C0E17F8ADAB4DE0C62DABAEEA477F5C00 + +Count = 907 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E +CT = A01FDE847486CC31D806B1E5C6C353077D4A3E7142CCAA90D3164C525B35FFC0DFF076F370CC3BEFA78DEC + +Count = 908 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F +CT = 3644AE853CBAFBCCABE0E35CE2D20284F0500057913D6DBE9160D7EC61603FCC646D5631B167F40C8358A5 + +Count = 909 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 579B88F0E150FDE938E7B8334613B9D8C1EB61BE39DFFAA1D0D623CB1BCB9B08D63D703634F25DE46D4C68 + +Count = 910 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = B99CFA470673E7B11F2145FB45D96980F2442115828D2A42836D72B1D13F9430AA494DC36EA1C80A525758 + +Count = 911 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 3302EA6480D7EFBEEFFC5F1F1A0B54D7414C44EC7C6CC6ADABDEC0C4700B25B269385A43FC140C06629513 + +Count = 912 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 418AE6B4795221E0F01DCFD87AF385A8E4B96F53B74A7B8F40EC375E655CB5B8355EBE7106473832CB3BD1 + +Count = 913 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 8090EDD3919D337EFB95DADA715D24A95EBA7EC4F2DB14A2C0F9DF5F0020BC91B37D009A9DE59B413675B4 + +Count = 914 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 577B6BC7CD35BC1BAD1AB5D13751C3DE8E74E5C5E7CA24A1C8BA7604FD8C868600CDEF4D934615B7C28270 + +Count = 915 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = AC9572F9816D4A0E42798089A7200CADF69762D497A5CE4611E1585BC1DA3DDFFBB5C5C569B1EAC20F039F + +Count = 916 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 91460EE6B80720F621266F8AF9AB75A01723AA0C4FBBBD71E47ADE9F9C743F96394D00D9E9DBD301F862FE + +Count = 917 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 07C597D3760D23979D4A7AB77084A329A53EF9FA66B0ADB1F038707A375CC974870A929FB5E541775E743F + +Count = 918 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 69EF531194ED47C4920BBD6A0007D69749D7913571146F9D40E5DAD54CFFC171C3A842BFC8A0CF6B6D2242 + +Count = 919 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = D7E1106B1FC3C5C525522E3E5CE936DFF791564FC3D9565771FE918F8138448CCD3DCBFAB03471895E017E + +Count = 920 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 9D5448A0FEFA3D6F0D031FE03DB17AC9BD823F81B1BABE97B07ADA7822395476352F56C268E1C5E03FD98F + +Count = 921 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 1B08C41877208F0CB317C026AF05CE55C9F0BB24EFCA65BC29EBF63866DC069BCBFF7430A5C9BB9FC89108 + +Count = 922 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = D05FC2A3D00D366001E7DF89E0E596DD0F8FFC0C72E57E9D2CADCF8BC953FCCAD86E0890D3E97B5E5DD223 + +Count = 923 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 4BA2D7A1C7FAC121AD7E9A411F554F430C5D8B5BBBEF9E36DD7695B78ACDEEE6270FA220471B527F5ADB6D + +Count = 924 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = F67D6A419E45237596D3CE343E8BB1079063725EA003FCA57A0C117C69C703B3D40545A14D682867C5444B + +Count = 925 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = +CT = A07DA477C44F42A76C6E5DD9FC1E251C8E2096DA3958CAEAFCCB5E9AF9ACB3DE9A908FD2729AB2D8B94317CB + +Count = 926 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 00 +CT = 2E093931B4742963DB512D99633C209B2BD99B9747C6E67B0B098E817D2137C01D4DFA04F3F555D7F7F450A2 + +Count = 927 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 0001 +CT = B37F5AA385B3CC4BFA5F00F19F2F787B29ACEA339CC6BA147781EBC9C8022851425AC924658B9D7811302686 + +Count = 928 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102 +CT = B22F68FCC38867408F7CB5CE832E75B0E0C650842F56485E334BBC8497B670EF51F7B9F939D8379D27B14B76 + +Count = 929 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 00010203 +CT = BD31D313960F8FC34EF1489AF614765BE05DDB771652CDC191C42EAC8C8C63E117EEEEF0935B4E945E224B53 + +Count = 930 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 0001020304 +CT = 57B418782022C4EFC6286B0DA00135D4D0DB54810E723B721DD4B67FE576C5B6C076CB590B276EE90CEABD02 + +Count = 931 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405 +CT = 3BF9C3E6C0F2F0E68E6541137A5D11A02059BDC8585D566D81E1DD9BF49BADBE9E25F5ECDDFA0A986BE8B193 + +Count = 932 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 00010203040506 +CT = CD6BCF99375535AE650ABE8CBE87BE78B447A7C50241298CD109E106AF6CBA5081214F5DB03D9C2E60184899 + +Count = 933 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 0001020304050607 +CT = 4041C9D540608D5FBDF9CEF7CE412DC7294151CC474168F5605A5607AD25957A7C0FCC18F3A71B309B744225 + +Count = 934 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708 +CT = B67E036C5A8374566105484DD4F0602293E34F0B01ADDFA8071CF069E657967F405CF1B1FA8FF84461EBD460 + +Count = 935 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 00010203040506070809 +CT = 35DFF5593925B34C35C834D3027A22ABC639A828CD82C59FCC7AD674DB47688EAEDBB88A64EC00281226F8F9 + +Count = 936 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A +CT = 455A9AC5FFF46D43D37556F7F2881BD25210294818E2EF4F36E9128EFC821C1F63770F609B8FF0C8653D0EC7 + +Count = 937 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B +CT = F268C004D35420FCAE7E94B9BDC2025B5263FB5EE9978D2E20EDC8EF7CEF22BF734EDBA22D205CAA21303A82 + +Count = 938 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C +CT = 80CB407ADCEB8B08046ED3BA74F0DB48AAD11FBD6CB31873DEACE01980251AA75C8DE9797AE28F0910142986 + +Count = 939 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D +CT = 7542F4D104B5C523A75D58D319B64409289BB75A1A263EFE377B8C500327D6553859F0311C706D384615A4D0 + +Count = 940 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E +CT = A01FDE847486CC31D806B1E5C6C353077D4A3E7142CCAA90D3164C885BD7EB1DF45D1EA9DEDFCFE6CD1B193C + +Count = 941 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F +CT = 3644AE853CBAFBCCABE0E35CE2D20284F0500057913D6DBE9160D7F9917BF230D02C0A0ACD781837E52C9A7D + +Count = 942 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 579B88F0E150FDE938E7B8334613B9D8C1EB61BE39DFFAA1D0D6232449689BB6AE9D022803C0E5EAF2F14852 + +Count = 943 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = B99CFA470673E7B11F2145FB45D96980F2442115828D2A42836D72F3FA95B1F3A0B3524EA3591997E1883960 + +Count = 944 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 3302EA6480D7EFBEEFFC5F1F1A0B54D7414C44EC7C6CC6ADABDEC01FFA8F698FE23DE6588A1B98C1430EDD65 + +Count = 945 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 418AE6B4795221E0F01DCFD87AF385A8E4B96F53B74A7B8F40EC378023164C606BE60C59D829FA957E1DC78D + +Count = 946 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 8090EDD3919D337EFB95DADA715D24A95EBA7EC4F2DB14A2C0F9DF5675F5BCC4BAB16AE39F4D42E29BB46889 + +Count = 947 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 577B6BC7CD35BC1BAD1AB5D13751C3DE8E74E5C5E7CA24A1C8BA761181944070250ADA3797D9F2E66CE5BC2F + +Count = 948 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = AC9572F9816D4A0E42798089A7200CADF69762D497A5CE4611E1581BB7A80B7C0C7B72BAF2F1FD4A0F9BD462 + +Count = 949 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 91460EE6B80720F621266F8AF9AB75A01723AA0C4FBBBD71E47ADE0BE7290C2DB7400F3C5A1A0D02CC12AC4B + +Count = 950 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 07C597D3760D23979D4A7AB77084A329A53EF9FA66B0ADB1F038708B4325C473F0121344457786667FBEE398 + +Count = 951 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 69EF531194ED47C4920BBD6A0007D69749D7913571146F9D40E5DA526782352D0942F0A2AFF7389D594EC823 + +Count = 952 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = D7E1106B1FC3C5C525522E3E5CE936DFF791564FC3D9565771FE910BB7A3D0B5BC28BBA6219957BD840920DE + +Count = 953 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 9D5448A0FEFA3D6F0D031FE03DB17AC9BD823F81B1BABE97B07ADAAA699F601EC40056876F7DFE6F27A77493 + +Count = 954 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 1B08C41877208F0CB317C026AF05CE55C9F0BB24EFCA65BC29EBF6E97406EAAA53398FEDDDFC4B7813321F34 + +Count = 955 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = D05FC2A3D00D366001E7DF89E0E596DD0F8FFC0C72E57E9D2CADCFB578A53E66A99BE0E9BD966E03823EC37F + +Count = 956 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 4BA2D7A1C7FAC121AD7E9A411F554F430C5D8B5BBBEF9E36DD769522B0219644D7C2140C3A6EFA589E5A6599 + +Count = 957 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = F67D6A419E45237596D3CE343E8BB1079063725EA003FCA57A0C11AFA2942BFBD0A742702676628E3917C180 + +Count = 958 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = +CT = A07DA477C44F42A76C6E5DD9FC1E251C8E2096DA3958CAEAFCCB5E9A890A8CF0E08DD2510988BF92B84B9052E6 + +Count = 959 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 00 +CT = 2E093931B4742963DB512D99633C209B2BD99B9747C6E67B0B098E8123C39C856C0A296D91C2E38937A9B070E9 + +Count = 960 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 0001 +CT = B37F5AA385B3CC4BFA5F00F19F2F787B29ACEA339CC6BA147781EBC96CA24D549F612DA26AD7D48F4881C389C3 + +Count = 961 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102 +CT = B22F68FCC38867408F7CB5CE832E75B0E0C650842F56485E334BBC84323200D243577974815491EE84B5F6CF44 + +Count = 962 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 00010203 +CT = BD31D313960F8FC34EF1489AF614765BE05DDB771652CDC191C42EAC1F3404C439D0D5196018DC1200E21CAFF6 + +Count = 963 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 0001020304 +CT = 57B418782022C4EFC6286B0DA00135D4D0DB54810E723B721DD4B67F562EB7E7F5233A02FC48FF73147A674606 + +Count = 964 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405 +CT = 3BF9C3E6C0F2F0E68E6541137A5D11A02059BDC8585D566D81E1DD9B39640D7BDC54256F0EE2F6BF96A3D7892D + +Count = 965 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 00010203040506 +CT = CD6BCF99375535AE650ABE8CBE87BE78B447A7C50241298CD109E10628D786C93D9EEC48FA55397C5690E26CFB + +Count = 966 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 0001020304050607 +CT = 4041C9D540608D5FBDF9CEF7CE412DC7294151CC474168F5605A5607702CD3EF072CD3C9884A6922D98FDE462F + +Count = 967 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708 +CT = B67E036C5A8374566105484DD4F0602293E34F0B01ADDFA8071CF069C04F7943FF60959B187E3B1A37856BC2F5 + +Count = 968 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 00010203040506070809 +CT = 35DFF5593925B34C35C834D3027A22ABC639A828CD82C59FCC7AD6742973C8B217C4C7B0CC0F7424C5C7EC4C93 + +Count = 969 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A +CT = 455A9AC5FFF46D43D37556F7F2881BD25210294818E2EF4F36E9128E96A08FE70AF4365213FFCCF6F9735813AF + +Count = 970 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B +CT = F268C004D35420FCAE7E94B9BDC2025B5263FB5EE9978D2E20EDC8EFBB43E711C4D406CA3FBDEB4BCC6D436C2D + +Count = 971 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C +CT = 80CB407ADCEB8B08046ED3BA74F0DB48AAD11FBD6CB31873DEACE019372812DF24041470068310D6E021C1FAA4 + +Count = 972 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D +CT = 7542F4D104B5C523A75D58D319B64409289BB75A1A263EFE377B8C506A29DEB99373B0E67D5D9ADB497D6F49AA + +Count = 973 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E +CT = A01FDE847486CC31D806B1E5C6C353077D4A3E7142CCAA90D3164C88736A4FAC1B54077BA9FD278149108AD280 + +Count = 974 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F +CT = 3644AE853CBAFBCCABE0E35CE2D20284F0500057913D6DBE9160D7F948C3F3224EAD694C902C946CF03A6DC745 + +Count = 975 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 579B88F0E150FDE938E7B8334613B9D8C1EB61BE39DFFAA1D0D6232474B3EC0CDA01AA1AD154631F825C954D6F + +Count = 976 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = B99CFA470673E7B11F2145FB45D96980F2442115828D2A42836D72F3E4E88DFF7F295C033336A2FEDC05B720A9 + +Count = 977 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 3302EA6480D7EFBEEFFC5F1F1A0B54D7414C44EC7C6CC6ADABDEC01F227A0CFB8857B808D2ED527124618D8723 + +Count = 978 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 418AE6B4795221E0F01DCFD87AF385A8E4B96F53B74A7B8F40EC3780B9E4F54441AE00BCBF85E2D89317D58590 + +Count = 979 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 8090EDD3919D337EFB95DADA715D24A95EBA7EC4F2DB14A2C0F9DF56C11BF819556D6392454CB0D102627EDD11 + +Count = 980 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 577B6BC7CD35BC1BAD1AB5D13751C3DE8E74E5C5E7CA24A1C8BA7611A4643495826ACFD93C24C7482C6329726F + +Count = 981 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = AC9572F9816D4A0E42798089A7200CADF69762D497A5CE4611E1581B80D6B5A12C945B36424479199BB2AC0F08 + +Count = 982 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 91460EE6B80720F621266F8AF9AB75A01723AA0C4FBBBD71E47ADE0B5EB217E38CC4D8E5284B76DF3274DC301A + +Count = 983 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 07C597D3760D23979D4A7AB77084A329A53EF9FA66B0ADB1F038708BE563A61E168C1799F2F6B3662FAF260EBB + +Count = 984 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 69EF531194ED47C4920BBD6A0007D69749D7913571146F9D40E5DA5258A69BE026FCE05B4A1D0BF5E610D04F5E + +Count = 985 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = D7E1106B1FC3C5C525522E3E5CE936DFF791564FC3D9565771FE910B8ECCAA3981E49C5CCAA20940E25672BD04 + +Count = 986 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 9D5448A0FEFA3D6F0D031FE03DB17AC9BD823F81B1BABE97B07ADAAA62ED74595F5DBB93FDA9CC314D688E5CF0 + +Count = 987 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 1B08C41877208F0CB317C026AF05CE55C9F0BB24EFCA65BC29EBF6E9E3AE11A7CDA16A942829A385E113D17F95 + +Count = 988 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = D05FC2A3D00D366001E7DF89E0E596DD0F8FFC0C72E57E9D2CADCFB5B9108BB6049CAC65163D2A4A1A824C2310 + +Count = 989 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 4BA2D7A1C7FAC121AD7E9A411F554F430C5D8B5BBBEF9E36DD7695221173AB76F33446E46B7863443F5C20C6C8 + +Count = 990 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = F67D6A419E45237596D3CE343E8BB1079063725EA003FCA57A0C11AF4F12F0002A8F4FCAF4600D231DC9A0BDDA + +Count = 991 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = +CT = A07DA477C44F42A76C6E5DD9FC1E251C8E2096DA3958CAEAFCCB5E9A893CD11E92C5F4BDAE4746FBE7FEA6E14E98 + +Count = 992 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 00 +CT = 2E093931B4742963DB512D99633C209B2BD99B9747C6E67B0B098E8123568209E20DDE2D7D9930AAF2EA6C2C38D5 + +Count = 993 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 0001 +CT = B37F5AA385B3CC4BFA5F00F19F2F787B29ACEA339CC6BA147781EBC96C1CF797FBB75FCBDE1349E48C255C6BF823 + +Count = 994 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102 +CT = B22F68FCC38867408F7CB5CE832E75B0E0C650842F56485E334BBC84325D9517158CBED5486A710296E01142953E + +Count = 995 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 00010203 +CT = BD31D313960F8FC34EF1489AF614765BE05DDB771652CDC191C42EAC1FB52BD49B87CC17372781DD8BC0EA4C8D5C + +Count = 996 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 0001020304 +CT = 57B418782022C4EFC6286B0DA00135D4D0DB54810E723B721DD4B67F5688E59C8FCD6B15F78BE98D31236BEDF12E + +Count = 997 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405 +CT = 3BF9C3E6C0F2F0E68E6541137A5D11A02059BDC8585D566D81E1DD9B391F969E973881DE67E169E03F67A0B2F591 + +Count = 998 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 00010203040506 +CT = CD6BCF99375535AE650ABE8CBE87BE78B447A7C50241298CD109E10628EAB251C675876495ED00277866657FEE8F + +Count = 999 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 0001020304050607 +CT = 4041C9D540608D5FBDF9CEF7CE412DC7294151CC474168F5605A5607706C340FA74BF6966C84AA652515FBFFC237 + +Count = 1000 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708 +CT = B67E036C5A8374566105484DD4F0602293E34F0B01ADDFA8071CF069C0F3D323FD6DCC19F9CA89020F5253596627 + +Count = 1001 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 00010203040506070809 +CT = 35DFF5593925B34C35C834D3027A22ABC639A828CD82C59FCC7AD67429141C68F7F84B9F92CDB697C753F8E7CC0F + +Count = 1002 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A +CT = 455A9AC5FFF46D43D37556F7F2881BD25210294818E2EF4F36E9128E96A18B9DEA69828D2EBC0ED71A2D9965BC46 + +Count = 1003 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B +CT = F268C004D35420FCAE7E94B9BDC2025B5263FB5EE9978D2E20EDC8EFBB2F046BD2999539C6644FE95B632CD5AC33 + +Count = 1004 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C +CT = 80CB407ADCEB8B08046ED3BA74F0DB48AAD11FBD6CB31873DEACE019373186473559DB0EE4F832BEA28B6D330DFA + +Count = 1005 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D +CT = 7542F4D104B5C523A75D58D319B64409289BB75A1A263EFE377B8C506A51FFE55497A484A0E070C7627B241B8666 + +Count = 1006 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E +CT = A01FDE847486CC31D806B1E5C6C353077D4A3E7142CCAA90D3164C8873F946A79789FA774AC13312F93D44149430 + +Count = 1007 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F +CT = 3644AE853CBAFBCCABE0E35CE2D20284F0500057913D6DBE9160D7F9481C2D25BB41770363B8B2073361B66F6438 + +Count = 1008 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 579B88F0E150FDE938E7B8334613B9D8C1EB61BE39DFFAA1D0D6232474D514EE4DC1BA5ECF388AD471D1CFF82BD8 + +Count = 1009 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = B99CFA470673E7B11F2145FB45D96980F2442115828D2A42836D72F3E4191488DEB45FC6558915F12A9106601DBF + +Count = 1010 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 3302EA6480D7EFBEEFFC5F1F1A0B54D7414C44EC7C6CC6ADABDEC01F22E4FB05486D5375CC0FAE15E1957DB14DA9 + +Count = 1011 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 418AE6B4795221E0F01DCFD87AF385A8E4B96F53B74A7B8F40EC3780B97FC680D3FD16D7C9487DDC873E594FB351 + +Count = 1012 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 8090EDD3919D337EFB95DADA715D24A95EBA7EC4F2DB14A2C0F9DF56C18A37395AE79731B7FF2707D644E32A652C + +Count = 1013 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 577B6BC7CD35BC1BAD1AB5D13751C3DE8E74E5C5E7CA24A1C8BA7611A4F13FD7DD6353012DFCF6E49189BD5170AF + +Count = 1014 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = AC9572F9816D4A0E42798089A7200CADF69762D497A5CE4611E1581B809B56A7079AF01F8049D3D9FBF3AE621644 + +Count = 1015 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 91460EE6B80720F621266F8AF9AB75A01723AA0C4FBBBD71E47ADE0B5EEBC9573D96BF79A5542BEF174787A7E2A4 + +Count = 1016 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 07C597D3760D23979D4A7AB77084A329A53EF9FA66B0ADB1F038708BE51CB228EC856D0156304D4BC12261642DF1 + +Count = 1017 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 69EF531194ED47C4920BBD6A0007D69749D7913571146F9D40E5DA525858A45FA69E0103CCC0117FA5DEED069564 + +Count = 1018 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = D7E1106B1FC3C5C525522E3E5CE936DFF791564FC3D9565771FE910B8EBD6C4AAB2C2C7C27DA3FD6979AE2EFC27B + +Count = 1019 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 9D5448A0FEFA3D6F0D031FE03DB17AC9BD823F81B1BABE97B07ADAAA6236E413BAA93E7D19119FD7939CAB8AC168 + +Count = 1020 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 1B08C41877208F0CB317C026AF05CE55C9F0BB24EFCA65BC29EBF6E9E3FD6BDFE7FFC78F6CABD51EC2F35288A4F2 + +Count = 1021 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = D05FC2A3D00D366001E7DF89E0E596DD0F8FFC0C72E57E9D2CADCFB5B9D754F58029DEECF6297F1BDDBA8A2F3E56 + +Count = 1022 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 4BA2D7A1C7FAC121AD7E9A411F554F430C5D8B5BBBEF9E36DD76952211099C1B3B388895ADCB0928B37211CD449C + +Count = 1023 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = F67D6A419E45237596D3CE343E8BB1079063725EA003FCA57A0C11AF4F0A3148781EB1E20F907CF2B91CD1CA3F42 + +Count = 1024 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = +CT = A07DA477C44F42A76C6E5DD9FC1E251C8E2096DA3958CAEAFCCB5E9A893C14DAC99D4374AAF0EFB21AEAD4C76730BF + +Count = 1025 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 00 +CT = 2E093931B4742963DB512D99633C209B2BD99B9747C6E67B0B098E81235661402E8E65EFA4D77F8A26A9DCFB9CB4A6 + +Count = 1026 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 0001 +CT = B37F5AA385B3CC4BFA5F00F19F2F787B29ACEA339CC6BA147781EBC96C1C2523FA59521E372927BDACC953659B4715 + +Count = 1027 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102 +CT = B22F68FCC38867408F7CB5CE832E75B0E0C650842F56485E334BBC84325DD514911837D9218C6DF1FD04CAF04ABABB + +Count = 1028 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 00010203 +CT = BD31D313960F8FC34EF1489AF614765BE05DDB771652CDC191C42EAC1FB5461AAD15BABA8ECA08ED5C53A8ED454A4B + +Count = 1029 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 0001020304 +CT = 57B418782022C4EFC6286B0DA00135D4D0DB54810E723B721DD4B67F5688D9B04065F6A0E56FF409FDC570F98CA34F + +Count = 1030 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405 +CT = 3BF9C3E6C0F2F0E68E6541137A5D11A02059BDC8585D566D81E1DD9B391F813043ACFC99B7FBA8305DD78643C49B1F + +Count = 1031 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 00010203040506 +CT = CD6BCF99375535AE650ABE8CBE87BE78B447A7C50241298CD109E10628EA9D061F0D1C71FE67F1C5E600278BEF47A5 + +Count = 1032 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 0001020304050607 +CT = 4041C9D540608D5FBDF9CEF7CE412DC7294151CC474168F5605A5607706C604805FAFE989DECD89C7320E6BBB10F88 + +Count = 1033 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708 +CT = B67E036C5A8374566105484DD4F0602293E34F0B01ADDFA8071CF069C0F346DA9A547CFAE4532BE069827FC8F03F7C + +Count = 1034 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 00010203040506070809 +CT = 35DFF5593925B34C35C834D3027A22ABC639A828CD82C59FCC7AD674291465364A50635363BE30DBC13EEC8E4D9D2C + +Count = 1035 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A +CT = 455A9AC5FFF46D43D37556F7F2881BD25210294818E2EF4F36E9128E96A1BCF7F9E0B4573466DB4D68420208061173 + +Count = 1036 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B +CT = F268C004D35420FCAE7E94B9BDC2025B5263FB5EE9978D2E20EDC8EFBB2FA56E78604E0CD879F2C17531FAEDBF9AB6 + +Count = 1037 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C +CT = 80CB407ADCEB8B08046ED3BA74F0DB48AAD11FBD6CB31873DEACE0193731020A71F5B6767D832CCEC3E7E3EE75F658 + +Count = 1038 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D +CT = 7542F4D104B5C523A75D58D319B64409289BB75A1A263EFE377B8C506A513E5BAAE0E366C487C4B2BFAEFC9FA60627 + +Count = 1039 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E +CT = A01FDE847486CC31D806B1E5C6C353077D4A3E7142CCAA90D3164C8873F9E8D40A032945A47CF98EDFCF6F8BC1E3A3 + +Count = 1040 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F +CT = 3644AE853CBAFBCCABE0E35CE2D20284F0500057913D6DBE9160D7F9481C820B981CDD3408E4BD610035A99C21F607 + +Count = 1041 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 579B88F0E150FDE938E7B8334613B9D8C1EB61BE39DFFAA1D0D6232474D5D6220A085D55250FF5044D607DD74721FB + +Count = 1042 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = B99CFA470673E7B11F2145FB45D96980F2442115828D2A42836D72F3E4196466C6CBC08A8D17FE7D471A2D1FF8B6CB + +Count = 1043 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 3302EA6480D7EFBEEFFC5F1F1A0B54D7414C44EC7C6CC6ADABDEC01F22E4A5338D333EFA184B366358ECD2003CD2E6 + +Count = 1044 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 418AE6B4795221E0F01DCFD87AF385A8E4B96F53B74A7B8F40EC3780B97FF7BB02FD27A080A3735DDEF40EB02E3974 + +Count = 1045 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 8090EDD3919D337EFB95DADA715D24A95EBA7EC4F2DB14A2C0F9DF56C18A507EE02882C215CB7F393795D817D8E11F + +Count = 1046 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 577B6BC7CD35BC1BAD1AB5D13751C3DE8E74E5C5E7CA24A1C8BA7611A4F174E5C75FB84B8618CF3FD524FD00F628F2 + +Count = 1047 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = AC9572F9816D4A0E42798089A7200CADF69762D497A5CE4611E1581B809B174B8AF0EBEF38210B47E70B9D56EE90D8 + +Count = 1048 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 91460EE6B80720F621266F8AF9AB75A01723AA0C4FBBBD71E47ADE0B5EEBE5DFF118D0E131DB49C1CFAA79C38063ED + +Count = 1049 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 07C597D3760D23979D4A7AB77084A329A53EF9FA66B0ADB1F038708BE51C92F959DC30F151760453B39117702D7121 + +Count = 1050 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 69EF531194ED47C4920BBD6A0007D69749D7913571146F9D40E5DA5258583CB3672813908BF2A7F15A59C858D32803 + +Count = 1051 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = D7E1106B1FC3C5C525522E3E5CE936DFF791564FC3D9565771FE910B8EBDA5BB1AF404CE2D4177C8B4E4CD61681E01 + +Count = 1052 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 9D5448A0FEFA3D6F0D031FE03DB17AC9BD823F81B1BABE97B07ADAAA623617088C8AA3376FE104EDCFFA440FBA9217 + +Count = 1053 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 1B08C41877208F0CB317C026AF05CE55C9F0BB24EFCA65BC29EBF6E9E3FD5CAD61E3A132B216DED0AF2E8195445E92 + +Count = 1054 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = D05FC2A3D00D366001E7DF89E0E596DD0F8FFC0C72E57E9D2CADCFB5B9D73E75FA76DA53D8A7A5D22A88AD8395A802 + +Count = 1055 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 4BA2D7A1C7FAC121AD7E9A411F554F430C5D8B5BBBEF9E36DD7695221109A1446724347BF53FCC536955490F89F855 + +Count = 1056 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = F67D6A419E45237596D3CE343E8BB1079063725EA003FCA57A0C11AF4F0A4CAE634AE605244EC561C1152C19C05F26 + +Count = 1057 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = +CT = A07DA477C44F42A76C6E5DD9FC1E251C8E2096DA3958CAEAFCCB5E9A893C14ABF3E878C912AC3919EBA510629A12520B + +Count = 1058 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 00 +CT = 2E093931B4742963DB512D99633C209B2BD99B9747C6E67B0B098E8123566100B4792378B6110FB5D479CAB479DCF327 + +Count = 1059 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 0001 +CT = B37F5AA385B3CC4BFA5F00F19F2F787B29ACEA339CC6BA147781EBC96C1C2500F8F482AECEB3AF04ED2F9ACD0C72BC4D + +Count = 1060 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102 +CT = B22F68FCC38867408F7CB5CE832E75B0E0C650842F56485E334BBC84325DD5F0A7ED1248AA07F3D4974FC137B71CB11C + +Count = 1061 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 00010203 +CT = BD31D313960F8FC34EF1489AF614765BE05DDB771652CDC191C42EAC1FB546C8DC1DFBE80948E5FA3D5A8BE5A8541745 + +Count = 1062 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 0001020304 +CT = 57B418782022C4EFC6286B0DA00135D4D0DB54810E723B721DD4B67F5688D95796E93D8BD25CF8A95E3E71F8527A3AF8 + +Count = 1063 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405 +CT = 3BF9C3E6C0F2F0E68E6541137A5D11A02059BDC8585D566D81E1DD9B391F81773231CAA501B913055235D2D7484BD425 + +Count = 1064 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 00010203040506 +CT = CD6BCF99375535AE650ABE8CBE87BE78B447A7C50241298CD109E10628EA9D1E7471D2FE8EDD6030027F9B85E75D1D6A + +Count = 1065 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 0001020304050607 +CT = 4041C9D540608D5FBDF9CEF7CE412DC7294151CC474168F5605A5607706C60C27E73150EE41E4FAEC0875494D22DD825 + +Count = 1066 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708 +CT = B67E036C5A8374566105484DD4F0602293E34F0B01ADDFA8071CF069C0F346283E35D31EC814DB14F5EFB2F682056071 + +Count = 1067 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 00010203040506070809 +CT = 35DFF5593925B34C35C834D3027A22ABC639A828CD82C59FCC7AD67429146524A7FF6EF9D94497DCA74F2005E6980F7C + +Count = 1068 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A +CT = 455A9AC5FFF46D43D37556F7F2881BD25210294818E2EF4F36E9128E96A1BC8A1DE5732837C21D19D8363699F548C852 + +Count = 1069 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B +CT = F268C004D35420FCAE7E94B9BDC2025B5263FB5EE9978D2E20EDC8EFBB2FA53677253B900B460BDEE8021B23F89DEBBC + +Count = 1070 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C +CT = 80CB407ADCEB8B08046ED3BA74F0DB48AAD11FBD6CB31873DEACE01937310227CE22E1FF62C710C4A824084C27D9C0E6 + +Count = 1071 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D +CT = 7542F4D104B5C523A75D58D319B64409289BB75A1A263EFE377B8C506A513E3E7C77E9D345CA55ABB9339EED1C20E60E + +Count = 1072 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E +CT = A01FDE847486CC31D806B1E5C6C353077D4A3E7142CCAA90D3164C8873F9E82F1AD5C5810F6F91FA8F1F2CFFC083C7CB + +Count = 1073 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F +CT = 3644AE853CBAFBCCABE0E35CE2D20284F0500057913D6DBE9160D7F9481C8220C7158AC4B5031CAC7A6A927EAD443801 + +Count = 1074 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 579B88F0E150FDE938E7B8334613B9D8C1EB61BE39DFFAA1D0D6232474D5D656EAECA2D0E6CBB638BD38F867174A592B + +Count = 1075 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = B99CFA470673E7B11F2145FB45D96980F2442115828D2A42836D72F3E41964CA725B14808EF082D795F7C958203D5683 + +Count = 1076 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 3302EA6480D7EFBEEFFC5F1F1A0B54D7414C44EC7C6CC6ADABDEC01F22E4A56568CB6EC76B5FADDD38B4E7043AD9EC0E + +Count = 1077 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 418AE6B4795221E0F01DCFD87AF385A8E4B96F53B74A7B8F40EC3780B97FF7608FD12EE1AB50042E660D71BE50AD8477 + +Count = 1078 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 8090EDD3919D337EFB95DADA715D24A95EBA7EC4F2DB14A2C0F9DF56C18A505AC5CD91C0EB360A612E4052C5A9792B86 + +Count = 1079 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 577B6BC7CD35BC1BAD1AB5D13751C3DE8E74E5C5E7CA24A1C8BA7611A4F1747C68E4B93F81BC1932384033ABCAB108AC + +Count = 1080 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = AC9572F9816D4A0E42798089A7200CADF69762D497A5CE4611E1581B809B17A760947BD7321A4386C96CA95551F1F506 + +Count = 1081 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 91460EE6B80720F621266F8AF9AB75A01723AA0C4FBBBD71E47ADE0B5EEBE581270E2EF8B61DE4C11A9AF8739EC83D02 + +Count = 1082 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 07C597D3760D23979D4A7AB77084A329A53EF9FA66B0ADB1F038708BE51C926E329514F9F86B1B86ECE649B8E9A42123 + +Count = 1083 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 69EF531194ED47C4920BBD6A0007D69749D7913571146F9D40E5DA5258583C7F3854F22677A493A06C9ACE4A2F58431D + +Count = 1084 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = D7E1106B1FC3C5C525522E3E5CE936DFF791564FC3D9565771FE910B8EBDA58EBC36B61366C596EC531DD71505E04B1B + +Count = 1085 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 9D5448A0FEFA3D6F0D031FE03DB17AC9BD823F81B1BABE97B07ADAAA62361715234643FDD6F89BAD3ECEFA6869AA33D5 + +Count = 1086 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 1B08C41877208F0CB317C026AF05CE55C9F0BB24EFCA65BC29EBF6E9E3FD5C8DDC4DB35EF08B4629259C6FE693275E5F + +Count = 1087 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = D05FC2A3D00D366001E7DF89E0E596DD0F8FFC0C72E57E9D2CADCFB5B9D73EB56D841B0DAEE4A3DA84C3FB3F57E653CE + +Count = 1088 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 4BA2D7A1C7FAC121AD7E9A411F554F430C5D8B5BBBEF9E36DD7695221109A138DF97D59FB23D7412029F774C1BA8E57C + +Count = 1089 +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = F67D6A419E45237596D3CE343E8BB1079063725EA003FCA57A0C11AF4F0A4CCC817BCE2496363B3F95757A8215ECEDE8 + diff --git a/spook/Implementations/crypto_aead/spook128mu512v2/opt_c/COPYING b/spook/Implementations/crypto_aead/spook128mu512v2/opt_c/COPYING new file mode 100644 index 0000000..0e259d4 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128mu512v2/opt_c/COPYING @@ -0,0 +1,121 @@ +Creative Commons Legal Code + +CC0 1.0 Universal + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS + PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM + THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED + HEREUNDER. + +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer +exclusive Copyright and Related Rights (defined below) upon the creator +and subsequent owner(s) (each and all, an "owner") of an original work of +authorship and/or a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for +the purpose of contributing to a commons of creative, cultural and +scientific works ("Commons") that the public can reliably and without fear +of later claims of infringement build upon, modify, incorporate in other +works, reuse and redistribute as freely as possible in any form whatsoever +and for any purposes, including without limitation commercial purposes. +These owners may contribute to the Commons to promote the ideal of a free +culture and the further production of creative, cultural and scientific +works, or to gain reputation or greater distribution for their Work in +part through the use and efforts of others. + +For these and/or other purposes and motivations, and without any +expectation of additional consideration or compensation, the person +associating CC0 with a Work (the "Affirmer"), to the extent that he or she +is an owner of Copyright and Related Rights in the Work, voluntarily +elects to apply CC0 to the Work and publicly distribute the Work under its +terms, with knowledge of his or her Copyright and Related Rights in the +Work and the meaning and intended legal effect of CC0 on those rights. + +1. Copyright and Related Rights. A Work made available under CC0 may be +protected by copyright and related or neighboring rights ("Copyright and +Related Rights"). Copyright and Related Rights include, but are not +limited to, the following: + + i. the right to reproduce, adapt, distribute, perform, display, + communicate, and translate a Work; + ii. moral rights retained by the original author(s) and/or performer(s); +iii. publicity and privacy rights pertaining to a person's image or + likeness depicted in a Work; + iv. rights protecting against unfair competition in regards to a Work, + subject to the limitations in paragraph 4(a), below; + v. rights protecting the extraction, dissemination, use and reuse of data + in a Work; + vi. database rights (such as those arising under Directive 96/9/EC of the + European Parliament and of the Council of 11 March 1996 on the legal + protection of databases, and under any national implementation + thereof, including any amended or successor version of such + directive); and +vii. other similar, equivalent or corresponding rights throughout the + world based on applicable law or treaty, and any national + implementations thereof. + +2. Waiver. To the greatest extent permitted by, but not in contravention +of, applicable law, Affirmer hereby overtly, fully, permanently, +irrevocably and unconditionally waives, abandons, and surrenders all of +Affirmer's Copyright and Related Rights and associated claims and causes +of action, whether now known or unknown (including existing as well as +future claims and causes of action), in the Work (i) in all territories +worldwide, (ii) for the maximum duration provided by applicable law or +treaty (including future time extensions), (iii) in any current or future +medium and for any number of copies, and (iv) for any purpose whatsoever, +including without limitation commercial, advertising or promotional +purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each +member of the public at large and to the detriment of Affirmer's heirs and +successors, fully intending that such Waiver shall not be subject to +revocation, rescission, cancellation, termination, or any other legal or +equitable action to disrupt the quiet enjoyment of the Work by the public +as contemplated by Affirmer's express Statement of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason +be judged legally invalid or ineffective under applicable law, then the +Waiver shall be preserved to the maximum extent permitted taking into +account Affirmer's express Statement of Purpose. In addition, to the +extent the Waiver is so judged Affirmer hereby grants to each affected +person a royalty-free, non transferable, non sublicensable, non exclusive, +irrevocable and unconditional license to exercise Affirmer's Copyright and +Related Rights in the Work (i) in all territories worldwide, (ii) for the +maximum duration provided by applicable law or treaty (including future +time extensions), (iii) in any current or future medium and for any number +of copies, and (iv) for any purpose whatsoever, including without +limitation commercial, advertising or promotional purposes (the +"License"). The License shall be deemed effective as of the date CC0 was +applied by Affirmer to the Work. Should any part of the License for any +reason be judged legally invalid or ineffective under applicable law, such +partial invalidity or ineffectiveness shall not invalidate the remainder +of the License, and in such case Affirmer hereby affirms that he or she +will not (i) exercise any of his or her remaining Copyright and Related +Rights in the Work or (ii) assert any associated claims and causes of +action with respect to the Work, in either case contrary to Affirmer's +express Statement of Purpose. + +4. Limitations and Disclaimers. + + a. No trademark or patent rights held by Affirmer are waived, abandoned, + surrendered, licensed or otherwise affected by this document. + b. Affirmer offers the Work as-is and makes no representations or + warranties of any kind concerning the Work, express, implied, + statutory or otherwise, including without limitation warranties of + title, merchantability, fitness for a particular purpose, non + infringement, or the absence of latent or other defects, accuracy, or + the present or absence of errors, whether or not discoverable, all to + the greatest extent permissible under applicable law. + c. Affirmer disclaims responsibility for clearing rights of other persons + that may apply to the Work or any use thereof, including without + limitation any person's Copyright and Related Rights in the Work. + Further, Affirmer disclaims responsibility for obtaining any necessary + consents, permissions or other rights required for any use of the + Work. + d. Affirmer understands and acknowledges that Creative Commons is not a + party to this document and has no duty or obligation with respect to + this CC0 or use of the Work. diff --git a/spook/Implementations/crypto_aead/spook128mu512v2/opt_c/api.h b/spook/Implementations/crypto_aead/spook128mu512v2/opt_c/api.h new file mode 100644 index 0000000..5cd4ad3 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128mu512v2/opt_c/api.h @@ -0,0 +1,7 @@ +#include "parameters.h" +#define CRYPTO_KEYBYTES KEYBYTES +#define CRYPTO_NPUBBYTES 16 +#define CRYPTO_NSECBYTES 0 +#define CRYPTO_ABYTES 16 +#define CRYPTO_NOOVERLAP 1 + diff --git a/spook/Implementations/crypto_aead/spook128mu512v2/opt_c/clyde_32bit.c b/spook/Implementations/crypto_aead/spook128mu512v2/opt_c/clyde_32bit.c new file mode 100644 index 0000000..694b708 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128mu512v2/opt_c/clyde_32bit.c @@ -0,0 +1,75 @@ +/* MIT License + * + * Copyright (c) 2019 Gaëtan Cassiers Olivier Bronchain + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +#include +#include +#include "primitives.h" +#include "primitives.c" +#define CLYDE_128_NS 6 // Number of steps +#define CLYDE_128_NR 2 * CLYDE_128_NS // Number of rounds +#define XORLS(DEST, OP) do { \ + (DEST)[0] ^= (OP)[0]; \ + (DEST)[1] ^= (OP)[1]; \ + (DEST)[2] ^= (OP)[2]; \ + (DEST)[3] ^= (OP)[3]; } while (0) + +#define XORCST(DEST, LFSR) do { \ + (DEST)[0] ^= ((LFSR)>>3 & 0x1); \ + (DEST)[1] ^= ((LFSR)>>2 & 0x1); \ + (DEST)[2] ^= ((LFSR)>>1 & 0x1); \ + (DEST)[3] ^= ((LFSR) & 0x1); } while (0) + +void clyde128_encrypt(clyde128_state state, const clyde128_state t, const unsigned char* k) { + // Key schedule + clyde128_state k_st; + memcpy(k_st, k, CLYDE128_NBYTES); + clyde128_state tk[3] = { + { t[0], t[1], t[2], t[3] }, + { t[0] ^ t[2], t[1] ^ t[3], t[0], t[1] }, + { t[2], t[3], t[0] ^ t[2], t[1] ^ t[3] } + }; + XORLS(tk[0], k_st); + XORLS(tk[1], k_st); + XORLS(tk[2], k_st); + + // Datapath + XORLS(state, tk[0]); + uint32_t off = 0x924; // 2-bits describing the round key + uint32_t lfsr = 0x8; // LFSR for round constant + for (uint32_t s = 0; s < CLYDE_128_NS; s++) { + sbox_layer(state); + lbox(&state[0], &state[1]); + lbox(&state[2], &state[3]); + XORCST(state,lfsr); + uint32_t b = lfsr & 0x1; + lfsr = (lfsr^(b<<3) | b<<4)>>1; // update LFSR + + sbox_layer(state); + lbox(&state[0], &state[1]); + lbox(&state[2], &state[3]); + XORCST(state,lfsr); + b = lfsr & 0x1; + lfsr = (lfsr^(b<<3) | b<<4)>>1; // update LFSR + off >>=2; + XORLS(state, tk[off&0x03]); + } +} diff --git a/spook/Implementations/crypto_aead/spook128mu512v2/opt_c/crypto_aead.h b/spook/Implementations/crypto_aead/spook128mu512v2/opt_c/crypto_aead.h new file mode 100644 index 0000000..53ec4a7 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128mu512v2/opt_c/crypto_aead.h @@ -0,0 +1,12 @@ + +int crypto_aead_encrypt(unsigned char* c, unsigned long long* clen, + const unsigned char* m, unsigned long long mlen, + const unsigned char* ad, unsigned long long adlen, + const unsigned char* nsec, const unsigned char* npub, + const unsigned char* k); + +int crypto_aead_decrypt(unsigned char* m, unsigned long long* mlen, + unsigned char* nsec, const unsigned char* c, + unsigned long long clen, const unsigned char* ad, + unsigned long long adlen, const unsigned char* npub, + const unsigned char* k); diff --git a/spook/Implementations/crypto_aead/spook128mu512v2/opt_c/encrypt.c b/spook/Implementations/crypto_aead/spook128mu512v2/opt_c/encrypt.c new file mode 100644 index 0000000..74d09fa --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128mu512v2/opt_c/encrypt.c @@ -0,0 +1,44 @@ +/* Spook Reference Implementation v1 + * + * Written in 2019 at UCLouvain (Belgium) by Olivier Bronchain, Gaetan Cassiers + * and Charles Momin. + * To the extent possible under law, the author(s) have dedicated all copyright + * and related and neighboring rights to this software to the public domain + * worldwide. This software is distributed without any warranty. + * + * You should have received a copy of the CC0 Public Domain Dedication along with + * this software. If not, see . + */ +#include "crypto_aead.h" +#include "s1p.h" + +#ifdef __GNUC__ +#define UNUSED __attribute__((unused)) +#else +#define UNUSED +#endif + +// Spook encryption. +int crypto_aead_encrypt(unsigned char* c, unsigned long long* clen, + const unsigned char* m, unsigned long long mlen, + const unsigned char* ad, unsigned long long adlen, + const unsigned char* nsec UNUSED, + const unsigned char* npub, const unsigned char* k) { + unsigned char p[P_NBYTES]; + const unsigned char* k_priv; + init_keys(&k_priv, p, k); + s1p_encrypt(c, clen, ad, adlen, m, mlen, k_priv, p, npub); + return 0; +} + +// Spook encryption. +int crypto_aead_decrypt(unsigned char* m, unsigned long long* mlen, + unsigned char* nsec UNUSED, const unsigned char* c, + unsigned long long clen, const unsigned char* ad, + unsigned long long adlen, const unsigned char* npub, + const unsigned char* k) { + unsigned char p[P_NBYTES]; + const unsigned char* k_priv; + init_keys(&k_priv, p, k); + return s1p_decrypt(m, mlen, ad, adlen, c, clen, k_priv, p, npub); +} diff --git a/spook/Implementations/crypto_aead/spook128mu512v2/opt_c/iacaMarks.h b/spook/Implementations/crypto_aead/spook128mu512v2/opt_c/iacaMarks.h new file mode 100644 index 0000000..be1973e --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128mu512v2/opt_c/iacaMarks.h @@ -0,0 +1,53 @@ +/* +* Copyright (2008-2009) Intel Corporation All Rights Reserved. +* The source code contained or described herein and all documents +* related to the source code ("Material") are owned by Intel Corporation +* or its suppliers or licensors. Title to the Material remains with +* Intel Corporation or its suppliers and licensors. The Material +* contains trade secrets and proprietary and confidential information +* of Intel or its suppliers and licensors. The Material is protected +* by worldwide copyright and trade secret laws and treaty provisions. +* No part of the Material may be used, copied, reproduced, modified, +* published, uploaded, posted, transmitted, distributed, or disclosed +* in any way without Intel(R)s prior express written permission. +* +* No license under any patent, copyright, trade secret or other +* intellectual property right is granted to or conferred upon you by +* disclosure or delivery of the Materials, either expressly, by implication, +* inducement, estoppel or otherwise. Any license under such intellectual +* property rights must be express and approved by Intel in writing. +*/ + +#if defined (__GNUC__) +#define IACA_SSC_MARK( MARK_ID ) \ +__asm__ __volatile__ ( \ + "\n\t movl $"#MARK_ID", %%ebx" \ + "\n\t .byte 0x64, 0x67, 0x90" \ + : : : "memory" ); + +#else +#define IACA_SSC_MARK(x) {__asm mov ebx, x\ + __asm _emit 0x64 \ + __asm _emit 0x67 \ + __asm _emit 0x90 } +#endif + +#define IACA_START {IACA_SSC_MARK(111)} +#define IACA_END {IACA_SSC_MARK(222)} + +#ifdef _WIN64 +#include +#define IACA_VC64_START __writegsbyte(111, 111); +#define IACA_VC64_END __writegsbyte(222, 222); +#endif + +/**************** asm ***************** +;START_MARKER +mov ebx, 111 +db 0x64, 0x67, 0x90 + +;END_MARKER +mov ebx, 222 +db 0x64, 0x67, 0x90 + +**************************************/ diff --git a/spook/Implementations/crypto_aead/spook128mu512v2/opt_c/parameters.h b/spook/Implementations/crypto_aead/spook128mu512v2/opt_c/parameters.h new file mode 100644 index 0000000..6b3d1a2 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128mu512v2/opt_c/parameters.h @@ -0,0 +1,30 @@ +/* Spook Reference Implementation v1 + * + * Written in 2019 at UCLouvain (Belgium) by Olivier Bronchain, Gaetan Cassiers + * and Charles Momin. + * To the extent possible under law, the author(s) have dedicated all copyright + * and related and neighboring rights to this software to the public domain + * worldwide. This software is distributed without any warranty. + * + * You should have received a copy of the CC0 Public Domain Dedication along with + * this software. If not, see . + */ +#ifndef _PARAMETERS_H_ +#define _PARAMETERS_H_ + +#define MULTI_USER 1 +#define SMALL_PERM 0 + +#if MULTI_USER +#define KEYBYTES 32 +#else +#define KEYBYTES 16 +#endif + +#include "api.h" + +#if (KEYBYTES != CRYPTO_KEYBYTES) +#error "Wrong parameters in api.h" +#endif + +#endif //_PARAMETERS_H_ diff --git a/spook/Implementations/crypto_aead/spook128mu512v2/opt_c/primitives.c b/spook/Implementations/crypto_aead/spook128mu512v2/opt_c/primitives.c new file mode 100644 index 0000000..acab323 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128mu512v2/opt_c/primitives.c @@ -0,0 +1,94 @@ +#include "primitives.h" +#ifdef SHADOW +static uint32_t lfsr_poly; +static uint32_t xtime_poly; +#endif + +// Apply a S-box layer to a Clyde-128 state. +static void sbox_layer(uint32_t* state) { + uint32_t y1 = (state[0] & state[1]) ^ state[2]; + uint32_t y0 = (state[3] & state[0]) ^ state[1]; + uint32_t y3 = (y1 & state[3]) ^ state[0]; + uint32_t y2 = (y0 & y1) ^ state[3]; + state[0] = y0; + state[1] = y1; + state[2] = y2; + state[3] = y3; +} + +// Apply a L-box to a pair of Clyde-128 rows. +static void lbox(uint32_t* x, uint32_t* y) { + uint32_t a, b, c, d; + a = *x ^ ROT32(*x, 12); + b = *y ^ ROT32(*y, 12); + a = a ^ ROT32(a, 3); + b = b ^ ROT32(b, 3); + a = a ^ ROT32(*x, 17); + b = b ^ ROT32(*y, 17); + c = a ^ ROT32(a, 31); + d = b ^ ROT32(b, 31); + a = a ^ ROT32(d, 26); + b = b ^ ROT32(c, 25); + a = a ^ ROT32(c, 15); + b = b ^ ROT32(d, 15); + *x = a; + *y = b; +} + +#ifdef SHADOW +void set_poly_lfsr(uint32_t l){ + lfsr_poly = l; +} +void set_poly_xtime(uint32_t l){ + xtime_poly = l; +} + +static uint32_t update_lfsr(uint32_t x) { + int32_t tmp1 = x; + uint32_t tmp = (tmp1 >>31) & lfsr_poly; + return (x<<1) ^ tmp; +} + +static uint32_t xtime(uint32_t x) { + int32_t tmp1 = x; + uint32_t tmp = (tmp1 >>31) & xtime_poly; + return (x<<1) ^ tmp; +} + +// Apply a D-box layer to a Shadow state. +static void dbox_mls_layer(shadow_state state,uint32_t *lfsr) { +for (unsigned int row = 0; row < LS_ROWS; row++) { +#if SMALL_PERM + uint32_t x1 = state[0][row]; + uint32_t x2 = state[1][row]; + uint32_t x3 = state[2][row]; + + uint32_t a = x1 ^ x3; + uint32_t b = a ^ x2; + uint32_t c = xtime(a) ^ (x1 ^ x2); + state[0][row] = a ^ c; + state[1][row] = b; + state[2][row] = c; + + state[0][row] ^= *lfsr; + *lfsr = update_lfsr(*lfsr); + +#else + + state[0][row] ^= state[1][row]; + state[2][row] ^= state[3][row]; + state[1][row] ^= state[2][row]; + state[3][row] ^= xtime(state[0][row]); + state[2][row] ^= xtime(state[3][row]); + state[1][row] = xtime(state[1][row]); + state[0][row] ^= state[1][row]; + state[3][row] ^= state[0][row]; + state[1][row] ^= state[2][row]; + + state[0][row] ^= *lfsr; + *lfsr = update_lfsr(*lfsr); +#endif // SMALL_PERM + } + +} +#endif diff --git a/spook/Implementations/crypto_aead/spook128mu512v2/opt_c/primitives.h b/spook/Implementations/crypto_aead/spook128mu512v2/opt_c/primitives.h new file mode 100644 index 0000000..df99be9 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128mu512v2/opt_c/primitives.h @@ -0,0 +1,52 @@ +/* Spook Reference Implementation v1 + * + * Written in 2019 at UCLouvain (Belgium) by Olivier Bronchain, Gaetan Cassiers + * and Charles Momin. + * To the extent possible under law, the author(s) have dedicated all copyright + * and related and neighboring rights to this software to the public domain + * worldwide. This software is distributed without any warranty. + * + * You should have received a copy of the CC0 Public Domain Dedication along with + * this software. If not, see . + */ +#ifndef _H_PRIMITIVES_H_ +#define _H_PRIMITIVES_H_ + +#include +#include "parameters.h" + +#define CLYDE128_NBYTES 16 + +#define ROTL(x, n) ((x << n) | (x >> ((32-n) & 31))) +#ifndef SHCST +#define SHCST 1 +#endif + +#ifndef DBOX +#define DBOX 1 +#endif + +#if SMALL_PERM +#define SHADOW_NBYTES 48 +#else +#define SHADOW_NBYTES 64 +#endif // SMALL_PERM + +#define LS_ROWS 4 // Rows in the LS design +#define LS_ROW_BYTES 4 // number of bytes per row in the LS design +#define MLS_BUNDLES \ + (SHADOW_NBYTES / (LS_ROWS* LS_ROW_BYTES)) // Bundles in the mLS design + +#define ROT32(x,n) ((uint32_t)(((x)>>(n))|((x)<<(32-(n))))) +typedef __attribute__((aligned(16))) uint32_t clyde128_state[LS_ROWS]; +typedef __attribute__((aligned(64))) clyde128_state shadow_state[MLS_BUNDLES]; + +void clyde128_encrypt(clyde128_state state, + const clyde128_state t, const unsigned char* k); + +void shadow(shadow_state state); +static void sbox_layer(uint32_t* state); +static void dbox_mls_layer(shadow_state state,uint32_t *lfsr); +static void lbox(uint32_t* x, uint32_t* y); + +#endif //_H_PRIMITIVES_H_ diff --git a/spook/Implementations/crypto_aead/spook128mu512v2/opt_c/s1p.c b/spook/Implementations/crypto_aead/spook128mu512v2/opt_c/s1p.c new file mode 100644 index 0000000..a4b7166 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128mu512v2/opt_c/s1p.c @@ -0,0 +1,197 @@ +/* MIT License + * + * Copyright (c) 2019 Gaëtan Cassiers + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +#include +#include +#include +#include "primitives.h" +#include "s1p.h" +#include "parameters.h" + +#define CAPACITY_BYTES 32 +#define RATE_BYTES (SHADOW_NBYTES - CAPACITY_BYTES) +#define RATE_BUNDLES (RATE_BYTES/(LS_ROWS*LS_ROW_BYTES)) + +// Working mode for block compression. +typedef enum { + AD, + PLAINTEXT, + CIPHERTEXT +} compress_mode; + +static void compress_block(unsigned char *state, unsigned char *out, + const unsigned char *d, compress_mode mode, + unsigned long long offset, unsigned long long n); + +static unsigned long long compress_data(shadow_state state, + unsigned char *out, + const unsigned char *d, + unsigned long long dlen, + compress_mode mode); + +static void init_sponge_state(shadow_state state, + const unsigned char *k, const unsigned char *p, + const unsigned char *n); +static void xor_bytes(unsigned char* dest, const unsigned char* src1, + const unsigned char* src2, unsigned long long n); + +void init_keys(const unsigned char **k, unsigned char p[P_NBYTES], + const unsigned char *k_glob) { + *k = k_glob; +#if MULTI_USER + memcpy(p, k_glob + CLYDE128_NBYTES, P_NBYTES); + p[P_NBYTES - 1] &= 0x7F; // set last p bit to 0 + p[P_NBYTES - 1] |= 0x40; // set next to last p bit to 0 +#else + memset(p, 0, P_NBYTES); +#endif // MULTI_USER +} + +static void init_sponge_state(shadow_state state, + const unsigned char *k, const unsigned char *p, + const unsigned char *n) { +// init state + memset(state, 0, SHADOW_NBYTES); + memcpy(state[0], n, P_NBYTES); + memcpy(state[1], p, CRYPTO_NPUBBYTES); + + memcpy(state[2], n, CRYPTO_NPUBBYTES); + clyde128_encrypt(state[0], state[1], k); + + // initial permutation + shadow(state); +} + +void s1p_encrypt(unsigned char *c, unsigned long long *clen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *m, unsigned long long mlen, + const unsigned char *k, const unsigned char *p, + const unsigned char *n) { + // permutation state + shadow_state state; + init_sponge_state(state, k, p, n); + + // compress associated data + compress_data(state, NULL, ad, adlen, AD); + + // compress message + unsigned long long c_bytes = 0; + if (mlen > 0) { + state[RATE_BUNDLES][0] ^= 0x01; + c_bytes = compress_data(state, c, m, mlen, PLAINTEXT); + } + + // tag + state[1][LS_ROWS- 1] |= 0x80000000; + clyde128_encrypt(state[0], state[1], k); + memcpy(c+c_bytes, state[0], CLYDE128_NBYTES); + *clen = c_bytes + CLYDE128_NBYTES; +} + +int s1p_decrypt(unsigned char *m, unsigned long long *mlen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *c, unsigned long long clen, + const unsigned char *k, const unsigned char *p, + const unsigned char *n) { + // permutation state + shadow_state state; + init_sponge_state(state, k, p, n); + + // compress associated data + compress_data(state, NULL, ad, adlen, AD); + + // compress message + unsigned long long m_bytes = 0; + if (clen > CLYDE128_NBYTES) { + state[RATE_BUNDLES][0] ^= 0x01; + m_bytes = compress_data(state, m, c, clen - CLYDE128_NBYTES, CIPHERTEXT); + } + + // tag verification + state[1][LS_ROWS- 1] |= 0x80000000; + clyde128_encrypt(state[0], state[1], k); + unsigned char *st0 = (unsigned char *) state[0]; + int tag_ok = 1; + for (int i = 0; i < 4*LS_ROWS; i++) { + tag_ok &= (st0[i] == c[m_bytes+i]); + } + if (tag_ok) { + *mlen = m_bytes; + return 0; + } else { + // Reset output buffer to avoid unintended unauthenticated plaintext + // release. + memset(m, 0, clen - CLYDE128_NBYTES); + *mlen = 0; + return -1; + } +} + +// Compress a block into the state. Length of the block is n and buffers are +// accessed starting at offset. Input block is d, output is written into +// buffer out if mode is PLAINTEXT or CIPHERTEXT. +// Only the XOR operation is performed, not XORing of padding constants. +static void compress_block(unsigned char *state, unsigned char *out, + const unsigned char *d, compress_mode mode, + unsigned long long offset, unsigned long long n) { + if (mode == CIPHERTEXT) { + xor_bytes(out + offset, state, d + offset, n); + memcpy(state, d + offset, n); + } else { + xor_bytes(state, state, d + offset, n); + if (mode == PLAINTEXT) { + memcpy(out + offset, state, n); + } + } +} + +// Compress a block into the state (in duplex-sponge mode). +// Input data buffer is d with length dlen. +// Output is written into buffer out if mode is PLAINTEXT or CIPHERTEXT. +// Padding is handled if needed. +static unsigned long long compress_data(shadow_state state, + unsigned char *out, + const unsigned char *d, + unsigned long long dlen, + compress_mode mode) { + unsigned long long i; + for (i = 0; i < dlen / RATE_BYTES; i++) { + compress_block((uint8_t *)state, out, d, mode, i * RATE_BYTES, RATE_BYTES); + shadow(state); + } + int rem = dlen % RATE_BYTES; + if (rem != 0) { + compress_block((uint8_t *)state, out, d, mode, i * RATE_BYTES, rem); + ((uint8_t *)state)[rem] ^= 0x01; + ((uint8_t *)state)[RATE_BYTES] ^= 0x02; + shadow(state); + } + return i * RATE_BYTES + rem; +} + +// XOR buffers src1 and src2 into buffer dest (all buffers contain n bytes). +void xor_bytes(unsigned char* dest, const unsigned char* src1, + const unsigned char* src2, unsigned long long n) { + for ( unsigned long long i = 0; i < n; i++) { + dest[i] = src1[i] ^ src2[i]; + } +} diff --git a/spook/Implementations/crypto_aead/spook128mu512v2/opt_c/s1p.h b/spook/Implementations/crypto_aead/spook128mu512v2/opt_c/s1p.h new file mode 100644 index 0000000..314f86a --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128mu512v2/opt_c/s1p.h @@ -0,0 +1,47 @@ +/* MIT License + * + * Copyright (c) 2019 Gaëtan Cassiers + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#ifndef _H_S1P_H_ +#define _H_S1P_H_ + +#include "parameters.h" + +// Size of the P parameter +#define P_NBYTES 16 + +void s1p_encrypt(unsigned char *c, unsigned long long *clen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *m, unsigned long long mlen, + const unsigned char *k, const unsigned char *p, + const unsigned char *n); + +int s1p_decrypt(unsigned char *m, unsigned long long *mlen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *c, unsigned long long clen, + const unsigned char *k, const unsigned char *p, + const unsigned char *n); + +void init_keys(const unsigned char **k, unsigned char p[P_NBYTES], + const unsigned char *k_glob); + +#endif //_H_S1P_H_ diff --git a/spook/Implementations/crypto_aead/spook128mu512v2/opt_c/shadow_32bit.c b/spook/Implementations/crypto_aead/spook128mu512v2/opt_c/shadow_32bit.c new file mode 100644 index 0000000..fb79619 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128mu512v2/opt_c/shadow_32bit.c @@ -0,0 +1,53 @@ +/* MIT + * + * Copyright (c) 2019 Gaëtan Cassiers + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#include +#include +#include "primitives.h" + +#define SHADOW +#include "primitives.c" + +#define CLYDE_128_NS 6 // Number of steps +#define CLYDE_128_NR 2 * CLYDE_128_NS // Number of rounds +#define SHADOW_NS 6 // Number of steps +#define SHADOW_NR 2 * SHADOW_NS // Number of roundsv +void shadow(shadow_state state) { + uint32_t lfsr =0xf8737400; // LFSR for round constant + set_poly_xtime(0x101); + set_poly_lfsr(0xc5); + for (unsigned int s = 0; s < SHADOW_NS; s++) { + #pragma GCC unroll 0 + for (unsigned int b = 0; b < MLS_BUNDLES; b++){ + sbox_layer(state[b]); + lbox(&state[b][0], &state[b][1]); + lbox(&state[b][2], &state[b][3]); + + state[b][1] ^= lfsr; + lfsr = update_lfsr(lfsr); + sbox_layer(state[b]); + } + dbox_mls_layer(state,&lfsr); + + } +} diff --git a/spook/Implementations/crypto_aead/spook128mu512v2/opt_c/utils.c b/spook/Implementations/crypto_aead/spook128mu512v2/opt_c/utils.c new file mode 100644 index 0000000..6ce3172 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128mu512v2/opt_c/utils.c @@ -0,0 +1,44 @@ +/* Spook Reference Implementation v1 + * + * Written in 2019 at UCLouvain (Belgium) by Olivier Bronchain, Gaetan Cassiers + * and Charles Momin. + * To the extent possible under law, the author(s) have dedicated all copyright + * and related and neighboring rights to this software to the public domain + * worldwide. This software is distributed without any warranty. + * + * You should have received a copy of the CC0 Public Domain Dedication along with + * this software. If not, see . + */ +#include + +#include "utils.h" + +// XOR buffers src1 and src2 into buffer dest (all buffers contain n bytes). +void xor_bytes(unsigned char* dest, const unsigned char* src1, + const unsigned char* src2, unsigned long long n) { + for (unsigned long long i = 0; i < n; i++) { + dest[i] = src1[i] ^ src2[i]; + } +} + +// Rotate right x by amount c. +// We use right rotation of integers for the lboxes while the specification +// tells left rotation of bitstrings due to the bitsting -> integer +// little-endian mapping used in Spook. +//uint32_t rotr(uint32_t x, unsigned int c) { return (x >> c) | (x << (32 - c)); } + +// Convert 4 bytes into a uint32. Bytes are in little-endian. +uint32_t le32u_dec(const unsigned char bytes[4]) { + uint32_t res = 0; + for (unsigned int col = 0; col < 4; col++) { + res |= ((uint32_t)bytes[col]) << 8 * col; + } + return res; +} + +// Convert a uint32 into 4 bytes. Bytes are in little-endian. +void le32u_enc(unsigned char bytes[4], uint32_t x) { + for (unsigned int i = 0; i < 4; i++) { + bytes[i] = x >> 8 * i; + } +} diff --git a/spook/Implementations/crypto_aead/spook128mu512v2/opt_c/utils.h b/spook/Implementations/crypto_aead/spook128mu512v2/opt_c/utils.h new file mode 100644 index 0000000..c69647d --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128mu512v2/opt_c/utils.h @@ -0,0 +1,26 @@ +/* Spook Reference Implementation v1 + * + * Written in 2019 at UCLouvain (Belgium) by Olivier Bronchain, Gaetan Cassiers + * and Charles Momin. + * To the extent possible under law, the author(s) have dedicated all copyright + * and related and neighboring rights to this software to the public domain + * worldwide. This software is distributed without any warranty. + * + * You should have received a copy of the CC0 Public Domain Dedication along with + * this software. If not, see . + */ +#ifndef _H_UTILS_H_ +#define _H_UTILS_H_ + +#include + +void xor_bytes(unsigned char* dest, const unsigned char* src1, + const unsigned char* src2, unsigned long long n); + +//uint32_t rotr(uint32_t x, unsigned int c); + +uint32_t le32u_dec(const unsigned char bytes[4]); + +void le32u_enc(unsigned char bytes[4], uint32_t x); + +#endif // _H_UTILS_H_ diff --git a/spook/Implementations/crypto_aead/spook128mu512v2/ref/COPYING b/spook/Implementations/crypto_aead/spook128mu512v2/ref/COPYING new file mode 100644 index 0000000..0e259d4 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128mu512v2/ref/COPYING @@ -0,0 +1,121 @@ +Creative Commons Legal Code + +CC0 1.0 Universal + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS + PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM + THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED + HEREUNDER. + +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer +exclusive Copyright and Related Rights (defined below) upon the creator +and subsequent owner(s) (each and all, an "owner") of an original work of +authorship and/or a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for +the purpose of contributing to a commons of creative, cultural and +scientific works ("Commons") that the public can reliably and without fear +of later claims of infringement build upon, modify, incorporate in other +works, reuse and redistribute as freely as possible in any form whatsoever +and for any purposes, including without limitation commercial purposes. +These owners may contribute to the Commons to promote the ideal of a free +culture and the further production of creative, cultural and scientific +works, or to gain reputation or greater distribution for their Work in +part through the use and efforts of others. + +For these and/or other purposes and motivations, and without any +expectation of additional consideration or compensation, the person +associating CC0 with a Work (the "Affirmer"), to the extent that he or she +is an owner of Copyright and Related Rights in the Work, voluntarily +elects to apply CC0 to the Work and publicly distribute the Work under its +terms, with knowledge of his or her Copyright and Related Rights in the +Work and the meaning and intended legal effect of CC0 on those rights. + +1. Copyright and Related Rights. A Work made available under CC0 may be +protected by copyright and related or neighboring rights ("Copyright and +Related Rights"). Copyright and Related Rights include, but are not +limited to, the following: + + i. the right to reproduce, adapt, distribute, perform, display, + communicate, and translate a Work; + ii. moral rights retained by the original author(s) and/or performer(s); +iii. publicity and privacy rights pertaining to a person's image or + likeness depicted in a Work; + iv. rights protecting against unfair competition in regards to a Work, + subject to the limitations in paragraph 4(a), below; + v. rights protecting the extraction, dissemination, use and reuse of data + in a Work; + vi. database rights (such as those arising under Directive 96/9/EC of the + European Parliament and of the Council of 11 March 1996 on the legal + protection of databases, and under any national implementation + thereof, including any amended or successor version of such + directive); and +vii. other similar, equivalent or corresponding rights throughout the + world based on applicable law or treaty, and any national + implementations thereof. + +2. Waiver. To the greatest extent permitted by, but not in contravention +of, applicable law, Affirmer hereby overtly, fully, permanently, +irrevocably and unconditionally waives, abandons, and surrenders all of +Affirmer's Copyright and Related Rights and associated claims and causes +of action, whether now known or unknown (including existing as well as +future claims and causes of action), in the Work (i) in all territories +worldwide, (ii) for the maximum duration provided by applicable law or +treaty (including future time extensions), (iii) in any current or future +medium and for any number of copies, and (iv) for any purpose whatsoever, +including without limitation commercial, advertising or promotional +purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each +member of the public at large and to the detriment of Affirmer's heirs and +successors, fully intending that such Waiver shall not be subject to +revocation, rescission, cancellation, termination, or any other legal or +equitable action to disrupt the quiet enjoyment of the Work by the public +as contemplated by Affirmer's express Statement of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason +be judged legally invalid or ineffective under applicable law, then the +Waiver shall be preserved to the maximum extent permitted taking into +account Affirmer's express Statement of Purpose. In addition, to the +extent the Waiver is so judged Affirmer hereby grants to each affected +person a royalty-free, non transferable, non sublicensable, non exclusive, +irrevocable and unconditional license to exercise Affirmer's Copyright and +Related Rights in the Work (i) in all territories worldwide, (ii) for the +maximum duration provided by applicable law or treaty (including future +time extensions), (iii) in any current or future medium and for any number +of copies, and (iv) for any purpose whatsoever, including without +limitation commercial, advertising or promotional purposes (the +"License"). The License shall be deemed effective as of the date CC0 was +applied by Affirmer to the Work. Should any part of the License for any +reason be judged legally invalid or ineffective under applicable law, such +partial invalidity or ineffectiveness shall not invalidate the remainder +of the License, and in such case Affirmer hereby affirms that he or she +will not (i) exercise any of his or her remaining Copyright and Related +Rights in the Work or (ii) assert any associated claims and causes of +action with respect to the Work, in either case contrary to Affirmer's +express Statement of Purpose. + +4. Limitations and Disclaimers. + + a. No trademark or patent rights held by Affirmer are waived, abandoned, + surrendered, licensed or otherwise affected by this document. + b. Affirmer offers the Work as-is and makes no representations or + warranties of any kind concerning the Work, express, implied, + statutory or otherwise, including without limitation warranties of + title, merchantability, fitness for a particular purpose, non + infringement, or the absence of latent or other defects, accuracy, or + the present or absence of errors, whether or not discoverable, all to + the greatest extent permissible under applicable law. + c. Affirmer disclaims responsibility for clearing rights of other persons + that may apply to the Work or any use thereof, including without + limitation any person's Copyright and Related Rights in the Work. + Further, Affirmer disclaims responsibility for obtaining any necessary + consents, permissions or other rights required for any use of the + Work. + d. Affirmer understands and acknowledges that Creative Commons is not a + party to this document and has no duty or obligation with respect to + this CC0 or use of the Work. diff --git a/spook/Implementations/crypto_aead/spook128mu512v2/ref/api.h b/spook/Implementations/crypto_aead/spook128mu512v2/ref/api.h new file mode 100644 index 0000000..2c0c26e --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128mu512v2/ref/api.h @@ -0,0 +1,5 @@ +#define CRYPTO_KEYBYTES 32 +#define CRYPTO_NPUBBYTES 16 +#define CRYPTO_NSECBYTES 0 +#define CRYPTO_ABYTES 16 +#define CRYPTO_NOOVERLAP 1 diff --git a/spook/Implementations/crypto_aead/spook128mu512v2/ref/crypto_aead.h b/spook/Implementations/crypto_aead/spook128mu512v2/ref/crypto_aead.h new file mode 100644 index 0000000..53ec4a7 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128mu512v2/ref/crypto_aead.h @@ -0,0 +1,12 @@ + +int crypto_aead_encrypt(unsigned char* c, unsigned long long* clen, + const unsigned char* m, unsigned long long mlen, + const unsigned char* ad, unsigned long long adlen, + const unsigned char* nsec, const unsigned char* npub, + const unsigned char* k); + +int crypto_aead_decrypt(unsigned char* m, unsigned long long* mlen, + unsigned char* nsec, const unsigned char* c, + unsigned long long clen, const unsigned char* ad, + unsigned long long adlen, const unsigned char* npub, + const unsigned char* k); diff --git a/spook/Implementations/crypto_aead/spook128mu512v2/ref/encrypt.c b/spook/Implementations/crypto_aead/spook128mu512v2/ref/encrypt.c new file mode 100644 index 0000000..ff54a62 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128mu512v2/ref/encrypt.c @@ -0,0 +1,57 @@ +/* Spook Reference Implementation v1 + * + * Written in 2019 at UCLouvain (Belgium) by Olivier Bronchain, Gaetan Cassiers + * and Charles Momin. + * To the extent possible under law, the author(s) have dedicated all copyright + * and related and neighboring rights to this software to the public domain + * worldwide. This software is distributed without any warranty. + * + * You should have received a copy of the CC0 Public Domain Dedication along + * with this software. If not, see + * . + */ +#include "crypto_aead.h" +#include "s1p.h" + +#ifdef __GNUC__ +#define UNUSED __attribute__((unused)) +#else +#define UNUSED +#endif + +// Spook encryption. +int +crypto_aead_encrypt(unsigned char* c, + unsigned long long* clen, + const unsigned char* m, + unsigned long long mlen, + const unsigned char* ad, + unsigned long long adlen, + const unsigned char* nsec UNUSED, + const unsigned char* npub, + const unsigned char* k) +{ + unsigned char p[P_NBYTES]; + const unsigned char* k_priv; + init_keys(&k_priv, p, k); + s1p_encrypt(c, clen, ad, adlen, m, mlen, k_priv, p, npub); + return 0; +} + +// Spook encryption. +int +crypto_aead_decrypt(unsigned char* m, + unsigned long long* mlen, + unsigned char* nsec UNUSED, + const unsigned char* c, + unsigned long long clen, + const unsigned char* ad, + unsigned long long adlen, + const unsigned char* npub, + const unsigned char* k) +{ + unsigned char p[P_NBYTES]; + const unsigned char* k_priv; + init_keys(&k_priv, p, k); + return s1p_decrypt(m, mlen, ad, adlen, c, clen, k_priv, p, npub); +} diff --git a/spook/Implementations/crypto_aead/spook128mu512v2/ref/parameters.h b/spook/Implementations/crypto_aead/spook128mu512v2/ref/parameters.h new file mode 100644 index 0000000..6b3d1a2 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128mu512v2/ref/parameters.h @@ -0,0 +1,30 @@ +/* Spook Reference Implementation v1 + * + * Written in 2019 at UCLouvain (Belgium) by Olivier Bronchain, Gaetan Cassiers + * and Charles Momin. + * To the extent possible under law, the author(s) have dedicated all copyright + * and related and neighboring rights to this software to the public domain + * worldwide. This software is distributed without any warranty. + * + * You should have received a copy of the CC0 Public Domain Dedication along with + * this software. If not, see . + */ +#ifndef _PARAMETERS_H_ +#define _PARAMETERS_H_ + +#define MULTI_USER 1 +#define SMALL_PERM 0 + +#if MULTI_USER +#define KEYBYTES 32 +#else +#define KEYBYTES 16 +#endif + +#include "api.h" + +#if (KEYBYTES != CRYPTO_KEYBYTES) +#error "Wrong parameters in api.h" +#endif + +#endif //_PARAMETERS_H_ diff --git a/spook/Implementations/crypto_aead/spook128mu512v2/ref/primitives.c b/spook/Implementations/crypto_aead/spook128mu512v2/ref/primitives.c new file mode 100644 index 0000000..3c8806a --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128mu512v2/ref/primitives.c @@ -0,0 +1,381 @@ +/* Spook Reference Implementation v1 + * + * Written in 2019 at UCLouvain (Belgium) by Olivier Bronchain, Gaetan Cassiers + * and Charles Momin. + * To the extent possible under law, the author(s) have dedicated all copyright + * and related and neighboring rights to this software to the public domain + * worldwide. This software is distributed without any warranty. + * + * You should have received a copy of the CC0 Public Domain Dedication along + * with this software. If not, see + * . + */ +#include +#include + +#include "primitives.h" +#include "utils.h" + +#define CLYDE_128_NS 6 // Number of steps +#define CLYDE_128_NR 2 * CLYDE_128_NS // Number of rounds +#define SHADOW_NS 6 // Number of steps +#define SHADOW_NR 2 * SHADOW_NS // Number of rounds + +#define LS_ROWS 4 // Rows in the LS design +#define LS_ROW_BYTES 4 // number of bytes per row in the LS design +#define MLS_BUNDLES \ + (SHADOW_NBYTES / (LS_ROWS * LS_ROW_BYTES)) // Bundles in the mLS design + +static void +sbox_layer(uint32_t* state); +static void +sbox_layer_inv(uint32_t* state); +static void +lbox(uint32_t* x, uint32_t* y); +static void +lbox_inv(uint32_t* x, uint32_t* y); +static void +lbox_layer(uint32_t* state); +static void +lbox_layer_inv(uint32_t* state); +static void +bytes2state(uint32_t* state, const unsigned char* byte); +static void +state2bytes(unsigned char* bytes, const uint32_t* state); +static void +xor_ls_state(uint32_t* state, const uint32_t* x); +static void +add_rc(uint32_t state[LS_ROWS], unsigned int round); +static void +tweakey(unsigned char tk[3][CLYDE128_NBYTES], + const unsigned char* k, + const unsigned char* t); +static uint32_t +update_lfsr(uint32_t lfsr); +static uint32_t +xtime(uint32_t x); +static void +dbox_mls_layer(uint32_t state[MLS_BUNDLES][LS_ROWS]); + +// Round constants for Clyde-128 +static const uint32_t clyde128_rc[CLYDE_128_NR][LS_ROWS] = { + { 1, 0, 0, 0 }, // 0 + { 0, 1, 0, 0 }, // 1 + { 0, 0, 1, 0 }, // 2 + { 0, 0, 0, 1 }, // 3 + { 1, 1, 0, 0 }, // 4 + { 0, 1, 1, 0 }, // 5 + { 0, 0, 1, 1 }, // 6 + { 1, 1, 0, 1 }, // 7 + { 1, 0, 1, 0 }, // 8 + { 0, 1, 0, 1 }, // 9 + { 1, 1, 1, 0 }, // 10 + { 0, 1, 1, 1 } // 11 +}; +static const uint32_t CST_LFSR_POLY_MASK = 0xc5; +// Initial value of the constant generation polynomial +// This is the result of applying the LFSR function 1024 times +// the value 0x1. +static const uint32_t CST_LFSR_INIT_VALUE = 0xf8737400; +// Row on which to XOR the constant in Shadow Round A +static const uint32_t SHADOW_RA_CST_ROW = 1; +// Bundle on which to XOR the constant in Shadow Round B +static const uint32_t SHADOW_RB_CST_BUNDLE = 0; + +// Apply a S-box layer to a Clyde-128 state. +static void +sbox_layer(uint32_t* state) +{ + uint32_t y1 = (state[0] & state[1]) ^ state[2]; + uint32_t y0 = (state[3] & state[0]) ^ state[1]; + uint32_t y3 = (y1 & state[3]) ^ state[0]; + uint32_t y2 = (y0 & y1) ^ state[3]; + state[0] = y0; + state[1] = y1; + state[2] = y2; + state[3] = y3; +} + +// Apply a inverse S-box layer to a Clyde-128 state. +static void +sbox_layer_inv(uint32_t* state) +{ + uint32_t y3 = (state[0] & state[1]) ^ state[2]; + uint32_t y0 = (state[1] & y3) ^ state[3]; + uint32_t y1 = (y3 & y0) ^ state[0]; + uint32_t y2 = (y0 & y1) ^ state[1]; + state[0] = y0; + state[1] = y1; + state[2] = y2; + state[3] = y3; +} + +// Apply a L-box to a pair of Clyde-128 rows. +static void +lbox(uint32_t* x, uint32_t* y) +{ + uint32_t a, b, c, d; + a = *x ^ rotr(*x, 12); + b = *y ^ rotr(*y, 12); + a = a ^ rotr(a, 3); + b = b ^ rotr(b, 3); + a = a ^ rotr(*x, 17); + b = b ^ rotr(*y, 17); + c = a ^ rotr(a, 31); + d = b ^ rotr(b, 31); + a = a ^ rotr(d, 26); + b = b ^ rotr(c, 25); + a = a ^ rotr(c, 15); + b = b ^ rotr(d, 15); + *x = a; + *y = b; +} + +// Apply a inverse L-box to a pair of Clyde-128 rows. +static void +lbox_inv(uint32_t* x, uint32_t* y) +{ + uint32_t a, b, c, d; + a = *x ^ rotr(*x, 25); + b = *y ^ rotr(*y, 25); + c = *x ^ rotr(a, 31); + d = *y ^ rotr(b, 31); + c = c ^ rotr(a, 20); + d = d ^ rotr(b, 20); + a = c ^ rotr(c, 31); + b = d ^ rotr(d, 31); + c = c ^ rotr(b, 26); + d = d ^ rotr(a, 25); + a = a ^ rotr(c, 17); + b = b ^ rotr(d, 17); + a = rotr(a, 16); + b = rotr(b, 16); + *x = a; + *y = b; +} + +// Apply a L-box layer to a Clyde-128 state. +static void +lbox_layer(uint32_t* state) +{ + lbox(&state[0], &state[1]); + lbox(&state[2], &state[3]); +} + +// Apply inverse L-box layer to a Clyde-128 state. +static void +lbox_layer_inv(uint32_t* state) +{ + lbox_inv(&state[0], &state[1]); + lbox_inv(&state[2], &state[3]); +} + +// Convert bytes to a Clyde-128 state. Bytes are in ordered by row (first-row +// first), and in little-endian order inside a row. +static void +bytes2state(uint32_t* state, const unsigned char* bytes) +{ + for (unsigned int row = 0; row < LS_ROWS; row++) { + state[row] = le32u_dec(bytes + 4 * row); + } +} + +// Convert Clyde-128 state to bytes. Bytes are in ordered by row (first-row +// first), and in little-endian order inside a row. +static void +state2bytes(unsigned char* bytes, const uint32_t* state) +{ + for (unsigned int row = 0; row < LS_ROWS; row++) { + le32u_enc(bytes + 4 * row, state[row]); + } +} + +// XOR the Clyde-128 state x into state. +static void +xor_ls_state(uint32_t* state, const uint32_t* x) +{ + for (unsigned int i = 0; i < LS_ROWS; i++) { + state[i] ^= x[i]; + } +} + +// XOR the Clyde-128 round constant of given round into state, left shifting +// each constant by shift. +static void +add_rc(uint32_t state[LS_ROWS], unsigned int round) +{ + for (unsigned int i = 0; i < LS_ROWS; i++) { + state[i] ^= clyde128_rc[round][i]; + } +} + +// Key schedule for Clyde-128. Generate 3 Clyde-128 states from key k and tweak +// t. +static void +tweakey(unsigned char tk[3][CLYDE128_NBYTES], + const unsigned char* k, + const unsigned char* t) +{ + const unsigned char* t0 = t; + const unsigned char* t1 = t + CLYDE128_NBYTES / 2; + unsigned char tx[CLYDE128_NBYTES / 2]; + xor_bytes(tx, t0, t1, CLYDE128_NBYTES / 2); + // TK[0] + xor_bytes(tk[0], k, t, CLYDE128_NBYTES); + // TK[1] + xor_bytes(tk[1], k, tx, CLYDE128_NBYTES / 2); + xor_bytes(tk[1] + CLYDE128_NBYTES / 2, + k + CLYDE128_NBYTES / 2, + t0, + CLYDE128_NBYTES / 2); + // TK[2] + xor_bytes(tk[2], k, t1, CLYDE128_NBYTES / 2); + xor_bytes(tk[2] + CLYDE128_NBYTES / 2, + k + CLYDE128_NBYTES / 2, + tx, + CLYDE128_NBYTES / 2); +} + +// Update (by 1 step) the constant generation LFSR +static uint32_t +update_lfsr(uint32_t lfsr) +{ + // Arithmetic shift left, equivalent to + // uint32_t b_out_ext = (lfsr & 0x80000000) ? 0xffffffff : 0x0; + // but constant-time. + uint32_t b_out_ext = (uint32_t)(((int32_t)lfsr) >> 31); + return (lfsr << 1) ^ (b_out_ext & CST_LFSR_POLY_MASK); +} + +// Multiplication by polynomial x modulo x^32+x^8+1 +static uint32_t +xtime(uint32_t x) +{ + uint32_t b = x >> 31; + return (x << 1) ^ b ^ (b << 8); +} + +// Apply a D-box layer to a Shadow state. +static void +dbox_mls_layer(uint32_t state[MLS_BUNDLES][LS_ROWS]) +{ + for (unsigned int row = 0; row < LS_ROWS; row++) { +#if SMALL_PERM + uint32_t x0 = state[0][row]; + uint32_t x1 = state[1][row]; + uint32_t x2 = state[2][row]; + uint32_t a = x0 ^ x1; + uint32_t b = x0 ^ x2; + uint32_t c = x1 ^ b; + uint32_t d = a ^ xtime(b); + state[0][row] = b ^ d; + state[1][row] = c; + state[2][row] = d; +#else + state[0][row] ^= state[1][row]; + state[2][row] ^= state[3][row]; + state[1][row] ^= state[2][row]; + state[3][row] ^= xtime(state[0][row]); + state[1][row] = xtime(state[1][row]); + state[0][row] ^= state[1][row]; + state[2][row] ^= xtime(state[3][row]); + state[1][row] ^= state[2][row]; + state[3][row] ^= state[0][row]; +#endif // SMALL_PERM + } +} + +// Clyde-128 TBC. +// Output in buffer c the TBC for block m, tweak t and key k. +// All buffers have length CLYDE128_NBYTES. +void +clyde128_encrypt(unsigned char* c, + const unsigned char* m, + const unsigned char* t, + const unsigned char* k) +{ + // Key schedule + unsigned char tkb[3][CLYDE128_NBYTES]; + uint32_t tk[3][LS_ROWS]; + tweakey(tkb, k, t); + bytes2state(tk[0], tkb[0]); + bytes2state(tk[1], tkb[1]); + bytes2state(tk[2], tkb[2]); + + // Datapath + uint32_t state[LS_ROWS]; + bytes2state(state, m); + xor_ls_state(state, tk[0]); + for (unsigned int s = 0; s < CLYDE_128_NS; s++) { + for (unsigned int rho = 0; rho < 2; rho++) { + unsigned int r = 2 * s + rho; + sbox_layer(state); + lbox_layer(state); + add_rc(state, r); + } + xor_ls_state(state, tk[(s + 1) % 3]); + } + + state2bytes(c, state); +} + +// Clyde-128 inverse TBC. +// Output in buffer m the inverse TBC for block c, tweak t and key k. +// All buffers have length CLYDE128_NBYTES. +void +clyde128_decrypt(unsigned char* m, + const unsigned char* c, + const unsigned char* t, + const unsigned char* k) +{ + // Key schedule + unsigned char tkb[3][CLYDE128_NBYTES]; + uint32_t tk[3][LS_ROWS]; + tweakey(tkb, k, t); + bytes2state(tk[0], tkb[0]); + bytes2state(tk[1], tkb[1]); + bytes2state(tk[2], tkb[2]); + + // Datapath + uint32_t state[LS_ROWS]; + bytes2state(state, c); + for (int s = CLYDE_128_NS - 1; s >= 0; s--) { + xor_ls_state(state, tk[(s + 1) % 3]); + for (int rho = 1; rho >= 0; rho--) { + unsigned int r = 2 * s + rho; + add_rc(state, r); + lbox_layer_inv(state); + sbox_layer_inv(state); + } + } + xor_ls_state(state, tk[0]); + state2bytes(m, state); +} + +// Shadow permutation. Updates x (array of SHADOW_NBYTES bytes). +void +shadow(unsigned char* x) +{ + uint32_t state[MLS_BUNDLES][LS_ROWS]; + uint32_t lfsr = CST_LFSR_INIT_VALUE; + for (unsigned int b = 0; b < MLS_BUNDLES; b++) { + bytes2state(state[b], x + (b * SHADOW_NBYTES / MLS_BUNDLES)); + } + for (unsigned int s = 0; s < SHADOW_NS; s++) { + for (unsigned int b = 0; b < MLS_BUNDLES; b++) { + sbox_layer(state[b]); + lbox_layer(state[b]); + state[b][SHADOW_RA_CST_ROW] ^= lfsr; + lfsr = update_lfsr(lfsr); + sbox_layer(state[b]); + } + dbox_mls_layer(state); + for (unsigned int row = 0; row < LS_ROWS; row++) { + state[SHADOW_RB_CST_BUNDLE][row] ^= lfsr; + lfsr = update_lfsr(lfsr); + } + } + for (unsigned int b = 0; b < MLS_BUNDLES; b++) { + state2bytes(x + (b * SHADOW_NBYTES / MLS_BUNDLES), state[b]); + } +} diff --git a/spook/Implementations/crypto_aead/spook128mu512v2/ref/primitives.h b/spook/Implementations/crypto_aead/spook128mu512v2/ref/primitives.h new file mode 100644 index 0000000..3a1467d --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128mu512v2/ref/primitives.h @@ -0,0 +1,41 @@ +/* Spook Reference Implementation v1 + * + * Written in 2019 at UCLouvain (Belgium) by Olivier Bronchain, Gaetan Cassiers + * and Charles Momin. + * To the extent possible under law, the author(s) have dedicated all copyright + * and related and neighboring rights to this software to the public domain + * worldwide. This software is distributed without any warranty. + * + * You should have received a copy of the CC0 Public Domain Dedication along + * with this software. If not, see + * . + */ +#ifndef _H_PRIMITIVES_H_ +#define _H_PRIMITIVES_H_ + +#include "parameters.h" + +#define CLYDE128_NBYTES 16 + +#if SMALL_PERM +#define SHADOW_NBYTES 48 +#else +#define SHADOW_NBYTES 64 +#endif // SMALL_PERM + +void +clyde128_encrypt(unsigned char* c, + const unsigned char* m, + const unsigned char* t, + const unsigned char* k); + +void +clyde128_decrypt(unsigned char* m, + const unsigned char* c, + const unsigned char* t, + const unsigned char* k); + +void +shadow(unsigned char* x); + +#endif //_H_PRIMITIVES_H_ diff --git a/spook/Implementations/crypto_aead/spook128mu512v2/ref/s1p.c b/spook/Implementations/crypto_aead/spook128mu512v2/ref/s1p.c new file mode 100644 index 0000000..4576c39 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128mu512v2/ref/s1p.c @@ -0,0 +1,188 @@ +/* Spook Reference Implementation v1 + * + * Written in 2019 at UCLouvain (Belgium) by Olivier Bronchain, Gaetan Cassiers + * and Charles Momin. + * To the extent possible under law, the author(s) have dedicated all copyright + * and related and neighboring rights to this software to the public domain + * worldwide. This software is distributed without any warranty. + * + * You should have received a copy of the CC0 Public Domain Dedication along with + * this software. If not, see . + */ +#include +#include +#include + +#include "s1p.h" +#include "parameters.h" +#include "primitives.h" +#include "utils.h" + +#define CAPACITY_BYTES 32 +#define RATE_BYTES (SHADOW_NBYTES - CAPACITY_BYTES) + +// Working mode for block compression. +typedef enum { + AD, + PLAINTEXT, + CIPHERTEXT +} compress_mode; + +static void compress_block(unsigned char *state, unsigned char *out, + const unsigned char *d, compress_mode mode, + unsigned long long offset, unsigned long long n); + +static unsigned long long compress_data(unsigned char *state, + unsigned char *out, + const unsigned char *d, + unsigned long long dlen, + compress_mode mode); + +static void init_sponge_state(unsigned char state[SHADOW_NBYTES], + const unsigned char *k, const unsigned char *p, + const unsigned char *n); + +void init_keys(const unsigned char **k, unsigned char p[P_NBYTES], + const unsigned char *k_glob) { + *k = k_glob; +#if MULTI_USER + memcpy(p, k_glob + CLYDE128_NBYTES, P_NBYTES); + p[P_NBYTES - 1] &= 0x7F; // set last p bit to 0 + p[P_NBYTES - 1] |= 0x40; // set next to last p bit to 0 +#else + memset(p, 0, P_NBYTES); +#endif // MULTI_USER +} + +static void init_sponge_state(unsigned char state[SHADOW_NBYTES], + const unsigned char *k, const unsigned char *p, + const unsigned char *n) { + // init state + memset(state, 0, SHADOW_NBYTES); + memcpy(state + CLYDE128_NBYTES, p, P_NBYTES); + memcpy(state + CLYDE128_NBYTES + P_NBYTES, n, CRYPTO_NPUBBYTES); + // TBC + unsigned char padded_nonce[CLYDE128_NBYTES] = { 0 }; + memcpy(padded_nonce, n, CRYPTO_NPUBBYTES); + unsigned char *b = state; + clyde128_encrypt(b, padded_nonce, p, k); + // initial permutation + shadow(state); +} + +void s1p_encrypt(unsigned char *c, unsigned long long *clen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *m, unsigned long long mlen, + const unsigned char *k, const unsigned char *p, + const unsigned char *n) { + // permutation state + unsigned char state[SHADOW_NBYTES]; + init_sponge_state(state, k, p, n); + + // compress associated data + compress_data(state, NULL, ad, adlen, AD); + + // compress message + unsigned long long c_bytes = 0; + if (mlen > 0) { + state[RATE_BYTES] ^= 0x01; + c_bytes = compress_data(state, c, m, mlen, PLAINTEXT); + } + + // tag + state[CLYDE128_NBYTES + CLYDE128_NBYTES - 1] |= 0x80; + clyde128_encrypt(c + c_bytes, state, state + CLYDE128_NBYTES, k); + *clen = c_bytes + CLYDE128_NBYTES; +} + +int s1p_decrypt(unsigned char *m, unsigned long long *mlen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *c, unsigned long long clen, + const unsigned char *k, const unsigned char *p, + const unsigned char *n) { + // permutation state + unsigned char state[SHADOW_NBYTES]; + init_sponge_state(state, k, p, n); + + // compress associated data + compress_data(state, NULL, ad, adlen, AD); + + // compress message + unsigned long long m_bytes = 0; + if (clen > CLYDE128_NBYTES) { + state[RATE_BYTES] ^= 0x01; + m_bytes = compress_data(state, m, c, clen - CLYDE128_NBYTES, CIPHERTEXT); + } + + // NOTE: We use here so-called "inverse-based tag verification", + // that is, we apply the inverse Clyde TBC to the tag extracted from + // the ciphertext and check the result against the output of Shadow. + // This way of verifying the tag is interesting in some specific cases + // such as side-channel protected implementations. + // In general implementations, the tag verification SHOULD be done in a + // more conventional way: encrypting the output of Shadow with Clyde and + // verifying the tag against the resulting value. + // This is more efficient as it does not require to implement the inverse + // Clyde. + // For more details, see the Spook specification at https://spook.dev. + unsigned char inv_tag[CLYDE128_NBYTES]; + unsigned char *u = state; + state[(2 * CLYDE128_NBYTES) - 1] |= 0x80; + clyde128_decrypt(inv_tag, c + m_bytes, state + CLYDE128_NBYTES, k); + int tag_ok = 1; + for (int i = 0; i < CLYDE128_NBYTES; i++) { + tag_ok &= (u[i] == inv_tag[i]); + } + if (tag_ok) { + *mlen = m_bytes; + return 0; + } else { + // Reset output buffer to avoid unintended unauthenticated plaintext + // release. + memset(m, 0, clen - CLYDE128_NBYTES); + *mlen = 0; + return -1; + } +} + +// Compress a block into the state. Length of the block is n and buffers are +// accessed starting at offset. Input block is d, output is written into +// buffer out if mode is PLAINTEXT or CIPHERTEXT. +// Only the XOR operation is performed, not XORing of padding constants. +static void compress_block(unsigned char *state, unsigned char *out, + const unsigned char *d, compress_mode mode, + unsigned long long offset, unsigned long long n) { + if (mode == CIPHERTEXT) { + xor_bytes(out + offset, state, d + offset, n); + memcpy(state, d + offset, n); + } else { + xor_bytes(state, state, d + offset, n); + if (mode == PLAINTEXT) { + memcpy(out + offset, state, n); + } + } +} + +// Compress a block into the state (in duplex-sponge mode). +// Input data buffer is d with length dlen. +// Output is written into buffer out if mode is PLAINTEXT or CIPHERTEXT. +// Padding is handled if needed. +static unsigned long long compress_data(unsigned char *state, + unsigned char *out, + const unsigned char *d, + unsigned long long dlen, + compress_mode mode) { + unsigned long long i; + for (i = 0; i < dlen / RATE_BYTES; i++) { + compress_block(state, out, d, mode, i * RATE_BYTES, RATE_BYTES); + shadow(state); + } + int rem = dlen % RATE_BYTES; + if (rem != 0) { + compress_block(state, out, d, mode, i * RATE_BYTES, rem); + state[rem] ^= 0x01; + state[RATE_BYTES] ^= 0x02; + shadow(state); + } + return i * RATE_BYTES + rem; +} diff --git a/spook/Implementations/crypto_aead/spook128mu512v2/ref/s1p.h b/spook/Implementations/crypto_aead/spook128mu512v2/ref/s1p.h new file mode 100644 index 0000000..2018568 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128mu512v2/ref/s1p.h @@ -0,0 +1,35 @@ +/* Spook Reference Implementation v1 + * + * Written in 2019 at UCLouvain (Belgium) by Olivier Bronchain, Gaetan Cassiers + * and Charles Momin. + * To the extent possible under law, the author(s) have dedicated all copyright + * and related and neighboring rights to this software to the public domain + * worldwide. This software is distributed without any warranty. + * + * You should have received a copy of the CC0 Public Domain Dedication along with + * this software. If not, see . + */ +#ifndef _H_S1P_H_ +#define _H_S1P_H_ + +#include "parameters.h" + +// Size of the P parameter +#define P_NBYTES 16 + +void s1p_encrypt(unsigned char *c, unsigned long long *clen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *m, unsigned long long mlen, + const unsigned char *k, const unsigned char *p, + const unsigned char *n); + +int s1p_decrypt(unsigned char *m, unsigned long long *mlen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *c, unsigned long long clen, + const unsigned char *k, const unsigned char *p, + const unsigned char *n); + +void init_keys(const unsigned char **k, unsigned char p[P_NBYTES], + const unsigned char *k_glob); + +#endif //_H_S1P_H_ diff --git a/spook/Implementations/crypto_aead/spook128mu512v2/ref/utils.c b/spook/Implementations/crypto_aead/spook128mu512v2/ref/utils.c new file mode 100644 index 0000000..e390c04 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128mu512v2/ref/utils.c @@ -0,0 +1,57 @@ +/* Spook Reference Implementation v1 + * + * Written in 2019 at UCLouvain (Belgium) by Olivier Bronchain, Gaetan Cassiers + * and Charles Momin. + * To the extent possible under law, the author(s) have dedicated all copyright + * and related and neighboring rights to this software to the public domain + * worldwide. This software is distributed without any warranty. + * + * You should have received a copy of the CC0 Public Domain Dedication along + * with this software. If not, see + * . + */ +#include + +#include "utils.h" + +// XOR buffers src1 and src2 into buffer dest (all buffers contain n bytes). +void +xor_bytes(unsigned char* dest, + const unsigned char* src1, + const unsigned char* src2, + unsigned long long n) +{ + for (unsigned long long i = 0; i < n; i++) { + dest[i] = src1[i] ^ src2[i]; + } +} + +// Rotate right x by amount c. +// We use right rotation of integers for the lboxes while the specification +// tells left rotation of bitstrings due to the bitsting -> integer +// little-endian mapping used in Spook. +uint32_t +rotr(uint32_t x, unsigned int c) +{ + return (x >> c) | (x << (32 - c)); +} + +// Convert 4 bytes into a uint32. Bytes are in little-endian. +uint32_t +le32u_dec(const unsigned char bytes[4]) +{ + uint32_t res = 0; + for (unsigned int col = 0; col < 4; col++) { + res |= ((uint32_t)bytes[col]) << 8 * col; + } + return res; +} + +// Convert a uint32 into 4 bytes. Bytes are in little-endian. +void +le32u_enc(unsigned char bytes[4], uint32_t x) +{ + for (unsigned int i = 0; i < 4; i++) { + bytes[i] = x >> 8 * i; + } +} diff --git a/spook/Implementations/crypto_aead/spook128mu512v2/ref/utils.h b/spook/Implementations/crypto_aead/spook128mu512v2/ref/utils.h new file mode 100644 index 0000000..013cdd6 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128mu512v2/ref/utils.h @@ -0,0 +1,33 @@ +/* Spook Reference Implementation v1 + * + * Written in 2019 at UCLouvain (Belgium) by Olivier Bronchain, Gaetan Cassiers + * and Charles Momin. + * To the extent possible under law, the author(s) have dedicated all copyright + * and related and neighboring rights to this software to the public domain + * worldwide. This software is distributed without any warranty. + * + * You should have received a copy of the CC0 Public Domain Dedication along + * with this software. If not, see + * . + */ +#ifndef _H_UTILS_H_ +#define _H_UTILS_H_ + +#include + +void +xor_bytes(unsigned char* dest, + const unsigned char* src1, + const unsigned char* src2, + unsigned long long n); + +uint32_t +rotr(uint32_t x, unsigned int c); + +uint32_t +le32u_dec(const unsigned char bytes[4]); + +void +le32u_enc(unsigned char bytes[4], uint32_t x); + +#endif // _H_UTILS_H_ diff --git a/spook/Implementations/crypto_aead/spook128su384v2/LWC_AEAD_KAT_128_128.txt b/spook/Implementations/crypto_aead/spook128su384v2/LWC_AEAD_KAT_128_128.txt new file mode 100644 index 0000000..85b560c --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128su384v2/LWC_AEAD_KAT_128_128.txt @@ -0,0 +1,7623 @@ +Count = 1 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = +CT = CA73E89A64062AE4C4847442EEA54A6F + +Count = 2 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 00 +CT = A5CB23C35BBCFF1A50DA7221422581EA + +Count = 3 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 0001 +CT = B42A58438FA7DB22844F4E6D7FD825C6 + +Count = 4 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102 +CT = 2A977D9EA6BEFB233CDB4B54026B8839 + +Count = 5 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 00010203 +CT = 7DCACE1B48DFF0714C63C2094272EFEA + +Count = 6 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 0001020304 +CT = 83C6FC5686F3D5533161BCC2D4C8C2D3 + +Count = 7 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405 +CT = 2DD48CE398946C77672A24DBA993F6D6 + +Count = 8 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 00010203040506 +CT = 6131BA827CBD6B349A13ED6EA76D6047 + +Count = 9 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 0001020304050607 +CT = 52E9F5A1C680FDE8E2C0D02C8C63C9E0 + +Count = 10 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708 +CT = D45EAAB4FA2CB611590952D0EFB10F8B + +Count = 11 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 00010203040506070809 +CT = 76E4C10AB59F58ECD48B8C659E21F928 + +Count = 12 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A +CT = 0F0BA2D7292E1A55738C6571EEFE8BAE + +Count = 13 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B +CT = C8F837F4060FC2754406AB02CEF1A800 + +Count = 14 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C +CT = BA31B2DFAAA63F62CA2866A5072EFD53 + +Count = 15 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D +CT = 632D265E8809D529ED85E9C8262DDD29 + +Count = 16 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E +CT = CF95653DA3F9A492881C11BF52734AE9 + +Count = 17 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F +CT = 12EE82D32BC34BB30E69BBD0B1B29033 + +Count = 18 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F10 +CT = B9A6801FA4D2B0FEF11F4B4D283F12A6 + +Count = 19 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 848650633DFA13BA92DB2E9AA870EDA4 + +Count = 20 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 42A29A1203DB907C74812DFC4871BD1A + +Count = 21 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = EFBDFA6E9A1AD62A90A3968D5C4784EA + +Count = 22 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 1E7352AC6E2B3288E5B1297D0AF302B6 + +Count = 23 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = B5C4C1F60331CDA20C6849DDEFCF3574 + +Count = 24 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 6125BB116C7AEC6E685A3304319246D0 + +Count = 25 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 9E13260A5A8128409CEF58EF6703781F + +Count = 26 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = E99ACB90D54CFF49EAD98350103B52AE + +Count = 27 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 10797F7BE01A2AFE6B63B40A5D31BE05 + +Count = 28 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 6CD9DE7061501FA5E8A21AF36568F49D + +Count = 29 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 5940FB16DCF6F3BFFFCB8C45D0C0490A + +Count = 30 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 78035C75276A55C3778F402FBA445700 + +Count = 31 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = E284494AFDC8EA65CEFFBB68D34C6C0E + +Count = 32 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = F1F48A78BFA1E97888AC36EE3AE77036 + +Count = 33 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = A223DE6D6D988B0D3328D273DD983B8D + +Count = 34 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = +CT = BCAB96CC62CDFF904526664FE4B4D7C765 + +Count = 35 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 00 +CT = 487E025131AAC728411F2D0A09867A7608 + +Count = 36 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 0001 +CT = 5FA34913F23D376D1A3EBF2C40BEDFAD8F + +Count = 37 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102 +CT = 5D83D763B74138CD079EB4ED632C82FB8D + +Count = 38 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 00010203 +CT = 3CA332A481674CCF2BFE9B95B847F677C8 + +Count = 39 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 0001020304 +CT = 69F1FDACC19D82C6008450142CBE7E6A81 + +Count = 40 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405 +CT = 68429C8414E6E1D3A0271737B4A3E9F633 + +Count = 41 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 00010203040506 +CT = 172AF11EF050457572F0691821A5D0C98C + +Count = 42 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 0001020304050607 +CT = 06E343D1DB8E8A9CC4FE36696AF0BF772D + +Count = 43 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708 +CT = 3051B505CA6A811CCD4FC4005F51FD177A + +Count = 44 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 00010203040506070809 +CT = 43B80534F20E52EB3A5785D8B3269981F7 + +Count = 45 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A +CT = 38DF1529BCB5D70DD47400164480C0856E + +Count = 46 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B +CT = F4C503902F0DF7DCA1BDB5D7A1F6696905 + +Count = 47 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C +CT = 87E5DD29EC6116C9B3C33DA90CC0CB4746 + +Count = 48 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D +CT = E83BCF98D2B372768F4C02CB0AE8B77517 + +Count = 49 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E +CT = 489201C9B2FD50D2CA65D6B337830EBAF9 + +Count = 50 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F +CT = A7BA9941D0701FA786279C0BD1B56AFB47 + +Count = 51 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 177CB85B9F707C5E8127E8CEE30042F4E8 + +Count = 52 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = CDABEC38D08397ADDBED295452FA276274 + +Count = 53 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = C8E6708A9C60729CA7DFFDDBE14F421644 + +Count = 54 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 05F6E436D85A5918F79F9AB0DC7992C53A + +Count = 55 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 9915F3FF19745EFF7C07EB2143AA67608D + +Count = 56 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 271CE8592743FD99EDEC5F310574F03165 + +Count = 57 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 1421EA6CB3D83FDC777BCE5148C700B429 + +Count = 58 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 2524011041B3960ABD53FD87CE1BBD821E + +Count = 59 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 9EF58F9A652F03D7E7B565371138F83EB4 + +Count = 60 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 277A80FD687A04504C053F1B46EEFE1B03 + +Count = 61 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 7C4BE040573EB2989753488C3FF865B2D9 + +Count = 62 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 3B49C9F686274316634BA61647647D65AE + +Count = 63 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = B54E4FA16D1F34E68C23955C3DE2AD78A6 + +Count = 64 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = F8CA1B6494FAF75B5890B6914F87E3D85F + +Count = 65 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 85739FA17650E1387355E6927F66E6B6C7 + +Count = 66 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 0D865E29B95001FF9E857563B10119918F + +Count = 67 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = +CT = BCBC07AB6AC558620E23C9996D0B071441E6 + +Count = 68 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 00 +CT = 489FBE68112D411349A7C83DB9088D4B4869 + +Count = 69 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 0001 +CT = 5FCD4EDE087FDE3A90A8DD310EEB9DC82D70 + +Count = 70 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102 +CT = 5DC8E75CBBE28B7274073C81F3DC9A3F8152 + +Count = 71 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 00010203 +CT = 3C070560BC5F922082002CA3F6791F62AE81 + +Count = 72 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 0001020304 +CT = 6919EEBBC4965A7C2F49397D66B0F6AE270C + +Count = 73 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405 +CT = 688F8F364EBC5722E98908F62DA1260085FD + +Count = 74 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 00010203040506 +CT = 172C357906AEA8D7099E88818C8CAE7EDE34 + +Count = 75 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 0001020304050607 +CT = 0696CA93AAD59CEC532F3ECAF5AF5B87C0B7 + +Count = 76 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708 +CT = 30BA1087276ACA9E9824A1803E1F69D07FAF + +Count = 77 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 00010203040506070809 +CT = 435524A60D87569283FEACBBB6595EC62EAA + +Count = 78 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A +CT = 38DCDA8DB346327C4E574216FD8A2B01ED72 + +Count = 79 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B +CT = F44B76ED4575806DB6E4246178B27982761D + +Count = 80 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C +CT = 87386F53613188ACE79B03E74067B996E25C + +Count = 81 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D +CT = E8A7D53CCD0A2A1B48865954A7C837311E18 + +Count = 82 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E +CT = 483E0996C6B957DDC1593BD2BB3EA423EE1B + +Count = 83 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F +CT = A7ECDE3DE5EF8E0E2C3F4EC1AFAA7CFE8006 + +Count = 84 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 1786827B0B4143E8EFB45F30628C4A97A95E + +Count = 85 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = CD71D773AB672019AE69051E93F0513C4A17 + +Count = 86 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = C89578DC8B5D0C2F285B989BAC1233874678 + +Count = 87 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 05A745DE36AE8FB773ED5F5CEAC9ED80BFD8 + +Count = 88 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 9950AAE55F065D53261AF83165554B2E7BBE + +Count = 89 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 270ECC8CF20C21056C68B5974422621D17E7 + +Count = 90 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 1481D4A0EF0D586426CD04CD05D32F1F018A + +Count = 91 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 258BD4ACED9240D9046E379993B7F2795442 + +Count = 92 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 9EB1998EB653D314AC7C546056CA479BD318 + +Count = 93 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 271E44F8CC79A5E8BCF7E81AFD299DACC9A9 + +Count = 94 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 7CE46C685B03E74535DDB75C8FFC17FB23AB + +Count = 95 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 3B1BC11D8193C020846EC1B333CAC93508BA + +Count = 96 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = B5DFDDB1F675535BE2899152E3C13D72CEFF + +Count = 97 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = F8A2C4F44471923167302DC16F315C4687EF + +Count = 98 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 850ECB37D22316567BBD266E49437BDD9348 + +Count = 99 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 0D4DD547B7E52EA0389A26CF42716AB2076A + +Count = 100 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = +CT = BCBC3D77ED9038272A8131EEC1BFF393A63C8D + +Count = 101 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 00 +CT = 489F131901FDB62C73FBA9DFC391548A3C1D5B + +Count = 102 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 0001 +CT = 5FCD744AF2CB9D121D081029E5F608CF6AFB20 + +Count = 103 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102 +CT = 5DC87F89A59A672927B376FDBA062549B6849A + +Count = 104 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 00010203 +CT = 3C07E386EF9CBE8905E9DBC88FB467EA9E14A8 + +Count = 105 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 0001020304 +CT = 691997AF29F736B3057F4B5DB14389FA2E9F39 + +Count = 106 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405 +CT = 688F0E397E101E12C774B55EDED072A470A3D6 + +Count = 107 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 00010203040506 +CT = 172CCE012FE05F2674292C3BC9C20AA03CA628 + +Count = 108 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 0001020304050607 +CT = 06965BB3D5BC41D5FE6A4D2FA5806616C3CDB9 + +Count = 109 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708 +CT = 30BAA1BDDA4968E98CDCDB4BF94A0C51C8159F + +Count = 110 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 00010203040506070809 +CT = 435560D5797912D836191AEA762806EC22C7B1 + +Count = 111 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A +CT = 38DCDD62DEE30526F6EF812C64D0E910EC016B + +Count = 112 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B +CT = F44BBE705ABD743B7EDF4794660FB057832A43 + +Count = 113 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C +CT = 8738EADF68A2B57513981AF4F4F158C53CC32F + +Count = 114 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D +CT = E8A79BBF61693C69C581487432159AD1DE5025 + +Count = 115 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E +CT = 483E32145CE10B182C6D5657A657479F6838EE + +Count = 116 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F +CT = A7EC70B48B7420A6D6524EF119EB28267B4AA6 + +Count = 117 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 1786DD62E3D8A526DCE6A29FD031341592E840 + +Count = 118 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = CD71CF80FFF203EDA804C1A6424D60E81B0155 + +Count = 119 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = C8953979AAA7B2F178BBFF09F9B4D80BBEBD01 + +Count = 120 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 05A7CB2BB437B262957E269BB5B383677CB9B2 + +Count = 121 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 995034F16FD7374BB2DF36F991DC8657E03E3B + +Count = 122 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 270E1230DE0DEDC4363CB19A47AEDAD6CD617F + +Count = 123 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 14817D775A51058F1D24DD39331E745C5BB131 + +Count = 124 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 258B9CCF417582890EDB3CD7BC9806FB781B2E + +Count = 125 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 9EB117A198308A4868D6E20A377C9BFFE74C2E + +Count = 126 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 271EACF86BC1B42845FF3F6AA963A90891BFD0 + +Count = 127 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 7CE4C0D01CB2F5EF6A37D24B435D34D6DC3FCF + +Count = 128 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 3B1B69A22DDEA3DC4F94002DFEEB9050783E3A + +Count = 129 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = B5DFDE870A382C57E88549FB4B6EFC2BF0B8DF + +Count = 130 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = F8A21CF373BCAD9555B7BA9D27C3CB4B709602 + +Count = 131 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 850ED09D2E54E9093FE7CB00FF4B6297ADAE86 + +Count = 132 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 0D4DD6B36F279A9C38E86789D61EBC0DAD31C3 + +Count = 133 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = +CT = BCBC3DBA2E656DD51EEEE987534D27ACCA5E589A + +Count = 134 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 00 +CT = 489F132928B7A769756423AE3E563A567B26EA79 + +Count = 135 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 0001 +CT = 5FCD74E36BF7C8B141BE36AC2C6386ACC6028FA5 + +Count = 136 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102 +CT = 5DC87F607B982D5A56AD911C8502B6D6CCC06EEB + +Count = 137 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 00010203 +CT = 3C07E3D9D6FD68A74770596A09A2CE8362FE97EB + +Count = 138 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 0001020304 +CT = 691997749FDDC110068F8E24B3FB87E09C8FDF2A + +Count = 139 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405 +CT = 688F0E892BA41181FA62434E9894E01012A9A996 + +Count = 140 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 00010203040506 +CT = 172CCE47B8B8A102070B1D2555592DEE1631A9F8 + +Count = 141 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 0001020304050607 +CT = 06965B4BAF13D7B1CA5029B5C16D80DAA1034C28 + +Count = 142 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708 +CT = 30BAA1AC328BE9A1FE32077BF2527DC44914A3CB + +Count = 143 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 00010203040506070809 +CT = 435560A0CD14822632993C4A78194957EB9E54CA + +Count = 144 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A +CT = 38DCDDF8F123F9F6AEEAFA92A989170A7D9C0F08 + +Count = 145 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B +CT = F44BBEBB9C11CEA01C78DA474176CDE1B89E1E12 + +Count = 146 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C +CT = 8738EA8FACC8155DFC12BC8F306D6CEBAA6D8AF4 + +Count = 147 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D +CT = E8A79B1F37E70439976910001CF7B8DA98A3A435 + +Count = 148 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E +CT = 483E32CCA6DB9CAB1D00B5169BB92CF33DC27FCF + +Count = 149 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F +CT = A7EC70B0C1F59AB12D1BADB2259F5328EA0ACF5C + +Count = 150 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 1786DD66AB39B79B00F7967728CE90FD1FEA479E + +Count = 151 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = CD71CF4D99874C51E4152C2452C45460AEE11D36 + +Count = 152 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = C89539D73FCEB3B159131E2772058BCE78F2BCA9 + +Count = 153 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 05A7CBCA691176113BA90CFA8E2E8F005579B91B + +Count = 154 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 99503411740CB4999E9BF417418F4276D3B492BE + +Count = 155 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 270E12561192AB8203FC19242B9A37B3B42195F3 + +Count = 156 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 14817DA11DD35EB1EC19D81764047DD41A8A0A50 + +Count = 157 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 258B9CFF9554F07A4B29B31783DF603E4A7F39CB + +Count = 158 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 9EB11718E7A293A04EDA27848F7B16B8AAA2E13E + +Count = 159 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 271EACDBB563AF55E60442558AFB1CAF02682A7C + +Count = 160 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 7CE4C0AFE504EB53B75B8C97545210F01B08975B + +Count = 161 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 3B1B692CA89F684DA493AE48D7A058EED97B598E + +Count = 162 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = B5DFDE2B8A73709D82AB123C03D0DBAB5D0D0011 + +Count = 163 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = F8A21C7A7EDA9B0136885353691645686646762E + +Count = 164 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 850ED01BE8708511FF535D2E0127E58996BEDF4B + +Count = 165 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 0D4DD61760238B466C83F810F0648DF34D7A0252 + +Count = 166 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = +CT = BCBC3DBA060228E64D61DC18FB861ED76CEC37CA4F + +Count = 167 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 00 +CT = 489F132929A3B1CBAA700B7F418A72F1CB8BDC7D60 + +Count = 168 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 0001 +CT = 5FCD74E3D787E184283876BB44FE366E68530742CC + +Count = 169 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102 +CT = 5DC87F60E8EB21ED2272853CF2AA9D9CB4193C2808 + +Count = 170 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 00010203 +CT = 3C07E3D982A8804887B688102E5B8E408B5971745E + +Count = 171 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 0001020304 +CT = 69199774FB8157EC09ECEA197CA19C999433F0F108 + +Count = 172 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405 +CT = 688F0E898D9705D61E32AF02F023AD052B260B25BB + +Count = 173 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 00010203040506 +CT = 172CCE47A47AB005CBC9A458E59CF0B392027AC3D3 + +Count = 174 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 0001020304050607 +CT = 06965B4B14CE6382705F482B84D0FCC7A5D59CE536 + +Count = 175 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708 +CT = 30BAA1ACB64D03AAB35B0A73036306BD35C3FC8414 + +Count = 176 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 00010203040506070809 +CT = 435560A07DA981B24E1F4BFDDB62C198086C834DC3 + +Count = 177 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A +CT = 38DCDDF896DBAD5F7B28551A8249532F259C5BE3F0 + +Count = 178 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B +CT = F44BBEBBE2177015AEEE892595FD57D2FD3F7DC00A + +Count = 179 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C +CT = 8738EA8FF05C064792E5B912CA96DBC8B3E81DE0A5 + +Count = 180 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D +CT = E8A79B1FA18AC894D7929924C6C4477E2F477A8149 + +Count = 181 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E +CT = 483E32CC245316E5107B45B72A1ACE94CF18E21081 + +Count = 182 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F +CT = A7EC70B0469DC638D07379E2F7EE520C252C8665D9 + +Count = 183 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 1786DD66301957438C19BF0C20B182BE812CC7F5A5 + +Count = 184 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = CD71CF4DE1B547AC151D1ECAADF8AC1713FD1C2CC7 + +Count = 185 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = C89539D7BABF6C16FB2896558AA02B8332900F07FE + +Count = 186 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 05A7CBCAE58512F6931AE9944279DAC9B6967FB3F7 + +Count = 187 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 99503411050337B4E926C1F82935DE5EADAC5DC079 + +Count = 188 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 270E125660E84042415719609C035E130189BB7584 + +Count = 189 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 14817DA18E5F6523C8CC9ED1B20F81B88FB421AC00 + +Count = 190 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 258B9CFF8CD8131DA7E3CF6EDAD6F2E6356327CFD6 + +Count = 191 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 9EB117187223BE006DCF27051189590500AF76E9DC + +Count = 192 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 271EACDB37E3D45BD98320BBED9835ACF2AB254011 + +Count = 193 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 7CE4C0AFFB1FFA45BB168E58D43429BE2B5F59663A + +Count = 194 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 3B1B692CE750A844AF2E2706DCACDADB08DDD47F67 + +Count = 195 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = B5DFDE2BAD948C7A9ED7B7AC47C786973007A8BE28 + +Count = 196 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = F8A21C7A75243D9712A68B6135847C5D7191411CC9 + +Count = 197 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 850ED01B3C61102F1B5FDFD08E2D1648A9C8FBD10B + +Count = 198 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 0D4DD617843E38A413A9EE9D28C91228DE806090F3 + +Count = 199 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = +CT = BCBC3DBA06AC6563154213394F80F27D0AA4D1AB96BB + +Count = 200 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 00 +CT = 489F132929D4B85277B6D8983E7D93B702AC1604E8A9 + +Count = 201 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 0001 +CT = 5FCD74E3D73FD390209ECE2EC1A63B1B780C563EDE0B + +Count = 202 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102 +CT = 5DC87F60E85F9225ADFFFEC28844989AA6A50DC02369 + +Count = 203 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 00010203 +CT = 3C07E3D98257F2605568B0DDEE93065D20A5A0F3D10A + +Count = 204 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 0001020304 +CT = 69199774FBCE60FD5020DA761F75260CFA5A3D46DEA3 + +Count = 205 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405 +CT = 688F0E898D8AEA8BBA0DBD9A4C7FE1D3E340358A5F77 + +Count = 206 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 00010203040506 +CT = 172CCE47A4D734A7DF754122ADDD75763187F6F36DCD + +Count = 207 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 0001020304050607 +CT = 06965B4B142E7A68BCF7DB5B869A44BC7815673A5740 + +Count = 208 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708 +CT = 30BAA1ACB6C4C230F7866A38EEA3E7DC479512A2F12D + +Count = 209 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 00010203040506070809 +CT = 435560A07DC13773067A87751D035BEF766D43619C83 + +Count = 210 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A +CT = 38DCDDF89667182F3CACAEBEE7D7F2FF31A7665D253E + +Count = 211 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B +CT = F44BBEBBE2C16631A9E7676D3F3264F58B1FB664B2E1 + +Count = 212 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C +CT = 8738EA8FF07AEE9C9E0E4E265F9031AFA620066D621B + +Count = 213 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D +CT = E8A79B1FA11C5B9F15D3172A76202B3B7EE425DCA94E + +Count = 214 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E +CT = 483E32CC243E72C67C0283D87D761DE3F340C674B380 + +Count = 215 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F +CT = A7EC70B046CAF338CA34F2B1D0A60E0DE6AA0483E63D + +Count = 216 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 1786DD6630C51E7C6201AC9317A8FEDA352866E9F55F + +Count = 217 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = CD71CF4DE16338AE4E0F0C68273956F038ACD66389D7 + +Count = 218 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = C89539D7BA912D4B5ED48E0808D5439C5C70217C9BD0 + +Count = 219 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 05A7CBCAE53775BA7FBBB222F73C4E22D4960FEA15E4 + +Count = 220 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 9950341105A657B6C863AE6D2B9A107E0EEC83B0FC01 + +Count = 221 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 270E125660EB1B98DADA92F2DFBBECF262DAA34030A8 + +Count = 222 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 14817DA18EA2594813D47203E97CE2C5142C4A4AB468 + +Count = 223 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 258B9CFF8CF7B8B48A2621119CC12C087AA12BB7A9EB + +Count = 224 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 9EB1171872618A448BC0357FCAB08D15A43381446858 + +Count = 225 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 271EACDB373FD69C533D173BFCE195FC41ABAA8F8534 + +Count = 226 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 7CE4C0AFFB85AAFE12F8C5AF8E1E983168CF6C7A907B + +Count = 227 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 3B1B692CE740DB4C1E9E54A0B76D76AC0DE14C3C3DB4 + +Count = 228 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = B5DFDE2BAD1C19FEF98A6853EBE732A75A7DA36B49B9 + +Count = 229 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = F8A21C7A75ACAC125A90F1DBB4D4A69A0C3B918D4414 + +Count = 230 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 850ED01B3C4DC18DF1009B332FB9A6FE2CE25EDAB152 + +Count = 231 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 0D4DD61784204FD18BF6FF17CD469FA8E5B9F870037C + +Count = 232 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = +CT = BCBC3DBA06ACC4892DB48E687B7092277DC7B40254F936 + +Count = 233 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 00 +CT = 489F132929D475C59A567BD3EBBD578C0C01FAF89AC0F7 + +Count = 234 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 0001 +CT = 5FCD74E3D73FDCB9983C3BE5AFACD06742E8648EFC9BFA + +Count = 235 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102 +CT = 5DC87F60E85F0213CE485AA2D2C702C9231D3A451FAF03 + +Count = 236 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 00010203 +CT = 3C07E3D98257297E734D050493F58EC3F77E964B1C4A26 + +Count = 237 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 0001020304 +CT = 69199774FBCE912DF6CEC2080C23C18F0B06AC52E20D50 + +Count = 238 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405 +CT = 688F0E898D8A50913DDF9C3A20D95AEAF5860974546311 + +Count = 239 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 00010203040506 +CT = 172CCE47A4D7B769F436DCD6BBC09DEC4D126C96A81A17 + +Count = 240 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 0001020304050607 +CT = 06965B4B142E184BBF20395F5A0512478CF72FB4895D6A + +Count = 241 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708 +CT = 30BAA1ACB6C4C19BD0A852551BD963F0FDD3D3F0D7709F + +Count = 242 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 00010203040506070809 +CT = 435560A07DC1785B873D4E7D951034ADC335D4904722DC + +Count = 243 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A +CT = 38DCDDF8966748D40BFD6DFF68BE48BF8E2CEFACC40A4B + +Count = 244 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B +CT = F44BBEBBE2C11EA05CB8D2FAD39EC984A1978F71633D31 + +Count = 245 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C +CT = 8738EA8FF07A03E7DE9E3563D1DEE2878C5D709EC6A385 + +Count = 246 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D +CT = E8A79B1FA11C29698D3CA9CC4574CFC08F0ADDBDD66F0C + +Count = 247 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E +CT = 483E32CC243E9EB8F28855DB83C4A673D9454D6EE40496 + +Count = 248 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F +CT = A7EC70B046CA9266941B55A5F679A7E4C18A36C65C6866 + +Count = 249 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 1786DD6630C5BD9F5B16DFC74132AA093948DF9331B62C + +Count = 250 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = CD71CF4DE163C0FF991713BBB971CD9437F72CAC726296 + +Count = 251 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = C89539D7BA911E02D36D3F770B5C3A161C3E5CFCE2CC67 + +Count = 252 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 05A7CBCAE537C0B05E6BEDA029796AE970689B759CAB7F + +Count = 253 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 9950341105A62479E081A0BE9D411B43CDDEBA9A397E7C + +Count = 254 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 270E125660EB64FE4033B8BE99982F1276CC8434A86B8F + +Count = 255 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 14817DA18EA2BAA9F08C02447E9BCF2FBD1D917A887AAD + +Count = 256 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 258B9CFF8CF7EC406D08A78E6E5BAABFFE36C50D8F9DA4 + +Count = 257 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 9EB1171872616CD180AAC966FEEB7770F09DE438E0A75C + +Count = 258 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 271EACDB373F2946C48B031FA47F9B9A203987F4CDE176 + +Count = 259 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 7CE4C0AFFB85233404F39836BE6B457C38F95A4C5B90B7 + +Count = 260 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 3B1B692CE74058918B33AF2428E0034D00E0F8EA1D9AC8 + +Count = 261 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = B5DFDE2BAD1C036C26EAA387746965ACA0342A13386B11 + +Count = 262 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = F8A21C7A75ACA8802FFC180CD4E866DF9F85DF185189AC + +Count = 263 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 850ED01B3C4D11B68DAAE36420A0CA7377980291CE16B3 + +Count = 264 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 0D4DD6178420885924E28FBE9570CEA77DE4F40F8D129E + +Count = 265 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = +CT = BCBC3DBA06ACC4CD931AC21C67C5244A735A957D264D798D + +Count = 266 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 00 +CT = 489F132929D475DEC69975F91CBE321F4F03E3DE74FFAE2B + +Count = 267 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 0001 +CT = 5FCD74E3D73FDCCA6F5A34D6B0E0572F9561C383D8643982 + +Count = 268 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102 +CT = 5DC87F60E85F0270411BBB8D2631FDBF3E0F9597BBCFD417 + +Count = 269 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 00010203 +CT = 3C07E3D982572983BCA288FBABB3659DAE675DAA25135FA5 + +Count = 270 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 0001020304 +CT = 69199774FBCE912C0C7B34E3297018FF69144A502F07D478 + +Count = 271 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405 +CT = 688F0E898D8A50015D7EC8B066B78FA7EB1968936BBFA85F + +Count = 272 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 00010203040506 +CT = 172CCE47A4D7B70F0DD35893E3AC5091FDAE2DF477CCACD5 + +Count = 273 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 0001020304050607 +CT = 06965B4B142E18DA734C5890D26E1E8163A50B565DE498F0 + +Count = 274 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708 +CT = 30BAA1ACB6C4C11B659067E62B0DFAE133A0658A1BD527F0 + +Count = 275 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 00010203040506070809 +CT = 435560A07DC178C15FC2BB9EBE99D527FD052A33CCC3B889 + +Count = 276 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A +CT = 38DCDDF8966748BE7598F63DF5023F29CBA96D2A8FE7E441 + +Count = 277 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B +CT = F44BBEBBE2C11E6233350D94237FB21A3133A48741325DF4 + +Count = 278 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C +CT = 8738EA8FF07A03FFAF1160C270A7C602646F28259DD9D642 + +Count = 279 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D +CT = E8A79B1FA11C2934F63B129EABED2A6CA5A1088FAF67F786 + +Count = 280 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E +CT = 483E32CC243E9ECF43C19A553D7618FA124619D1E98B0E25 + +Count = 281 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F +CT = A7EC70B046CA924C20F9F25FAEBA6C77412CB1D98DBB7A24 + +Count = 282 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 1786DD6630C5BDFF54DF8964E965B4130ED950309CE42B6C + +Count = 283 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = CD71CF4DE163C0D6CDB82029589B2E537A4895D32F56D758 + +Count = 284 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = C89539D7BA911E50EBF0AB32DF5596B0CE4D523BA603418C + +Count = 285 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 05A7CBCAE537C07BDE98A1E58578B842AC4E0A17D7C4CCF5 + +Count = 286 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 9950341105A624A19E8F21EAF6ADE4BACEBFC05660AA47A0 + +Count = 287 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 270E125660EB64E7EF1B77F798A4762FB4AC45C2D90375E1 + +Count = 288 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 14817DA18EA2BAE7C5BFC812F1A2FFC5527616FD59443D51 + +Count = 289 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 258B9CFF8CF7ECA8FCB367E29F7C355ED592F446B9B08190 + +Count = 290 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 9EB1171872616C96D4108EFA3185EA7E19CAD8DA01C2D7A3 + +Count = 291 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 271EACDB373F29B478678FF9F5B8186ECB229866BDFA84F2 + +Count = 292 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 7CE4C0AFFB85234F152A236F8D1F853C3782FF72CCE56513 + +Count = 293 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 3B1B692CE74058F061F766250877EE6E4CF4E0BE0B7E029E + +Count = 294 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = B5DFDE2BAD1C03B123472D182D4A10C0B734D476929DBD33 + +Count = 295 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = F8A21C7A75ACA8EBED4C75A22D3C8398606CED4AA617B7DA + +Count = 296 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 850ED01B3C4D113842C41B951DACC9126286A2A1CC6D05D6 + +Count = 297 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 0D4DD617842088F7E51381BBD51B3533D1213A0D38C2D491 + +Count = 298 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = +CT = BCBC3DBA06ACC4CDFF49714EDDE3D9B5535ACAB6DDBC23AA38 + +Count = 299 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 00 +CT = 489F132929D475DE63E73DA84562BB94D8ED38377F9D88FA25 + +Count = 300 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 0001 +CT = 5FCD74E3D73FDCCAB6C23576173118D1621305AD989162F636 + +Count = 301 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102 +CT = 5DC87F60E85F02700270ACEE2F202FD9014C6FBE15DF9A6AC7 + +Count = 302 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 00010203 +CT = 3C07E3D9825729831EC679770E9CDF250420CDBAAFD830D001 + +Count = 303 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 0001020304 +CT = 69199774FBCE912CC641EB1E81B5830E510302C02250D4A024 + +Count = 304 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405 +CT = 688F0E898D8A50017BDDA1CCCCB8BA47E9571DA36E7EE6F7C4 + +Count = 305 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 00010203040506 +CT = 172CCE47A4D7B70FECCF0919EF4C006CB6F3C434FFE489C3B7 + +Count = 306 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 0001020304050607 +CT = 06965B4B142E18DA2F320458D2B2672BCB8653F1EAA1EB1893 + +Count = 307 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708 +CT = 30BAA1ACB6C4C11BACDD2C2EB7C4C92D63A8DA3AE4D53A1801 + +Count = 308 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 00010203040506070809 +CT = 435560A07DC178C1BAFD8A632F277A5AC63A4DCE2FBF05A429 + +Count = 309 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A +CT = 38DCDDF8966748BEB7692D6598EE93300DAEB0C89E2B9910D0 + +Count = 310 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B +CT = F44BBEBBE2C11E620C9028BBF55BEC703E447527DD32D5C130 + +Count = 311 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C +CT = 8738EA8FF07A03FFA4FA0418416A9E707D546BC4AE7411A91A + +Count = 312 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D +CT = E8A79B1FA11C2934E7EC4018990E9F1ABE6D26AF5BEB96781F + +Count = 313 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E +CT = 483E32CC243E9ECF8AF214955C2F05F0496473D4D0D56B6475 + +Count = 314 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F +CT = A7EC70B046CA924C2FABA8F286B4C56C908D64BAB3736E092B + +Count = 315 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 1786DD6630C5BDFFD428513856F6BAB4AAD5FBB88EDF6EADEA + +Count = 316 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = CD71CF4DE163C0D6BB043DC95308B220D2EACE4519DC8689B5 + +Count = 317 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = C89539D7BA911E505684207266D7FD088239B71AD8079992B8 + +Count = 318 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 05A7CBCAE537C07B01805C9998288876CE3384D15D6EDEC6A4 + +Count = 319 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 9950341105A624A103E2D3F6EE8054C080FFF7A6862C54DB75 + +Count = 320 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 270E125660EB64E7509D116B3D804866798127E72C6640C9A0 + +Count = 321 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 14817DA18EA2BAE71586846BE2236697A1BBE8571857C82CBB + +Count = 322 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 258B9CFF8CF7ECA8198941CBFA223C21F2A8D586967C8906AC + +Count = 323 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 9EB1171872616C960D21B60251C30BA1AC0464A5718270306B + +Count = 324 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 271EACDB373F29B40B84A026A31F72FABC6C77D30E38DED87B + +Count = 325 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 7CE4C0AFFB85234FBF3A8B0C6A96247C96754EB652AB4627B7 + +Count = 326 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 3B1B692CE74058F012606092E5A259A613CC7ADC83BBB0815C + +Count = 327 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = B5DFDE2BAD1C03B190962733B8E8458568660929B3FCA6E3BC + +Count = 328 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = F8A21C7A75ACA8EBC3F28F3BADFF59855F8F2F7CF49EC4E258 + +Count = 329 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 850ED01B3C4D113851E8A8015337C6C8CC15FA528B5538E1CB + +Count = 330 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 0D4DD617842088F79B924F7F3F6D0E3A177EEC134767BB2EA9 + +Count = 331 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = +CT = BCBC3DBA06ACC4CDFF351B2D209F2797CDCAA2922486982EC04B + +Count = 332 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 00 +CT = 489F132929D475DE636857C4C46FA0DA923495C041606EC04DE3 + +Count = 333 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 0001 +CT = 5FCD74E3D73FDCCAB659009CF7A41CF2A56E6991422249C1E15D + +Count = 334 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102 +CT = 5DC87F60E85F0270020EDFB4B2F8E73B3F868F8AB45B0CEB993D + +Count = 335 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 00010203 +CT = 3C07E3D9825729831E7BC0F83E4056CFB7B7DCE4D80101C17C93 + +Count = 336 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 0001020304 +CT = 69199774FBCE912CC6AFADCDA2F354FDE9BC365BE520483714FD + +Count = 337 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405 +CT = 688F0E898D8A50017BD228C97128E9DD29612AC6CEDE6EF6A420 + +Count = 338 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 00010203040506 +CT = 172CCE47A4D7B70FECA503448CC4C09B893A0B7091C805AF987F + +Count = 339 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 0001020304050607 +CT = 06965B4B142E18DA2F2E037038BF4034218911416B0E7EBF4C90 + +Count = 340 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708 +CT = 30BAA1ACB6C4C11BACA9BF7AFF3D75CB697770C4695F4EAFACF5 + +Count = 341 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 00010203040506070809 +CT = 435560A07DC178C1BA686745F23A5669ACEBF084BC25A0F9E0AA + +Count = 342 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A +CT = 38DCDDF8966748BEB7272E78BE0EDA00B34B9BB4A1A39BE26687 + +Count = 343 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B +CT = F44BBEBBE2C11E620C3F030C877BFE1EDDDCBCE094F41234A254 + +Count = 344 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C +CT = 8738EA8FF07A03FFA4071C520643CE86E3EC43DD5B7C341923FE + +Count = 345 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D +CT = E8A79B1FA11C2934E73A096E58BFFFF8A883801318A347D2387A + +Count = 346 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E +CT = 483E32CC243E9ECF8A0184EE7AB6813B213B29EB012084B43338 + +Count = 347 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F +CT = A7EC70B046CA924C2FC37F979F7A71DC93642AF0B7C07389ECFA + +Count = 348 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 1786DD6630C5BDFFD4B3C387840CA91D9B9032B6EB1738D436E4 + +Count = 349 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = CD71CF4DE163C0D6BBA71498952C8C2879F4C22BA593C36432FA + +Count = 350 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = C89539D7BA911E5056DF49AF4A5D412130BC5563A85CCED8F7D7 + +Count = 351 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 05A7CBCAE537C07B01BA9A7C374683098E76782BA0059DAB2F4C + +Count = 352 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 9950341105A624A10341AEE0057EC88F71DFA9412F54A2DF316E + +Count = 353 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 270E125660EB64E750CC26137D4A92D153DAE9FE11F7FAD55E67 + +Count = 354 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 14817DA18EA2BAE715A644B73604893E69A4D1F4722C20ED416C + +Count = 355 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 258B9CFF8CF7ECA819E366274BC403452079731BDAE555FABBF6 + +Count = 356 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 9EB1171872616C960DDA45C9E45A4A237CF4A9EDABD18E9E4443 + +Count = 357 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 271EACDB373F29B40BF8E3DC64EB8A7008291CDECC8CF76CA334 + +Count = 358 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 7CE4C0AFFB85234FBFDFA8B050F93CDF3207B788D550A75EBE59 + +Count = 359 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 3B1B692CE74058F012C5F1FC4FF6BD55395E069C71D6E35DB47F + +Count = 360 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = B5DFDE2BAD1C03B1909DAAE3A87EC47C1988CF3FF32D15D2F93F + +Count = 361 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = F8A21C7A75ACA8EBC38C12E10298CC39622B8208183BF14A1785 + +Count = 362 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 850ED01B3C4D1138510C85A5F64C3725293192AA118B474AAF15 + +Count = 363 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 0D4DD617842088F79BFABFBF87FE7E26B21A068E578868E266F4 + +Count = 364 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = +CT = BCBC3DBA06ACC4CDFF35546F077495AEC4EDD604D110EBC2826C6A + +Count = 365 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 00 +CT = 489F132929D475DE63684ECB9E4C0372A25D8814A33C028694A1E1 + +Count = 366 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 0001 +CT = 5FCD74E3D73FDCCAB6595CD6C986B0A0ABEE82800BEE2AB8BF3F54 + +Count = 367 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102 +CT = 5DC87F60E85F0270020E6DF875D50150BEDD305A31DDF18DB2B2C6 + +Count = 368 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 00010203 +CT = 3C07E3D9825729831E7B67092D9BA757AC3BF5643173AEAF908157 + +Count = 369 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 0001020304 +CT = 69199774FBCE912CC6AFAB9F6FA15972E59254301C5A4B9E2A8FA5 + +Count = 370 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405 +CT = 688F0E898D8A50017BD2FF210781730A9BC003ED093BBA38BCD8A3 + +Count = 371 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 00010203040506 +CT = 172CCE47A4D7B70FECA5D453CF5661B59DF622F78755EA550D7F9B + +Count = 372 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 0001020304050607 +CT = 06965B4B142E18DA2F2E2D3E3753B42B9F2D02BEBE039F0B6BEA56 + +Count = 373 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708 +CT = 30BAA1ACB6C4C11BACA9F4ADB64D4A876EC623BED6C74BFBEB7AB6 + +Count = 374 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 00010203040506070809 +CT = 435560A07DC178C1BA68401E28E28F69F58F19572303B5B86BEA5A + +Count = 375 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A +CT = 38DCDDF8966748BEB7271FFD52160597637180A028A2557B052B0C + +Count = 376 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B +CT = F44BBEBBE2C11E620C3F87384D5B65ED0D9BEFBA918F660B3EB27E + +Count = 377 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C +CT = 8738EA8FF07A03FFA407F3AADF0C1ACF8BBBE4CDA87E59C3B252BB + +Count = 378 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D +CT = E8A79B1FA11C2934E73AD94D3DAC0483D5260E8DA83327FB2ABE8E + +Count = 379 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E +CT = 483E32CC243E9ECF8A016DB90F7EC24ADE3AC35EDB0268FB55F6F0 + +Count = 380 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F +CT = A7EC70B046CA924C2FC369317CAC264C2A2D96A9DC125B7D91FB77 + +Count = 381 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 1786DD6630C5BDFFD4B388FB57A7A2D61E1C25EFDFA3F664A1A010 + +Count = 382 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = CD71CF4DE163C0D6BBA73FABCC86B475ED53A614303E4B70F80306 + +Count = 383 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = C89539D7BA911E5056DF017753F6DF230F798C6CA5EC7CDBE5C5C3 + +Count = 384 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 05A7CBCAE537C07B01BAE19B9457E8235CAA1F4ABD5A561E7B1777 + +Count = 385 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 9950341105A624A10341C86AE2A8781EE8E7AC097D79C76B295A27 + +Count = 386 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 270E125660EB64E750CC2ED9133BC92110D768B12DC10ADAA6596E + +Count = 387 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 14817DA18EA2BAE715A6D038437E759A944B53BC9F9E4C6E206CD7 + +Count = 388 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 258B9CFF8CF7ECA819E347B52C071E805B68517CEDE2FB0AB525A9 + +Count = 389 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 9EB1171872616C960DDAB5446A6D48DBC7D60B1DDE596B8D69C0B0 + +Count = 390 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 271EACDB373F29B40BF89ED6DC803876C1005C0EC5A70F791D4AF0 + +Count = 391 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 7CE4C0AFFB85234FBFDF896835C15F0423A452B29A82DD59F0626B + +Count = 392 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 3B1B692CE74058F012C5EA5EC1BDDED81F649FACD572F87FEC1D2B + +Count = 393 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = B5DFDE2BAD1C03B1909DCA16018EFE72B07ACCBB0E9E7C47A19505 + +Count = 394 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = F8A21C7A75ACA8EBC38C77D05E2D9AB5F8E8D401C812C2A9399A86 + +Count = 395 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 850ED01B3C4D1138510CC996CF1A6666AD96A400235C066EB30994 + +Count = 396 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 0D4DD617842088F79BFA533B6A10C9820AA06BECF006320EA00FA8 + +Count = 397 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = +CT = BCBC3DBA06ACC4CDFF355423D0F99BC32C9ABEDAA5C410BD1EA06596 + +Count = 398 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 00 +CT = 489F132929D475DE63684E874DA9243F6336289C2A7EBAFBFB06EC30 + +Count = 399 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 0001 +CT = 5FCD74E3D73FDCCAB6595CA7C1194593A91FE1F408E852D89C7E4A32 + +Count = 400 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102 +CT = 5DC87F60E85F0270020E6DB478AB3D7581B33EBFB77E27B97587C2DB + +Count = 401 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 00010203 +CT = 3C07E3D9825729831E7B67DF582A38AC88A2017A487125F94043EF3C + +Count = 402 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 0001020304 +CT = 69199774FBCE912CC6AFAB383FA08CDB29D8954C0C188FE09286CE6D + +Count = 403 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405 +CT = 688F0E898D8A50017BD2FFB9BCF6303FEE0DA8F380EFF82C1BDC096E + +Count = 404 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 00010203040506 +CT = 172CCE47A4D7B70FECA5D4C06B512E800D95A0374AEC7C0701533E89 + +Count = 405 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 0001020304050607 +CT = 06965B4B142E18DA2F2E2DB23074D76F1F217D1D5B8504425263E9DD + +Count = 406 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708 +CT = 30BAA1ACB6C4C11BACA9F416DFD95449C592D892330D51BA07C9CBC9 + +Count = 407 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 00010203040506070809 +CT = 435560A07DC178C1BA6840C885EF52B38FEA30F65BF758D845BEA034 + +Count = 408 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A +CT = 38DCDDF8966748BEB7271F88684DA050C2E06D2217DC13CB936D6B7F + +Count = 409 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B +CT = F44BBEBBE2C11E620C3F87B76D1794B39F2CFDFD3A39BDC9C951E93D + +Count = 410 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C +CT = 8738EA8FF07A03FFA407F3563F6C4DF3B5BE28F4B142664EA52AC445 + +Count = 411 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D +CT = E8A79B1FA11C2934E73AD903AB1DC5045EFF9B619C95148C129A19AB + +Count = 412 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E +CT = 483E32CC243E9ECF8A016DDB018CE91F2231CDB4EC36B544DB2D48EA + +Count = 413 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F +CT = A7EC70B046CA924C2FC369103DFEB14184A18B39972D87F7A57138BD + +Count = 414 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 1786DD6630C5BDFFD4B38801E10159665403D61F96E3CBC7AD50A5A6 + +Count = 415 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = CD71CF4DE163C0D6BBA73F6F2EADDF0F2036CC66C72A7B04BE5867F6 + +Count = 416 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = C89539D7BA911E5056DF013E9C9043267E7FF11D727357E65247327B + +Count = 417 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 05A7CBCAE537C07B01BAE16489855929932413A91EF8D1C1298B6ACD + +Count = 418 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 9950341105A624A10341C808A51E138C19A8C00A023DB2FD258EA60E + +Count = 419 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 270E125660EB64E750CC2ED75DCDF31C598BDB86FD01B7A50F8572D8 + +Count = 420 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 14817DA18EA2BAE715A6D056BDE4CA3D7E1C5CA8F8A02ADEC6433A4B + +Count = 421 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 258B9CFF8CF7ECA819E347489054BB248084D1456634385233199F8C + +Count = 422 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 9EB1171872616C960DDAB5CFF4AA02206E8B581B416F004C382C4F61 + +Count = 423 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 271EACDB373F29B40BF89EB0E87A3BDB9824D34D47FD4A1612D4AB93 + +Count = 424 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 7CE4C0AFFB85234FBFDF89064703F95CEC507ACDA31CE07226D0CA23 + +Count = 425 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 3B1B692CE74058F012C5EAFCDEB5E6C3B489FC440F62A359075F0E2D + +Count = 426 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = B5DFDE2BAD1C03B1909DCA353886141D8E7197A3D5D18D1AD1E2FBED + +Count = 427 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = F8A21C7A75ACA8EBC38C77679629CDFC04224FBF55DB260961D7D53E + +Count = 428 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 850ED01B3C4D1138510CC96D9B89349DFACF9730FF342D34829E9E20 + +Count = 429 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 0D4DD617842088F79BFA5314682C759BDC13019C658B14E9DC59B723 + +Count = 430 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = +CT = BCBC3DBA06ACC4CDFF35542380C27B932DA3B227914ACEC71998EC25C7 + +Count = 431 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 00 +CT = 489F132929D475DE63684E8781B83E397D177E1D6EE7D771FD2A3EEAD5 + +Count = 432 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 0001 +CT = 5FCD74E3D73FDCCAB6595CA791C743EB276D980FD9FC4B1CA06ACEF5CF + +Count = 433 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102 +CT = 5DC87F60E85F0270020E6DB496403E1963B03A140C0892D91E3E915391 + +Count = 434 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 00010203 +CT = 3C07E3D9825729831E7B67DF69EEE207C149B61D3CB6956C8825C99EDD + +Count = 435 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 0001020304 +CT = 69199774FBCE912CC6AFAB3877D9D223393AFCF09B874062955513E94E + +Count = 436 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405 +CT = 688F0E898D8A50017BD2FFB95C1C8823478385DE5FAAD63B1AB1AE2FC5 + +Count = 437 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 00010203040506 +CT = 172CCE47A4D7B70FECA5D4C094AE4552DCA37388AD414669D662FF38F3 + +Count = 438 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 0001020304050607 +CT = 06965B4B142E18DA2F2E2DB2BE8A8E0CF590CFE72C7272238EEEDDB18C + +Count = 439 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708 +CT = 30BAA1ACB6C4C11BACA9F4169990E7839A6DBD6A4291DD262DE4F6C3CE + +Count = 440 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 00010203040506070809 +CT = 435560A07DC178C1BA6840C8B12164361E2823D1A03866612EB1FA614A + +Count = 441 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A +CT = 38DCDDF8966748BEB7271F886FC5515D67EA1D595C83410CAFB385202C + +Count = 442 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B +CT = F44BBEBBE2C11E620C3F87B78A85B646688FE26F9B680C321F63721797 + +Count = 443 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C +CT = 8738EA8FF07A03FFA407F35682AAE382EF2061E5D20C1F3030205352AD + +Count = 444 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D +CT = E8A79B1FA11C2934E73AD9034167996F72FE4CBC676330A5EE0941EAD1 + +Count = 445 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E +CT = 483E32CC243E9ECF8A016DDB48E77F1B6FCA27E835838A81C4CF01C832 + +Count = 446 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F +CT = A7EC70B046CA924C2FC369104A7BBEBFAE40C7F9F0DD13885EBF03D155 + +Count = 447 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 1786DD6630C5BDFFD4B38801C6E605A034A3E3D574C1AE122FF8B7DEEA + +Count = 448 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = CD71CF4DE163C0D6BBA73F6FE1A9B7BE682BD77DBDE34A175C37442A27 + +Count = 449 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = C89539D7BA911E5056DF013E4D3BBB9CE46C30D2B290BB0038E652430E + +Count = 450 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 05A7CBCAE537C07B01BAE16489394898F8BD6CFC28FD73DE19BFC3F349 + +Count = 451 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 9950341105A624A10341C8082600563186172DA5CA5A982240743618B3 + +Count = 452 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 270E125660EB64E750CC2ED725A3C277EA6A2BCECF1F367AA18E039B5B + +Count = 453 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 14817DA18EA2BAE715A6D0561509C43FEA1CFF52EBF41E388C364E443A + +Count = 454 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 258B9CFF8CF7ECA819E34748646A299AACC1EE3B4E388EADF76305498D + +Count = 455 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 9EB1171872616C960DDAB5CF020B373B78C50DBBDAFF75DB206FCF1CBA + +Count = 456 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 271EACDB373F29B40BF89EB02B516D43886008457861AD3B4F42C230FA + +Count = 457 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 7CE4C0AFFB85234FBFDF8906AFBDC912C3CB0904A20E9143DA9BC93D17 + +Count = 458 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 3B1B692CE74058F012C5EAFC05D866BFF1EB312EBF2B11B6F9AAA4B570 + +Count = 459 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = B5DFDE2BAD1C03B1909DCA3587376CC840CFB2C391D6931FE36C30ACBA + +Count = 460 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = F8A21C7A75ACA8EBC38C7767B37AF8CF0C875E809E3E386D1282F1845A + +Count = 461 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 850ED01B3C4D1138510CC96DB2DDCFFE6F35528D8DC633CF58C671F0E0 + +Count = 462 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 0D4DD617842088F79BFA5314EE0754B95E5E5A81EA301AE72C042BCA8E + +Count = 463 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = +CT = BCBC3DBA06ACC4CDFF35542380E4FB3C5EF7ED8C8C34D56FB779EE9FF7CD + +Count = 464 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 00 +CT = 489F132929D475DE63684E8781BD22E8BB2BD650CC553B5557635E35248C + +Count = 465 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 0001 +CT = 5FCD74E3D73FDCCAB6595CA791C970C9D8023A91F83EB13B1756FF4DA6D9 + +Count = 466 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102 +CT = 5DC87F60E85F0270020E6DB496B74FF50CE11817F6C25525F6125B011905 + +Count = 467 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 00010203 +CT = 3C07E3D9825729831E7B67DF6910156B1853EA6F172D6CB2A96B0684F5FC + +Count = 468 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 0001020304 +CT = 69199774FBCE912CC6AFAB38779F744EBC00F8E51CB553B9E82E901D56FB + +Count = 469 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405 +CT = 688F0E898D8A50017BD2FFB95C4A6AF691D53F8B0F2D5DB09007F9DCD2BC + +Count = 470 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 00010203040506 +CT = 172CCE47A4D7B70FECA5D4C094B65B5467486318844766F52C60D6262220 + +Count = 471 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 0001020304050607 +CT = 06965B4B142E18DA2F2E2DB2BEAD9FE4F6721F67ECD38864A389736FC8C2 + +Count = 472 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708 +CT = 30BAA1ACB6C4C11BACA9F416996548F8460380F3B14CECFBB87949A7267F + +Count = 473 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 00010203040506070809 +CT = 435560A07DC178C1BA6840C8B1ADCDEC4740F83C3A35AE24551C7762A454 + +Count = 474 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A +CT = 38DCDDF8966748BEB7271F886F1308ABD06BBFE5A66C44669425330E9E61 + +Count = 475 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B +CT = F44BBEBBE2C11E620C3F87B78ACC99500086F6192307F159AB0CC2FEE15D + +Count = 476 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C +CT = 8738EA8FF07A03FFA407F35682EFF2E7175A925E9C8772B345EAB0A405C2 + +Count = 477 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D +CT = E8A79B1FA11C2934E73AD90341EE972A086B803ADD9BD3C9051FE6239BE1 + +Count = 478 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E +CT = 483E32CC243E9ECF8A016DDB4869E6A530BFE7C1B4E8F7D6E57C9561AD0C + +Count = 479 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F +CT = A7EC70B046CA924C2FC369104AAC794F331C9969D32446B1965AC1F70974 + +Count = 480 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 1786DD6630C5BDFFD4B38801C6C59C6C1EF39E97B3965263533E09342B5D + +Count = 481 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = CD71CF4DE163C0D6BBA73F6FE1C801D7E06D0FB1B508150CF103A259FBDF + +Count = 482 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = C89539D7BA911E5056DF013E4D06D8B04A62C50332DCB44745228EF4A765 + +Count = 483 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 05A7CBCAE537C07B01BAE164890DBA47979BE7291A0AAD16F7E88418E6B9 + +Count = 484 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 9950341105A624A10341C808264FE886B30285DB6BD2C4A6A0C0DC388B8F + +Count = 485 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 270E125660EB64E750CC2ED725E56E64BB02E99B1CACE6E05849F33EEE30 + +Count = 486 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 14817DA18EA2BAE715A6D0561546DDC6113BCEB214984D98AFB17182FF6A + +Count = 487 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 258B9CFF8CF7ECA819E3474864706E80C91F300CEB07C3403D3D5FD8830E + +Count = 488 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 9EB1171872616C960DDAB5CF02EE0ADF806B26051E3B40C263AD21AD6325 + +Count = 489 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 271EACDB373F29B40BF89EB02BF1017C9F750D4B3AB0379672B6E56F80D8 + +Count = 490 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 7CE4C0AFFB85234FBFDF8906AFA1E18AF80E857367412021A7007506F56E + +Count = 491 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 3B1B692CE74058F012C5EAFC0582157FF55ADC727F6227B6BBD17A642B5D + +Count = 492 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = B5DFDE2BAD1C03B1909DCA35873AC7921BFFE5D84FA58F0FA551281B7308 + +Count = 493 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = F8A21C7A75ACA8EBC38C7767B369060DF98D8E23798AB312EA15DDE36657 + +Count = 494 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 850ED01B3C4D1138510CC96DB2C5BB697D6162690243ECC920038159081C + +Count = 495 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 0D4DD617842088F79BFA5314EE52F2B7A8137E2A4CA486C3CF79B2052DBB + +Count = 496 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = +CT = BCBC3DBA06ACC4CDFF35542380E41A7BFA5975E423696F49D179A3A5D5D930 + +Count = 497 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 00 +CT = 489F132929D475DE63684E8781BDE94BCE796646B22060340D0CE5DB17601D + +Count = 498 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 0001 +CT = 5FCD74E3D73FDCCAB6595CA791C97C45774D848160B9833A2D1884835DEAC7 + +Count = 499 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102 +CT = 5DC87F60E85F0270020E6DB496B7DDDB597776FE59758AFDCB2F3112F55A84 + +Count = 500 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 00010203 +CT = 3C07E3D9825729831E7B67DF69102C19C60A95C3DA5189C0E2AF80BB75DA43 + +Count = 501 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 0001020304 +CT = 69199774FBCE912CC6AFAB38779F8FE1A2286B7EB43649D74B29AEB772F44F + +Count = 502 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405 +CT = 688F0E898D8A50017BD2FFB95C4AEC288372E4C8532BDC2B8BA5D3F93B8F00 + +Count = 503 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 00010203040506 +CT = 172CCE47A4D7B70FECA5D4C094B63CCB3733990346FBD74594F7A0DB417C6F + +Count = 504 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 0001020304050607 +CT = 06965B4B142E18DA2F2E2DB2BEAD6A1BCAAA3A5F559EEB49EFE84674C89A4C + +Count = 505 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708 +CT = 30BAA1ACB6C4C11BACA9F41699656323F5B77C33A88B7B046EC08092EF6B2C + +Count = 506 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 00010203040506070809 +CT = 435560A07DC178C1BA6840C8B1ADE5CAD22A0D69746A83AF4D4FCE0B1594B4 + +Count = 507 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A +CT = 38DCDDF8966748BEB7271F886F13EE8FFE25390C3B4F29D038F7EE373227D8 + +Count = 508 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B +CT = F44BBEBBE2C11E620C3F87B78ACCC9AD58AF2B13F49B469E927380BE313AE4 + +Count = 509 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C +CT = 8738EA8FF07A03FFA407F35682EF61709BE374E36D65643A1FDC43D3EC7558 + +Count = 510 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D +CT = E8A79B1FA11C2934E73AD90341EEC9F8D90501652C26A6103665217DB9E430 + +Count = 511 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E +CT = 483E32CC243E9ECF8A016DDB48694DC9798864954AA3F224B230245548D2CA + +Count = 512 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F +CT = A7EC70B046CA924C2FC369104AAC9EAE59237CDF76F7F41B7876721706AE12 + +Count = 513 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 1786DD6630C5BDFFD4B38801C6C5FA77D45E4C109889F5F09863733D701E49 + +Count = 514 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = CD71CF4DE163C0D6BBA73F6FE1C8F504946468106EF970F44E0BE1D8516E28 + +Count = 515 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = C89539D7BA911E5056DF013E4D06E73A3911680273B95BA5B94C8E9FAE242E + +Count = 516 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 05A7CBCAE537C07B01BAE164890DD22370173B5EAF69B86F912B42B24664A9 + +Count = 517 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 9950341105A624A10341C808264F63788377B8D1C578FE39BCD6790FFF0B5E + +Count = 518 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 270E125660EB64E750CC2ED725E50A47E82B1EF3490AD7DB42688AD57CB1E5 + +Count = 519 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 14817DA18EA2BAE715A6D0561546B774AFB819A8CE14572B63EE929EC89B47 + +Count = 520 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 258B9CFF8CF7ECA819E347486470CCCEA4B5F293B2C3F1FC0FFC2571290979 + +Count = 521 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 9EB1171872616C960DDAB5CF02EE9AB1854A7DC50AD5A6D21EC8DC7A907DED + +Count = 522 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 271EACDB373F29B40BF89EB02BF138BE1233B199EAC51F2AFA740406049EF1 + +Count = 523 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 7CE4C0AFFB85234FBFDF8906AFA14CAA1DB2C543AC860DBA07722E8B2A0F19 + +Count = 524 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 3B1B692CE74058F012C5EAFC058292F5AE6E146BBBF1B4F4474D288638AEDD + +Count = 525 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = B5DFDE2BAD1C03B1909DCA35873A285A283D68958C2C4899E77A9BE1129AFF + +Count = 526 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = F8A21C7A75ACA8EBC38C7767B369BAB553F06A1E5CB7F2AB5AA85D052FA2F2 + +Count = 527 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 850ED01B3C4D1138510CC96DB2C5DEA4CE0C4130AB67FFE9EE8F25445B3F04 + +Count = 528 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 0D4DD617842088F79BFA5314EE52DAFEA7CF9C1C45CB2285C662080A902FC2 + +Count = 529 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = +CT = BCBC3DBA06ACC4CDFF35542380E41AD492458EB18FE3381AB63BCBBC2DB230AD + +Count = 530 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 00 +CT = 489F132929D475DE63684E8781BDE96BA28B6CFEC73BCA04FAD177BA90377B0C + +Count = 531 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 0001 +CT = 5FCD74E3D73FDCCAB6595CA791C97CAC53245EBF77EC3B3FC5F9ADAB82407255 + +Count = 532 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102 +CT = 5DC87F60E85F0270020E6DB496B7DDEFE995B89C4E52FE642434131D7A4992A3 + +Count = 533 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 00010203 +CT = 3C07E3D9825729831E7B67DF69102C757B4504F60865B042A252537313FB351D + +Count = 534 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 0001020304 +CT = 69199774FBCE912CC6AFAB38779F8F7E50128F2010633CC4852A776F2D9E0FB6 + +Count = 535 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405 +CT = 688F0E898D8A50017BD2FFB95C4AEC2F24D2B9A2C330ADDB5BE0F47D5116A8E6 + +Count = 536 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 00010203040506 +CT = 172CCE47A4D7B70FECA5D4C094B63CFAF5184B308A298CD2E887A95892790EE9 + +Count = 537 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 0001020304050607 +CT = 06965B4B142E18DA2F2E2DB2BEAD6A59E11539D436D3E4569045891093DF6B90 + +Count = 538 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708 +CT = 30BAA1ACB6C4C11BACA9F4169965632EC814D8EAB90CD8997DAC9A9C4630D9A0 + +Count = 539 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 00010203040506070809 +CT = 435560A07DC178C1BA6840C8B1ADE5BAC0EEB6A21B49DE25168D6A7BEB1E534C + +Count = 540 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A +CT = 38DCDDF8966748BEB7271F886F13EED7AE818C93616D2CFA471B0AD5A88340FE + +Count = 541 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B +CT = F44BBEBBE2C11E620C3F87B78ACCC94269D0615EA95ABEBB08250BA33C8068EE + +Count = 542 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C +CT = 8738EA8FF07A03FFA407F35682EF6184CBB8145848E61F052DCC294C56B8A287 + +Count = 543 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D +CT = E8A79B1FA11C2934E73AD90341EEC95792319B6E8B1F7237F4F4567A47450823 + +Count = 544 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E +CT = 483E32CC243E9ECF8A016DDB48694DE7CF0924F610632D5FF15B0BADD35E9A1B + +Count = 545 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F +CT = A7EC70B046CA924C2FC369104AAC9E0F20DBB4D3EBCB408C4D01D449D4D6540A + +Count = 546 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 1786DD6630C5BDFFD4B38801C6C5FA1C3168435260D5EE05F36A1DF2F5F8337D + +Count = 547 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = CD71CF4DE163C0D6BBA73F6FE1C8F594B0675503B0FF65C8547F41EABD5C846E + +Count = 548 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = C89539D7BA911E5056DF013E4D06E7E9E67D2367830FD5BCF2660C892E0F5EA5 + +Count = 549 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 05A7CBCAE537C07B01BAE164890DD2287D8FF44AD09EB5DA719E385F28817038 + +Count = 550 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 9950341105A624A10341C808264F63E6D8AC32CFCE2FD304485FC9DDE3A3E9A8 + +Count = 551 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 270E125660EB64E750CC2ED725E50A83642003AAF6CBF27AAFB93D6EBF587CF7 + +Count = 552 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 14817DA18EA2BAE715A6D0561546B747CE92163708FF15969FFD34AC1199E250 + +Count = 553 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 258B9CFF8CF7ECA819E347486470CCB035F28F8E9B87420AB68DB6CBE6B1F812 + +Count = 554 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 9EB1171872616C960DDAB5CF02EE9A73ACCA8039B66A25B5812DB632B2D1EF47 + +Count = 555 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 271EACDB373F29B40BF89EB02BF138623AF736983B0CEF7C5953D053E241370E + +Count = 556 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 7CE4C0AFFB85234FBFDF8906AFA14C0CE4AF387C7C8C5C96AE7906B9604FF29A + +Count = 557 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 3B1B692CE74058F012C5EAFC058292DED3F8B1F8B163AA907642D1F419F5CA53 + +Count = 558 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = B5DFDE2BAD1C03B1909DCA35873A28ECDE9CD525753619EA538ABF96322D8312 + +Count = 559 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = F8A21C7A75ACA8EBC38C7767B369BAAF1C93E99383B4E08BBF16C2DEFE6417FA + +Count = 560 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 850ED01B3C4D1138510CC96DB2C5DEF9E3FD80EF687C9968CBAE1F65ACC9E9E5 + +Count = 561 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 0D4DD617842088F79BFA5314EE52DAE2D7043C445B7449F9DA98C9E93E57ED63 + +Count = 562 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = +CT = BCBC3DBA06ACC4CDFF35542380E41AD4CD942FA5442336E21A1F34934234727D6B + +Count = 563 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 00 +CT = 489F132929D475DE63684E8781BDE96B6B3790CA97C5ABF41A073A22E39218A2D2 + +Count = 564 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 0001 +CT = 5FCD74E3D73FDCCAB6595CA791C97CACC4220FD4E486A2E6BD6986F0E90F305900 + +Count = 565 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102 +CT = 5DC87F60E85F0270020E6DB496B7DDEF3997F65E2C3C58C9FB424B852D2C987046 + +Count = 566 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 00010203 +CT = 3C07E3D9825729831E7B67DF69102C7588F42FD2AF2BC8B8EF687CC6F7431CAC30 + +Count = 567 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 0001020304 +CT = 69199774FBCE912CC6AFAB38779F8F7EAB32B732C91FC5381B7C0AB78EB21F89DB + +Count = 568 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405 +CT = 688F0E898D8A50017BD2FFB95C4AEC2F8C762D43341D3AE8D586FB4925159EC0C8 + +Count = 569 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 00010203040506 +CT = 172CCE47A4D7B70FECA5D4C094B63CFA226DBAA0AB4244B2C771FA61830454863E + +Count = 570 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 0001020304050607 +CT = 06965B4B142E18DA2F2E2DB2BEAD6A59FB67EB26104FD363A64F94543DC67C0B57 + +Count = 571 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708 +CT = 30BAA1ACB6C4C11BACA9F4169965632E5C54172B9B13508EDA46FEA714A6B63740 + +Count = 572 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 00010203040506070809 +CT = 435560A07DC178C1BA6840C8B1ADE5BAFEF6BBD4FCE33C3C6E160ADEDB180EE412 + +Count = 573 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A +CT = 38DCDDF8966748BEB7271F886F13EED7F9AF42D780241CA6A0B584B2F751A4C4D8 + +Count = 574 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B +CT = F44BBEBBE2C11E620C3F87B78ACCC9429C720F05E340DF09430A799CA736A9D1C8 + +Count = 575 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C +CT = 8738EA8FF07A03FFA407F35682EF6184E15EAA783D1B0F2BEC26BFC7A040F33160 + +Count = 576 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D +CT = E8A79B1FA11C2934E73AD90341EEC95784515514A27EA10D2AC4C3B73A2B25E6C4 + +Count = 577 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E +CT = 483E32CC243E9ECF8A016DDB48694DE7E63D2E99AC076887683F158F71B927AF7B + +Count = 578 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F +CT = A7EC70B046CA924C2FC369104AAC9E0F118AD948E19930C7F705AD4D1FC6065518 + +Count = 579 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 1786DD6630C5BDFFD4B38801C6C5FA1CEACA33B5069176ACAEDC8E2DC897E959DE + +Count = 580 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = CD71CF4DE163C0D6BBA73F6FE1C8F5946D78FDB7D6767430F84A13F8031BC0043B + +Count = 581 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = C89539D7BA911E5056DF013E4D06E7E9B3167A8A2307047BC0B6AF3F83B0527D85 + +Count = 582 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 05A7CBCAE537C07B01BAE164890DD2286EA84ACA7B490960BA9D66A245BDA1C491 + +Count = 583 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 9950341105A624A10341C808264F63E651FB692ED0385C5A58244F34A0E5ECCA45 + +Count = 584 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 270E125660EB64E750CC2ED725E50A83FECA55AC1CEAFB243C72C8A4C019BEC103 + +Count = 585 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 14817DA18EA2BAE715A6D0561546B7472ADC426F23D8369E0DE0C119909B5C332C + +Count = 586 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 258B9CFF8CF7ECA819E347486470CCB07FDDB4608DA8D279043EEA55353A7F51B9 + +Count = 587 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 9EB1171872616C960DDAB5CF02EE9A734AD8B1CC8E2C1AA7D2AC595AEDA6E413E0 + +Count = 588 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 271EACDB373F29B40BF89EB02BF138626514CD1A71947ECD093B2A8540F92752E9 + +Count = 589 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 7CE4C0AFFB85234FBFDF8906AFA14C0CD88978BF65063BADDE02C3EAA323DB1EC3 + +Count = 590 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 3B1B692CE74058F012C5EAFC058292DE4FD5EBF176558B77744E7701053FEBC836 + +Count = 591 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = B5DFDE2BAD1C03B1909DCA35873A28EC6496B0204D3A668751FFF3697427ADB9A2 + +Count = 592 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = F8A21C7A75ACA8EBC38C7767B369BAAFD969826CE84B157D9219BCC72087157751 + +Count = 593 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 850ED01B3C4D1138510CC96DB2C5DEF92AD1DB44A402B50391DC84E799F749C40E + +Count = 594 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 0D4DD617842088F79BFA5314EE52DAE2D45EEE463418F0F3DA9BE6712BA977AFCE + +Count = 595 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = +CT = BCBC3DBA06ACC4CDFF35542380E41AD4CD8B814A39019FDB01947323899796BCD94A + +Count = 596 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 00 +CT = 489F132929D475DE63684E8781BDE96B6BBA688A17A94D80EE2E5CBB8FC35774CAF6 + +Count = 597 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 0001 +CT = 5FCD74E3D73FDCCAB6595CA791C97CACC45B52FA95211DAA1B40E60B9B8B364F0B85 + +Count = 598 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102 +CT = 5DC87F60E85F0270020E6DB496B7DDEF39EDE330C40B8A3DF5100EE1585AC4EA0C00 + +Count = 599 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 00010203 +CT = 3C07E3D9825729831E7B67DF69102C758845DD90F0B8B9C2F4BA8E5F4D7B1B8E84BF + +Count = 600 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 0001020304 +CT = 69199774FBCE912CC6AFAB38779F8F7EAB3EA7FD99369BBF2252146FFB15C786F59B + +Count = 601 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405 +CT = 688F0E898D8A50017BD2FFB95C4AEC2F8C58FA27CFF3B6EF444E2F586DA89C6804F7 + +Count = 602 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 00010203040506 +CT = 172CCE47A4D7B70FECA5D4C094B63CFA22A8161A3B6757DF4E1087AC9ACFD8311197 + +Count = 603 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 0001020304050607 +CT = 06965B4B142E18DA2F2E2DB2BEAD6A59FBF383D522591B4606500A2CAF8928B7E2AB + +Count = 604 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708 +CT = 30BAA1ACB6C4C11BACA9F4169965632E5C903CF6E86B86818740C84768E6FA118BD3 + +Count = 605 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 00010203040506070809 +CT = 435560A07DC178C1BA6840C8B1ADE5BAFEE5A7DAF4CFA124DF7CFE47135DBFC8E13A + +Count = 606 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A +CT = 38DCDDF8966748BEB7271F886F13EED7F9A4444F63DFC2A319CD336526442BC36EF2 + +Count = 607 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B +CT = F44BBEBBE2C11E620C3F87B78ACCC9429C8DAB763D3E04A5EB9F6EAA46E95D22E0D4 + +Count = 608 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C +CT = 8738EA8FF07A03FFA407F35682EF6184E1849CD31AAAFC6EBF8C7A2B1C5169053781 + +Count = 609 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D +CT = E8A79B1FA11C2934E73AD90341EEC957840676FCF8AEEA9BD1955234628A85678B72 + +Count = 610 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E +CT = 483E32CC243E9ECF8A016DDB48694DE7E6F7F6B0929376ABEC0146433AC29AD49883 + +Count = 611 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F +CT = A7EC70B046CA924C2FC369104AAC9E0F1129E00585647937754B6C567076AD56386A + +Count = 612 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 1786DD6630C5BDFFD4B38801C6C5FA1CEA71ABAFD48E22AEB831F3438DA267B408ED + +Count = 613 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = CD71CF4DE163C0D6BBA73F6FE1C8F5946D585391D1AE86782DD162EFB653FFC3CE33 + +Count = 614 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = C89539D7BA911E5056DF013E4D06E7E9B3D11A8EF68415F9DDACE07E4F350A17CB3E + +Count = 615 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 05A7CBCAE537C07B01BAE164890DD2286EA1C5EBAEDDFEB2453D69764617BC64FA88 + +Count = 616 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 9950341105A624A10341C808264F63E651A88ECD54ECD10F5F696D3B9D9B289360C4 + +Count = 617 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 270E125660EB64E750CC2ED725E50A83FE1D7333427607D61CD7801AE7AFE19E0C30 + +Count = 618 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 14817DA18EA2BAE715A6D0561546B7472AFDE5A711B4A7C6DBC7D04479A49FCA896B + +Count = 619 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 258B9CFF8CF7ECA819E347486470CCB07F70834BCBB110FD24A86458025D95BF25D4 + +Count = 620 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 9EB1171872616C960DDAB5CF02EE9A734AF6814AB0E47212149884295F9D04D26BE5 + +Count = 621 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 271EACDB373F29B40BF89EB02BF13862657E024DCA45E865DD6373CA5EDF0313E15E + +Count = 622 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 7CE4C0AFFB85234FBFDF8906AFA14C0CD85883F395DB332298FBB5B06514B516F5BC + +Count = 623 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 3B1B692CE74058F012C5EAFC058292DE4F0A45285FB69140251B4104E3F3730BDE53 + +Count = 624 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = B5DFDE2BAD1C03B1909DCA35873A28EC6450901BBD9D773E63C01AAC626C5A7F58C0 + +Count = 625 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = F8A21C7A75ACA8EBC38C7767B369BAAFD9EAA766B43C04FFE00527E2D8C6C42C7F44 + +Count = 626 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 850ED01B3C4D1138510CC96DB2C5DEF92ADD2223D367E79EA54F48246712762E3F71 + +Count = 627 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 0D4DD617842088F79BFA5314EE52DAE2D4C4706509E2C25F37B03083813A925B1B9D + +Count = 628 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = +CT = BCBC3DBA06ACC4CDFF35542380E41AD4CD8B9A8395CECBBD06FB5281BDC91A669D1434 + +Count = 629 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 00 +CT = 489F132929D475DE63684E8781BDE96B6BBA3DBE2D58198081D4257F57825F60847FEE + +Count = 630 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 0001 +CT = 5FCD74E3D73FDCCAB6595CA791C97CACC45BC7DDE1D301F2E658ED6CB2D74D50DC7498 + +Count = 631 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102 +CT = 5DC87F60E85F0270020E6DB496B7DDEF39ED6CC297914F9571BA494258E47653C17161 + +Count = 632 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 00010203 +CT = 3C07E3D9825729831E7B67DF69102C7588459762B6D99A6D96EF0DCF349BC19D56D088 + +Count = 633 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 0001020304 +CT = 69199774FBCE912CC6AFAB38779F8F7EAB3E4A329780DEDAD2644A0C0E497F8BE1E11F + +Count = 634 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405 +CT = 688F0E898D8A50017BD2FFB95C4AEC2F8C58858A262731B59BC9A758832FBA2D488191 + +Count = 635 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 00010203040506 +CT = 172CCE47A4D7B70FECA5D4C094B63CFA22A89B22DDFEEE95E6F5D18840872D3560E0BD + +Count = 636 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 0001020304050607 +CT = 06965B4B142E18DA2F2E2DB2BEAD6A59FBF33E2994415B8FF61344C1D0E96DC9829782 + +Count = 637 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708 +CT = 30BAA1ACB6C4C11BACA9F4169965632E5C908DE9FE87E654FB6BAC4B2A45AEACB4F209 + +Count = 638 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 00010203040506070809 +CT = 435560A07DC178C1BA6840C8B1ADE5BAFEE574542615B9F59E9F4BF786A94533C246D0 + +Count = 639 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A +CT = 38DCDDF8966748BEB7271F886F13EED7F9A443699D9C03D43FAC85C68CF596A507BEA6 + +Count = 640 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B +CT = F44BBEBBE2C11E620C3F87B78ACCC9429C8D743013F2D1CC5C0B0D331CC29389A32767 + +Count = 641 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C +CT = 8738EA8FF07A03FFA407F35682EF6184E18491A88B8A46191FCCEA9FCC5682003171B2 + +Count = 642 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D +CT = E8A79B1FA11C2934E73AD90341EEC9578406EB52E50C2F18C49DD5A9E7E36B5B0AAACD + +Count = 643 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E +CT = 483E32CC243E9ECF8A016DDB48694DE7E6F739F39D50541B03BF954184045A6D396686 + +Count = 644 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F +CT = A7EC70B046CA924C2FC369104AAC9E0F11295715D253F812417E244F30E17B3A9723C9 + +Count = 645 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 1786DD6630C5BDFFD4B38801C6C5FA1CEA714F8FFF56437103851D534BF125EAAA81AD + +Count = 646 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = CD71CF4DE163C0D6BBA73F6FE1C8F5946D589CC6284F64725D7B4CFE56935CECA8FEAE + +Count = 647 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = C89539D7BA911E5056DF013E4D06E7E9B3D196272A7E2A165CEC34C2ED68491DE5D593 + +Count = 648 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 05A7CBCAE537C07B01BAE164890DD2286EA16B2203B592CBC2DE684ED2E7694ABB1BD2 + +Count = 649 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 9950341105A624A10341C808264F63E651A81DE1735826B58BD0531456A1095D18F47F + +Count = 650 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 270E125660EB64E750CC2ED725E50A83FE1DECB157D9A755535F492B139AE7C5E37264 + +Count = 651 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 14817DA18EA2BAE715A6D0561546B7472AFD27014EF75EBE84205A2E790A3F85DE3CE2 + +Count = 652 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 258B9CFF8CF7ECA819E347486470CCB07F702B95E089FF379E45E28FFDA746E2DDF065 + +Count = 653 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 9EB1171872616C960DDAB5CF02EE9A734AF657E2916F3287174BEE9D8CB08CAEA9712C + +Count = 654 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 271EACDB373F29B40BF89EB02BF13862657E2FA024E3A0EED059651CACA6925CE1D06F + +Count = 655 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 7CE4C0AFFB85234FBFDF8906AFA14C0CD85819995E38F5C4B6F6A5EF31419DBCF1DC06 + +Count = 656 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 3B1B692CE74058F012C5EAFC058292DE4F0A16BC4381B5F2F8686361FE851B15DABB0C + +Count = 657 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = B5DFDE2BAD1C03B1909DCA35873A28EC645091D85CAC4476EA06FB38E5D15DFCDF09B0 + +Count = 658 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = F8A21C7A75ACA8EBC38C7767B369BAAFD9EA56E839E3787F2A604128B4466C6DD86CA8 + +Count = 659 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 850ED01B3C4D1138510CC96DB2C5DEF92ADD524E02E11184A98E5A6BD8AE1338D41934 + +Count = 660 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 0D4DD617842088F79BFA5314EE52DAE2D4C4E39AAE9D48C08DD21E8CFB4CF82D414970 + +Count = 661 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = +CT = BCBC3DBA06ACC4CDFF35542380E41AD4CD8B9AC150B289007044761B1118F0D83F3E025D + +Count = 662 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 00 +CT = 489F132929D475DE63684E8781BDE96B6BBA3D8206B3FB905686FA24893878241866EF52 + +Count = 663 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 0001 +CT = 5FCD74E3D73FDCCAB6595CA791C97CACC45BC7B99B9979E4AA9D5B4DAD5EB283865B08B7 + +Count = 664 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102 +CT = 5DC87F60E85F0270020E6DB496B7DDEF39ED6CBBDB8FC69F1EB614522C2138E7E0349525 + +Count = 665 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 00010203 +CT = 3C07E3D9825729831E7B67DF69102C7588459702BFCC234BBF2B492A9F1A0F6EA32509F4 + +Count = 666 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 0001020304 +CT = 69199774FBCE912CC6AFAB38779F8F7EAB3E4A145322FECD9C89E0929519123ABE0FA4C5 + +Count = 667 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405 +CT = 688F0E898D8A50017BD2FFB95C4AEC2F8C5885BFD84CFF04B5C189A823CEB0A69138483A + +Count = 668 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 00010203040506 +CT = 172CCE47A4D7B70FECA5D4C094B63CFA22A89B869970BF2545558044E19B2122B86DD990 + +Count = 669 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 0001020304050607 +CT = 06965B4B142E18DA2F2E2DB2BEAD6A59FBF33EBE49BE22EF7C501B1E120DD39E3D2178AE + +Count = 670 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708 +CT = 30BAA1ACB6C4C11BACA9F4169965632E5C908D946401C546EB0F4F714AA22B470B01C485 + +Count = 671 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 00010203040506070809 +CT = 435560A07DC178C1BA6840C8B1ADE5BAFEE57403F46F166A44F8F1C688C0B679FAC65936 + +Count = 672 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A +CT = 38DCDDF8966748BEB7271F886F13EED7F9A443F769595AE2D03EB6CBCDE0F144F3E02843 + +Count = 673 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B +CT = F44BBEBBE2C11E620C3F87B78ACCC9429C8D74FF121271C5C24EAC15A2742CA7FDBD8468 + +Count = 674 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C +CT = 8738EA8FF07A03FFA407F35682EF6184E184912FBD40AF2872B2B74F053D6F14971383A3 + +Count = 675 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D +CT = E8A79B1FA11C2934E73AD90341EEC9578406EB74391BC0A01997424C5140B630A403D80E + +Count = 676 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E +CT = 483E32CC243E9ECF8A016DDB48694DE7E6F739068FF08811CD04E2E798DF9E7460D8D33C + +Count = 677 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F +CT = A7EC70B046CA924C2FC369104AAC9E0F112957F988B623109F72C4018EF3794644033B19 + +Count = 678 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 1786DD6630C5BDFFD4B38801C6C5FA1CEA714FFF50F3D4A181DBFFE7F1629B09D2265376 + +Count = 679 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = CD71CF4DE163C0D6BBA73F6FE1C8F5946D589CD28AB7EA8344A7B219E94754B69058DD2C + +Count = 680 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = C89539D7BA911E5056DF013E4D06E7E9B3D196D38C52AF0504E133205176E75DE25DD348 + +Count = 681 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 05A7CBCAE537C07B01BAE164890DD2286EA16B364C5ECAD18AD6759A18B170592659E879 + +Count = 682 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 9950341105A624A10341C808264F63E651A81DF088F9CEA765AF2047E5B8FEA3C1C778FB + +Count = 683 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 270E125660EB64E750CC2ED725E50A83FE1DECE5CADE11B40E0BED1FEBBCCB2B4E229365 + +Count = 684 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 14817DA18EA2BAE715A6D0561546B7472AFD270D082D41DC0FC54D249E24AD7D07F15621 + +Count = 685 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 258B9CFF8CF7ECA819E347486470CCB07F702B85D16792B63FA4B05BA0A36B8012C7C7D7 + +Count = 686 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 9EB1171872616C960DDAB5CF02EE9A734AF65716192F9BB9A1E24C9C97F2844EE0C22206 + +Count = 687 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 271EACDB373F29B40BF89EB02BF13862657E2FF47785EF6F9C61069188330C935FBB1384 + +Count = 688 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 7CE4C0AFFB85234FBFDF8906AFA14C0CD858195862F82186BA7EE199F4C98C53968B2E99 + +Count = 689 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 3B1B692CE74058F012C5EAFC058292DE4F0A16EDA5C733E80BB9F7DC5A006BE14850FF30 + +Count = 690 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = B5DFDE2BAD1C03B1909DCA35873A28EC6450910925597036C7AF2053DC6438EDD54B4326 + +Count = 691 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = F8A21C7A75ACA8EBC38C7767B369BAAFD9EA56F5224221D9E1919A40895EB0C5BA5EDF9E + +Count = 692 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 850ED01B3C4D1138510CC96DB2C5DEF92ADD52F5A2B9918E553A31F2202F4698B8FE78F9 + +Count = 693 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 0D4DD617842088F79BFA5314EE52DAE2D4C4E3500C992DE40397ECCFFEF6FA53A8C34C73 + +Count = 694 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = +CT = BCBC3DBA06ACC4CDFF35542380E41AD4CD8B9AC19648A695B0605111033CE20EB7A3142A63 + +Count = 695 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 00 +CT = 489F132929D475DE63684E8781BDE96B6BBA3D829261424FD3ABFB495C96840CDD6A095838 + +Count = 696 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 0001 +CT = 5FCD74E3D73FDCCAB6595CA791C97CACC45BC7B94839A479EF3145958CC93F09D0B957713C + +Count = 697 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102 +CT = 5DC87F60E85F0270020E6DB496B7DDEF39ED6CBBBD541CBCA37B109068C07687A086E32095 + +Count = 698 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 00010203 +CT = 3C07E3D9825729831E7B67DF69102C7588459702A34D02991F9D78BE3EB11BB0665CE618FA + +Count = 699 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 0001020304 +CT = 69199774FBCE912CC6AFAB38779F8F7EAB3E4A14602C318E540D26EAC64592B7F34ABC6FB9 + +Count = 700 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405 +CT = 688F0E898D8A50017BD2FFB95C4AEC2F8C5885BF57D58CB8D0E81228D945E651F588B36CC0 + +Count = 701 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 00010203040506 +CT = 172CCE47A4D7B70FECA5D4C094B63CFA22A89B86CA681E5EAA47A808F25EEC9B555DDC2B89 + +Count = 702 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 0001020304050607 +CT = 06965B4B142E18DA2F2E2DB2BEAD6A59FBF33EBEE29D7AC962C44DECEAE2FDA7C1A7202862 + +Count = 703 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708 +CT = 30BAA1ACB6C4C11BACA9F4169965632E5C908D94CE86E91ED722DE86D5759251E91557CDA6 + +Count = 704 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 00010203040506070809 +CT = 435560A07DC178C1BA6840C8B1ADE5BAFEE57403D44A8BA7C3865E254183DDEDD494E34FD5 + +Count = 705 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A +CT = 38DCDDF8966748BEB7271F886F13EED7F9A443F7F67D0EFF0EA8A3C8335F5050336A006028 + +Count = 706 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B +CT = F44BBEBBE2C11E620C3F87B78ACCC9429C8D74FFB18829F7303A17C0BD0101A9AEE63E9EC3 + +Count = 707 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C +CT = 8738EA8FF07A03FFA407F35682EF6184E184912F5DA311AD647222AA9FB9DDD01DC63D449E + +Count = 708 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D +CT = E8A79B1FA11C2934E73AD90341EEC9578406EB74794CA5D3245F8AA60AF118EF97A123471E + +Count = 709 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E +CT = 483E32CC243E9ECF8A016DDB48694DE7E6F7390604CA9B6EB967951191A73398AA3F40E17A + +Count = 710 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F +CT = A7EC70B046CA924C2FC369104AAC9E0F112957F9B5C85C9BAB21C70F8922DB46B32C36A34D + +Count = 711 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 1786DD6630C5BDFFD4B38801C6C5FA1CEA714FFFB5529974AA0FB4ABA62CF7CC5D35C3D854 + +Count = 712 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = CD71CF4DE163C0D6BBA73F6FE1C8F5946D589CD22FD452E505DAD28000F38689AAD3B1DAAB + +Count = 713 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = C89539D7BA911E5056DF013E4D06E7E9B3D196D3CD0BB904E9C5970AE007C2E25FD611C1FE + +Count = 714 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 05A7CBCAE537C07B01BAE164890DD2286EA16B363115A9D69BCAC0301CC22486DABA26A086 + +Count = 715 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 9950341105A624A10341C808264F63E651A81DF094F7D8FA364D36897AE21486770B300205 + +Count = 716 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 270E125660EB64E750CC2ED725E50A83FE1DECE50CED1274053DD363A24E96193A1048A423 + +Count = 717 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 14817DA18EA2BAE715A6D0561546B7472AFD270D772A4111F100DB55A89CF9D140D7DDB3F3 + +Count = 718 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 258B9CFF8CF7ECA819E347486470CCB07F702B85F7E20E0AC5C0A1D36B51829129A026DFFD + +Count = 719 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 9EB1171872616C960DDAB5CF02EE9A734AF65716D250C397D02E5CDDA60DF80E2019CA9FA9 + +Count = 720 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 271EACDB373F29B40BF89EB02BF13862657E2FF4C71B706BBF5F7F070ECBBBBC5F6A50EF08 + +Count = 721 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 7CE4C0AFFB85234FBFDF8906AFA14C0CD85819585A1E8E556EE437D93D2EC41056CC9C96FE + +Count = 722 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 3B1B692CE74058F012C5EAFC058292DE4F0A16ED1CBA6C5CDA87B3E36832AE49982DE52516 + +Count = 723 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = B5DFDE2BAD1C03B1909DCA35873A28EC645091099838F533295C2121E6321DD3AAE678B0E8 + +Count = 724 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = F8A21C7A75ACA8EBC38C7767B369BAAFD9EA56F54EEC38CECE867BF1BD9EA72380B2E0EF29 + +Count = 725 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 850ED01B3C4D1138510CC96DB2C5DEF92ADD52F56416FB470133E33AFD814AAC5F95AEAB49 + +Count = 726 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 0D4DD617842088F79BFA5314EE52DAE2D4C4E3507F747385AF59ABC76575D2C7C3E0218D02 + +Count = 727 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = +CT = BCBC3DBA06ACC4CDFF35542380E41AD4CD8B9AC196A8F384A4ECDF120EDA05DB8585EE62DEEB + +Count = 728 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 00 +CT = 489F132929D475DE63684E8781BDE96B6BBA3D8292581F9AE5BD0D5C8E5684F2D66176099CB7 + +Count = 729 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 0001 +CT = 5FCD74E3D73FDCCAB6595CA791C97CACC45BC7B94885C1BDCB016476CE6CF67499F51A67B524 + +Count = 730 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102 +CT = 5DC87F60E85F0270020E6DB496B7DDEF39ED6CBBBD69DAB3FE49A6E283444E94467E8AC1C4CA + +Count = 731 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 00010203 +CT = 3C07E3D9825729831E7B67DF69102C7588459702A32EBF06BA0CB64F4833AD748A2992D0D135 + +Count = 732 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 0001020304 +CT = 69199774FBCE912CC6AFAB38779F8F7EAB3E4A14604818F5ABAEAE9A3FA8ABAC518C6FF61F92 + +Count = 733 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405 +CT = 688F0E898D8A50017BD2FFB95C4AEC2F8C5885BF57BBA35D05F35A95952C49068A3A87113158 + +Count = 734 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 00010203040506 +CT = 172CCE47A4D7B70FECA5D4C094B63CFA22A89B86CA0ED2A45749E8CF2B93697C9CB7C443823B + +Count = 735 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 0001020304050607 +CT = 06965B4B142E18DA2F2E2DB2BEAD6A59FBF33EBEE2107A3C48701AF96B2668C15B6794C1D28B + +Count = 736 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708 +CT = 30BAA1ACB6C4C11BACA9F4169965632E5C908D94CEA7CD0C4C70197D2C537617A317D2E79122 + +Count = 737 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 00010203040506070809 +CT = 435560A07DC178C1BA6840C8B1ADE5BAFEE57403D40AF34689E2E2B3D7AE2C9E653B2144E68B + +Count = 738 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A +CT = 38DCDDF8966748BEB7271F886F13EED7F9A443F7F6FDBCE18E226F2832578282216F4B641831 + +Count = 739 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B +CT = F44BBEBBE2C11E620C3F87B78ACCC9429C8D74FFB1641FA31DFB6D0489934DAF00E16C201B2F + +Count = 740 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C +CT = 8738EA8FF07A03FFA407F35682EF6184E184912F5D48C8E36113F0A518ECAB48CCBCCF8FD594 + +Count = 741 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D +CT = E8A79B1FA11C2934E73AD90341EEC9578406EB7479675D1ADD54F3E4AA885E67383DF77E1441 + +Count = 742 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E +CT = 483E32CC243E9ECF8A016DDB48694DE7E6F7390604609234707A21E3CD5DE8B0A5144A93B431 + +Count = 743 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F +CT = A7EC70B046CA924C2FC369104AAC9E0F112957F9B52A149A871296CB39BF0D7B3AFCB75045A6 + +Count = 744 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 1786DD6630C5BDFFD4B38801C6C5FA1CEA714FFFB56F504E5ADE1E1C4B6015A44C16950899BB + +Count = 745 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = CD71CF4DE163C0D6BBA73F6FE1C8F5946D589CD22FA6AB61A3D47BE81304F3C15628ED64F217 + +Count = 746 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = C89539D7BA911E5056DF013E4D06E7E9B3D196D3CD333C540782D3E16A0E3D0C2FE44D48F9C8 + +Count = 747 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 05A7CBCAE537C07B01BAE164890DD2286EA16B3631A88F44636878367BA28D61E109B2323E5E + +Count = 748 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 9950341105A624A10341C808264F63E651A81DF0947B4AE47FA1CCDBCCB262615800BA6FE9CE + +Count = 749 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 270E125660EB64E750CC2ED725E50A83FE1DECE50CBC63EF4510911B344412AA595CC40D8551 + +Count = 750 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 14817DA18EA2BAE715A6D0561546B7472AFD270D77F570DE06142CFAF731CC1CBE2D215C466B + +Count = 751 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 258B9CFF8CF7ECA819E347486470CCB07F702B85F7F65268EB2918420C956C0B49365970F797 + +Count = 752 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 9EB1171872616C960DDAB5CF02EE9A734AF65716D2CB96333BE7DE397D81D375828833ACA5F6 + +Count = 753 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 271EACDB373F29B40BF89EB02BF13862657E2FF4C77F4E65FF82F47D3F2A21A249D8F723028D + +Count = 754 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 7CE4C0AFFB85234FBFDF8906AFA14C0CD85819585AFB40510C622B80C94D754FF8218C8B8F9D + +Count = 755 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 3B1B692CE74058F012C5EAFC058292DE4F0A16ED1C04B4D6B6A793DD7953D4CFE7B4E928D81F + +Count = 756 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = B5DFDE2BAD1C03B1909DCA35873A28EC6450910998F328C1898EFA6AFEB863A115DEA3D0B87A + +Count = 757 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = F8A21C7A75ACA8EBC38C7767B369BAAFD9EA56F54E7C4036A5BB558A0F58237072EB64250C3E + +Count = 758 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 850ED01B3C4D1138510CC96DB2C5DEF92ADD52F56463160871D417759B706DAEA6785B89B995 + +Count = 759 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 0D4DD617842088F79BFA5314EE52DAE2D4C4E3507FBDE94987FD641FECE0B45D4FE46119CCFC + +Count = 760 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = +CT = BCBC3DBA06ACC4CDFF35542380E41AD4CD8B9AC196A8E1CEE6C275070C511E90A3D1879990A505 + +Count = 761 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 00 +CT = 489F132929D475DE63684E8781BDE96B6BBA3D829258E54794FD180A44CB77031D6AB9843E5E78 + +Count = 762 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 0001 +CT = 5FCD74E3D73FDCCAB6595CA791C97CACC45BC7B9488545ADB5E773876BEF58270D7622FB928533 + +Count = 763 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102 +CT = 5DC87F60E85F0270020E6DB496B7DDEF39ED6CBBBD691700BFD3FE6366CB8A1A21FC964744C60B + +Count = 764 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 00010203 +CT = 3C07E3D9825729831E7B67DF69102C7588459702A32EB2D0C94575A6F19D69EDFFC9E71AD0F3B4 + +Count = 765 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 0001020304 +CT = 69199774FBCE912CC6AFAB38779F8F7EAB3E4A146048CFA54E4E48B403BE3078B48896912946C8 + +Count = 766 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405 +CT = 688F0E898D8A50017BD2FFB95C4AEC2F8C5885BF57BB2231A47FBF68E41CF2A46CA5EEB50227C8 + +Count = 767 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 00010203040506 +CT = 172CCE47A4D7B70FECA5D4C094B63CFA22A89B86CA0EB6E520F5BEF6CEE567E92377972612D56A + +Count = 768 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 0001020304050607 +CT = 06965B4B142E18DA2F2E2DB2BEAD6A59FBF33EBEE21012F2D2B0FA9087624054AB846EAA9D5340 + +Count = 769 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708 +CT = 30BAA1ACB6C4C11BACA9F4169965632E5C908D94CEA7316B68908BD50D677408602C25B0C68A50 + +Count = 770 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 00010203040506070809 +CT = 435560A07DC178C1BA6840C8B1ADE5BAFEE57403D40A93D7122219964F75C2E11AFDF0E03F334B + +Count = 771 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A +CT = 38DCDDF8966748BEB7271F886F13EED7F9A443F7F6FD0B4414F10AA804388C64010F87AE627CF8 + +Count = 772 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B +CT = F44BBEBBE2C11E620C3F87B78ACCC9429C8D74FFB164DB746335F5AAC6E10E6CE83942660D2E2E + +Count = 773 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C +CT = 8738EA8FF07A03FFA407F35682EF6184E184912F5D485131CD98CE3CC5C29CDDE8EED7BB9FA49E + +Count = 774 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D +CT = E8A79B1FA11C2934E73AD90341EEC9578406EB747967EBA4C714C88D1B708C0F9CFE4BDDFD19C6 + +Count = 775 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E +CT = 483E32CC243E9ECF8A016DDB48694DE7E6F739060460CFE52BB4F278D3EB9D8AAB0B48C4D2D069 + +Count = 776 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F +CT = A7EC70B046CA924C2FC369104AAC9E0F112957F9B52A1A7298761EA1CB7B67AD33B3243097AE8D + +Count = 777 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 1786DD6630C5BDFFD4B38801C6C5FA1CEA714FFFB56F7B597526E93610A2A4F2FF7BD32C0EF60E + +Count = 778 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = CD71CF4DE163C0D6BBA73F6FE1C8F5946D589CD22FA62C8956D85302EDEC912592909AB15D880A + +Count = 779 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = C89539D7BA911E5056DF013E4D06E7E9B3D196D3CD331F5B843BCFAC07D5365C50C72A512BD1E9 + +Count = 780 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 05A7CBCAE537C07B01BAE164890DD2286EA16B3631A80F6BF5653D146064D4E3B403693A1F4A99 + +Count = 781 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 9950341105A624A10341C808264F63E651A81DF0947BDAA7BCAB4B29C1F3EF5A940BE3DAB348A7 + +Count = 782 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 270E125660EB64E750CC2ED725E50A83FE1DECE50CBC5CE4EFA59680D64517233A440E0EDCA957 + +Count = 783 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 14817DA18EA2BAE715A6D0561546B7472AFD270D77F5BF2BB7C6CC092B24DE403EBB32186CF381 + +Count = 784 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 258B9CFF8CF7ECA819E347486470CCB07F702B85F7F627A525709FAD20361014A9D6A591B8035B + +Count = 785 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 9EB1171872616C960DDAB5CF02EE9A734AF65716D2CB1460DEFD9D154E21F121C54B1D38513D1C + +Count = 786 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 271EACDB373F29B40BF89EB02BF13862657E2FF4C77FC404386A56E53E0E305A9B41F5CD7E4B0D + +Count = 787 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 7CE4C0AFFB85234FBFDF8906AFA14C0CD85819585AFB8B45166E9A0503301A0340CBFD0EBD8E3B + +Count = 788 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 3B1B692CE74058F012C5EAFC058292DE4F0A16ED1C04725080ECE295EEE10275CFEA81BFF56BA0 + +Count = 789 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = B5DFDE2BAD1C03B1909DCA35873A28EC6450910998F3C57C8F89A72DB1B282A703D7C38474FC65 + +Count = 790 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = F8A21C7A75ACA8EBC38C7767B369BAAFD9EA56F54E7C9A2491553E67E4614015C342F356AF93C1 + +Count = 791 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 850ED01B3C4D1138510CC96DB2C5DEF92ADD52F56463304B80D63E1162D015856F31A8D4EE0479 + +Count = 792 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 0D4DD617842088F79BFA5314EE52DAE2D4C4E3507FBD1A8C22E2A0B52051A54D1D52AE8E788177 + +Count = 793 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = +CT = BCBC3DBA06ACC4CDFF35542380E41AD4CD8B9AC196A8E1A3564A3F30A9DDE56B672B3C634CCE9D9E + +Count = 794 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 00 +CT = 489F132929D475DE63684E8781BDE96B6BBA3D829258E5D10B3A0CCD17FB38026A9F514B44AD7808 + +Count = 795 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 0001 +CT = 5FCD74E3D73FDCCAB6595CA791C97CACC45BC7B94885450989361571964602BA102A7A0CD51ED0C0 + +Count = 796 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102 +CT = 5DC87F60E85F0270020E6DB496B7DDEF39ED6CBBBD6917F829F6DD8E1AC441516413321C5F3DF407 + +Count = 797 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 00010203 +CT = 3C07E3D9825729831E7B67DF69102C7588459702A32EB2FE4141DE7869B3035C56002381DCE3D6BA + +Count = 798 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 0001020304 +CT = 69199774FBCE912CC6AFAB38779F8F7EAB3E4A146048CF83D9D654D815C87EB209A650F83D8DEB6A + +Count = 799 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405 +CT = 688F0E898D8A50017BD2FFB95C4AEC2F8C5885BF57BB22542D16175C6BFD15EBC21A25491A5DE3D9 + +Count = 800 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 00010203040506 +CT = 172CCE47A4D7B70FECA5D4C094B63CFA22A89B86CA0EB69C69753A37F36B72CDDC6EBCE50D47D08E + +Count = 801 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 0001020304050607 +CT = 06965B4B142E18DA2F2E2DB2BEAD6A59FBF33EBEE21012BFD08EAA24D10D62DB4D2BBC84A6D05D6E + +Count = 802 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708 +CT = 30BAA1ACB6C4C11BACA9F4169965632E5C908D94CEA7315CD1BCA6D099A0388DB8C510CD47C7CE01 + +Count = 803 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 00010203040506070809 +CT = 435560A07DC178C1BA6840C8B1ADE5BAFEE57403D40A930EAB84ED253230DB53C7BFA7765DEA6EEE + +Count = 804 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A +CT = 38DCDDF8966748BEB7271F886F13EED7F9A443F7F6FD0BCA641EC6F54BC8D4A56AB95D4770694AE5 + +Count = 805 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B +CT = F44BBEBBE2C11E620C3F87B78ACCC9429C8D74FFB164DB9B3AEDC9396787100F88D9E3FFA836B222 + +Count = 806 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C +CT = 8738EA8FF07A03FFA407F35682EF6184E184912F5D4851733F0AB35CC66FB7E662DE547A969B7CFF + +Count = 807 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D +CT = E8A79B1FA11C2934E73AD90341EEC9578406EB747967EB3285E064E747526F411EC170ABC8FABD29 + +Count = 808 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E +CT = 483E32CC243E9ECF8A016DDB48694DE7E6F739060460CF78B9460328E48E45212A3990032D929E07 + +Count = 809 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F +CT = A7EC70B046CA924C2FC369104AAC9E0F112957F9B52A1AE26852D8C4FE3551F338970ACE622182E3 + +Count = 810 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 1786DD6630C5BDFFD4B38801C6C5FA1CEA714FFFB56F7BAF23B35CA2733FF0F9157FF3EB2F55A8BC + +Count = 811 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = CD71CF4DE163C0D6BBA73F6FE1C8F5946D589CD22FA62C0116D1C1DD446677970AD5B75F9D205275 + +Count = 812 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = C89539D7BA911E5056DF013E4D06E7E9B3D196D3CD331F1AD6E85552E29A2F1ACE1BB40335F75419 + +Count = 813 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 05A7CBCAE537C07B01BAE164890DD2286EA16B3631A80FEE5EA205F4AB8F17A8E70A3A1E83C0A755 + +Count = 814 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 9950341105A624A10341C808264F63E651A81DF0947BDA2E9E2CC14DEB345356744E0523E95B4A80 + +Count = 815 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 270E125660EB64E750CC2ED725E50A83FE1DECE50CBC5C92EEB8723947A2CFAF4E4250EF9CE8F905 + +Count = 816 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 14817DA18EA2BAE715A6D0561546B7472AFD270D77F5BF66417792B1158EBF39169EFA16EDCBCE4E + +Count = 817 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 258B9CFF8CF7ECA819E347486470CCB07F702B85F7F627B128AFF90B7E9B3EC48E412988EF5BBD9C + +Count = 818 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 9EB1171872616C960DDAB5CF02EE9A734AF65716D2CB1452EBA50860FBCF66A54EB92F40168F4C0C + +Count = 819 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 271EACDB373F29B40BF89EB02BF13862657E2FF4C77FC4FBB3048F141EAFE5BB3A9B5E0AC9E2A0F9 + +Count = 820 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 7CE4C0AFFB85234FBFDF8906AFA14C0CD85819585AFB8BB7D671FB861ED87F256EC58EA6DF5393B2 + +Count = 821 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 3B1B692CE74058F012C5EAFC058292DE4F0A16ED1C0472CC353BCA2EB41F1285D0D6E0893E5C258A + +Count = 822 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = B5DFDE2BAD1C03B1909DCA35873A28EC6450910998F3C537FFC9D48E0D53F064071803F0FC88A820 + +Count = 823 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = F8A21C7A75ACA8EBC38C7767B369BAAFD9EA56F54E7C9A0C27FB9B39493C057D2E795480E8BCA405 + +Count = 824 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 850ED01B3C4D1138510CC96DB2C5DEF92ADD52F56463300C5762005D6DCE0DF04119F668022C9DC1 + +Count = 825 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 0D4DD617842088F79BFA5314EE52DAE2D4C4E3507FBD1A2273F6BF4C95DF8C8ACEAC901A4D9919DC + +Count = 826 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = +CT = BCBC3DBA06ACC4CDFF35542380E41AD4CD8B9AC196A8E1A3A5E7D73868FBC6C69E68A931D1E0C247B4 + +Count = 827 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 00 +CT = 489F132929D475DE63684E8781BDE96B6BBA3D829258E5D15E6A9FC56B32B3386DB146B5A75251D62E + +Count = 828 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 0001 +CT = 5FCD74E3D73FDCCAB6595CA791C97CACC45BC7B948854509A6A7C62AC40F864CB7274148D565450809 + +Count = 829 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102 +CT = 5DC87F60E85F0270020E6DB496B7DDEF39ED6CBBBD6917F898A73254130F186C24C82D90693EF4F32D + +Count = 830 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 00010203 +CT = 3C07E3D9825729831E7B67DF69102C7588459702A32EB2FEE9EF41A4009B9A0144A9EF8ED08E35DC55 + +Count = 831 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 0001020304 +CT = 69199774FBCE912CC6AFAB38779F8F7EAB3E4A146048CF83AF0C504787E1068C10FD016F3C19F18015 + +Count = 832 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405 +CT = 688F0E898D8A50017BD2FFB95C4AEC2F8C5885BF57BB2254A6B2A13251C9D95039623F13C6B6B3D2EB + +Count = 833 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 00010203040506 +CT = 172CCE47A4D7B70FECA5D4C094B63CFA22A89B86CA0EB69C93DB658F050897F21878D71FDC2515B528 + +Count = 834 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 0001020304050607 +CT = 06965B4B142E18DA2F2E2DB2BEAD6A59FBF33EBEE21012BF1252C934A717324CA5CA4E48CC46489995 + +Count = 835 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708 +CT = 30BAA1ACB6C4C11BACA9F4169965632E5C908D94CEA7315CA7B663AF911159C45E050434EEBD3DF976 + +Count = 836 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 00010203040506070809 +CT = 435560A07DC178C1BA6840C8B1ADE5BAFEE57403D40A930E5345CCF7B84D37DF3533CE64430209A24A + +Count = 837 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A +CT = 38DCDDF8966748BEB7271F886F13EED7F9A443F7F6FD0BCAFFFCE0431B788D430D15A9E407DB7576F4 + +Count = 838 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B +CT = F44BBEBBE2C11E620C3F87B78ACCC9429C8D74FFB164DB9BC7887425C6B84F1BE7BED223D3AAB2B41B + +Count = 839 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C +CT = 8738EA8FF07A03FFA407F35682EF6184E184912F5D4851732CE4227B726363A047198F2C36019F5FF7 + +Count = 840 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D +CT = E8A79B1FA11C2934E73AD90341EEC9578406EB747967EB32BB3CB1B9D881C4584A255017E15C971AFE + +Count = 841 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E +CT = 483E32CC243E9ECF8A016DDB48694DE7E6F739060460CF78230B872A616BDD045858F9AD4F4B970B82 + +Count = 842 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F +CT = A7EC70B046CA924C2FC369104AAC9E0F112957F9B52A1AE2817D853B8A31DDE0C13590D26C0DEED6EE + +Count = 843 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 1786DD6630C5BDFFD4B38801C6C5FA1CEA714FFFB56F7BAFE4ECD0110599ED12280B93A21416CFA8F4 + +Count = 844 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = CD71CF4DE163C0D6BBA73F6FE1C8F5946D589CD22FA62C01C9AEBBB530685876918F3E044F05B25ECE + +Count = 845 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = C89539D7BA911E5056DF013E4D06E7E9B3D196D3CD331F1A847B6DE9B76CDFD0E02DAEBB44672E4012 + +Count = 846 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 05A7CBCAE537C07B01BAE164890DD2286EA16B3631A80FEE29BCDABFFD3A810E4E802D30B4794DDF9E + +Count = 847 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 9950341105A624A10341C808264F63E651A81DF0947BDA2E2D66278ECEE4E8EBE6228D30C0CF50DF6B + +Count = 848 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 270E125660EB64E750CC2ED725E50A83FE1DECE50CBC5C92B06BA6B00852D845ED0151ADF19C6C992D + +Count = 849 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 14817DA18EA2BAE715A6D0561546B7472AFD270D77F5BF666E57164AD7BF574557A75F9D91D858936C + +Count = 850 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 258B9CFF8CF7ECA819E347486470CCB07F702B85F7F627B138BC0F230AACE2B00783A0AF5F06C40451 + +Count = 851 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 9EB1171872616C960DDAB5CF02EE9A734AF65716D2CB145293D96EA83066650D38A7EABD2C3E4B720B + +Count = 852 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 271EACDB373F29B40BF89EB02BF13862657E2FF4C77FC4FBB204D2AFDC0A88B1D279C67E490E750BA9 + +Count = 853 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 7CE4C0AFFB85234FBFDF8906AFA14C0CD85819585AFB8BB71D7FA5ABB2F3807F183DB9D9392F80BC5B + +Count = 854 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 3B1B692CE74058F012C5EAFC058292DE4F0A16ED1C0472CC6C0BE771370E66DCAF83BB0441B9E0BF35 + +Count = 855 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = B5DFDE2BAD1C03B1909DCA35873A28EC6450910998F3C53724CFA485013C5875F1F198EC7BCA1A140A + +Count = 856 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = F8A21C7A75ACA8EBC38C7767B369BAAFD9EA56F54E7C9A0CF54EC7D936D6C6571CF234DA68BBBEBC06 + +Count = 857 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 850ED01B3C4D1138510CC96DB2C5DEF92ADD52F56463300CB1305DAB92E425BF9E52BCC92D236E396D + +Count = 858 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 0D4DD617842088F79BFA5314EE52DAE2D4C4E3507FBD1A22FCDC907A9D08912F0A02B65A9142367710 + +Count = 859 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = +CT = BCBC3DBA06ACC4CDFF35542380E41AD4CD8B9AC196A8E1A3A54C2FE48A4794C32C8205D884E1F7D46DA3 + +Count = 860 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 00 +CT = 489F132929D475DE63684E8781BDE96B6BBA3D829258E5D15E9C645F1B19DA26ED08067C2F005DDE4F82 + +Count = 861 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 0001 +CT = 5FCD74E3D73FDCCAB6595CA791C97CACC45BC7B948854509A641274CA06D57F1403E326BDC6F9E7FF136 + +Count = 862 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102 +CT = 5DC87F60E85F0270020E6DB496B7DDEF39ED6CBBBD6917F898F6503499F0BDF904E5011E5F18AC688D17 + +Count = 863 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 00010203 +CT = 3C07E3D9825729831E7B67DF69102C7588459702A32EB2FEE90BDEBDE13C342A56B4DBE658A973126908 + +Count = 864 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 0001020304 +CT = 69199774FBCE912CC6AFAB38779F8F7EAB3E4A146048CF83AFAE0298965E581CFB3923F69DFAE192FE93 + +Count = 865 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405 +CT = 688F0E898D8A50017BD2FFB95C4AEC2F8C5885BF57BB2254A66D18D554F1845F69FBBBC6F21B3FFD6874 + +Count = 866 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 00010203040506 +CT = 172CCE47A4D7B70FECA5D4C094B63CFA22A89B86CA0EB69C93B7791986FC64BA79A24EF4ACD1E230FC29 + +Count = 867 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 0001020304050607 +CT = 06965B4B142E18DA2F2E2DB2BEAD6A59FBF33EBEE21012BF12F9572B01C64EE6CADA5FCEBDCB4269F146 + +Count = 868 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708 +CT = 30BAA1ACB6C4C11BACA9F4169965632E5C908D94CEA7315CA79047839BCE6F2223128F1938DBEB789F88 + +Count = 869 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 00010203040506070809 +CT = 435560A07DC178C1BA6840C8B1ADE5BAFEE57403D40A930E5304EA05AAC602F4D2CCE71BE445E7856863 + +Count = 870 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A +CT = 38DCDDF8966748BEB7271F886F13EED7F9A443F7F6FD0BCAFF29BDAE15225E5633C671957BE2BF0CE81D + +Count = 871 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B +CT = F44BBEBBE2C11E620C3F87B78ACCC9429C8D74FFB164DB9BC7EFE563FC8ABF6D676FE72B598B676E32B4 + +Count = 872 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C +CT = 8738EA8FF07A03FFA407F35682EF6184E184912F5D4851732CF6849B5FAB33093FED844809A06E7111DF + +Count = 873 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D +CT = E8A79B1FA11C2934E73AD90341EEC9578406EB747967EB32BB3EC39C255FD94B2BDBD8C8C822C8ECD8B4 + +Count = 874 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E +CT = 483E32CC243E9ECF8A016DDB48694DE7E6F739060460CF7823EC2999E0B07BE84294F076219B3DB32B2A + +Count = 875 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F +CT = A7EC70B046CA924C2FC369104AAC9E0F112957F9B52A1AE281E7D661F92AC79F202A170DF278D144CCE7 + +Count = 876 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 1786DD6630C5BDFFD4B38801C6C5FA1CEA714FFFB56F7BAFE4CFA9E42210D8A5568C1A42578E1BDDF089 + +Count = 877 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = CD71CF4DE163C0D6BBA73F6FE1C8F5946D589CD22FA62C01C95DF3C2211C1C9FACC96FF306D00AFEE2FE + +Count = 878 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = C89539D7BA911E5056DF013E4D06E7E9B3D196D3CD331F1A8499C2C3DD2BB394993A4E0BD3D0FCEE2CFC + +Count = 879 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 05A7CBCAE537C07B01BAE164890DD2286EA16B3631A80FEE295D6972760C19AE26102B038A1C134BD242 + +Count = 880 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 9950341105A624A10341C808264F63E651A81DF0947BDA2E2DF36723B8F0EF426E9D46E0978A17A0F0C7 + +Count = 881 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 270E125660EB64E750CC2ED725E50A83FE1DECE50CBC5C92B0C8F549BBF4E5E0095ED96EF59CC0B2C796 + +Count = 882 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 14817DA18EA2BAE715A6D0561546B7472AFD270D77F5BF666E1A4658D20724CB1647B17F6DFF6CC707D2 + +Count = 883 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 258B9CFF8CF7ECA819E347486470CCB07F702B85F7F627B1382D68205A1CCAC6D34D6B281CE002F33DA8 + +Count = 884 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 9EB1171872616C960DDAB5CF02EE9A734AF65716D2CB145293A4CD1C1796D73C699A4D042C3B9ED5CE62 + +Count = 885 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 271EACDB373F29B40BF89EB02BF13862657E2FF4C77FC4FBB2D8B9AB49279098500F79666C14FCB410E8 + +Count = 886 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 7CE4C0AFFB85234FBFDF8906AFA14C0CD85819585AFB8BB71D39B4CE38E39FCB571FE42DE17ABB7A864B + +Count = 887 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 3B1B692CE74058F012C5EAFC058292DE4F0A16ED1C0472CC6C7D285505E0E57C9FC1FF0A5646A731F80C + +Count = 888 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = B5DFDE2BAD1C03B1909DCA35873A28EC6450910998F3C537243B34CE6A49D74E53B56A994C355EC04B55 + +Count = 889 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = F8A21C7A75ACA8EBC38C7767B369BAAFD9EA56F54E7C9A0CF5B6453712BFA7ED4CC7E98ACC05A9124D5F + +Count = 890 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 850ED01B3C4D1138510CC96DB2C5DEF92ADD52F56463300CB1BD7AF33A63DB207D5489AB174CF245D2DA + +Count = 891 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 0D4DD617842088F79BFA5314EE52DAE2D4C4E3507FBD1A22FC05159E79459B4070A26C448E3268703514 + +Count = 892 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = +CT = BCBC3DBA06ACC4CDFF35542380E41AD4CD8B9AC196A8E1A3A54CE52698A1F41052B63FD38EC7E385373377 + +Count = 893 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 00 +CT = 489F132929D475DE63684E8781BDE96B6BBA3D829258E5D15E9CC3CFC42539F912CF7442882276A86172F0 + +Count = 894 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 0001 +CT = 5FCD74E3D73FDCCAB6595CA791C97CACC45BC7B948854509A6411485A7F2034637EFD18B14B0D5181E1486 + +Count = 895 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102 +CT = 5DC87F60E85F0270020E6DB496B7DDEF39ED6CBBBD6917F898F604E745026593AB00DAE45A284CB62B92F8 + +Count = 896 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 00010203 +CT = 3C07E3D9825729831E7B67DF69102C7588459702A32EB2FEE90B4DFC7814BEBB4ED9EDF7A61816F035D4E8 + +Count = 897 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 0001020304 +CT = 69199774FBCE912CC6AFAB38779F8F7EAB3E4A146048CF83AFAE03F0CE053989A23775D4847C42634C673B + +Count = 898 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405 +CT = 688F0E898D8A50017BD2FFB95C4AEC2F8C5885BF57BB2254A66D1FEAD9A37B42F8A5ECF9FEED54E0D5C495 + +Count = 899 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 00010203040506 +CT = 172CCE47A4D7B70FECA5D4C094B63CFA22A89B86CA0EB69C93B7ECC98E894593693C080E33B1093AB5AA6A + +Count = 900 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 0001020304050607 +CT = 06965B4B142E18DA2F2E2DB2BEAD6A59FBF33EBEE21012BF12F99BBB768FE8B7C07ECAF1F1C78891503237 + +Count = 901 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708 +CT = 30BAA1ACB6C4C11BACA9F4169965632E5C908D94CEA7315CA790A061A6B673B354235E2E618527F008C49C + +Count = 902 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 00010203040506070809 +CT = 435560A07DC178C1BA6840C8B1ADE5BAFEE57403D40A930E530408C818719B26A6409116033902205155B6 + +Count = 903 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A +CT = 38DCDDF8966748BEB7271F886F13EED7F9A443F7F6FD0BCAFF29CF404135123765FB78B175B122C839A092 + +Count = 904 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B +CT = F44BBEBBE2C11E620C3F87B78ACCC9429C8D74FFB164DB9BC7EFB38B25B1680311F127BD04A479A834D7B4 + +Count = 905 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C +CT = 8738EA8FF07A03FFA407F35682EF6184E184912F5D4851732CF6601DEC8ADDF946EEC3DF4B65270D42CF03 + +Count = 906 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D +CT = E8A79B1FA11C2934E73AD90341EEC9578406EB747967EB32BB3EBF2F0579ECC49C2A0D02946EDAD0CCF673 + +Count = 907 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E +CT = 483E32CC243E9ECF8A016DDB48694DE7E6F739060460CF7823EC7D4AC24E0F94CF6A9DAC5EDA72A94BE65F + +Count = 908 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F +CT = A7EC70B046CA924C2FC369104AAC9E0F112957F9B52A1AE281E74DCC3D8C0106B2A63474F5469C857CE815 + +Count = 909 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 1786DD6630C5BDFFD4B38801C6C5FA1CEA714FFFB56F7BAFE4CF3DF038B1B20E23E4F74C78787CEA7A2711 + +Count = 910 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = CD71CF4DE163C0D6BBA73F6FE1C8F5946D589CD22FA62C01C95D732A180B33775C4E1D928E0C357AC55A3A + +Count = 911 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = C89539D7BA911E5056DF013E4D06E7E9B3D196D3CD331F1A8499201ED9075F951473CA9B22ECA594372F2B + +Count = 912 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 05A7CBCAE537C07B01BAE164890DD2286EA16B3631A80FEE295D4546F5E88DCC03A1CC6E3ACDAF743A7D7A + +Count = 913 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 9950341105A624A10341C808264F63E651A81DF0947BDA2E2DF3C084007774C88148667120B7A5B47DCAEB + +Count = 914 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 270E125660EB64E750CC2ED725E50A83FE1DECE50CBC5C92B0C8DFDEBD6009676B9C11509FFC852C819839 + +Count = 915 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 14817DA18EA2BAE715A6D0561546B7472AFD270D77F5BF666E1A8DE01DF62C449199E03A681207F016ECCB + +Count = 916 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 258B9CFF8CF7ECA819E347486470CCB07F702B85F7F627B1382D9EFBC8078183FF3572330729E830B964E4 + +Count = 917 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 9EB1171872616C960DDAB5CF02EE9A734AF65716D2CB145293A41D3FF09F62422ACE116B56A13A8DAC6701 + +Count = 918 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 271EACDB373F29B40BF89EB02BF13862657E2FF4C77FC4FBB2D83DFA053D6D725A7588CD91BF1228D692EC + +Count = 919 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 7CE4C0AFFB85234FBFDF8906AFA14C0CD85819585AFB8BB71D397D2A522A8F3AECAE8642A01A51D73A3FE8 + +Count = 920 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 3B1B692CE74058F012C5EAFC058292DE4F0A16ED1C0472CC6C7D5622F7623250A08F4E4096CE8B45AD0C28 + +Count = 921 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = B5DFDE2BAD1C03B1909DCA35873A28EC6450910998F3C537243B9CC31BEE9DBC1BFB891A4613B5133E930A + +Count = 922 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = F8A21C7A75ACA8EBC38C7767B369BAAFD9EA56F54E7C9A0CF5B66E51718E4756C9D3511C31DA965FF1AB9C + +Count = 923 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 850ED01B3C4D1138510CC96DB2C5DEF92ADD52F56463300CB1BDEE782A25AD53A8BFE9E45A5280B83085FA + +Count = 924 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 0D4DD617842088F79BFA5314EE52DAE2D4C4E3507FBD1A22FC0539C8B19D6A4E15BAD9820B8C7F9B3230DE + +Count = 925 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = +CT = BCBC3DBA06ACC4CDFF35542380E41AD4CD8B9AC196A8E1A3A54CE5EB760553EEE5E916AE06C3A92AD9757843 + +Count = 926 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 00 +CT = 489F132929D475DE63684E8781BDE96B6BBA3D829258E5D15E9CC3752128D0665E6F5635FB1142D10A5ECA8A + +Count = 927 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 0001 +CT = 5FCD74E3D73FDCCAB6595CA791C97CACC45BC7B948854509A6411480CB72512B59DEBFCB6D479D33F9174625 + +Count = 928 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102 +CT = 5DC87F60E85F0270020E6DB496B7DDEF39ED6CBBBD6917F898F604EB15806396B2565CD75C0801C349C5FF36 + +Count = 929 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 00010203 +CT = 3C07E3D9825729831E7B67DF69102C7588459702A32EB2FEE90B4D08541178820236BB51E3B466077A87CF29 + +Count = 930 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 0001020304 +CT = 69199774FBCE912CC6AFAB38779F8F7EAB3E4A146048CF83AFAE031F2E2F37EDC0851EF310810457DD24B674 + +Count = 931 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405 +CT = 688F0E898D8A50017BD2FFB95C4AEC2F8C5885BF57BB2254A66D1F64A069730B21EA018C1FDB31A7139BA4A3 + +Count = 932 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 00010203040506 +CT = 172CCE47A4D7B70FECA5D4C094B63CFA22A89B86CA0EB69C93B7EC729E61FF9C37A590D4BE19FFE63AE23640 + +Count = 933 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 0001020304050607 +CT = 06965B4B142E18DA2F2E2DB2BEAD6A59FBF33EBEE21012BF12F99B8CBE21DA129441220134986FC5B597D8D7 + +Count = 934 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708 +CT = 30BAA1ACB6C4C11BACA9F4169965632E5C908D94CEA7315CA790A07DB3C3120BA803D4A34E3227F3A497BB79 + +Count = 935 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 00010203040506070809 +CT = 435560A07DC178C1BA6840C8B1ADE5BAFEE57403D40A930E5304087D270D27B340BD54CC7879862E99081F5E + +Count = 936 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A +CT = 38DCDDF8966748BEB7271F886F13EED7F9A443F7F6FD0BCAFF29CF0B52BEDBF8269CC83F221310A25DF0DDB8 + +Count = 937 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B +CT = F44BBEBBE2C11E620C3F87B78ACCC9429C8D74FFB164DB9BC7EFB330B3BF2D057E36093539B1F467B9EFF024 + +Count = 938 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C +CT = 8738EA8FF07A03FFA407F35682EF6184E184912F5D4851732CF6608221B3CBC185C80237E0BCA813F41E7903 + +Count = 939 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D +CT = E8A79B1FA11C2934E73AD90341EEC9578406EB747967EB32BB3EBFEFE265B7C813D7F4A51C13FB02753E7F3F + +Count = 940 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E +CT = 483E32CC243E9ECF8A016DDB48694DE7E6F739060460CF7823EC7D3D17CB8A22E1E607D4E19697DD35BB58D2 + +Count = 941 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F +CT = A7EC70B046CA924C2FC369104AAC9E0F112957F9B52A1AE281E74D648FE90C5BB5D9E11C4D98427DB6A213C2 + +Count = 942 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 1786DD6630C5BDFFD4B38801C6C5FA1CEA714FFFB56F7BAFE4CF3D18C79947A553685B57A45729FFE06903B6 + +Count = 943 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = CD71CF4DE163C0D6BBA73F6FE1C8F5946D589CD22FA62C01C95D730767A07891AEFC89E74AB74F43E3531098 + +Count = 944 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = C89539D7BA911E5056DF013E4D06E7E9B3D196D3CD331F1A849920B3AB087E3814BF5E0809C11AE0E9ECF201 + +Count = 945 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 05A7CBCAE537C07B01BAE164890DD2286EA16B3631A80FEE295D4567975A21908D4D2DB8F30AADDCB398CC35 + +Count = 946 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 9950341105A624A10341C808264F63E651A81DF0947BDA2E2DF3C033A55573FB2D33AF82A7D6AF5AE79C874D + +Count = 947 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 270E125660EB64E750CC2ED725E50A83FE1DECE50CBC5C92B0C8DFE61403AD012CC040D27826E21D4026C849 + +Count = 948 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 14817DA18EA2BAE715A6D0561546B7472AFD270D77F5BF666E1A8DA7D975577EAB7E1301192394FCBB41560B + +Count = 949 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 258B9CFF8CF7ECA819E347486470CCB07F702B85F7F627B1382D9EAF31B8BE44B3CA2BF070587AEE9DD76FBF + +Count = 950 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 9EB1171872616C960DDAB5CF02EE9A734AF65716D2CB145293A41DEE7D4407F1BCF0566C3009D6CC338F00A3 + +Count = 951 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 271EACDB373F29B40BF89EB02BF13862657E2FF4C77FC4FBB2D83DB0715343EB00BE9F10FF11138F85265D9C + +Count = 952 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 7CE4C0AFFB85234FBFDF8906AFA14C0CD85819585AFB8BB71D397D72505851D58B11AE35BE262C6EC0A02F47 + +Count = 953 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 3B1B692CE74058F012C5EAFC058292DE4F0A16ED1C0472CC6C7D56356F2852D7A367F34B8BE7409E1DCA10FE + +Count = 954 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = B5DFDE2BAD1C03B1909DCA35873A28EC6450910998F3C537243B9CDC2616BA8A61D304350D53A499B6A15DCE + +Count = 955 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = F8A21C7A75ACA8EBC38C7767B369BAAFD9EA56F54E7C9A0CF5B66E1594264D70C317BAB59BF6BBA711B89E4A + +Count = 956 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 850ED01B3C4D1138510CC96DB2C5DEF92ADD52F56463300CB1BDEE9BEBE5CAE6D6B4F7DBE6AC60218A632C0A + +Count = 957 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 0D4DD617842088F79BFA5314EE52DAE2D4C4E3507FBD1A22FC05393D2F5015F19C2BFE0614995C60E5981566 + +Count = 958 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = +CT = BCBC3DBA06ACC4CDFF35542380E41AD4CD8B9AC196A8E1A3A54CE5EBE8F68975873DE54EC7802C881CE025974D + +Count = 959 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 00 +CT = 489F132929D475DE63684E8781BDE96B6BBA3D829258E5D15E9CC375AF4A60AB92D75ABCA9B947C7BD0A716D4B + +Count = 960 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 0001 +CT = 5FCD74E3D73FDCCAB6595CA791C97CACC45BC7B948854509A64114808D94D9D2BFF7B9364964D1686BA216CE55 + +Count = 961 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102 +CT = 5DC87F60E85F0270020E6DB496B7DDEF39ED6CBBBD6917F898F604EB1F9CE94CE2CCB9A9C31AA31DC496C71809 + +Count = 962 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 00010203 +CT = 3C07E3D9825729831E7B67DF69102C7588459702A32EB2FEE90B4D0816E6F8BEA07B948DCA8C9A2EE5AA1B0A9B + +Count = 963 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 0001020304 +CT = 69199774FBCE912CC6AFAB38779F8F7EAB3E4A146048CF83AFAE031F5B8FE94794FD8345F06A191EF9C4B81358 + +Count = 964 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405 +CT = 688F0E898D8A50017BD2FFB95C4AEC2F8C5885BF57BB2254A66D1F64D534946DD6889DE76D5D1BA96B7F5E9700 + +Count = 965 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 00010203040506 +CT = 172CCE47A4D7B70FECA5D4C094B63CFA22A89B86CA0EB69C93B7EC729B21398A11D586D6564CF40502932E0671 + +Count = 966 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 0001020304050607 +CT = 06965B4B142E18DA2F2E2DB2BEAD6A59FBF33EBEE21012BF12F99B8C0838BA0623BD6AB975456AD805EE849276 + +Count = 967 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708 +CT = 30BAA1ACB6C4C11BACA9F4169965632E5C908D94CEA7315CA790A07D1007A1497A87EF706D480D3F126055A800 + +Count = 968 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 00010203040506070809 +CT = 435560A07DC178C1BA6840C8B1ADE5BAFEE57403D40A930E5304087D7832B7775A1FDB7529D7A94595E69376F9 + +Count = 969 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A +CT = 38DCDDF8966748BEB7271F886F13EED7F9A443F7F6FD0BCAFF29CF0BA35CC59CA7EFC793F5ED823C4F69988440 + +Count = 970 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B +CT = F44BBEBBE2C11E620C3F87B78ACCC9429C8D74FFB164DB9BC7EFB3304A15AA56A4776A64E67BEBA002D17F196B + +Count = 971 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C +CT = 8738EA8FF07A03FFA407F35682EF6184E184912F5D4851732CF66082E231A90BD93A5047471EBF5CF346EF3838 + +Count = 972 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D +CT = E8A79B1FA11C2934E73AD90341EEC9578406EB747967EB32BB3EBFEFC330C52B292F7284431EE1857FF59D4DF8 + +Count = 973 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E +CT = 483E32CC243E9ECF8A016DDB48694DE7E6F739060460CF7823EC7D3D79860E8C656963890ED6BD56868741626A + +Count = 974 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F +CT = A7EC70B046CA924C2FC369104AAC9E0F112957F9B52A1AE281E74D644AF3B00DFA641ECFF79B978D93BE7A3E90 + +Count = 975 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 1786DD6630C5BDFFD4B38801C6C5FA1CEA714FFFB56F7BAFE4CF3D185B48D48C949D9D14E7FA18F5EA1E14CF04 + +Count = 976 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = CD71CF4DE163C0D6BBA73F6FE1C8F5946D589CD22FA62C01C95D7307D05003A0636453B4C2DF0D1DB65CFF1DAC + +Count = 977 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = C89539D7BA911E5056DF013E4D06E7E9B3D196D3CD331F1A849920B3F22119590496AFE88EE4ECCFFA6524247B + +Count = 978 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 05A7CBCAE537C07B01BAE164890DD2286EA16B3631A80FEE295D456783D1E553C834BAC9C644348BF1D4B069A4 + +Count = 979 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 9950341105A624A10341C808264F63E651A81DF0947BDA2E2DF3C0335FCE0C04F6E6A51F8EDB7996DC679453AE + +Count = 980 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 270E125660EB64E750CC2ED725E50A83FE1DECE50CBC5C92B0C8DFE658BD4D3B9E5D70D1CF31D492BC62E13552 + +Count = 981 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 14817DA18EA2BAE715A6D0561546B7472AFD270D77F5BF666E1A8DA7FB9463E25998DDD57733B7B2762809F029 + +Count = 982 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 258B9CFF8CF7ECA819E347486470CCB07F702B85F7F627B1382D9EAF99F1726F3AA9AC49415A9F11CEEAFC2AD4 + +Count = 983 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 9EB1171872616C960DDAB5CF02EE9A734AF65716D2CB145293A41DEE994F31E3015D8C5575163244C43FAE6DD6 + +Count = 984 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 271EACDB373F29B40BF89EB02BF13862657E2FF4C77FC4FBB2D83DB0051C5F030E7F24D878B1BCAED0D4FD5009 + +Count = 985 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 7CE4C0AFFB85234FBFDF8906AFA14C0CD85819585AFB8BB71D397D72860191579B189BD0E5EBAA6922DB9C52B8 + +Count = 986 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 3B1B692CE74058F012C5EAFC058292DE4F0A16ED1C0472CC6C7D56351CE78E3E9254D742C328E76750E54BB8AC + +Count = 987 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = B5DFDE2BAD1C03B1909DCA35873A28EC6450910998F3C537243B9CDCFC344A94DBF7EE43B16D14243637B06D81 + +Count = 988 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = F8A21C7A75ACA8EBC38C7767B369BAAFD9EA56F54E7C9A0CF5B66E156DA3F1C630E66F7E5A391BF8664D75C779 + +Count = 989 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 850ED01B3C4D1138510CC96DB2C5DEF92ADD52F56463300CB1BDEE9BAEE3D2D85DCDF6878C315C50019EE16758 + +Count = 990 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 0D4DD617842088F79BFA5314EE52DAE2D4C4E3507FBD1A22FC05393D68E1E4EB18B4B60BB8AF4E6F3A1DF4EF9D + +Count = 991 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = +CT = BCBC3DBA06ACC4CDFF35542380E41AD4CD8B9AC196A8E1A3A54CE5EBE82FD7EAF5636FC17D451CC431EA64E17A4A + +Count = 992 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 00 +CT = 489F132929D475DE63684E8781BDE96B6BBA3D829258E5D15E9CC375AF55BB223080C602AB120159C0D3A0AA6857 + +Count = 993 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 0001 +CT = 5FCD74E3D73FDCCAB6595CA791C97CACC45BC7B948854509A64114808D1DCF792E86EFD3FCAB0EB864281B395260 + +Count = 994 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102 +CT = 5DC87F60E85F0270020E6DB496B7DDEF39ED6CBBBD6917F898F604EB1F87F597101E1DA93511E9627C5941EC33E5 + +Count = 995 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 00010203 +CT = 3C07E3D9825729831E7B67DF69102C7588459702A32EB2FEE90B4D081625B6C39AC8387ACB6264CCB1D0BD23C751 + +Count = 996 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 0001020304 +CT = 69199774FBCE912CC6AFAB38779F8F7EAB3E4A146048CF83AFAE031F5BC3B9676C9DF09F2BD5D5756D683238377C + +Count = 997 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405 +CT = 688F0E898D8A50017BD2FFB95C4AEC2F8C5885BF57BB2254A66D1F64D54D140DDD1416D6E47C2243192279BFC923 + +Count = 998 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 00010203040506 +CT = 172CCE47A4D7B70FECA5D4C094B63CFA22A89B86CA0EB69C93B7EC729BA11F1446F9E7E89B7B3A1B77B89D946D64 + +Count = 999 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 0001020304050607 +CT = 06965B4B142E18DA2F2E2DB2BEAD6A59FBF33EBEE21012BF12F99B8C08775F425B613B6D1D7D88872789844DE6E0 + +Count = 1000 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708 +CT = 30BAA1ACB6C4C11BACA9F4169965632E5C908D94CEA7315CA790A07D10F304073F89560BEEB17788D7B07C26D6E5 + +Count = 1001 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 00010203040506070809 +CT = 435560A07DC178C1BA6840C8B1ADE5BAFEE57403D40A930E5304087D7815FFAAE1C2C32BE4410AF268765CA22C4C + +Count = 1002 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A +CT = 38DCDDF8966748BEB7271F886F13EED7F9A443F7F6FD0BCAFF29CF0BA3793543A0141587758334B79FE590AEA232 + +Count = 1003 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B +CT = F44BBEBBE2C11E620C3F87B78ACCC9429C8D74FFB164DB9BC7EFB3304AD105A382F635CB3D37ED2DE3F6D4AF8774 + +Count = 1004 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C +CT = 8738EA8FF07A03FFA407F35682EF6184E184912F5D4851732CF66082E20F724E0F445CD59AE9BDD55ADB9EECEFA4 + +Count = 1005 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D +CT = E8A79B1FA11C2934E73AD90341EEC9578406EB747967EB32BB3EBFEFC39DC1223A5F952F12E587E7630C8CF73DB5 + +Count = 1006 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E +CT = 483E32CC243E9ECF8A016DDB48694DE7E6F739060460CF7823EC7D3D79646CB919C4DD4236D931F81E7235858600 + +Count = 1007 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F +CT = A7EC70B046CA924C2FC369104AAC9E0F112957F9B52A1AE281E74D644A840D7AA28B753D83B783596EBFC0BF13C4 + +Count = 1008 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 1786DD6630C5BDFFD4B38801C6C5FA1CEA714FFFB56F7BAFE4CF3D185B16F05EC136DE70AF32EA898AE058E2A2CE + +Count = 1009 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = CD71CF4DE163C0D6BBA73F6FE1C8F5946D589CD22FA62C01C95D7307D08C134D06389E93058180C704819F6404CB + +Count = 1010 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = C89539D7BA911E5056DF013E4D06E7E9B3D196D3CD331F1A849920B3F294A5FC9F4765C1BA81A2949FF8EF884B41 + +Count = 1011 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 05A7CBCAE537C07B01BAE164890DD2286EA16B3631A80FEE295D456783998B9846D1717B5977AAD8949CF3A2377C + +Count = 1012 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 9950341105A624A10341C808264F63E651A81DF0947BDA2E2DF3C0335FE2C2DA8C510A57E3C90ACF0ECB3B5E00EA + +Count = 1013 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 270E125660EB64E750CC2ED725E50A83FE1DECE50CBC5C92B0C8DFE658F47F8011A58AA115DF5E62B8C68A88EDEB + +Count = 1014 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 14817DA18EA2BAE715A6D0561546B7472AFD270D77F5BF666E1A8DA7FB4F42D70555FA8D3A54B3625EF9781F1873 + +Count = 1015 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 258B9CFF8CF7ECA819E347486470CCB07F702B85F7F627B1382D9EAF99471D3D5B72BA72579ACFC4847D4CB1A38E + +Count = 1016 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 9EB1171872616C960DDAB5CF02EE9A734AF65716D2CB145293A41DEE99042362311E6175A59EB4757F5B429AA4C1 + +Count = 1017 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 271EACDB373F29B40BF89EB02BF13862657E2FF4C77FC4FBB2D83DB0050276280FD1B4B67D243E2855DEE0491234 + +Count = 1018 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 7CE4C0AFFB85234FBFDF8906AFA14C0CD85819585AFB8BB71D397D72869F0C473639E764C6034389F94381568799 + +Count = 1019 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 3B1B692CE74058F012C5EAFC058292DE4F0A16ED1C0472CC6C7D56351CFBAB435D3404F3F4364D86E0FEBEE003EC + +Count = 1020 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = B5DFDE2BAD1C03B1909DCA35873A28EC6450910998F3C537243B9CDCFC206D4A05A5AB3948CB93B188B391982B90 + +Count = 1021 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = F8A21C7A75ACA8EBC38C7767B369BAAFD9EA56F54E7C9A0CF5B66E156DBF0EC788354B39BA6CC0D94C6EA61F04DF + +Count = 1022 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 850ED01B3C4D1138510CC96DB2C5DEF92ADD52F56463300CB1BDEE9BAEA13352C9AF7145124DE05CD5D749917820 + +Count = 1023 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 0D4DD617842088F79BFA5314EE52DAE2D4C4E3507FBD1A22FC05393D68C5E662E968702A5600D95868A5EF2003D1 + +Count = 1024 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = +CT = BCBC3DBA06ACC4CDFF35542380E41AD4CD8B9AC196A8E1A3A54CE5EBE82F27591D78B20AA5FC51FB55FF2344BF31D1 + +Count = 1025 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 00 +CT = 489F132929D475DE63684E8781BDE96B6BBA3D829258E5D15E9CC375AF55AA24AC599E60D6F978DA5B15AC230ED442 + +Count = 1026 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 0001 +CT = 5FCD74E3D73FDCCAB6595CA791C97CACC45BC7B948854509A64114808D1D42115124BAE130548645B959983DE8C8EB + +Count = 1027 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102 +CT = 5DC87F60E85F0270020E6DB496B7DDEF39ED6CBBBD6917F898F604EB1F87CE66FBA27B556C058764B5BA518DD3C79C + +Count = 1028 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 00010203 +CT = 3C07E3D9825729831E7B67DF69102C7588459702A32EB2FEE90B4D081625839B79A3ECB1A7E63A19349C5FBD5C3AFB + +Count = 1029 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 0001020304 +CT = 69199774FBCE912CC6AFAB38779F8F7EAB3E4A146048CF83AFAE031F5BC349CAB0777B8AC36CB698935A8FEC565EE2 + +Count = 1030 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405 +CT = 688F0E898D8A50017BD2FFB95C4AEC2F8C5885BF57BB2254A66D1F64D54DBF53B741D7869F00286E31E8926F2C47CC + +Count = 1031 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 00010203040506 +CT = 172CCE47A4D7B70FECA5D4C094B63CFA22A89B86CA0EB69C93B7EC729BA12E484B871582CFE464F05D754BFA23337B + +Count = 1032 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 0001020304050607 +CT = 06965B4B142E18DA2F2E2DB2BEAD6A59FBF33EBEE21012BF12F99B8C0877512AC1C984399E734F19F8DEDA9D606A79 + +Count = 1033 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708 +CT = 30BAA1ACB6C4C11BACA9F4169965632E5C908D94CEA7315CA790A07D10F3143EB9C6DC39EFAD1D2A5945F3DCB53FB6 + +Count = 1034 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 00010203040506070809 +CT = 435560A07DC178C1BA6840C8B1ADE5BAFEE57403D40A930E5304087D781562760885626B52EC73AD69D5FC3469FC5B + +Count = 1035 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A +CT = 38DCDDF8966748BEB7271F886F13EED7F9A443F7F6FD0BCAFF29CF0BA379A51253FB40F3D4429608AEC3BCB8E26C72 + +Count = 1036 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B +CT = F44BBEBBE2C11E620C3F87B78ACCC9429C8D74FFB164DB9BC7EFB3304AD16FB040BA6D8262FBBF960B749C553DEEA9 + +Count = 1037 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C +CT = 8738EA8FF07A03FFA407F35682EF6184E184912F5D4851732CF66082E20FBE1D9C1EF28E4922B164AB667F6E1D2C45 + +Count = 1038 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D +CT = E8A79B1FA11C2934E73AD90341EEC9578406EB747967EB32BB3EBFEFC39DF3247917A5D1F93D875ED2420EE0DE342C + +Count = 1039 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E +CT = 483E32CC243E9ECF8A016DDB48694DE7E6F739060460CF7823EC7D3D79641EBE7CD7678F9A5D05E947E481AB157819 + +Count = 1040 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F +CT = A7EC70B046CA924C2FC369104AAC9E0F112957F9B52A1AE281E74D644A840E207F90114BFE7ACD775C45055D478B44 + +Count = 1041 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 1786DD6630C5BDFFD4B38801C6C5FA1CEA714FFFB56F7BAFE4CF3D185B16729450D95CB4B660D3F76EFC2438AF33B9 + +Count = 1042 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = CD71CF4DE163C0D6BBA73F6FE1C8F5946D589CD22FA62C01C95D7307D08C8699F1E0BDF4DA2AA806577B00F1326E5D + +Count = 1043 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = C89539D7BA911E5056DF013E4D06E7E9B3D196D3CD331F1A849920B3F294B20654F0B6B451CD673DD8B00B524DBEEF + +Count = 1044 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 05A7CBCAE537C07B01BAE164890DD2286EA16B3631A80FEE295D45678399151420D2D4351026C237BE885DBFCE6825 + +Count = 1045 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 9950341105A624A10341C808264F63E651A81DF0947BDA2E2DF3C0335FE25D6B8CDFE5DDD642C6B7F50FD77BE86803 + +Count = 1046 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 270E125660EB64E750CC2ED725E50A83FE1DECE50CBC5C92B0C8DFE658F432C2906AB6A0F17BC0C6097956ED79E4EF + +Count = 1047 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 14817DA18EA2BAE715A6D0561546B7472AFD270D77F5BF666E1A8DA7FB4FF2A7BF66458491ECEAA967BEA312762B6D + +Count = 1048 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 258B9CFF8CF7ECA819E347486470CCB07F702B85F7F627B1382D9EAF9947E92EE404D0ED3B9E4ACB2E5312093B84B0 + +Count = 1049 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 9EB1171872616C960DDAB5CF02EE9A734AF65716D2CB145293A41DEE9904495FFB846039753D1ED13247B7B211B1F8 + +Count = 1050 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 271EACDB373F29B40BF89EB02BF13862657E2FF4C77FC4FBB2D83DB005026BCE1747B09FB30C292D03B70DC7FDD353 + +Count = 1051 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 7CE4C0AFFB85234FBFDF8906AFA14C0CD85819585AFB8BB71D397D72869F0EEEE8FD1B9344790DB26834A209C63335 + +Count = 1052 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 3B1B692CE74058F012C5EAFC058292DE4F0A16ED1C0472CC6C7D56351CFB9E4472B63C57C4DE51CAB1E409D900765C + +Count = 1053 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = B5DFDE2BAD1C03B1909DCA35873A28EC6450910998F3C537243B9CDCFC20868F8C9E39B6905B2797927D843C30AECF + +Count = 1054 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = F8A21C7A75ACA8EBC38C7767B369BAAFD9EA56F54E7C9A0CF5B66E156DBF74575143D9188C28DE641727E2835E8561 + +Count = 1055 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 850ED01B3C4D1138510CC96DB2C5DEF92ADD52F56463300CB1BDEE9BAEA19A46446528D855C0FBA7CA77F9FB64BA12 + +Count = 1056 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 0D4DD617842088F79BFA5314EE52DAE2D4C4E3507FBD1A22FC05393D68C5CD606EC877348F56F35F2D08C20DDB922F + +Count = 1057 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = +CT = BCBC3DBA06ACC4CDFF35542380E41AD4CD8B9AC196A8E1A3A54CE5EBE82F276C7344D26B646964BF0329BDCAA522AB7E + +Count = 1058 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 00 +CT = 489F132929D475DE63684E8781BDE96B6BBA3D829258E5D15E9CC375AF55AA94EBB65F6740AB62BBCC42ED71128A6C40 + +Count = 1059 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 0001 +CT = 5FCD74E3D73FDCCAB6595CA791C97CACC45BC7B948854509A64114808D1D42280677BCFCBB6FD117F15AA02C18DA0C85 + +Count = 1060 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102 +CT = 5DC87F60E85F0270020E6DB496B7DDEF39ED6CBBBD6917F898F604EB1F87CEDB8FEC91D0CE022CF15F0F0AE1CFAB932D + +Count = 1061 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 00010203 +CT = 3C07E3D9825729831E7B67DF69102C7588459702A32EB2FEE90B4D0816258337CBED807FE85403A1DB74B6276E634E28 + +Count = 1062 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 0001020304 +CT = 69199774FBCE912CC6AFAB38779F8F7EAB3E4A146048CF83AFAE031F5BC349959E34B997D1A70B6A3864DCE7D905B01D + +Count = 1063 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405 +CT = 688F0E898D8A50017BD2FFB95C4AEC2F8C5885BF57BB2254A66D1F64D54DBF7E98932D1697897C903B50F7F7897415B6 + +Count = 1064 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 00010203040506 +CT = 172CCE47A4D7B70FECA5D4C094B63CFA22A89B86CA0EB69C93B7EC729BA12E8DAC5F73B6A23FF4783EA9A058434C5ED7 + +Count = 1065 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 0001020304050607 +CT = 06965B4B142E18DA2F2E2DB2BEAD6A59FBF33EBEE21012BF12F99B8C087751A480F41081577F6BAE22D35ACD88449E21 + +Count = 1066 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708 +CT = 30BAA1ACB6C4C11BACA9F4169965632E5C908D94CEA7315CA790A07D10F314714BB670EAA7882BC1BFB918383AD27BD2 + +Count = 1067 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 00010203040506070809 +CT = 435560A07DC178C1BA6840C8B1ADE5BAFEE57403D40A930E5304087D781562750D58FD795F026A69066D819144E8E839 + +Count = 1068 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A +CT = 38DCDDF8966748BEB7271F886F13EED7F9A443F7F6FD0BCAFF29CF0BA379A5AD63F1E5469BAB4608D1F409129D14B681 + +Count = 1069 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B +CT = F44BBEBBE2C11E620C3F87B78ACCC9429C8D74FFB164DB9BC7EFB3304AD16F3ED9FBAF60187E50B83BC640F987AD93E7 + +Count = 1070 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C +CT = 8738EA8FF07A03FFA407F35682EF6184E184912F5D4851732CF66082E20FBE0BA3698152072698D27F6A0B76B949AECF + +Count = 1071 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D +CT = E8A79B1FA11C2934E73AD90341EEC9578406EB747967EB32BB3EBFEFC39DF3A354135A829DBA4004A78D3FA189A19011 + +Count = 1072 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E +CT = 483E32CC243E9ECF8A016DDB48694DE7E6F739060460CF7823EC7D3D79641E25F329622922AA2232AF0A00404EFBFD9B + +Count = 1073 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F +CT = A7EC70B046CA924C2FC369104AAC9E0F112957F9B52A1AE281E74D644A840E13C406A746F9BB83576931415ABEA34718 + +Count = 1074 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 1786DD6630C5BDFFD4B38801C6C5FA1CEA714FFFB56F7BAFE4CF3D185B167220D7E96394DCB8D045E4597CFF6BB45EA1 + +Count = 1075 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = CD71CF4DE163C0D6BBA73F6FE1C8F5946D589CD22FA62C01C95D7307D08C86E377E6F442E7AAEAC79A2722C733233C29 + +Count = 1076 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = C89539D7BA911E5056DF013E4D06E7E9B3D196D3CD331F1A849920B3F294B2D28E6C7DEA33FB553B8D2136041FEFDC41 + +Count = 1077 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 05A7CBCAE537C07B01BAE164890DD2286EA16B3631A80FEE295D4567839915B5F740A1E3B082EB7FB4484147F2FFBB43 + +Count = 1078 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 9950341105A624A10341C808264F63E651A81DF0947BDA2E2DF3C0335FE25D84370A323A77603FA982EFF1F52EE1D24B + +Count = 1079 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 270E125660EB64E750CC2ED725E50A83FE1DECE50CBC5C92B0C8DFE658F4324E51FE8983FFCA960957B64DD72AD29E47 + +Count = 1080 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 14817DA18EA2BAE715A6D0561546B7472AFD270D77F5BF666E1A8DA7FB4FF2CA5A777E5A802216ED7C6E40621D2DBB37 + +Count = 1081 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 258B9CFF8CF7ECA819E347486470CCB07F702B85F7F627B1382D9EAF9947E93CB65FF6BA31E35D94978319BAA67500C0 + +Count = 1082 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 9EB1171872616C960DDAB5CF02EE9A734AF65716D2CB145293A41DEE9904497861345A3D1CF94BDB716F4B2A9EA8C7F5 + +Count = 1083 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 271EACDB373F29B40BF89EB02BF13862657E2FF4C77FC4FBB2D83DB005026B23D7C5C8FD8BBBA2FFF3BC288134DD1636 + +Count = 1084 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 7CE4C0AFFB85234FBFDF8906AFA14C0CD85819585AFB8BB71D397D72869F0E90EE65F8E2905E9B137BADB3D22F825917 + +Count = 1085 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 3B1B692CE74058F012C5EAFC058292DE4F0A16ED1C0472CC6C7D56351CFB9E65837EC3D4DD92169F36FB85AF4FB4AE83 + +Count = 1086 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = B5DFDE2BAD1C03B1909DCA35873A28EC6450910998F3C537243B9CDCFC208633F2A787AC43632AA3D286572777D397CD + +Count = 1087 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = F8A21C7A75ACA8EBC38C7767B369BAAFD9EA56F54E7C9A0CF5B66E156DBF747B316CC8EE88089FB7BF7FC77EB1571CAB + +Count = 1088 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 850ED01B3C4D1138510CC96DB2C5DEF92ADD52F56463300CB1BDEE9BAEA19A7DEAE2F81FCC612A6C63B8FE29E4443D4F + +Count = 1089 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 0D4DD617842088F79BFA5314EE52DAE2D4C4E3507FBD1A22FC05393D68C5CD9829E8A317E941586BB55C2495DAA84515 + diff --git a/spook/Implementations/crypto_aead/spook128su384v2/opt_c/COPYING b/spook/Implementations/crypto_aead/spook128su384v2/opt_c/COPYING new file mode 100644 index 0000000..0e259d4 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128su384v2/opt_c/COPYING @@ -0,0 +1,121 @@ +Creative Commons Legal Code + +CC0 1.0 Universal + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS + PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM + THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED + HEREUNDER. + +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer +exclusive Copyright and Related Rights (defined below) upon the creator +and subsequent owner(s) (each and all, an "owner") of an original work of +authorship and/or a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for +the purpose of contributing to a commons of creative, cultural and +scientific works ("Commons") that the public can reliably and without fear +of later claims of infringement build upon, modify, incorporate in other +works, reuse and redistribute as freely as possible in any form whatsoever +and for any purposes, including without limitation commercial purposes. +These owners may contribute to the Commons to promote the ideal of a free +culture and the further production of creative, cultural and scientific +works, or to gain reputation or greater distribution for their Work in +part through the use and efforts of others. + +For these and/or other purposes and motivations, and without any +expectation of additional consideration or compensation, the person +associating CC0 with a Work (the "Affirmer"), to the extent that he or she +is an owner of Copyright and Related Rights in the Work, voluntarily +elects to apply CC0 to the Work and publicly distribute the Work under its +terms, with knowledge of his or her Copyright and Related Rights in the +Work and the meaning and intended legal effect of CC0 on those rights. + +1. Copyright and Related Rights. A Work made available under CC0 may be +protected by copyright and related or neighboring rights ("Copyright and +Related Rights"). Copyright and Related Rights include, but are not +limited to, the following: + + i. the right to reproduce, adapt, distribute, perform, display, + communicate, and translate a Work; + ii. moral rights retained by the original author(s) and/or performer(s); +iii. publicity and privacy rights pertaining to a person's image or + likeness depicted in a Work; + iv. rights protecting against unfair competition in regards to a Work, + subject to the limitations in paragraph 4(a), below; + v. rights protecting the extraction, dissemination, use and reuse of data + in a Work; + vi. database rights (such as those arising under Directive 96/9/EC of the + European Parliament and of the Council of 11 March 1996 on the legal + protection of databases, and under any national implementation + thereof, including any amended or successor version of such + directive); and +vii. other similar, equivalent or corresponding rights throughout the + world based on applicable law or treaty, and any national + implementations thereof. + +2. Waiver. To the greatest extent permitted by, but not in contravention +of, applicable law, Affirmer hereby overtly, fully, permanently, +irrevocably and unconditionally waives, abandons, and surrenders all of +Affirmer's Copyright and Related Rights and associated claims and causes +of action, whether now known or unknown (including existing as well as +future claims and causes of action), in the Work (i) in all territories +worldwide, (ii) for the maximum duration provided by applicable law or +treaty (including future time extensions), (iii) in any current or future +medium and for any number of copies, and (iv) for any purpose whatsoever, +including without limitation commercial, advertising or promotional +purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each +member of the public at large and to the detriment of Affirmer's heirs and +successors, fully intending that such Waiver shall not be subject to +revocation, rescission, cancellation, termination, or any other legal or +equitable action to disrupt the quiet enjoyment of the Work by the public +as contemplated by Affirmer's express Statement of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason +be judged legally invalid or ineffective under applicable law, then the +Waiver shall be preserved to the maximum extent permitted taking into +account Affirmer's express Statement of Purpose. In addition, to the +extent the Waiver is so judged Affirmer hereby grants to each affected +person a royalty-free, non transferable, non sublicensable, non exclusive, +irrevocable and unconditional license to exercise Affirmer's Copyright and +Related Rights in the Work (i) in all territories worldwide, (ii) for the +maximum duration provided by applicable law or treaty (including future +time extensions), (iii) in any current or future medium and for any number +of copies, and (iv) for any purpose whatsoever, including without +limitation commercial, advertising or promotional purposes (the +"License"). The License shall be deemed effective as of the date CC0 was +applied by Affirmer to the Work. Should any part of the License for any +reason be judged legally invalid or ineffective under applicable law, such +partial invalidity or ineffectiveness shall not invalidate the remainder +of the License, and in such case Affirmer hereby affirms that he or she +will not (i) exercise any of his or her remaining Copyright and Related +Rights in the Work or (ii) assert any associated claims and causes of +action with respect to the Work, in either case contrary to Affirmer's +express Statement of Purpose. + +4. Limitations and Disclaimers. + + a. No trademark or patent rights held by Affirmer are waived, abandoned, + surrendered, licensed or otherwise affected by this document. + b. Affirmer offers the Work as-is and makes no representations or + warranties of any kind concerning the Work, express, implied, + statutory or otherwise, including without limitation warranties of + title, merchantability, fitness for a particular purpose, non + infringement, or the absence of latent or other defects, accuracy, or + the present or absence of errors, whether or not discoverable, all to + the greatest extent permissible under applicable law. + c. Affirmer disclaims responsibility for clearing rights of other persons + that may apply to the Work or any use thereof, including without + limitation any person's Copyright and Related Rights in the Work. + Further, Affirmer disclaims responsibility for obtaining any necessary + consents, permissions or other rights required for any use of the + Work. + d. Affirmer understands and acknowledges that Creative Commons is not a + party to this document and has no duty or obligation with respect to + this CC0 or use of the Work. diff --git a/spook/Implementations/crypto_aead/spook128su384v2/opt_c/api.h b/spook/Implementations/crypto_aead/spook128su384v2/opt_c/api.h new file mode 100644 index 0000000..5cd4ad3 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128su384v2/opt_c/api.h @@ -0,0 +1,7 @@ +#include "parameters.h" +#define CRYPTO_KEYBYTES KEYBYTES +#define CRYPTO_NPUBBYTES 16 +#define CRYPTO_NSECBYTES 0 +#define CRYPTO_ABYTES 16 +#define CRYPTO_NOOVERLAP 1 + diff --git a/spook/Implementations/crypto_aead/spook128su384v2/opt_c/clyde_32bit.c b/spook/Implementations/crypto_aead/spook128su384v2/opt_c/clyde_32bit.c new file mode 100644 index 0000000..694b708 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128su384v2/opt_c/clyde_32bit.c @@ -0,0 +1,75 @@ +/* MIT License + * + * Copyright (c) 2019 Gaëtan Cassiers Olivier Bronchain + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +#include +#include +#include "primitives.h" +#include "primitives.c" +#define CLYDE_128_NS 6 // Number of steps +#define CLYDE_128_NR 2 * CLYDE_128_NS // Number of rounds +#define XORLS(DEST, OP) do { \ + (DEST)[0] ^= (OP)[0]; \ + (DEST)[1] ^= (OP)[1]; \ + (DEST)[2] ^= (OP)[2]; \ + (DEST)[3] ^= (OP)[3]; } while (0) + +#define XORCST(DEST, LFSR) do { \ + (DEST)[0] ^= ((LFSR)>>3 & 0x1); \ + (DEST)[1] ^= ((LFSR)>>2 & 0x1); \ + (DEST)[2] ^= ((LFSR)>>1 & 0x1); \ + (DEST)[3] ^= ((LFSR) & 0x1); } while (0) + +void clyde128_encrypt(clyde128_state state, const clyde128_state t, const unsigned char* k) { + // Key schedule + clyde128_state k_st; + memcpy(k_st, k, CLYDE128_NBYTES); + clyde128_state tk[3] = { + { t[0], t[1], t[2], t[3] }, + { t[0] ^ t[2], t[1] ^ t[3], t[0], t[1] }, + { t[2], t[3], t[0] ^ t[2], t[1] ^ t[3] } + }; + XORLS(tk[0], k_st); + XORLS(tk[1], k_st); + XORLS(tk[2], k_st); + + // Datapath + XORLS(state, tk[0]); + uint32_t off = 0x924; // 2-bits describing the round key + uint32_t lfsr = 0x8; // LFSR for round constant + for (uint32_t s = 0; s < CLYDE_128_NS; s++) { + sbox_layer(state); + lbox(&state[0], &state[1]); + lbox(&state[2], &state[3]); + XORCST(state,lfsr); + uint32_t b = lfsr & 0x1; + lfsr = (lfsr^(b<<3) | b<<4)>>1; // update LFSR + + sbox_layer(state); + lbox(&state[0], &state[1]); + lbox(&state[2], &state[3]); + XORCST(state,lfsr); + b = lfsr & 0x1; + lfsr = (lfsr^(b<<3) | b<<4)>>1; // update LFSR + off >>=2; + XORLS(state, tk[off&0x03]); + } +} diff --git a/spook/Implementations/crypto_aead/spook128su384v2/opt_c/crypto_aead.h b/spook/Implementations/crypto_aead/spook128su384v2/opt_c/crypto_aead.h new file mode 100644 index 0000000..53ec4a7 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128su384v2/opt_c/crypto_aead.h @@ -0,0 +1,12 @@ + +int crypto_aead_encrypt(unsigned char* c, unsigned long long* clen, + const unsigned char* m, unsigned long long mlen, + const unsigned char* ad, unsigned long long adlen, + const unsigned char* nsec, const unsigned char* npub, + const unsigned char* k); + +int crypto_aead_decrypt(unsigned char* m, unsigned long long* mlen, + unsigned char* nsec, const unsigned char* c, + unsigned long long clen, const unsigned char* ad, + unsigned long long adlen, const unsigned char* npub, + const unsigned char* k); diff --git a/spook/Implementations/crypto_aead/spook128su384v2/opt_c/encrypt.c b/spook/Implementations/crypto_aead/spook128su384v2/opt_c/encrypt.c new file mode 100644 index 0000000..74d09fa --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128su384v2/opt_c/encrypt.c @@ -0,0 +1,44 @@ +/* Spook Reference Implementation v1 + * + * Written in 2019 at UCLouvain (Belgium) by Olivier Bronchain, Gaetan Cassiers + * and Charles Momin. + * To the extent possible under law, the author(s) have dedicated all copyright + * and related and neighboring rights to this software to the public domain + * worldwide. This software is distributed without any warranty. + * + * You should have received a copy of the CC0 Public Domain Dedication along with + * this software. If not, see . + */ +#include "crypto_aead.h" +#include "s1p.h" + +#ifdef __GNUC__ +#define UNUSED __attribute__((unused)) +#else +#define UNUSED +#endif + +// Spook encryption. +int crypto_aead_encrypt(unsigned char* c, unsigned long long* clen, + const unsigned char* m, unsigned long long mlen, + const unsigned char* ad, unsigned long long adlen, + const unsigned char* nsec UNUSED, + const unsigned char* npub, const unsigned char* k) { + unsigned char p[P_NBYTES]; + const unsigned char* k_priv; + init_keys(&k_priv, p, k); + s1p_encrypt(c, clen, ad, adlen, m, mlen, k_priv, p, npub); + return 0; +} + +// Spook encryption. +int crypto_aead_decrypt(unsigned char* m, unsigned long long* mlen, + unsigned char* nsec UNUSED, const unsigned char* c, + unsigned long long clen, const unsigned char* ad, + unsigned long long adlen, const unsigned char* npub, + const unsigned char* k) { + unsigned char p[P_NBYTES]; + const unsigned char* k_priv; + init_keys(&k_priv, p, k); + return s1p_decrypt(m, mlen, ad, adlen, c, clen, k_priv, p, npub); +} diff --git a/spook/Implementations/crypto_aead/spook128su384v2/opt_c/iacaMarks.h b/spook/Implementations/crypto_aead/spook128su384v2/opt_c/iacaMarks.h new file mode 100644 index 0000000..be1973e --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128su384v2/opt_c/iacaMarks.h @@ -0,0 +1,53 @@ +/* +* Copyright (2008-2009) Intel Corporation All Rights Reserved. +* The source code contained or described herein and all documents +* related to the source code ("Material") are owned by Intel Corporation +* or its suppliers or licensors. Title to the Material remains with +* Intel Corporation or its suppliers and licensors. The Material +* contains trade secrets and proprietary and confidential information +* of Intel or its suppliers and licensors. The Material is protected +* by worldwide copyright and trade secret laws and treaty provisions. +* No part of the Material may be used, copied, reproduced, modified, +* published, uploaded, posted, transmitted, distributed, or disclosed +* in any way without Intel(R)s prior express written permission. +* +* No license under any patent, copyright, trade secret or other +* intellectual property right is granted to or conferred upon you by +* disclosure or delivery of the Materials, either expressly, by implication, +* inducement, estoppel or otherwise. Any license under such intellectual +* property rights must be express and approved by Intel in writing. +*/ + +#if defined (__GNUC__) +#define IACA_SSC_MARK( MARK_ID ) \ +__asm__ __volatile__ ( \ + "\n\t movl $"#MARK_ID", %%ebx" \ + "\n\t .byte 0x64, 0x67, 0x90" \ + : : : "memory" ); + +#else +#define IACA_SSC_MARK(x) {__asm mov ebx, x\ + __asm _emit 0x64 \ + __asm _emit 0x67 \ + __asm _emit 0x90 } +#endif + +#define IACA_START {IACA_SSC_MARK(111)} +#define IACA_END {IACA_SSC_MARK(222)} + +#ifdef _WIN64 +#include +#define IACA_VC64_START __writegsbyte(111, 111); +#define IACA_VC64_END __writegsbyte(222, 222); +#endif + +/**************** asm ***************** +;START_MARKER +mov ebx, 111 +db 0x64, 0x67, 0x90 + +;END_MARKER +mov ebx, 222 +db 0x64, 0x67, 0x90 + +**************************************/ diff --git a/spook/Implementations/crypto_aead/spook128su384v2/opt_c/parameters.h b/spook/Implementations/crypto_aead/spook128su384v2/opt_c/parameters.h new file mode 100644 index 0000000..1a02c3f --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128su384v2/opt_c/parameters.h @@ -0,0 +1,30 @@ +/* Spook Reference Implementation v1 + * + * Written in 2019 at UCLouvain (Belgium) by Olivier Bronchain, Gaetan Cassiers + * and Charles Momin. + * To the extent possible under law, the author(s) have dedicated all copyright + * and related and neighboring rights to this software to the public domain + * worldwide. This software is distributed without any warranty. + * + * You should have received a copy of the CC0 Public Domain Dedication along with + * this software. If not, see . + */ +#ifndef _PARAMETERS_H_ +#define _PARAMETERS_H_ + +#define MULTI_USER 0 +#define SMALL_PERM 1 + +#if MULTI_USER +#define KEYBYTES 32 +#else +#define KEYBYTES 16 +#endif + +#include "api.h" + +#if (KEYBYTES != CRYPTO_KEYBYTES) +#error "Wrong parameters in api.h" +#endif + +#endif //_PARAMETERS_H_ diff --git a/spook/Implementations/crypto_aead/spook128su384v2/opt_c/primitives.c b/spook/Implementations/crypto_aead/spook128su384v2/opt_c/primitives.c new file mode 100644 index 0000000..acab323 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128su384v2/opt_c/primitives.c @@ -0,0 +1,94 @@ +#include "primitives.h" +#ifdef SHADOW +static uint32_t lfsr_poly; +static uint32_t xtime_poly; +#endif + +// Apply a S-box layer to a Clyde-128 state. +static void sbox_layer(uint32_t* state) { + uint32_t y1 = (state[0] & state[1]) ^ state[2]; + uint32_t y0 = (state[3] & state[0]) ^ state[1]; + uint32_t y3 = (y1 & state[3]) ^ state[0]; + uint32_t y2 = (y0 & y1) ^ state[3]; + state[0] = y0; + state[1] = y1; + state[2] = y2; + state[3] = y3; +} + +// Apply a L-box to a pair of Clyde-128 rows. +static void lbox(uint32_t* x, uint32_t* y) { + uint32_t a, b, c, d; + a = *x ^ ROT32(*x, 12); + b = *y ^ ROT32(*y, 12); + a = a ^ ROT32(a, 3); + b = b ^ ROT32(b, 3); + a = a ^ ROT32(*x, 17); + b = b ^ ROT32(*y, 17); + c = a ^ ROT32(a, 31); + d = b ^ ROT32(b, 31); + a = a ^ ROT32(d, 26); + b = b ^ ROT32(c, 25); + a = a ^ ROT32(c, 15); + b = b ^ ROT32(d, 15); + *x = a; + *y = b; +} + +#ifdef SHADOW +void set_poly_lfsr(uint32_t l){ + lfsr_poly = l; +} +void set_poly_xtime(uint32_t l){ + xtime_poly = l; +} + +static uint32_t update_lfsr(uint32_t x) { + int32_t tmp1 = x; + uint32_t tmp = (tmp1 >>31) & lfsr_poly; + return (x<<1) ^ tmp; +} + +static uint32_t xtime(uint32_t x) { + int32_t tmp1 = x; + uint32_t tmp = (tmp1 >>31) & xtime_poly; + return (x<<1) ^ tmp; +} + +// Apply a D-box layer to a Shadow state. +static void dbox_mls_layer(shadow_state state,uint32_t *lfsr) { +for (unsigned int row = 0; row < LS_ROWS; row++) { +#if SMALL_PERM + uint32_t x1 = state[0][row]; + uint32_t x2 = state[1][row]; + uint32_t x3 = state[2][row]; + + uint32_t a = x1 ^ x3; + uint32_t b = a ^ x2; + uint32_t c = xtime(a) ^ (x1 ^ x2); + state[0][row] = a ^ c; + state[1][row] = b; + state[2][row] = c; + + state[0][row] ^= *lfsr; + *lfsr = update_lfsr(*lfsr); + +#else + + state[0][row] ^= state[1][row]; + state[2][row] ^= state[3][row]; + state[1][row] ^= state[2][row]; + state[3][row] ^= xtime(state[0][row]); + state[2][row] ^= xtime(state[3][row]); + state[1][row] = xtime(state[1][row]); + state[0][row] ^= state[1][row]; + state[3][row] ^= state[0][row]; + state[1][row] ^= state[2][row]; + + state[0][row] ^= *lfsr; + *lfsr = update_lfsr(*lfsr); +#endif // SMALL_PERM + } + +} +#endif diff --git a/spook/Implementations/crypto_aead/spook128su384v2/opt_c/primitives.h b/spook/Implementations/crypto_aead/spook128su384v2/opt_c/primitives.h new file mode 100644 index 0000000..df99be9 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128su384v2/opt_c/primitives.h @@ -0,0 +1,52 @@ +/* Spook Reference Implementation v1 + * + * Written in 2019 at UCLouvain (Belgium) by Olivier Bronchain, Gaetan Cassiers + * and Charles Momin. + * To the extent possible under law, the author(s) have dedicated all copyright + * and related and neighboring rights to this software to the public domain + * worldwide. This software is distributed without any warranty. + * + * You should have received a copy of the CC0 Public Domain Dedication along with + * this software. If not, see . + */ +#ifndef _H_PRIMITIVES_H_ +#define _H_PRIMITIVES_H_ + +#include +#include "parameters.h" + +#define CLYDE128_NBYTES 16 + +#define ROTL(x, n) ((x << n) | (x >> ((32-n) & 31))) +#ifndef SHCST +#define SHCST 1 +#endif + +#ifndef DBOX +#define DBOX 1 +#endif + +#if SMALL_PERM +#define SHADOW_NBYTES 48 +#else +#define SHADOW_NBYTES 64 +#endif // SMALL_PERM + +#define LS_ROWS 4 // Rows in the LS design +#define LS_ROW_BYTES 4 // number of bytes per row in the LS design +#define MLS_BUNDLES \ + (SHADOW_NBYTES / (LS_ROWS* LS_ROW_BYTES)) // Bundles in the mLS design + +#define ROT32(x,n) ((uint32_t)(((x)>>(n))|((x)<<(32-(n))))) +typedef __attribute__((aligned(16))) uint32_t clyde128_state[LS_ROWS]; +typedef __attribute__((aligned(64))) clyde128_state shadow_state[MLS_BUNDLES]; + +void clyde128_encrypt(clyde128_state state, + const clyde128_state t, const unsigned char* k); + +void shadow(shadow_state state); +static void sbox_layer(uint32_t* state); +static void dbox_mls_layer(shadow_state state,uint32_t *lfsr); +static void lbox(uint32_t* x, uint32_t* y); + +#endif //_H_PRIMITIVES_H_ diff --git a/spook/Implementations/crypto_aead/spook128su384v2/opt_c/s1p.c b/spook/Implementations/crypto_aead/spook128su384v2/opt_c/s1p.c new file mode 100644 index 0000000..a4b7166 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128su384v2/opt_c/s1p.c @@ -0,0 +1,197 @@ +/* MIT License + * + * Copyright (c) 2019 Gaëtan Cassiers + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +#include +#include +#include +#include "primitives.h" +#include "s1p.h" +#include "parameters.h" + +#define CAPACITY_BYTES 32 +#define RATE_BYTES (SHADOW_NBYTES - CAPACITY_BYTES) +#define RATE_BUNDLES (RATE_BYTES/(LS_ROWS*LS_ROW_BYTES)) + +// Working mode for block compression. +typedef enum { + AD, + PLAINTEXT, + CIPHERTEXT +} compress_mode; + +static void compress_block(unsigned char *state, unsigned char *out, + const unsigned char *d, compress_mode mode, + unsigned long long offset, unsigned long long n); + +static unsigned long long compress_data(shadow_state state, + unsigned char *out, + const unsigned char *d, + unsigned long long dlen, + compress_mode mode); + +static void init_sponge_state(shadow_state state, + const unsigned char *k, const unsigned char *p, + const unsigned char *n); +static void xor_bytes(unsigned char* dest, const unsigned char* src1, + const unsigned char* src2, unsigned long long n); + +void init_keys(const unsigned char **k, unsigned char p[P_NBYTES], + const unsigned char *k_glob) { + *k = k_glob; +#if MULTI_USER + memcpy(p, k_glob + CLYDE128_NBYTES, P_NBYTES); + p[P_NBYTES - 1] &= 0x7F; // set last p bit to 0 + p[P_NBYTES - 1] |= 0x40; // set next to last p bit to 0 +#else + memset(p, 0, P_NBYTES); +#endif // MULTI_USER +} + +static void init_sponge_state(shadow_state state, + const unsigned char *k, const unsigned char *p, + const unsigned char *n) { +// init state + memset(state, 0, SHADOW_NBYTES); + memcpy(state[0], n, P_NBYTES); + memcpy(state[1], p, CRYPTO_NPUBBYTES); + + memcpy(state[2], n, CRYPTO_NPUBBYTES); + clyde128_encrypt(state[0], state[1], k); + + // initial permutation + shadow(state); +} + +void s1p_encrypt(unsigned char *c, unsigned long long *clen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *m, unsigned long long mlen, + const unsigned char *k, const unsigned char *p, + const unsigned char *n) { + // permutation state + shadow_state state; + init_sponge_state(state, k, p, n); + + // compress associated data + compress_data(state, NULL, ad, adlen, AD); + + // compress message + unsigned long long c_bytes = 0; + if (mlen > 0) { + state[RATE_BUNDLES][0] ^= 0x01; + c_bytes = compress_data(state, c, m, mlen, PLAINTEXT); + } + + // tag + state[1][LS_ROWS- 1] |= 0x80000000; + clyde128_encrypt(state[0], state[1], k); + memcpy(c+c_bytes, state[0], CLYDE128_NBYTES); + *clen = c_bytes + CLYDE128_NBYTES; +} + +int s1p_decrypt(unsigned char *m, unsigned long long *mlen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *c, unsigned long long clen, + const unsigned char *k, const unsigned char *p, + const unsigned char *n) { + // permutation state + shadow_state state; + init_sponge_state(state, k, p, n); + + // compress associated data + compress_data(state, NULL, ad, adlen, AD); + + // compress message + unsigned long long m_bytes = 0; + if (clen > CLYDE128_NBYTES) { + state[RATE_BUNDLES][0] ^= 0x01; + m_bytes = compress_data(state, m, c, clen - CLYDE128_NBYTES, CIPHERTEXT); + } + + // tag verification + state[1][LS_ROWS- 1] |= 0x80000000; + clyde128_encrypt(state[0], state[1], k); + unsigned char *st0 = (unsigned char *) state[0]; + int tag_ok = 1; + for (int i = 0; i < 4*LS_ROWS; i++) { + tag_ok &= (st0[i] == c[m_bytes+i]); + } + if (tag_ok) { + *mlen = m_bytes; + return 0; + } else { + // Reset output buffer to avoid unintended unauthenticated plaintext + // release. + memset(m, 0, clen - CLYDE128_NBYTES); + *mlen = 0; + return -1; + } +} + +// Compress a block into the state. Length of the block is n and buffers are +// accessed starting at offset. Input block is d, output is written into +// buffer out if mode is PLAINTEXT or CIPHERTEXT. +// Only the XOR operation is performed, not XORing of padding constants. +static void compress_block(unsigned char *state, unsigned char *out, + const unsigned char *d, compress_mode mode, + unsigned long long offset, unsigned long long n) { + if (mode == CIPHERTEXT) { + xor_bytes(out + offset, state, d + offset, n); + memcpy(state, d + offset, n); + } else { + xor_bytes(state, state, d + offset, n); + if (mode == PLAINTEXT) { + memcpy(out + offset, state, n); + } + } +} + +// Compress a block into the state (in duplex-sponge mode). +// Input data buffer is d with length dlen. +// Output is written into buffer out if mode is PLAINTEXT or CIPHERTEXT. +// Padding is handled if needed. +static unsigned long long compress_data(shadow_state state, + unsigned char *out, + const unsigned char *d, + unsigned long long dlen, + compress_mode mode) { + unsigned long long i; + for (i = 0; i < dlen / RATE_BYTES; i++) { + compress_block((uint8_t *)state, out, d, mode, i * RATE_BYTES, RATE_BYTES); + shadow(state); + } + int rem = dlen % RATE_BYTES; + if (rem != 0) { + compress_block((uint8_t *)state, out, d, mode, i * RATE_BYTES, rem); + ((uint8_t *)state)[rem] ^= 0x01; + ((uint8_t *)state)[RATE_BYTES] ^= 0x02; + shadow(state); + } + return i * RATE_BYTES + rem; +} + +// XOR buffers src1 and src2 into buffer dest (all buffers contain n bytes). +void xor_bytes(unsigned char* dest, const unsigned char* src1, + const unsigned char* src2, unsigned long long n) { + for ( unsigned long long i = 0; i < n; i++) { + dest[i] = src1[i] ^ src2[i]; + } +} diff --git a/spook/Implementations/crypto_aead/spook128su384v2/opt_c/s1p.h b/spook/Implementations/crypto_aead/spook128su384v2/opt_c/s1p.h new file mode 100644 index 0000000..314f86a --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128su384v2/opt_c/s1p.h @@ -0,0 +1,47 @@ +/* MIT License + * + * Copyright (c) 2019 Gaëtan Cassiers + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#ifndef _H_S1P_H_ +#define _H_S1P_H_ + +#include "parameters.h" + +// Size of the P parameter +#define P_NBYTES 16 + +void s1p_encrypt(unsigned char *c, unsigned long long *clen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *m, unsigned long long mlen, + const unsigned char *k, const unsigned char *p, + const unsigned char *n); + +int s1p_decrypt(unsigned char *m, unsigned long long *mlen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *c, unsigned long long clen, + const unsigned char *k, const unsigned char *p, + const unsigned char *n); + +void init_keys(const unsigned char **k, unsigned char p[P_NBYTES], + const unsigned char *k_glob); + +#endif //_H_S1P_H_ diff --git a/spook/Implementations/crypto_aead/spook128su384v2/opt_c/shadow_32bit.c b/spook/Implementations/crypto_aead/spook128su384v2/opt_c/shadow_32bit.c new file mode 100644 index 0000000..fb79619 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128su384v2/opt_c/shadow_32bit.c @@ -0,0 +1,53 @@ +/* MIT + * + * Copyright (c) 2019 Gaëtan Cassiers + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#include +#include +#include "primitives.h" + +#define SHADOW +#include "primitives.c" + +#define CLYDE_128_NS 6 // Number of steps +#define CLYDE_128_NR 2 * CLYDE_128_NS // Number of rounds +#define SHADOW_NS 6 // Number of steps +#define SHADOW_NR 2 * SHADOW_NS // Number of roundsv +void shadow(shadow_state state) { + uint32_t lfsr =0xf8737400; // LFSR for round constant + set_poly_xtime(0x101); + set_poly_lfsr(0xc5); + for (unsigned int s = 0; s < SHADOW_NS; s++) { + #pragma GCC unroll 0 + for (unsigned int b = 0; b < MLS_BUNDLES; b++){ + sbox_layer(state[b]); + lbox(&state[b][0], &state[b][1]); + lbox(&state[b][2], &state[b][3]); + + state[b][1] ^= lfsr; + lfsr = update_lfsr(lfsr); + sbox_layer(state[b]); + } + dbox_mls_layer(state,&lfsr); + + } +} diff --git a/spook/Implementations/crypto_aead/spook128su384v2/opt_c/utils.c b/spook/Implementations/crypto_aead/spook128su384v2/opt_c/utils.c new file mode 100644 index 0000000..6ce3172 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128su384v2/opt_c/utils.c @@ -0,0 +1,44 @@ +/* Spook Reference Implementation v1 + * + * Written in 2019 at UCLouvain (Belgium) by Olivier Bronchain, Gaetan Cassiers + * and Charles Momin. + * To the extent possible under law, the author(s) have dedicated all copyright + * and related and neighboring rights to this software to the public domain + * worldwide. This software is distributed without any warranty. + * + * You should have received a copy of the CC0 Public Domain Dedication along with + * this software. If not, see . + */ +#include + +#include "utils.h" + +// XOR buffers src1 and src2 into buffer dest (all buffers contain n bytes). +void xor_bytes(unsigned char* dest, const unsigned char* src1, + const unsigned char* src2, unsigned long long n) { + for (unsigned long long i = 0; i < n; i++) { + dest[i] = src1[i] ^ src2[i]; + } +} + +// Rotate right x by amount c. +// We use right rotation of integers for the lboxes while the specification +// tells left rotation of bitstrings due to the bitsting -> integer +// little-endian mapping used in Spook. +//uint32_t rotr(uint32_t x, unsigned int c) { return (x >> c) | (x << (32 - c)); } + +// Convert 4 bytes into a uint32. Bytes are in little-endian. +uint32_t le32u_dec(const unsigned char bytes[4]) { + uint32_t res = 0; + for (unsigned int col = 0; col < 4; col++) { + res |= ((uint32_t)bytes[col]) << 8 * col; + } + return res; +} + +// Convert a uint32 into 4 bytes. Bytes are in little-endian. +void le32u_enc(unsigned char bytes[4], uint32_t x) { + for (unsigned int i = 0; i < 4; i++) { + bytes[i] = x >> 8 * i; + } +} diff --git a/spook/Implementations/crypto_aead/spook128su384v2/opt_c/utils.h b/spook/Implementations/crypto_aead/spook128su384v2/opt_c/utils.h new file mode 100644 index 0000000..c69647d --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128su384v2/opt_c/utils.h @@ -0,0 +1,26 @@ +/* Spook Reference Implementation v1 + * + * Written in 2019 at UCLouvain (Belgium) by Olivier Bronchain, Gaetan Cassiers + * and Charles Momin. + * To the extent possible under law, the author(s) have dedicated all copyright + * and related and neighboring rights to this software to the public domain + * worldwide. This software is distributed without any warranty. + * + * You should have received a copy of the CC0 Public Domain Dedication along with + * this software. If not, see . + */ +#ifndef _H_UTILS_H_ +#define _H_UTILS_H_ + +#include + +void xor_bytes(unsigned char* dest, const unsigned char* src1, + const unsigned char* src2, unsigned long long n); + +//uint32_t rotr(uint32_t x, unsigned int c); + +uint32_t le32u_dec(const unsigned char bytes[4]); + +void le32u_enc(unsigned char bytes[4], uint32_t x); + +#endif // _H_UTILS_H_ diff --git a/spook/Implementations/crypto_aead/spook128su384v2/ref/COPYING b/spook/Implementations/crypto_aead/spook128su384v2/ref/COPYING new file mode 100644 index 0000000..0e259d4 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128su384v2/ref/COPYING @@ -0,0 +1,121 @@ +Creative Commons Legal Code + +CC0 1.0 Universal + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS + PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM + THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED + HEREUNDER. + +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer +exclusive Copyright and Related Rights (defined below) upon the creator +and subsequent owner(s) (each and all, an "owner") of an original work of +authorship and/or a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for +the purpose of contributing to a commons of creative, cultural and +scientific works ("Commons") that the public can reliably and without fear +of later claims of infringement build upon, modify, incorporate in other +works, reuse and redistribute as freely as possible in any form whatsoever +and for any purposes, including without limitation commercial purposes. +These owners may contribute to the Commons to promote the ideal of a free +culture and the further production of creative, cultural and scientific +works, or to gain reputation or greater distribution for their Work in +part through the use and efforts of others. + +For these and/or other purposes and motivations, and without any +expectation of additional consideration or compensation, the person +associating CC0 with a Work (the "Affirmer"), to the extent that he or she +is an owner of Copyright and Related Rights in the Work, voluntarily +elects to apply CC0 to the Work and publicly distribute the Work under its +terms, with knowledge of his or her Copyright and Related Rights in the +Work and the meaning and intended legal effect of CC0 on those rights. + +1. Copyright and Related Rights. A Work made available under CC0 may be +protected by copyright and related or neighboring rights ("Copyright and +Related Rights"). Copyright and Related Rights include, but are not +limited to, the following: + + i. the right to reproduce, adapt, distribute, perform, display, + communicate, and translate a Work; + ii. moral rights retained by the original author(s) and/or performer(s); +iii. publicity and privacy rights pertaining to a person's image or + likeness depicted in a Work; + iv. rights protecting against unfair competition in regards to a Work, + subject to the limitations in paragraph 4(a), below; + v. rights protecting the extraction, dissemination, use and reuse of data + in a Work; + vi. database rights (such as those arising under Directive 96/9/EC of the + European Parliament and of the Council of 11 March 1996 on the legal + protection of databases, and under any national implementation + thereof, including any amended or successor version of such + directive); and +vii. other similar, equivalent or corresponding rights throughout the + world based on applicable law or treaty, and any national + implementations thereof. + +2. Waiver. To the greatest extent permitted by, but not in contravention +of, applicable law, Affirmer hereby overtly, fully, permanently, +irrevocably and unconditionally waives, abandons, and surrenders all of +Affirmer's Copyright and Related Rights and associated claims and causes +of action, whether now known or unknown (including existing as well as +future claims and causes of action), in the Work (i) in all territories +worldwide, (ii) for the maximum duration provided by applicable law or +treaty (including future time extensions), (iii) in any current or future +medium and for any number of copies, and (iv) for any purpose whatsoever, +including without limitation commercial, advertising or promotional +purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each +member of the public at large and to the detriment of Affirmer's heirs and +successors, fully intending that such Waiver shall not be subject to +revocation, rescission, cancellation, termination, or any other legal or +equitable action to disrupt the quiet enjoyment of the Work by the public +as contemplated by Affirmer's express Statement of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason +be judged legally invalid or ineffective under applicable law, then the +Waiver shall be preserved to the maximum extent permitted taking into +account Affirmer's express Statement of Purpose. In addition, to the +extent the Waiver is so judged Affirmer hereby grants to each affected +person a royalty-free, non transferable, non sublicensable, non exclusive, +irrevocable and unconditional license to exercise Affirmer's Copyright and +Related Rights in the Work (i) in all territories worldwide, (ii) for the +maximum duration provided by applicable law or treaty (including future +time extensions), (iii) in any current or future medium and for any number +of copies, and (iv) for any purpose whatsoever, including without +limitation commercial, advertising or promotional purposes (the +"License"). The License shall be deemed effective as of the date CC0 was +applied by Affirmer to the Work. Should any part of the License for any +reason be judged legally invalid or ineffective under applicable law, such +partial invalidity or ineffectiveness shall not invalidate the remainder +of the License, and in such case Affirmer hereby affirms that he or she +will not (i) exercise any of his or her remaining Copyright and Related +Rights in the Work or (ii) assert any associated claims and causes of +action with respect to the Work, in either case contrary to Affirmer's +express Statement of Purpose. + +4. Limitations and Disclaimers. + + a. No trademark or patent rights held by Affirmer are waived, abandoned, + surrendered, licensed or otherwise affected by this document. + b. Affirmer offers the Work as-is and makes no representations or + warranties of any kind concerning the Work, express, implied, + statutory or otherwise, including without limitation warranties of + title, merchantability, fitness for a particular purpose, non + infringement, or the absence of latent or other defects, accuracy, or + the present or absence of errors, whether or not discoverable, all to + the greatest extent permissible under applicable law. + c. Affirmer disclaims responsibility for clearing rights of other persons + that may apply to the Work or any use thereof, including without + limitation any person's Copyright and Related Rights in the Work. + Further, Affirmer disclaims responsibility for obtaining any necessary + consents, permissions or other rights required for any use of the + Work. + d. Affirmer understands and acknowledges that Creative Commons is not a + party to this document and has no duty or obligation with respect to + this CC0 or use of the Work. diff --git a/spook/Implementations/crypto_aead/spook128su384v2/ref/api.h b/spook/Implementations/crypto_aead/spook128su384v2/ref/api.h new file mode 100644 index 0000000..fb337c3 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128su384v2/ref/api.h @@ -0,0 +1,5 @@ +#define CRYPTO_KEYBYTES 16 +#define CRYPTO_NPUBBYTES 16 +#define CRYPTO_NSECBYTES 0 +#define CRYPTO_ABYTES 16 +#define CRYPTO_NOOVERLAP 1 diff --git a/spook/Implementations/crypto_aead/spook128su384v2/ref/crypto_aead.h b/spook/Implementations/crypto_aead/spook128su384v2/ref/crypto_aead.h new file mode 100644 index 0000000..53ec4a7 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128su384v2/ref/crypto_aead.h @@ -0,0 +1,12 @@ + +int crypto_aead_encrypt(unsigned char* c, unsigned long long* clen, + const unsigned char* m, unsigned long long mlen, + const unsigned char* ad, unsigned long long adlen, + const unsigned char* nsec, const unsigned char* npub, + const unsigned char* k); + +int crypto_aead_decrypt(unsigned char* m, unsigned long long* mlen, + unsigned char* nsec, const unsigned char* c, + unsigned long long clen, const unsigned char* ad, + unsigned long long adlen, const unsigned char* npub, + const unsigned char* k); diff --git a/spook/Implementations/crypto_aead/spook128su384v2/ref/encrypt.c b/spook/Implementations/crypto_aead/spook128su384v2/ref/encrypt.c new file mode 100644 index 0000000..ff54a62 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128su384v2/ref/encrypt.c @@ -0,0 +1,57 @@ +/* Spook Reference Implementation v1 + * + * Written in 2019 at UCLouvain (Belgium) by Olivier Bronchain, Gaetan Cassiers + * and Charles Momin. + * To the extent possible under law, the author(s) have dedicated all copyright + * and related and neighboring rights to this software to the public domain + * worldwide. This software is distributed without any warranty. + * + * You should have received a copy of the CC0 Public Domain Dedication along + * with this software. If not, see + * . + */ +#include "crypto_aead.h" +#include "s1p.h" + +#ifdef __GNUC__ +#define UNUSED __attribute__((unused)) +#else +#define UNUSED +#endif + +// Spook encryption. +int +crypto_aead_encrypt(unsigned char* c, + unsigned long long* clen, + const unsigned char* m, + unsigned long long mlen, + const unsigned char* ad, + unsigned long long adlen, + const unsigned char* nsec UNUSED, + const unsigned char* npub, + const unsigned char* k) +{ + unsigned char p[P_NBYTES]; + const unsigned char* k_priv; + init_keys(&k_priv, p, k); + s1p_encrypt(c, clen, ad, adlen, m, mlen, k_priv, p, npub); + return 0; +} + +// Spook encryption. +int +crypto_aead_decrypt(unsigned char* m, + unsigned long long* mlen, + unsigned char* nsec UNUSED, + const unsigned char* c, + unsigned long long clen, + const unsigned char* ad, + unsigned long long adlen, + const unsigned char* npub, + const unsigned char* k) +{ + unsigned char p[P_NBYTES]; + const unsigned char* k_priv; + init_keys(&k_priv, p, k); + return s1p_decrypt(m, mlen, ad, adlen, c, clen, k_priv, p, npub); +} diff --git a/spook/Implementations/crypto_aead/spook128su384v2/ref/parameters.h b/spook/Implementations/crypto_aead/spook128su384v2/ref/parameters.h new file mode 100644 index 0000000..1a02c3f --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128su384v2/ref/parameters.h @@ -0,0 +1,30 @@ +/* Spook Reference Implementation v1 + * + * Written in 2019 at UCLouvain (Belgium) by Olivier Bronchain, Gaetan Cassiers + * and Charles Momin. + * To the extent possible under law, the author(s) have dedicated all copyright + * and related and neighboring rights to this software to the public domain + * worldwide. This software is distributed without any warranty. + * + * You should have received a copy of the CC0 Public Domain Dedication along with + * this software. If not, see . + */ +#ifndef _PARAMETERS_H_ +#define _PARAMETERS_H_ + +#define MULTI_USER 0 +#define SMALL_PERM 1 + +#if MULTI_USER +#define KEYBYTES 32 +#else +#define KEYBYTES 16 +#endif + +#include "api.h" + +#if (KEYBYTES != CRYPTO_KEYBYTES) +#error "Wrong parameters in api.h" +#endif + +#endif //_PARAMETERS_H_ diff --git a/spook/Implementations/crypto_aead/spook128su384v2/ref/primitives.c b/spook/Implementations/crypto_aead/spook128su384v2/ref/primitives.c new file mode 100644 index 0000000..3c8806a --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128su384v2/ref/primitives.c @@ -0,0 +1,381 @@ +/* Spook Reference Implementation v1 + * + * Written in 2019 at UCLouvain (Belgium) by Olivier Bronchain, Gaetan Cassiers + * and Charles Momin. + * To the extent possible under law, the author(s) have dedicated all copyright + * and related and neighboring rights to this software to the public domain + * worldwide. This software is distributed without any warranty. + * + * You should have received a copy of the CC0 Public Domain Dedication along + * with this software. If not, see + * . + */ +#include +#include + +#include "primitives.h" +#include "utils.h" + +#define CLYDE_128_NS 6 // Number of steps +#define CLYDE_128_NR 2 * CLYDE_128_NS // Number of rounds +#define SHADOW_NS 6 // Number of steps +#define SHADOW_NR 2 * SHADOW_NS // Number of rounds + +#define LS_ROWS 4 // Rows in the LS design +#define LS_ROW_BYTES 4 // number of bytes per row in the LS design +#define MLS_BUNDLES \ + (SHADOW_NBYTES / (LS_ROWS * LS_ROW_BYTES)) // Bundles in the mLS design + +static void +sbox_layer(uint32_t* state); +static void +sbox_layer_inv(uint32_t* state); +static void +lbox(uint32_t* x, uint32_t* y); +static void +lbox_inv(uint32_t* x, uint32_t* y); +static void +lbox_layer(uint32_t* state); +static void +lbox_layer_inv(uint32_t* state); +static void +bytes2state(uint32_t* state, const unsigned char* byte); +static void +state2bytes(unsigned char* bytes, const uint32_t* state); +static void +xor_ls_state(uint32_t* state, const uint32_t* x); +static void +add_rc(uint32_t state[LS_ROWS], unsigned int round); +static void +tweakey(unsigned char tk[3][CLYDE128_NBYTES], + const unsigned char* k, + const unsigned char* t); +static uint32_t +update_lfsr(uint32_t lfsr); +static uint32_t +xtime(uint32_t x); +static void +dbox_mls_layer(uint32_t state[MLS_BUNDLES][LS_ROWS]); + +// Round constants for Clyde-128 +static const uint32_t clyde128_rc[CLYDE_128_NR][LS_ROWS] = { + { 1, 0, 0, 0 }, // 0 + { 0, 1, 0, 0 }, // 1 + { 0, 0, 1, 0 }, // 2 + { 0, 0, 0, 1 }, // 3 + { 1, 1, 0, 0 }, // 4 + { 0, 1, 1, 0 }, // 5 + { 0, 0, 1, 1 }, // 6 + { 1, 1, 0, 1 }, // 7 + { 1, 0, 1, 0 }, // 8 + { 0, 1, 0, 1 }, // 9 + { 1, 1, 1, 0 }, // 10 + { 0, 1, 1, 1 } // 11 +}; +static const uint32_t CST_LFSR_POLY_MASK = 0xc5; +// Initial value of the constant generation polynomial +// This is the result of applying the LFSR function 1024 times +// the value 0x1. +static const uint32_t CST_LFSR_INIT_VALUE = 0xf8737400; +// Row on which to XOR the constant in Shadow Round A +static const uint32_t SHADOW_RA_CST_ROW = 1; +// Bundle on which to XOR the constant in Shadow Round B +static const uint32_t SHADOW_RB_CST_BUNDLE = 0; + +// Apply a S-box layer to a Clyde-128 state. +static void +sbox_layer(uint32_t* state) +{ + uint32_t y1 = (state[0] & state[1]) ^ state[2]; + uint32_t y0 = (state[3] & state[0]) ^ state[1]; + uint32_t y3 = (y1 & state[3]) ^ state[0]; + uint32_t y2 = (y0 & y1) ^ state[3]; + state[0] = y0; + state[1] = y1; + state[2] = y2; + state[3] = y3; +} + +// Apply a inverse S-box layer to a Clyde-128 state. +static void +sbox_layer_inv(uint32_t* state) +{ + uint32_t y3 = (state[0] & state[1]) ^ state[2]; + uint32_t y0 = (state[1] & y3) ^ state[3]; + uint32_t y1 = (y3 & y0) ^ state[0]; + uint32_t y2 = (y0 & y1) ^ state[1]; + state[0] = y0; + state[1] = y1; + state[2] = y2; + state[3] = y3; +} + +// Apply a L-box to a pair of Clyde-128 rows. +static void +lbox(uint32_t* x, uint32_t* y) +{ + uint32_t a, b, c, d; + a = *x ^ rotr(*x, 12); + b = *y ^ rotr(*y, 12); + a = a ^ rotr(a, 3); + b = b ^ rotr(b, 3); + a = a ^ rotr(*x, 17); + b = b ^ rotr(*y, 17); + c = a ^ rotr(a, 31); + d = b ^ rotr(b, 31); + a = a ^ rotr(d, 26); + b = b ^ rotr(c, 25); + a = a ^ rotr(c, 15); + b = b ^ rotr(d, 15); + *x = a; + *y = b; +} + +// Apply a inverse L-box to a pair of Clyde-128 rows. +static void +lbox_inv(uint32_t* x, uint32_t* y) +{ + uint32_t a, b, c, d; + a = *x ^ rotr(*x, 25); + b = *y ^ rotr(*y, 25); + c = *x ^ rotr(a, 31); + d = *y ^ rotr(b, 31); + c = c ^ rotr(a, 20); + d = d ^ rotr(b, 20); + a = c ^ rotr(c, 31); + b = d ^ rotr(d, 31); + c = c ^ rotr(b, 26); + d = d ^ rotr(a, 25); + a = a ^ rotr(c, 17); + b = b ^ rotr(d, 17); + a = rotr(a, 16); + b = rotr(b, 16); + *x = a; + *y = b; +} + +// Apply a L-box layer to a Clyde-128 state. +static void +lbox_layer(uint32_t* state) +{ + lbox(&state[0], &state[1]); + lbox(&state[2], &state[3]); +} + +// Apply inverse L-box layer to a Clyde-128 state. +static void +lbox_layer_inv(uint32_t* state) +{ + lbox_inv(&state[0], &state[1]); + lbox_inv(&state[2], &state[3]); +} + +// Convert bytes to a Clyde-128 state. Bytes are in ordered by row (first-row +// first), and in little-endian order inside a row. +static void +bytes2state(uint32_t* state, const unsigned char* bytes) +{ + for (unsigned int row = 0; row < LS_ROWS; row++) { + state[row] = le32u_dec(bytes + 4 * row); + } +} + +// Convert Clyde-128 state to bytes. Bytes are in ordered by row (first-row +// first), and in little-endian order inside a row. +static void +state2bytes(unsigned char* bytes, const uint32_t* state) +{ + for (unsigned int row = 0; row < LS_ROWS; row++) { + le32u_enc(bytes + 4 * row, state[row]); + } +} + +// XOR the Clyde-128 state x into state. +static void +xor_ls_state(uint32_t* state, const uint32_t* x) +{ + for (unsigned int i = 0; i < LS_ROWS; i++) { + state[i] ^= x[i]; + } +} + +// XOR the Clyde-128 round constant of given round into state, left shifting +// each constant by shift. +static void +add_rc(uint32_t state[LS_ROWS], unsigned int round) +{ + for (unsigned int i = 0; i < LS_ROWS; i++) { + state[i] ^= clyde128_rc[round][i]; + } +} + +// Key schedule for Clyde-128. Generate 3 Clyde-128 states from key k and tweak +// t. +static void +tweakey(unsigned char tk[3][CLYDE128_NBYTES], + const unsigned char* k, + const unsigned char* t) +{ + const unsigned char* t0 = t; + const unsigned char* t1 = t + CLYDE128_NBYTES / 2; + unsigned char tx[CLYDE128_NBYTES / 2]; + xor_bytes(tx, t0, t1, CLYDE128_NBYTES / 2); + // TK[0] + xor_bytes(tk[0], k, t, CLYDE128_NBYTES); + // TK[1] + xor_bytes(tk[1], k, tx, CLYDE128_NBYTES / 2); + xor_bytes(tk[1] + CLYDE128_NBYTES / 2, + k + CLYDE128_NBYTES / 2, + t0, + CLYDE128_NBYTES / 2); + // TK[2] + xor_bytes(tk[2], k, t1, CLYDE128_NBYTES / 2); + xor_bytes(tk[2] + CLYDE128_NBYTES / 2, + k + CLYDE128_NBYTES / 2, + tx, + CLYDE128_NBYTES / 2); +} + +// Update (by 1 step) the constant generation LFSR +static uint32_t +update_lfsr(uint32_t lfsr) +{ + // Arithmetic shift left, equivalent to + // uint32_t b_out_ext = (lfsr & 0x80000000) ? 0xffffffff : 0x0; + // but constant-time. + uint32_t b_out_ext = (uint32_t)(((int32_t)lfsr) >> 31); + return (lfsr << 1) ^ (b_out_ext & CST_LFSR_POLY_MASK); +} + +// Multiplication by polynomial x modulo x^32+x^8+1 +static uint32_t +xtime(uint32_t x) +{ + uint32_t b = x >> 31; + return (x << 1) ^ b ^ (b << 8); +} + +// Apply a D-box layer to a Shadow state. +static void +dbox_mls_layer(uint32_t state[MLS_BUNDLES][LS_ROWS]) +{ + for (unsigned int row = 0; row < LS_ROWS; row++) { +#if SMALL_PERM + uint32_t x0 = state[0][row]; + uint32_t x1 = state[1][row]; + uint32_t x2 = state[2][row]; + uint32_t a = x0 ^ x1; + uint32_t b = x0 ^ x2; + uint32_t c = x1 ^ b; + uint32_t d = a ^ xtime(b); + state[0][row] = b ^ d; + state[1][row] = c; + state[2][row] = d; +#else + state[0][row] ^= state[1][row]; + state[2][row] ^= state[3][row]; + state[1][row] ^= state[2][row]; + state[3][row] ^= xtime(state[0][row]); + state[1][row] = xtime(state[1][row]); + state[0][row] ^= state[1][row]; + state[2][row] ^= xtime(state[3][row]); + state[1][row] ^= state[2][row]; + state[3][row] ^= state[0][row]; +#endif // SMALL_PERM + } +} + +// Clyde-128 TBC. +// Output in buffer c the TBC for block m, tweak t and key k. +// All buffers have length CLYDE128_NBYTES. +void +clyde128_encrypt(unsigned char* c, + const unsigned char* m, + const unsigned char* t, + const unsigned char* k) +{ + // Key schedule + unsigned char tkb[3][CLYDE128_NBYTES]; + uint32_t tk[3][LS_ROWS]; + tweakey(tkb, k, t); + bytes2state(tk[0], tkb[0]); + bytes2state(tk[1], tkb[1]); + bytes2state(tk[2], tkb[2]); + + // Datapath + uint32_t state[LS_ROWS]; + bytes2state(state, m); + xor_ls_state(state, tk[0]); + for (unsigned int s = 0; s < CLYDE_128_NS; s++) { + for (unsigned int rho = 0; rho < 2; rho++) { + unsigned int r = 2 * s + rho; + sbox_layer(state); + lbox_layer(state); + add_rc(state, r); + } + xor_ls_state(state, tk[(s + 1) % 3]); + } + + state2bytes(c, state); +} + +// Clyde-128 inverse TBC. +// Output in buffer m the inverse TBC for block c, tweak t and key k. +// All buffers have length CLYDE128_NBYTES. +void +clyde128_decrypt(unsigned char* m, + const unsigned char* c, + const unsigned char* t, + const unsigned char* k) +{ + // Key schedule + unsigned char tkb[3][CLYDE128_NBYTES]; + uint32_t tk[3][LS_ROWS]; + tweakey(tkb, k, t); + bytes2state(tk[0], tkb[0]); + bytes2state(tk[1], tkb[1]); + bytes2state(tk[2], tkb[2]); + + // Datapath + uint32_t state[LS_ROWS]; + bytes2state(state, c); + for (int s = CLYDE_128_NS - 1; s >= 0; s--) { + xor_ls_state(state, tk[(s + 1) % 3]); + for (int rho = 1; rho >= 0; rho--) { + unsigned int r = 2 * s + rho; + add_rc(state, r); + lbox_layer_inv(state); + sbox_layer_inv(state); + } + } + xor_ls_state(state, tk[0]); + state2bytes(m, state); +} + +// Shadow permutation. Updates x (array of SHADOW_NBYTES bytes). +void +shadow(unsigned char* x) +{ + uint32_t state[MLS_BUNDLES][LS_ROWS]; + uint32_t lfsr = CST_LFSR_INIT_VALUE; + for (unsigned int b = 0; b < MLS_BUNDLES; b++) { + bytes2state(state[b], x + (b * SHADOW_NBYTES / MLS_BUNDLES)); + } + for (unsigned int s = 0; s < SHADOW_NS; s++) { + for (unsigned int b = 0; b < MLS_BUNDLES; b++) { + sbox_layer(state[b]); + lbox_layer(state[b]); + state[b][SHADOW_RA_CST_ROW] ^= lfsr; + lfsr = update_lfsr(lfsr); + sbox_layer(state[b]); + } + dbox_mls_layer(state); + for (unsigned int row = 0; row < LS_ROWS; row++) { + state[SHADOW_RB_CST_BUNDLE][row] ^= lfsr; + lfsr = update_lfsr(lfsr); + } + } + for (unsigned int b = 0; b < MLS_BUNDLES; b++) { + state2bytes(x + (b * SHADOW_NBYTES / MLS_BUNDLES), state[b]); + } +} diff --git a/spook/Implementations/crypto_aead/spook128su384v2/ref/primitives.h b/spook/Implementations/crypto_aead/spook128su384v2/ref/primitives.h new file mode 100644 index 0000000..3a1467d --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128su384v2/ref/primitives.h @@ -0,0 +1,41 @@ +/* Spook Reference Implementation v1 + * + * Written in 2019 at UCLouvain (Belgium) by Olivier Bronchain, Gaetan Cassiers + * and Charles Momin. + * To the extent possible under law, the author(s) have dedicated all copyright + * and related and neighboring rights to this software to the public domain + * worldwide. This software is distributed without any warranty. + * + * You should have received a copy of the CC0 Public Domain Dedication along + * with this software. If not, see + * . + */ +#ifndef _H_PRIMITIVES_H_ +#define _H_PRIMITIVES_H_ + +#include "parameters.h" + +#define CLYDE128_NBYTES 16 + +#if SMALL_PERM +#define SHADOW_NBYTES 48 +#else +#define SHADOW_NBYTES 64 +#endif // SMALL_PERM + +void +clyde128_encrypt(unsigned char* c, + const unsigned char* m, + const unsigned char* t, + const unsigned char* k); + +void +clyde128_decrypt(unsigned char* m, + const unsigned char* c, + const unsigned char* t, + const unsigned char* k); + +void +shadow(unsigned char* x); + +#endif //_H_PRIMITIVES_H_ diff --git a/spook/Implementations/crypto_aead/spook128su384v2/ref/s1p.c b/spook/Implementations/crypto_aead/spook128su384v2/ref/s1p.c new file mode 100644 index 0000000..4576c39 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128su384v2/ref/s1p.c @@ -0,0 +1,188 @@ +/* Spook Reference Implementation v1 + * + * Written in 2019 at UCLouvain (Belgium) by Olivier Bronchain, Gaetan Cassiers + * and Charles Momin. + * To the extent possible under law, the author(s) have dedicated all copyright + * and related and neighboring rights to this software to the public domain + * worldwide. This software is distributed without any warranty. + * + * You should have received a copy of the CC0 Public Domain Dedication along with + * this software. If not, see . + */ +#include +#include +#include + +#include "s1p.h" +#include "parameters.h" +#include "primitives.h" +#include "utils.h" + +#define CAPACITY_BYTES 32 +#define RATE_BYTES (SHADOW_NBYTES - CAPACITY_BYTES) + +// Working mode for block compression. +typedef enum { + AD, + PLAINTEXT, + CIPHERTEXT +} compress_mode; + +static void compress_block(unsigned char *state, unsigned char *out, + const unsigned char *d, compress_mode mode, + unsigned long long offset, unsigned long long n); + +static unsigned long long compress_data(unsigned char *state, + unsigned char *out, + const unsigned char *d, + unsigned long long dlen, + compress_mode mode); + +static void init_sponge_state(unsigned char state[SHADOW_NBYTES], + const unsigned char *k, const unsigned char *p, + const unsigned char *n); + +void init_keys(const unsigned char **k, unsigned char p[P_NBYTES], + const unsigned char *k_glob) { + *k = k_glob; +#if MULTI_USER + memcpy(p, k_glob + CLYDE128_NBYTES, P_NBYTES); + p[P_NBYTES - 1] &= 0x7F; // set last p bit to 0 + p[P_NBYTES - 1] |= 0x40; // set next to last p bit to 0 +#else + memset(p, 0, P_NBYTES); +#endif // MULTI_USER +} + +static void init_sponge_state(unsigned char state[SHADOW_NBYTES], + const unsigned char *k, const unsigned char *p, + const unsigned char *n) { + // init state + memset(state, 0, SHADOW_NBYTES); + memcpy(state + CLYDE128_NBYTES, p, P_NBYTES); + memcpy(state + CLYDE128_NBYTES + P_NBYTES, n, CRYPTO_NPUBBYTES); + // TBC + unsigned char padded_nonce[CLYDE128_NBYTES] = { 0 }; + memcpy(padded_nonce, n, CRYPTO_NPUBBYTES); + unsigned char *b = state; + clyde128_encrypt(b, padded_nonce, p, k); + // initial permutation + shadow(state); +} + +void s1p_encrypt(unsigned char *c, unsigned long long *clen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *m, unsigned long long mlen, + const unsigned char *k, const unsigned char *p, + const unsigned char *n) { + // permutation state + unsigned char state[SHADOW_NBYTES]; + init_sponge_state(state, k, p, n); + + // compress associated data + compress_data(state, NULL, ad, adlen, AD); + + // compress message + unsigned long long c_bytes = 0; + if (mlen > 0) { + state[RATE_BYTES] ^= 0x01; + c_bytes = compress_data(state, c, m, mlen, PLAINTEXT); + } + + // tag + state[CLYDE128_NBYTES + CLYDE128_NBYTES - 1] |= 0x80; + clyde128_encrypt(c + c_bytes, state, state + CLYDE128_NBYTES, k); + *clen = c_bytes + CLYDE128_NBYTES; +} + +int s1p_decrypt(unsigned char *m, unsigned long long *mlen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *c, unsigned long long clen, + const unsigned char *k, const unsigned char *p, + const unsigned char *n) { + // permutation state + unsigned char state[SHADOW_NBYTES]; + init_sponge_state(state, k, p, n); + + // compress associated data + compress_data(state, NULL, ad, adlen, AD); + + // compress message + unsigned long long m_bytes = 0; + if (clen > CLYDE128_NBYTES) { + state[RATE_BYTES] ^= 0x01; + m_bytes = compress_data(state, m, c, clen - CLYDE128_NBYTES, CIPHERTEXT); + } + + // NOTE: We use here so-called "inverse-based tag verification", + // that is, we apply the inverse Clyde TBC to the tag extracted from + // the ciphertext and check the result against the output of Shadow. + // This way of verifying the tag is interesting in some specific cases + // such as side-channel protected implementations. + // In general implementations, the tag verification SHOULD be done in a + // more conventional way: encrypting the output of Shadow with Clyde and + // verifying the tag against the resulting value. + // This is more efficient as it does not require to implement the inverse + // Clyde. + // For more details, see the Spook specification at https://spook.dev. + unsigned char inv_tag[CLYDE128_NBYTES]; + unsigned char *u = state; + state[(2 * CLYDE128_NBYTES) - 1] |= 0x80; + clyde128_decrypt(inv_tag, c + m_bytes, state + CLYDE128_NBYTES, k); + int tag_ok = 1; + for (int i = 0; i < CLYDE128_NBYTES; i++) { + tag_ok &= (u[i] == inv_tag[i]); + } + if (tag_ok) { + *mlen = m_bytes; + return 0; + } else { + // Reset output buffer to avoid unintended unauthenticated plaintext + // release. + memset(m, 0, clen - CLYDE128_NBYTES); + *mlen = 0; + return -1; + } +} + +// Compress a block into the state. Length of the block is n and buffers are +// accessed starting at offset. Input block is d, output is written into +// buffer out if mode is PLAINTEXT or CIPHERTEXT. +// Only the XOR operation is performed, not XORing of padding constants. +static void compress_block(unsigned char *state, unsigned char *out, + const unsigned char *d, compress_mode mode, + unsigned long long offset, unsigned long long n) { + if (mode == CIPHERTEXT) { + xor_bytes(out + offset, state, d + offset, n); + memcpy(state, d + offset, n); + } else { + xor_bytes(state, state, d + offset, n); + if (mode == PLAINTEXT) { + memcpy(out + offset, state, n); + } + } +} + +// Compress a block into the state (in duplex-sponge mode). +// Input data buffer is d with length dlen. +// Output is written into buffer out if mode is PLAINTEXT or CIPHERTEXT. +// Padding is handled if needed. +static unsigned long long compress_data(unsigned char *state, + unsigned char *out, + const unsigned char *d, + unsigned long long dlen, + compress_mode mode) { + unsigned long long i; + for (i = 0; i < dlen / RATE_BYTES; i++) { + compress_block(state, out, d, mode, i * RATE_BYTES, RATE_BYTES); + shadow(state); + } + int rem = dlen % RATE_BYTES; + if (rem != 0) { + compress_block(state, out, d, mode, i * RATE_BYTES, rem); + state[rem] ^= 0x01; + state[RATE_BYTES] ^= 0x02; + shadow(state); + } + return i * RATE_BYTES + rem; +} diff --git a/spook/Implementations/crypto_aead/spook128su384v2/ref/s1p.h b/spook/Implementations/crypto_aead/spook128su384v2/ref/s1p.h new file mode 100644 index 0000000..2018568 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128su384v2/ref/s1p.h @@ -0,0 +1,35 @@ +/* Spook Reference Implementation v1 + * + * Written in 2019 at UCLouvain (Belgium) by Olivier Bronchain, Gaetan Cassiers + * and Charles Momin. + * To the extent possible under law, the author(s) have dedicated all copyright + * and related and neighboring rights to this software to the public domain + * worldwide. This software is distributed without any warranty. + * + * You should have received a copy of the CC0 Public Domain Dedication along with + * this software. If not, see . + */ +#ifndef _H_S1P_H_ +#define _H_S1P_H_ + +#include "parameters.h" + +// Size of the P parameter +#define P_NBYTES 16 + +void s1p_encrypt(unsigned char *c, unsigned long long *clen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *m, unsigned long long mlen, + const unsigned char *k, const unsigned char *p, + const unsigned char *n); + +int s1p_decrypt(unsigned char *m, unsigned long long *mlen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *c, unsigned long long clen, + const unsigned char *k, const unsigned char *p, + const unsigned char *n); + +void init_keys(const unsigned char **k, unsigned char p[P_NBYTES], + const unsigned char *k_glob); + +#endif //_H_S1P_H_ diff --git a/spook/Implementations/crypto_aead/spook128su384v2/ref/utils.c b/spook/Implementations/crypto_aead/spook128su384v2/ref/utils.c new file mode 100644 index 0000000..e390c04 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128su384v2/ref/utils.c @@ -0,0 +1,57 @@ +/* Spook Reference Implementation v1 + * + * Written in 2019 at UCLouvain (Belgium) by Olivier Bronchain, Gaetan Cassiers + * and Charles Momin. + * To the extent possible under law, the author(s) have dedicated all copyright + * and related and neighboring rights to this software to the public domain + * worldwide. This software is distributed without any warranty. + * + * You should have received a copy of the CC0 Public Domain Dedication along + * with this software. If not, see + * . + */ +#include + +#include "utils.h" + +// XOR buffers src1 and src2 into buffer dest (all buffers contain n bytes). +void +xor_bytes(unsigned char* dest, + const unsigned char* src1, + const unsigned char* src2, + unsigned long long n) +{ + for (unsigned long long i = 0; i < n; i++) { + dest[i] = src1[i] ^ src2[i]; + } +} + +// Rotate right x by amount c. +// We use right rotation of integers for the lboxes while the specification +// tells left rotation of bitstrings due to the bitsting -> integer +// little-endian mapping used in Spook. +uint32_t +rotr(uint32_t x, unsigned int c) +{ + return (x >> c) | (x << (32 - c)); +} + +// Convert 4 bytes into a uint32. Bytes are in little-endian. +uint32_t +le32u_dec(const unsigned char bytes[4]) +{ + uint32_t res = 0; + for (unsigned int col = 0; col < 4; col++) { + res |= ((uint32_t)bytes[col]) << 8 * col; + } + return res; +} + +// Convert a uint32 into 4 bytes. Bytes are in little-endian. +void +le32u_enc(unsigned char bytes[4], uint32_t x) +{ + for (unsigned int i = 0; i < 4; i++) { + bytes[i] = x >> 8 * i; + } +} diff --git a/spook/Implementations/crypto_aead/spook128su384v2/ref/utils.h b/spook/Implementations/crypto_aead/spook128su384v2/ref/utils.h new file mode 100644 index 0000000..013cdd6 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128su384v2/ref/utils.h @@ -0,0 +1,33 @@ +/* Spook Reference Implementation v1 + * + * Written in 2019 at UCLouvain (Belgium) by Olivier Bronchain, Gaetan Cassiers + * and Charles Momin. + * To the extent possible under law, the author(s) have dedicated all copyright + * and related and neighboring rights to this software to the public domain + * worldwide. This software is distributed without any warranty. + * + * You should have received a copy of the CC0 Public Domain Dedication along + * with this software. If not, see + * . + */ +#ifndef _H_UTILS_H_ +#define _H_UTILS_H_ + +#include + +void +xor_bytes(unsigned char* dest, + const unsigned char* src1, + const unsigned char* src2, + unsigned long long n); + +uint32_t +rotr(uint32_t x, unsigned int c); + +uint32_t +le32u_dec(const unsigned char bytes[4]); + +void +le32u_enc(unsigned char bytes[4], uint32_t x); + +#endif // _H_UTILS_H_ diff --git a/spook/Implementations/crypto_aead/spook128su512v2/LWC_AEAD_KAT_128_128.txt b/spook/Implementations/crypto_aead/spook128su512v2/LWC_AEAD_KAT_128_128.txt new file mode 100644 index 0000000..6fd6f72 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128su512v2/LWC_AEAD_KAT_128_128.txt @@ -0,0 +1,7623 @@ +Count = 1 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = +CT = B08AB3806CCA05FFB722A1CC926A1242 + +Count = 2 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 00 +CT = DBB3205515FC48F7FE4787F1AEAFE122 + +Count = 3 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 0001 +CT = 92547FA5DA7728A720DFD17D89774E77 + +Count = 4 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102 +CT = D3C80799308B807591C5FF8588BB8E11 + +Count = 5 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 00010203 +CT = D05E9F48EC092AB37440495491F0563B + +Count = 6 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 0001020304 +CT = FAB4E5F68EA66C01FA70A53E0E81B24E + +Count = 7 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405 +CT = A7A6E875E843C48AFE2D06CFACD45AA5 + +Count = 8 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 00010203040506 +CT = A7472D8637A6DA317F89E8AA0839F598 + +Count = 9 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 0001020304050607 +CT = 12236C7215AFCAB7813920C92AFA4369 + +Count = 10 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708 +CT = FC8FF07B7628A2E48043800D4C69BB00 + +Count = 11 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 00010203040506070809 +CT = 783A54781D136E77EAE9C504DD78BF03 + +Count = 12 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A +CT = 73F0832ED634EB25681542CB52383878 + +Count = 13 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B +CT = 77BB8B2CE1CE4AB28B4FFFD917838611 + +Count = 14 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C +CT = 319C9AD27765D1126DC8143E2394F00E + +Count = 15 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D +CT = DC36F62751898A332E0B6989D1A3D7EA + +Count = 16 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E +CT = B5BB0C6C23AAD64D76D6896B7FCC9632 + +Count = 17 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F +CT = 869E5F1F5285916FEEE0F5BB4062C0C8 + +Count = 18 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 279D300A10CFBDA8B1E068D334A5228B + +Count = 19 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 39AC8E120865BCDB8CC39CEE3FBDA79A + +Count = 20 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = A14A7C00852CCCDCB9F63BAA50ADEA70 + +Count = 21 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 5CD382ECB4DB31ECFB1825D2C049D639 + +Count = 22 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 6F1EEAC8FB560575919EE5BA007BA6C8 + +Count = 23 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = D609F2D6FEE1A729BCC1F6789ED082FE + +Count = 24 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 84F83154A65B53550328050DBC656F4D + +Count = 25 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = BF667987E74CABFF6B5B0096E5B7E695 + +Count = 26 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = C5F6C3535CC749D50075E24AB12532A5 + +Count = 27 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = BB23EA06BC85061257B2DA042DB9D8CF + +Count = 28 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = C8284DF2E22787E90127F68D552C5F5D + +Count = 29 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 342256416BC8C89329DCEAD5058538A1 + +Count = 30 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = A399AB4D27F57266F87EC5F75D0E04F4 + +Count = 31 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 20F8AFBD1AA90108EFF25D9BF7755DF5 + +Count = 32 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 4C81CBC71FE965E721B71F01EAE0DC30 + +Count = 33 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 1BA692F4935AF2675C3CEDBF42A9C508 + +Count = 34 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = +CT = CD3C91575ACF2A1607E87E4C247A0F82D0 + +Count = 35 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 00 +CT = C7048FBC1367D2750CBFA4F45904EF38B2 + +Count = 36 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 0001 +CT = 4EBA3A47BACA42E6DA8586142571693277 + +Count = 37 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102 +CT = 2FECAF4A556EE7201CEC0F84B2C155E0A6 + +Count = 38 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 00010203 +CT = 35BD83B2814F2B00AD869EBFA47952F22B + +Count = 39 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 0001020304 +CT = 774A7CF45BB03CF5E9B39012D1E814BBAB + +Count = 40 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405 +CT = 62809E8B197430C0DCF0DF918628D7A6CB + +Count = 41 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 00010203040506 +CT = 08758D1618603AD0A2130CAA2B50EF767A + +Count = 42 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 0001020304050607 +CT = 8F76A48C47B526D1F9A2220B02C4706BFB + +Count = 43 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708 +CT = 8648CA40C37F9ABE840F1DE36FB9949B32 + +Count = 44 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 00010203040506070809 +CT = A9BCD459FE6D721FDA4B01600EA24F608A + +Count = 45 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A +CT = 92D92F2CC4A44AFD6B39312A62769F1202 + +Count = 46 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B +CT = CD93D568D8A964024FB34CCD19C8197A5E + +Count = 47 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C +CT = 03DADF95410E8A6CAECF85D1F2191D08BE + +Count = 48 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D +CT = 4397159E872C0E8CF64FC362C3E43569E6 + +Count = 49 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E +CT = BF9A4DCD07BF088A725B7A22161C2F2164 + +Count = 50 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F +CT = 6197F0ADC85073F9169F51DD5279CF5689 + +Count = 51 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = E5FA15B5FD5F0B57264E97FBCB8945317E + +Count = 52 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = C46759B48D58D54393BD941C10E3DB58E2 + +Count = 53 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = D783A34DBCE833BB97FB85CF520135B8A0 + +Count = 54 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 7C5FE73F3F89D75F02A475B72070E84E86 + +Count = 55 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = F3408BA815DAA768E5A4F0B6AD1090A2B1 + +Count = 56 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = C9FD83BC33032D8052B9BBA7688A250295 + +Count = 57 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 7C638285D92F93F1ADBB7F4C6466592A40 + +Count = 58 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 1DDE40FD75A64E3379034D19DFC3AB73CB + +Count = 59 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 3312E2CDF2A24E15CA6806F7845A5B3545 + +Count = 60 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = C5549EB04CFB4CBDE04F5F5320015CC76F + +Count = 61 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = CB2763A5EF42EC590B5629A9C4FD21141E + +Count = 62 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = F7686BF8CA1B36E77652D838F53C9AF146 + +Count = 63 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 9C7B7879AD53928B4B6654045893DB2964 + +Count = 64 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = DE4232E41E5C5C87FB80B1B83C19F8CE73 + +Count = 65 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = EC3AE57C052E6789B8A24498E4F3BAC6F1 + +Count = 66 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = FE0E241D6057A6ED25E7DA4D7F85594A38 + +Count = 67 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = +CT = CD26654A8C8CD7F0084771B3CCEA803F937B + +Count = 68 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 00 +CT = C75766053041C88C6084046DDB93658454AF + +Count = 69 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 0001 +CT = 4ECB9BE04D053796827B0951286F5334E53A + +Count = 70 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102 +CT = 2F3D4D8CD98BF2C67C03B3DDF9E60D5D68AA + +Count = 71 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 00010203 +CT = 35842B83F014452F9C8D7DBAF8D415E11B60 + +Count = 72 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 0001020304 +CT = 773E816F4D01E493965FE2979A2DB267DCAD + +Count = 73 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405 +CT = 621A22F8EFD05FA346DFC2F8B20E834D70BE + +Count = 74 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 00010203040506 +CT = 08D85B92A6A621F621A311EFE40836C3A055 + +Count = 75 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 0001020304050607 +CT = 8F78A652B4ECA389021543B181C6A4463405 + +Count = 76 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708 +CT = 86671EB4F49CE9C48931D29D06802DC22339 + +Count = 77 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 00010203040506070809 +CT = A93EA0D2CBFB5C5BB9DA2A6077E1E28DB0EF + +Count = 78 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A +CT = 92C191624FC71E03A2BA87D7F88466F5E73F + +Count = 79 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B +CT = CDA9C95D561F50E66A59A6A94889D588464E + +Count = 80 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C +CT = 035AA521B62AB94438ADD46E92E485EEABEA + +Count = 81 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D +CT = 4366B944A7169FF86DC03BD80D73A8A45DE5 + +Count = 82 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E +CT = BF6BA27DBF55DF304E9D9021BE3FB55E21E6 + +Count = 83 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F +CT = 613F26D7C85388A39646BFEE37EE0FA3873E + +Count = 84 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = E5B726FF8C27F81E0ADDF665EFCB659D18BC + +Count = 85 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = C41B8BCA3989EF60B714051AFD28BE2DD1FC + +Count = 86 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = D776F6451A522267B649C68AFDD697BFAA11 + +Count = 87 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 7C4A9FD4FA98B0738A9B6203381E9F8CB4B8 + +Count = 88 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = F32B2ADCF08E5CBA00466BE287036799A340 + +Count = 89 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = C9A960C3E991F61B10011CD0287CAF5AFAD5 + +Count = 90 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 7CABE433ABB0868EA2ED7C70E1D5DCDE2F10 + +Count = 91 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 1D1125A930092BC4F3E66FECE09A2D2104B7 + +Count = 92 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 33534C0CBFDD357A3FD378AD5A0ADB4513E0 + +Count = 93 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = C5290E7C3DC6CD95E565BA3BB589EDD97877 + +Count = 94 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = CB118460B8EB8F251FD1BBED7FF3C6CCCF03 + +Count = 95 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = F7C083DE7CCED7CB4737E825A3745A2B4576 + +Count = 96 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 9CAEA99BC78731A9D8FC5FFC4245143F7A8D + +Count = 97 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = DE92F1C8A8EE27EAEC9FB2F6FF9801B15578 + +Count = 98 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = EC14276F3E757FA5EC75E97EB6E20E5104A5 + +Count = 99 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = FE7B570C3423B1D9B769A281D5DC1B525203 + +Count = 100 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = +CT = CD26B040D8380D99B7C7C6F993E4B263A86230 + +Count = 101 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 00 +CT = C757CD554E90A9E1115E23324B2988344415D5 + +Count = 102 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 0001 +CT = 4ECB1C8E83A13596D40A5588B7D375176B55FC + +Count = 103 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102 +CT = 2F3DB7FE5BFE1AD30E814DC4FB52F5FA1CE2F7 + +Count = 104 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 00010203 +CT = 3584C91E61B22C452EBE297E5EAEC4FB09F37E + +Count = 105 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 0001020304 +CT = 773E577BB426720789006AA9014B9B16DCAD66 + +Count = 106 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405 +CT = 621A29ACBD96B767A78DE963A6209144483ABE + +Count = 107 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 00010203040506 +CT = 08D88D5769B436EEF6F45A5F91357B08B94FD9 + +Count = 108 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 0001020304050607 +CT = 8F781C121DD5E4BC0D1B05C768EB84716E85F1 + +Count = 109 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708 +CT = 8667DD1988CEFEBF369B363741338A60ED51B5 + +Count = 110 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 00010203040506070809 +CT = A93E34DB5C6EA515CAA5A66E68AC2E214C108C + +Count = 111 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A +CT = 92C1CE934539FEEF918298089159A6618A83BC + +Count = 112 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B +CT = CDA976000BB0A6AC7A58EBFFA9EDB9C748D0D9 + +Count = 113 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C +CT = 035AC94E2D013FE78F8B75865A9428FA398362 + +Count = 114 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D +CT = 4366A95313122DC4879D62D6570EB72B17316F + +Count = 115 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E +CT = BF6B27623DB74EC45018B45EE54CD621E2DFE9 + +Count = 116 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F +CT = 613F1DB87F169494A7A761C158DBE0B2FFCD28 + +Count = 117 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = E5B763BCC380E6E915A7F151724E51F9559D01 + +Count = 118 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = C41BD74B0D79EAF8403E15D32ED0194FC16485 + +Count = 119 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = D77603EFFDDC749DB9A1660027D66BF7A8BA73 + +Count = 120 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 7C4A26037084F3FA2D7A2DC59F6783D546EEE2 + +Count = 121 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = F32BC6A20A0D943752E385266D458F076997C7 + +Count = 122 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = C9A917A2090C2211891A2B24F1A02758491BC4 + +Count = 123 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 7CABC23A7965E76723877E4C0CBB9B8ACDF60A + +Count = 124 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 1D11267BEA3B11F625AF4BB56796C60E0333E7 + +Count = 125 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 335325BE89FC96EC446D9528CDAD54A76943DB + +Count = 126 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = C5291797C6138C4BC6CDB44757003D887FFFA6 + +Count = 127 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = CB112872AAD84800B2AADB92B54C221058672E + +Count = 128 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = F7C02B511CC1800A2651902A7039F77C423358 + +Count = 129 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 9CAEEBBB47F97C82F225DF397E3519003ABB63 + +Count = 130 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = DE921A60F8ABEC4510660D71A2E2A1FF3975A7 + +Count = 131 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = EC143CFFD116AE775E4DDE7059A3B7BB2A4CA5 + +Count = 132 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = FE7B33F0C977C939B7E5EBC6129D35BEB6E044 + +Count = 133 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = +CT = CD26B03F25B4A442894D291BF99CD761504CF7F7 + +Count = 134 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 00 +CT = C757CD64F52BD81B0AB483F99F1E5EC991B394FC + +Count = 135 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 0001 +CT = 4ECB1C57668274A11AAC2134972425C1735EF98B + +Count = 136 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102 +CT = 2F3DB7FB9AAEE2F9898E853D26762C5D69C2CEB7 + +Count = 137 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 00010203 +CT = 3584C9AD9FD3C7F54B32E5F61310B0C000003149 + +Count = 138 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 0001020304 +CT = 773E574F96F52082BA09301CC42053019D276435 + +Count = 139 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405 +CT = 621A29CE4F4DC5597A9EA075773977EBB8D593D8 + +Count = 140 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 00010203040506 +CT = 08D88D7A3D74633EA5E4821D07AD37FF6EEEE4F1 + +Count = 141 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 0001020304050607 +CT = 8F781CA9ACDB8A7C271CF7495A0C6AEBBFF65FBA + +Count = 142 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708 +CT = 8667DD61B878368A301BCAC00CE504D365B2DC86 + +Count = 143 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 00010203040506070809 +CT = A93E34AD42D2FC1CA6B2DD2FB34FC51199DE3B7B + +Count = 144 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A +CT = 92C1CE853E2214D9C9F6C770580A53BF8FBCE3C9 + +Count = 145 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B +CT = CDA976455904681ED8EAEEAFE8D5AC9EDC62ECA0 + +Count = 146 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C +CT = 035AC9FA72F710853C89560AF35BB7348969E15A + +Count = 147 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D +CT = 4366A97B4897D45E4C3AA93B6ACA4237DED2F4CE + +Count = 148 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E +CT = BF6B276272B742CC68A8CC5E4B14502B6F0E0D77 + +Count = 149 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F +CT = 613F1D7DDADE76B9A8496544E2E32D09D0184824 + +Count = 150 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = E5B7635D44B4148F3AC4DB48257471F6032AD63E + +Count = 151 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = C41BD787FF9A899E0FBFF3FF6CD6D2B23398BA2E + +Count = 152 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = D776039BBEADE9631B1DC2A6237BDBEF12177551 + +Count = 153 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 7C4A26943BF24CE3137DBE73C04F432614520715 + +Count = 154 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = F32BC6625AA6DBCC92D5B9BE905CF43BAAA3E16D + +Count = 155 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = C9A91727710FAC53518698C7EC2CDFB7FF0E3ECE + +Count = 156 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 7CABC253FBCDE04ED5D60A1C3F9DDF419883E98E + +Count = 157 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 1D1126F28F75C8B8F54618EF7EF6F6E3A4E2B0F4 + +Count = 158 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 335325BC94EDA4BB2D79A78B00A1BEC2E41BF42F + +Count = 159 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = C529176FB295C81BA7CC1ECE13DC384343B18B6A + +Count = 160 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = CB1128842755C24B4EEA600C62E8A56A3FE6EF2E + +Count = 161 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = F7C02BE5EB7B619E6BD635D66BA6D158771502FD + +Count = 162 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 9CAEEBA74AD569D0CFFFC3CDC4FCF910AEA9F3F3 + +Count = 163 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = DE921A67B7041DE47DA806DF346CBE00C79F0C42 + +Count = 164 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = EC143CB4EB1033DBD013A79E0704A7B113E19848 + +Count = 165 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = FE7B33AA63C9246F8D75AC94EC7C9BF3E2F4105A + +Count = 166 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = +CT = CD26B03F5BE02850CEE21D331117FBEA9E8D6756FC + +Count = 167 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 00 +CT = C757CD64C8E0885908F3D2865D45EF3918DE5912EF + +Count = 168 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 0001 +CT = 4ECB1C57DE58D4E785D6BDAAEDD3A4FE6128B8D798 + +Count = 169 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102 +CT = 2F3DB7FBC9D3D00B1BA54373B5DA223BE1327CF6B1 + +Count = 170 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 00010203 +CT = 3584C9AD22D1201AA196D3F4A4830CB6687FF8FA82 + +Count = 171 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 0001020304 +CT = 773E574F330837C80853FED55FCF46F0F91149ED52 + +Count = 172 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405 +CT = 621A29CE688540D881BF2DEED3391CF9803C032532 + +Count = 173 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 00010203040506 +CT = 08D88D7AF56C7E5DCBD36E5745FA8C360CA4397009 + +Count = 174 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 0001020304050607 +CT = 8F781CA96E070965B49494C5413F1A704A1165467A + +Count = 175 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708 +CT = 8667DD61BD5B82AC53387A6D2F73B203322A8364DB + +Count = 176 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 00010203040506070809 +CT = A93E34AD2AF18DAEE22C2B7E31366DD2E34AAFC11F + +Count = 177 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A +CT = 92C1CE858DFC738865DD02C0885062A09C690EA903 + +Count = 178 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B +CT = CDA97645EA867238CCAEA4DB566BF681953DDBEB1C + +Count = 179 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C +CT = 035AC9FAB8879F99F286646E3B33D6DC1041BD1C26 + +Count = 180 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D +CT = 4366A97BE2584CB932B0D431885A5EF38D1A821D76 + +Count = 181 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E +CT = BF6B2762ED9C902DCB3BEC8C1FBBF61556D1B24B5E + +Count = 182 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F +CT = 613F1D7D1F384433DBB54FEBF94E7B4AAE613C0603 + +Count = 183 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = E5B7635DC55E2DA4A1472C4AE22E507ABBE8CC39EE + +Count = 184 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = C41BD787A90EE95A88D322DC625097063EF3B21E5E + +Count = 185 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = D776039B9049C2DEB2ECB6E74FBDE01E03D1DDC4E7 + +Count = 186 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 7C4A269473B524C4D3EE1063DEB3D53F9B71DEFCCF + +Count = 187 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = F32BC6629AB02CF6CCA9605BDA61C3C1DFCCC0BD91 + +Count = 188 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = C9A91727C4DB746BF1D5E2607B3E6924CEA805A14D + +Count = 189 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 7CABC253B2394DEC8FCEDBFBF688FB4A83A0E87963 + +Count = 190 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 1D1126F21783990A9C23475AF68E00E164FFA46D6F + +Count = 191 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 335325BC97E1CA6601CCB4E0E77EA24D5D831663E7 + +Count = 192 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = C529176F4D15F9BAFDAEDB97227DEFAE902FECBC6D + +Count = 193 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = CB112884F6D1D39FA45985AE55B64BE5B0E9E1D024 + +Count = 194 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = F7C02BE5F4633D3AED5EBCA212F3C0B1902243C2FA + +Count = 195 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 9CAEEBA74761A5F0A621DF444AD4F76BBB0E1EE1B1 + +Count = 196 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = DE921A675D3BE63E5DC7589F9CB91A4C9B6C8F3259 + +Count = 197 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = EC143CB4F785A0E58F97B05F23258546E6073165CD + +Count = 198 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = FE7B33AA1AEED84FA60037132DE90FE19D0DE6737B + +Count = 199 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = +CT = CD26B03F5BADC44C90D28985817BFF291D38A3348BCE + +Count = 200 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 00 +CT = C757CD64C8DBC549AB68658E772E76C989ACE319E91B + +Count = 201 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 0001 +CT = 4ECB1C57DE9E7069EBEE2084829B64C1F11950D43969 + +Count = 202 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102 +CT = 2F3DB7FBC9AEC82DB1352F9359D310A32AE5DF195573 + +Count = 203 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 00010203 +CT = 3584C9AD22463E6A895D69223C1AE3339D4615AFA359 + +Count = 204 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 0001020304 +CT = 773E574F331C516097FDD9EFA9C64269EC1EEF34D588 + +Count = 205 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405 +CT = 621A29CE689BCD78BD2E99E3C14E58519F5519E6DE51 + +Count = 206 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 00010203040506 +CT = 08D88D7AF56F973AD5F8B3BAC15B81B079691B964667 + +Count = 207 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 0001020304050607 +CT = 8F781CA96EE2D47533F45EBB022AAF6347CE37C80368 + +Count = 208 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708 +CT = 8667DD61BD742E1E1413582EAE95674F9A23EB2F49AE + +Count = 209 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 00010203040506070809 +CT = A93E34AD2AE079464378C09FEC63CE153B9F992B02A9 + +Count = 210 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A +CT = 92C1CE858D4B320E18109E7743CD2E1667D020D38BDB + +Count = 211 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B +CT = CDA97645EA47F72523B1A3BED991BD8B2D9FE7F254FF + +Count = 212 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C +CT = 035AC9FAB8AE0AC30FC85AC47FE9D9CE6226C41EADED + +Count = 213 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D +CT = 4366A97BE216A9F109DAD8C3A4889C3E2B76D10C6527 + +Count = 214 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E +CT = BF6B2762EDD21E2596D9F1C471B4C6FAE6DEA6387F70 + +Count = 215 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F +CT = 613F1D7D1F411F9F02D1EF535AB16FC8752C919EA13F + +Count = 216 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = E5B7635DC5C998DAB99462F6C078C86EF24FA5979587 + +Count = 217 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = C41BD787A900DB11F1E9ADB51457930CAECEF75F1480 + +Count = 218 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = D776039B908D27B71E5E6EE8402099290944AB5941FA + +Count = 219 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 7C4A26947319E6229AED84E5883DA8CBDD3E4A018BA0 + +Count = 220 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = F32BC6629AA4306C9251AFA898DAA1CD252B9D6CF159 + +Count = 221 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = C9A91727C48C92D4B47852B8DA95827E452F6BEABB1E + +Count = 222 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 7CABC253B2336DE85D15DF64766C188B778D438B79D5 + +Count = 223 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 1D1126F217BDCD5A67C33F86A6207DFDA62E5B7350E1 + +Count = 224 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 335325BC97803696049D2ED890EDA9F4B0FDB194FA7C + +Count = 225 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = C529176F4DF043833B86EBA4A5144566CF6497226F5D + +Count = 226 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = CB112884F678F47E5ADF8D6588295624F7EF8F460D0A + +Count = 227 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = F7C02BE5F41251E49E6E0F4F9B8F40F2D08C67CA05AE + +Count = 228 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 9CAEEBA747C820053A630B430FCF50B160C83E72B7BF + +Count = 229 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = DE921A675DB630A8B6B31BA097AEE319C30DABDAD9C6 + +Count = 230 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = EC143CB4F79BC8C27468CB95169979C33D2558846C1F + +Count = 231 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = FE7B33AA1A61FD93D5FCD226D53F8514F3D273848B2C + +Count = 232 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = +CT = CD26B03F5BADE91513B56A754D3C665EE4AEEA37D7080D + +Count = 233 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 00 +CT = C757CD64C8DB098FED4D0FD721AE763AF002868E381A63 + +Count = 234 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 0001 +CT = 4ECB1C57DE9E062CFC0465A3F5E4C34E0E2BAAB265236F + +Count = 235 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102 +CT = 2F3DB7FBC9AE452283C69BDF4F9EC5F8AE58D1E358F139 + +Count = 236 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 00010203 +CT = 3584C9AD2246F963F926B5A07327EE4B9A29731A936952 + +Count = 237 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 0001020304 +CT = 773E574F331C0CDAB56CA8C1CCD45DEE987B3ADA7E87BD + +Count = 238 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405 +CT = 621A29CE689BE45E8A60B69EA9ACA55E7F510B58884693 + +Count = 239 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 00010203040506 +CT = 08D88D7AF56FF1EB8A2DB49F4FC31826074F10E99A2E6D + +Count = 240 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 0001020304050607 +CT = 8F781CA96EE201F58ED80FDAA74651B2AE5DBEE5F949F6 + +Count = 241 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708 +CT = 8667DD61BD7495C729C33BB9CE014CC04F048C2D706411 + +Count = 242 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 00010203040506070809 +CT = A93E34AD2AE0860D9403016DDAC835AC24CB7CEDC397DD + +Count = 243 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A +CT = 92C1CE858D4B1B1CD92AFCF70FA302DC2EBB28006B2206 + +Count = 244 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B +CT = CDA97645EA478DF9E98F789CE6A3D3FC096E2A686DFCAD + +Count = 245 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C +CT = 035AC9FAB8AE71231EB7AC2F4BBB2789AB27D795617FAF + +Count = 246 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D +CT = 4366A97BE2169AF37991283934025AE5EDBDFEDE2364F1 + +Count = 247 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E +CT = BF6B2762EDD23FB1D12919D871FE8D027A6944B4098F40 + +Count = 248 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F +CT = 613F1D7D1F412F96CABF43706EC557261CCD0C1254A066 + +Count = 249 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = E5B7635DC5C9B017DF4612044CE293A02B1E9A7E7B47DF + +Count = 250 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = C41BD787A900C2EEC2173A3561CF945D2154E4666B0F69 + +Count = 251 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = D776039B908DCA5F8B66712053684C32566C3A804ECF43 + +Count = 252 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 7C4A269473191E206A52471B73C1799D22A818BD58F7A0 + +Count = 253 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = F32BC6629AA4889ED02F8111CB605864DA67A60E323F04 + +Count = 254 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = C9A91727C48CDC26D19808B9AEEF20DC1CA1901DADAD4F + +Count = 255 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 7CABC253B23309CE30176A4E819F777813815737D7055E + +Count = 256 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 1D1126F217BD9F2CC9E18840EF22F61D5792D03216BF78 + +Count = 257 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 335325BC9780BE24A6FDC7FA9D05A02BAA0CC45C22EF4F + +Count = 258 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = C529176F4DF08529ECC772B32B7DE596B0887220C545EC + +Count = 259 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = CB112884F6782D7961455EA81B53102D5AD84F83F454C6 + +Count = 260 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = F7C02BE5F41213AA15D312C2D68699D16EB1A55DEC00CD + +Count = 261 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 9CAEEBA747C80255965FB7327762C55E35B377DD800E86 + +Count = 262 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = DE921A675DB6AEA9C8B85C20B4A743AAF565101E7FAB5B + +Count = 263 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = EC143CB4F79B5B7BC736D5188B32E18B4F2062AF98C7BE + +Count = 264 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = FE7B33AA1A6111B7CBA3AC23257B66BF7F9E5C9BEB5104 + +Count = 265 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = +CT = CD26B03F5BADE92A07509AE79639391244E7C602F41CD2B0 + +Count = 266 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 00 +CT = C757CD64C8DB098A1B32833B5C03234CB0F8FAA3114AA901 + +Count = 267 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 0001 +CT = 4ECB1C57DE9E065101C2D64CD025094FF634266D8FB74C9B + +Count = 268 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102 +CT = 2F3DB7FBC9AE4534C5CF38A87EC2DF7F69848491F4B97AEC + +Count = 269 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 00010203 +CT = 3584C9AD2246F947C5E18DF954E8014450A3AA6FDE08E63D + +Count = 270 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 0001020304 +CT = 773E574F331C0CBB84B6E92614D08DF6E2AFF14BC022F445 + +Count = 271 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405 +CT = 621A29CE689BE4C091103230C7171D8F22414341CD8E4E3C + +Count = 272 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 00010203040506 +CT = 08D88D7AF56FF1C70A687C0F80AF5162874288CE854CAE37 + +Count = 273 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 0001020304050607 +CT = 8F781CA96EE2015391A213BD83C680C948AEDA268DAD2051 + +Count = 274 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708 +CT = 8667DD61BD7495CD3029282E477326ECDD921C614457A49D + +Count = 275 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 00010203040506070809 +CT = A93E34AD2AE086DC9426443148FF5CC13D4702734F4C819A + +Count = 276 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A +CT = 92C1CE858D4B1B4F0E62630E9253220A94A14F0C94963451 + +Count = 277 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B +CT = CDA97645EA478DD341B1A049AA69D66EA9899B7484286256 + +Count = 278 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C +CT = 035AC9FAB8AE71BEE6343D7B2A21EA60BE24B6D2B59C4813 + +Count = 279 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D +CT = 4366A97BE2169A1D1BCD6F934D590307A0C37CB4B57DDB6A + +Count = 280 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E +CT = BF6B2762EDD23F9618E653CE31D1D444472665892315D335 + +Count = 281 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F +CT = 613F1D7D1F412FC8E9EC08471BCCAC0F9C2C99B0492438C4 + +Count = 282 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = E5B7635DC5C9B08AEB19F26377C2E70356C895C9292ED82B + +Count = 283 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = C41BD787A900C2330BA2F3B56FA296CC46617298481E3C27 + +Count = 284 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = D776039B908DCA18926E8618CF339A503E50B474572BA6B9 + +Count = 285 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 7C4A269473191EC4E9426518CD04A660E7806A3BAE5C9F7F + +Count = 286 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = F32BC6629AA488A0FBEE10FC6451791FD4FA44DE68A68AAA + +Count = 287 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = C9A91727C48CDCD41ADD94166ECE329137DC1FC4944C12F7 + +Count = 288 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 7CABC253B23309CE248236834BF7DEB360373F5AA663C952 + +Count = 289 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 1D1126F217BD9FABF231A844282B2493395F341982B2E1A0 + +Count = 290 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 335325BC9780BE38DCEE83C61AB7BB62C030E1A6C7B92188 + +Count = 291 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = C529176F4DF08520DF7FA824481330A8D699E6A844ED36A4 + +Count = 292 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = CB112884F6782DA9090DD9C97BF0AADF967753591DF1A376 + +Count = 293 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = F7C02BE5F4121324A100105F13A06D93B2F512C3B28D3858 + +Count = 294 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 9CAEEBA747C8021889BC1D2E9B421FDBCC1F17BDCC16781D + +Count = 295 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = DE921A675DB6AE3B8663B1071FEA826DBAD67A746EB2445C + +Count = 296 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = EC143CB4F79B5B96D6F3C7F29CEFACA04C1CB9FD74473207 + +Count = 297 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = FE7B33AA1A61119A4CFF2987602FCC4B79B07849DD534FF9 + +Count = 298 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = +CT = CD26B03F5BADE92AAB27D5101085F8D68AAF3B6EB8F890437C + +Count = 299 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 00 +CT = C757CD64C8DB098A27601CE0DCF5713EF7D632B4760FCDC42D + +Count = 300 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 0001 +CT = 4ECB1C57DE9E0651DDD9E7CFB2A631D7D937130FA55A558196 + +Count = 301 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102 +CT = 2F3DB7FBC9AE4534AE3C48416ADBFB90E918DB7A93C73AEBAC + +Count = 302 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 00010203 +CT = 3584C9AD2246F947E4D8D94C83A5B1649AEF99EAB44BB576BF + +Count = 303 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 0001020304 +CT = 773E574F331C0CBBE75043BD91390A4DE6B7791F4C769BE28A + +Count = 304 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405 +CT = 621A29CE689BE4C056A591479558371C0B1C69C7ADE2C0C035 + +Count = 305 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 00010203040506 +CT = 08D88D7AF56FF1C7604E353C3447F18FFCE0C7B57127BCCF93 + +Count = 306 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 0001020304050607 +CT = 8F781CA96EE20153C79484CF54BE7DB5317C13CEDFFA459A0A + +Count = 307 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708 +CT = 8667DD61BD7495CD68A2628B2E1DE60C43782B815718BC2026 + +Count = 308 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 00010203040506070809 +CT = A93E34AD2AE086DC38ACA316A4A84763FB86F284FD1BD8A57B + +Count = 309 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A +CT = 92C1CE858D4B1B4FE66FC7A47EDC15067F8B28035D904F6DC6 + +Count = 310 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B +CT = CDA97645EA478DD39DF98A3D41F85B46B361918C773A1DF1F8 + +Count = 311 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C +CT = 035AC9FAB8AE71BEBA803B21CD43E137D0236B1A2EA2E26EB1 + +Count = 312 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D +CT = 4366A97BE2169A1DB7C10FC7872C217FF64FB5DCA03E2D36C4 + +Count = 313 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E +CT = BF6B2762EDD23F9601EB0FBF95EBEBD036BCFB3A9CA501D95C + +Count = 314 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F +CT = 613F1D7D1F412FC81F397E52E9C7507F1E2679D7C8EF974E25 + +Count = 315 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = E5B7635DC5C9B08ADB9640EFE506B544AB40B1C8CC44C71528 + +Count = 316 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = C41BD787A900C233AF3078D19F5552EB19C6D25D944C30B744 + +Count = 317 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = D776039B908DCA18C7CCCBE66DA6FE859AEE8D7E70AC30EAA7 + +Count = 318 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 7C4A269473191EC490D0AAE746960069ED43A684B87F766E72 + +Count = 319 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = F32BC6629AA488A08DD00336FC2C473BFA1D9541BE3D690709 + +Count = 320 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = C9A91727C48CDCD48DA77F62AB09A200F4D1DC06F7CCD97E1A + +Count = 321 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 7CABC253B23309CE6D65B161B2F8292677CC87171A14E0BE70 + +Count = 322 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 1D1126F217BD9FAB3AB64D9765DDBFE336AC69F4A85836E4E9 + +Count = 323 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 335325BC9780BE380E61D44CA9D6538ECB0E762E7541C75659 + +Count = 324 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = C529176F4DF08520B43545BB6B41EE6E94566AEE9E43773AEE + +Count = 325 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = CB112884F6782DA99E1F0DC180933F04FB44FF973EE487B825 + +Count = 326 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = F7C02BE5F4121324C5349115DCF020FDF11D8FBB8EAAA1CEC4 + +Count = 327 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 9CAEEBA747C80218B0303F8ADB6D816D03FC6BC27882D9FB27 + +Count = 328 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = DE921A675DB6AE3BCC3184A72AE35B346674CB2D87ED98ACE6 + +Count = 329 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = EC143CB4F79B5B9683ED9138D86F1FE812EB09E5914EB3D1B5 + +Count = 330 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = FE7B33AA1A61119A26E9BF164EB2194DCB5CDB2D3BF7E32851 + +Count = 331 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = +CT = CD26B03F5BADE92AABD7E19C5520A4EFB97B7B5AAD7C150F277E + +Count = 332 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 00 +CT = C757CD64C8DB098A2795E55AB4656FE8B1ACE41A57203F977895 + +Count = 333 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 0001 +CT = 4ECB1C57DE9E0651DDD07A46A72970F03A7C6A0BF01D7695AE84 + +Count = 334 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102 +CT = 2F3DB7FBC9AE4534AE7E7FFFBB7BBEE164F8A66B85DF8FEC9FBA + +Count = 335 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 00010203 +CT = 3584C9AD2246F947E4272C5CCB1B913D5379175B3B48E9B4F58C + +Count = 336 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 0001020304 +CT = 773E574F331C0CBBE73FC519D433255AF490F9EA2B75D120BCC4 + +Count = 337 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405 +CT = 621A29CE689BE4C0569D50F8283745F1E0085C7E3B4D80879BD9 + +Count = 338 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 00010203040506 +CT = 08D88D7AF56FF1C7605EFAB349AB461E7E0AAEA2FCCB928053C9 + +Count = 339 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 0001020304050607 +CT = 8F781CA96EE20153C7B757ECDABC21B01A3C61C2509431361371 + +Count = 340 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708 +CT = 8667DD61BD7495CD686F6B9EF0FFE2A08A6A9D10400FA39352EE + +Count = 341 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 00010203040506070809 +CT = A93E34AD2AE086DC387143BF292ABAE2361E0BBB0D4AC1212050 + +Count = 342 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A +CT = 92C1CE858D4B1B4FE67821D1364AC907E873520B98290DFC81E2 + +Count = 343 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B +CT = CDA97645EA478DD39DA86492079C2C9B2757548BB3F463118787 + +Count = 344 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C +CT = 035AC9FAB8AE71BEBAF4557B557A545CBB659A0F8327ACDC85E1 + +Count = 345 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D +CT = 4366A97BE2169A1DB72E791A8936896DFC266FCD0ED7EC5A57EE + +Count = 346 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E +CT = BF6B2762EDD23F9601504D37793FDFF80F2A35E58DB5A80DD90C + +Count = 347 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F +CT = 613F1D7D1F412FC81FB7A986788EB8FD819F34BB53154CA3B300 + +Count = 348 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = E5B7635DC5C9B08ADB2B79B302B77DFC2D4E3FDAC88030479731 + +Count = 349 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = C41BD787A900C233AF28D023279D1EAFF196BCA426176930C97E + +Count = 350 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = D776039B908DCA18C7FC8D429674D8D8E9F422F735B8AE3856B5 + +Count = 351 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 7C4A269473191EC49043E6FBC1C9921BCD0ACF24DB010009E4C0 + +Count = 352 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = F32BC6629AA488A08D97AF05B5D49CFFFF25F69038078DD58E79 + +Count = 353 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = C9A91727C48CDCD48D810B8772594882E5496DDF1437AEABAC50 + +Count = 354 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 7CABC253B23309CE6D8A8D96389616C53C7C499124B111293634 + +Count = 355 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 1D1126F217BD9FAB3AC2ECE045883D522911A43A14B0AFE6F512 + +Count = 356 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 335325BC9780BE380E71FF495D7BE34F7B04E5B60ABE259A6404 + +Count = 357 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = C529176F4DF08520B44204BED1DB40591E69BA39E486F1F9FD33 + +Count = 358 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = CB112884F6782DA99E985C40E0A88E32CD5016245680FEDB9330 + +Count = 359 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = F7C02BE5F4121324C5CCEEBF22DA5A0F2F7B892BD78B1B49E54F + +Count = 360 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 9CAEEBA747C80218B01A807EB52DF966636A3B32768C82BA7D84 + +Count = 361 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = DE921A675DB6AE3BCCBA4ED21FE446E9566D202D5C88F74113FB + +Count = 362 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = EC143CB4F79B5B9683EAEEDF35C83E4E9B81A090ABBCDF814574 + +Count = 363 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = FE7B33AA1A61119A26954C8EEF156D6A6C878FAD362A6EA7CDC1 + +Count = 364 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = +CT = CD26B03F5BADE92AABD726E47CA0F3F50EE7D1AA7E7257D540F183 + +Count = 365 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 00 +CT = C757CD64C8DB098A2795D90FC3AADA98C15E3E9994133842CEFE9F + +Count = 366 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 0001 +CT = 4ECB1C57DE9E0651DDD008C83E1B9AA8C1C31171A67C699C206ECE + +Count = 367 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102 +CT = 2F3DB7FBC9AE4534AE7E401F1EA4AD1A78CB51A3C0FB0A482D9F99 + +Count = 368 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 00010203 +CT = 3584C9AD2246F947E4273B387974B9D54D08B9CFA9C344012226B6 + +Count = 369 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 0001020304 +CT = 773E574F331C0CBBE73F57404146B3254D1A56DF282671C3ACD28F + +Count = 370 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405 +CT = 621A29CE689BE4C0569DEA3E35EDE649CFD9E247DCC4A9E648E6A7 + +Count = 371 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 00010203040506 +CT = 08D88D7AF56FF1C7605EB7602D520E954D95ABB3DDE898E4BA1A6A + +Count = 372 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 0001020304050607 +CT = 8F781CA96EE20153C7B7CBA8A145B0A0880EBEBADF4F09822704AF + +Count = 373 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708 +CT = 8667DD61BD7495CD686F536C3E23A1F796976C691FA0A45C9862A2 + +Count = 374 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 00010203040506070809 +CT = A93E34AD2AE086DC3871843F7635DDCA242EF157EA898C8484D6A9 + +Count = 375 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A +CT = 92C1CE858D4B1B4FE678E78AB1FA65D1E3134EBCF054C0CC651EC4 + +Count = 376 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B +CT = CDA97645EA478DD39DA8E233DF93AEFEFCF80815D1C9B97B233630 + +Count = 377 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C +CT = 035AC9FAB8AE71BEBAF4E962E22ED81D6E32D26DF861A0F3F50B72 + +Count = 378 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D +CT = 4366A97BE2169A1DB72EBB4B49D6AE1B4319090E584FAB70B9037B + +Count = 379 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E +CT = BF6B2762EDD23F960150A864EF267612159B497F895AA788AA5E23 + +Count = 380 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F +CT = 613F1D7D1F412FC81FB7480D5919EB9BC03ED356E0732850C962C3 + +Count = 381 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F10 +CT = E5B7635DC5C9B08ADB2B6937FEC76F98A7AF6F7790FCBBFCB09C01 + +Count = 382 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = C41BD787A900C233AF2832794C0C8AD142E57E72AAE48E5A984361 + +Count = 383 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = D776039B908DCA18C7FC987D0559D69C2CF9BA524EDF698683082B + +Count = 384 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 7C4A269473191EC49043D56787A44133367600E4CA189CD561DEC4 + +Count = 385 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = F32BC6629AA488A08D97B1DDF01370BBB030D5A335C1192A429CFC + +Count = 386 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = C9A91727C48CDCD48D814B5E0474B69886A51A1F92362E11180AF7 + +Count = 387 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 7CABC253B23309CE6D8A96584C1DF98ECC7971362E19DAC511CAEB + +Count = 388 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 1D1126F217BD9FAB3AC20347358249795240A9F012D10F63E9E7F3 + +Count = 389 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 335325BC9780BE380E71E14DC04A3BFE0DC09617431A8D98ECFF40 + +Count = 390 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = C529176F4DF08520B442610B03EFDE7F7C241377211414155F3732 + +Count = 391 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = CB112884F6782DA99E982AB9AC7FEF6F9C0461681FE4CD340C3E39 + +Count = 392 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = F7C02BE5F4121324C5CCE0F250B0B8B13224A262B16B012E1639AD + +Count = 393 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 9CAEEBA747C80218B01A1C863C8853E6F552E136295EA52C843BD6 + +Count = 394 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = DE921A675DB6AE3BCCBA58A3307554964E66E54BA9F62A18958960 + +Count = 395 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = EC143CB4F79B5B9683EA2B8D81DB9C61B1CE5E63FB164957ADA290 + +Count = 396 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = FE7B33AA1A61119A2695E6F361274EF3AA8BBA8785ACB520B24ACD + +Count = 397 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = +CT = CD26B03F5BADE92AABD72681ED387A6917145FB533612FDECBAC3D9B + +Count = 398 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 00 +CT = C757CD64C8DB098A2795D9891DE8F181ECCDC4CECB81482EA8BF7322 + +Count = 399 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 0001 +CT = 4ECB1C57DE9E0651DDD008530FDC78DE4325BA00059AB8B421CF0FD6 + +Count = 400 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102 +CT = 2F3DB7FBC9AE4534AE7E404B0D23FC874BA94B3280D0AF4504B9A828 + +Count = 401 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 00010203 +CT = 3584C9AD2246F947E4273B2F9974109126DCF1F62783F7D00E69E07A + +Count = 402 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 0001020304 +CT = 773E574F331C0CBBE73F578F219DC4564750C7737391B4DFB15759D9 + +Count = 403 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405 +CT = 621A29CE689BE4C0569DEA81D1DA2BA5BE3729C6A3BAF89EF390388A + +Count = 404 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 00010203040506 +CT = 08D88D7AF56FF1C7605EB78BD370E425E7EA21E5A18E0421AC265DAD + +Count = 405 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 0001020304050607 +CT = 8F781CA96EE20153C7B7CB3EF9B3DEFDB1E34F586155CA0A61A9650E + +Count = 406 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708 +CT = 8667DD61BD7495CD686F5342CF5599313E93512DBB6D3FAD7DEAD796 + +Count = 407 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 00010203040506070809 +CT = A93E34AD2AE086DC387184CFFCE67E0FEF37A5D8A97896691334DDAB + +Count = 408 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A +CT = 92C1CE858D4B1B4FE678E72AD040D17FF882801A482DF3E6D75F12FC + +Count = 409 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B +CT = CDA97645EA478DD39DA8E246BC67208A7C9BD3088164206F218E0C93 + +Count = 410 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C +CT = 035AC9FAB8AE71BEBAF4E9D455B5D3CC395B260B9FDB9E4BAC658B93 + +Count = 411 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D +CT = 4366A97BE2169A1DB72EBBFEFA7DAA55BC98EDB1E76F1FE8B3160F62 + +Count = 412 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E +CT = BF6B2762EDD23F960150A8A6BC226F33F2F74EF652F07C6712C2643D + +Count = 413 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F +CT = 613F1D7D1F412FC81FB748D221BEEC0809B534397C2A36695EF5AC74 + +Count = 414 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F10 +CT = E5B7635DC5C9B08ADB2B695BAC10012B635CE63A7365D4A4ACCA4EDD + +Count = 415 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = C41BD787A900C233AF283296D1760C4E19E0E33EE947619AB82AEC92 + +Count = 416 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = D776039B908DCA18C7FC98E525BDFC32C8091AADA1FCB64B03C513F5 + +Count = 417 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 7C4A269473191EC49043D53126543750C90F9D68A62197AA3635D665 + +Count = 418 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = F32BC6629AA488A08D97B192B446F1D1530E0B0FE0C5DEE6195032E1 + +Count = 419 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = C9A91727C48CDCD48D814B55C4AE0727D9B517E5B12C234538CF8C9D + +Count = 420 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 7CABC253B23309CE6D8A9673FF5845E373C573BD2CDA37F83B476A31 + +Count = 421 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 1D1126F217BD9FAB3AC203E442775583AFA0CFBE24C44248C2419157 + +Count = 422 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 335325BC9780BE380E71E1842DB08191AF63C2EB3C3EF55A3A9962AB + +Count = 423 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = C529176F4DF08520B4426101D789B2E2C250685C4324C18E17BDE0C7 + +Count = 424 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = CB112884F6782DA99E982AE3FD8FB45933AA1F6D47A1CB38325FB5FA + +Count = 425 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = F7C02BE5F4121324C5CCE07D6B0559B484338BBDE69CC9B757D4D444 + +Count = 426 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 9CAEEBA747C80218B01A1C882B6D072D5D753B64F0AC5658FFFAB193 + +Count = 427 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = DE921A675DB6AE3BCCBA58088B569E61DEF5D48B934EC0DDC7E3CE20 + +Count = 428 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = EC143CB4F79B5B9683EA2BED390164EF4B2A91E3A5DF00EEEB9D6CD7 + +Count = 429 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = FE7B33AA1A61119A2695E61D268359D35835ADE42C8795501EF39CD7 + +Count = 430 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = +CT = CD26B03F5BADE92AABD726819B796AFC77EA3BB9D847FC20D1BEE15A1F + +Count = 431 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 00 +CT = C757CD64C8DB098A2795D98998D32A12E351F108EFD80F8DA5BED21E64 + +Count = 432 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 0001 +CT = 4ECB1C57DE9E0651DDD008532A14BBDCB5DEF04CED7CADC2F4E94E8B16 + +Count = 433 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102 +CT = 2F3DB7FBC9AE4534AE7E404B1D5B5177163B39E53FF0D29A62564CAE19 + +Count = 434 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 00010203 +CT = 3584C9AD2246F947E4273B2F46806A38D45312A368250F16ACF31EBDDF + +Count = 435 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 0001020304 +CT = 773E574F331C0CBBE73F578FA19715341C801F09AF927BA47229D47C41 + +Count = 436 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405 +CT = 621A29CE689BE4C0569DEA816348189411095FFCD58174CC61550ABBAF + +Count = 437 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 00010203040506 +CT = 08D88D7AF56FF1C7605EB78B1B8606C467BAC8FC20A98D326B328F815F + +Count = 438 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 0001020304050607 +CT = 8F781CA96EE20153C7B7CB3EBE0252F33D6245866EC02A88856EEE45B2 + +Count = 439 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708 +CT = 8667DD61BD7495CD686F534237A1DE618982BEBB515807D61561D51028 + +Count = 440 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 00010203040506070809 +CT = A93E34AD2AE086DC387184CF0A2C1C126DBC57B9ECBC93DD985C8362E9 + +Count = 441 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A +CT = 92C1CE858D4B1B4FE678E72A11E9155FEFBC30978935783611DE8F13F6 + +Count = 442 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B +CT = CDA97645EA478DD39DA8E24673B7BA09E16FC35EB6E4D926DF5E1F0D58 + +Count = 443 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C +CT = 035AC9FAB8AE71BEBAF4E9D46E2E700BD35B914790E63AAB1E43B0137A + +Count = 444 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D +CT = 4366A97BE2169A1DB72EBBFED26A6CC442889BDD95615C44173B24915C + +Count = 445 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E +CT = BF6B2762EDD23F960150A8A63970C85A8E9E8908D927511FBA43866964 + +Count = 446 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F +CT = 613F1D7D1F412FC81FB748D210C49F5BEAC1C7A4B6D00C381A7ADEDCBB + +Count = 447 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F10 +CT = E5B7635DC5C9B08ADB2B695B0DCCA21335DA5C2C5D07723D476AF9F41E + +Count = 448 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = C41BD787A900C233AF283296EC330D904A6CFD1A78BE4688341BC7A69A + +Count = 449 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = D776039B908DCA18C7FC98E57C9DE606766A033DD67BE1E74237E71B8A + +Count = 450 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 7C4A269473191EC49043D5319C651812BB16F8D2CF56D1A478D067F121 + +Count = 451 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = F32BC6629AA488A08D97B1923D60F71B16E1539583A9E0C461B40D5BC6 + +Count = 452 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = C9A91727C48CDCD48D814B5550E6B4B9E34D812617E91B1D7CD01F1D97 + +Count = 453 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 7CABC253B23309CE6D8A9673F593D77CAC78ACBB3FA54042D71C4AC1E0 + +Count = 454 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 1D1126F217BD9FAB3AC203E407BD3B3B5637B6045728FF6CDD710CF750 + +Count = 455 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 335325BC9780BE380E71E18444DF640ED03B6DF416FDDF0784A5442964 + +Count = 456 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = C529176F4DF08520B4426101B8D734136D47E38B0686A67AB1A19EA027 + +Count = 457 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = CB112884F6782DA99E982AE3EE74EB661F8789002AD24404E3A7853198 + +Count = 458 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = F7C02BE5F4121324C5CCE07D8D5B2FD4FADD0DAE5E058FB2CCB537E917 + +Count = 459 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 9CAEEBA747C80218B01A1C88ED7039D69F2817F8E407D1D258DF6B1905 + +Count = 460 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = DE921A675DB6AE3BCCBA580856C44E35ED649D71A0169C5BAA3B121A07 + +Count = 461 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = EC143CB4F79B5B9683EA2BEDF09182DAFD7931709815E22E984D75077C + +Count = 462 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = FE7B33AA1A61119A2695E61DB764276177FFF7DF19CA70E187B2480481 + +Count = 463 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = +CT = CD26B03F5BADE92AABD726819B66F3C887FD93FAA44E84E8C8BBA4F7F97D + +Count = 464 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 00 +CT = C757CD64C8DB098A2795D989988A9AD7535FE2E5B653FF9B95A6EC2537B8 + +Count = 465 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 0001 +CT = 4ECB1C57DE9E0651DDD008532ABBCAED9F3704778729BAC4BE95E522BCEF + +Count = 466 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102 +CT = 2F3DB7FBC9AE4534AE7E404B1D0255E2AD17CFF23504FCD3A1C77067FA2A + +Count = 467 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 00010203 +CT = 3584C9AD2246F947E4273B2F46A325945CD9DB3993535E7368596AD6E597 + +Count = 468 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 0001020304 +CT = 773E574F331C0CBBE73F578FA158BB1298694E926988C28D00FEF1869DBB + +Count = 469 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405 +CT = 621A29CE689BE4C0569DEA816343F9CEF070230928E75EF78C1C6CC088F6 + +Count = 470 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 00010203040506 +CT = 08D88D7AF56FF1C7605EB78B1B6A44A52C59B5B93ABF8F3E939D87DE825E + +Count = 471 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 0001020304050607 +CT = 8F781CA96EE20153C7B7CB3EBE29091BEB2E3156135E492C41EF8AB57168 + +Count = 472 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708 +CT = 8667DD61BD7495CD686F5342375A110B514FBEC78072C52B766E115BCDFD + +Count = 473 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 00010203040506070809 +CT = A93E34AD2AE086DC387184CF0AA44D0060C4CC841A5E22535C6CB7B9DB94 + +Count = 474 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A +CT = 92C1CE858D4B1B4FE678E72A11A5B7AC2784A5606574C3C89018FDEC883F + +Count = 475 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B +CT = CDA97645EA478DD39DA8E24673AC97AE42ADBED5C5F44980AFA80945D37D + +Count = 476 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C +CT = 035AC9FAB8AE71BEBAF4E9D46EC225CCECDAD175B19F44851ED9DFC282A7 + +Count = 477 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D +CT = 4366A97BE2169A1DB72EBBFED2CF43010DA6A7653B7AF637F32A8B69F9C4 + +Count = 478 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E +CT = BF6B2762EDD23F960150A8A639BA253056DC294C1B37F0916035A9B984A6 + +Count = 479 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F +CT = 613F1D7D1F412FC81FB748D2105DAB7B70CD8E9375BB6244B26631F36B19 + +Count = 480 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F10 +CT = E5B7635DC5C9B08ADB2B695B0DEA51E16CC29266003735E9A315F54C9E8F + +Count = 481 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = C41BD787A900C233AF283296ECCBFFD4339D9B986C34DA884160784D3E2E + +Count = 482 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = D776039B908DCA18C7FC98E57C7C8FF1E00CD123CFF9A21402F49A50641A + +Count = 483 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 7C4A269473191EC49043D5319CA793918740DD26E4FE4ADC0F801582C341 + +Count = 484 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = F32BC6629AA488A08D97B1923D3C6E21A962AD2BA9085B0EA1DED5022CEA + +Count = 485 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = C9A91727C48CDCD48D814B55501C639A0B3EE0EE2549D7EB598C54F7C5C5 + +Count = 486 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 7CABC253B23309CE6D8A9673F5EE96087DAC4B87C513AA5A40B85A27C483 + +Count = 487 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 1D1126F217BD9FAB3AC203E407546281BF45E53C791D1B9752C381AD3A46 + +Count = 488 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 335325BC9780BE380E71E18444514D2E4D8935465D52FAD4ABFC5E13400F + +Count = 489 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = C529176F4DF08520B4426101B83766D9BFB9F011C34251654A78EA075D04 + +Count = 490 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = CB112884F6782DA99E982AE3EEFCC1596BA8D9EF2B076E61B3F994EC6B38 + +Count = 491 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = F7C02BE5F4121324C5CCE07D8DDE34AC3AA15D56E81CF7026631A2C2B458 + +Count = 492 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 9CAEEBA747C80218B01A1C88EDF4EF8EAD1F8939A39FC0257AE53F0FBCB3 + +Count = 493 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = DE921A675DB6AE3BCCBA58085690B1D14B405FBE97F8E8192D51F3365DFF + +Count = 494 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = EC143CB4F79B5B9683EA2BEDF02AAFA5EBEF38040528030FADEFC982A784 + +Count = 495 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = FE7B33AA1A61119A2695E61DB760D9F4C09C5E39DE50C21FDD161CAA903E + +Count = 496 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = +CT = CD26B03F5BADE92AABD726819B66D780F7E423479BA724B1EAEB14F2AD156D + +Count = 497 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 00 +CT = C757CD64C8DB098A2795D989988A9307EF2A669BEA1F72514B28D670A1A7DE + +Count = 498 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 0001 +CT = 4ECB1C57DE9E0651DDD008532ABB6023A4345479A8F88BA104DDC7634FD164 + +Count = 499 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102 +CT = 2F3DB7FBC9AE4534AE7E404B1D02EF520A724A9899F20F1F505D6C51FAE542 + +Count = 500 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 00010203 +CT = 3584C9AD2246F947E4273B2F46A35D7C8FB9EB7637200D35CB417A5F8813A1 + +Count = 501 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 0001020304 +CT = 773E574F331C0CBBE73F578FA1584D971C92FE507734BE609B5A663B432849 + +Count = 502 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405 +CT = 621A29CE689BE4C0569DEA816343CC2841F19E6CF040E0B12A08447FC94A22 + +Count = 503 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 00010203040506 +CT = 08D88D7AF56FF1C7605EB78B1B6ADDE70736F73FBDEE99B36A39973B35BEED + +Count = 504 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 0001020304050607 +CT = 8F781CA96EE20153C7B7CB3EBE2900B2DCE181ADAC9EEFF198EF415C6623F6 + +Count = 505 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708 +CT = 8667DD61BD7495CD686F5342375A30B09DCA693B9808A9DD9069FB72D42C5F + +Count = 506 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 00010203040506070809 +CT = A93E34AD2AE086DC387184CF0AA49CB458528D8B0BEDA2FF764C2D6F09C9FD + +Count = 507 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A +CT = 92C1CE858D4B1B4FE678E72A11A568D96E7F0F58116524FC6FDC206E868A8D + +Count = 508 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B +CT = CDA97645EA478DD39DA8E24673ACBA68792B15E4CD2A406427594C0D36F686 + +Count = 509 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C +CT = 035AC9FAB8AE71BEBAF4E9D46EC22B47A02DDABBEB238F560B9CBDA25FCBE3 + +Count = 510 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D +CT = 4366A97BE2169A1DB72EBBFED2CF5CB2FDBE8CE538B1504E066344DD7E639E + +Count = 511 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E +CT = BF6B2762EDD23F960150A8A639BA5ADCEA5F5C40DEE2528C72140C2C0CD875 + +Count = 512 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F +CT = 613F1D7D1F412FC81FB748D2105D8011D86FBF7B254D4A080506973699C18B + +Count = 513 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F10 +CT = E5B7635DC5C9B08ADB2B695B0DEA88C1818726005021AB2D525C12E0332B27 + +Count = 514 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = C41BD787A900C233AF283296ECCB2F590DE45780033E810EC90914E15A00A4 + +Count = 515 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = D776039B908DCA18C7FC98E57C7C23B4ED73ADBBA6A42CB022AD182322C0D7 + +Count = 516 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 7C4A269473191EC49043D5319CA782CD42120E341BEB25A748185C8E02A390 + +Count = 517 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = F32BC6629AA488A08D97B1923D3CAF7A626821D9EE864EE0B1550643BDE9F6 + +Count = 518 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = C9A91727C48CDCD48D814B55501C41B8E71D9E00FCCBD61E68F8B04AD540B2 + +Count = 519 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 7CABC253B23309CE6D8A9673F5EE2D2E0F3E4643A5A2E49DF450C29B5789AF + +Count = 520 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 1D1126F217BD9FAB3AC203E40754CC2ACDBD4721457B4167D229C6E9F0FD47 + +Count = 521 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 335325BC9780BE380E71E18444511AF43C4B844D3A7CD7B9E6894D1015F359 + +Count = 522 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = C529176F4DF08520B4426101B8376AF01DB7A3C367AF8ACCED3940E7ACF218 + +Count = 523 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = CB112884F6782DA99E982AE3EEFCF0D517CFAFE6F79175F508BC7262A63E41 + +Count = 524 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = F7C02BE5F4121324C5CCE07D8DDEF932D328A8EAED0468466543DE0F49FADB + +Count = 525 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 9CAEEBA747C80218B01A1C88EDF481F3957EC10B1A881512F19857B5EA811E + +Count = 526 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = DE921A675DB6AE3BCCBA5808569069A395F7E0622F39600A502F5924483611 + +Count = 527 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = EC143CB4F79B5B9683EA2BEDF02AF5CDAFCBE8D07FEB1C969DB705AFC57DD9 + +Count = 528 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = FE7B33AA1A61119A2695E61DB760AEB814F5E8445376A9C27A0785F132EA33 + +Count = 529 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = +CT = CD26B03F5BADE92AABD726819B66D78638EFE23A81CBD704F6E68A5A5D7718C0 + +Count = 530 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 00 +CT = C757CD64C8DB098A2795D989988A9359DF541D124360457DF8F2DECDF22E4140 + +Count = 531 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 0001 +CT = 4ECB1C57DE9E0651DDD008532ABB609765101CA493E446CE52D28A47D0909395 + +Count = 532 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102 +CT = 2F3DB7FBC9AE4534AE7E404B1D02EF4C9C47AC91109344E89C5222CA84F1F4D2 + +Count = 533 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 00010203 +CT = 3584C9AD2246F947E4273B2F46A35DFB57280D6BBB3CD906682A2BDC1E2B91E0 + +Count = 534 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 0001020304 +CT = 773E574F331C0CBBE73F578FA1584D6CECC64A59137C25CB2ADC90069D660541 + +Count = 535 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405 +CT = 621A29CE689BE4C0569DEA816343CCB1B4FD273DA53B27531D3BC7EACC1B6AD0 + +Count = 536 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 00010203040506 +CT = 08D88D7AF56FF1C7605EB78B1B6ADDFC5CCB3DA0429113F7A22279EA731CD4F5 + +Count = 537 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 0001020304050607 +CT = 8F781CA96EE20153C7B7CB3EBE29005E8B59F75C408DE28850EB5DED39BA1017 + +Count = 538 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708 +CT = 8667DD61BD7495CD686F5342375A307659C042BC74ED5DCC667EA48E9BE4D100 + +Count = 539 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 00010203040506070809 +CT = A93E34AD2AE086DC387184CF0AA49C64B86AD5C7E28E5B202C32DD69C72E48D7 + +Count = 540 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A +CT = 92C1CE858D4B1B4FE678E72A11A568B6BCE4A18CA9F0847ED61E8312AEAC3197 + +Count = 541 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B +CT = CDA97645EA478DD39DA8E24673ACBA9624090E5D9D0F4A031D903539C6CAF3AA + +Count = 542 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C +CT = 035AC9FAB8AE71BEBAF4E9D46EC22B73FF9E57A2BE040A72FC9B7FD3FF04705E + +Count = 543 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D +CT = 4366A97BE2169A1DB72EBBFED2CF5C7724A70E588BD7416FA3084B670D563690 + +Count = 544 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E +CT = BF6B2762EDD23F960150A8A639BA5AEF9884EF4CDF400717FC2B7D6CA81FE6A4 + +Count = 545 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F +CT = 613F1D7D1F412FC81FB748D2105D80F443686E8870A701BBC65E33CD3E2F80DB + +Count = 546 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F10 +CT = E5B7635DC5C9B08ADB2B695B0DEA8859C6FBFA3787A8CE0BED2609CB89FFA4FD + +Count = 547 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = C41BD787A900C233AF283296ECCB2F057F5ECA469518EEF6EFA00691828740B8 + +Count = 548 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = D776039B908DCA18C7FC98E57C7C23F10549A52356F3E40CCE675E1546E4D394 + +Count = 549 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 7C4A269473191EC49043D5319CA782FF1B9B84EF38518A0682AF5E7AEA39C673 + +Count = 550 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = F32BC6629AA488A08D97B1923D3CAF14A3D3578A148B444BB3CEE3DECF9185D1 + +Count = 551 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = C9A91727C48CDCD48D814B55501C41581D2501B9998455560EDB1F3C96218B7A + +Count = 552 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 7CABC253B23309CE6D8A9673F5EE2D7A8A276721E8EC16A72654677B0E696881 + +Count = 553 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 1D1126F217BD9FAB3AC203E40754CC3B793DDD4C2D86F9BC9BFB0E86F63BE3ED + +Count = 554 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 335325BC9780BE380E71E18444511AE81F02580EB79CB903DB10D8C2B691FE77 + +Count = 555 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = C529176F4DF08520B4426101B8376A74B7B598DC97E0183102A76152EE1FBB14 + +Count = 556 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = CB112884F6782DA99E982AE3EEFCF0786D50E44EE559535C2E3A153E67170EAA + +Count = 557 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = F7C02BE5F4121324C5CCE07D8DDEF97D3443B18AE534B41B8492FF1DFDCADCF3 + +Count = 558 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 9CAEEBA747C80218B01A1C88EDF481A6FB0AEDF8B03DC8D9D7FDB6202ED9C4B6 + +Count = 559 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = DE921A675DB6AE3BCCBA5808569069A970A1BADE31E0E50E71118EFD2A6C8744 + +Count = 560 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = EC143CB4F79B5B9683EA2BEDF02AF5A28DA298C05E310D0DCE4F2F7796985221 + +Count = 561 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = FE7B33AA1A61119A2695E61DB760AE91DB6259217B099778D17C3061F1018870 + +Count = 562 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = +CT = CD26B03F5BADE92AABD726819B66D78615AF06142FCD92C69329BACDDD9C1822C2 + +Count = 563 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 00 +CT = C757CD64C8DB098A2795D989988A9359F0AC3E4E12574F0084C57B710E021CD609 + +Count = 564 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 0001 +CT = 4ECB1C57DE9E0651DDD008532ABB60971A34EC51979DAF010473EE6485B3B9AEEE + +Count = 565 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102 +CT = 2F3DB7FBC9AE4534AE7E404B1D02EF4C3828D756D117A2FB0BE7111A9EC447E6AD + +Count = 566 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 00010203 +CT = 3584C9AD2246F947E4273B2F46A35DFB7586CD600EF3CFD0E113D507EA88BD817E + +Count = 567 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 0001020304 +CT = 773E574F331C0CBBE73F578FA1584D6C5AB837E5BD99A922F061160517B0A19DB4 + +Count = 568 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405 +CT = 621A29CE689BE4C0569DEA816343CCB11EBDDF2492543F8C2A29EA8E63593E36DF + +Count = 569 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 00010203040506 +CT = 08D88D7AF56FF1C7605EB78B1B6ADDFCA7B902BD96046EEB858C72AE11A07EB1CA + +Count = 570 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 0001020304050607 +CT = 8F781CA96EE20153C7B7CB3EBE29005E1E9C27CA5944D60C8DA1EA2C5532EA3586 + +Count = 571 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708 +CT = 8667DD61BD7495CD686F5342375A3076810D74A9FD80BA97FE757D3B96FB29AB3D + +Count = 572 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 00010203040506070809 +CT = A93E34AD2AE086DC387184CF0AA49C64D267413F2AAE53E22DC70AB2E5FD10947F + +Count = 573 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A +CT = 92C1CE858D4B1B4FE678E72A11A568B61A91AE8657DAA24217DF25A0FD8A525177 + +Count = 574 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B +CT = CDA97645EA478DD39DA8E24673ACBA9654723C45A6B709C92C5B7ABB6313FF4674 + +Count = 575 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C +CT = 035AC9FAB8AE71BEBAF4E9D46EC22B73613AEC0D466218892E88097F3A2961617A + +Count = 576 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D +CT = 4366A97BE2169A1DB72EBBFED2CF5C7783CF79B4327EEC6C3AB4213604D2EB4788 + +Count = 577 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E +CT = BF6B2762EDD23F960150A8A639BA5AEF9A7E8A48A477B19B1447FFA22920E98799 + +Count = 578 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F +CT = 613F1D7D1F412FC81FB748D2105D80F4A3BD925D1D87E01D2D1443FB2DFBFF9DD4 + +Count = 579 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = E5B7635DC5C9B08ADB2B695B0DEA8859044CDC91C87E031C834C06EBB79ECB8DE1 + +Count = 580 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = C41BD787A900C233AF283296ECCB2F05D55FC8D4C17421015DE878F336FC8FF0C6 + +Count = 581 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = D776039B908DCA18C7FC98E57C7C23F183453BDB62D2088D980B184EA5415B008F + +Count = 582 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 7C4A269473191EC49043D5319CA782FF60B6A004099AD53359079BFB7CA5265C25 + +Count = 583 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = F32BC6629AA488A08D97B1923D3CAF14F2E33A9D17599CEA4F64480CFCDF9C4E96 + +Count = 584 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = C9A91727C48CDCD48D814B55501C4158606674844996A3C5C53B948C1B67069C20 + +Count = 585 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 7CABC253B23309CE6D8A9673F5EE2D7A1E54521645E92822E54616EB05E0C7EF37 + +Count = 586 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 1D1126F217BD9FAB3AC203E40754CC3B70AE7C7FDF1848D59F0E679CD17E61B7BD + +Count = 587 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 335325BC9780BE380E71E18444511AE80B89B57D6B86F0C2CF526041DE22AC673C + +Count = 588 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = C529176F4DF08520B4426101B8376A746E7930D769E211E957EB2856B74E7F4D3F + +Count = 589 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = CB112884F6782DA99E982AE3EEFCF07877349CEC8B58CAC2AFDEF64560E5DBE764 + +Count = 590 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = F7C02BE5F4121324C5CCE07D8DDEF97D60A63571FA8F7755AAD6D44A196983A6AE + +Count = 591 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 9CAEEBA747C80218B01A1C88EDF481A6C97F22EC8220991CD7F4B36985B122B6B5 + +Count = 592 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = DE921A675DB6AE3BCCBA5808569069A9B2710C8C7ADA1C8016F2F6D29FBB811048 + +Count = 593 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = EC143CB4F79B5B9683EA2BEDF02AF5A21681116EFB9D5417EC96DD08556A479467 + +Count = 594 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = FE7B33AA1A61119A2695E61DB760AE912439E0A3F896170FE789DD077081C65BE5 + +Count = 595 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = +CT = CD26B03F5BADE92AABD726819B66D7861544095C2AFF3D42550E7B15C2DA472DA637 + +Count = 596 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 00 +CT = C757CD64C8DB098A2795D989988A9359F0415E6F9D522FACA651518B5BCA1646A264 + +Count = 597 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 0001 +CT = 4ECB1C57DE9E0651DDD008532ABB60971A2F4A3569A9DAB7E41248F3E0DE97FA127C + +Count = 598 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102 +CT = 2F3DB7FBC9AE4534AE7E404B1D02EF4C3835D8239D3C2DD00F5201CFFEA3A852B2B0 + +Count = 599 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 00010203 +CT = 3584C9AD2246F947E4273B2F46A35DFB752036BBBAA660078D4C96DA3C12B5DE1086 + +Count = 600 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 0001020304 +CT = 773E574F331C0CBBE73F578FA1584D6C5AABB3B87AAA69B81C71304C2732A0A2BA1F + +Count = 601 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405 +CT = 621A29CE689BE4C0569DEA816343CCB11EE54BA079F5E864C491E2F51C7E58F9CF07 + +Count = 602 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 00010203040506 +CT = 08D88D7AF56FF1C7605EB78B1B6ADDFCA7176E30378FB68F2A145A73D30651006DA0 + +Count = 603 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 0001020304050607 +CT = 8F781CA96EE20153C7B7CB3EBE29005E1E74DE2DA0EA946C3CF41F9498F029F56358 + +Count = 604 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708 +CT = 8667DD61BD7495CD686F5342375A307681887E061CCB8C7DAFC8361BD09A879E3333 + +Count = 605 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 00010203040506070809 +CT = A93E34AD2AE086DC387184CF0AA49C64D21FC48DBA19CE11B26493CE837339B4499F + +Count = 606 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A +CT = 92C1CE858D4B1B4FE678E72A11A568B61A041FA02990E473EDE8192C262C9458786A + +Count = 607 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B +CT = CDA97645EA478DD39DA8E24673ACBA9654081062AF102545E27454E4AA27AD41ECFA + +Count = 608 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C +CT = 035AC9FAB8AE71BEBAF4E9D46EC22B73613C74B95A2590B0AD2CE2FCEC6B211175A3 + +Count = 609 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D +CT = 4366A97BE2169A1DB72EBBFED2CF5C77832369EE2F3EF90969D666E825354F3F2985 + +Count = 610 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E +CT = BF6B2762EDD23F960150A8A639BA5AEF9A1936FABCA82B6DBBC16FBAA7B3C00F9185 + +Count = 611 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F +CT = 613F1D7D1F412FC81FB748D2105D80F4A3E70AA04BF2882A90253E7A20F15CEF77D7 + +Count = 612 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = E5B7635DC5C9B08ADB2B695B0DEA885904FB09276C05FF4C29461D19F061EEFF6FC9 + +Count = 613 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = C41BD787A900C233AF283296ECCB2F05D5D1EFAA4315B0AB25AF695ADF223C5C7A01 + +Count = 614 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = D776039B908DCA18C7FC98E57C7C23F183529BFA90B9DBC6D9D9C2CE7CDC1CE5FEF0 + +Count = 615 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 7C4A269473191EC49043D5319CA782FF60BE524D174627AF314E7CE44E8232D827CC + +Count = 616 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = F32BC6629AA488A08D97B1923D3CAF14F275C624AFC3679D547D7DC985636ECE08A2 + +Count = 617 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = C9A91727C48CDCD48D814B55501C4158607FD8346DDED26BA47BFD6C5154221C04FD + +Count = 618 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 7CABC253B23309CE6D8A9673F5EE2D7A1E4473D65472379A70D6477BCE9EF8F4FA35 + +Count = 619 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 1D1126F217BD9FAB3AC203E40754CC3B7007E9445DE805738A21DEB2196BF02624BC + +Count = 620 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 335325BC9780BE380E71E18444511AE80BE91D222DC25BA9A82ED6A3AC66032DA736 + +Count = 621 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = C529176F4DF08520B4426101B8376A746E03DB2FD92AE556B5D37B84F4C42F39650F + +Count = 622 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = CB112884F6782DA99E982AE3EEFCF0787701AFBFFDEABD945082FA780EC904ED929B + +Count = 623 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = F7C02BE5F4121324C5CCE07D8DDEF97D60AD1064253F17ED066ED4A18DD19DD773E9 + +Count = 624 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 9CAEEBA747C80218B01A1C88EDF481A6C904EF848582E091005EE1789CD822E8C210 + +Count = 625 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = DE921A675DB6AE3BCCBA5808569069A9B266D778408C6CB492279377E2D96CE28A84 + +Count = 626 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = EC143CB4F79B5B9683EA2BEDF02AF5A21673516393C7256F6328883D4B3B5CEF405C + +Count = 627 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = FE7B33AA1A61119A2695E61DB760AE9124B3FD9DC0262AE0796BF243A11F0B6EF250 + +Count = 628 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = +CT = CD26B03F5BADE92AABD726819B66D78615446250547AC63BF115AB9B79A014E8A93F83 + +Count = 629 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 00 +CT = C757CD64C8DB098A2795D989988A9359F041D1CD5B775BE18A8ECB47AD4600ED44AF7D + +Count = 630 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 0001 +CT = 4ECB1C57DE9E0651DDD008532ABB60971A2F4ABE822CD6A2BAEF2206AF5084FB6EF553 + +Count = 631 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102 +CT = 2F3DB7FBC9AE4534AE7E404B1D02EF4C383537452913D240502FB45466A3EC1AF1A75F + +Count = 632 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 00010203 +CT = 3584C9AD2246F947E4273B2F46A35DFB7520B8598D0164AD5755755771EEF734A157EA + +Count = 633 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 0001020304 +CT = 773E574F331C0CBBE73F578FA1584D6C5AAB103CC099D7D0553820EDDBF8AA1715DCA5 + +Count = 634 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405 +CT = 621A29CE689BE4C0569DEA816343CCB11EE59ABBDD85B57C0762EF2D985C31C92D28E8 + +Count = 635 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 00010203040506 +CT = 08D88D7AF56FF1C7605EB78B1B6ADDFCA717B181AC196A009A9B986474F8908FE0A217 + +Count = 636 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 0001020304050607 +CT = 8F781CA96EE20153C7B7CB3EBE29005E1E746906F176350AAAAEB0230FF67AB0DFED6C + +Count = 637 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708 +CT = 8667DD61BD7495CD686F5342375A3076818814DBFDBB91476B7883A0519150AF03A0F1 + +Count = 638 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 00010203040506070809 +CT = A93E34AD2AE086DC387184CF0AA49C64D21F2BB7D78C3E95C621C4D2451C707DE2936C + +Count = 639 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A +CT = 92C1CE858D4B1B4FE678E72A11A568B61A04FE2C23C7FE16B599107D0CC52EE86F65C0 + +Count = 640 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B +CT = CDA97645EA478DD39DA8E24673ACBA9654086F7806007C1BED9356A378492121D13B95 + +Count = 641 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C +CT = 035AC9FAB8AE71BEBAF4E9D46EC22B73613C42966C0824714688AA152D4B1E7FE9FDE2 + +Count = 642 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D +CT = 4366A97BE2169A1DB72EBBFED2CF5C77832353B7E90D799AE2DE0ECDA95F57CE3C604D + +Count = 643 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E +CT = BF6B2762EDD23F960150A8A639BA5AEF9A19BD30EF00F68BC6BC46C3AC2F721560C29C + +Count = 644 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F +CT = 613F1D7D1F412FC81FB748D2105D80F4A3E735F124A85FBB65A246B9FEC7C9055863B5 + +Count = 645 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = E5B7635DC5C9B08ADB2B695B0DEA885904FB66384E0B8D75BF4EF8119249CF938F19F7 + +Count = 646 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = C41BD787A900C233AF283296ECCB2F05D5D15A6F5581CE9E9DA5F44D6522ED3F816F7D + +Count = 647 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = D776039B908DCA18C7FC98E57C7C23F18352B703ED6E3D956D12FBE9428F9A3D7FCB45 + +Count = 648 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 7C4A269473191EC49043D5319CA782FF60BE82C286EEF74C61561C29C26018ECD9C3F8 + +Count = 649 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = F32BC6629AA488A08D97B1923D3CAF14F2754034C6D8B8306B7A186B513654F9444FCC + +Count = 650 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = C9A91727C48CDCD48D814B55501C4158607F1EB057041DFC73545BF702D38DEA5FE325 + +Count = 651 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 7CABC253B23309CE6D8A9673F5EE2D7A1E448797F142E81035FAB0A7392491B4509633 + +Count = 652 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 1D1126F217BD9FAB3AC203E40754CC3B7007BA32FD4A8F2C1960D3B357BFA1C49B2673 + +Count = 653 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 335325BC9780BE380E71E18444511AE80BE94AAEC3769F02E1758B6DC700A682E3DDBA + +Count = 654 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = C529176F4DF08520B4426101B8376A746E036A89C67B9BDC57C3F493D870EEC688BAEB + +Count = 655 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = CB112884F6782DA99E982AE3EEFCF0787701D83A70194C23B61AA6D16252B6928F3BC8 + +Count = 656 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = F7C02BE5F4121324C5CCE07D8DDEF97D60AD78DAE8CBBD36924671B8F2974DD35B98B6 + +Count = 657 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 9CAEEBA747C80218B01A1C88EDF481A6C904FBF825D71D3BCB01E5DC0CA50EDAA07369 + +Count = 658 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = DE921A675DB6AE3BCCBA5808569069A9B26685DBA40198554CA9D0D8D9B40165503108 + +Count = 659 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = EC143CB4F79B5B9683EA2BEDF02AF5A216735E41CF4C89F2E1B71D6B53CA696BDFEF5C + +Count = 660 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = FE7B33AA1A61119A2695E61DB760AE9124B314AA0826FD9B61F8884BB010BE5B69BBEF + +Count = 661 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = +CT = CD26B03F5BADE92AABD726819B66D78615446231424906E3FD2093F81837B5EF22B34382 + +Count = 662 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 00 +CT = C757CD64C8DB098A2795D989988A9359F041D1CBAFAF22202EF79BE1D8BBDAD17C27F3B0 + +Count = 663 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 0001 +CT = 4ECB1C57DE9E0651DDD008532ABB60971A2F4A38405129B244CAFBD6FAC8EE23152E3454 + +Count = 664 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102 +CT = 2F3DB7FBC9AE4534AE7E404B1D02EF4C383537DF38C2D7DC5593FD09A69BA47D5647FAB3 + +Count = 665 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 00010203 +CT = 3584C9AD2246F947E4273B2F46A35DFB7520B88C39553114613295A85AF3B5C14616FD71 + +Count = 666 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 0001020304 +CT = 773E574F331C0CBBE73F578FA1584D6C5AAB10EE5FEB770D2081629FDD327248A3CC202E + +Count = 667 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405 +CT = 621A29CE689BE4C0569DEA816343CCB11EE59A756BB6B36E6776CB0289381923D4562E31 + +Count = 668 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 00010203040506 +CT = 08D88D7AF56FF1C7605EB78B1B6ADDFCA717B1EB151C2C7897DE15D7BFB0606AC886F90D + +Count = 669 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 0001020304050607 +CT = 8F781CA96EE20153C7B7CB3EBE29005E1E7469EA06661E06BC3B082B8210F1CA372C5FEA + +Count = 670 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708 +CT = 8667DD61BD7495CD686F5342375A3076818814455575E782154B738AE332539B063A333B + +Count = 671 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 00010203040506070809 +CT = A93E34AD2AE086DC387184CF0AA49C64D21F2B03E8E270B556F2720DC1AE6DD77A947ACF + +Count = 672 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A +CT = 92C1CE858D4B1B4FE678E72A11A568B61A04FE4D3C6F09ABA3FC02EC49D64530BB0E9E2E + +Count = 673 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B +CT = CDA97645EA478DD39DA8E24673ACBA9654086FED1DF1017343F3585AF8108D70AC7F1E1C + +Count = 674 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C +CT = 035AC9FAB8AE71BEBAF4E9D46EC22B73613C42DF226734DBE71A299A6F09F4E4A139E552 + +Count = 675 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D +CT = 4366A97BE2169A1DB72EBBFED2CF5C778323534A4707A6288495D1A38EB099DDA4A9DD37 + +Count = 676 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E +CT = BF6B2762EDD23F960150A8A639BA5AEF9A19BD60C2E7388005C81B9B1B6E874DCE128806 + +Count = 677 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F +CT = 613F1D7D1F412FC81FB748D2105D80F4A3E7351D381ACF5DA4D2E28641485C37A72BEB9C + +Count = 678 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = E5B7635DC5C9B08ADB2B695B0DEA885904FB661CEB14954DA36FADC421257618271C29C1 + +Count = 679 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = C41BD787A900C233AF283296ECCB2F05D5D15A83CD2A5A4754707122EC86B1A519DB4C60 + +Count = 680 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = D776039B908DCA18C7FC98E57C7C23F18352B79030C12C4F4AF81CBF25487CA30F649DD4 + +Count = 681 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 7C4A269473191EC49043D5319CA782FF60BE828EBABBA9888FA09E9C2C61815BE7C09320 + +Count = 682 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = F32BC6629AA488A08D97B1923D3CAF14F27540EC215C2A2296E04E917B116E5D1BED63D6 + +Count = 683 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = C9A91727C48CDCD48D814B55501C4158607F1EAFE2A41D40A7DD3ECD7F7DDA956E8830C4 + +Count = 684 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 7CABC253B23309CE6D8A9673F5EE2D7A1E4487E107D36CFE48F18931A4E48B86EF2CD0E9 + +Count = 685 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 1D1126F217BD9FAB3AC203E40754CC3B7007BAD1FF238B593D6904789D8BC0DB88209ED9 + +Count = 686 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 335325BC9780BE380E71E18444511AE80BE94A809D69B21374B1FABB7EE7D779905AFA60 + +Count = 687 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = C529176F4DF08520B4426101B8376A746E036A2D0E726948C1293A895001CE34337EBBA4 + +Count = 688 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = CB112884F6782DA99E982AE3EEFCF0787701D882A5B977C8E53F756AF51E31ED60AD78BB + +Count = 689 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = F7C02BE5F4121324C5CCE07D8DDEF97D60AD78F212E0517851F247D9541B6279125614CC + +Count = 690 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 9CAEEBA747C80218B01A1C88EDF481A6C904FB10D11CD8BF2E0ADBFB59050834ED5E5801 + +Count = 691 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = DE921A675DB6AE3BCCBA5808569069A9B26685C75F6DD312FDBE41AD6F569962D39579D3 + +Count = 692 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = EC143CB4F79B5B9683EA2BEDF02AF5A216735EDA823339473FC201BA4AAA6F768B6E26D2 + +Count = 693 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = FE7B33AA1A61119A2695E61DB760AE9124B3149405D9CF052BEF6BF0D9EC0F9FF828424C + +Count = 694 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = +CT = CD26B03F5BADE92AABD726819B66D78615446231102F4EBED3C142E2B73E0B2DE5BE8C6E5B + +Count = 695 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 00 +CT = C757CD64C8DB098A2795D989988A9359F041D1CB98F01D54A621CF589B8655A93624F4D72A + +Count = 696 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 0001 +CT = 4ECB1C57DE9E0651DDD008532ABB60971A2F4A382EB067580EBEB42F9DE4F87A2485E983D1 + +Count = 697 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102 +CT = 2F3DB7FBC9AE4534AE7E404B1D02EF4C383537DF95F10CB74980084C7B2860724BB7EE7EFB + +Count = 698 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 00010203 +CT = 3584C9AD2246F947E4273B2F46A35DFB7520B88C9F5FB5071635B51BEFAF1D18B0B1688E14 + +Count = 699 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 0001020304 +CT = 773E574F331C0CBBE73F578FA1584D6C5AAB10EEBD13D411B37ADDBACAEF4825747E76EECB + +Count = 700 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405 +CT = 621A29CE689BE4C0569DEA816343CCB11EE59A75779E399024A1F366EB8BAB037F2A6B5CFB + +Count = 701 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 00010203040506 +CT = 08D88D7AF56FF1C7605EB78B1B6ADDFCA717B1EB5F00E1CAB5FF18FC65BE772569F7AB8EB5 + +Count = 702 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 0001020304050607 +CT = 8F781CA96EE20153C7B7CB3EBE29005E1E7469EA49AEA73D8A626F0649CE683E0214D7FBB7 + +Count = 703 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708 +CT = 8667DD61BD7495CD686F5342375A3076818814456CF91010F6190DDA92A9ED6952102C86A3 + +Count = 704 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 00010203040506070809 +CT = A93E34AD2AE086DC387184CF0AA49C64D21F2B038D29E1B24150E93B4C9BADC5ABA2A399FB + +Count = 705 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A +CT = 92C1CE858D4B1B4FE678E72A11A568B61A04FE4DD16BB0729B97DCC57E72B58EE182185B09 + +Count = 706 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B +CT = CDA97645EA478DD39DA8E24673ACBA9654086FEDCB45172E9C3DFAFAC71985BC872D762D2F + +Count = 707 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C +CT = 035AC9FAB8AE71BEBAF4E9D46EC22B73613C42DFDD091980665541867C90E7E00FA58D9608 + +Count = 708 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D +CT = 4366A97BE2169A1DB72EBBFED2CF5C778323534AD28C1F1EAAB5FF0463F36A726F72CB55E6 + +Count = 709 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E +CT = BF6B2762EDD23F960150A8A639BA5AEF9A19BD609970D48626B2092713D0FD6675B7761B34 + +Count = 710 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F +CT = 613F1D7D1F412FC81FB748D2105D80F4A3E7351DEF4388BFB3144A72237440612AE0C97176 + +Count = 711 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = E5B7635DC5C9B08ADB2B695B0DEA885904FB661C8BE8E83B99E1F1C807C38BE5BDE9BE7BBB + +Count = 712 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = C41BD787A900C233AF283296ECCB2F05D5D15A8311C79517752685354E4C322A8829221FF9 + +Count = 713 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = D776039B908DCA18C7FC98E57C7C23F18352B790A202DD82C1D4EAAD69FB5DCDF568DDD437 + +Count = 714 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 7C4A269473191EC49043D5319CA782FF60BE828E81D4C0889760E82826F94914B0106A4F92 + +Count = 715 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = F32BC6629AA488A08D97B1923D3CAF14F27540EC4217AF4F766EFEABA991FF622FBCCD4ACD + +Count = 716 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = C9A91727C48CDCD48D814B55501C4158607F1EAFDCA1DD5C4AB824F51BB59FA9BE2454403B + +Count = 717 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 7CABC253B23309CE6D8A9673F5EE2D7A1E4487E19FA373B3018F3606F373D6A8046C60F0D9 + +Count = 718 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 1D1126F217BD9FAB3AC203E40754CC3B7007BAD16E11B255113B2379D03B5387DFB2CAB948 + +Count = 719 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 335325BC9780BE380E71E18444511AE80BE94A80F32F5417B837EBA858DCB7E4BFAD022FAB + +Count = 720 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = C529176F4DF08520B4426101B8376A746E036A2D74E1879E3D09061297832A8FC4B2CB005D + +Count = 721 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = CB112884F6782DA99E982AE3EEFCF0787701D8825E78D272E535EDFB5D237F8376A696C070 + +Count = 722 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = F7C02BE5F4121324C5CCE07D8DDEF97D60AD78F2075C56DCD924036011577B690A295FB856 + +Count = 723 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 9CAEEBA747C80218B01A1C88EDF481A6C904FB10881D59F681A6979D3D756E97A21B38B74B + +Count = 724 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = DE921A675DB6AE3BCCBA5808569069A9B26685C7FC5E6D25023F27738CA01954D50F7D7A1A + +Count = 725 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = EC143CB4F79B5B9683EA2BEDF02AF5A216735EDAE6B95FC7CF1F06EB3ABC7E459354A1847E + +Count = 726 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = FE7B33AA1A61119A2695E61DB760AE9124B31494FF91D28BAAACC5E2CA3BF6B9465E2EA3BF + +Count = 727 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = +CT = CD26B03F5BADE92AABD726819B66D7861544623110122200AC743BD187B981F85BB2429ED3A6 + +Count = 728 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 00 +CT = C757CD64C8DB098A2795D989988A9359F041D1CB98B896D98DED674E409647E0D210ED16D80B + +Count = 729 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 0001 +CT = 4ECB1C57DE9E0651DDD008532ABB60971A2F4A382EDDF0FF8ADE2EB7A9B10F09692BEA14AD80 + +Count = 730 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102 +CT = 2F3DB7FBC9AE4534AE7E404B1D02EF4C383537DF95C443132F9C7EEA0D164AD6FFA2CF5455C0 + +Count = 731 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 00010203 +CT = 3584C9AD2246F947E4273B2F46A35DFB7520B88C9F095E9C47DE07AA7DE295B083624401BC71 + +Count = 732 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 0001020304 +CT = 773E574F331C0CBBE73F578FA1584D6C5AAB10EEBD1EA0176834FB4AE582397ECBDB0425D01E + +Count = 733 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405 +CT = 621A29CE689BE4C0569DEA816343CCB11EE59A75776E4C1F4788649D0E382ED7457A863968B2 + +Count = 734 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 00010203040506 +CT = 08D88D7AF56FF1C7605EB78B1B6ADDFCA717B1EB5F606D912A92D98C6D62BC8B6EF50A2315C4 + +Count = 735 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 0001020304050607 +CT = 8F781CA96EE20153C7B7CB3EBE29005E1E7469EA497C297A159CFFED681BF6FF0BD2CBED8337 + +Count = 736 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708 +CT = 8667DD61BD7495CD686F5342375A3076818814456C909DB2CA092568733746134F2AC0895CEA + +Count = 737 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 00010203040506070809 +CT = A93E34AD2AE086DC387184CF0AA49C64D21F2B038D04697FFFD13F38ED048568B1F9F3953CD3 + +Count = 738 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A +CT = 92C1CE858D4B1B4FE678E72A11A568B61A04FE4DD18C285CF37AA1AAB86D4A0B8358DE7AC0A4 + +Count = 739 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B +CT = CDA97645EA478DD39DA8E24673ACBA9654086FEDCB336B7707341FB8F785FDDF30FBB0651CC7 + +Count = 740 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C +CT = 035AC9FAB8AE71BEBAF4E9D46EC22B73613C42DFDDC4F2E2698975C9E40FC5A448E083BB82FF + +Count = 741 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D +CT = 4366A97BE2169A1DB72EBBFED2CF5C778323534AD21A4E5B63DC34970A96CBFBAC457A9DFE4C + +Count = 742 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E +CT = BF6B2762EDD23F960150A8A639BA5AEF9A19BD609950A7E8D7833FF931D17176CF772461EEB7 + +Count = 743 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F +CT = 613F1D7D1F412FC81FB748D2105D80F4A3E7351DEF6A313012B0E91B306B97B5FA110AD3A2B7 + +Count = 744 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = E5B7635DC5C9B08ADB2B695B0DEA885904FB661C8B36F8D09DD856497137580A53FFD8E8AA5A + +Count = 745 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = C41BD787A900C233AF283296ECCB2F05D5D15A83115A2792DB39BF110767F204B7D2BB932F09 + +Count = 746 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = D776039B908DCA18C7FC98E57C7C23F18352B790A21FE86D385466C2673B4F3BEC1585DE94C4 + +Count = 747 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 7C4A269473191EC49043D5319CA782FF60BE828E81F4F3914BFB06ABA502E65389D1FCA07E08 + +Count = 748 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = F32BC6629AA488A08D97B1923D3CAF14F27540EC425848D7A4999877044FB4845CC87EB8CA78 + +Count = 749 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = C9A91727C48CDCD48D814B55501C4158607F1EAFDC6B2D5891E1C515C52E41902964D13571CB + +Count = 750 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 7CABC253B23309CE6D8A9673F5EE2D7A1E4487E19FAA7E938F71755FD46E16CA4813FE49ED26 + +Count = 751 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 1D1126F217BD9FAB3AC203E40754CC3B7007BAD16E5A1CDB0F2332FDEEBBA1BBFBA8AE36B68D + +Count = 752 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 335325BC9780BE380E71E18444511AE80BE94A80F3DA455DF36BF82A2845F81CB66B1469DD1F + +Count = 753 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = C529176F4DF08520B4426101B8376A746E036A2D74379F00823C3FEBA1937D700912CBD1CB7A + +Count = 754 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = CB112884F6782DA99E982AE3EEFCF0787701D8825E2303C75953D71C66851797146474A16FB8 + +Count = 755 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = F7C02BE5F4121324C5CCE07D8DDEF97D60AD78F2075B8231C54EC75E2A607B198A5337B160DA + +Count = 756 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 9CAEEBA747C80218B01A1C88EDF481A6C904FB1088250BF7C0F57192989BC989D6702BE802F5 + +Count = 757 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = DE921A675DB6AE3BCCBA5808569069A9B26685C7FC6DAF86355FF6C7D68180A3FA6B50E43120 + +Count = 758 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = EC143CB4F79B5B9683EA2BEDF02AF5A216735EDAE68A6CB39C2F218772C6653255F23D72C2E6 + +Count = 759 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = FE7B33AA1A61119A2695E61DB760AE9124B31494FF735B350E9032C1F3ED5EC408F0C011B221 + +Count = 760 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = +CT = CD26B03F5BADE92AABD726819B66D78615446231101221EF965AE843F3E5683D051AE3D8BEB2F7 + +Count = 761 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 00 +CT = C757CD64C8DB098A2795D989988A9359F041D1CB98B8CC4BF49C18ACD3225D48EBC804301C8C94 + +Count = 762 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 0001 +CT = 4ECB1C57DE9E0651DDD008532ABB60971A2F4A382EDD51E71270DB3640C8F971AEF253E07048F2 + +Count = 763 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102 +CT = 2F3DB7FBC9AE4534AE7E404B1D02EF4C383537DF95C4C4E7FF83F4DD262711BE7454804BA8DD6F + +Count = 764 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 00010203 +CT = 3584C9AD2246F947E4273B2F46A35DFB7520B88C9F09EFCACBF5EE57B3E6B1DC9B5AE60A086CEF + +Count = 765 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 0001020304 +CT = 773E574F331C0CBBE73F578FA1584D6C5AAB10EEBD1E18286358471CFC2B1BD80C955176BA50F8 + +Count = 766 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405 +CT = 621A29CE689BE4C0569DEA816343CCB11EE59A75776E6DA202D50E6352A530A68FDA264C5BA08C + +Count = 767 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 00010203040506 +CT = 08D88D7AF56FF1C7605EB78B1B6ADDFCA717B1EB5F600A64C2292BB08A9F0F755CE13E48C2C0EB + +Count = 768 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 0001020304050607 +CT = 8F781CA96EE20153C7B7CB3EBE29005E1E7469EA497C2DC564D379A68968E0BC73C47F0DFA816F + +Count = 769 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708 +CT = 8667DD61BD7495CD686F5342375A3076818814456C90E796EBD73B7CB2771BAAF863B3006B276B + +Count = 770 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 00010203040506070809 +CT = A93E34AD2AE086DC387184CF0AA49C64D21F2B038D0402CCCC7F46663FCF7A2EC57AA0204EB259 + +Count = 771 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A +CT = 92C1CE858D4B1B4FE678E72A11A568B61A04FE4DD18C0D83694865F75876403B991EC49FE44368 + +Count = 772 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B +CT = CDA97645EA478DD39DA8E24673ACBA9654086FEDCB339B7F0151F3ACE4AA5B1CB0C40CFCE8DF48 + +Count = 773 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C +CT = 035AC9FAB8AE71BEBAF4E9D46EC22B73613C42DFDDC4AC6A2AC63772622F2FE9C8FEF0A0C35FBE + +Count = 774 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D +CT = 4366A97BE2169A1DB72EBBFED2CF5C778323534AD21ACBC372845864130B6AFCB42B3CA0A69B67 + +Count = 775 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E +CT = BF6B2762EDD23F960150A8A639BA5AEF9A19BD609950BB02B0922E09BFF6BC031C2A5147CF100C + +Count = 776 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F +CT = 613F1D7D1F412FC81FB748D2105D80F4A3E7351DEF6A0916481F477086B1FDB2226FA4D7324842 + +Count = 777 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = E5B7635DC5C9B08ADB2B695B0DEA885904FB661C8B3616894D01BBA776E04533540F4DDD45667A + +Count = 778 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = C41BD787A900C233AF283296ECCB2F05D5D15A83115A88EE759A74DF7131395A278E81FCC811E3 + +Count = 779 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = D776039B908DCA18C7FC98E57C7C23F18352B790A21FB0745B6E32670B0CF50EC27A90CE73193C + +Count = 780 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 7C4A269473191EC49043D5319CA782FF60BE828E81F4E40FCB12EB1F49F6D28329E8205954C643 + +Count = 781 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = F32BC6629AA488A08D97B1923D3CAF14F27540EC42582AEFFA408905292E9AEEEBD58C2C024F45 + +Count = 782 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = C9A91727C48CDCD48D814B55501C4158607F1EAFDC6B5E84C0EFC35185CDBA714BFCC6BB16F66C + +Count = 783 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 7CABC253B23309CE6D8A9673F5EE2D7A1E4487E19FAAB6A0D9EB0F4511A6F1B05BB7033B65DE88 + +Count = 784 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 1D1126F217BD9FAB3AC203E40754CC3B7007BAD16E5A3FE417F252597CEB060D39B10AAD8661AF + +Count = 785 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 335325BC9780BE380E71E18444511AE80BE94A80F3DAD1D2DA2E3AE4C944C5D2E428FB30CD1006 + +Count = 786 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = C529176F4DF08520B4426101B8376A746E036A2D743718ADFEE3A2C2C8CD9F996AC1396DEBD103 + +Count = 787 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = CB112884F6782DA99E982AE3EEFCF0787701D8825E2346BDAD0089EBF04324EBEAA860AA26FA49 + +Count = 788 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = F7C02BE5F4121324C5CCE07D8DDEF97D60AD78F2075BBAC59C71C1E862276755619058D6433F2B + +Count = 789 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 9CAEEBA747C80218B01A1C88EDF481A6C904FB1088254302568A729D061394EC806E0CC7BD7634 + +Count = 790 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = DE921A675DB6AE3BCCBA5808569069A9B26685C7FC6D4D8ACAF0A341D41C98DC70D90B44F4994F + +Count = 791 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = EC143CB4F79B5B9683EA2BEDF02AF5A216735EDAE68A9BDA1E2DF61456301F46A93D4AA5E18AFA + +Count = 792 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = FE7B33AA1A61119A2695E61DB760AE9124B31494FF7363F1644EF6730A69116FAD2F7D3BF59993 + +Count = 793 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = +CT = CD26B03F5BADE92AABD726819B66D78615446231101221B46FB569D14EF65617E0421A458EB939DC + +Count = 794 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 00 +CT = C757CD64C8DB098A2795D989988A9359F041D1CB98B8CC2E917EB647959B5E2BD86B2A4085B36200 + +Count = 795 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 0001 +CT = 4ECB1C57DE9E0651DDD008532ABB60971A2F4A382EDD51C8FD3261C813B57E832FD18556718A4DC3 + +Count = 796 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102 +CT = 2F3DB7FBC9AE4534AE7E404B1D02EF4C383537DF95C4C479637EBDAD9BB1331ECC8CB8902E57F96C + +Count = 797 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 00010203 +CT = 3584C9AD2246F947E4273B2F46A35DFB7520B88C9F09EF505833673423C038C7463638A8724BADDE + +Count = 798 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 0001020304 +CT = 773E574F331C0CBBE73F578FA1584D6C5AAB10EEBD1E18FA5EB19FFCD6F71DC3FD8FD0ADC9611BB5 + +Count = 799 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405 +CT = 621A29CE689BE4C0569DEA816343CCB11EE59A75776E6D58D9B0C88C1811B6BCC35D652E83764696 + +Count = 800 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 00010203040506 +CT = 08D88D7AF56FF1C7605EB78B1B6ADDFCA717B1EB5F600ABDD848B3142768683D68D8CBC5640E5BC3 + +Count = 801 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 0001020304050607 +CT = 8F781CA96EE20153C7B7CB3EBE29005E1E7469EA497C2DA46A8DD592E9FC9078E0A72A5C6B157A89 + +Count = 802 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708 +CT = 8667DD61BD7495CD686F5342375A3076818814456C90E7FC2A9626AC463E747322E4188892198B14 + +Count = 803 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 00010203040506070809 +CT = A93E34AD2AE086DC387184CF0AA49C64D21F2B038D0402BAEA8BBEB37D3C62121359B73007E11493 + +Count = 804 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A +CT = 92C1CE858D4B1B4FE678E72A11A568B61A04FE4DD18C0D755BA00924DF8FA763F3E1EA79BCC19619 + +Count = 805 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B +CT = CDA97645EA478DD39DA8E24673ACBA9654086FEDCB339B2A8952837AE29734DD908DDA9BB513919D + +Count = 806 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C +CT = 035AC9FAB8AE71BEBAF4E9D46EC22B73613C42DFDDC4AC522A1EB9C179B15ADE0D8441ACA44CCFCA + +Count = 807 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D +CT = 4366A97BE2169A1DB72EBBFED2CF5C778323534AD21ACB6CC36395AE43189AF4906F9191610A0D88 + +Count = 808 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E +CT = BF6B2762EDD23F960150A8A639BA5AEF9A19BD609950BBDA5AE9B93BC8C04DE74EB86C82F208E5FB + +Count = 809 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F +CT = 613F1D7D1F412FC81FB748D2105D80F4A3E7351DEF6A09A72F147FF50186ACC2BEDFCC2E96BF1FF4 + +Count = 810 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = E5B7635DC5C9B08ADB2B695B0DEA885904FB661C8B3616BBB171168084078AC0F52B981A4E322A86 + +Count = 811 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = C41BD787A900C233AF283296ECCB2F05D5D15A83115A882979037B2655CF1EA2C49BAE8DB3AA00DA + +Count = 812 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = D776039B908DCA18C7FC98E57C7C23F18352B790A21FB07E2269ACD878DC35EBA44AF24D4C736443 + +Count = 813 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 7C4A269473191EC49043D5319CA782FF60BE828E81F4E4ED8F018BB2CB0BF3317B7E8AB39A2283EA + +Count = 814 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = F32BC6629AA488A08D97B1923D3CAF14F27540EC42582A9D18F3591F6C6CFF3A0D149B9C1492A08B + +Count = 815 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = C9A91727C48CDCD48D814B55501C4158607F1EAFDC6B5EC278AEF917D3EDB550FE0015F11360997D + +Count = 816 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 7CABC253B23309CE6D8A9673F5EE2D7A1E4487E19FAAB674DBD9C89843399912B3823EB1E1037A57 + +Count = 817 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 1D1126F217BD9FAB3AC203E40754CC3B7007BAD16E5A3F5588031BE6CE6D7079B53F106298216A46 + +Count = 818 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 335325BC9780BE380E71E18444511AE80BE94A80F3DAD16BE3F4B607638271FBE4B1CC484C11CF64 + +Count = 819 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = C529176F4DF08520B4426101B8376A746E036A2D74371859026C084443D58750B6DD77CF4419645C + +Count = 820 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = CB112884F6782DA99E982AE3EEFCF0787701D8825E234655E9CF559BC04741A058369C61622AF5A7 + +Count = 821 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = F7C02BE5F4121324C5CCE07D8DDEF97D60AD78F2075BBA977E624E749FBB700EA209C99F85339FA3 + +Count = 822 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 9CAEEBA747C80218B01A1C88EDF481A6C904FB10882543C7C1CEC828EEAD80FDA43DB9D6D8BC9CD6 + +Count = 823 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = DE921A675DB6AE3BCCBA5808569069A9B26685C7FC6D4DB3CCAFF84537A4CD51F183C1982C4B4E0E + +Count = 824 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = EC143CB4F79B5B9683EA2BEDF02AF5A216735EDAE68A9BB12AAC5A7EE10369BC366A7CCD5B54798A + +Count = 825 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = FE7B33AA1A61119A2695E61DB760AE9124B31494FF7363AC7EC5679CECF49A4C761F9BF4FB21CABE + +Count = 826 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = +CT = CD26B03F5BADE92AABD726819B66D78615446231101221B459E8A5D846627E8E948F6E3D26C18B58F2 + +Count = 827 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 00 +CT = C757CD64C8DB098A2795D989988A9359F041D1CB98B8CC2E49533234A596E02E0EA4AE41CBBC65FD50 + +Count = 828 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 0001 +CT = 4ECB1C57DE9E0651DDD008532ABB60971A2F4A382EDD51C8F73F6A689D8E7F970AA99885B4BF149A1E + +Count = 829 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102 +CT = 2F3DB7FBC9AE4534AE7E404B1D02EF4C383537DF95C4C479E3AED55940AAC78BA1A96FFE54F5A86603 + +Count = 830 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 00010203 +CT = 3584C9AD2246F947E4273B2F46A35DFB7520B88C9F09EF50BD561D20175775905C332C667D753AD699 + +Count = 831 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 0001020304 +CT = 773E574F331C0CBBE73F578FA1584D6C5AAB10EEBD1E18FAE23A1A54FAC24A2E5211CFBA80678326C5 + +Count = 832 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405 +CT = 621A29CE689BE4C0569DEA816343CCB11EE59A75776E6D587453D3ACC263A02FF1ECFEE1E6FEB08852 + +Count = 833 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 00010203040506 +CT = 08D88D7AF56FF1C7605EB78B1B6ADDFCA717B1EB5F600ABD32C7C02E09B7CB6043D3B7BE7B53757357 + +Count = 834 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 0001020304050607 +CT = 8F781CA96EE20153C7B7CB3EBE29005E1E7469EA497C2DA4A6CD5E4A1512CDD3B1E680689E6D5B5304 + +Count = 835 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708 +CT = 8667DD61BD7495CD686F5342375A3076818814456C90E7FCD7D81A74D109FA8B68EF13A2FA97C19A00 + +Count = 836 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 00010203040506070809 +CT = A93E34AD2AE086DC387184CF0AA49C64D21F2B038D0402BA532E14A705AAE6A03234FF80626901FD8D + +Count = 837 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A +CT = 92C1CE858D4B1B4FE678E72A11A568B61A04FE4DD18C0D75966F6743F145FECF633DE6FD9FD3D07857 + +Count = 838 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B +CT = CDA97645EA478DD39DA8E24673ACBA9654086FEDCB339B2A537A335946CEE8280DAEC6A4ED691FC79B + +Count = 839 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C +CT = 035AC9FAB8AE71BEBAF4E9D46EC22B73613C42DFDDC4AC5229B7176FDB92B4A4161F1CC4C9935679BD + +Count = 840 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D +CT = 4366A97BE2169A1DB72EBBFED2CF5C778323534AD21ACB6C961F3F2AB0CDE0364246FF9C2FF5659232 + +Count = 841 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E +CT = BF6B2762EDD23F960150A8A639BA5AEF9A19BD609950BBDA937D3B6E00408E2258AA5100E0A751311F + +Count = 842 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F +CT = 613F1D7D1F412FC81FB748D2105D80F4A3E7351DEF6A09A701C7C653F5D6C9818FD7A410E467867D64 + +Count = 843 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = E5B7635DC5C9B08ADB2B695B0DEA885904FB661C8B3616BB54951C350F7EABC9E6B0998AE634DE22E8 + +Count = 844 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = C41BD787A900C233AF283296ECCB2F05D5D15A83115A8829101DD9583C4E3C639D904247C495462813 + +Count = 845 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = D776039B908DCA18C7FC98E57C7C23F18352B790A21FB07E8252C6162969F30E9779D229655211474D + +Count = 846 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 7C4A269473191EC49043D5319CA782FF60BE828E81F4E4ED792715D04320AD39F840B1B53C3FC4FEC3 + +Count = 847 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = F32BC6629AA488A08D97B1923D3CAF14F27540EC42582A9DC2391D4F169FB13BB06B2E8ECBFC515470 + +Count = 848 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = C9A91727C48CDCD48D814B55501C4158607F1EAFDC6B5EC2FB769FD31356F3D45DD1948A1D8C65FED4 + +Count = 849 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 7CABC253B23309CE6D8A9673F5EE2D7A1E4487E19FAAB674806A3DC7D6E08986AE9E5FB2AF590F8AC8 + +Count = 850 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 1D1126F217BD9FAB3AC203E40754CC3B7007BAD16E5A3F55975A11070CB6CBF69E287B0DCC7BCD186E + +Count = 851 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 335325BC9780BE380E71E18444511AE80BE94A80F3DAD16BB41B0623D3D22208FC0A04E6EC777F3F6A + +Count = 852 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = C529176F4DF08520B4426101B8376A746E036A2D743718591920E3B5587CFCB149856E87866101ECCB + +Count = 853 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = CB112884F6782DA99E982AE3EEFCF0787701D8825E234655914719271E3C73A5366C9D59876D7390E9 + +Count = 854 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = F7C02BE5F4121324C5CCE07D8DDEF97D60AD78F2075BBA97443ED1A405FDF5A48DF0E12DC06D9AB3F6 + +Count = 855 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 9CAEEBA747C80218B01A1C88EDF481A6C904FB10882543C7E42DA84B7CE4ED5D9BDD953AEDD1879BC5 + +Count = 856 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = DE921A675DB6AE3BCCBA5808569069A9B26685C7FC6D4DB3CEFC3602E64EAC3944467D6D1A13C713F6 + +Count = 857 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = EC143CB4F79B5B9683EA2BEDF02AF5A216735EDAE68A9BB1C7FC41B8F3EEEA7D95E57F0EE864741AF6 + +Count = 858 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = FE7B33AA1A61119A2695E61DB760AE9124B31494FF7363AC0766EBA01878E3BBE046DC818A31E021AA + +Count = 859 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = +CT = CD26B03F5BADE92AABD726819B66D78615446231101221B459FD3EC44A81219FC478FAE0315CC1D0B453 + +Count = 860 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 00 +CT = C757CD64C8DB098A2795D989988A9359F041D1CB98B8CC2E4997F3FEFDF09D471E4B87AA20AE5BB8BCB9 + +Count = 861 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 0001 +CT = 4ECB1C57DE9E0651DDD008532ABB60971A2F4A382EDD51C8F795A305C3E82A21D93C966C67D492F9137E + +Count = 862 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102 +CT = 2F3DB7FBC9AE4534AE7E404B1D02EF4C383537DF95C4C479E3CDC7F64E577093318AB4536AB8B789EDD7 + +Count = 863 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 00010203 +CT = 3584C9AD2246F947E4273B2F46A35DFB7520B88C9F09EF50BD7720E3BA76A368A5175FD24EDF109C5C5B + +Count = 864 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 0001020304 +CT = 773E574F331C0CBBE73F578FA1584D6C5AAB10EEBD1E18FAE2A5EAC6FD6FC09B803E7A40048A9A7C4453 + +Count = 865 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405 +CT = 621A29CE689BE4C0569DEA816343CCB11EE59A75776E6D587441C442370E34878C09E9A0DC2529A85B01 + +Count = 866 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 00010203040506 +CT = 08D88D7AF56FF1C7605EB78B1B6ADDFCA717B1EB5F600ABD32DC1AEEBC7F44941BC2A0E7B8003DC213B4 + +Count = 867 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 0001020304050607 +CT = 8F781CA96EE20153C7B7CB3EBE29005E1E7469EA497C2DA4A6C004EB9F0105830AE825BC01741DEDDECE + +Count = 868 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708 +CT = 8667DD61BD7495CD686F5342375A3076818814456C90E7FCD7550C01E898C5997D1E09040BDE3B248B7E + +Count = 869 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 00010203040506070809 +CT = A93E34AD2AE086DC387184CF0AA49C64D21F2B038D0402BA537847486BB6B2E58264F853EA181750F125 + +Count = 870 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A +CT = 92C1CE858D4B1B4FE678E72A11A568B61A04FE4DD18C0D75960164E03EF2686B0F48586F4BE2F9FAB76F + +Count = 871 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B +CT = CDA97645EA478DD39DA8E24673ACBA9654086FEDCB339B2A53AEA676F0331BA87899AC946BFF7825A6C6 + +Count = 872 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C +CT = 035AC9FAB8AE71BEBAF4E9D46EC22B73613C42DFDDC4AC5229E03DC7F7D66F2566049901010EE964DD66 + +Count = 873 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D +CT = 4366A97BE2169A1DB72EBBFED2CF5C778323534AD21ACB6C9665FBD0F78AC71FB01389E520EAD4C33A36 + +Count = 874 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E +CT = BF6B2762EDD23F960150A8A639BA5AEF9A19BD609950BBDA93EAF39C2A4C85FB53DC7665CA25E43484A0 + +Count = 875 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F +CT = 613F1D7D1F412FC81FB748D2105D80F4A3E7351DEF6A09A701CD9A6DB98C7DD16C2AC95AEA6138A4FA4A + +Count = 876 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = E5B7635DC5C9B08ADB2B695B0DEA885904FB661C8B3616BB549EF47AF7C5146FE25D990F46CAAC93F840 + +Count = 877 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = C41BD787A900C233AF283296ECCB2F05D5D15A83115A882910BF515277F5C7EAB0E7BDEB6EF3E7228E84 + +Count = 878 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = D776039B908DCA18C7FC98E57C7C23F18352B790A21FB07E82B3FFB5F42E2DCE810BF05BB0EBA88B1BCC + +Count = 879 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 7C4A269473191EC49043D5319CA782FF60BE828E81F4E4ED79DBEEFD7F7EC169427AD2B699966DEDE8E3 + +Count = 880 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = F32BC6629AA488A08D97B1923D3CAF14F27540EC42582A9DC2F1B63CC7F161D76AA537D518D17BA2A061 + +Count = 881 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = C9A91727C48CDCD48D814B55501C4158607F1EAFDC6B5EC2FBB2ECB17CF11E32C765D1DE0EA8FEA43309 + +Count = 882 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 7CABC253B23309CE6D8A9673F5EE2D7A1E4487E19FAAB6748054766ABDF8A1EB82392F8F4FFF015F05C6 + +Count = 883 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 1D1126F217BD9FAB3AC203E40754CC3B7007BAD16E5A3F5597118F496630031C39C15BCFC5A5BB4EE2BF + +Count = 884 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 335325BC9780BE380E71E18444511AE80BE94A80F3DAD16BB4CA0530542DC4F7C8A199215CBA2BD43AF2 + +Count = 885 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = C529176F4DF08520B4426101B8376A746E036A2D74371859195FE263A307521BE1D9FC69A08E69B36BCA + +Count = 886 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = CB112884F6782DA99E982AE3EEFCF0787701D8825E234655911D843806389CA0EB72576301683D58F85C + +Count = 887 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = F7C02BE5F4121324C5CCE07D8DDEF97D60AD78F2075BBA9744DC1949014D229B51B2AE3A47565F8D109F + +Count = 888 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 9CAEEBA747C80218B01A1C88EDF481A6C904FB10882543C7E49ADF497CD5487ADC3E37A191D332CAC465 + +Count = 889 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = DE921A675DB6AE3BCCBA5808569069A9B26685C7FC6D4DB3CEF8ED2CE068D11E1A6DF2F62320C426FDD2 + +Count = 890 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = EC143CB4F79B5B9683EA2BEDF02AF5A216735EDAE68A9BB1C737FCBB8A52398132188C5CE889B4333352 + +Count = 891 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = FE7B33AA1A61119A2695E61DB760AE9124B31494FF7363AC07B6D0C60A5186D0DDF0E77A2892FC34CE65 + +Count = 892 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = +CT = CD26B03F5BADE92AABD726819B66D78615446231101221B459FDEC269C316E6B41621B2EE31F1C8573C2DD + +Count = 893 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 00 +CT = C757CD64C8DB098A2795D989988A9359F041D1CB98B8CC2E4997AF57FE423983FD788B3873FC53E0CEE087 + +Count = 894 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 0001 +CT = 4ECB1C57DE9E0651DDD008532ABB60971A2F4A382EDD51C8F79590278DEA08CE4DDD36FB383042C3E1C3A4 + +Count = 895 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102 +CT = 2F3DB7FBC9AE4534AE7E404B1D02EF4C383537DF95C4C479E3CD25A08F6B136CA4CEF10063B303F0B14F2B + +Count = 896 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 00010203 +CT = 3584C9AD2246F947E4273B2F46A35DFB7520B88C9F09EF50BD7746E4F45479831E98BFC19DC58A06C2A772 + +Count = 897 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 0001020304 +CT = 773E574F331C0CBBE73F578FA1584D6C5AAB10EEBD1E18FAE2A510EF41C0982BC7DE848D0AF093037F975B + +Count = 898 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405 +CT = 621A29CE689BE4C0569DEA816343CCB11EE59A75776E6D587441E51848B20F490B042F5E6F0BCAE4C17EDC + +Count = 899 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 00010203040506 +CT = 08D88D7AF56FF1C7605EB78B1B6ADDFCA717B1EB5F600ABD32DC9626EC4A8840373CF199C17C170545DD03 + +Count = 900 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 0001020304050607 +CT = 8F781CA96EE20153C7B7CB3EBE29005E1E7469EA497C2DA4A6C0529E380FDCFC1E2568AA9DA25C46AC7C9E + +Count = 901 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708 +CT = 8667DD61BD7495CD686F5342375A3076818814456C90E7FCD7555A53D4061504C9E3EDD82C6FE514F7A0F7 + +Count = 902 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 00010203040506070809 +CT = A93E34AD2AE086DC387184CF0AA49C64D21F2B038D0402BA53783B056DF5220B4E4825982C39AA0EEDB480 + +Count = 903 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A +CT = 92C1CE858D4B1B4FE678E72A11A568B61A04FE4DD18C0D759601A213DB2456F31E8B340D8225B79772FEEB + +Count = 904 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B +CT = CDA97645EA478DD39DA8E24673ACBA9654086FEDCB339B2A53AE80097B4AD8D1E1665241671E87C73A1391 + +Count = 905 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C +CT = 035AC9FAB8AE71BEBAF4E9D46EC22B73613C42DFDDC4AC5229E0E71EB5A585F6694AFD212056C20C785894 + +Count = 906 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D +CT = 4366A97BE2169A1DB72EBBFED2CF5C778323534AD21ACB6C9665A61FBC29177915D20A1958E1A858C93F60 + +Count = 907 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E +CT = BF6B2762EDD23F960150A8A639BA5AEF9A19BD609950BBDA93EA884C7306627FDE26E0B6F0EDDD463A6E44 + +Count = 908 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F +CT = 613F1D7D1F412FC81FB748D2105D80F4A3E7351DEF6A09A701CDCFA35EAB5397839C18DD1ACDF92C56540E + +Count = 909 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F10 +CT = E5B7635DC5C9B08ADB2B695B0DEA885904FB661C8B3616BB549E247831B736F27F10371F152D7693CED30E + +Count = 910 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = C41BD787A900C233AF283296ECCB2F05D5D15A83115A882910BFD81B6EB643A4BC38E696404E3CC38777F3 + +Count = 911 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = D776039B908DCA18C7FC98E57C7C23F18352B790A21FB07E82B382DC0A9FD2199B5375EAC4735351BCE4CA + +Count = 912 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 7C4A269473191EC49043D5319CA782FF60BE828E81F4E4ED79DB1E1BFFF5188C0C39565FAC6CBFC9387B5F + +Count = 913 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = F32BC6629AA488A08D97B1923D3CAF14F27540EC42582A9DC2F1E8E02CBDBA63B2CAB5A9CA076911722B78 + +Count = 914 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = C9A91727C48CDCD48D814B55501C4158607F1EAFDC6B5EC2FBB281FA611F42ECACACE37FB84BC2E5BA7C63 + +Count = 915 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 7CABC253B23309CE6D8A9673F5EE2D7A1E4487E19FAAB67480547F93A13E482E8EB8F8CE364ADB5A1BB439 + +Count = 916 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 1D1126F217BD9FAB3AC203E40754CC3B7007BAD16E5A3F559711975FB173FE25AF18F218B0A1BE699000CE + +Count = 917 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 335325BC9780BE380E71E18444511AE80BE94A80F3DAD16BB4CA9CCA14CB2858CB4C75E3139D9343E399A9 + +Count = 918 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = C529176F4DF08520B4426101B8376A746E036A2D74371859195F27C83D98C0EF64B0A2DBB5794B2D906835 + +Count = 919 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = CB112884F6782DA99E982AE3EEFCF0787701D8825E234655911D09EF8CF492F611D5E38BFDF4E416FD327A + +Count = 920 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = F7C02BE5F4121324C5CCE07D8DDEF97D60AD78F2075BBA9744DC2288787AAEE3F9F139247D233CF553F40A + +Count = 921 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 9CAEEBA747C80218B01A1C88EDF481A6C904FB10882543C7E49A4C25FDE37565CBF0A1688982B4795061CE + +Count = 922 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = DE921A675DB6AE3BCCBA5808569069A9B26685C7FC6D4DB3CEF8FAB51F4E093D881D6E8DC52515ED585A31 + +Count = 923 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = EC143CB4F79B5B9683EA2BEDF02AF5A216735EDAE68A9BB1C737C670B94A3644E4D3EA21910C7ED8FA783B + +Count = 924 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = FE7B33AA1A61119A2695E61DB760AE9124B31494FF7363AC07B663CDA82FDEDF537BB68536A0A9A00AE202 + +Count = 925 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = +CT = CD26B03F5BADE92AABD726819B66D78615446231101221B459FDEC4973AC63A53CFCDEF8E10CE42950916870 + +Count = 926 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 00 +CT = C757CD64C8DB098A2795D989988A9359F041D1CB98B8CC2E4997AF95CB37CBB188CD63A2BE3B82503F866022 + +Count = 927 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 0001 +CT = 4ECB1C57DE9E0651DDD008532ABB60971A2F4A382EDD51C8F795902DEB8B701405D0FDE08105B26031E538F8 + +Count = 928 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102 +CT = 2F3DB7FBC9AE4534AE7E404B1D02EF4C383537DF95C4C479E3CD25275685CB78FB992CE1BC948BCBE9D8A45D + +Count = 929 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 00010203 +CT = 3584C9AD2246F947E4273B2F46A35DFB7520B88C9F09EF50BD77462DECD267D6AD451A243D2A675DE3A03349 + +Count = 930 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 0001020304 +CT = 773E574F331C0CBBE73F578FA1584D6C5AAB10EEBD1E18FAE2A510CA2F9B160AB5A13F241C68A66022B61589 + +Count = 931 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405 +CT = 621A29CE689BE4C0569DEA816343CCB11EE59A75776E6D587441E56035BB88F155C57355213C21F1EE46A5CF + +Count = 932 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 00010203040506 +CT = 08D88D7AF56FF1C7605EB78B1B6ADDFCA717B1EB5F600ABD32DC96E01CF239A2D65EF50C465A27D59121E34A + +Count = 933 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 0001020304050607 +CT = 8F781CA96EE20153C7B7CB3EBE29005E1E7469EA497C2DA4A6C052BAB4DDBA1040CD0394D6CD6E073EB7B139 + +Count = 934 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708 +CT = 8667DD61BD7495CD686F5342375A3076818814456C90E7FCD7555AE560556D32814ADB2E5E55532180591F3E + +Count = 935 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 00010203040506070809 +CT = A93E34AD2AE086DC387184CF0AA49C64D21F2B038D0402BA53783B4E9A0D709E2EF80D5779677FC307BAE3A4 + +Count = 936 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A +CT = 92C1CE858D4B1B4FE678E72A11A568B61A04FE4DD18C0D759601A2B7DD0534437CFB0484C246691DCAD0573E + +Count = 937 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B +CT = CDA97645EA478DD39DA8E24673ACBA9654086FEDCB339B2A53AE80F2F077D855D1AEB97AB04E957246A942D0 + +Count = 938 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C +CT = 035AC9FAB8AE71BEBAF4E9D46EC22B73613C42DFDDC4AC5229E0E76C77C7E38A7261B2427AAFA0D26C5F5915 + +Count = 939 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D +CT = 4366A97BE2169A1DB72EBBFED2CF5C778323534AD21ACB6C9665A651C38D8AE4C3A157DEC290A4F11488A949 + +Count = 940 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E +CT = BF6B2762EDD23F960150A8A639BA5AEF9A19BD609950BBDA93EA883C80ABAEFB8767A41B293DA2D1F6870BD3 + +Count = 941 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F +CT = 613F1D7D1F412FC81FB748D2105D80F4A3E7351DEF6A09A701CDCFE3A96C8ECF7E8C47E79E6F573F21EA5C9E + +Count = 942 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F10 +CT = E5B7635DC5C9B08ADB2B695B0DEA885904FB661C8B3616BB549E24AEE5BB07945B3FB6E9B0795DD6612F9D09 + +Count = 943 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = C41BD787A900C233AF283296ECCB2F05D5D15A83115A882910BFD878D3E05432CA657033EF7404FA18785C15 + +Count = 944 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = D776039B908DCA18C7FC98E57C7C23F18352B790A21FB07E82B3821F287B8467FB35F9269D3C1C6F8905F75C + +Count = 945 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 7C4A269473191EC49043D5319CA782FF60BE828E81F4E4ED79DB1E0F47F6B769405C208EC33EEC67F0AE97FE + +Count = 946 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = F32BC6629AA488A08D97B1923D3CAF14F27540EC42582A9DC2F1E8EC4F8AD3C58AFD799FB45EF74823B28710 + +Count = 947 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = C9A91727C48CDCD48D814B55501C4158607F1EAFDC6B5EC2FBB281DBE8EF987D223FDE43D8C212B5D9ACC841 + +Count = 948 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 7CABC253B23309CE6D8A9673F5EE2D7A1E4487E19FAAB67480547FBCB33364453390E0C1BCCDD49676737D00 + +Count = 949 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 1D1126F217BD9FAB3AC203E40754CC3B7007BAD16E5A3F55971197C9A4BEDF0F8C6B4ABC71668C954E9F023D + +Count = 950 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 335325BC9780BE380E71E18444511AE80BE94A80F3DAD16BB4CA9C2813A4C220BC3D37346D36826A7ACCA602 + +Count = 951 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = C529176F4DF08520B4426101B8376A746E036A2D74371859195F271C8B75C0D43F277A3B14D93760D5071329 + +Count = 952 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = CB112884F6782DA99E982AE3EEFCF0787701D8825E234655911D09B0B77F6102F988B07412D0BCB487406FFC + +Count = 953 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = F7C02BE5F4121324C5CCE07D8DDEF97D60AD78F2075BBA9744DC221485B5BB6A9545AD000F7BEE7540038922 + +Count = 954 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 9CAEEBA747C80218B01A1C88EDF481A6C904FB10882543C7E49A4C77AE6B63CDAF8162765C2376BF768850A8 + +Count = 955 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = DE921A675DB6AE3BCCBA5808569069A9B26685C7FC6D4DB3CEF8FA4E94FCC8249BDDD2670EC764805043D36F + +Count = 956 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = EC143CB4F79B5B9683EA2BEDF02AF5A216735EDAE68A9BB1C737C64D293A461085A3B67222CFCD34A00BF501 + +Count = 957 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = FE7B33AA1A61119A2695E61DB760AE9124B31494FF7363AC07B66322D68A2724146F1FC13728D9BAED4AF0F0 + +Count = 958 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = +CT = CD26B03F5BADE92AABD726819B66D78615446231101221B459FDEC49ACB44889748941BCE24364BC6E56F6882A + +Count = 959 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 00 +CT = C757CD64C8DB098A2795D989988A9359F041D1CB98B8CC2E4997AF954E790945E40B432D01763E01ACD477B1E5 + +Count = 960 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 0001 +CT = 4ECB1C57DE9E0651DDD008532ABB60971A2F4A382EDD51C8F795902DEB11E72F07BA4645FA4E4B5BF8146B2BBC + +Count = 961 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102 +CT = 2F3DB7FBC9AE4534AE7E404B1D02EF4C383537DF95C4C479E3CD252739CAE0BF03D6E18D2326F23B51C105F20C + +Count = 962 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 00010203 +CT = 3584C9AD2246F947E4273B2F46A35DFB7520B88C9F09EF50BD77462DEE413C6B29AC7B5D09620152E1F42D9DC6 + +Count = 963 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 0001020304 +CT = 773E574F331C0CBBE73F578FA1584D6C5AAB10EEBD1E18FAE2A510CAFE74382637BA999AF737AFE96FD7B4C043 + +Count = 964 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405 +CT = 621A29CE689BE4C0569DEA816343CCB11EE59A75776E6D587441E5607D8C000B2F8D8B4D33EE2B9F4A54187F80 + +Count = 965 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 00010203040506 +CT = 08D88D7AF56FF1C7605EB78B1B6ADDFCA717B1EB5F600ABD32DC96E0A3EC1499ABECF968407BF0FDE9F2B9C628 + +Count = 966 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 0001020304050607 +CT = 8F781CA96EE20153C7B7CB3EBE29005E1E7469EA497C2DA4A6C052BA2B1089E4E8F8BA31A9BC1166C3ECFF968F + +Count = 967 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708 +CT = 8667DD61BD7495CD686F5342375A3076818814456C90E7FCD7555AE5B674C917A4358E10D4410ACA43183CF078 + +Count = 968 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 00010203040506070809 +CT = A93E34AD2AE086DC387184CF0AA49C64D21F2B038D0402BA53783B4E97B50632F27A0A033EA91455AC2B4C7311 + +Count = 969 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A +CT = 92C1CE858D4B1B4FE678E72A11A568B61A04FE4DD18C0D759601A2B794338D66859F1BCF829E4F1C0F47AB12D1 + +Count = 970 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B +CT = CDA97645EA478DD39DA8E24673ACBA9654086FEDCB339B2A53AE80F21BDBBD15548D54EB4A57A0A470286A43C3 + +Count = 971 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C +CT = 035AC9FAB8AE71BEBAF4E9D46EC22B73613C42DFDDC4AC5229E0E76CBDABAAD9EA6A669F6CCF454841DECB8637 + +Count = 972 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D +CT = 4366A97BE2169A1DB72EBBFED2CF5C778323534AD21ACB6C9665A6519053FF2094C4DEE36A43AE9230DDBA6F44 + +Count = 973 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E +CT = BF6B2762EDD23F960150A8A639BA5AEF9A19BD609950BBDA93EA883C12F6836119F70206B93400CF8DC14A24CD + +Count = 974 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F +CT = 613F1D7D1F412FC81FB748D2105D80F4A3E7351DEF6A09A701CDCFE30A85C47EF77D44B3BF1B4D2322502B8A8D + +Count = 975 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F10 +CT = E5B7635DC5C9B08ADB2B695B0DEA885904FB661C8B3616BB549E24AE4793E0E3CE4618B80D28E095E2FF10FFE1 + +Count = 976 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = C41BD787A900C233AF283296ECCB2F05D5D15A83115A882910BFD878E7DAC3DD4CBC71CFA8107C4218CDE07D00 + +Count = 977 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = D776039B908DCA18C7FC98E57C7C23F18352B790A21FB07E82B3821F2410BC271C107606D1F05B7B4F43DD9545 + +Count = 978 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 7C4A269473191EC49043D5319CA782FF60BE828E81F4E4ED79DB1E0F912B1A8826204C3854D243FDD5D597582C + +Count = 979 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = F32BC6629AA488A08D97B1923D3CAF14F27540EC42582A9DC2F1E8ECB039FB51578C7EE72DE626E47192D64404 + +Count = 980 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = C9A91727C48CDCD48D814B55501C4158607F1EAFDC6B5EC2FBB281DB96001D92E16957F232D9F9695C55865766 + +Count = 981 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 7CABC253B23309CE6D8A9673F5EE2D7A1E4487E19FAAB67480547FBCACDCB1BB8E7C312D666736D6CCA92CF7F5 + +Count = 982 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 1D1126F217BD9FAB3AC203E40754CC3B7007BAD16E5A3F55971197C9354F707BD12ADD5917FD8B43EA9F9D6519 + +Count = 983 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 335325BC9780BE380E71E18444511AE80BE94A80F3DAD16BB4CA9C286FA5B12209EE37B50B8E0FD2B3672F6D9D + +Count = 984 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = C529176F4DF08520B4426101B8376A746E036A2D74371859195F271C6B693B5252CC9CE4107219471BF516BBCA + +Count = 985 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = CB112884F6782DA99E982AE3EEFCF0787701D8825E234655911D09B0BD4B7AA2E532176470D43707868653B7F0 + +Count = 986 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = F7C02BE5F4121324C5CCE07D8DDEF97D60AD78F2075BBA9744DC221431B1F2AD9B6E4DD10953A2A431D0E1EA79 + +Count = 987 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 9CAEEBA747C80218B01A1C88EDF481A6C904FB10882543C7E49A4C77238981EFCD8ADEAAA529F8610E6CC8FAE6 + +Count = 988 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = DE921A675DB6AE3BCCBA5808569069A9B26685C7FC6D4DB3CEF8FA4E13F4A3FAAA300F3FC779B3DB990E57F317 + +Count = 989 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = EC143CB4F79B5B9683EA2BEDF02AF5A216735EDAE68A9BB1C737C64DE8F8BE2F6A24E15BE450E8DDC9598D8DC1 + +Count = 990 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = FE7B33AA1A61119A2695E61DB760AE9124B31494FF7363AC07B66322F6C1F3D6F936A439909E98353226EC111A + +Count = 991 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = +CT = CD26B03F5BADE92AABD726819B66D78615446231101221B459FDEC49ACC228A0328ACEC0BF7159A866D81FA56142 + +Count = 992 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 00 +CT = C757CD64C8DB098A2795D989988A9359F041D1CB98B8CC2E4997AF954E9FD29F04B00BBD803200A92D877FC9073F + +Count = 993 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 0001 +CT = 4ECB1C57DE9E0651DDD008532ABB60971A2F4A382EDD51C8F795902DEBF19568D6A135C1AC87588AC4CFF6DB3114 + +Count = 994 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102 +CT = 2F3DB7FBC9AE4534AE7E404B1D02EF4C383537DF95C4C479E3CD252739F503E6A904EB85CFDF4A3814C04D1C249F + +Count = 995 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 00010203 +CT = 3584C9AD2246F947E4273B2F46A35DFB7520B88C9F09EF50BD77462DEEF34D282997F8ED7F034EFD9FD71DB15C9C + +Count = 996 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 0001020304 +CT = 773E574F331C0CBBE73F578FA1584D6C5AAB10EEBD1E18FAE2A510CAFEA3A9EA1A69E756FFAFAAD03571C2D2FFF6 + +Count = 997 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405 +CT = 621A29CE689BE4C0569DEA816343CCB11EE59A75776E6D587441E5607DD81880B4CAD73FDDE257ED8A1B1A645C3A + +Count = 998 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 00010203040506 +CT = 08D88D7AF56FF1C7605EB78B1B6ADDFCA717B1EB5F600ABD32DC96E0A34F4FD8FDBE804586CC9FFEE2F8DA42CB60 + +Count = 999 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 0001020304050607 +CT = 8F781CA96EE20153C7B7CB3EBE29005E1E7469EA497C2DA4A6C052BA2B1867D4803099BECF71FF179445189E6C37 + +Count = 1000 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708 +CT = 8667DD61BD7495CD686F5342375A3076818814456C90E7FCD7555AE5B6D763B1A96DF4A73FEC00957C3F7F007E0F + +Count = 1001 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 00010203040506070809 +CT = A93E34AD2AE086DC387184CF0AA49C64D21F2B038D0402BA53783B4E9743A4D52DA00CD31F4E77BEE2C8D5081F05 + +Count = 1002 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A +CT = 92C1CE858D4B1B4FE678E72A11A568B61A04FE4DD18C0D759601A2B7944E751C028D167FFCA306286841962791C3 + +Count = 1003 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B +CT = CDA97645EA478DD39DA8E24673ACBA9654086FEDCB339B2A53AE80F21BEC4B10DD3766D7D5DEE30813EF0F62738A + +Count = 1004 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C +CT = 035AC9FAB8AE71BEBAF4E9D46EC22B73613C42DFDDC4AC5229E0E76CBD210BDD3739DB9D05ABAC522EB852ADC642 + +Count = 1005 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D +CT = 4366A97BE2169A1DB72EBBFED2CF5C778323534AD21ACB6C9665A651906C6846F9302A47D27FCF50191E8D21F6FE + +Count = 1006 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E +CT = BF6B2762EDD23F960150A8A639BA5AEF9A19BD609950BBDA93EA883C12076F922A43A70713E3C827B221B402D048 + +Count = 1007 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F +CT = 613F1D7D1F412FC81FB748D2105D80F4A3E7351DEF6A09A701CDCFE30A804216DACE4FF5E7AC3EEABA940F5D33CB + +Count = 1008 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F10 +CT = E5B7635DC5C9B08ADB2B695B0DEA885904FB661C8B3616BB549E24AE47725B72E2FCACAB57CF3C9C50589B5E3400 + +Count = 1009 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = C41BD787A900C233AF283296ECCB2F05D5D15A83115A882910BFD878E7A6B20245220CA9FCC5E69CFF421680B63A + +Count = 1010 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = D776039B908DCA18C7FC98E57C7C23F18352B790A21FB07E82B3821F24F5022903829173A25666E19F08F4C6CD6B + +Count = 1011 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 7C4A269473191EC49043D5319CA782FF60BE828E81F4E4ED79DB1E0F91B2901200BD0005C498D1F420780D8A27EC + +Count = 1012 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = F32BC6629AA488A08D97B1923D3CAF14F27540EC42582A9DC2F1E8ECB0C46DD5565E6C23D446F98FDF92BAFAA7BC + +Count = 1013 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = C9A91727C48CDCD48D814B55501C4158607F1EAFDC6B5EC2FBB281DB960FA90EC3318B5A00CCED3904090B4A70B7 + +Count = 1014 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 7CABC253B23309CE6D8A9673F5EE2D7A1E4487E19FAAB67480547FBCACC1D984022C5FED8BE360DE3E11E4B8CCCF + +Count = 1015 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 1D1126F217BD9FAB3AC203E40754CC3B7007BAD16E5A3F55971197C935CD14AF5C98B29DDE462EDFCC27C9F34543 + +Count = 1016 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 335325BC9780BE380E71E18444511AE80BE94A80F3DAD16BB4CA9C286F34BFC6673DCC20F0D44B2F294FC93B0E9B + +Count = 1017 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = C529176F4DF08520B4426101B8376A746E036A2D74371859195F271C6BB7C45D672A27FA5F4D9C2E371991E92C55 + +Count = 1018 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = CB112884F6782DA99E982AE3EEFCF0787701D8825E234655911D09B0BDBB7D0D41CE04C612499A658B9E1F1676B6 + +Count = 1019 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = F7C02BE5F4121324C5CCE07D8DDEF97D60AD78F2075BBA9744DC22143165DA3DDB5691B9262867AAA821F89FA5EC + +Count = 1020 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 9CAEEBA747C80218B01A1C88EDF481A6C904FB10882543C7E49A4C7723558E86482E22136A7A5CB8141C192BE733 + +Count = 1021 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = DE921A675DB6AE3BCCBA5808569069A9B26685C7FC6D4DB3CEF8FA4E13C8DD926596F6126DCFC71CBCE7E6D9FDBA + +Count = 1022 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = EC143CB4F79B5B9683EA2BEDF02AF5A216735EDAE68A9BB1C737C64DE87BF27FBA8A2DBDFAB51B95323790428D46 + +Count = 1023 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = FE7B33AA1A61119A2695E61DB760AE9124B31494FF7363AC07B66322F67AEA194C36CC180E4523D8D5A585994EF2 + +Count = 1024 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = +CT = CD26B03F5BADE92AABD726819B66D78615446231101221B459FDEC49ACC20F9CA0DD1A41622B75E4DD0F77CFCED9BF + +Count = 1025 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 00 +CT = C757CD64C8DB098A2795D989988A9359F041D1CB98B8CC2E4997AF954E9F867840C1F6611B59A5B9715527D43FF3FE + +Count = 1026 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 0001 +CT = 4ECB1C57DE9E0651DDD008532ABB60971A2F4A382EDD51C8F795902DEBF18BB8C6AF3E5F621809DE53488F778AE692 + +Count = 1027 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102 +CT = 2F3DB7FBC9AE4534AE7E404B1D02EF4C383537DF95C4C479E3CD252739F5332D2A61BAAB9D88C079FCE013EC820603 + +Count = 1028 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 00010203 +CT = 3584C9AD2246F947E4273B2F46A35DFB7520B88C9F09EF50BD77462DEEF3A7708B6C1EE1C9BB82662C8C97390C9901 + +Count = 1029 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 0001020304 +CT = 773E574F331C0CBBE73F578FA1584D6C5AAB10EEBD1E18FAE2A510CAFEA3BFBEB55BA6D4945BEFC47DD83B5E489BC0 + +Count = 1030 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405 +CT = 621A29CE689BE4C0569DEA816343CCB11EE59A75776E6D587441E5607DD8F79C92EC2DA2802B9C5D6AAB1FB2DAF60F + +Count = 1031 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 00010203040506 +CT = 08D88D7AF56FF1C7605EB78B1B6ADDFCA717B1EB5F600ABD32DC96E0A34FB9E035B022AB1DB51855E340C7ED7F43A0 + +Count = 1032 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 0001020304050607 +CT = 8F781CA96EE20153C7B7CB3EBE29005E1E7469EA497C2DA4A6C052BA2B18AF14F0055D130E10366B44F6CE37A44777 + +Count = 1033 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708 +CT = 8667DD61BD7495CD686F5342375A3076818814456C90E7FCD7555AE5B6D728BE6D65721A6CE946669D82DC8960B64A + +Count = 1034 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 00010203040506070809 +CT = A93E34AD2AE086DC387184CF0AA49C64D21F2B038D0402BA53783B4E97430F5425E738337AE46B80691E791787BF5D + +Count = 1035 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A +CT = 92C1CE858D4B1B4FE678E72A11A568B61A04FE4DD18C0D759601A2B7944E670CF975F640A38EA72115441E2609C718 + +Count = 1036 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B +CT = CDA97645EA478DD39DA8E24673ACBA9654086FEDCB339B2A53AE80F21BECB9E7159939FA21F302DFAA7B293F33D48A + +Count = 1037 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C +CT = 035AC9FAB8AE71BEBAF4E9D46EC22B73613C42DFDDC4AC5229E0E76CBD216C24D992F128E60A4AF79EC53723E7FEC3 + +Count = 1038 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D +CT = 4366A97BE2169A1DB72EBBFED2CF5C778323534AD21ACB6C9665A651906C3B449A6A46DF32F9836B78D5A213C24077 + +Count = 1039 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E +CT = BF6B2762EDD23F960150A8A639BA5AEF9A19BD609950BBDA93EA883C1207371A7DA97D1E06DD04C6E0D1FAC82F6755 + +Count = 1040 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F +CT = 613F1D7D1F412FC81FB748D2105D80F4A3E7351DEF6A09A701CDCFE30A8001A012F8A4899C62EA220F4BAA0C379EC4 + +Count = 1041 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F10 +CT = E5B7635DC5C9B08ADB2B695B0DEA885904FB661C8B3616BB549E24AE47723E57F4F8974564CAE23875039512723424 + +Count = 1042 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = C41BD787A900C233AF283296ECCB2F05D5D15A83115A882910BFD878E7A695EC6E3C6FD7A9BB4F9468F8033107E220 + +Count = 1043 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = D776039B908DCA18C7FC98E57C7C23F18352B790A21FB07E82B3821F24F5557410C33ED4C5B02955B512A1BE310046 + +Count = 1044 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 7C4A269473191EC49043D5319CA782FF60BE828E81F4E4ED79DB1E0F91B2A127806C12DC775E2C9D5A7316E6A3625C + +Count = 1045 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = F32BC6629AA488A08D97B1923D3CAF14F27540EC42582A9DC2F1E8ECB0C4B441B2F00B2AA567DC663CD42391EF2CE0 + +Count = 1046 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = C9A91727C48CDCD48D814B55501C4158607F1EAFDC6B5EC2FBB281DB960F652455B45C687A282CB5313F51F9EE46B4 + +Count = 1047 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 7CABC253B23309CE6D8A9673F5EE2D7A1E4487E19FAAB67480547FBCACC168F29B519302CA09D85CF1709526429F73 + +Count = 1048 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 1D1126F217BD9FAB3AC203E40754CC3B7007BAD16E5A3F55971197C935CDC24D72FE1346F0998011407072F742BF20 + +Count = 1049 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 335325BC9780BE380E71E18444511AE80BE94A80F3DAD16BB4CA9C286F34594010E3DAA370546B14C801ED0667F2F4 + +Count = 1050 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = C529176F4DF08520B4426101B8376A746E036A2D74371859195F271C6BB7D51283A0DA7873817085D9557AA63EA749 + +Count = 1051 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = CB112884F6782DA99E982AE3EEFCF0787701D8825E234655911D09B0BDBBE6DBB64E7B382659190200451A7E020F39 + +Count = 1052 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = F7C02BE5F4121324C5CCE07D8DDEF97D60AD78F2075BBA9744DC2214316589DE99EDC65DF7A15CA16B306E284B9A25 + +Count = 1053 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 9CAEEBA747C80218B01A1C88EDF481A6C904FB10882543C7E49A4C772355081929320462CE5A3E72722F6D489E5C19 + +Count = 1054 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = DE921A675DB6AE3BCCBA5808569069A9B26685C7FC6D4DB3CEF8FA4E13C8D7F5A792E714153A733A66CFBA97D43083 + +Count = 1055 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = EC143CB4F79B5B9683EA2BEDF02AF5A216735EDAE68A9BB1C737C64DE87B57A8A64541AEA3B1D0AF551B02DC2C065A + +Count = 1056 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = FE7B33AA1A61119A2695E61DB760AE9124B31494FF7363AC07B66322F67A0A33BD2AE7F2ECFE531FED5F53EF692230 + +Count = 1057 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = +CT = CD26B03F5BADE92AABD726819B66D78615446231101221B459FDEC49ACC20F627ED9DA26A5C5EC2DBF1D2AE9EC80FF3F + +Count = 1058 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 00 +CT = C757CD64C8DB098A2795D989988A9359F041D1CB98B8CC2E4997AF954E9F86E7FD3E3A87D6EE1DCDA558D8B3B8FCC73E + +Count = 1059 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 0001 +CT = 4ECB1C57DE9E0651DDD008532ABB60971A2F4A382EDD51C8F795902DEBF18B4DDC394C0E67ED0C09DAC4D66B97E28E23 + +Count = 1060 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102 +CT = 2F3DB7FBC9AE4534AE7E404B1D02EF4C383537DF95C4C479E3CD252739F533D5ED26B37C85CA01E43B62DA953E3F2ACB + +Count = 1061 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 00010203 +CT = 3584C9AD2246F947E4273B2F46A35DFB7520B88C9F09EF50BD77462DEEF3A7F697AD9DD844503B7D923A821F7E3EA06B + +Count = 1062 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 0001020304 +CT = 773E574F331C0CBBE73F578FA1584D6C5AAB10EEBD1E18FAE2A510CAFEA3BF8ACAF41F89C13CA9DF75795B8DA5EBB3DC + +Count = 1063 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405 +CT = 621A29CE689BE4C0569DEA816343CCB11EE59A75776E6D587441E5607DD8F7587290DB1206815F750DDBB821BFF4B42B + +Count = 1064 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 00010203040506 +CT = 08D88D7AF56FF1C7605EB78B1B6ADDFCA717B1EB5F600ABD32DC96E0A34FB988C2E04B29E63450F5B33A3B602C555121 + +Count = 1065 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 0001020304050607 +CT = 8F781CA96EE20153C7B7CB3EBE29005E1E7469EA497C2DA4A6C052BA2B18AF3048E2BABEFA26F202D3CD0FE4BA1BC305 + +Count = 1066 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708 +CT = 8667DD61BD7495CD686F5342375A3076818814456C90E7FCD7555AE5B6D7289D933F27C499078B4B3E7AE2E99DF8664D + +Count = 1067 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 00010203040506070809 +CT = A93E34AD2AE086DC387184CF0AA49C64D21F2B038D0402BA53783B4E97430FEA9924517A17AB86BAF03519CAF91B52F5 + +Count = 1068 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A +CT = 92C1CE858D4B1B4FE678E72A11A568B61A04FE4DD18C0D759601A2B7944E67122EF7CE7809B88697ABC2FDB2253B292F + +Count = 1069 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B +CT = CDA97645EA478DD39DA8E24673ACBA9654086FEDCB339B2A53AE80F21BECB92031792073A72E8D367FDB263B5FB02E15 + +Count = 1070 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C +CT = 035AC9FAB8AE71BEBAF4E9D46EC22B73613C42DFDDC4AC5229E0E76CBD216C69A4773059466EF168A0C17BB5CC906B2B + +Count = 1071 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D +CT = 4366A97BE2169A1DB72EBBFED2CF5C778323534AD21ACB6C9665A651906C3BF99C3C8BDEDEB5D532D3B12D18B50759BA + +Count = 1072 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E +CT = BF6B2762EDD23F960150A8A639BA5AEF9A19BD609950BBDA93EA883C1207377BC369BE6338255DB4FA44B159E76D2BB8 + +Count = 1073 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F +CT = 613F1D7D1F412FC81FB748D2105D80F4A3E7351DEF6A09A701CDCFE30A80017B96B20295699A98946C9CB705410A7F1A + +Count = 1074 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F10 +CT = E5B7635DC5C9B08ADB2B695B0DEA885904FB661C8B3616BB549E24AE47723ED64C45897F9F55B9581F494469F3884BA8 + +Count = 1075 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = C41BD787A900C233AF283296ECCB2F05D5D15A83115A882910BFD878E7A695BD68CDC226BA2E74F8C3EA2421E815DCF0 + +Count = 1076 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = D776039B908DCA18C7FC98E57C7C23F18352B790A21FB07E82B3821F24F555D62E42B210FE0FBCF2414EB569EBCD6616 + +Count = 1077 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 7C4A269473191EC49043D5319CA782FF60BE828E81F4E4ED79DB1E0F91B2A1D936BFA3BD101561CD9B251D19F47766B6 + +Count = 1078 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = F32BC6629AA488A08D97B1923D3CAF14F27540EC42582A9DC2F1E8ECB0C4B4D5C2CFCD2EC5864BC10822226863BBE15C + +Count = 1079 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = C9A91727C48CDCD48D814B55501C4158607F1EAFDC6B5EC2FBB281DB960F65A70A633B0A2E39E7935D6EF5533525B4D1 + +Count = 1080 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 7CABC253B23309CE6D8A9673F5EE2D7A1E4487E19FAAB67480547FBCACC168334A01AF8ABE538CD05FCBB3119D02EB0E + +Count = 1081 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 1D1126F217BD9FAB3AC203E40754CC3B7007BAD16E5A3F55971197C935CDC21D00DC2623763D78AE155BDB5400830A0D + +Count = 1082 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 335325BC9780BE380E71E18444511AE80BE94A80F3DAD16BB4CA9C286F3459505B87C464FBF7778A804AB94D0E39AFE0 + +Count = 1083 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = C529176F4DF08520B4426101B8376A746E036A2D74371859195F271C6BB7D5BA520332928ECE375F1AA2F256211709A1 + +Count = 1084 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = CB112884F6782DA99E982AE3EEFCF0787701D8825E234655911D09B0BDBBE6DECD6DC6C52C1108045984BD43198E2BBB + +Count = 1085 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = F7C02BE5F4121324C5CCE07D8DDEF97D60AD78F2075BBA9744DC22143165890DDB673A55C49444CFF53694AF26BFA33C + +Count = 1086 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 9CAEEBA747C80218B01A1C88EDF481A6C904FB10882543C7E49A4C77235508C8BD7AA6C5BCFB324FB7BE5AEAA23CCE25 + +Count = 1087 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = DE921A675DB6AE3BCCBA5808569069A9B26685C7FC6D4DB3CEF8FA4E13C8D7F8A427D6FA04730AFC875E968FACC98243 + +Count = 1088 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = EC143CB4F79B5B9683EA2BEDF02AF5A216735EDAE68A9BB1C737C64DE87B57EC5A20A694943C11AA116404635DCB48DD + +Count = 1089 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = FE7B33AA1A61119A2695E61DB760AE9124B31494FF7363AC07B66322F67A0A15BF285818BBB9C7B4F4471B5F72CEB786 + diff --git a/spook/Implementations/crypto_aead/spook128su512v2/opt_c/COPYING b/spook/Implementations/crypto_aead/spook128su512v2/opt_c/COPYING new file mode 100644 index 0000000..0e259d4 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128su512v2/opt_c/COPYING @@ -0,0 +1,121 @@ +Creative Commons Legal Code + +CC0 1.0 Universal + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS + PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM + THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED + HEREUNDER. + +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer +exclusive Copyright and Related Rights (defined below) upon the creator +and subsequent owner(s) (each and all, an "owner") of an original work of +authorship and/or a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for +the purpose of contributing to a commons of creative, cultural and +scientific works ("Commons") that the public can reliably and without fear +of later claims of infringement build upon, modify, incorporate in other +works, reuse and redistribute as freely as possible in any form whatsoever +and for any purposes, including without limitation commercial purposes. +These owners may contribute to the Commons to promote the ideal of a free +culture and the further production of creative, cultural and scientific +works, or to gain reputation or greater distribution for their Work in +part through the use and efforts of others. + +For these and/or other purposes and motivations, and without any +expectation of additional consideration or compensation, the person +associating CC0 with a Work (the "Affirmer"), to the extent that he or she +is an owner of Copyright and Related Rights in the Work, voluntarily +elects to apply CC0 to the Work and publicly distribute the Work under its +terms, with knowledge of his or her Copyright and Related Rights in the +Work and the meaning and intended legal effect of CC0 on those rights. + +1. Copyright and Related Rights. A Work made available under CC0 may be +protected by copyright and related or neighboring rights ("Copyright and +Related Rights"). Copyright and Related Rights include, but are not +limited to, the following: + + i. the right to reproduce, adapt, distribute, perform, display, + communicate, and translate a Work; + ii. moral rights retained by the original author(s) and/or performer(s); +iii. publicity and privacy rights pertaining to a person's image or + likeness depicted in a Work; + iv. rights protecting against unfair competition in regards to a Work, + subject to the limitations in paragraph 4(a), below; + v. rights protecting the extraction, dissemination, use and reuse of data + in a Work; + vi. database rights (such as those arising under Directive 96/9/EC of the + European Parliament and of the Council of 11 March 1996 on the legal + protection of databases, and under any national implementation + thereof, including any amended or successor version of such + directive); and +vii. other similar, equivalent or corresponding rights throughout the + world based on applicable law or treaty, and any national + implementations thereof. + +2. Waiver. To the greatest extent permitted by, but not in contravention +of, applicable law, Affirmer hereby overtly, fully, permanently, +irrevocably and unconditionally waives, abandons, and surrenders all of +Affirmer's Copyright and Related Rights and associated claims and causes +of action, whether now known or unknown (including existing as well as +future claims and causes of action), in the Work (i) in all territories +worldwide, (ii) for the maximum duration provided by applicable law or +treaty (including future time extensions), (iii) in any current or future +medium and for any number of copies, and (iv) for any purpose whatsoever, +including without limitation commercial, advertising or promotional +purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each +member of the public at large and to the detriment of Affirmer's heirs and +successors, fully intending that such Waiver shall not be subject to +revocation, rescission, cancellation, termination, or any other legal or +equitable action to disrupt the quiet enjoyment of the Work by the public +as contemplated by Affirmer's express Statement of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason +be judged legally invalid or ineffective under applicable law, then the +Waiver shall be preserved to the maximum extent permitted taking into +account Affirmer's express Statement of Purpose. In addition, to the +extent the Waiver is so judged Affirmer hereby grants to each affected +person a royalty-free, non transferable, non sublicensable, non exclusive, +irrevocable and unconditional license to exercise Affirmer's Copyright and +Related Rights in the Work (i) in all territories worldwide, (ii) for the +maximum duration provided by applicable law or treaty (including future +time extensions), (iii) in any current or future medium and for any number +of copies, and (iv) for any purpose whatsoever, including without +limitation commercial, advertising or promotional purposes (the +"License"). The License shall be deemed effective as of the date CC0 was +applied by Affirmer to the Work. Should any part of the License for any +reason be judged legally invalid or ineffective under applicable law, such +partial invalidity or ineffectiveness shall not invalidate the remainder +of the License, and in such case Affirmer hereby affirms that he or she +will not (i) exercise any of his or her remaining Copyright and Related +Rights in the Work or (ii) assert any associated claims and causes of +action with respect to the Work, in either case contrary to Affirmer's +express Statement of Purpose. + +4. Limitations and Disclaimers. + + a. No trademark or patent rights held by Affirmer are waived, abandoned, + surrendered, licensed or otherwise affected by this document. + b. Affirmer offers the Work as-is and makes no representations or + warranties of any kind concerning the Work, express, implied, + statutory or otherwise, including without limitation warranties of + title, merchantability, fitness for a particular purpose, non + infringement, or the absence of latent or other defects, accuracy, or + the present or absence of errors, whether or not discoverable, all to + the greatest extent permissible under applicable law. + c. Affirmer disclaims responsibility for clearing rights of other persons + that may apply to the Work or any use thereof, including without + limitation any person's Copyright and Related Rights in the Work. + Further, Affirmer disclaims responsibility for obtaining any necessary + consents, permissions or other rights required for any use of the + Work. + d. Affirmer understands and acknowledges that Creative Commons is not a + party to this document and has no duty or obligation with respect to + this CC0 or use of the Work. diff --git a/spook/Implementations/crypto_aead/spook128su512v2/opt_c/api.h b/spook/Implementations/crypto_aead/spook128su512v2/opt_c/api.h new file mode 100644 index 0000000..5cd4ad3 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128su512v2/opt_c/api.h @@ -0,0 +1,7 @@ +#include "parameters.h" +#define CRYPTO_KEYBYTES KEYBYTES +#define CRYPTO_NPUBBYTES 16 +#define CRYPTO_NSECBYTES 0 +#define CRYPTO_ABYTES 16 +#define CRYPTO_NOOVERLAP 1 + diff --git a/spook/Implementations/crypto_aead/spook128su512v2/opt_c/clyde_32bit.c b/spook/Implementations/crypto_aead/spook128su512v2/opt_c/clyde_32bit.c new file mode 100644 index 0000000..694b708 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128su512v2/opt_c/clyde_32bit.c @@ -0,0 +1,75 @@ +/* MIT License + * + * Copyright (c) 2019 Gaëtan Cassiers Olivier Bronchain + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +#include +#include +#include "primitives.h" +#include "primitives.c" +#define CLYDE_128_NS 6 // Number of steps +#define CLYDE_128_NR 2 * CLYDE_128_NS // Number of rounds +#define XORLS(DEST, OP) do { \ + (DEST)[0] ^= (OP)[0]; \ + (DEST)[1] ^= (OP)[1]; \ + (DEST)[2] ^= (OP)[2]; \ + (DEST)[3] ^= (OP)[3]; } while (0) + +#define XORCST(DEST, LFSR) do { \ + (DEST)[0] ^= ((LFSR)>>3 & 0x1); \ + (DEST)[1] ^= ((LFSR)>>2 & 0x1); \ + (DEST)[2] ^= ((LFSR)>>1 & 0x1); \ + (DEST)[3] ^= ((LFSR) & 0x1); } while (0) + +void clyde128_encrypt(clyde128_state state, const clyde128_state t, const unsigned char* k) { + // Key schedule + clyde128_state k_st; + memcpy(k_st, k, CLYDE128_NBYTES); + clyde128_state tk[3] = { + { t[0], t[1], t[2], t[3] }, + { t[0] ^ t[2], t[1] ^ t[3], t[0], t[1] }, + { t[2], t[3], t[0] ^ t[2], t[1] ^ t[3] } + }; + XORLS(tk[0], k_st); + XORLS(tk[1], k_st); + XORLS(tk[2], k_st); + + // Datapath + XORLS(state, tk[0]); + uint32_t off = 0x924; // 2-bits describing the round key + uint32_t lfsr = 0x8; // LFSR for round constant + for (uint32_t s = 0; s < CLYDE_128_NS; s++) { + sbox_layer(state); + lbox(&state[0], &state[1]); + lbox(&state[2], &state[3]); + XORCST(state,lfsr); + uint32_t b = lfsr & 0x1; + lfsr = (lfsr^(b<<3) | b<<4)>>1; // update LFSR + + sbox_layer(state); + lbox(&state[0], &state[1]); + lbox(&state[2], &state[3]); + XORCST(state,lfsr); + b = lfsr & 0x1; + lfsr = (lfsr^(b<<3) | b<<4)>>1; // update LFSR + off >>=2; + XORLS(state, tk[off&0x03]); + } +} diff --git a/spook/Implementations/crypto_aead/spook128su512v2/opt_c/crypto_aead.h b/spook/Implementations/crypto_aead/spook128su512v2/opt_c/crypto_aead.h new file mode 100644 index 0000000..53ec4a7 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128su512v2/opt_c/crypto_aead.h @@ -0,0 +1,12 @@ + +int crypto_aead_encrypt(unsigned char* c, unsigned long long* clen, + const unsigned char* m, unsigned long long mlen, + const unsigned char* ad, unsigned long long adlen, + const unsigned char* nsec, const unsigned char* npub, + const unsigned char* k); + +int crypto_aead_decrypt(unsigned char* m, unsigned long long* mlen, + unsigned char* nsec, const unsigned char* c, + unsigned long long clen, const unsigned char* ad, + unsigned long long adlen, const unsigned char* npub, + const unsigned char* k); diff --git a/spook/Implementations/crypto_aead/spook128su512v2/opt_c/encrypt.c b/spook/Implementations/crypto_aead/spook128su512v2/opt_c/encrypt.c new file mode 100644 index 0000000..74d09fa --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128su512v2/opt_c/encrypt.c @@ -0,0 +1,44 @@ +/* Spook Reference Implementation v1 + * + * Written in 2019 at UCLouvain (Belgium) by Olivier Bronchain, Gaetan Cassiers + * and Charles Momin. + * To the extent possible under law, the author(s) have dedicated all copyright + * and related and neighboring rights to this software to the public domain + * worldwide. This software is distributed without any warranty. + * + * You should have received a copy of the CC0 Public Domain Dedication along with + * this software. If not, see . + */ +#include "crypto_aead.h" +#include "s1p.h" + +#ifdef __GNUC__ +#define UNUSED __attribute__((unused)) +#else +#define UNUSED +#endif + +// Spook encryption. +int crypto_aead_encrypt(unsigned char* c, unsigned long long* clen, + const unsigned char* m, unsigned long long mlen, + const unsigned char* ad, unsigned long long adlen, + const unsigned char* nsec UNUSED, + const unsigned char* npub, const unsigned char* k) { + unsigned char p[P_NBYTES]; + const unsigned char* k_priv; + init_keys(&k_priv, p, k); + s1p_encrypt(c, clen, ad, adlen, m, mlen, k_priv, p, npub); + return 0; +} + +// Spook encryption. +int crypto_aead_decrypt(unsigned char* m, unsigned long long* mlen, + unsigned char* nsec UNUSED, const unsigned char* c, + unsigned long long clen, const unsigned char* ad, + unsigned long long adlen, const unsigned char* npub, + const unsigned char* k) { + unsigned char p[P_NBYTES]; + const unsigned char* k_priv; + init_keys(&k_priv, p, k); + return s1p_decrypt(m, mlen, ad, adlen, c, clen, k_priv, p, npub); +} diff --git a/spook/Implementations/crypto_aead/spook128su512v2/opt_c/iacaMarks.h b/spook/Implementations/crypto_aead/spook128su512v2/opt_c/iacaMarks.h new file mode 100644 index 0000000..be1973e --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128su512v2/opt_c/iacaMarks.h @@ -0,0 +1,53 @@ +/* +* Copyright (2008-2009) Intel Corporation All Rights Reserved. +* The source code contained or described herein and all documents +* related to the source code ("Material") are owned by Intel Corporation +* or its suppliers or licensors. Title to the Material remains with +* Intel Corporation or its suppliers and licensors. The Material +* contains trade secrets and proprietary and confidential information +* of Intel or its suppliers and licensors. The Material is protected +* by worldwide copyright and trade secret laws and treaty provisions. +* No part of the Material may be used, copied, reproduced, modified, +* published, uploaded, posted, transmitted, distributed, or disclosed +* in any way without Intel(R)s prior express written permission. +* +* No license under any patent, copyright, trade secret or other +* intellectual property right is granted to or conferred upon you by +* disclosure or delivery of the Materials, either expressly, by implication, +* inducement, estoppel or otherwise. Any license under such intellectual +* property rights must be express and approved by Intel in writing. +*/ + +#if defined (__GNUC__) +#define IACA_SSC_MARK( MARK_ID ) \ +__asm__ __volatile__ ( \ + "\n\t movl $"#MARK_ID", %%ebx" \ + "\n\t .byte 0x64, 0x67, 0x90" \ + : : : "memory" ); + +#else +#define IACA_SSC_MARK(x) {__asm mov ebx, x\ + __asm _emit 0x64 \ + __asm _emit 0x67 \ + __asm _emit 0x90 } +#endif + +#define IACA_START {IACA_SSC_MARK(111)} +#define IACA_END {IACA_SSC_MARK(222)} + +#ifdef _WIN64 +#include +#define IACA_VC64_START __writegsbyte(111, 111); +#define IACA_VC64_END __writegsbyte(222, 222); +#endif + +/**************** asm ***************** +;START_MARKER +mov ebx, 111 +db 0x64, 0x67, 0x90 + +;END_MARKER +mov ebx, 222 +db 0x64, 0x67, 0x90 + +**************************************/ diff --git a/spook/Implementations/crypto_aead/spook128su512v2/opt_c/parameters.h b/spook/Implementations/crypto_aead/spook128su512v2/opt_c/parameters.h new file mode 100644 index 0000000..2e3c4b5 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128su512v2/opt_c/parameters.h @@ -0,0 +1,30 @@ +/* Spook Reference Implementation v1 + * + * Written in 2019 at UCLouvain (Belgium) by Olivier Bronchain, Gaetan Cassiers + * and Charles Momin. + * To the extent possible under law, the author(s) have dedicated all copyright + * and related and neighboring rights to this software to the public domain + * worldwide. This software is distributed without any warranty. + * + * You should have received a copy of the CC0 Public Domain Dedication along with + * this software. If not, see . + */ +#ifndef _PARAMETERS_H_ +#define _PARAMETERS_H_ + +#define MULTI_USER 0 +#define SMALL_PERM 0 + +#if MULTI_USER +#define KEYBYTES 32 +#else +#define KEYBYTES 16 +#endif + +#include "api.h" + +#if (KEYBYTES != CRYPTO_KEYBYTES) +#error "Wrong parameters in api.h" +#endif + +#endif //_PARAMETERS_H_ diff --git a/spook/Implementations/crypto_aead/spook128su512v2/opt_c/primitives.c b/spook/Implementations/crypto_aead/spook128su512v2/opt_c/primitives.c new file mode 100644 index 0000000..acab323 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128su512v2/opt_c/primitives.c @@ -0,0 +1,94 @@ +#include "primitives.h" +#ifdef SHADOW +static uint32_t lfsr_poly; +static uint32_t xtime_poly; +#endif + +// Apply a S-box layer to a Clyde-128 state. +static void sbox_layer(uint32_t* state) { + uint32_t y1 = (state[0] & state[1]) ^ state[2]; + uint32_t y0 = (state[3] & state[0]) ^ state[1]; + uint32_t y3 = (y1 & state[3]) ^ state[0]; + uint32_t y2 = (y0 & y1) ^ state[3]; + state[0] = y0; + state[1] = y1; + state[2] = y2; + state[3] = y3; +} + +// Apply a L-box to a pair of Clyde-128 rows. +static void lbox(uint32_t* x, uint32_t* y) { + uint32_t a, b, c, d; + a = *x ^ ROT32(*x, 12); + b = *y ^ ROT32(*y, 12); + a = a ^ ROT32(a, 3); + b = b ^ ROT32(b, 3); + a = a ^ ROT32(*x, 17); + b = b ^ ROT32(*y, 17); + c = a ^ ROT32(a, 31); + d = b ^ ROT32(b, 31); + a = a ^ ROT32(d, 26); + b = b ^ ROT32(c, 25); + a = a ^ ROT32(c, 15); + b = b ^ ROT32(d, 15); + *x = a; + *y = b; +} + +#ifdef SHADOW +void set_poly_lfsr(uint32_t l){ + lfsr_poly = l; +} +void set_poly_xtime(uint32_t l){ + xtime_poly = l; +} + +static uint32_t update_lfsr(uint32_t x) { + int32_t tmp1 = x; + uint32_t tmp = (tmp1 >>31) & lfsr_poly; + return (x<<1) ^ tmp; +} + +static uint32_t xtime(uint32_t x) { + int32_t tmp1 = x; + uint32_t tmp = (tmp1 >>31) & xtime_poly; + return (x<<1) ^ tmp; +} + +// Apply a D-box layer to a Shadow state. +static void dbox_mls_layer(shadow_state state,uint32_t *lfsr) { +for (unsigned int row = 0; row < LS_ROWS; row++) { +#if SMALL_PERM + uint32_t x1 = state[0][row]; + uint32_t x2 = state[1][row]; + uint32_t x3 = state[2][row]; + + uint32_t a = x1 ^ x3; + uint32_t b = a ^ x2; + uint32_t c = xtime(a) ^ (x1 ^ x2); + state[0][row] = a ^ c; + state[1][row] = b; + state[2][row] = c; + + state[0][row] ^= *lfsr; + *lfsr = update_lfsr(*lfsr); + +#else + + state[0][row] ^= state[1][row]; + state[2][row] ^= state[3][row]; + state[1][row] ^= state[2][row]; + state[3][row] ^= xtime(state[0][row]); + state[2][row] ^= xtime(state[3][row]); + state[1][row] = xtime(state[1][row]); + state[0][row] ^= state[1][row]; + state[3][row] ^= state[0][row]; + state[1][row] ^= state[2][row]; + + state[0][row] ^= *lfsr; + *lfsr = update_lfsr(*lfsr); +#endif // SMALL_PERM + } + +} +#endif diff --git a/spook/Implementations/crypto_aead/spook128su512v2/opt_c/primitives.h b/spook/Implementations/crypto_aead/spook128su512v2/opt_c/primitives.h new file mode 100644 index 0000000..df99be9 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128su512v2/opt_c/primitives.h @@ -0,0 +1,52 @@ +/* Spook Reference Implementation v1 + * + * Written in 2019 at UCLouvain (Belgium) by Olivier Bronchain, Gaetan Cassiers + * and Charles Momin. + * To the extent possible under law, the author(s) have dedicated all copyright + * and related and neighboring rights to this software to the public domain + * worldwide. This software is distributed without any warranty. + * + * You should have received a copy of the CC0 Public Domain Dedication along with + * this software. If not, see . + */ +#ifndef _H_PRIMITIVES_H_ +#define _H_PRIMITIVES_H_ + +#include +#include "parameters.h" + +#define CLYDE128_NBYTES 16 + +#define ROTL(x, n) ((x << n) | (x >> ((32-n) & 31))) +#ifndef SHCST +#define SHCST 1 +#endif + +#ifndef DBOX +#define DBOX 1 +#endif + +#if SMALL_PERM +#define SHADOW_NBYTES 48 +#else +#define SHADOW_NBYTES 64 +#endif // SMALL_PERM + +#define LS_ROWS 4 // Rows in the LS design +#define LS_ROW_BYTES 4 // number of bytes per row in the LS design +#define MLS_BUNDLES \ + (SHADOW_NBYTES / (LS_ROWS* LS_ROW_BYTES)) // Bundles in the mLS design + +#define ROT32(x,n) ((uint32_t)(((x)>>(n))|((x)<<(32-(n))))) +typedef __attribute__((aligned(16))) uint32_t clyde128_state[LS_ROWS]; +typedef __attribute__((aligned(64))) clyde128_state shadow_state[MLS_BUNDLES]; + +void clyde128_encrypt(clyde128_state state, + const clyde128_state t, const unsigned char* k); + +void shadow(shadow_state state); +static void sbox_layer(uint32_t* state); +static void dbox_mls_layer(shadow_state state,uint32_t *lfsr); +static void lbox(uint32_t* x, uint32_t* y); + +#endif //_H_PRIMITIVES_H_ diff --git a/spook/Implementations/crypto_aead/spook128su512v2/opt_c/s1p.c b/spook/Implementations/crypto_aead/spook128su512v2/opt_c/s1p.c new file mode 100644 index 0000000..a4b7166 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128su512v2/opt_c/s1p.c @@ -0,0 +1,197 @@ +/* MIT License + * + * Copyright (c) 2019 Gaëtan Cassiers + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +#include +#include +#include +#include "primitives.h" +#include "s1p.h" +#include "parameters.h" + +#define CAPACITY_BYTES 32 +#define RATE_BYTES (SHADOW_NBYTES - CAPACITY_BYTES) +#define RATE_BUNDLES (RATE_BYTES/(LS_ROWS*LS_ROW_BYTES)) + +// Working mode for block compression. +typedef enum { + AD, + PLAINTEXT, + CIPHERTEXT +} compress_mode; + +static void compress_block(unsigned char *state, unsigned char *out, + const unsigned char *d, compress_mode mode, + unsigned long long offset, unsigned long long n); + +static unsigned long long compress_data(shadow_state state, + unsigned char *out, + const unsigned char *d, + unsigned long long dlen, + compress_mode mode); + +static void init_sponge_state(shadow_state state, + const unsigned char *k, const unsigned char *p, + const unsigned char *n); +static void xor_bytes(unsigned char* dest, const unsigned char* src1, + const unsigned char* src2, unsigned long long n); + +void init_keys(const unsigned char **k, unsigned char p[P_NBYTES], + const unsigned char *k_glob) { + *k = k_glob; +#if MULTI_USER + memcpy(p, k_glob + CLYDE128_NBYTES, P_NBYTES); + p[P_NBYTES - 1] &= 0x7F; // set last p bit to 0 + p[P_NBYTES - 1] |= 0x40; // set next to last p bit to 0 +#else + memset(p, 0, P_NBYTES); +#endif // MULTI_USER +} + +static void init_sponge_state(shadow_state state, + const unsigned char *k, const unsigned char *p, + const unsigned char *n) { +// init state + memset(state, 0, SHADOW_NBYTES); + memcpy(state[0], n, P_NBYTES); + memcpy(state[1], p, CRYPTO_NPUBBYTES); + + memcpy(state[2], n, CRYPTO_NPUBBYTES); + clyde128_encrypt(state[0], state[1], k); + + // initial permutation + shadow(state); +} + +void s1p_encrypt(unsigned char *c, unsigned long long *clen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *m, unsigned long long mlen, + const unsigned char *k, const unsigned char *p, + const unsigned char *n) { + // permutation state + shadow_state state; + init_sponge_state(state, k, p, n); + + // compress associated data + compress_data(state, NULL, ad, adlen, AD); + + // compress message + unsigned long long c_bytes = 0; + if (mlen > 0) { + state[RATE_BUNDLES][0] ^= 0x01; + c_bytes = compress_data(state, c, m, mlen, PLAINTEXT); + } + + // tag + state[1][LS_ROWS- 1] |= 0x80000000; + clyde128_encrypt(state[0], state[1], k); + memcpy(c+c_bytes, state[0], CLYDE128_NBYTES); + *clen = c_bytes + CLYDE128_NBYTES; +} + +int s1p_decrypt(unsigned char *m, unsigned long long *mlen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *c, unsigned long long clen, + const unsigned char *k, const unsigned char *p, + const unsigned char *n) { + // permutation state + shadow_state state; + init_sponge_state(state, k, p, n); + + // compress associated data + compress_data(state, NULL, ad, adlen, AD); + + // compress message + unsigned long long m_bytes = 0; + if (clen > CLYDE128_NBYTES) { + state[RATE_BUNDLES][0] ^= 0x01; + m_bytes = compress_data(state, m, c, clen - CLYDE128_NBYTES, CIPHERTEXT); + } + + // tag verification + state[1][LS_ROWS- 1] |= 0x80000000; + clyde128_encrypt(state[0], state[1], k); + unsigned char *st0 = (unsigned char *) state[0]; + int tag_ok = 1; + for (int i = 0; i < 4*LS_ROWS; i++) { + tag_ok &= (st0[i] == c[m_bytes+i]); + } + if (tag_ok) { + *mlen = m_bytes; + return 0; + } else { + // Reset output buffer to avoid unintended unauthenticated plaintext + // release. + memset(m, 0, clen - CLYDE128_NBYTES); + *mlen = 0; + return -1; + } +} + +// Compress a block into the state. Length of the block is n and buffers are +// accessed starting at offset. Input block is d, output is written into +// buffer out if mode is PLAINTEXT or CIPHERTEXT. +// Only the XOR operation is performed, not XORing of padding constants. +static void compress_block(unsigned char *state, unsigned char *out, + const unsigned char *d, compress_mode mode, + unsigned long long offset, unsigned long long n) { + if (mode == CIPHERTEXT) { + xor_bytes(out + offset, state, d + offset, n); + memcpy(state, d + offset, n); + } else { + xor_bytes(state, state, d + offset, n); + if (mode == PLAINTEXT) { + memcpy(out + offset, state, n); + } + } +} + +// Compress a block into the state (in duplex-sponge mode). +// Input data buffer is d with length dlen. +// Output is written into buffer out if mode is PLAINTEXT or CIPHERTEXT. +// Padding is handled if needed. +static unsigned long long compress_data(shadow_state state, + unsigned char *out, + const unsigned char *d, + unsigned long long dlen, + compress_mode mode) { + unsigned long long i; + for (i = 0; i < dlen / RATE_BYTES; i++) { + compress_block((uint8_t *)state, out, d, mode, i * RATE_BYTES, RATE_BYTES); + shadow(state); + } + int rem = dlen % RATE_BYTES; + if (rem != 0) { + compress_block((uint8_t *)state, out, d, mode, i * RATE_BYTES, rem); + ((uint8_t *)state)[rem] ^= 0x01; + ((uint8_t *)state)[RATE_BYTES] ^= 0x02; + shadow(state); + } + return i * RATE_BYTES + rem; +} + +// XOR buffers src1 and src2 into buffer dest (all buffers contain n bytes). +void xor_bytes(unsigned char* dest, const unsigned char* src1, + const unsigned char* src2, unsigned long long n) { + for ( unsigned long long i = 0; i < n; i++) { + dest[i] = src1[i] ^ src2[i]; + } +} diff --git a/spook/Implementations/crypto_aead/spook128su512v2/opt_c/s1p.h b/spook/Implementations/crypto_aead/spook128su512v2/opt_c/s1p.h new file mode 100644 index 0000000..314f86a --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128su512v2/opt_c/s1p.h @@ -0,0 +1,47 @@ +/* MIT License + * + * Copyright (c) 2019 Gaëtan Cassiers + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#ifndef _H_S1P_H_ +#define _H_S1P_H_ + +#include "parameters.h" + +// Size of the P parameter +#define P_NBYTES 16 + +void s1p_encrypt(unsigned char *c, unsigned long long *clen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *m, unsigned long long mlen, + const unsigned char *k, const unsigned char *p, + const unsigned char *n); + +int s1p_decrypt(unsigned char *m, unsigned long long *mlen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *c, unsigned long long clen, + const unsigned char *k, const unsigned char *p, + const unsigned char *n); + +void init_keys(const unsigned char **k, unsigned char p[P_NBYTES], + const unsigned char *k_glob); + +#endif //_H_S1P_H_ diff --git a/spook/Implementations/crypto_aead/spook128su512v2/opt_c/shadow_32bit.c b/spook/Implementations/crypto_aead/spook128su512v2/opt_c/shadow_32bit.c new file mode 100644 index 0000000..fb79619 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128su512v2/opt_c/shadow_32bit.c @@ -0,0 +1,53 @@ +/* MIT + * + * Copyright (c) 2019 Gaëtan Cassiers + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#include +#include +#include "primitives.h" + +#define SHADOW +#include "primitives.c" + +#define CLYDE_128_NS 6 // Number of steps +#define CLYDE_128_NR 2 * CLYDE_128_NS // Number of rounds +#define SHADOW_NS 6 // Number of steps +#define SHADOW_NR 2 * SHADOW_NS // Number of roundsv +void shadow(shadow_state state) { + uint32_t lfsr =0xf8737400; // LFSR for round constant + set_poly_xtime(0x101); + set_poly_lfsr(0xc5); + for (unsigned int s = 0; s < SHADOW_NS; s++) { + #pragma GCC unroll 0 + for (unsigned int b = 0; b < MLS_BUNDLES; b++){ + sbox_layer(state[b]); + lbox(&state[b][0], &state[b][1]); + lbox(&state[b][2], &state[b][3]); + + state[b][1] ^= lfsr; + lfsr = update_lfsr(lfsr); + sbox_layer(state[b]); + } + dbox_mls_layer(state,&lfsr); + + } +} diff --git a/spook/Implementations/crypto_aead/spook128su512v2/opt_c/utils.c b/spook/Implementations/crypto_aead/spook128su512v2/opt_c/utils.c new file mode 100644 index 0000000..6ce3172 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128su512v2/opt_c/utils.c @@ -0,0 +1,44 @@ +/* Spook Reference Implementation v1 + * + * Written in 2019 at UCLouvain (Belgium) by Olivier Bronchain, Gaetan Cassiers + * and Charles Momin. + * To the extent possible under law, the author(s) have dedicated all copyright + * and related and neighboring rights to this software to the public domain + * worldwide. This software is distributed without any warranty. + * + * You should have received a copy of the CC0 Public Domain Dedication along with + * this software. If not, see . + */ +#include + +#include "utils.h" + +// XOR buffers src1 and src2 into buffer dest (all buffers contain n bytes). +void xor_bytes(unsigned char* dest, const unsigned char* src1, + const unsigned char* src2, unsigned long long n) { + for (unsigned long long i = 0; i < n; i++) { + dest[i] = src1[i] ^ src2[i]; + } +} + +// Rotate right x by amount c. +// We use right rotation of integers for the lboxes while the specification +// tells left rotation of bitstrings due to the bitsting -> integer +// little-endian mapping used in Spook. +//uint32_t rotr(uint32_t x, unsigned int c) { return (x >> c) | (x << (32 - c)); } + +// Convert 4 bytes into a uint32. Bytes are in little-endian. +uint32_t le32u_dec(const unsigned char bytes[4]) { + uint32_t res = 0; + for (unsigned int col = 0; col < 4; col++) { + res |= ((uint32_t)bytes[col]) << 8 * col; + } + return res; +} + +// Convert a uint32 into 4 bytes. Bytes are in little-endian. +void le32u_enc(unsigned char bytes[4], uint32_t x) { + for (unsigned int i = 0; i < 4; i++) { + bytes[i] = x >> 8 * i; + } +} diff --git a/spook/Implementations/crypto_aead/spook128su512v2/opt_c/utils.h b/spook/Implementations/crypto_aead/spook128su512v2/opt_c/utils.h new file mode 100644 index 0000000..c69647d --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128su512v2/opt_c/utils.h @@ -0,0 +1,26 @@ +/* Spook Reference Implementation v1 + * + * Written in 2019 at UCLouvain (Belgium) by Olivier Bronchain, Gaetan Cassiers + * and Charles Momin. + * To the extent possible under law, the author(s) have dedicated all copyright + * and related and neighboring rights to this software to the public domain + * worldwide. This software is distributed without any warranty. + * + * You should have received a copy of the CC0 Public Domain Dedication along with + * this software. If not, see . + */ +#ifndef _H_UTILS_H_ +#define _H_UTILS_H_ + +#include + +void xor_bytes(unsigned char* dest, const unsigned char* src1, + const unsigned char* src2, unsigned long long n); + +//uint32_t rotr(uint32_t x, unsigned int c); + +uint32_t le32u_dec(const unsigned char bytes[4]); + +void le32u_enc(unsigned char bytes[4], uint32_t x); + +#endif // _H_UTILS_H_ diff --git a/spook/Implementations/crypto_aead/spook128su512v2/ref/COPYING b/spook/Implementations/crypto_aead/spook128su512v2/ref/COPYING new file mode 100644 index 0000000..0e259d4 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128su512v2/ref/COPYING @@ -0,0 +1,121 @@ +Creative Commons Legal Code + +CC0 1.0 Universal + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS + PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM + THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED + HEREUNDER. + +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer +exclusive Copyright and Related Rights (defined below) upon the creator +and subsequent owner(s) (each and all, an "owner") of an original work of +authorship and/or a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for +the purpose of contributing to a commons of creative, cultural and +scientific works ("Commons") that the public can reliably and without fear +of later claims of infringement build upon, modify, incorporate in other +works, reuse and redistribute as freely as possible in any form whatsoever +and for any purposes, including without limitation commercial purposes. +These owners may contribute to the Commons to promote the ideal of a free +culture and the further production of creative, cultural and scientific +works, or to gain reputation or greater distribution for their Work in +part through the use and efforts of others. + +For these and/or other purposes and motivations, and without any +expectation of additional consideration or compensation, the person +associating CC0 with a Work (the "Affirmer"), to the extent that he or she +is an owner of Copyright and Related Rights in the Work, voluntarily +elects to apply CC0 to the Work and publicly distribute the Work under its +terms, with knowledge of his or her Copyright and Related Rights in the +Work and the meaning and intended legal effect of CC0 on those rights. + +1. Copyright and Related Rights. A Work made available under CC0 may be +protected by copyright and related or neighboring rights ("Copyright and +Related Rights"). Copyright and Related Rights include, but are not +limited to, the following: + + i. the right to reproduce, adapt, distribute, perform, display, + communicate, and translate a Work; + ii. moral rights retained by the original author(s) and/or performer(s); +iii. publicity and privacy rights pertaining to a person's image or + likeness depicted in a Work; + iv. rights protecting against unfair competition in regards to a Work, + subject to the limitations in paragraph 4(a), below; + v. rights protecting the extraction, dissemination, use and reuse of data + in a Work; + vi. database rights (such as those arising under Directive 96/9/EC of the + European Parliament and of the Council of 11 March 1996 on the legal + protection of databases, and under any national implementation + thereof, including any amended or successor version of such + directive); and +vii. other similar, equivalent or corresponding rights throughout the + world based on applicable law or treaty, and any national + implementations thereof. + +2. Waiver. To the greatest extent permitted by, but not in contravention +of, applicable law, Affirmer hereby overtly, fully, permanently, +irrevocably and unconditionally waives, abandons, and surrenders all of +Affirmer's Copyright and Related Rights and associated claims and causes +of action, whether now known or unknown (including existing as well as +future claims and causes of action), in the Work (i) in all territories +worldwide, (ii) for the maximum duration provided by applicable law or +treaty (including future time extensions), (iii) in any current or future +medium and for any number of copies, and (iv) for any purpose whatsoever, +including without limitation commercial, advertising or promotional +purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each +member of the public at large and to the detriment of Affirmer's heirs and +successors, fully intending that such Waiver shall not be subject to +revocation, rescission, cancellation, termination, or any other legal or +equitable action to disrupt the quiet enjoyment of the Work by the public +as contemplated by Affirmer's express Statement of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason +be judged legally invalid or ineffective under applicable law, then the +Waiver shall be preserved to the maximum extent permitted taking into +account Affirmer's express Statement of Purpose. In addition, to the +extent the Waiver is so judged Affirmer hereby grants to each affected +person a royalty-free, non transferable, non sublicensable, non exclusive, +irrevocable and unconditional license to exercise Affirmer's Copyright and +Related Rights in the Work (i) in all territories worldwide, (ii) for the +maximum duration provided by applicable law or treaty (including future +time extensions), (iii) in any current or future medium and for any number +of copies, and (iv) for any purpose whatsoever, including without +limitation commercial, advertising or promotional purposes (the +"License"). The License shall be deemed effective as of the date CC0 was +applied by Affirmer to the Work. Should any part of the License for any +reason be judged legally invalid or ineffective under applicable law, such +partial invalidity or ineffectiveness shall not invalidate the remainder +of the License, and in such case Affirmer hereby affirms that he or she +will not (i) exercise any of his or her remaining Copyright and Related +Rights in the Work or (ii) assert any associated claims and causes of +action with respect to the Work, in either case contrary to Affirmer's +express Statement of Purpose. + +4. Limitations and Disclaimers. + + a. No trademark or patent rights held by Affirmer are waived, abandoned, + surrendered, licensed or otherwise affected by this document. + b. Affirmer offers the Work as-is and makes no representations or + warranties of any kind concerning the Work, express, implied, + statutory or otherwise, including without limitation warranties of + title, merchantability, fitness for a particular purpose, non + infringement, or the absence of latent or other defects, accuracy, or + the present or absence of errors, whether or not discoverable, all to + the greatest extent permissible under applicable law. + c. Affirmer disclaims responsibility for clearing rights of other persons + that may apply to the Work or any use thereof, including without + limitation any person's Copyright and Related Rights in the Work. + Further, Affirmer disclaims responsibility for obtaining any necessary + consents, permissions or other rights required for any use of the + Work. + d. Affirmer understands and acknowledges that Creative Commons is not a + party to this document and has no duty or obligation with respect to + this CC0 or use of the Work. diff --git a/spook/Implementations/crypto_aead/spook128su512v2/ref/api.h b/spook/Implementations/crypto_aead/spook128su512v2/ref/api.h new file mode 100644 index 0000000..fb337c3 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128su512v2/ref/api.h @@ -0,0 +1,5 @@ +#define CRYPTO_KEYBYTES 16 +#define CRYPTO_NPUBBYTES 16 +#define CRYPTO_NSECBYTES 0 +#define CRYPTO_ABYTES 16 +#define CRYPTO_NOOVERLAP 1 diff --git a/spook/Implementations/crypto_aead/spook128su512v2/ref/crypto_aead.h b/spook/Implementations/crypto_aead/spook128su512v2/ref/crypto_aead.h new file mode 100644 index 0000000..53ec4a7 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128su512v2/ref/crypto_aead.h @@ -0,0 +1,12 @@ + +int crypto_aead_encrypt(unsigned char* c, unsigned long long* clen, + const unsigned char* m, unsigned long long mlen, + const unsigned char* ad, unsigned long long adlen, + const unsigned char* nsec, const unsigned char* npub, + const unsigned char* k); + +int crypto_aead_decrypt(unsigned char* m, unsigned long long* mlen, + unsigned char* nsec, const unsigned char* c, + unsigned long long clen, const unsigned char* ad, + unsigned long long adlen, const unsigned char* npub, + const unsigned char* k); diff --git a/spook/Implementations/crypto_aead/spook128su512v2/ref/encrypt.c b/spook/Implementations/crypto_aead/spook128su512v2/ref/encrypt.c new file mode 100644 index 0000000..ff54a62 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128su512v2/ref/encrypt.c @@ -0,0 +1,57 @@ +/* Spook Reference Implementation v1 + * + * Written in 2019 at UCLouvain (Belgium) by Olivier Bronchain, Gaetan Cassiers + * and Charles Momin. + * To the extent possible under law, the author(s) have dedicated all copyright + * and related and neighboring rights to this software to the public domain + * worldwide. This software is distributed without any warranty. + * + * You should have received a copy of the CC0 Public Domain Dedication along + * with this software. If not, see + * . + */ +#include "crypto_aead.h" +#include "s1p.h" + +#ifdef __GNUC__ +#define UNUSED __attribute__((unused)) +#else +#define UNUSED +#endif + +// Spook encryption. +int +crypto_aead_encrypt(unsigned char* c, + unsigned long long* clen, + const unsigned char* m, + unsigned long long mlen, + const unsigned char* ad, + unsigned long long adlen, + const unsigned char* nsec UNUSED, + const unsigned char* npub, + const unsigned char* k) +{ + unsigned char p[P_NBYTES]; + const unsigned char* k_priv; + init_keys(&k_priv, p, k); + s1p_encrypt(c, clen, ad, adlen, m, mlen, k_priv, p, npub); + return 0; +} + +// Spook encryption. +int +crypto_aead_decrypt(unsigned char* m, + unsigned long long* mlen, + unsigned char* nsec UNUSED, + const unsigned char* c, + unsigned long long clen, + const unsigned char* ad, + unsigned long long adlen, + const unsigned char* npub, + const unsigned char* k) +{ + unsigned char p[P_NBYTES]; + const unsigned char* k_priv; + init_keys(&k_priv, p, k); + return s1p_decrypt(m, mlen, ad, adlen, c, clen, k_priv, p, npub); +} diff --git a/spook/Implementations/crypto_aead/spook128su512v2/ref/parameters.h b/spook/Implementations/crypto_aead/spook128su512v2/ref/parameters.h new file mode 100644 index 0000000..2e3c4b5 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128su512v2/ref/parameters.h @@ -0,0 +1,30 @@ +/* Spook Reference Implementation v1 + * + * Written in 2019 at UCLouvain (Belgium) by Olivier Bronchain, Gaetan Cassiers + * and Charles Momin. + * To the extent possible under law, the author(s) have dedicated all copyright + * and related and neighboring rights to this software to the public domain + * worldwide. This software is distributed without any warranty. + * + * You should have received a copy of the CC0 Public Domain Dedication along with + * this software. If not, see . + */ +#ifndef _PARAMETERS_H_ +#define _PARAMETERS_H_ + +#define MULTI_USER 0 +#define SMALL_PERM 0 + +#if MULTI_USER +#define KEYBYTES 32 +#else +#define KEYBYTES 16 +#endif + +#include "api.h" + +#if (KEYBYTES != CRYPTO_KEYBYTES) +#error "Wrong parameters in api.h" +#endif + +#endif //_PARAMETERS_H_ diff --git a/spook/Implementations/crypto_aead/spook128su512v2/ref/primitives.c b/spook/Implementations/crypto_aead/spook128su512v2/ref/primitives.c new file mode 100644 index 0000000..3c8806a --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128su512v2/ref/primitives.c @@ -0,0 +1,381 @@ +/* Spook Reference Implementation v1 + * + * Written in 2019 at UCLouvain (Belgium) by Olivier Bronchain, Gaetan Cassiers + * and Charles Momin. + * To the extent possible under law, the author(s) have dedicated all copyright + * and related and neighboring rights to this software to the public domain + * worldwide. This software is distributed without any warranty. + * + * You should have received a copy of the CC0 Public Domain Dedication along + * with this software. If not, see + * . + */ +#include +#include + +#include "primitives.h" +#include "utils.h" + +#define CLYDE_128_NS 6 // Number of steps +#define CLYDE_128_NR 2 * CLYDE_128_NS // Number of rounds +#define SHADOW_NS 6 // Number of steps +#define SHADOW_NR 2 * SHADOW_NS // Number of rounds + +#define LS_ROWS 4 // Rows in the LS design +#define LS_ROW_BYTES 4 // number of bytes per row in the LS design +#define MLS_BUNDLES \ + (SHADOW_NBYTES / (LS_ROWS * LS_ROW_BYTES)) // Bundles in the mLS design + +static void +sbox_layer(uint32_t* state); +static void +sbox_layer_inv(uint32_t* state); +static void +lbox(uint32_t* x, uint32_t* y); +static void +lbox_inv(uint32_t* x, uint32_t* y); +static void +lbox_layer(uint32_t* state); +static void +lbox_layer_inv(uint32_t* state); +static void +bytes2state(uint32_t* state, const unsigned char* byte); +static void +state2bytes(unsigned char* bytes, const uint32_t* state); +static void +xor_ls_state(uint32_t* state, const uint32_t* x); +static void +add_rc(uint32_t state[LS_ROWS], unsigned int round); +static void +tweakey(unsigned char tk[3][CLYDE128_NBYTES], + const unsigned char* k, + const unsigned char* t); +static uint32_t +update_lfsr(uint32_t lfsr); +static uint32_t +xtime(uint32_t x); +static void +dbox_mls_layer(uint32_t state[MLS_BUNDLES][LS_ROWS]); + +// Round constants for Clyde-128 +static const uint32_t clyde128_rc[CLYDE_128_NR][LS_ROWS] = { + { 1, 0, 0, 0 }, // 0 + { 0, 1, 0, 0 }, // 1 + { 0, 0, 1, 0 }, // 2 + { 0, 0, 0, 1 }, // 3 + { 1, 1, 0, 0 }, // 4 + { 0, 1, 1, 0 }, // 5 + { 0, 0, 1, 1 }, // 6 + { 1, 1, 0, 1 }, // 7 + { 1, 0, 1, 0 }, // 8 + { 0, 1, 0, 1 }, // 9 + { 1, 1, 1, 0 }, // 10 + { 0, 1, 1, 1 } // 11 +}; +static const uint32_t CST_LFSR_POLY_MASK = 0xc5; +// Initial value of the constant generation polynomial +// This is the result of applying the LFSR function 1024 times +// the value 0x1. +static const uint32_t CST_LFSR_INIT_VALUE = 0xf8737400; +// Row on which to XOR the constant in Shadow Round A +static const uint32_t SHADOW_RA_CST_ROW = 1; +// Bundle on which to XOR the constant in Shadow Round B +static const uint32_t SHADOW_RB_CST_BUNDLE = 0; + +// Apply a S-box layer to a Clyde-128 state. +static void +sbox_layer(uint32_t* state) +{ + uint32_t y1 = (state[0] & state[1]) ^ state[2]; + uint32_t y0 = (state[3] & state[0]) ^ state[1]; + uint32_t y3 = (y1 & state[3]) ^ state[0]; + uint32_t y2 = (y0 & y1) ^ state[3]; + state[0] = y0; + state[1] = y1; + state[2] = y2; + state[3] = y3; +} + +// Apply a inverse S-box layer to a Clyde-128 state. +static void +sbox_layer_inv(uint32_t* state) +{ + uint32_t y3 = (state[0] & state[1]) ^ state[2]; + uint32_t y0 = (state[1] & y3) ^ state[3]; + uint32_t y1 = (y3 & y0) ^ state[0]; + uint32_t y2 = (y0 & y1) ^ state[1]; + state[0] = y0; + state[1] = y1; + state[2] = y2; + state[3] = y3; +} + +// Apply a L-box to a pair of Clyde-128 rows. +static void +lbox(uint32_t* x, uint32_t* y) +{ + uint32_t a, b, c, d; + a = *x ^ rotr(*x, 12); + b = *y ^ rotr(*y, 12); + a = a ^ rotr(a, 3); + b = b ^ rotr(b, 3); + a = a ^ rotr(*x, 17); + b = b ^ rotr(*y, 17); + c = a ^ rotr(a, 31); + d = b ^ rotr(b, 31); + a = a ^ rotr(d, 26); + b = b ^ rotr(c, 25); + a = a ^ rotr(c, 15); + b = b ^ rotr(d, 15); + *x = a; + *y = b; +} + +// Apply a inverse L-box to a pair of Clyde-128 rows. +static void +lbox_inv(uint32_t* x, uint32_t* y) +{ + uint32_t a, b, c, d; + a = *x ^ rotr(*x, 25); + b = *y ^ rotr(*y, 25); + c = *x ^ rotr(a, 31); + d = *y ^ rotr(b, 31); + c = c ^ rotr(a, 20); + d = d ^ rotr(b, 20); + a = c ^ rotr(c, 31); + b = d ^ rotr(d, 31); + c = c ^ rotr(b, 26); + d = d ^ rotr(a, 25); + a = a ^ rotr(c, 17); + b = b ^ rotr(d, 17); + a = rotr(a, 16); + b = rotr(b, 16); + *x = a; + *y = b; +} + +// Apply a L-box layer to a Clyde-128 state. +static void +lbox_layer(uint32_t* state) +{ + lbox(&state[0], &state[1]); + lbox(&state[2], &state[3]); +} + +// Apply inverse L-box layer to a Clyde-128 state. +static void +lbox_layer_inv(uint32_t* state) +{ + lbox_inv(&state[0], &state[1]); + lbox_inv(&state[2], &state[3]); +} + +// Convert bytes to a Clyde-128 state. Bytes are in ordered by row (first-row +// first), and in little-endian order inside a row. +static void +bytes2state(uint32_t* state, const unsigned char* bytes) +{ + for (unsigned int row = 0; row < LS_ROWS; row++) { + state[row] = le32u_dec(bytes + 4 * row); + } +} + +// Convert Clyde-128 state to bytes. Bytes are in ordered by row (first-row +// first), and in little-endian order inside a row. +static void +state2bytes(unsigned char* bytes, const uint32_t* state) +{ + for (unsigned int row = 0; row < LS_ROWS; row++) { + le32u_enc(bytes + 4 * row, state[row]); + } +} + +// XOR the Clyde-128 state x into state. +static void +xor_ls_state(uint32_t* state, const uint32_t* x) +{ + for (unsigned int i = 0; i < LS_ROWS; i++) { + state[i] ^= x[i]; + } +} + +// XOR the Clyde-128 round constant of given round into state, left shifting +// each constant by shift. +static void +add_rc(uint32_t state[LS_ROWS], unsigned int round) +{ + for (unsigned int i = 0; i < LS_ROWS; i++) { + state[i] ^= clyde128_rc[round][i]; + } +} + +// Key schedule for Clyde-128. Generate 3 Clyde-128 states from key k and tweak +// t. +static void +tweakey(unsigned char tk[3][CLYDE128_NBYTES], + const unsigned char* k, + const unsigned char* t) +{ + const unsigned char* t0 = t; + const unsigned char* t1 = t + CLYDE128_NBYTES / 2; + unsigned char tx[CLYDE128_NBYTES / 2]; + xor_bytes(tx, t0, t1, CLYDE128_NBYTES / 2); + // TK[0] + xor_bytes(tk[0], k, t, CLYDE128_NBYTES); + // TK[1] + xor_bytes(tk[1], k, tx, CLYDE128_NBYTES / 2); + xor_bytes(tk[1] + CLYDE128_NBYTES / 2, + k + CLYDE128_NBYTES / 2, + t0, + CLYDE128_NBYTES / 2); + // TK[2] + xor_bytes(tk[2], k, t1, CLYDE128_NBYTES / 2); + xor_bytes(tk[2] + CLYDE128_NBYTES / 2, + k + CLYDE128_NBYTES / 2, + tx, + CLYDE128_NBYTES / 2); +} + +// Update (by 1 step) the constant generation LFSR +static uint32_t +update_lfsr(uint32_t lfsr) +{ + // Arithmetic shift left, equivalent to + // uint32_t b_out_ext = (lfsr & 0x80000000) ? 0xffffffff : 0x0; + // but constant-time. + uint32_t b_out_ext = (uint32_t)(((int32_t)lfsr) >> 31); + return (lfsr << 1) ^ (b_out_ext & CST_LFSR_POLY_MASK); +} + +// Multiplication by polynomial x modulo x^32+x^8+1 +static uint32_t +xtime(uint32_t x) +{ + uint32_t b = x >> 31; + return (x << 1) ^ b ^ (b << 8); +} + +// Apply a D-box layer to a Shadow state. +static void +dbox_mls_layer(uint32_t state[MLS_BUNDLES][LS_ROWS]) +{ + for (unsigned int row = 0; row < LS_ROWS; row++) { +#if SMALL_PERM + uint32_t x0 = state[0][row]; + uint32_t x1 = state[1][row]; + uint32_t x2 = state[2][row]; + uint32_t a = x0 ^ x1; + uint32_t b = x0 ^ x2; + uint32_t c = x1 ^ b; + uint32_t d = a ^ xtime(b); + state[0][row] = b ^ d; + state[1][row] = c; + state[2][row] = d; +#else + state[0][row] ^= state[1][row]; + state[2][row] ^= state[3][row]; + state[1][row] ^= state[2][row]; + state[3][row] ^= xtime(state[0][row]); + state[1][row] = xtime(state[1][row]); + state[0][row] ^= state[1][row]; + state[2][row] ^= xtime(state[3][row]); + state[1][row] ^= state[2][row]; + state[3][row] ^= state[0][row]; +#endif // SMALL_PERM + } +} + +// Clyde-128 TBC. +// Output in buffer c the TBC for block m, tweak t and key k. +// All buffers have length CLYDE128_NBYTES. +void +clyde128_encrypt(unsigned char* c, + const unsigned char* m, + const unsigned char* t, + const unsigned char* k) +{ + // Key schedule + unsigned char tkb[3][CLYDE128_NBYTES]; + uint32_t tk[3][LS_ROWS]; + tweakey(tkb, k, t); + bytes2state(tk[0], tkb[0]); + bytes2state(tk[1], tkb[1]); + bytes2state(tk[2], tkb[2]); + + // Datapath + uint32_t state[LS_ROWS]; + bytes2state(state, m); + xor_ls_state(state, tk[0]); + for (unsigned int s = 0; s < CLYDE_128_NS; s++) { + for (unsigned int rho = 0; rho < 2; rho++) { + unsigned int r = 2 * s + rho; + sbox_layer(state); + lbox_layer(state); + add_rc(state, r); + } + xor_ls_state(state, tk[(s + 1) % 3]); + } + + state2bytes(c, state); +} + +// Clyde-128 inverse TBC. +// Output in buffer m the inverse TBC for block c, tweak t and key k. +// All buffers have length CLYDE128_NBYTES. +void +clyde128_decrypt(unsigned char* m, + const unsigned char* c, + const unsigned char* t, + const unsigned char* k) +{ + // Key schedule + unsigned char tkb[3][CLYDE128_NBYTES]; + uint32_t tk[3][LS_ROWS]; + tweakey(tkb, k, t); + bytes2state(tk[0], tkb[0]); + bytes2state(tk[1], tkb[1]); + bytes2state(tk[2], tkb[2]); + + // Datapath + uint32_t state[LS_ROWS]; + bytes2state(state, c); + for (int s = CLYDE_128_NS - 1; s >= 0; s--) { + xor_ls_state(state, tk[(s + 1) % 3]); + for (int rho = 1; rho >= 0; rho--) { + unsigned int r = 2 * s + rho; + add_rc(state, r); + lbox_layer_inv(state); + sbox_layer_inv(state); + } + } + xor_ls_state(state, tk[0]); + state2bytes(m, state); +} + +// Shadow permutation. Updates x (array of SHADOW_NBYTES bytes). +void +shadow(unsigned char* x) +{ + uint32_t state[MLS_BUNDLES][LS_ROWS]; + uint32_t lfsr = CST_LFSR_INIT_VALUE; + for (unsigned int b = 0; b < MLS_BUNDLES; b++) { + bytes2state(state[b], x + (b * SHADOW_NBYTES / MLS_BUNDLES)); + } + for (unsigned int s = 0; s < SHADOW_NS; s++) { + for (unsigned int b = 0; b < MLS_BUNDLES; b++) { + sbox_layer(state[b]); + lbox_layer(state[b]); + state[b][SHADOW_RA_CST_ROW] ^= lfsr; + lfsr = update_lfsr(lfsr); + sbox_layer(state[b]); + } + dbox_mls_layer(state); + for (unsigned int row = 0; row < LS_ROWS; row++) { + state[SHADOW_RB_CST_BUNDLE][row] ^= lfsr; + lfsr = update_lfsr(lfsr); + } + } + for (unsigned int b = 0; b < MLS_BUNDLES; b++) { + state2bytes(x + (b * SHADOW_NBYTES / MLS_BUNDLES), state[b]); + } +} diff --git a/spook/Implementations/crypto_aead/spook128su512v2/ref/primitives.h b/spook/Implementations/crypto_aead/spook128su512v2/ref/primitives.h new file mode 100644 index 0000000..3a1467d --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128su512v2/ref/primitives.h @@ -0,0 +1,41 @@ +/* Spook Reference Implementation v1 + * + * Written in 2019 at UCLouvain (Belgium) by Olivier Bronchain, Gaetan Cassiers + * and Charles Momin. + * To the extent possible under law, the author(s) have dedicated all copyright + * and related and neighboring rights to this software to the public domain + * worldwide. This software is distributed without any warranty. + * + * You should have received a copy of the CC0 Public Domain Dedication along + * with this software. If not, see + * . + */ +#ifndef _H_PRIMITIVES_H_ +#define _H_PRIMITIVES_H_ + +#include "parameters.h" + +#define CLYDE128_NBYTES 16 + +#if SMALL_PERM +#define SHADOW_NBYTES 48 +#else +#define SHADOW_NBYTES 64 +#endif // SMALL_PERM + +void +clyde128_encrypt(unsigned char* c, + const unsigned char* m, + const unsigned char* t, + const unsigned char* k); + +void +clyde128_decrypt(unsigned char* m, + const unsigned char* c, + const unsigned char* t, + const unsigned char* k); + +void +shadow(unsigned char* x); + +#endif //_H_PRIMITIVES_H_ diff --git a/spook/Implementations/crypto_aead/spook128su512v2/ref/s1p.c b/spook/Implementations/crypto_aead/spook128su512v2/ref/s1p.c new file mode 100644 index 0000000..4576c39 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128su512v2/ref/s1p.c @@ -0,0 +1,188 @@ +/* Spook Reference Implementation v1 + * + * Written in 2019 at UCLouvain (Belgium) by Olivier Bronchain, Gaetan Cassiers + * and Charles Momin. + * To the extent possible under law, the author(s) have dedicated all copyright + * and related and neighboring rights to this software to the public domain + * worldwide. This software is distributed without any warranty. + * + * You should have received a copy of the CC0 Public Domain Dedication along with + * this software. If not, see . + */ +#include +#include +#include + +#include "s1p.h" +#include "parameters.h" +#include "primitives.h" +#include "utils.h" + +#define CAPACITY_BYTES 32 +#define RATE_BYTES (SHADOW_NBYTES - CAPACITY_BYTES) + +// Working mode for block compression. +typedef enum { + AD, + PLAINTEXT, + CIPHERTEXT +} compress_mode; + +static void compress_block(unsigned char *state, unsigned char *out, + const unsigned char *d, compress_mode mode, + unsigned long long offset, unsigned long long n); + +static unsigned long long compress_data(unsigned char *state, + unsigned char *out, + const unsigned char *d, + unsigned long long dlen, + compress_mode mode); + +static void init_sponge_state(unsigned char state[SHADOW_NBYTES], + const unsigned char *k, const unsigned char *p, + const unsigned char *n); + +void init_keys(const unsigned char **k, unsigned char p[P_NBYTES], + const unsigned char *k_glob) { + *k = k_glob; +#if MULTI_USER + memcpy(p, k_glob + CLYDE128_NBYTES, P_NBYTES); + p[P_NBYTES - 1] &= 0x7F; // set last p bit to 0 + p[P_NBYTES - 1] |= 0x40; // set next to last p bit to 0 +#else + memset(p, 0, P_NBYTES); +#endif // MULTI_USER +} + +static void init_sponge_state(unsigned char state[SHADOW_NBYTES], + const unsigned char *k, const unsigned char *p, + const unsigned char *n) { + // init state + memset(state, 0, SHADOW_NBYTES); + memcpy(state + CLYDE128_NBYTES, p, P_NBYTES); + memcpy(state + CLYDE128_NBYTES + P_NBYTES, n, CRYPTO_NPUBBYTES); + // TBC + unsigned char padded_nonce[CLYDE128_NBYTES] = { 0 }; + memcpy(padded_nonce, n, CRYPTO_NPUBBYTES); + unsigned char *b = state; + clyde128_encrypt(b, padded_nonce, p, k); + // initial permutation + shadow(state); +} + +void s1p_encrypt(unsigned char *c, unsigned long long *clen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *m, unsigned long long mlen, + const unsigned char *k, const unsigned char *p, + const unsigned char *n) { + // permutation state + unsigned char state[SHADOW_NBYTES]; + init_sponge_state(state, k, p, n); + + // compress associated data + compress_data(state, NULL, ad, adlen, AD); + + // compress message + unsigned long long c_bytes = 0; + if (mlen > 0) { + state[RATE_BYTES] ^= 0x01; + c_bytes = compress_data(state, c, m, mlen, PLAINTEXT); + } + + // tag + state[CLYDE128_NBYTES + CLYDE128_NBYTES - 1] |= 0x80; + clyde128_encrypt(c + c_bytes, state, state + CLYDE128_NBYTES, k); + *clen = c_bytes + CLYDE128_NBYTES; +} + +int s1p_decrypt(unsigned char *m, unsigned long long *mlen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *c, unsigned long long clen, + const unsigned char *k, const unsigned char *p, + const unsigned char *n) { + // permutation state + unsigned char state[SHADOW_NBYTES]; + init_sponge_state(state, k, p, n); + + // compress associated data + compress_data(state, NULL, ad, adlen, AD); + + // compress message + unsigned long long m_bytes = 0; + if (clen > CLYDE128_NBYTES) { + state[RATE_BYTES] ^= 0x01; + m_bytes = compress_data(state, m, c, clen - CLYDE128_NBYTES, CIPHERTEXT); + } + + // NOTE: We use here so-called "inverse-based tag verification", + // that is, we apply the inverse Clyde TBC to the tag extracted from + // the ciphertext and check the result against the output of Shadow. + // This way of verifying the tag is interesting in some specific cases + // such as side-channel protected implementations. + // In general implementations, the tag verification SHOULD be done in a + // more conventional way: encrypting the output of Shadow with Clyde and + // verifying the tag against the resulting value. + // This is more efficient as it does not require to implement the inverse + // Clyde. + // For more details, see the Spook specification at https://spook.dev. + unsigned char inv_tag[CLYDE128_NBYTES]; + unsigned char *u = state; + state[(2 * CLYDE128_NBYTES) - 1] |= 0x80; + clyde128_decrypt(inv_tag, c + m_bytes, state + CLYDE128_NBYTES, k); + int tag_ok = 1; + for (int i = 0; i < CLYDE128_NBYTES; i++) { + tag_ok &= (u[i] == inv_tag[i]); + } + if (tag_ok) { + *mlen = m_bytes; + return 0; + } else { + // Reset output buffer to avoid unintended unauthenticated plaintext + // release. + memset(m, 0, clen - CLYDE128_NBYTES); + *mlen = 0; + return -1; + } +} + +// Compress a block into the state. Length of the block is n and buffers are +// accessed starting at offset. Input block is d, output is written into +// buffer out if mode is PLAINTEXT or CIPHERTEXT. +// Only the XOR operation is performed, not XORing of padding constants. +static void compress_block(unsigned char *state, unsigned char *out, + const unsigned char *d, compress_mode mode, + unsigned long long offset, unsigned long long n) { + if (mode == CIPHERTEXT) { + xor_bytes(out + offset, state, d + offset, n); + memcpy(state, d + offset, n); + } else { + xor_bytes(state, state, d + offset, n); + if (mode == PLAINTEXT) { + memcpy(out + offset, state, n); + } + } +} + +// Compress a block into the state (in duplex-sponge mode). +// Input data buffer is d with length dlen. +// Output is written into buffer out if mode is PLAINTEXT or CIPHERTEXT. +// Padding is handled if needed. +static unsigned long long compress_data(unsigned char *state, + unsigned char *out, + const unsigned char *d, + unsigned long long dlen, + compress_mode mode) { + unsigned long long i; + for (i = 0; i < dlen / RATE_BYTES; i++) { + compress_block(state, out, d, mode, i * RATE_BYTES, RATE_BYTES); + shadow(state); + } + int rem = dlen % RATE_BYTES; + if (rem != 0) { + compress_block(state, out, d, mode, i * RATE_BYTES, rem); + state[rem] ^= 0x01; + state[RATE_BYTES] ^= 0x02; + shadow(state); + } + return i * RATE_BYTES + rem; +} diff --git a/spook/Implementations/crypto_aead/spook128su512v2/ref/s1p.h b/spook/Implementations/crypto_aead/spook128su512v2/ref/s1p.h new file mode 100644 index 0000000..2018568 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128su512v2/ref/s1p.h @@ -0,0 +1,35 @@ +/* Spook Reference Implementation v1 + * + * Written in 2019 at UCLouvain (Belgium) by Olivier Bronchain, Gaetan Cassiers + * and Charles Momin. + * To the extent possible under law, the author(s) have dedicated all copyright + * and related and neighboring rights to this software to the public domain + * worldwide. This software is distributed without any warranty. + * + * You should have received a copy of the CC0 Public Domain Dedication along with + * this software. If not, see . + */ +#ifndef _H_S1P_H_ +#define _H_S1P_H_ + +#include "parameters.h" + +// Size of the P parameter +#define P_NBYTES 16 + +void s1p_encrypt(unsigned char *c, unsigned long long *clen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *m, unsigned long long mlen, + const unsigned char *k, const unsigned char *p, + const unsigned char *n); + +int s1p_decrypt(unsigned char *m, unsigned long long *mlen, + const unsigned char *ad, unsigned long long adlen, + const unsigned char *c, unsigned long long clen, + const unsigned char *k, const unsigned char *p, + const unsigned char *n); + +void init_keys(const unsigned char **k, unsigned char p[P_NBYTES], + const unsigned char *k_glob); + +#endif //_H_S1P_H_ diff --git a/spook/Implementations/crypto_aead/spook128su512v2/ref/utils.c b/spook/Implementations/crypto_aead/spook128su512v2/ref/utils.c new file mode 100644 index 0000000..e390c04 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128su512v2/ref/utils.c @@ -0,0 +1,57 @@ +/* Spook Reference Implementation v1 + * + * Written in 2019 at UCLouvain (Belgium) by Olivier Bronchain, Gaetan Cassiers + * and Charles Momin. + * To the extent possible under law, the author(s) have dedicated all copyright + * and related and neighboring rights to this software to the public domain + * worldwide. This software is distributed without any warranty. + * + * You should have received a copy of the CC0 Public Domain Dedication along + * with this software. If not, see + * . + */ +#include + +#include "utils.h" + +// XOR buffers src1 and src2 into buffer dest (all buffers contain n bytes). +void +xor_bytes(unsigned char* dest, + const unsigned char* src1, + const unsigned char* src2, + unsigned long long n) +{ + for (unsigned long long i = 0; i < n; i++) { + dest[i] = src1[i] ^ src2[i]; + } +} + +// Rotate right x by amount c. +// We use right rotation of integers for the lboxes while the specification +// tells left rotation of bitstrings due to the bitsting -> integer +// little-endian mapping used in Spook. +uint32_t +rotr(uint32_t x, unsigned int c) +{ + return (x >> c) | (x << (32 - c)); +} + +// Convert 4 bytes into a uint32. Bytes are in little-endian. +uint32_t +le32u_dec(const unsigned char bytes[4]) +{ + uint32_t res = 0; + for (unsigned int col = 0; col < 4; col++) { + res |= ((uint32_t)bytes[col]) << 8 * col; + } + return res; +} + +// Convert a uint32 into 4 bytes. Bytes are in little-endian. +void +le32u_enc(unsigned char bytes[4], uint32_t x) +{ + for (unsigned int i = 0; i < 4; i++) { + bytes[i] = x >> 8 * i; + } +} diff --git a/spook/Implementations/crypto_aead/spook128su512v2/ref/utils.h b/spook/Implementations/crypto_aead/spook128su512v2/ref/utils.h new file mode 100644 index 0000000..013cdd6 --- /dev/null +++ b/spook/Implementations/crypto_aead/spook128su512v2/ref/utils.h @@ -0,0 +1,33 @@ +/* Spook Reference Implementation v1 + * + * Written in 2019 at UCLouvain (Belgium) by Olivier Bronchain, Gaetan Cassiers + * and Charles Momin. + * To the extent possible under law, the author(s) have dedicated all copyright + * and related and neighboring rights to this software to the public domain + * worldwide. This software is distributed without any warranty. + * + * You should have received a copy of the CC0 Public Domain Dedication along + * with this software. If not, see + * . + */ +#ifndef _H_UTILS_H_ +#define _H_UTILS_H_ + +#include + +void +xor_bytes(unsigned char* dest, + const unsigned char* src1, + const unsigned char* src2, + unsigned long long n); + +uint32_t +rotr(uint32_t x, unsigned int c); + +uint32_t +le32u_dec(const unsigned char bytes[4]); + +void +le32u_enc(unsigned char bytes[4], uint32_t x); + +#endif // _H_UTILS_H_