From 40fde2ff483d989bca4b350195a1e625ce3db163 Mon Sep 17 00:00:00 2001 From: Alexandre Adomnicai Date: Wed, 13 May 2020 10:18:59 +0000 Subject: [PATCH] skinny & romulus --- romulus/Implementations/crypto_aead/romulusm1+v12/LWC_AEAD_KAT_128_128.txt | 7623 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ romulus/Implementations/crypto_aead/romulusm1+v12/armcortexm/api.h | 5 +++++ romulus/Implementations/crypto_aead/romulusm1+v12/armcortexm/crypto_aead.h | 13 +++++++++++++ romulus/Implementations/crypto_aead/romulusm1+v12/armcortexm/encrypt.c | 385 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ romulus/Implementations/crypto_aead/romulusm1+v12/armcortexm/romulus.h | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ romulus/Implementations/crypto_aead/romulusm1+v12/armcortexm/skinny128.h | 15 +++++++++++++++ romulus/Implementations/crypto_aead/romulusm1+v12/armcortexm/skinny128.s | 1706 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ romulus/Implementations/crypto_aead/romulusm1+v12/opt32/api.h | 5 +++++ romulus/Implementations/crypto_aead/romulusm1+v12/opt32/crypto_aead.h | 18 ++++++++++++++++++ romulus/Implementations/crypto_aead/romulusm1+v12/opt32/encrypt.c | 369 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ romulus/Implementations/crypto_aead/romulusm1+v12/opt32/romulus.h | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ romulus/Implementations/crypto_aead/romulusm1+v12/opt32/skinny128.c | 107 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ romulus/Implementations/crypto_aead/romulusm1+v12/opt32/skinny128.h | 95 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ romulus/Implementations/crypto_aead/romulusm1+v12/opt32/tk_schedule.c | 368 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ romulus/Implementations/crypto_aead/romulusm1+v12/opt32/tk_schedule.h | 39 +++++++++++++++++++++++++++++++++++++++ romulus/Implementations/crypto_aead/romulusm1v12/armcortexm/api.h | 5 +++++ romulus/Implementations/crypto_aead/romulusm1v12/armcortexm/crypto_aead.h | 13 +++++++++++++ romulus/Implementations/crypto_aead/romulusm1v12/armcortexm/encrypt.c | 385 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ romulus/Implementations/crypto_aead/romulusm1v12/armcortexm/romulus.h | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ romulus/Implementations/crypto_aead/romulusm1v12/armcortexm/skinny128.h | 17 +++++++++++++++++ romulus/Implementations/crypto_aead/romulusm1v12/armcortexm/skinny128.s | 1974 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ romulus/Implementations/crypto_aead/romulusm1v12/opt32/api.h | 5 +++++ romulus/Implementations/crypto_aead/romulusm1v12/opt32/crypto_aead.h | 18 ++++++++++++++++++ romulus/Implementations/crypto_aead/romulusm1v12/opt32/encrypt.c | 369 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ romulus/Implementations/crypto_aead/romulusm1v12/opt32/romulus.h | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ romulus/Implementations/crypto_aead/romulusm1v12/opt32/skinny128.c | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ romulus/Implementations/crypto_aead/romulusm1v12/opt32/skinny128.h | 94 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ romulus/Implementations/crypto_aead/romulusm1v12/opt32/tk_schedule.c | 379 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ romulus/Implementations/crypto_aead/romulusm1v12/opt32/tk_schedule.h | 39 +++++++++++++++++++++++++++++++++++++++ romulus/Implementations/crypto_aead/romulusn1+v12/LWC_AEAD_KAT_128_128.txt | 7623 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ romulus/Implementations/crypto_aead/romulusn1+v12/armcortexm/api.h | 5 +++++ romulus/Implementations/crypto_aead/romulusn1+v12/armcortexm/crypto_aead.h | 13 +++++++++++++ romulus/Implementations/crypto_aead/romulusn1+v12/armcortexm/encrypt.c | 261 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ romulus/Implementations/crypto_aead/romulusn1+v12/armcortexm/romulus.h | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ romulus/Implementations/crypto_aead/romulusn1+v12/armcortexm/skinny128.h | 15 +++++++++++++++ romulus/Implementations/crypto_aead/romulusn1+v12/armcortexm/skinny128.s | 1706 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ romulus/Implementations/crypto_aead/romulusn1+v12/opt32/api.h | 5 +++++ romulus/Implementations/crypto_aead/romulusn1+v12/opt32/crypto_aead.h | 18 ++++++++++++++++++ romulus/Implementations/crypto_aead/romulusn1+v12/opt32/encrypt.c | 270 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ romulus/Implementations/crypto_aead/romulusn1+v12/opt32/romulus.h | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ romulus/Implementations/crypto_aead/romulusn1+v12/opt32/skinny128.c | 107 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ romulus/Implementations/crypto_aead/romulusn1+v12/opt32/skinny128.h | 95 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ romulus/Implementations/crypto_aead/romulusn1+v12/opt32/tk_schedule.c | 368 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ romulus/Implementations/crypto_aead/romulusn1+v12/opt32/tk_schedule.h | 39 +++++++++++++++++++++++++++++++++++++++ romulus/Implementations/crypto_aead/romulusn1v12/armcortexm/api.h | 5 +++++ romulus/Implementations/crypto_aead/romulusn1v12/armcortexm/crypto_aead.h | 13 +++++++++++++ romulus/Implementations/crypto_aead/romulusn1v12/armcortexm/encrypt.c | 261 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ romulus/Implementations/crypto_aead/romulusn1v12/armcortexm/romulus.h | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ romulus/Implementations/crypto_aead/romulusn1v12/armcortexm/skinny128.h | 17 +++++++++++++++++ romulus/Implementations/crypto_aead/romulusn1v12/armcortexm/skinny128.s | 1974 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ romulus/Implementations/crypto_aead/romulusn1v12/opt32/api.h | 5 +++++ romulus/Implementations/crypto_aead/romulusn1v12/opt32/crypto_aead.h | 18 ++++++++++++++++++ romulus/Implementations/crypto_aead/romulusn1v12/opt32/encrypt.c | 270 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ romulus/Implementations/crypto_aead/romulusn1v12/opt32/romulus.h | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ romulus/Implementations/crypto_aead/romulusn1v12/opt32/skinny128.c | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ romulus/Implementations/crypto_aead/romulusn1v12/opt32/skinny128.h | 94 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ romulus/Implementations/crypto_aead/romulusn1v12/opt32/tk_schedule.c | 379 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ romulus/Implementations/crypto_aead/romulusn1v12/opt32/tk_schedule.h | 39 +++++++++++++++++++++++++++++++++++++++ skinny/Implementations/crypto_aead/skinnyaeadm1+v11/LWC_AEAD_KAT_128_128.txt | 7623 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ skinny/Implementations/crypto_aead/skinnyaeadm1+v11/armcortexm_1/api.h | 5 +++++ skinny/Implementations/crypto_aead/skinnyaeadm1+v11/armcortexm_1/crypto_aead.h | 18 ++++++++++++++++++ skinny/Implementations/crypto_aead/skinnyaeadm1+v11/armcortexm_1/encrypt.c | 201 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ skinny/Implementations/crypto_aead/skinnyaeadm1+v11/armcortexm_1/skinny128.h | 16 ++++++++++++++++ skinny/Implementations/crypto_aead/skinnyaeadm1+v11/armcortexm_1/skinny128.s | 2137 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ skinny/Implementations/crypto_aead/skinnyaeadm1+v11/armcortexm_1/skinnyaead.h | 39 +++++++++++++++++++++++++++++++++++++++ skinny/Implementations/crypto_aead/skinnyaeadm1+v11/armcortexm_2/api.h | 5 +++++ skinny/Implementations/crypto_aead/skinnyaeadm1+v11/armcortexm_2/crypto_aead.h | 13 +++++++++++++ skinny/Implementations/crypto_aead/skinnyaeadm1+v11/armcortexm_2/encrypt.c | 298 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ skinny/Implementations/crypto_aead/skinnyaeadm1+v11/armcortexm_2/skinny128.h | 17 +++++++++++++++++ skinny/Implementations/crypto_aead/skinnyaeadm1+v11/armcortexm_2/skinny128.s | 3426 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ skinny/Implementations/crypto_aead/skinnyaeadm1+v11/armcortexm_2/skinnyaead.h | 40 ++++++++++++++++++++++++++++++++++++++++ skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_1/api.h | 5 +++++ skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_1/crypto_aead.h | 18 ++++++++++++++++++ skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_1/encrypt.c | 197 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_1/skinny128.c | 190 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_1/skinny128.h | 177 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_1/skinnyaead.h | 32 ++++++++++++++++++++++++++++++++ skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_1/tk_schedule.c | 368 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_1/tk_schedule.h | 39 +++++++++++++++++++++++++++++++++++++++ skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_2/api.h | 5 +++++ skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_2/crypto_aead.h | 18 ++++++++++++++++++ skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_2/encrypt.c | 293 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_2/skinny128.c | 202 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_2/skinny128.h | 125 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_2/skinnyaead.h | 32 ++++++++++++++++++++++++++++++++ skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_2/tk_schedule.c | 464 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_2/tk_schedule.h | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/armcortexm_1/api.h | 5 +++++ skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/armcortexm_1/crypto_aead.h | 18 ++++++++++++++++++ skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/armcortexm_1/encrypt.c | 200 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/armcortexm_1/skinny128.h | 16 ++++++++++++++++ skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/armcortexm_1/skinny128.s | 2407 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/armcortexm_1/skinnyaead.h | 39 +++++++++++++++++++++++++++++++++++++++ skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/armcortexm_2/api.h | 5 +++++ skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/armcortexm_2/crypto_aead.h | 13 +++++++++++++ skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/armcortexm_2/encrypt.c | 298 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/armcortexm_2/skinny128.h | 17 +++++++++++++++++ skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/armcortexm_2/skinny128.s | 3935 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/armcortexm_2/skinnyaead.h | 40 ++++++++++++++++++++++++++++++++++++++++ skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_1/api.h | 5 +++++ skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_1/crypto_aead.h | 18 ++++++++++++++++++ skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_1/encrypt.c | 203 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_1/skinny128.c | 198 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_1/skinny128.h | 177 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_1/skinnyaead.h | 32 ++++++++++++++++++++++++++++++++ skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_1/tk_schedule.c | 379 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_1/tk_schedule.h | 39 +++++++++++++++++++++++++++++++++++++++ skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_2/api.h | 5 +++++ skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_2/crypto_aead.h | 18 ++++++++++++++++++ skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_2/encrypt.c | 293 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_2/skinny128.c | 210 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_2/skinny128.h | 127 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_2/skinnyaead.h | 32 ++++++++++++++++++++++++++++++++ skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_2/tk_schedule.c | 496 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_2/tk_schedule.h | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 115 files changed, 53786 insertions(+) create mode 100644 romulus/Implementations/crypto_aead/romulusm1+v12/LWC_AEAD_KAT_128_128.txt create mode 100644 romulus/Implementations/crypto_aead/romulusm1+v12/armcortexm/api.h create mode 100644 romulus/Implementations/crypto_aead/romulusm1+v12/armcortexm/crypto_aead.h create mode 100644 romulus/Implementations/crypto_aead/romulusm1+v12/armcortexm/encrypt.c create mode 100644 romulus/Implementations/crypto_aead/romulusm1+v12/armcortexm/romulus.h create mode 100644 romulus/Implementations/crypto_aead/romulusm1+v12/armcortexm/skinny128.h create mode 100644 romulus/Implementations/crypto_aead/romulusm1+v12/armcortexm/skinny128.s create mode 100644 romulus/Implementations/crypto_aead/romulusm1+v12/opt32/api.h create mode 100644 romulus/Implementations/crypto_aead/romulusm1+v12/opt32/crypto_aead.h create mode 100644 romulus/Implementations/crypto_aead/romulusm1+v12/opt32/encrypt.c create mode 100644 romulus/Implementations/crypto_aead/romulusm1+v12/opt32/romulus.h create mode 100644 romulus/Implementations/crypto_aead/romulusm1+v12/opt32/skinny128.c create mode 100644 romulus/Implementations/crypto_aead/romulusm1+v12/opt32/skinny128.h create mode 100644 romulus/Implementations/crypto_aead/romulusm1+v12/opt32/tk_schedule.c create mode 100644 romulus/Implementations/crypto_aead/romulusm1+v12/opt32/tk_schedule.h create mode 100644 romulus/Implementations/crypto_aead/romulusm1v12/armcortexm/api.h create mode 100644 romulus/Implementations/crypto_aead/romulusm1v12/armcortexm/crypto_aead.h create mode 100644 romulus/Implementations/crypto_aead/romulusm1v12/armcortexm/encrypt.c create mode 100644 romulus/Implementations/crypto_aead/romulusm1v12/armcortexm/romulus.h create mode 100644 romulus/Implementations/crypto_aead/romulusm1v12/armcortexm/skinny128.h create mode 100644 romulus/Implementations/crypto_aead/romulusm1v12/armcortexm/skinny128.s create mode 100644 romulus/Implementations/crypto_aead/romulusm1v12/opt32/api.h create mode 100644 romulus/Implementations/crypto_aead/romulusm1v12/opt32/crypto_aead.h create mode 100644 romulus/Implementations/crypto_aead/romulusm1v12/opt32/encrypt.c create mode 100644 romulus/Implementations/crypto_aead/romulusm1v12/opt32/romulus.h create mode 100644 romulus/Implementations/crypto_aead/romulusm1v12/opt32/skinny128.c create mode 100644 romulus/Implementations/crypto_aead/romulusm1v12/opt32/skinny128.h create mode 100644 romulus/Implementations/crypto_aead/romulusm1v12/opt32/tk_schedule.c create mode 100644 romulus/Implementations/crypto_aead/romulusm1v12/opt32/tk_schedule.h create mode 100644 romulus/Implementations/crypto_aead/romulusn1+v12/LWC_AEAD_KAT_128_128.txt create mode 100644 romulus/Implementations/crypto_aead/romulusn1+v12/armcortexm/api.h create mode 100644 romulus/Implementations/crypto_aead/romulusn1+v12/armcortexm/crypto_aead.h create mode 100644 romulus/Implementations/crypto_aead/romulusn1+v12/armcortexm/encrypt.c create mode 100644 romulus/Implementations/crypto_aead/romulusn1+v12/armcortexm/romulus.h create mode 100644 romulus/Implementations/crypto_aead/romulusn1+v12/armcortexm/skinny128.h create mode 100644 romulus/Implementations/crypto_aead/romulusn1+v12/armcortexm/skinny128.s create mode 100644 romulus/Implementations/crypto_aead/romulusn1+v12/opt32/api.h create mode 100644 romulus/Implementations/crypto_aead/romulusn1+v12/opt32/crypto_aead.h create mode 100644 romulus/Implementations/crypto_aead/romulusn1+v12/opt32/encrypt.c create mode 100644 romulus/Implementations/crypto_aead/romulusn1+v12/opt32/romulus.h create mode 100644 romulus/Implementations/crypto_aead/romulusn1+v12/opt32/skinny128.c create mode 100644 romulus/Implementations/crypto_aead/romulusn1+v12/opt32/skinny128.h create mode 100644 romulus/Implementations/crypto_aead/romulusn1+v12/opt32/tk_schedule.c create mode 100644 romulus/Implementations/crypto_aead/romulusn1+v12/opt32/tk_schedule.h create mode 100644 romulus/Implementations/crypto_aead/romulusn1v12/armcortexm/api.h create mode 100644 romulus/Implementations/crypto_aead/romulusn1v12/armcortexm/crypto_aead.h create mode 100644 romulus/Implementations/crypto_aead/romulusn1v12/armcortexm/encrypt.c create mode 100644 romulus/Implementations/crypto_aead/romulusn1v12/armcortexm/romulus.h create mode 100644 romulus/Implementations/crypto_aead/romulusn1v12/armcortexm/skinny128.h create mode 100644 romulus/Implementations/crypto_aead/romulusn1v12/armcortexm/skinny128.s create mode 100644 romulus/Implementations/crypto_aead/romulusn1v12/opt32/api.h create mode 100644 romulus/Implementations/crypto_aead/romulusn1v12/opt32/crypto_aead.h create mode 100644 romulus/Implementations/crypto_aead/romulusn1v12/opt32/encrypt.c create mode 100644 romulus/Implementations/crypto_aead/romulusn1v12/opt32/romulus.h create mode 100644 romulus/Implementations/crypto_aead/romulusn1v12/opt32/skinny128.c create mode 100644 romulus/Implementations/crypto_aead/romulusn1v12/opt32/skinny128.h create mode 100644 romulus/Implementations/crypto_aead/romulusn1v12/opt32/tk_schedule.c create mode 100644 romulus/Implementations/crypto_aead/romulusn1v12/opt32/tk_schedule.h create mode 100644 skinny/Implementations/crypto_aead/skinnyaeadm1+v11/LWC_AEAD_KAT_128_128.txt create mode 100644 skinny/Implementations/crypto_aead/skinnyaeadm1+v11/armcortexm_1/api.h create mode 100644 skinny/Implementations/crypto_aead/skinnyaeadm1+v11/armcortexm_1/crypto_aead.h create mode 100644 skinny/Implementations/crypto_aead/skinnyaeadm1+v11/armcortexm_1/encrypt.c create mode 100644 skinny/Implementations/crypto_aead/skinnyaeadm1+v11/armcortexm_1/skinny128.h create mode 100644 skinny/Implementations/crypto_aead/skinnyaeadm1+v11/armcortexm_1/skinny128.s create mode 100644 skinny/Implementations/crypto_aead/skinnyaeadm1+v11/armcortexm_1/skinnyaead.h create mode 100644 skinny/Implementations/crypto_aead/skinnyaeadm1+v11/armcortexm_2/api.h create mode 100644 skinny/Implementations/crypto_aead/skinnyaeadm1+v11/armcortexm_2/crypto_aead.h create mode 100644 skinny/Implementations/crypto_aead/skinnyaeadm1+v11/armcortexm_2/encrypt.c create mode 100644 skinny/Implementations/crypto_aead/skinnyaeadm1+v11/armcortexm_2/skinny128.h create mode 100644 skinny/Implementations/crypto_aead/skinnyaeadm1+v11/armcortexm_2/skinny128.s create mode 100644 skinny/Implementations/crypto_aead/skinnyaeadm1+v11/armcortexm_2/skinnyaead.h create mode 100644 skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_1/api.h create mode 100644 skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_1/crypto_aead.h create mode 100644 skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_1/encrypt.c create mode 100644 skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_1/skinny128.c create mode 100644 skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_1/skinny128.h create mode 100644 skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_1/skinnyaead.h create mode 100644 skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_1/tk_schedule.c create mode 100644 skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_1/tk_schedule.h create mode 100644 skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_2/api.h create mode 100644 skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_2/crypto_aead.h create mode 100644 skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_2/encrypt.c create mode 100644 skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_2/skinny128.c create mode 100644 skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_2/skinny128.h create mode 100644 skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_2/skinnyaead.h create mode 100644 skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_2/tk_schedule.c create mode 100644 skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_2/tk_schedule.h create mode 100644 skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/armcortexm_1/api.h create mode 100644 skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/armcortexm_1/crypto_aead.h create mode 100644 skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/armcortexm_1/encrypt.c create mode 100644 skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/armcortexm_1/skinny128.h create mode 100644 skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/armcortexm_1/skinny128.s create mode 100644 skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/armcortexm_1/skinnyaead.h create mode 100644 skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/armcortexm_2/api.h create mode 100644 skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/armcortexm_2/crypto_aead.h create mode 100644 skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/armcortexm_2/encrypt.c create mode 100644 skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/armcortexm_2/skinny128.h create mode 100644 skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/armcortexm_2/skinny128.s create mode 100644 skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/armcortexm_2/skinnyaead.h create mode 100644 skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_1/api.h create mode 100644 skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_1/crypto_aead.h create mode 100644 skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_1/encrypt.c create mode 100644 skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_1/skinny128.c create mode 100644 skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_1/skinny128.h create mode 100644 skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_1/skinnyaead.h create mode 100644 skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_1/tk_schedule.c create mode 100644 skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_1/tk_schedule.h create mode 100644 skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_2/api.h create mode 100644 skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_2/crypto_aead.h create mode 100644 skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_2/encrypt.c create mode 100644 skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_2/skinny128.c create mode 100644 skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_2/skinny128.h create mode 100644 skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_2/skinnyaead.h create mode 100644 skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_2/tk_schedule.c create mode 100644 skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_2/tk_schedule.h diff --git a/romulus/Implementations/crypto_aead/romulusm1+v12/LWC_AEAD_KAT_128_128.txt b/romulus/Implementations/crypto_aead/romulusm1+v12/LWC_AEAD_KAT_128_128.txt new file mode 100644 index 0000000..0f0cce5 --- /dev/null +++ b/romulus/Implementations/crypto_aead/romulusm1+v12/LWC_AEAD_KAT_128_128.txt @@ -0,0 +1,7623 @@ +Count = 1 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = +CT = 1866911F9E436083F788BBF27C62180A + +Count = 2 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 00 +CT = 111C6F780802BB6A6E8686408FF08D6A + +Count = 3 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 0001 +CT = E2D3227EB942543A4988C59C16B696DD + +Count = 4 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102 +CT = 08FECA98C7581ACFC042AA3CC5CD5408 + +Count = 5 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 00010203 +CT = 60E45A18AA85AC51E74AF13DB36308F5 + +Count = 6 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 0001020304 +CT = 74A33F25C1AE488B07190F868E3421EB + +Count = 7 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405 +CT = 86D53E9861FE1DB8277CF50801100EBA + +Count = 8 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 00010203040506 +CT = 3518A21D26C30E8CBADED094B5ACA042 + +Count = 9 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 0001020304050607 +CT = 2135BA52B0149CDF777D08B5F04BEF0A + +Count = 10 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708 +CT = 93C4A4AF1910FAA1F5342C14551D2FC2 + +Count = 11 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 00010203040506070809 +CT = 744ACC075CECF6A1A1E1B2DABDA34987 + +Count = 12 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A +CT = 65166EBBF08569C2A1C996AE79034419 + +Count = 13 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B +CT = 109D49FFFC203DE880126A9B1473EDFC + +Count = 14 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C +CT = 27337EB7055C8657599BFAC630D35C6E + +Count = 15 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D +CT = 6BA056F320349BAC9594761A9C0C0A75 + +Count = 16 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E +CT = 80B644B84609B497FF568AE3C098AA94 + +Count = 17 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F +CT = 57E3E2A18ED55AD98985FA605F0E0FCB + +Count = 18 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 2C3AD5CF835E9F421941BF4B091F4D34 + +Count = 19 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 08B703395B691DA9C8BC97EA4A6291DA + +Count = 20 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = B254818D0F5BC9D4BEAB28205168B495 + +Count = 21 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 4A9759BD7CD841FF07B1EE49EEC0538C + +Count = 22 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 4A2D5D6E78CA57A018A3E764694D5528 + +Count = 23 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 5C561DA38DE44FD650E49E87FD9E7AB1 + +Count = 24 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 507AC27E02F1E7205D39D0AD05353BAE + +Count = 25 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 61DEBA7A6AAC4A8169D4F96834373969 + +Count = 26 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = D51A0C104B90A6A0C3BE54692FBD2265 + +Count = 27 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 2C5CAEA5D2942CEC970FFBE0B939B558 + +Count = 28 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = C0CEC1425764810F09E6CB9452DE3C10 + +Count = 29 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = C57C2765B00216FBF5F0B4020095F054 + +Count = 30 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = DAFC784AF1090DD7E7295D32304250DB + +Count = 31 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 9CCD6981AFEA2118FD62C0EFA090483B + +Count = 32 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 5F588E7A5925ABBF3C715D1E6143323C + +Count = 33 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 54060E93F5733CBE709EA1F12E203BE6 + +Count = 34 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = +CT = BE8291743705C8BDE2D0BD5725D31FF045 + +Count = 35 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 00 +CT = DE7F7EBE417335CB5A33413834769E8C13 + +Count = 36 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 0001 +CT = 5AB470885A182486B85CD7B8D7FFDD005C + +Count = 37 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102 +CT = B76B85778627FB371A9F2CCFBFEF6FFE1C + +Count = 38 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 00010203 +CT = 5F36B380E3B43CF0C03AE079E7DC41FDA3 + +Count = 39 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 0001020304 +CT = 80AA1348466930003C89C22A6DA94763DB + +Count = 40 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405 +CT = 3D2E15FFAE9B18948BB130E43EB6F73DB7 + +Count = 41 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 00010203040506 +CT = 0E4948B96A314B623A6BB43DC2011027CB + +Count = 42 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 0001020304050607 +CT = 665986EC404C2AE1B8E14F0F005B02BC22 + +Count = 43 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708 +CT = 23A55991578C354221D816C8EFE92F1E99 + +Count = 44 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 00010203040506070809 +CT = E691EC26BBCC5577FD8B63FD12DF87D63E + +Count = 45 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A +CT = E26A46BBBDF45898D6381C867BD4F2638A + +Count = 46 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B +CT = 57D4DFAE7876EA0CF0B9AE0C09DC67643D + +Count = 47 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C +CT = 64444F7536FB24788C9B4B4A6F62A43571 + +Count = 48 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D +CT = 728BE459D195830EB45B0DD4BF0C4EF0ED + +Count = 49 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E +CT = 1E3B87A4B0EB36BBBB02B3E43D278B6511 + +Count = 50 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F +CT = 2C738F2F926BC61AF03510269B4BB4FEBD + +Count = 51 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = B24DDCB567783BB641AECDA7D5A0D0F88C + +Count = 52 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = A7AAF5AAA0419EA54AAC1F6C839AFFAB18 + +Count = 53 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 790ECA0E742B0DF8AAAFA3CCA05B743696 + +Count = 54 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = C661EB47B8FF0D361F7C06DA2DAC347448 + +Count = 55 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = DC9C74F367971E1D5E365B3691779719EA + +Count = 56 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 514F4354EE83B5580F44CFD7ED7096C815 + +Count = 57 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 4B442169B930AD35E09C9A8039CA19D4AD + +Count = 58 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = C2E1BC1A2B115CD68C9A4164B00B29F139 + +Count = 59 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = A84FB3DE1AFA66C4C0456606E72E2EBD2F + +Count = 60 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 8B0554D00C4E7C34ADBA3FDFA1D4E78465 + +Count = 61 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 6BAF7085DC27B1F26C8B02066C4BC2D8F3 + +Count = 62 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 3782782251FF07FAC7C014713E217B1F33 + +Count = 63 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 77FD8D8B7748FFEAF2D870AAC859B43C8D + +Count = 64 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = B5C0A52FD541B67C4A3B5CB6E0110C0C79 + +Count = 65 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 4D445A9FB60A2A8BA51191FEBC7304DE64 + +Count = 66 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 510F1974FF3E635493C5DDEFCC4FFCFA58 + +Count = 67 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = +CT = 9145C38D138AE14EF990D9764F21DADCF9E1 + +Count = 68 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 00 +CT = A08D2A742EEA81932BCCB7BFFFA1E5973448 + +Count = 69 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 0001 +CT = D2E9C4C1D8086447746ED12C7C67431343AA + +Count = 70 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102 +CT = 4E61124FED01E2B532D24D4565F152CB13D3 + +Count = 71 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 00010203 +CT = 105D090DA529ABC8E05CDB562CE8D6E30A50 + +Count = 72 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 0001020304 +CT = AA63CFCC46215F2FC5B7DAD4C86CBCFD816A + +Count = 73 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405 +CT = DE3BDCD09480939D1C0D41841C6AD718BE7B + +Count = 74 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 00010203040506 +CT = 87E0CB7729C4E5785882B7A10C5CBDD5093F + +Count = 75 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 0001020304050607 +CT = 9DF41431805E053AD2BBDAA9461B403A3BC5 + +Count = 76 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708 +CT = 1EAD6425C8B8DBB6DF0F945A3CDA39003F35 + +Count = 77 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 00010203040506070809 +CT = 04B69D6A746BDB459B3A988FD06D0EAC833C + +Count = 78 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A +CT = 849F663D6768A4E12AD1F0CC245AFCC3C9FF + +Count = 79 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B +CT = 5DD42CCEA55A3C02487FDD52CEF4AC34BC54 + +Count = 80 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C +CT = FB5BE429DF3540365A4C9F0B41EAD3E8B83C + +Count = 81 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D +CT = 8589780FE636BF46AD9EFBD07CCEACD44492 + +Count = 82 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E +CT = 30C09C4708A6146BB8E5021C53E16702D706 + +Count = 83 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F +CT = 4F4E73BDEE492E821C0C3764909D5A4F8E33 + +Count = 84 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = C83106933C1BE63DAF1F53FA3C2D14DDDE72 + +Count = 85 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 13F32B1E085CEA7B61F89FA7F6D93872D5C5 + +Count = 86 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 5EF95AB5580C0EDE339B69F817F743FC11EB + +Count = 87 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 14BBFAC7B55EF98BDC3EB99A77C6BC787FD8 + +Count = 88 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = EC649998DA26A01903EA309D3A6ED31ED34D + +Count = 89 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = F34A897960EED48EFAD7F65EB203E204FB64 + +Count = 90 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 0D2497730BD17DD2F94C0B250BB7245EBEF0 + +Count = 91 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 54998778D0CF45036A5B7067802681A17A81 + +Count = 92 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 449AF852D84E15F42B57C9BB633FFBA81051 + +Count = 93 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = FD6B33BE4B9838779A9832BD6476DAB34FF4 + +Count = 94 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 910AA2387C8A3C9F2EA16D823D76F2236ECA + +Count = 95 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 5CC4B9B394D5917BF8EE902172B2E8965BCA + +Count = 96 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 4A7E4078E9C50B5C876EBE5760C8BBC40EFE + +Count = 97 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 912ECB572B81B51D5BB9E1EEE18FDD663E30 + +Count = 98 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 8499D56D8229870F105531F5B09F23AFC56B + +Count = 99 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 0049FAC9401CC458CAE9F2963DB475C733C3 + +Count = 100 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = +CT = 1F9CC58CA6ADA5640D42ADC3BEA0C8A02C3770 + +Count = 101 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 00 +CT = CED387058D20377F9E3E4B52CCDC3646EC8FFB + +Count = 102 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 0001 +CT = A7190537E398103EB9BD2A2E5A631028914DA5 + +Count = 103 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102 +CT = A5AE33040B2F8A92A80104F63AD270C322C445 + +Count = 104 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 00010203 +CT = 349ADB83A847F2CD9C6DC8945679B2EB8559C8 + +Count = 105 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 0001020304 +CT = E9F6362578F03054AA8A4B0797BE3634E39BF8 + +Count = 106 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405 +CT = E59E0E5624695996B61CEDB3B72A28B3F22674 + +Count = 107 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 00010203040506 +CT = 40FB811547A168CC2F259349638C24531BAE42 + +Count = 108 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 0001020304050607 +CT = 01603729FAD23B7C3F20892AE36181E0B83B21 + +Count = 109 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708 +CT = 889344A705B5D3D8A875E038CBB9B325B79B4E + +Count = 110 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 00010203040506070809 +CT = 62E2B16006FC76BC528E67BC9EC703CFD31D86 + +Count = 111 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A +CT = B2D7F8C11A12002DFAB9F76797AE2398313884 + +Count = 112 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B +CT = 2E083EA4726C3CC002364E698676FD90393A8A + +Count = 113 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C +CT = CDCCFC09FB902F2203C49F617F3615D317C087 + +Count = 114 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D +CT = 78265933C8F04C935B8B4F8CB31E62BF54185E + +Count = 115 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E +CT = D6ACD80CF8A77A3B425FD6B818A43F8B481A55 + +Count = 116 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F +CT = 7362F95E2CFD58B37E7C973A62AE2817B86A58 + +Count = 117 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 0DAD3DE636CFBAAD428366D5CCE437658D87CD + +Count = 118 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 0B8AEA03CEB2EC21BB8A361A70119DE18E759E + +Count = 119 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = F77AD020F72D4CDCAE3EB4187F318556557844 + +Count = 120 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 22EAB85725FE7DBB4ACE5BAA4A5DD161B9D1ED + +Count = 121 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 6876FAA5798052969D2A3575C435849CBCDAA1 + +Count = 122 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 4E723B024D913E886B0B2D966BA790DE10ED3C + +Count = 123 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 5CEB2D35F4694708C46BA39E5E25777D18F2D0 + +Count = 124 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = E3A37D66523AA7128C48C5F5A3F2A09E380649 + +Count = 125 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 18A1A8ADFE1F8A3D1133B1D2B60E2515E12CC4 + +Count = 126 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 5453A60186713304E5360212E415DF759C4864 + +Count = 127 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = AB0F4BD15A7D32A1943A7F6C21CA396F988CC0 + +Count = 128 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 7B68957B2358E17F79D02A2340F2F0D0287052 + +Count = 129 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = A286A5452A74AC9B176DBB0AAEF20D707BB809 + +Count = 130 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 48164B35EE4D16BECB4C435E0C70439B172F1E + +Count = 131 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 9EE4690D356E15188E16DAA6A46B9340BC5FCC + +Count = 132 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 86C8328858D597DF070FEB18BACE174BD8BD8B + +Count = 133 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = +CT = 52F8B8B389D7EA60E553BD3815C0BCB02678F75D + +Count = 134 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 00 +CT = 7792D2B8BF9D4842F7361C5692C2C81A08D01F61 + +Count = 135 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 0001 +CT = A950D1B265AC89779916BB39A4DFFC447F458A2F + +Count = 136 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102 +CT = 8E9AC9091ABD41C246A435776E42607AFB72D2C8 + +Count = 137 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 00010203 +CT = 30B51FDAEF4F976076299BD1E876323A58E2CC89 + +Count = 138 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 0001020304 +CT = A848C61C995A81EA34359C6E1AC0988DB4C02828 + +Count = 139 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405 +CT = 582C0A1622ECD65DFCE4AD5246CB9AABC05F1927 + +Count = 140 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 00010203040506 +CT = 3E8C31FF15E979822B7AD2EEB0C0B42F4C892035 + +Count = 141 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 0001020304050607 +CT = 29C56C408E5EB79E281147233754DD9ECA3281C2 + +Count = 142 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708 +CT = 30050F7623EBB8AE7B1D8AA8D4B2EE54C2D482F5 + +Count = 143 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 00010203040506070809 +CT = 4297B6C49D71E4455B8AD4D6A516EC02E0D562E2 + +Count = 144 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A +CT = E1D2D846A23FDAC10172B1E5506C7D0F2B5B7AAD + +Count = 145 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B +CT = E3CBF370C48C4550A07CA5007172A9FB3CCB700A + +Count = 146 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C +CT = 6AD38CEDD18A8A7BF3E08FFE4286A5D376C63211 + +Count = 147 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D +CT = 08FA27B58394D5C7C0C859FCAF19F9C6453AA0E7 + +Count = 148 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E +CT = 57969EF1F480906DE807A4A8081A5535FC3EB4C6 + +Count = 149 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F +CT = CD6C770125FF572E8974885C8D20E41C60E720C6 + +Count = 150 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = FDD39CBE20BFAD461973C137573E7866B5B1F31B + +Count = 151 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = F234ABD0C0DB6F17A54F007E752FB7C46A00EAB7 + +Count = 152 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = B0B7B1ABB1952BD5C53EF23A868EE02DC51F00C2 + +Count = 153 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 4E7A4C2587E214FA918C967CDDFD45F81AE24A20 + +Count = 154 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = C3EC1A08266CBCFE3757D64D828CCDD771277374 + +Count = 155 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = E66BF84F0415EFD391DDD47F70DB9F9D2D736B1B + +Count = 156 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 6D676EFDC9CBFC49F5D43172A340B267721892E9 + +Count = 157 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 5C9647B5333FE0C97114D7033EA125BBBB732CAA + +Count = 158 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 4AC6B18AF1D24341583B2A17112376657987344F + +Count = 159 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 130D9D8B0447B6B0B8659DFF6C31B8C223E75707 + +Count = 160 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 82D2F091558E3DBADEA5987C9CC68A76AAEABB1D + +Count = 161 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 082455375C773436D6AA28A7220198E0805C6854 + +Count = 162 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = C10516FEB4C47005CA6A411E121F61C1ED7F2CD2 + +Count = 163 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = B490384378915B2DC3B261B29A5D155EB81F8CA0 + +Count = 164 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 464635F56E2C6C120069883AF236EB07F0551BDB + +Count = 165 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = FC61E5D3226627035C91E7C4B327208C07ADEEF6 + +Count = 166 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = +CT = 668683BB1C3BA41F8349E43C58AB7BFE2D0524590B + +Count = 167 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 00 +CT = A0E8B15DFC3F0DB2815424A51391D59A92FF7606D1 + +Count = 168 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 0001 +CT = 72B323F0214CE115F219514C09F632A5423F22B889 + +Count = 169 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102 +CT = 723E0DDD99C88B0B7212E0ADE60C74DFC2D9CFCA0C + +Count = 170 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 00010203 +CT = 7CE2DBC1AF73BEDB29D49A11338922F8D3617D5B0A + +Count = 171 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 0001020304 +CT = B349A0E768838B0C588C3E9C36603BF4E6218D0E91 + +Count = 172 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405 +CT = C37DECC657708111DDA30E39E95FF2CAD438F2162F + +Count = 173 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 00010203040506 +CT = 315C388D3761D32F3710B9F363A357CDC4CBEEE79B + +Count = 174 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 0001020304050607 +CT = 28EBC6F6E802676E53BB8923A0DD4C8F34762F0D73 + +Count = 175 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708 +CT = 0BBB1F77B64E4A1CE3CC912BF080B1CD3DD0B9D150 + +Count = 176 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 00010203040506070809 +CT = 3634CC549D379CC61F2B9F6FA233BFB9988B541D76 + +Count = 177 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A +CT = DACD4B7B4E8920C2B5A81C445089465F882FC0A60C + +Count = 178 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B +CT = A6D65328BEF4A8F4F0B0639A3BF538AEE512C8A9FB + +Count = 179 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C +CT = 66840C7FA1026DAE7D30F04624BD0939371F048713 + +Count = 180 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D +CT = 92213F364C69746BBA2B49789BCE74C831E0771B76 + +Count = 181 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E +CT = 9063CD25D2730D6BF13C1F8BB9892BDAEE78C27820 + +Count = 182 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F +CT = FC7EE5F876EA35178A7E9CD53ED37EC205AEBCD8E5 + +Count = 183 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = D0918CD46793FC5BA18EE5134CD46D10F43B88B851 + +Count = 184 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = B5D9F315DFF7CA27D95975F2418A60877A375A0B8F + +Count = 185 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 2E16C86E5EA365E0FCFB6474DF73179739EBC45229 + +Count = 186 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 1198EB0732468AC2F26C25D0DE704AE992F8804F8C + +Count = 187 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 7B7135A83C3A853A7DE67F41B2AA1D97519673479E + +Count = 188 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = A294A6543F683929561B403CE56E41A4BA7239DBAC + +Count = 189 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 2654399A67AD4217B6EC9D5C6FD426C467317A2944 + +Count = 190 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 9B3F560FD44AD82060A1F351D2BDD2E00BCCA673EA + +Count = 191 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 442DBFA7B4B9BBFE9DAD9364114B9240476674FF43 + +Count = 192 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = B6BBF55DB33B277C39F6450073AE60D62FE139D2D8 + +Count = 193 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = C5710D63CFBBA0EEE6783BD205771A8B6181CB3E14 + +Count = 194 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = C35451F637A2F8BB7359B4F8E0ECA036537C8CD709 + +Count = 195 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = D14CFE8CE8D02366E0E4A34BC7B0B450C9AB77C093 + +Count = 196 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 44B4327D69BD27ED907C659228F1B0648A98713CF3 + +Count = 197 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = FE5B58DDEE1F0D2C4839076860E12ED48528E8C759 + +Count = 198 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 45C5573B47720A3D07091F192C9E75E7FD0E9DC8CF + +Count = 199 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = +CT = B601801AB242B97DE6F81CAF00E5415C7D790C95E1BA + +Count = 200 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 00 +CT = 9AC5FBD1C98A09D3AFB6E52BAB48678D408CE54C85F8 + +Count = 201 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 0001 +CT = 57CE537331ECB95A13128DBCEAE808D753EBCE3E1C32 + +Count = 202 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102 +CT = BDD19CCDBD35839CF47245722C6C3A7D4F74368C981D + +Count = 203 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 00010203 +CT = 6527B2B1E055FFCC2129049A715F3C28997E2CB0BDD0 + +Count = 204 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 0001020304 +CT = 7AB42CBAAA7985A70DD4E0140A7C6138D294CE441635 + +Count = 205 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405 +CT = 87B180CD60FF68638EBCC7366482B7D909CC793C3B47 + +Count = 206 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 00010203040506 +CT = 8186A2FE01278442C3498085B38ABAA28F7EFD481DDD + +Count = 207 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 0001020304050607 +CT = 11D04FD0BFE2152DE585872109059B23C9CE5E69E6DB + +Count = 208 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708 +CT = 45B1D346226B655632AA2738E69D24E4C30A866B3B30 + +Count = 209 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 00010203040506070809 +CT = EC4B8EB711E689B277C2012D14C939C83CE25FEE7DCE + +Count = 210 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A +CT = 7EF628C8D41A5A2E8224B83A40AF02231E3503B85A11 + +Count = 211 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B +CT = CE4B380C6E8DD15EC797562A3A0A3A823FFF9BF5841C + +Count = 212 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C +CT = 3F4DE7CC1C3B0B4C7C23671AD513D3E91F9E279BA206 + +Count = 213 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D +CT = B3D8CE3BC3C29D18FDED15A5C6DFC84FADFF77008D69 + +Count = 214 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E +CT = D5C18093F54F0269D05318E5F0C6F780FE234DC7BCD0 + +Count = 215 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F +CT = AAB087EF4412209E47AF4D051EEB40CCED8E368C601F + +Count = 216 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = EBF9E2F644C60BF34E3BCECD4A2BD49BFDE857B1A307 + +Count = 217 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = B3E47389B37E4A72754756DE3C1C57A8B9B9A7D85AC8 + +Count = 218 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 69D874E0AEADA8964045B377B493B3602C62D03A62FE + +Count = 219 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 5F37BB2856D017512CCDC5C9BF779B37FD558393F68A + +Count = 220 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 655CB01A3970499157C4113D7CC50478366CF605C654 + +Count = 221 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 8F90E093417BF26101560F0B20ACFE394460A9303E9D + +Count = 222 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = DFD1193E5C2CC19B7D2564244158BCD111B4CF831446 + +Count = 223 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 7A6AC6649D7330F4BAE0C3C7633045BD6A180AF523E5 + +Count = 224 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = D0AA0E752389BAAEA6FE88A4AE63DF8A376DDBB10A40 + +Count = 225 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 99991751D8FE6C9F312C3E8DA0A9896F6EB671150899 + +Count = 226 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 2DDD2CB715E5CE8B6747ED8B344A0FECCD8DFB0178B4 + +Count = 227 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = CD23CDDF6EAC59D5CD2EA2C370DF8655E536B936AA0A + +Count = 228 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 1E30686EEA1CCE448E297901FAA7DDD3A71ABD79930B + +Count = 229 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 53EC287FF428603831A066715AEF0F7A4AD9BFF039EC + +Count = 230 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = F6D8DFEA6CC2A0B23900C4AE5FC4D9E32E53C94F0B37 + +Count = 231 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = F9AF95B65D16B69CE27FCE727B7EC237D69576113058 + +Count = 232 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = +CT = 80B77A443964F70CAB4E19C3C95B570E6FB7C566F2A8FE + +Count = 233 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 00 +CT = 2D94005D91611D7AB6D96EAC7A7A3220625A049D8C91EA + +Count = 234 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 0001 +CT = FAA0BCFB5E305087F4B6313153EFB5CFCBC4EB68B99D96 + +Count = 235 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102 +CT = 208293D2A9BA26179C0D601247D12B57464BAD31347688 + +Count = 236 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 00010203 +CT = DBE6D14215FC0F3C87DBFFC6930C237DE46241DABE153D + +Count = 237 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 0001020304 +CT = B434FC4F60DE7898AB4ABB8BF927F75B69FAC15CA507A0 + +Count = 238 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405 +CT = F274176FB6C70909D600D8B35F1F821E91570F284E8D90 + +Count = 239 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 00010203040506 +CT = 85C5F80D67E07EAA56BE9354907297B7523F4E9CB9E878 + +Count = 240 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 0001020304050607 +CT = 75DE105677161C67068D7B0E5E08EFEF2C0B99CE0D7085 + +Count = 241 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708 +CT = E080D952A102342A3CF8674C37BA5F58EB3D16BFE2871A + +Count = 242 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 00010203040506070809 +CT = F85897CFE56E388702428A05960DBDA9705BFE2A7DCAA4 + +Count = 243 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A +CT = 5B21E22E1BFD9349F8CDBF2DCD3CCDF8EBB99004BB2E91 + +Count = 244 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B +CT = 44EAF432478DEE05DF061164C6AF6A0DE633F5B94BDDEF + +Count = 245 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C +CT = FC99C2F09FBBD294BB3BD84EFC0D373294463C3B4F78D9 + +Count = 246 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D +CT = DF88C757C73AB3DF013EFD19C02DD6A48A76C535D42D2D + +Count = 247 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E +CT = 471FD774E2DAF55E73AA3B425944CEDFABA77B443E0194 + +Count = 248 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F +CT = 6689ABDE126B660C20EF6C3BAF8B0F9C1E855811353820 + +Count = 249 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 4EA6A82E266428BE4A835CED94343EAFCB6775BDBC27F6 + +Count = 250 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = AE26127556DB4580B11E24CABA083C0AE48BD0E7AF881D + +Count = 251 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = F772EBB2AF94F4F43860679202E287E8A02850DF8EEAEB + +Count = 252 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 426D27EF11CFECCB49FCF63CB67B297E48EBC2E02D5AE1 + +Count = 253 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = EAEA48561C45F2D3BA92E3E715CF9AE814F9C735802CEC + +Count = 254 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 58DCC72E1EDB100F7DAEAADFD6A8A9E09555F6B14D6E1E + +Count = 255 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 22BD7B6396B41E0E600997E22722165E55C7969BC0DF41 + +Count = 256 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = D14254DBB959C95EAC5A489CB64AFEABB0681BFB51F912 + +Count = 257 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 76735A1B28F97E2566463803DDF6E38B06838DC40F822D + +Count = 258 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 05C75C49522C09765DB5BD7CB2CAD5399ED633F1A282DA + +Count = 259 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = CB84E1D35E404717C7D21DC6DC444296C79F67F9F16907 + +Count = 260 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = F1952BF75C2A8BAFDF09A8346CE68F9C2B14272734BDAC + +Count = 261 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 19BA8AA196331CDD954987C25B354E0D646C12D6AF0D8D + +Count = 262 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 6ED1DF1380E32F24A01842B1E94CBCC4F796A14F3D3736 + +Count = 263 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 3AE914041DDF011B1CA0EF66DF6CEE9E529211A507EB57 + +Count = 264 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 6B6664889477990133AB3C052EC44C8E06B8D22D817AC7 + +Count = 265 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = +CT = EE55F50DFAAD7EB04E1037F108C966AC463136174A840B0A + +Count = 266 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 00 +CT = 6A4BB5E586D8C83657ACCD14A90BCFA855C43330A49DFD97 + +Count = 267 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 0001 +CT = 29BE233A4F6CC964AAA1794F5186C1B4DD1DB86924CD3D11 + +Count = 268 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102 +CT = 1CEE79926AE087F4A5F11B78E49DAF64B28A02DB0F5AC6A5 + +Count = 269 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 00010203 +CT = BC1CAC6CFAB3B4F14AF8A9EEF115F7239508A6FBA474174C + +Count = 270 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 0001020304 +CT = 323FBAB5FB96A9F1C22E0BC2E30E88D35DE06DF190E5168F + +Count = 271 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405 +CT = 649BC51F8399B1DE0BE9DB3608F53BA849BA7B5CEFC86213 + +Count = 272 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 00010203040506 +CT = 2C6338B66C2319C1A01B0203A803FFF1EC6F915586266AE6 + +Count = 273 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 0001020304050607 +CT = B53F0A5FDF4258046EC677F00282955B0551E621DE957B2C + +Count = 274 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708 +CT = D5DCF61CD7BE7644153AF1B0F6E9366E43F2FFFFB2763C6E + +Count = 275 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 00010203040506070809 +CT = 030481E435D0957CFEAF1249C3502CEAA94A7C80002DF893 + +Count = 276 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A +CT = FD6102CA26CDA445B3FB25F4241D7E09881E084C07A72449 + +Count = 277 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B +CT = 3138D1640651C5E3E339235F9163DC48AFE03367A56FA43B + +Count = 278 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C +CT = 17DBF78E0B3964C0C2B0DC580F53038E452FF895EEDAD827 + +Count = 279 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D +CT = EFF49B796890B5B65BAF95E70CFFE4397811971BAAAFA7BE + +Count = 280 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E +CT = BD23BDE6C3CA82CE4A4ADC63DF766A26952E1BC3D47B7664 + +Count = 281 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F +CT = B904C08FB78E0F5127765D113B79B16F3C99C9E9194F9672 + +Count = 282 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = FAA7AD47DA0F14DBB11F25E82F7EB62A6EEFE396D210BB68 + +Count = 283 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 7614791082ED8A1125AD0B7BD77D36A64F15EB06F7136641 + +Count = 284 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = B6B7EEB1F82882CB31FB3066CC2C55C29F315CF4C66FFCF5 + +Count = 285 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 582EF95BF4A5F5C727DFC758AE2A6B4242B133247C37923C + +Count = 286 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 3D43AD6F0D9EC4CE65F201C0DDF1371B522101F12211E8B1 + +Count = 287 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = E54D09C265137201DF3A48674832296AB4CCAE3051D8CCF3 + +Count = 288 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 3F43F4C7422F2EE9386AF6322CE56455547A9C290DB3C9BF + +Count = 289 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = F299909625031D1BA42D71ECC8D8ED842B0142BE48B7D858 + +Count = 290 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = F0217F2510639DBCE85E9DA90276BEDC3C0E7CC89D97E148 + +Count = 291 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 3F58D34D3E260E328643F80EA58EB6A7426DE034AC1C8145 + +Count = 292 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = B35FB53B1F1DD719CF95D2F79506BA45061125F908F44752 + +Count = 293 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 53B8CC542D5141129C2899F2981B098C0AC3C98D78222FBE + +Count = 294 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 399E3E9A4336B2603638DD47B1A1E5C64E2A5E9C085C7358 + +Count = 295 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = F88C52F66DF7F7A2D6352B76DA12B9237350AADD57B4B60A + +Count = 296 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 928B4B6EEFAB400DF474614A88678135FE0ED2296A0D70DA + +Count = 297 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = CF1ED60D0F19CAD796344513786DBF029AE9A060E46A0E03 + +Count = 298 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = +CT = 19C02A457CE30C6EFEB42AA3995982EE812147DC3E8B17EA38 + +Count = 299 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 00 +CT = 80A4574A9240E521A0CA008D7BB2A2786D0196C9C88EC4AC25 + +Count = 300 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 0001 +CT = 080358DB59F9BF0CAACDEDCC3C1A01B137B90C099A9C2E43A1 + +Count = 301 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102 +CT = B93F5C630F463D94F49790695E10A6B0888CCCD190AFCF2F53 + +Count = 302 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 00010203 +CT = D7A797F2FA7CAEFFDEE002D032B54DFCC22EE687B721388CCA + +Count = 303 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 0001020304 +CT = BE24A8449E471BDE3AB49E7783ED2EDE0A81D14C3A8C024547 + +Count = 304 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405 +CT = 6AFE6C20C769621B61EBC350A8774A2C84069238169B3BDD3A + +Count = 305 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 00010203040506 +CT = 9FFDB7A8FA0B31AE0F7F2387A801A9DEDE78EB075B7C1B224B + +Count = 306 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 0001020304050607 +CT = 697E26DB031FF1F0819B11959566060F874B4FAA70B0D1C6D5 + +Count = 307 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708 +CT = 636A54D781421661ADEA7986A5DDFDF1DCF6D5FD359D226FE0 + +Count = 308 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 00010203040506070809 +CT = AE04E6677C9D082280A5D9333277DC809E6CEB6FA04F7B5D3D + +Count = 309 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A +CT = 7ACE5C33B96D05EEFA6336EE42AF0F5A6E8F24A91BBAC847A6 + +Count = 310 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B +CT = 76403E9A4B2A2A73DAE6368D13E6C93F05B2766532780B2C56 + +Count = 311 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C +CT = 7E8528048189CEC7389B15457CE71BE0D13C9A50CDC80AE7CA + +Count = 312 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D +CT = DC6A0BD7D4C76B80EC9850498393F35AC029C717B53D5F03B4 + +Count = 313 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E +CT = AED4F16BA1A52D70C07BD191CF0E3A36591E40D117F5B72E54 + +Count = 314 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F +CT = 8F87EA472F18EECBDF61664B377BDCC2B054ECA41F18BB54AF + +Count = 315 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 629E64255BAD63CF3D46848C6FDAE6ADD6ED47DD7774CE3807 + +Count = 316 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 91022B6AE49767C59CEDD5CA40F47E5E8F541BAC95EDE35482 + +Count = 317 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 4C653119E82C372E38905C1048371A9A5A2B38F10F4BFE7BCF + +Count = 318 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 9EC09EC5CB85CFB807BA0716BDDDA8753F5F07668AD1909157 + +Count = 319 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = A7406B37DB78B64BF3E96E2DE69CA4EE388AD4D73EAB56A2CD + +Count = 320 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 03C0F98A6A94DAC8A55F2EB7F25335AE6CDD895AA8FE49626D + +Count = 321 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 9B230F55504AB3DC0C15797429DBA602B0AFBE67D5A352970C + +Count = 322 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 8C48BD9DD82A7D097C0B4744318B2550715601AADE95B26D55 + +Count = 323 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 7F8ED5ACBC6246698E2AB9F943FCDD2C45901399B95AED94A2 + +Count = 324 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = FD1F1E12B2761C7E6F0FFEC29E478BD58803322C1F55D710DD + +Count = 325 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = F47CCFCB9904479F36224E3A03AB93574448AB9D3A19EFCD0B + +Count = 326 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = C6027CE52151812B908860A622C12FF03C5D1DDA2FD966407D + +Count = 327 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = F6A83DFAC3CEB517E9C30BD59CE9FDFA433F774FAE66D37853 + +Count = 328 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 61B440018BB84FC376EE8828DC3E8B7F1C79C67E1E235D7E24 + +Count = 329 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 1431626654D5EC84FB35ED83353921AFE40140F6A06AF5CCA2 + +Count = 330 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 102738C754BECBF2D456969B434BD8CD46221ADDAAA59C0950 + +Count = 331 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = +CT = 0ADB9BC4BE268A5FA1E06081CAED8BFB320B53DE6BC3FDC52E2E + +Count = 332 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 00 +CT = 7840F13174B746AE025760C050A4A1C21158748FA133E8989B34 + +Count = 333 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 0001 +CT = 02C7FDFFE0F2B82167160C25CC9BA8C71908C66FC054E44DD27D + +Count = 334 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102 +CT = A980698548FF9E365AF628C5E802D5C30696401E5FA1D4C39B60 + +Count = 335 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 00010203 +CT = 49446DBF7D6CCEB0456AA61E138D9C89A548AC34D13F23331FB9 + +Count = 336 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 0001020304 +CT = C0C0D00B5A48475A4412ADEAA142461F010655D9033D6167F27C + +Count = 337 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405 +CT = 8F505DA4EF2670B32E4C7FD1A3B994CBABA345483BEFBF6A7E29 + +Count = 338 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 00010203040506 +CT = 8052132F05705F6169007CF079F990B585235EF0CC9300488881 + +Count = 339 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 0001020304050607 +CT = C3331C1B84151BE47436DCAF209868A940476CA632CC850C20EE + +Count = 340 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708 +CT = DA8DF765AA9936BA4EC7AC4415CF17555FAADA214F161A78D515 + +Count = 341 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 00010203040506070809 +CT = 4B6345F582B5F23FEA255A319722399E98F61FA9BFE9F871F794 + +Count = 342 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A +CT = F98047FA416E88A0135524F716D35A5DA88828F68E89E84E2B69 + +Count = 343 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B +CT = 3DEF7707AE02F3DFBD9A619081FF4036D5FBB1EF01115D142DBD + +Count = 344 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C +CT = 4B472983691C8945FC594417D6E04571C0DEDF57502CD3B0A28E + +Count = 345 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D +CT = 16303690B8185745D5D9E24C0355608B9D1DA1C6D47DF9D62AD6 + +Count = 346 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E +CT = 1C31A767C094C010F095FA654E3A0ED96A60B8FBC94C5A13EBDF + +Count = 347 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F +CT = A76F64207C72E1D1593EFAC6A66F82BE0610350736A57F6B39D3 + +Count = 348 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 4B65F49C4FA01526E96F6A55263A9B2D1B5F9D41B4620FA234A6 + +Count = 349 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 7E8E2EFF4C292C15E1B4C874A971977031970E8E0BCA3CAD2B24 + +Count = 350 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 5D33068CF741CB3842DE4E2B44B3ED2D3B0C75677C1DC5AD7962 + +Count = 351 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = F74A7FA2F38990EBA26E7457AA4BEC1EC31307F15E056BA8D8FF + +Count = 352 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 30724D84EA86EEF3090F69B72ED273AB1E92F41494F889CC393F + +Count = 353 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 7FE80A53969E2EE729735D57632476AB8894E25EC57A76CEF833 + +Count = 354 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 4FCB65B89C96FD74421DAA7B1EAEC11FCE92A8CE55E07F654E9C + +Count = 355 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 638B724486A33A715FE2F9285FC0D41A543529A491DA6EB78D88 + +Count = 356 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = C4F7EE4F47601B77072B828B0595052ADBFA73E22282EC548212 + +Count = 357 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 3CFE4172BA0E0117E88374CE93C16A18A227A83DE21EB27695F4 + +Count = 358 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 2551C1B84CA0A2956E2D31738680A841710296ADBE2EB648107E + +Count = 359 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 2204CE867F0DB4365EA828B1A1744E8FDCC6BDBB137B73AF104C + +Count = 360 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 54BA6153B467E4695E619656E0D18965512EC8F685637CB60329 + +Count = 361 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 72B84D1D14FBCAF037EBFF68D3F8EC03AF6EDEBFACE16AFFF5AE + +Count = 362 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = F7F1B2333546F2485549B89D9E17545541C60C393ACC55C9CADF + +Count = 363 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 4656447CD3973FF12FEEDA227ADC4C9A0BAB014CC7E39FCD3022 + +Count = 364 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = +CT = ED9C82E3487E47022DAD8CD51C7E45C9DFADA5521125A36990E5BC + +Count = 365 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 00 +CT = 42FA63A0EC2C7566718E7AC665FE82C62381ED1B72628C44F0BA52 + +Count = 366 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 0001 +CT = A066422CEE26018A590832FF12B8AD7390D60302C7B47F6A011A08 + +Count = 367 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102 +CT = C7AFC18D41B6167981E827D97D2B834FF213B460D1DC8A8E9EF92A + +Count = 368 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 00010203 +CT = 1F6CF5308C32CB7AB63C340D47909391B2FE5BE966A3F36A9CE7AB + +Count = 369 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 0001020304 +CT = 8EA2858FA51CC2CFD6B8C5AD02F7B8704AA3502A998028509E698C + +Count = 370 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405 +CT = FA120AC9DFB57468D86C710C6A51A8738C8161CFA146FCAEAC6CF6 + +Count = 371 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 00010203040506 +CT = B6823033B526472CC56693E1A68F4848531B0895D23C9C7399BC43 + +Count = 372 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 0001020304050607 +CT = 7B54C966E4027902954E8A857A08C3D45B1CFC1C29C0C5957E87BB + +Count = 373 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708 +CT = A052A31926CC95045B4EE319108A8617CBCF5AE2965E4292C7BD97 + +Count = 374 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 00010203040506070809 +CT = 883303B7CF4376E57F949D476382D0B1FC91674E45E93FAEAA8D3E + +Count = 375 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A +CT = 1309BBCE222B2046A83C20F56DEDC85B9CBA7AD29109DFFA35F380 + +Count = 376 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B +CT = B1FC1FF58CA6DD3BCD33FB330AEDEA2ED60A56B1C6EE0CBEF7D1D7 + +Count = 377 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C +CT = EA587A7D3559E3B9D1431241516AE2D8FBE96147B97CA0B1F48C4D + +Count = 378 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D +CT = 8B4DD67A9F72004C26E2B573EF14F0398AC243F70668EE93CF7EF7 + +Count = 379 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E +CT = A3B9736A04CBFACEE12BF2BD6746FA48FF6603895AAC3E592C4ADD + +Count = 380 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F +CT = DD3F1651914C97BDF0D7CC7350645D9ECC8C9396BDAA2052C51952 + +Count = 381 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F10 +CT = BD73EE0A454D06F1B4716734B74A8749BF0D5B1407499E75C9CD16 + +Count = 382 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 2ABB7D1EC52EB7F5F90B6AFC6AA899ED3A1F26A273E29164C90BE3 + +Count = 383 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = E44F7764A37622B8173D20BDF2E629C75849BEC3A9CD845B17159A + +Count = 384 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = D5439DC2771B6EE42E7B12A8A2ABAE7A270E007918DA2914E55D72 + +Count = 385 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 9704D6AA5D4E8CE956BBFBE7E7B22A1DB610593FC05538A48A053D + +Count = 386 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 6F181AC89A5C4312E20C583A87020056F7BF941B3265DD5EFD91B6 + +Count = 387 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 42383E59CC38D5820FE1D3D7C437BC1518D36D2A8D901DEF574E7F + +Count = 388 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = A1A16F24A100C7A20FD0B3FE309BC20E191A13A9695BDBA1967896 + +Count = 389 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 8585D83508A5868001256E32D295587A301CD0470DD29909255CF8 + +Count = 390 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = C353DEC418F80E4BF6B166D98E128F272530BF478F7A9842C72AC1 + +Count = 391 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 0D9E81FE27D9A785E2E6A4437D09B94844C5E2B38A5FD4329427A6 + +Count = 392 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 4E3A1C08743AAE44ADFDFBFB648F4FDC48818440F79A5C044CD801 + +Count = 393 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = ED3BC411110E280437D6C7EF3E65BAB23CB1B864D29F5C62A902E0 + +Count = 394 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 914D3382D241E82886A36920E79F093F71D5EBC4E13B32D7EBB06E + +Count = 395 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 8AACAD3693DB4940BBA07787A0A1F9B30459CDACF39AE20E1E1D62 + +Count = 396 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 179662F4A56A73301EF04FDFB88936D011AB3865A726631D34E16B + +Count = 397 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = +CT = 94E74750B3B4FAD25A8588810FC14AF7C562A65F1B05D6B3F948BC2C + +Count = 398 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 00 +CT = FD62CC21242D778BB04228BB159EE386FB154FA96648CF8B950B9A6C + +Count = 399 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 0001 +CT = 8CC22DFCD992BCEC5FC5A8CA0F0E6A638626C04C590C632AACC306CA + +Count = 400 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102 +CT = 89A0E6A175A661BAA2D99ACA27693B2EBF1A650B72B2AB1A10783C88 + +Count = 401 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 00010203 +CT = B5BA71F99D719B9B8EB39CBF367BD2FE57FB1F929EABCF2C2629D2AA + +Count = 402 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 0001020304 +CT = 0EC5A738408DD5DF050D87940E098C6D86965269A7F340D607414D4F + +Count = 403 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405 +CT = 268C439CF402396C2C68B6C8931C237D2FA4BA6AEAE9990853CF3BF4 + +Count = 404 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 00010203040506 +CT = 5E497A951A144674BD8B025CFFBF771004C6D4020B8C0103D8D58E73 + +Count = 405 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 0001020304050607 +CT = FA00CCF57AD9824665CD0BBECABF3C909FBAB7FCC77C558974310F05 + +Count = 406 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708 +CT = 32F413324E9E403713C343CA39FC0A779669639C18AB55D24AE76FEB + +Count = 407 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 00010203040506070809 +CT = 8019CDD284CA3FC097383927A2FB2AFF8A20EFAFD8E9328D1B6807A5 + +Count = 408 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A +CT = 6B96B92BF6D15110857FEA9C93F650235B2B02F12AC65112B2EB8454 + +Count = 409 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B +CT = 75FC41C36EFB607A180BE7AE361995171C61D13C29C4637715788967 + +Count = 410 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C +CT = 8BE186943661FBF4C58CFBF685D6C179AECF566A2D3A18556D9738A0 + +Count = 411 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D +CT = B1BA3B0B35546C573BE38EB59471B2E05EA0CCDA4C8930B02F2182B9 + +Count = 412 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E +CT = 860F661AB5AB59E82A0C578103A562323E23B5E2EA32BAE9E155FEE5 + +Count = 413 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F +CT = 3425DE14322CD19799F564C0383D05DEB85745465B33F0A79D8F6B5D + +Count = 414 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F10 +CT = C8890081006AFF79D2AE03462CEF12DC7363EF5A9CD8EFBECBC10C35 + +Count = 415 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 36A574A8F69303C389FE8DC27BAA668656499BAB7CE82AC9D1DD3D3D + +Count = 416 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = F414CC6CDBF647CA8397A79FD5414739F080A164648B802CE5B70545 + +Count = 417 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 12DA8BBAFCF5048C5257C065333CFDFF0EEE3058800D8B9B9F67E9C7 + +Count = 418 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = E7A9C157E310BABB7048ACF95864D79CF1D189F1C13C05816CBD2847 + +Count = 419 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 94C961C204702E977F9258EF6FBF37135D4566A21F491FC981FAA6F1 + +Count = 420 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 749A9EC3DF8F4BB1C9F54A4CD3777D6DDA4D22FDCDB056009B3EA2B3 + +Count = 421 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = D8D0C931291F9CCD5F0F80B72275AA05696CBD8907984FE4924C874D + +Count = 422 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 602086A7670354AD01D199EAE1DFDBF731BEA0BE0756BE344AE4C42A + +Count = 423 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = FA874E3D2D48184F2A5D60AF46A436C91ECDA9FC717C37A1574AB229 + +Count = 424 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 7584DEEA1A1F8F4EF869B39D97E3D9A352D7411F97F0303549FCE8AC + +Count = 425 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 67658BDA4B3C2389F4922D2DE79DCD878629C7A11CCF790C46ABD533 + +Count = 426 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = C314C1F091F5461C7DF28F1921FB811FF6633ED0CEA364DCB5A82551 + +Count = 427 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = DCA056E3E6EAA245EE94E374F2C82F34839D870AA8892C1BA123D2C7 + +Count = 428 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 7D65C76C864697E6228FE5F69FDF0A136DC08F9647E3FFCFD83A2889 + +Count = 429 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 603ABC44A3350BA9A2ABD6B33C9235F97A1AFB0EB5267FA47E212510 + +Count = 430 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = +CT = 2E34D9583CB3936C955D590786273C207B67B2BC9FECBA21B3E9FE89D0 + +Count = 431 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 00 +CT = FC61C14BF14488B79AD0AC2939BD0FEB5E3E7E705A029F5E77A4026528 + +Count = 432 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 0001 +CT = 3C44FDB8617BD6E8B10364A6E91BC0F49D54202F2E3D09D4F1A1ED92E6 + +Count = 433 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102 +CT = 5FBD044FA73DB912FE63782072B499CC598C62CD9BFF80DCEA6E7FC655 + +Count = 434 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 00010203 +CT = BC1AE6E0F40F2F2FEA3661C60E2B2DC87BA5F1C767B81D7F3095500293 + +Count = 435 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 0001020304 +CT = F60E6D729D18BEBD21A86396472BD7263AA5C3017C8480C45A2F321D7B + +Count = 436 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405 +CT = 49A3758C3EE1E26A02938E0E0DFE357B2FE69FFC6B4BE926F565FBD4DA + +Count = 437 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 00010203040506 +CT = 1473F62BED50C732373C47B8A45D12985CAA5E15DC661198B830EFC788 + +Count = 438 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 0001020304050607 +CT = D7FEB6C9DD78B0C35249F95714EF2B96E4F0B0FE1B949B2C299E6D00EB + +Count = 439 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708 +CT = 7E0DAC5D783CC0801222FB457813007AC10CFD0D85A42C7FE081181C96 + +Count = 440 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 00010203040506070809 +CT = A8E5954953D6E4D3C844BE3839700865C75A9FBA0AD3199D13FCFCABDC + +Count = 441 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A +CT = 2DB2C0F9818EB070D3D35B9A43B9C491179645DDC6F28DC1F0A35B8A2D + +Count = 442 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B +CT = 99A813F103C59695BDDB007A6352DC6B3747B24B5541FF36BB6C6B0016 + +Count = 443 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C +CT = A5D502FE9DE9D7CABEC9028BDB7D2048917CB693F2331B48303E7F2133 + +Count = 444 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D +CT = 75B7AD1A1F5E1D84317E24A6314701DB0635C084F0B668715463F6561C + +Count = 445 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E +CT = 04BCC9C103D1531703582D24F22D44E7A27E800C64017FE05EA371519E + +Count = 446 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F +CT = 5D82E6D669F034B70678DD29BC0631ACE3A96F1B9CADD43879CB24926D + +Count = 447 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F10 +CT = B5694B8589976888A9937EE6A914C0E9369F662DF67A8D7B00C6009E97 + +Count = 448 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = D3B4F37DAC2654EED7F6920EAB38D308F5C84722F8268F2AB2734CBB15 + +Count = 449 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 7FEAA58BFB956ED28CB45D6D5B579B0E58E99B51A423952C25ACE2AECA + +Count = 450 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = F9E8B0428E2C880840C8CF132E40BBB35E9347118B12A5BA6649770C17 + +Count = 451 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 6A78F1E711B5C869FF147242336941F2C806E419D843474FEBE9EAC6C5 + +Count = 452 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = BE8F15DD80480214DA4CA31F9E4BBC8B46CA4A6F237FF4F2578AA3B509 + +Count = 453 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 3D83424D57BAC7340F990E0AF45D7B1E0731B47D72DC2948E15A644A4F + +Count = 454 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 2A39E2246321085387F5290A6079F5632C1F15A113BB004711849847C8 + +Count = 455 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 4A4116C4ECB6D42C1520427FB7EDAA4ABB5ECDFCD0F66B8A0E33358AE4 + +Count = 456 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 8693B2C60FC77EA928536FAD8825C7519509E4B0B70235ECE403022031 + +Count = 457 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 9F2951F0F2797CA1C5E6FA7B9F0541BE0D03C0A4AC688D03313D773E33 + +Count = 458 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 1AE8870A1443C44BF23DA102C52BA99113255735372F5C42975F73610B + +Count = 459 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 40A89A9B02EBD9D64C5C83BA21A7F6E56D311B8F71763C0A67D9222F12 + +Count = 460 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 9A7D44F8BCE47DA7AE975D01626CF9DA41241DCB40F57B627DB2C041F6 + +Count = 461 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 1827BAA6407BF7176678067497F12FB8E4D4308AD145C9BDF08DA376B0 + +Count = 462 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 7C2292C443885042726CC2DAAF2A74362F5357120ADC440B77E07D01A2 + +Count = 463 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = +CT = 6A0037DDE95185558855A2BE11C2E42134D49274BBAC71EA7C30622D9C0F + +Count = 464 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 00 +CT = FCFBEEDC8C1EA9663D31B0B1099DB83FCB756CA68D56835CCA4C27E4C2F8 + +Count = 465 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 0001 +CT = 0E2E8F30F0C391A4034208D1C996F7928650DCD1510FF7E1E4836A3E3BB4 + +Count = 466 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102 +CT = 575E8B0D5124FE1FB2ADD8B3B4ACEE7B0D72A712B72BF2AB847A0D50C4AD + +Count = 467 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 00010203 +CT = B7B87F03895D737DE58D81735C66C55BD69CB4DAC86F358ABFBE8CD9F411 + +Count = 468 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 0001020304 +CT = 883200C322B6A50C78D11D4B9EE2A15269CC350CC46C2E840DD153F25B26 + +Count = 469 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405 +CT = B32B255C42EB056FA673CF76DF3E2C950586963F04F3626E3338978AE354 + +Count = 470 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 00010203040506 +CT = E070F7A721BF3DAFBAC0F9407055ED095E29A818C2332D2590A5DA82E0ED + +Count = 471 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 0001020304050607 +CT = 9858EB2547202F0F4F2CB92E94D5AD5D03DCD0A917D6AB58B2C5A10BCA7D + +Count = 472 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708 +CT = 051C362CF017180E46C5E7140C63641978D3FF2F11D0A226209E614F64D5 + +Count = 473 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 00010203040506070809 +CT = 7C89FABF7AC9D748F5D4F1F23EB00DEE5CF46A670F40EC13124EAD00CFDD + +Count = 474 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A +CT = E9E7805A5AD6973E1776BE51A919F819C1D36773522D6C0E8057AF9D9498 + +Count = 475 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B +CT = 437A96250084F91F2CDDD619CAE7FC2DA1F2ECEEDDACB0B3D3FC817952B8 + +Count = 476 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C +CT = F7EDEC7A5925AB5BE45C3D001E87FAAEED66E71ADD075F06799FF10E3E7F + +Count = 477 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D +CT = 981E132FCB6E05D97B4BFC27712A86A0AEDC542D7F1A425E76C97FCFE26E + +Count = 478 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E +CT = D75FB460D0DDD09649B6127CB23B47831ADC0EA6C28C8E6D28E6B562039B + +Count = 479 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F +CT = 3BA03A55E0A533C45551F57E137BE70FECC03CFBF1B26FFF107DD1B6E581 + +Count = 480 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F10 +CT = D49379CDD92AF2E7106391ECEEC1D3E96814ABDDD54F675BA59621E74D5B + +Count = 481 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 0ED61625352A4F3F04366B0DBAC6CD03533936C2E96E3952D34BC7CBA735 + +Count = 482 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = CF7438ADB25D0B7A0AD38BD1FE95035B75446C132A9D193C36D3A34CE0D2 + +Count = 483 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 4E6167E1A9C5A69913248D548C08F3F5EAA6A90A86332789CD129E49534A + +Count = 484 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = DC1C20DA81C6507FF04F37898873FD1191DA26D0BBE0BE8DBA5543847041 + +Count = 485 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = E18C3DAEF7D94AB73C608ACD567F74967817C7DFF42982C6C22B4BFC7136 + +Count = 486 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = C7E0D5D310EA6EE24CBC8CF735DECE37D6910853A97161AB52C030A804A6 + +Count = 487 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = F870F5A0D5BDF885E3098BE5E6FDFD7F19398FD64387C8AC5AE158AC56BF + +Count = 488 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 8C8365A66AE21C1F85DBE288E2212B62B08DB2A5822ABFF5BB6A68657F09 + +Count = 489 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 56B1986DB3CC994B16A8DD77D3166143D0849C31E5623222C2EADDE8635F + +Count = 490 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 6816CC0E29DC9CF5EE3356AA2DC5DA952FFC3582252E036C86457AC9AB36 + +Count = 491 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = DA881562170087570755526093925C093D871298D29927435FDDEF6ED02C + +Count = 492 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 9585D0E243369D6747A3529DADD3A59921E80C091F165E1649C9F15D485B + +Count = 493 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = FCD6D40EEB4170F2166A02211A3207577F59730E28C6E5AF2A8FFDFE9689 + +Count = 494 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 747DED74E776EED785233E35A0A6B8D51FE450CA83A8DD0ED8E216953F54 + +Count = 495 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 94CE60ED5B8FEC3AB32C0C50C989ECCA82D53C1974BBAD94C66AE239642F + +Count = 496 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = +CT = C9D434E029AB94CCCD50CD556B536FDB928B58140D0CC974758C3C87B13E73 + +Count = 497 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 00 +CT = ABF2737CB216E48C905368983AC7E21BB33F05B3E6047B8D5C52B5D6BC8435 + +Count = 498 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 0001 +CT = CD4152069F0CAB5811EB059D2750D436687D249CD1DCC738A043E7C8D7F4E9 + +Count = 499 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102 +CT = 068115A1A61EEE822161225498BBED2DDB1864F5BC9B56D1C016D6D566138B + +Count = 500 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 00010203 +CT = 072704C1B2318F950FC1BD241CEC7577F6408E60D1D0CDBF82701183843989 + +Count = 501 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 0001020304 +CT = 2C77B946EC63D560E4AC86BF5B21F699F0EE7CA50920B31C55AC3D5F55B86D + +Count = 502 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405 +CT = D947444DFD94E9196DA53538BF2380A52540A8250E97834AD6BE51FD83D42E + +Count = 503 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 00010203040506 +CT = 8DEF202572092D738D2EB08BBF16ABAA7D4A3E0B20A0653786B65CF4753506 + +Count = 504 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 0001020304050607 +CT = 8597E78352A4453F3A4E9A4E84C93603AB4AA42F3C109D58254CBCEBCE1BDB + +Count = 505 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708 +CT = C4C26879C7A42F1593C0FF36CD91E457605F16DDFBF6F30D3DED1498CB5B40 + +Count = 506 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 00010203040506070809 +CT = CE14DA59ABD94EEBE3FBEBA9B1A51AE928B3B2D5F5B5D65CE669B52915E152 + +Count = 507 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A +CT = D335FAD7BFF7E7D171649417BDBF26049C86FD9197608D9BED741D21C78D9D + +Count = 508 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B +CT = A2DF8B426BED93B81D1ED02EB991DB8E00E42A80A171EA34604C8DF214A483 + +Count = 509 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C +CT = 80246D0F6225876A55DF221741F134586751B16F91154E39E5471D9633927E + +Count = 510 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D +CT = E83BBA40059B837AE6FCCFE5D189B5F10ACEB872B343C71E61B3BCA5077CBC + +Count = 511 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E +CT = 727A95D518B1397C612E5F58E5A67536D5456C3E532C52E02306DF9EE39F97 + +Count = 512 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F +CT = 87C05EBB2AFF3CBFB6B69784F5E3207B179D606BEEE40F884AFD955E322C00 + +Count = 513 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 3C7B6ABC78A1043B18A7F85807131EEEA5DFE4B4B3F2F689E7C3F71B748002 + +Count = 514 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 58F3F3033E1FE80689DAC957E20D6AA226D2165C419BF2736B73FDDC7035BA + +Count = 515 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = C0CD09D5755F679B9C40AF41C6C6ADE10E3ACF28A208489F1429D73F3667D7 + +Count = 516 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = AE125CFF191639364FDBC61474C5AF7DC1B0ADDBBC3DE46A9C5CB312F0F7A3 + +Count = 517 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 789A88EE9FB4442845E98B5FF1D7D3037056CFC4EBECD07CA44439ADC8D743 + +Count = 518 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = A0A368E9E620C757ED0B371C7732DF943D590DC8B2E14AAA6156A3AB1ECEE1 + +Count = 519 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = C3ADC17FA1554DF785EEC93A1DF194FEA8FE01C3DA09AC2F2517C5B732D0AA + +Count = 520 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 9A1CDEC82D7C835390FBF2ABEEE7924DA5B44A7EBE3D9A5E28ADBB9D60F327 + +Count = 521 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = BFC2F4DB5814B34FD864B31A3E35D1523617EC2DF109FDEECCE7B1140B775F + +Count = 522 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = E393AD98AC53AAEA678E824C50B43E66091064079CFFFF5B6689F947DF4156 + +Count = 523 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 38F66465936D56E765BABD2601AE66D1674537046C27910D96DAE4EAE5D7EC + +Count = 524 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = E4FFAB81BFB7C03FC981E78F0B85928F81950091B048161C1958C5C2C8A546 + +Count = 525 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 3B5271BD6E294939F33555E2828CF33302BF23BD4A6AF174B8DC318E940593 + +Count = 526 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = AA57ACCEA4325C5C91DA1EB41AF8BEF49C2D464F51344CA54BB25F40A71EC8 + +Count = 527 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 1A1F3D43B701B5291A91141BC2BC001199BEC48736F54A737CE18E8BE88834 + +Count = 528 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 5B7188EC3CF7D9936934C796F3849EEAD622CC438F3C9228FA223EB9CDFF2B + +Count = 529 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = +CT = EF0C294594429B657EA6CDD1476737EC4EA2F510FF840BE0862B266BD14864F9 + +Count = 530 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 00 +CT = A4B170FA2C2FCF597D4A84CDE1E4CEEB7791137B8A211BE3D91D252F2F599804 + +Count = 531 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 0001 +CT = 97D7BFBEEE1842E9E042B52F5E01E7EE0D992D25B8B9BAB4E6413D38DB265BDD + +Count = 532 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102 +CT = 4F506F57FAE9E1DCA3B83F301C7D794C00AAC7970791400157F809902800F9EA + +Count = 533 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 00010203 +CT = 30C64146F376E577AD040B20861564B45C00CD6BBEF057E4548212C923E9E8B1 + +Count = 534 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 0001020304 +CT = 2C06C3F9E54AB6F0DAE9B99C2C31C8FDA91C12FA81262B56C106906CA9C65D4E + +Count = 535 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405 +CT = 9D22ACBA0486F7C808FF9DFB4593829FB3371357304B1C0615CE384625C203DE + +Count = 536 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 00010203040506 +CT = B838773C0770DA6ADB610B95A8E4A3E5C0A4A79C84C7413EF8AA7E6834F1607D + +Count = 537 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 0001020304050607 +CT = 4022B9A8622D623C58E58D821FBAC95DD93EEEC934811DB96D008634719BC748 + +Count = 538 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708 +CT = 573FA80904B97B47FFCA75B8B5EC2BBB2E1236B19E48DD7E5F14A93C14A3947D + +Count = 539 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 00010203040506070809 +CT = 4CE3937187EBB73CF5B931A9B8B75CD05ADCABA1563DF3EB5BB03C3221ED8856 + +Count = 540 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A +CT = 6CB7321CEA1A021733BE841260DD6F593454376E9A24609510944903DE04C064 + +Count = 541 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B +CT = 6B63FC5EEA5D8150B6C4AF6DF1B1D66B42B82B134CC69D39620529656C5D5F8B + +Count = 542 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C +CT = 353FFD32013981E870D7B23A2FAB8DBE58F4CD6BCB9707BCE028FCCEBB078DF4 + +Count = 543 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D +CT = 61FA36866B10E0308C7BECEC6087CF213BE2E0809048CD6A29F196CE291AD799 + +Count = 544 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E +CT = 32EF3303B5803D24843E0ABC2206C585D9C32BFC66A28D110508F96272E04C82 + +Count = 545 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F +CT = 82965C77931E6C1632B0B78BEA9FFAC1E59B8CE9DD15C6F8653CF2EA459E519F + +Count = 546 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F10 +CT = E1CB1ADAF7D5FB76A063EDC3B859530EF1D686E27A93EC2E05D50DD88D128935 + +Count = 547 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = FB4F1218C4AFA05D8B0C4509EF0AE1F5D1A7DEAAB36773244BFCD15BCA42D93F + +Count = 548 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = CBD59602AECECF8B98A9FBFE526383DC8FC7ACA5D63DF15AC72546923D5A5BAD + +Count = 549 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 67156AD4AE9841801C6B855D3FD58D334065112FA6304A194D51A22B2541BC30 + +Count = 550 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 4D31121A065EA817E54EA65E1A393859342785A85482844BDB1B6FFF9F616976 + +Count = 551 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 9CFDADC09DCE46B60CCE6D0B8A3A608FD267696C4F41AEE7B6DD7F041DC39B3B + +Count = 552 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = C58CAC9C556A202257D005519B6D2BDE0F6C74E84B1AF3A1E60BEF4E31B03B77 + +Count = 553 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = B9428714002B91756889E5C5B5E0B55C3B45CFC9375D7F735D808DBA9519C58B + +Count = 554 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 10911DDEBD95BF54501C37A978C243045E3EA6A0F5D3B8136849CBB1CC447976 + +Count = 555 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = A85A4E15F8A98AAA14937083964AF7F871D0C4D5B4190B34197B406EAA0FCEFC + +Count = 556 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = BA29DDE0961BD8DAD7302526578D877523B7CC50048770F4ED5B5E8768EC50FF + +Count = 557 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 00CA00DA0080C914DDADE7F18347730A9A8B2EBDDAA8377A067898C950D479F7 + +Count = 558 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = E83A37FC819FE21252F1AC62538E63CB280FEF3DD53131B215209D2D880467EF + +Count = 559 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 4FDF901264652C05941033033AB37CC881A6B5FE32F608513BC50575C1C37A8C + +Count = 560 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 75CB85AE5F177F5FA32B125C73152018140D1B09C891236104D983B16FD02B80 + +Count = 561 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 5A376FE4E47C89D5DC8F43557F4FA0C7AED2FA1013642DB01A3612C54FAB0359 + +Count = 562 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = +CT = 00C48EEFE7A9C5503F60068961CBEB9157167D83AE9D224B169943071414A246EA + +Count = 563 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 00 +CT = 33630FFE8984A7C8785DD49442F68561D434A95D85A57A70285CCA9DBA603822F4 + +Count = 564 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 0001 +CT = 181337B829E4D53D052F27EEEEFC8E22B2025115D7FBEB7585D4D9E532383EA53E + +Count = 565 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102 +CT = 2B6AC6C78991195152086496F886050B1EF3BC856E9929D009AA7DA9824FD4980C + +Count = 566 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 00010203 +CT = 4D9BBC3D5C4767AEBF255D35938BDFCEBE0F1A9EE98E71041AE21FF18F0C006072 + +Count = 567 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 0001020304 +CT = 2CEC53BA589D6842E457DABF7495768DC198ED21AF005924B72EFF2CAE3DDCD8B8 + +Count = 568 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405 +CT = 7760F5483FEEBA07583BA5A11EE035B6A2EAD212937D92A54F3946E14EFEBF5A4D + +Count = 569 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 00010203040506 +CT = 737593EDF75C3733D1B1206EF18FB7A06496004092B6D0DCB27D1F31CE57A58EE4 + +Count = 570 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 0001020304050607 +CT = 81F1C3BD768119D25A3DE8B644928DA463F16DB15E0FA46E7325F5D5C2B901D608 + +Count = 571 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708 +CT = A1C3D90A35DE5424CFE2D48E20D2EEF7DCD39FE7D00E947876FA94A244CB6D9524 + +Count = 572 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 00010203040506070809 +CT = 3D9B9A973B14532C77537516AE11CE8F995FFF899CC37D1F3ABEBCDCE414611DF5 + +Count = 573 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A +CT = 20CF09FF4AF3DF4A946F468B15D5285E88AC350A92993BFA79A15C7361F3DB8971 + +Count = 574 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B +CT = CC4A6CD54840B9449D7FB0465642BFBF739A9FDE99D858AA57E38DD91E1E6F06EE + +Count = 575 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C +CT = A10774BF4368627AE7F4769E70BF10CEF87BABA2B7654A3AC8ABD904C443E5FA52 + +Count = 576 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D +CT = 70C59D1DD0201C19B1582CA014844EEB9E5A59F9666E5D185704232517DB2422AE + +Count = 577 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E +CT = 8B437650DC95EEB1E5CF9E5D70D405017C1F4B05AC5C7D252884F5B0DC4B407F3C + +Count = 578 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F +CT = 9E18DEB2E84197D26821637FED1023591DE8EBD40C4CDC8ECFAADEEB74321E921B + +Count = 579 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 823DDF46B296F6D828090843BBDF8F63422025A86F4DED6C9664BC4B0154AFD5D9 + +Count = 580 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = FAAD68F5D151A09320348D5955F66D377F0226EC1AC8E8169C8FC44DC663683D1E + +Count = 581 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 8AF21480F9C48E8F99AF2EDA11F167D0C939E059B857503EA6313DB71EA904FF57 + +Count = 582 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 6EAF94B0B3AC2CE720957F90255CEF4AD94D2EB78E90CE1DCB440CFF1034116518 + +Count = 583 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 2D826B20205624ED5B0A31F06E9D26701D4D5653DE8A41150064D4487A9A648C34 + +Count = 584 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 05EBF9A8F632B6FA84B27F4DD0D0C5C3543BBCBE940201460CA7BFE8E25AD25608 + +Count = 585 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 8058BF6B432FE70FB1C1B9DDF242E3828141A86E4DB2767163F6C80630A3A638AD + +Count = 586 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 40030879A60CB9F951A78188F0C10733B787A26A5595AC0051E25F33692DD96C22 + +Count = 587 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = F160BD208E76FC5FF65403F75E6ABBEE3ECEAE2A4B5C471A90C0DE2B316EFCD5C4 + +Count = 588 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = C81D194816E26A85CE0BA3DCF2EFFE4D01878C6907EA85FD1DC9231A213EA0182D + +Count = 589 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 776CB287899526D1A024CA3D764C1D97FA5DC402E38956110202C82683DA75FEB4 + +Count = 590 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 47071FB03735958D7D77D6F1AF5229CE4E2EFFBB56B6EF7CEE83644D3673765DE4 + +Count = 591 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 04BBD029C6F15FB17E94F379D0CEC45DE41A1365E8E07466FFB20082313D6FF117 + +Count = 592 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 8CD0818681C761DBDFFA64E7E81D1201B6BBA00E0B216BADA595929CA2A456078D + +Count = 593 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 95DEB6242BB0997805DEED2F3631914700F675DEB2899948A312DCA5AB8DF6A855 + +Count = 594 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 1B40AED7A8A928E94EEF54622A24C7BA4642C69B9BBE816E286AD4671E78EB0644 + +Count = 595 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = +CT = 3E6144A19DF0A9B734B8D210339B2B29D6790F4CFAF397F149DC00ABB72E856A04B3 + +Count = 596 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 00 +CT = 2A796712AAD0C1C23D0D4274706F12A5D7F454CB003EEF28305F42D2A142CD82015E + +Count = 597 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 0001 +CT = 32EF6E6C1D4702C546459583472F478BC8094B6914C8ED873486D5F47CF6A45EFD3B + +Count = 598 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102 +CT = C85418BCBE2A74E033396B6465C8BC5DA52512D7B21B80E4DDE049E42595DDECC868 + +Count = 599 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 00010203 +CT = E83AF4B0F34D9998301124472085D6E257C84AA5F15ED69702F355FE7876C33BDE5F + +Count = 600 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 0001020304 +CT = 36805274C446D5F18176E3E97AB2339E11FFFF783C4228D86FE02410C9F2E8C44597 + +Count = 601 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405 +CT = 1F82DBCBE95ECBDC5C38CD72590A7DE625776FBB044091D44263D14640354509E5A9 + +Count = 602 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 00010203040506 +CT = 69109A3E02FB72A9F54142F0C4FE2C0B2BB44595C5EF08EDE68AE3FD648246E5B304 + +Count = 603 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 0001020304050607 +CT = 57AD8F8A8A0F34B0EFDB7C463200359FE970F455DDAAFEE4FB49CE7E5312AA3AC100 + +Count = 604 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708 +CT = 736CF620EB36810263EBAE95CA839DAEF1A12337CD1D91CDDCEA8AA30984FE65A319 + +Count = 605 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 00010203040506070809 +CT = FE2E7D3D443227C514B4F16393D783AF5480BEB0E54DDB7653ADF6B09D3D8194E413 + +Count = 606 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A +CT = 0B819685BA9173084DB16104912798E841B2346466EFA47AE388918AEC5027278E1B + +Count = 607 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B +CT = 6337A6FEA2B4C197FE35EEAE481B6317A5763E6A64AC783D128D866F6156879FBB28 + +Count = 608 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C +CT = AFCEDC1732A4E30E545D7526D022014CAB6322D6CBC7E2341404B0D7C9FEF6F51042 + +Count = 609 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D +CT = 9421B283B9034A052426E361A5D15CA838341F3471FD628A667AFB7B845AFAC08DBB + +Count = 610 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E +CT = 77D56A1F4A7D994F74590E61A9D9C2725A57C7AD54A158AEBB48C434473658CBE0C3 + +Count = 611 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F +CT = 597E979F9CC9FCB40BD61E3505140C535A218FDB19475BDAE645F3696A91817FFE0D + +Count = 612 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = D98DAA4A1753FEFF7480BD4D1E3B8F0DA6D3DA83FAA02DD95F2478A869A1EF9494D0 + +Count = 613 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 9FF0AC96A387A518A3EA863CF1B3D7CBFFF5E623D1CEB32D1F7EA0625D6654D3669F + +Count = 614 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 389318AA18AAE97C4EB5A50D2A822E9745175D42003C95F182435D7C2A1E9E272B51 + +Count = 615 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 058B677CC520153EE68F59127406AD9E1B9BB5CC4B5E4808B83383D8845A6E640113 + +Count = 616 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 068C5C1749C631760EDACF4F678F8DF2E0C6DD27B87F4635B5A0275EBA620B6BC9D6 + +Count = 617 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 4E4E1A0B632E73D3CB118B8D559CEA4C5A072C686464922F7417E862912E006A1F82 + +Count = 618 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 088024DC216EA695B327F4A10ACC80C11D7BC04D4BC8C0AE0DA0D019BC35D10B125C + +Count = 619 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 1FDB21AECD0DE8C02D55B0674FBD15374C51951C704F5874F9FC4643AFC45244D4CC + +Count = 620 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = CC1A671769C4B79A6635FD5D5074051CD8C721B313042155027FD0EC30F0E4A4BC7A + +Count = 621 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 2385353A0E2E0FD6835200249081F5A472E6030F47B9E7A129111036679D87C18DCA + +Count = 622 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = EE6B0DDB538CA224A95AB38804A3243F95A98761813A116339F50E94DFA903E991C6 + +Count = 623 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 68182DE7567BD23CDD33EB2C20377E6DC72D77D7031AB13DDC4122BDE4C03936CD7E + +Count = 624 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 3AB3EA01579D1C2FBD63FA64EFF5DAC34677D6771EB45CDBD4D1C5C88C3D41F3A631 + +Count = 625 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 6F11FE06FAE20FB5B507CD30287C2FC3352B019D582B076F7FD724A78AC83BD3E0F2 + +Count = 626 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = D4B90DEE960A59EA789923E310516F67DD9C98152B7F17C6B23655A97F68F91E94AA + +Count = 627 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = DF9753D8A877963EAC53D043F03D769A20C317A52673DB25D21331075D6CFAF45072 + +Count = 628 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = +CT = 94C352F37ADD47D3D42C15631DDC7A84181458076E49FEC994849BEB852029AD3315D8 + +Count = 629 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 00 +CT = C1622B451BF2B5B6847C554074CA3146331F4AA30D50C073AFEA591960BC9D85525BC1 + +Count = 630 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 0001 +CT = 9B4C3F246620416DC2A184C2CB0BBB42F6F25FD646A763750931C6FFC2DCB6AEFA0490 + +Count = 631 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102 +CT = BD32E52AC790C0B451CEADCA718A86F3CDDDDFB345CA407F3B5AF0B64D9347A3C7D2D3 + +Count = 632 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 00010203 +CT = C8BDC57678AF512F61AB8A8F4AF6AFE076E558C79480B67F6BF5AD8F6A641E484A297B + +Count = 633 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 0001020304 +CT = 7217F32D8B64B088CD9DD7F3F6436A79B67EB598E20962D5E7D61A76926FC050B0C1F5 + +Count = 634 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405 +CT = F9B0DF244D00EA63CECECEE3AF989D81D6C726D1FDCE322C10086B7630D03B6A28C2E8 + +Count = 635 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 00010203040506 +CT = 5D84B7BB36AD6F771D8FFE1A53280EBB710AA685C3B083D622ECD4900E9D471DFE9AA3 + +Count = 636 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 0001020304050607 +CT = 5BD9A84AA87D89AC119ABFE3237386781568D0F0E5E798EEDB74214BABB05A72D4C05D + +Count = 637 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708 +CT = 4EAD6B8BDAA2440CFEDE5AC54E8079FB66308490F2A45E5683BD26112CDA1BDBCCDA44 + +Count = 638 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 00010203040506070809 +CT = DDC2AB03639C9113189FF418DB192782E36ED9915E8D6CC8934EC48F6943A35A35978C + +Count = 639 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A +CT = 7F00EFDA00B8FD97F3574A56E5825562021084DA57B5D4821FD0ACC34C58772C12EF1E + +Count = 640 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B +CT = A807FCACCFB91CA79D65F19A2CDE96764F27C95B8D4954C18E70552F5201F4101E9849 + +Count = 641 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C +CT = 5DE55E06CF707A0F1B6FAA78338206AA3C882842AC828486CACC9A3D0B1C59F175F468 + +Count = 642 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D +CT = 5E7357ED680E5114D230484D77B7510BC529D3B1F24540F6C53EA13F390738C084ADA4 + +Count = 643 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E +CT = 9F24151F59F2CABE48BC8C299C867E7509522FBBC892E4B00B2EDC309678ABC9DD856E + +Count = 644 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F +CT = 6511B492049A9F7DDA306AAB10D05FDECE56D39266AC0BB7C975977D281E3025EC0867 + +Count = 645 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 71C9C149560ADF1AD807072128BCA26C767F5F6ECBFA2F27B5FDB92FE713FF57A22771 + +Count = 646 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = AB0B3BC1AE26FCC70C279AF1BA9DEC7A6085D4A152280E9DC00E2D22DBFEC4B6D12282 + +Count = 647 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = F7546036EB94FFEAFA4F5EDF5BB37E21D64AB90C90AB1ED085A568E9F8C0F3EA13CD9E + +Count = 648 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 925674AEAA2107C33E78122622694FB0ECCE99A832823A54A217B488784339722C4DEA + +Count = 649 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 96674182CFCFDAADB0B98EE4A9FE9E23F2B9B276113747776BB77DFBBE18F8AD2A9408 + +Count = 650 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 08E43598469E933939A98AF2B0D5F3C5E45AB4FA40C8CBAC5409D35AE79489FE11C18E + +Count = 651 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = EB0E4202F4C050590709E4A8C66E2A8D2C0393C5252FDC06E8782951D9C2DE253213AD + +Count = 652 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 772C644B2FEA773442AEF412EDFD89B4E0765BE221913D5B610DFA03CC841FA9996A57 + +Count = 653 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = D9BA6750E1ADEEFB093C8EE5319CC48F0593A82570322BE63179A745CDB57E8E9C58AA + +Count = 654 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 83F2FCC9FC19D2918A930DA5D25E0A78271D05A6FC7C6A4CF247943778746391D9BB65 + +Count = 655 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = BDC7911CF4F575E096F5AC7B9CD8EDA13D23AF37FFD10E9D14AA448C6B467C47ED2D6C + +Count = 656 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 94F8699B09E9F9BE5C2255D4C12F1C6EBE69C35ABF4FB373649E2D8EEC01BBAFF2812F + +Count = 657 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = F6262B69F29843DD169B793F63BC11E70419F988EC4C1B4EA89BD7CA17B9D2C6089589 + +Count = 658 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 3CB59D747A84D5C68B6C76D367EEC2669A347E11AD4447DE4E8DFC033BCF469777672D + +Count = 659 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 0E4B288606238654BED0EC71EA4360593C64C8E5DDDF5E37F9520E44B03A564685F8CC + +Count = 660 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = DC06E8047545C3737C9EC3D65C68AFCE495FD9A4F32F82800DBBE5C325C4437F0EF85C + +Count = 661 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = +CT = A0BCF9BF90D6A104A282A0A3C2C02780364B8E216AF109EF49631D6ECFC8F38EDE160385 + +Count = 662 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 00 +CT = 11A88F3A4B49852522BA003423389B1259A554B59361B4084AB37F36A853C87E70D484A6 + +Count = 663 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 0001 +CT = 0E938D5D6EAF49512D32B073134E9C53D60459011193BCB672849F7E0CF9B5B6431FB504 + +Count = 664 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102 +CT = 6415472501922762DB103A5EB233395BC99092C2DB3569F908806B4D966E87390E37F4EA + +Count = 665 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 00010203 +CT = DE7C7BDD49FAE7E643924E4E3390652AF8C7FDB1A8928F4ACC91BDE77351B4A829A2ADC4 + +Count = 666 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 0001020304 +CT = B72AC8A69A23C6616DBF03723A5226BF195B874F3955BF78EC8D22B6703ECB87C4B8970C + +Count = 667 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405 +CT = F835F57FC4BF1A53578AB4934DB2183E6F1DE9B9FF7CD54A064A9001206AE5239D17D221 + +Count = 668 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 00010203040506 +CT = 18A9F631666FBE7FB628AB11F589780170C0EFBAD03C695370748332F0A904AF076C27BF + +Count = 669 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 0001020304050607 +CT = 618977CCE9052121E1E23948B817C37ADC61794D7A2C88C139BCC70409CC544402086985 + +Count = 670 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708 +CT = 8E97A68F91470CB7A38BC99E92B40AFA44A4DD64F0627BA311A020AC324DAB48D0C6AF70 + +Count = 671 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 00010203040506070809 +CT = C4DA7DC4320A011D01ACC962FA043B22CEA8BD5DAF6D3F9BF0503A5D838B48833703D3D0 + +Count = 672 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A +CT = 251700C76DBDD1F31DC1718C2B1C841AB106692828EED54ED0A6BBC285DD38B6DCA2C8FE + +Count = 673 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B +CT = 7F5E1E7129F5D3AF42608BBEBC69B4E785BC51FE08AACC36B6DA9AEB7BE6282342E0B8CC + +Count = 674 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C +CT = C0B9B3FCFA1F71BF0E82589686DDC1DBB173585D171C6A1A3A0C9792C6E25AAAD15E4198 + +Count = 675 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D +CT = 1337721D049105CEAEF36D2F2A26B975658F77372DE2992CFDAA35073F12CAE6A4E44538 + +Count = 676 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E +CT = 3669ED2626AC83FDD54330F0FBCD9532A9F27553F62690EA1898F13F4D8D2A6B14A5A4A2 + +Count = 677 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F +CT = 3313CC602CC1DB711184A643C57B4B9C79BA995C892C67839EA0B29F586020BA4CD89A8E + +Count = 678 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 79E1AC9D1BC556884696AC4B6D62B8C467C6BD18711C58C566182B8D66DD4E359A604E9B + +Count = 679 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 223A87D48DA7216BD16DAFC5DA810D18FF78E4307558636815466333BF11A0D06B421742 + +Count = 680 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 47EF322B4185B5B45EB0872B8064AAA7159E19BB7207A9DAC579BD4C4BD2EAD415544CF1 + +Count = 681 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 6781F9BBFB08259267F7B5409B5075FDDEA4536C1254CE3B2B7C9E23E9C42225F2495B92 + +Count = 682 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = DAF1C8E354CEE62DF2FA599CE15C4DB5EFFACE2D779B724B108A0E064022CDB85CB108DB + +Count = 683 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 2B0E8DC409732CF38D86B3B038FD73854943CAE49D3124CE546E25696F050FD99FCD8650 + +Count = 684 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 88DE829B6C16D859EED8381CA0C90D69CAD039CE92F0F1EDDAD303FD176F50CAD430A491 + +Count = 685 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = AD9A221D48CF48EC5E4296B9818A18BDFF5D1AFFF1B774FB4F8EE48A6E8571B56B0371F4 + +Count = 686 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 69F63B718F1FC21D8CB98F307800680F7AD0FC9C256CAB536CE01A17E048F685B995E4DE + +Count = 687 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = DAE6A863AEE9A4655122AA218DA1F7B441F248F0AA7160E4BEB79734BEF1B4DBB6A9F184 + +Count = 688 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 56845422C4C39ADBDB4E6B49817AB15E87910270E6203DC218D495E849CD1AD60D4DFD71 + +Count = 689 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = EBEC5FD5D2850F6BCDAD1DF4140E15444F02650DC6A7FA91FD87F40FB25A5B522587DDBC + +Count = 690 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 2AFCD4637DA9139CABE4FEE7FA27D4000956BB26C4B37068233B315D101307CA3469AC4E + +Count = 691 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 08E7D60B9DE2E26566589FAAD4A5FBEB5D54BC0551B80F091E1E0CEF4D204FE45E882032 + +Count = 692 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 8166C48F3DF8DC41FC7EEBF45BDC9FBB07026516D3A714C980AC1F2C40852A5F7045CE7A + +Count = 693 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 56818624A6992013CA810A9F2846C741483478DFAFBF587BED1BF11F2A8BC447F3A4055F + +Count = 694 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = +CT = 04A5DAE18C5E16FBC4B7C3E25B3530A6AF1E238F4EC68E83DD959914828447F770BA24291B + +Count = 695 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 00 +CT = FD8391411EBC43B13D71BAA964B54FFEBDCC28E8552F8BDE91AD72D47BC8D3843BFC0895B3 + +Count = 696 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 0001 +CT = 96D7887076DABC463592FD8DC234C102C11A46357EC26BFDFE62B70156A10AE3D6319CEE46 + +Count = 697 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102 +CT = E0663B5DE4086A057E7F3F67AFEC94764C28187052D9CFBF735285A041E12E954BBF4BD719 + +Count = 698 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 00010203 +CT = BB59A4A0B5BD9CDB7ACE9A3F0D36B0174089F361CEFE2C06107A3BEA1EFC76B86C8A3B6566 + +Count = 699 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 0001020304 +CT = E5374E188743B23CC42916E9A0C7D109A085C22E716F6AB5BC82D63008FEE5C0C414A72020 + +Count = 700 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405 +CT = DFF2D63F7D75E040034AD23F80AC442E81784F663B5D218FFE18CA4FB034790AD7452A7520 + +Count = 701 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 00010203040506 +CT = C7986B06D5FD0001FCDDEDE4624FF548DE219A9CFFEEADC6BF3EDE8140582335256BFFE281 + +Count = 702 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 0001020304050607 +CT = 261ECC160CE8446681377676A5BB8E0AE700E61555A44B8AA546D52DF94224F71C37B462FD + +Count = 703 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708 +CT = 749F047848474D3A78A7ED4F45332C34B2153C556852555CE7181A916D37AF1DEAD9551258 + +Count = 704 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 00010203040506070809 +CT = DC6027F27C018F997E175194600B6B39B9D899965FDF16DAFECEBCF674CE7537A93D782510 + +Count = 705 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A +CT = C8D31B228B279A4969065DD352026B4F55298E271B6903A82070479A6E49482A6391EBF99E + +Count = 706 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B +CT = 268FE4561E4918A07C6481445D69D69F8B62A131C082D2D0A9C74E5216161C9255E3775F69 + +Count = 707 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C +CT = 1040576B2B7F2E0220F60EDFB56DD359679A16D5B7C0C6D3F37BB8BA5CD9C491FB759BCE97 + +Count = 708 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D +CT = A180B7F5FBC8F59F63F673267738AF95D77F7CCFB8EB9B03729384249E093A2A95EC731688 + +Count = 709 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E +CT = B2309E9EFECEAC782443EAD5361EC28FB97BCC5C20F7B34F0A8CD2F1B046A52F75D35B9463 + +Count = 710 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F +CT = 1D264E596655115BDA864388322E2F03CFC5985DBC1D1767DCF0F6CA616C6B6FC504A484FC + +Count = 711 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 75AD8248B3026FE87DB3221ECA5C46F6AB812E8A759C5066F476CA8262D3CC0B1AA1CDAE79 + +Count = 712 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 80E4199B18A9A6E947CEE980303556AF1DD86F1D989AB7185CC8D0AABF37651A6FC874B784 + +Count = 713 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = E94F4B82E14B78B17CCB56982C3AA3DDBE1541DC4F425429D496F50CF56508707030F7332F + +Count = 714 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 22298C97DF5F814D1F0F1D3D0356D8AA5029EC194AEA908A2E7104EDFE14F27A0BCE34B212 + +Count = 715 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = C133E00D95788CA3BE0C57825EF02421157A2036B6399B363654803000241DE93569B2855A + +Count = 716 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 5E063F06D6C5949E5A71CFC0A0D491D567F90C6E2D8F539BA1775475C3DAF47CBD1AA6C3C3 + +Count = 717 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 7C9E9E12EF9586A2089B0D0BA2B9180E60982D498894C36F927F854E889BD06AE16659B7FE + +Count = 718 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 711250CBF13451750B0CB51F1579D0E6FDFFDF65C19167CB84091EE8AFE1B410BE24D60F48 + +Count = 719 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = DA482AADE11333A3A784124B63DFCFA84B65189C802DE1BE48983CD6308203E0ECC122D97B + +Count = 720 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 3CA3EE3AAACF2D70461829E3673F90174EBE5A4B3BA4B7724A7774A92364747B3178A613B3 + +Count = 721 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 1AA6D1A58471F7B2409101C2F4F2824A39040F56E96FBD2BC0481906D71A9C5BBFAC0C99A6 + +Count = 722 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = E29C055D186D684F7080A8EC33381DAC6902B653E881BA92962159D414AEF992C03BD69BAC + +Count = 723 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 287A386916BCBC61478FB49F7708CC306BC17DBB4B99E2993B9D12BFA0EF80B06C64C41781 + +Count = 724 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 9D50D834CFC921EA885E9228ADDC38E0DA20ED4F9F67F91E7B858D1F98E8E86A4FD6BF9E69 + +Count = 725 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 052AA063DB8A8F865B4228E40A9456901BFD0509F9147D2A2F681222E6D625E8A2C9C9A6E6 + +Count = 726 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = BF72CC915D3309D49CD00BF0C538FAE343839E82745D4280D4CF605E65519C43FA35B7A9EC + +Count = 727 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = +CT = F9EEBBB79327D1F5464282D08DED5670690DB47EAD84F6C59C234F70235A86FFE8C31881DC30 + +Count = 728 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 00 +CT = 3ADBCCE79F1EC93054E4CDEFC3B176DD038676BC9EF231B4D025D5AA064EB74DBC1CAA89C2BE + +Count = 729 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 0001 +CT = D51892D9D6F6D075FBB23070F22F7256A914371A98D3E501438E9FCDA225B55C8A5F9BCE99F3 + +Count = 730 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102 +CT = 352EB833A475AD66959850C96B726953B2D9B25ECEB56F78998FE695765D8A40F7E3EFAEFE7A + +Count = 731 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 00010203 +CT = 63B6A2B46527D696514C3885C5A89DE872C1A5360A3D7F123676FD22CF40C452B491956D3508 + +Count = 732 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 0001020304 +CT = 21825A19323ECD35792A0426433D357BAE304FB768F92776F7212DED1BF70523A6E7C0C7CE10 + +Count = 733 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405 +CT = C3DA48F890A10CBF733139563E7DA80DB515104E957BCB857FDEB159CC4147038895CB74E1BC + +Count = 734 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 00010203040506 +CT = A39ACE623B6337C980F092DBE6442AAFF708ED5E92B752201D063167657CC93FCD6DD3BD3D7C + +Count = 735 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 0001020304050607 +CT = 247B96B51E605E5A3209136FC47C76BE0FD09E47E374993E3C2AD93E4E64DBD51162BE3461B0 + +Count = 736 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708 +CT = 6EFB8CA7E4692DEA7165E5F065E6A2A045DE85362C52732C2BBA17C99B0C8F2437710C59B4EB + +Count = 737 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 00010203040506070809 +CT = 63F698EC6E83773FCB624D8067C01CEC7300F81CAE049DA7A72BB2A1065414D28E66E78B2D09 + +Count = 738 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A +CT = EEBB20A2906E3CD3085D66AE89B60F3618831A7819A8351BA328DF3700A10161E3689B5A19C8 + +Count = 739 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B +CT = 21B8A8E259008C982BA8959C2CA3E9D7034D712F2A079C852856E505CA8FA2FEC58BC08562BC + +Count = 740 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C +CT = B391843BDA12F20034059785039B7F44695A926726B3CBB04C5D2E975D910BF125E7A0B4047A + +Count = 741 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D +CT = A2F4CB3BAE60988F74BC88F44485A508D141A0EBA60C93354053CD1766B5E3E5249A5BE8D1FB + +Count = 742 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E +CT = 333BE0BD873D9FBF903C06A2E4B0F7FBF4B6D946E46EB3B997EEFCD8CB762418079AB0EEB3AA + +Count = 743 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F +CT = C2ED9EE1E01587763A1725B01283BC10B51BB7692DC2ABC36E0A9079282A5829E4099726F00D + +Count = 744 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = B8EF2648409DF3170E7DD883571CF599A41985E1702413731B197A46C13C4B911E6CCECC6CA0 + +Count = 745 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 6EBBCB0AC350D23C313958452F6DBE21C50B2DFB1996D08BD24AE70BACADA70917354C033B6C + +Count = 746 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 8C591987F3ADA292A5202AAC3D228624F4ED45D9F324F635B2D04BDF5C283B1318F526514A7C + +Count = 747 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 6B122135EAD8295462AE73198FFE410519A5EA0138848E49B6EB6075EC96C19E812434A2C5F5 + +Count = 748 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = EA5CDEB4EA23F2E987ADE3B2C37CB71B5AD3822D09EEFFBF39453D2EF633DA718AF595478E79 + +Count = 749 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 490AC1BA199C9D12F9EA069F0D62B3A8F71A5D01D9F2B35898B6770EBA233CCAC533B055EFE7 + +Count = 750 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = A6B9C649F3DF0B2B0A80515189C545DB13F19D8A78B1FC3C8966857F169DE68130916BD44448 + +Count = 751 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 8ED0AA3BC2AE2524F0916E5BF2A9C869FF6D29A202CAB3F73C1551E2EA10AD726FC1E047479B + +Count = 752 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = B10ADAAFC47DB344BEC8163CB26F43425A53D330CAF9C58E1E3D36160FA641DE99E36052E673 + +Count = 753 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = A516030137972F0B3CB18E9004E216FEEA6EBF81970279C7A08E72207273AB8483B70464D12E + +Count = 754 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 8197B7F71A1088CE3DE9FC3D4C23D5E522D808BD0B0BD4485586FED9346B790FA087D985E7BA + +Count = 755 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 42E94B2ED011FF5E030CA672968EF1244A7EDBC180ACFCF512C36425CD0B2FF049098B423708 + +Count = 756 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = EDE668393407A9640C5511DC14A9CAB88AECE27BE7D1EB51D7A5C0BA410725AB826804C8722C + +Count = 757 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = A1FD495DB04555CA2DE857C3C5811B4D223D82328332170FA7C9ED1F9B42170714F585CB0884 + +Count = 758 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = C8D13C94075526DAC76E7CB1346B0612668AA906FC033078A49AD9C5A39EB38F2EF61AD10466 + +Count = 759 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = B0DDF37AF7457D58F3D3F5ADC666D6C11DF0237668414BCD76B762F80B9D412CDDE27D122919 + +Count = 760 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = +CT = 8EB12814B7DF8EA8DC8B335ABD3EAA773F5194A13B5FE0AFD6B7AC6F6332CD6350CE330FF8C360 + +Count = 761 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 00 +CT = F26F643EF2FE866DAD9C2DBE4BA64BC6F856103E264E19AB31DAC2DEAF38B5777FE4911B9AD4DC + +Count = 762 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 0001 +CT = 6FF9973F32166260068BBE6AD4931CFF8E6F2B03437652F3FB3ADDD3BF9F78EF44E77531F84C0D + +Count = 763 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102 +CT = D4B35E538627F2EC84666174CA00462524F7A9BA8702EA95501A612B797A536FD5916C12B56634 + +Count = 764 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 00010203 +CT = 5E9B5496D0BEED83FE2CA88C7F1CD67E8252A733F607028FB46E1BA32ADA03B4E025AE245ABC71 + +Count = 765 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 0001020304 +CT = 3E4E72EB4AA171DF5D4164FECC9E89B20808C46ECA2E746D4C26D795D9D4663820BC45DB0F05F6 + +Count = 766 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405 +CT = 06EC5CD74FFEF3C4D073D7F52D565F808A7F9EA37996DE3675F875EA6350BC9C2838D603D8FCE0 + +Count = 767 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 00010203040506 +CT = 74452E7D761D1F1E9D308C741CE4F33686F6C984C0238F5E268C4DB9DF3A84CF5DB474307F1FB7 + +Count = 768 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 0001020304050607 +CT = FC67906338C65C6AE1C5D48A43A01AA36EDA10F4A01AA132EF43C22DDB5B8FCE8ADBA39332C01C + +Count = 769 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708 +CT = E8D0AF719515CE2C1F43FF27B340AC297362CBD163B59E6139A65A9CAEF9D455D0EE7FD0E65737 + +Count = 770 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 00010203040506070809 +CT = 12165A8E93FA380CE6E81393F9364506E4884F27A5E474AF4F1E1B1AD28E9D3C111F647256675F + +Count = 771 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A +CT = B7E229F67830EA554C86030BB59BB22252A8ED586062841BBA0B638D3924254076EECBE8D9B526 + +Count = 772 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B +CT = F44AD6094934E8823AA9586C1C9888A851AF2799BD2C0B53F386D6E0E70A540F48612F60635121 + +Count = 773 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C +CT = 8F96CA7FCE5D01C4C6B1C4C2E305181189D86E282758E48900C733358A55D11223CA753CBC1D7F + +Count = 774 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D +CT = 392549FB2CB436A7723FF065DB708AD42DD4FA1940480EDEA3EC1FDD824F498DA44BB6FD508ADC + +Count = 775 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E +CT = C56782668D4F69D8263DAF1C5F410B882DD6113D52A4A59389759C1E506F34396A6117DABBC502 + +Count = 776 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F +CT = 31713D76E3EF2A52CC7BA42499723CB8C901F10177D3E585BE9039AC06AEF73F3E8CD19B43E2A7 + +Count = 777 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 4C7E93A2E700534E094C38FC1E15EFD0B38371076DEA78C0989346825A3A72243145AF9A0E3C5B + +Count = 778 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = B2E1F92143DE07005E38A3B4CB53405C956C98862723A2A1686E5AF192D56D062F53E57317DB04 + +Count = 779 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = FE83C5247C1F5555F5A72E735B064A78E165781169AF07D2F78FD54B294C403A90B1F4E65B2644 + +Count = 780 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = BF65111B5D2002CBB859FE63D53E7C3CE7643316B7C43F767ADDD554AFC2EC90140469C306434E + +Count = 781 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = EED3146322BB83F0B7D895480E4AEF71C8D6531DC7498271AA8F39110C1E3D7A7CB12BA47A9682 + +Count = 782 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = FB585EBA78EE2CA4B5A113B74FBDF72671FBA412CDB00BDD52644168248FE9932155EC718DE545 + +Count = 783 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 205FB1023DFD4162A2D9754908BE4292C1A0E2591CAF368B6D861FC137FDAC7EA9B7151D77DBA3 + +Count = 784 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 9B32D954A56EB24A2C1A830C71F47220BC36196EB6266DF038290F09D8AC8031582D675E24A7A6 + +Count = 785 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 1436612371EB40E2A9C6538A0398C0748CD58D0CDCD34F4F9AC3C0B0379146FC8D0A8565DD33B9 + +Count = 786 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 40974A76C99D02EDB4AE33B7BC43B1E4429C3746CCEDD2BAA7FFDC2F02F4F9A778B3BA0567EAE8 + +Count = 787 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 05056E1CCCD5B8E116154DD41834CA86B9FAA64D0EA73FB22516CFBD24C9308D1A4161994D6B8B + +Count = 788 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 216AED297F8EB030731AC7EEF3AF4245B58EB8F3793729C5D8FFD93D1317A8F0E379B4591A177C + +Count = 789 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = EA2EB6514225E107CBBDBEB9C18AF30A8BEC8DAAC73D3B32A37EA22C50BE11B49A626604C14464 + +Count = 790 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 29E880DAEAA07EF8893CAC648B5094FEDFE58CFB3AA7D0779E96987201A31B45C148CAE6BF09D6 + +Count = 791 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = F41088E8A014AEB8D5D64D7469C2FEBF859104321AC5431CFFB2A72FD65C63391573B409D1DF63 + +Count = 792 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 0668AC9999E590ADBD245FE6CBFF85CE11AB7A148EB006B759FEA17D6877B9AC6113630C987418 + +Count = 793 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = +CT = 126CC5F2D413893E7FA5557F329E10611F827C7F29F29538E9BD84440B38BFECA20EFE9B61AC2B6C + +Count = 794 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 00 +CT = 20B48E7E77D4C730EC0AB54F904956A20BEEFD115837E79D4FAA9C269019E5EF8180DF20A7FC3A89 + +Count = 795 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 0001 +CT = F8B2DB9A61E52E790C0E483004521784D389FC151393F0601F2ACD59AE76947320A554947B13DEF7 + +Count = 796 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102 +CT = 57DFC29E14A44D160A2AB4E9889AB56D464C1BA6EA18D5208641EA59739B514312530652452D9BAE + +Count = 797 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 00010203 +CT = 635D9F374B92CEC4EFCDEE2BACACB4B7421BE9F4EDAC4B98879EB917078E18E325D36F7AD33CBBF1 + +Count = 798 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 0001020304 +CT = C999AC1A6438F8D8F6AF7F8A8EB86AD4DDE3307A71C64E9D9800EAA5F1A63BA2C458673D98F0B0F2 + +Count = 799 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405 +CT = 3C155776B68A4B8943C407D3652F9E253D100825ACE34227F16940149930621D935A5405250E3281 + +Count = 800 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 00010203040506 +CT = AEC1FEBB9DDE201C3ECDEF70B3860E88FE157D30AAC2D56D2A222B618C9093F5C760E79A10BE079A + +Count = 801 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 0001020304050607 +CT = 2687E15E32F8EB76E8F1D1FCF1009316A8A4D434DB04AC6862F864BFDE3C01EF9380932B0B513D9A + +Count = 802 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708 +CT = 771A554A41C2D74ABB5AD3B8F0F9F29120532EAD5506272ECFF8186BCF760E3726DED9BDE96EBE71 + +Count = 803 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 00010203040506070809 +CT = CB6A283DB5290B4B3704EED1BBFD7A35AB5C78A2650B7B29B690F69F5B026F3B8289C9B1EC01D63D + +Count = 804 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A +CT = 3923202A1AE4E2B05D9EAD9AA9EFC4CC15000072F71B38AA23C47D320F78612E924B050C17A1CE83 + +Count = 805 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B +CT = 052010B92D3D76A163C643DBADEA2F2F707DF19E94BEF8BC79E504A4279481F76F4FB8DC8AA08CF8 + +Count = 806 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C +CT = C0EF852F172DEC714946DBFC2F56FA671B033A5BF7A4F70A73B1608EE54682DA344B4C1788DB3987 + +Count = 807 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D +CT = CA15F5D472C1F1FDCC6429D45CE76ECD1F797DC39AF7A6DA0455A370B864DA391A08E1DE957DB4D1 + +Count = 808 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E +CT = 63DC90FC0C44BE99F0BB24E8B64E2AC88C6378BA99ECC78E2AF3C056737A3687A3784F2573B7D26F + +Count = 809 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F +CT = DB44D11DC7C1AB60940719AA0B66421AF1904EFD4790EC6D900590694506BFB95E8E6915E0C3EEB2 + +Count = 810 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = AE4E53BC1A28901D145237AE8AFCD15307EAFE52B66BA2FCAF8FAC873DA8472DA5A18A729FF2B3B4 + +Count = 811 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 926C98DC8106C4D6C383D777952E37D33E7F05D4DEBB8F48DA856F1ECE703B820F026B0FB84A0941 + +Count = 812 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = B9937D4AF0E88F8917E9F6AA9CF2D00F73A472C20FEAA29CB2497424C33A83F31844C6DD65E98A12 + +Count = 813 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 5961E61763DC4B55E9D04E3AB6625CC9DE674F1734F295ECCCF4B881A7F295201A85A3D79929E9B2 + +Count = 814 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = CE56FCE198EB2AF128BB01B57F3A22D8AACD993CEA4516F16B6E3F51BEA97919119A143F576F0B31 + +Count = 815 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 05A604FC68C16ECAEDC654BC0196CE65292CD43BEEA9B1E9BE9745924F6177A9D74EA6E19C2A1F6A + +Count = 816 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 6628258D3B248FCA51B301B3AAA2D75C35BE3089858CB1CDCA435A1ECBFD774B94F9FD53F9F28818 + +Count = 817 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 1F945CFE5099E97FE6961491A478DA682D5F96F538E7CF44CD08B7FB59F87DCCE3205A96C41CB364 + +Count = 818 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 08004F723EF18C9C782B583CA487365766B9729C48C91EDEC884A7821AD0ADBEDF5C3E8B5A566826 + +Count = 819 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 9C1211CDE325FF71286314242F5F6D16946F1669FBC142CEA0122AB9C7B9AE1102C5EAA9EC9DA33D + +Count = 820 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 77095DC22FD400471FFC7F3991036AE525F9A99F8E3ADB69D79EC1990E0AF56BFD23501D8BA1A832 + +Count = 821 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 4A98722B7CEA0BC6C86A17D7491EC2A38BC241E18F67C975D1F70AE58522950DF41E1B22F9FCEE23 + +Count = 822 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = EA2CF08FC028D934CAF48D973D6B6444D2F162CB14E5EC7BB4326213DE95EE2E8F13CCE3EC27C4BC + +Count = 823 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 032C015B0B314DFBD38A5455A7642E0D633554D3A29B0132F3E74C8FCA9454FA8608632FFFB9A37B + +Count = 824 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 8B8BF86B7481569287473A68FF15461D84B16F631AD5953B4317FF5DD27794C9087424BCA78F68F1 + +Count = 825 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 04FCBB9CC28981BC668125BFD22F8F54AE1911448C44FD40E3F596F087F7417F62040F20421C1763 + +Count = 826 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = +CT = AF04BD10F3314B1E6E2308EEF628721B2C609BEDACED282D7D41F7584B021F6CD788F906D899B66829 + +Count = 827 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 00 +CT = 651991091CC6F01C7A7132BEF730E9B6AF7772D7964A50B83BC8CA5D4A80B7D69D389642D9729C718F + +Count = 828 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 0001 +CT = 0BB09D979405D81CD54DECD31BB62BA12EF93F080FAB266CFF3EE10736598BFFCD00051BFB033D75F4 + +Count = 829 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102 +CT = A1F9E9F0B863400BA48290823A0CC54078CA7F50DD96BEE801B760193D76D36F445045EF9CE3A890C9 + +Count = 830 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 00010203 +CT = C15414E5486EACE0E7030C6595359912E2D77A919E57D5D489A46D9B9B9518F2ABCCE52BD76833D68F + +Count = 831 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 0001020304 +CT = 2302D778E66938AA499C056DE52D5AF73BF723B4D3B72C2D8C3EE76EA3649A133946A8B04CDF492B5A + +Count = 832 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405 +CT = CAC67DCE27E35A3150DDAE04BB63865C4796D99E48F247D93BB43A5EF443D6586C3C7DEF37FD0ECA2D + +Count = 833 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 00010203040506 +CT = 5E9A95B6D06FC5F2C194FE3321FE30970C88FE087B0D6C9421159E789251D7FBAE4A42BF5727C0A6A5 + +Count = 834 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 0001020304050607 +CT = 87FB43F304F39AB6AF25FA421E3B1C3EFBB614800B61B077B004679D953E531F70A5EF911EBEF1D23E + +Count = 835 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708 +CT = AC997E3F13818ED7EB0F857A80A5B4E035F3D754E1FFFE5EC93924B4395E6639E181FDA153952DE94D + +Count = 836 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 00010203040506070809 +CT = E2373CF537E5B2A5373DE1EBDD5087311C2521EE3FB3E07C31895804F2C76A0666FBF0BE5BED5E7784 + +Count = 837 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A +CT = F842177458F111A8873861D4D99E6AD30A195C6234D5C0E94E38E79038792473F13A547CC7887634B3 + +Count = 838 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B +CT = 837121D4BEEF957A25931717F26B6953236D4E30BD66DE93D2A7D20E6E8AF954DC6B6A88FC0EBF1743 + +Count = 839 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C +CT = F17B8954D9FBA6D4B2CB0F4A68FA06C8D380912959AA9D3901ECB3D76F355411BB8CF2CC0F735D2766 + +Count = 840 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D +CT = E8AB2AB599B57EBED5B747890AC450E715B4CA4D956A9B27EEAC50C38FEAEA27D722A186BF36EB720D + +Count = 841 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E +CT = BA4C1E0891245033645D48F0438F6AC5472611ED16D988844CABF78D7CFB031039B03B74A1F6750B38 + +Count = 842 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F +CT = 4AA10862F526808767C543EEB438BCD93F431995864CA8884A39578AE1F9E67B9850907FDB2FDACD85 + +Count = 843 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = E12FAA314954AE0FCFEAC615CD836F5845885C6AE3EA874BAB53DDC81BD8CDE368283EA17AA8AF3673 + +Count = 844 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = CF04AB29FB84BD52C4CEFDDBD5EA3D13946C552CF99E4EA28C452E858904D74712859D748D1E632724 + +Count = 845 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 6F1D7E2A516F10A88AF3119CAFD876A118ACB3ECB15FBC13CE9D077D91FF0BED6751D3BC795BC49C15 + +Count = 846 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 334D531BFF5182B6F333DE077566D8D9D3632ABCC350A78EB6787540BC1DB21FB941290B769537A2BF + +Count = 847 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 153D88758D542B5C2611F882AA6E5ACBCE7FD31ACA3BF964A853F7E52E03367C9F6FD7C73F50B9B24C + +Count = 848 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 079C2F46C630E65A21F442EC8E6F839B98C334BE3AECB266272503B163B8256BA06DD33B8C12BDC03F + +Count = 849 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 8C9B88D0ED43D65EE82415738B81EAA5D0322191380EBBE80F303F520B1BBA3C8F4C5FAAF073ED4962 + +Count = 850 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 5C3738344DB426A22B22D7AF3A265276FEC4AEE8359D3BAB3E9E03F400A19594A3BBA661FA796925E2 + +Count = 851 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 37F373E3A77A0900F8F3C8AD27FF24812F4759F6ED2F54B12B26C2C8D989846BEBFCD63D7528525ACC + +Count = 852 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 02966CDC3666415CEB1F74683DA6A957F113B710BD281F6D962CDBF2EF661A4C4329527E534F58F243 + +Count = 853 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = A90B952DB395DE1901B3854BFF722127722A116F7C1F3D5CAA60CBD4524BD7743A2E8D4F375C4C7BC7 + +Count = 854 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 8144BAA7CBB58B7CBA55EA5C1CD273FE72472C5D9521F2E512BA92CD4C4C0124411BC90C1E883D1F68 + +Count = 855 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 1BFD03AD6763BBA807B3C16E0566F9D465B3764639ADAA17FD47C0870570E093B759EF0C233AE033B2 + +Count = 856 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 20BCEA542DFB8899A3EE1EFCA08A1E7A978DF163B0619630ACD82A60C8386AC6F30895E5A9D3189358 + +Count = 857 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = FE75FCA4BE34EE220177EF51603647CACEDAD888396527B5B9D70C11DE33C9DDD33653A358C2E7AF3F + +Count = 858 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 5B158DE40EF52648B3FEB44F73291DFFF5F3E3DB5FF224183ABA576846F08086F6052704CE39358565 + +Count = 859 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = +CT = 451EF5AFFEDCF2DAEF04B3482D951D8AEED57AB7D238D4BA76351DD2A2DEF9B2C8987ABC0A5FE385E12E + +Count = 860 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 00 +CT = 0344206C827407E1E5A771727C97505FE1CD6B864554CAD3978AE4792E27CC0C41ED311EB069B5D43325 + +Count = 861 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 0001 +CT = D923125D4BB5D598617D33D0C476B5547FDBA7AE69AE36A537232C46014E970F1409DB1D5E994C8AABDE + +Count = 862 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102 +CT = 2C423D632CF1E302EE80B8C8B8C3FF6705421CF89AB8B29BEBA4ED10DC15348B6CEB09675768E2EE5D3A + +Count = 863 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 00010203 +CT = 2D80A04A53860DC5797C8E2D92428AF65705A578D62B5FEAA0DAD86186CF9B7E09AFFD6DED90DCC8FF7A + +Count = 864 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 0001020304 +CT = 5C81007685C04DF8F5AB516FFB06A134B6CCA77EC2F7332E1C32EFB797BC234026512B3D6615460343BE + +Count = 865 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405 +CT = 15CA1F4E25008E0EC87076CA0754B3B20CA53B200221F82B947E0BA5BEE3557B30B1D101538A24F638F2 + +Count = 866 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 00010203040506 +CT = 490A8F6FC0BF23C580DDA2B09B06623C3D9B4630576FCA96E4CEF291599EAFBAEF76A5F5F400B9422444 + +Count = 867 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 0001020304050607 +CT = 467ED4C2528F80806A153DD63B49633CE9CBCD881B47CCF79B5870FA8C5F210C5FEF2C6BF596393ABE6D + +Count = 868 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708 +CT = ABA25C315F702B83091B848B5B2F803B43212CB0F128ECD50C0167AB57B8234B9551128EA372E6C8C40A + +Count = 869 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 00010203040506070809 +CT = 320859BD9DCE7A738F7B6F2B75F853F8D5DE9C98FBD0E5A2F1CA371CE3086BB4F4D498CC76A548D6383C + +Count = 870 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A +CT = 77DA3A6BF1CCAED066F8820FF67B53A6035092CF454F715FF7440BBF9C87A1FB76E151D4CC8FA5ACF964 + +Count = 871 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B +CT = F5E39756B9F65C346A49C40D317A1135D19561ABAAEEE51B9D0F209786EE2F74D6605D2B74410F1C31C7 + +Count = 872 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C +CT = 7AA9EAAD03F4C86588E7C02A359EAF3FAC41519A853973494E2838786271DC619F54964B2D5286F2FC15 + +Count = 873 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D +CT = 5BB308E6EC5CBE7FB9B462CFBF65834BDB6F3BC6B117C8BA3BE11FBCCBD3E9D93682E8404AFED7165904 + +Count = 874 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E +CT = 38436CCC44830EF75823D65ABD25C55D008AAE3A9E38E817B060859312821E60441AD8BF6E4A65849E09 + +Count = 875 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F +CT = 000E81D1E7DACE43599E406E523ABE039C688A12D866CADE37767E6D2459E08E00099C80808D78F2769D + +Count = 876 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = D89692073EC99EE6BAB2E4E5953C8AAEBB02DB0EBDF0048835013AD3781A7A3B00781574E48845F40372 + +Count = 877 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 4ACB2196062983C474184A500F221525EDE764F35E725CD2DCBB6DBA2781CA23A3A939F141A890B830E7 + +Count = 878 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 7608B3540DEE7EEB0D07E68ACCDD5BF8D94C6BD4C4141C049F6C576C6B9AF6BD3E22711C37E8D45C51C9 + +Count = 879 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = CC3FA47F7667B09C40AA0D1C168D3C180A3ADB9A9BEE3A00620563BB63E299AB4D32F47EA65C61662397 + +Count = 880 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 48198078D1A4C96CC87732659FA12795EB1369680567C74661C23B4B5512B28597FF427E7BC412BAEFF0 + +Count = 881 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = F421DF62F8B729EDCA7D3FCFEF7EBD6218160CB08AA5455ECD410C117FCD6AADE20A98B99B33F3BD1606 + +Count = 882 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 817DEA984D5DEEC575D5C34111734D1FDDC531465E82F487ED0D44A09A9797E7F186368340DAB30EF216 + +Count = 883 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 54B488DEA696AB95944D1CA6CBB493B09DFFC77591FD4F76A2E3984CA8D4BE63CBD101D5C98545621E47 + +Count = 884 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 61F38F2EA0D5B188F007FCCCCC5A0BE47A6BD38498A08EAB42F4383E333B4BE111CC7F973C7E81CD8EE5 + +Count = 885 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = FD20037A1BDBCE3B5CA3F19D081D8F53727D31F0EFD156AB2D7CC92803A6E8BF6E6E0DC365CF88BC614A + +Count = 886 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 6B233034B356D13D4AA190D349FE71C7BAC975B870BA5C2307E8654E8B61EF2143E88D4CC0395FC90E0D + +Count = 887 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 36E4E1C14D057C36DFF3AEC43A0038087E9B5B6CB7A90876D0622EFF442AB536E7DCC841E9A31BC43D29 + +Count = 888 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 8FF0C9F01EB2474B92C6D9C080595CB38BC2B796E767C6BB5C7CB40FBAE44303C26DEFBD605EB8D4B56E + +Count = 889 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = B9F40B184D6A9F8F687777AE14EA0653F7DFCF479564A20EE7B6C52B2C9293A3AAFA84C0C114284764D9 + +Count = 890 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 4D0D8A0675DA4E6C2945AD2D5A3A60DCB2C46EC5BB08DA1EDC210968F2950F317E490A34FDD5FF5C1C86 + +Count = 891 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 51B00DE55EF93FA3D636E19DBCEC81D9D79EFDB37FA99CE6ED2CC88BA65068DB6A0C25409B2838ACD6BC + +Count = 892 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = +CT = 19A32533AAEFA7F294DC9D880BDEB858E910E9E820FDBBF7E88E3803D491FE6030D0DD6D75BDD556130004 + +Count = 893 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 00 +CT = F5AD4FF8FF5B068555E337D187BA35792B0E16B5C2B5D2B4B2CA52F35E62AE0DB5B911ED2FE09D90DA86A4 + +Count = 894 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 0001 +CT = EB030AA6B947F5C540E46D2A88B3F756DB8FCA93E601938A9EB1373E867EB1E054C4583FAC7CA4BEE5A2D6 + +Count = 895 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102 +CT = 37D6D6590BF7AC60829547686AD8E9439781BCB313F3C2D077306F2CA26355EFAE7FE06C0D94F1C568C355 + +Count = 896 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 00010203 +CT = A6F59A731C5EABD585A81C97027C6B36791F5BAF6F3FA65EF5A01EE0A39EFED84021C0321E756DE195EABA + +Count = 897 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 0001020304 +CT = 940734767F381905189522B014E33224F27592EA440D1223377A0BCFF4E5193A4E5CD188D5BBFA528B206D + +Count = 898 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405 +CT = 6B4575A796B346306CAAA750E55A74501CED212D41E8B7369DEC5B9314927727116D8329B81F5178FC0AC4 + +Count = 899 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 00010203040506 +CT = 657DC0DE5254C9F4C11FE4DD6F8A7073B56A27A4EFD3B36E82E61B5209C445BA1876CD67B27B2EC1BDFA69 + +Count = 900 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 0001020304050607 +CT = 2A1F5B135529D33B64A02D5B43347565B4D547C8AE473F3E8589776B15201A3C403612BD8E78CFD5514CE3 + +Count = 901 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708 +CT = FDAD592C61BD075ECC86C63F4C6F05136E957156AF348050AABCFE256FFEDF4F8A8BBBAA61556A62396D5B + +Count = 902 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 00010203040506070809 +CT = 7D899E1C66B62EA1AD891312CDDB56F797F91E5C53D8E19AEEC86C4543C9E49B1ABC9EA5C9884BAB0F1540 + +Count = 903 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A +CT = 7F29DAE47DABB2806BCC83C1247351BD6BB4D24D6BE9E5A4C258613E90A519A853E14BA1DB9061D7ED3AD0 + +Count = 904 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B +CT = 96F6132AD3D5349F92FA69421AC62CC3D1A4AAE1FB4DF883DB506E32E640CD31C7E895E8FBF53F3073B0B6 + +Count = 905 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C +CT = A22A027420A4BCCA92EA289A928173CFD864773B351FA2B19B877869E31746B84057C7F67D643965B048E2 + +Count = 906 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D +CT = 5C448EF41BAD3A1864B5EB1C043EBD7470A0297833E58778E90A9222B58036C90664CFD4164DCF16401689 + +Count = 907 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E +CT = 66592BC808240BF467EB379688BBA86E3A5897B60CA4863F9A7ED26AF00F9F48F4C99A409AE87CAD684A25 + +Count = 908 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F +CT = 2F8C2C525DD32464496829658786EB9EF046C24135D3B2A8943400EA69CB236A1DE39E5EC3BD3D2AA0BA75 + +Count = 909 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 6C3B27FEC386CF119988F2D17F4AC4CFF73AEADA18F5E4CAB4BCAE79DD67F473A2A7643A608BD45364456F + +Count = 910 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = CE3CE9F1F1C09ED6319E557ADD4BB0E505FFC4F21862FC983CF4FB76B7651280C712C08514CFDD39381674 + +Count = 911 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = F815F8CABF46B20027886E5E1D843C63CB59D575EB4A70A581C855CA76C9FA2064A7EFD7D26C0C64B03165 + +Count = 912 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 969DD4AB3363AD45593CDB09F5E897064CA8E694D4333689684013112139B6EFCC419F5B2695EC173F2AC4 + +Count = 913 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 5642072157E26636092F8B30CFD109ACF18A1E8167DFB0DA5EC26E63B089CBF3F07E07C3EC7A51C142D2F3 + +Count = 914 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 0F15F6DA00C966B57FC572EB42DA8181852307D89EB3CDCF975C9362F1BE79B2900167471849078111DEE4 + +Count = 915 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 9F90061E714F9FC973166EFD46025C8321DD06EDDBA649C9F2059789A189C07E32B77D1EA23E89C1A63214 + +Count = 916 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = CE886499D31DC40CFF0E9797AB3F894FD0DB32F7A3EB049BA9519514FEB2DB3FB3D6CF7993F3AE42170A20 + +Count = 917 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = FC183C633855953E29AC3BF745A1BDB55015522A86DC0AE734B6BB620A044C33EC922976346D94D37ED9FC + +Count = 918 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 01F1F4D719B18B3A40C930D4B613BD6BC2F950FEA9962200CA3EF73CBE0003E46411437C063DE31B13FEDD + +Count = 919 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = F7D4BA9A3B57DA489E154D97405861F10F8CF4B00F6C477487E1B318F2E111D176A323C760122B17D40E8A + +Count = 920 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = EE36D428BAD6E3901FFC7E4120D767C160E638A1A2590EA336164648112BAA0CEBEB655285A46DD96E99A7 + +Count = 921 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = CF96D84E70A1C5ECF18D96397216B6612F7E12EF26F7DE79E538D4043370C37A99A33FE952261B242FFF2D + +Count = 922 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = E1707B9CEB74857EC13A0EB3190C05C90F6D797673D4818B009FE8F1FEDD3F7B1C6B18E0AE0E22AF386F5F + +Count = 923 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = BF5AECC86F81A7B24B3856B335E4107E86D99F2BE4C3B56352D82953EB5F9F25A473B02935597F46A7B93F + +Count = 924 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 4581AB92CDFD5A97745915AF2D8C604599B836C7265B534C294D315FF9A4F27219103F5E189F7BEFDFC3E0 + +Count = 925 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = +CT = 41B7B1BD8BADF224FC49C802ED668181BBE7C54366625F20AE78B75A46631671B6C9142FBE3F18F0EA9659B2 + +Count = 926 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 00 +CT = DFB3968DD480DA7340354FA1213CBF10262C676513EAE2E4756ACB5414385FE0F14F0530AFBD3F3D069D1027 + +Count = 927 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 0001 +CT = 6FA318DB2553B7DE56755B644D3DBCCB663DA50CE65C5E706140DF3A6D4ADCCFBF7F8F32E11C4404F2725D95 + +Count = 928 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102 +CT = 49E298459B37DAC149D630BEF355EBF4ABD9CA8E8C315870C82B0E59EEA5FD9C49DD213D636EB8ABF46B6061 + +Count = 929 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 00010203 +CT = 4BD80BB2E62B717E1F3A3970C95EE9A8D608648AFA175D90951E8A52A92B3FB2967425981FFA45F8EFEACB5F + +Count = 930 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 0001020304 +CT = 8D6540FB0BE9B8C4D9C9285A91E99D5273A1629F8C9C0A15E2A5110258127A61F64BF6746FB9A422982165A9 + +Count = 931 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405 +CT = FD176774E9F7FFF6959319439F2E1ACD3440C42BB86787E4B3930F12CED8FB59CAEC551AF18AC4F4B0F7B739 + +Count = 932 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 00010203040506 +CT = 028706447623F303D9BEA7909E66F51DADFBD18DC8DC9260AB6A18793C543D428E6A22435AFD941A7DFD128D + +Count = 933 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 0001020304050607 +CT = 72EF5281FC281C57A4C57F0B783A1ED02963305DA405F942C311F9875C1CEF1C245B0CC190BBAE5297C020E3 + +Count = 934 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708 +CT = 586406ED6C6D5E48B065FE9EA645C318AEEC536AA81707ECCCA7591BCCBB58D180240508A0F622DB594A9918 + +Count = 935 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 00010203040506070809 +CT = A5A195613B4298D675A1346009E2DEC2B90BACDB2B5633CEF138B69EF0CBD26BF2E4228FF36BA701B7F9D848 + +Count = 936 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A +CT = CBA7AAC4AB51B7EF0B674FE54C2B7E1521E5C6851BB79099A4ACDEF12249CB7A59F64BBECA6E62630AB9C1F6 + +Count = 937 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B +CT = C8B49BC0ADBF80A47AD3FAB5D7E6ECE93EC1EBFBDABC91D45FA01835CEB5FF9057237A9B536378C66F149477 + +Count = 938 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C +CT = 37B4FFF223F4070919D3C5F5B835A1673171B7BBE5DFE69D2EA2233D1E28779472B8C17B16F8EDE8DBFC7C8C + +Count = 939 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D +CT = 0D7F7331E83F36187CD3BACED33592B43FE4ECDC4A67DA2C786A525589E0655E5D7C25D151D937A5BE9E98BB + +Count = 940 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E +CT = 7A3E1EF033513E9FD2207D6183E2E977F53EE0AB1C30EB5D1C2EC3086C119690B869C14BCB2506B2182D95BA + +Count = 941 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F +CT = 81F0A584E5F045D7DE95DFE581796B8B4826BEB03D7F4E7F7439A060E9DF3EB753D7B90AB2C2E7EE95089ADD + +Count = 942 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F10 +CT = CE5EEA17D07A107634C7AEB06969FBDE926A58314B9089F323692D985613172B4B76C3214D8128ADCB15F2F1 + +Count = 943 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = E16D0167C21A223FDCBFBCCE44624708F80EA4DEBA18217AAC790EBEC5A27C493DF18CF11542B8AB18FD5CE2 + +Count = 944 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = CCC7E5B42427A0B697E4FAD60619A6DF95DB0695EE456A1995CDF56E9394330E02F48E6815B7DCB7EAEF3990 + +Count = 945 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = D9448B255E8A84EA4DB91A1BCFB0FB306585F6A392B50FA42EA53BC56649EB93C80CC6C5EE658D01977B5234 + +Count = 946 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 597E8BDFEB15536D7C79F9ECD0311724B10439BA94823E709871F206BBE449D7E9A5C032A06422C101C88188 + +Count = 947 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = F96ABD9CC3AA699D8E5EF1BCE6EF9589D9C1B158343F540C97162C645432D8F89BAE08A94EAADFA41135ACBE + +Count = 948 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 95DEB425618EE095DA36DBC4ABF304DDDB2897B4766C5725AD6FB6C544EAD4C84590023F3DBA0BAD95359848 + +Count = 949 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 7E884D82165A741294B49CB7805CA7333E28DFCAF36F897D91D1D278710D77A472C637CD2B78FF4506A70493 + +Count = 950 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = A268197F83A85A3A5969C724A1FD154A143EB3E56B81EB4BB0FEE9B3CE01369976EB98A9D732D164CD09386B + +Count = 951 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = A3CBC69F29FCE5E2FF1F289C446D041CABFB7D290AB6BA39F6E04935E36537B22E241D620A62799125001B62 + +Count = 952 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = B555961F952D7F2606C1D4358B6E287A7D3EB016DC0607EE06D4674F2E3BA0C2F454A2C48A8474CFE54D125B + +Count = 953 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 5DC536822D8B2B935CB56E2A2BBC088312E65186ECB8ABC1750EDF6B9BDD48C9823B4AD42BA44E292BA078B7 + +Count = 954 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = F70B5102CB608E74DF3B04E2069D17D4E2EE9DBA1C46C95CBA703DBE53FD2B222871432DD9E4066875811040 + +Count = 955 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = BDBF2A734F116257CA6779060F59A1013733C9328E7D83D732ABD902399023F4768947472BCE6D35F75B5B9E + +Count = 956 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 0ED340023E426B2DA909C5FDD6FC0D28387D495B1B59B441D67078375F9446A539FF8F0EBB8A05F3E5CEA70B + +Count = 957 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 4FC88AC68DC354CC75BC980927EAC6BC6845B73040E46036D0C911CAC2B1230B3AF6EC03103047F45F5211FC + +Count = 958 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = +CT = 6BB5E66ECE5BE5D80B83FE235108E4922EFD184062667270ED8068972CBE84A5FD736998C7914D735F3D001C9B + +Count = 959 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 00 +CT = 7ECEF8DCCC31230D9A3C99C0FD215BF12DAF03CB4497BD215C177E8B73E36B50E36BEDDAD50062D80A89B58E3A + +Count = 960 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 0001 +CT = 037272D8AFA917EDF8F7703324A36190AB6617437F85A58489EFC7C6A8D5E1831F06CD99358D41AF734420BFBA + +Count = 961 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102 +CT = 65CBD1299DF1122648FDB3272F58224E8EE2FE1F490E88B0038AAC2A30E6E91D42B1264CA993B08548AD640A13 + +Count = 962 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 00010203 +CT = 461143E2BD51E0C99B3A6371AC99EB920BF1E5AA6AA100BD4CDDAC97EF7B0F5A9596D48848AEF4FB910B90A07F + +Count = 963 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 0001020304 +CT = 87DBE114F944383FB8F5DAD1F7094E5AE73176C8F85E3AA82605C2B3D9992A0ABF13C266E4A6DF217C7ACFA1D1 + +Count = 964 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405 +CT = D59DF0B9DAA3C3349C98C01B7E3DE176BE90DCA74BE7AABF324D105B30FEBC084DD20B709E5CB2AC2515E4D3F1 + +Count = 965 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 00010203040506 +CT = 69D07AB9607245E127343A0B5316E66F00BCB1ACDD16F177C410CC198389BE8E4B2F354C8B70E4922F32730AFD + +Count = 966 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 0001020304050607 +CT = E55D278F702DAA9BE98DDA92788DC76F6BB4D474852C70B2B24C5F94610C154FB76322C8C488CFEC62FF2D3013 + +Count = 967 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708 +CT = D17C4A8B4C960B33657832638A69CABD851BDFAA04D7D4EAC5045FB3CFE1D8A96DC1AAB84661DB05EC93846B93 + +Count = 968 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 00010203040506070809 +CT = DAD977C7105FE13EA932BFCBC7A4FDA33DAFF8D5D4DCC1B780759CCF6F629D353A9B9889D7B8711D257A59A664 + +Count = 969 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A +CT = F39A90C82F6482EC00663E4E03439E0136242C0E1B18829D94EAE6B8E4F2DE821B0414E4CA18AAEE7A2173512D + +Count = 970 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B +CT = 29E3513A51B32D606CC471EAE95BC3BE92F838970F3FF46E03E24D2ABB13AD9257D704A860D65BDF4263D852D1 + +Count = 971 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C +CT = 9DB6A557C47FBABBEFDB2E5A946CAF0BC591C7D16ACF15F3328A3109AE7E0B0EBE0765D56C7A1C9E16230D98AC + +Count = 972 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D +CT = 67E370CE8342577FB1BCB8F8F71823A3F70C08AF615602233EF46033EEB513FB1C7C14A32DA99ABDA77321B5D3 + +Count = 973 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E +CT = 0586EE437341FFA1365755317DF57D2D458C149E14067C19218B6740A944BF594607522B1814D535D0B65C832A + +Count = 974 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F +CT = 83A2455E47CA9DB1BA19BED32B7B0C162D75547A3F11E366080679E2E19BABD8B733224FAF996CA198F13D7127 + +Count = 975 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F10 +CT = C2D9703A91A09CBDF03FA8D5E1D3491D12EFEFB78952B8F99BD13E0CEFC7A2381A79ED49951A1BF02772221785 + +Count = 976 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = D583D8F6B7283BE885DA6AA7FD035AE3F4DCF9F77935B1D17DE8D5C7C3D1EAF729BE90D2E1713319375A6D75D8 + +Count = 977 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 61FDAA3BFB1F53A142ABF43A0AD887F41D62B8DBACE075BCE17C92DAF7F7AB22AA58D2A32F154B14BA0CAD97A3 + +Count = 978 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 13614E426D15B41022825840BD6293F6D1C53786EDEB307B93A24A6BFF92465895CF60A51B3848531E455A5ED7 + +Count = 979 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 35E62D092ABF45438909C842BEC93E0C5A7477EFCDA8CEAA007A0B2839F81DAFD0E58F74DF305FC4433238853D + +Count = 980 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 1F5433AE3413FF0AFB39CBC3530F4C7A9206EB40506F4D2A1A0074FF31530A01A7CF8B89851E29A9FDC02E3076 + +Count = 981 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = E330230E92AD51FBC4BC065A51F972E83E6C21952F243C5042B9D72D89E3DE4729A8EBFE846BCA81EC7F36A0A9 + +Count = 982 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = E053C3CCD93606672243446746B136CB1EA9D727E34A85D1311C1F300BCF1D3FBF5717DC284595171A18851361 + +Count = 983 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 7614FFF72AFF37A06AAD7614A9C86557A2C06E15FAF8B1FBAA13D735B981A0F61C56A04B5C7727B6DC6E2BF521 + +Count = 984 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = A9A35CC93AA2EA16BE0B4764B2778BDF5486A480F54B3D7DCD22C26A14EE4892384F8E6BE7727F7061FDA779A0 + +Count = 985 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 070E4AE6E7A50C554F4EB193A8CF343D8996679E79E594F305D4C968CB83D433978A047F4B407F004C74C249C7 + +Count = 986 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = D91335D6B8C0FC089A0ACC1F6C3B826BABB4B0F52037A482B13D8D315C009D40832A7111C834D0B5ED00453F73 + +Count = 987 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 16072473B039F9D516B857F7435B6D0DC286862BA7D929285C9D4084B7E1CC1B0DF879B7C05A63385C59B75D79 + +Count = 988 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = A5F8D9E8F762AA0E90750C6CA7183E669AB7046E27DA7033B2A2A2511A702FD8462DF15199E26D81D3BB8E6EC7 + +Count = 989 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = D3AEA0D48F11EC1DFDFAD2D4E93B2D7406B788B5B8211B454D007A8E142E65A03C043A1AC914A596FA5EF61EFF + +Count = 990 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 8FB96D82A57BD284F00D36BD47F0A1B17AC10ABA8FFE2A5BBA8861A67AB10414DF9DF848658C9911CD4F8179BA + +Count = 991 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = +CT = F9F051CEF29D194254CBACDFD0D1FFE38C2A4FEC0DDA128718D1E9718181105BFBC3827AE3037D6E6F3A8D7B54F9 + +Count = 992 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 00 +CT = AD527DF1BAAFDBE6F52CC47C4C1A70A7796F6019F7847D20EA093E2E7361D154DF707D8246F24DA23F86FDE574E9 + +Count = 993 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 0001 +CT = A05044617C8FE55D75CAD99FE8537AE8D4C0AE801FAC1326A44F12F2D976CB0B96A94AF1619833200B8C5907FEBD + +Count = 994 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102 +CT = 636FA50C31CBA82F8E1B6E76A5675688D6B78F8833DD0911948062091BD63253683A75B7FAED73BED0C67CBBDC26 + +Count = 995 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 00010203 +CT = 0BC5AB669CFF49541457D4B1AE4FE416C9A0A97F98FDAE7472F9568BDF9EFF54F8D78691305DEBFD1FB28B9389E2 + +Count = 996 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 0001020304 +CT = 1CB63739D59DD0B5FE5A365426797FBC718EE8F2D9A5417C8EF1B8B2DEB06B717A0AAFFA65F948FF3CBDFD05B204 + +Count = 997 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405 +CT = 994405422719D11D08A01358C53147524D6A6988FC4B17E19DEEC8A18EC12076E3A63B12CF927671CA2B43C6CCFF + +Count = 998 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 00010203040506 +CT = 94EE0EE5E95EB2A78CBA57C86B89197B3A74C2F0BEB6075D55C7EDB8CF8FA66C5C17607A5E20AD4B3946F3F55BB4 + +Count = 999 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 0001020304050607 +CT = 95BC8FDEF515E46B89516D9681AD018CB539DF27185CFD886A1668F2D3E11F046D4FEE21B5AA805BBDCB017B0F1D + +Count = 1000 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708 +CT = C24DE4E5B0F34904A458723CE89752059CFD929A98116CC9C8D61A59E1E2574A80DB52774949B4494144AAFDA1C7 + +Count = 1001 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 00010203040506070809 +CT = 0A8045F88575AC2FE686E3D8B5069F65C702EFF50075AC6D4EEDBD8939E3AFA15059EBAA2CD21D3A562FB0648EDE + +Count = 1002 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A +CT = EC9926563D9A62E9DA185042181C0F10DA720A61899A137BA7408AC118063F8F50A76D46F1575FEF48FA956DFBD0 + +Count = 1003 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B +CT = CD9A8AFD497A1847102400C04C76F12C2D31A63EC4E57695E0D4BC7E9B2235CDB4AE5158C06DE6C22B2B053414CD + +Count = 1004 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C +CT = 277C5A2BBBFA5507C91016B73CAECB2125ABB8178F5EC1A397640BD2E17D425EF6786D5D79E9D7C1ADDDB2F3FE26 + +Count = 1005 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D +CT = C4BE9762EC5DEC6867888BA374CFEF780348C1A17976269B72D79FFFDEA4623EE8D70867690CF64544911E51CA4D + +Count = 1006 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E +CT = 18EE70610FBB8100597E947E3F6D532A2A9BDB13793D41A3F32B02C65DDF6B857A73DFCC39548A634A48A8F7F667 + +Count = 1007 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F +CT = 111260227B7C59062A103CECBE56CECC554DB696F189A96C541FE85DF492855E1A91C5B08171622532402C4132EE + +Count = 1008 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F10 +CT = CBB31E9C67A9E2550CA3460425446C3B26A735CFA25B7FD2EB641527E6343CC8D67326C2FE98BA106B819988F14D + +Count = 1009 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 69D2BC1C40E9BA13A05A95972E152FFDAF9D660F99D0B57ACC2649C5A6E3AA570B4DA9E0C531D9E3ED01F4B299A0 + +Count = 1010 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 3F23E6A2757545AE2558B2F6776420B489E1AEFBB65AD9B872F7ED5E96740E8363AE01C173FB45A5450BD0A09121 + +Count = 1011 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 4E0A6E3AEB356944E94DCF0ED42CAB56FC284C6B69E1E15173839FEA52C5D665BA1E90725712BF011FCD11B936BF + +Count = 1012 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = AFA973D22E7D7EF3C717F33C941DAD4ABF01899A522027BCC3E18D990FB4D2E2B556ABCD0A732A9F45B35917185F + +Count = 1013 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = DEF758DC420B46CB389B56F69E0A9BEE0245C19A632355F90DFE7140C8495E9CCC30269305700CE2EC9F5133E111 + +Count = 1014 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 466C7C9D09CB300C6F24B1AF814A0B6A96EBDAB8A4D8C882C47DDCD29A0EE6DFA381EF52CC5B338DE5AE4222FA2F + +Count = 1015 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 847CDC8CDAC1624BD209CC99FE3A3D378B0082F3EDAA018D39658B29E705F31EC86FCA03BE0D6378A56B1CDF7078 + +Count = 1016 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 452A05DDFA0239DC6850C38DFB3BFB60044C96EBC45716257053B7740489EE673B42F55053122371B9071F3D88B4 + +Count = 1017 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = FE638EFF673E9B19424507DEE2B95966F499CA2472E9E60D45B5F28475681F119ABE44B3F4B0444C653EB3C77DB5 + +Count = 1018 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 3034696BEC1DCFBD83F7E431EB999CBCC615FA4F214C455E400013165056384018D6EF6A49909323FADB1E1E878D + +Count = 1019 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 00A1F250619ECE02A1588F7B9F545E9CFA53CE90B3833ED85B0942D4D314948706B4E2F42188E54323E96D193528 + +Count = 1020 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 725224341C6E30657A7CA51FBF9A63FA85667FB64FD80056F68AEB101B4F74D9507A0D908700D5728AFDDA90B275 + +Count = 1021 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 7FE5D3AFD2D314A2CC1B6F8FB39752EAB85B924FA66010E3CB3A01AC3B403DC0E547B7B9E5B4507D36EB5E97E8AE + +Count = 1022 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 302239E8F9AE8FF616F6E914EAE077D841E7FDC8A9D536295655E8C89A227924AA17B06E786175C2E5AE63A1E272 + +Count = 1023 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 1CA222752CB92A1BE8AD1D25751E884B2C39B8B8E37E0E9AEB8AB79113EB3994FF9EA22FFEE053E1101EBE48F34C + +Count = 1024 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = +CT = 81489FE5D41133CA44877A29A118547819B5113E334A4E9D5B75CE65B161B28B18AA35207A8AB11FCA2A111FD34A15 + +Count = 1025 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 00 +CT = 02C917512AAB2EF5FF68F1269B1351F90D693F000C8D4FA76317127F4E51695207DC8ED90B3BDA561332EF96EC8F48 + +Count = 1026 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 0001 +CT = BF6142AD219314F3679CDEE169B4ECC051DB22BEE288F1D1B66F659B47EC1DEB1A4B33D95B27C5AA3E1B49A477E672 + +Count = 1027 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102 +CT = BE22D6F8D794922A52F78C6F5E6F44CCED3ED048EDC1F066484BAFCD842311EE978021E9C4F1F7430160A68E1C79B4 + +Count = 1028 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 00010203 +CT = 8CEB778F4809277D7CF91A4CE8691954A86A87564EE85F64BF1AFECD1C3287321A37A9A5A1ED5DB6EF4278D47A27E5 + +Count = 1029 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 0001020304 +CT = 0CEC28CD4B23DB56969BF7F999F979F4D8171CE8B50F0F11EEB1E97F1793D191EF39864723522117017ABD38CE7894 + +Count = 1030 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405 +CT = 219B4C1E6230A980DA97B43A782F132EB5CC70F90EA3980232D0072E03AF81C109746DA54F87214CA9E2D63884E64A + +Count = 1031 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 00010203040506 +CT = 4AF5687A50615F2DA0B4FF295833EEBBEB1C131C59D6FDC58BCC987F027D08AE62CC3DE590900664DFAA243DE65C38 + +Count = 1032 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 0001020304050607 +CT = 4C58E81D7C6CDCA88DB02809279B1F7FD5AA14C4846FBD7E334D8C7F406C5229CA91B7C79A486499A270EBE9FA22B5 + +Count = 1033 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708 +CT = 0C0E4CE0197A5BE7EE6CB125AFF60B14464603B29D3D8FB133D68E8CDD2DC653D4F2390E4126C43E53F6692889B065 + +Count = 1034 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 00010203040506070809 +CT = 78241FBA075F11BD6A6413D795E2BFF836959FBF5D7070D53B69151679BE685B63A4BBCCF580F4F5BDF99FC857F8C1 + +Count = 1035 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A +CT = 0719D836DCE22DD4046E25F3D59160EB4C4AEA88218EBC4BA397C5105C773C6ECCF0BDE2640BB675DBB0A1286EFAAC + +Count = 1036 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B +CT = BFA774660B9E60E8AC780637D0394E3007C318C70776808F65DED34202C268B503C2AA49CBD8337085B78A2E9F5330 + +Count = 1037 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C +CT = B664F63A24D2E6B2D7192916DD20B1F65EF29A3D9D66F67170D49F7016221F824D23327F9B373F8142A828D998EFAA + +Count = 1038 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D +CT = 1F422CCBF1760C116E807BA9DC0DAB7D7BA5FE93205A82AD53B946FD5385F963742115B65D608253FAD1758D739C7A + +Count = 1039 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E +CT = A7686432FBF205C43580BD6FB1F66A5F1A8A660B7ED2DA1AD7D911B3D022EF4566F2FAA6094D595367E7005FBF6BA9 + +Count = 1040 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F +CT = 26F8C967CC1F93BAD67438783F7AA4A219373DC81DEDA3FD5167606CB4D18EDF0B20F91622AD21F646F207835F6635 + +Count = 1041 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F10 +CT = D122CEFD796992D02A737272AA00E9E3B778E3F151F1E651A010E047325AC37A1CD7E41DA1017763CC6213BA1081BC + +Count = 1042 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 8C0A25D9B41AAEA7F27EB1B16F48AF7AD8E8A17AB7578325596D6E733EECFB4E37296832A1E019DF399921BC54A600 + +Count = 1043 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 2B1EFAE9C6165951C0EA91ADB4F7268ECD612BC84E375C40D396679AC27BF630C090E1BD0DAE062EA9BA59FF279AD3 + +Count = 1044 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 5ED6DF1B25E5820A8432DCF91EFBF4570BC6EF5E2404F9C0E228BD497CBB71F6F8FE3CB5688CEE5F4FCAE8BCBFC128 + +Count = 1045 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = A879D7A0A1C97A5E6BD5578D96B1ACA0A2A0C7F64D9CAF2F721D30C4CE651DAFDEF1E95914FAA7DCBF86EF17483F58 + +Count = 1046 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = C5C4B461D0BF049006B2E3B22B7AFD85E84967EA97DA45C0C2C39D5C634DFB3E8783E8CA0B0F3A49D71A1EF4AB61EC + +Count = 1047 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = B47397120FEE8341A297582A0EF8ED0AEF0D7B7BBC973535CE4D26C8DDD52ECE1E51C43E20B946774B1E9F2D6C7C01 + +Count = 1048 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = AF80FD34D7CDE8D535E60C2B215144D2A422AF88AE08AE9AB5F237D8BC80DE61E58D80D8B8E6E6C8DA096E574309DA + +Count = 1049 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 8EDC54382B037B3F4EDBD439DF514A32E7EC6849871089B1934594FCDE2D390F5EAA2BC60B1A54D590FFDC47E4A80C + +Count = 1050 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 9008E8E6CF4D68D387F3FD79869981C6EDE8E3FB5AD232CAF7B39098696C2F5404386C81B29304F98838C852981CF6 + +Count = 1051 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 9EC1EA974935503E608D67E669E672C5F2D013E43DD14768FE0A47FD2E835FB62247964E75C1E9C0661E6C33F4F1E0 + +Count = 1052 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = EDCD94F4D44169F04FF807C1DCDDECCDA63B34158B6C68BFF1AE842184279A6D729BE79F0F26F4147D5841E8C0939D + +Count = 1053 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 5FA0A4E138DBC93D9B23E3AA8F3DBE6382A9B467AEDE53BD81350527B88EAF8B392DA0893B5B9D02412CF0F7D50350 + +Count = 1054 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 1040BBF069791D0C5C80E535604879651EA5ECF6CCF64E8F7F6D060832A260A8A0275443939E08DB233F0B1314CE85 + +Count = 1055 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = F8E14234D6E1F3CDC8FC2EB2D735B14B49758990E2703BD44061659C0AEBA1AB5C94F00B216C8FCCEFDF265BE661C7 + +Count = 1056 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = DAC32E172659EA149589F2593EC44124E951DF9FE2373DB651D3AEAE74F1CEBB53C2E33CB423FDCEFA44EA20A52C7F + +Count = 1057 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = +CT = 4201B5D03F7F106927604CA03A4155BA3BFF5C58E82A494648E297E8972F80161F21DCCA2C614209E4D8A1D5332A5CBF + +Count = 1058 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 00 +CT = 27557F3A519315F243FBAA61736134CBF08A060658DE23E3C2F25F596C393717A10A3C91CA51DC0B5E8FBE2BFACDCCEE + +Count = 1059 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 0001 +CT = 5D073726A7F41AE76EDEDD227CD6C92F6459810AE53D01DC7AFE1763170AC08F98991A1858E2F614CF99BDD994D5287C + +Count = 1060 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102 +CT = BE6C7E7126BBA02FF2D3DA802AB5652F49D06C197F6748A15C07E67EEC1BF2F698CA8514AE96155086742B7329890A46 + +Count = 1061 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 00010203 +CT = BA13A1D998FA67A482AB97BD2CDB7C40D06748646D6ABBE6714203F2631B1B365ED188097A63B22D1C9EEDC64A41AADA + +Count = 1062 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 0001020304 +CT = 9B645A9280416F2ABE6BB83282D30DCD32BF571711104C17054EE9AC9ACD73839C0DF6C8B869E72C0B35BE6BA768FB3A + +Count = 1063 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405 +CT = B967A9EB4140671C31D0BCF178D02697D1AE77B6D821A8BE124B82A6EC1E4B5808E9C2941B08D42FD5BE02E80434BA61 + +Count = 1064 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 00010203040506 +CT = 43FCCA568538003565A74DFC7AD4F943CA14EEB1690C3D0F898BEEC0B8EF53D43197493116FD0171CEEEB92F711D819E + +Count = 1065 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 0001020304050607 +CT = A16047646294CF6D8E3258E311387E89F8E116F4A9DA7D082DD1EC6C93B576726F2C6F6D6AE1ABED4111EBB47C5568FB + +Count = 1066 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708 +CT = 0FF60F2D2143FED07D14A0272FD79CC91FC6BB01BD8A8E27182ED1C9BF4440824395BF12FDC9D65B756902F2C5E9E1A7 + +Count = 1067 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 00010203040506070809 +CT = 88C67126A46D3ECE473412980AD008CF85D7B4862254B7CCF129C23B8CC5CAE4640D72EF408AD69F6704AD8B75DA7C61 + +Count = 1068 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A +CT = 22CD3AB341C0E5ABCF60F65894EEB90F6E278DFB1A7C4E53F1B1D54F5819563C6FE129D806DF8C8DAF26DCB792A6D664 + +Count = 1069 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B +CT = 6191FB7AEFCE61A56BEAE75F06B0B7AB14F157D96BDB47E228EDC6454B2ACD78A150CDE9F6BD27D952D5047A359719F4 + +Count = 1070 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C +CT = E7E93A2BA47670CBF66373FEFB6723A3AE932525A20F35DAC87B43AE2815A0FD094FE1B4FD99310CB1368BB1EBD17A47 + +Count = 1071 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D +CT = BAAC3599C725483917BABBD8B9AA7E59D852C6153485E1C7DA777F0DB6EA57FE6DF5F5D85454153FD82B05D0152FC61D + +Count = 1072 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E +CT = 97CA6C10754A0F3BCD3968CFE343FDEB4AD9A8349CCE70BFEE96F8613CDE6CA9DEFD33AB0D21FA03125698EBEC688613 + +Count = 1073 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F +CT = 5FD7AC6A7DF22DD9934A6CC61D81B6E9D4CAF40904977035235EA5D3DEA27F0B32C167F2564E6690CEFB37AED41C46CD + +Count = 1074 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F10 +CT = A1F56278B46E18D4F3EBD7981824798CAF8056C20E8C70394320361C50BBF812ECB9E07A81E26741DAA8FAEB7DDBFE00 + +Count = 1075 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = DB9BDEA0A80CC6DFDC9FD20C6EAE4D5229C5673748265B358A09FE50A63B8DC4C204AF80B3927FCC2D511952C22DEDE5 + +Count = 1076 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 92001B02F3E79F07D50D7CF8220A78FD1D31AC28F315431D53BF854108FC37709A42A64A2592C99A62B54E36C52A57BD + +Count = 1077 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 34FB1217BCE173AE129F86BE52C95E6D04F5923057016187C0A363CDF6BB30D4A4C4E96B651E88FE5377DF8112E5C281 + +Count = 1078 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 60B8203504EB09A7AAC923B3100448F11B1ABAF0D428B74C94185455284ADE98A669F7EB8C63ECB721D05C017349066C + +Count = 1079 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = BF9A6EAB965AC9FCC02138B17AFE018CA53D611B2FB3BD46B8415B6511489886EDA6D3B86D70CEC5D0EB6B3839E39FFB + +Count = 1080 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 77620F5B16AF222DF6B8C063AEA5F0ACA7C36E0CC7DD0E8382EA793013888D663D1682F1C3EE6422216A5A5369B1B0B7 + +Count = 1081 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 8EED905B044634CC334414EDCE46214BA2B54BA3CD9F384DD6B652E788794122A697CCDCC63218388CA5547E14267254 + +Count = 1082 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = DAAA1AE219D1DFE3DCB6D42E4A2FB387383DD777EB0A4CA3F9FEFCC4BA4876E82CD3FEB14A55871F964747A1867E8194 + +Count = 1083 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 0565216CEE83173206D99D9ABA5E8CA3D80081D5341D38C9DB7034323504B6CAFEADFA6EF511578B3FD0DA3EB46856BD + +Count = 1084 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 80DBD4D7E64447F037AD4F13047B39436126F3B82238AEB0978B743FFD6D9852D82444D31A63EB0E923469A4EA486F1E + +Count = 1085 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = FE6E62858A6F55983254B2F72DF074BCD888639A5FEC4AF6E952BB1D6D9B062846673F450F819C3B7FA505F01880F6BC + +Count = 1086 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = B1322523B52BFCD33BCC4C19E01463E4C03D881EEA62DD6BB82C82C48F106F672A0682A040055991A9D52F3CEDFB5517 + +Count = 1087 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = E85EAF4D6FECF969A44CF24358191A59A8B8D2BCA0AE2A4F3B168674DAFB3C31E9B6533486A76E1AA7F2D1141783A8C0 + +Count = 1088 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 57D14CA7AD8AD04A4221317D915D61619327E3F409050B6D827C1392B88D5CEA665B74F7685330185666E7F4CE26CBC9 + +Count = 1089 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = A617E429C7DD351098375900EA5EC8CA23DF17B8DEEA71EA0E8C49A46E01FFEB7C7EA84D0540657671018B9248EA9BD7 + diff --git a/romulus/Implementations/crypto_aead/romulusm1+v12/armcortexm/api.h b/romulus/Implementations/crypto_aead/romulusm1+v12/armcortexm/api.h new file mode 100644 index 0000000..a4aa567 --- /dev/null +++ b/romulus/Implementations/crypto_aead/romulusm1+v12/armcortexm/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/romulus/Implementations/crypto_aead/romulusm1+v12/armcortexm/crypto_aead.h b/romulus/Implementations/crypto_aead/romulusm1+v12/armcortexm/crypto_aead.h new file mode 100644 index 0000000..6f4ee42 --- /dev/null +++ b/romulus/Implementations/crypto_aead/romulusm1+v12/armcortexm/crypto_aead.h @@ -0,0 +1,13 @@ +//API required by the NIST for the LWC competition +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); + +//API required by the NIST for the LWC competition +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); diff --git a/romulus/Implementations/crypto_aead/romulusm1+v12/armcortexm/encrypt.c b/romulus/Implementations/crypto_aead/romulusm1+v12/armcortexm/encrypt.c new file mode 100644 index 0000000..6487c86 --- /dev/null +++ b/romulus/Implementations/crypto_aead/romulusm1+v12/armcortexm/encrypt.c @@ -0,0 +1,385 @@ +#include "skinny128.h" +#include "romulus.h" +#include + +u8 final_ad_domain (unsigned long long adlen, unsigned long long mlen) { + u8 domain = 0; + u32 leftover; + //Determine which domain bits we need based on the length of the ad + if (adlen == 0) { + domain ^= 0x02; // No message, so only 1 block with padding + } else { + leftover = (u32)(adlen % (2 * BLOCKBYTES)); + if (leftover == 0) { // Even or odd ad length? + domain ^= 0x08; // Even with a full double block at the end + } else if (leftover < BLOCKBYTES) { + domain ^= 0x02; // Odd with a partial single block at the end + } else if (leftover > BLOCKBYTES) { + domain ^= 0x0A; // Even with a partial double block at the end + } + } + //Determine which domain bits we need based on the length of the message + if (mlen == 0) { + domain ^= 0x01; // No message, so only 1 block with padding + } else { + leftover = (u32)(mlen % (2 * BLOCKBYTES)); + if (leftover == 0) { // Even or odd message length? + domain ^= 0x04; // Even with a full double block at the end + } else if (leftover < BLOCKBYTES) { + domain ^= 0x01; // Odd with a partial single block at the end + } else if (leftover > BLOCKBYTES) { + domain ^= 0x05; // Even with a partial double block at the end + } + } + return domain; +} + +//Encryption and authentication using Romulus-N1 +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) { + + u64 tmp_mlen = mlen; + u32 tmp; + const u8* m_auth = m; + u8 final_domain = 0x30; + skinny_128_384_tks tks; + u8 state[BLOCKBYTES], pad[BLOCKBYTES]; + (void)nsec; + + // ----------------- Initialization ----------------- + *clen = mlen + TAGBYTES; + memset(tks.tk1, 0x00, KEYBYTES); + memset(state, 0x00, BLOCKBYTES); + tks.tk1[0] = 0x01; // Init the 56-bit LFSR counter + // ----------------- Initialization ----------------- + + // ----------------- Process the associated data ----------------- + final_domain ^= final_ad_domain(adlen, mlen); + SET_DOMAIN(tks, 0x28); + while (adlen > 2*BLOCKBYTES) { // Process double blocks but the last + UPDATE_CTR(tks.tk1); + XOR_BLOCK(state, state, ad); + tkschedule_lfsr(tks.rtk, ad + BLOCKBYTES, k, SKINNY128_384_ROUNDS); + tkschedule_perm(tks.rtk); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + UPDATE_CTR(tks.tk1); + ad += 2*BLOCKBYTES; + adlen -= 2*BLOCKBYTES; + } + // Pad and process the left-over blocks + if (adlen == 2*BLOCKBYTES) { // Left-over complete double block + UPDATE_CTR(tks.tk1); + XOR_BLOCK(state, state, ad); + tkschedule_lfsr(tks.rtk, ad + BLOCKBYTES, k, SKINNY128_384_ROUNDS); + tkschedule_perm(tks.rtk); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + UPDATE_CTR(tks.tk1); + } else if (adlen > BLOCKBYTES) { // Left-over partial double block + adlen -= BLOCKBYTES; + UPDATE_CTR(tks.tk1); + XOR_BLOCK(state, state, ad); + memcpy(pad, ad + BLOCKBYTES, adlen); + memset(pad + adlen, 0x00, 15 - adlen); + pad[15] = adlen; // Padding + tkschedule_lfsr(tks.rtk, pad, k, SKINNY128_384_ROUNDS); + tkschedule_perm(tks.rtk); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + UPDATE_CTR(tks.tk1); + } else { + SET_DOMAIN(tks, 0x2C); + UPDATE_CTR(tks.tk1); + if (adlen == BLOCKBYTES) { // Left-over complete single block + XOR_BLOCK(state, state, ad); + } else { // Left-over partial single block + for(int i =0; i < adlen; i++) + state[i] ^= ad[i]; + state[15] ^= adlen; // Padding + } + if (tmp_mlen >= BLOCKBYTES) { + tkschedule_lfsr(tks.rtk, m_auth, k, SKINNY128_384_ROUNDS); + tkschedule_perm(tks.rtk); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + m_auth += BLOCKBYTES; + tmp_mlen -= BLOCKBYTES; + if (tmp_mlen > BLOCKBYTES) { + UPDATE_CTR(tks.tk1); + } + } else { + memcpy(pad, m_auth, tmp_mlen); + memset(pad + tmp_mlen, 0x00, BLOCKBYTES - tmp_mlen - 1); + pad[15] = (u8)tmp_mlen; // Padding + tkschedule_lfsr(tks.rtk, pad, k, SKINNY128_384_ROUNDS); + tkschedule_perm(tks.rtk); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + tmp_mlen = 0; + } + } + // Process all message double blocks except the last + SET_DOMAIN(tks, 0x2C); + while (tmp_mlen > 32) { + UPDATE_CTR(tks.tk1); + XOR_BLOCK(state, state, m_auth); + tkschedule_lfsr(tks.rtk, m_auth + BLOCKBYTES, k, SKINNY128_384_ROUNDS); + tkschedule_perm(tks.rtk); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + UPDATE_CTR(tks.tk1); + m_auth += 2 * BLOCKBYTES; + tmp_mlen -= 2 * BLOCKBYTES; + } + // Process the last message double block + if (tmp_mlen == 2 * BLOCKBYTES) { // Last message double block is full + UPDATE_CTR(tks.tk1); + XOR_BLOCK(state, state, m_auth); + tkschedule_lfsr(tks.rtk, m_auth + BLOCKBYTES, k, SKINNY128_384_ROUNDS); + tkschedule_perm(tks.rtk); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + } else if (tmp_mlen > BLOCKBYTES) { // Last message double block is partial + tmp_mlen -= BLOCKBYTES; + UPDATE_CTR(tks.tk1); + XOR_BLOCK(state, state, m_auth); + memcpy(pad, m_auth + BLOCKBYTES, tmp_mlen); + memset(pad + tmp_mlen, 0x00, BLOCKBYTES - tmp_mlen - 1); + pad[15] = (u8)tmp_mlen; // Padding + tkschedule_lfsr(tks.rtk, pad, k, SKINNY128_384_ROUNDS); + tkschedule_perm(tks.rtk); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + } else if (tmp_mlen == BLOCKBYTES) { // Last message single block is full + XOR_BLOCK(state, state, m_auth); + } else if (tmp_mlen > 0) { // Last message single block is partial + for(int i =0; i < (int)tmp_mlen; i++) + state[i] ^= m_auth[i]; + state[15] ^= (u8)tmp_mlen; // Padding + } + // Process the last partial block + SET_DOMAIN(tks, final_domain); + UPDATE_CTR(tks.tk1); + tkschedule_lfsr(tks.rtk, npub, k, SKINNY128_384_ROUNDS); + tkschedule_perm(tks.rtk); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + // ----------------- Process the associated data ----------------- + + + // ----------------- Generate the tag ----------------- + G(state,state); + memcpy(c + mlen, state, TAGBYTES); + // ----------------- Generate the tag ----------------- + + memset(tks.tk1, 0x00, KEYBYTES); + tks.tk1[0] = 0x01; // Init the 56-bit LFSR counter + if (mlen > 0) { + SET_DOMAIN(tks, 0x24); + while (mlen > BLOCKBYTES) { + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + RHO(state,c,m); + UPDATE_CTR(tks.tk1); + c += BLOCKBYTES; + m += BLOCKBYTES; + mlen -= BLOCKBYTES; + } + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + for(int i = 0; i < (int)mlen; i++) { + tmp = m[i]; // Use of tmp variable in case c = m + c[i] = m[i] ^ (state[i] >> 1) ^ (state[i] & 0x80) ^ (state[i] << 7); + state[i] ^= (u8)tmp; + } + state[15] ^= (u8)mlen; // Padding + } + + return 0; +} + +//Decryption and tag verification using Romulus-N1 +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 tmp, tmp_mlen; + u8 final_domain = 0x30; + u8* m_auth = m; + const u8* c_tmp = c; + skinny_128_384_tks tks; + u8 state[BLOCKBYTES], pad[BLOCKBYTES]; + (void)nsec; + + if (clen < TAGBYTES) + return -1; + + // ----------------- Initialization ----------------- + *mlen = clen - TAGBYTES; + memset(tks.tk1, 0x00, KEYBYTES); + tks.tk1[0] = 0x01; // Init the 56-bit LFSR counter + // ----------------- Initialization ----------------- + + // ----------------- Process the ciphertext ----------------- + clen -= TAGBYTES; + memcpy(state, c + clen, TAGBYTES); + tmp_mlen = clen; + if (tmp_mlen > 0) { + tkschedule_lfsr(tks.rtk, npub, k, SKINNY128_384_ROUNDS); + tkschedule_perm(tks.rtk); + SET_DOMAIN(tks, 0x24); + while (tmp_mlen > BLOCKBYTES) { + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + RHO_INV(state, c, m); + UPDATE_CTR(tks.tk1); + c += BLOCKBYTES; + m += BLOCKBYTES; + tmp_mlen -= BLOCKBYTES; + } + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + for(int i = 0; i < (int)tmp_mlen; i++) { + m[i] = c[i] ^ (state[i] >> 1) ^ (state[i] & 0x80) ^ (state[i] << 7); + state[i] ^= m[i]; + } + state[15] ^= (u8)tmp_mlen; // Padding + } + // ----------------- Process the ciphertext ----------------- + + // ----------------- Process the associated data ----------------- + memset(tks.tk1, 0x00, KEYBYTES); + tks.tk1[0] = 0x01; // Init the 56-bit LFSR counter + memset(state, 0x00, BLOCKBYTES); + final_domain ^= final_ad_domain(adlen, clen); + SET_DOMAIN(tks, 0x28); + while (adlen > 2*BLOCKBYTES) { // Process double blocks but the last + UPDATE_CTR(tks.tk1); + XOR_BLOCK(state, state, ad); + tkschedule_lfsr(tks.rtk, ad + BLOCKBYTES, k, SKINNY128_384_ROUNDS); + tkschedule_perm(tks.rtk); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + UPDATE_CTR(tks.tk1); + ad += 2*BLOCKBYTES; + adlen -= 2*BLOCKBYTES; + } + // Pad and process the left-over blocks + if (adlen == 2*BLOCKBYTES) { // Left-over complete double block + UPDATE_CTR(tks.tk1); + XOR_BLOCK(state, state, ad); + tkschedule_lfsr(tks.rtk, ad + BLOCKBYTES, k, SKINNY128_384_ROUNDS); + tkschedule_perm(tks.rtk); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + UPDATE_CTR(tks.tk1); + } else if (adlen > BLOCKBYTES) { // Left-over partial double block + adlen -= BLOCKBYTES; + UPDATE_CTR(tks.tk1); + XOR_BLOCK(state, state, ad); + memcpy(pad, ad + BLOCKBYTES, adlen); + memset(pad + adlen, 0x00, 15 - adlen); + pad[15] = adlen; // Padding + tkschedule_lfsr(tks.rtk, pad, k, SKINNY128_384_ROUNDS); + tkschedule_perm(tks.rtk); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + UPDATE_CTR(tks.tk1); + } else { + SET_DOMAIN(tks, 0x2C); + UPDATE_CTR(tks.tk1); + if (adlen == BLOCKBYTES) { // Left-over complete single block + XOR_BLOCK(state, state, ad); + } else { // Left-over partial single block + for(int i =0; i < (int)adlen; i++) + state[i] ^= ad[i]; + state[15] ^= adlen; // Padding + } + if (clen >= BLOCKBYTES) { + tkschedule_lfsr(tks.rtk, m_auth, k, SKINNY128_384_ROUNDS); + tkschedule_perm(tks.rtk); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + m_auth += BLOCKBYTES; + clen -= BLOCKBYTES; + if (clen > BLOCKBYTES) { + UPDATE_CTR(tks.tk1); + } + } else { + memcpy(pad, m_auth, clen); + memset(pad + clen, 0x00, BLOCKBYTES - clen - 1); + pad[15] = (u8)clen; // Padding + tkschedule_lfsr(tks.rtk, pad, k, SKINNY128_384_ROUNDS); + tkschedule_perm(tks.rtk); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + clen = 0; + } + } + // Process all message double blocks except the last + SET_DOMAIN(tks, 0x2C); + while (clen > 32) { + UPDATE_CTR(tks.tk1); + XOR_BLOCK(state, state, m_auth); + tkschedule_lfsr(tks.rtk, m_auth + BLOCKBYTES, k, SKINNY128_384_ROUNDS); + tkschedule_perm(tks.rtk); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + UPDATE_CTR(tks.tk1); + m_auth += 2 * BLOCKBYTES; + clen -= 2 * BLOCKBYTES; + } + // Process the last message double block + if (clen == 2 * BLOCKBYTES) { // Last message double block is full + UPDATE_CTR(tks.tk1); + XOR_BLOCK(state, state, m_auth); + tkschedule_lfsr(tks.rtk, m_auth + BLOCKBYTES, k, SKINNY128_384_ROUNDS); + tkschedule_perm(tks.rtk); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + } else if (clen > BLOCKBYTES) { // Last message double block is partial + clen -= BLOCKBYTES; + UPDATE_CTR(tks.tk1); + XOR_BLOCK(state, state, m_auth); + memcpy(pad, m_auth + BLOCKBYTES, clen); + memset(pad + clen, 0x00, BLOCKBYTES - clen - 1); + pad[15] = (u8)clen; // Padding + tkschedule_lfsr(tks.rtk, pad, k, SKINNY128_384_ROUNDS); + tkschedule_perm(tks.rtk); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + } else if (clen == BLOCKBYTES) { // Last message single block is full + XOR_BLOCK(state, state, m_auth); + } else if (clen > 0) { // Last message single block is partial + for(int i =0; i < (int)clen; i++) + state[i] ^= m[i]; + state[15] ^= (u8)clen; // Padding + } + // Process the last partial block + SET_DOMAIN(tks, final_domain); + UPDATE_CTR(tks.tk1); + tkschedule_lfsr(tks.rtk, npub, k, SKINNY128_384_ROUNDS); + tkschedule_perm(tks.rtk); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + // ----------------- Process the associated data ----------------- + + // ----------------- Generate and check the tag ----------------- + G(state,state); + tmp = 0; + for(int i = 0; i < TAGBYTES; i++) + tmp |= state[i] ^ c_tmp[*mlen+i]; //constant-time tag comparison + // ----------------- Generate and check the tag ----------------- + + return tmp; +} \ No newline at end of file diff --git a/romulus/Implementations/crypto_aead/romulusm1+v12/armcortexm/romulus.h b/romulus/Implementations/crypto_aead/romulusm1+v12/armcortexm/romulus.h new file mode 100644 index 0000000..626a767 --- /dev/null +++ b/romulus/Implementations/crypto_aead/romulusm1+v12/armcortexm/romulus.h @@ -0,0 +1,69 @@ +#ifndef ROMULUSN1_H_ +#define ROMULUSN1_H_ + +#include "skinny128.h" + +typedef unsigned char u8; +typedef unsigned int u32; +typedef unsigned int u64; +typedef struct { + u8 tk1[16]; //to manipulate tk1 byte-wise + u32 rtk1[4*16]; //to avoid tk schedule recomputations + u32 rtk[4*SKINNY128_384_ROUNDS]; //all round tweakeys +} skinny_128_384_tks; + +#define TAGBYTES 16 +#define KEYBYTES 16 +#define BLOCKBYTES 16 + +#define SET_DOMAIN(tks, domain) ((tks).tk1[7] = (domain)) + +//G as defined in the Romulus specification in a 32-bit word-wise manner +#define G(x,y) ({ \ + tmp = ((u32*)(y))[0]; \ + ((u32*)(x))[0] = (tmp >> 1 & 0x7f7f7f7f) ^ ((tmp ^ (tmp << 7)) & 0x80808080); \ + tmp = ((u32*)(y))[1]; \ + ((u32*)(x))[1] = (tmp >> 1 & 0x7f7f7f7f) ^ ((tmp ^ (tmp << 7)) & 0x80808080); \ + tmp = ((u32*)(y))[2]; \ + ((u32*)(x))[2] = (tmp >> 1 & 0x7f7f7f7f) ^ ((tmp ^ (tmp << 7)) & 0x80808080); \ + tmp = ((u32*)(y))[3]; \ + ((u32*)(x))[3] = (tmp >> 1 & 0x7f7f7f7f) ^ ((tmp ^ (tmp << 7)) & 0x80808080); \ +}) + +//update the counter in tk1 in a 32-bit word-wise manner +#define UPDATE_CTR(tk1) ({ \ + tmp = ((u32*)(tk1))[1]; \ + ((u32*)(tk1))[1] = (tmp << 1) & 0x00ffffff; \ + ((u32*)(tk1))[1] |= (((u32*)(tk1))[0] >> 31); \ + ((u32*)(tk1))[1] |= tmp & 0xff000000; \ + ((u32*)(tk1))[0] <<= 1; \ + if ((tmp >> 23) & 0x01) \ + ((u32*)(tk1))[0] ^= 0x95; \ +}) + +//x <- y ^ z for 128-bit blocks +#define XOR_BLOCK(x,y,z) ({ \ + ((u32*)(x))[0] = ((u32*)(y))[0] ^ ((u32*)(z))[0]; \ + ((u32*)(x))[1] = ((u32*)(y))[1] ^ ((u32*)(z))[1]; \ + ((u32*)(x))[2] = ((u32*)(y))[2] ^ ((u32*)(z))[2]; \ + ((u32*)(x))[3] = ((u32*)(y))[3] ^ ((u32*)(z))[3]; \ +}) + + +//Rho as defined in the Romulus specification +//use pad as a tmp variable in case y = z +#define RHO(x,y,z) ({ \ + G(pad,x); \ + XOR_BLOCK(y, pad, z); \ + XOR_BLOCK(x, x, z); \ +}) + +//Rho inverse as defined in the Romulus specification +//use pad as a tmp variable in case y = z +#define RHO_INV(x, y, z) ({ \ + G(pad, x); \ + XOR_BLOCK(z, pad, y); \ + XOR_BLOCK(x, x, z); \ +}) + +#endif // ROMULUSN1_H_ \ No newline at end of file diff --git a/romulus/Implementations/crypto_aead/romulusm1+v12/armcortexm/skinny128.h b/romulus/Implementations/crypto_aead/romulusm1+v12/armcortexm/skinny128.h new file mode 100644 index 0000000..7f53b7d --- /dev/null +++ b/romulus/Implementations/crypto_aead/romulusm1+v12/armcortexm/skinny128.h @@ -0,0 +1,15 @@ +#ifndef SKINNY128_H_ +#define SKINNY128_H_ + +typedef unsigned char u8; +typedef unsigned int u32; + +#define SKINNY128_384_ROUNDS 40 + +extern void skinny128_384(u8* ctext, const u32* tk, const u8* ptext, const u32* rtk1); +extern void tkschedule_lfsr(u32* rtk, const u8* tk2, const u8* tk3, const int rounds); +extern void tkschedule_perm(u32* rtk); +extern void tkschedule_perm_tk1(u32* rtk1, const u8* tk1); + + +#endif // SKINNY128_H_ \ No newline at end of file diff --git a/romulus/Implementations/crypto_aead/romulusm1+v12/armcortexm/skinny128.s b/romulus/Implementations/crypto_aead/romulusm1+v12/armcortexm/skinny128.s new file mode 100644 index 0000000..2f938a0 --- /dev/null +++ b/romulus/Implementations/crypto_aead/romulusm1+v12/armcortexm/skinny128.s @@ -0,0 +1,1706 @@ +/******************************************************************************* +* ARM assembly implementation of fixsliced SKINNY-128-384. +* +* For more details, see the paper at: https:// +* +* @author Alexandre Adomnicai, Nanyang Technological University, +* alexandre.adomnicai@ntu.edu.sg +* +* @date May 2020 +*******************************************************************************/ + +.syntax unified +.thumb + +/******************************************************************************* +* applies P^2 on the tweakey state in a bitsliced manner +*******************************************************************************/ +.align 2 +p2: + movw r1, #0xcc00 + movt r1, #0xcc00 //r1 <- 0xcc00cc00 + movw r10, #0xcc00 + movt r10, #0x0033 //r10<- 0xcc000033 + and r11, r1, r6, ror #14 + bfi r11, r6, #16, #8 + and r12, r6, #0xcc000000 + orr r11, r11, r12, lsr #2 + and r12, r10, r6 + orr r11, r11, r12, lsr #8 + and r12, r6, #0x00cc0000 + orr r6, r11, r12, lsr #18 + and r11, r1, r7, ror #14 + bfi r11, r7, #16, #8 + and r12, r7, #0xcc000000 + orr r11, r11, r12, lsr #2 + and r12, r10, r7 + orr r11, r11, r12, lsr #8 + and r12, r7, #0x00cc0000 + orr r7, r11, r12, lsr #18 + and r11, r1, r8, ror #14 + bfi r11, r8, #16, #8 + and r12, r8, #0xcc000000 + orr r11, r11, r12, lsr #2 + and r12, r10, r8 + orr r11, r11, r12, lsr #8 + and r12, r8, #0x00cc0000 + orr r8, r11, r12, lsr #18 + and r11, r1, r9, ror #14 + bfi r11, r9, #16, #8 + and r12, r9, #0xcc000000 + orr r11, r11, r12, lsr #2 + and r12, r10, r9 + orr r11, r11, r12, lsr #8 + and r12, r9, #0x00cc0000 + orr r9, r11, r12, lsr #18 + bx lr + +/******************************************************************************* +* applies P^4 on the tweakey state in a bitsliced manner +*******************************************************************************/ +.align 2 +p4: + str.w r14, [sp] //store r14 on the stack + movw r14, #0x00cc + movt r14, #0xcc00 //r14<- 0xcc0000cc + movw r12, #0xcc00 + movt r12, #0x3300 //r12<- 0x3300cc00 + movw r11, #0x00cc + movt r11, #0x00cc //r11<- 0x00cc00cc + and r10, r14, r6, ror #22 + and r1, r12, r6, ror #16 + orr r10, r10, r1 + and r1, r6, r11 + orr r10, r10, r1, lsr #2 + movw r1, #0xcc33 //r1 <- 0x0000cc33 + and r6, r6, r1 + orr r6, r10, r6, ror #24 + and r10, r14, r7, ror #22 + and r1, r12, r7, ror #16 + orr r10, r10, r1 + and r1, r7, r11 + orr r10, r10, r1, lsr #2 + movw r1, #0xcc33 //r1 <- 0x0000cc33 + and r7, r7, r1 + orr r7, r10, r7, ror #24 + and r10, r14, r8, ror #22 + and r1, r12, r8, ror #16 + orr r10, r10, r1 + and r1, r8, r11 + orr r10, r10, r1, lsr #2 + movw r1, #0xcc33 //r1 <- 0x0000cc33 + and r8, r8, r1 + orr r8, r10, r8, ror #24 + and r10, r14, r9, ror #22 + ldr.w r14, [sp] //restore r14 + and r12, r12, r9, ror #16 + orr r10, r10, r12 + and r12, r9, r11 + orr r10, r10, r12, lsr #2 + movw r12, #0xcc33 //r1 <- 0x0000cc33 + and r9, r9, r12 + orr r9, r10, r9, ror #24 + bx lr + +/******************************************************************************* +* applies P^6 on the tweakey state in a bitsliced manner +*******************************************************************************/ +.align 2 +p6: + movw r1, #0x3333 //r1 <- 0x00003333 + movw r12, #0x00cc + movt r12, #0x3300 //r12<- 0x330000cc + and r10, r6, r1, ror #8 // --- permute r6 6 times + and r11, r12, r6, ror #24 + orr r11, r11, r10, ror #6 + and r10, r1, r6, ror #10 + orr r11, r11, r10 + and r10, r6, #0x000000cc + orr r11, r11, r10, lsl #14 + and r10, r6, #0x00003300 + orr r6, r11, r10, lsl #2 // permute r6 6 times --- + and r10, r7, r1, ror #8 // --- permute r7 6 times + and r11, r12, r7, ror #24 + orr r11, r11, r10, ror #6 + and r10, r1, r7, ror #10 + orr r11, r11, r10 + and r10, r7, #0x000000cc + orr r11, r11, r10, lsl #14 + and r10, r7, #0x00003300 + orr r7, r11, r10, lsl #2 // permute r7 6 times --- + and r10, r8, r1, ror #8 // --- permute r8 6 times + and r11, r12, r8, ror #24 + orr r11, r11, r10, ror #6 + and r10, r1, r8, ror #10 + orr r11, r11, r10 + and r10, r8, #0x000000cc + orr r11, r11, r10, lsl #14 + and r10, r8, #0x00003300 + orr r8, r11, r10, lsl #2 // permute r8 6 times --- + and r10, r9, r1, ror #8 // --- permute r9 6 times + and r11, r12, r9, ror #24 + orr r11, r11, r10, ror #6 + and r10, r1, r9, ror #10 + orr r11, r11, r10 + and r10, r9, #0x000000cc + orr r11, r11, r10, lsl #14 + and r10, r9, #0x00003300 // permute r9 6 times --- + orr r9, r11, r10, lsl #2 + bx lr + +/******************************************************************************* +* applies P^8 on the tweakey state in a bitsliced manner +*******************************************************************************/ +.align 2 +p8: + movw r12, #0x3333 //r12<- 0x00003333 + movw r1, #0x0000 + movt r1, #0x33cc //r1 <- 0x33cc0000 + and r10, r6, r1 // --- permute r6 8 times + and r11, r1, r6, ror #8 + orr r11, r11, r10, ror #24 + and r10, r6, r12, lsl #2 + orr r11, r11, r10, ror #26 + and r10, r6, r12, lsl #8 + orr r6, r11, r10, lsr #6 // permute r6 8 times --- + and r10, r7, r1 // --- permute r7 8 times + and r11, r1, r7, ror #8 + orr r11, r11, r10, ror #24 + and r10, r7, r12, lsl #2 + orr r11, r11, r10, ror #26 + and r10, r7, r12, lsl #8 + orr r7, r11, r10, lsr #6 // permute r7 8 times --- + and r10, r8, r1 // --- permute r8 8 times + and r11, r1, r8, ror #8 + orr r11, r11, r10, ror #24 + and r10, r8, r12, lsl #2 + orr r11, r11, r10, ror #26 + and r10, r8, r12, lsl #8 + orr r8, r11, r10, lsr #6 // permute r8 8 times --- + and r10, r9, r1 // --- permute r9 8 times + and r11, r1, r9, ror #8 + orr r11, r11, r10, ror #24 + and r10, r9, r12, lsl #2 + orr r11, r11, r10, ror #26 + and r10, r9, r12, lsl #8 + orr r9, r11, r10, lsr #6 // permute r9 8 times --- + bx lr + +/******************************************************************************* +* applies P^10 on the tweakey state in a bitsliced manner +*******************************************************************************/ +.align 2 +p10: + movw r12, #0x0033 + movt r12, #0x3300 //r12<- 0x33000033 + movw r1, #0xcc33 //r1 <- 0x0000cc33 + and r10, r6, r1, ror #8 // --- permute r6 10 times + and r11, r12, r6, ror #26 + orr r11, r11, r10, ror #8 + and r10, r6, r12, ror #24 + orr r11, r11, r10, ror #22 + and r10, r6, #0x00330000 + orr r11, r11, r10, lsr #14 + and r10, r6, #0x0000cc00 + orr r6, r11, r10, lsr #2 // permute r6 10 times --- + and r10, r7, r1, ror #8 // --- permute r6 10 times + and r11, r12, r7, ror #26 + orr r11, r11, r10, ror #8 + and r10, r7, r12, ror #24 + orr r11, r11, r10, ror #22 + and r10, r7, #0x00330000 + orr r11, r11, r10, lsr #14 + and r10, r7, #0x0000cc00 + orr r7, r11, r10, lsr #2 // permute r6 10 times --- + and r10, r8, r1, ror #8 // --- permute r6 10 times + and r11, r12, r8, ror #26 + orr r11, r11, r10, ror #8 + and r10, r8, r12, ror #24 + orr r11, r11, r10, ror #22 + and r10, r8, #0x00330000 + orr r11, r11, r10, lsr #14 + and r10, r8, #0x0000cc00 + orr r8, r11, r10, lsr #2 // permute r6 10 times --- + and r10, r9, r1, ror #8 // --- permute r6 10 times + and r11, r12, r9, ror #26 + orr r11, r11, r10, ror #8 + and r10, r9, r12, ror #24 + orr r11, r11, r10, ror #22 + and r10, r9, #0x00330000 + orr r11, r11, r10, lsr #14 + and r10, r9, #0x0000cc00 + orr r9, r11, r10, lsr #2 // permute r6 10 times --- + bx lr + +/******************************************************************************* +* applies P^12 on the tweakey state in a bitsliced manner +*******************************************************************************/ +.align 2 +p12: + str.w r14, [sp] //store r14 on the stack + movw r14, #0xcc33 //r14<- 0x0000cc33 + movw r12, #0x00cc + movt r12, #0x00cc //r12<- 0x00cc00cc + movw r1, #0x3300 + movt r1, #0xcc00 //r1 <- 0xcc003300 + and r10, r14, r6, ror #8 // --- permute r6 12 times + and r11, r12, r6, ror #30 + orr r11, r11, r10 + and r10, r1, r6, ror #16 + orr r11, r11, r10 + movw r10, #0xcccc //r10<- 0x0000cccc + and r10, r6, r10, ror #8 + orr r6, r11, r10, ror #10 // permute r6 12 times --- + and r10, r14, r7, ror #8 // --- permute r7 12 times + and r11, r12, r7, ror #30 + orr r11, r11, r10 + and r10, r1, r7, ror #16 + orr r11, r11, r10 + movw r10, #0xcccc //r10<- 0x0000cccc + and r10, r7, r10, ror #8 + orr r7, r11, r10, ror #10 // permute r7 12 times --- + and r10, r14, r8, ror #8 // --- permute r8 12 times + and r11, r12, r8, ror #30 + orr r11, r11, r10 + and r10, r1, r8, ror #16 + orr r11, r11, r10 + movw r10, #0xcccc //r10<- 0x0000cccc + and r10, r8, r10, ror #8 + orr r8, r11, r10, ror #10 // permute r8 12 times --- + and r10, r14, r9, ror #8 // --- permute r9 12 times + and r11, r12, r9, ror #30 + orr r11, r11, r10 + and r10, r1, r9, ror #16 + ldr.w r14, [sp] + orr r11, r11, r10 + movw r10, #0xcccc //r10<- 0x0000cccc + and r10, r9, r10, ror #8 + orr r9, r11, r10, ror #10 // permute r9 12 times --- + bx lr + +/******************************************************************************* +* applies P^14 on the tweakey state in a bitsliced manner +*******************************************************************************/ +.align 2 +p14: + movw r1, #0xcc00 + movt r1, #0x0033 //r1 <- 0x0033cc00 + movw r12, #0xcc00 + movt r12, #0xcc00 //r12<- 0x33003300 + and r10, r1, r6, ror #24 // --- permute r6 14 times + and r11, r6, #0x00000033 + orr r11, r10, r11, ror #14 + and r10, r6, #0x33000000 + orr r11, r11, r10, ror #30 + and r10, r6, #0x00ff0000 + orr r11, r11, r10, ror #16 + and r10, r6, r12 + orr r6, r11, r10, ror #18 // permute r6 14 times --- + and r10, r1, r7, ror #24 // --- permute r7 14 times + and r11, r7, #0x00000033 + orr r11, r10, r11, ror #14 + and r10, r7, #0x33000000 + orr r11, r11, r10, ror #30 + and r10, r7, #0x00ff0000 + orr r11, r11, r10, ror #16 + and r10, r7, r12 + orr r7, r11, r10, ror #18 // permute r7 14 times --- + and r10, r1, r8, ror #24 // --- permute r8 14 times + and r11, r8, #0x00000033 + orr r11, r10, r11, ror #14 + and r10, r8, #0x33000000 + orr r11, r11, r10, ror #30 + and r10, r8, #0x00ff0000 + orr r11, r11, r10, ror #16 + and r10, r8, r12 + orr r8, r11, r10, ror #18 // permute r8 14 times --- + and r10, r1, r9, ror #24 // --- permute r9 14 times + and r11, r9, #0x00000033 + orr r11, r10, r11, ror #14 + and r10, r9, #0x33000000 + orr r11, r11, r10, ror #30 + and r10, r9, #0x00ff0000 + orr r11, r11, r10, ror #16 + and r10, r9, r12 + orr r9, r11, r10, ror #18 // permute r9 14 times --- + bx lr + +.align 2 +packing: + eor r12, r2, r2, lsr #3 + and r12, r12, r10 + eor r2, r2, r12 + eor r2, r2, r12, lsl #3 //SWAPMOVE(r2, r2, 0x0a0a0a0a, 3) + eor r12, r3, r3, lsr #3 + and r12, r12, r10 + eor r3, r3, r12 + eor r3, r3, r12, lsl #3 //SWAPMOVE(r3, r3, 0x0a0a0a0a, 3) + eor r12, r4, r4, lsr #3 + and r12, r12, r10 + eor r4, r4, r12 + eor r4, r4, r12, lsl #3 //SWAPMOVE(r4, r4, 0x0a0a0a0a, 3) + eor r12, r5, r5, lsr #3 + and r12, r12, r10 + eor r5, r5, r12 + eor r5, r5, r12, lsl #3 //SWAPMOVE(r5, r5, 0x0a0a0a0a, 3) + eor r12, r2, r4, lsr #2 + and r12, r12, r11 + eor r2, r2, r12 + eor r4, r4, r12, lsl #2 //SWAPMOVE(r4, r2, 0x30303030, 2) + eor r12, r2, r3, lsr #4 + and r12, r12, r11, lsr #2 + eor r2, r2, r12 + eor r3, r3, r12, lsl #4 //SWAPMOVE(r3, r2, 0x0c0c0c0c, 4) + eor r12, r2, r5, lsr #6 + and r12, r12, r11, lsr #4 + eor r2, r2, r12 + eor r5, r5, r12, lsl #6 //SWAPMOVE(r5, r2, 0x03030303, 6) + eor r12, r4, r3, lsr #2 + and r12, r12, r11, lsr #2 + eor r4, r4, r12 + eor r3, r3, r12, lsl #2 //SWAPMOVE(r3, r4, 0x0c0c0c0c, 2) + eor r12, r4, r5, lsr #4 + and r12, r12, r11, lsr #4 + eor r4, r4, r12 + eor r5, r5, r12, lsl #4 //SWAPMOVE(r5, r4, 0x03030303, 4) + eor r12, r3, r5, lsr #2 + and r12, r12, r11, lsr #4 + eor r3, r3, r12 + eor r5, r5, r12, lsl #2 //SWAPMOVE(r5, r3, 0x03030303, 2) + bx lr + +/****************************************************************************** +* Compute LFSR2(TK2) ^ LFSR3(TK3) for all rounds. +* Performing both at the same time allows to save some memory accesses. +******************************************************************************/ +@ void tkschedule_lfsr(u32* tk, const u8* tk2, const u8* tk3, const int rounds) +.global tkschedule_lfsr +.type tkschedule_lfsr,%function +.align 2 +tkschedule_lfsr: + push {r0-r12, r14} + ldr.w r3, [r1, #8] //load tk2 (3rd word) + ldr.w r4, [r1, #4] //load tk2 (2nd word) + ldr.w r5, [r1, #12] //load tk2 (4th word) + ldr.w r12, [r1] //load tk2 (1st word) + mov r1, r2 //move tk3 address in r1 + mov r2, r12 //move 1st tk2 word in r2 + movw r10, #0x0a0a + movt r10, #0x0a0a //r10 <- 0x0a0a0a0a + movw r11, #0x3030 + movt r11, #0x3030 //r7 <- 0x30303030 + bl packing //pack tk2 + mov r6, r2 //move tk2 from r2-r5 to r6-r9 + mov r7, r3 //move tk2 from r2-r5 to r6-r9 + mov r8, r4 //move tk2 from r2-r5 to r6-r9 + mov r9, r5 //move tk2 from r2-r5 to r6-r9 + ldr.w r3, [r1, #8] //load tk3 (3rd word) + ldr.w r4, [r1, #4] //load tk3 (2nd word) + ldr.w r5, [r1, #12] //load tk3 (4th) word) + ldr.w r2, [r1] //load tk3 (1st) word) + bl packing //pack tk3 + eor r10, r10, r10, lsl #4 //r10<- 0xaaaaaaaa + ldr.w r1, [sp, #12] //load loop counter in r1 + eor r11, r2, r6 //tk2 ^ tk3 (1st word) + eor r12, r3, r7 //tk2 ^ tk3 (2nd word) + strd r11, r12, [r0], #8 //store in tk + eor r11, r4, r8 //tk2 ^ tk3 (3rd word) + eor r12, r5, r9 //tk2 ^ tk3 (4th word) + strd r11, r12, [r0], #8 //store in tk + loop: + and r12, r8, r10 // --- apply LFSR2 to tk2 + eor r12, r12, r6 + and r14, r10, r12, lsl #1 + and r12, r12, r10 + orr r6, r14, r12, lsr #1 // apply LFSR2 to tk2 --- + and r12, r3, r10 // --- apply LFSR3 to tk3 + eor r12, r5, r12, lsr #1 + and r14, r10, r12, lsl #1 + and r12, r12, r10 + orr r5, r14, r12, lsr #1 // apply LFSR3 to tk3 --- + eor r11, r5, r7 //tk2 ^ tk3 (1st word) + eor r12, r2, r8 //tk2 ^ tk3 (2nd word) + strd r11, r12, [r0], #8 //store in tk + eor r11, r3, r9 //tk2 ^ tk3 (3rd word) + eor r12, r4, r6 //tk2 ^ tk3 (4th word) + strd r11, r12, [r0], #24 //store in tk + and r12, r9, r10 // --- apply LFSR2 to tk2 + eor r12, r12, r7 + and r14, r10, r12, lsl #1 + and r12, r12, r10 + orr r7, r14, r12, lsr #1 // apply LFSR2 to tk2 --- + and r12, r2, r10 // --- apply LFSR3 to tk3 + eor r12, r4, r12, lsr #1 + and r14, r10, r12, lsl #1 + and r12, r12, r10 + orr r4, r14, r12, lsr #1 // apply LFSR3 to tk3 --- + eor r11, r4, r8 //tk2 ^ tk3 (1st word) + eor r12, r5, r9 //tk2 ^ tk3 (2nd word) + strd r11, r12, [r0], #8 //store in tk + eor r11, r2, r6 //tk2 ^ tk3 (3rd word) + eor r12, r3, r7 //tk2 ^ tk3 (4th word) + strd r11, r12, [r0], #24 //store in tk + and r12, r6, r10 // --- apply LFSR2 to tk2 + eor r12, r12, r8 + and r14, r10, r12, lsl #1 + and r12, r12, r10 + orr r8, r14, r12, lsr #1 // apply LFSR2 to tk2 --- + and r12, r5, r10 // --- apply LFSR3 to tk3 + eor r12, r3, r12, lsr #1 + and r14, r10, r12, lsl #1 + and r12, r12, r10 + orr r3, r14, r12, lsr #1 // apply LFSR3 to tk3 --- + eor r11, r3, r9 //tk2 ^ tk3 (1st word) + eor r12, r4, r6 //tk2 ^ tk3 (2nd word) + strd r11, r12, [r0], #8 //store in tk + eor r11, r5, r7 //tk2 ^ tk3 (3rd word) + eor r12, r2, r8 //tk2 ^ tk3 (4th word) + strd r11, r12, [r0], #24 //store in tk + and r12, r7, r10 // --- apply LFSR2 to tk2 + eor r12, r12, r9 + and r14, r10, r12, lsl #1 + and r12, r12, r10 + orr r9, r14, r12, lsr #1 // apply LFSR2 to tk2 --- + and r12, r4, r10 // --- apply LFSR3 to tk3 + eor r12, r2, r12, lsr #1 + and r14, r10, r12, lsl #1 + and r12, r12, r10 + orr r2, r14, r12, lsr #1 // apply LFSR3 to tk3 --- + eor r11, r2, r6 //tk2 ^ tk3 (1st word) + eor r12, r3, r7 //tk2 ^ tk3 (2nd word) + strd r11, r12, [r0], #8 //store in tk + eor r11, r4, r8 //tk2 ^ tk3 (3rd word) + eor r12, r5, r9 //tk2 ^ tk3 (4th word) + strd r11, r12, [r0], #24 //store in tk + subs.w r1, r1, #8 //decrease loop counter by 8 + bne loop + pop {r0-r12, r14} + bx lr + +@ void tkschedule_perm(u32* tk) +.global tkschedule_perm +.type tkschedule_perm,%function +.align 2 +tkschedule_perm: + push {r0-r12, lr} + sub.w sp, #4 //to store r14 in subroutines + ldm r0, {r6-r9} //load tk + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r6, r6, r10 //tk &= 0xf0f0f0f0 (1st word) + and r7, r7, r10 //tk &= 0xf0f0f0f0 (2nd word) + and r8, r8, r10 //tk &= 0xf0f0f0f0 (3rd word) + and r9, r9, r10 //tk &= 0xf0f0f0f0 (4th word) + eor r8, r8, #0x00000004 //add rconst + eor r9, r9, #0x00000040 //add rconst + mvn r9, r9 //to remove a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 1st round + strd r6, r7, [r0], #8 //store 2nd half tk for 1st round + ldm r0, {r6-r9} //load tk + bl p2 //apply the permutation twice + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #26 //ror and mask to match fixslicing + and r12, r10, r7, ror #26 //ror and mask to match fixslicing + strd r11, r12, [r0], #8 //store 1st half tk for 2nd round + and r11, r10, r8, ror #26 //ror and mask to match fixslicing + and r12, r10, r9, ror #26 //ror and mask to match fixslicing + eor r11, r11, #0x10000000 //add rconst + eor r11, r11, #0x00000100 //add rconst + eor r12, r12, #0x00000100 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 2nd round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #28 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #12 + and r11, r10, r7, ror #28 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #12 + and r11, r10, r8, ror #28 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #12 + and r11, r10, r9, ror #28 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #12 //ror and masks to match fixslicing --- + eor r7, r7, #0x04000000 //add rconst + eor r8, r8, #0x44000000 //add rconst + eor r9, r9, #0x04000000 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 3rd round + strd r6, r7, [r0], #8 //store 2nd half tk for 3rd round + ldm r0, {r6-r9} //load tk + bl p4 //apply the permutation 4 times + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6, ror #16 //ror and mask to match fixslicing + and r12, r10, r7, ror #16 //ror and mask to match fixslicing + eor r11, r11, #0x00400000 //add rconst + eor r12, r12, #0x00400000 //add rconst + strd r11, r12, [r0, #24] //store 2nd half tk for 5th round + and r11, r10, r8, ror #16 //ror and mask to match fixslicing + and r12, r10, r9, ror #16 //ror and mask to match fixslicing + eor r11, r11, #0x00440000 //add rconst + eor r12, r12, #0x00500000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 5th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #14 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #6 + and r11, r10, r7, ror #14 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #6 + and r11, r10, r8, ror #14 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #6 + and r11, r10, r9, ror #14 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #6 //ror and masks to match fixslicing --- + eor r6, r6, #0x00100000 //add rconst + eor r7, r7, #0x00100000 //add rconst + eor r8, r8, #0x00100000 //add rconst + eor r8, r8, #0x00000001 //add rconst + eor r9, r9, #0x00100000 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 4th round + strd r8, r9, [r0], #24 //store 2nd half tk for 4th round + ldm r0, {r6-r9} //load tk + bl p6 //apply the permutation 6 times + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #10 //ror and mask to match fixslicing + and r12, r10, r7, ror #10 //ror and mask to match fixslicing + eor r11, r11, #0x01000000 //add rconst + eor r12, r12, #0x01000000 //add rconst + strd r11, r12, [r0], #8 //store 1st half tk for 6th round + and r11, r10, r8, ror #10 //ror and mask to match fixslicing + and r12, r10, r9, ror #10 //ror and mask to match fixslicing + eor r11, r11, #0x01400000 //add rconst + eor r11, r11, #0x00001000 //add rconst + eor r12, r12, #0x00400000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 6th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #12 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #28 + and r11, r10, r7, ror #12 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #28 + and r11, r10, r8, ror #12 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #28 + and r11, r10, r9, ror #12 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #28 //ror and masks to match fixslicing --- + eor r6, r6, #0x00000400 //add rconst + eor r7, r7, #0x00000400 //add rconst + eor r8, r8, #0x01000000 //add rconst + eor r8, r8, #0x00004000 //add rconst + eor r9, r9, #0x01000000 //add rconst + eor r9, r9, #0x00000400 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 7th round + strd r6, r7, [r0], #8 //store 2nd half tk for 7th round + ldm r0, {r6-r9} //load tk + bl p8 //apply the permutation 8 times + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6 //ror and mask to match fixslicing + and r12, r10, r7 //ror and mask to match fixslicing + eor r12, r12, #0x00000040 //add rconst + strd r11, r12, [r0, #24] //store 2nd half tk for 9th round + and r11, r10, r8 //ror and mask to match fixslicing + and r12, r10, r9 //ror and mask to match fixslicing + eor r11, r11, #0x00000054 //add rconst + eor r12, r12, #0x00000050 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 9th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #30 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #22 + and r11, r10, r7, ror #30 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #22 + and r11, r10, r8, ror #30 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #22 + and r11, r10, r9, ror #30 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #22 //ror and masks to match fixslicing --- + eor r6 ,r6, #0x00000010 + eor r8, r8, #0x00010000 + eor r8, r8, #0x00000410 + eor r9, r9, #0x00000410 + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 8th round + strd r8, r9, [r0], #24 //store 2nd half tk for 8th round + ldm r0, {r6-r9} //load tk + bl p10 //apply the permutation 10 times + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #26 //ror and mask to match fixslicing + and r12, r10, r7, ror #26 //ror and mask to match fixslicing + eor r11, r11, #0x00000100 //add rconst + eor r12, r12, #0x00000100 //add rconst + strd r11, r12, [r0], #8 //store 1st half tk for 10th round + and r11, r10, r8, ror #26 //ror and mask to match fixslicing + and r12, r10, r9, ror #26 //ror and mask to match fixslicing + eor r11, r11, #0x10000000 //add rconst + eor r11, r11, #0x00000140 //add rconst + eor r12, r12, #0x00000100 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 10th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #28 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #12 + and r11, r10, r7, ror #28 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #12 + and r11, r10, r8, ror #28 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #12 + and r11, r10, r9, ror #28 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #12 //ror and masks to match fixslicing --- + eor r6, r6, #0x04000000 //add rconst + eor r7, r7, #0x04000000 //add rconst + eor r8, r8, #0x44000000 //add rconst + eor r9, r9, #0x00000100 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 11th round + strd r6, r7, [r0], #8 //store 2nd half tk for 11th round + ldm r0, {r6-r9} //load tk + bl p12 //apply the permutation 4 times + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6, ror #16 //ror and mask to match fixslicing + and r12, r10, r7, ror #16 //ror and mask to match fixslicing + eor r11, r11, #0x00400000 //add rconst + strd r11, r12, [r0, #24] //store 2nd half tk for 13th round + and r11, r10, r8, ror #16 //ror and mask to match fixslicing + and r12, r10, r9, ror #16 //ror and mask to match fixslicing + eor r11, r11, #0x00140000 //add rconst + eor r12, r12, #0x00500000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 13th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #14 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #6 + and r11, r10, r7, ror #14 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #6 + and r11, r10, r8, ror #14 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #6 + and r11, r10, r9, ror #14 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #6 //ror and masks to match fixslicing --- + eor r6, r6, #0x00100000 //add rconst + eor r7, r7, #0x00100000 //add rconst + eor r8, r8, #0x04000000 //add rconst + eor r8, r8, #0x00000001 //add rconst + eor r9, r9, #0x04000000 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 12th round + strd r8, r9, [r0], #24 //store 2nd half tk for 12th round + ldm r0, {r6-r9} //load tk + bl p14 //apply the permutation 6 times + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #10 //ror and mask to match fixslicing + and r12, r10, r7, ror #10 //ror and mask to match fixslicing + strd r11, r12, [r0], #8 //store 1st half tk for 14th round + and r11, r10, r8, ror #10 //ror and mask to match fixslicing + and r12, r10, r9, ror #10 //ror and mask to match fixslicing + eor r11, r11, #0x01400000 //add rconst + eor r11, r11, #0x00001000 //add rconst + eor r12, r12, #0x01400000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 14th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #12 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #28 + and r11, r10, r7, ror #12 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #28 + and r11, r10, r8, ror #12 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #28 + and r11, r10, r9, ror #12 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #28 //ror and masks to match fixslicing --- + eor r7, r7, #0x00000400 //add rconst + eor r8, r8, #0x01000000 //add rconst + eor r8, r8, #0x00004400 //add rconst + eor r9, r9, #0x00000400 //add const + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 15th round + strd r6, r7, [r0], #8 //store 2nd half tk for 15th round + ldm r0, {r6-r9} //load tk + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6 //ror and mask to match fixslicing + and r12, r10, r7 //ror and mask to match fixslicing + eor r11, r11, #0x00000040 //add rconst + eor r12, r12, #0x00000040 //add rconst + strd r11, r12, [r0, #24] //store 2nd half tk for 17th round + and r11, r10, r8 //ror and mask to match fixslicing + and r12, r10, r9 //ror and mask to match fixslicing + eor r11, r11, #0x00000004 //add rconst + eor r12, r12, #0x00000050 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 17th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #30 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #22 + and r11, r10, r7, ror #30 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #22 + and r11, r10, r8, ror #30 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #22 + and r11, r10, r9, ror #30 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #22 //ror and masks to match fixslicing --- + eor r6 ,r6, #0x00000010 + eor r7 ,r7, #0x00000010 + eor r8, r8, #0x00000010 + eor r8, r8, #0x00010000 + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 16th round + strd r8, r9, [r0], #24 //store 2nd half tk for 16th round + ldm r0, {r6-r9} //load tk + bl p2 //apply the permutation twice + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #26 //ror and mask to match fixslicing + and r12, r10, r7, ror #26 //ror and mask to match fixslicing + eor r11, r11, #0x00000100 //add rconst + strd r11, r12, [r0], #8 //store 1st half tk for 18th round + and r11, r10, r8, ror #26 //ror and mask to match fixslicing + and r12, r10, r9, ror #26 //ror and mask to match fixslicing + eor r11, r11, #0x10000000 //add rconst + eor r11, r11, #0x00000140 //add rconst + eor r12, r12, #0x00000040 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 18th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #28 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #12 + and r11, r10, r7, ror #28 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #12 + and r11, r10, r8, ror #28 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #12 + and r11, r10, r9, ror #28 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #12 //ror and masks to match fixslicing --- + eor r7, r7, #0x04000000 //add rconst + eor r8, r8, #0x40000000 //add rconst + eor r8, r8, #0x00000100 //add rconst + eor r9, r9, #0x04000000 //add rconst + eor r9, r9, #0x00000100 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 19th round + strd r6, r7, [r0], #8 //store 2nd half tk for 19th round + ldm r0, {r6-r9} //load tk + bl p4 //apply the permutation 4 times + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6, ror #16 //ror and mask to match fixslicing + and r12, r10, r7, ror #16 //ror and mask to match fixslicing + eor r12, r12, #0x00400000 //add rconst + strd r11, r12, [r0, #24] //store 2nd half tk for 21th round + and r11, r10, r8, ror #16 //ror and mask to match fixslicing + and r12, r10, r9, ror #16 //ror and mask to match fixslicing + eor r11, r11, #0x00440000 //add rconst + eor r12, r12, #0x00100000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 21th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #14 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #6 + and r11, r10, r7, ror #14 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #6 + and r11, r10, r8, ror #14 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #6 + and r11, r10, r9, ror #14 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #6 //ror and masks to match fixslicing --- + eor r6, r6, #0x00100000 //add rconst + eor r8, r8, #0x04100000 //add rconst + eor r8, r8, #0x00000001 //add rconst + eor r9, r9, #0x00100000 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 20th round + strd r8, r9, [r0], #24 //store 2nd half tk for 20th round + ldm r0, {r6-r9} //load tk + bl p6 //apply the permutation 6 times + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #10 //ror and mask to match fixslicing + and r12, r10, r7, ror #10 //ror and mask to match fixslicing + eor r11, r11, #0x01000000 //add rconst + eor r12, r12, #0x01000000 //add rconst + strd r11, r12, [r0], #8 //store 1st half tk for 22th round + and r11, r10, r8, ror #10 //ror and mask to match fixslicing + and r12, r10, r9, ror #10 //ror and mask to match fixslicing + eor r11, r11, #0x00400000 //add rconst + eor r11, r11, #0x00001000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 22th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #12 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #28 + and r11, r10, r7, ror #12 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #28 + and r11, r10, r8, ror #12 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #28 + and r11, r10, r9, ror #12 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #28 //ror and masks to match fixslicing --- + eor r6, r6, #0x00000400 //add rconst + eor r8, r8, #0x00004000 //add rconst + eor r9, r9, #0x01000000 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 23th round + strd r6, r7, [r0], #8 //store 2nd half tk for 23th round + ldm r0, {r6-r9} //load tk + bl p8 //apply the permutation 8 times + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6 //ror and mask to match fixslicing + and r12, r10, r7 //ror and mask to match fixslicing + strd r11, r12, [r0, #24] //store 2nd half tk for 25th round + and r11, r10, r8 //ror and mask to match fixslicing + and r12, r10, r9 //ror and mask to match fixslicing + eor r11, r11, #0x00000014 //add rconst + eor r12, r12, #0x00000040 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 25th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #30 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #22 + and r11, r10, r7, ror #30 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #22 + and r11, r10, r8, ror #30 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #22 + and r11, r10, r9, ror #30 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #22 //ror and masks to match fixslicing --- + eor r8, r8, #0x00010400 + eor r9, r9, #0x00000400 + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 24th round + strd r8, r9, [r0], #24 //store 2nd half tk for 24th round + ldm r0, {r6-r9} //load tk + bl p10 //apply the permutation 10 times + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #26 //ror and mask to match fixslicing + and r12, r10, r7, ror #26 //ror and mask to match fixslicing + strd r11, r12, [r0], #8 //store 1st half tk for 26th round + and r11, r10, r8, ror #26 //ror and mask to match fixslicing + and r12, r10, r9, ror #26 //ror and mask to match fixslicing + eor r11, r11, #0x10000000 //add rconst + eor r11, r11, #0x00000100 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 26th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #28 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #12 + and r11, r10, r7, ror #28 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #12 + and r11, r10, r8, ror #28 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #12 + and r11, r10, r9, ror #28 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #12 //ror and masks to match fixslicing --- + eor r7, r7, #0x04000000 //add rconst + eor r8, r8, #0x40000000 //add rconst + eor r9, r9, #0x04000000 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 27th round + strd r6, r7, [r0], #8 //store 2nd half tk for 27th round + ldm r0, {r6-r9} //load tk + bl p12 //apply the permutation 4 times + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6, ror #16 //ror and mask to match fixslicing + and r12, r10, r7, ror #16 //ror and mask to match fixslicing + eor r12, r12, #0x00400000 //add rconst + strd r11, r12, [r0, #24] //store 2nd half tk for 29th round + and r11, r10, r8, ror #16 //ror and mask to match fixslicing + and r12, r10, r9, ror #16 //ror and mask to match fixslicing + eor r11, r11, #0x00440000 //add rconst + eor r12, r12, #0x00500000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 29th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #14 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #6 + and r11, r10, r7, ror #14 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #6 + and r11, r10, r8, ror #14 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #6 + and r11, r10, r9, ror #14 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #6 //ror and masks to match fixslicing --- + eor r6, r6, #0x00100000 //add rconst + eor r8, r8, #0x00100000 //add rconst + eor r8, r8, #0x00000001 //add rconst + eor r9, r9, #0x00100000 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 28th round + strd r8, r9, [r0], #24 //store 2nd half tk for 28th round + ldm r0, {r6-r9} //load tk + bl p14 //apply the permutation 6 times + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #10 //ror and mask to match fixslicing + and r12, r10, r7, ror #10 //ror and mask to match fixslicing + eor r11, r11, #0x01000000 //add rconst + eor r12, r12, #0x01000000 //add rconst + strd r11, r12, [r0], #8 //store 1st half tk for 30th round + and r11, r10, r8, ror #10 //ror and mask to match fixslicing + and r12, r10, r9, ror #10 //ror and mask to match fixslicing + eor r11, r11, #0x01400000 //add rconst + eor r11, r11, #0x00001000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 30th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #12 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #28 + and r11, r10, r7, ror #12 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #28 + and r11, r10, r8, ror #12 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #28 + and r11, r10, r9, ror #12 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #28 //ror and masks to match fixslicing --- + eor r6, r6, #0x00000400 //add rconst + eor r7, r7, #0x00000400 //add rconst + eor r8, r8, #0x00004000 //add rconst + eor r9, r9, #0x01000000 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 31th round + strd r6, r7, [r0], #8 //store 2nd half tk for 31th round + ldm r0, {r6-r9} //load tk + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6 //ror and mask to match fixslicing + and r12, r10, r7 //ror and mask to match fixslicing + strd r11, r12, [r0, #24] //store 2nd half tk for 33th round + and r11, r10, r8 //ror and mask to match fixslicing + and r12, r10, r9 //ror and mask to match fixslicing + eor r11, r11, #0x00000014 //add rconst + eor r12, r12, #0x00000050 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 33th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #30 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #22 + and r11, r10, r7, ror #30 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #22 + and r11, r10, r8, ror #30 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #22 + and r11, r10, r9, ror #30 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #22 //ror and masks to match fixslicing --- + eor r6 ,r6, #0x00000010 + eor r8, r8, #0x00010400 + eor r9, r9, #0x00000400 + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 32th round + strd r8, r9, [r0], #24 //store 2nd half tk for 32th round + ldm r0, {r6-r9} //load tk + bl p2 //apply the permutation twice + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #26 //ror and mask to match fixslicing + and r12, r10, r7, ror #26 //ror and mask to match fixslicing + strd r11, r12, [r0], #8 //store 1st half tk for 34th round + and r11, r10, r8, ror #26 //ror and mask to match fixslicing + and r12, r10, r9, ror #26 //ror and mask to match fixslicing + eor r11, r11, #0x10000000 //add rconst + eor r11, r11, #0x00000140 //add rconst + eor r12, r12, #0x00000100 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 34th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #28 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #12 + and r11, r10, r7, ror #28 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #12 + and r11, r10, r8, ror #28 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #12 + and r11, r10, r9, ror #28 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #12 //ror and masks to match fixslicing --- + eor r7, r7, #0x04000000 //add rconst + eor r8, r8, #0x44000000 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 35th round + strd r6, r7, [r0], #8 //store 2nd half tk for 35th round + ldm r0, {r6-r9} //load tk + bl p4 //apply the permutation 4 times + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6, ror #16 //ror and mask to match fixslicing + and r12, r10, r7, ror #16 //ror and mask to match fixslicing + eor r11, r11, #0x00400000 //add rconst + strd r11, r12, [r0, #24] //store 2nd half tk for 37th round + and r11, r10, r8, ror #16 //ror and mask to match fixslicing + and r12, r10, r9, ror #16 //ror and mask to match fixslicing + eor r11, r11, #0x00440000 //add rconst + eor r12, r12, #0x00500000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 37th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #14 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #6 + and r11, r10, r7, ror #14 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #6 + and r11, r10, r8, ror #14 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #6 + and r11, r10, r9, ror #14 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #6 //ror and masks to match fixslicing --- + eor r6, r6, #0x00100000 //add rconst + eor r7, r7, #0x00100000 //add rconst + eor r8, r8, #0x00000001 //add rconst + eor r9, r9, #0x00100000 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 36th round + strd r8, r9, [r0], #24 //store 2nd half tk for 36th round + ldm r0, {r6-r9} //load tk + bl p6 //apply the permutation 6 times + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #10 //ror and mask to match fixslicing + and r12, r10, r7, ror #10 //ror and mask to match fixslicing + eor r12, r12, #0x01000000 //add rconst + strd r11, r12, [r0], #8 //store 1st half tk for 38th round + and r11, r10, r8, ror #10 //ror and mask to match fixslicing + and r12, r10, r9, ror #10 //ror and mask to match fixslicing + eor r11, r11, #0x01400000 //add rconst + eor r11, r11, #0x00001000 //add rconst + eor r12, r12, #0x00400000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 38th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #12 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #28 + and r11, r10, r7, ror #12 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #28 + and r11, r10, r8, ror #12 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #28 + and r11, r10, r9, ror #12 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #28 //ror and masks to match fixslicing --- + eor r6, r6, #0x00000400 //add rconst + eor r7, r7, #0x00000400 //add rconst + eor r8, r8, #0x01000000 + eor r8, r8, #0x00004000 //add rconst + eor r9, r9, #0x00000400 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 39th round + strd r6, r7, [r0], #8 //store 2nd half tk for 39th round + ldm r0, {r6-r9} //load tk + bl p8 //apply the permutation 8 times + movw r10, #0x3030 + movt r10, #0x3030 //r10<- 0x30303030 + and r11, r10, r6, ror #30 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #22 + and r11, r10, r7, ror #30 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #22 + and r11, r10, r8, ror #30 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #22 + and r11, r10, r9, ror #30 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #22 //ror and masks to match fixslicing --- + eor r6, r6, #0x00000010 + eor r8, r8, #0x00010000 + eor r8, r8, #0x00000010 + eor r9, r9, #0x00000400 + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 40th round + strd r8, r9, [r0] //store 2nd half tk for 40th round + add.w sp, #4 + pop {r0-r12, lr} + bx lr + +/****************************************************************************** +* Applies the permutations P^2, ..., P^14 for rounds 0 to 16. Since P^16=Id, we +* don't need more calculations as no LFSR is applied to TK1. +******************************************************************************/ +@ void tkschedule_perm_tk1(u32* tk, const u8* key) +.global tkschedule_perm_tk1 +.type tkschedule_perm_tk1,%function +.align 2 +tkschedule_perm_tk1: + push {r0-r12, lr} + ldr.w r3, [r1, #8] //load tk1 (3rd word) + ldr.w r4, [r1, #4] //load tk1 (2nd word) + ldr.w r5, [r1, #12] //load tk1 (4th word) + ldr.w r2, [r1] //load tk1 (1st word) + movw r10, #0x0a0a + movt r10, #0x0a0a //r6 <- 0x0a0a0a0a + movw r11, #0x3030 + movt r11, #0x3030 //r7 <- 0x30303030 + bl packing //pack tk1 + mov r6, r2 //move tk1 from r2-r5 to r6-r9 + mov r7, r3 //move tk1 from r2-r5 to r6-r9 + mov r8, r4 //move tk1 from r2-r5 to r6-r9 + mov r9, r5 //move tk1 from r2-r5 to r6-r9 + movw r2, #0xf0f0 + movt r2, #0xf0f0 //r2<- 0xf0f0f0f0 + and r11, r8, r2 //tk &= 0xf0f0f0f0 (3rd word) + and r12, r9, r2 //tk &= 0xf0f0f0f0 (4th word) + strd r11, r12, [r0], #8 //store 1st half tk for 1st round + and r11, r6, r2 //tk &= 0xf0f0f0f0 (1st word) + and r12, r7, r2 //tk &= 0xf0f0f0f0 (2nd word) + strd r11, r12, [r0], #8 //store 2nd half tk for 1st round + + bl p2 //apply the permutation twice + movw r3, #0x0303 + movt r3, #0x0303 //r3<- 0x03030303 + and r11, r3, r6, ror #28 //--- ror and masks to match fixslicing + and r12, r6, r3, lsl #6 + orr r12, r11, r12, ror #12 + str.w r12, [r0, #8] + and r11, r3, r7, ror #28 + and r12, r7, r3, lsl #6 + orr r12, r11, r12, ror #12 + str.w r12, [r0, #12] + and r11, r3, r9, ror #28 + and r12, r9, r3, lsl #6 + orr r12, r11, r12, ror #12 + str.w r12, [r0, #4] + and r11, r3, r8, ror #28 + and r12, r8, r3, lsl #6 + orr r12, r11, r12, ror #12 + str.w r12, [r0], #16 //ror and masks to match fixslicing --- + bl p2 //apply the permutation 4 times + and r11, r2, r6, ror #16 //ror and mask to match fixslicing + and r12, r2, r7, ror #16 //ror and mask to match fixslicing + strd r11, r12, [r0, #8] //store 2nd half tk for 5th round + and r11, r2, r8, ror #16 //ror and mask to match fixslicing + and r12, r2, r9, ror #16 //ror and mask to match fixslicing + strd r11, r12, [r0], #16 //store 1st half tk for 5th round + bl p2 //apply the permutation 6 times + and r11, r3, r6, ror #12 //--- ror and masks to match fixslicing + and r12, r6, r3, lsl #6 + orr r12, r11, r12, ror #28 + str.w r12, [r0, #8] + and r11, r3, r7, ror #12 + and r12, r7, r3, lsl #6 + orr r12, r11, r12, ror #28 + str.w r12, [r0, #12] + and r11, r3, r9, ror #12 + and r12, r9, r3, lsl #6 + orr r12, r11, r12, ror #28 + str.w r12, [r0, #4] + and r11, r3, r8, ror #12 + and r12, r8, r3, lsl #6 + orr r12, r11, r12, ror #28 + str.w r12, [r0], #16 //ror and masks to match fixslicing --- + bl p2 //apply the permutation 8 times + and r11, r2, r6 //ror and mask to match fixslicing + and r12, r2, r7 //ror and mask to match fixslicing + strd r11, r12, [r0, #8] //store 2nd half tk for 9th round + and r11, r2, r8 //ror and mask to match fixslicing + and r12, r2, r9 //ror and mask to match fixslicing + strd r11, r12, [r0], #16 //store 1st half tk for 9th round + bl p2 //apply the permutation 10 + and r11, r3, r6, ror #28 //--- ror and masks to match fixslicing + and r12, r6, r3, lsl #6 + orr r12, r11, r12, ror #12 + str.w r12, [r0, #8] + and r11, r3, r7, ror #28 + and r12, r7, r3, lsl #6 + orr r12, r11, r12, ror #12 + str.w r12, [r0, #12] + and r11, r3, r9, ror #28 + and r12, r9, r3, lsl #6 + orr r12, r11, r12, ror #12 + str.w r12, [r0, #4] + and r11, r3, r8, ror #28 + and r12, r8, r3, lsl #6 + orr r12, r11, r12, ror #12 + str.w r12, [r0], #16 //ror and masks to match fixslicing --- + bl p2 //apply the permutation 12 times + and r11, r2, r6, ror #16 //ror and mask to match fixslicing + and r12, r2, r7, ror #16 //ror and mask to match fixslicing + strd r11, r12, [r0, #8] //store 2nd half tk for 5th round + and r11, r2, r8, ror #16 //ror and mask to match fixslicing + and r12, r2, r9, ror #16 //ror and mask to match fixslicing + strd r11, r12, [r0], #16 //store 1st half tk for 5th round + bl p2 //apply the permutation 14 times + and r11, r3, r6, ror #12 //--- ror and masks to match fixslicing + and r12, r6, r3, lsl #6 + orr r12, r11, r12, ror #28 + str.w r12, [r0, #8] + and r11, r3, r7, ror #12 + and r12, r7, r3, lsl #6 + orr r12, r11, r12, ror #28 + str.w r12, [r0, #12] + and r11, r3, r9, ror #12 + and r12, r9, r3, lsl #6 + orr r12, r11, r12, ror #28 + str.w r12, [r0, #4] + and r11, r3, r8, ror #12 + and r12, r8, r3, lsl #6 + orr r12, r11, r12, ror #28 + str.w r12, [r0] //ror and masks to match fixslicing --- + pop {r0-r12, lr} + bx lr + +.align 2 +quadruple_round: + orr r8, r2, r3 + eor r5, r5, r8 + mvn r5, r5 + eor r8, r3, r4, lsr #1 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8, lsl #1 //SWAPMOVE(r4, r3, 0x55555555, 1); + eor r8, r4, r5, lsr #1 + and r8, r8, r6 + eor r4, r4, r8 + eor r5, r5, r8, lsl #1 //SWAPMOVE(r5, r4, 0x55555555, 1); + orr r8, r4, r5 + eor r3, r3, r8 + mvn r3, r3 + eor r8, r2, r3, lsr #1 + and r8, r8, r6 + eor r2, r2, r8 + eor r3, r3, r8, lsl #1 //SWAPMOVE(r3, r2, 0x55555555, 1); + eor r8, r5, r2, lsr #1 + and r8, r8, r6 + eor r5, r5, r8 + eor r2, r2, r8, lsl #1 //SWAPMOVE(r2, r5, 0x55555555, 1); + orr r8, r2, r3 + eor r5, r5, r8 + mvn r5, r5 + eor r8, r3, r4, lsr #1 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8, lsl #1 //SWAPMOVE(r4, r3, 0x55555555, 1); + eor r8, r4, r5, lsr #1 + and r8, r8, r6 + eor r4, r4, r8 + eor r5, r5, r8, lsl #1 //SWAPMOVE(r5, r4, 0x55555555, 1); + orr r8, r4, r5 + eor r3, r3, r8 + eor r8, r2, r5 + and r8, r8, r6 + eor r2, r2, r8 + eor r5, r5, r8 //SWAPMOVE(r5, r2, 0x55555555, 0); + ldmia.w r1!, {r8-r11} //load rkeys in r8,...,r11 + eor r2, r2, r8 //add rtk_2_3 + rconst + eor r3, r3, r9 //add rtk_2_3 + rconst + eor r4, r4, r10 //add rtk_2_3 + rconst + eor r5, r5, r11 //add rtk_2_3 + rconst + ldmia.w r0!,{r8-r11} + eor r2, r2, r8 //add rtk_1 + eor r3, r3, r9 //add rtk_1 + eor r4, r4, r10 //add rtk_1 + eor r5, r5, r11 //add rtk_1 + and r8, r7, r2, ror #30 // --- mixcolumns 0 --- + eor r2, r2, r8, ror #24 + and r8, r7, r2, ror #18 + eor r2, r2, r8, ror #2 + and r8, r7, r2, ror #6 + eor r2, r2, r8, ror #4 + and r8, r7, r3, ror #30 + eor r3, r3, r8, ror #24 + and r8, r7, r3, ror #18 + eor r3, r3, r8, ror #2 + and r8, r7, r3, ror #6 + eor r3, r3, r8, ror #4 + and r8, r7, r4, ror #30 + eor r4, r4, r8, ror #24 + and r8, r7, r4, ror #18 + eor r4, r4, r8, ror #2 + and r8, r7, r4, ror #6 + eor r4, r4, r8, ror #4 + and r8, r7, r5, ror #30 + eor r5, r5, r8, ror #24 + and r8, r7, r5, ror #18 + eor r5, r5, r8, ror #2 + and r8, r7, r5, ror #6 + eor r5, r5, r8, ror #4 + orr r8, r4, r5 + eor r3, r3, r8 + mvn r3, r3 + eor r8, r2, r3, lsr #1 + and r8, r8, r6 + eor r2, r2, r8 + eor r3, r3, r8, lsl #1 //SWAPMOVE(r3, r2, 0x55555555, 1); + eor r8, r5, r2, lsr #1 + and r8, r8, r6 + eor r5, r5, r8 + eor r2, r2, r8, lsl #1 //SWAPMOVE(r2, r5, 0x55555555, 1); + orr r8, r2, r3 + eor r5, r5, r8 + mvn r5, r5 + eor r8, r3, r4, lsr #1 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8, lsl #1 //SWAPMOVE(r4, r3, 0x55555555, 1); + eor r8, r4, r5, lsr #1 + and r8, r8, r6 + eor r4, r4, r8 + eor r5, r5, r8, lsl #1 //SWAPMOVE(r5, r4, 0x55555555, 1); + orr r8, r4, r5 + eor r3, r3, r8 + mvn r3, r3 + eor r8, r2, r3, lsr #1 + and r8, r8, r6 + eor r2, r2, r8 + eor r3, r3, r8, lsl #1 //SWAPMOVE(r3, r2, 0x55555555, 1); + eor r8, r5, r2, lsr #1 + and r8, r8, r6 + eor r5, r5, r8 + eor r2, r2, r8, lsl #1 //SWAPMOVE(r2, r5, 0x55555555, 1); + orr r8, r2, r3 + eor r5, r5, r8 + eor r8, r3, r4 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8 //SWAPMOVE(r4, r3, 0x55555555, 0); + ldmia.w r1!, {r8-r11} //load rkeys in r8,...,r11 + eor r2, r2, r8 //add rkey + rconst + eor r3, r3, r9 //add rkey + rconst + eor r4, r4, r10 //add rkey + rconst + eor r5, r5, r11 //add rkey + rconst + and r8, r7, r2, ror #16 // --- mixcolumns 1 --- + eor r2, r2, r8, ror #30 + and r8, r7, r2, ror #28 + eor r2, r2, r8 + and r8, r7, r2, ror #16 + eor r2, r2, r8, ror #2 + and r8, r7, r3, ror #16 + eor r3, r3, r8, ror #30 + and r8, r7, r3, ror #28 + eor r3, r3, r8 + and r8, r7, r3, ror #16 + eor r3, r3, r8, ror #2 + and r8, r7, r4, ror #16 + eor r4, r4, r8, ror #30 + and r8, r7, r4, ror #28 + eor r4, r4, r8 + and r8, r7, r4, ror #16 + eor r4, r4, r8, ror #2 + and r8, r7, r5, ror #16 + eor r5, r5, r8, ror #30 + and r8, r7, r5, ror #28 + eor r5, r5, r8 + and r8, r7, r5, ror #16 + eor r5, r5, r8, ror #2 + orr r8, r2, r3 + eor r5, r5, r8 + mvn r5, r5 + eor r8, r3, r4, lsr #1 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8, lsl #1 //SWAPMOVE(r4, r3, 0x55555555, 1); + eor r8, r4, r5, lsr #1 + and r8, r8, r6 + eor r4, r4, r8 + eor r5, r5, r8, lsl #1 //SWAPMOVE(r5, r4, 0x55555555, 1); + orr r8, r4, r5 + eor r3, r3, r8 + mvn r3, r3 + eor r8, r2, r3, lsr #1 + and r8, r8, r6 + eor r2, r2, r8 + eor r3, r3, r8, lsl #1 //SWAPMOVE(r3, r2, 0x55555555, 1); + eor r8, r5, r2, lsr #1 + and r8, r8, r6 + eor r5, r5, r8 + eor r2, r2, r8, lsl #1 //SWAPMOVE(r2, r5, 0x55555555, 1); + orr r8, r2, r3 + eor r5, r5, r8 + mvn r5, r5 + eor r8, r3, r4, lsr #1 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8, lsl #1 //SWAPMOVE(r4, r3, 0x55555555, 1); + eor r8, r4, r5, lsr #1 + and r8, r8, r6 + eor r4, r4, r8 + eor r5, r5, r8, lsl #1 //SWAPMOVE(r5, r4, 0x55555555, 1); + orr r8, r4, r5 + eor r3, r3, r8 + eor r8, r2, r5 + and r8, r8, r6 + eor r2, r2, r8 + eor r5, r5, r8 //SWAPMOVE(r5, r2, 0x55555555, 0); + ldmia.w r1!, {r8-r11} //load rkeys in r8,...,r11 + eor r2, r2, r8 //add rtk_2_3 + rconst + eor r3, r3, r9 //add rtk_2_3 + rconst + eor r4, r4, r10 //add rtk_2_3 + rconst + eor r5, r5, r11 //add rtk_2_3 + rconst + ldmia.w r0!,{r8-r11} + eor r2, r2, r8 //add rtk_1 + eor r3, r3, r9 //add rtk_1 + eor r4, r4, r10 //add rtk_1 + eor r5, r5, r11 //add rtk_1 + and r8, r7, r2, ror #10 // --- mixcolumns 2 --- + eor r2, r2, r8, ror #4 + and r8, r7, r2, ror #6 + eor r2, r2, r8, ror #6 + and r8, r7, r2, ror #26 + eor r2, r2, r8 + and r8, r7, r3, ror #10 + eor r3, r3, r8, ror #4 + and r8, r7, r3, ror #6 + eor r3, r3, r8, ror #6 + and r8, r7, r3, ror #26 + eor r3, r3, r8 + and r8, r7, r4, ror #10 + eor r4, r4, r8, ror #4 + and r8, r7, r4, ror #6 + eor r4, r4, r8, ror #6 + and r8, r7, r4, ror #26 + eor r4, r4, r8 + and r8, r7, r5, ror #10 + eor r5, r5, r8, ror #4 + and r8, r7, r5, ror #6 + eor r5, r5, r8, ror #6 + and r8, r7, r5, ror #26 + eor r5, r5, r8 + orr r8, r4, r5 + eor r3, r3, r8 + mvn r3, r3 + eor r8, r2, r3, lsr #1 + and r8, r8, r6 + eor r2, r2, r8 + eor r3, r3, r8, lsl #1 //SWAPMOVE(r3, r2, 0x55555555, 1); + eor r8, r5, r2, lsr #1 + and r8, r8, r6 + eor r5, r5, r8 + eor r2, r2, r8, lsl #1 //SWAPMOVE(r2, r5, 0x55555555, 1); + orr r8, r2, r3 + eor r5, r5, r8 + mvn r5, r5 + eor r8, r3, r4, lsr #1 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8, lsl #1 //SWAPMOVE(r4, r3, 0x55555555, 1); + eor r8, r4, r5, lsr #1 + and r8, r8, r6 + eor r4, r4, r8 + eor r5, r5, r8, lsl #1 //SWAPMOVE(r5, r4, 0x55555555, 1); + orr r8, r4, r5 + eor r3, r3, r8 + mvn r3, r3 + eor r8, r2, r3, lsr #1 + and r8, r8, r6 + eor r2, r2, r8 + eor r3, r3, r8, lsl #1 //SWAPMOVE(r3, r2, 0x55555555, 1); + eor r8, r5, r2, lsr #1 + and r8, r8, r6 + eor r5, r5, r8 + eor r2, r2, r8, lsl #1 //SWAPMOVE(r2, r5, 0x55555555, 1); + orr r8, r2, r3 + eor r5, r5, r8 + eor r8, r3, r4 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8 //SWAPMOVE(r4, r3, 0x55555555, 0); + ldmia r1!, {r8-r11} //load rkeys in r8,...,r11 + eor r2, r2, r8 //add rkey + rconst + eor r3, r3, r9 //add rkey + rconst + eor r4, r4, r10 //add rkey + rconst + eor r5, r5, r11 //add rkey + rconst + and r8, r7, r2, ror #4 // --- mixcolumns 3 --- + eor r2, r2, r8, ror #26 + and r8, r7, r2 + eor r2, r2, r8, ror #4 + and r8, r7, r2, ror #4 + eor r2, r2, r8, ror #22 + and r8, r7, r3, ror #4 + eor r3, r3, r8, ror #26 + and r8, r7, r3 + eor r3, r3, r8, ror #4 + and r8, r7, r3, ror #4 + eor r3, r3, r8, ror #22 + and r8, r7, r4, ror #4 + eor r4, r4, r8, ror #26 + and r8, r7, r4 + eor r4, r4, r8, ror #4 + and r8, r7, r4, ror #4 + eor r4, r4, r8, ror #22 + and r8, r7, r5, ror #4 + eor r5, r5, r8, ror #26 + and r8, r7, r5 + eor r5, r5, r8, ror #4 + and r8, r7, r5, ror #4 + eor r5, r5, r8, ror #22 + bx lr + +/****************************************************************************** +* Encrypt a single block using fixsliced SKINNY-128-128. +******************************************************************************/ +@ void skinny128_384(u8* ctext, const u32* tk, const u8* ptext) +.global skinny128_384 +.type skinny128_384,%function +.align 2 +skinny128_384: + push {r0-r12, r14} + mov.w r0, r3 + ldr.w r3, [r2, #8] + ldr.w r4, [r2, #4] + ldr.w r5, [r2, #12] + ldr.w r2, [r2] + movw r6, #0x0a0a + movt r6, #0x0a0a //r6 <- 0x0a0a0a0a + movw r7, #0x3030 + movt r7, #0x3030 //r7 <- 0x30303030 + eor r12, r2, r2, lsr #3 + and r12, r12, r6 + eor r2, r2, r12 + eor r2, r2, r12, lsl #3 //SWAPMOVE(r2, r2, 0x0a0a0a0a, 3) + eor r12, r3, r3, lsr #3 + and r12, r12, r6 + eor r3, r3, r12 + eor r3, r3, r12, lsl #3 //SWAPMOVE(r3, r3, 0x0a0a0a0a, 3) + eor r12, r4, r4, lsr #3 + and r12, r12, r6 + eor r4, r4, r12 + eor r4, r4, r12, lsl #3 //SWAPMOVE(r4, r4, 0x0a0a0a0a, 3) + eor r12, r5, r5, lsr #3 + and r12, r12, r6 + eor r5, r5, r12 + eor r5, r5, r12, lsl #3 //SWAPMOVE(r5, r5, 0x0a0a0a0a, 3) + eor r12, r2, r4, lsr #2 + and r12, r12, r7 + eor r2, r2, r12 + eor r4, r4, r12, lsl #2 //SWAPMOVE(r4, r2, 0x30303030, 2) + eor r12, r2, r3, lsr #4 + and r12, r12, r7, lsr #2 + eor r2, r2, r12 + eor r3, r3, r12, lsl #4 //SWAPMOVE(r3, r2, 0x0c0c0c0c, 4) + eor r12, r2, r5, lsr #6 + and r12, r12, r7, lsr #4 + eor r2, r2, r12 + eor r5, r5, r12, lsl #6 //SWAPMOVE(r5, r2, 0x03030303, 6) + eor r12, r4, r3, lsr #2 + and r12, r12, r7, lsr #2 + eor r4, r4, r12 + eor r3, r3, r12, lsl #2 //SWAPMOVE(r3, r4, 0x0c0c0c0c, 2) + eor r12, r4, r5, lsr #4 + and r12, r12, r7, lsr #4 + eor r4, r4, r12 + eor r5, r5, r12, lsl #4 //SWAPMOVE(r5, r4, 0x03030303, 4) + eor r12, r3, r5, lsr #2 + and r12, r12, r7, lsr #4 + eor r3, r3, r12 + eor r5, r5, r12, lsl #2 //SWAPMOVE(r5, r3, 0x03030303, 2) + movw r6, #0x5555 + movt r6, #0x5555 //r6 <- 0x55555555 + bl quadruple_round + bl quadruple_round + bl quadruple_round + bl quadruple_round + sub.w r0, #128 // rtk1 repeats every 16 rounds + bl quadruple_round + bl quadruple_round + bl quadruple_round + bl quadruple_round + sub.w r0, #128 // rtk1 repeats every 16 rounds + bl quadruple_round + bl quadruple_round + movw r6, #0x0a0a + movt r6, #0x0a0a //r6 <- 0x0a0a0a0a + eor r10, r3, r5, lsr #2 + and r10, r10, r7, lsr #4 + eor r3, r3, r10 + eor r5, r5, r10, lsl #2 //SWAPMOVE(r5, r3, 0x03030303, 2) + eor r10, r4, r5, lsr #4 + and r10, r10, r7, lsr #4 + eor r4, r4, r10 + eor r5, r5, r10, lsl #4 //SWAPMOVE(r5, r4, 0x03030303, 4) + eor r10, r4, r3, lsr #2 + and r10, r10, r7, lsr #2 + eor r4, r4, r10 + eor r3, r3, r10, lsl #2 //SWAPMOVE(r3, r4, 0x0c0c0c0c, 2) + eor r10, r2, r5, lsr #6 + and r10, r10, r7, lsr #4 + eor r2, r2, r10 + eor r5, r5, r10, lsl #6 //SWAPMOVE(r5, r2, 0x03030303, 6) + eor r10, r2, r3, lsr #4 + and r10, r10, r7, lsr #2 + eor r2, r2, r10 + eor r3, r3, r10, lsl #4 //SWAPMOVE(r3, r2, 0x0c0c0c0c, 4) + eor r10, r2, r4, lsr #2 + and r10, r10, r7 + eor r2, r2, r10 + eor r4, r4, r10, lsl #2 //SWAPMOVE(r4, r2, 0x30303030, 2) + eor r10, r5, r5, lsr #3 + and r10, r10, r6 + eor r5, r5, r10 + eor r5, r5, r10, lsl #3 //SWAPMOVE(r5, r5, 0x0a0a0a0a, 3) + eor r10, r4, r4, lsr #3 + and r10, r10, r6 + eor r4, r4, r10 + eor r4, r4, r10, lsl #3 //SWAPMOVE(r4, r4, 0x0a0a0a0a, 3) + eor r10, r3, r3, lsr #3 + and r10, r10, r6 + eor r3, r3, r10 + eor r3, r3, r10, lsl #3 //SWAPMOVE(r3, r3, 0x0a0a0a0a, 3) + eor r10, r2, r2, lsr #3 + and r10, r10, r6 + eor r2, r2, r10 + eor r2, r2, r10, lsl #3 //SWAPMOVE(r2, r2, 0x0a0a0a0a, 3) + ldr.w r0, [sp], #4 + strd r2, r4, [r0] + strd r3, r5, [r0, #8] + pop {r1-r12,r14} + bx lr + \ No newline at end of file diff --git a/romulus/Implementations/crypto_aead/romulusm1+v12/opt32/api.h b/romulus/Implementations/crypto_aead/romulusm1+v12/opt32/api.h new file mode 100644 index 0000000..a4aa567 --- /dev/null +++ b/romulus/Implementations/crypto_aead/romulusm1+v12/opt32/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/romulus/Implementations/crypto_aead/romulusm1+v12/opt32/crypto_aead.h b/romulus/Implementations/crypto_aead/romulusm1+v12/opt32/crypto_aead.h new file mode 100644 index 0000000..e2ca9b0 --- /dev/null +++ b/romulus/Implementations/crypto_aead/romulusm1+v12/opt32/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 +); \ No newline at end of file diff --git a/romulus/Implementations/crypto_aead/romulusm1+v12/opt32/encrypt.c b/romulus/Implementations/crypto_aead/romulusm1+v12/opt32/encrypt.c new file mode 100644 index 0000000..945277c --- /dev/null +++ b/romulus/Implementations/crypto_aead/romulusm1+v12/opt32/encrypt.c @@ -0,0 +1,369 @@ +#include "skinny128.h" +#include "tk_schedule.h" +#include "romulus.h" +#include +#include + +static u8 final_ad_domain (unsigned long long adlen, unsigned long long mlen) { + u8 domain = 0; + u32 leftover; + //Determine which domain bits we need based on the length of the ad + if (adlen == 0) { + domain ^= 0x02; // No message, so only 1 block with padding + } else { + leftover = (u32)(adlen % (2 * BLOCKBYTES)); + if (leftover == 0) { // Even or odd ad length? + domain ^= 0x08; // Even with a full double block at the end + } else if (leftover < BLOCKBYTES) { + domain ^= 0x02; // Odd with a partial single block at the end + } else if (leftover > BLOCKBYTES) { + domain ^= 0x0A; // Even with a partial double block at the end + } + } + //Determine which domain bits we need based on the length of the message + if (mlen == 0) { + domain ^= 0x01; // No message, so only 1 block with padding + } else { + leftover = (unsigned)(mlen % (2 * BLOCKBYTES)); + if (leftover == 0) { // Even or odd message length? + domain ^= 0x04; // Even with a full double block at the end + } else if (leftover < BLOCKBYTES) { + domain ^= 0x01; // Odd with a partial single block at the end + } else if (leftover > BLOCKBYTES) { + domain ^= 0x05; // Even with a partial double block at the end + } + } + return domain; +} + +//Encryption and authentication using Romulus-N1 +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 tmp; + u64 tmp_mlen = mlen; + const u8* m_auth = m; + u8 final_domain = 0x30; + skinny_128_384_tks tks; + u8 state[BLOCKBYTES], pad[BLOCKBYTES]; + (void)nsec; + + // ----------------- Initialization ----------------- + *clen = mlen + TAGBYTES; + memset(tks.tk1, 0x00, KEYBYTES); + memset(state, 0x00, BLOCKBYTES); + tks.tk1[0] = 0x01; // Init the 56-bit LFSR counter + // ----------------- Initialization ----------------- + + // ----------------- Process the associated data ----------------- + final_domain ^= final_ad_domain(adlen, mlen); + SET_DOMAIN(tks, 0x28); + while (adlen > 2*BLOCKBYTES) { // Process double blocks but the last + UPDATE_CTR(tks.tk1); + XOR_BLOCK(state, state, ad); + precompute_rtk2_3(tks.rtk2_3, npub, k); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384_plus(state, state, tks.rtk1, tks.rtk2_3); + UPDATE_CTR(tks.tk1); + ad += 2*BLOCKBYTES; + adlen -= 2*BLOCKBYTES; + } + // Pad and process the left-over blocks + if (adlen == 2*BLOCKBYTES) { // Left-over complete double block + UPDATE_CTR(tks.tk1); + XOR_BLOCK(state, state, ad); + precompute_rtk2_3(tks.rtk2_3, ad + BLOCKBYTES, k); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384_plus(state, state, tks.rtk1, tks.rtk2_3); + UPDATE_CTR(tks.tk1); + } else if (adlen > BLOCKBYTES) { // Left-over partial double block + adlen -= BLOCKBYTES; + UPDATE_CTR(tks.tk1); + XOR_BLOCK(state, state, ad); + memcpy(pad, ad + BLOCKBYTES, adlen); + memset(pad + adlen, 0x00, 15 - adlen); + pad[15] = adlen; // Padding + precompute_rtk2_3(tks.rtk2_3, pad, k); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384_plus(state, state, tks.rtk1, tks.rtk2_3); + UPDATE_CTR(tks.tk1); + } else { + SET_DOMAIN(tks, 0x2C); + UPDATE_CTR(tks.tk1); + if (adlen == BLOCKBYTES) { // Left-over complete single block + XOR_BLOCK(state, state, ad); + } else { // Left-over partial single block + for(int i =0; i < (int)adlen; i++) + state[i] ^= ad[i]; + state[15] ^= adlen; // Padding + } + if (tmp_mlen >= BLOCKBYTES) { + precompute_rtk2_3(tks.rtk2_3, m_auth, k); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384_plus(state, state, tks.rtk1, tks.rtk2_3); + m_auth += BLOCKBYTES; + tmp_mlen -= BLOCKBYTES; + if (tmp_mlen > BLOCKBYTES) { + UPDATE_CTR(tks.tk1); + } + } else { + memcpy(pad, m_auth, tmp_mlen); + memset(pad + tmp_mlen, 0x00, BLOCKBYTES - tmp_mlen - 1); + pad[15] = (u8)tmp_mlen; // Padding + precompute_rtk2_3(tks.rtk2_3, pad, k); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384_plus(state, state, tks.rtk1, tks.rtk2_3); + tmp_mlen = 0; + } + } + // Process all message double blocks except the last + SET_DOMAIN(tks, 0x2C); + while (tmp_mlen > 32) { + UPDATE_CTR(tks.tk1); + XOR_BLOCK(state, state, m_auth); + precompute_rtk2_3(tks.rtk2_3, m_auth + BLOCKBYTES, k); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384_plus(state, state, tks.rtk1, tks.rtk2_3); + UPDATE_CTR(tks.tk1); + m_auth += 2 * BLOCKBYTES; + tmp_mlen -= 2 * BLOCKBYTES; + } + // Process the last message double block + if (tmp_mlen == 2 * BLOCKBYTES) { // Last message double block is full + UPDATE_CTR(tks.tk1); + XOR_BLOCK(state, state, m_auth); + precompute_rtk2_3(tks.rtk2_3, m_auth + BLOCKBYTES, k); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384_plus(state, state, tks.rtk1, tks.rtk2_3); + } else if (tmp_mlen > BLOCKBYTES) { // Last message double block is partial + tmp_mlen -= BLOCKBYTES; + UPDATE_CTR(tks.tk1); + XOR_BLOCK(state, state, m_auth); + memcpy(pad, m_auth + BLOCKBYTES, tmp_mlen); + memset(pad + tmp_mlen, 0x00, BLOCKBYTES - tmp_mlen - 1); + pad[15] = (u8)tmp_mlen; // Padding + precompute_rtk2_3(tks.rtk2_3, pad, k); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384_plus(state, state, tks.rtk1, tks.rtk2_3); + } else if (tmp_mlen == BLOCKBYTES) { // Last message single block is full + XOR_BLOCK(state, state, m_auth); + } else if (tmp_mlen > 0) { // Last message single block is partial + for(int i =0; i < (int)tmp_mlen; i++) + state[i] ^= m_auth[i]; + state[15] ^= (u8)tmp_mlen; // Padding + } + // Process the last partial block + SET_DOMAIN(tks, final_domain); + UPDATE_CTR(tks.tk1); + precompute_rtk2_3(tks.rtk2_3, npub, k); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384_plus(state, state, tks.rtk1, tks.rtk2_3); + // ----------------- Process the associated data ----------------- + + + // ----------------- Generate the tag ----------------- + G(state,state); + memcpy(c + mlen, state, TAGBYTES); + // ----------------- Generate the tag ----------------- + + memset(tks.tk1, 0x00, KEYBYTES); + tks.tk1[0] = 0x01; // Init the 56-bit LFSR counter + if (mlen > 0) { + SET_DOMAIN(tks, 0x24); + while (mlen > BLOCKBYTES) { + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384_plus(state, state, tks.rtk1, tks.rtk2_3); + RHO(state,c,m); + UPDATE_CTR(tks.tk1); + c += BLOCKBYTES; + m += BLOCKBYTES; + mlen -= BLOCKBYTES; + } + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384_plus(state, state, tks.rtk1, tks.rtk2_3); + for(int i = 0; i < (int)mlen; i++) { + tmp = m[i]; // Use of tmp variable in case c = m + c[i] = m[i] ^ (state[i] >> 1) ^ (state[i] & 0x80) ^ (state[i] << 7); + state[i] ^= (u8)tmp; + } + state[15] ^= (u8)mlen; // Padding + } + + return 0; +} + +//Decryption and tag verification using Romulus-N1 +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 tmp; + u64 tmp_mlen; + u8 final_domain = 0x30; + u8* m_auth = m; + const u8* c_tmp = c; + skinny_128_384_tks tks; + u8 state[BLOCKBYTES], pad[BLOCKBYTES]; + (void)nsec; + + if (clen < TAGBYTES) + return -1; + + // ----------------- Initialization ----------------- + *mlen = clen - TAGBYTES; + memset(tks.tk1, 0x00, KEYBYTES); + tks.tk1[0] = 0x01; // Init the 56-bit LFSR counter + // ----------------- Initialization ----------------- + + // ----------------- Process the ciphertext ----------------- + clen -= TAGBYTES; + memcpy(state, c + clen, TAGBYTES); + tmp_mlen = clen; + if (tmp_mlen > 0) { + SET_DOMAIN(tks, 0x24); + precompute_rtk2_3(tks.rtk2_3, npub, k); + while (tmp_mlen > BLOCKBYTES) { + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384_plus(state, state, tks.rtk1, tks.rtk2_3); + RHO_INV(state, c, m); + UPDATE_CTR(tks.tk1); + c += BLOCKBYTES; + m += BLOCKBYTES; + tmp_mlen -= BLOCKBYTES; + } + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384_plus(state, state, tks.rtk1, tks.rtk2_3); + for(int i = 0; i < (int)tmp_mlen; i++) { + m[i] = c[i] ^ (state[i] >> 1) ^ (state[i] & 0x80) ^ (state[i] << 7); + state[i] ^= m[i]; + } + state[15] ^= (u8)tmp_mlen; // Padding + } + // ----------------- Process the ciphertext ----------------- + + // ----------------- Process the associated data ----------------- + memset(tks.tk1, 0x00, KEYBYTES); + tks.tk1[0] = 0x01; // Init the 56-bit LFSR counter + memset(state, 0x00, BLOCKBYTES); + final_domain ^= final_ad_domain(adlen, clen); + SET_DOMAIN(tks, 0x28); + while (adlen > 2*BLOCKBYTES) { // Process double blocks but the last + UPDATE_CTR(tks.tk1); + XOR_BLOCK(state, state, ad); + precompute_rtk2_3(tks.rtk2_3, ad + BLOCKBYTES, k); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384_plus(state, state, tks.rtk1, tks.rtk2_3); + UPDATE_CTR(tks.tk1); + ad += 2*BLOCKBYTES; + adlen -= 2*BLOCKBYTES; + } + // Pad and process the left-over blocks + if (adlen == 2*BLOCKBYTES) { // Left-over complete double block + UPDATE_CTR(tks.tk1); + XOR_BLOCK(state, state, ad); + precompute_rtk2_3(tks.rtk2_3, ad + BLOCKBYTES, k); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384_plus(state, state, tks.rtk1, tks.rtk2_3); + UPDATE_CTR(tks.tk1); + } else if (adlen > BLOCKBYTES) { // Left-over partial double block + adlen -= BLOCKBYTES; + UPDATE_CTR(tks.tk1); + XOR_BLOCK(state, state, ad); + memcpy(pad, ad + BLOCKBYTES, adlen); + memset(pad + adlen, 0x00, 15 - adlen); + pad[15] = adlen; // Padding + precompute_rtk2_3(tks.rtk2_3, pad, k); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384_plus(state, state, tks.rtk1, tks.rtk2_3); + UPDATE_CTR(tks.tk1); + } else { + SET_DOMAIN(tks, 0x2C); + UPDATE_CTR(tks.tk1); + if (adlen == BLOCKBYTES) { // Left-over complete single block + XOR_BLOCK(state, state, ad); + } else { // Left-over partial single block + for(int i =0; i < (int)adlen; i++) + state[i] ^= ad[i]; + state[15] ^= adlen; // Padding + } + if (clen >= BLOCKBYTES) { + precompute_rtk2_3(tks.rtk2_3, m_auth, k); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384_plus(state, state, tks.rtk1, tks.rtk2_3); + m_auth += BLOCKBYTES; + clen -= BLOCKBYTES; + if (clen > BLOCKBYTES) { + UPDATE_CTR(tks.tk1); + } + } else { + memcpy(pad, m_auth, clen); + memset(pad + clen, 0x00, BLOCKBYTES - clen - 1); + pad[15] = (u8)clen; // Padding + precompute_rtk2_3(tks.rtk2_3, pad, k); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384_plus(state, state, tks.rtk1, tks.rtk2_3); + clen = 0; + } + } + // Process all message double blocks except the last + SET_DOMAIN(tks, 0x2C); + while (clen > 32) { + UPDATE_CTR(tks.tk1); + XOR_BLOCK(state, state, m_auth); + precompute_rtk2_3(tks.rtk2_3, m_auth + BLOCKBYTES, k); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384_plus(state, state, tks.rtk1, tks.rtk2_3); + UPDATE_CTR(tks.tk1); + m_auth += 2 * BLOCKBYTES; + clen -= 2 * BLOCKBYTES; + } + // Process the last message double block + if (clen == 2 * BLOCKBYTES) { // Last message double block is full + UPDATE_CTR(tks.tk1); + XOR_BLOCK(state, state, m_auth); + precompute_rtk2_3(tks.rtk2_3, m_auth + BLOCKBYTES, k); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384_plus(state, state, tks.rtk1, tks.rtk2_3); + } else if (clen > BLOCKBYTES) { // Last message double block is partial + clen -= BLOCKBYTES; + UPDATE_CTR(tks.tk1); + XOR_BLOCK(state, state, m_auth); + memcpy(pad, m_auth + BLOCKBYTES, clen); + memset(pad + clen, 0x00, BLOCKBYTES - clen - 1); + pad[15] = (u8)clen; // Padding + precompute_rtk2_3(tks.rtk2_3, pad, k); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384_plus(state, state, tks.rtk1, tks.rtk2_3); + } else if (clen == BLOCKBYTES) { // Last message single block is full + XOR_BLOCK(state, state, m_auth); + } else if (clen > 0) { // Last message single block is partial + for(int i =0; i < (int)clen; i++) + state[i] ^= m[i]; + state[15] ^= (u8)clen; // Padding + } + // Process the last partial block + SET_DOMAIN(tks, final_domain); + UPDATE_CTR(tks.tk1); + precompute_rtk2_3(tks.rtk2_3, npub, k); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384_plus(state, state, tks.rtk1, tks.rtk2_3); + // ----------------- Process the associated data ----------------- + + // ----------------- Generate and check the tag ----------------- + G(state,state); + tmp = 0; + for(int i = 0; i < TAGBYTES; i++) + tmp |= state[i] ^ c_tmp[*mlen+i]; //constant-time tag comparison + // ----------------- Generate and check the tag ----------------- + + return tmp; +} \ No newline at end of file diff --git a/romulus/Implementations/crypto_aead/romulusm1+v12/opt32/romulus.h b/romulus/Implementations/crypto_aead/romulusm1+v12/opt32/romulus.h new file mode 100644 index 0000000..b254e2a --- /dev/null +++ b/romulus/Implementations/crypto_aead/romulusm1+v12/opt32/romulus.h @@ -0,0 +1,69 @@ +#ifndef ROMULUSN1_H_ +#define ROMULUSN1_H_ + +#include "skinny128.h" + +typedef unsigned char u8; +typedef unsigned int u32; +typedef unsigned int u64; +typedef struct { + u8 tk1[16]; //to manipulate tk1 byte-wise + u32 rtk1[4*16]; //to avoid tk schedule recomputations + u32 rtk2_3[4*SKINNY128_384_ROUNDS]; //all round tweakeys +} skinny_128_384_tks; + +#define TAGBYTES 16 +#define KEYBYTES 16 +#define BLOCKBYTES 16 + +#define SET_DOMAIN(tks, domain) ((tks).tk1[7] = (domain)) + +//G as defined in the Romulus specification in a 32-bit word-wise manner +#define G(x,y) ({ \ + tmp = ((u32*)(y))[0]; \ + ((u32*)(x))[0] = (tmp >> 1 & 0x7f7f7f7f) ^ ((tmp ^ (tmp << 7)) & 0x80808080); \ + tmp = ((u32*)(y))[1]; \ + ((u32*)(x))[1] = (tmp >> 1 & 0x7f7f7f7f) ^ ((tmp ^ (tmp << 7)) & 0x80808080); \ + tmp = ((u32*)(y))[2]; \ + ((u32*)(x))[2] = (tmp >> 1 & 0x7f7f7f7f) ^ ((tmp ^ (tmp << 7)) & 0x80808080); \ + tmp = ((u32*)(y))[3]; \ + ((u32*)(x))[3] = (tmp >> 1 & 0x7f7f7f7f) ^ ((tmp ^ (tmp << 7)) & 0x80808080); \ +}) + +//update the counter in tk1 in a 32-bit word-wise manner +#define UPDATE_CTR(tk1) ({ \ + tmp = ((u32*)(tk1))[1]; \ + ((u32*)(tk1))[1] = (tmp << 1) & 0x00ffffff; \ + ((u32*)(tk1))[1] |= (((u32*)(tk1))[0] >> 31); \ + ((u32*)(tk1))[1] |= tmp & 0xff000000; \ + ((u32*)(tk1))[0] <<= 1; \ + if ((tmp >> 23) & 0x01) \ + ((u32*)(tk1))[0] ^= 0x95; \ +}) + +//x <- y ^ z for 128-bit blocks +#define XOR_BLOCK(x,y,z) ({ \ + ((u32*)(x))[0] = ((u32*)(y))[0] ^ ((u32*)(z))[0]; \ + ((u32*)(x))[1] = ((u32*)(y))[1] ^ ((u32*)(z))[1]; \ + ((u32*)(x))[2] = ((u32*)(y))[2] ^ ((u32*)(z))[2]; \ + ((u32*)(x))[3] = ((u32*)(y))[3] ^ ((u32*)(z))[3]; \ +}) + + +//Rho as defined in the Romulus specification +//use pad as a tmp variable in case y = z +#define RHO(x,y,z) ({ \ + G(pad,x); \ + XOR_BLOCK(y, pad, z); \ + XOR_BLOCK(x, x, z); \ +}) + +//Rho inverse as defined in the Romulus specification +//use pad as a tmp variable in case y = z +#define RHO_INV(x, y, z) ({ \ + G(pad, x); \ + XOR_BLOCK(z, pad, y); \ + XOR_BLOCK(x, x, z); \ +}) + +#endif // ROMULUSN1_H_ \ No newline at end of file diff --git a/romulus/Implementations/crypto_aead/romulusm1+v12/opt32/skinny128.c b/romulus/Implementations/crypto_aead/romulusm1+v12/opt32/skinny128.c new file mode 100644 index 0000000..a1061d5 --- /dev/null +++ b/romulus/Implementations/crypto_aead/romulusm1+v12/opt32/skinny128.c @@ -0,0 +1,107 @@ +/****************************************************************************** +* Constant-time implementation of the SKINNY tweakable block ciphers. +* +* This implementation doesn't compute the ShiftRows operation. Some masks and +* shifts are applied during the MixColumns operation so that the proper bits +* are XORed together. Moreover, the row permutation within the MixColumns +* is omitted, as well as the bit permutation at the end of the Sbox. The rows +* are synchronized with the classical after only 4 rounds. Therefore, this +* implementation relies on a "QUADRUPLE_ROUND" routine. +* +* The Sbox computation takes advantage of some symmetry in the 8-bit Sbox to +* turn it into a 4-bit S-box computation. Although the last bit permutation +* within the Sbox is not computed, the bit ordering is synchronized with the +* classical representation after 2 calls. +* +* @author Alexandre Adomnicai, Nanyang Technological University, +* alexandre.adomnicai@ntu.edu.sg +* +* @date May 2020 +******************************************************************************/ +#include +#include +#include "skinny128.h" +#include "tk_schedule.h" + +/****************************************************************************** +* The MixColumns computation for rounds i such that (i % 4) == 0 +******************************************************************************/ +void mixcolumns_0(u32* state) { + u32 tmp; + for(int i = 0; i < 4; i++) { + tmp = ROR(state[i],24) & 0x0c0c0c0c; + state[i] ^= ROR(tmp,30); + tmp = ROR(state[i],16) & 0xc0c0c0c0; + state[i] ^= ROR(tmp,4); + tmp = ROR(state[i],8) & 0x0c0c0c0c; + state[i] ^= ROR(tmp,2); + } +} + +/****************************************************************************** +* The MixColumns computation for rounds i such that (i % 4) == 1 +******************************************************************************/ +void mixcolumns_1(u32* state) { + u32 tmp; + for(int i = 0; i < 4; i++) { + tmp = ROR(state[i],16) & 0x30303030; + state[i] ^= ROR(tmp,30); + tmp = state[i] & 0x03030303; + state[i] ^= ROR(tmp,28); + tmp = ROR(state[i],16) & 0x30303030; + state[i] ^= ROR(tmp,2); + } +} + +/****************************************************************************** +* The MixColumns computation for rounds i such that (i % 4) == 2 +******************************************************************************/ +void mixcolumns_2(u32* state) { + u32 tmp; + for(int i = 0; i < 4; i++) { + tmp = ROR(state[i],8) & 0xc0c0c0c0; + state[i] ^= ROR(tmp,6); + tmp = ROR(state[i],16) & 0x0c0c0c0c; + state[i] ^= ROR(tmp,28); + tmp = ROR(state[i],24) & 0xc0c0c0c0; + state[i] ^= ROR(tmp,2); + } +} + +/****************************************************************************** +* The MixColumns computation for rounds i such that (i % 4) == 3 +******************************************************************************/ +void mixcolumns_3(u32* state) { + u32 tmp; + for(int i = 0; i < 4; i++) { + tmp = state[i] & 0x03030303; + state[i] ^= ROR(tmp,30); + tmp = state[i] & 0x30303030; + state[i] ^= ROR(tmp,4); + tmp = state[i] & 0x03030303; + state[i] ^= ROR(tmp,26); + } +} + +/****************************************************************************** +* Encryption of a single block without any operation mode using SKINNY-128-384. +* RTK1 and RTK2_3 are given separately to take advantage of the fact that +* TK2 and TK3 remains the same through the entire data encryption/decryption. +******************************************************************************/ +void skinny128_384_plus(u8* ctext, const u8* ptext, const u32* rtk1, + const u32* rtk2_3) { + u32 tmp; // used in SWAPMOVE macro + u32 state[4]; // 128-bit state + packing(state, ptext); // from byte to bitsliced representation + QUADRUPLE_ROUND(state, rtk1, rtk2_3); + QUADRUPLE_ROUND(state, rtk1+16, rtk2_3+16); + QUADRUPLE_ROUND(state, rtk1+32, rtk2_3+32); + QUADRUPLE_ROUND(state, rtk1+48, rtk2_3+48); + QUADRUPLE_ROUND(state, rtk1, rtk2_3+64); + QUADRUPLE_ROUND(state, rtk1+16, rtk2_3+80); + QUADRUPLE_ROUND(state, rtk1+32, rtk2_3+96); + QUADRUPLE_ROUND(state, rtk1+48, rtk2_3+112); + QUADRUPLE_ROUND(state, rtk1, rtk2_3+128); + QUADRUPLE_ROUND(state, rtk1+16, rtk2_3+144); + unpacking(ctext, state); // from bitsliced to byte representation +} \ No newline at end of file diff --git a/romulus/Implementations/crypto_aead/romulusm1+v12/opt32/skinny128.h b/romulus/Implementations/crypto_aead/romulusm1+v12/opt32/skinny128.h new file mode 100644 index 0000000..bda1e9b --- /dev/null +++ b/romulus/Implementations/crypto_aead/romulusm1+v12/opt32/skinny128.h @@ -0,0 +1,95 @@ +#ifndef SKINNY128_H_ +#define SKINNY128_H_ + +typedef unsigned char u8; +typedef unsigned int u32; + +void skinny128_384_plus(u8* ctext, const u8* ptext, const u32* rtk1, const u32* rtk2_3); + +#define SKINNY128_384_ROUNDS 40 + +#define QUADRUPLE_ROUND(state, rtk1, rtk2_3) ({ \ + state[3] ^= ~(state[0] | state[1]); \ + SWAPMOVE(state[2], state[1], 0x55555555, 1); \ + SWAPMOVE(state[3], state[2], 0x55555555, 1); \ + state[1] ^= ~(state[2] | state[3]); \ + SWAPMOVE(state[1], state[0], 0x55555555, 1); \ + SWAPMOVE(state[0], state[3], 0x55555555, 1); \ + state[3] ^= ~(state[0] | state[1]); \ + SWAPMOVE(state[2], state[1], 0x55555555, 1); \ + SWAPMOVE(state[3], state[2], 0x55555555, 1); \ + state[1] ^= (state[2] | state[3]); \ + SWAPMOVE(state[3], state[0], 0x55555555, 0); \ + state[0] ^= (rtk1)[0]; \ + state[1] ^= (rtk1)[1]; \ + state[2] ^= (rtk1)[2]; \ + state[3] ^= (rtk1)[3]; \ + state[0] ^= (rtk2_3)[0]; \ + state[1] ^= (rtk2_3)[1]; \ + state[2] ^= (rtk2_3)[2]; \ + state[3] ^= (rtk2_3)[3]; \ + mixcolumns_0(state); \ + state[1] ^= ~(state[2] | state[3]); \ + SWAPMOVE(state[1], state[0], 0x55555555, 1); \ + SWAPMOVE(state[0], state[3], 0x55555555, 1); \ + state[3] ^= ~(state[0] | state[1]); \ + SWAPMOVE(state[2], state[1], 0x55555555, 1); \ + SWAPMOVE(state[3], state[2], 0x55555555, 1); \ + state[1] ^= ~(state[2] | state[3]); \ + SWAPMOVE(state[1], state[0], 0x55555555, 1); \ + SWAPMOVE(state[0], state[3], 0x55555555, 1); \ + state[3] ^= (state[0] | state[1]); \ + SWAPMOVE(state[1], state[2], 0x55555555, 0); \ + state[0] ^= (rtk1)[4]; \ + state[1] ^= (rtk1)[5]; \ + state[2] ^= (rtk1)[6]; \ + state[3] ^= (rtk1)[7]; \ + state[0] ^= (rtk2_3)[4]; \ + state[1] ^= (rtk2_3)[5]; \ + state[2] ^= (rtk2_3)[6]; \ + state[3] ^= (rtk2_3)[7]; \ + mixcolumns_1(state); \ + state[3] ^= ~(state[0] | state[1]); \ + SWAPMOVE(state[2], state[1], 0x55555555, 1); \ + SWAPMOVE(state[3], state[2], 0x55555555, 1); \ + state[1] ^= ~(state[2] | state[3]); \ + SWAPMOVE(state[1], state[0], 0x55555555, 1); \ + SWAPMOVE(state[0], state[3], 0x55555555, 1); \ + state[3] ^= ~(state[0] | state[1]); \ + SWAPMOVE(state[2], state[1], 0x55555555, 1); \ + SWAPMOVE(state[3], state[2], 0x55555555, 1); \ + state[1] ^= (state[2] | state[3]); \ + SWAPMOVE(state[3], state[0], 0x55555555, 0); \ + state[0] ^= (rtk1)[8]; \ + state[1] ^= (rtk1)[9]; \ + state[2] ^= (rtk1)[10]; \ + state[3] ^= (rtk1)[11]; \ + state[0] ^= (rtk2_3)[8]; \ + state[1] ^= (rtk2_3)[9]; \ + state[2] ^= (rtk2_3)[10]; \ + state[3] ^= (rtk2_3)[11]; \ + mixcolumns_2(state); \ + state[1] ^= ~(state[2] | state[3]); \ + SWAPMOVE(state[1], state[0], 0x55555555, 1); \ + SWAPMOVE(state[0], state[3], 0x55555555, 1); \ + state[3] ^= ~(state[0] | state[1]); \ + SWAPMOVE(state[2], state[1], 0x55555555, 1); \ + SWAPMOVE(state[3], state[2], 0x55555555, 1); \ + state[1] ^= ~(state[2] | state[3]); \ + SWAPMOVE(state[1], state[0], 0x55555555, 1); \ + SWAPMOVE(state[0], state[3], 0x55555555, 1); \ + state[3] ^= (state[0] | state[1]); \ + SWAPMOVE(state[1], state[2], 0x55555555, 0); \ + state[0] ^= (rtk1)[12]; \ + state[1] ^= (rtk1)[13]; \ + state[2] ^= (rtk1)[14]; \ + state[3] ^= (rtk1)[15]; \ + state[0] ^= (rtk2_3)[12]; \ + state[1] ^= (rtk2_3)[13]; \ + state[2] ^= (rtk2_3)[14]; \ + state[3] ^= (rtk2_3)[15]; \ + mixcolumns_3(state); \ +}) + + +#endif // SKINNY128_H_ \ No newline at end of file diff --git a/romulus/Implementations/crypto_aead/romulusm1+v12/opt32/tk_schedule.c b/romulus/Implementations/crypto_aead/romulusm1+v12/opt32/tk_schedule.c new file mode 100644 index 0000000..1da4277 --- /dev/null +++ b/romulus/Implementations/crypto_aead/romulusm1+v12/opt32/tk_schedule.c @@ -0,0 +1,368 @@ +/****************************************************************************** +* Implementation of the SKINNY tweakey schedule to match fixslicing. +* +* @author Alexandre Adomnicai, Nanyang Technological University, +* alexandre.adomnicai@ntu.edu.sg +* +* @date May 2020 +******************************************************************************/ +#include +#include //for memcmp +#include "tk_schedule.h" +#include "skinny128.h" + +typedef unsigned char u8; +typedef unsigned int u32; + +/****************************************************************************** +* The round constants according to the new representation. +******************************************************************************/ +u32 rconst_32_bs[160] = { + 0x00000004, 0xffffffbf, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x10000100, 0xfffffeff, 0x44000000, 0xfbffffff, 0x00000000, 0x04000000, + 0x00100000, 0x00100000, 0x00100001, 0xffefffff, 0x00440000, 0xffafffff, + 0x00400000, 0x00400000, 0x01000000, 0x01000000, 0x01401000, 0xffbfffff, + 0x01004000, 0xfefffbff, 0x00000400, 0x00000400, 0x00000010, 0x00000000, + 0x00010410, 0xfffffbef, 0x00000054, 0xffffffaf, 0x00000000, 0x00000040, + 0x00000100, 0x00000100, 0x10000140, 0xfffffeff, 0x44000000, 0xfffffeff, + 0x04000000, 0x04000000, 0x00100000, 0x00100000, 0x04000001, 0xfbffffff, + 0x00140000, 0xffafffff, 0x00400000, 0x00000000, 0x00000000, 0x00000000, + 0x01401000, 0xfebfffff, 0x01004400, 0xfffffbff, 0x00000000, 0x00000400, + 0x00000010, 0x00000010, 0x00010010, 0xffffffff, 0x00000004, 0xffffffaf, + 0x00000040, 0x00000040, 0x00000100, 0x00000000, 0x10000140, 0xffffffbf, + 0x40000100, 0xfbfffeff, 0x00000000, 0x04000000, 0x00100000, 0x00000000, + 0x04100001, 0xffefffff, 0x00440000, 0xffefffff, 0x00000000, 0x00400000, + 0x01000000, 0x01000000, 0x00401000, 0xffffffff, 0x00004000, 0xfeffffff, + 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00010400, 0xfffffbff, + 0x00000014, 0xffffffbf, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x10000100, 0xffffffff, 0x40000000, 0xfbffffff, 0x00000000, 0x04000000, + 0x00100000, 0x00000000, 0x00100001, 0xffefffff, 0x00440000, 0xffafffff, + 0x00000000, 0x00400000, 0x01000000, 0x01000000, 0x01401000, 0xffffffff, + 0x00004000, 0xfeffffff, 0x00000400, 0x00000400, 0x00000010, 0x00000000, + 0x00010400, 0xfffffbff, 0x00000014, 0xffffffaf, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x10000140, 0xfffffeff, 0x44000000, 0xffffffff, + 0x00000000, 0x04000000, 0x00100000, 0x00100000, 0x00000001, 0xffefffff, + 0x00440000, 0xffafffff, 0x00400000, 0x00000000, 0x00000000, 0x01000000, + 0x01401000, 0xffbfffff, 0x01004000, 0xfffffbff, 0x00000400, 0x00000400, + 0x00000010, 0x00000000, 0x00010010, 0xfffffbff +}; + +/****************************************************************************** +* Pack the input into the bitsliced representation +* 24 28 56 60 88 92 120 124 | ... | 0 4 32 36 64 68 96 100 +* 25 29 57 61 89 93 121 125 | ... | 1 5 33 37 65 69 97 101 +* 26 30 58 62 90 94 122 126 | ... | 2 6 34 38 66 70 98 102 +* 27 31 59 63 91 95 123 127 | ... | 3 7 35 39 67 71 99 103 +******************************************************************************/ +void packing(u32* out, const u8* in) { + u32 tmp; + LE_LOAD(out, in); + LE_LOAD(out + 1, in + 8); + LE_LOAD(out + 2, in + 4); + LE_LOAD(out + 3, in + 12); + SWAPMOVE(out[0], out[0], 0x0a0a0a0a, 3); + SWAPMOVE(out[1], out[1], 0x0a0a0a0a, 3); + SWAPMOVE(out[2], out[2], 0x0a0a0a0a, 3); + SWAPMOVE(out[3], out[3], 0x0a0a0a0a, 3); + SWAPMOVE(out[2], out[0], 0x30303030, 2); + SWAPMOVE(out[1], out[0], 0x0c0c0c0c, 4); + SWAPMOVE(out[3], out[0], 0x03030303, 6); + SWAPMOVE(out[1], out[2], 0x0c0c0c0c, 2); + SWAPMOVE(out[3], out[2], 0x03030303, 4); + SWAPMOVE(out[3], out[1], 0x03030303, 2); +} + +/****************************************************************************** +* Unpack the input to a byte-wise representation +******************************************************************************/ +void unpacking(u8* out, u32 *in) { + u32 tmp; + SWAPMOVE(in[3], in[1], 0x03030303, 2); + SWAPMOVE(in[3], in[2], 0x03030303, 4); + SWAPMOVE(in[1], in[2], 0x0c0c0c0c, 2); + SWAPMOVE(in[3], in[0], 0x03030303, 6); + SWAPMOVE(in[1], in[0], 0x0c0c0c0c, 4); + SWAPMOVE(in[2], in[0], 0x30303030, 2); + SWAPMOVE(in[0], in[0], 0x0a0a0a0a, 3); + SWAPMOVE(in[1], in[1], 0x0a0a0a0a, 3); + SWAPMOVE(in[2], in[2], 0x0a0a0a0a, 3); + SWAPMOVE(in[3], in[3], 0x0a0a0a0a, 3); + LE_STORE(out, in[0]); + LE_STORE(out + 8, in[1]); + LE_STORE(out + 4, in[2]); + LE_STORE(out + 12, in[3]); +} + +/****************************************************************************** +* 0 4 1 5 +* 1 5 ---> 2 6 +* 2 6 3 7 +* 3 7 4 0 +******************************************************************************/ +void lfsr2_bs(u32* tk) { + u32 tmp; + tmp = tk[0] ^ (tk[2] & 0xaaaaaaaa); + tmp = ((tmp & 0xaaaaaaaa) >> 1) | ((tmp << 1) & 0xaaaaaaaa); + tk[0] = tk[1]; + tk[1] = tk[2]; + tk[2] = tk[3]; + tk[3] = tmp; +} + +/****************************************************************************** +* 0 4 7 3 +* 1 5 ---> 0 4 +* 2 6 1 5 +* 3 7 2 6 +******************************************************************************/ +void lfsr3_bs(u32* tk) { + u32 tmp; + tmp = tk[3] ^ ((tk[1] & 0xaaaaaaaa) >> 1); + tmp = ((tmp & 0xaaaaaaaa) >> 1) | ((tmp << 1) & 0xaaaaaaaa); + tk[3] = tk[2]; + tk[2] = tk[1]; + tk[1] = tk[0]; + tk[0] = tmp; +} + +/****************************************************************************** +* Apply the permutation in a bitsliced manner, twice +******************************************************************************/ +void permute_tk_2(u32* tk) { + u32 tmp; + for(int i =0; i < 4; i++) { + tmp = tk[i]; + tk[i] = ROR(tmp,14) & 0xcc00cc00; + tk[i] |= (tmp & 0x000000ff) << 16; + tk[i] |= (tmp & 0xcc000000)>> 2; + tk[i] |= (tmp & 0x0033cc00) >> 8; + tk[i] |= (tmp & 0x00cc0000) >>18; + } +} + +/****************************************************************************** +* Apply the permutation in a bitsliced manner, 4 times +******************************************************************************/ +void permute_tk_4(u32* tk) { + u32 tmp; + for(int i =0; i < 4; i++) { + tmp = tk[i]; + tk[i] = ROR(tmp,22) & 0xcc0000cc; + tk[i] |= ROR(tmp,16) & 0x3300cc00; + tk[i] |= ROR(tmp, 24) & 0x00cc3300; + tk[i] |= (tmp & 0x00cc00cc) >> 2; + } +} + +/****************************************************************************** +* Apply the permutation in a bitsliced manner, 6 times +******************************************************************************/ +void permute_tk_6(u32* tk) { + u32 tmp; + for(int i =0; i < 4; i++) { + tmp = tk[i]; + tk[i] = ROR(tmp,6) & 0xcccc0000; + tk[i] |= ROR(tmp,24) & 0x330000cc; + tk[i] |= ROR(tmp,10) & 0x3333; + tk[i] |= (tmp & 0xcc) << 14; + tk[i] |= (tmp & 0x3300) << 2; + } +} + +/****************************************************************************** +* Apply the permutation in a bitsliced manner, 8 times +******************************************************************************/ +void permute_tk_8(u32* tk) { + u32 tmp; + for(int i =0; i < 4; i++) { + tmp = tk[i]; + tk[i] = ROR(tmp,24) & 0xcc000033; + tk[i] |= ROR(tmp,8) & 0x33cc0000; + tk[i] |= ROR(tmp,26) & 0x00333300; + tk[i] |= (tmp & 0x00333300) >> 6; + } +} + +/****************************************************************************** +* Apply the permutation in a bitsliced manner, 10 times +******************************************************************************/ +void permute_tk_10(u32* tk) { + u32 tmp; + for(int i =0; i < 4; i++) { + tmp = tk[i]; + tk[i] = ROR(tmp,8) & 0xcc330000; + tk[i] |= ROR(tmp,26) & 0x33000033; + tk[i] |= ROR(tmp,22) & 0x00cccc00; + tk[i] |= (tmp & 0x00330000) >> 14; + tk[i] |= (tmp & 0xcc00) >> 2; + } +} + +/****************************************************************************** +* Apply the permutation in a bitsliced manner, 12 times +******************************************************************************/ +void permute_tk_12(u32* tk) { + u32 tmp; + for(int i =0; i < 4; i++) { + tmp = tk[i]; + tk[i] = ROR(tmp,8) & 0xcc33; + tk[i] |= ROR(tmp,30) & 0x00cc00cc; + tk[i] |= ROR(tmp,10) & 0x33330000; + tk[i] |= ROR(tmp,16) & 0xcc003300; + } +} + +/****************************************************************************** +* Apply the permutation in a bitsliced manner, 14 times +******************************************************************************/ +void permute_tk_14(u32* tk) { + u32 tmp; + for(int i =0; i < 4; i++) { + tmp = tk[i]; + tk[i] = ROR(tmp,24) & 0x0033cc00; + tk[i] |= ROR(tmp,14) & 0x00cc0000; + tk[i] |= ROR(tmp,30) & 0xcc000000; + tk[i] |= ROR(tmp,16) & 0x000000ff; + tk[i] |= ROR(tmp,18) & 0x33003300; + } +} + +/****************************************************************************** +* Precompute all LFSRs on TK2 +******************************************************************************/ +void precompute_lfsr_tk2(u32* tk, const u8* key, const int rounds) { + u32 tk2[4]; + packing(tk2, key); + memcpy(tk, tk2, 16); + for(int i = 0 ; i < rounds; i+=2) { + lfsr2_bs(tk2); + memcpy(tk+i*4+4, tk2, 16); + } +} + +/****************************************************************************** +* Precompute all LFSRs on TK3 +******************************************************************************/ +void precompute_lfsr_tk3(u32* tk, const u8* key, const int rounds) { + u32 tk3[4]; + packing(tk3, key); + tk[0] ^= tk3[0]; + tk[1] ^= tk3[1]; + tk[2] ^= tk3[2]; + tk[3] ^= tk3[3]; + for(int i = 0 ; i < rounds; i+=2) { + lfsr3_bs(tk3); + tk[i*4+4] ^= tk3[0]; + tk[i*4+5] ^= tk3[1]; + tk[i*4+6] ^= tk3[2]; + tk[i*4+7] ^= tk3[3]; + } +} + +/****************************************************************************** +* XOR TK with TK1 before applying the permutations. +* The key is then rearranged to match the barrel shiftrows representation. +******************************************************************************/ +void permute_tk(u32* tk, const u8* key, const int rounds) { + u32 test; + u32 tk1[4], tmp[4]; + packing(tk1, key); + memcpy(tmp, tk, 16); + tmp[0] ^= tk1[0]; + tmp[1] ^= tk1[1]; + tmp[2] ^= tk1[2]; + tmp[3] ^= tk1[3]; + for(int i = 0 ; i < rounds; i += 8) { + test = (i % 16 < 8) ? 1 : 0; //to apply the right power of P + tk[i*4] = tmp[2] & 0xf0f0f0f0; + tk[i*4+1] = tmp[3] & 0xf0f0f0f0; + tk[i*4+2] = tmp[0] & 0xf0f0f0f0; + tk[i*4+3] = tmp[1] & 0xf0f0f0f0; + memcpy(tmp, tk+i*4+4, 16); + XOR_BLOCKS(tmp, tk1); + if (test) + permute_tk_2(tmp); // applies P^2 + else + permute_tk_10(tmp); // applies P^10 + tk[i*4+4] = ROR(tmp[0],26) & 0xc3c3c3c3; + tk[i*4+5] = ROR(tmp[1],26) & 0xc3c3c3c3; + tk[i*4+6] = ROR(tmp[2],26) & 0xc3c3c3c3; + tk[i*4+7] = ROR(tmp[3],26) & 0xc3c3c3c3; + tk[i*4+8] = ROR(tmp[2],28) & 0x03030303; + tk[i*4+8] |= ROR(tmp[2],12) & 0x0c0c0c0c; + tk[i*4+9] = ROR(tmp[3],28) & 0x03030303; + tk[i*4+9] |= ROR(tmp[3],12) & 0x0c0c0c0c; + tk[i*4+10] = ROR(tmp[0],28) & 0x03030303; + tk[i*4+10] |= ROR(tmp[0],12) & 0x0c0c0c0c; + tk[i*4+11] = ROR(tmp[1],28) & 0x03030303; + tk[i*4+11] |= ROR(tmp[1],12) & 0x0c0c0c0c; + memcpy(tmp, tk+i*4+12, 16); + XOR_BLOCKS(tmp, tk1); + if (test) + permute_tk_4(tmp); // applies P^4 + else + permute_tk_12(tmp); // applies P^12 + for(int j = 0; j < 4; j++) { + tk[i*4+12+j] = ROR(tmp[j],14) & 0x30303030; + tk[i*4+12+j] |= ROR(tmp[j],6) & 0x0c0c0c0c; + } + tk[i*4+16] = ROR(tmp[2], 16) & 0xf0f0f0f0; + tk[i*4+17] = ROR(tmp[3], 16) & 0xf0f0f0f0; + tk[i*4+18] = ROR(tmp[0], 16) & 0xf0f0f0f0; + tk[i*4+19] = ROR(tmp[1], 16) & 0xf0f0f0f0; + memcpy(tmp, tk+i*4+20, 16); + XOR_BLOCKS(tmp, tk1); + if (test) + permute_tk_6(tmp); // applies P^6 + else + permute_tk_14(tmp); // applies P^14 + tk[i*4+20] = ROR(tmp[0], 10) & 0xc3c3c3c3; + tk[i*4+21] = ROR(tmp[1], 10) & 0xc3c3c3c3; + tk[i*4+22] = ROR(tmp[2], 10) & 0xc3c3c3c3; + tk[i*4+23] = ROR(tmp[3], 10) & 0xc3c3c3c3; + tk[i*4+24] = ROR(tmp[2],12) & 0x03030303; + tk[i*4+24] |= ROR(tmp[2],28) & 0x0c0c0c0c; + tk[i*4+25] = ROR(tmp[3],12) & 0x03030303; + tk[i*4+25] |= ROR(tmp[3],28) & 0x0c0c0c0c; + tk[i*4+26] = ROR(tmp[0],12) & 0x03030303; + tk[i*4+26] |= ROR(tmp[0],28) & 0x0c0c0c0c; + tk[i*4+27] = ROR(tmp[1],12) & 0x03030303; + tk[i*4+27] |= ROR(tmp[1],28) & 0x0c0c0c0c; + memcpy(tmp, tk+i*4+28, 16); + XOR_BLOCKS(tmp, tk1); + if (test) + permute_tk_8(tmp); // applies P^8 + for(int j = 0; j < 4; j++) { + tk[i*4+28+j] = ROR(tmp[j],30) & 0x30303030; + tk[i*4+28+j] |= ROR(tmp[j],22) & 0x0c0c0c0c; + } + if (test && (i+8 < rounds)) { //only if next loop iteration + tk[i*4+32] = tmp[2] & 0xf0f0f0f0; + tk[i*4+33] = tmp[3] & 0xf0f0f0f0; + tk[i*4+34] = tmp[0] & 0xf0f0f0f0; + tk[i*4+35] = tmp[1] & 0xf0f0f0f0; + } + } +} + +/****************************************************************************** +* Precompute LFSR2(TK2) ^ LFSR3(TK3) ^ rconst. +******************************************************************************/ +void precompute_rtk2_3(u32* rtk, const u8* tk2, const u8 * tk3) { + memset(rtk, 0x00, 16*SKINNY128_384_ROUNDS); + precompute_lfsr_tk2(rtk, tk2, SKINNY128_384_ROUNDS); + precompute_lfsr_tk3(rtk, tk3, SKINNY128_384_ROUNDS); + permute_tk(rtk, (u8*)(rtk+8), SKINNY128_384_ROUNDS); // rtk+8 is NULL + for(int i = 0; i < SKINNY128_384_ROUNDS; i++) { // add rconsts + for(int j = 0; j < 4; j++) + rtk[i*4+j] ^= rconst_32_bs[i*4+j]; + } +} + +/****************************************************************************** +* Precompute RTK1. +******************************************************************************/ +void precompute_rtk1(u32* rtk1, const u8* tk1) { + memset(rtk1, 0x00, 16*16); + permute_tk(rtk1, tk1, 16); +} \ No newline at end of file diff --git a/romulus/Implementations/crypto_aead/romulusm1+v12/opt32/tk_schedule.h b/romulus/Implementations/crypto_aead/romulusm1+v12/opt32/tk_schedule.h new file mode 100644 index 0000000..5615cbd --- /dev/null +++ b/romulus/Implementations/crypto_aead/romulusm1+v12/opt32/tk_schedule.h @@ -0,0 +1,39 @@ +#ifndef TK_SCHEDULE_H_ +#define TK_SCHEDULE_H_ + +typedef unsigned char u8; +typedef unsigned int u32; + +void packing(u32* out, const u8* in); +void unpacking(u8* out, u32 *in); +void precompute_rtk2_3(u32* rtk, const u8* tk2, const u8* tk3); +void precompute_rtk1(u32* rtk1, const u8* tk1); + +#define ROR(x,y) (((x) >> (y)) | ((x) << (32 - (y)))) + +#define XOR_BLOCKS(x,y) ({ \ + (x)[0] ^= (y)[0]; \ + (x)[1] ^= (y)[1]; \ + (x)[2] ^= (y)[2]; \ + (x)[3] ^= (y)[3]; \ +}) + +#define SWAPMOVE(a, b, mask, n) ({ \ + tmp = (b ^ (a >> n)) & mask; \ + b ^= tmp; \ + a ^= (tmp << n); \ +}) + +#define LE_LOAD(x, y) \ + *(x) = (((u32)(y)[3] << 24) | \ + ((u32)(y)[2] << 16) | \ + ((u32)(y)[1] << 8) | \ + (y)[0]); + +#define LE_STORE(x, y) \ + (x)[0] = (y) & 0xff; \ + (x)[1] = ((y) >> 8) & 0xff; \ + (x)[2] = ((y) >> 16) & 0xff; \ + (x)[3] = (y) >> 24; + +#endif // TK_SCHEDULE_H_ \ No newline at end of file diff --git a/romulus/Implementations/crypto_aead/romulusm1v12/armcortexm/api.h b/romulus/Implementations/crypto_aead/romulusm1v12/armcortexm/api.h new file mode 100644 index 0000000..a4aa567 --- /dev/null +++ b/romulus/Implementations/crypto_aead/romulusm1v12/armcortexm/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/romulus/Implementations/crypto_aead/romulusm1v12/armcortexm/crypto_aead.h b/romulus/Implementations/crypto_aead/romulusm1v12/armcortexm/crypto_aead.h new file mode 100644 index 0000000..6f4ee42 --- /dev/null +++ b/romulus/Implementations/crypto_aead/romulusm1v12/armcortexm/crypto_aead.h @@ -0,0 +1,13 @@ +//API required by the NIST for the LWC competition +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); + +//API required by the NIST for the LWC competition +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); diff --git a/romulus/Implementations/crypto_aead/romulusm1v12/armcortexm/encrypt.c b/romulus/Implementations/crypto_aead/romulusm1v12/armcortexm/encrypt.c new file mode 100644 index 0000000..6487c86 --- /dev/null +++ b/romulus/Implementations/crypto_aead/romulusm1v12/armcortexm/encrypt.c @@ -0,0 +1,385 @@ +#include "skinny128.h" +#include "romulus.h" +#include + +u8 final_ad_domain (unsigned long long adlen, unsigned long long mlen) { + u8 domain = 0; + u32 leftover; + //Determine which domain bits we need based on the length of the ad + if (adlen == 0) { + domain ^= 0x02; // No message, so only 1 block with padding + } else { + leftover = (u32)(adlen % (2 * BLOCKBYTES)); + if (leftover == 0) { // Even or odd ad length? + domain ^= 0x08; // Even with a full double block at the end + } else if (leftover < BLOCKBYTES) { + domain ^= 0x02; // Odd with a partial single block at the end + } else if (leftover > BLOCKBYTES) { + domain ^= 0x0A; // Even with a partial double block at the end + } + } + //Determine which domain bits we need based on the length of the message + if (mlen == 0) { + domain ^= 0x01; // No message, so only 1 block with padding + } else { + leftover = (u32)(mlen % (2 * BLOCKBYTES)); + if (leftover == 0) { // Even or odd message length? + domain ^= 0x04; // Even with a full double block at the end + } else if (leftover < BLOCKBYTES) { + domain ^= 0x01; // Odd with a partial single block at the end + } else if (leftover > BLOCKBYTES) { + domain ^= 0x05; // Even with a partial double block at the end + } + } + return domain; +} + +//Encryption and authentication using Romulus-N1 +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) { + + u64 tmp_mlen = mlen; + u32 tmp; + const u8* m_auth = m; + u8 final_domain = 0x30; + skinny_128_384_tks tks; + u8 state[BLOCKBYTES], pad[BLOCKBYTES]; + (void)nsec; + + // ----------------- Initialization ----------------- + *clen = mlen + TAGBYTES; + memset(tks.tk1, 0x00, KEYBYTES); + memset(state, 0x00, BLOCKBYTES); + tks.tk1[0] = 0x01; // Init the 56-bit LFSR counter + // ----------------- Initialization ----------------- + + // ----------------- Process the associated data ----------------- + final_domain ^= final_ad_domain(adlen, mlen); + SET_DOMAIN(tks, 0x28); + while (adlen > 2*BLOCKBYTES) { // Process double blocks but the last + UPDATE_CTR(tks.tk1); + XOR_BLOCK(state, state, ad); + tkschedule_lfsr(tks.rtk, ad + BLOCKBYTES, k, SKINNY128_384_ROUNDS); + tkschedule_perm(tks.rtk); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + UPDATE_CTR(tks.tk1); + ad += 2*BLOCKBYTES; + adlen -= 2*BLOCKBYTES; + } + // Pad and process the left-over blocks + if (adlen == 2*BLOCKBYTES) { // Left-over complete double block + UPDATE_CTR(tks.tk1); + XOR_BLOCK(state, state, ad); + tkschedule_lfsr(tks.rtk, ad + BLOCKBYTES, k, SKINNY128_384_ROUNDS); + tkschedule_perm(tks.rtk); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + UPDATE_CTR(tks.tk1); + } else if (adlen > BLOCKBYTES) { // Left-over partial double block + adlen -= BLOCKBYTES; + UPDATE_CTR(tks.tk1); + XOR_BLOCK(state, state, ad); + memcpy(pad, ad + BLOCKBYTES, adlen); + memset(pad + adlen, 0x00, 15 - adlen); + pad[15] = adlen; // Padding + tkschedule_lfsr(tks.rtk, pad, k, SKINNY128_384_ROUNDS); + tkschedule_perm(tks.rtk); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + UPDATE_CTR(tks.tk1); + } else { + SET_DOMAIN(tks, 0x2C); + UPDATE_CTR(tks.tk1); + if (adlen == BLOCKBYTES) { // Left-over complete single block + XOR_BLOCK(state, state, ad); + } else { // Left-over partial single block + for(int i =0; i < adlen; i++) + state[i] ^= ad[i]; + state[15] ^= adlen; // Padding + } + if (tmp_mlen >= BLOCKBYTES) { + tkschedule_lfsr(tks.rtk, m_auth, k, SKINNY128_384_ROUNDS); + tkschedule_perm(tks.rtk); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + m_auth += BLOCKBYTES; + tmp_mlen -= BLOCKBYTES; + if (tmp_mlen > BLOCKBYTES) { + UPDATE_CTR(tks.tk1); + } + } else { + memcpy(pad, m_auth, tmp_mlen); + memset(pad + tmp_mlen, 0x00, BLOCKBYTES - tmp_mlen - 1); + pad[15] = (u8)tmp_mlen; // Padding + tkschedule_lfsr(tks.rtk, pad, k, SKINNY128_384_ROUNDS); + tkschedule_perm(tks.rtk); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + tmp_mlen = 0; + } + } + // Process all message double blocks except the last + SET_DOMAIN(tks, 0x2C); + while (tmp_mlen > 32) { + UPDATE_CTR(tks.tk1); + XOR_BLOCK(state, state, m_auth); + tkschedule_lfsr(tks.rtk, m_auth + BLOCKBYTES, k, SKINNY128_384_ROUNDS); + tkschedule_perm(tks.rtk); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + UPDATE_CTR(tks.tk1); + m_auth += 2 * BLOCKBYTES; + tmp_mlen -= 2 * BLOCKBYTES; + } + // Process the last message double block + if (tmp_mlen == 2 * BLOCKBYTES) { // Last message double block is full + UPDATE_CTR(tks.tk1); + XOR_BLOCK(state, state, m_auth); + tkschedule_lfsr(tks.rtk, m_auth + BLOCKBYTES, k, SKINNY128_384_ROUNDS); + tkschedule_perm(tks.rtk); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + } else if (tmp_mlen > BLOCKBYTES) { // Last message double block is partial + tmp_mlen -= BLOCKBYTES; + UPDATE_CTR(tks.tk1); + XOR_BLOCK(state, state, m_auth); + memcpy(pad, m_auth + BLOCKBYTES, tmp_mlen); + memset(pad + tmp_mlen, 0x00, BLOCKBYTES - tmp_mlen - 1); + pad[15] = (u8)tmp_mlen; // Padding + tkschedule_lfsr(tks.rtk, pad, k, SKINNY128_384_ROUNDS); + tkschedule_perm(tks.rtk); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + } else if (tmp_mlen == BLOCKBYTES) { // Last message single block is full + XOR_BLOCK(state, state, m_auth); + } else if (tmp_mlen > 0) { // Last message single block is partial + for(int i =0; i < (int)tmp_mlen; i++) + state[i] ^= m_auth[i]; + state[15] ^= (u8)tmp_mlen; // Padding + } + // Process the last partial block + SET_DOMAIN(tks, final_domain); + UPDATE_CTR(tks.tk1); + tkschedule_lfsr(tks.rtk, npub, k, SKINNY128_384_ROUNDS); + tkschedule_perm(tks.rtk); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + // ----------------- Process the associated data ----------------- + + + // ----------------- Generate the tag ----------------- + G(state,state); + memcpy(c + mlen, state, TAGBYTES); + // ----------------- Generate the tag ----------------- + + memset(tks.tk1, 0x00, KEYBYTES); + tks.tk1[0] = 0x01; // Init the 56-bit LFSR counter + if (mlen > 0) { + SET_DOMAIN(tks, 0x24); + while (mlen > BLOCKBYTES) { + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + RHO(state,c,m); + UPDATE_CTR(tks.tk1); + c += BLOCKBYTES; + m += BLOCKBYTES; + mlen -= BLOCKBYTES; + } + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + for(int i = 0; i < (int)mlen; i++) { + tmp = m[i]; // Use of tmp variable in case c = m + c[i] = m[i] ^ (state[i] >> 1) ^ (state[i] & 0x80) ^ (state[i] << 7); + state[i] ^= (u8)tmp; + } + state[15] ^= (u8)mlen; // Padding + } + + return 0; +} + +//Decryption and tag verification using Romulus-N1 +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 tmp, tmp_mlen; + u8 final_domain = 0x30; + u8* m_auth = m; + const u8* c_tmp = c; + skinny_128_384_tks tks; + u8 state[BLOCKBYTES], pad[BLOCKBYTES]; + (void)nsec; + + if (clen < TAGBYTES) + return -1; + + // ----------------- Initialization ----------------- + *mlen = clen - TAGBYTES; + memset(tks.tk1, 0x00, KEYBYTES); + tks.tk1[0] = 0x01; // Init the 56-bit LFSR counter + // ----------------- Initialization ----------------- + + // ----------------- Process the ciphertext ----------------- + clen -= TAGBYTES; + memcpy(state, c + clen, TAGBYTES); + tmp_mlen = clen; + if (tmp_mlen > 0) { + tkschedule_lfsr(tks.rtk, npub, k, SKINNY128_384_ROUNDS); + tkschedule_perm(tks.rtk); + SET_DOMAIN(tks, 0x24); + while (tmp_mlen > BLOCKBYTES) { + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + RHO_INV(state, c, m); + UPDATE_CTR(tks.tk1); + c += BLOCKBYTES; + m += BLOCKBYTES; + tmp_mlen -= BLOCKBYTES; + } + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + for(int i = 0; i < (int)tmp_mlen; i++) { + m[i] = c[i] ^ (state[i] >> 1) ^ (state[i] & 0x80) ^ (state[i] << 7); + state[i] ^= m[i]; + } + state[15] ^= (u8)tmp_mlen; // Padding + } + // ----------------- Process the ciphertext ----------------- + + // ----------------- Process the associated data ----------------- + memset(tks.tk1, 0x00, KEYBYTES); + tks.tk1[0] = 0x01; // Init the 56-bit LFSR counter + memset(state, 0x00, BLOCKBYTES); + final_domain ^= final_ad_domain(adlen, clen); + SET_DOMAIN(tks, 0x28); + while (adlen > 2*BLOCKBYTES) { // Process double blocks but the last + UPDATE_CTR(tks.tk1); + XOR_BLOCK(state, state, ad); + tkschedule_lfsr(tks.rtk, ad + BLOCKBYTES, k, SKINNY128_384_ROUNDS); + tkschedule_perm(tks.rtk); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + UPDATE_CTR(tks.tk1); + ad += 2*BLOCKBYTES; + adlen -= 2*BLOCKBYTES; + } + // Pad and process the left-over blocks + if (adlen == 2*BLOCKBYTES) { // Left-over complete double block + UPDATE_CTR(tks.tk1); + XOR_BLOCK(state, state, ad); + tkschedule_lfsr(tks.rtk, ad + BLOCKBYTES, k, SKINNY128_384_ROUNDS); + tkschedule_perm(tks.rtk); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + UPDATE_CTR(tks.tk1); + } else if (adlen > BLOCKBYTES) { // Left-over partial double block + adlen -= BLOCKBYTES; + UPDATE_CTR(tks.tk1); + XOR_BLOCK(state, state, ad); + memcpy(pad, ad + BLOCKBYTES, adlen); + memset(pad + adlen, 0x00, 15 - adlen); + pad[15] = adlen; // Padding + tkschedule_lfsr(tks.rtk, pad, k, SKINNY128_384_ROUNDS); + tkschedule_perm(tks.rtk); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + UPDATE_CTR(tks.tk1); + } else { + SET_DOMAIN(tks, 0x2C); + UPDATE_CTR(tks.tk1); + if (adlen == BLOCKBYTES) { // Left-over complete single block + XOR_BLOCK(state, state, ad); + } else { // Left-over partial single block + for(int i =0; i < (int)adlen; i++) + state[i] ^= ad[i]; + state[15] ^= adlen; // Padding + } + if (clen >= BLOCKBYTES) { + tkschedule_lfsr(tks.rtk, m_auth, k, SKINNY128_384_ROUNDS); + tkschedule_perm(tks.rtk); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + m_auth += BLOCKBYTES; + clen -= BLOCKBYTES; + if (clen > BLOCKBYTES) { + UPDATE_CTR(tks.tk1); + } + } else { + memcpy(pad, m_auth, clen); + memset(pad + clen, 0x00, BLOCKBYTES - clen - 1); + pad[15] = (u8)clen; // Padding + tkschedule_lfsr(tks.rtk, pad, k, SKINNY128_384_ROUNDS); + tkschedule_perm(tks.rtk); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + clen = 0; + } + } + // Process all message double blocks except the last + SET_DOMAIN(tks, 0x2C); + while (clen > 32) { + UPDATE_CTR(tks.tk1); + XOR_BLOCK(state, state, m_auth); + tkschedule_lfsr(tks.rtk, m_auth + BLOCKBYTES, k, SKINNY128_384_ROUNDS); + tkschedule_perm(tks.rtk); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + UPDATE_CTR(tks.tk1); + m_auth += 2 * BLOCKBYTES; + clen -= 2 * BLOCKBYTES; + } + // Process the last message double block + if (clen == 2 * BLOCKBYTES) { // Last message double block is full + UPDATE_CTR(tks.tk1); + XOR_BLOCK(state, state, m_auth); + tkschedule_lfsr(tks.rtk, m_auth + BLOCKBYTES, k, SKINNY128_384_ROUNDS); + tkschedule_perm(tks.rtk); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + } else if (clen > BLOCKBYTES) { // Last message double block is partial + clen -= BLOCKBYTES; + UPDATE_CTR(tks.tk1); + XOR_BLOCK(state, state, m_auth); + memcpy(pad, m_auth + BLOCKBYTES, clen); + memset(pad + clen, 0x00, BLOCKBYTES - clen - 1); + pad[15] = (u8)clen; // Padding + tkschedule_lfsr(tks.rtk, pad, k, SKINNY128_384_ROUNDS); + tkschedule_perm(tks.rtk); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + } else if (clen == BLOCKBYTES) { // Last message single block is full + XOR_BLOCK(state, state, m_auth); + } else if (clen > 0) { // Last message single block is partial + for(int i =0; i < (int)clen; i++) + state[i] ^= m[i]; + state[15] ^= (u8)clen; // Padding + } + // Process the last partial block + SET_DOMAIN(tks, final_domain); + UPDATE_CTR(tks.tk1); + tkschedule_lfsr(tks.rtk, npub, k, SKINNY128_384_ROUNDS); + tkschedule_perm(tks.rtk); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + // ----------------- Process the associated data ----------------- + + // ----------------- Generate and check the tag ----------------- + G(state,state); + tmp = 0; + for(int i = 0; i < TAGBYTES; i++) + tmp |= state[i] ^ c_tmp[*mlen+i]; //constant-time tag comparison + // ----------------- Generate and check the tag ----------------- + + return tmp; +} \ No newline at end of file diff --git a/romulus/Implementations/crypto_aead/romulusm1v12/armcortexm/romulus.h b/romulus/Implementations/crypto_aead/romulusm1v12/armcortexm/romulus.h new file mode 100644 index 0000000..626a767 --- /dev/null +++ b/romulus/Implementations/crypto_aead/romulusm1v12/armcortexm/romulus.h @@ -0,0 +1,69 @@ +#ifndef ROMULUSN1_H_ +#define ROMULUSN1_H_ + +#include "skinny128.h" + +typedef unsigned char u8; +typedef unsigned int u32; +typedef unsigned int u64; +typedef struct { + u8 tk1[16]; //to manipulate tk1 byte-wise + u32 rtk1[4*16]; //to avoid tk schedule recomputations + u32 rtk[4*SKINNY128_384_ROUNDS]; //all round tweakeys +} skinny_128_384_tks; + +#define TAGBYTES 16 +#define KEYBYTES 16 +#define BLOCKBYTES 16 + +#define SET_DOMAIN(tks, domain) ((tks).tk1[7] = (domain)) + +//G as defined in the Romulus specification in a 32-bit word-wise manner +#define G(x,y) ({ \ + tmp = ((u32*)(y))[0]; \ + ((u32*)(x))[0] = (tmp >> 1 & 0x7f7f7f7f) ^ ((tmp ^ (tmp << 7)) & 0x80808080); \ + tmp = ((u32*)(y))[1]; \ + ((u32*)(x))[1] = (tmp >> 1 & 0x7f7f7f7f) ^ ((tmp ^ (tmp << 7)) & 0x80808080); \ + tmp = ((u32*)(y))[2]; \ + ((u32*)(x))[2] = (tmp >> 1 & 0x7f7f7f7f) ^ ((tmp ^ (tmp << 7)) & 0x80808080); \ + tmp = ((u32*)(y))[3]; \ + ((u32*)(x))[3] = (tmp >> 1 & 0x7f7f7f7f) ^ ((tmp ^ (tmp << 7)) & 0x80808080); \ +}) + +//update the counter in tk1 in a 32-bit word-wise manner +#define UPDATE_CTR(tk1) ({ \ + tmp = ((u32*)(tk1))[1]; \ + ((u32*)(tk1))[1] = (tmp << 1) & 0x00ffffff; \ + ((u32*)(tk1))[1] |= (((u32*)(tk1))[0] >> 31); \ + ((u32*)(tk1))[1] |= tmp & 0xff000000; \ + ((u32*)(tk1))[0] <<= 1; \ + if ((tmp >> 23) & 0x01) \ + ((u32*)(tk1))[0] ^= 0x95; \ +}) + +//x <- y ^ z for 128-bit blocks +#define XOR_BLOCK(x,y,z) ({ \ + ((u32*)(x))[0] = ((u32*)(y))[0] ^ ((u32*)(z))[0]; \ + ((u32*)(x))[1] = ((u32*)(y))[1] ^ ((u32*)(z))[1]; \ + ((u32*)(x))[2] = ((u32*)(y))[2] ^ ((u32*)(z))[2]; \ + ((u32*)(x))[3] = ((u32*)(y))[3] ^ ((u32*)(z))[3]; \ +}) + + +//Rho as defined in the Romulus specification +//use pad as a tmp variable in case y = z +#define RHO(x,y,z) ({ \ + G(pad,x); \ + XOR_BLOCK(y, pad, z); \ + XOR_BLOCK(x, x, z); \ +}) + +//Rho inverse as defined in the Romulus specification +//use pad as a tmp variable in case y = z +#define RHO_INV(x, y, z) ({ \ + G(pad, x); \ + XOR_BLOCK(z, pad, y); \ + XOR_BLOCK(x, x, z); \ +}) + +#endif // ROMULUSN1_H_ \ No newline at end of file diff --git a/romulus/Implementations/crypto_aead/romulusm1v12/armcortexm/skinny128.h b/romulus/Implementations/crypto_aead/romulusm1v12/armcortexm/skinny128.h new file mode 100644 index 0000000..4c8f956 --- /dev/null +++ b/romulus/Implementations/crypto_aead/romulusm1v12/armcortexm/skinny128.h @@ -0,0 +1,17 @@ +#ifndef SKINNY128_H_ +#define SKINNY128_H_ + +typedef unsigned char u8; +typedef unsigned int u32; + +#define SKINNY128_128_ROUNDS 40 +#define SKINNY128_256_ROUNDS 48 +#define SKINNY128_384_ROUNDS 56 + +extern void skinny128_384(u8* ctext, const u32* tk, const u8* ptext, const u32* rtk1); +extern void tkschedule_lfsr(u32* rtk, const u8* tk2, const u8* tk3, const int rounds); +extern void tkschedule_perm(u32* rtk); +extern void tkschedule_perm_tk1(u32* rtk1, const u8* tk1); + + +#endif // SKINNY128_H_ \ No newline at end of file diff --git a/romulus/Implementations/crypto_aead/romulusm1v12/armcortexm/skinny128.s b/romulus/Implementations/crypto_aead/romulusm1v12/armcortexm/skinny128.s new file mode 100644 index 0000000..dcd4852 --- /dev/null +++ b/romulus/Implementations/crypto_aead/romulusm1v12/armcortexm/skinny128.s @@ -0,0 +1,1974 @@ +/******************************************************************************* +* ARM assembly implementation of fixsliced SKINNY-128-384. +* +* For more details, see the paper at: https:// +* +* @author Alexandre Adomnicai, Nanyang Technological University, +* alexandre.adomnicai@ntu.edu.sg +* +* @date May 2020 +*******************************************************************************/ + +.syntax unified +.thumb + +/******************************************************************************* +* applies P^2 on the tweakey state in a bitsliced manner +*******************************************************************************/ +.align 2 +p2: + movw r1, #0xcc00 + movt r1, #0xcc00 //r1 <- 0xcc00cc00 + movw r10, #0xcc00 + movt r10, #0x0033 //r10<- 0xcc000033 + and r11, r1, r6, ror #14 + bfi r11, r6, #16, #8 + and r12, r6, #0xcc000000 + orr r11, r11, r12, lsr #2 + and r12, r10, r6 + orr r11, r11, r12, lsr #8 + and r12, r6, #0x00cc0000 + orr r6, r11, r12, lsr #18 + and r11, r1, r7, ror #14 + bfi r11, r7, #16, #8 + and r12, r7, #0xcc000000 + orr r11, r11, r12, lsr #2 + and r12, r10, r7 + orr r11, r11, r12, lsr #8 + and r12, r7, #0x00cc0000 + orr r7, r11, r12, lsr #18 + and r11, r1, r8, ror #14 + bfi r11, r8, #16, #8 + and r12, r8, #0xcc000000 + orr r11, r11, r12, lsr #2 + and r12, r10, r8 + orr r11, r11, r12, lsr #8 + and r12, r8, #0x00cc0000 + orr r8, r11, r12, lsr #18 + and r11, r1, r9, ror #14 + bfi r11, r9, #16, #8 + and r12, r9, #0xcc000000 + orr r11, r11, r12, lsr #2 + and r12, r10, r9 + orr r11, r11, r12, lsr #8 + and r12, r9, #0x00cc0000 + orr r9, r11, r12, lsr #18 + bx lr + +/******************************************************************************* +* applies P^4 on the tweakey state in a bitsliced manner +*******************************************************************************/ +.align 2 +p4: + str.w r14, [sp] //store r14 on the stack + movw r14, #0x00cc + movt r14, #0xcc00 //r14<- 0xcc0000cc + movw r12, #0xcc00 + movt r12, #0x3300 //r12<- 0x3300cc00 + movw r11, #0x00cc + movt r11, #0x00cc //r11<- 0x00cc00cc + and r10, r14, r6, ror #22 + and r1, r12, r6, ror #16 + orr r10, r10, r1 + and r1, r6, r11 + orr r10, r10, r1, lsr #2 + movw r1, #0xcc33 //r1 <- 0x0000cc33 + and r6, r6, r1 + orr r6, r10, r6, ror #24 + and r10, r14, r7, ror #22 + and r1, r12, r7, ror #16 + orr r10, r10, r1 + and r1, r7, r11 + orr r10, r10, r1, lsr #2 + movw r1, #0xcc33 //r1 <- 0x0000cc33 + and r7, r7, r1 + orr r7, r10, r7, ror #24 + and r10, r14, r8, ror #22 + and r1, r12, r8, ror #16 + orr r10, r10, r1 + and r1, r8, r11 + orr r10, r10, r1, lsr #2 + movw r1, #0xcc33 //r1 <- 0x0000cc33 + and r8, r8, r1 + orr r8, r10, r8, ror #24 + and r10, r14, r9, ror #22 + ldr.w r14, [sp] //restore r14 + and r12, r12, r9, ror #16 + orr r10, r10, r12 + and r12, r9, r11 + orr r10, r10, r12, lsr #2 + movw r12, #0xcc33 //r1 <- 0x0000cc33 + and r9, r9, r12 + orr r9, r10, r9, ror #24 + bx lr + +/******************************************************************************* +* applies P^6 on the tweakey state in a bitsliced manner +*******************************************************************************/ +.align 2 +p6: + movw r1, #0x3333 //r1 <- 0x00003333 + movw r12, #0x00cc + movt r12, #0x3300 //r12<- 0x330000cc + and r10, r6, r1, ror #8 // --- permute r6 6 times + and r11, r12, r6, ror #24 + orr r11, r11, r10, ror #6 + and r10, r1, r6, ror #10 + orr r11, r11, r10 + and r10, r6, #0x000000cc + orr r11, r11, r10, lsl #14 + and r10, r6, #0x00003300 + orr r6, r11, r10, lsl #2 // permute r6 6 times --- + and r10, r7, r1, ror #8 // --- permute r7 6 times + and r11, r12, r7, ror #24 + orr r11, r11, r10, ror #6 + and r10, r1, r7, ror #10 + orr r11, r11, r10 + and r10, r7, #0x000000cc + orr r11, r11, r10, lsl #14 + and r10, r7, #0x00003300 + orr r7, r11, r10, lsl #2 // permute r7 6 times --- + and r10, r8, r1, ror #8 // --- permute r8 6 times + and r11, r12, r8, ror #24 + orr r11, r11, r10, ror #6 + and r10, r1, r8, ror #10 + orr r11, r11, r10 + and r10, r8, #0x000000cc + orr r11, r11, r10, lsl #14 + and r10, r8, #0x00003300 + orr r8, r11, r10, lsl #2 // permute r8 6 times --- + and r10, r9, r1, ror #8 // --- permute r9 6 times + and r11, r12, r9, ror #24 + orr r11, r11, r10, ror #6 + and r10, r1, r9, ror #10 + orr r11, r11, r10 + and r10, r9, #0x000000cc + orr r11, r11, r10, lsl #14 + and r10, r9, #0x00003300 // permute r9 6 times --- + orr r9, r11, r10, lsl #2 + bx lr + +/******************************************************************************* +* applies P^8 on the tweakey state in a bitsliced manner +*******************************************************************************/ +.align 2 +p8: + movw r12, #0x3333 //r12<- 0x00003333 + movw r1, #0x0000 + movt r1, #0x33cc //r1 <- 0x33cc0000 + and r10, r6, r1 // --- permute r6 8 times + and r11, r1, r6, ror #8 + orr r11, r11, r10, ror #24 + and r10, r6, r12, lsl #2 + orr r11, r11, r10, ror #26 + and r10, r6, r12, lsl #8 + orr r6, r11, r10, lsr #6 // permute r6 8 times --- + and r10, r7, r1 // --- permute r7 8 times + and r11, r1, r7, ror #8 + orr r11, r11, r10, ror #24 + and r10, r7, r12, lsl #2 + orr r11, r11, r10, ror #26 + and r10, r7, r12, lsl #8 + orr r7, r11, r10, lsr #6 // permute r7 8 times --- + and r10, r8, r1 // --- permute r8 8 times + and r11, r1, r8, ror #8 + orr r11, r11, r10, ror #24 + and r10, r8, r12, lsl #2 + orr r11, r11, r10, ror #26 + and r10, r8, r12, lsl #8 + orr r8, r11, r10, lsr #6 // permute r8 8 times --- + and r10, r9, r1 // --- permute r9 8 times + and r11, r1, r9, ror #8 + orr r11, r11, r10, ror #24 + and r10, r9, r12, lsl #2 + orr r11, r11, r10, ror #26 + and r10, r9, r12, lsl #8 + orr r9, r11, r10, lsr #6 // permute r9 8 times --- + bx lr + +/******************************************************************************* +* applies P^10 on the tweakey state in a bitsliced manner +*******************************************************************************/ +.align 2 +p10: + movw r12, #0x0033 + movt r12, #0x3300 //r12<- 0x33000033 + movw r1, #0xcc33 //r1 <- 0x0000cc33 + and r10, r6, r1, ror #8 // --- permute r6 10 times + and r11, r12, r6, ror #26 + orr r11, r11, r10, ror #8 + and r10, r6, r12, ror #24 + orr r11, r11, r10, ror #22 + and r10, r6, #0x00330000 + orr r11, r11, r10, lsr #14 + and r10, r6, #0x0000cc00 + orr r6, r11, r10, lsr #2 // permute r6 10 times --- + and r10, r7, r1, ror #8 // --- permute r6 10 times + and r11, r12, r7, ror #26 + orr r11, r11, r10, ror #8 + and r10, r7, r12, ror #24 + orr r11, r11, r10, ror #22 + and r10, r7, #0x00330000 + orr r11, r11, r10, lsr #14 + and r10, r7, #0x0000cc00 + orr r7, r11, r10, lsr #2 // permute r6 10 times --- + and r10, r8, r1, ror #8 // --- permute r6 10 times + and r11, r12, r8, ror #26 + orr r11, r11, r10, ror #8 + and r10, r8, r12, ror #24 + orr r11, r11, r10, ror #22 + and r10, r8, #0x00330000 + orr r11, r11, r10, lsr #14 + and r10, r8, #0x0000cc00 + orr r8, r11, r10, lsr #2 // permute r6 10 times --- + and r10, r9, r1, ror #8 // --- permute r6 10 times + and r11, r12, r9, ror #26 + orr r11, r11, r10, ror #8 + and r10, r9, r12, ror #24 + orr r11, r11, r10, ror #22 + and r10, r9, #0x00330000 + orr r11, r11, r10, lsr #14 + and r10, r9, #0x0000cc00 + orr r9, r11, r10, lsr #2 // permute r6 10 times --- + bx lr + +/******************************************************************************* +* applies P^12 on the tweakey state in a bitsliced manner +*******************************************************************************/ +.align 2 +p12: + str.w r14, [sp] //store r14 on the stack + movw r14, #0xcc33 //r14<- 0x0000cc33 + movw r12, #0x00cc + movt r12, #0x00cc //r12<- 0x00cc00cc + movw r1, #0x3300 + movt r1, #0xcc00 //r1 <- 0xcc003300 + and r10, r14, r6, ror #8 // --- permute r6 12 times + and r11, r12, r6, ror #30 + orr r11, r11, r10 + and r10, r1, r6, ror #16 + orr r11, r11, r10 + movw r10, #0xcccc //r10<- 0x0000cccc + and r10, r6, r10, ror #8 + orr r6, r11, r10, ror #10 // permute r6 12 times --- + and r10, r14, r7, ror #8 // --- permute r7 12 times + and r11, r12, r7, ror #30 + orr r11, r11, r10 + and r10, r1, r7, ror #16 + orr r11, r11, r10 + movw r10, #0xcccc //r10<- 0x0000cccc + and r10, r7, r10, ror #8 + orr r7, r11, r10, ror #10 // permute r7 12 times --- + and r10, r14, r8, ror #8 // --- permute r8 12 times + and r11, r12, r8, ror #30 + orr r11, r11, r10 + and r10, r1, r8, ror #16 + orr r11, r11, r10 + movw r10, #0xcccc //r10<- 0x0000cccc + and r10, r8, r10, ror #8 + orr r8, r11, r10, ror #10 // permute r8 12 times --- + and r10, r14, r9, ror #8 // --- permute r9 12 times + and r11, r12, r9, ror #30 + orr r11, r11, r10 + and r10, r1, r9, ror #16 + ldr.w r14, [sp] + orr r11, r11, r10 + movw r10, #0xcccc //r10<- 0x0000cccc + and r10, r9, r10, ror #8 + orr r9, r11, r10, ror #10 // permute r9 12 times --- + bx lr + +/******************************************************************************* +* applies P^14 on the tweakey state in a bitsliced manner +*******************************************************************************/ +.align 2 +p14: + movw r1, #0xcc00 + movt r1, #0x0033 //r1 <- 0x0033cc00 + movw r12, #0xcc00 + movt r12, #0xcc00 //r12<- 0x33003300 + and r10, r1, r6, ror #24 // --- permute r6 14 times + and r11, r6, #0x00000033 + orr r11, r10, r11, ror #14 + and r10, r6, #0x33000000 + orr r11, r11, r10, ror #30 + and r10, r6, #0x00ff0000 + orr r11, r11, r10, ror #16 + and r10, r6, r12 + orr r6, r11, r10, ror #18 // permute r6 14 times --- + and r10, r1, r7, ror #24 // --- permute r7 14 times + and r11, r7, #0x00000033 + orr r11, r10, r11, ror #14 + and r10, r7, #0x33000000 + orr r11, r11, r10, ror #30 + and r10, r7, #0x00ff0000 + orr r11, r11, r10, ror #16 + and r10, r7, r12 + orr r7, r11, r10, ror #18 // permute r7 14 times --- + and r10, r1, r8, ror #24 // --- permute r8 14 times + and r11, r8, #0x00000033 + orr r11, r10, r11, ror #14 + and r10, r8, #0x33000000 + orr r11, r11, r10, ror #30 + and r10, r8, #0x00ff0000 + orr r11, r11, r10, ror #16 + and r10, r8, r12 + orr r8, r11, r10, ror #18 // permute r8 14 times --- + and r10, r1, r9, ror #24 // --- permute r9 14 times + and r11, r9, #0x00000033 + orr r11, r10, r11, ror #14 + and r10, r9, #0x33000000 + orr r11, r11, r10, ror #30 + and r10, r9, #0x00ff0000 + orr r11, r11, r10, ror #16 + and r10, r9, r12 + orr r9, r11, r10, ror #18 // permute r9 14 times --- + bx lr + +.align 2 +packing: + eor r12, r2, r2, lsr #3 + and r12, r12, r10 + eor r2, r2, r12 + eor r2, r2, r12, lsl #3 //SWAPMOVE(r2, r2, 0x0a0a0a0a, 3) + eor r12, r3, r3, lsr #3 + and r12, r12, r10 + eor r3, r3, r12 + eor r3, r3, r12, lsl #3 //SWAPMOVE(r3, r3, 0x0a0a0a0a, 3) + eor r12, r4, r4, lsr #3 + and r12, r12, r10 + eor r4, r4, r12 + eor r4, r4, r12, lsl #3 //SWAPMOVE(r4, r4, 0x0a0a0a0a, 3) + eor r12, r5, r5, lsr #3 + and r12, r12, r10 + eor r5, r5, r12 + eor r5, r5, r12, lsl #3 //SWAPMOVE(r5, r5, 0x0a0a0a0a, 3) + eor r12, r2, r4, lsr #2 + and r12, r12, r11 + eor r2, r2, r12 + eor r4, r4, r12, lsl #2 //SWAPMOVE(r4, r2, 0x30303030, 2) + eor r12, r2, r3, lsr #4 + and r12, r12, r11, lsr #2 + eor r2, r2, r12 + eor r3, r3, r12, lsl #4 //SWAPMOVE(r3, r2, 0x0c0c0c0c, 4) + eor r12, r2, r5, lsr #6 + and r12, r12, r11, lsr #4 + eor r2, r2, r12 + eor r5, r5, r12, lsl #6 //SWAPMOVE(r5, r2, 0x03030303, 6) + eor r12, r4, r3, lsr #2 + and r12, r12, r11, lsr #2 + eor r4, r4, r12 + eor r3, r3, r12, lsl #2 //SWAPMOVE(r3, r4, 0x0c0c0c0c, 2) + eor r12, r4, r5, lsr #4 + and r12, r12, r11, lsr #4 + eor r4, r4, r12 + eor r5, r5, r12, lsl #4 //SWAPMOVE(r5, r4, 0x03030303, 4) + eor r12, r3, r5, lsr #2 + and r12, r12, r11, lsr #4 + eor r3, r3, r12 + eor r5, r5, r12, lsl #2 //SWAPMOVE(r5, r3, 0x03030303, 2) + bx lr + +/****************************************************************************** +* Compute LFSR2(TK2) ^ LFSR3(TK3) for all rounds. +* Performing both at the same time allows to save some memory accesses. +******************************************************************************/ +@ void tkschedule_lfsr(u32* tk, const u8* tk2, const u8* tk3, const int rounds) +.global tkschedule_lfsr +.type tkschedule_lfsr,%function +.align 2 +tkschedule_lfsr: + push {r0-r12, r14} + ldr.w r3, [r1, #8] //load tk2 (3rd word) + ldr.w r4, [r1, #4] //load tk2 (2nd word) + ldr.w r5, [r1, #12] //load tk2 (4th word) + ldr.w r12, [r1] //load tk2 (1st word) + mov r1, r2 //move tk3 address in r1 + mov r2, r12 //move 1st tk2 word in r2 + movw r10, #0x0a0a + movt r10, #0x0a0a //r10 <- 0x0a0a0a0a + movw r11, #0x3030 + movt r11, #0x3030 //r7 <- 0x30303030 + bl packing //pack tk2 + mov r6, r2 //move tk2 from r2-r5 to r6-r9 + mov r7, r3 //move tk2 from r2-r5 to r6-r9 + mov r8, r4 //move tk2 from r2-r5 to r6-r9 + mov r9, r5 //move tk2 from r2-r5 to r6-r9 + ldr.w r3, [r1, #8] //load tk3 (3rd word) + ldr.w r4, [r1, #4] //load tk3 (2nd word) + ldr.w r5, [r1, #12] //load tk3 (4th) word) + ldr.w r2, [r1] //load tk3 (1st) word) + bl packing //pack tk3 + eor r10, r10, r10, lsl #4 //r10<- 0xaaaaaaaa + ldr.w r1, [sp, #12] //load loop counter in r1 + eor r11, r2, r6 //tk2 ^ tk3 (1st word) + eor r12, r3, r7 //tk2 ^ tk3 (2nd word) + strd r11, r12, [r0], #8 //store in tk + eor r11, r4, r8 //tk2 ^ tk3 (3rd word) + eor r12, r5, r9 //tk2 ^ tk3 (4th word) + strd r11, r12, [r0], #8 //store in tk + loop: + and r12, r8, r10 // --- apply LFSR2 to tk2 + eor r12, r12, r6 + and r14, r10, r12, lsl #1 + and r12, r12, r10 + orr r6, r14, r12, lsr #1 // apply LFSR2 to tk2 --- + and r12, r3, r10 // --- apply LFSR3 to tk3 + eor r12, r5, r12, lsr #1 + and r14, r10, r12, lsl #1 + and r12, r12, r10 + orr r5, r14, r12, lsr #1 // apply LFSR3 to tk3 --- + eor r11, r5, r7 //tk2 ^ tk3 (1st word) + eor r12, r2, r8 //tk2 ^ tk3 (2nd word) + strd r11, r12, [r0], #8 //store in tk + eor r11, r3, r9 //tk2 ^ tk3 (3rd word) + eor r12, r4, r6 //tk2 ^ tk3 (4th word) + strd r11, r12, [r0], #24 //store in tk + and r12, r9, r10 // --- apply LFSR2 to tk2 + eor r12, r12, r7 + and r14, r10, r12, lsl #1 + and r12, r12, r10 + orr r7, r14, r12, lsr #1 // apply LFSR2 to tk2 --- + and r12, r2, r10 // --- apply LFSR3 to tk3 + eor r12, r4, r12, lsr #1 + and r14, r10, r12, lsl #1 + and r12, r12, r10 + orr r4, r14, r12, lsr #1 // apply LFSR3 to tk3 --- + eor r11, r4, r8 //tk2 ^ tk3 (1st word) + eor r12, r5, r9 //tk2 ^ tk3 (2nd word) + strd r11, r12, [r0], #8 //store in tk + eor r11, r2, r6 //tk2 ^ tk3 (3rd word) + eor r12, r3, r7 //tk2 ^ tk3 (4th word) + strd r11, r12, [r0], #24 //store in tk + and r12, r6, r10 // --- apply LFSR2 to tk2 + eor r12, r12, r8 + and r14, r10, r12, lsl #1 + and r12, r12, r10 + orr r8, r14, r12, lsr #1 // apply LFSR2 to tk2 --- + and r12, r5, r10 // --- apply LFSR3 to tk3 + eor r12, r3, r12, lsr #1 + and r14, r10, r12, lsl #1 + and r12, r12, r10 + orr r3, r14, r12, lsr #1 // apply LFSR3 to tk3 --- + eor r11, r3, r9 //tk2 ^ tk3 (1st word) + eor r12, r4, r6 //tk2 ^ tk3 (2nd word) + strd r11, r12, [r0], #8 //store in tk + eor r11, r5, r7 //tk2 ^ tk3 (3rd word) + eor r12, r2, r8 //tk2 ^ tk3 (4th word) + strd r11, r12, [r0], #24 //store in tk + and r12, r7, r10 // --- apply LFSR2 to tk2 + eor r12, r12, r9 + and r14, r10, r12, lsl #1 + and r12, r12, r10 + orr r9, r14, r12, lsr #1 // apply LFSR2 to tk2 --- + and r12, r4, r10 // --- apply LFSR3 to tk3 + eor r12, r2, r12, lsr #1 + and r14, r10, r12, lsl #1 + and r12, r12, r10 + orr r2, r14, r12, lsr #1 // apply LFSR3 to tk3 --- + eor r11, r2, r6 //tk2 ^ tk3 (1st word) + eor r12, r3, r7 //tk2 ^ tk3 (2nd word) + strd r11, r12, [r0], #8 //store in tk + eor r11, r4, r8 //tk2 ^ tk3 (3rd word) + eor r12, r5, r9 //tk2 ^ tk3 (4th word) + strd r11, r12, [r0], #24 //store in tk + subs.w r1, r1, #8 //decrease loop counter by 8 + bne loop + pop {r0-r12, r14} + bx lr + +/****************************************************************************** +* Applies the permutation P and add the round constants to all round tweakeys. +******************************************************************************/ +@ void tkschedule_perm(u32* tk) +.global tkschedule_perm +.type tkschedule_perm,%function +.align 2 +tkschedule_perm: + push {r0-r12, lr} + sub.w sp, #4 //to store r14 in subroutines + ldm r0, {r6-r9} //load tk + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r6, r6, r10 //tk &= 0xf0f0f0f0 (1st word) + and r7, r7, r10 //tk &= 0xf0f0f0f0 (2nd word) + and r8, r8, r10 //tk &= 0xf0f0f0f0 (3rd word) + and r9, r9, r10 //tk &= 0xf0f0f0f0 (4th word) + eor r8, r8, #0x00000004 //add rconst + eor r9, r9, #0x00000040 //add rconst + mvn r9, r9 //to remove a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 1st round + strd r6, r7, [r0], #8 //store 2nd half tk for 1st round + ldm r0, {r6-r9} //load tk + bl p2 //apply the permutation twice + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #26 //ror and mask to match fixslicing + and r12, r10, r7, ror #26 //ror and mask to match fixslicing + strd r11, r12, [r0], #8 //store 1st half tk for 2nd round + and r11, r10, r8, ror #26 //ror and mask to match fixslicing + and r12, r10, r9, ror #26 //ror and mask to match fixslicing + eor r11, r11, #0x10000000 //add rconst + eor r11, r11, #0x00000100 //add rconst + eor r12, r12, #0x00000100 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 2nd round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #28 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #12 + and r11, r10, r7, ror #28 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #12 + and r11, r10, r8, ror #28 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #12 + and r11, r10, r9, ror #28 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #12 //ror and masks to match fixslicing --- + eor r7, r7, #0x04000000 //add rconst + eor r8, r8, #0x44000000 //add rconst + eor r9, r9, #0x04000000 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 3rd round + strd r6, r7, [r0], #8 //store 2nd half tk for 3rd round + ldm r0, {r6-r9} //load tk + bl p4 //apply the permutation 4 times + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6, ror #16 //ror and mask to match fixslicing + and r12, r10, r7, ror #16 //ror and mask to match fixslicing + eor r11, r11, #0x00400000 //add rconst + eor r12, r12, #0x00400000 //add rconst + strd r11, r12, [r0, #24] //store 2nd half tk for 5th round + and r11, r10, r8, ror #16 //ror and mask to match fixslicing + and r12, r10, r9, ror #16 //ror and mask to match fixslicing + eor r11, r11, #0x00440000 //add rconst + eor r12, r12, #0x00500000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 5th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #14 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #6 + and r11, r10, r7, ror #14 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #6 + and r11, r10, r8, ror #14 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #6 + and r11, r10, r9, ror #14 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #6 //ror and masks to match fixslicing --- + eor r6, r6, #0x00100000 //add rconst + eor r7, r7, #0x00100000 //add rconst + eor r8, r8, #0x00100000 //add rconst + eor r8, r8, #0x00000001 //add rconst + eor r9, r9, #0x00100000 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 4th round + strd r8, r9, [r0], #24 //store 2nd half tk for 4th round + ldm r0, {r6-r9} //load tk + bl p6 //apply the permutation 6 times + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #10 //ror and mask to match fixslicing + and r12, r10, r7, ror #10 //ror and mask to match fixslicing + eor r11, r11, #0x01000000 //add rconst + eor r12, r12, #0x01000000 //add rconst + strd r11, r12, [r0], #8 //store 1st half tk for 6th round + and r11, r10, r8, ror #10 //ror and mask to match fixslicing + and r12, r10, r9, ror #10 //ror and mask to match fixslicing + eor r11, r11, #0x01400000 //add rconst + eor r11, r11, #0x00001000 //add rconst + eor r12, r12, #0x00400000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 6th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #12 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #28 + and r11, r10, r7, ror #12 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #28 + and r11, r10, r8, ror #12 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #28 + and r11, r10, r9, ror #12 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #28 //ror and masks to match fixslicing --- + eor r6, r6, #0x00000400 //add rconst + eor r7, r7, #0x00000400 //add rconst + eor r8, r8, #0x01000000 //add rconst + eor r8, r8, #0x00004000 //add rconst + eor r9, r9, #0x01000000 //add rconst + eor r9, r9, #0x00000400 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 7th round + strd r6, r7, [r0], #8 //store 2nd half tk for 7th round + ldm r0, {r6-r9} //load tk + bl p8 //apply the permutation 8 times + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6 //ror and mask to match fixslicing + and r12, r10, r7 //ror and mask to match fixslicing + eor r12, r12, #0x00000040 //add rconst + strd r11, r12, [r0, #24] //store 2nd half tk for 9th round + and r11, r10, r8 //ror and mask to match fixslicing + and r12, r10, r9 //ror and mask to match fixslicing + eor r11, r11, #0x00000054 //add rconst + eor r12, r12, #0x00000050 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 9th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #30 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #22 + and r11, r10, r7, ror #30 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #22 + and r11, r10, r8, ror #30 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #22 + and r11, r10, r9, ror #30 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #22 //ror and masks to match fixslicing --- + eor r6 ,r6, #0x00000010 + eor r8, r8, #0x00010000 + eor r8, r8, #0x00000410 + eor r9, r9, #0x00000410 + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 8th round + strd r8, r9, [r0], #24 //store 2nd half tk for 8th round + ldm r0, {r6-r9} //load tk + bl p10 //apply the permutation 10 times + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #26 //ror and mask to match fixslicing + and r12, r10, r7, ror #26 //ror and mask to match fixslicing + eor r11, r11, #0x00000100 //add rconst + eor r12, r12, #0x00000100 //add rconst + strd r11, r12, [r0], #8 //store 1st half tk for 10th round + and r11, r10, r8, ror #26 //ror and mask to match fixslicing + and r12, r10, r9, ror #26 //ror and mask to match fixslicing + eor r11, r11, #0x10000000 //add rconst + eor r11, r11, #0x00000140 //add rconst + eor r12, r12, #0x00000100 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 10th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #28 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #12 + and r11, r10, r7, ror #28 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #12 + and r11, r10, r8, ror #28 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #12 + and r11, r10, r9, ror #28 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #12 //ror and masks to match fixslicing --- + eor r6, r6, #0x04000000 //add rconst + eor r7, r7, #0x04000000 //add rconst + eor r8, r8, #0x44000000 //add rconst + eor r9, r9, #0x00000100 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 11th round + strd r6, r7, [r0], #8 //store 2nd half tk for 11th round + ldm r0, {r6-r9} //load tk + bl p12 //apply the permutation 4 times + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6, ror #16 //ror and mask to match fixslicing + and r12, r10, r7, ror #16 //ror and mask to match fixslicing + eor r11, r11, #0x00400000 //add rconst + strd r11, r12, [r0, #24] //store 2nd half tk for 13th round + and r11, r10, r8, ror #16 //ror and mask to match fixslicing + and r12, r10, r9, ror #16 //ror and mask to match fixslicing + eor r11, r11, #0x00140000 //add rconst + eor r12, r12, #0x00500000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 13th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #14 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #6 + and r11, r10, r7, ror #14 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #6 + and r11, r10, r8, ror #14 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #6 + and r11, r10, r9, ror #14 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #6 //ror and masks to match fixslicing --- + eor r6, r6, #0x00100000 //add rconst + eor r7, r7, #0x00100000 //add rconst + eor r8, r8, #0x04000000 //add rconst + eor r8, r8, #0x00000001 //add rconst + eor r9, r9, #0x04000000 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 12th round + strd r8, r9, [r0], #24 //store 2nd half tk for 12th round + ldm r0, {r6-r9} //load tk + bl p14 //apply the permutation 6 times + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #10 //ror and mask to match fixslicing + and r12, r10, r7, ror #10 //ror and mask to match fixslicing + strd r11, r12, [r0], #8 //store 1st half tk for 14th round + and r11, r10, r8, ror #10 //ror and mask to match fixslicing + and r12, r10, r9, ror #10 //ror and mask to match fixslicing + eor r11, r11, #0x01400000 //add rconst + eor r11, r11, #0x00001000 //add rconst + eor r12, r12, #0x01400000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 14th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #12 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #28 + and r11, r10, r7, ror #12 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #28 + and r11, r10, r8, ror #12 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #28 + and r11, r10, r9, ror #12 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #28 //ror and masks to match fixslicing --- + eor r7, r7, #0x00000400 //add rconst + eor r8, r8, #0x01000000 //add rconst + eor r8, r8, #0x00004400 //add rconst + eor r9, r9, #0x00000400 //add const + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 15th round + strd r6, r7, [r0], #8 //store 2nd half tk for 15th round + ldm r0, {r6-r9} //load tk + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6 //ror and mask to match fixslicing + and r12, r10, r7 //ror and mask to match fixslicing + eor r11, r11, #0x00000040 //add rconst + eor r12, r12, #0x00000040 //add rconst + strd r11, r12, [r0, #24] //store 2nd half tk for 17th round + and r11, r10, r8 //ror and mask to match fixslicing + and r12, r10, r9 //ror and mask to match fixslicing + eor r11, r11, #0x00000004 //add rconst + eor r12, r12, #0x00000050 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 17th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #30 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #22 + and r11, r10, r7, ror #30 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #22 + and r11, r10, r8, ror #30 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #22 + and r11, r10, r9, ror #30 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #22 //ror and masks to match fixslicing --- + eor r6 ,r6, #0x00000010 + eor r7 ,r7, #0x00000010 + eor r8, r8, #0x00000010 + eor r8, r8, #0x00010000 + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 16th round + strd r8, r9, [r0], #24 //store 2nd half tk for 16th round + ldm r0, {r6-r9} //load tk + bl p2 //apply the permutation twice + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #26 //ror and mask to match fixslicing + and r12, r10, r7, ror #26 //ror and mask to match fixslicing + eor r11, r11, #0x00000100 //add rconst + strd r11, r12, [r0], #8 //store 1st half tk for 18th round + and r11, r10, r8, ror #26 //ror and mask to match fixslicing + and r12, r10, r9, ror #26 //ror and mask to match fixslicing + eor r11, r11, #0x10000000 //add rconst + eor r11, r11, #0x00000140 //add rconst + eor r12, r12, #0x00000040 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 18th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #28 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #12 + and r11, r10, r7, ror #28 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #12 + and r11, r10, r8, ror #28 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #12 + and r11, r10, r9, ror #28 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #12 //ror and masks to match fixslicing --- + eor r7, r7, #0x04000000 //add rconst + eor r8, r8, #0x40000000 //add rconst + eor r8, r8, #0x00000100 //add rconst + eor r9, r9, #0x04000000 //add rconst + eor r9, r9, #0x00000100 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 19th round + strd r6, r7, [r0], #8 //store 2nd half tk for 19th round + ldm r0, {r6-r9} //load tk + bl p4 //apply the permutation 4 times + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6, ror #16 //ror and mask to match fixslicing + and r12, r10, r7, ror #16 //ror and mask to match fixslicing + eor r12, r12, #0x00400000 //add rconst + strd r11, r12, [r0, #24] //store 2nd half tk for 21th round + and r11, r10, r8, ror #16 //ror and mask to match fixslicing + and r12, r10, r9, ror #16 //ror and mask to match fixslicing + eor r11, r11, #0x00440000 //add rconst + eor r12, r12, #0x00100000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 21th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #14 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #6 + and r11, r10, r7, ror #14 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #6 + and r11, r10, r8, ror #14 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #6 + and r11, r10, r9, ror #14 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #6 //ror and masks to match fixslicing --- + eor r6, r6, #0x00100000 //add rconst + eor r8, r8, #0x04100000 //add rconst + eor r8, r8, #0x00000001 //add rconst + eor r9, r9, #0x00100000 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 20th round + strd r8, r9, [r0], #24 //store 2nd half tk for 20th round + ldm r0, {r6-r9} //load tk + bl p6 //apply the permutation 6 times + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #10 //ror and mask to match fixslicing + and r12, r10, r7, ror #10 //ror and mask to match fixslicing + eor r11, r11, #0x01000000 //add rconst + eor r12, r12, #0x01000000 //add rconst + strd r11, r12, [r0], #8 //store 1st half tk for 22th round + and r11, r10, r8, ror #10 //ror and mask to match fixslicing + and r12, r10, r9, ror #10 //ror and mask to match fixslicing + eor r11, r11, #0x00400000 //add rconst + eor r11, r11, #0x00001000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 22th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #12 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #28 + and r11, r10, r7, ror #12 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #28 + and r11, r10, r8, ror #12 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #28 + and r11, r10, r9, ror #12 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #28 //ror and masks to match fixslicing --- + eor r6, r6, #0x00000400 //add rconst + eor r8, r8, #0x00004000 //add rconst + eor r9, r9, #0x01000000 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 23th round + strd r6, r7, [r0], #8 //store 2nd half tk for 23th round + ldm r0, {r6-r9} //load tk + bl p8 //apply the permutation 8 times + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6 //ror and mask to match fixslicing + and r12, r10, r7 //ror and mask to match fixslicing + strd r11, r12, [r0, #24] //store 2nd half tk for 25th round + and r11, r10, r8 //ror and mask to match fixslicing + and r12, r10, r9 //ror and mask to match fixslicing + eor r11, r11, #0x00000014 //add rconst + eor r12, r12, #0x00000040 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 25th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #30 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #22 + and r11, r10, r7, ror #30 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #22 + and r11, r10, r8, ror #30 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #22 + and r11, r10, r9, ror #30 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #22 //ror and masks to match fixslicing --- + eor r8, r8, #0x00010400 + eor r9, r9, #0x00000400 + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 24th round + strd r8, r9, [r0], #24 //store 2nd half tk for 24th round + ldm r0, {r6-r9} //load tk + bl p10 //apply the permutation 10 times + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #26 //ror and mask to match fixslicing + and r12, r10, r7, ror #26 //ror and mask to match fixslicing + strd r11, r12, [r0], #8 //store 1st half tk for 26th round + and r11, r10, r8, ror #26 //ror and mask to match fixslicing + and r12, r10, r9, ror #26 //ror and mask to match fixslicing + eor r11, r11, #0x10000000 //add rconst + eor r11, r11, #0x00000100 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 26th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #28 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #12 + and r11, r10, r7, ror #28 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #12 + and r11, r10, r8, ror #28 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #12 + and r11, r10, r9, ror #28 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #12 //ror and masks to match fixslicing --- + eor r7, r7, #0x04000000 //add rconst + eor r8, r8, #0x40000000 //add rconst + eor r9, r9, #0x04000000 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 27th round + strd r6, r7, [r0], #8 //store 2nd half tk for 27th round + ldm r0, {r6-r9} //load tk + bl p12 //apply the permutation 4 times + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6, ror #16 //ror and mask to match fixslicing + and r12, r10, r7, ror #16 //ror and mask to match fixslicing + eor r12, r12, #0x00400000 //add rconst + strd r11, r12, [r0, #24] //store 2nd half tk for 29th round + and r11, r10, r8, ror #16 //ror and mask to match fixslicing + and r12, r10, r9, ror #16 //ror and mask to match fixslicing + eor r11, r11, #0x00440000 //add rconst + eor r12, r12, #0x00500000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 29th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #14 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #6 + and r11, r10, r7, ror #14 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #6 + and r11, r10, r8, ror #14 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #6 + and r11, r10, r9, ror #14 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #6 //ror and masks to match fixslicing --- + eor r6, r6, #0x00100000 //add rconst + eor r8, r8, #0x00100000 //add rconst + eor r8, r8, #0x00000001 //add rconst + eor r9, r9, #0x00100000 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 28th round + strd r8, r9, [r0], #24 //store 2nd half tk for 28th round + ldm r0, {r6-r9} //load tk + bl p14 //apply the permutation 6 times + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #10 //ror and mask to match fixslicing + and r12, r10, r7, ror #10 //ror and mask to match fixslicing + eor r11, r11, #0x01000000 //add rconst + eor r12, r12, #0x01000000 //add rconst + strd r11, r12, [r0], #8 //store 1st half tk for 30th round + and r11, r10, r8, ror #10 //ror and mask to match fixslicing + and r12, r10, r9, ror #10 //ror and mask to match fixslicing + eor r11, r11, #0x01400000 //add rconst + eor r11, r11, #0x00001000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 30th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #12 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #28 + and r11, r10, r7, ror #12 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #28 + and r11, r10, r8, ror #12 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #28 + and r11, r10, r9, ror #12 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #28 //ror and masks to match fixslicing --- + eor r6, r6, #0x00000400 //add rconst + eor r7, r7, #0x00000400 //add rconst + eor r8, r8, #0x00004000 //add rconst + eor r9, r9, #0x01000000 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 31th round + strd r6, r7, [r0], #8 //store 2nd half tk for 31th round + ldm r0, {r6-r9} //load tk + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6 //ror and mask to match fixslicing + and r12, r10, r7 //ror and mask to match fixslicing + strd r11, r12, [r0, #24] //store 2nd half tk for 33th round + and r11, r10, r8 //ror and mask to match fixslicing + and r12, r10, r9 //ror and mask to match fixslicing + eor r11, r11, #0x00000014 //add rconst + eor r12, r12, #0x00000050 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 33th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #30 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #22 + and r11, r10, r7, ror #30 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #22 + and r11, r10, r8, ror #30 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #22 + and r11, r10, r9, ror #30 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #22 //ror and masks to match fixslicing --- + eor r6 ,r6, #0x00000010 + eor r8, r8, #0x00010400 + eor r9, r9, #0x00000400 + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 32th round + strd r8, r9, [r0], #24 //store 2nd half tk for 32th round + ldm r0, {r6-r9} //load tk + bl p2 //apply the permutation twice + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #26 //ror and mask to match fixslicing + and r12, r10, r7, ror #26 //ror and mask to match fixslicing + strd r11, r12, [r0], #8 //store 1st half tk for 34th round + and r11, r10, r8, ror #26 //ror and mask to match fixslicing + and r12, r10, r9, ror #26 //ror and mask to match fixslicing + eor r11, r11, #0x10000000 //add rconst + eor r11, r11, #0x00000140 //add rconst + eor r12, r12, #0x00000100 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 34th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #28 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #12 + and r11, r10, r7, ror #28 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #12 + and r11, r10, r8, ror #28 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #12 + and r11, r10, r9, ror #28 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #12 //ror and masks to match fixslicing --- + eor r7, r7, #0x04000000 //add rconst + eor r8, r8, #0x44000000 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 35th round + strd r6, r7, [r0], #8 //store 2nd half tk for 35th round + ldm r0, {r6-r9} //load tk + bl p4 //apply the permutation 4 times + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6, ror #16 //ror and mask to match fixslicing + and r12, r10, r7, ror #16 //ror and mask to match fixslicing + eor r11, r11, #0x00400000 //add rconst + strd r11, r12, [r0, #24] //store 2nd half tk for 37th round + and r11, r10, r8, ror #16 //ror and mask to match fixslicing + and r12, r10, r9, ror #16 //ror and mask to match fixslicing + eor r11, r11, #0x00440000 //add rconst + eor r12, r12, #0x00500000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 37th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #14 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #6 + and r11, r10, r7, ror #14 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #6 + and r11, r10, r8, ror #14 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #6 + and r11, r10, r9, ror #14 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #6 //ror and masks to match fixslicing --- + eor r6, r6, #0x00100000 //add rconst + eor r7, r7, #0x00100000 //add rconst + eor r8, r8, #0x00000001 //add rconst + eor r9, r9, #0x00100000 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 36th round + strd r8, r9, [r0], #24 //store 2nd half tk for 36th round + ldm r0, {r6-r9} //load tk + bl p6 //apply the permutation 6 times + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #10 //ror and mask to match fixslicing + and r12, r10, r7, ror #10 //ror and mask to match fixslicing + eor r12, r12, #0x01000000 //add rconst + strd r11, r12, [r0], #8 //store 1st half tk for 38th round + and r11, r10, r8, ror #10 //ror and mask to match fixslicing + and r12, r10, r9, ror #10 //ror and mask to match fixslicing + eor r11, r11, #0x01400000 //add rconst + eor r11, r11, #0x00001000 //add rconst + eor r12, r12, #0x00400000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 38th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #12 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #28 + and r11, r10, r7, ror #12 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #28 + and r11, r10, r8, ror #12 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #28 + and r11, r10, r9, ror #12 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #28 //ror and masks to match fixslicing --- + eor r6, r6, #0x00000400 //add rconst + eor r7, r7, #0x00000400 //add rconst + eor r8, r8, #0x01000000 + eor r8, r8, #0x00004000 //add rconst + eor r9, r9, #0x00000400 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 39th round + strd r6, r7, [r0], #8 //store 2nd half tk for 39th round + ldm r0, {r6-r9} //load tk + bl p8 //apply the permutation 8 times + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6 //ror and mask to match fixslicing + and r12, r10, r7 //ror and mask to match fixslicing + eor r12, r12, #0x00000040 //add rconst + strd r11, r12, [r0, #24] //store 2nd half tk for 41th round + and r11, r10, r8 //ror and mask to match fixslicing + and r12, r10, r9 //ror and mask to match fixslicing + eor r11, r11, #0x00000014 //add rconst + eor r12, r12, #0x00000010 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 41th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #30 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #22 + and r11, r10, r7, ror #30 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #22 + and r11, r10, r8, ror #30 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #22 + and r11, r10, r9, ror #30 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #22 //ror and masks to match fixslicing --- + eor r6, r6, #0x00000010 + eor r8, r8, #0x00010000 + eor r8, r8, #0x00000010 + eor r9, r9, #0x00000400 + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 40th round + strd r8, r9, [r0], #24 //store 2nd half tk for 40th round + ldm r0, {r6-r9} //load tk + bl p10 //apply the permutation 10 times + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #26 //ror and mask to match fixslicing + and r12, r10, r7, ror #26 //ror and mask to match fixslicing + eor r11, r11, #0x00000100 //add rconst + strd r11, r12, [r0], #8 //store 1st half tk for 42th round + and r11, r10, r8, ror #26 //ror and mask to match fixslicing + and r12, r10, r9, ror #26 //ror and mask to match fixslicing + eor r11, r11, #0x10000000 //add rconst + eor r11, r11, #0x00000040 //add rconst + eor r12, r12, #0x00000100 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 42th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #28 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #12 + and r11, r10, r7, ror #28 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #12 + and r11, r10, r8, ror #28 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #12 + and r11, r10, r9, ror #28 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #12 //ror and masks to match fixslicing --- + eor r8, r8, #0x44000000 //add rconst + eor r9, r9, #0x00000100 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 43th round + strd r6, r7, [r0], #8 //store 2nd half tk for 43th round + ldm r0, {r6-r9} //load tk + bl p12 //apply the permutation 4 times + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6, ror #16 //ror and mask to match fixslicing + and r12, r10, r7, ror #16 //ror and mask to match fixslicing + eor r11, r11, #0x00400000 //add rconst + strd r11, r12, [r0, #24] //store 2nd half tk for 45th round + and r11, r10, r8, ror #16 //ror and mask to match fixslicing + and r12, r10, r9, ror #16 //ror and mask to match fixslicing + eor r11, r11, #0x00040000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 45th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #14 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #6 + and r11, r10, r7, ror #14 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #6 + and r11, r10, r8, ror #14 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #6 + and r11, r10, r9, ror #14 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #6 //ror and masks to match fixslicing --- + eor r7, r7, #0x00100000 //add rconst + eor r8, r8, #0x04000000 //add rconst + eor r8, r8, #0x00000001 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 44th round + strd r8, r9, [r0], #24 //store 2nd half tk for 44th round + ldm r0, {r6-r9} //load tk + bl p14 //apply the permutation 6 times + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #10 //ror and mask to match fixslicing + and r12, r10, r7, ror #10 //ror and mask to match fixslicing + strd r11, r12, [r0], #8 //store 1st half tk for 46th round + and r11, r10, r8, ror #10 //ror and mask to match fixslicing + and r12, r10, r9, ror #10 //ror and mask to match fixslicing + eor r11, r11, #0x00001000 //add rconst + eor r12, r12, #0x01400000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 46th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #12 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #28 + and r11, r10, r7, ror #12 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #28 + and r11, r10, r8, ror #12 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #28 + and r11, r10, r9, ror #12 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #28 //ror and masks to match fixslicing --- + eor r8, r8, #0x01000000 //add rconst + eor r8, r8, #0x00004400 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 47th round + strd r6, r7, [r0], #8 //store 2nd half tk for 47th round + ldm r0, {r6-r9} //load tk + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6 //ror and mask to match fixslicing + and r12, r10, r7 //ror and mask to match fixslicing + eor r11, r11, #0x00000040 //add rconst + strd r11, r12, [r0, #24] //store 2nd half tk for 49th round + and r11, r10, r8 //ror and mask to match fixslicing + and r12, r10, r9 //ror and mask to match fixslicing + eor r11, r11, #0x00000004 //add rconst + eor r12, r12, #0x00000040 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 49th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #30 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #22 + and r11, r10, r7, ror #30 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #22 + and r11, r10, r8, ror #30 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #22 + and r11, r10, r9, ror #30 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #22 //ror and masks to match fixslicing --- + eor r7 ,r7, #0x00000010 + eor r8, r8, #0x00010000 + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 48th round + strd r8, r9, [r0], #24 //store 2nd half tk for 48th round + ldm r0, {r6-r9} //load tk + bl p2 //apply the permutation twice + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #26 //ror and mask to match fixslicing + and r12, r10, r7, ror #26 //ror and mask to match fixslicing + strd r11, r12, [r0], #8 //store 1st half tk for 50th round + and r11, r10, r8, ror #26 //ror and mask to match fixslicing + and r12, r10, r9, ror #26 //ror and mask to match fixslicing + eor r11, r11, #0x10000000 //add rconst + eor r11, r11, #0x00000100 //add rconst + eor r12, r12, #0x00000140 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 50th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #28 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #12 + and r11, r10, r7, ror #28 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #12 + and r11, r10, r8, ror #28 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #12 + and r11, r10, r9, ror #28 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #12 //ror and masks to match fixslicing --- + eor r7, r7, #0x04000000 //add rconst + eor r8, r8, #0x44000000 //add rconst + eor r8, r8, #0x00000100 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 51th round + strd r6, r7, [r0], #8 //store 2nd half tk for 51th round + ldm r0, {r6-r9} //load tk + bl p4 //apply the permutation 4 times + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6, ror #16 //ror and mask to match fixslicing + and r12, r10, r7, ror #16 //ror and mask to match fixslicing + eor r11, r11, #0x00400000 //add rconst + strd r11, r12, [r0, #24] //store 2nd half tk for 53th round + and r11, r10, r8, ror #16 //ror and mask to match fixslicing + and r12, r10, r9, ror #16 //ror and mask to match fixslicing + eor r11, r11, #0x00040000 //add rconst + eor r12, r12, #0x00500000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 53th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #14 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #6 + and r11, r10, r7, ror #14 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #6 + and r11, r10, r8, ror #14 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #6 + and r11, r10, r9, ror #14 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #6 //ror and masks to match fixslicing --- + eor r6, r6, #0x00100000 //add rconst + eor r7, r7, #0x00100000 //add rconst + eor r8, r8, #0x00000001 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 52th round + strd r8, r9, [r0], #24 //store 2nd half tk for 52th round + ldm r0, {r6-r9} //load tk + bl p6 //apply the permutation 6 times + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #10 //ror and mask to match fixslicing + and r12, r10, r7, ror #10 //ror and mask to match fixslicing + strd r11, r12, [r0], #8 //store 1st half tk for 54th round + and r11, r10, r8, ror #10 //ror and mask to match fixslicing + and r12, r10, r9, ror #10 //ror and mask to match fixslicing + eor r11, r11, #0x01400000 //add rconst + eor r11, r11, #0x00001000 //add rconst + eor r12, r12, #0x00400000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 54th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #12 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #28 + and r11, r10, r7, ror #12 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #28 + and r11, r10, r8, ror #12 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #28 + and r11, r10, r9, ror #12 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #28 //ror and masks to match fixslicing --- + eor r7, r7, #0x00000400 //add rconst + eor r8, r8, #0x01000000 + eor r8, r8, #0x00004000 //add rconst + eor r9, r9, #0x00000400 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 55th round + strd r6, r7, [r0], #8 //store 2nd half tk for 55th round + ldm r0, {r6-r9} //load tk + bl p8 //apply the permutation 8 times + movw r10, #0x3030 + movt r10, #0x3030 //r10<- 0x30303030 + and r11, r10, r6, ror #30 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #22 + and r11, r10, r7, ror #30 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #22 + and r11, r10, r8, ror #30 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #22 + and r11, r10, r9, ror #30 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #22 //ror and masks to match fixslicing --- + eor r6, r6, #0x00000010 + eor r8, r8, #0x00010000 + eor r8, r8, #0x00000010 + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 56th round + strd r8, r9, [r0], #24 //store 2nd half tk for 56th round + add.w sp, #4 + pop {r0-r12, lr} + bx lr + +/****************************************************************************** +* Applies the permutations P^2, ..., P^14 for rounds 0 to 16. Since P^16=Id, we +* don't need more calculations as no LFSR is applied to TK1. +******************************************************************************/ +@ void tkschedule_perm_tk1(u32* tk, const u8* key) +.global tkschedule_perm_tk1 +.type tkschedule_perm_tk1,%function +.align 2 +tkschedule_perm_tk1: + push {r0-r12, lr} + ldr.w r3, [r1, #8] //load tk1 (3rd word) + ldr.w r4, [r1, #4] //load tk1 (2nd word) + ldr.w r5, [r1, #12] //load tk1 (4th word) + ldr.w r2, [r1] //load tk1 (1st word) + movw r10, #0x0a0a + movt r10, #0x0a0a //r6 <- 0x0a0a0a0a + movw r11, #0x3030 + movt r11, #0x3030 //r7 <- 0x30303030 + bl packing //pack tk1 + mov r6, r2 //move tk1 from r2-r5 to r6-r9 + mov r7, r3 //move tk1 from r2-r5 to r6-r9 + mov r8, r4 //move tk1 from r2-r5 to r6-r9 + mov r9, r5 //move tk1 from r2-r5 to r6-r9 + movw r2, #0xf0f0 + movt r2, #0xf0f0 //r2<- 0xf0f0f0f0 + and r11, r8, r2 //tk &= 0xf0f0f0f0 (3rd word) + and r12, r9, r2 //tk &= 0xf0f0f0f0 (4th word) + strd r11, r12, [r0], #8 //store 1st half tk for 1st round + and r11, r6, r2 //tk &= 0xf0f0f0f0 (1st word) + and r12, r7, r2 //tk &= 0xf0f0f0f0 (2nd word) + strd r11, r12, [r0], #8 //store 2nd half tk for 1st round + + bl p2 //apply the permutation twice + movw r3, #0x0303 + movt r3, #0x0303 //r3<- 0x03030303 + and r11, r3, r6, ror #28 //--- ror and masks to match fixslicing + and r12, r6, r3, lsl #6 + orr r12, r11, r12, ror #12 + str.w r12, [r0, #8] + and r11, r3, r7, ror #28 + and r12, r7, r3, lsl #6 + orr r12, r11, r12, ror #12 + str.w r12, [r0, #12] + and r11, r3, r9, ror #28 + and r12, r9, r3, lsl #6 + orr r12, r11, r12, ror #12 + str.w r12, [r0, #4] + and r11, r3, r8, ror #28 + and r12, r8, r3, lsl #6 + orr r12, r11, r12, ror #12 + str.w r12, [r0], #16 //ror and masks to match fixslicing --- + bl p2 //apply the permutation 4 times + and r11, r2, r6, ror #16 //ror and mask to match fixslicing + and r12, r2, r7, ror #16 //ror and mask to match fixslicing + strd r11, r12, [r0, #8] //store 2nd half tk for 5th round + and r11, r2, r8, ror #16 //ror and mask to match fixslicing + and r12, r2, r9, ror #16 //ror and mask to match fixslicing + strd r11, r12, [r0], #16 //store 1st half tk for 5th round + bl p2 //apply the permutation 6 times + and r11, r3, r6, ror #12 //--- ror and masks to match fixslicing + and r12, r6, r3, lsl #6 + orr r12, r11, r12, ror #28 + str.w r12, [r0, #8] + and r11, r3, r7, ror #12 + and r12, r7, r3, lsl #6 + orr r12, r11, r12, ror #28 + str.w r12, [r0, #12] + and r11, r3, r9, ror #12 + and r12, r9, r3, lsl #6 + orr r12, r11, r12, ror #28 + str.w r12, [r0, #4] + and r11, r3, r8, ror #12 + and r12, r8, r3, lsl #6 + orr r12, r11, r12, ror #28 + str.w r12, [r0], #16 //ror and masks to match fixslicing --- + bl p2 //apply the permutation 8 times + and r11, r2, r6 //ror and mask to match fixslicing + and r12, r2, r7 //ror and mask to match fixslicing + strd r11, r12, [r0, #8] //store 2nd half tk for 9th round + and r11, r2, r8 //ror and mask to match fixslicing + and r12, r2, r9 //ror and mask to match fixslicing + strd r11, r12, [r0], #16 //store 1st half tk for 9th round + bl p2 //apply the permutation 10 + and r11, r3, r6, ror #28 //--- ror and masks to match fixslicing + and r12, r6, r3, lsl #6 + orr r12, r11, r12, ror #12 + str.w r12, [r0, #8] + and r11, r3, r7, ror #28 + and r12, r7, r3, lsl #6 + orr r12, r11, r12, ror #12 + str.w r12, [r0, #12] + and r11, r3, r9, ror #28 + and r12, r9, r3, lsl #6 + orr r12, r11, r12, ror #12 + str.w r12, [r0, #4] + and r11, r3, r8, ror #28 + and r12, r8, r3, lsl #6 + orr r12, r11, r12, ror #12 + str.w r12, [r0], #16 //ror and masks to match fixslicing --- + bl p2 //apply the permutation 12 times + and r11, r2, r6, ror #16 //ror and mask to match fixslicing + and r12, r2, r7, ror #16 //ror and mask to match fixslicing + strd r11, r12, [r0, #8] //store 2nd half tk for 5th round + and r11, r2, r8, ror #16 //ror and mask to match fixslicing + and r12, r2, r9, ror #16 //ror and mask to match fixslicing + strd r11, r12, [r0], #16 //store 1st half tk for 5th round + bl p2 //apply the permutation 14 times + and r11, r3, r6, ror #12 //--- ror and masks to match fixslicing + and r12, r6, r3, lsl #6 + orr r12, r11, r12, ror #28 + str.w r12, [r0, #8] + and r11, r3, r7, ror #12 + and r12, r7, r3, lsl #6 + orr r12, r11, r12, ror #28 + str.w r12, [r0, #12] + and r11, r3, r9, ror #12 + and r12, r9, r3, lsl #6 + orr r12, r11, r12, ror #28 + str.w r12, [r0, #4] + and r11, r3, r8, ror #12 + and r12, r8, r3, lsl #6 + orr r12, r11, r12, ror #28 + str.w r12, [r0] //ror and masks to match fixslicing --- + pop {r0-r12, lr} + bx lr + +.align 2 +quadruple_round: + orr r8, r2, r3 + eor r5, r5, r8 + mvn r5, r5 + eor r8, r3, r4, lsr #1 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8, lsl #1 //SWAPMOVE(r4, r3, 0x55555555, 1); + eor r8, r4, r5, lsr #1 + and r8, r8, r6 + eor r4, r4, r8 + eor r5, r5, r8, lsl #1 //SWAPMOVE(r5, r4, 0x55555555, 1); + orr r8, r4, r5 + eor r3, r3, r8 + mvn r3, r3 + eor r8, r2, r3, lsr #1 + and r8, r8, r6 + eor r2, r2, r8 + eor r3, r3, r8, lsl #1 //SWAPMOVE(r3, r2, 0x55555555, 1); + eor r8, r5, r2, lsr #1 + and r8, r8, r6 + eor r5, r5, r8 + eor r2, r2, r8, lsl #1 //SWAPMOVE(r2, r5, 0x55555555, 1); + orr r8, r2, r3 + eor r5, r5, r8 + mvn r5, r5 + eor r8, r3, r4, lsr #1 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8, lsl #1 //SWAPMOVE(r4, r3, 0x55555555, 1); + eor r8, r4, r5, lsr #1 + and r8, r8, r6 + eor r4, r4, r8 + eor r5, r5, r8, lsl #1 //SWAPMOVE(r5, r4, 0x55555555, 1); + orr r8, r4, r5 + eor r3, r3, r8 + eor r8, r2, r5 + and r8, r8, r6 + eor r2, r2, r8 + eor r5, r5, r8 //SWAPMOVE(r5, r2, 0x55555555, 0); + ldmia.w r1!, {r8-r11} //load rkeys in r8,...,r11 + eor r2, r2, r8 //add rtk_2_3 + rconst + eor r3, r3, r9 //add rtk_2_3 + rconst + eor r4, r4, r10 //add rtk_2_3 + rconst + eor r5, r5, r11 //add rtk_2_3 + rconst + ldmia.w r0!,{r8-r11} + eor r2, r2, r8 //add rtk_1 + eor r3, r3, r9 //add rtk_1 + eor r4, r4, r10 //add rtk_1 + eor r5, r5, r11 //add rtk_1 + and r8, r7, r2, ror #30 // --- mixcolumns 0 --- + eor r2, r2, r8, ror #24 + and r8, r7, r2, ror #18 + eor r2, r2, r8, ror #2 + and r8, r7, r2, ror #6 + eor r2, r2, r8, ror #4 + and r8, r7, r3, ror #30 + eor r3, r3, r8, ror #24 + and r8, r7, r3, ror #18 + eor r3, r3, r8, ror #2 + and r8, r7, r3, ror #6 + eor r3, r3, r8, ror #4 + and r8, r7, r4, ror #30 + eor r4, r4, r8, ror #24 + and r8, r7, r4, ror #18 + eor r4, r4, r8, ror #2 + and r8, r7, r4, ror #6 + eor r4, r4, r8, ror #4 + and r8, r7, r5, ror #30 + eor r5, r5, r8, ror #24 + and r8, r7, r5, ror #18 + eor r5, r5, r8, ror #2 + and r8, r7, r5, ror #6 + eor r5, r5, r8, ror #4 + orr r8, r4, r5 + eor r3, r3, r8 + mvn r3, r3 + eor r8, r2, r3, lsr #1 + and r8, r8, r6 + eor r2, r2, r8 + eor r3, r3, r8, lsl #1 //SWAPMOVE(r3, r2, 0x55555555, 1); + eor r8, r5, r2, lsr #1 + and r8, r8, r6 + eor r5, r5, r8 + eor r2, r2, r8, lsl #1 //SWAPMOVE(r2, r5, 0x55555555, 1); + orr r8, r2, r3 + eor r5, r5, r8 + mvn r5, r5 + eor r8, r3, r4, lsr #1 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8, lsl #1 //SWAPMOVE(r4, r3, 0x55555555, 1); + eor r8, r4, r5, lsr #1 + and r8, r8, r6 + eor r4, r4, r8 + eor r5, r5, r8, lsl #1 //SWAPMOVE(r5, r4, 0x55555555, 1); + orr r8, r4, r5 + eor r3, r3, r8 + mvn r3, r3 + eor r8, r2, r3, lsr #1 + and r8, r8, r6 + eor r2, r2, r8 + eor r3, r3, r8, lsl #1 //SWAPMOVE(r3, r2, 0x55555555, 1); + eor r8, r5, r2, lsr #1 + and r8, r8, r6 + eor r5, r5, r8 + eor r2, r2, r8, lsl #1 //SWAPMOVE(r2, r5, 0x55555555, 1); + orr r8, r2, r3 + eor r5, r5, r8 + eor r8, r3, r4 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8 //SWAPMOVE(r4, r3, 0x55555555, 0); + ldmia.w r1!, {r8-r11} //load rkeys in r8,...,r11 + eor r2, r2, r8 //add rkey + rconst + eor r3, r3, r9 //add rkey + rconst + eor r4, r4, r10 //add rkey + rconst + eor r5, r5, r11 //add rkey + rconst + and r8, r7, r2, ror #16 // --- mixcolumns 1 --- + eor r2, r2, r8, ror #30 + and r8, r7, r2, ror #28 + eor r2, r2, r8 + and r8, r7, r2, ror #16 + eor r2, r2, r8, ror #2 + and r8, r7, r3, ror #16 + eor r3, r3, r8, ror #30 + and r8, r7, r3, ror #28 + eor r3, r3, r8 + and r8, r7, r3, ror #16 + eor r3, r3, r8, ror #2 + and r8, r7, r4, ror #16 + eor r4, r4, r8, ror #30 + and r8, r7, r4, ror #28 + eor r4, r4, r8 + and r8, r7, r4, ror #16 + eor r4, r4, r8, ror #2 + and r8, r7, r5, ror #16 + eor r5, r5, r8, ror #30 + and r8, r7, r5, ror #28 + eor r5, r5, r8 + and r8, r7, r5, ror #16 + eor r5, r5, r8, ror #2 + orr r8, r2, r3 + eor r5, r5, r8 + mvn r5, r5 + eor r8, r3, r4, lsr #1 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8, lsl #1 //SWAPMOVE(r4, r3, 0x55555555, 1); + eor r8, r4, r5, lsr #1 + and r8, r8, r6 + eor r4, r4, r8 + eor r5, r5, r8, lsl #1 //SWAPMOVE(r5, r4, 0x55555555, 1); + orr r8, r4, r5 + eor r3, r3, r8 + mvn r3, r3 + eor r8, r2, r3, lsr #1 + and r8, r8, r6 + eor r2, r2, r8 + eor r3, r3, r8, lsl #1 //SWAPMOVE(r3, r2, 0x55555555, 1); + eor r8, r5, r2, lsr #1 + and r8, r8, r6 + eor r5, r5, r8 + eor r2, r2, r8, lsl #1 //SWAPMOVE(r2, r5, 0x55555555, 1); + orr r8, r2, r3 + eor r5, r5, r8 + mvn r5, r5 + eor r8, r3, r4, lsr #1 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8, lsl #1 //SWAPMOVE(r4, r3, 0x55555555, 1); + eor r8, r4, r5, lsr #1 + and r8, r8, r6 + eor r4, r4, r8 + eor r5, r5, r8, lsl #1 //SWAPMOVE(r5, r4, 0x55555555, 1); + orr r8, r4, r5 + eor r3, r3, r8 + eor r8, r2, r5 + and r8, r8, r6 + eor r2, r2, r8 + eor r5, r5, r8 //SWAPMOVE(r5, r2, 0x55555555, 0); + ldmia.w r1!, {r8-r11} //load rkeys in r8,...,r11 + eor r2, r2, r8 //add rtk_2_3 + rconst + eor r3, r3, r9 //add rtk_2_3 + rconst + eor r4, r4, r10 //add rtk_2_3 + rconst + eor r5, r5, r11 //add rtk_2_3 + rconst + ldmia.w r0!,{r8-r11} + eor r2, r2, r8 //add rtk_1 + eor r3, r3, r9 //add rtk_1 + eor r4, r4, r10 //add rtk_1 + eor r5, r5, r11 //add rtk_1 + and r8, r7, r2, ror #10 // --- mixcolumns 2 --- + eor r2, r2, r8, ror #4 + and r8, r7, r2, ror #6 + eor r2, r2, r8, ror #6 + and r8, r7, r2, ror #26 + eor r2, r2, r8 + and r8, r7, r3, ror #10 + eor r3, r3, r8, ror #4 + and r8, r7, r3, ror #6 + eor r3, r3, r8, ror #6 + and r8, r7, r3, ror #26 + eor r3, r3, r8 + and r8, r7, r4, ror #10 + eor r4, r4, r8, ror #4 + and r8, r7, r4, ror #6 + eor r4, r4, r8, ror #6 + and r8, r7, r4, ror #26 + eor r4, r4, r8 + and r8, r7, r5, ror #10 + eor r5, r5, r8, ror #4 + and r8, r7, r5, ror #6 + eor r5, r5, r8, ror #6 + and r8, r7, r5, ror #26 + eor r5, r5, r8 + orr r8, r4, r5 + eor r3, r3, r8 + mvn r3, r3 + eor r8, r2, r3, lsr #1 + and r8, r8, r6 + eor r2, r2, r8 + eor r3, r3, r8, lsl #1 //SWAPMOVE(r3, r2, 0x55555555, 1); + eor r8, r5, r2, lsr #1 + and r8, r8, r6 + eor r5, r5, r8 + eor r2, r2, r8, lsl #1 //SWAPMOVE(r2, r5, 0x55555555, 1); + orr r8, r2, r3 + eor r5, r5, r8 + mvn r5, r5 + eor r8, r3, r4, lsr #1 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8, lsl #1 //SWAPMOVE(r4, r3, 0x55555555, 1); + eor r8, r4, r5, lsr #1 + and r8, r8, r6 + eor r4, r4, r8 + eor r5, r5, r8, lsl #1 //SWAPMOVE(r5, r4, 0x55555555, 1); + orr r8, r4, r5 + eor r3, r3, r8 + mvn r3, r3 + eor r8, r2, r3, lsr #1 + and r8, r8, r6 + eor r2, r2, r8 + eor r3, r3, r8, lsl #1 //SWAPMOVE(r3, r2, 0x55555555, 1); + eor r8, r5, r2, lsr #1 + and r8, r8, r6 + eor r5, r5, r8 + eor r2, r2, r8, lsl #1 //SWAPMOVE(r2, r5, 0x55555555, 1); + orr r8, r2, r3 + eor r5, r5, r8 + eor r8, r3, r4 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8 //SWAPMOVE(r4, r3, 0x55555555, 0); + ldmia r1!, {r8-r11} //load rkeys in r8,...,r11 + eor r2, r2, r8 //add rkey + rconst + eor r3, r3, r9 //add rkey + rconst + eor r4, r4, r10 //add rkey + rconst + eor r5, r5, r11 //add rkey + rconst + and r8, r7, r2, ror #4 // --- mixcolumns 3 --- + eor r2, r2, r8, ror #26 + and r8, r7, r2 + eor r2, r2, r8, ror #4 + and r8, r7, r2, ror #4 + eor r2, r2, r8, ror #22 + and r8, r7, r3, ror #4 + eor r3, r3, r8, ror #26 + and r8, r7, r3 + eor r3, r3, r8, ror #4 + and r8, r7, r3, ror #4 + eor r3, r3, r8, ror #22 + and r8, r7, r4, ror #4 + eor r4, r4, r8, ror #26 + and r8, r7, r4 + eor r4, r4, r8, ror #4 + and r8, r7, r4, ror #4 + eor r4, r4, r8, ror #22 + and r8, r7, r5, ror #4 + eor r5, r5, r8, ror #26 + and r8, r7, r5 + eor r5, r5, r8, ror #4 + and r8, r7, r5, ror #4 + eor r5, r5, r8, ror #22 + bx lr + +/****************************************************************************** +* Encrypt a single block using fixsliced SKINNY-128-128. +******************************************************************************/ +@ void skinny128_384(u8* ctext, const u32* tk, const u8* ptext, const u32* rtk1) +.global skinny128_384 +.type skinny128_384,%function +.align 2 +skinny128_384: + push {r0-r12, r14} + mov.w r0, r3 + ldr.w r3, [r2, #8] + ldr.w r4, [r2, #4] + ldr.w r5, [r2, #12] + ldr.w r2, [r2] + movw r6, #0x0a0a + movt r6, #0x0a0a //r6 <- 0x0a0a0a0a + movw r7, #0x3030 + movt r7, #0x3030 //r7 <- 0x30303030 + eor r12, r2, r2, lsr #3 + and r12, r12, r6 + eor r2, r2, r12 + eor r2, r2, r12, lsl #3 //SWAPMOVE(r2, r2, 0x0a0a0a0a, 3) + eor r12, r3, r3, lsr #3 + and r12, r12, r6 + eor r3, r3, r12 + eor r3, r3, r12, lsl #3 //SWAPMOVE(r3, r3, 0x0a0a0a0a, 3) + eor r12, r4, r4, lsr #3 + and r12, r12, r6 + eor r4, r4, r12 + eor r4, r4, r12, lsl #3 //SWAPMOVE(r4, r4, 0x0a0a0a0a, 3) + eor r12, r5, r5, lsr #3 + and r12, r12, r6 + eor r5, r5, r12 + eor r5, r5, r12, lsl #3 //SWAPMOVE(r5, r5, 0x0a0a0a0a, 3) + eor r12, r2, r4, lsr #2 + and r12, r12, r7 + eor r2, r2, r12 + eor r4, r4, r12, lsl #2 //SWAPMOVE(r4, r2, 0x30303030, 2) + eor r12, r2, r3, lsr #4 + and r12, r12, r7, lsr #2 + eor r2, r2, r12 + eor r3, r3, r12, lsl #4 //SWAPMOVE(r3, r2, 0x0c0c0c0c, 4) + eor r12, r2, r5, lsr #6 + and r12, r12, r7, lsr #4 + eor r2, r2, r12 + eor r5, r5, r12, lsl #6 //SWAPMOVE(r5, r2, 0x03030303, 6) + eor r12, r4, r3, lsr #2 + and r12, r12, r7, lsr #2 + eor r4, r4, r12 + eor r3, r3, r12, lsl #2 //SWAPMOVE(r3, r4, 0x0c0c0c0c, 2) + eor r12, r4, r5, lsr #4 + and r12, r12, r7, lsr #4 + eor r4, r4, r12 + eor r5, r5, r12, lsl #4 //SWAPMOVE(r5, r4, 0x03030303, 4) + eor r12, r3, r5, lsr #2 + and r12, r12, r7, lsr #4 + eor r3, r3, r12 + eor r5, r5, r12, lsl #2 //SWAPMOVE(r5, r3, 0x03030303, 2) + movw r6, #0x5555 + movt r6, #0x5555 //r6 <- 0x55555555 + bl quadruple_round + bl quadruple_round + bl quadruple_round + bl quadruple_round + sub.w r0, #128 // rtk1 repeats every 16 rounds + bl quadruple_round + bl quadruple_round + bl quadruple_round + bl quadruple_round + sub.w r0, #128 // rtk1 repeats every 16 rounds + bl quadruple_round + bl quadruple_round + bl quadruple_round + bl quadruple_round + sub.w r0, #128 // rtk1 repeats every 16 rounds + bl quadruple_round + bl quadruple_round + movw r6, #0x0a0a + movt r6, #0x0a0a //r6 <- 0x0a0a0a0a + eor r10, r3, r5, lsr #2 + and r10, r10, r7, lsr #4 + eor r3, r3, r10 + eor r5, r5, r10, lsl #2 //SWAPMOVE(r5, r3, 0x03030303, 2) + eor r10, r4, r5, lsr #4 + and r10, r10, r7, lsr #4 + eor r4, r4, r10 + eor r5, r5, r10, lsl #4 //SWAPMOVE(r5, r4, 0x03030303, 4) + eor r10, r4, r3, lsr #2 + and r10, r10, r7, lsr #2 + eor r4, r4, r10 + eor r3, r3, r10, lsl #2 //SWAPMOVE(r3, r4, 0x0c0c0c0c, 2) + eor r10, r2, r5, lsr #6 + and r10, r10, r7, lsr #4 + eor r2, r2, r10 + eor r5, r5, r10, lsl #6 //SWAPMOVE(r5, r2, 0x03030303, 6) + eor r10, r2, r3, lsr #4 + and r10, r10, r7, lsr #2 + eor r2, r2, r10 + eor r3, r3, r10, lsl #4 //SWAPMOVE(r3, r2, 0x0c0c0c0c, 4) + eor r10, r2, r4, lsr #2 + and r10, r10, r7 + eor r2, r2, r10 + eor r4, r4, r10, lsl #2 //SWAPMOVE(r4, r2, 0x30303030, 2) + eor r10, r5, r5, lsr #3 + and r10, r10, r6 + eor r5, r5, r10 + eor r5, r5, r10, lsl #3 //SWAPMOVE(r5, r5, 0x0a0a0a0a, 3) + eor r10, r4, r4, lsr #3 + and r10, r10, r6 + eor r4, r4, r10 + eor r4, r4, r10, lsl #3 //SWAPMOVE(r4, r4, 0x0a0a0a0a, 3) + eor r10, r3, r3, lsr #3 + and r10, r10, r6 + eor r3, r3, r10 + eor r3, r3, r10, lsl #3 //SWAPMOVE(r3, r3, 0x0a0a0a0a, 3) + eor r10, r2, r2, lsr #3 + and r10, r10, r6 + eor r2, r2, r10 + eor r2, r2, r10, lsl #3 //SWAPMOVE(r2, r2, 0x0a0a0a0a, 3) + ldr.w r0, [sp], #4 + strd r2, r4, [r0] + strd r3, r5, [r0, #8] + pop {r1-r12,r14} + bx lr + \ No newline at end of file diff --git a/romulus/Implementations/crypto_aead/romulusm1v12/opt32/api.h b/romulus/Implementations/crypto_aead/romulusm1v12/opt32/api.h new file mode 100644 index 0000000..a4aa567 --- /dev/null +++ b/romulus/Implementations/crypto_aead/romulusm1v12/opt32/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/romulus/Implementations/crypto_aead/romulusm1v12/opt32/crypto_aead.h b/romulus/Implementations/crypto_aead/romulusm1v12/opt32/crypto_aead.h new file mode 100644 index 0000000..e2ca9b0 --- /dev/null +++ b/romulus/Implementations/crypto_aead/romulusm1v12/opt32/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 +); \ No newline at end of file diff --git a/romulus/Implementations/crypto_aead/romulusm1v12/opt32/encrypt.c b/romulus/Implementations/crypto_aead/romulusm1v12/opt32/encrypt.c new file mode 100644 index 0000000..5025354 --- /dev/null +++ b/romulus/Implementations/crypto_aead/romulusm1v12/opt32/encrypt.c @@ -0,0 +1,369 @@ +#include "skinny128.h" +#include "tk_schedule.h" +#include "romulus.h" +#include +#include + +static u8 final_ad_domain (unsigned long long adlen, unsigned long long mlen) { + u8 domain = 0; + u32 leftover; + //Determine which domain bits we need based on the length of the ad + if (adlen == 0) { + domain ^= 0x02; // No message, so only 1 block with padding + } else { + leftover = (u32)(adlen % (2 * BLOCKBYTES)); + if (leftover == 0) { // Even or odd ad length? + domain ^= 0x08; // Even with a full double block at the end + } else if (leftover < BLOCKBYTES) { + domain ^= 0x02; // Odd with a partial single block at the end + } else if (leftover > BLOCKBYTES) { + domain ^= 0x0A; // Even with a partial double block at the end + } + } + //Determine which domain bits we need based on the length of the message + if (mlen == 0) { + domain ^= 0x01; // No message, so only 1 block with padding + } else { + leftover = (unsigned)(mlen % (2 * BLOCKBYTES)); + if (leftover == 0) { // Even or odd message length? + domain ^= 0x04; // Even with a full double block at the end + } else if (leftover < BLOCKBYTES) { + domain ^= 0x01; // Odd with a partial single block at the end + } else if (leftover > BLOCKBYTES) { + domain ^= 0x05; // Even with a partial double block at the end + } + } + return domain; +} + +//Encryption and authentication using Romulus-N1 +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 tmp; + u64 tmp_mlen = mlen; + const u8* m_auth = m; + u8 final_domain = 0x30; + skinny_128_384_tks tks; + u8 state[BLOCKBYTES], pad[BLOCKBYTES]; + (void)nsec; + + // ----------------- Initialization ----------------- + *clen = mlen + TAGBYTES; + memset(tks.tk1, 0x00, KEYBYTES); + memset(state, 0x00, BLOCKBYTES); + tks.tk1[0] = 0x01; // Init the 56-bit LFSR counter + // ----------------- Initialization ----------------- + + // ----------------- Process the associated data ----------------- + final_domain ^= final_ad_domain(adlen, mlen); + SET_DOMAIN(tks, 0x28); + while (adlen > 2*BLOCKBYTES) { // Process double blocks but the last + UPDATE_CTR(tks.tk1); + XOR_BLOCK(state, state, ad); + precompute_rtk2_3(tks.rtk2_3, npub, k); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384(state, state, tks.rtk1, tks.rtk2_3); + UPDATE_CTR(tks.tk1); + ad += 2*BLOCKBYTES; + adlen -= 2*BLOCKBYTES; + } + // Pad and process the left-over blocks + if (adlen == 2*BLOCKBYTES) { // Left-over complete double block + UPDATE_CTR(tks.tk1); + XOR_BLOCK(state, state, ad); + precompute_rtk2_3(tks.rtk2_3, ad + BLOCKBYTES, k); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384(state, state, tks.rtk1, tks.rtk2_3); + UPDATE_CTR(tks.tk1); + } else if (adlen > BLOCKBYTES) { // Left-over partial double block + adlen -= BLOCKBYTES; + UPDATE_CTR(tks.tk1); + XOR_BLOCK(state, state, ad); + memcpy(pad, ad + BLOCKBYTES, adlen); + memset(pad + adlen, 0x00, 15 - adlen); + pad[15] = adlen; // Padding + precompute_rtk2_3(tks.rtk2_3, pad, k); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384(state, state, tks.rtk1, tks.rtk2_3); + UPDATE_CTR(tks.tk1); + } else { + SET_DOMAIN(tks, 0x2C); + UPDATE_CTR(tks.tk1); + if (adlen == BLOCKBYTES) { // Left-over complete single block + XOR_BLOCK(state, state, ad); + } else { // Left-over partial single block + for(int i =0; i < (int)adlen; i++) + state[i] ^= ad[i]; + state[15] ^= adlen; // Padding + } + if (tmp_mlen >= BLOCKBYTES) { + precompute_rtk2_3(tks.rtk2_3, m_auth, k); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384(state, state, tks.rtk1, tks.rtk2_3); + m_auth += BLOCKBYTES; + tmp_mlen -= BLOCKBYTES; + if (tmp_mlen > BLOCKBYTES) { + UPDATE_CTR(tks.tk1); + } + } else { + memcpy(pad, m_auth, tmp_mlen); + memset(pad + tmp_mlen, 0x00, BLOCKBYTES - tmp_mlen - 1); + pad[15] = (u8)tmp_mlen; // Padding + precompute_rtk2_3(tks.rtk2_3, pad, k); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384(state, state, tks.rtk1, tks.rtk2_3); + tmp_mlen = 0; + } + } + // Process all message double blocks except the last + SET_DOMAIN(tks, 0x2C); + while (tmp_mlen > 32) { + UPDATE_CTR(tks.tk1); + XOR_BLOCK(state, state, m_auth); + precompute_rtk2_3(tks.rtk2_3, m_auth + BLOCKBYTES, k); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384(state, state, tks.rtk1, tks.rtk2_3); + UPDATE_CTR(tks.tk1); + m_auth += 2 * BLOCKBYTES; + tmp_mlen -= 2 * BLOCKBYTES; + } + // Process the last message double block + if (tmp_mlen == 2 * BLOCKBYTES) { // Last message double block is full + UPDATE_CTR(tks.tk1); + XOR_BLOCK(state, state, m_auth); + precompute_rtk2_3(tks.rtk2_3, m_auth + BLOCKBYTES, k); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384(state, state, tks.rtk1, tks.rtk2_3); + } else if (tmp_mlen > BLOCKBYTES) { // Last message double block is partial + tmp_mlen -= BLOCKBYTES; + UPDATE_CTR(tks.tk1); + XOR_BLOCK(state, state, m_auth); + memcpy(pad, m_auth + BLOCKBYTES, tmp_mlen); + memset(pad + tmp_mlen, 0x00, BLOCKBYTES - tmp_mlen - 1); + pad[15] = (u8)tmp_mlen; // Padding + precompute_rtk2_3(tks.rtk2_3, pad, k); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384(state, state, tks.rtk1, tks.rtk2_3); + } else if (tmp_mlen == BLOCKBYTES) { // Last message single block is full + XOR_BLOCK(state, state, m_auth); + } else if (tmp_mlen > 0) { // Last message single block is partial + for(int i =0; i < (int)tmp_mlen; i++) + state[i] ^= m_auth[i]; + state[15] ^= (u8)tmp_mlen; // Padding + } + // Process the last partial block + SET_DOMAIN(tks, final_domain); + UPDATE_CTR(tks.tk1); + precompute_rtk2_3(tks.rtk2_3, npub, k); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384(state, state, tks.rtk1, tks.rtk2_3); + // ----------------- Process the associated data ----------------- + + + // ----------------- Generate the tag ----------------- + G(state,state); + memcpy(c + mlen, state, TAGBYTES); + // ----------------- Generate the tag ----------------- + + memset(tks.tk1, 0x00, KEYBYTES); + tks.tk1[0] = 0x01; // Init the 56-bit LFSR counter + if (mlen > 0) { + SET_DOMAIN(tks, 0x24); + while (mlen > BLOCKBYTES) { + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384(state, state, tks.rtk1, tks.rtk2_3); + RHO(state,c,m); + UPDATE_CTR(tks.tk1); + c += BLOCKBYTES; + m += BLOCKBYTES; + mlen -= BLOCKBYTES; + } + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384(state, state, tks.rtk1, tks.rtk2_3); + for(int i = 0; i < (int)mlen; i++) { + tmp = m[i]; // Use of tmp variable in case c = m + c[i] = m[i] ^ (state[i] >> 1) ^ (state[i] & 0x80) ^ (state[i] << 7); + state[i] ^= (u8)tmp; + } + state[15] ^= (u8)mlen; // Padding + } + + return 0; +} + +//Decryption and tag verification using Romulus-N1 +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 tmp; + u64 tmp_mlen; + u8 final_domain = 0x30; + u8* m_auth = m; + const u8* c_tmp = c; + skinny_128_384_tks tks; + u8 state[BLOCKBYTES], pad[BLOCKBYTES]; + (void)nsec; + + if (clen < TAGBYTES) + return -1; + + // ----------------- Initialization ----------------- + *mlen = clen - TAGBYTES; + memset(tks.tk1, 0x00, KEYBYTES); + tks.tk1[0] = 0x01; // Init the 56-bit LFSR counter + // ----------------- Initialization ----------------- + + // ----------------- Process the ciphertext ----------------- + clen -= TAGBYTES; + memcpy(state, c + clen, TAGBYTES); + tmp_mlen = clen; + if (tmp_mlen > 0) { + SET_DOMAIN(tks, 0x24); + precompute_rtk2_3(tks.rtk2_3, npub, k); + while (tmp_mlen > BLOCKBYTES) { + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384(state, state, tks.rtk1, tks.rtk2_3); + RHO_INV(state, c, m); + UPDATE_CTR(tks.tk1); + c += BLOCKBYTES; + m += BLOCKBYTES; + tmp_mlen -= BLOCKBYTES; + } + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384(state, state, tks.rtk1, tks.rtk2_3); + for(int i = 0; i < (int)tmp_mlen; i++) { + m[i] = c[i] ^ (state[i] >> 1) ^ (state[i] & 0x80) ^ (state[i] << 7); + state[i] ^= m[i]; + } + state[15] ^= (u8)tmp_mlen; // Padding + } + // ----------------- Process the ciphertext ----------------- + + // ----------------- Process the associated data ----------------- + memset(tks.tk1, 0x00, KEYBYTES); + tks.tk1[0] = 0x01; // Init the 56-bit LFSR counter + memset(state, 0x00, BLOCKBYTES); + final_domain ^= final_ad_domain(adlen, clen); + SET_DOMAIN(tks, 0x28); + while (adlen > 2*BLOCKBYTES) { // Process double blocks but the last + UPDATE_CTR(tks.tk1); + XOR_BLOCK(state, state, ad); + precompute_rtk2_3(tks.rtk2_3, ad + BLOCKBYTES, k); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384(state, state, tks.rtk1, tks.rtk2_3); + UPDATE_CTR(tks.tk1); + ad += 2*BLOCKBYTES; + adlen -= 2*BLOCKBYTES; + } + // Pad and process the left-over blocks + if (adlen == 2*BLOCKBYTES) { // Left-over complete double block + UPDATE_CTR(tks.tk1); + XOR_BLOCK(state, state, ad); + precompute_rtk2_3(tks.rtk2_3, ad + BLOCKBYTES, k); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384(state, state, tks.rtk1, tks.rtk2_3); + UPDATE_CTR(tks.tk1); + } else if (adlen > BLOCKBYTES) { // Left-over partial double block + adlen -= BLOCKBYTES; + UPDATE_CTR(tks.tk1); + XOR_BLOCK(state, state, ad); + memcpy(pad, ad + BLOCKBYTES, adlen); + memset(pad + adlen, 0x00, 15 - adlen); + pad[15] = adlen; // Padding + precompute_rtk2_3(tks.rtk2_3, pad, k); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384(state, state, tks.rtk1, tks.rtk2_3); + UPDATE_CTR(tks.tk1); + } else { + SET_DOMAIN(tks, 0x2C); + UPDATE_CTR(tks.tk1); + if (adlen == BLOCKBYTES) { // Left-over complete single block + XOR_BLOCK(state, state, ad); + } else { // Left-over partial single block + for(int i =0; i < (int)adlen; i++) + state[i] ^= ad[i]; + state[15] ^= adlen; // Padding + } + if (clen >= BLOCKBYTES) { + precompute_rtk2_3(tks.rtk2_3, m_auth, k); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384(state, state, tks.rtk1, tks.rtk2_3); + m_auth += BLOCKBYTES; + clen -= BLOCKBYTES; + if (clen > BLOCKBYTES) { + UPDATE_CTR(tks.tk1); + } + } else { + memcpy(pad, m_auth, clen); + memset(pad + clen, 0x00, BLOCKBYTES - clen - 1); + pad[15] = (u8)clen; // Padding + precompute_rtk2_3(tks.rtk2_3, pad, k); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384(state, state, tks.rtk1, tks.rtk2_3); + clen = 0; + } + } + // Process all message double blocks except the last + SET_DOMAIN(tks, 0x2C); + while (clen > 32) { + UPDATE_CTR(tks.tk1); + XOR_BLOCK(state, state, m_auth); + precompute_rtk2_3(tks.rtk2_3, m_auth + BLOCKBYTES, k); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384(state, state, tks.rtk1, tks.rtk2_3); + UPDATE_CTR(tks.tk1); + m_auth += 2 * BLOCKBYTES; + clen -= 2 * BLOCKBYTES; + } + // Process the last message double block + if (clen == 2 * BLOCKBYTES) { // Last message double block is full + UPDATE_CTR(tks.tk1); + XOR_BLOCK(state, state, m_auth); + precompute_rtk2_3(tks.rtk2_3, m_auth + BLOCKBYTES, k); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384(state, state, tks.rtk1, tks.rtk2_3); + } else if (clen > BLOCKBYTES) { // Last message double block is partial + clen -= BLOCKBYTES; + UPDATE_CTR(tks.tk1); + XOR_BLOCK(state, state, m_auth); + memcpy(pad, m_auth + BLOCKBYTES, clen); + memset(pad + clen, 0x00, BLOCKBYTES - clen - 1); + pad[15] = (u8)clen; // Padding + precompute_rtk2_3(tks.rtk2_3, pad, k); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384(state, state, tks.rtk1, tks.rtk2_3); + } else if (clen == BLOCKBYTES) { // Last message single block is full + XOR_BLOCK(state, state, m_auth); + } else if (clen > 0) { // Last message single block is partial + for(int i =0; i < (int)clen; i++) + state[i] ^= m[i]; + state[15] ^= (u8)clen; // Padding + } + // Process the last partial block + SET_DOMAIN(tks, final_domain); + UPDATE_CTR(tks.tk1); + precompute_rtk2_3(tks.rtk2_3, npub, k); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384(state, state, tks.rtk1, tks.rtk2_3); + // ----------------- Process the associated data ----------------- + + // ----------------- Generate and check the tag ----------------- + G(state,state); + tmp = 0; + for(int i = 0; i < TAGBYTES; i++) + tmp |= state[i] ^ c_tmp[*mlen+i]; //constant-time tag comparison + // ----------------- Generate and check the tag ----------------- + + return tmp; +} \ No newline at end of file diff --git a/romulus/Implementations/crypto_aead/romulusm1v12/opt32/romulus.h b/romulus/Implementations/crypto_aead/romulusm1v12/opt32/romulus.h new file mode 100644 index 0000000..b254e2a --- /dev/null +++ b/romulus/Implementations/crypto_aead/romulusm1v12/opt32/romulus.h @@ -0,0 +1,69 @@ +#ifndef ROMULUSN1_H_ +#define ROMULUSN1_H_ + +#include "skinny128.h" + +typedef unsigned char u8; +typedef unsigned int u32; +typedef unsigned int u64; +typedef struct { + u8 tk1[16]; //to manipulate tk1 byte-wise + u32 rtk1[4*16]; //to avoid tk schedule recomputations + u32 rtk2_3[4*SKINNY128_384_ROUNDS]; //all round tweakeys +} skinny_128_384_tks; + +#define TAGBYTES 16 +#define KEYBYTES 16 +#define BLOCKBYTES 16 + +#define SET_DOMAIN(tks, domain) ((tks).tk1[7] = (domain)) + +//G as defined in the Romulus specification in a 32-bit word-wise manner +#define G(x,y) ({ \ + tmp = ((u32*)(y))[0]; \ + ((u32*)(x))[0] = (tmp >> 1 & 0x7f7f7f7f) ^ ((tmp ^ (tmp << 7)) & 0x80808080); \ + tmp = ((u32*)(y))[1]; \ + ((u32*)(x))[1] = (tmp >> 1 & 0x7f7f7f7f) ^ ((tmp ^ (tmp << 7)) & 0x80808080); \ + tmp = ((u32*)(y))[2]; \ + ((u32*)(x))[2] = (tmp >> 1 & 0x7f7f7f7f) ^ ((tmp ^ (tmp << 7)) & 0x80808080); \ + tmp = ((u32*)(y))[3]; \ + ((u32*)(x))[3] = (tmp >> 1 & 0x7f7f7f7f) ^ ((tmp ^ (tmp << 7)) & 0x80808080); \ +}) + +//update the counter in tk1 in a 32-bit word-wise manner +#define UPDATE_CTR(tk1) ({ \ + tmp = ((u32*)(tk1))[1]; \ + ((u32*)(tk1))[1] = (tmp << 1) & 0x00ffffff; \ + ((u32*)(tk1))[1] |= (((u32*)(tk1))[0] >> 31); \ + ((u32*)(tk1))[1] |= tmp & 0xff000000; \ + ((u32*)(tk1))[0] <<= 1; \ + if ((tmp >> 23) & 0x01) \ + ((u32*)(tk1))[0] ^= 0x95; \ +}) + +//x <- y ^ z for 128-bit blocks +#define XOR_BLOCK(x,y,z) ({ \ + ((u32*)(x))[0] = ((u32*)(y))[0] ^ ((u32*)(z))[0]; \ + ((u32*)(x))[1] = ((u32*)(y))[1] ^ ((u32*)(z))[1]; \ + ((u32*)(x))[2] = ((u32*)(y))[2] ^ ((u32*)(z))[2]; \ + ((u32*)(x))[3] = ((u32*)(y))[3] ^ ((u32*)(z))[3]; \ +}) + + +//Rho as defined in the Romulus specification +//use pad as a tmp variable in case y = z +#define RHO(x,y,z) ({ \ + G(pad,x); \ + XOR_BLOCK(y, pad, z); \ + XOR_BLOCK(x, x, z); \ +}) + +//Rho inverse as defined in the Romulus specification +//use pad as a tmp variable in case y = z +#define RHO_INV(x, y, z) ({ \ + G(pad, x); \ + XOR_BLOCK(z, pad, y); \ + XOR_BLOCK(x, x, z); \ +}) + +#endif // ROMULUSN1_H_ \ No newline at end of file diff --git a/romulus/Implementations/crypto_aead/romulusm1v12/opt32/skinny128.c b/romulus/Implementations/crypto_aead/romulusm1v12/opt32/skinny128.c new file mode 100644 index 0000000..87718e3 --- /dev/null +++ b/romulus/Implementations/crypto_aead/romulusm1v12/opt32/skinny128.c @@ -0,0 +1,110 @@ +/****************************************************************************** +* Constant-time implementation of the SKINNY tweakable block ciphers. +* +* This implementation doesn't compute the ShiftRows operation. Some masks and +* shifts are applied during the MixColumns operation so that the proper bits +* are XORed together. Moreover, the row permutation within the MixColumns +* is omitted, as well as the bit permutation at the end of the Sbox. The rows +* are synchronized with the classical after only 4 rounds. Therefore, this +* implementation relies on a "QUADRUPLE_ROUND" routine. +* +* The Sbox computation takes advantage of some symmetry in the 8-bit Sbox to +* turn it into a 4-bit S-box computation. Although the last bit permutation +* within the Sbox is not computed, the bit ordering is synchronized with the +* classical representation after 2 calls. +* +* @author Alexandre Adomnicai, Nanyang Technological University, +* alexandre.adomnicai@ntu.edu.sg +* +* @date May 2020 +******************************************************************************/ +#include +#include +#include "skinny128.h" +#include "tk_schedule.h" + +/****************************************************************************** +* The MixColumns computation for rounds i such that (i % 4) == 0 +******************************************************************************/ +void mixcolumns_0(u32* state) { + u32 tmp; + for(int i = 0; i < 4; i++) { + tmp = ROR(state[i],24) & 0x0c0c0c0c; + state[i] ^= ROR(tmp,30); + tmp = ROR(state[i],16) & 0xc0c0c0c0; + state[i] ^= ROR(tmp,4); + tmp = ROR(state[i],8) & 0x0c0c0c0c; + state[i] ^= ROR(tmp,2); + } +} + +/****************************************************************************** +* The MixColumns computation for rounds i such that (i % 4) == 1 +******************************************************************************/ +void mixcolumns_1(u32* state) { + u32 tmp; + for(int i = 0; i < 4; i++) { + tmp = ROR(state[i],16) & 0x30303030; + state[i] ^= ROR(tmp,30); + tmp = state[i] & 0x03030303; + state[i] ^= ROR(tmp,28); + tmp = ROR(state[i],16) & 0x30303030; + state[i] ^= ROR(tmp,2); + } +} + +/****************************************************************************** +* The MixColumns computation for rounds i such that (i % 4) == 2 +******************************************************************************/ +void mixcolumns_2(u32* state) { + u32 tmp; + for(int i = 0; i < 4; i++) { + tmp = ROR(state[i],8) & 0xc0c0c0c0; + state[i] ^= ROR(tmp,6); + tmp = ROR(state[i],16) & 0x0c0c0c0c; + state[i] ^= ROR(tmp,28); + tmp = ROR(state[i],24) & 0xc0c0c0c0; + state[i] ^= ROR(tmp,2); + } +} + +/****************************************************************************** +* The MixColumns computation for rounds i such that (i % 4) == 3 +******************************************************************************/ +void mixcolumns_3(u32* state) { + u32 tmp; + for(int i = 0; i < 4; i++) { + tmp = state[i] & 0x03030303; + state[i] ^= ROR(tmp,30); + tmp = state[i] & 0x30303030; + state[i] ^= ROR(tmp,4); + tmp = state[i] & 0x03030303; + state[i] ^= ROR(tmp,26); + } +} + +/****************************************************************************** +* Encryption of a single block without any operation mode using SKINNY-128-384. +* RTK1 and RTK2_3 are given separately to take advantage of the fact that +* TK2 and TK3 remains the same through the entire data encryption/decryption. +******************************************************************************/ +void skinny128_384(u8* ctext, const u8* ptext, const u32* rtk1, const u32* rtk2_3) { + u32 tmp; // used in SWAPMOVE macro + u32 state[4]; // 128-bit state + packing(state, ptext); // from byte to bitsliced representation + QUADRUPLE_ROUND(state, rtk1, rtk2_3); + QUADRUPLE_ROUND(state, rtk1+16, rtk2_3+16); + QUADRUPLE_ROUND(state, rtk1+32, rtk2_3+32); + QUADRUPLE_ROUND(state, rtk1+48, rtk2_3+48); + QUADRUPLE_ROUND(state, rtk1, rtk2_3+64); + QUADRUPLE_ROUND(state, rtk1+16, rtk2_3+80); + QUADRUPLE_ROUND(state, rtk1+32, rtk2_3+96); + QUADRUPLE_ROUND(state, rtk1+48, rtk2_3+112); + QUADRUPLE_ROUND(state, rtk1, rtk2_3+128); + QUADRUPLE_ROUND(state, rtk1+16, rtk2_3+144); + QUADRUPLE_ROUND(state, rtk1+32, rtk2_3+160); + QUADRUPLE_ROUND(state, rtk1+48, rtk2_3+176); + QUADRUPLE_ROUND(state, rtk1, rtk2_3+192); + QUADRUPLE_ROUND(state, rtk1+16, rtk2_3+208); + unpacking(ctext, state); // from bitsliced to byte representation +} \ No newline at end of file diff --git a/romulus/Implementations/crypto_aead/romulusm1v12/opt32/skinny128.h b/romulus/Implementations/crypto_aead/romulusm1v12/opt32/skinny128.h new file mode 100644 index 0000000..dab6338 --- /dev/null +++ b/romulus/Implementations/crypto_aead/romulusm1v12/opt32/skinny128.h @@ -0,0 +1,94 @@ +#ifndef SKINNY128_H_ +#define SKINNY128_H_ + +typedef unsigned char u8; +typedef unsigned int u32; + +#define SKINNY128_384_ROUNDS 56 + +#define QUADRUPLE_ROUND(state, rtk1, rtk2_3) ({ \ + state[3] ^= ~(state[0] | state[1]); \ + SWAPMOVE(state[2], state[1], 0x55555555, 1); \ + SWAPMOVE(state[3], state[2], 0x55555555, 1); \ + state[1] ^= ~(state[2] | state[3]); \ + SWAPMOVE(state[1], state[0], 0x55555555, 1); \ + SWAPMOVE(state[0], state[3], 0x55555555, 1); \ + state[3] ^= ~(state[0] | state[1]); \ + SWAPMOVE(state[2], state[1], 0x55555555, 1); \ + SWAPMOVE(state[3], state[2], 0x55555555, 1); \ + state[1] ^= (state[2] | state[3]); \ + SWAPMOVE(state[3], state[0], 0x55555555, 0); \ + state[0] ^= (rtk1)[0]; \ + state[1] ^= (rtk1)[1]; \ + state[2] ^= (rtk1)[2]; \ + state[3] ^= (rtk1)[3]; \ + state[0] ^= (rtk2_3)[0]; \ + state[1] ^= (rtk2_3)[1]; \ + state[2] ^= (rtk2_3)[2]; \ + state[3] ^= (rtk2_3)[3]; \ + mixcolumns_0(state); \ + state[1] ^= ~(state[2] | state[3]); \ + SWAPMOVE(state[1], state[0], 0x55555555, 1); \ + SWAPMOVE(state[0], state[3], 0x55555555, 1); \ + state[3] ^= ~(state[0] | state[1]); \ + SWAPMOVE(state[2], state[1], 0x55555555, 1); \ + SWAPMOVE(state[3], state[2], 0x55555555, 1); \ + state[1] ^= ~(state[2] | state[3]); \ + SWAPMOVE(state[1], state[0], 0x55555555, 1); \ + SWAPMOVE(state[0], state[3], 0x55555555, 1); \ + state[3] ^= (state[0] | state[1]); \ + SWAPMOVE(state[1], state[2], 0x55555555, 0); \ + state[0] ^= (rtk1)[4]; \ + state[1] ^= (rtk1)[5]; \ + state[2] ^= (rtk1)[6]; \ + state[3] ^= (rtk1)[7]; \ + state[0] ^= (rtk2_3)[4]; \ + state[1] ^= (rtk2_3)[5]; \ + state[2] ^= (rtk2_3)[6]; \ + state[3] ^= (rtk2_3)[7]; \ + mixcolumns_1(state); \ + state[3] ^= ~(state[0] | state[1]); \ + SWAPMOVE(state[2], state[1], 0x55555555, 1); \ + SWAPMOVE(state[3], state[2], 0x55555555, 1); \ + state[1] ^= ~(state[2] | state[3]); \ + SWAPMOVE(state[1], state[0], 0x55555555, 1); \ + SWAPMOVE(state[0], state[3], 0x55555555, 1); \ + state[3] ^= ~(state[0] | state[1]); \ + SWAPMOVE(state[2], state[1], 0x55555555, 1); \ + SWAPMOVE(state[3], state[2], 0x55555555, 1); \ + state[1] ^= (state[2] | state[3]); \ + SWAPMOVE(state[3], state[0], 0x55555555, 0); \ + state[0] ^= (rtk1)[8]; \ + state[1] ^= (rtk1)[9]; \ + state[2] ^= (rtk1)[10]; \ + state[3] ^= (rtk1)[11]; \ + state[0] ^= (rtk2_3)[8]; \ + state[1] ^= (rtk2_3)[9]; \ + state[2] ^= (rtk2_3)[10]; \ + state[3] ^= (rtk2_3)[11]; \ + mixcolumns_2(state); \ + state[1] ^= ~(state[2] | state[3]); \ + SWAPMOVE(state[1], state[0], 0x55555555, 1); \ + SWAPMOVE(state[0], state[3], 0x55555555, 1); \ + state[3] ^= ~(state[0] | state[1]); \ + SWAPMOVE(state[2], state[1], 0x55555555, 1); \ + SWAPMOVE(state[3], state[2], 0x55555555, 1); \ + state[1] ^= ~(state[2] | state[3]); \ + SWAPMOVE(state[1], state[0], 0x55555555, 1); \ + SWAPMOVE(state[0], state[3], 0x55555555, 1); \ + state[3] ^= (state[0] | state[1]); \ + SWAPMOVE(state[1], state[2], 0x55555555, 0); \ + state[0] ^= (rtk1)[12]; \ + state[1] ^= (rtk1)[13]; \ + state[2] ^= (rtk1)[14]; \ + state[3] ^= (rtk1)[15]; \ + state[0] ^= (rtk2_3)[12]; \ + state[1] ^= (rtk2_3)[13]; \ + state[2] ^= (rtk2_3)[14]; \ + state[3] ^= (rtk2_3)[15]; \ + mixcolumns_3(state); \ +}) + +void skinny128_384(u8* ctext, const u8* ptext, const u32* rtk1, const u32* rtk2_3); + +#endif // SKINNY128_H_ \ No newline at end of file diff --git a/romulus/Implementations/crypto_aead/romulusm1v12/opt32/tk_schedule.c b/romulus/Implementations/crypto_aead/romulusm1v12/opt32/tk_schedule.c new file mode 100644 index 0000000..c818cf2 --- /dev/null +++ b/romulus/Implementations/crypto_aead/romulusm1v12/opt32/tk_schedule.c @@ -0,0 +1,379 @@ +/****************************************************************************** +* Implementation of the SKINNY tweakey schedule to match fixslicing. +* +* @author Alexandre Adomnicai, Nanyang Technological University, +* alexandre.adomnicai@ntu.edu.sg +* +* @date May 2020 +******************************************************************************/ +#include +#include //for memcmp +#include "tk_schedule.h" +#include "skinny128.h" + +typedef unsigned char u8; +typedef unsigned int u32; + +/****************************************************************************** +* The round constants according to the new representation. +******************************************************************************/ +u32 rconst_32_bs[224] = { + 0x00000004, 0xffffffbf, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x10000100, 0xfffffeff, 0x44000000, 0xfbffffff, 0x00000000, 0x04000000, + 0x00100000, 0x00100000, 0x00100001, 0xffefffff, 0x00440000, 0xffafffff, + 0x00400000, 0x00400000, 0x01000000, 0x01000000, 0x01401000, 0xffbfffff, + 0x01004000, 0xfefffbff, 0x00000400, 0x00000400, 0x00000010, 0x00000000, + 0x00010410, 0xfffffbef, 0x00000054, 0xffffffaf, 0x00000000, 0x00000040, + 0x00000100, 0x00000100, 0x10000140, 0xfffffeff, 0x44000000, 0xfffffeff, + 0x04000000, 0x04000000, 0x00100000, 0x00100000, 0x04000001, 0xfbffffff, + 0x00140000, 0xffafffff, 0x00400000, 0x00000000, 0x00000000, 0x00000000, + 0x01401000, 0xfebfffff, 0x01004400, 0xfffffbff, 0x00000000, 0x00000400, + 0x00000010, 0x00000010, 0x00010010, 0xffffffff, 0x00000004, 0xffffffaf, + 0x00000040, 0x00000040, 0x00000100, 0x00000000, 0x10000140, 0xffffffbf, + 0x40000100, 0xfbfffeff, 0x00000000, 0x04000000, 0x00100000, 0x00000000, + 0x04100001, 0xffefffff, 0x00440000, 0xffefffff, 0x00000000, 0x00400000, + 0x01000000, 0x01000000, 0x00401000, 0xffffffff, 0x00004000, 0xfeffffff, + 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00010400, 0xfffffbff, + 0x00000014, 0xffffffbf, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x10000100, 0xffffffff, 0x40000000, 0xfbffffff, 0x00000000, 0x04000000, + 0x00100000, 0x00000000, 0x00100001, 0xffefffff, 0x00440000, 0xffafffff, + 0x00000000, 0x00400000, 0x01000000, 0x01000000, 0x01401000, 0xffffffff, + 0x00004000, 0xfeffffff, 0x00000400, 0x00000400, 0x00000010, 0x00000000, + 0x00010400, 0xfffffbff, 0x00000014, 0xffffffaf, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x10000140, 0xfffffeff, 0x44000000, 0xffffffff, + 0x00000000, 0x04000000, 0x00100000, 0x00100000, 0x00000001, 0xffefffff, + 0x00440000, 0xffafffff, 0x00400000, 0x00000000, 0x00000000, 0x01000000, + 0x01401000, 0xffbfffff, 0x01004000, 0xfffffbff, 0x00000400, 0x00000400, + 0x00000010, 0x00000000, 0x00010010, 0xfffffbff, 0x00000014, 0xffffffef, + 0x00000000, 0x00000040, 0x00000100, 0x00000000, 0x10000040, 0xfffffeff, + 0x44000000, 0xfffffeff, 0x00000000, 0x00000000, 0x00000000, 0x00100000, + 0x04000001, 0xffffffff, 0x00040000, 0xffffffff, 0x00400000, 0x00000000, + 0x00000000, 0x00000000, 0x00001000, 0xfebfffff, 0x01004400, 0xffffffff, + 0x00000000, 0x00000000, 0x00000000, 0x00000010, 0x00010000, 0xffffffff, + 0x00000004, 0xffffffbf, 0x00000040, 0x00000000, 0x00000000, 0x00000000, + 0x10000100, 0xfffffebf, 0x44000100, 0xffffffff, 0x00000000, 0x04000000, + 0x00100000, 0x00100000, 0x00000001, 0xffffffff, 0x00040000, 0xffafffff, + 0x00400000, 0x00000000, 0x00000000, 0x00000000, 0x01401000, 0xffbfffff, + 0x01004000, 0xfffffbff, 0x00000000, 0x00000400, 0x00000010, 0x00000000, + 0x00010010, 0xffffffff +}; + +/****************************************************************************** +* Pack the input into the bitsliced representation +* 24 28 56 60 88 92 120 124 | ... | 0 4 32 36 64 68 96 100 +* 25 29 57 61 89 93 121 125 | ... | 1 5 33 37 65 69 97 101 +* 26 30 58 62 90 94 122 126 | ... | 2 6 34 38 66 70 98 102 +* 27 31 59 63 91 95 123 127 | ... | 3 7 35 39 67 71 99 103 +******************************************************************************/ +void packing(u32* out, const u8* in) { + u32 tmp; + LE_LOAD(out, in); + LE_LOAD(out + 1, in + 8); + LE_LOAD(out + 2, in + 4); + LE_LOAD(out + 3, in + 12); + SWAPMOVE(out[0], out[0], 0x0a0a0a0a, 3); + SWAPMOVE(out[1], out[1], 0x0a0a0a0a, 3); + SWAPMOVE(out[2], out[2], 0x0a0a0a0a, 3); + SWAPMOVE(out[3], out[3], 0x0a0a0a0a, 3); + SWAPMOVE(out[2], out[0], 0x30303030, 2); + SWAPMOVE(out[1], out[0], 0x0c0c0c0c, 4); + SWAPMOVE(out[3], out[0], 0x03030303, 6); + SWAPMOVE(out[1], out[2], 0x0c0c0c0c, 2); + SWAPMOVE(out[3], out[2], 0x03030303, 4); + SWAPMOVE(out[3], out[1], 0x03030303, 2); +} + +/****************************************************************************** +* Unpack the input to a byte-wise representation +******************************************************************************/ +void unpacking(u8* out, u32 *in) { + u32 tmp; + SWAPMOVE(in[3], in[1], 0x03030303, 2); + SWAPMOVE(in[3], in[2], 0x03030303, 4); + SWAPMOVE(in[1], in[2], 0x0c0c0c0c, 2); + SWAPMOVE(in[3], in[0], 0x03030303, 6); + SWAPMOVE(in[1], in[0], 0x0c0c0c0c, 4); + SWAPMOVE(in[2], in[0], 0x30303030, 2); + SWAPMOVE(in[0], in[0], 0x0a0a0a0a, 3); + SWAPMOVE(in[1], in[1], 0x0a0a0a0a, 3); + SWAPMOVE(in[2], in[2], 0x0a0a0a0a, 3); + SWAPMOVE(in[3], in[3], 0x0a0a0a0a, 3); + LE_STORE(out, in[0]); + LE_STORE(out + 8, in[1]); + LE_STORE(out + 4, in[2]); + LE_STORE(out + 12, in[3]); +} + +/****************************************************************************** +* 0 4 1 5 +* 1 5 ---> 2 6 +* 2 6 3 7 +* 3 7 4 0 +******************************************************************************/ +void lfsr2_bs(u32* tk) { + u32 tmp; + tmp = tk[0] ^ (tk[2] & 0xaaaaaaaa); + tmp = ((tmp & 0xaaaaaaaa) >> 1) | ((tmp << 1) & 0xaaaaaaaa); + tk[0] = tk[1]; + tk[1] = tk[2]; + tk[2] = tk[3]; + tk[3] = tmp; +} + +/****************************************************************************** +* 0 4 7 3 +* 1 5 ---> 0 4 +* 2 6 1 5 +* 3 7 2 6 +******************************************************************************/ +void lfsr3_bs(u32* tk) { + u32 tmp; + tmp = tk[3] ^ ((tk[1] & 0xaaaaaaaa) >> 1); + tmp = ((tmp & 0xaaaaaaaa) >> 1) | ((tmp << 1) & 0xaaaaaaaa); + tk[3] = tk[2]; + tk[2] = tk[1]; + tk[1] = tk[0]; + tk[0] = tmp; +} + +/****************************************************************************** +* Apply the permutation in a bitsliced manner, twice +******************************************************************************/ +void permute_tk_2(u32* tk) { + u32 tmp; + for(int i =0; i < 4; i++) { + tmp = tk[i]; + tk[i] = ROR(tmp,14) & 0xcc00cc00; + tk[i] |= (tmp & 0x000000ff) << 16; + tk[i] |= (tmp & 0xcc000000)>> 2; + tk[i] |= (tmp & 0x0033cc00) >> 8; + tk[i] |= (tmp & 0x00cc0000) >>18; + } +} + +/****************************************************************************** +* Apply the permutation in a bitsliced manner, 4 times +******************************************************************************/ +void permute_tk_4(u32* tk) { + u32 tmp; + for(int i =0; i < 4; i++) { + tmp = tk[i]; + tk[i] = ROR(tmp,22) & 0xcc0000cc; + tk[i] |= ROR(tmp,16) & 0x3300cc00; + tk[i] |= ROR(tmp, 24) & 0x00cc3300; + tk[i] |= (tmp & 0x00cc00cc) >> 2; + } +} + +/****************************************************************************** +* Apply the permutation in a bitsliced manner, 6 times +******************************************************************************/ +void permute_tk_6(u32* tk) { + u32 tmp; + for(int i =0; i < 4; i++) { + tmp = tk[i]; + tk[i] = ROR(tmp,6) & 0xcccc0000; + tk[i] |= ROR(tmp,24) & 0x330000cc; + tk[i] |= ROR(tmp,10) & 0x3333; + tk[i] |= (tmp & 0xcc) << 14; + tk[i] |= (tmp & 0x3300) << 2; + } +} + +/****************************************************************************** +* Apply the permutation in a bitsliced manner, 8 times +******************************************************************************/ +void permute_tk_8(u32* tk) { + u32 tmp; + for(int i =0; i < 4; i++) { + tmp = tk[i]; + tk[i] = ROR(tmp,24) & 0xcc000033; + tk[i] |= ROR(tmp,8) & 0x33cc0000; + tk[i] |= ROR(tmp,26) & 0x00333300; + tk[i] |= (tmp & 0x00333300) >> 6; + } +} + +/****************************************************************************** +* Apply the permutation in a bitsliced manner, 10 times +******************************************************************************/ +void permute_tk_10(u32* tk) { + u32 tmp; + for(int i =0; i < 4; i++) { + tmp = tk[i]; + tk[i] = ROR(tmp,8) & 0xcc330000; + tk[i] |= ROR(tmp,26) & 0x33000033; + tk[i] |= ROR(tmp,22) & 0x00cccc00; + tk[i] |= (tmp & 0x00330000) >> 14; + tk[i] |= (tmp & 0xcc00) >> 2; + } +} + +/****************************************************************************** +* Apply the permutation in a bitsliced manner, 12 times +******************************************************************************/ +void permute_tk_12(u32* tk) { + u32 tmp; + for(int i =0; i < 4; i++) { + tmp = tk[i]; + tk[i] = ROR(tmp,8) & 0xcc33; + tk[i] |= ROR(tmp,30) & 0x00cc00cc; + tk[i] |= ROR(tmp,10) & 0x33330000; + tk[i] |= ROR(tmp,16) & 0xcc003300; + } +} + +/****************************************************************************** +* Apply the permutation in a bitsliced manner, 14 times +******************************************************************************/ +void permute_tk_14(u32* tk) { + u32 tmp; + for(int i =0; i < 4; i++) { + tmp = tk[i]; + tk[i] = ROR(tmp,24) & 0x0033cc00; + tk[i] |= ROR(tmp,14) & 0x00cc0000; + tk[i] |= ROR(tmp,30) & 0xcc000000; + tk[i] |= ROR(tmp,16) & 0x000000ff; + tk[i] |= ROR(tmp,18) & 0x33003300; + } +} + +/****************************************************************************** +* Precompute all LFSRs on TK2 +******************************************************************************/ +void precompute_lfsr_tk2(u32* tk, const u8* key, const int rounds) { + u32 tk2[4]; + packing(tk2, key); + memcpy(tk, tk2, 16); + for(int i = 0 ; i < rounds; i+=2) { + lfsr2_bs(tk2); + memcpy(tk+i*4+4, tk2, 16); + } +} + +/****************************************************************************** +* Precompute all LFSRs on TK3 +******************************************************************************/ +void precompute_lfsr_tk3(u32* tk, const u8* key, const int rounds) { + u32 tk3[4]; + packing(tk3, key); + tk[0] ^= tk3[0]; + tk[1] ^= tk3[1]; + tk[2] ^= tk3[2]; + tk[3] ^= tk3[3]; + for(int i = 0 ; i < rounds; i+=2) { + lfsr3_bs(tk3); + tk[i*4+4] ^= tk3[0]; + tk[i*4+5] ^= tk3[1]; + tk[i*4+6] ^= tk3[2]; + tk[i*4+7] ^= tk3[3]; + } +} + +/****************************************************************************** +* XOR TK with TK1 before applying the permutations. +* The key is then rearranged to match the barrel shiftrows representation. +******************************************************************************/ +void permute_tk(u32* tk, const u8* key, const int rounds) { + u32 test; + u32 tk1[4], tmp[4]; + packing(tk1, key); + memcpy(tmp, tk, 16); + tmp[0] ^= tk1[0]; + tmp[1] ^= tk1[1]; + tmp[2] ^= tk1[2]; + tmp[3] ^= tk1[3]; + for(int i = 0 ; i < rounds; i += 8) { + test = (i % 16 < 8) ? 1 : 0; //to apply the right power of P + tk[i*4] = tmp[2] & 0xf0f0f0f0; + tk[i*4+1] = tmp[3] & 0xf0f0f0f0; + tk[i*4+2] = tmp[0] & 0xf0f0f0f0; + tk[i*4+3] = tmp[1] & 0xf0f0f0f0; + memcpy(tmp, tk+i*4+4, 16); + XOR_BLOCKS(tmp, tk1); + if (test) + permute_tk_2(tmp); // applies P^2 + else + permute_tk_10(tmp); // applies P^10 + tk[i*4+4] = ROR(tmp[0],26) & 0xc3c3c3c3; + tk[i*4+5] = ROR(tmp[1],26) & 0xc3c3c3c3; + tk[i*4+6] = ROR(tmp[2],26) & 0xc3c3c3c3; + tk[i*4+7] = ROR(tmp[3],26) & 0xc3c3c3c3; + tk[i*4+8] = ROR(tmp[2],28) & 0x03030303; + tk[i*4+8] |= ROR(tmp[2],12) & 0x0c0c0c0c; + tk[i*4+9] = ROR(tmp[3],28) & 0x03030303; + tk[i*4+9] |= ROR(tmp[3],12) & 0x0c0c0c0c; + tk[i*4+10] = ROR(tmp[0],28) & 0x03030303; + tk[i*4+10] |= ROR(tmp[0],12) & 0x0c0c0c0c; + tk[i*4+11] = ROR(tmp[1],28) & 0x03030303; + tk[i*4+11] |= ROR(tmp[1],12) & 0x0c0c0c0c; + memcpy(tmp, tk+i*4+12, 16); + XOR_BLOCKS(tmp, tk1); + if (test) + permute_tk_4(tmp); // applies P^4 + else + permute_tk_12(tmp); // applies P^12 + for(int j = 0; j < 4; j++) { + tk[i*4+12+j] = ROR(tmp[j],14) & 0x30303030; + tk[i*4+12+j] |= ROR(tmp[j],6) & 0x0c0c0c0c; + } + tk[i*4+16] = ROR(tmp[2], 16) & 0xf0f0f0f0; + tk[i*4+17] = ROR(tmp[3], 16) & 0xf0f0f0f0; + tk[i*4+18] = ROR(tmp[0], 16) & 0xf0f0f0f0; + tk[i*4+19] = ROR(tmp[1], 16) & 0xf0f0f0f0; + memcpy(tmp, tk+i*4+20, 16); + XOR_BLOCKS(tmp, tk1); + if (test) + permute_tk_6(tmp); // applies P^6 + else + permute_tk_14(tmp); // applies P^14 + tk[i*4+20] = ROR(tmp[0], 10) & 0xc3c3c3c3; + tk[i*4+21] = ROR(tmp[1], 10) & 0xc3c3c3c3; + tk[i*4+22] = ROR(tmp[2], 10) & 0xc3c3c3c3; + tk[i*4+23] = ROR(tmp[3], 10) & 0xc3c3c3c3; + tk[i*4+24] = ROR(tmp[2],12) & 0x03030303; + tk[i*4+24] |= ROR(tmp[2],28) & 0x0c0c0c0c; + tk[i*4+25] = ROR(tmp[3],12) & 0x03030303; + tk[i*4+25] |= ROR(tmp[3],28) & 0x0c0c0c0c; + tk[i*4+26] = ROR(tmp[0],12) & 0x03030303; + tk[i*4+26] |= ROR(tmp[0],28) & 0x0c0c0c0c; + tk[i*4+27] = ROR(tmp[1],12) & 0x03030303; + tk[i*4+27] |= ROR(tmp[1],28) & 0x0c0c0c0c; + memcpy(tmp, tk+i*4+28, 16); + XOR_BLOCKS(tmp, tk1); + if (test) + permute_tk_8(tmp); // applies P^8 + for(int j = 0; j < 4; j++) { + tk[i*4+28+j] = ROR(tmp[j],30) & 0x30303030; + tk[i*4+28+j] |= ROR(tmp[j],22) & 0x0c0c0c0c; + } + if (test && (i+8 < rounds)) { //only if next loop iteration + tk[i*4+32] = tmp[2] & 0xf0f0f0f0; + tk[i*4+33] = tmp[3] & 0xf0f0f0f0; + tk[i*4+34] = tmp[0] & 0xf0f0f0f0; + tk[i*4+35] = tmp[1] & 0xf0f0f0f0; + } + } +} + +/****************************************************************************** +* Precompute LFSR2(TK2) ^ LFSR3(TK3) ^ rconst. +******************************************************************************/ +void precompute_rtk2_3(u32* rtk, const u8* tk2, const u8 * tk3) { + memset(rtk, 0x00, 16*SKINNY128_384_ROUNDS); + precompute_lfsr_tk2(rtk, tk2, SKINNY128_384_ROUNDS); + precompute_lfsr_tk3(rtk, tk3, SKINNY128_384_ROUNDS); + permute_tk(rtk, (u8*)(rtk+8), SKINNY128_384_ROUNDS); // rtk+8 is NULL + for(int i = 0; i < SKINNY128_384_ROUNDS; i++) { // add rconsts + for(int j = 0; j < 4; j++) + rtk[i*4+j] ^= rconst_32_bs[i*4+j]; + } +} + +/****************************************************************************** +* Precompute RTK1. +******************************************************************************/ +void precompute_rtk1(u32* rtk1, const u8* tk1) { + memset(rtk1, 0x00, 16*16); + permute_tk(rtk1, tk1, 16); +} \ No newline at end of file diff --git a/romulus/Implementations/crypto_aead/romulusm1v12/opt32/tk_schedule.h b/romulus/Implementations/crypto_aead/romulusm1v12/opt32/tk_schedule.h new file mode 100644 index 0000000..5615cbd --- /dev/null +++ b/romulus/Implementations/crypto_aead/romulusm1v12/opt32/tk_schedule.h @@ -0,0 +1,39 @@ +#ifndef TK_SCHEDULE_H_ +#define TK_SCHEDULE_H_ + +typedef unsigned char u8; +typedef unsigned int u32; + +void packing(u32* out, const u8* in); +void unpacking(u8* out, u32 *in); +void precompute_rtk2_3(u32* rtk, const u8* tk2, const u8* tk3); +void precompute_rtk1(u32* rtk1, const u8* tk1); + +#define ROR(x,y) (((x) >> (y)) | ((x) << (32 - (y)))) + +#define XOR_BLOCKS(x,y) ({ \ + (x)[0] ^= (y)[0]; \ + (x)[1] ^= (y)[1]; \ + (x)[2] ^= (y)[2]; \ + (x)[3] ^= (y)[3]; \ +}) + +#define SWAPMOVE(a, b, mask, n) ({ \ + tmp = (b ^ (a >> n)) & mask; \ + b ^= tmp; \ + a ^= (tmp << n); \ +}) + +#define LE_LOAD(x, y) \ + *(x) = (((u32)(y)[3] << 24) | \ + ((u32)(y)[2] << 16) | \ + ((u32)(y)[1] << 8) | \ + (y)[0]); + +#define LE_STORE(x, y) \ + (x)[0] = (y) & 0xff; \ + (x)[1] = ((y) >> 8) & 0xff; \ + (x)[2] = ((y) >> 16) & 0xff; \ + (x)[3] = (y) >> 24; + +#endif // TK_SCHEDULE_H_ \ No newline at end of file diff --git a/romulus/Implementations/crypto_aead/romulusn1+v12/LWC_AEAD_KAT_128_128.txt b/romulus/Implementations/crypto_aead/romulusn1+v12/LWC_AEAD_KAT_128_128.txt new file mode 100644 index 0000000..3a8b9c7 --- /dev/null +++ b/romulus/Implementations/crypto_aead/romulusn1+v12/LWC_AEAD_KAT_128_128.txt @@ -0,0 +1,7623 @@ +Count = 1 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = +CT = 4F42AED219ECC79F4DAF3E3BAD52AEE7 + +Count = 2 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 00 +CT = AB8FE298CF6A3261F1F6C89B2B5E3367 + +Count = 3 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 0001 +CT = 0AD6EE5DE5280CC51CBCAFBFCE5E99DF + +Count = 4 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102 +CT = 6CD9F20267266610D4F769EB602BFF17 + +Count = 5 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 00010203 +CT = 19733DA1D8C16E0BD5F516A15BAA5908 + +Count = 6 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 0001020304 +CT = 3A6D0641C711CF5B941364035663C7E7 + +Count = 7 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405 +CT = B48A50D9E16DA2D0BCC784DB7C126536 + +Count = 8 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 00010203040506 +CT = A3D9197875E4F92DA35A48B1E07483B7 + +Count = 9 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 0001020304050607 +CT = B96653DC95ED31D43A9E19DA42A71ABA + +Count = 10 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708 +CT = ACA17AF4073855420675302764B5DC89 + +Count = 11 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 00010203040506070809 +CT = 7D79DF409392AA600A0D11CBFD906E80 + +Count = 12 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A +CT = 092E181F40BE039D2E3E487E7077E445 + +Count = 13 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B +CT = DC663A1D1901CE72BE4A7F3E4C3EB0BF + +Count = 14 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C +CT = B50DD4A972DB1D311AFC204E29515C9B + +Count = 15 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D +CT = 0F51E7B2AF267F0F22ABCD57F9A0D8C7 + +Count = 16 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E +CT = 39C467A055B702ABA9857E2C9A7DB716 + +Count = 17 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F +CT = 413D3F77845E976AC72596E765B26B6A + +Count = 18 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F10 +CT = D17F367D07F02A0F93E1DE5385529556 + +Count = 19 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 5E8F2FC2BB627A819950B081BD9046A2 + +Count = 20 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 099377EB20CE32F6C2741C0271D420BF + +Count = 21 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 67EDE73262D0E89E8563F79B2C81183F + +Count = 22 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 0A02D202AC556A7C5D63BBCB48BD7C08 + +Count = 23 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 26767C17A6F2827F555B8D821B087776 + +Count = 24 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 2FC4C0CD30343AD78C94300201C02CCC + +Count = 25 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 65374F9820E14134A09BDD2736D35374 + +Count = 26 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = DD7653B181923EE9618FEE4167C4329F + +Count = 27 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = CF0F7BBBC999218F8965B0C95734F76A + +Count = 28 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = C4C21C764765BE3CD6AD1D4B8B7C3156 + +Count = 29 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = E364473014F0B6E717B31D068FFEDE07 + +Count = 30 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = DC61BD30632AFA362E341B65243E10F0 + +Count = 31 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 64795075A3EFFD16C578234D83263384 + +Count = 32 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 7BAF89F08686EE2266C2A648795011A9 + +Count = 33 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 77B3BBEA06D2F03827E928080703A571 + +Count = 34 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = +CT = DED8F65782F8D7BB14448E05D7A80579C3 + +Count = 35 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 00 +CT = 99A4A09B46BB14D231B8DB511AEFDBC594 + +Count = 36 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 0001 +CT = 51DC8ECEDEB19DB9FA94D6C99F78AC4068 + +Count = 37 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102 +CT = 255456D923B18D1E3584421C272E6B4309 + +Count = 38 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 00010203 +CT = 2BCF40227C025F52E4B1172B1F2849C931 + +Count = 39 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 0001020304 +CT = CA82DBD55E79213355DC8F9FA9F3F4BD75 + +Count = 40 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405 +CT = 85168B36CD4D1609980897F74C8BDA0217 + +Count = 41 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 00010203040506 +CT = 3714256F75518BE16DEBF9C2FFC6F50E9B + +Count = 42 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 0001020304050607 +CT = 06CB79EB83C7CD1F10FF9D2FA36DF223C3 + +Count = 43 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708 +CT = EE34A26BC739EEBEFC41236A6570099332 + +Count = 44 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 00010203040506070809 +CT = 25928856FCBB01EF7D9464FFF8C011EE41 + +Count = 45 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A +CT = B08153BD9658521865618224DF9B00A4F9 + +Count = 46 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B +CT = 7322A59A9CB8441BC9AE0DFCF046B13D6A + +Count = 47 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C +CT = 411210A9F99F4A2CF09096B26FD20A98A2 + +Count = 48 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D +CT = 1A01FEBD3B88C4A0A2B9D1466F18080D48 + +Count = 49 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E +CT = 399D10DBDEFAB2060B9A8606AA261E30A3 + +Count = 50 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F +CT = 9585BE4E12DE3302AC345C29C3B064A1B6 + +Count = 51 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 306F8744B7099CA9920B6B23B79E37F0ED + +Count = 52 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 86FB19886DA9F925904899E5C5A981FA73 + +Count = 53 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = F62A63F16D2635F7B67F5D524824099C87 + +Count = 54 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 4F4D192B18070E79470941779C2B3CDA3A + +Count = 55 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 89DA3E4D3117CC7B68BA512853062C8891 + +Count = 56 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 20C86CD1A407D256E2985EC8E3029D25AF + +Count = 57 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 20EF479CD5969B852112131FE39173FE39 + +Count = 58 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 4FBB11855F19F28CB0518C833B5D6FA5A0 + +Count = 59 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 602B9FAFF092C914879B197CCD4237A42F + +Count = 60 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 5ECAB4A6B4297D72310919DDF5CAB3ABB3 + +Count = 61 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 002D6FC7E333F55FA538DB0660F3E223E0 + +Count = 62 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = B299854F06DA4D94374F59CB2685743890 + +Count = 63 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = D91696580EA52E25BB7DEAB904985AC075 + +Count = 64 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 5FB3BEFC67B88F4540BB96993A5F77F578 + +Count = 65 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 04A69765DD560A4F45BFD450EA459A1F7A + +Count = 66 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 1A13C5650F4FBA3D21C87AAD5A68BC4944 + +Count = 67 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = +CT = DE2718ACE56400234A9661A0DCDCC9A2275E + +Count = 68 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 00 +CT = 998DA8848EA10E49CB12604A9297BEBF607C + +Count = 69 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 0001 +CT = 51E3D7A2D1DE4AD1F3A711BF70AA98826B47 + +Count = 70 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102 +CT = 255E2A81D0470AEBC8F43AE4FFB75A94E36C + +Count = 71 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 00010203 +CT = 2BB8C3732E76BB72D57288C087DC6B328EDC + +Count = 72 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 0001020304 +CT = CAB0EFA3D5A655759D15021239109914340B + +Count = 73 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405 +CT = 85FF0071C0D86B7D5B6F2C9F1BA59FF7CF98 + +Count = 74 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 00010203040506 +CT = 3746A524326D49ABED3BBC21B13D8EF2E377 + +Count = 75 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 0001020304050607 +CT = 066DA57BDAFA88D99685FFF41A481178F8A3 + +Count = 76 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708 +CT = EE35AFEA01C42BA26EDB52265FF296862D1A + +Count = 77 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 00010203040506070809 +CT = 252E02A72960148D822490371C9A77AE17CF + +Count = 78 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A +CT = B0C1CF61CE22A466AE4A306579614195500A + +Count = 79 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B +CT = 73F5FC6D7892EB5154DAC16F5C446DD0C1E5 + +Count = 80 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C +CT = 41AA335270650285F15BE31E376F23875011 + +Count = 81 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D +CT = 1A927483B0D97CC8F6F3CF3134450E583904 + +Count = 82 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E +CT = 39D9F75B9BCDA5685647869EE230BF06C9C0 + +Count = 83 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F +CT = 95A96E3455040C3FDC77937A9B14E02728B5 + +Count = 84 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 307855FB6E7162F75414F3A86F76B31AFABA + +Count = 85 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 86B31FA9A4B4429F89082B5D883418C6E443 + +Count = 86 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = F60A4CFA5CE8BBCB28612FF9F61F383775FA + +Count = 87 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 4F48090FBC0D05D52E787D3C55E1C6F45F3C + +Count = 88 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 89BD80A5EAF691949F8E4D2094471CEDD000 + +Count = 89 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 2021BE7369C8B9E53A77861A72B1F853B7AF + +Count = 90 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 20F2AF4E332D5877E6DAB5487313EA9D0DDC + +Count = 91 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 4F7CC8CF78800CA852FC0071F77F08BA14FE + +Count = 92 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 6034528631EC07F09B54330446B542715B20 + +Count = 93 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 5E4237D366CC45AE12C0677CEBD5063830CD + +Count = 94 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 000500EAA18D1587251DF97C15DCB2164157 + +Count = 95 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = B2B2D47351DBED4FC574BA3C7B73A530AE5A + +Count = 96 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = D96C15C34940E4529FBAF37EA2D446C5FEF6 + +Count = 97 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 5F51C34C14159CB614BA969182F46B14C1E9 + +Count = 98 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 047BDEC235A030E8D0C7B7F0058BDAC666B4 + +Count = 99 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 1A9B1583E92745CB460F1B552AD3107F7B3C + +Count = 100 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = +CT = DE27B34B578AE7EE9F6D724A58357E64084C57 + +Count = 101 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 00 +CT = 998D77F4E8339261CFD518F2433A832C46F4FD + +Count = 102 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 0001 +CT = 51E3F21B221B4DD7AE0FC2EF25541E2707BDD1 + +Count = 103 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102 +CT = 255ED80EB7031E4936331A80819C97FBE82570 + +Count = 104 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 00010203 +CT = 2BB84CC9AADDAC611381AAFADA998DCD067DB6 + +Count = 105 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 0001020304 +CT = CAB056EB1FCFD0FD907009155895BD3AF0A3D3 + +Count = 106 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405 +CT = 85FF408E3E8BFE90BAA972A4A7B299E120A2BF + +Count = 107 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 00010203040506 +CT = 37466E557CE9973710C0511317DEDB74CB6770 + +Count = 108 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 0001020304050607 +CT = 066D38418CF06AE11DB70D0AA9B060EBB819D0 + +Count = 109 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708 +CT = EE35C5817A2C1C30C1EAAFF6F8AB22DA523C3E + +Count = 110 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 00010203040506070809 +CT = 252EA9C1AD2621711B2077B262AD997DA80D08 + +Count = 111 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A +CT = B0C1791AD0CDBDFAFAB328867D8049F7C9614B + +Count = 112 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B +CT = 73F508EABCAFAAEC55D282A0680190A1FAC2C6 + +Count = 113 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C +CT = 41AAA967EC86257C42137E52D4CAC098D83DB5 + +Count = 114 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D +CT = 1A92684FF4DF91217387D8776D99B2B8E85640 + +Count = 115 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E +CT = 39D99070C11618D7E39491ABC21C9FDD7AE431 + +Count = 116 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F +CT = 95A9CC50CDA8D085A3C620C06996A4D4E7B594 + +Count = 117 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 307824298971AFD0B069135E2B6F15FBBF47D6 + +Count = 118 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 86B3B489242C429B0D3C25C0C469FD88601631 + +Count = 119 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = F60ADCDEBEE0E9463B31FC080C4C9E9FC1D249 + +Count = 120 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 4F4837C8515B917BE204D91C47E11C915E6F02 + +Count = 121 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 89BDEA4D595282B7E492984987C124F64234F5 + +Count = 122 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 2021C88A65F027427EA8E36E59F3D56097236A + +Count = 123 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 20F20F985145EF788727B9B07850922CE6CB92 + +Count = 124 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 4F7CC6588C56B879455AD5B61B762C8F7C9987 + +Count = 125 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 6034C8F15F5641F74B88FB116440A2FA7D1330 + +Count = 126 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 5E427AD9761BD7C026E55924F578672BE20AD9 + +Count = 127 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 0005A3B98DCC1E9917593C26C6844CF5043FBD + +Count = 128 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = B2B2A8D9F8B982EADA416B829A39F40A5BD391 + +Count = 129 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = D96C095A5FBA84AEBAFB6E577A3CC101F4F59B + +Count = 130 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 5F5143AD7D8F561BE8178933DD0094B81002E8 + +Count = 131 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 047BDB8B114BBFD7802CBC24626F14C1288CF0 + +Count = 132 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 1A9B58C8A42D0A5593C303CDA102865BF90B0F + +Count = 133 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = +CT = DE27B3C150EC780A5DA9CABFCB61A149003EAEEC + +Count = 134 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 00 +CT = 998D770169E944BC240A12EEAEAB23467D3A6816 + +Count = 135 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 0001 +CT = 51E3F265AB46992E8FDBFD423520FA2CFB0CAAE3 + +Count = 136 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102 +CT = 255ED81399E2709967472BE2DBB074EF92CE7995 + +Count = 137 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 00010203 +CT = 2BB84CB9B5D2B0D7321FA329FC633B1289D6C6A5 + +Count = 138 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 0001020304 +CT = CAB056AA205A4B641B8EDB60351EA8AC668575B8 + +Count = 139 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405 +CT = 85FF40FC3858860D1CF3662E54D9BDD12B8A0C05 + +Count = 140 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 00010203040506 +CT = 37466ECBE1AC0227375874D3719C070102ABFD1B + +Count = 141 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 0001020304050607 +CT = 066D386B903C627DDAB12854C79006B110C774E8 + +Count = 142 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708 +CT = EE35C5EC38EEB0D661D9292F44763596A058C59F + +Count = 143 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 00010203040506070809 +CT = 252EA99E66968A3B6A5EBD42E2B5084CFCB81DA0 + +Count = 144 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A +CT = B0C179ACECD3EAF74BE30679DC43632D0DA6F232 + +Count = 145 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B +CT = 73F5083ACE00D369A117301A1B545430B22EA93A + +Count = 146 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C +CT = 41AAA973305ABFE091A02053CC1708CEF98A789A + +Count = 147 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D +CT = 1A926838548D1B78E650D9D0A28D632814327EEA + +Count = 148 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E +CT = 39D99068B050C98A346D42011271C6CADE6CFE81 + +Count = 149 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F +CT = 95A9CC01EA19FD75ECD954A077B86EE6A99AC87C + +Count = 150 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 307824FC01557BFE8F63200FF30F896026A2E279 + +Count = 151 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 86B3B4DC1824C01D9282E4880EC2176A932A2790 + +Count = 152 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = F60ADC64AEB5EE736F503EE6D3B5A7D997DE58B1 + +Count = 153 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 4F48371B973FF11995609664FE89186F045A9D8D + +Count = 154 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 89BDEA4070F09477098ADDC7ABC88B872960FDB3 + +Count = 155 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 2021C84BD007510FD2868CB750A5FAC0A9C434A8 + +Count = 156 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 20F20FF1E268A18DB397F62A4586C7E304DC49AC + +Count = 157 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 4F7CC6B93FF7F14E64AC2893910007D4AD532B1C + +Count = 158 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 6034C8391E39A4D4D693D05838198CD041532237 + +Count = 159 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 5E427A3AEC7446564F4E4DEF5AA9BA0512650669 + +Count = 160 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 0005A3734A21C8C6A8A86D5B85DAEBDC0BC24B7E + +Count = 161 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = B2B2A81DC9FFBF35CC2837801A51F22C7338346F + +Count = 162 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = D96C092708C3531AC5037F91C626409425DE9780 + +Count = 163 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 5F5143FAF5C4F8227D199EBD62B74FFEF79D3280 + +Count = 164 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 047BDBAE433DA7A8DE03FE962CD0D32685081FEA + +Count = 165 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 1A9B5844B4EEE6B66291059B449BD9C478FE0124 + +Count = 166 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = +CT = DE27B3C1B49996E04DCCC8F5EFA7A7B17A5F6AD79E + +Count = 167 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 00 +CT = 998D7701C1B3E03C233776521D172840D73E6A83EC + +Count = 168 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 0001 +CT = 51E3F26591EDE1B4D54E61944C5D246C3946BABC9A + +Count = 169 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102 +CT = 255ED813C64DDA5222B2A0B93B1F6F68A51550D573 + +Count = 170 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 00010203 +CT = 2BB84CB90BAA1B92B3F56BE068C76FBB77EB4D61BA + +Count = 171 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 0001020304 +CT = CAB056AA880D228B27520A9387F6DA9F7BCA235E55 + +Count = 172 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405 +CT = 85FF40FCBF9B9A7ADD2037C37EC7314C72C2BE8288 + +Count = 173 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 00010203040506 +CT = 37466ECBEFF5587CEFB451B781E0CC5097DC3D09E7 + +Count = 174 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 0001020304050607 +CT = 066D386BDC7A38ABE257D9B95EDA853B076897FC9C + +Count = 175 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708 +CT = EE35C5ECBE911F7B6DAEBA6595B4B4EE3CD025E903 + +Count = 176 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 00010203040506070809 +CT = 252EA99EE559F40F99600E2080981149CC6CE0AB23 + +Count = 177 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A +CT = B0C179AC6924149D42BE922CA56659FE37DA00843A + +Count = 178 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B +CT = 73F5083A22E1D759272535670E83E74DC76296DDA4 + +Count = 179 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C +CT = 41AAA9737721D932D84C1E687BA57BCBF0F4FB41E0 + +Count = 180 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D +CT = 1A926838E431994B0E1A193E7BEBBAF40FDC03DF46 + +Count = 181 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E +CT = 39D99068499843685C23A1653445E369B91A3AAE12 + +Count = 182 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F +CT = 95A9CC016D8A44F6799DEE64CB76B0EEC7FBF5ED21 + +Count = 183 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 307824FCBDA1416B618E8EA5E908528A2836B2225D + +Count = 184 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 86B3B4DCA5C0DB4ADD793BD6E384C0A5EE575DED87 + +Count = 185 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = F60ADC6495D13F51CFE1DB1D0D90AD36BEC34B61FD + +Count = 186 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 4F48371B6AD561102EF48E8FA373E1E5D9ABD0C8B2 + +Count = 187 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 89BDEA40E37BE69581FC8D54A18C55BF542A8AED56 + +Count = 188 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 2021C84BC865FDFEB73B4C80CB6CF647EC8AD7EA6C + +Count = 189 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 20F20FF167C908744AE21F060BD92A4532AFE2EF82 + +Count = 190 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 4F7CC6B92F746E0BF9546B782C79450F2E638BC32D + +Count = 191 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 6034C839C7F688688AAA436EEE57592F2E67ED346B + +Count = 192 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 5E427A3A5956D824E3CAD5516351E979804F3555DD + +Count = 193 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 0005A3730F1B313E843761177B83973B055C40067B + +Count = 194 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = B2B2A81D5F7BED03483EBBF590414E1D14ED95CF87 + +Count = 195 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = D96C09271C9C6E7AB75132252DDB437DF3AF0BA178 + +Count = 196 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 5F5143FA555358CEE7D4951B3381CE6DFD4E8417B0 + +Count = 197 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 047BDBAEF50391871C839155B57F0B4DD08008D081 + +Count = 198 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 1A9B58442B389361BFD50808FCB3B235561FD7E0B7 + +Count = 199 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = +CT = DE27B3C1B43ABD71B0F7C07D84B65D53ADF724FB3296 + +Count = 200 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 00 +CT = 998D7701C14B373043208579E6ADFF66EB28C1106CFA + +Count = 201 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 0001 +CT = 51E3F26591E39541B5597FD63378217299CAE4ADBA68 + +Count = 202 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102 +CT = 255ED813C6C9C4732FCD1CD796FFE2EAAEE974383BD7 + +Count = 203 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 00010203 +CT = 2BB84CB90B56163D26FAB3B802F9BDD0F25D054419AE + +Count = 204 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 0001020304 +CT = CAB056AA88F153E95AB6989AFD030AD3450A6F5D31CD + +Count = 205 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405 +CT = 85FF40FCBFEBFF44B1CE0E58EC312410B5FC5AD6E411 + +Count = 206 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 00010203040506 +CT = 37466ECBEF0C271D27B5949D19049920F1FBBF90FA30 + +Count = 207 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 0001020304050607 +CT = 066D386BDC3B7A85F433D572924B6ECFD42B88EE97D9 + +Count = 208 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708 +CT = EE35C5ECBEB4CE29EFCEAF6FAC0368C9C496ED074499 + +Count = 209 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 00010203040506070809 +CT = 252EA99EE58ED63350A4A580E1625E16B70BA544C3FC + +Count = 210 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A +CT = B0C179AC69E83FFCCC0A88847E3DAAF9285ED7490EEB + +Count = 211 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B +CT = 73F5083A228D91ACC4C4F750A1492DD17036AD57FEC2 + +Count = 212 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C +CT = 41AAA97377B363268BE09920BF0ED8D4AC542FEF8822 + +Count = 213 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D +CT = 1A926838E49E5DCBD8550618160E0BE3B8428FD5033F + +Count = 214 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E +CT = 39D990684973CC10B83508B465332BF5C789487F6D5F + +Count = 215 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F +CT = 95A9CC016DB1C4255B3EB0E57C93FDC7B3DD99CEB855 + +Count = 216 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 307824FCBD3813765E40B0E00165936E8EBFB6769C5E + +Count = 217 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 86B3B4DCA59E42ACC89D49F06962A69EC6BABE36BD5C + +Count = 218 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = F60ADC6495BA22C2E26C8914B2F63E88DF606B64BB4F + +Count = 219 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 4F48371B6AF7C21613F01DA7242C2FD8077F48402712 + +Count = 220 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 89BDEA40E36AD2212FF15220E10D0C6C52FBF05F7EEF + +Count = 221 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 2021C84BC884EF4A5D7B325260A75A96812D0216EB82 + +Count = 222 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 20F20FF1674E0C47C078985064AE41C66A0B0EE11B2E + +Count = 223 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 4F7CC6B92F63E4F3D01CEEBAAFA24304F2D2FB62D673 + +Count = 224 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 6034C839C70E918B1154CC8DEA9B14A4C770E252B441 + +Count = 225 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 5E427A3A599A0A560EDF3B53734066FE97B12286C3B0 + +Count = 226 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 0005A3730F20B74E34EAF798A1262A6862F0A17F65BC + +Count = 227 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = B2B2A81D5FB5DE16D785B69814B67E3757EA618789C6 + +Count = 228 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = D96C09271C1D21F199EA3960E18BE120A44B85C6E482 + +Count = 229 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 5F5143FA55E22DF5DB2ADF8A2A460958964F4606D0C6 + +Count = 230 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 047BDBAEF519551C9C85512981B9B0BE5005F051D3F3 + +Count = 231 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 1A9B58442BBDDC1C59D55C72CA3C8D099EDD999B540F + +Count = 232 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = +CT = DE27B3C1B43A54D62518F1D00DEC368FB4F900E316568A + +Count = 233 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 00 +CT = 998D7701C14BB42EA6671F633F172905E74AF11CC33DD0 + +Count = 234 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 0001 +CT = 51E3F26591E3BE593CDE2B4D53A478BE4E41F0C9991F76 + +Count = 235 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102 +CT = 255ED813C6C9E755D8DFD4DBE2FB1ADDBFE6A35FEDCB35 + +Count = 236 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 00010203 +CT = 2BB84CB90B56B276FA150694A9920CDE8641E0402D5319 + +Count = 237 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 0001020304 +CT = CAB056AA88F11081BFC816EA54991825547B8E4DAFBA22 + +Count = 238 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405 +CT = 85FF40FCBFEB1699E54025CD9D8795C55AE334C9C775EB + +Count = 239 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 00010203040506 +CT = 37466ECBEF0CF67577D9829043BF00DCC1493608A5BEED + +Count = 240 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 0001020304050607 +CT = 066D386BDC3BFD5B0E86DBDF5C43B5A82060CC82FBF348 + +Count = 241 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708 +CT = EE35C5ECBEB4F7EF61D264B45AB316650310A0AA38582E + +Count = 242 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 00010203040506070809 +CT = 252EA99EE58EE9252C1B54E38E75CBB44658B78B4A6E96 + +Count = 243 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A +CT = B0C179AC69E858EA8587E97D8BCB17018F941F18631FCD + +Count = 244 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B +CT = 73F5083A228D1FA411B18A63640A216FCCE84842E1E389 + +Count = 245 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C +CT = 41AAA97377B3972F781A703972C76771CADAC6AFE81D17 + +Count = 246 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D +CT = 1A926838E49E79A1A3A3E7736793944B25907ACB09B638 + +Count = 247 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E +CT = 39D9906849736ACFEA213C88299219D0F70FAF4561CBD3 + +Count = 248 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F +CT = 95A9CC016DB1D56FCAAA1CC08D2494D27DB53543FD98DF + +Count = 249 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 307824FCBD38D1744CF85B79A21590C6D346AE0E2B25F1 + +Count = 250 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 86B3B4DCA59E27A27FD949222443797A4E6F64145E91AD + +Count = 251 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = F60ADC6495BAB58BFCBE5D5B847B7BD5906B9420665E7E + +Count = 252 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 4F48371B6AF7528668A2E81710B698298AAF65C237B749 + +Count = 253 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 89BDEA40E36A9DF8D42E4A5C36AF68993424EBB389CE02 + +Count = 254 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 2021C84BC884DC990D48914989FC10C1813537C51C55BA + +Count = 255 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 20F20FF1674EC0E2E0238E7828853A4390AC67275E2D9B + +Count = 256 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 4F7CC6B92F63AA085212455CE6B80739F6EA5640C191C4 + +Count = 257 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 6034C839C70E7752A6D5487C1299EA7DFB694DDB17F08F + +Count = 258 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 5E427A3A599AB55C49E5F13A392B8763F53E62F0F27013 + +Count = 259 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 0005A3730F2091229D1AF939EBA2735783539AE5BA2DEA + +Count = 260 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = B2B2A81D5FB5EAB1B0DEBFE9BDE71DF656B4507E9F428B + +Count = 261 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = D96C09271C1D955D5AC1AA84EDA53F7C9D3AAFB2F53E0F + +Count = 262 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 5F5143FA55E2401B0EFE803DE334D9E31E177F94A46EAB + +Count = 263 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 047BDBAEF519DC1C94AA2F9A92F2C6F783B9B789F1BCB0 + +Count = 264 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 1A9B58442BBD1895EED27997565814639FF645489EEC03 + +Count = 265 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = +CT = DE27B3C1B43A54C25541E3558F20E16231D5A5B964932993 + +Count = 266 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 00 +CT = 998D7701C14BB41DD88440E79286BB0F881C2D4D15A21A90 + +Count = 267 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 0001 +CT = 51E3F26591E3BE66901BFD188CDA8195238369EBDFA389BE + +Count = 268 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102 +CT = 255ED813C6C9E79EF60A4A2CA102BC2BB40A486A6B7A458D + +Count = 269 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 00010203 +CT = 2BB84CB90B56B23C3A24D6BC347EBD84AEA43B68DC3A296A + +Count = 270 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 0001020304 +CT = CAB056AA88F110F780CF8C5DEF2B02DEC09518D5537E6C12 + +Count = 271 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405 +CT = 85FF40FCBFEB16F5B6E5F6B395815F3E24036D4D5C19643F + +Count = 272 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 00010203040506 +CT = 37466ECBEF0CF6C929B3B6296031CF4D6B4B8DBD5CD168F9 + +Count = 273 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 0001020304050607 +CT = 066D386BDC3BFDE562EA36234D704F81F5D4EF4F4F8C94D9 + +Count = 274 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708 +CT = EE35C5ECBEB4F721C4E10C2EAD1F52D7BA3A2322D015F781 + +Count = 275 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 00010203040506070809 +CT = 252EA99EE58EE9DD41E7F080AC6D325B836A58F6B9E7EC98 + +Count = 276 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A +CT = B0C179AC69E8583FE372995E7F3A5E88A547D3D867384A2D + +Count = 277 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B +CT = 73F5083A228D1FA49365D30F651E04D242165876A65FC2F9 + +Count = 278 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C +CT = 41AAA97377B397586DA942529D44E6A9EC77296DE86B876D + +Count = 279 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D +CT = 1A926838E49E793326CE2061369ABE62C80775A01183CA0B + +Count = 280 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E +CT = 39D9906849736AFECC3456EF2226A0DB0BE4CBE2C3A35F18 + +Count = 281 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F +CT = 95A9CC016DB1D54691177FABFCC82952712B34743DE54B39 + +Count = 282 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 307824FCBD38D15214C25638896988603686950EA6F5C529 + +Count = 283 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 86B3B4DCA59E2775910E80406B9D2ABAB2B44C01F37C2A45 + +Count = 284 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = F60ADC6495BAB5AA3D35E376752FE3D63656D6CDE3FC63FE + +Count = 285 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 4F48371B6AF752A80AF9FC4EFF007EA310A32E6EA8B7D74D + +Count = 286 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 89BDEA40E36A9D3957589F78957638B2D322258E36AEBB90 + +Count = 287 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 2021C84BC884DC660BDCDB6FAD3DF1EC629736F26113AE95 + +Count = 288 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 20F20FF1674EC0DF13D84925EC641BEF382E2EF866324500 + +Count = 289 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 4F7CC6B92F63AA2A103889764FDCC5FF7D593307FFDEA491 + +Count = 290 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 6034C839C70E77FC408B47CBF8562492B47C9A24F84D5747 + +Count = 291 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 5E427A3A599AB5CF0F3C3A97B5BBF74668B5EEBE5BBCFA80 + +Count = 292 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 0005A3730F2091FD079D58D1BA432A062AE116CCEF2C6073 + +Count = 293 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = B2B2A81D5FB5EA29DC6FC6258762249B6F3035F969368E46 + +Count = 294 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = D96C09271C1D9557627CF2979F2A7798EA9DC1515105F207 + +Count = 295 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 5F5143FA55E240F9CA2B807EE669036CB7496E6314B45B04 + +Count = 296 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 047BDBAEF519DCC4CB659B9E46C0947928E2BED2566B71AC + +Count = 297 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 1A9B58442BBD18F78BA6A4B49199CAF4F5877A07A7F83DFB + +Count = 298 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = +CT = DE27B3C1B43A54C25A9EC999EE85073E014C3B51BB33005AA2 + +Count = 299 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 00 +CT = 998D7701C14BB41DBAB49A54B539BC64596BFB22EF2E22AAB1 + +Count = 300 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 0001 +CT = 51E3F26591E3BE66E22CE91A78ACF215C8844F7BBC630798EB + +Count = 301 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102 +CT = 255ED813C6C9E79E11CE5BADEF2CFEB4C405417749E0FF96C7 + +Count = 302 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 00010203 +CT = 2BB84CB90B56B23C16B7CF6F3A938BE1324EEE0F48A97CF4E6 + +Count = 303 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 0001020304 +CT = CAB056AA88F110F717C4CF9B5AC5A006E69BCE3ABE9A2F38B4 + +Count = 304 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405 +CT = 85FF40FCBFEB16F5ACAC99788BF7FCB713DD70BF183DB23949 + +Count = 305 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 00010203040506 +CT = 37466ECBEF0CF6C998DCB79668769B826DF0217FB83DA1D1C9 + +Count = 306 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 0001020304050607 +CT = 066D386BDC3BFDE56BC51ADE8D40C35B7F89F7DCF87A0F1E5E + +Count = 307 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708 +CT = EE35C5ECBEB4F721F449CE793744EE3D2AC66A0534A54A2AA1 + +Count = 308 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 00010203040506070809 +CT = 252EA99EE58EE9DD9F77B1FFCE885787DC74C91A02B93AB68E + +Count = 309 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A +CT = B0C179AC69E8583FD6406C55A0454FA8D791D2E54202C72D55 + +Count = 310 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B +CT = 73F5083A228D1FA4500C9645582EF057671305F1BA8CF7C61C + +Count = 311 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C +CT = 41AAA97377B39758FE208ACEA0DF3905DCC26958071C244BCC + +Count = 312 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D +CT = 1A926838E49E79330E75CB0133C7EA8AD437ECB29C19671536 + +Count = 313 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E +CT = 39D9906849736AFEE9405E0CFF495953DF6976F1E0FBB4BACD + +Count = 314 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F +CT = 95A9CC016DB1D54668F64F27C71C56F7BFBCCF165FAE3556AE + +Count = 315 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 307824FCBD38D152551E4086F7AA212973B17DC874F7C8FE07 + +Count = 316 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 86B3B4DCA59E27754179CD9E4DD1ACA1DAD93194A504E4C717 + +Count = 317 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = F60ADC6495BAB5AA384F5E9D8BB7F0BA6C3682901859E82D46 + +Count = 318 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 4F48371B6AF752A8C6D9C20E188670E544E67C9045590C4A7C + +Count = 319 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 89BDEA40E36A9D39A5836D90C1631A78B45FA73BB74A1543A7 + +Count = 320 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 2021C84BC884DC665C3E92098A96B7A4520A45952AA432B343 + +Count = 321 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 20F20FF1674EC0DF8AD19F8A19686AC963D4826E34DD80E2F3 + +Count = 322 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 4F7CC6B92F63AA2AB82101C9BCD6A9720C628BA326367B733A + +Count = 323 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 6034C839C70E77FC0F98BD1922417F6DF1711732A2D9B0EED2 + +Count = 324 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 5E427A3A599AB5CF749D2F10933470927B1C9CEAE1CB48C28A + +Count = 325 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 0005A3730F2091FDA37C9551BAFCDE193B1DB374B463436F95 + +Count = 326 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = B2B2A81D5FB5EA292C93C312559D9E3D8F7AF47AED076F0CBA + +Count = 327 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = D96C09271C1D9557D4C53964878103708501DC4363E1856960 + +Count = 328 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 5F5143FA55E240F9574C395B565DEA49FFAA048B83F1D2282D + +Count = 329 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 047BDBAEF519DCC4E6C960B0A36DA6716E98A55D313B08332B + +Count = 330 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 1A9B58442BBD18F7F57EE355E2E1011A42AB5F2E013A5258C1 + +Count = 331 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = +CT = DE27B3C1B43A54C25A720B0EEE5B3A487F26AB8B14A616BDB20D + +Count = 332 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 00 +CT = 998D7701C14BB41DBA9138AFBF15211BB432FEA348888655A204 + +Count = 333 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 0001 +CT = 51E3F26591E3BE66E2C33CBFA1F26164A7D38E8655623805A67F + +Count = 334 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102 +CT = 255ED813C6C9E79E1107B53FDFA17BBBFBD9055386C634EFFB11 + +Count = 335 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 00010203 +CT = 2BB84CB90B56B23C16EAF248B4144648B9B942A11DEFEFFB20C9 + +Count = 336 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 0001020304 +CT = CAB056AA88F110F7178FDE9B3FC79A245506EF74FC44A032DF18 + +Count = 337 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405 +CT = 85FF40FCBFEB16F5AC3B7B1DF2C76818BFBBFD5B468374B80B07 + +Count = 338 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 00010203040506 +CT = 37466ECBEF0CF6C998796069E82F058123D0EEF0EC0A9DD405A9 + +Count = 339 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 0001020304050607 +CT = 066D386BDC3BFDE56B07AACA3A01571CDD44E0E43203A4A0578C + +Count = 340 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708 +CT = EE35C5ECBEB4F721F4F3EC1674E7CDB36BC1BDF8478FB9973241 + +Count = 341 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 00010203040506070809 +CT = 252EA99EE58EE9DD9FA2325C5D87F86848959AD23F8167BA44A4 + +Count = 342 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A +CT = B0C179AC69E8583FD66B86DED6EE3452AE7B024355866A84A966 + +Count = 343 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B +CT = 73F5083A228D1FA45045D17A811C82E8D5A0258C63FB64BED07A + +Count = 344 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C +CT = 41AAA97377B39758FE9EB3F19E9F017FED91D05C211CC0D54B58 + +Count = 345 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D +CT = 1A926838E49E79330E6AD9A7C3D250899EAB6A55F09638058145 + +Count = 346 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E +CT = 39D9906849736AFEE9B99F3229B716DDCCCEA0C10649B7730F48 + +Count = 347 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F +CT = 95A9CC016DB1D54668CC506839D4AC0E8115BD38944655164256 + +Count = 348 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 307824FCBD38D152551D566D49661802EEB44D13FCB1E2FC054C + +Count = 349 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 86B3B4DCA59E277541E950266047EFB0901E26823B4B96AB47BA + +Count = 350 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = F60ADC6495BAB5AA38B3C22BC1ED0E05300D21D2E3259E0C82B8 + +Count = 351 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 4F48371B6AF752A8C6316F99A96AFB3EC83BD798F061D7F5F301 + +Count = 352 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 89BDEA40E36A9D39A59DA0E82EB1459F9D053E9A52CBDC3C624E + +Count = 353 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 2021C84BC884DC665C32F240BD690C856BCDB311B6B5CE000A2C + +Count = 354 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 20F20FF1674EC0DF8A55BF05A4A4EE578336A9A9E3CEAE582B1B + +Count = 355 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 4F7CC6B92F63AA2AB89043FC00DA798E8CEAD28F5A8DF928E101 + +Count = 356 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 6034C839C70E77FC0FCED3A0E075EF46452E9AB9465FBCD3BB91 + +Count = 357 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 5E427A3A599AB5CF74AFB5B47421E543D6929A1BDFEEC6A55BE6 + +Count = 358 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 0005A3730F2091FDA360BB0FADA5313F4DDCA5F016A04CF21BBD + +Count = 359 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = B2B2A81D5FB5EA292C080AEF4636189E435A8042D0809A1D927A + +Count = 360 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = D96C09271C1D9557D43BA33BDA86C651C62C9774A3F61EEAE263 + +Count = 361 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 5F5143FA55E240F9571617AD15C490A9BF3D29229118FB1E48BD + +Count = 362 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 047BDBAEF519DCC4E65AFE252934F92194219430C35E080FB4FF + +Count = 363 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 1A9B58442BBD18F7F5EAD4A2F699F7607CB385CE9D92B748267B + +Count = 364 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = +CT = DE27B3C1B43A54C25A724A5B265549690C0CE6C6AEC1007F5B3617 + +Count = 365 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 00 +CT = 998D7701C14BB41DBA91A2CF89F93DC9A36F3ED4F49766614CBB2A + +Count = 366 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 0001 +CT = 51E3F26591E3BE66E2C31CED40DF4DC0A26D30A15BF18B037CB97E + +Count = 367 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102 +CT = 255ED813C6C9E79E1107AD4D73C122CE67E272429BB8A6BB1B1BE1 + +Count = 368 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 00010203 +CT = 2BB84CB90B56B23C16EA913827E85927B4F50B22DCEFE4AC9A5B03 + +Count = 369 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 0001020304 +CT = CAB056AA88F110F7178FA14DF2DFE8631FB77E56F82771E017263D + +Count = 370 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405 +CT = 85FF40FCBFEB16F5AC3B7F0151568928260700D463BDA20951E910 + +Count = 371 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 00010203040506 +CT = 37466ECBEF0CF6C998792425E05AE24CE99DE56889EDBE35941374 + +Count = 372 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 0001020304050607 +CT = 066D386BDC3BFDE56B07788D2C9B70A75A392C8019AE87F9B110C0 + +Count = 373 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708 +CT = EE35C5ECBEB4F721F4F3F137A529550D5317A1D65173C074575C9F + +Count = 374 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 00010203040506070809 +CT = 252EA99EE58EE9DD9FA2DFB75C8363AB5EE6CCAF4E73D6D558658A + +Count = 375 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A +CT = B0C179AC69E8583FD66B5C33B800C6BFA3464D40F40DD201D5F8B8 + +Count = 376 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B +CT = 73F5083A228D1FA450455696CB04754450C6CEDDE3A73CBB2B6D2D + +Count = 377 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C +CT = 41AAA97377B39758FE9E861BB533AD748C7E07AD64FCBB9F12EA44 + +Count = 378 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D +CT = 1A926838E49E79330E6AFB00E517E2E7BE6A26DFBB5F832086E715 + +Count = 379 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E +CT = 39D9906849736AFEE9B9EC2C400EC9DC2745C2434D6D1352ECCEEC + +Count = 380 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F +CT = 95A9CC016DB1D54668CCA079CC84132F9BDB0B18502444726D2E8C + +Count = 381 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 307824FCBD38D152551DC4876DCCFD4BE305A4A21CF880F3B50F64 + +Count = 382 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 86B3B4DCA59E277541E95D0979E6D89FFAE752108FE03681D3A5DF + +Count = 383 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = F60ADC6495BAB5AA38B38F5883C6FDF4B0BC27BEB901C0D685AE60 + +Count = 384 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 4F48371B6AF752A8C6317459134175AE321BD051D187AF63CF2202 + +Count = 385 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 89BDEA40E36A9D39A59DFE857238C6B7ECD4B6A1351543779C642B + +Count = 386 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 2021C84BC884DC665C3243D2C88FA3C9592189D88AC8A257A1F978 + +Count = 387 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 20F20FF1674EC0DF8A55CE1C54203D74FEB64D47C963AA84013AC4 + +Count = 388 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 4F7CC6B92F63AA2AB8907B5DA4CE74183CA58FDB7F6E8529093A58 + +Count = 389 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 6034C839C70E77FC0FCED76EDB09CF1BD9E145FF249DAE32617B25 + +Count = 390 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 5E427A3A599AB5CF74AFEB38A149816060441FB45B3003EE8EA918 + +Count = 391 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 0005A3730F2091FDA3602E94A52E3F1EDD6D54C2E513C767069351 + +Count = 392 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = B2B2A81D5FB5EA292C08122D87E56DC35F85A741BC78F5824E8768 + +Count = 393 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = D96C09271C1D9557D43B723A1C82D16492BE255CD23F1C1E1DCEB5 + +Count = 394 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 5F5143FA55E240F957165663A793227F007A35D1CAC3C7BE84CD32 + +Count = 395 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 047BDBAEF519DCC4E65A5D467F54E3708F1F95CB8794DEF58CC0BE + +Count = 396 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 1A9B58442BBD18F7F5EA1BE20A5DD208616A2F7DE3BD9587DFBE9F + +Count = 397 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = +CT = DE27B3C1B43A54C25A724A5F132D2F74A13CE8DE40A2442775C881EC + +Count = 398 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 00 +CT = 998D7701C14BB41DBA91A24023B53FC01A2A8AF6BFF38612E0D2E421 + +Count = 399 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 0001 +CT = 51E3F26591E3BE66E2C31CBDAFA62412098632D0A43E1301EF69559D + +Count = 400 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102 +CT = 255ED813C6C9E79E1107AD13E974C4752DDDAAA4F8282F639D88C2CC + +Count = 401 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 00010203 +CT = 2BB84CB90B56B23C16EA91859EB385B2BF27FB7EE062D00B0C3F2F3D + +Count = 402 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 0001020304 +CT = CAB056AA88F110F7178FA1C0C894FA25EAAF1C6F257B9F4D448775C9 + +Count = 403 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405 +CT = 85FF40FCBFEB16F5AC3B7FEA5AE39C47574DEAE0ECC63974D52DC650 + +Count = 404 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 00010203040506 +CT = 37466ECBEF0CF6C9987924ACD7260472B57B14EB473A149BE5684750 + +Count = 405 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 0001020304050607 +CT = 066D386BDC3BFDE56B07782D1BBAEF8CCC66D4A11387554D764136B1 + +Count = 406 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708 +CT = EE35C5ECBEB4F721F4F3F18FC13BF9CCC7CEA6B3800902EFF72D4457 + +Count = 407 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 00010203040506070809 +CT = 252EA99EE58EE9DD9FA2DF9E15AA09BDCC0267E9CDCDFFB2D31A0A34 + +Count = 408 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A +CT = B0C179AC69E8583FD66B5C0090148E0BB4FB8089A196FF2449127105 + +Count = 409 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B +CT = 73F5083A228D1FA45045563C160578593315740965FB0908B3125AB7 + +Count = 410 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C +CT = 41AAA97377B39758FE9E860691931F816C04031EE48C5CBF9245640F + +Count = 411 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D +CT = 1A926838E49E79330E6AFB76866B97BAE5ECB4D0D1DE94686C802170 + +Count = 412 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E +CT = 39D9906849736AFEE9B9EC58477BABA416FAA9F1E58B1EAA617A3666 + +Count = 413 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F +CT = 95A9CC016DB1D54668CCA0DCD4CC641FEE6CADA7C81EBD19953178F1 + +Count = 414 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 307824FCBD38D152551DC44EA874AC55FC80531604664C46C8A12351 + +Count = 415 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 86B3B4DCA59E277541E95D63E7477615DB609B5917C9185AB7EF73D4 + +Count = 416 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = F60ADC6495BAB5AA38B38FB323D969E16AFD916A07255AFCD9FE693F + +Count = 417 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 4F48371B6AF752A8C631742E4B1A8385C3A6DD4E4A09FA6D93F1AA13 + +Count = 418 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 89BDEA40E36A9D39A59DFE66D70A432A1112BB12392981660C0DB0A9 + +Count = 419 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 2021C84BC884DC665C3243C825C65D5A61B4288337038B2072A6D528 + +Count = 420 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 20F20FF1674EC0DF8A55CE236BD52D3A49A08C2B67E72A66CB545F08 + +Count = 421 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 4F7CC6B92F63AA2AB8907B5264BEAEA6AB5C05FD49D24BCBFB30DF97 + +Count = 422 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 6034C839C70E77FC0FCED7C73F425C34BC72031B4733665D0BA7A087 + +Count = 423 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 5E427A3A599AB5CF74AFEBB4CDC6D610506C82D6556F721C026BC99F + +Count = 424 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 0005A3730F2091FDA3602E153309E7C8D7FC9A10329410C17AD70250 + +Count = 425 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = B2B2A81D5FB5EA292C0812FCAD712D0A45E9CBA23F37FD1C34DC5B7A + +Count = 426 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = D96C09271C1D9557D43B72993C5248128B6A814D371BF626C3279C70 + +Count = 427 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 5F5143FA55E240F9571656B9032C911BD6FCDA74D177D0009C0A296D + +Count = 428 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 047BDBAEF519DCC4E65A5DCD5F0CDDBF693FD9691E990FCA1C82F7E2 + +Count = 429 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 1A9B58442BBD18F7F5EA1B1DC2061869B4315879279688CF86CD3E96 + +Count = 430 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = +CT = DE27B3C1B43A54C25A724A5F572C13E81827C0AC0433B21F446D5F725B + +Count = 431 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 00 +CT = 998D7701C14BB41DBA91A240DAED264D9141D3E492917106F5C3406AC1 + +Count = 432 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 0001 +CT = 51E3F26591E3BE66E2C31CBDD59F77BECF1154A5D5EE6C89B2E3E964E5 + +Count = 433 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102 +CT = 255ED813C6C9E79E1107AD13AC7965036592AA2D795865012A6EAEFEEA + +Count = 434 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 00010203 +CT = 2BB84CB90B56B23C16EA9185A8A6B7F9E955AEEBF27FC15B03B9728009 + +Count = 435 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 0001020304 +CT = CAB056AA88F110F7178FA1C075466E0C41679EB03A3524E8F86A6E04EF + +Count = 436 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405 +CT = 85FF40FCBFEB16F5AC3B7FEAAA42004D53BC575AFB07F5650FF37EA3F5 + +Count = 437 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 00010203040506 +CT = 37466ECBEF0CF6C9987924AC513F054655C039F5C581E6EB250986115D + +Count = 438 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 0001020304050607 +CT = 066D386BDC3BFDE56B07782DF949CC6A9A9EF22720307461790F83BB6E + +Count = 439 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708 +CT = EE35C5ECBEB4F721F4F3F18F72C748787C7979DE29141D374A8041E987 + +Count = 440 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 00010203040506070809 +CT = 252EA99EE58EE9DD9FA2DF9E89B5F86CDB16327F182C33E9864A325FDC + +Count = 441 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A +CT = B0C179AC69E8583FD66B5C0036F27CA7A6DA61C1AE4826E4454E6719D6 + +Count = 442 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B +CT = 73F5083A228D1FA45045563C2097BDE4CCA8C3948DDBFFFED5E895C129 + +Count = 443 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C +CT = 41AAA97377B39758FE9E8606E674753186E13E517FD3145E1225CEA34E + +Count = 444 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D +CT = 1A926838E49E79330E6AFB76A7EB755D646528F81029CB9DD468108086 + +Count = 445 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E +CT = 39D9906849736AFEE9B9EC5851A65A0081CE9AE669E95E53114890A995 + +Count = 446 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F +CT = 95A9CC016DB1D54668CCA0DC7BB31CF3B7F35AD0F1291EF5CB19BE60A4 + +Count = 447 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 307824FCBD38D152551DC44E167B41EB091C45C196A8F3A0F6FCB26423 + +Count = 448 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 86B3B4DCA59E277541E95D63AFC5D036DA6C8DE3C8B26ABE9B7AFAB144 + +Count = 449 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = F60ADC6495BAB5AA38B38FB383C6FF654DC8A8E0FD77CB383F62088215 + +Count = 450 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 4F48371B6AF752A8C631742E725FBA12951B4FC7DD9CC5D05774524B22 + +Count = 451 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 89BDEA40E36A9D39A59DFE66971525E5BBD4295B9F5F65162C926092FE + +Count = 452 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 2021C84BC884DC665C3243C82229D4C6970E3BCCBF4C6B0A873885384E + +Count = 453 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 20F20FF1674EC0DF8A55CE2340E9E34DF8587AF6E8590247DAEF1A7E32 + +Count = 454 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 4F7CC6B92F63AA2AB8907B52C01446904668BCBDBAD3DE8DEFF47E5ACE + +Count = 455 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 6034C839C70E77FC0FCED7C7D7474FCB2FE4B63F85C7E1271CD4FC2AB5 + +Count = 456 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 5E427A3A599AB5CF74AFEBB4E5B246DF1685D5C9E3D4F8FCC36FE1AEA7 + +Count = 457 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 0005A3730F2091FDA3602E158EB670F41BC7814CA6B0D271E0473DD8FE + +Count = 458 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = B2B2A81D5FB5EA292C0812FCD91A67C5CFF3B26B831F121AF43FC52C4B + +Count = 459 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = D96C09271C1D9557D43B72998ECA36CAD8EFEDA95CA516457579BFFBE1 + +Count = 460 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 5F5143FA55E240F9571656B98240483FF4CE4B301455D1B2316D39A49C + +Count = 461 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 047BDBAEF519DCC4E65A5DCD7ED59BCAD4267E5A558F8C72D6CD2C175D + +Count = 462 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 1A9B58442BBD18F7F5EA1B1D2467D6FE75012B1D82EE546A786E96B7F0 + +Count = 463 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = +CT = DE27B3C1B43A54C25A724A5F57FCD516143D44F4D95E60AF41CBB7D67EA7 + +Count = 464 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 00 +CT = 998D7701C14BB41DBA91A240DA8297DEE8EAAEDCCC5D6949C9319A646D5E + +Count = 465 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 0001 +CT = 51E3F26591E3BE66E2C31CBDD5BF59A3E748124D2E536220D1B6D375BA5E + +Count = 466 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102 +CT = 255ED813C6C9E79E1107AD13AC8986CB303A99E68589E376CBBEE5BFF8BF + +Count = 467 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 00010203 +CT = 2BB84CB90B56B23C16EA9185A8C3AC5D40C155F4943BE3C716BCB8410B84 + +Count = 468 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 0001020304 +CT = CAB056AA88F110F7178FA1C07581F7E2D9CD48746B78A7215527907DCAD8 + +Count = 469 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405 +CT = 85FF40FCBFEB16F5AC3B7FEAAAB7ADF1E728DD1EF957CE8D13B2DEB252B7 + +Count = 470 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 00010203040506 +CT = 37466ECBEF0CF6C9987924AC51E000148AB483E1C93994B6663FF0BEA792 + +Count = 471 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 0001020304050607 +CT = 066D386BDC3BFDE56B07782DF9F74DB4A854DFAB87C6367A46905233D72B + +Count = 472 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708 +CT = EE35C5ECBEB4F721F4F3F18F7254B8D0583627BB65A603492A2A64388E9D + +Count = 473 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 00010203040506070809 +CT = 252EA99EE58EE9DD9FA2DF9E896C945FE27CD7768D1E2E19CC0B431EC85E + +Count = 474 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A +CT = B0C179AC69E8583FD66B5C00368DA5C8E7A4F39E63717EF9E33F2413B667 + +Count = 475 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B +CT = 73F5083A228D1FA45045563C200808F7E6ADB713B5C18BFE5EA5F8C7E2C6 + +Count = 476 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C +CT = 41AAA97377B39758FE9E8606E644627204F782E92CF589C5BC825CA86A94 + +Count = 477 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D +CT = 1A926838E49E79330E6AFB76A7B16DD06234A7AE36BAF09EC43AE81CD9C9 + +Count = 478 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E +CT = 39D9906849736AFEE9B9EC5851CBD529820E3B05C76967534DC6AB938CE4 + +Count = 479 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F +CT = 95A9CC016DB1D54668CCA0DC7BC6CA110EA817DF8C099E92F80055691891 + +Count = 480 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 307824FCBD38D152551DC44E16D5F3ED127A7B9FF98D62452FF287A7F709 + +Count = 481 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 86B3B4DCA59E277541E95D63AF66F2D97C20D1571B18578E84A91DFF266E + +Count = 482 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = F60ADC6495BAB5AA38B38FB383B7219FD6DEE5447393592FB0272879D69A + +Count = 483 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 4F48371B6AF752A8C631742E72BC295672AE5B1FC59403B0E9C725C7CEB1 + +Count = 484 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 89BDEA40E36A9D39A59DFE6697D5C3F5F137D8F41FB11CF0B9A8E3ED7A24 + +Count = 485 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 2021C84BC884DC665C3243C82295889A48E50D443032AB4F99F4DCE28ECC + +Count = 486 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 20F20FF1674EC0DF8A55CE234064C143DDE4D715952DDD458EB9FBA6757D + +Count = 487 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 4F7CC6B92F63AA2AB8907B52C099D4F8690F3E5D056498C0D31604E045BE + +Count = 488 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 6034C839C70E77FC0FCED7C7D75BE9B2E350B31C2E0BFE7ED244CCB0F519 + +Count = 489 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 5E427A3A599AB5CF74AFEBB4E555BC18457121237B00CA97D3F718CB2442 + +Count = 490 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 0005A3730F2091FDA3602E158EBED61D7BEB45C95C7571C510850D5C57BF + +Count = 491 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = B2B2A81D5FB5EA292C0812FCD919EB2D8B4830B36245C0DDCE43B8832979 + +Count = 492 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = D96C09271C1D9557D43B72998E41F60319EE1B7E90A009AA7C00D1DEDCC2 + +Count = 493 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 5F5143FA55E240F9571656B98236B03F0D9A77AD4F04B396D289EB5E8832 + +Count = 494 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 047BDBAEF519DCC4E65A5DCD7E0C36F7275BF57BBE1E317CA5F5AE9C28CE + +Count = 495 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 1A9B58442BBD18F7F5EA1B1D243B3D979AFA55B4733E04B71A6A6285E7AC + +Count = 496 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = +CT = DE27B3C1B43A54C25A724A5F57FC59CFB04993ED986092A992EDFDAC29D238 + +Count = 497 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 00 +CT = 998D7701C14BB41DBA91A240DA8260486C0DAB5420A3CAB0C2F30B1C53DA89 + +Count = 498 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 0001 +CT = 51E3F26591E3BE66E2C31CBDD5BF8C268AA461A6DE2A660E9B1B6C977541C4 + +Count = 499 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102 +CT = 255ED813C6C9E79E1107AD13AC89CB864346939F2B630C16D0850C1805D96B + +Count = 500 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 00010203 +CT = 2BB84CB90B56B23C16EA9185A8C3292FC42021CA4361D3FB327BEF8BCB53AD + +Count = 501 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 0001020304 +CT = CAB056AA88F110F7178FA1C075813764F4EC308AC0222AC0E1812CCDFA129C + +Count = 502 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405 +CT = 85FF40FCBFEB16F5AC3B7FEAAAB7C0344F02D2C6F23E58B6A71A40A34EC703 + +Count = 503 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 00010203040506 +CT = 37466ECBEF0CF6C9987924AC51E05EA7538AD9CC731FE32F23DFB77573DA9F + +Count = 504 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 0001020304050607 +CT = 066D386BDC3BFDE56B07782DF9F784C931377253EB809B105B89EF46388772 + +Count = 505 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708 +CT = EE35C5ECBEB4F721F4F3F18F72547664AC6F1DFB4AFD4543C9A5FD87519D78 + +Count = 506 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 00010203040506070809 +CT = 252EA99EE58EE9DD9FA2DF9E896C8544A961788B4C6D3C4E3556BE833EDDA7 + +Count = 507 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A +CT = B0C179AC69E8583FD66B5C00368D4DA64860E063245F00FBD957883064977F + +Count = 508 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B +CT = 73F5083A228D1FA45045563C2008A441654086DD7BCD2D2529D9FA81B244B0 + +Count = 509 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C +CT = 41AAA97377B39758FE9E8606E64416AC94A12483933A272B5BA9A459C8F665 + +Count = 510 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D +CT = 1A926838E49E79330E6AFB76A7B1490013C80D4BCECB14EE7CDFF7997D4743 + +Count = 511 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E +CT = 39D9906849736AFEE9B9EC5851CBBF6E91E727DE1983AF8BA39820CD3A7759 + +Count = 512 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F +CT = 95A9CC016DB1D54668CCA0DC7BC64447F969D97146542EBA8D75A6C749CD02 + +Count = 513 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 307824FCBD38D152551DC44E16D56BAFEF778DC0A970739B28F88B81A123B5 + +Count = 514 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 86B3B4DCA59E277541E95D63AF66CF18B7D6409FCA8ACA004E187E0E5A6C55 + +Count = 515 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = F60ADC6495BAB5AA38B38FB383B7EE1ADB2FF6FED921ED1A41912503124C66 + +Count = 516 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 4F48371B6AF752A8C631742E72BC51660C8D5CD22EF5450F74C0E583B7CABD + +Count = 517 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 89BDEA40E36A9D39A59DFE6697D508CF1D72865D896221B971C974B58F7AFB + +Count = 518 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 2021C84BC884DC665C3243C82295227DAEFDC15670DEA4D863133FC25DFA0A + +Count = 519 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 20F20FF1674EC0DF8A55CE234064C6E8FCDDEC7D2F04B4E1EB1A974F05A345 + +Count = 520 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 4F7CC6B92F63AA2AB8907B52C0998DB01683103C69DA6D7FC2CF02DB049124 + +Count = 521 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 6034C839C70E77FC0FCED7C7D75B237845754934B43C3C7E4550112C6D349F + +Count = 522 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 5E427A3A599AB5CF74AFEBB4E555C6BBFA3068B2565380C310BEBE4621B066 + +Count = 523 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 0005A3730F2091FDA3602E158EBEE936F61500006F7111B2B0C374E7E51013 + +Count = 524 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = B2B2A81D5FB5EA292C0812FCD919237FD15BB858B3DCC192582F539DB8E835 + +Count = 525 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = D96C09271C1D9557D43B72998E41E2E2B0181AC634AFF351B629DA3F363857 + +Count = 526 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 5F5143FA55E240F9571656B9823639446197213786E05BCC787DE679A380D9 + +Count = 527 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 047BDBAEF519DCC4E65A5DCD7E0C16937DEB03E39640F04C37543ABB86692D + +Count = 528 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 1A9B58442BBD18F7F5EA1B1D243BE2EC65EDAF30A9E34255A7F63A08A85557 + +Count = 529 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = +CT = DE27B3C1B43A54C25A724A5F57FC59B50AD6CC30AF7D617FA57C4D48A6E820CE + +Count = 530 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 00 +CT = 998D7701C14BB41DBA91A240DA82606BC97BA43A842706EA35ED04EE12BD6038 + +Count = 531 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 0001 +CT = 51E3F26591E3BE66E2C31CBDD5BF8CD5CEACA5CDC087D7121D6DB2362CBDD532 + +Count = 532 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102 +CT = 255ED813C6C9E79E1107AD13AC89CB046745C48E632A2E6D0A36F5109380738B + +Count = 533 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 00010203 +CT = 2BB84CB90B56B23C16EA9185A8C3295723FECF5E556465E5E61C5527058EDAF5 + +Count = 534 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 0001020304 +CT = CAB056AA88F110F7178FA1C0758137048D46DAF3D48AA4DA03D36238626B411E + +Count = 535 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405 +CT = 85FF40FCBFEB16F5AC3B7FEAAAB7C01ADF52045955F4C73E84DB2FCAF3767666 + +Count = 536 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 00010203040506 +CT = 37466ECBEF0CF6C9987924AC51E05E0DE97EDC55A1F89690F5A30EDE77439212 + +Count = 537 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 0001020304050607 +CT = 066D386BDC3BFDE56B07782DF9F784B3749282EDD2EE8198317FFBB41F8B4207 + +Count = 538 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708 +CT = EE35C5ECBEB4F721F4F3F18F7254768B4D6700A94F98C120F6DFDB063EBFC9E0 + +Count = 539 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 00010203040506070809 +CT = 252EA99EE58EE9DD9FA2DF9E896C85F52671B3C0FD9AAE5F60B53B7D8B71A068 + +Count = 540 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A +CT = B0C179AC69E8583FD66B5C00368D4DBD8CF56F709E6E94E411369E9870139333 + +Count = 541 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B +CT = 73F5083A228D1FA45045563C2008A4E18AD9F8FBFDEAD8BB97FD1847F2427A22 + +Count = 542 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C +CT = 41AAA97377B39758FE9E8606E64416BEF1ED479FEA50F67CD90C446C5CD9A108 + +Count = 543 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D +CT = 1A926838E49E79330E6AFB76A7B1490999A6E9372649A78E70D4ADF5DA8FDD4C + +Count = 544 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E +CT = 39D9906849736AFEE9B9EC5851CBBFBF48040F0FCF26689DCF0182716BA11CC6 + +Count = 545 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F +CT = 95A9CC016DB1D54668CCA0DC7BC64485547AC7F5AB368E040FEFE52F74CB2FF5 + +Count = 546 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 307824FCBD38D152551DC44E16D56BC829914A6A405866D0F0110C48C38542F4 + +Count = 547 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 86B3B4DCA59E277541E95D63AF66CFA26E772932C04D9E1187672EE166D9E2D1 + +Count = 548 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = F60ADC6495BAB5AA38B38FB383B7EECDA542AC4871F3B201DFC85B8EA6EDD58E + +Count = 549 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 4F48371B6AF752A8C631742E72BC51EB5A6301B630D6609665BA52F168BB5157 + +Count = 550 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 89BDEA40E36A9D39A59DFE6697D50897B6DAD629168745E03DFB09945969C8C0 + +Count = 551 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 2021C84BC884DC665C3243C822952297D60C2E17F858F4FBDCC7F08EA2A0608A + +Count = 552 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 20F20FF1674EC0DF8A55CE234064C610BD6E2811093E4D16AEE7F9796109D7ED + +Count = 553 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 4F7CC6B92F63AA2AB8907B52C0998D4C579EA1655C212EF2AD34E3BAA092935E + +Count = 554 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 6034C839C70E77FC0FCED7C7D75B238FB176B2543D1AF0AC63C6533424780A8A + +Count = 555 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 5E427A3A599AB5CF74AFEBB4E555C69E3644DB3C4020CA7564FD0C0CDCB76829 + +Count = 556 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 0005A3730F2091FDA3602E158EBEE9328E07845FD9B81B808876937BEAA347E5 + +Count = 557 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = B2B2A81D5FB5EA292C0812FCD919233924D173BA77D2BD14347C03F03F358B59 + +Count = 558 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = D96C09271C1D9557D43B72998E41E2D9B57351F00118A6B9024626528D755CCA + +Count = 559 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 5F5143FA55E240F9571656B9823639F4BDDB0B81CEA48FACB24925B3550C38EE + +Count = 560 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 047BDBAEF519DCC4E65A5DCD7E0C1687058784BD51F0B6E4A38967EC9CA550AC + +Count = 561 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 1A9B58442BBD18F7F5EA1B1D243BE22797201581EF2E787A3CD47BC751A4C7BF + +Count = 562 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = +CT = DE27B3C1B43A54C25A724A5F57FC59B5913644C7291FE90382EA41A7DA15FADB55 + +Count = 563 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 00 +CT = 998D7701C14BB41DBA91A240DA82606BABBC71EFD1F260C303A6EDD891AB1C7B7B + +Count = 564 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 0001 +CT = 51E3F26591E3BE66E2C31CBDD5BF8CD58B1523E670219CE4BC86667F2AB5A96BBE + +Count = 565 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102 +CT = 255ED813C6C9E79E1107AD13AC89CB0464F50C585D2090295CB34540EF6F763AEE + +Count = 566 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 00010203 +CT = 2BB84CB90B56B23C16EA9185A8C3295775718CE92212194ED5EB63549F26379C86 + +Count = 567 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 0001020304 +CT = CAB056AA88F110F7178FA1C075813704BEC07F8232A8902EAD7CB4544D674F862B + +Count = 568 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405 +CT = 85FF40FCBFEB16F5AC3B7FEAAAB7C01ADA71A2CE8799D11FBBD4AF46C263541844 + +Count = 569 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 00010203040506 +CT = 37466ECBEF0CF6C9987924AC51E05E0DC76FFE63E0AA5FE23F8CD1604DC7953F8B + +Count = 570 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 0001020304050607 +CT = 066D386BDC3BFDE56B07782DF9F784B30BF524CDB7289784E9D2ED459E705FE885 + +Count = 571 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708 +CT = EE35C5ECBEB4F721F4F3F18F7254768B89F451125A41C30B6E0869E4E51AC44EE5 + +Count = 572 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 00010203040506070809 +CT = 252EA99EE58EE9DD9FA2DF9E896C85F5E3BC85313090A01A2E15DE2C612490EBB6 + +Count = 573 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A +CT = B0C179AC69E8583FD66B5C00368D4DBD93841304CB5A14C9812AAE1C43565F562E + +Count = 574 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B +CT = 73F5083A228D1FA45045563C2008A4E1B582B33CF37D345AE67E8B0E12794C494B + +Count = 575 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C +CT = 41AAA97377B39758FE9E8606E64416BE91732C477A72F8137A2F0F1FACB5F07C22 + +Count = 576 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D +CT = 1A926838E49E79330E6AFB76A7B149093C828AB041378F497F23A88CA4BC6CDA3B + +Count = 577 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E +CT = 39D9906849736AFEE9B9EC5851CBBFBF13E7E506E32C75E681208F6AD307C0874D + +Count = 578 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F +CT = 95A9CC016DB1D54668CCA0DC7BC644852CC1D92B2EA26C2A96177A75B4C52C77B5 + +Count = 579 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 307824FCBD38D152551DC44E16D56BC8A67A18202436A61D938636D29A9BFC445B + +Count = 580 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 86B3B4DCA59E277541E95D63AF66CFA2B1B49A11189BD0542FE3C7BCF3506E3A5A + +Count = 581 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = F60ADC6495BAB5AA38B38FB383B7EECD8EAA8286A8661AAFA9B80ABA599072A6E1 + +Count = 582 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 4F48371B6AF752A8C631742E72BC51EB8455FFD9C08C031C0614E43AFB17C00B7C + +Count = 583 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 89BDEA40E36A9D39A59DFE6697D508975C79C94EECC960BCA95F588CE69E8EF45B + +Count = 584 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 2021C84BC884DC665C3243C822952297A23845018771036E35A1AACC242D8264F3 + +Count = 585 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 20F20FF1674EC0DF8A55CE234064C610D12D05A8E280031A1E5A74C3589892523D + +Count = 586 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 4F7CC6B92F63AA2AB8907B52C0998D4CD094C23B14BE9BC768CEAA792433807F83 + +Count = 587 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 6034C839C70E77FC0FCED7C7D75B238F4345CC4D6A5CAE28573AAFEC012BA4C39B + +Count = 588 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 5E427A3A599AB5CF74AFEBB4E555C69E60B78930C63A44F145CA3E37FE1D556A59 + +Count = 589 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 0005A3730F2091FDA3602E158EBEE9324142A3D843F0ABB1FFE9C769922A76D141 + +Count = 590 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = B2B2A81D5FB5EA292C0812FCD91923393416E1FE7E358A239863D6536EE3B42217 + +Count = 591 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = D96C09271C1D9557D43B72998E41E2D9DFDF8B876AA39FFD1B69B3B5B5CAEE5539 + +Count = 592 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 5F5143FA55E240F9571656B9823639F43761F5054E01510A1C26C9C6B8A0F0A5B0 + +Count = 593 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 047BDBAEF519DCC4E65A5DCD7E0C16873A36249638E05E3602DED1653A15827293 + +Count = 594 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 1A9B58442BBD18F7F5EA1B1D243BE2277D729B26C87EBC50EB37BC1DFE597113F7 + +Count = 595 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = +CT = DE27B3C1B43A54C25A724A5F57FC59B591856C25E18918BDE7769CD17A5939330459 + +Count = 596 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 00 +CT = 998D7701C14BB41DBA91A240DA82606BABF11E72C8E383FAD442D6F0DBDB5002B324 + +Count = 597 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 0001 +CT = 51E3F26591E3BE66E2C31CBDD5BF8CD58B6B6806A20A0E3C88FAAE3429D5CEFF9B21 + +Count = 598 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102 +CT = 255ED813C6C9E79E1107AD13AC89CB0464C6EDA4204ABB66A702DCD3553BEE434C9B + +Count = 599 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 00010203 +CT = 2BB84CB90B56B23C16EA9185A8C3295775EA1C927AE68B7F5DBEFC1B1D56CD15FE4F + +Count = 600 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 0001020304 +CT = CAB056AA88F110F7178FA1C075813704BEB2FD8AA1B4A3E79BE6EED9320BA7F2F3DA + +Count = 601 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405 +CT = 85FF40FCBFEB16F5AC3B7FEAAAB7C01ADA72A0ACFF5F94D1BD10C286BC86C9C941BC + +Count = 602 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 00010203040506 +CT = 37466ECBEF0CF6C9987924AC51E05E0DC7265150F7577802CCF4E64F29FD41C8A88E + +Count = 603 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 0001020304050607 +CT = 066D386BDC3BFDE56B07782DF9F784B30B607C19B5FDF87DAF3E73B7B7D3B23D693F + +Count = 604 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708 +CT = EE35C5ECBEB4F721F4F3F18F7254768B89BDCFA48E42866C883ED5A51B0B62B4257C + +Count = 605 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 00010203040506070809 +CT = 252EA99EE58EE9DD9FA2DF9E896C85F5E30FFA14BB26FC231AFD7D99C6034E9D6483 + +Count = 606 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A +CT = B0C179AC69E8583FD66B5C00368D4DBD9315186B984778F5623580E94E5B0CAC0C86 + +Count = 607 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B +CT = 73F5083A228D1FA45045563C2008A4E1B5F9264827915CB9FA12D219D2FAD86D3DF7 + +Count = 608 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C +CT = 41AAA97377B39758FE9E8606E64416BE91892FE0C794ACE9EA745F9B4B06F55BF1AA + +Count = 609 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D +CT = 1A926838E49E79330E6AFB76A7B149093C72894F550AA43A56D221AFB8D63FF6A145 + +Count = 610 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E +CT = 39D9906849736AFEE9B9EC5851CBBFBF1305E98F6E209A470D070CF75DE3E2067411 + +Count = 611 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F +CT = 95A9CC016DB1D54668CCA0DC7BC644852CB70AF4487701575A671ACAC61CA34A7778 + +Count = 612 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 307824FCBD38D152551DC44E16D56BC8A62079959EC90DB68D33C9B5C63C0FB09ED2 + +Count = 613 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 86B3B4DCA59E277541E95D63AF66CFA2B1C7C472C65284F6DBD0E428CC173F6A075F + +Count = 614 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = F60ADC6495BAB5AA38B38FB383B7EECD8E5D29D6EE5B5AFE4A402DB2CD2C6882F60A + +Count = 615 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 4F48371B6AF752A8C631742E72BC51EB841954DDE46FF1765EEE974836AE3299C37E + +Count = 616 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 89BDEA40E36A9D39A59DFE6697D508975CEA59DBAD72E387666DE4FDFF3B2A3D4583 + +Count = 617 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 2021C84BC884DC665C3243C822952297A20689E0DAAC1BDAF69CFF07A10A376AA30F + +Count = 618 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 20F20FF1674EC0DF8A55CE234064C610D177364CC17647D32F09AB80021AA2346184 + +Count = 619 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 4F7CC6B92F63AA2AB8907B52C0998D4CD04717B230EA4CD664F8169E970B615EB598 + +Count = 620 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 6034C839C70E77FC0FCED7C7D75B238F4334684E646D68023737EC20D9652981B98C + +Count = 621 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 5E427A3A599AB5CF74AFEBB4E555C69E60F54D5459D621550E9D549E0BA8C6315C80 + +Count = 622 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 0005A3730F2091FDA3602E158EBEE9324122B1D31056D9D60BB4D83F0D742E35F9BF + +Count = 623 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = B2B2A81D5FB5EA292C0812FCD919233934AB6CB9C976B36E1DA1797C051E6B46F965 + +Count = 624 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = D96C09271C1D9557D43B72998E41E2D9DF5ACC9934741BB5CB21A4B37192B3DA5A0E + +Count = 625 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 5F5143FA55E240F9571656B9823639F437C8C4F7EA1BA1ECC3ED46A67A52BDA466DF + +Count = 626 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 047BDBAEF519DCC4E65A5DCD7E0C16873A30D7A534C9137B2156F4AE75E020FE55E2 + +Count = 627 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 1A9B58442BBD18F7F5EA1B1D243BE2277D080DC8FFDFDEE6780B7161C2CDEEAC2F79 + +Count = 628 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = +CT = DE27B3C1B43A54C25A724A5F57FC59B59185E2E69AB41F97D9F823171716E4CBDC812B + +Count = 629 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 00 +CT = 998D7701C14BB41DBA91A240DA82606BABF1785F5792519EFA56E587ED3DCAFA72B8F7 + +Count = 630 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 0001 +CT = 51E3F26591E3BE66E2C31CBDD5BF8CD58B6B86D43366FF024750E12F20F0877E0F88A9 + +Count = 631 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102 +CT = 255ED813C6C9E79E1107AD13AC89CB0464C6F500329DE6A1DFAD15D9A819C6A56B8CCB + +Count = 632 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 00010203 +CT = 2BB84CB90B56B23C16EA9185A8C3295775EA076BC8ABDDA1120C7BDECB1AA21879F970 + +Count = 633 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 0001020304 +CT = CAB056AA88F110F7178FA1C075813704BEB21AC2DD2A19334A598BFC6A87E9BBED9B8E + +Count = 634 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405 +CT = 85FF40FCBFEB16F5AC3B7FEAAAB7C01ADA7256CCABFD3E28F3B6830E14C47E56981E3C + +Count = 635 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 00010203040506 +CT = 37466ECBEF0CF6C9987924AC51E05E0DC726436019CDF31F28E95EDA3C7E5002713C52 + +Count = 636 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 0001020304050607 +CT = 066D386BDC3BFDE56B07782DF9F784B30B6077711CB0E0889AF0C78B5F79C65BD5E331 + +Count = 637 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708 +CT = EE35C5ECBEB4F721F4F3F18F7254768B89BDE7625AAC4477FA42DE2C8E55718D1747AC + +Count = 638 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 00010203040506070809 +CT = 252EA99EE58EE9DD9FA2DF9E896C85F5E30F9849D04895F6F3B95755F57CA40266ED81 + +Count = 639 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A +CT = B0C179AC69E8583FD66B5C00368D4DBD93157CBAEAD52F5D062B9F2F72C4AAB992242A + +Count = 640 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B +CT = 73F5083A228D1FA45045563C2008A4E1B5F91CF1DD8AFF8B5EDF3C833BC2A13B0EC57A + +Count = 641 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C +CT = 41AAA97377B39758FE9E8606E64416BE91895E8EA9293757102858D714F18E90FBB33E + +Count = 642 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D +CT = 1A926838E49E79330E6AFB76A7B149093C726A2EA950A7055F1ECE73FD6F49F7EA8CAA + +Count = 643 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E +CT = 39D9906849736AFEE9B9EC5851CBBFBF13056821E302D4E1B7E560AF7D5AA8D7B16022 + +Count = 644 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F +CT = 95A9CC016DB1D54668CCA0DC7BC644852CB7A8A3D5CFA93DB549FC5E57569895F16C43 + +Count = 645 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 307824FCBD38D152551DC44E16D56BC8A62071BE98A430416E158031FB2C94C0293DFD + +Count = 646 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 86B3B4DCA59E277541E95D63AF66CFA2B1C7A55E204C34372BA4E1ECDB4179397D3DF5 + +Count = 647 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = F60ADC6495BAB5AA38B38FB383B7EECD8E5D877313981C9A3D2F7EE3199C0DFA6D1083 + +Count = 648 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 4F48371B6AF752A8C631742E72BC51EB8419B7459A030FDEBBE95FC7D8E3491E8235CB + +Count = 649 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 89BDEA40E36A9D39A59DFE6697D508975CEA588CA01ADA2E3D283255D8FBE4EA3A8F74 + +Count = 650 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 2021C84BC884DC665C3243C822952297A2066F848E6C352A763AA059D7604B530DB172 + +Count = 651 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 20F20FF1674EC0DF8A55CE234064C610D1775E905F37CAC2C32DBBA627E4CA5D3379B3 + +Count = 652 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 4F7CC6B92F63AA2AB8907B52C0998D4CD047B8BC33EBC6EA068AE4AFF6D999E6774371 + +Count = 653 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 6034C839C70E77FC0FCED7C7D75B238F4334B9FC4DA5C3D713B22B591CD838C38CB223 + +Count = 654 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 5E427A3A599AB5CF74AFEBB4E555C69E60F505A4139F15D6BF201A1763A30AF781D5E3 + +Count = 655 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 0005A3730F2091FDA3602E158EBEE93241228319DB34D82BDF12723FE1CCEDE8F6B3F7 + +Count = 656 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = B2B2A81D5FB5EA292C0812FCD919233934AB157038200CD38E129BB2411449063136BA + +Count = 657 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = D96C09271C1D9557D43B72998E41E2D9DF5A44EE4DE7FD505CD75D4148A2A01EC6475A + +Count = 658 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 5F5143FA55E240F9571656B9823639F437C8597F88919FDB0398ACD57FE9A2F9884CCE + +Count = 659 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 047BDBAEF519DCC4E65A5DCD7E0C16873A304597164B76083C10FD4A9BDF931C4D01AD + +Count = 660 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 1A9B58442BBD18F7F5EA1B1D243BE2277D08ABDBA8B3C03491B52274B24B244B824310 + +Count = 661 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = +CT = DE27B3C1B43A54C25A724A5F57FC59B59185E2EF06D8F0F70403903EE2A0FACC1B20EB03 + +Count = 662 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 00 +CT = 998D7701C14BB41DBA91A240DA82606BABF178C951715945DE2013BC7350B287F7F9C19B + +Count = 663 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 0001 +CT = 51E3F26591E3BE66E2C31CBDD5BF8CD58B6B86C02E89FF9853EA44979A0AABF43E7E788C + +Count = 664 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102 +CT = 255ED813C6C9E79E1107AD13AC89CB0464C6F55561DD9608CBAAB17DB7D2D5E63CE80038 + +Count = 665 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 00010203 +CT = 2BB84CB90B56B23C16EA9185A8C3295775EA072BC8156D4872FC3716E959E0DD75EBB2D0 + +Count = 666 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 0001020304 +CT = CAB056AA88F110F7178FA1C075813704BEB21AFB76BEFBC8A10B5784306C021F5B7E147F + +Count = 667 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405 +CT = 85FF40FCBFEB16F5AC3B7FEAAAB7C01ADA72560756200CF4F120C625CB2F267F3CDE83CC + +Count = 668 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 00010203040506 +CT = 37466ECBEF0CF6C9987924AC51E05E0DC726432BD27451060C933EBD63D81F96DD50A46C + +Count = 669 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 0001020304050607 +CT = 066D386BDC3BFDE56B07782DF9F784B30B60770CD3E51E7D972650F44E226599CA1B1301 + +Count = 670 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708 +CT = EE35C5ECBEB4F721F4F3F18F7254768B89BDE7478FB2EAF96CEA6B962D7AC4737902010A + +Count = 671 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 00010203040506070809 +CT = 252EA99EE58EE9DD9FA2DF9E896C85F5E30F98D4F513936DA3C8F7A7FFD0A080B9DAAB90 + +Count = 672 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A +CT = B0C179AC69E8583FD66B5C00368D4DBD93157CF5A4AB04071C49BB020B6D57D52868C843 + +Count = 673 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B +CT = 73F5083A228D1FA45045563C2008A4E1B5F91C58DA0144D18770D47E8F443D39C18AC211 + +Count = 674 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C +CT = 41AAA97377B39758FE9E8606E64416BE91895E95ED27A585881DC76984350C60243B0823 + +Count = 675 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D +CT = 1A926838E49E79330E6AFB76A7B149093C726A99F14F9B5463DA9AE4367CD987095BB73C + +Count = 676 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E +CT = 39D9906849736AFEE9B9EC5851CBBFBF1305686BC33C0E339D3D74F6F31037998CBE57F7 + +Count = 677 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F +CT = 95A9CC016DB1D54668CCA0DC7BC644852CB7A83E8F1656763B740E89B6B6559EB5A194A1 + +Count = 678 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 307824FCBD38D152551DC44E16D56BC8A620717F3EFF5996454348FA3CDE439FF7769B73 + +Count = 679 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 86B3B4DCA59E277541E95D63AF66CFA2B1C7A5467F536C0D1EC628013FDF7037E562ACEA + +Count = 680 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = F60ADC6495BAB5AA38B38FB383B7EECD8E5D87BF9B2A70681D617D3400F89688D3202C4B + +Count = 681 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 4F48371B6AF752A8C631742E72BC51EB8419B7B878F663C9D171118EE535C43D025017B3 + +Count = 682 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 89BDEA40E36A9D39A59DFE6697D508975CEA5882C2E09E364689608132EF8642A2100CF4 + +Count = 683 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 2021C84BC884DC665C3243C822952297A2066F8CAD96C2E6210815908682855BD9D3D160 + +Count = 684 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 20F20FF1674EC0DF8A55CE234064C610D1775EEAD8DF1AA8FE6D297723F9EA321E293F7C + +Count = 685 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 4F7CC6B92F63AA2AB8907B52C0998D4CD047B8AE527D1733E42E51383804E310179B80B5 + +Count = 686 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 6034C839C70E77FC0FCED7C7D75B238F4334B9258903339E8326428D9B29A76DEB4563FB + +Count = 687 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 5E427A3A599AB5CF74AFEBB4E555C69E60F50542CC94BAB44001D94B498E031139A85F25 + +Count = 688 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 0005A3730F2091FDA3602E158EBEE9324122837421BDFA7A10AC22629F7D8718AF76424F + +Count = 689 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = B2B2A81D5FB5EA292C0812FCD919233934AB155CE5B1F8A50A2BBE718372D9DC87B8F457 + +Count = 690 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = D96C09271C1D9557D43B72998E41E2D9DF5A44FA68D0E36A8AB3C4786D3E44A8185C3BCE + +Count = 691 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 5F5143FA55E240F9571656B9823639F437C859B1522C2375D5E1DCC8E9586604A25F48E6 + +Count = 692 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 047BDBAEF519DCC4E65A5DCD7E0C16873A30456E2454CA1A9026F15BB7838B067B99F2C9 + +Count = 693 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 1A9B58442BBD18F7F5EA1B1D243BE2277D08ABAB666B77A61B3D5C93B73673BCACF93498 + +Count = 694 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = +CT = DE27B3C1B43A54C25A724A5F57FC59B59185E2EF4BB6543EF3A53A6E8C32739E20459AECC0 + +Count = 695 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 00 +CT = 998D7701C14BB41DBA91A240DA82606BABF178C9DD2EF6B903FA6C0A2B9DB7356073738495 + +Count = 696 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 0001 +CT = 51E3F26591E3BE66E2C31CBDD5BF8CD58B6B86C0EB97943AD21C627989995867824831C215 + +Count = 697 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102 +CT = 255ED813C6C9E79E1107AD13AC89CB0464C6F555276AA03223559F532B5D78D7EF05D3EA49 + +Count = 698 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 00010203 +CT = 2BB84CB90B56B23C16EA9185A8C3295775EA072BAF385D971DE283075839964320814A0007 + +Count = 699 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 0001020304 +CT = CAB056AA88F110F7178FA1C075813704BEB21AFBAD1A26D684CA5839C9951311F8B94A9D8F + +Count = 700 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405 +CT = 85FF40FCBFEB16F5AC3B7FEAAAB7C01ADA725607C490B420827341763CC8BDB52DD8C7AF15 + +Count = 701 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 00010203040506 +CT = 37466ECBEF0CF6C9987924AC51E05E0DC726432BBEE9372C2EE5CCB9AD966E80E16D4F0F3D + +Count = 702 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 0001020304050607 +CT = 066D386BDC3BFDE56B07782DF9F784B30B60770C5511433A142135250AD132F2888ECEE452 + +Count = 703 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708 +CT = EE35C5ECBEB4F721F4F3F18F7254768B89BDE7474607F5A47AB308B3859CEF8101B3B047C3 + +Count = 704 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 00010203040506070809 +CT = 252EA99EE58EE9DD9FA2DF9E896C85F5E30F98D4BBF50540B3F28688A06277C644AE945404 + +Count = 705 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A +CT = B0C179AC69E8583FD66B5C00368D4DBD93157CF52B9478EE46EF0245D17A6721474A742EB2 + +Count = 706 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B +CT = 73F5083A228D1FA45045563C2008A4E1B5F91C58B68A5EB29A39CE448103C9C1A4F0A8F090 + +Count = 707 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C +CT = 41AAA97377B39758FE9E8606E64416BE91895E95CD0892B7FA1AC9B912A3186A38962E5B34 + +Count = 708 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D +CT = 1A926838E49E79330E6AFB76A7B149093C726A99065E4346DF5BF0001D09A19C2A5BFFF265 + +Count = 709 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E +CT = 39D9906849736AFEE9B9EC5851CBBFBF1305686B8B1B44FAC558DD8A6B4A7519788FCC2517 + +Count = 710 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F +CT = 95A9CC016DB1D54668CCA0DC7BC644852CB7A83E03CC4AD5D531254C3651CCC541B9E2960B + +Count = 711 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 307824FCBD38D152551DC44E16D56BC8A620717FA16F38C1075743CC863714F4FD3019035E + +Count = 712 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 86B3B4DCA59E277541E95D63AF66CFA2B1C7A546D079C9C99BF394766A44EC71F474B2D543 + +Count = 713 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = F60ADC6495BAB5AA38B38FB383B7EECD8E5D87BF4B1C9D9EB40B69790E8596B434155DA540 + +Count = 714 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 4F48371B6AF752A8C631742E72BC51EB8419B7B8E4D6FA4F6BA8A63E4AA19BA7DE8EACAA98 + +Count = 715 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 89BDEA40E36A9D39A59DFE6697D508975CEA588234B0E1A85254061813E42D6C2E791A24A6 + +Count = 716 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 2021C84BC884DC665C3243C822952297A2066F8CF5E28FF3A7FC1185E040E32ED6B82AEEB0 + +Count = 717 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 20F20FF1674EC0DF8A55CE234064C610D1775EEA5AACE20A17309CCC1E0B562DFB87587A10 + +Count = 718 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 4F7CC6B92F63AA2AB8907B52C0998D4CD047B8AE5B94DDF6FDB34B9A25BE48F48549EF0ADB + +Count = 719 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 6034C839C70E77FC0FCED7C7D75B238F4334B925CB15AED29BF297CABAB344128A51FCDA2B + +Count = 720 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 5E427A3A599AB5CF74AFEBB4E555C69E60F505422E0F7EB0E04F47F577A2789BF5659633D9 + +Count = 721 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 0005A3730F2091FDA3602E158EBEE93241228374B85E36DDAB0608DD95A3246CAA42357A83 + +Count = 722 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = B2B2A81D5FB5EA292C0812FCD919233934AB155C1215131FF14DCCE1F9A3E9E3BA9F4675B6 + +Count = 723 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = D96C09271C1D9557D43B72998E41E2D9DF5A44FAAB3E353E5DAFA7A62A3720B0A168E70F28 + +Count = 724 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 5F5143FA55E240F9571656B9823639F437C859B1D0EF207DB7CE437862DBD9BB043CEA3822 + +Count = 725 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 047BDBAEF519DCC4E65A5DCD7E0C16873A30456EEB591CFCC41E938565D44ECEDCEA13D0BE + +Count = 726 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 1A9B58442BBD18F7F5EA1B1D243BE2277D08ABAB0A8B0FAC2EF55E9A307AECF477A06A7CD6 + +Count = 727 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = +CT = DE27B3C1B43A54C25A724A5F57FC59B59185E2EF4B688EBE30100EAEC155A295EC555241B67C + +Count = 728 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 00 +CT = 998D7701C14BB41DBA91A240DA82606BABF178C9DD86B86E48BFB425228F839D53591E5314AF + +Count = 729 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 0001 +CT = 51E3F26591E3BE66E2C31CBDD5BF8CD58B6B86C0EB34E5C566E7EDC221AC165DA7FDF915CA9A + +Count = 730 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102 +CT = 255ED813C6C9E79E1107AD13AC89CB0464C6F55527626E810DFA14EEA429753026B3308CE14C + +Count = 731 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 00010203 +CT = 2BB84CB90B56B23C16EA9185A8C3295775EA072BAF4B910C0C99B836B2E175BE41C8E207C939 + +Count = 732 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 0001020304 +CT = CAB056AA88F110F7178FA1C075813704BEB21AFBAD02B12FACADCDF44FE5B9F5D020D91886DC + +Count = 733 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405 +CT = 85FF40FCBFEB16F5AC3B7FEAAAB7C01ADA725607C49E217038CA62827AB4CD8214750047ECC3 + +Count = 734 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 00010203040506 +CT = 37466ECBEF0CF6C9987924AC51E05E0DC726432BBE6ED6613D96D508D12F18469ADB99815017 + +Count = 735 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 0001020304050607 +CT = 066D386BDC3BFDE56B07782DF9F784B30B60770C55B8A647EB750DD2A5C0267C81774355563C + +Count = 736 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708 +CT = EE35C5ECBEB4F721F4F3F18F7254768B89BDE74746FEE09E8C24C0130F5F216C378131343336 + +Count = 737 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 00010203040506070809 +CT = 252EA99EE58EE9DD9FA2DF9E896C85F5E30F98D4BB941654DCFDBD55CD4B0562F41EF12A10F3 + +Count = 738 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A +CT = B0C179AC69E8583FD66B5C00368D4DBD93157CF52B9313D7324326FA0F0AC161C06787099D4B + +Count = 739 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B +CT = 73F5083A228D1FA45045563C2008A4E1B5F91C58B66956840ACED3CA10DAFFB9DBCF3FBB587C + +Count = 740 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C +CT = 41AAA97377B39758FE9E8606E64416BE91895E95CDAEF4DBC1727AE76B93DBBACE8F33CCD714 + +Count = 741 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D +CT = 1A926838E49E79330E6AFB76A7B149093C726A9906367033129C42228A79FD42492FF215EB78 + +Count = 742 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E +CT = 39D9906849736AFEE9B9EC5851CBBFBF1305686B8BFE702BA125B5D30250F67908DFA4CE88B8 + +Count = 743 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F +CT = 95A9CC016DB1D54668CCA0DC7BC644852CB7A83E03EAE2FF19CCAF1DDA8BFC28CF612248931B + +Count = 744 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 307824FCBD38D152551DC44E16D56BC8A620717FA1301E646C172236B3171FABBCCB1210DB29 + +Count = 745 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 86B3B4DCA59E277541E95D63AF66CFA2B1C7A546D0D44FA97C0C870A27714A624DEEF59AF2DE + +Count = 746 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = F60ADC6495BAB5AA38B38FB383B7EECD8E5D87BF4B030FABD24E3E40F9C44464CB029A5C5EB9 + +Count = 747 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 4F48371B6AF752A8C631742E72BC51EB8419B7B8E438F5DC8B09D8DC5439533A9CB24B09F98A + +Count = 748 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 89BDEA40E36A9D39A59DFE6697D508975CEA58823414145DBB651630E84DD19C9EC7C6C85BC7 + +Count = 749 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 2021C84BC884DC665C3243C822952297A2066F8CF5BA420766C74B91A73D3DDCDAD1920820A8 + +Count = 750 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 20F20FF1674EC0DF8A55CE234064C610D1775EEA5A97AAB890133FDE1ADA66CA026F91C843A4 + +Count = 751 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 4F7CC6B92F63AA2AB8907B52C0998D4CD047B8AE5B46417BDCCCC71C6C88078A89E53A10758B + +Count = 752 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 6034C839C70E77FC0FCED7C7D75B238F4334B925CB439FF83D74756E275E05E5ED1D81A3D83C + +Count = 753 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 5E427A3A599AB5CF74AFEBB4E555C69E60F505422E43693A96552C6798878C190FDF11719F3C + +Count = 754 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 0005A3730F2091FDA3602E158EBEE93241228374B8C0369EE2765A4CE8E15C91EAF4E1C1EAEA + +Count = 755 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = B2B2A81D5FB5EA292C0812FCD919233934AB155C12FBDA2D269771AAFD5E628F464B7E881BD7 + +Count = 756 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = D96C09271C1D9557D43B72998E41E2D9DF5A44FAABEF03CD711BFB8E8F0AAC4A903877648148 + +Count = 757 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 5F5143FA55E240F9571656B9823639F437C859B1D0B5FA6218BAC2D3D4FB89BEAED2DC15AE1A + +Count = 758 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 047BDBAEF519DCC4E65A5DCD7E0C16873A30456EEBD28997B246BABE06F90F40CA37971E0FA0 + +Count = 759 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 1A9B58442BBD18F7F5EA1B1D243BE2277D08ABAB0A47C314DB9085BF2770CD9317B58F3E1485 + +Count = 760 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = +CT = DE27B3C1B43A54C25A724A5F57FC59B59185E2EF4B687C137DD77ED700429834C3A7B05955643A + +Count = 761 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 00 +CT = 998D7701C14BB41DBA91A240DA82606BABF178C9DD868D92778045161BBE0A2237AA56F1F1D881 + +Count = 762 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 0001 +CT = 51E3F26591E3BE66E2C31CBDD5BF8CD58B6B86C0EB34252C9852F8082D5306899D6BBD676BF017 + +Count = 763 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102 +CT = 255ED813C6C9E79E1107AD13AC89CB0464C6F5552762C972E3A41082CDADC17DC0FDF8B377B67E + +Count = 764 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 00010203 +CT = 2BB84CB90B56B23C16EA9185A8C3295775EA072BAF4B1ADC5D75D418B763E91FB1418BF698CA51 + +Count = 765 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 0001020304 +CT = CAB056AA88F110F7178FA1C075813704BEB21AFBAD02DEC93C4DBEBAF1B001B49B3E8C04A0FC5E + +Count = 766 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405 +CT = 85FF40FCBFEB16F5AC3B7FEAAAB7C01ADA725607C49E698F58D9ED3B0CDFD8B23EF38FF270A486 + +Count = 767 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 00010203040506 +CT = 37466ECBEF0CF6C9987924AC51E05E0DC726432BBE6E9B01ADF9D507F34A53A1F280D46002ADA6 + +Count = 768 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 0001020304050607 +CT = 066D386BDC3BFDE56B07782DF9F784B30B60770C55B83AE3474A70C74798443CBD57D8CAC5ADAC + +Count = 769 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708 +CT = EE35C5ECBEB4F721F4F3F18F7254768B89BDE74746FE75B762CA9368B906F196730045AA311E28 + +Count = 770 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 00010203040506070809 +CT = 252EA99EE58EE9DD9FA2DF9E896C85F5E30F98D4BB94217940BEF185840053C258ACE4533D37C4 + +Count = 771 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A +CT = B0C179AC69E8583FD66B5C00368D4DBD93157CF52B93769A1EC2DF4019DE6D26A2FF2D31063F28 + +Count = 772 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B +CT = 73F5083A228D1FA45045563C2008A4E1B5F91C58B6698ADDA1BF5DAC5BE104E66556E7BAE4903E + +Count = 773 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C +CT = 41AAA97377B39758FE9E8606E64416BE91895E95CDAEB23C1E54418BE76E5076C262D1DF3EB79D + +Count = 774 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D +CT = 1A926838E49E79330E6AFB76A7B149093C726A9906360B5586444B27A15824DB8FD5FD2F967793 + +Count = 775 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E +CT = 39D9906849736AFEE9B9EC5851CBBFBF1305686B8BFED995F72D69F3CF9B8F0C236B4E0CD91317 + +Count = 776 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F +CT = 95A9CC016DB1D54668CCA0DC7BC644852CB7A83E03EA8C6304B310ED84F648DB22B10ABA80F08F + +Count = 777 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 307824FCBD38D152551DC44E16D56BC8A620717FA130910B903925D16E53D8B75444B2EDE48F61 + +Count = 778 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 86B3B4DCA59E277541E95D63AF66CFA2B1C7A546D0D47D32E1BEFF94584E5BDB9526ECFADAB2D2 + +Count = 779 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = F60ADC6495BAB5AA38B38FB383B7EECD8E5D87BF4B0343FABDA4494EEB6E9F31812A28DCC302F0 + +Count = 780 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 4F48371B6AF752A8C631742E72BC51EB8419B7B8E4387E443FB49A3821FF2CB9BB49255430BC1C + +Count = 781 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 89BDEA40E36A9D39A59DFE6697D508975CEA5882341402608E94FDB0BED73EB6C2CCBB25A21565 + +Count = 782 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 2021C84BC884DC665C3243C822952297A2066F8CF5BA438E244389911110CB88A6031AB3F31229 + +Count = 783 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 20F20FF1674EC0DF8A55CE234064C610D1775EEA5A97961A8FED7740A98242AFE575DA52923D13 + +Count = 784 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 4F7CC6B92F63AA2AB8907B52C0998D4CD047B8AE5B46DD2DE5C25EC53645B977BD84D26AF9A41C + +Count = 785 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 6034C839C70E77FC0FCED7C7D75B238F4334B925CB43D4D775645C99A6DEF06BF997BEC68656F6 + +Count = 786 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 5E427A3A599AB5CF74AFEBB4E555C69E60F505422E4342219C62C4A6B5A5197505E745C4CCDA82 + +Count = 787 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 0005A3730F2091FDA3602E158EBEE93241228374B8C0387B4EF3423000B2AE994ACBDCCA8C4911 + +Count = 788 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = B2B2A81D5FB5EA292C0812FCD919233934AB155C12FBABC3B503FECD993412B0B4A9E7A3744A8C + +Count = 789 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = D96C09271C1D9557D43B72998E41E2D9DF5A44FAABEFC9F70075DD48764DF30000B286AA7D46E2 + +Count = 790 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 5F5143FA55E240F9571656B9823639F437C859B1D0B5FEC4DA35453B203581400AFEB70B771E16 + +Count = 791 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 047BDBAEF519DCC4E65A5DCD7E0C16873A30456EEBD26A2D07C509EC25E6E4CAA2CE8915D5A2A4 + +Count = 792 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 1A9B58442BBD18F7F5EA1B1D243BE2277D08ABAB0A47AC540FDC6BFA24072713234C2F295E27FC + +Count = 793 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = +CT = DE27B3C1B43A54C25A724A5F57FC59B59185E2EF4B687C6DE4EBA173D3EC7EA5CE095188C1030AFE + +Count = 794 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 00 +CT = 998D7701C14BB41DBA91A240DA82606BABF178C9DD868D5ACB1305C649520A0719E059D8A4F55CEB + +Count = 795 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 0001 +CT = 51E3F26591E3BE66E2C31CBDD5BF8CD58B6B86C0EB34251634CA42CA45CDD6A11B4F71C9D63E7925 + +Count = 796 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102 +CT = 255ED813C6C9E79E1107AD13AC89CB0464C6F5552762C967FA46CD022C883330E7974406BA6ECDF3 + +Count = 797 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 00010203 +CT = 2BB84CB90B56B23C16EA9185A8C3295775EA072BAF4B1A6A281DD851AB2B6B4EF6DFDE0CFE169D2B + +Count = 798 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 0001020304 +CT = CAB056AA88F110F7178FA1C075813704BEB21AFBAD02DEE129B3061ACA4B9C372DE8FB599E9050A8 + +Count = 799 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405 +CT = 85FF40FCBFEB16F5AC3B7FEAAAB7C01ADA725607C49E694FA5FEA066211661879A83031E0977C623 + +Count = 800 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 00010203040506 +CT = 37466ECBEF0CF6C9987924AC51E05E0DC726432BBE6E9B27C069D0D8D747A1F00168A25997B8B909 + +Count = 801 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 0001020304050607 +CT = 066D386BDC3BFDE56B07782DF9F784B30B60770C55B83A6D8E97EA9DE04A9521C3B40B2C87ADFE03 + +Count = 802 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708 +CT = EE35C5ECBEB4F721F4F3F18F7254768B89BDE74746FE757DAB9B245A211ACC7742A4A8C0E69FE28A + +Count = 803 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 00010203040506070809 +CT = 252EA99EE58EE9DD9FA2DF9E896C85F5E30F98D4BB9421C4E9EF7680649ADA75185CFF4C03BAC5DC + +Count = 804 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A +CT = B0C179AC69E8583FD66B5C00368D4DBD93157CF52B9376E2A02646E5F089BA1FA55CAE8B6E7ECAB1 + +Count = 805 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B +CT = 73F5083A228D1FA45045563C2008A4E1B5F91C58B6698AAA4EA86D58F83E6101F42711F86157D571 + +Count = 806 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C +CT = 41AAA97377B39758FE9E8606E64416BE91895E95CDAEB22E5F5E9F6AEF9B42682D6C6B6150A1CAEC + +Count = 807 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D +CT = 1A926838E49E79330E6AFB76A7B149093C726A9906360B1D534218C0E20B382A6A1C4115C97236D5 + +Count = 808 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E +CT = 39D9906849736AFEE9B9EC5851CBBFBF1305686B8BFED99FD56CC74C5BD0669C19A94793556D9CC5 + +Count = 809 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F +CT = 95A9CC016DB1D54668CCA0DC7BC644852CB7A83E03EA8CBA8E3362C2CE8BE680A604114880CA6658 + +Count = 810 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 307824FCBD38D152551DC44E16D56BC8A620717FA130914E2E121E41A669A40D810158AE266AC40B + +Count = 811 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 86B3B4DCA59E277541E95D63AF66CFA2B1C7A546D0D47D940FD4F3CE694A619501E904BB40AB0E32 + +Count = 812 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = F60ADC6495BAB5AA38B38FB383B7EECD8E5D87BF4B034312ACA0AEA5F8B497E789B307864315978F + +Count = 813 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 4F48371B6AF752A8C631742E72BC51EB8419B7B8E4387EC118AB12D5310926EBF38164D20B51091F + +Count = 814 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 89BDEA40E36A9D39A59DFE6697D508975CEA58823414029D16D72F98ADD54BFC4630ACE6F08EAF0C + +Count = 815 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 2021C84BC884DC665C3243C822952297A2066F8CF5BA4380AE2AEC2F16D1ED75D84A87D342372B7C + +Count = 816 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 20F20FF1674EC0DF8A55CE234064C610D1775EEA5A979658CD2D2A329458189DFE037C585F5F2C32 + +Count = 817 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 4F7CC6B92F63AA2AB8907B52C0998D4CD047B8AE5B46DD14B240F181D11AB8EF496BE3702900FDF6 + +Count = 818 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 6034C839C70E77FC0FCED7C7D75B238F4334B925CB43D4888CB47182AD5808DF08D3F25A9A746406 + +Count = 819 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 5E427A3A599AB5CF74AFEBB4E555C69E60F505422E4342BBB03E64A05A57A1196E0D6DF65D068AFD + +Count = 820 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 0005A3730F2091FDA3602E158EBEE93241228374B8C0384BD7AC6351EC7F7C65FFF354CFE819FC36 + +Count = 821 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = B2B2A81D5FB5EA292C0812FCD919233934AB155C12FBABD8BAC1B6B0BD0AE8D680477283F9017452 + +Count = 822 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = D96C09271C1D9557D43B72998E41E2D9DF5A44FAABEFC956CBCF9CCEB5B86A7B830B64F08992DD51 + +Count = 823 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 5F5143FA55E240F9571656B9823639F437C859B1D0B5FE424641CD31319C45D765822F602A002D49 + +Count = 824 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 047BDBAEF519DCC4E65A5DCD7E0C16873A30456EEBD26AD59F68FC2156E298A57A781EBC8ED69DE7 + +Count = 825 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 1A9B58442BBD18F7F5EA1B1D243BE2277D08ABAB0A47AC4A6B8837E6F8CDAFA3BE0078E3705B3F1A + +Count = 826 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = +CT = DE27B3C1B43A54C25A724A5F57FC59B59185E2EF4B687C6D4B1F7A3404552E100806538F83786BA733 + +Count = 827 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 00 +CT = 998D7701C14BB41DBA91A240DA82606BABF178C9DD868D5A132687DD91CC9BCD73993303DDDBCC1626 + +Count = 828 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 0001 +CT = 51E3F26591E3BE66E2C31CBDD5BF8CD58B6B86C0EB342516F0F07765B7B0D78B795C98C28795DDCA78 + +Count = 829 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102 +CT = 255ED813C6C9E79E1107AD13AC89CB0464C6F5552762C96763CAB21F64912F5F199F4095ECF11625CF + +Count = 830 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 00010203 +CT = 2BB84CB90B56B23C16EA9185A8C3295775EA072BAF4B1A6A197EE810EB23BBFB5ACFB5B36693095B83 + +Count = 831 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 0001020304 +CT = CAB056AA88F110F7178FA1C075813704BEB21AFBAD02DEE10A7DFAD3D86DB58FD862FA0B7F266762B1 + +Count = 832 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405 +CT = 85FF40FCBFEB16F5AC3B7FEAAAB7C01ADA725607C49E694F0D4523A4D095500282BE4BF93E25252EA3 + +Count = 833 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 00010203040506 +CT = 37466ECBEF0CF6C9987924AC51E05E0DC726432BBE6E9B2726D75F38620CA5488BD4C323206844E096 + +Count = 834 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 0001020304050607 +CT = 066D386BDC3BFDE56B07782DF9F784B30B60770C55B83A6DA5D64B576DF3B240E98768B1DFD64D4B63 + +Count = 835 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708 +CT = EE35C5ECBEB4F721F4F3F18F7254768B89BDE74746FE757D2F40C610BF53F2A7DB970879F1AD922D3B + +Count = 836 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 00010203040506070809 +CT = 252EA99EE58EE9DD9FA2DF9E896C85F5E30F98D4BB9421C4103822874952AC8ECC5755C9000C8DD817 + +Count = 837 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A +CT = B0C179AC69E8583FD66B5C00368D4DBD93157CF52B9376E2FC39E2F575928594DBB92037A70F85C455 + +Count = 838 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B +CT = 73F5083A228D1FA45045563C2008A4E1B5F91C58B6698AAAEF298FD33AC729DEE4F77C44D004FFF601 + +Count = 839 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C +CT = 41AAA97377B39758FE9E8606E64416BE91895E95CDAEB22E96582CC16F90612C5D23D8A20B89DF4BA5 + +Count = 840 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D +CT = 1A926838E49E79330E6AFB76A7B149093C726A9906360B1D612C867111298646CBE171E4966C9B7854 + +Count = 841 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E +CT = 39D9906849736AFEE9B9EC5851CBBFBF1305686B8BFED99F6D7DF876DEFDF264AC5642E3C12DCA7F1D + +Count = 842 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F +CT = 95A9CC016DB1D54668CCA0DC7BC644852CB7A83E03EA8CBA8F784F67A268998FA7E6F9FD3D9E9EBFE5 + +Count = 843 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 307824FCBD38D152551DC44E16D56BC8A620717FA130914E700C249363C7A322A59B3275AB093AD0F5 + +Count = 844 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 86B3B4DCA59E277541E95D63AF66CFA2B1C7A546D0D47D942C1983A30CD67FD527588C0CBD2A73993E + +Count = 845 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = F60ADC6495BAB5AA38B38FB383B7EECD8E5D87BF4B034312F8E00DCE82C34C7801DC938B32A80C64D3 + +Count = 846 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 4F48371B6AF752A8C631742E72BC51EB8419B7B8E4387EC130378F4913D20C368C45FA2C1E733032B6 + +Count = 847 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 89BDEA40E36A9D39A59DFE6697D508975CEA58823414029D2DFB3945175E099DCB92E1EBDCA4663147 + +Count = 848 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 2021C84BC884DC665C3243C822952297A2066F8CF5BA4380AA2F9B23D450D6585BCBFA732FB244FCCB + +Count = 849 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 20F20FF1674EC0DF8A55CE234064C610D1775EEA5A97965818219E57A854284AD0FB67637EBB11C433 + +Count = 850 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 4F7CC6B92F63AA2AB8907B52C0998D4CD047B8AE5B46DD1428E55AF65769CABBA4C92BF7E5D91A8676 + +Count = 851 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 6034C839C70E77FC0FCED7C7D75B238F4334B925CB43D48853C4E10DBC21E7E7E12A009988DC3DB362 + +Count = 852 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 5E427A3A599AB5CF74AFEBB4E555C69E60F505422E4342BB03D83BDFA9BCF2D9B48ED1D6D5B5C50B2B + +Count = 853 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 0005A3730F2091FDA3602E158EBEE93241228374B8C0384BA97FAFE86B9B664A9CE5FDB549BC9E6ED8 + +Count = 854 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = B2B2A81D5FB5EA292C0812FCD919233934AB155C12FBABD855A22F51F1E0109B9D1DA8D934FF5F9ECA + +Count = 855 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = D96C09271C1D9557D43B72998E41E2D9DF5A44FAABEFC956B418718B434E8563B5297C65B52C7DE60D + +Count = 856 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 5F5143FA55E240F9571656B9823639F437C859B1D0B5FE4256C6E5F4BB0EDEBB5E6826DA7E9CD5BD6F + +Count = 857 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 047BDBAEF519DCC4E65A5DCD7E0C16873A30456EEBD26AD5B0FCF01D23A9A67568A25D3ADEFD1CEEB8 + +Count = 858 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 1A9B58442BBD18F7F5EA1B1D243BE2277D08ABAB0A47AC4AB16D1DA05886223E82C63F2D2981ECBB03 + +Count = 859 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = +CT = DE27B3C1B43A54C25A724A5F57FC59B59185E2EF4B687C6D4B4CE009CAF624E78A99898F75F372F3BA02 + +Count = 860 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 00 +CT = 998D7701C14BB41DBA91A240DA82606BABF178C9DD868D5A136E1828BA9C9E2BBA2C5FE44DCAA584EA5E + +Count = 861 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 0001 +CT = 51E3F26591E3BE66E2C31CBDD5BF8CD58B6B86C0EB342516F0062C866E5A73212199FCA83AC0E0DE5ED3 + +Count = 862 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102 +CT = 255ED813C6C9E79E1107AD13AC89CB0464C6F5552762C9676392DFC075703AB2514C66FA4E17B1D69258 + +Count = 863 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 00010203 +CT = 2BB84CB90B56B23C16EA9185A8C3295775EA072BAF4B1A6A1966D58C05C5312D51529764D3B84B6A9187 + +Count = 864 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 0001020304 +CT = CAB056AA88F110F7178FA1C075813704BEB21AFBAD02DEE10A8EE5B4458C20886F21E8D913CB1C086204 + +Count = 865 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405 +CT = 85FF40FCBFEB16F5AC3B7FEAAAB7C01ADA725607C49E694F0D583C8E97C6B5EB6358C5C9A9AE6E2F1325 + +Count = 866 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 00010203040506 +CT = 37466ECBEF0CF6C9987924AC51E05E0DC726432BBE6E9B2726495D230EC871C3D854C864D8EE1FBF4086 + +Count = 867 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 0001020304050607 +CT = 066D386BDC3BFDE56B07782DF9F784B30B60770C55B83A6DA5287C4AACE44DF798C23907B0D0FA216D45 + +Count = 868 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708 +CT = EE35C5ECBEB4F721F4F3F18F7254768B89BDE74746FE757D2F636E51B931EAAF18E6EBCE02EBBCC3A942 + +Count = 869 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 00010203040506070809 +CT = 252EA99EE58EE9DD9FA2DF9E896C85F5E30F98D4BB9421C410FCD4E1AD71E229A7F81F6354057F006A6B + +Count = 870 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A +CT = B0C179AC69E8583FD66B5C00368D4DBD93157CF52B9376E2FC300F2DFA65644CF002AA2D114601146EE6 + +Count = 871 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B +CT = 73F5083A228D1FA45045563C2008A4E1B5F91C58B6698AAAEFCD1C969D65ED16861199C0E9F0AA5B711F + +Count = 872 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C +CT = 41AAA97377B39758FE9E8606E64416BE91895E95CDAEB22E96452451E49882961B606C94F331353AB77B + +Count = 873 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D +CT = 1A926838E49E79330E6AFB76A7B149093C726A9906360B1D61822040B2CDA50C049B3C95D27D86F239D9 + +Count = 874 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E +CT = 39D9906849736AFEE9B9EC5851CBBFBF1305686B8BFED99F6DB7337ABB8F3392B9FA148EE14250E985C5 + +Count = 875 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F +CT = 95A9CC016DB1D54668CCA0DC7BC644852CB7A83E03EA8CBA8F45B9113E114D1FE64EDBDDF18E034D6B2E + +Count = 876 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 307824FCBD38D152551DC44E16D56BC8A620717FA130914E70D097860D44238F570076199926A715B513 + +Count = 877 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 86B3B4DCA59E277541E95D63AF66CFA2B1C7A546D0D47D942C8E76D36ECED21536D82FC4057786A7EA7C + +Count = 878 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = F60ADC6495BAB5AA38B38FB383B7EECD8E5D87BF4B034312F8DDBA58D59E5CFE6325CFDD35CF13EB6C7B + +Count = 879 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 4F48371B6AF752A8C631742E72BC51EB8419B7B8E4387EC13079E0A2EFCDE91C4FB98266B89D07DCCAAA + +Count = 880 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 89BDEA40E36A9D39A59DFE6697D508975CEA58823414029D2D2FA528DFAAF4EE0E6F281C1738547D4F28 + +Count = 881 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 2021C84BC884DC665C3243C822952297A2066F8CF5BA4380AA50217869CCC28896DD475A37C15C42CD6E + +Count = 882 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 20F20FF1674EC0DF8A55CE234064C610D1775EEA5A9796581894AA1C243A9FF21A9B55E6E73068B5CC6D + +Count = 883 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 4F7CC6B92F63AA2AB8907B52C0998D4CD047B8AE5B46DD1428F13ED20A5018C2E65D1DB3B07C96D4BF4B + +Count = 884 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 6034C839C70E77FC0FCED7C7D75B238F4334B925CB43D48853128BD97F766CDE4030F95CB85AAC3CD033 + +Count = 885 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 5E427A3A599AB5CF74AFEBB4E555C69E60F505422E4342BB03CBA9CD930B5A56BB28AC72EAA69A5FA40A + +Count = 886 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 0005A3730F2091FDA3602E158EBEE93241228374B8C0384BA9ED3E4D8F71EE60BD42701B022798D4A509 + +Count = 887 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = B2B2A81D5FB5EA292C0812FCD919233934AB155C12FBABD855BB722A205425D3292B5C3BC67D88B606E8 + +Count = 888 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = D96C09271C1D9557D43B72998E41E2D9DF5A44FAABEFC956B4A940D935BE9E1865D5FC3BDCC07F79CF75 + +Count = 889 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 5F5143FA55E240F9571656B9823639F437C859B1D0B5FE4256A9E017923F7C88E091173DA0674EF60CB9 + +Count = 890 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 047BDBAEF519DCC4E65A5DCD7E0C16873A30456EEBD26AD5B0152C2BF2423B25C7879B9CCCC2ACD8ACB3 + +Count = 891 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 1A9B58442BBD18F7F5EA1B1D243BE2277D08ABAB0A47AC4AB1132409D07819A014227CE89FD9905B3E13 + +Count = 892 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = +CT = DE27B3C1B43A54C25A724A5F57FC59B59185E2EF4B687C6D4B4CA62D01C2BF892CACF3FAE10F46C412A0CE + +Count = 893 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 00 +CT = 998D7701C14BB41DBA91A240DA82606BABF178C9DD868D5A136E17A7482AFB7E5283781A013957B0AA62FF + +Count = 894 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 0001 +CT = 51E3F26591E3BE66E2C31CBDD5BF8CD58B6B86C0EB342516F0063912DE108B2103EFE2963AF9014E193D6A + +Count = 895 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102 +CT = 255ED813C6C9E79E1107AD13AC89CB0464C6F5552762C9676392B47857F9456F9F0D6D90D26CE959EA3EF8 + +Count = 896 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 00010203 +CT = 2BB84CB90B56B23C16EA9185A8C3295775EA072BAF4B1A6A1966002EB430294E55BBA1F49F3B1BEA8EEA38 + +Count = 897 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 0001020304 +CT = CAB056AA88F110F7178FA1C075813704BEB21AFBAD02DEE10A8E0088E94AA281A04917D1B97461B796D094 + +Count = 898 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405 +CT = 85FF40FCBFEB16F5AC3B7FEAAAB7C01ADA725607C49E694F0D587F213D8336970A2E6F09CD481912067CB5 + +Count = 899 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 00010203040506 +CT = 37466ECBEF0CF6C9987924AC51E05E0DC726432BBE6E9B272649BC0DCAE9BA723B1CA497F81F5017A4D986 + +Count = 900 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 0001020304050607 +CT = 066D386BDC3BFDE56B07782DF9F784B30B60770C55B83A6DA5289859E4320310550D9E011213746A61D7FC + +Count = 901 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708 +CT = EE35C5ECBEB4F721F4F3F18F7254768B89BDE74746FE757D2F63D8A7D7EF7772022B3E1D06617DA9671E55 + +Count = 902 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 00010203040506070809 +CT = 252EA99EE58EE9DD9FA2DF9E896C85F5E30F98D4BB9421C410FC0F7A1828F1EFE6652F0774E910A67E0E75 + +Count = 903 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A +CT = B0C179AC69E8583FD66B5C00368D4DBD93157CF52B9376E2FC3007046D7D88191C4829265FD03EED607792 + +Count = 904 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B +CT = 73F5083A228D1FA45045563C2008A4E1B5F91C58B6698AAAEFCDBC5931DFB2F754BC85115B557A43EE6192 + +Count = 905 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C +CT = 41AAA97377B39758FE9E8606E64416BE91895E95CDAEB22E964550BEF80E49A27CA456A016F50B16DB39B8 + +Count = 906 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D +CT = 1A926838E49E79330E6AFB76A7B149093C726A9906360B1D6182A419456461E3815E0923375E9A52994C2F + +Count = 907 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E +CT = 39D9906849736AFEE9B9EC5851CBBFBF1305686B8BFED99F6DB728F4C7A3471421792DA24E33A87232C475 + +Count = 908 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F +CT = 95A9CC016DB1D54668CCA0DC7BC644852CB7A83E03EA8CBA8F452A45838F01F48CBDD8EF862D27C6E05721 + +Count = 909 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 307824FCBD38D152551DC44E16D56BC8A620717FA130914E70D00FE55F9107771B7ADA3884F28E7A494EB4 + +Count = 910 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 86B3B4DCA59E277541E95D63AF66CFA2B1C7A546D0D47D942C8E73C35CF705AAA338334080E10A08F90DFB + +Count = 911 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = F60ADC6495BAB5AA38B38FB383B7EECD8E5D87BF4B034312F8DD61D0AE8BA643533D849A5400DFAE72D5A0 + +Count = 912 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 4F48371B6AF752A8C631742E72BC51EB8419B7B8E4387EC130796C3215DB5BEE8DA029B57913986ECD56B8 + +Count = 913 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 89BDEA40E36A9D39A59DFE6697D508975CEA58823414029D2D2F4A99DCB3B31F94547EA0CBA0C5BA0DCBE9 + +Count = 914 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 2021C84BC884DC665C3243C822952297A2066F8CF5BA4380AA50A94E589E6BD9337B26E8FE35FD9E1A682F + +Count = 915 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 20F20FF1674EC0DF8A55CE234064C610D1775EEA5A97965818941DAA39C0F23D0E274A990DFBA33EAF69A0 + +Count = 916 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 4F7CC6B92F63AA2AB8907B52C0998D4CD047B8AE5B46DD1428F1215E0375021B087D683DA3440A707A1621 + +Count = 917 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 6034C839C70E77FC0FCED7C7D75B238F4334B925CB43D4885312147B455C85DE1F68D14F0E1F390D2DBAF7 + +Count = 918 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 5E427A3A599AB5CF74AFEBB4E555C69E60F505422E4342BB03CBD0ECE83D92044430395F220BA51C71ECAC + +Count = 919 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 0005A3730F2091FDA3602E158EBEE93241228374B8C0384BA9EDD9EB62D6E6339A4B24DA0E35E130737441 + +Count = 920 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = B2B2A81D5FB5EA292C0812FCD919233934AB155C12FBABD855BB8ACEEE90F9D19B1D3577EE799E517190CA + +Count = 921 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = D96C09271C1D9557D43B72998E41E2D9DF5A44FAABEFC956B4A9D1DF20ABB708E9054A0677C19E1291C694 + +Count = 922 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 5F5143FA55E240F9571656B9823639F437C859B1D0B5FE4256A93001054D72B0F9E006C7F45D1202D8ADD3 + +Count = 923 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 047BDBAEF519DCC4E65A5DCD7E0C16873A30456EEBD26AD5B0159C7C01227A6708152CD85614B42C0A164A + +Count = 924 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 1A9B58442BBD18F7F5EA1B1D243BE2277D08ABAB0A47AC4AB1138630E220CABB4E5585F512DC7870EE60C3 + +Count = 925 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = +CT = DE27B3C1B43A54C25A724A5F57FC59B59185E2EF4B687C6D4B4CA67E0E30207C5BA3578B1B6A16FA9C13714E + +Count = 926 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 00 +CT = 998D7701C14BB41DBA91A240DA82606BABF178C9DD868D5A136E17D91AFE6A65DBE6B79470271F38824DCC3B + +Count = 927 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 0001 +CT = 51E3F26591E3BE66E2C31CBDD5BF8CD58B6B86C0EB342516F00639A5C17BCA428F4309B31FB28F4CA224123B + +Count = 928 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102 +CT = 255ED813C6C9E79E1107AD13AC89CB0464C6F5552762C9676392B48FBC3C39D7B0D620040552C91BFA95241A + +Count = 929 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 00010203 +CT = 2BB84CB90B56B23C16EA9185A8C3295775EA072BAF4B1A6A196600EC778CC1BF6F2BB52E6E77923671FE807E + +Count = 930 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 0001020304 +CT = CAB056AA88F110F7178FA1C075813704BEB21AFBAD02DEE10A8E0059133887F1DCC8149D2C808DD32475EBFE + +Count = 931 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405 +CT = 85FF40FCBFEB16F5AC3B7FEAAAB7C01ADA725607C49E694F0D587F9F8A43F540410ED9DA78A62BFF19FFD54A + +Count = 932 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 00010203040506 +CT = 37466ECBEF0CF6C9987924AC51E05E0DC726432BBE6E9B272649BCAC36507D169E2A7386E88AEDEF2CF85BE3 + +Count = 933 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 0001020304050607 +CT = 066D386BDC3BFDE56B07782DF9F784B30B60770C55B83A6DA5289888021A78F5B773488567D97C75802E5023 + +Count = 934 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708 +CT = EE35C5ECBEB4F721F4F3F18F7254768B89BDE74746FE757D2F63D8DC51E70A25F34F002920EF1CD083DB5A6C + +Count = 935 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 00010203040506070809 +CT = 252EA99EE58EE9DD9FA2DF9E896C85F5E30F98D4BB9421C410FC0FE5C03BEF8662C1DCC17ABAA38A1FC65FE2 + +Count = 936 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A +CT = B0C179AC69E8583FD66B5C00368D4DBD93157CF52B9376E2FC3007B2F47236EAB23EA3F7C5522B2F80C24150 + +Count = 937 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B +CT = 73F5083A228D1FA45045563C2008A4E1B5F91C58B6698AAAEFCDBC5581D77AB23D3322AAFB07FEB207A3890A + +Count = 938 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C +CT = 41AAA97377B39758FE9E8606E64416BE91895E95CDAEB22E964550CF7ED4BBEFF592B131207683B75C2076B4 + +Count = 939 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D +CT = 1A926838E49E79330E6AFB76A7B149093C726A9906360B1D6182A410E783BE5F1B4FEAF899DB5E1C7DCF0928 + +Count = 940 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E +CT = 39D9906849736AFEE9B9EC5851CBBFBF1305686B8BFED99F6DB728DEDBAE87BA2F0EF6C9D0325377BDBA1B3A + +Count = 941 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F +CT = 95A9CC016DB1D54668CCA0DC7BC644852CB7A83E03EA8CBA8F452A8941DAA09F21E79423E3554E32CC025EE4 + +Count = 942 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 307824FCBD38D152551DC44E16D56BC8A620717FA130914E70D00FCD5E027D21B035DFC9C4FFF13EAC7DA236 + +Count = 943 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 86B3B4DCA59E277541E95D63AF66CFA2B1C7A546D0D47D942C8E730E0B86E912D11D58E92DA9BDC8D9CCC537 + +Count = 944 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = F60ADC6495BAB5AA38B38FB383B7EECD8E5D87BF4B034312F8DD617F33D94DB6E5970090DC17323AD94DF9AE + +Count = 945 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 4F48371B6AF752A8C631742E72BC51EB8419B7B8E4387EC130796CA6B018930DCE05B039F6ED9C161BCB6F5A + +Count = 946 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 89BDEA40E36A9D39A59DFE6697D508975CEA58823414029D2D2F4A53DD29B295D9ABAE386C3D6048602EFC78 + +Count = 947 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 2021C84BC884DC665C3243C822952297A2066F8CF5BA4380AA50A9828EF209CF303422A60D2618025DA5BD05 + +Count = 948 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 20F20FF1674EC0DF8A55CE234064C610D1775EEA5A97965818941DFA180012668CEA0FC43B851FF5C544ADBF + +Count = 949 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 4F7CC6B92F63AA2AB8907B52C0998D4CD047B8AE5B46DD1428F1214D40AB9556C6FA8F2A93E23127E486A62E + +Count = 950 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 6034C839C70E77FC0FCED7C7D75B238F4334B925CB43D488531214E7739EC3A7E9B08F35F4CF7037E472B004 + +Count = 951 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 5E427A3A599AB5CF74AFEBB4E555C69E60F505422E4342BB03CBD08E77B632E569EABA78EAF59D8BC4B719F9 + +Count = 952 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 0005A3730F2091FDA3602E158EBEE93241228374B8C0384BA9EDD94FF38302D70014C733CC226A2A2F45B05C + +Count = 953 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = B2B2A81D5FB5EA292C0812FCD919233934AB155C12FBABD855BB8AE7ED64BE35D90DA37AA37DF82EDE36DA56 + +Count = 954 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = D96C09271C1D9557D43B72998E41E2D9DF5A44FAABEFC956B4A9D115D043045FA26DB875D3CC138D70309E12 + +Count = 955 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 5F5143FA55E240F9571656B9823639F437C859B1D0B5FE4256A9306F7F08DCC004E1124766E0DCDC3F444FDA + +Count = 956 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 047BDBAEF519DCC4E65A5DCD7E0C16873A30456EEBD26AD5B0159C4FC14B3C8ABA177E3D7858BF46965CAD31 + +Count = 957 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 1A9B58442BBD18F7F5EA1B1D243BE2277D08ABAB0A47AC4AB11386BBE143538367F6E20F9AF324B314C8BC92 + +Count = 958 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = +CT = DE27B3C1B43A54C25A724A5F57FC59B59185E2EF4B687C6D4B4CA67EEA8F5FEFEEBECC2C87B6D20D286E57200F + +Count = 959 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 00 +CT = 998D7701C14BB41DBA91A240DA82606BABF178C9DD868D5A136E17D9784CFD928F8FAAD4E353571B3C02B8A5D0 + +Count = 960 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 0001 +CT = 51E3F26591E3BE66E2C31CBDD5BF8CD58B6B86C0EB342516F00639A58CF56F4D25C025AC43753B57A780915894 + +Count = 961 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102 +CT = 255ED813C6C9E79E1107AD13AC89CB0464C6F5552762C9676392B48FC3FE92BDB4610C0CDF49816FAC3DD6B104 + +Count = 962 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 00010203 +CT = 2BB84CB90B56B23C16EA9185A8C3295775EA072BAF4B1A6A196600EC21843978418FA934A5A04EBCA369475BB8 + +Count = 963 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 0001020304 +CT = CAB056AA88F110F7178FA1C075813704BEB21AFBAD02DEE10A8E0059D8B90A23893857939E99BE953D86486E5A + +Count = 964 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405 +CT = 85FF40FCBFEB16F5AC3B7FEAAAB7C01ADA725607C49E694F0D587F9F97596FF51A4CA0DF5E2B316EA9FE58F0CE + +Count = 965 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 00010203040506 +CT = 37466ECBEF0CF6C9987924AC51E05E0DC726432BBE6E9B272649BCAC84F9E05C5FBB63ECF627B6C01D61F5081A + +Count = 966 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 0001020304050607 +CT = 066D386BDC3BFDE56B07782DF9F784B30B60770C55B83A6DA5289888833D861C9D4597FEA74AAF3B5BB57A0F1D + +Count = 967 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708 +CT = EE35C5ECBEB4F721F4F3F18F7254768B89BDE74746FE757D2F63D8DC693F822191C747E17507F46CB00CD73D8C + +Count = 968 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 00010203040506070809 +CT = 252EA99EE58EE9DD9FA2DF9E896C85F5E30F98D4BB9421C410FC0FE53069818EA777F2BC835FE5220E8BD6A66A + +Count = 969 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A +CT = B0C179AC69E8583FD66B5C00368D4DBD93157CF52B9376E2FC3007B2E17F56A87D5B3BEDC9A794F34391097808 + +Count = 970 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B +CT = 73F5083A228D1FA45045563C2008A4E1B5F91C58B6698AAAEFCDBC5505D83BEB1384AF00A9FCF7CA27CF873236 + +Count = 971 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C +CT = 41AAA97377B39758FE9E8606E64416BE91895E95CDAEB22E964550CF4D345976E4D5A483045D3EE40F10A9E550 + +Count = 972 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D +CT = 1A926838E49E79330E6AFB76A7B149093C726A9906360B1D6182A4102F06691BA2FBB55B91FFB34D1E27447998 + +Count = 973 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E +CT = 39D9906849736AFEE9B9EC5851CBBFBF1305686B8BFED99F6DB728DEEB23A4853362402096CEF71EF2E6AFBAAE + +Count = 974 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F +CT = 95A9CC016DB1D54668CCA0DC7BC644852CB7A83E03EA8CBA8F452A89DC162186848021E29268C16C5DD589F976 + +Count = 975 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 307824FCBD38D152551DC44E16D56BC8A620717FA130914E70D00FCD7F29FFE78650C0ECA34862E53C481330EB + +Count = 976 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 86B3B4DCA59E277541E95D63AF66CFA2B1C7A546D0D47D942C8E730EF55FAAAA7060F50496229256BC08C5C0F3 + +Count = 977 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = F60ADC6495BAB5AA38B38FB383B7EECD8E5D87BF4B034312F8DD617F1D04EB5FCD29884C31810D6CDA0456B878 + +Count = 978 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 4F48371B6AF752A8C631742E72BC51EB8419B7B8E4387EC130796CA6627A7640FCBA4F0291BA8C5678C958C727 + +Count = 979 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 89BDEA40E36A9D39A59DFE6697D508975CEA58823414029D2D2F4A53511F454C26989B6E1709C54B08DD460DBC + +Count = 980 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 2021C84BC884DC665C3243C822952297A2066F8CF5BA4380AA50A98244C0429FE55C4BF0A2E04CC85E2299BDFE + +Count = 981 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 20F20FF1674EC0DF8A55CE234064C610D1775EEA5A97965818941DFAAEDD02DDAC6C6AA9E7476617C7B3ED9385 + +Count = 982 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 4F7CC6B92F63AA2AB8907B52C0998D4CD047B8AE5B46DD1428F1214D34C9139E4CCB0FB035204B6D6CE6C6AFFA + +Count = 983 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 6034C839C70E77FC0FCED7C7D75B238F4334B925CB43D488531214E7870341C92644A360694C89A771E193B5A3 + +Count = 984 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 5E427A3A599AB5CF74AFEBB4E555C69E60F505422E4342BB03CBD08E6B6846B91D5F7401C58DEA06B0FFF34A6F + +Count = 985 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 0005A3730F2091FDA3602E158EBEE93241228374B8C0384BA9EDD94FC3A612627EBD881F80971F7C8AF0AF25A1 + +Count = 986 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = B2B2A81D5FB5EA292C0812FCD919233934AB155C12FBABD855BB8AE7250C94D7037DB9594EC6E4E4898C7A9FD6 + +Count = 987 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = D96C09271C1D9557D43B72998E41E2D9DF5A44FAABEFC956B4A9D115E061058CC9D37543D5EF0D44E5E0526EC0 + +Count = 988 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 5F5143FA55E240F9571656B9823639F437C859B1D0B5FE4256A9306FED8A9C478CE2A737C2BAD99CC472372134 + +Count = 989 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 047BDBAEF519DCC4E65A5DCD7E0C16873A30456EEBD26AD5B0159C4F5703CFCFF5D3EE762B13FC6343029658BF + +Count = 990 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 1A9B58442BBD18F7F5EA1B1D243BE2277D08ABAB0A47AC4AB11386BBDCA56D751579E326047725FE5FF7C20BC8 + +Count = 991 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = +CT = DE27B3C1B43A54C25A724A5F57FC59B59185E2EF4B687C6D4B4CA67EEAD2BB8D82902B17A349C36631BB610CAC33 + +Count = 992 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 00 +CT = 998D7701C14BB41DBA91A240DA82606BABF178C9DD868D5A136E17D978EE4C9C5356C3CD0D7B6CB063D481E2B4D6 + +Count = 993 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 0001 +CT = 51E3F26591E3BE66E2C31CBDD5BF8CD58B6B86C0EB342516F00639A58C4329540F8C93C0B968D91F4CEF2FF0FAD6 + +Count = 994 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102 +CT = 255ED813C6C9E79E1107AD13AC89CB0464C6F5552762C9676392B48FC32CB5CFFEF5D3E8D2DE965CD6E162D60EA5 + +Count = 995 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 00010203 +CT = 2BB84CB90B56B23C16EA9185A8C3295775EA072BAF4B1A6A196600EC2193A13213BFD5EA456E10C707C39050158D + +Count = 996 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 0001020304 +CT = CAB056AA88F110F7178FA1C075813704BEB21AFBAD02DEE10A8E0059D800381738A6B5C851A24B39C6C52816B408 + +Count = 997 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405 +CT = 85FF40FCBFEB16F5AC3B7FEAAAB7C01ADA725607C49E694F0D587F9F97902FA024EA9CFC6199E760665C937A093B + +Count = 998 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 00010203040506 +CT = 37466ECBEF0CF6C9987924AC51E05E0DC726432BBE6E9B272649BCAC84153ECF688C4D783E8A00DAA3FD93DCDE36 + +Count = 999 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 0001020304050607 +CT = 066D386BDC3BFDE56B07782DF9F784B30B60770C55B83A6DA5289888831D135D17DA914104B915707C6C409E309D + +Count = 1000 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708 +CT = EE35C5ECBEB4F721F4F3F18F7254768B89BDE74746FE757D2F63D8DC6903B229E6D0E14304D8848A78D193E3DE2F + +Count = 1001 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 00010203040506070809 +CT = 252EA99EE58EE9DD9FA2DF9E896C85F5E30F98D4BB9421C410FC0FE530E5A79282F8819B722221CA7C818107BBE6 + +Count = 1002 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A +CT = B0C179AC69E8583FD66B5C00368D4DBD93157CF52B9376E2FC3007B2E1140A20A80437DC114DF162FEDA53664894 + +Count = 1003 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B +CT = 73F5083A228D1FA45045563C2008A4E1B5F91C58B6698AAAEFCDBC5505DB64117965291AF1E6DA80AC51C3A0EAA0 + +Count = 1004 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C +CT = 41AAA97377B39758FE9E8606E64416BE91895E95CDAEB22E964550CF4D4E965D476AB53AD9AAB54A81282FD42EEB + +Count = 1005 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D +CT = 1A926838E49E79330E6AFB76A7B149093C726A9906360B1D6182A4102FDEB0231EF80369F2B52CCEEC6A75F4DD25 + +Count = 1006 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E +CT = 39D9906849736AFEE9B9EC5851CBBFBF1305686B8BFED99F6DB728DEEBD3203FD2A2A608477F33EB433F75607A73 + +Count = 1007 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F +CT = 95A9CC016DB1D54668CCA0DC7BC644852CB7A83E03EA8CBA8F452A89DC3E3378F20E773C2A1167BE48CA9EAB78AF + +Count = 1008 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 307824FCBD38D152551DC44E16D56BC8A620717FA130914E70D00FCD7F2DCE588390F8125A4B552B36AC566D8B2E + +Count = 1009 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 86B3B4DCA59E277541E95D63AF66CFA2B1C7A546D0D47D942C8E730EF5284541F4BA7AD1747AB88A86D830727032 + +Count = 1010 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = F60ADC6495BAB5AA38B38FB383B7EECD8E5D87BF4B034312F8DD617F1DC54FEFB98634D815D255DBEB6141F7C2D0 + +Count = 1011 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 4F48371B6AF752A8C631742E72BC51EB8419B7B8E4387EC130796CA662BBDFEB6EDA39BC609FE20C6730002FE494 + +Count = 1012 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 89BDEA40E36A9D39A59DFE6697D508975CEA58823414029D2D2F4A53516966AEF02E97815B67FB2F42CB31DBA6F9 + +Count = 1013 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 2021C84BC884DC665C3243C822952297A2066F8CF5BA4380AA50A9824416747EBFE01F19402A06CC9144B1A801A4 + +Count = 1014 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 20F20FF1674EC0DF8A55CE234064C610D1775EEA5A97965818941DFAAE62C32778975109B7CA3759370095745CE2 + +Count = 1015 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 4F7CC6B92F63AA2AB8907B52C0998D4CD047B8AE5B46DD1428F1214D34AD65BD0075156E4C92628A8572ECE8DF24 + +Count = 1016 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 6034C839C70E77FC0FCED7C7D75B238F4334B925CB43D488531214E787B4022D38DAB650E34DEECF35136102B64E + +Count = 1017 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 5E427A3A599AB5CF74AFEBB4E555C69E60F505422E4342BB03CBD08E6B425FD89147A7082BB6CFBB5E70AD557D82 + +Count = 1018 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 0005A3730F2091FDA3602E158EBEE93241228374B8C0384BA9EDD94FC39FF3CD39F6DA939F75AD8BBA2C1698C508 + +Count = 1019 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = B2B2A81D5FB5EA292C0812FCD919233934AB155C12FBABD855BB8AE7255497C59322424D9426874DEC92B05D8EA3 + +Count = 1020 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = D96C09271C1D9557D43B72998E41E2D9DF5A44FAABEFC956B4A9D115E08DC49EEFB0DEFA1DB4C26EE4B38EF43405 + +Count = 1021 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 5F5143FA55E240F9571656B9823639F437C859B1D0B5FE4256A9306FEDF5AA7F8DBF1CF54B4898CAE46680967F85 + +Count = 1022 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 047BDBAEF519DCC4E65A5DCD7E0C16873A30456EEBD26AD5B0159C4F57452D649671DB6D7653001F0947AC37A379 + +Count = 1023 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 1A9B58442BBD18F7F5EA1B1D243BE2277D08ABAB0A47AC4AB11386BBDCADF86130FA70E67BEC99AA0C4886D7345E + +Count = 1024 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = +CT = DE27B3C1B43A54C25A724A5F57FC59B59185E2EF4B687C6D4B4CA67EEAD2DA65B30B0ACCC36BA960737D163B806D32 + +Count = 1025 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 00 +CT = 998D7701C14BB41DBA91A240DA82606BABF178C9DD868D5A136E17D978EE8E794C41A8DE1B20508CE7B64F5187AF6C + +Count = 1026 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 0001 +CT = 51E3F26591E3BE66E2C31CBDD5BF8CD58B6B86C0EB342516F00639A58C4355EA18D0EB3E50D916490B645BF4377CF8 + +Count = 1027 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102 +CT = 255ED813C6C9E79E1107AD13AC89CB0464C6F5552762C9676392B48FC32CD4BD49E28AC474CA58BD4BE4768E1C34AA + +Count = 1028 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 00010203 +CT = 2BB84CB90B56B23C16EA9185A8C3295775EA072BAF4B1A6A196600EC219387FA708F7B2377916F06E6936A18FCA2C9 + +Count = 1029 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 0001020304 +CT = CAB056AA88F110F7178FA1C075813704BEB21AFBAD02DEE10A8E0059D8000098B446EEA2809D410953FE57090F1A8B + +Count = 1030 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405 +CT = 85FF40FCBFEB16F5AC3B7FEAAAB7C01ADA725607C49E694F0D587F9F979080D45CEACB2036D0CA7E8D042BD338C5E5 + +Count = 1031 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 00010203040506 +CT = 37466ECBEF0CF6C9987924AC51E05E0DC726432BBE6E9B272649BCAC84157505BA51FCF1DFA37DF0D8053CAD4CBFD5 + +Count = 1032 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 0001020304050607 +CT = 066D386BDC3BFDE56B07782DF9F784B30B60770C55B83A6DA5289888831D952ACF345C7E72D4EAD3190AAC6115D83E + +Count = 1033 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708 +CT = EE35C5ECBEB4F721F4F3F18F7254768B89BDE74746FE757D2F63D8DC6903782ED369A39CF024FE12947416C9FF25C0 + +Count = 1034 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 00010203040506070809 +CT = 252EA99EE58EE9DD9FA2DF9E896C85F5E30F98D4BB9421C410FC0FE530E5ECE480C33EE9B7F16FFBB923B19725E889 + +Count = 1035 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A +CT = B0C179AC69E8583FD66B5C00368D4DBD93157CF52B9376E2FC3007B2E1142588040EB00A8366154556D6877147DF32 + +Count = 1036 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B +CT = 73F5083A228D1FA45045563C2008A4E1B5F91C58B6698AAAEFCDBC5505DB54EA9C5599089A90A6E10FA497ECC5E61D + +Count = 1037 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C +CT = 41AAA97377B39758FE9E8606E64416BE91895E95CDAEB22E964550CF4D4E87543FDC15DFBDC7A86E083B59252D07D8 + +Count = 1038 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D +CT = 1A926838E49E79330E6AFB76A7B149093C726A9906360B1D6182A4102FDED3EC0CD39D474C58FF7B92EFCEA2C50E14 + +Count = 1039 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E +CT = 39D9906849736AFEE9B9EC5851CBBFBF1305686B8BFED99F6DB728DEEBD3B48FD77CF9BD3F0F930D252FB3914E6859 + +Count = 1040 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F +CT = 95A9CC016DB1D54668CCA0DC7BC644852CB7A83E03EA8CBA8F452A89DC3ED349788B6873856FBDDA6348F6159642D4 + +Count = 1041 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 307824FCBD38D152551DC44E16D56BC8A620717FA130914E70D00FCD7F2D46227AD14380B2A7F2B36E50176FABD906 + +Count = 1042 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 86B3B4DCA59E277541E95D63AF66CFA2B1C7A546D0D47D942C8E730EF528D49E4815BBA3EE34515F6224500C14CEF0 + +Count = 1043 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = F60ADC6495BAB5AA38B38FB383B7EECD8E5D87BF4B034312F8DD617F1DC5F2A83631EAB14C3B6109DD81C1FB1407E0 + +Count = 1044 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 4F48371B6AF752A8C631742E72BC51EB8419B7B8E4387EC130796CA662BB39C299BCFD54C029011B5A16CD048492B7 + +Count = 1045 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 89BDEA40E36A9D39A59DFE6697D508975CEA58823414029D2D2F4A53516981FCE35C000BDF7A6EDAA661BF433D314D + +Count = 1046 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 2021C84BC884DC665C3243C822952297A2066F8CF5BA4380AA50A98244165C9432824F03A7C18BFFC987D76BA56D78 + +Count = 1047 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 20F20FF1674EC0DF8A55CE234064C610D1775EEA5A97965818941DFAAE628A43321D3FAB966B3264AE16C757624FF6 + +Count = 1048 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 4F7CC6B92F63AA2AB8907B52C0998D4CD047B8AE5B46DD1428F1214D34AD9F0F6F924971B9FBD97EC664D9C17C001C + +Count = 1049 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 6034C839C70E77FC0FCED7C7D75B238F4334B925CB43D488531214E787B4787CAD13067F6440FC2163B4C8897BDF58 + +Count = 1050 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 5E427A3A599AB5CF74AFEBB4E555C69E60F505422E4342BB03CBD08E6B42824863E866072B25D20BFFA832A5EE5C1B + +Count = 1051 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 0005A3730F2091FDA3602E158EBEE93241228374B8C0384BA9EDD94FC39F216C77B8320EFF6C64C73F98CE9B1A68B4 + +Count = 1052 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = B2B2A81D5FB5EA292C0812FCD919233934AB155C12FBABD855BB8AE72554E69D0AEF2CEBFC058BB810316B9329537C + +Count = 1053 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = D96C09271C1D9557D43B72998E41E2D9DF5A44FAABEFC956B4A9D115E08D8A0E1257B2F4BA89ED6A5F6300C734EBCC + +Count = 1054 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 5F5143FA55E240F9571656B9823639F437C859B1D0B5FE4256A9306FEDF5FEB173F52B2FFEC68DF5E3F90614E20791 + +Count = 1055 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 047BDBAEF519DCC4E65A5DCD7E0C16873A30456EEBD26AD5B0159C4F57453552B415F5AC8BB6B5DBA37F3AFA99CAC4 + +Count = 1056 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 1A9B58442BBD18F7F5EA1B1D243BE2277D08ABAB0A47AC4AB11386BBDCADA00B43508E0187446F06C8AC54CB2D9700 + +Count = 1057 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = +CT = DE27B3C1B43A54C25A724A5F57FC59B59185E2EF4B687C6D4B4CA67EEAD2DAE240737EB5F63221B6B5BA8C1AF1B567F2 + +Count = 1058 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 00 +CT = 998D7701C14BB41DBA91A240DA82606BABF178C9DD868D5A136E17D978EE8EC26FEEA3B851F89609ED89DE2E13FC43AE + +Count = 1059 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 0001 +CT = 51E3F26591E3BE66E2C31CBDD5BF8CD58B6B86C0EB342516F00639A58C43559BF895C379AF7AE332DA52B4A9CAC9C426 + +Count = 1060 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102 +CT = 255ED813C6C9E79E1107AD13AC89CB0464C6F5552762C9676392B48FC32CD42695AF998569D9CF70C01F83A8322B42F6 + +Count = 1061 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 00010203 +CT = 2BB84CB90B56B23C16EA9185A8C3295775EA072BAF4B1A6A196600EC2193871EA51629161BEEED07C1AE88D7E95A571C + +Count = 1062 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 0001020304 +CT = CAB056AA88F110F7178FA1C075813704BEB21AFBAD02DEE10A8E0059D800006A1A036BCEC0BBC71B52E35AEAA1B2C591 + +Count = 1063 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405 +CT = 85FF40FCBFEB16F5AC3B7FEAAAB7C01ADA725607C49E694F0D587F9F979080C9B6CDC4E53A8C638CC43C359D6EF6A0EE + +Count = 1064 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 00010203040506 +CT = 37466ECBEF0CF6C9987924AC51E05E0DC726432BBE6E9B272649BCAC841575588CBC74B6FCC33DC3256D51D269292563 + +Count = 1065 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 0001020304050607 +CT = 066D386BDC3BFDE56B07782DF9F784B30B60770C55B83A6DA5289888831D95AD156817A8DDFCC167CD1499D1DEF08690 + +Count = 1066 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708 +CT = EE35C5ECBEB4F721F4F3F18F7254768B89BDE74746FE757D2F63D8DC6903786A526A2A7799B1272598709B0DDFAE05E4 + +Count = 1067 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 00010203040506070809 +CT = 252EA99EE58EE9DD9FA2DF9E896C85F5E30F98D4BB9421C410FC0FE530E5ECC110D50F5164BC42BEE3CDAE48CE7B049A + +Count = 1068 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A +CT = B0C179AC69E8583FD66B5C00368D4DBD93157CF52B9376E2FC3007B2E11425F23ADB09B4C2183265025169987A7A8B7C + +Count = 1069 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B +CT = 73F5083A228D1FA45045563C2008A4E1B5F91C58B6698AAAEFCDBC5505DB545887519DAE89FDB7F6CF7A2244163777AB + +Count = 1070 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C +CT = 41AAA97377B39758FE9E8606E64416BE91895E95CDAEB22E964550CF4D4E879D0C3DCB42177F0D628543E554B0E3B691 + +Count = 1071 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D +CT = 1A926838E49E79330E6AFB76A7B149093C726A9906360B1D6182A4102FDED39BD4F91C303CE514D60A08637527357AA7 + +Count = 1072 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E +CT = 39D9906849736AFEE9B9EC5851CBBFBF1305686B8BFED99F6DB728DEEBD3B4C38ECB948A7FA6ECDC5012BC2714DC8255 + +Count = 1073 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F +CT = 95A9CC016DB1D54668CCA0DC7BC644852CB7A83E03EA8CBA8F452A89DC3ED33A6569265FEC0A693AFEF3C34E61B3D90E + +Count = 1074 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 307824FCBD38D152551DC44E16D56BC8A620717FA130914E70D00FCD7F2D464585D288467EDAE6815507237DCF62DE99 + +Count = 1075 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 86B3B4DCA59E277541E95D63AF66CFA2B1C7A546D0D47D942C8E730EF528D4B2B8570A516A70075EE50AAE067B183221 + +Count = 1076 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = F60ADC6495BAB5AA38B38FB383B7EECD8E5D87BF4B034312F8DD617F1DC5F2A9C09012D04660D249A6557A79BA6594B8 + +Count = 1077 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 4F48371B6AF752A8C631742E72BC51EB8419B7B8E4387EC130796CA662BB396967249FF5EBF75DB1848564F6953533E1 + +Count = 1078 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 89BDEA40E36A9D39A59DFE6697D508975CEA58823414029D2D2F4A5351698111B98529EEAFF7E0BD1D41D496CBA99249 + +Count = 1079 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 2021C84BC884DC665C3243C822952297A2066F8CF5BA4380AA50A98244165C60762DAF943C8621229A87EDAFF317AD3D + +Count = 1080 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 20F20FF1674EC0DF8A55CE234064C610D1775EEA5A97965818941DFAAE628AC0F573A56C4C6B3A1E0F00990BC43CAF64 + +Count = 1081 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 4F7CC6B92F63AA2AB8907B52C0998D4CD047B8AE5B46DD1428F1214D34AD9F6168DCAF706905F39F4C51C6C3B8D8BB3D + +Count = 1082 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 6034C839C70E77FC0FCED7C7D75B238F4334B925CB43D488531214E787B478268D9DD797F94A6C15657463044BDEF47D + +Count = 1083 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 5E427A3A599AB5CF74AFEBB4E555C69E60F505422E4342BB03CBD08E6B4282207CDC3D532369A7024A8CCF3BDCA4AD05 + +Count = 1084 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 0005A3730F2091FDA3602E158EBEE93241228374B8C0384BA9EDD94FC39F2183F5B9DAB76BF2357367ED21BE8C835E0C + +Count = 1085 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = B2B2A81D5FB5EA292C0812FCD919233934AB155C12FBABD855BB8AE72554E60CC3730EE1CCF20311132999544635B374 + +Count = 1086 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = D96C09271C1D9557D43B72998E41E2D9DF5A44FAABEFC956B4A9D115E08D8AC92CE5670A2CCBD2259AB93E7D43D39EB7 + +Count = 1087 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 5F5143FA55E240F9571656B9823639F437C859B1D0B5FE4256A9306FEDF5FEF4DB7932F49C4D2F67B002E0ADCE86B66B + +Count = 1088 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 047BDBAEF519DCC4E65A5DCD7E0C16873A30456EEBD26AD5B0159C4F574535D3E79D8569A7E17BF6FF7080DF6E947B12 + +Count = 1089 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 1A9B58442BBD18F7F5EA1B1D243BE2277D08ABAB0A47AC4AB11386BBDCADA04A47B9E1731E9679190165412401BD62AB + diff --git a/romulus/Implementations/crypto_aead/romulusn1+v12/armcortexm/api.h b/romulus/Implementations/crypto_aead/romulusn1+v12/armcortexm/api.h new file mode 100644 index 0000000..a4aa567 --- /dev/null +++ b/romulus/Implementations/crypto_aead/romulusn1+v12/armcortexm/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/romulus/Implementations/crypto_aead/romulusn1+v12/armcortexm/crypto_aead.h b/romulus/Implementations/crypto_aead/romulusn1+v12/armcortexm/crypto_aead.h new file mode 100644 index 0000000..6f4ee42 --- /dev/null +++ b/romulus/Implementations/crypto_aead/romulusn1+v12/armcortexm/crypto_aead.h @@ -0,0 +1,13 @@ +//API required by the NIST for the LWC competition +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); + +//API required by the NIST for the LWC competition +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); diff --git a/romulus/Implementations/crypto_aead/romulusn1+v12/armcortexm/encrypt.c b/romulus/Implementations/crypto_aead/romulusn1+v12/armcortexm/encrypt.c new file mode 100644 index 0000000..8b819f8 --- /dev/null +++ b/romulus/Implementations/crypto_aead/romulusn1+v12/armcortexm/encrypt.c @@ -0,0 +1,261 @@ +#include "skinny128.h" +#include "romulus.h" +#include + +//Encryption and authentication using Romulus-N1 +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 tmp; + skinny_128_384_tks tks; + u8 state[BLOCKBYTES], pad[BLOCKBYTES]; + (void)nsec; + + // ----------------- Initialization ----------------- + *clen = mlen + TAGBYTES; + memset(tks.tk1, 0x00, KEYBYTES); + memset(state, 0x00, BLOCKBYTES); + tks.tk1[0] = 0x01; // Init 56-bit LFSR counter + // ----------------- Initialization ----------------- + + // ----------------- Process the associated data ----------------- + if (adlen == 0) { // Handle the special case of no AD + UPDATE_CTR(tks.tk1); + SET_DOMAIN(tks, 0x1A); + tkschedule_lfsr(tks.rtk, npub, k, SKINNY128_384_ROUNDS); + tkschedule_perm(tks.rtk); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + } else { // Process double blocks but the last + SET_DOMAIN(tks, 0x08); + while (adlen > 2*BLOCKBYTES) { + UPDATE_CTR(tks.tk1); + XOR_BLOCK(state, state, ad); + tkschedule_lfsr(tks.rtk, ad + BLOCKBYTES, k, SKINNY128_384_ROUNDS); + tkschedule_perm(tks.rtk); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + UPDATE_CTR(tks.tk1); + ad += 2*BLOCKBYTES; + adlen -= 2*BLOCKBYTES; + } + // Pad and process the left-over blocks + UPDATE_CTR(tks.tk1); + if (adlen == 2*BLOCKBYTES) { // Left-over complete double block + XOR_BLOCK(state, state, ad); + tkschedule_lfsr(tks.rtk, ad + BLOCKBYTES, k, SKINNY128_384_ROUNDS); + tkschedule_perm(tks.rtk); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + UPDATE_CTR(tks.tk1); + SET_DOMAIN(tks, 0x18); + } else if (adlen > BLOCKBYTES) { // Left-over partial double block + adlen -= BLOCKBYTES; + XOR_BLOCK(state, state, ad); + memcpy(pad, ad + BLOCKBYTES, adlen); + memset(pad + adlen, 0x00, 15 - adlen); + pad[15] = adlen; + tkschedule_lfsr(tks.rtk, pad, k, SKINNY128_384_ROUNDS); + tkschedule_perm(tks.rtk); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + UPDATE_CTR(tks.tk1); + SET_DOMAIN(tks, 0x1A); + } else if (adlen == BLOCKBYTES) { // Left-over complete single block + XOR_BLOCK(state, state, ad); + SET_DOMAIN(tks, 0x18); + } else { // Left-over partial single block + for(int i = 0; i < (int)adlen; i++) + state[i] ^= ad[i]; + state[15] ^= adlen; // Padding + SET_DOMAIN(tks, 0x1A); + } + tkschedule_lfsr(tks.rtk, npub, k, SKINNY128_384_ROUNDS); + tkschedule_perm(tks.rtk); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + } + // ----------------- Process the associated data ----------------- + + // ----------------- Process the plaintext ----------------- + memset(tks.tk1, 0x00, KEYBYTES/2); + tks.tk1[0] = 0x01; // Init the 56-bit LFSR counter + if (mlen == 0) { + UPDATE_CTR(tks.tk1); + SET_DOMAIN(tks, 0x15); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + } else { // Process all blocks except the last + SET_DOMAIN(tks, 0x04); + while (mlen > BLOCKBYTES) { + RHO(state,c,m); + UPDATE_CTR(tks.tk1); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + c += BLOCKBYTES; + m += BLOCKBYTES; + mlen -= BLOCKBYTES; + } + // Pad and process the last block + UPDATE_CTR(tks.tk1); + if (mlen < BLOCKBYTES) { // Last message single block is full + for(int i = 0; i < (int)mlen; i++) { + tmp = m[i]; // Use of tmp variable in case c = m + c[i] = m[i] ^ (state[i] >> 1) ^ (state[i] & 0x80) ^ (state[i] << 7); + state[i] ^= (u8)tmp; + } + state[15] ^= (u8)mlen; // Padding + SET_DOMAIN(tks, 0x15); + } else { // Last message single block is partial + RHO(state,c,m); + SET_DOMAIN(tks, 0x14); + } + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + c += mlen; + } + // ----------------- Process the plaintext ----------------- + + // ----------------- Generate the tag ----------------- + G(c,state); + // ----------------- Generate the tag ----------------- + + return 0; +} + + +//Decryption and tag verification using Romulus-N1 +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 tmp; + skinny_128_384_tks tks; + u8 state[BLOCKBYTES], pad[BLOCKBYTES]; + (void)nsec; + + if (clen < TAGBYTES) + return -1; + + // ----------------- Initialization ----------------- + *mlen = clen - TAGBYTES; + memset(tks.tk1, 0x00, KEYBYTES); + memset(state, 0x00, BLOCKBYTES); + tks.tk1[0] = 0x01; // Init 56-bit LFSR counter + // ----------------- Initialization ----------------- + + // ----------------- Process the associated data ----------------- + if (adlen == 0) { // Handle the special case of no AD + UPDATE_CTR(tks.tk1); + SET_DOMAIN(tks, 0x1A); + tkschedule_lfsr(tks.rtk, npub, k, SKINNY128_384_ROUNDS); + tkschedule_perm(tks.rtk); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + } else { // Process double blocks except the last + SET_DOMAIN(tks, 0x08); + while (adlen > 2*BLOCKBYTES) { + UPDATE_CTR(tks.tk1); + XOR_BLOCK(state, state, ad); + tkschedule_lfsr(tks.rtk, ad + BLOCKBYTES, k, SKINNY128_384_ROUNDS); + tkschedule_perm(tks.rtk); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + UPDATE_CTR(tks.tk1); + ad += 2*BLOCKBYTES; + adlen -= 2*BLOCKBYTES; + } + // Pad and process the left-over blocks + UPDATE_CTR(tks.tk1); + if (adlen == 2*BLOCKBYTES) { // Left-over complete double block + XOR_BLOCK(state, state, ad); + tkschedule_lfsr(tks.rtk, ad + BLOCKBYTES, k, SKINNY128_384_ROUNDS); + tkschedule_perm(tks.rtk); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + UPDATE_CTR(tks.tk1); + SET_DOMAIN(tks, 0x18); + } else if (adlen > BLOCKBYTES) { // Left-over partial double block + adlen -= BLOCKBYTES; + XOR_BLOCK(state, state, ad); + memcpy(pad, ad + BLOCKBYTES, adlen); + memset(pad + adlen, 0x00, 15 - adlen); + pad[15] = adlen; + tkschedule_lfsr(tks.rtk, pad, k, SKINNY128_384_ROUNDS); + tkschedule_perm(tks.rtk); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + UPDATE_CTR(tks.tk1); + SET_DOMAIN(tks, 0x1A); + } else if (adlen == BLOCKBYTES) { // Left-over complete single block + XOR_BLOCK(state, state, ad); + SET_DOMAIN(tks, 0x18); + } else { // Left-over partial single block + for(int i = 0; i < (int)adlen; i++) + state[i] ^= ad[i]; + state[15] ^= adlen; // Padding + SET_DOMAIN(tks, 0x1A); + } + tkschedule_lfsr(tks.rtk, npub, k, SKINNY128_384_ROUNDS); + tkschedule_perm(tks.rtk); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + } + // ----------------- Process the associated data ----------------- + + // ----------------- Process the ciphertext ----------------- + clen -= TAGBYTES; + memset(tks.tk1, 0x00, KEYBYTES/2); + tks.tk1[0] = 0x01; // Init the 56-bit LFSR counter + if (clen == 0) { + UPDATE_CTR(tks.tk1); + SET_DOMAIN(tks, 0x15); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + } else { // Process all blocks except the last + SET_DOMAIN(tks, 0x04); + while (clen > BLOCKBYTES) { + RHO_INV(state,c,m); + UPDATE_CTR(tks.tk1); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + c += BLOCKBYTES; + m += BLOCKBYTES; + clen -= BLOCKBYTES; + } + // Pad and process the last block + UPDATE_CTR(tks.tk1); + if (clen < BLOCKBYTES) { // Last message double block is partial + for(int i = 0; i < (int)clen; i++) { + m[i] = c[i] ^ (state[i] >> 1) ^ (state[i] & 0x80) ^ (state[i] << 7); + state[i] ^= m[i]; + } + state[15] ^= (u8)clen; // Padding + SET_DOMAIN(tks, 0x15); + } else { // Last message double block is full + RHO_INV(state,c,m); + SET_DOMAIN(tks, 0x14); + } + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + } + // ----------------- Process the plaintext ----------------- + + // ----------------- Generate and check the tag ----------------- + G(state,state); + tmp = 0; + for(int i = 0; i < TAGBYTES; i++) + tmp |= state[i] ^ c[clen+i]; // Constant-time tag comparison + // ----------------- Generate and check the tag ----------------- + + return tmp; +} \ No newline at end of file diff --git a/romulus/Implementations/crypto_aead/romulusn1+v12/armcortexm/romulus.h b/romulus/Implementations/crypto_aead/romulusn1+v12/armcortexm/romulus.h new file mode 100644 index 0000000..4c0e141 --- /dev/null +++ b/romulus/Implementations/crypto_aead/romulusn1+v12/armcortexm/romulus.h @@ -0,0 +1,68 @@ +#ifndef ROMULUSN1_H_ +#define ROMULUSN1_H_ + +#include "skinny128.h" + +typedef unsigned char u8; +typedef unsigned int u32; +typedef struct { + u8 tk1[16]; //to manipulate tk1 in a byte-wise manner + u32 rtk1[32]; //to avoid recomputation of the tk schedule + u32 rtk[4*SKINNY128_384_ROUNDS];//all round tweakeys +} skinny_128_384_tks; + +#define TAGBYTES 16 +#define KEYBYTES 16 +#define BLOCKBYTES 16 + +#define SET_DOMAIN(tks, domain) ((tks).tk1[7] = (domain)) + +//G as defined in the Romulus specification in a 32-bit word-wise manner +#define G(x,y) ({ \ + tmp = ((u32*)(y))[0]; \ + ((u32*)(x))[0] = (tmp >> 1 & 0x7f7f7f7f) ^ ((tmp ^ (tmp << 7)) & 0x80808080); \ + tmp = ((u32*)(y))[1]; \ + ((u32*)(x))[1] = (tmp >> 1 & 0x7f7f7f7f) ^ ((tmp ^ (tmp << 7)) & 0x80808080); \ + tmp = ((u32*)(y))[2]; \ + ((u32*)(x))[2] = (tmp >> 1 & 0x7f7f7f7f) ^ ((tmp ^ (tmp << 7)) & 0x80808080); \ + tmp = ((u32*)(y))[3]; \ + ((u32*)(x))[3] = (tmp >> 1 & 0x7f7f7f7f) ^ ((tmp ^ (tmp << 7)) & 0x80808080); \ +}) + +//update the counter in tk1 in a 32-bit word-wise manner +#define UPDATE_CTR(tk1) ({ \ + tmp = ((u32*)(tk1))[1]; \ + ((u32*)(tk1))[1] = (tmp << 1) & 0x00ffffff; \ + ((u32*)(tk1))[1] |= (((u32*)(tk1))[0] >> 31); \ + ((u32*)(tk1))[1] |= tmp & 0xff000000; \ + ((u32*)(tk1))[0] <<= 1; \ + if ((tmp >> 23) & 0x01) \ + ((u32*)(tk1))[0] ^= 0x95; \ +}) + +//x <- y ^ z for 128-bit blocks +#define XOR_BLOCK(x,y,z) ({ \ + ((u32*)(x))[0] = ((u32*)(y))[0] ^ ((u32*)(z))[0]; \ + ((u32*)(x))[1] = ((u32*)(y))[1] ^ ((u32*)(z))[1]; \ + ((u32*)(x))[2] = ((u32*)(y))[2] ^ ((u32*)(z))[2]; \ + ((u32*)(x))[3] = ((u32*)(y))[3] ^ ((u32*)(z))[3]; \ +}) + + +//Rho as defined in the Romulus specification +//use pad as a tmp variable in case y = z +#define RHO(x,y,z) ({ \ + G(pad,x); \ + XOR_BLOCK(y, pad, z); \ + XOR_BLOCK(x, x, z); \ +}) + +//Rho inverse as defined in the Romulus specification +//use pad as a tmp variable in case y = z +#define RHO_INV(x, y, z) ({ \ + G(pad, x); \ + XOR_BLOCK(z, pad, y); \ + XOR_BLOCK(x, x, z); \ +}) + +#endif // ROMULUSN1_H_ \ No newline at end of file diff --git a/romulus/Implementations/crypto_aead/romulusn1+v12/armcortexm/skinny128.h b/romulus/Implementations/crypto_aead/romulusn1+v12/armcortexm/skinny128.h new file mode 100644 index 0000000..7f53b7d --- /dev/null +++ b/romulus/Implementations/crypto_aead/romulusn1+v12/armcortexm/skinny128.h @@ -0,0 +1,15 @@ +#ifndef SKINNY128_H_ +#define SKINNY128_H_ + +typedef unsigned char u8; +typedef unsigned int u32; + +#define SKINNY128_384_ROUNDS 40 + +extern void skinny128_384(u8* ctext, const u32* tk, const u8* ptext, const u32* rtk1); +extern void tkschedule_lfsr(u32* rtk, const u8* tk2, const u8* tk3, const int rounds); +extern void tkschedule_perm(u32* rtk); +extern void tkschedule_perm_tk1(u32* rtk1, const u8* tk1); + + +#endif // SKINNY128_H_ \ No newline at end of file diff --git a/romulus/Implementations/crypto_aead/romulusn1+v12/armcortexm/skinny128.s b/romulus/Implementations/crypto_aead/romulusn1+v12/armcortexm/skinny128.s new file mode 100644 index 0000000..2f938a0 --- /dev/null +++ b/romulus/Implementations/crypto_aead/romulusn1+v12/armcortexm/skinny128.s @@ -0,0 +1,1706 @@ +/******************************************************************************* +* ARM assembly implementation of fixsliced SKINNY-128-384. +* +* For more details, see the paper at: https:// +* +* @author Alexandre Adomnicai, Nanyang Technological University, +* alexandre.adomnicai@ntu.edu.sg +* +* @date May 2020 +*******************************************************************************/ + +.syntax unified +.thumb + +/******************************************************************************* +* applies P^2 on the tweakey state in a bitsliced manner +*******************************************************************************/ +.align 2 +p2: + movw r1, #0xcc00 + movt r1, #0xcc00 //r1 <- 0xcc00cc00 + movw r10, #0xcc00 + movt r10, #0x0033 //r10<- 0xcc000033 + and r11, r1, r6, ror #14 + bfi r11, r6, #16, #8 + and r12, r6, #0xcc000000 + orr r11, r11, r12, lsr #2 + and r12, r10, r6 + orr r11, r11, r12, lsr #8 + and r12, r6, #0x00cc0000 + orr r6, r11, r12, lsr #18 + and r11, r1, r7, ror #14 + bfi r11, r7, #16, #8 + and r12, r7, #0xcc000000 + orr r11, r11, r12, lsr #2 + and r12, r10, r7 + orr r11, r11, r12, lsr #8 + and r12, r7, #0x00cc0000 + orr r7, r11, r12, lsr #18 + and r11, r1, r8, ror #14 + bfi r11, r8, #16, #8 + and r12, r8, #0xcc000000 + orr r11, r11, r12, lsr #2 + and r12, r10, r8 + orr r11, r11, r12, lsr #8 + and r12, r8, #0x00cc0000 + orr r8, r11, r12, lsr #18 + and r11, r1, r9, ror #14 + bfi r11, r9, #16, #8 + and r12, r9, #0xcc000000 + orr r11, r11, r12, lsr #2 + and r12, r10, r9 + orr r11, r11, r12, lsr #8 + and r12, r9, #0x00cc0000 + orr r9, r11, r12, lsr #18 + bx lr + +/******************************************************************************* +* applies P^4 on the tweakey state in a bitsliced manner +*******************************************************************************/ +.align 2 +p4: + str.w r14, [sp] //store r14 on the stack + movw r14, #0x00cc + movt r14, #0xcc00 //r14<- 0xcc0000cc + movw r12, #0xcc00 + movt r12, #0x3300 //r12<- 0x3300cc00 + movw r11, #0x00cc + movt r11, #0x00cc //r11<- 0x00cc00cc + and r10, r14, r6, ror #22 + and r1, r12, r6, ror #16 + orr r10, r10, r1 + and r1, r6, r11 + orr r10, r10, r1, lsr #2 + movw r1, #0xcc33 //r1 <- 0x0000cc33 + and r6, r6, r1 + orr r6, r10, r6, ror #24 + and r10, r14, r7, ror #22 + and r1, r12, r7, ror #16 + orr r10, r10, r1 + and r1, r7, r11 + orr r10, r10, r1, lsr #2 + movw r1, #0xcc33 //r1 <- 0x0000cc33 + and r7, r7, r1 + orr r7, r10, r7, ror #24 + and r10, r14, r8, ror #22 + and r1, r12, r8, ror #16 + orr r10, r10, r1 + and r1, r8, r11 + orr r10, r10, r1, lsr #2 + movw r1, #0xcc33 //r1 <- 0x0000cc33 + and r8, r8, r1 + orr r8, r10, r8, ror #24 + and r10, r14, r9, ror #22 + ldr.w r14, [sp] //restore r14 + and r12, r12, r9, ror #16 + orr r10, r10, r12 + and r12, r9, r11 + orr r10, r10, r12, lsr #2 + movw r12, #0xcc33 //r1 <- 0x0000cc33 + and r9, r9, r12 + orr r9, r10, r9, ror #24 + bx lr + +/******************************************************************************* +* applies P^6 on the tweakey state in a bitsliced manner +*******************************************************************************/ +.align 2 +p6: + movw r1, #0x3333 //r1 <- 0x00003333 + movw r12, #0x00cc + movt r12, #0x3300 //r12<- 0x330000cc + and r10, r6, r1, ror #8 // --- permute r6 6 times + and r11, r12, r6, ror #24 + orr r11, r11, r10, ror #6 + and r10, r1, r6, ror #10 + orr r11, r11, r10 + and r10, r6, #0x000000cc + orr r11, r11, r10, lsl #14 + and r10, r6, #0x00003300 + orr r6, r11, r10, lsl #2 // permute r6 6 times --- + and r10, r7, r1, ror #8 // --- permute r7 6 times + and r11, r12, r7, ror #24 + orr r11, r11, r10, ror #6 + and r10, r1, r7, ror #10 + orr r11, r11, r10 + and r10, r7, #0x000000cc + orr r11, r11, r10, lsl #14 + and r10, r7, #0x00003300 + orr r7, r11, r10, lsl #2 // permute r7 6 times --- + and r10, r8, r1, ror #8 // --- permute r8 6 times + and r11, r12, r8, ror #24 + orr r11, r11, r10, ror #6 + and r10, r1, r8, ror #10 + orr r11, r11, r10 + and r10, r8, #0x000000cc + orr r11, r11, r10, lsl #14 + and r10, r8, #0x00003300 + orr r8, r11, r10, lsl #2 // permute r8 6 times --- + and r10, r9, r1, ror #8 // --- permute r9 6 times + and r11, r12, r9, ror #24 + orr r11, r11, r10, ror #6 + and r10, r1, r9, ror #10 + orr r11, r11, r10 + and r10, r9, #0x000000cc + orr r11, r11, r10, lsl #14 + and r10, r9, #0x00003300 // permute r9 6 times --- + orr r9, r11, r10, lsl #2 + bx lr + +/******************************************************************************* +* applies P^8 on the tweakey state in a bitsliced manner +*******************************************************************************/ +.align 2 +p8: + movw r12, #0x3333 //r12<- 0x00003333 + movw r1, #0x0000 + movt r1, #0x33cc //r1 <- 0x33cc0000 + and r10, r6, r1 // --- permute r6 8 times + and r11, r1, r6, ror #8 + orr r11, r11, r10, ror #24 + and r10, r6, r12, lsl #2 + orr r11, r11, r10, ror #26 + and r10, r6, r12, lsl #8 + orr r6, r11, r10, lsr #6 // permute r6 8 times --- + and r10, r7, r1 // --- permute r7 8 times + and r11, r1, r7, ror #8 + orr r11, r11, r10, ror #24 + and r10, r7, r12, lsl #2 + orr r11, r11, r10, ror #26 + and r10, r7, r12, lsl #8 + orr r7, r11, r10, lsr #6 // permute r7 8 times --- + and r10, r8, r1 // --- permute r8 8 times + and r11, r1, r8, ror #8 + orr r11, r11, r10, ror #24 + and r10, r8, r12, lsl #2 + orr r11, r11, r10, ror #26 + and r10, r8, r12, lsl #8 + orr r8, r11, r10, lsr #6 // permute r8 8 times --- + and r10, r9, r1 // --- permute r9 8 times + and r11, r1, r9, ror #8 + orr r11, r11, r10, ror #24 + and r10, r9, r12, lsl #2 + orr r11, r11, r10, ror #26 + and r10, r9, r12, lsl #8 + orr r9, r11, r10, lsr #6 // permute r9 8 times --- + bx lr + +/******************************************************************************* +* applies P^10 on the tweakey state in a bitsliced manner +*******************************************************************************/ +.align 2 +p10: + movw r12, #0x0033 + movt r12, #0x3300 //r12<- 0x33000033 + movw r1, #0xcc33 //r1 <- 0x0000cc33 + and r10, r6, r1, ror #8 // --- permute r6 10 times + and r11, r12, r6, ror #26 + orr r11, r11, r10, ror #8 + and r10, r6, r12, ror #24 + orr r11, r11, r10, ror #22 + and r10, r6, #0x00330000 + orr r11, r11, r10, lsr #14 + and r10, r6, #0x0000cc00 + orr r6, r11, r10, lsr #2 // permute r6 10 times --- + and r10, r7, r1, ror #8 // --- permute r6 10 times + and r11, r12, r7, ror #26 + orr r11, r11, r10, ror #8 + and r10, r7, r12, ror #24 + orr r11, r11, r10, ror #22 + and r10, r7, #0x00330000 + orr r11, r11, r10, lsr #14 + and r10, r7, #0x0000cc00 + orr r7, r11, r10, lsr #2 // permute r6 10 times --- + and r10, r8, r1, ror #8 // --- permute r6 10 times + and r11, r12, r8, ror #26 + orr r11, r11, r10, ror #8 + and r10, r8, r12, ror #24 + orr r11, r11, r10, ror #22 + and r10, r8, #0x00330000 + orr r11, r11, r10, lsr #14 + and r10, r8, #0x0000cc00 + orr r8, r11, r10, lsr #2 // permute r6 10 times --- + and r10, r9, r1, ror #8 // --- permute r6 10 times + and r11, r12, r9, ror #26 + orr r11, r11, r10, ror #8 + and r10, r9, r12, ror #24 + orr r11, r11, r10, ror #22 + and r10, r9, #0x00330000 + orr r11, r11, r10, lsr #14 + and r10, r9, #0x0000cc00 + orr r9, r11, r10, lsr #2 // permute r6 10 times --- + bx lr + +/******************************************************************************* +* applies P^12 on the tweakey state in a bitsliced manner +*******************************************************************************/ +.align 2 +p12: + str.w r14, [sp] //store r14 on the stack + movw r14, #0xcc33 //r14<- 0x0000cc33 + movw r12, #0x00cc + movt r12, #0x00cc //r12<- 0x00cc00cc + movw r1, #0x3300 + movt r1, #0xcc00 //r1 <- 0xcc003300 + and r10, r14, r6, ror #8 // --- permute r6 12 times + and r11, r12, r6, ror #30 + orr r11, r11, r10 + and r10, r1, r6, ror #16 + orr r11, r11, r10 + movw r10, #0xcccc //r10<- 0x0000cccc + and r10, r6, r10, ror #8 + orr r6, r11, r10, ror #10 // permute r6 12 times --- + and r10, r14, r7, ror #8 // --- permute r7 12 times + and r11, r12, r7, ror #30 + orr r11, r11, r10 + and r10, r1, r7, ror #16 + orr r11, r11, r10 + movw r10, #0xcccc //r10<- 0x0000cccc + and r10, r7, r10, ror #8 + orr r7, r11, r10, ror #10 // permute r7 12 times --- + and r10, r14, r8, ror #8 // --- permute r8 12 times + and r11, r12, r8, ror #30 + orr r11, r11, r10 + and r10, r1, r8, ror #16 + orr r11, r11, r10 + movw r10, #0xcccc //r10<- 0x0000cccc + and r10, r8, r10, ror #8 + orr r8, r11, r10, ror #10 // permute r8 12 times --- + and r10, r14, r9, ror #8 // --- permute r9 12 times + and r11, r12, r9, ror #30 + orr r11, r11, r10 + and r10, r1, r9, ror #16 + ldr.w r14, [sp] + orr r11, r11, r10 + movw r10, #0xcccc //r10<- 0x0000cccc + and r10, r9, r10, ror #8 + orr r9, r11, r10, ror #10 // permute r9 12 times --- + bx lr + +/******************************************************************************* +* applies P^14 on the tweakey state in a bitsliced manner +*******************************************************************************/ +.align 2 +p14: + movw r1, #0xcc00 + movt r1, #0x0033 //r1 <- 0x0033cc00 + movw r12, #0xcc00 + movt r12, #0xcc00 //r12<- 0x33003300 + and r10, r1, r6, ror #24 // --- permute r6 14 times + and r11, r6, #0x00000033 + orr r11, r10, r11, ror #14 + and r10, r6, #0x33000000 + orr r11, r11, r10, ror #30 + and r10, r6, #0x00ff0000 + orr r11, r11, r10, ror #16 + and r10, r6, r12 + orr r6, r11, r10, ror #18 // permute r6 14 times --- + and r10, r1, r7, ror #24 // --- permute r7 14 times + and r11, r7, #0x00000033 + orr r11, r10, r11, ror #14 + and r10, r7, #0x33000000 + orr r11, r11, r10, ror #30 + and r10, r7, #0x00ff0000 + orr r11, r11, r10, ror #16 + and r10, r7, r12 + orr r7, r11, r10, ror #18 // permute r7 14 times --- + and r10, r1, r8, ror #24 // --- permute r8 14 times + and r11, r8, #0x00000033 + orr r11, r10, r11, ror #14 + and r10, r8, #0x33000000 + orr r11, r11, r10, ror #30 + and r10, r8, #0x00ff0000 + orr r11, r11, r10, ror #16 + and r10, r8, r12 + orr r8, r11, r10, ror #18 // permute r8 14 times --- + and r10, r1, r9, ror #24 // --- permute r9 14 times + and r11, r9, #0x00000033 + orr r11, r10, r11, ror #14 + and r10, r9, #0x33000000 + orr r11, r11, r10, ror #30 + and r10, r9, #0x00ff0000 + orr r11, r11, r10, ror #16 + and r10, r9, r12 + orr r9, r11, r10, ror #18 // permute r9 14 times --- + bx lr + +.align 2 +packing: + eor r12, r2, r2, lsr #3 + and r12, r12, r10 + eor r2, r2, r12 + eor r2, r2, r12, lsl #3 //SWAPMOVE(r2, r2, 0x0a0a0a0a, 3) + eor r12, r3, r3, lsr #3 + and r12, r12, r10 + eor r3, r3, r12 + eor r3, r3, r12, lsl #3 //SWAPMOVE(r3, r3, 0x0a0a0a0a, 3) + eor r12, r4, r4, lsr #3 + and r12, r12, r10 + eor r4, r4, r12 + eor r4, r4, r12, lsl #3 //SWAPMOVE(r4, r4, 0x0a0a0a0a, 3) + eor r12, r5, r5, lsr #3 + and r12, r12, r10 + eor r5, r5, r12 + eor r5, r5, r12, lsl #3 //SWAPMOVE(r5, r5, 0x0a0a0a0a, 3) + eor r12, r2, r4, lsr #2 + and r12, r12, r11 + eor r2, r2, r12 + eor r4, r4, r12, lsl #2 //SWAPMOVE(r4, r2, 0x30303030, 2) + eor r12, r2, r3, lsr #4 + and r12, r12, r11, lsr #2 + eor r2, r2, r12 + eor r3, r3, r12, lsl #4 //SWAPMOVE(r3, r2, 0x0c0c0c0c, 4) + eor r12, r2, r5, lsr #6 + and r12, r12, r11, lsr #4 + eor r2, r2, r12 + eor r5, r5, r12, lsl #6 //SWAPMOVE(r5, r2, 0x03030303, 6) + eor r12, r4, r3, lsr #2 + and r12, r12, r11, lsr #2 + eor r4, r4, r12 + eor r3, r3, r12, lsl #2 //SWAPMOVE(r3, r4, 0x0c0c0c0c, 2) + eor r12, r4, r5, lsr #4 + and r12, r12, r11, lsr #4 + eor r4, r4, r12 + eor r5, r5, r12, lsl #4 //SWAPMOVE(r5, r4, 0x03030303, 4) + eor r12, r3, r5, lsr #2 + and r12, r12, r11, lsr #4 + eor r3, r3, r12 + eor r5, r5, r12, lsl #2 //SWAPMOVE(r5, r3, 0x03030303, 2) + bx lr + +/****************************************************************************** +* Compute LFSR2(TK2) ^ LFSR3(TK3) for all rounds. +* Performing both at the same time allows to save some memory accesses. +******************************************************************************/ +@ void tkschedule_lfsr(u32* tk, const u8* tk2, const u8* tk3, const int rounds) +.global tkschedule_lfsr +.type tkschedule_lfsr,%function +.align 2 +tkschedule_lfsr: + push {r0-r12, r14} + ldr.w r3, [r1, #8] //load tk2 (3rd word) + ldr.w r4, [r1, #4] //load tk2 (2nd word) + ldr.w r5, [r1, #12] //load tk2 (4th word) + ldr.w r12, [r1] //load tk2 (1st word) + mov r1, r2 //move tk3 address in r1 + mov r2, r12 //move 1st tk2 word in r2 + movw r10, #0x0a0a + movt r10, #0x0a0a //r10 <- 0x0a0a0a0a + movw r11, #0x3030 + movt r11, #0x3030 //r7 <- 0x30303030 + bl packing //pack tk2 + mov r6, r2 //move tk2 from r2-r5 to r6-r9 + mov r7, r3 //move tk2 from r2-r5 to r6-r9 + mov r8, r4 //move tk2 from r2-r5 to r6-r9 + mov r9, r5 //move tk2 from r2-r5 to r6-r9 + ldr.w r3, [r1, #8] //load tk3 (3rd word) + ldr.w r4, [r1, #4] //load tk3 (2nd word) + ldr.w r5, [r1, #12] //load tk3 (4th) word) + ldr.w r2, [r1] //load tk3 (1st) word) + bl packing //pack tk3 + eor r10, r10, r10, lsl #4 //r10<- 0xaaaaaaaa + ldr.w r1, [sp, #12] //load loop counter in r1 + eor r11, r2, r6 //tk2 ^ tk3 (1st word) + eor r12, r3, r7 //tk2 ^ tk3 (2nd word) + strd r11, r12, [r0], #8 //store in tk + eor r11, r4, r8 //tk2 ^ tk3 (3rd word) + eor r12, r5, r9 //tk2 ^ tk3 (4th word) + strd r11, r12, [r0], #8 //store in tk + loop: + and r12, r8, r10 // --- apply LFSR2 to tk2 + eor r12, r12, r6 + and r14, r10, r12, lsl #1 + and r12, r12, r10 + orr r6, r14, r12, lsr #1 // apply LFSR2 to tk2 --- + and r12, r3, r10 // --- apply LFSR3 to tk3 + eor r12, r5, r12, lsr #1 + and r14, r10, r12, lsl #1 + and r12, r12, r10 + orr r5, r14, r12, lsr #1 // apply LFSR3 to tk3 --- + eor r11, r5, r7 //tk2 ^ tk3 (1st word) + eor r12, r2, r8 //tk2 ^ tk3 (2nd word) + strd r11, r12, [r0], #8 //store in tk + eor r11, r3, r9 //tk2 ^ tk3 (3rd word) + eor r12, r4, r6 //tk2 ^ tk3 (4th word) + strd r11, r12, [r0], #24 //store in tk + and r12, r9, r10 // --- apply LFSR2 to tk2 + eor r12, r12, r7 + and r14, r10, r12, lsl #1 + and r12, r12, r10 + orr r7, r14, r12, lsr #1 // apply LFSR2 to tk2 --- + and r12, r2, r10 // --- apply LFSR3 to tk3 + eor r12, r4, r12, lsr #1 + and r14, r10, r12, lsl #1 + and r12, r12, r10 + orr r4, r14, r12, lsr #1 // apply LFSR3 to tk3 --- + eor r11, r4, r8 //tk2 ^ tk3 (1st word) + eor r12, r5, r9 //tk2 ^ tk3 (2nd word) + strd r11, r12, [r0], #8 //store in tk + eor r11, r2, r6 //tk2 ^ tk3 (3rd word) + eor r12, r3, r7 //tk2 ^ tk3 (4th word) + strd r11, r12, [r0], #24 //store in tk + and r12, r6, r10 // --- apply LFSR2 to tk2 + eor r12, r12, r8 + and r14, r10, r12, lsl #1 + and r12, r12, r10 + orr r8, r14, r12, lsr #1 // apply LFSR2 to tk2 --- + and r12, r5, r10 // --- apply LFSR3 to tk3 + eor r12, r3, r12, lsr #1 + and r14, r10, r12, lsl #1 + and r12, r12, r10 + orr r3, r14, r12, lsr #1 // apply LFSR3 to tk3 --- + eor r11, r3, r9 //tk2 ^ tk3 (1st word) + eor r12, r4, r6 //tk2 ^ tk3 (2nd word) + strd r11, r12, [r0], #8 //store in tk + eor r11, r5, r7 //tk2 ^ tk3 (3rd word) + eor r12, r2, r8 //tk2 ^ tk3 (4th word) + strd r11, r12, [r0], #24 //store in tk + and r12, r7, r10 // --- apply LFSR2 to tk2 + eor r12, r12, r9 + and r14, r10, r12, lsl #1 + and r12, r12, r10 + orr r9, r14, r12, lsr #1 // apply LFSR2 to tk2 --- + and r12, r4, r10 // --- apply LFSR3 to tk3 + eor r12, r2, r12, lsr #1 + and r14, r10, r12, lsl #1 + and r12, r12, r10 + orr r2, r14, r12, lsr #1 // apply LFSR3 to tk3 --- + eor r11, r2, r6 //tk2 ^ tk3 (1st word) + eor r12, r3, r7 //tk2 ^ tk3 (2nd word) + strd r11, r12, [r0], #8 //store in tk + eor r11, r4, r8 //tk2 ^ tk3 (3rd word) + eor r12, r5, r9 //tk2 ^ tk3 (4th word) + strd r11, r12, [r0], #24 //store in tk + subs.w r1, r1, #8 //decrease loop counter by 8 + bne loop + pop {r0-r12, r14} + bx lr + +@ void tkschedule_perm(u32* tk) +.global tkschedule_perm +.type tkschedule_perm,%function +.align 2 +tkschedule_perm: + push {r0-r12, lr} + sub.w sp, #4 //to store r14 in subroutines + ldm r0, {r6-r9} //load tk + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r6, r6, r10 //tk &= 0xf0f0f0f0 (1st word) + and r7, r7, r10 //tk &= 0xf0f0f0f0 (2nd word) + and r8, r8, r10 //tk &= 0xf0f0f0f0 (3rd word) + and r9, r9, r10 //tk &= 0xf0f0f0f0 (4th word) + eor r8, r8, #0x00000004 //add rconst + eor r9, r9, #0x00000040 //add rconst + mvn r9, r9 //to remove a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 1st round + strd r6, r7, [r0], #8 //store 2nd half tk for 1st round + ldm r0, {r6-r9} //load tk + bl p2 //apply the permutation twice + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #26 //ror and mask to match fixslicing + and r12, r10, r7, ror #26 //ror and mask to match fixslicing + strd r11, r12, [r0], #8 //store 1st half tk for 2nd round + and r11, r10, r8, ror #26 //ror and mask to match fixslicing + and r12, r10, r9, ror #26 //ror and mask to match fixslicing + eor r11, r11, #0x10000000 //add rconst + eor r11, r11, #0x00000100 //add rconst + eor r12, r12, #0x00000100 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 2nd round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #28 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #12 + and r11, r10, r7, ror #28 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #12 + and r11, r10, r8, ror #28 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #12 + and r11, r10, r9, ror #28 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #12 //ror and masks to match fixslicing --- + eor r7, r7, #0x04000000 //add rconst + eor r8, r8, #0x44000000 //add rconst + eor r9, r9, #0x04000000 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 3rd round + strd r6, r7, [r0], #8 //store 2nd half tk for 3rd round + ldm r0, {r6-r9} //load tk + bl p4 //apply the permutation 4 times + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6, ror #16 //ror and mask to match fixslicing + and r12, r10, r7, ror #16 //ror and mask to match fixslicing + eor r11, r11, #0x00400000 //add rconst + eor r12, r12, #0x00400000 //add rconst + strd r11, r12, [r0, #24] //store 2nd half tk for 5th round + and r11, r10, r8, ror #16 //ror and mask to match fixslicing + and r12, r10, r9, ror #16 //ror and mask to match fixslicing + eor r11, r11, #0x00440000 //add rconst + eor r12, r12, #0x00500000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 5th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #14 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #6 + and r11, r10, r7, ror #14 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #6 + and r11, r10, r8, ror #14 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #6 + and r11, r10, r9, ror #14 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #6 //ror and masks to match fixslicing --- + eor r6, r6, #0x00100000 //add rconst + eor r7, r7, #0x00100000 //add rconst + eor r8, r8, #0x00100000 //add rconst + eor r8, r8, #0x00000001 //add rconst + eor r9, r9, #0x00100000 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 4th round + strd r8, r9, [r0], #24 //store 2nd half tk for 4th round + ldm r0, {r6-r9} //load tk + bl p6 //apply the permutation 6 times + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #10 //ror and mask to match fixslicing + and r12, r10, r7, ror #10 //ror and mask to match fixslicing + eor r11, r11, #0x01000000 //add rconst + eor r12, r12, #0x01000000 //add rconst + strd r11, r12, [r0], #8 //store 1st half tk for 6th round + and r11, r10, r8, ror #10 //ror and mask to match fixslicing + and r12, r10, r9, ror #10 //ror and mask to match fixslicing + eor r11, r11, #0x01400000 //add rconst + eor r11, r11, #0x00001000 //add rconst + eor r12, r12, #0x00400000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 6th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #12 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #28 + and r11, r10, r7, ror #12 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #28 + and r11, r10, r8, ror #12 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #28 + and r11, r10, r9, ror #12 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #28 //ror and masks to match fixslicing --- + eor r6, r6, #0x00000400 //add rconst + eor r7, r7, #0x00000400 //add rconst + eor r8, r8, #0x01000000 //add rconst + eor r8, r8, #0x00004000 //add rconst + eor r9, r9, #0x01000000 //add rconst + eor r9, r9, #0x00000400 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 7th round + strd r6, r7, [r0], #8 //store 2nd half tk for 7th round + ldm r0, {r6-r9} //load tk + bl p8 //apply the permutation 8 times + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6 //ror and mask to match fixslicing + and r12, r10, r7 //ror and mask to match fixslicing + eor r12, r12, #0x00000040 //add rconst + strd r11, r12, [r0, #24] //store 2nd half tk for 9th round + and r11, r10, r8 //ror and mask to match fixslicing + and r12, r10, r9 //ror and mask to match fixslicing + eor r11, r11, #0x00000054 //add rconst + eor r12, r12, #0x00000050 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 9th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #30 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #22 + and r11, r10, r7, ror #30 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #22 + and r11, r10, r8, ror #30 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #22 + and r11, r10, r9, ror #30 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #22 //ror and masks to match fixslicing --- + eor r6 ,r6, #0x00000010 + eor r8, r8, #0x00010000 + eor r8, r8, #0x00000410 + eor r9, r9, #0x00000410 + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 8th round + strd r8, r9, [r0], #24 //store 2nd half tk for 8th round + ldm r0, {r6-r9} //load tk + bl p10 //apply the permutation 10 times + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #26 //ror and mask to match fixslicing + and r12, r10, r7, ror #26 //ror and mask to match fixslicing + eor r11, r11, #0x00000100 //add rconst + eor r12, r12, #0x00000100 //add rconst + strd r11, r12, [r0], #8 //store 1st half tk for 10th round + and r11, r10, r8, ror #26 //ror and mask to match fixslicing + and r12, r10, r9, ror #26 //ror and mask to match fixslicing + eor r11, r11, #0x10000000 //add rconst + eor r11, r11, #0x00000140 //add rconst + eor r12, r12, #0x00000100 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 10th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #28 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #12 + and r11, r10, r7, ror #28 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #12 + and r11, r10, r8, ror #28 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #12 + and r11, r10, r9, ror #28 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #12 //ror and masks to match fixslicing --- + eor r6, r6, #0x04000000 //add rconst + eor r7, r7, #0x04000000 //add rconst + eor r8, r8, #0x44000000 //add rconst + eor r9, r9, #0x00000100 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 11th round + strd r6, r7, [r0], #8 //store 2nd half tk for 11th round + ldm r0, {r6-r9} //load tk + bl p12 //apply the permutation 4 times + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6, ror #16 //ror and mask to match fixslicing + and r12, r10, r7, ror #16 //ror and mask to match fixslicing + eor r11, r11, #0x00400000 //add rconst + strd r11, r12, [r0, #24] //store 2nd half tk for 13th round + and r11, r10, r8, ror #16 //ror and mask to match fixslicing + and r12, r10, r9, ror #16 //ror and mask to match fixslicing + eor r11, r11, #0x00140000 //add rconst + eor r12, r12, #0x00500000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 13th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #14 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #6 + and r11, r10, r7, ror #14 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #6 + and r11, r10, r8, ror #14 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #6 + and r11, r10, r9, ror #14 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #6 //ror and masks to match fixslicing --- + eor r6, r6, #0x00100000 //add rconst + eor r7, r7, #0x00100000 //add rconst + eor r8, r8, #0x04000000 //add rconst + eor r8, r8, #0x00000001 //add rconst + eor r9, r9, #0x04000000 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 12th round + strd r8, r9, [r0], #24 //store 2nd half tk for 12th round + ldm r0, {r6-r9} //load tk + bl p14 //apply the permutation 6 times + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #10 //ror and mask to match fixslicing + and r12, r10, r7, ror #10 //ror and mask to match fixslicing + strd r11, r12, [r0], #8 //store 1st half tk for 14th round + and r11, r10, r8, ror #10 //ror and mask to match fixslicing + and r12, r10, r9, ror #10 //ror and mask to match fixslicing + eor r11, r11, #0x01400000 //add rconst + eor r11, r11, #0x00001000 //add rconst + eor r12, r12, #0x01400000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 14th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #12 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #28 + and r11, r10, r7, ror #12 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #28 + and r11, r10, r8, ror #12 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #28 + and r11, r10, r9, ror #12 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #28 //ror and masks to match fixslicing --- + eor r7, r7, #0x00000400 //add rconst + eor r8, r8, #0x01000000 //add rconst + eor r8, r8, #0x00004400 //add rconst + eor r9, r9, #0x00000400 //add const + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 15th round + strd r6, r7, [r0], #8 //store 2nd half tk for 15th round + ldm r0, {r6-r9} //load tk + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6 //ror and mask to match fixslicing + and r12, r10, r7 //ror and mask to match fixslicing + eor r11, r11, #0x00000040 //add rconst + eor r12, r12, #0x00000040 //add rconst + strd r11, r12, [r0, #24] //store 2nd half tk for 17th round + and r11, r10, r8 //ror and mask to match fixslicing + and r12, r10, r9 //ror and mask to match fixslicing + eor r11, r11, #0x00000004 //add rconst + eor r12, r12, #0x00000050 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 17th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #30 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #22 + and r11, r10, r7, ror #30 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #22 + and r11, r10, r8, ror #30 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #22 + and r11, r10, r9, ror #30 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #22 //ror and masks to match fixslicing --- + eor r6 ,r6, #0x00000010 + eor r7 ,r7, #0x00000010 + eor r8, r8, #0x00000010 + eor r8, r8, #0x00010000 + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 16th round + strd r8, r9, [r0], #24 //store 2nd half tk for 16th round + ldm r0, {r6-r9} //load tk + bl p2 //apply the permutation twice + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #26 //ror and mask to match fixslicing + and r12, r10, r7, ror #26 //ror and mask to match fixslicing + eor r11, r11, #0x00000100 //add rconst + strd r11, r12, [r0], #8 //store 1st half tk for 18th round + and r11, r10, r8, ror #26 //ror and mask to match fixslicing + and r12, r10, r9, ror #26 //ror and mask to match fixslicing + eor r11, r11, #0x10000000 //add rconst + eor r11, r11, #0x00000140 //add rconst + eor r12, r12, #0x00000040 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 18th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #28 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #12 + and r11, r10, r7, ror #28 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #12 + and r11, r10, r8, ror #28 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #12 + and r11, r10, r9, ror #28 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #12 //ror and masks to match fixslicing --- + eor r7, r7, #0x04000000 //add rconst + eor r8, r8, #0x40000000 //add rconst + eor r8, r8, #0x00000100 //add rconst + eor r9, r9, #0x04000000 //add rconst + eor r9, r9, #0x00000100 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 19th round + strd r6, r7, [r0], #8 //store 2nd half tk for 19th round + ldm r0, {r6-r9} //load tk + bl p4 //apply the permutation 4 times + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6, ror #16 //ror and mask to match fixslicing + and r12, r10, r7, ror #16 //ror and mask to match fixslicing + eor r12, r12, #0x00400000 //add rconst + strd r11, r12, [r0, #24] //store 2nd half tk for 21th round + and r11, r10, r8, ror #16 //ror and mask to match fixslicing + and r12, r10, r9, ror #16 //ror and mask to match fixslicing + eor r11, r11, #0x00440000 //add rconst + eor r12, r12, #0x00100000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 21th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #14 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #6 + and r11, r10, r7, ror #14 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #6 + and r11, r10, r8, ror #14 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #6 + and r11, r10, r9, ror #14 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #6 //ror and masks to match fixslicing --- + eor r6, r6, #0x00100000 //add rconst + eor r8, r8, #0x04100000 //add rconst + eor r8, r8, #0x00000001 //add rconst + eor r9, r9, #0x00100000 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 20th round + strd r8, r9, [r0], #24 //store 2nd half tk for 20th round + ldm r0, {r6-r9} //load tk + bl p6 //apply the permutation 6 times + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #10 //ror and mask to match fixslicing + and r12, r10, r7, ror #10 //ror and mask to match fixslicing + eor r11, r11, #0x01000000 //add rconst + eor r12, r12, #0x01000000 //add rconst + strd r11, r12, [r0], #8 //store 1st half tk for 22th round + and r11, r10, r8, ror #10 //ror and mask to match fixslicing + and r12, r10, r9, ror #10 //ror and mask to match fixslicing + eor r11, r11, #0x00400000 //add rconst + eor r11, r11, #0x00001000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 22th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #12 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #28 + and r11, r10, r7, ror #12 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #28 + and r11, r10, r8, ror #12 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #28 + and r11, r10, r9, ror #12 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #28 //ror and masks to match fixslicing --- + eor r6, r6, #0x00000400 //add rconst + eor r8, r8, #0x00004000 //add rconst + eor r9, r9, #0x01000000 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 23th round + strd r6, r7, [r0], #8 //store 2nd half tk for 23th round + ldm r0, {r6-r9} //load tk + bl p8 //apply the permutation 8 times + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6 //ror and mask to match fixslicing + and r12, r10, r7 //ror and mask to match fixslicing + strd r11, r12, [r0, #24] //store 2nd half tk for 25th round + and r11, r10, r8 //ror and mask to match fixslicing + and r12, r10, r9 //ror and mask to match fixslicing + eor r11, r11, #0x00000014 //add rconst + eor r12, r12, #0x00000040 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 25th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #30 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #22 + and r11, r10, r7, ror #30 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #22 + and r11, r10, r8, ror #30 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #22 + and r11, r10, r9, ror #30 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #22 //ror and masks to match fixslicing --- + eor r8, r8, #0x00010400 + eor r9, r9, #0x00000400 + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 24th round + strd r8, r9, [r0], #24 //store 2nd half tk for 24th round + ldm r0, {r6-r9} //load tk + bl p10 //apply the permutation 10 times + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #26 //ror and mask to match fixslicing + and r12, r10, r7, ror #26 //ror and mask to match fixslicing + strd r11, r12, [r0], #8 //store 1st half tk for 26th round + and r11, r10, r8, ror #26 //ror and mask to match fixslicing + and r12, r10, r9, ror #26 //ror and mask to match fixslicing + eor r11, r11, #0x10000000 //add rconst + eor r11, r11, #0x00000100 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 26th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #28 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #12 + and r11, r10, r7, ror #28 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #12 + and r11, r10, r8, ror #28 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #12 + and r11, r10, r9, ror #28 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #12 //ror and masks to match fixslicing --- + eor r7, r7, #0x04000000 //add rconst + eor r8, r8, #0x40000000 //add rconst + eor r9, r9, #0x04000000 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 27th round + strd r6, r7, [r0], #8 //store 2nd half tk for 27th round + ldm r0, {r6-r9} //load tk + bl p12 //apply the permutation 4 times + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6, ror #16 //ror and mask to match fixslicing + and r12, r10, r7, ror #16 //ror and mask to match fixslicing + eor r12, r12, #0x00400000 //add rconst + strd r11, r12, [r0, #24] //store 2nd half tk for 29th round + and r11, r10, r8, ror #16 //ror and mask to match fixslicing + and r12, r10, r9, ror #16 //ror and mask to match fixslicing + eor r11, r11, #0x00440000 //add rconst + eor r12, r12, #0x00500000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 29th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #14 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #6 + and r11, r10, r7, ror #14 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #6 + and r11, r10, r8, ror #14 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #6 + and r11, r10, r9, ror #14 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #6 //ror and masks to match fixslicing --- + eor r6, r6, #0x00100000 //add rconst + eor r8, r8, #0x00100000 //add rconst + eor r8, r8, #0x00000001 //add rconst + eor r9, r9, #0x00100000 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 28th round + strd r8, r9, [r0], #24 //store 2nd half tk for 28th round + ldm r0, {r6-r9} //load tk + bl p14 //apply the permutation 6 times + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #10 //ror and mask to match fixslicing + and r12, r10, r7, ror #10 //ror and mask to match fixslicing + eor r11, r11, #0x01000000 //add rconst + eor r12, r12, #0x01000000 //add rconst + strd r11, r12, [r0], #8 //store 1st half tk for 30th round + and r11, r10, r8, ror #10 //ror and mask to match fixslicing + and r12, r10, r9, ror #10 //ror and mask to match fixslicing + eor r11, r11, #0x01400000 //add rconst + eor r11, r11, #0x00001000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 30th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #12 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #28 + and r11, r10, r7, ror #12 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #28 + and r11, r10, r8, ror #12 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #28 + and r11, r10, r9, ror #12 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #28 //ror and masks to match fixslicing --- + eor r6, r6, #0x00000400 //add rconst + eor r7, r7, #0x00000400 //add rconst + eor r8, r8, #0x00004000 //add rconst + eor r9, r9, #0x01000000 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 31th round + strd r6, r7, [r0], #8 //store 2nd half tk for 31th round + ldm r0, {r6-r9} //load tk + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6 //ror and mask to match fixslicing + and r12, r10, r7 //ror and mask to match fixslicing + strd r11, r12, [r0, #24] //store 2nd half tk for 33th round + and r11, r10, r8 //ror and mask to match fixslicing + and r12, r10, r9 //ror and mask to match fixslicing + eor r11, r11, #0x00000014 //add rconst + eor r12, r12, #0x00000050 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 33th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #30 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #22 + and r11, r10, r7, ror #30 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #22 + and r11, r10, r8, ror #30 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #22 + and r11, r10, r9, ror #30 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #22 //ror and masks to match fixslicing --- + eor r6 ,r6, #0x00000010 + eor r8, r8, #0x00010400 + eor r9, r9, #0x00000400 + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 32th round + strd r8, r9, [r0], #24 //store 2nd half tk for 32th round + ldm r0, {r6-r9} //load tk + bl p2 //apply the permutation twice + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #26 //ror and mask to match fixslicing + and r12, r10, r7, ror #26 //ror and mask to match fixslicing + strd r11, r12, [r0], #8 //store 1st half tk for 34th round + and r11, r10, r8, ror #26 //ror and mask to match fixslicing + and r12, r10, r9, ror #26 //ror and mask to match fixslicing + eor r11, r11, #0x10000000 //add rconst + eor r11, r11, #0x00000140 //add rconst + eor r12, r12, #0x00000100 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 34th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #28 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #12 + and r11, r10, r7, ror #28 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #12 + and r11, r10, r8, ror #28 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #12 + and r11, r10, r9, ror #28 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #12 //ror and masks to match fixslicing --- + eor r7, r7, #0x04000000 //add rconst + eor r8, r8, #0x44000000 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 35th round + strd r6, r7, [r0], #8 //store 2nd half tk for 35th round + ldm r0, {r6-r9} //load tk + bl p4 //apply the permutation 4 times + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6, ror #16 //ror and mask to match fixslicing + and r12, r10, r7, ror #16 //ror and mask to match fixslicing + eor r11, r11, #0x00400000 //add rconst + strd r11, r12, [r0, #24] //store 2nd half tk for 37th round + and r11, r10, r8, ror #16 //ror and mask to match fixslicing + and r12, r10, r9, ror #16 //ror and mask to match fixslicing + eor r11, r11, #0x00440000 //add rconst + eor r12, r12, #0x00500000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 37th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #14 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #6 + and r11, r10, r7, ror #14 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #6 + and r11, r10, r8, ror #14 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #6 + and r11, r10, r9, ror #14 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #6 //ror and masks to match fixslicing --- + eor r6, r6, #0x00100000 //add rconst + eor r7, r7, #0x00100000 //add rconst + eor r8, r8, #0x00000001 //add rconst + eor r9, r9, #0x00100000 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 36th round + strd r8, r9, [r0], #24 //store 2nd half tk for 36th round + ldm r0, {r6-r9} //load tk + bl p6 //apply the permutation 6 times + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #10 //ror and mask to match fixslicing + and r12, r10, r7, ror #10 //ror and mask to match fixslicing + eor r12, r12, #0x01000000 //add rconst + strd r11, r12, [r0], #8 //store 1st half tk for 38th round + and r11, r10, r8, ror #10 //ror and mask to match fixslicing + and r12, r10, r9, ror #10 //ror and mask to match fixslicing + eor r11, r11, #0x01400000 //add rconst + eor r11, r11, #0x00001000 //add rconst + eor r12, r12, #0x00400000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 38th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #12 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #28 + and r11, r10, r7, ror #12 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #28 + and r11, r10, r8, ror #12 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #28 + and r11, r10, r9, ror #12 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #28 //ror and masks to match fixslicing --- + eor r6, r6, #0x00000400 //add rconst + eor r7, r7, #0x00000400 //add rconst + eor r8, r8, #0x01000000 + eor r8, r8, #0x00004000 //add rconst + eor r9, r9, #0x00000400 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 39th round + strd r6, r7, [r0], #8 //store 2nd half tk for 39th round + ldm r0, {r6-r9} //load tk + bl p8 //apply the permutation 8 times + movw r10, #0x3030 + movt r10, #0x3030 //r10<- 0x30303030 + and r11, r10, r6, ror #30 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #22 + and r11, r10, r7, ror #30 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #22 + and r11, r10, r8, ror #30 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #22 + and r11, r10, r9, ror #30 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #22 //ror and masks to match fixslicing --- + eor r6, r6, #0x00000010 + eor r8, r8, #0x00010000 + eor r8, r8, #0x00000010 + eor r9, r9, #0x00000400 + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 40th round + strd r8, r9, [r0] //store 2nd half tk for 40th round + add.w sp, #4 + pop {r0-r12, lr} + bx lr + +/****************************************************************************** +* Applies the permutations P^2, ..., P^14 for rounds 0 to 16. Since P^16=Id, we +* don't need more calculations as no LFSR is applied to TK1. +******************************************************************************/ +@ void tkschedule_perm_tk1(u32* tk, const u8* key) +.global tkschedule_perm_tk1 +.type tkschedule_perm_tk1,%function +.align 2 +tkschedule_perm_tk1: + push {r0-r12, lr} + ldr.w r3, [r1, #8] //load tk1 (3rd word) + ldr.w r4, [r1, #4] //load tk1 (2nd word) + ldr.w r5, [r1, #12] //load tk1 (4th word) + ldr.w r2, [r1] //load tk1 (1st word) + movw r10, #0x0a0a + movt r10, #0x0a0a //r6 <- 0x0a0a0a0a + movw r11, #0x3030 + movt r11, #0x3030 //r7 <- 0x30303030 + bl packing //pack tk1 + mov r6, r2 //move tk1 from r2-r5 to r6-r9 + mov r7, r3 //move tk1 from r2-r5 to r6-r9 + mov r8, r4 //move tk1 from r2-r5 to r6-r9 + mov r9, r5 //move tk1 from r2-r5 to r6-r9 + movw r2, #0xf0f0 + movt r2, #0xf0f0 //r2<- 0xf0f0f0f0 + and r11, r8, r2 //tk &= 0xf0f0f0f0 (3rd word) + and r12, r9, r2 //tk &= 0xf0f0f0f0 (4th word) + strd r11, r12, [r0], #8 //store 1st half tk for 1st round + and r11, r6, r2 //tk &= 0xf0f0f0f0 (1st word) + and r12, r7, r2 //tk &= 0xf0f0f0f0 (2nd word) + strd r11, r12, [r0], #8 //store 2nd half tk for 1st round + + bl p2 //apply the permutation twice + movw r3, #0x0303 + movt r3, #0x0303 //r3<- 0x03030303 + and r11, r3, r6, ror #28 //--- ror and masks to match fixslicing + and r12, r6, r3, lsl #6 + orr r12, r11, r12, ror #12 + str.w r12, [r0, #8] + and r11, r3, r7, ror #28 + and r12, r7, r3, lsl #6 + orr r12, r11, r12, ror #12 + str.w r12, [r0, #12] + and r11, r3, r9, ror #28 + and r12, r9, r3, lsl #6 + orr r12, r11, r12, ror #12 + str.w r12, [r0, #4] + and r11, r3, r8, ror #28 + and r12, r8, r3, lsl #6 + orr r12, r11, r12, ror #12 + str.w r12, [r0], #16 //ror and masks to match fixslicing --- + bl p2 //apply the permutation 4 times + and r11, r2, r6, ror #16 //ror and mask to match fixslicing + and r12, r2, r7, ror #16 //ror and mask to match fixslicing + strd r11, r12, [r0, #8] //store 2nd half tk for 5th round + and r11, r2, r8, ror #16 //ror and mask to match fixslicing + and r12, r2, r9, ror #16 //ror and mask to match fixslicing + strd r11, r12, [r0], #16 //store 1st half tk for 5th round + bl p2 //apply the permutation 6 times + and r11, r3, r6, ror #12 //--- ror and masks to match fixslicing + and r12, r6, r3, lsl #6 + orr r12, r11, r12, ror #28 + str.w r12, [r0, #8] + and r11, r3, r7, ror #12 + and r12, r7, r3, lsl #6 + orr r12, r11, r12, ror #28 + str.w r12, [r0, #12] + and r11, r3, r9, ror #12 + and r12, r9, r3, lsl #6 + orr r12, r11, r12, ror #28 + str.w r12, [r0, #4] + and r11, r3, r8, ror #12 + and r12, r8, r3, lsl #6 + orr r12, r11, r12, ror #28 + str.w r12, [r0], #16 //ror and masks to match fixslicing --- + bl p2 //apply the permutation 8 times + and r11, r2, r6 //ror and mask to match fixslicing + and r12, r2, r7 //ror and mask to match fixslicing + strd r11, r12, [r0, #8] //store 2nd half tk for 9th round + and r11, r2, r8 //ror and mask to match fixslicing + and r12, r2, r9 //ror and mask to match fixslicing + strd r11, r12, [r0], #16 //store 1st half tk for 9th round + bl p2 //apply the permutation 10 + and r11, r3, r6, ror #28 //--- ror and masks to match fixslicing + and r12, r6, r3, lsl #6 + orr r12, r11, r12, ror #12 + str.w r12, [r0, #8] + and r11, r3, r7, ror #28 + and r12, r7, r3, lsl #6 + orr r12, r11, r12, ror #12 + str.w r12, [r0, #12] + and r11, r3, r9, ror #28 + and r12, r9, r3, lsl #6 + orr r12, r11, r12, ror #12 + str.w r12, [r0, #4] + and r11, r3, r8, ror #28 + and r12, r8, r3, lsl #6 + orr r12, r11, r12, ror #12 + str.w r12, [r0], #16 //ror and masks to match fixslicing --- + bl p2 //apply the permutation 12 times + and r11, r2, r6, ror #16 //ror and mask to match fixslicing + and r12, r2, r7, ror #16 //ror and mask to match fixslicing + strd r11, r12, [r0, #8] //store 2nd half tk for 5th round + and r11, r2, r8, ror #16 //ror and mask to match fixslicing + and r12, r2, r9, ror #16 //ror and mask to match fixslicing + strd r11, r12, [r0], #16 //store 1st half tk for 5th round + bl p2 //apply the permutation 14 times + and r11, r3, r6, ror #12 //--- ror and masks to match fixslicing + and r12, r6, r3, lsl #6 + orr r12, r11, r12, ror #28 + str.w r12, [r0, #8] + and r11, r3, r7, ror #12 + and r12, r7, r3, lsl #6 + orr r12, r11, r12, ror #28 + str.w r12, [r0, #12] + and r11, r3, r9, ror #12 + and r12, r9, r3, lsl #6 + orr r12, r11, r12, ror #28 + str.w r12, [r0, #4] + and r11, r3, r8, ror #12 + and r12, r8, r3, lsl #6 + orr r12, r11, r12, ror #28 + str.w r12, [r0] //ror and masks to match fixslicing --- + pop {r0-r12, lr} + bx lr + +.align 2 +quadruple_round: + orr r8, r2, r3 + eor r5, r5, r8 + mvn r5, r5 + eor r8, r3, r4, lsr #1 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8, lsl #1 //SWAPMOVE(r4, r3, 0x55555555, 1); + eor r8, r4, r5, lsr #1 + and r8, r8, r6 + eor r4, r4, r8 + eor r5, r5, r8, lsl #1 //SWAPMOVE(r5, r4, 0x55555555, 1); + orr r8, r4, r5 + eor r3, r3, r8 + mvn r3, r3 + eor r8, r2, r3, lsr #1 + and r8, r8, r6 + eor r2, r2, r8 + eor r3, r3, r8, lsl #1 //SWAPMOVE(r3, r2, 0x55555555, 1); + eor r8, r5, r2, lsr #1 + and r8, r8, r6 + eor r5, r5, r8 + eor r2, r2, r8, lsl #1 //SWAPMOVE(r2, r5, 0x55555555, 1); + orr r8, r2, r3 + eor r5, r5, r8 + mvn r5, r5 + eor r8, r3, r4, lsr #1 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8, lsl #1 //SWAPMOVE(r4, r3, 0x55555555, 1); + eor r8, r4, r5, lsr #1 + and r8, r8, r6 + eor r4, r4, r8 + eor r5, r5, r8, lsl #1 //SWAPMOVE(r5, r4, 0x55555555, 1); + orr r8, r4, r5 + eor r3, r3, r8 + eor r8, r2, r5 + and r8, r8, r6 + eor r2, r2, r8 + eor r5, r5, r8 //SWAPMOVE(r5, r2, 0x55555555, 0); + ldmia.w r1!, {r8-r11} //load rkeys in r8,...,r11 + eor r2, r2, r8 //add rtk_2_3 + rconst + eor r3, r3, r9 //add rtk_2_3 + rconst + eor r4, r4, r10 //add rtk_2_3 + rconst + eor r5, r5, r11 //add rtk_2_3 + rconst + ldmia.w r0!,{r8-r11} + eor r2, r2, r8 //add rtk_1 + eor r3, r3, r9 //add rtk_1 + eor r4, r4, r10 //add rtk_1 + eor r5, r5, r11 //add rtk_1 + and r8, r7, r2, ror #30 // --- mixcolumns 0 --- + eor r2, r2, r8, ror #24 + and r8, r7, r2, ror #18 + eor r2, r2, r8, ror #2 + and r8, r7, r2, ror #6 + eor r2, r2, r8, ror #4 + and r8, r7, r3, ror #30 + eor r3, r3, r8, ror #24 + and r8, r7, r3, ror #18 + eor r3, r3, r8, ror #2 + and r8, r7, r3, ror #6 + eor r3, r3, r8, ror #4 + and r8, r7, r4, ror #30 + eor r4, r4, r8, ror #24 + and r8, r7, r4, ror #18 + eor r4, r4, r8, ror #2 + and r8, r7, r4, ror #6 + eor r4, r4, r8, ror #4 + and r8, r7, r5, ror #30 + eor r5, r5, r8, ror #24 + and r8, r7, r5, ror #18 + eor r5, r5, r8, ror #2 + and r8, r7, r5, ror #6 + eor r5, r5, r8, ror #4 + orr r8, r4, r5 + eor r3, r3, r8 + mvn r3, r3 + eor r8, r2, r3, lsr #1 + and r8, r8, r6 + eor r2, r2, r8 + eor r3, r3, r8, lsl #1 //SWAPMOVE(r3, r2, 0x55555555, 1); + eor r8, r5, r2, lsr #1 + and r8, r8, r6 + eor r5, r5, r8 + eor r2, r2, r8, lsl #1 //SWAPMOVE(r2, r5, 0x55555555, 1); + orr r8, r2, r3 + eor r5, r5, r8 + mvn r5, r5 + eor r8, r3, r4, lsr #1 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8, lsl #1 //SWAPMOVE(r4, r3, 0x55555555, 1); + eor r8, r4, r5, lsr #1 + and r8, r8, r6 + eor r4, r4, r8 + eor r5, r5, r8, lsl #1 //SWAPMOVE(r5, r4, 0x55555555, 1); + orr r8, r4, r5 + eor r3, r3, r8 + mvn r3, r3 + eor r8, r2, r3, lsr #1 + and r8, r8, r6 + eor r2, r2, r8 + eor r3, r3, r8, lsl #1 //SWAPMOVE(r3, r2, 0x55555555, 1); + eor r8, r5, r2, lsr #1 + and r8, r8, r6 + eor r5, r5, r8 + eor r2, r2, r8, lsl #1 //SWAPMOVE(r2, r5, 0x55555555, 1); + orr r8, r2, r3 + eor r5, r5, r8 + eor r8, r3, r4 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8 //SWAPMOVE(r4, r3, 0x55555555, 0); + ldmia.w r1!, {r8-r11} //load rkeys in r8,...,r11 + eor r2, r2, r8 //add rkey + rconst + eor r3, r3, r9 //add rkey + rconst + eor r4, r4, r10 //add rkey + rconst + eor r5, r5, r11 //add rkey + rconst + and r8, r7, r2, ror #16 // --- mixcolumns 1 --- + eor r2, r2, r8, ror #30 + and r8, r7, r2, ror #28 + eor r2, r2, r8 + and r8, r7, r2, ror #16 + eor r2, r2, r8, ror #2 + and r8, r7, r3, ror #16 + eor r3, r3, r8, ror #30 + and r8, r7, r3, ror #28 + eor r3, r3, r8 + and r8, r7, r3, ror #16 + eor r3, r3, r8, ror #2 + and r8, r7, r4, ror #16 + eor r4, r4, r8, ror #30 + and r8, r7, r4, ror #28 + eor r4, r4, r8 + and r8, r7, r4, ror #16 + eor r4, r4, r8, ror #2 + and r8, r7, r5, ror #16 + eor r5, r5, r8, ror #30 + and r8, r7, r5, ror #28 + eor r5, r5, r8 + and r8, r7, r5, ror #16 + eor r5, r5, r8, ror #2 + orr r8, r2, r3 + eor r5, r5, r8 + mvn r5, r5 + eor r8, r3, r4, lsr #1 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8, lsl #1 //SWAPMOVE(r4, r3, 0x55555555, 1); + eor r8, r4, r5, lsr #1 + and r8, r8, r6 + eor r4, r4, r8 + eor r5, r5, r8, lsl #1 //SWAPMOVE(r5, r4, 0x55555555, 1); + orr r8, r4, r5 + eor r3, r3, r8 + mvn r3, r3 + eor r8, r2, r3, lsr #1 + and r8, r8, r6 + eor r2, r2, r8 + eor r3, r3, r8, lsl #1 //SWAPMOVE(r3, r2, 0x55555555, 1); + eor r8, r5, r2, lsr #1 + and r8, r8, r6 + eor r5, r5, r8 + eor r2, r2, r8, lsl #1 //SWAPMOVE(r2, r5, 0x55555555, 1); + orr r8, r2, r3 + eor r5, r5, r8 + mvn r5, r5 + eor r8, r3, r4, lsr #1 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8, lsl #1 //SWAPMOVE(r4, r3, 0x55555555, 1); + eor r8, r4, r5, lsr #1 + and r8, r8, r6 + eor r4, r4, r8 + eor r5, r5, r8, lsl #1 //SWAPMOVE(r5, r4, 0x55555555, 1); + orr r8, r4, r5 + eor r3, r3, r8 + eor r8, r2, r5 + and r8, r8, r6 + eor r2, r2, r8 + eor r5, r5, r8 //SWAPMOVE(r5, r2, 0x55555555, 0); + ldmia.w r1!, {r8-r11} //load rkeys in r8,...,r11 + eor r2, r2, r8 //add rtk_2_3 + rconst + eor r3, r3, r9 //add rtk_2_3 + rconst + eor r4, r4, r10 //add rtk_2_3 + rconst + eor r5, r5, r11 //add rtk_2_3 + rconst + ldmia.w r0!,{r8-r11} + eor r2, r2, r8 //add rtk_1 + eor r3, r3, r9 //add rtk_1 + eor r4, r4, r10 //add rtk_1 + eor r5, r5, r11 //add rtk_1 + and r8, r7, r2, ror #10 // --- mixcolumns 2 --- + eor r2, r2, r8, ror #4 + and r8, r7, r2, ror #6 + eor r2, r2, r8, ror #6 + and r8, r7, r2, ror #26 + eor r2, r2, r8 + and r8, r7, r3, ror #10 + eor r3, r3, r8, ror #4 + and r8, r7, r3, ror #6 + eor r3, r3, r8, ror #6 + and r8, r7, r3, ror #26 + eor r3, r3, r8 + and r8, r7, r4, ror #10 + eor r4, r4, r8, ror #4 + and r8, r7, r4, ror #6 + eor r4, r4, r8, ror #6 + and r8, r7, r4, ror #26 + eor r4, r4, r8 + and r8, r7, r5, ror #10 + eor r5, r5, r8, ror #4 + and r8, r7, r5, ror #6 + eor r5, r5, r8, ror #6 + and r8, r7, r5, ror #26 + eor r5, r5, r8 + orr r8, r4, r5 + eor r3, r3, r8 + mvn r3, r3 + eor r8, r2, r3, lsr #1 + and r8, r8, r6 + eor r2, r2, r8 + eor r3, r3, r8, lsl #1 //SWAPMOVE(r3, r2, 0x55555555, 1); + eor r8, r5, r2, lsr #1 + and r8, r8, r6 + eor r5, r5, r8 + eor r2, r2, r8, lsl #1 //SWAPMOVE(r2, r5, 0x55555555, 1); + orr r8, r2, r3 + eor r5, r5, r8 + mvn r5, r5 + eor r8, r3, r4, lsr #1 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8, lsl #1 //SWAPMOVE(r4, r3, 0x55555555, 1); + eor r8, r4, r5, lsr #1 + and r8, r8, r6 + eor r4, r4, r8 + eor r5, r5, r8, lsl #1 //SWAPMOVE(r5, r4, 0x55555555, 1); + orr r8, r4, r5 + eor r3, r3, r8 + mvn r3, r3 + eor r8, r2, r3, lsr #1 + and r8, r8, r6 + eor r2, r2, r8 + eor r3, r3, r8, lsl #1 //SWAPMOVE(r3, r2, 0x55555555, 1); + eor r8, r5, r2, lsr #1 + and r8, r8, r6 + eor r5, r5, r8 + eor r2, r2, r8, lsl #1 //SWAPMOVE(r2, r5, 0x55555555, 1); + orr r8, r2, r3 + eor r5, r5, r8 + eor r8, r3, r4 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8 //SWAPMOVE(r4, r3, 0x55555555, 0); + ldmia r1!, {r8-r11} //load rkeys in r8,...,r11 + eor r2, r2, r8 //add rkey + rconst + eor r3, r3, r9 //add rkey + rconst + eor r4, r4, r10 //add rkey + rconst + eor r5, r5, r11 //add rkey + rconst + and r8, r7, r2, ror #4 // --- mixcolumns 3 --- + eor r2, r2, r8, ror #26 + and r8, r7, r2 + eor r2, r2, r8, ror #4 + and r8, r7, r2, ror #4 + eor r2, r2, r8, ror #22 + and r8, r7, r3, ror #4 + eor r3, r3, r8, ror #26 + and r8, r7, r3 + eor r3, r3, r8, ror #4 + and r8, r7, r3, ror #4 + eor r3, r3, r8, ror #22 + and r8, r7, r4, ror #4 + eor r4, r4, r8, ror #26 + and r8, r7, r4 + eor r4, r4, r8, ror #4 + and r8, r7, r4, ror #4 + eor r4, r4, r8, ror #22 + and r8, r7, r5, ror #4 + eor r5, r5, r8, ror #26 + and r8, r7, r5 + eor r5, r5, r8, ror #4 + and r8, r7, r5, ror #4 + eor r5, r5, r8, ror #22 + bx lr + +/****************************************************************************** +* Encrypt a single block using fixsliced SKINNY-128-128. +******************************************************************************/ +@ void skinny128_384(u8* ctext, const u32* tk, const u8* ptext) +.global skinny128_384 +.type skinny128_384,%function +.align 2 +skinny128_384: + push {r0-r12, r14} + mov.w r0, r3 + ldr.w r3, [r2, #8] + ldr.w r4, [r2, #4] + ldr.w r5, [r2, #12] + ldr.w r2, [r2] + movw r6, #0x0a0a + movt r6, #0x0a0a //r6 <- 0x0a0a0a0a + movw r7, #0x3030 + movt r7, #0x3030 //r7 <- 0x30303030 + eor r12, r2, r2, lsr #3 + and r12, r12, r6 + eor r2, r2, r12 + eor r2, r2, r12, lsl #3 //SWAPMOVE(r2, r2, 0x0a0a0a0a, 3) + eor r12, r3, r3, lsr #3 + and r12, r12, r6 + eor r3, r3, r12 + eor r3, r3, r12, lsl #3 //SWAPMOVE(r3, r3, 0x0a0a0a0a, 3) + eor r12, r4, r4, lsr #3 + and r12, r12, r6 + eor r4, r4, r12 + eor r4, r4, r12, lsl #3 //SWAPMOVE(r4, r4, 0x0a0a0a0a, 3) + eor r12, r5, r5, lsr #3 + and r12, r12, r6 + eor r5, r5, r12 + eor r5, r5, r12, lsl #3 //SWAPMOVE(r5, r5, 0x0a0a0a0a, 3) + eor r12, r2, r4, lsr #2 + and r12, r12, r7 + eor r2, r2, r12 + eor r4, r4, r12, lsl #2 //SWAPMOVE(r4, r2, 0x30303030, 2) + eor r12, r2, r3, lsr #4 + and r12, r12, r7, lsr #2 + eor r2, r2, r12 + eor r3, r3, r12, lsl #4 //SWAPMOVE(r3, r2, 0x0c0c0c0c, 4) + eor r12, r2, r5, lsr #6 + and r12, r12, r7, lsr #4 + eor r2, r2, r12 + eor r5, r5, r12, lsl #6 //SWAPMOVE(r5, r2, 0x03030303, 6) + eor r12, r4, r3, lsr #2 + and r12, r12, r7, lsr #2 + eor r4, r4, r12 + eor r3, r3, r12, lsl #2 //SWAPMOVE(r3, r4, 0x0c0c0c0c, 2) + eor r12, r4, r5, lsr #4 + and r12, r12, r7, lsr #4 + eor r4, r4, r12 + eor r5, r5, r12, lsl #4 //SWAPMOVE(r5, r4, 0x03030303, 4) + eor r12, r3, r5, lsr #2 + and r12, r12, r7, lsr #4 + eor r3, r3, r12 + eor r5, r5, r12, lsl #2 //SWAPMOVE(r5, r3, 0x03030303, 2) + movw r6, #0x5555 + movt r6, #0x5555 //r6 <- 0x55555555 + bl quadruple_round + bl quadruple_round + bl quadruple_round + bl quadruple_round + sub.w r0, #128 // rtk1 repeats every 16 rounds + bl quadruple_round + bl quadruple_round + bl quadruple_round + bl quadruple_round + sub.w r0, #128 // rtk1 repeats every 16 rounds + bl quadruple_round + bl quadruple_round + movw r6, #0x0a0a + movt r6, #0x0a0a //r6 <- 0x0a0a0a0a + eor r10, r3, r5, lsr #2 + and r10, r10, r7, lsr #4 + eor r3, r3, r10 + eor r5, r5, r10, lsl #2 //SWAPMOVE(r5, r3, 0x03030303, 2) + eor r10, r4, r5, lsr #4 + and r10, r10, r7, lsr #4 + eor r4, r4, r10 + eor r5, r5, r10, lsl #4 //SWAPMOVE(r5, r4, 0x03030303, 4) + eor r10, r4, r3, lsr #2 + and r10, r10, r7, lsr #2 + eor r4, r4, r10 + eor r3, r3, r10, lsl #2 //SWAPMOVE(r3, r4, 0x0c0c0c0c, 2) + eor r10, r2, r5, lsr #6 + and r10, r10, r7, lsr #4 + eor r2, r2, r10 + eor r5, r5, r10, lsl #6 //SWAPMOVE(r5, r2, 0x03030303, 6) + eor r10, r2, r3, lsr #4 + and r10, r10, r7, lsr #2 + eor r2, r2, r10 + eor r3, r3, r10, lsl #4 //SWAPMOVE(r3, r2, 0x0c0c0c0c, 4) + eor r10, r2, r4, lsr #2 + and r10, r10, r7 + eor r2, r2, r10 + eor r4, r4, r10, lsl #2 //SWAPMOVE(r4, r2, 0x30303030, 2) + eor r10, r5, r5, lsr #3 + and r10, r10, r6 + eor r5, r5, r10 + eor r5, r5, r10, lsl #3 //SWAPMOVE(r5, r5, 0x0a0a0a0a, 3) + eor r10, r4, r4, lsr #3 + and r10, r10, r6 + eor r4, r4, r10 + eor r4, r4, r10, lsl #3 //SWAPMOVE(r4, r4, 0x0a0a0a0a, 3) + eor r10, r3, r3, lsr #3 + and r10, r10, r6 + eor r3, r3, r10 + eor r3, r3, r10, lsl #3 //SWAPMOVE(r3, r3, 0x0a0a0a0a, 3) + eor r10, r2, r2, lsr #3 + and r10, r10, r6 + eor r2, r2, r10 + eor r2, r2, r10, lsl #3 //SWAPMOVE(r2, r2, 0x0a0a0a0a, 3) + ldr.w r0, [sp], #4 + strd r2, r4, [r0] + strd r3, r5, [r0, #8] + pop {r1-r12,r14} + bx lr + \ No newline at end of file diff --git a/romulus/Implementations/crypto_aead/romulusn1+v12/opt32/api.h b/romulus/Implementations/crypto_aead/romulusn1+v12/opt32/api.h new file mode 100644 index 0000000..a4aa567 --- /dev/null +++ b/romulus/Implementations/crypto_aead/romulusn1+v12/opt32/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/romulus/Implementations/crypto_aead/romulusn1+v12/opt32/crypto_aead.h b/romulus/Implementations/crypto_aead/romulusn1+v12/opt32/crypto_aead.h new file mode 100644 index 0000000..e2ca9b0 --- /dev/null +++ b/romulus/Implementations/crypto_aead/romulusn1+v12/opt32/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 +); \ No newline at end of file diff --git a/romulus/Implementations/crypto_aead/romulusn1+v12/opt32/encrypt.c b/romulus/Implementations/crypto_aead/romulusn1+v12/opt32/encrypt.c new file mode 100644 index 0000000..fb144a9 --- /dev/null +++ b/romulus/Implementations/crypto_aead/romulusn1+v12/opt32/encrypt.c @@ -0,0 +1,270 @@ +#include "skinny128.h" +#include "tk_schedule.h" +#include "romulus.h" +#include +#include + +//Encryption and authentication using Romulus-N1 +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 i; + u32 tmp; + skinny_128_384_tks tks; + u8 state[BLOCKBYTES], pad[BLOCKBYTES]; + (void)nsec; + + // ----------------- Initialization ----------------- + *clen = mlen + TAGBYTES; + memset(tks.tk1, 0x00, KEYBYTES); + memset(state, 0x00, BLOCKBYTES); + tks.tk1[0] = 0x01; //56-bit LFSR counter + // ----------------- Initialization ----------------- + + // ----------------- Process the associated data ----------------- + //Handle the special case of no associated data + if (adlen == 0) { + UPDATE_CTR(tks.tk1); + SET_DOMAIN(tks, 0x1A); + precompute_rtk2_3(tks.rtk2_3, npub, k); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384_plus(state, state, tks.rtk1, tks.rtk2_3); + } else { + // Process all double blocks except the last + SET_DOMAIN(tks, 0x08); + while (adlen > 2*BLOCKBYTES) { + UPDATE_CTR(tks.tk1); + XOR_BLOCK(state, state, ad); + precompute_rtk2_3(tks.rtk2_3, ad + BLOCKBYTES, k); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384_plus(state, state, tks.rtk1, tks.rtk2_3); + UPDATE_CTR(tks.tk1); + ad += 2*BLOCKBYTES; + adlen -= 2*BLOCKBYTES; + } + //Pad and process the left-over blocks + UPDATE_CTR(tks.tk1); + if (adlen == 2*BLOCKBYTES) { + // Left-over complete double block + XOR_BLOCK(state, state, ad); + precompute_rtk2_3(tks.rtk2_3, ad + BLOCKBYTES, k); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384_plus(state, state, tks.rtk1, tks.rtk2_3); + UPDATE_CTR(tks.tk1); + SET_DOMAIN(tks, 0x18); + } else if (adlen > BLOCKBYTES) { + // Left-over partial double block + adlen -= BLOCKBYTES; + XOR_BLOCK(state, state, ad); + memcpy(pad, ad + BLOCKBYTES, adlen); + memset(pad + adlen, 0x00, 15 - adlen); + pad[15] = adlen; + precompute_rtk2_3(tks.rtk2_3, pad, k); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384_plus(state, state, tks.rtk1, tks.rtk2_3); + UPDATE_CTR(tks.tk1); + SET_DOMAIN(tks, 0x1A); + } else if (adlen == BLOCKBYTES) { + // Left-over complete single block + XOR_BLOCK(state, state, ad); + SET_DOMAIN(tks, 0x18); + } else { + // Left-over partial single block + for(i =0; i < (int)adlen; i++) + state[i] ^= ad[i]; + state[15] ^= adlen; + SET_DOMAIN(tks, 0x1A); + } + precompute_rtk2_3(tks.rtk2_3, npub, k); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384_plus(state, state, tks.rtk1, tks.rtk2_3); + } + // ----------------- Process the associated data ----------------- + + // ----------------- Process the plaintext ----------------- + memset(tks.tk1, 0, KEYBYTES); + tks.tk1[0] = 0x01; //init the 56-bit LFSR counter + if (mlen == 0) { + UPDATE_CTR(tks.tk1); + SET_DOMAIN(tks, 0x15); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384_plus(state, state, tks.rtk1, tks.rtk2_3); + } else { + //process all blocks except the last + SET_DOMAIN(tks, 0x04); + while (mlen > BLOCKBYTES) { + RHO(state,c,m); + UPDATE_CTR(tks.tk1); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384_plus(state, state, tks.rtk1, tks.rtk2_3); + c += BLOCKBYTES; + m += BLOCKBYTES; + mlen -= BLOCKBYTES; + } + //pad and process the last block + UPDATE_CTR(tks.tk1); + if (mlen < BLOCKBYTES) { + for(i = 0; i < (int)mlen; i++) { + tmp = m[i]; //use of tmp variable just in case 'c = m' + c[i] = m[i] ^ (state[i] >> 1) ^ (state[i] & 0x80) ^ (state[i] << 7); + state[i] ^= (u8)tmp; + } + state[15] ^= (u8)mlen; //padding + SET_DOMAIN(tks, 0x15); + } else { + RHO(state,c,m); + SET_DOMAIN(tks, 0x14); + } + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384_plus(state, state, tks.rtk1, tks.rtk2_3); + c += mlen; + } + // ----------------- Process the plaintext ----------------- + + // ----------------- Generate the tag ----------------- + G(state, state); + memcpy(c, state, TAGBYTES); + // ----------------- Generate the tag ----------------- + + return 0; +} + + +//Decryption and tag verification using Romulus-N1 +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 i; + u32 tmp; + skinny_128_384_tks tks; + u8 state[BLOCKBYTES], pad[BLOCKBYTES]; + (void)nsec; + + if (clen < TAGBYTES) + return -1; + + // ----------------- Initialization ----------------- + *mlen = clen - TAGBYTES; + memset(tks.tk1, 0x00, KEYBYTES); + memset(state, 0x00, BLOCKBYTES); + tks.tk1[0] = 0x01; //56-bit LFSR counter + // ----------------- Initialization ----------------- + + // ----------------- Process the associated data ----------------- + //Handle the special case of no associated data + if (adlen == 0) { + UPDATE_CTR(tks.tk1); + SET_DOMAIN(tks, 0x1A); + precompute_rtk2_3(tks.rtk2_3, npub, k); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384_plus(state, state, tks.rtk1, tks.rtk2_3); + } else { + // Process all double blocks except the last + SET_DOMAIN(tks, 0x08); + while (adlen > 2*BLOCKBYTES) { + UPDATE_CTR(tks.tk1); + XOR_BLOCK(state, state, ad); + precompute_rtk2_3(tks.rtk2_3, ad + BLOCKBYTES, k); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384_plus(state, state, tks.rtk1, tks.rtk2_3); + UPDATE_CTR(tks.tk1); + ad += 2*BLOCKBYTES; + adlen -= 2*BLOCKBYTES; + } + //Pad and process the left-over blocks + UPDATE_CTR(tks.tk1); + if (adlen == 2*BLOCKBYTES) { + // Left-over complete double block + XOR_BLOCK(state, state, ad); + precompute_rtk2_3(tks.rtk2_3, ad + BLOCKBYTES, k); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384_plus(state, state, tks.rtk1, tks.rtk2_3); + UPDATE_CTR(tks.tk1); + SET_DOMAIN(tks, 0x18); + } else if (adlen > BLOCKBYTES) { + // Left-over partial double block + adlen -= BLOCKBYTES; + XOR_BLOCK(state, state, ad); + memcpy(pad, ad + BLOCKBYTES, adlen); + memset(pad + adlen, 0x00, 15 - adlen); + pad[15] = adlen; + precompute_rtk2_3(tks.rtk2_3, pad, k); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384_plus(state, state, tks.rtk1, tks.rtk2_3); + UPDATE_CTR(tks.tk1); + SET_DOMAIN(tks, 0x1A); + } else if (adlen == BLOCKBYTES) { + // Left-over complete single block + XOR_BLOCK(state, state, ad); + SET_DOMAIN(tks, 0x18); + } else { + // Left-over partial single block + for(i =0; i < (int)adlen; i++) + state[i] ^= ad[i]; + state[15] ^= adlen; + SET_DOMAIN(tks, 0x1A); + } + precompute_rtk2_3(tks.rtk2_3, npub, k); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384_plus(state, state, tks.rtk1, tks.rtk2_3); + } + // ----------------- Process the associated data ----------------- + + // ----------------- Process the ciphertext ----------------- + clen -= TAGBYTES; + memset(tks.tk1, 0, KEYBYTES); + tks.tk1[0] = 0x01; //init the 56-bit LFSR counter + if (clen == 0) { + UPDATE_CTR(tks.tk1); + SET_DOMAIN(tks, 0x15); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384_plus(state, state, tks.rtk1, tks.rtk2_3); + } else { + //process all blocks except the last + SET_DOMAIN(tks, 0x04); + while (clen > BLOCKBYTES) { + RHO_INV(state,c,m); + UPDATE_CTR(tks.tk1); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384_plus(state, state, tks.rtk1, tks.rtk2_3); + c += BLOCKBYTES; + m += BLOCKBYTES; + clen -= BLOCKBYTES; + } + //pad and process the last block + UPDATE_CTR(tks.tk1); + if (clen < BLOCKBYTES) { + for(i = 0; i < (int)clen; i++) { + m[i] = c[i] ^ (state[i] >> 1) ^ (state[i] & 0x80) ^ (state[i] << 7); + state[i] ^= m[i]; + } + state[15] ^= (u8)clen; //padding + SET_DOMAIN(tks, 0x15); + } else { + RHO_INV(state,c,m); + SET_DOMAIN(tks, 0x14); + } + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384_plus(state, state, tks.rtk1, tks.rtk2_3); + } + // ----------------- Process the plaintext ----------------- + + // ----------------- Generate and check the tag ----------------- + G(state,state); + tmp = 0; + for(i = 0; i < TAGBYTES; i++) + tmp |= state[i] ^ c[clen+i]; //constant-time tag comparison + // ----------------- Generate and check the tag ----------------- + + return tmp; +} \ No newline at end of file diff --git a/romulus/Implementations/crypto_aead/romulusn1+v12/opt32/romulus.h b/romulus/Implementations/crypto_aead/romulusn1+v12/opt32/romulus.h new file mode 100644 index 0000000..3a70219 --- /dev/null +++ b/romulus/Implementations/crypto_aead/romulusn1+v12/opt32/romulus.h @@ -0,0 +1,68 @@ +#ifndef ROMULUSN1_H_ +#define ROMULUSN1_H_ + +#include "skinny128.h" + +typedef unsigned char u8; +typedef unsigned int u32; +typedef struct { + u8 tk1[16]; //to manipulate tk1 byte-wise + u32 rtk1[4*16]; //to avoid tk schedule recomputations + u32 rtk2_3[4*SKINNY128_384_ROUNDS]; //all round tweakeys +} skinny_128_384_tks; + +#define TAGBYTES 16 +#define KEYBYTES 16 +#define BLOCKBYTES 16 + +#define SET_DOMAIN(tks, domain) ((tks).tk1[7] = (domain)) + +//G as defined in the Romulus specification in a 32-bit word-wise manner +#define G(x,y) ({ \ + tmp = ((u32*)(y))[0]; \ + ((u32*)(x))[0] = (tmp >> 1 & 0x7f7f7f7f) ^ ((tmp ^ (tmp << 7)) & 0x80808080); \ + tmp = ((u32*)(y))[1]; \ + ((u32*)(x))[1] = (tmp >> 1 & 0x7f7f7f7f) ^ ((tmp ^ (tmp << 7)) & 0x80808080); \ + tmp = ((u32*)(y))[2]; \ + ((u32*)(x))[2] = (tmp >> 1 & 0x7f7f7f7f) ^ ((tmp ^ (tmp << 7)) & 0x80808080); \ + tmp = ((u32*)(y))[3]; \ + ((u32*)(x))[3] = (tmp >> 1 & 0x7f7f7f7f) ^ ((tmp ^ (tmp << 7)) & 0x80808080); \ +}) + +//update the counter in tk1 in a 32-bit word-wise manner +#define UPDATE_CTR(tk1) ({ \ + tmp = ((u32*)(tk1))[1]; \ + ((u32*)(tk1))[1] = (tmp << 1) & 0x00ffffff; \ + ((u32*)(tk1))[1] |= (((u32*)(tk1))[0] >> 31); \ + ((u32*)(tk1))[1] |= tmp & 0xff000000; \ + ((u32*)(tk1))[0] <<= 1; \ + if ((tmp >> 23) & 0x01) \ + ((u32*)(tk1))[0] ^= 0x95; \ +}) + +//x <- y ^ z for 128-bit blocks +#define XOR_BLOCK(x,y,z) ({ \ + ((u32*)(x))[0] = ((u32*)(y))[0] ^ ((u32*)(z))[0]; \ + ((u32*)(x))[1] = ((u32*)(y))[1] ^ ((u32*)(z))[1]; \ + ((u32*)(x))[2] = ((u32*)(y))[2] ^ ((u32*)(z))[2]; \ + ((u32*)(x))[3] = ((u32*)(y))[3] ^ ((u32*)(z))[3]; \ +}) + + +//Rho as defined in the Romulus specification +//use pad as a tmp variable in case y = z +#define RHO(x,y,z) ({ \ + G(pad,x); \ + XOR_BLOCK(y, pad, z); \ + XOR_BLOCK(x, x, z); \ +}) + +//Rho inverse as defined in the Romulus specification +//use pad as a tmp variable in case y = z +#define RHO_INV(x, y, z) ({ \ + G(pad, x); \ + XOR_BLOCK(z, pad, y); \ + XOR_BLOCK(x, x, z); \ +}) + +#endif // ROMULUSN1_H_ \ No newline at end of file diff --git a/romulus/Implementations/crypto_aead/romulusn1+v12/opt32/skinny128.c b/romulus/Implementations/crypto_aead/romulusn1+v12/opt32/skinny128.c new file mode 100644 index 0000000..a1061d5 --- /dev/null +++ b/romulus/Implementations/crypto_aead/romulusn1+v12/opt32/skinny128.c @@ -0,0 +1,107 @@ +/****************************************************************************** +* Constant-time implementation of the SKINNY tweakable block ciphers. +* +* This implementation doesn't compute the ShiftRows operation. Some masks and +* shifts are applied during the MixColumns operation so that the proper bits +* are XORed together. Moreover, the row permutation within the MixColumns +* is omitted, as well as the bit permutation at the end of the Sbox. The rows +* are synchronized with the classical after only 4 rounds. Therefore, this +* implementation relies on a "QUADRUPLE_ROUND" routine. +* +* The Sbox computation takes advantage of some symmetry in the 8-bit Sbox to +* turn it into a 4-bit S-box computation. Although the last bit permutation +* within the Sbox is not computed, the bit ordering is synchronized with the +* classical representation after 2 calls. +* +* @author Alexandre Adomnicai, Nanyang Technological University, +* alexandre.adomnicai@ntu.edu.sg +* +* @date May 2020 +******************************************************************************/ +#include +#include +#include "skinny128.h" +#include "tk_schedule.h" + +/****************************************************************************** +* The MixColumns computation for rounds i such that (i % 4) == 0 +******************************************************************************/ +void mixcolumns_0(u32* state) { + u32 tmp; + for(int i = 0; i < 4; i++) { + tmp = ROR(state[i],24) & 0x0c0c0c0c; + state[i] ^= ROR(tmp,30); + tmp = ROR(state[i],16) & 0xc0c0c0c0; + state[i] ^= ROR(tmp,4); + tmp = ROR(state[i],8) & 0x0c0c0c0c; + state[i] ^= ROR(tmp,2); + } +} + +/****************************************************************************** +* The MixColumns computation for rounds i such that (i % 4) == 1 +******************************************************************************/ +void mixcolumns_1(u32* state) { + u32 tmp; + for(int i = 0; i < 4; i++) { + tmp = ROR(state[i],16) & 0x30303030; + state[i] ^= ROR(tmp,30); + tmp = state[i] & 0x03030303; + state[i] ^= ROR(tmp,28); + tmp = ROR(state[i],16) & 0x30303030; + state[i] ^= ROR(tmp,2); + } +} + +/****************************************************************************** +* The MixColumns computation for rounds i such that (i % 4) == 2 +******************************************************************************/ +void mixcolumns_2(u32* state) { + u32 tmp; + for(int i = 0; i < 4; i++) { + tmp = ROR(state[i],8) & 0xc0c0c0c0; + state[i] ^= ROR(tmp,6); + tmp = ROR(state[i],16) & 0x0c0c0c0c; + state[i] ^= ROR(tmp,28); + tmp = ROR(state[i],24) & 0xc0c0c0c0; + state[i] ^= ROR(tmp,2); + } +} + +/****************************************************************************** +* The MixColumns computation for rounds i such that (i % 4) == 3 +******************************************************************************/ +void mixcolumns_3(u32* state) { + u32 tmp; + for(int i = 0; i < 4; i++) { + tmp = state[i] & 0x03030303; + state[i] ^= ROR(tmp,30); + tmp = state[i] & 0x30303030; + state[i] ^= ROR(tmp,4); + tmp = state[i] & 0x03030303; + state[i] ^= ROR(tmp,26); + } +} + +/****************************************************************************** +* Encryption of a single block without any operation mode using SKINNY-128-384. +* RTK1 and RTK2_3 are given separately to take advantage of the fact that +* TK2 and TK3 remains the same through the entire data encryption/decryption. +******************************************************************************/ +void skinny128_384_plus(u8* ctext, const u8* ptext, const u32* rtk1, + const u32* rtk2_3) { + u32 tmp; // used in SWAPMOVE macro + u32 state[4]; // 128-bit state + packing(state, ptext); // from byte to bitsliced representation + QUADRUPLE_ROUND(state, rtk1, rtk2_3); + QUADRUPLE_ROUND(state, rtk1+16, rtk2_3+16); + QUADRUPLE_ROUND(state, rtk1+32, rtk2_3+32); + QUADRUPLE_ROUND(state, rtk1+48, rtk2_3+48); + QUADRUPLE_ROUND(state, rtk1, rtk2_3+64); + QUADRUPLE_ROUND(state, rtk1+16, rtk2_3+80); + QUADRUPLE_ROUND(state, rtk1+32, rtk2_3+96); + QUADRUPLE_ROUND(state, rtk1+48, rtk2_3+112); + QUADRUPLE_ROUND(state, rtk1, rtk2_3+128); + QUADRUPLE_ROUND(state, rtk1+16, rtk2_3+144); + unpacking(ctext, state); // from bitsliced to byte representation +} \ No newline at end of file diff --git a/romulus/Implementations/crypto_aead/romulusn1+v12/opt32/skinny128.h b/romulus/Implementations/crypto_aead/romulusn1+v12/opt32/skinny128.h new file mode 100644 index 0000000..bda1e9b --- /dev/null +++ b/romulus/Implementations/crypto_aead/romulusn1+v12/opt32/skinny128.h @@ -0,0 +1,95 @@ +#ifndef SKINNY128_H_ +#define SKINNY128_H_ + +typedef unsigned char u8; +typedef unsigned int u32; + +void skinny128_384_plus(u8* ctext, const u8* ptext, const u32* rtk1, const u32* rtk2_3); + +#define SKINNY128_384_ROUNDS 40 + +#define QUADRUPLE_ROUND(state, rtk1, rtk2_3) ({ \ + state[3] ^= ~(state[0] | state[1]); \ + SWAPMOVE(state[2], state[1], 0x55555555, 1); \ + SWAPMOVE(state[3], state[2], 0x55555555, 1); \ + state[1] ^= ~(state[2] | state[3]); \ + SWAPMOVE(state[1], state[0], 0x55555555, 1); \ + SWAPMOVE(state[0], state[3], 0x55555555, 1); \ + state[3] ^= ~(state[0] | state[1]); \ + SWAPMOVE(state[2], state[1], 0x55555555, 1); \ + SWAPMOVE(state[3], state[2], 0x55555555, 1); \ + state[1] ^= (state[2] | state[3]); \ + SWAPMOVE(state[3], state[0], 0x55555555, 0); \ + state[0] ^= (rtk1)[0]; \ + state[1] ^= (rtk1)[1]; \ + state[2] ^= (rtk1)[2]; \ + state[3] ^= (rtk1)[3]; \ + state[0] ^= (rtk2_3)[0]; \ + state[1] ^= (rtk2_3)[1]; \ + state[2] ^= (rtk2_3)[2]; \ + state[3] ^= (rtk2_3)[3]; \ + mixcolumns_0(state); \ + state[1] ^= ~(state[2] | state[3]); \ + SWAPMOVE(state[1], state[0], 0x55555555, 1); \ + SWAPMOVE(state[0], state[3], 0x55555555, 1); \ + state[3] ^= ~(state[0] | state[1]); \ + SWAPMOVE(state[2], state[1], 0x55555555, 1); \ + SWAPMOVE(state[3], state[2], 0x55555555, 1); \ + state[1] ^= ~(state[2] | state[3]); \ + SWAPMOVE(state[1], state[0], 0x55555555, 1); \ + SWAPMOVE(state[0], state[3], 0x55555555, 1); \ + state[3] ^= (state[0] | state[1]); \ + SWAPMOVE(state[1], state[2], 0x55555555, 0); \ + state[0] ^= (rtk1)[4]; \ + state[1] ^= (rtk1)[5]; \ + state[2] ^= (rtk1)[6]; \ + state[3] ^= (rtk1)[7]; \ + state[0] ^= (rtk2_3)[4]; \ + state[1] ^= (rtk2_3)[5]; \ + state[2] ^= (rtk2_3)[6]; \ + state[3] ^= (rtk2_3)[7]; \ + mixcolumns_1(state); \ + state[3] ^= ~(state[0] | state[1]); \ + SWAPMOVE(state[2], state[1], 0x55555555, 1); \ + SWAPMOVE(state[3], state[2], 0x55555555, 1); \ + state[1] ^= ~(state[2] | state[3]); \ + SWAPMOVE(state[1], state[0], 0x55555555, 1); \ + SWAPMOVE(state[0], state[3], 0x55555555, 1); \ + state[3] ^= ~(state[0] | state[1]); \ + SWAPMOVE(state[2], state[1], 0x55555555, 1); \ + SWAPMOVE(state[3], state[2], 0x55555555, 1); \ + state[1] ^= (state[2] | state[3]); \ + SWAPMOVE(state[3], state[0], 0x55555555, 0); \ + state[0] ^= (rtk1)[8]; \ + state[1] ^= (rtk1)[9]; \ + state[2] ^= (rtk1)[10]; \ + state[3] ^= (rtk1)[11]; \ + state[0] ^= (rtk2_3)[8]; \ + state[1] ^= (rtk2_3)[9]; \ + state[2] ^= (rtk2_3)[10]; \ + state[3] ^= (rtk2_3)[11]; \ + mixcolumns_2(state); \ + state[1] ^= ~(state[2] | state[3]); \ + SWAPMOVE(state[1], state[0], 0x55555555, 1); \ + SWAPMOVE(state[0], state[3], 0x55555555, 1); \ + state[3] ^= ~(state[0] | state[1]); \ + SWAPMOVE(state[2], state[1], 0x55555555, 1); \ + SWAPMOVE(state[3], state[2], 0x55555555, 1); \ + state[1] ^= ~(state[2] | state[3]); \ + SWAPMOVE(state[1], state[0], 0x55555555, 1); \ + SWAPMOVE(state[0], state[3], 0x55555555, 1); \ + state[3] ^= (state[0] | state[1]); \ + SWAPMOVE(state[1], state[2], 0x55555555, 0); \ + state[0] ^= (rtk1)[12]; \ + state[1] ^= (rtk1)[13]; \ + state[2] ^= (rtk1)[14]; \ + state[3] ^= (rtk1)[15]; \ + state[0] ^= (rtk2_3)[12]; \ + state[1] ^= (rtk2_3)[13]; \ + state[2] ^= (rtk2_3)[14]; \ + state[3] ^= (rtk2_3)[15]; \ + mixcolumns_3(state); \ +}) + + +#endif // SKINNY128_H_ \ No newline at end of file diff --git a/romulus/Implementations/crypto_aead/romulusn1+v12/opt32/tk_schedule.c b/romulus/Implementations/crypto_aead/romulusn1+v12/opt32/tk_schedule.c new file mode 100644 index 0000000..1da4277 --- /dev/null +++ b/romulus/Implementations/crypto_aead/romulusn1+v12/opt32/tk_schedule.c @@ -0,0 +1,368 @@ +/****************************************************************************** +* Implementation of the SKINNY tweakey schedule to match fixslicing. +* +* @author Alexandre Adomnicai, Nanyang Technological University, +* alexandre.adomnicai@ntu.edu.sg +* +* @date May 2020 +******************************************************************************/ +#include +#include //for memcmp +#include "tk_schedule.h" +#include "skinny128.h" + +typedef unsigned char u8; +typedef unsigned int u32; + +/****************************************************************************** +* The round constants according to the new representation. +******************************************************************************/ +u32 rconst_32_bs[160] = { + 0x00000004, 0xffffffbf, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x10000100, 0xfffffeff, 0x44000000, 0xfbffffff, 0x00000000, 0x04000000, + 0x00100000, 0x00100000, 0x00100001, 0xffefffff, 0x00440000, 0xffafffff, + 0x00400000, 0x00400000, 0x01000000, 0x01000000, 0x01401000, 0xffbfffff, + 0x01004000, 0xfefffbff, 0x00000400, 0x00000400, 0x00000010, 0x00000000, + 0x00010410, 0xfffffbef, 0x00000054, 0xffffffaf, 0x00000000, 0x00000040, + 0x00000100, 0x00000100, 0x10000140, 0xfffffeff, 0x44000000, 0xfffffeff, + 0x04000000, 0x04000000, 0x00100000, 0x00100000, 0x04000001, 0xfbffffff, + 0x00140000, 0xffafffff, 0x00400000, 0x00000000, 0x00000000, 0x00000000, + 0x01401000, 0xfebfffff, 0x01004400, 0xfffffbff, 0x00000000, 0x00000400, + 0x00000010, 0x00000010, 0x00010010, 0xffffffff, 0x00000004, 0xffffffaf, + 0x00000040, 0x00000040, 0x00000100, 0x00000000, 0x10000140, 0xffffffbf, + 0x40000100, 0xfbfffeff, 0x00000000, 0x04000000, 0x00100000, 0x00000000, + 0x04100001, 0xffefffff, 0x00440000, 0xffefffff, 0x00000000, 0x00400000, + 0x01000000, 0x01000000, 0x00401000, 0xffffffff, 0x00004000, 0xfeffffff, + 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00010400, 0xfffffbff, + 0x00000014, 0xffffffbf, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x10000100, 0xffffffff, 0x40000000, 0xfbffffff, 0x00000000, 0x04000000, + 0x00100000, 0x00000000, 0x00100001, 0xffefffff, 0x00440000, 0xffafffff, + 0x00000000, 0x00400000, 0x01000000, 0x01000000, 0x01401000, 0xffffffff, + 0x00004000, 0xfeffffff, 0x00000400, 0x00000400, 0x00000010, 0x00000000, + 0x00010400, 0xfffffbff, 0x00000014, 0xffffffaf, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x10000140, 0xfffffeff, 0x44000000, 0xffffffff, + 0x00000000, 0x04000000, 0x00100000, 0x00100000, 0x00000001, 0xffefffff, + 0x00440000, 0xffafffff, 0x00400000, 0x00000000, 0x00000000, 0x01000000, + 0x01401000, 0xffbfffff, 0x01004000, 0xfffffbff, 0x00000400, 0x00000400, + 0x00000010, 0x00000000, 0x00010010, 0xfffffbff +}; + +/****************************************************************************** +* Pack the input into the bitsliced representation +* 24 28 56 60 88 92 120 124 | ... | 0 4 32 36 64 68 96 100 +* 25 29 57 61 89 93 121 125 | ... | 1 5 33 37 65 69 97 101 +* 26 30 58 62 90 94 122 126 | ... | 2 6 34 38 66 70 98 102 +* 27 31 59 63 91 95 123 127 | ... | 3 7 35 39 67 71 99 103 +******************************************************************************/ +void packing(u32* out, const u8* in) { + u32 tmp; + LE_LOAD(out, in); + LE_LOAD(out + 1, in + 8); + LE_LOAD(out + 2, in + 4); + LE_LOAD(out + 3, in + 12); + SWAPMOVE(out[0], out[0], 0x0a0a0a0a, 3); + SWAPMOVE(out[1], out[1], 0x0a0a0a0a, 3); + SWAPMOVE(out[2], out[2], 0x0a0a0a0a, 3); + SWAPMOVE(out[3], out[3], 0x0a0a0a0a, 3); + SWAPMOVE(out[2], out[0], 0x30303030, 2); + SWAPMOVE(out[1], out[0], 0x0c0c0c0c, 4); + SWAPMOVE(out[3], out[0], 0x03030303, 6); + SWAPMOVE(out[1], out[2], 0x0c0c0c0c, 2); + SWAPMOVE(out[3], out[2], 0x03030303, 4); + SWAPMOVE(out[3], out[1], 0x03030303, 2); +} + +/****************************************************************************** +* Unpack the input to a byte-wise representation +******************************************************************************/ +void unpacking(u8* out, u32 *in) { + u32 tmp; + SWAPMOVE(in[3], in[1], 0x03030303, 2); + SWAPMOVE(in[3], in[2], 0x03030303, 4); + SWAPMOVE(in[1], in[2], 0x0c0c0c0c, 2); + SWAPMOVE(in[3], in[0], 0x03030303, 6); + SWAPMOVE(in[1], in[0], 0x0c0c0c0c, 4); + SWAPMOVE(in[2], in[0], 0x30303030, 2); + SWAPMOVE(in[0], in[0], 0x0a0a0a0a, 3); + SWAPMOVE(in[1], in[1], 0x0a0a0a0a, 3); + SWAPMOVE(in[2], in[2], 0x0a0a0a0a, 3); + SWAPMOVE(in[3], in[3], 0x0a0a0a0a, 3); + LE_STORE(out, in[0]); + LE_STORE(out + 8, in[1]); + LE_STORE(out + 4, in[2]); + LE_STORE(out + 12, in[3]); +} + +/****************************************************************************** +* 0 4 1 5 +* 1 5 ---> 2 6 +* 2 6 3 7 +* 3 7 4 0 +******************************************************************************/ +void lfsr2_bs(u32* tk) { + u32 tmp; + tmp = tk[0] ^ (tk[2] & 0xaaaaaaaa); + tmp = ((tmp & 0xaaaaaaaa) >> 1) | ((tmp << 1) & 0xaaaaaaaa); + tk[0] = tk[1]; + tk[1] = tk[2]; + tk[2] = tk[3]; + tk[3] = tmp; +} + +/****************************************************************************** +* 0 4 7 3 +* 1 5 ---> 0 4 +* 2 6 1 5 +* 3 7 2 6 +******************************************************************************/ +void lfsr3_bs(u32* tk) { + u32 tmp; + tmp = tk[3] ^ ((tk[1] & 0xaaaaaaaa) >> 1); + tmp = ((tmp & 0xaaaaaaaa) >> 1) | ((tmp << 1) & 0xaaaaaaaa); + tk[3] = tk[2]; + tk[2] = tk[1]; + tk[1] = tk[0]; + tk[0] = tmp; +} + +/****************************************************************************** +* Apply the permutation in a bitsliced manner, twice +******************************************************************************/ +void permute_tk_2(u32* tk) { + u32 tmp; + for(int i =0; i < 4; i++) { + tmp = tk[i]; + tk[i] = ROR(tmp,14) & 0xcc00cc00; + tk[i] |= (tmp & 0x000000ff) << 16; + tk[i] |= (tmp & 0xcc000000)>> 2; + tk[i] |= (tmp & 0x0033cc00) >> 8; + tk[i] |= (tmp & 0x00cc0000) >>18; + } +} + +/****************************************************************************** +* Apply the permutation in a bitsliced manner, 4 times +******************************************************************************/ +void permute_tk_4(u32* tk) { + u32 tmp; + for(int i =0; i < 4; i++) { + tmp = tk[i]; + tk[i] = ROR(tmp,22) & 0xcc0000cc; + tk[i] |= ROR(tmp,16) & 0x3300cc00; + tk[i] |= ROR(tmp, 24) & 0x00cc3300; + tk[i] |= (tmp & 0x00cc00cc) >> 2; + } +} + +/****************************************************************************** +* Apply the permutation in a bitsliced manner, 6 times +******************************************************************************/ +void permute_tk_6(u32* tk) { + u32 tmp; + for(int i =0; i < 4; i++) { + tmp = tk[i]; + tk[i] = ROR(tmp,6) & 0xcccc0000; + tk[i] |= ROR(tmp,24) & 0x330000cc; + tk[i] |= ROR(tmp,10) & 0x3333; + tk[i] |= (tmp & 0xcc) << 14; + tk[i] |= (tmp & 0x3300) << 2; + } +} + +/****************************************************************************** +* Apply the permutation in a bitsliced manner, 8 times +******************************************************************************/ +void permute_tk_8(u32* tk) { + u32 tmp; + for(int i =0; i < 4; i++) { + tmp = tk[i]; + tk[i] = ROR(tmp,24) & 0xcc000033; + tk[i] |= ROR(tmp,8) & 0x33cc0000; + tk[i] |= ROR(tmp,26) & 0x00333300; + tk[i] |= (tmp & 0x00333300) >> 6; + } +} + +/****************************************************************************** +* Apply the permutation in a bitsliced manner, 10 times +******************************************************************************/ +void permute_tk_10(u32* tk) { + u32 tmp; + for(int i =0; i < 4; i++) { + tmp = tk[i]; + tk[i] = ROR(tmp,8) & 0xcc330000; + tk[i] |= ROR(tmp,26) & 0x33000033; + tk[i] |= ROR(tmp,22) & 0x00cccc00; + tk[i] |= (tmp & 0x00330000) >> 14; + tk[i] |= (tmp & 0xcc00) >> 2; + } +} + +/****************************************************************************** +* Apply the permutation in a bitsliced manner, 12 times +******************************************************************************/ +void permute_tk_12(u32* tk) { + u32 tmp; + for(int i =0; i < 4; i++) { + tmp = tk[i]; + tk[i] = ROR(tmp,8) & 0xcc33; + tk[i] |= ROR(tmp,30) & 0x00cc00cc; + tk[i] |= ROR(tmp,10) & 0x33330000; + tk[i] |= ROR(tmp,16) & 0xcc003300; + } +} + +/****************************************************************************** +* Apply the permutation in a bitsliced manner, 14 times +******************************************************************************/ +void permute_tk_14(u32* tk) { + u32 tmp; + for(int i =0; i < 4; i++) { + tmp = tk[i]; + tk[i] = ROR(tmp,24) & 0x0033cc00; + tk[i] |= ROR(tmp,14) & 0x00cc0000; + tk[i] |= ROR(tmp,30) & 0xcc000000; + tk[i] |= ROR(tmp,16) & 0x000000ff; + tk[i] |= ROR(tmp,18) & 0x33003300; + } +} + +/****************************************************************************** +* Precompute all LFSRs on TK2 +******************************************************************************/ +void precompute_lfsr_tk2(u32* tk, const u8* key, const int rounds) { + u32 tk2[4]; + packing(tk2, key); + memcpy(tk, tk2, 16); + for(int i = 0 ; i < rounds; i+=2) { + lfsr2_bs(tk2); + memcpy(tk+i*4+4, tk2, 16); + } +} + +/****************************************************************************** +* Precompute all LFSRs on TK3 +******************************************************************************/ +void precompute_lfsr_tk3(u32* tk, const u8* key, const int rounds) { + u32 tk3[4]; + packing(tk3, key); + tk[0] ^= tk3[0]; + tk[1] ^= tk3[1]; + tk[2] ^= tk3[2]; + tk[3] ^= tk3[3]; + for(int i = 0 ; i < rounds; i+=2) { + lfsr3_bs(tk3); + tk[i*4+4] ^= tk3[0]; + tk[i*4+5] ^= tk3[1]; + tk[i*4+6] ^= tk3[2]; + tk[i*4+7] ^= tk3[3]; + } +} + +/****************************************************************************** +* XOR TK with TK1 before applying the permutations. +* The key is then rearranged to match the barrel shiftrows representation. +******************************************************************************/ +void permute_tk(u32* tk, const u8* key, const int rounds) { + u32 test; + u32 tk1[4], tmp[4]; + packing(tk1, key); + memcpy(tmp, tk, 16); + tmp[0] ^= tk1[0]; + tmp[1] ^= tk1[1]; + tmp[2] ^= tk1[2]; + tmp[3] ^= tk1[3]; + for(int i = 0 ; i < rounds; i += 8) { + test = (i % 16 < 8) ? 1 : 0; //to apply the right power of P + tk[i*4] = tmp[2] & 0xf0f0f0f0; + tk[i*4+1] = tmp[3] & 0xf0f0f0f0; + tk[i*4+2] = tmp[0] & 0xf0f0f0f0; + tk[i*4+3] = tmp[1] & 0xf0f0f0f0; + memcpy(tmp, tk+i*4+4, 16); + XOR_BLOCKS(tmp, tk1); + if (test) + permute_tk_2(tmp); // applies P^2 + else + permute_tk_10(tmp); // applies P^10 + tk[i*4+4] = ROR(tmp[0],26) & 0xc3c3c3c3; + tk[i*4+5] = ROR(tmp[1],26) & 0xc3c3c3c3; + tk[i*4+6] = ROR(tmp[2],26) & 0xc3c3c3c3; + tk[i*4+7] = ROR(tmp[3],26) & 0xc3c3c3c3; + tk[i*4+8] = ROR(tmp[2],28) & 0x03030303; + tk[i*4+8] |= ROR(tmp[2],12) & 0x0c0c0c0c; + tk[i*4+9] = ROR(tmp[3],28) & 0x03030303; + tk[i*4+9] |= ROR(tmp[3],12) & 0x0c0c0c0c; + tk[i*4+10] = ROR(tmp[0],28) & 0x03030303; + tk[i*4+10] |= ROR(tmp[0],12) & 0x0c0c0c0c; + tk[i*4+11] = ROR(tmp[1],28) & 0x03030303; + tk[i*4+11] |= ROR(tmp[1],12) & 0x0c0c0c0c; + memcpy(tmp, tk+i*4+12, 16); + XOR_BLOCKS(tmp, tk1); + if (test) + permute_tk_4(tmp); // applies P^4 + else + permute_tk_12(tmp); // applies P^12 + for(int j = 0; j < 4; j++) { + tk[i*4+12+j] = ROR(tmp[j],14) & 0x30303030; + tk[i*4+12+j] |= ROR(tmp[j],6) & 0x0c0c0c0c; + } + tk[i*4+16] = ROR(tmp[2], 16) & 0xf0f0f0f0; + tk[i*4+17] = ROR(tmp[3], 16) & 0xf0f0f0f0; + tk[i*4+18] = ROR(tmp[0], 16) & 0xf0f0f0f0; + tk[i*4+19] = ROR(tmp[1], 16) & 0xf0f0f0f0; + memcpy(tmp, tk+i*4+20, 16); + XOR_BLOCKS(tmp, tk1); + if (test) + permute_tk_6(tmp); // applies P^6 + else + permute_tk_14(tmp); // applies P^14 + tk[i*4+20] = ROR(tmp[0], 10) & 0xc3c3c3c3; + tk[i*4+21] = ROR(tmp[1], 10) & 0xc3c3c3c3; + tk[i*4+22] = ROR(tmp[2], 10) & 0xc3c3c3c3; + tk[i*4+23] = ROR(tmp[3], 10) & 0xc3c3c3c3; + tk[i*4+24] = ROR(tmp[2],12) & 0x03030303; + tk[i*4+24] |= ROR(tmp[2],28) & 0x0c0c0c0c; + tk[i*4+25] = ROR(tmp[3],12) & 0x03030303; + tk[i*4+25] |= ROR(tmp[3],28) & 0x0c0c0c0c; + tk[i*4+26] = ROR(tmp[0],12) & 0x03030303; + tk[i*4+26] |= ROR(tmp[0],28) & 0x0c0c0c0c; + tk[i*4+27] = ROR(tmp[1],12) & 0x03030303; + tk[i*4+27] |= ROR(tmp[1],28) & 0x0c0c0c0c; + memcpy(tmp, tk+i*4+28, 16); + XOR_BLOCKS(tmp, tk1); + if (test) + permute_tk_8(tmp); // applies P^8 + for(int j = 0; j < 4; j++) { + tk[i*4+28+j] = ROR(tmp[j],30) & 0x30303030; + tk[i*4+28+j] |= ROR(tmp[j],22) & 0x0c0c0c0c; + } + if (test && (i+8 < rounds)) { //only if next loop iteration + tk[i*4+32] = tmp[2] & 0xf0f0f0f0; + tk[i*4+33] = tmp[3] & 0xf0f0f0f0; + tk[i*4+34] = tmp[0] & 0xf0f0f0f0; + tk[i*4+35] = tmp[1] & 0xf0f0f0f0; + } + } +} + +/****************************************************************************** +* Precompute LFSR2(TK2) ^ LFSR3(TK3) ^ rconst. +******************************************************************************/ +void precompute_rtk2_3(u32* rtk, const u8* tk2, const u8 * tk3) { + memset(rtk, 0x00, 16*SKINNY128_384_ROUNDS); + precompute_lfsr_tk2(rtk, tk2, SKINNY128_384_ROUNDS); + precompute_lfsr_tk3(rtk, tk3, SKINNY128_384_ROUNDS); + permute_tk(rtk, (u8*)(rtk+8), SKINNY128_384_ROUNDS); // rtk+8 is NULL + for(int i = 0; i < SKINNY128_384_ROUNDS; i++) { // add rconsts + for(int j = 0; j < 4; j++) + rtk[i*4+j] ^= rconst_32_bs[i*4+j]; + } +} + +/****************************************************************************** +* Precompute RTK1. +******************************************************************************/ +void precompute_rtk1(u32* rtk1, const u8* tk1) { + memset(rtk1, 0x00, 16*16); + permute_tk(rtk1, tk1, 16); +} \ No newline at end of file diff --git a/romulus/Implementations/crypto_aead/romulusn1+v12/opt32/tk_schedule.h b/romulus/Implementations/crypto_aead/romulusn1+v12/opt32/tk_schedule.h new file mode 100644 index 0000000..e1f64f8 --- /dev/null +++ b/romulus/Implementations/crypto_aead/romulusn1+v12/opt32/tk_schedule.h @@ -0,0 +1,39 @@ +#ifndef TK_SCHEDULE_H_ +#define TK_SCHEDULE_H_ + +typedef unsigned char u8; +typedef unsigned int u32; + +void packing(u32* out, const u8* in); +void unpacking(u8* out, u32 *in); +void precompute_rtk2_3(u32* rtk, const u8* tk2, const u8* tk3); +void precompute_rtk1(u32* rtk1, const u8* tk1); + +#define ROR(x,y) (((x) >> (y)) | ((x) << (32 - (y)))) + +#define XOR_BLOCKS(x,y) ({ \ + (x)[0] ^= (y)[0]; \ + (x)[1] ^= (y)[1]; \ + (x)[2] ^= (y)[2]; \ + (x)[3] ^= (y)[3]; \ +}) + +#define SWAPMOVE(a, b, mask, n) ({ \ + tmp = (b ^ (a >> n)) & mask; \ + b ^= tmp; \ + a ^= (tmp << n); \ +}) + +#define LE_LOAD(x, y) \ + *(x) = (((u32)(y)[3] << 24) | \ + ((u32)(y)[2] << 16) | \ + ((u32)(y)[1] << 8) | \ + (y)[0]); + +#define LE_STORE(x, y) \ + (x)[0] = (y) & 0xff; \ + (x)[1] = ((y) >> 8) & 0xff; \ + (x)[2] = ((y) >> 16) & 0xff; \ + (x)[3] = (y) >> 24; + +#endif // TK_SCHEDULE_H_ \ No newline at end of file diff --git a/romulus/Implementations/crypto_aead/romulusn1v12/armcortexm/api.h b/romulus/Implementations/crypto_aead/romulusn1v12/armcortexm/api.h new file mode 100644 index 0000000..a4aa567 --- /dev/null +++ b/romulus/Implementations/crypto_aead/romulusn1v12/armcortexm/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/romulus/Implementations/crypto_aead/romulusn1v12/armcortexm/crypto_aead.h b/romulus/Implementations/crypto_aead/romulusn1v12/armcortexm/crypto_aead.h new file mode 100644 index 0000000..6f4ee42 --- /dev/null +++ b/romulus/Implementations/crypto_aead/romulusn1v12/armcortexm/crypto_aead.h @@ -0,0 +1,13 @@ +//API required by the NIST for the LWC competition +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); + +//API required by the NIST for the LWC competition +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); diff --git a/romulus/Implementations/crypto_aead/romulusn1v12/armcortexm/encrypt.c b/romulus/Implementations/crypto_aead/romulusn1v12/armcortexm/encrypt.c new file mode 100644 index 0000000..8b819f8 --- /dev/null +++ b/romulus/Implementations/crypto_aead/romulusn1v12/armcortexm/encrypt.c @@ -0,0 +1,261 @@ +#include "skinny128.h" +#include "romulus.h" +#include + +//Encryption and authentication using Romulus-N1 +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 tmp; + skinny_128_384_tks tks; + u8 state[BLOCKBYTES], pad[BLOCKBYTES]; + (void)nsec; + + // ----------------- Initialization ----------------- + *clen = mlen + TAGBYTES; + memset(tks.tk1, 0x00, KEYBYTES); + memset(state, 0x00, BLOCKBYTES); + tks.tk1[0] = 0x01; // Init 56-bit LFSR counter + // ----------------- Initialization ----------------- + + // ----------------- Process the associated data ----------------- + if (adlen == 0) { // Handle the special case of no AD + UPDATE_CTR(tks.tk1); + SET_DOMAIN(tks, 0x1A); + tkschedule_lfsr(tks.rtk, npub, k, SKINNY128_384_ROUNDS); + tkschedule_perm(tks.rtk); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + } else { // Process double blocks but the last + SET_DOMAIN(tks, 0x08); + while (adlen > 2*BLOCKBYTES) { + UPDATE_CTR(tks.tk1); + XOR_BLOCK(state, state, ad); + tkschedule_lfsr(tks.rtk, ad + BLOCKBYTES, k, SKINNY128_384_ROUNDS); + tkschedule_perm(tks.rtk); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + UPDATE_CTR(tks.tk1); + ad += 2*BLOCKBYTES; + adlen -= 2*BLOCKBYTES; + } + // Pad and process the left-over blocks + UPDATE_CTR(tks.tk1); + if (adlen == 2*BLOCKBYTES) { // Left-over complete double block + XOR_BLOCK(state, state, ad); + tkschedule_lfsr(tks.rtk, ad + BLOCKBYTES, k, SKINNY128_384_ROUNDS); + tkschedule_perm(tks.rtk); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + UPDATE_CTR(tks.tk1); + SET_DOMAIN(tks, 0x18); + } else if (adlen > BLOCKBYTES) { // Left-over partial double block + adlen -= BLOCKBYTES; + XOR_BLOCK(state, state, ad); + memcpy(pad, ad + BLOCKBYTES, adlen); + memset(pad + adlen, 0x00, 15 - adlen); + pad[15] = adlen; + tkschedule_lfsr(tks.rtk, pad, k, SKINNY128_384_ROUNDS); + tkschedule_perm(tks.rtk); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + UPDATE_CTR(tks.tk1); + SET_DOMAIN(tks, 0x1A); + } else if (adlen == BLOCKBYTES) { // Left-over complete single block + XOR_BLOCK(state, state, ad); + SET_DOMAIN(tks, 0x18); + } else { // Left-over partial single block + for(int i = 0; i < (int)adlen; i++) + state[i] ^= ad[i]; + state[15] ^= adlen; // Padding + SET_DOMAIN(tks, 0x1A); + } + tkschedule_lfsr(tks.rtk, npub, k, SKINNY128_384_ROUNDS); + tkschedule_perm(tks.rtk); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + } + // ----------------- Process the associated data ----------------- + + // ----------------- Process the plaintext ----------------- + memset(tks.tk1, 0x00, KEYBYTES/2); + tks.tk1[0] = 0x01; // Init the 56-bit LFSR counter + if (mlen == 0) { + UPDATE_CTR(tks.tk1); + SET_DOMAIN(tks, 0x15); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + } else { // Process all blocks except the last + SET_DOMAIN(tks, 0x04); + while (mlen > BLOCKBYTES) { + RHO(state,c,m); + UPDATE_CTR(tks.tk1); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + c += BLOCKBYTES; + m += BLOCKBYTES; + mlen -= BLOCKBYTES; + } + // Pad and process the last block + UPDATE_CTR(tks.tk1); + if (mlen < BLOCKBYTES) { // Last message single block is full + for(int i = 0; i < (int)mlen; i++) { + tmp = m[i]; // Use of tmp variable in case c = m + c[i] = m[i] ^ (state[i] >> 1) ^ (state[i] & 0x80) ^ (state[i] << 7); + state[i] ^= (u8)tmp; + } + state[15] ^= (u8)mlen; // Padding + SET_DOMAIN(tks, 0x15); + } else { // Last message single block is partial + RHO(state,c,m); + SET_DOMAIN(tks, 0x14); + } + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + c += mlen; + } + // ----------------- Process the plaintext ----------------- + + // ----------------- Generate the tag ----------------- + G(c,state); + // ----------------- Generate the tag ----------------- + + return 0; +} + + +//Decryption and tag verification using Romulus-N1 +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 tmp; + skinny_128_384_tks tks; + u8 state[BLOCKBYTES], pad[BLOCKBYTES]; + (void)nsec; + + if (clen < TAGBYTES) + return -1; + + // ----------------- Initialization ----------------- + *mlen = clen - TAGBYTES; + memset(tks.tk1, 0x00, KEYBYTES); + memset(state, 0x00, BLOCKBYTES); + tks.tk1[0] = 0x01; // Init 56-bit LFSR counter + // ----------------- Initialization ----------------- + + // ----------------- Process the associated data ----------------- + if (adlen == 0) { // Handle the special case of no AD + UPDATE_CTR(tks.tk1); + SET_DOMAIN(tks, 0x1A); + tkschedule_lfsr(tks.rtk, npub, k, SKINNY128_384_ROUNDS); + tkschedule_perm(tks.rtk); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + } else { // Process double blocks except the last + SET_DOMAIN(tks, 0x08); + while (adlen > 2*BLOCKBYTES) { + UPDATE_CTR(tks.tk1); + XOR_BLOCK(state, state, ad); + tkschedule_lfsr(tks.rtk, ad + BLOCKBYTES, k, SKINNY128_384_ROUNDS); + tkschedule_perm(tks.rtk); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + UPDATE_CTR(tks.tk1); + ad += 2*BLOCKBYTES; + adlen -= 2*BLOCKBYTES; + } + // Pad and process the left-over blocks + UPDATE_CTR(tks.tk1); + if (adlen == 2*BLOCKBYTES) { // Left-over complete double block + XOR_BLOCK(state, state, ad); + tkschedule_lfsr(tks.rtk, ad + BLOCKBYTES, k, SKINNY128_384_ROUNDS); + tkschedule_perm(tks.rtk); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + UPDATE_CTR(tks.tk1); + SET_DOMAIN(tks, 0x18); + } else if (adlen > BLOCKBYTES) { // Left-over partial double block + adlen -= BLOCKBYTES; + XOR_BLOCK(state, state, ad); + memcpy(pad, ad + BLOCKBYTES, adlen); + memset(pad + adlen, 0x00, 15 - adlen); + pad[15] = adlen; + tkschedule_lfsr(tks.rtk, pad, k, SKINNY128_384_ROUNDS); + tkschedule_perm(tks.rtk); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + UPDATE_CTR(tks.tk1); + SET_DOMAIN(tks, 0x1A); + } else if (adlen == BLOCKBYTES) { // Left-over complete single block + XOR_BLOCK(state, state, ad); + SET_DOMAIN(tks, 0x18); + } else { // Left-over partial single block + for(int i = 0; i < (int)adlen; i++) + state[i] ^= ad[i]; + state[15] ^= adlen; // Padding + SET_DOMAIN(tks, 0x1A); + } + tkschedule_lfsr(tks.rtk, npub, k, SKINNY128_384_ROUNDS); + tkschedule_perm(tks.rtk); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + } + // ----------------- Process the associated data ----------------- + + // ----------------- Process the ciphertext ----------------- + clen -= TAGBYTES; + memset(tks.tk1, 0x00, KEYBYTES/2); + tks.tk1[0] = 0x01; // Init the 56-bit LFSR counter + if (clen == 0) { + UPDATE_CTR(tks.tk1); + SET_DOMAIN(tks, 0x15); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + } else { // Process all blocks except the last + SET_DOMAIN(tks, 0x04); + while (clen > BLOCKBYTES) { + RHO_INV(state,c,m); + UPDATE_CTR(tks.tk1); + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + c += BLOCKBYTES; + m += BLOCKBYTES; + clen -= BLOCKBYTES; + } + // Pad and process the last block + UPDATE_CTR(tks.tk1); + if (clen < BLOCKBYTES) { // Last message double block is partial + for(int i = 0; i < (int)clen; i++) { + m[i] = c[i] ^ (state[i] >> 1) ^ (state[i] & 0x80) ^ (state[i] << 7); + state[i] ^= m[i]; + } + state[15] ^= (u8)clen; // Padding + SET_DOMAIN(tks, 0x15); + } else { // Last message double block is full + RHO_INV(state,c,m); + SET_DOMAIN(tks, 0x14); + } + tkschedule_perm_tk1(tks.rtk1, tks.tk1); + skinny128_384(state, tks.rtk, state, tks.rtk1); + } + // ----------------- Process the plaintext ----------------- + + // ----------------- Generate and check the tag ----------------- + G(state,state); + tmp = 0; + for(int i = 0; i < TAGBYTES; i++) + tmp |= state[i] ^ c[clen+i]; // Constant-time tag comparison + // ----------------- Generate and check the tag ----------------- + + return tmp; +} \ No newline at end of file diff --git a/romulus/Implementations/crypto_aead/romulusn1v12/armcortexm/romulus.h b/romulus/Implementations/crypto_aead/romulusn1v12/armcortexm/romulus.h new file mode 100644 index 0000000..4c0e141 --- /dev/null +++ b/romulus/Implementations/crypto_aead/romulusn1v12/armcortexm/romulus.h @@ -0,0 +1,68 @@ +#ifndef ROMULUSN1_H_ +#define ROMULUSN1_H_ + +#include "skinny128.h" + +typedef unsigned char u8; +typedef unsigned int u32; +typedef struct { + u8 tk1[16]; //to manipulate tk1 in a byte-wise manner + u32 rtk1[32]; //to avoid recomputation of the tk schedule + u32 rtk[4*SKINNY128_384_ROUNDS];//all round tweakeys +} skinny_128_384_tks; + +#define TAGBYTES 16 +#define KEYBYTES 16 +#define BLOCKBYTES 16 + +#define SET_DOMAIN(tks, domain) ((tks).tk1[7] = (domain)) + +//G as defined in the Romulus specification in a 32-bit word-wise manner +#define G(x,y) ({ \ + tmp = ((u32*)(y))[0]; \ + ((u32*)(x))[0] = (tmp >> 1 & 0x7f7f7f7f) ^ ((tmp ^ (tmp << 7)) & 0x80808080); \ + tmp = ((u32*)(y))[1]; \ + ((u32*)(x))[1] = (tmp >> 1 & 0x7f7f7f7f) ^ ((tmp ^ (tmp << 7)) & 0x80808080); \ + tmp = ((u32*)(y))[2]; \ + ((u32*)(x))[2] = (tmp >> 1 & 0x7f7f7f7f) ^ ((tmp ^ (tmp << 7)) & 0x80808080); \ + tmp = ((u32*)(y))[3]; \ + ((u32*)(x))[3] = (tmp >> 1 & 0x7f7f7f7f) ^ ((tmp ^ (tmp << 7)) & 0x80808080); \ +}) + +//update the counter in tk1 in a 32-bit word-wise manner +#define UPDATE_CTR(tk1) ({ \ + tmp = ((u32*)(tk1))[1]; \ + ((u32*)(tk1))[1] = (tmp << 1) & 0x00ffffff; \ + ((u32*)(tk1))[1] |= (((u32*)(tk1))[0] >> 31); \ + ((u32*)(tk1))[1] |= tmp & 0xff000000; \ + ((u32*)(tk1))[0] <<= 1; \ + if ((tmp >> 23) & 0x01) \ + ((u32*)(tk1))[0] ^= 0x95; \ +}) + +//x <- y ^ z for 128-bit blocks +#define XOR_BLOCK(x,y,z) ({ \ + ((u32*)(x))[0] = ((u32*)(y))[0] ^ ((u32*)(z))[0]; \ + ((u32*)(x))[1] = ((u32*)(y))[1] ^ ((u32*)(z))[1]; \ + ((u32*)(x))[2] = ((u32*)(y))[2] ^ ((u32*)(z))[2]; \ + ((u32*)(x))[3] = ((u32*)(y))[3] ^ ((u32*)(z))[3]; \ +}) + + +//Rho as defined in the Romulus specification +//use pad as a tmp variable in case y = z +#define RHO(x,y,z) ({ \ + G(pad,x); \ + XOR_BLOCK(y, pad, z); \ + XOR_BLOCK(x, x, z); \ +}) + +//Rho inverse as defined in the Romulus specification +//use pad as a tmp variable in case y = z +#define RHO_INV(x, y, z) ({ \ + G(pad, x); \ + XOR_BLOCK(z, pad, y); \ + XOR_BLOCK(x, x, z); \ +}) + +#endif // ROMULUSN1_H_ \ No newline at end of file diff --git a/romulus/Implementations/crypto_aead/romulusn1v12/armcortexm/skinny128.h b/romulus/Implementations/crypto_aead/romulusn1v12/armcortexm/skinny128.h new file mode 100644 index 0000000..4c8f956 --- /dev/null +++ b/romulus/Implementations/crypto_aead/romulusn1v12/armcortexm/skinny128.h @@ -0,0 +1,17 @@ +#ifndef SKINNY128_H_ +#define SKINNY128_H_ + +typedef unsigned char u8; +typedef unsigned int u32; + +#define SKINNY128_128_ROUNDS 40 +#define SKINNY128_256_ROUNDS 48 +#define SKINNY128_384_ROUNDS 56 + +extern void skinny128_384(u8* ctext, const u32* tk, const u8* ptext, const u32* rtk1); +extern void tkschedule_lfsr(u32* rtk, const u8* tk2, const u8* tk3, const int rounds); +extern void tkschedule_perm(u32* rtk); +extern void tkschedule_perm_tk1(u32* rtk1, const u8* tk1); + + +#endif // SKINNY128_H_ \ No newline at end of file diff --git a/romulus/Implementations/crypto_aead/romulusn1v12/armcortexm/skinny128.s b/romulus/Implementations/crypto_aead/romulusn1v12/armcortexm/skinny128.s new file mode 100644 index 0000000..dcd4852 --- /dev/null +++ b/romulus/Implementations/crypto_aead/romulusn1v12/armcortexm/skinny128.s @@ -0,0 +1,1974 @@ +/******************************************************************************* +* ARM assembly implementation of fixsliced SKINNY-128-384. +* +* For more details, see the paper at: https:// +* +* @author Alexandre Adomnicai, Nanyang Technological University, +* alexandre.adomnicai@ntu.edu.sg +* +* @date May 2020 +*******************************************************************************/ + +.syntax unified +.thumb + +/******************************************************************************* +* applies P^2 on the tweakey state in a bitsliced manner +*******************************************************************************/ +.align 2 +p2: + movw r1, #0xcc00 + movt r1, #0xcc00 //r1 <- 0xcc00cc00 + movw r10, #0xcc00 + movt r10, #0x0033 //r10<- 0xcc000033 + and r11, r1, r6, ror #14 + bfi r11, r6, #16, #8 + and r12, r6, #0xcc000000 + orr r11, r11, r12, lsr #2 + and r12, r10, r6 + orr r11, r11, r12, lsr #8 + and r12, r6, #0x00cc0000 + orr r6, r11, r12, lsr #18 + and r11, r1, r7, ror #14 + bfi r11, r7, #16, #8 + and r12, r7, #0xcc000000 + orr r11, r11, r12, lsr #2 + and r12, r10, r7 + orr r11, r11, r12, lsr #8 + and r12, r7, #0x00cc0000 + orr r7, r11, r12, lsr #18 + and r11, r1, r8, ror #14 + bfi r11, r8, #16, #8 + and r12, r8, #0xcc000000 + orr r11, r11, r12, lsr #2 + and r12, r10, r8 + orr r11, r11, r12, lsr #8 + and r12, r8, #0x00cc0000 + orr r8, r11, r12, lsr #18 + and r11, r1, r9, ror #14 + bfi r11, r9, #16, #8 + and r12, r9, #0xcc000000 + orr r11, r11, r12, lsr #2 + and r12, r10, r9 + orr r11, r11, r12, lsr #8 + and r12, r9, #0x00cc0000 + orr r9, r11, r12, lsr #18 + bx lr + +/******************************************************************************* +* applies P^4 on the tweakey state in a bitsliced manner +*******************************************************************************/ +.align 2 +p4: + str.w r14, [sp] //store r14 on the stack + movw r14, #0x00cc + movt r14, #0xcc00 //r14<- 0xcc0000cc + movw r12, #0xcc00 + movt r12, #0x3300 //r12<- 0x3300cc00 + movw r11, #0x00cc + movt r11, #0x00cc //r11<- 0x00cc00cc + and r10, r14, r6, ror #22 + and r1, r12, r6, ror #16 + orr r10, r10, r1 + and r1, r6, r11 + orr r10, r10, r1, lsr #2 + movw r1, #0xcc33 //r1 <- 0x0000cc33 + and r6, r6, r1 + orr r6, r10, r6, ror #24 + and r10, r14, r7, ror #22 + and r1, r12, r7, ror #16 + orr r10, r10, r1 + and r1, r7, r11 + orr r10, r10, r1, lsr #2 + movw r1, #0xcc33 //r1 <- 0x0000cc33 + and r7, r7, r1 + orr r7, r10, r7, ror #24 + and r10, r14, r8, ror #22 + and r1, r12, r8, ror #16 + orr r10, r10, r1 + and r1, r8, r11 + orr r10, r10, r1, lsr #2 + movw r1, #0xcc33 //r1 <- 0x0000cc33 + and r8, r8, r1 + orr r8, r10, r8, ror #24 + and r10, r14, r9, ror #22 + ldr.w r14, [sp] //restore r14 + and r12, r12, r9, ror #16 + orr r10, r10, r12 + and r12, r9, r11 + orr r10, r10, r12, lsr #2 + movw r12, #0xcc33 //r1 <- 0x0000cc33 + and r9, r9, r12 + orr r9, r10, r9, ror #24 + bx lr + +/******************************************************************************* +* applies P^6 on the tweakey state in a bitsliced manner +*******************************************************************************/ +.align 2 +p6: + movw r1, #0x3333 //r1 <- 0x00003333 + movw r12, #0x00cc + movt r12, #0x3300 //r12<- 0x330000cc + and r10, r6, r1, ror #8 // --- permute r6 6 times + and r11, r12, r6, ror #24 + orr r11, r11, r10, ror #6 + and r10, r1, r6, ror #10 + orr r11, r11, r10 + and r10, r6, #0x000000cc + orr r11, r11, r10, lsl #14 + and r10, r6, #0x00003300 + orr r6, r11, r10, lsl #2 // permute r6 6 times --- + and r10, r7, r1, ror #8 // --- permute r7 6 times + and r11, r12, r7, ror #24 + orr r11, r11, r10, ror #6 + and r10, r1, r7, ror #10 + orr r11, r11, r10 + and r10, r7, #0x000000cc + orr r11, r11, r10, lsl #14 + and r10, r7, #0x00003300 + orr r7, r11, r10, lsl #2 // permute r7 6 times --- + and r10, r8, r1, ror #8 // --- permute r8 6 times + and r11, r12, r8, ror #24 + orr r11, r11, r10, ror #6 + and r10, r1, r8, ror #10 + orr r11, r11, r10 + and r10, r8, #0x000000cc + orr r11, r11, r10, lsl #14 + and r10, r8, #0x00003300 + orr r8, r11, r10, lsl #2 // permute r8 6 times --- + and r10, r9, r1, ror #8 // --- permute r9 6 times + and r11, r12, r9, ror #24 + orr r11, r11, r10, ror #6 + and r10, r1, r9, ror #10 + orr r11, r11, r10 + and r10, r9, #0x000000cc + orr r11, r11, r10, lsl #14 + and r10, r9, #0x00003300 // permute r9 6 times --- + orr r9, r11, r10, lsl #2 + bx lr + +/******************************************************************************* +* applies P^8 on the tweakey state in a bitsliced manner +*******************************************************************************/ +.align 2 +p8: + movw r12, #0x3333 //r12<- 0x00003333 + movw r1, #0x0000 + movt r1, #0x33cc //r1 <- 0x33cc0000 + and r10, r6, r1 // --- permute r6 8 times + and r11, r1, r6, ror #8 + orr r11, r11, r10, ror #24 + and r10, r6, r12, lsl #2 + orr r11, r11, r10, ror #26 + and r10, r6, r12, lsl #8 + orr r6, r11, r10, lsr #6 // permute r6 8 times --- + and r10, r7, r1 // --- permute r7 8 times + and r11, r1, r7, ror #8 + orr r11, r11, r10, ror #24 + and r10, r7, r12, lsl #2 + orr r11, r11, r10, ror #26 + and r10, r7, r12, lsl #8 + orr r7, r11, r10, lsr #6 // permute r7 8 times --- + and r10, r8, r1 // --- permute r8 8 times + and r11, r1, r8, ror #8 + orr r11, r11, r10, ror #24 + and r10, r8, r12, lsl #2 + orr r11, r11, r10, ror #26 + and r10, r8, r12, lsl #8 + orr r8, r11, r10, lsr #6 // permute r8 8 times --- + and r10, r9, r1 // --- permute r9 8 times + and r11, r1, r9, ror #8 + orr r11, r11, r10, ror #24 + and r10, r9, r12, lsl #2 + orr r11, r11, r10, ror #26 + and r10, r9, r12, lsl #8 + orr r9, r11, r10, lsr #6 // permute r9 8 times --- + bx lr + +/******************************************************************************* +* applies P^10 on the tweakey state in a bitsliced manner +*******************************************************************************/ +.align 2 +p10: + movw r12, #0x0033 + movt r12, #0x3300 //r12<- 0x33000033 + movw r1, #0xcc33 //r1 <- 0x0000cc33 + and r10, r6, r1, ror #8 // --- permute r6 10 times + and r11, r12, r6, ror #26 + orr r11, r11, r10, ror #8 + and r10, r6, r12, ror #24 + orr r11, r11, r10, ror #22 + and r10, r6, #0x00330000 + orr r11, r11, r10, lsr #14 + and r10, r6, #0x0000cc00 + orr r6, r11, r10, lsr #2 // permute r6 10 times --- + and r10, r7, r1, ror #8 // --- permute r6 10 times + and r11, r12, r7, ror #26 + orr r11, r11, r10, ror #8 + and r10, r7, r12, ror #24 + orr r11, r11, r10, ror #22 + and r10, r7, #0x00330000 + orr r11, r11, r10, lsr #14 + and r10, r7, #0x0000cc00 + orr r7, r11, r10, lsr #2 // permute r6 10 times --- + and r10, r8, r1, ror #8 // --- permute r6 10 times + and r11, r12, r8, ror #26 + orr r11, r11, r10, ror #8 + and r10, r8, r12, ror #24 + orr r11, r11, r10, ror #22 + and r10, r8, #0x00330000 + orr r11, r11, r10, lsr #14 + and r10, r8, #0x0000cc00 + orr r8, r11, r10, lsr #2 // permute r6 10 times --- + and r10, r9, r1, ror #8 // --- permute r6 10 times + and r11, r12, r9, ror #26 + orr r11, r11, r10, ror #8 + and r10, r9, r12, ror #24 + orr r11, r11, r10, ror #22 + and r10, r9, #0x00330000 + orr r11, r11, r10, lsr #14 + and r10, r9, #0x0000cc00 + orr r9, r11, r10, lsr #2 // permute r6 10 times --- + bx lr + +/******************************************************************************* +* applies P^12 on the tweakey state in a bitsliced manner +*******************************************************************************/ +.align 2 +p12: + str.w r14, [sp] //store r14 on the stack + movw r14, #0xcc33 //r14<- 0x0000cc33 + movw r12, #0x00cc + movt r12, #0x00cc //r12<- 0x00cc00cc + movw r1, #0x3300 + movt r1, #0xcc00 //r1 <- 0xcc003300 + and r10, r14, r6, ror #8 // --- permute r6 12 times + and r11, r12, r6, ror #30 + orr r11, r11, r10 + and r10, r1, r6, ror #16 + orr r11, r11, r10 + movw r10, #0xcccc //r10<- 0x0000cccc + and r10, r6, r10, ror #8 + orr r6, r11, r10, ror #10 // permute r6 12 times --- + and r10, r14, r7, ror #8 // --- permute r7 12 times + and r11, r12, r7, ror #30 + orr r11, r11, r10 + and r10, r1, r7, ror #16 + orr r11, r11, r10 + movw r10, #0xcccc //r10<- 0x0000cccc + and r10, r7, r10, ror #8 + orr r7, r11, r10, ror #10 // permute r7 12 times --- + and r10, r14, r8, ror #8 // --- permute r8 12 times + and r11, r12, r8, ror #30 + orr r11, r11, r10 + and r10, r1, r8, ror #16 + orr r11, r11, r10 + movw r10, #0xcccc //r10<- 0x0000cccc + and r10, r8, r10, ror #8 + orr r8, r11, r10, ror #10 // permute r8 12 times --- + and r10, r14, r9, ror #8 // --- permute r9 12 times + and r11, r12, r9, ror #30 + orr r11, r11, r10 + and r10, r1, r9, ror #16 + ldr.w r14, [sp] + orr r11, r11, r10 + movw r10, #0xcccc //r10<- 0x0000cccc + and r10, r9, r10, ror #8 + orr r9, r11, r10, ror #10 // permute r9 12 times --- + bx lr + +/******************************************************************************* +* applies P^14 on the tweakey state in a bitsliced manner +*******************************************************************************/ +.align 2 +p14: + movw r1, #0xcc00 + movt r1, #0x0033 //r1 <- 0x0033cc00 + movw r12, #0xcc00 + movt r12, #0xcc00 //r12<- 0x33003300 + and r10, r1, r6, ror #24 // --- permute r6 14 times + and r11, r6, #0x00000033 + orr r11, r10, r11, ror #14 + and r10, r6, #0x33000000 + orr r11, r11, r10, ror #30 + and r10, r6, #0x00ff0000 + orr r11, r11, r10, ror #16 + and r10, r6, r12 + orr r6, r11, r10, ror #18 // permute r6 14 times --- + and r10, r1, r7, ror #24 // --- permute r7 14 times + and r11, r7, #0x00000033 + orr r11, r10, r11, ror #14 + and r10, r7, #0x33000000 + orr r11, r11, r10, ror #30 + and r10, r7, #0x00ff0000 + orr r11, r11, r10, ror #16 + and r10, r7, r12 + orr r7, r11, r10, ror #18 // permute r7 14 times --- + and r10, r1, r8, ror #24 // --- permute r8 14 times + and r11, r8, #0x00000033 + orr r11, r10, r11, ror #14 + and r10, r8, #0x33000000 + orr r11, r11, r10, ror #30 + and r10, r8, #0x00ff0000 + orr r11, r11, r10, ror #16 + and r10, r8, r12 + orr r8, r11, r10, ror #18 // permute r8 14 times --- + and r10, r1, r9, ror #24 // --- permute r9 14 times + and r11, r9, #0x00000033 + orr r11, r10, r11, ror #14 + and r10, r9, #0x33000000 + orr r11, r11, r10, ror #30 + and r10, r9, #0x00ff0000 + orr r11, r11, r10, ror #16 + and r10, r9, r12 + orr r9, r11, r10, ror #18 // permute r9 14 times --- + bx lr + +.align 2 +packing: + eor r12, r2, r2, lsr #3 + and r12, r12, r10 + eor r2, r2, r12 + eor r2, r2, r12, lsl #3 //SWAPMOVE(r2, r2, 0x0a0a0a0a, 3) + eor r12, r3, r3, lsr #3 + and r12, r12, r10 + eor r3, r3, r12 + eor r3, r3, r12, lsl #3 //SWAPMOVE(r3, r3, 0x0a0a0a0a, 3) + eor r12, r4, r4, lsr #3 + and r12, r12, r10 + eor r4, r4, r12 + eor r4, r4, r12, lsl #3 //SWAPMOVE(r4, r4, 0x0a0a0a0a, 3) + eor r12, r5, r5, lsr #3 + and r12, r12, r10 + eor r5, r5, r12 + eor r5, r5, r12, lsl #3 //SWAPMOVE(r5, r5, 0x0a0a0a0a, 3) + eor r12, r2, r4, lsr #2 + and r12, r12, r11 + eor r2, r2, r12 + eor r4, r4, r12, lsl #2 //SWAPMOVE(r4, r2, 0x30303030, 2) + eor r12, r2, r3, lsr #4 + and r12, r12, r11, lsr #2 + eor r2, r2, r12 + eor r3, r3, r12, lsl #4 //SWAPMOVE(r3, r2, 0x0c0c0c0c, 4) + eor r12, r2, r5, lsr #6 + and r12, r12, r11, lsr #4 + eor r2, r2, r12 + eor r5, r5, r12, lsl #6 //SWAPMOVE(r5, r2, 0x03030303, 6) + eor r12, r4, r3, lsr #2 + and r12, r12, r11, lsr #2 + eor r4, r4, r12 + eor r3, r3, r12, lsl #2 //SWAPMOVE(r3, r4, 0x0c0c0c0c, 2) + eor r12, r4, r5, lsr #4 + and r12, r12, r11, lsr #4 + eor r4, r4, r12 + eor r5, r5, r12, lsl #4 //SWAPMOVE(r5, r4, 0x03030303, 4) + eor r12, r3, r5, lsr #2 + and r12, r12, r11, lsr #4 + eor r3, r3, r12 + eor r5, r5, r12, lsl #2 //SWAPMOVE(r5, r3, 0x03030303, 2) + bx lr + +/****************************************************************************** +* Compute LFSR2(TK2) ^ LFSR3(TK3) for all rounds. +* Performing both at the same time allows to save some memory accesses. +******************************************************************************/ +@ void tkschedule_lfsr(u32* tk, const u8* tk2, const u8* tk3, const int rounds) +.global tkschedule_lfsr +.type tkschedule_lfsr,%function +.align 2 +tkschedule_lfsr: + push {r0-r12, r14} + ldr.w r3, [r1, #8] //load tk2 (3rd word) + ldr.w r4, [r1, #4] //load tk2 (2nd word) + ldr.w r5, [r1, #12] //load tk2 (4th word) + ldr.w r12, [r1] //load tk2 (1st word) + mov r1, r2 //move tk3 address in r1 + mov r2, r12 //move 1st tk2 word in r2 + movw r10, #0x0a0a + movt r10, #0x0a0a //r10 <- 0x0a0a0a0a + movw r11, #0x3030 + movt r11, #0x3030 //r7 <- 0x30303030 + bl packing //pack tk2 + mov r6, r2 //move tk2 from r2-r5 to r6-r9 + mov r7, r3 //move tk2 from r2-r5 to r6-r9 + mov r8, r4 //move tk2 from r2-r5 to r6-r9 + mov r9, r5 //move tk2 from r2-r5 to r6-r9 + ldr.w r3, [r1, #8] //load tk3 (3rd word) + ldr.w r4, [r1, #4] //load tk3 (2nd word) + ldr.w r5, [r1, #12] //load tk3 (4th) word) + ldr.w r2, [r1] //load tk3 (1st) word) + bl packing //pack tk3 + eor r10, r10, r10, lsl #4 //r10<- 0xaaaaaaaa + ldr.w r1, [sp, #12] //load loop counter in r1 + eor r11, r2, r6 //tk2 ^ tk3 (1st word) + eor r12, r3, r7 //tk2 ^ tk3 (2nd word) + strd r11, r12, [r0], #8 //store in tk + eor r11, r4, r8 //tk2 ^ tk3 (3rd word) + eor r12, r5, r9 //tk2 ^ tk3 (4th word) + strd r11, r12, [r0], #8 //store in tk + loop: + and r12, r8, r10 // --- apply LFSR2 to tk2 + eor r12, r12, r6 + and r14, r10, r12, lsl #1 + and r12, r12, r10 + orr r6, r14, r12, lsr #1 // apply LFSR2 to tk2 --- + and r12, r3, r10 // --- apply LFSR3 to tk3 + eor r12, r5, r12, lsr #1 + and r14, r10, r12, lsl #1 + and r12, r12, r10 + orr r5, r14, r12, lsr #1 // apply LFSR3 to tk3 --- + eor r11, r5, r7 //tk2 ^ tk3 (1st word) + eor r12, r2, r8 //tk2 ^ tk3 (2nd word) + strd r11, r12, [r0], #8 //store in tk + eor r11, r3, r9 //tk2 ^ tk3 (3rd word) + eor r12, r4, r6 //tk2 ^ tk3 (4th word) + strd r11, r12, [r0], #24 //store in tk + and r12, r9, r10 // --- apply LFSR2 to tk2 + eor r12, r12, r7 + and r14, r10, r12, lsl #1 + and r12, r12, r10 + orr r7, r14, r12, lsr #1 // apply LFSR2 to tk2 --- + and r12, r2, r10 // --- apply LFSR3 to tk3 + eor r12, r4, r12, lsr #1 + and r14, r10, r12, lsl #1 + and r12, r12, r10 + orr r4, r14, r12, lsr #1 // apply LFSR3 to tk3 --- + eor r11, r4, r8 //tk2 ^ tk3 (1st word) + eor r12, r5, r9 //tk2 ^ tk3 (2nd word) + strd r11, r12, [r0], #8 //store in tk + eor r11, r2, r6 //tk2 ^ tk3 (3rd word) + eor r12, r3, r7 //tk2 ^ tk3 (4th word) + strd r11, r12, [r0], #24 //store in tk + and r12, r6, r10 // --- apply LFSR2 to tk2 + eor r12, r12, r8 + and r14, r10, r12, lsl #1 + and r12, r12, r10 + orr r8, r14, r12, lsr #1 // apply LFSR2 to tk2 --- + and r12, r5, r10 // --- apply LFSR3 to tk3 + eor r12, r3, r12, lsr #1 + and r14, r10, r12, lsl #1 + and r12, r12, r10 + orr r3, r14, r12, lsr #1 // apply LFSR3 to tk3 --- + eor r11, r3, r9 //tk2 ^ tk3 (1st word) + eor r12, r4, r6 //tk2 ^ tk3 (2nd word) + strd r11, r12, [r0], #8 //store in tk + eor r11, r5, r7 //tk2 ^ tk3 (3rd word) + eor r12, r2, r8 //tk2 ^ tk3 (4th word) + strd r11, r12, [r0], #24 //store in tk + and r12, r7, r10 // --- apply LFSR2 to tk2 + eor r12, r12, r9 + and r14, r10, r12, lsl #1 + and r12, r12, r10 + orr r9, r14, r12, lsr #1 // apply LFSR2 to tk2 --- + and r12, r4, r10 // --- apply LFSR3 to tk3 + eor r12, r2, r12, lsr #1 + and r14, r10, r12, lsl #1 + and r12, r12, r10 + orr r2, r14, r12, lsr #1 // apply LFSR3 to tk3 --- + eor r11, r2, r6 //tk2 ^ tk3 (1st word) + eor r12, r3, r7 //tk2 ^ tk3 (2nd word) + strd r11, r12, [r0], #8 //store in tk + eor r11, r4, r8 //tk2 ^ tk3 (3rd word) + eor r12, r5, r9 //tk2 ^ tk3 (4th word) + strd r11, r12, [r0], #24 //store in tk + subs.w r1, r1, #8 //decrease loop counter by 8 + bne loop + pop {r0-r12, r14} + bx lr + +/****************************************************************************** +* Applies the permutation P and add the round constants to all round tweakeys. +******************************************************************************/ +@ void tkschedule_perm(u32* tk) +.global tkschedule_perm +.type tkschedule_perm,%function +.align 2 +tkschedule_perm: + push {r0-r12, lr} + sub.w sp, #4 //to store r14 in subroutines + ldm r0, {r6-r9} //load tk + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r6, r6, r10 //tk &= 0xf0f0f0f0 (1st word) + and r7, r7, r10 //tk &= 0xf0f0f0f0 (2nd word) + and r8, r8, r10 //tk &= 0xf0f0f0f0 (3rd word) + and r9, r9, r10 //tk &= 0xf0f0f0f0 (4th word) + eor r8, r8, #0x00000004 //add rconst + eor r9, r9, #0x00000040 //add rconst + mvn r9, r9 //to remove a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 1st round + strd r6, r7, [r0], #8 //store 2nd half tk for 1st round + ldm r0, {r6-r9} //load tk + bl p2 //apply the permutation twice + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #26 //ror and mask to match fixslicing + and r12, r10, r7, ror #26 //ror and mask to match fixslicing + strd r11, r12, [r0], #8 //store 1st half tk for 2nd round + and r11, r10, r8, ror #26 //ror and mask to match fixslicing + and r12, r10, r9, ror #26 //ror and mask to match fixslicing + eor r11, r11, #0x10000000 //add rconst + eor r11, r11, #0x00000100 //add rconst + eor r12, r12, #0x00000100 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 2nd round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #28 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #12 + and r11, r10, r7, ror #28 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #12 + and r11, r10, r8, ror #28 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #12 + and r11, r10, r9, ror #28 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #12 //ror and masks to match fixslicing --- + eor r7, r7, #0x04000000 //add rconst + eor r8, r8, #0x44000000 //add rconst + eor r9, r9, #0x04000000 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 3rd round + strd r6, r7, [r0], #8 //store 2nd half tk for 3rd round + ldm r0, {r6-r9} //load tk + bl p4 //apply the permutation 4 times + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6, ror #16 //ror and mask to match fixslicing + and r12, r10, r7, ror #16 //ror and mask to match fixslicing + eor r11, r11, #0x00400000 //add rconst + eor r12, r12, #0x00400000 //add rconst + strd r11, r12, [r0, #24] //store 2nd half tk for 5th round + and r11, r10, r8, ror #16 //ror and mask to match fixslicing + and r12, r10, r9, ror #16 //ror and mask to match fixslicing + eor r11, r11, #0x00440000 //add rconst + eor r12, r12, #0x00500000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 5th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #14 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #6 + and r11, r10, r7, ror #14 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #6 + and r11, r10, r8, ror #14 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #6 + and r11, r10, r9, ror #14 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #6 //ror and masks to match fixslicing --- + eor r6, r6, #0x00100000 //add rconst + eor r7, r7, #0x00100000 //add rconst + eor r8, r8, #0x00100000 //add rconst + eor r8, r8, #0x00000001 //add rconst + eor r9, r9, #0x00100000 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 4th round + strd r8, r9, [r0], #24 //store 2nd half tk for 4th round + ldm r0, {r6-r9} //load tk + bl p6 //apply the permutation 6 times + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #10 //ror and mask to match fixslicing + and r12, r10, r7, ror #10 //ror and mask to match fixslicing + eor r11, r11, #0x01000000 //add rconst + eor r12, r12, #0x01000000 //add rconst + strd r11, r12, [r0], #8 //store 1st half tk for 6th round + and r11, r10, r8, ror #10 //ror and mask to match fixslicing + and r12, r10, r9, ror #10 //ror and mask to match fixslicing + eor r11, r11, #0x01400000 //add rconst + eor r11, r11, #0x00001000 //add rconst + eor r12, r12, #0x00400000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 6th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #12 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #28 + and r11, r10, r7, ror #12 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #28 + and r11, r10, r8, ror #12 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #28 + and r11, r10, r9, ror #12 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #28 //ror and masks to match fixslicing --- + eor r6, r6, #0x00000400 //add rconst + eor r7, r7, #0x00000400 //add rconst + eor r8, r8, #0x01000000 //add rconst + eor r8, r8, #0x00004000 //add rconst + eor r9, r9, #0x01000000 //add rconst + eor r9, r9, #0x00000400 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 7th round + strd r6, r7, [r0], #8 //store 2nd half tk for 7th round + ldm r0, {r6-r9} //load tk + bl p8 //apply the permutation 8 times + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6 //ror and mask to match fixslicing + and r12, r10, r7 //ror and mask to match fixslicing + eor r12, r12, #0x00000040 //add rconst + strd r11, r12, [r0, #24] //store 2nd half tk for 9th round + and r11, r10, r8 //ror and mask to match fixslicing + and r12, r10, r9 //ror and mask to match fixslicing + eor r11, r11, #0x00000054 //add rconst + eor r12, r12, #0x00000050 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 9th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #30 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #22 + and r11, r10, r7, ror #30 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #22 + and r11, r10, r8, ror #30 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #22 + and r11, r10, r9, ror #30 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #22 //ror and masks to match fixslicing --- + eor r6 ,r6, #0x00000010 + eor r8, r8, #0x00010000 + eor r8, r8, #0x00000410 + eor r9, r9, #0x00000410 + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 8th round + strd r8, r9, [r0], #24 //store 2nd half tk for 8th round + ldm r0, {r6-r9} //load tk + bl p10 //apply the permutation 10 times + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #26 //ror and mask to match fixslicing + and r12, r10, r7, ror #26 //ror and mask to match fixslicing + eor r11, r11, #0x00000100 //add rconst + eor r12, r12, #0x00000100 //add rconst + strd r11, r12, [r0], #8 //store 1st half tk for 10th round + and r11, r10, r8, ror #26 //ror and mask to match fixslicing + and r12, r10, r9, ror #26 //ror and mask to match fixslicing + eor r11, r11, #0x10000000 //add rconst + eor r11, r11, #0x00000140 //add rconst + eor r12, r12, #0x00000100 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 10th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #28 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #12 + and r11, r10, r7, ror #28 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #12 + and r11, r10, r8, ror #28 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #12 + and r11, r10, r9, ror #28 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #12 //ror and masks to match fixslicing --- + eor r6, r6, #0x04000000 //add rconst + eor r7, r7, #0x04000000 //add rconst + eor r8, r8, #0x44000000 //add rconst + eor r9, r9, #0x00000100 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 11th round + strd r6, r7, [r0], #8 //store 2nd half tk for 11th round + ldm r0, {r6-r9} //load tk + bl p12 //apply the permutation 4 times + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6, ror #16 //ror and mask to match fixslicing + and r12, r10, r7, ror #16 //ror and mask to match fixslicing + eor r11, r11, #0x00400000 //add rconst + strd r11, r12, [r0, #24] //store 2nd half tk for 13th round + and r11, r10, r8, ror #16 //ror and mask to match fixslicing + and r12, r10, r9, ror #16 //ror and mask to match fixslicing + eor r11, r11, #0x00140000 //add rconst + eor r12, r12, #0x00500000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 13th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #14 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #6 + and r11, r10, r7, ror #14 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #6 + and r11, r10, r8, ror #14 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #6 + and r11, r10, r9, ror #14 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #6 //ror and masks to match fixslicing --- + eor r6, r6, #0x00100000 //add rconst + eor r7, r7, #0x00100000 //add rconst + eor r8, r8, #0x04000000 //add rconst + eor r8, r8, #0x00000001 //add rconst + eor r9, r9, #0x04000000 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 12th round + strd r8, r9, [r0], #24 //store 2nd half tk for 12th round + ldm r0, {r6-r9} //load tk + bl p14 //apply the permutation 6 times + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #10 //ror and mask to match fixslicing + and r12, r10, r7, ror #10 //ror and mask to match fixslicing + strd r11, r12, [r0], #8 //store 1st half tk for 14th round + and r11, r10, r8, ror #10 //ror and mask to match fixslicing + and r12, r10, r9, ror #10 //ror and mask to match fixslicing + eor r11, r11, #0x01400000 //add rconst + eor r11, r11, #0x00001000 //add rconst + eor r12, r12, #0x01400000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 14th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #12 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #28 + and r11, r10, r7, ror #12 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #28 + and r11, r10, r8, ror #12 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #28 + and r11, r10, r9, ror #12 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #28 //ror and masks to match fixslicing --- + eor r7, r7, #0x00000400 //add rconst + eor r8, r8, #0x01000000 //add rconst + eor r8, r8, #0x00004400 //add rconst + eor r9, r9, #0x00000400 //add const + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 15th round + strd r6, r7, [r0], #8 //store 2nd half tk for 15th round + ldm r0, {r6-r9} //load tk + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6 //ror and mask to match fixslicing + and r12, r10, r7 //ror and mask to match fixslicing + eor r11, r11, #0x00000040 //add rconst + eor r12, r12, #0x00000040 //add rconst + strd r11, r12, [r0, #24] //store 2nd half tk for 17th round + and r11, r10, r8 //ror and mask to match fixslicing + and r12, r10, r9 //ror and mask to match fixslicing + eor r11, r11, #0x00000004 //add rconst + eor r12, r12, #0x00000050 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 17th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #30 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #22 + and r11, r10, r7, ror #30 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #22 + and r11, r10, r8, ror #30 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #22 + and r11, r10, r9, ror #30 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #22 //ror and masks to match fixslicing --- + eor r6 ,r6, #0x00000010 + eor r7 ,r7, #0x00000010 + eor r8, r8, #0x00000010 + eor r8, r8, #0x00010000 + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 16th round + strd r8, r9, [r0], #24 //store 2nd half tk for 16th round + ldm r0, {r6-r9} //load tk + bl p2 //apply the permutation twice + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #26 //ror and mask to match fixslicing + and r12, r10, r7, ror #26 //ror and mask to match fixslicing + eor r11, r11, #0x00000100 //add rconst + strd r11, r12, [r0], #8 //store 1st half tk for 18th round + and r11, r10, r8, ror #26 //ror and mask to match fixslicing + and r12, r10, r9, ror #26 //ror and mask to match fixslicing + eor r11, r11, #0x10000000 //add rconst + eor r11, r11, #0x00000140 //add rconst + eor r12, r12, #0x00000040 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 18th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #28 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #12 + and r11, r10, r7, ror #28 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #12 + and r11, r10, r8, ror #28 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #12 + and r11, r10, r9, ror #28 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #12 //ror and masks to match fixslicing --- + eor r7, r7, #0x04000000 //add rconst + eor r8, r8, #0x40000000 //add rconst + eor r8, r8, #0x00000100 //add rconst + eor r9, r9, #0x04000000 //add rconst + eor r9, r9, #0x00000100 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 19th round + strd r6, r7, [r0], #8 //store 2nd half tk for 19th round + ldm r0, {r6-r9} //load tk + bl p4 //apply the permutation 4 times + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6, ror #16 //ror and mask to match fixslicing + and r12, r10, r7, ror #16 //ror and mask to match fixslicing + eor r12, r12, #0x00400000 //add rconst + strd r11, r12, [r0, #24] //store 2nd half tk for 21th round + and r11, r10, r8, ror #16 //ror and mask to match fixslicing + and r12, r10, r9, ror #16 //ror and mask to match fixslicing + eor r11, r11, #0x00440000 //add rconst + eor r12, r12, #0x00100000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 21th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #14 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #6 + and r11, r10, r7, ror #14 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #6 + and r11, r10, r8, ror #14 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #6 + and r11, r10, r9, ror #14 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #6 //ror and masks to match fixslicing --- + eor r6, r6, #0x00100000 //add rconst + eor r8, r8, #0x04100000 //add rconst + eor r8, r8, #0x00000001 //add rconst + eor r9, r9, #0x00100000 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 20th round + strd r8, r9, [r0], #24 //store 2nd half tk for 20th round + ldm r0, {r6-r9} //load tk + bl p6 //apply the permutation 6 times + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #10 //ror and mask to match fixslicing + and r12, r10, r7, ror #10 //ror and mask to match fixslicing + eor r11, r11, #0x01000000 //add rconst + eor r12, r12, #0x01000000 //add rconst + strd r11, r12, [r0], #8 //store 1st half tk for 22th round + and r11, r10, r8, ror #10 //ror and mask to match fixslicing + and r12, r10, r9, ror #10 //ror and mask to match fixslicing + eor r11, r11, #0x00400000 //add rconst + eor r11, r11, #0x00001000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 22th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #12 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #28 + and r11, r10, r7, ror #12 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #28 + and r11, r10, r8, ror #12 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #28 + and r11, r10, r9, ror #12 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #28 //ror and masks to match fixslicing --- + eor r6, r6, #0x00000400 //add rconst + eor r8, r8, #0x00004000 //add rconst + eor r9, r9, #0x01000000 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 23th round + strd r6, r7, [r0], #8 //store 2nd half tk for 23th round + ldm r0, {r6-r9} //load tk + bl p8 //apply the permutation 8 times + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6 //ror and mask to match fixslicing + and r12, r10, r7 //ror and mask to match fixslicing + strd r11, r12, [r0, #24] //store 2nd half tk for 25th round + and r11, r10, r8 //ror and mask to match fixslicing + and r12, r10, r9 //ror and mask to match fixslicing + eor r11, r11, #0x00000014 //add rconst + eor r12, r12, #0x00000040 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 25th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #30 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #22 + and r11, r10, r7, ror #30 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #22 + and r11, r10, r8, ror #30 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #22 + and r11, r10, r9, ror #30 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #22 //ror and masks to match fixslicing --- + eor r8, r8, #0x00010400 + eor r9, r9, #0x00000400 + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 24th round + strd r8, r9, [r0], #24 //store 2nd half tk for 24th round + ldm r0, {r6-r9} //load tk + bl p10 //apply the permutation 10 times + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #26 //ror and mask to match fixslicing + and r12, r10, r7, ror #26 //ror and mask to match fixslicing + strd r11, r12, [r0], #8 //store 1st half tk for 26th round + and r11, r10, r8, ror #26 //ror and mask to match fixslicing + and r12, r10, r9, ror #26 //ror and mask to match fixslicing + eor r11, r11, #0x10000000 //add rconst + eor r11, r11, #0x00000100 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 26th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #28 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #12 + and r11, r10, r7, ror #28 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #12 + and r11, r10, r8, ror #28 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #12 + and r11, r10, r9, ror #28 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #12 //ror and masks to match fixslicing --- + eor r7, r7, #0x04000000 //add rconst + eor r8, r8, #0x40000000 //add rconst + eor r9, r9, #0x04000000 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 27th round + strd r6, r7, [r0], #8 //store 2nd half tk for 27th round + ldm r0, {r6-r9} //load tk + bl p12 //apply the permutation 4 times + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6, ror #16 //ror and mask to match fixslicing + and r12, r10, r7, ror #16 //ror and mask to match fixslicing + eor r12, r12, #0x00400000 //add rconst + strd r11, r12, [r0, #24] //store 2nd half tk for 29th round + and r11, r10, r8, ror #16 //ror and mask to match fixslicing + and r12, r10, r9, ror #16 //ror and mask to match fixslicing + eor r11, r11, #0x00440000 //add rconst + eor r12, r12, #0x00500000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 29th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #14 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #6 + and r11, r10, r7, ror #14 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #6 + and r11, r10, r8, ror #14 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #6 + and r11, r10, r9, ror #14 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #6 //ror and masks to match fixslicing --- + eor r6, r6, #0x00100000 //add rconst + eor r8, r8, #0x00100000 //add rconst + eor r8, r8, #0x00000001 //add rconst + eor r9, r9, #0x00100000 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 28th round + strd r8, r9, [r0], #24 //store 2nd half tk for 28th round + ldm r0, {r6-r9} //load tk + bl p14 //apply the permutation 6 times + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #10 //ror and mask to match fixslicing + and r12, r10, r7, ror #10 //ror and mask to match fixslicing + eor r11, r11, #0x01000000 //add rconst + eor r12, r12, #0x01000000 //add rconst + strd r11, r12, [r0], #8 //store 1st half tk for 30th round + and r11, r10, r8, ror #10 //ror and mask to match fixslicing + and r12, r10, r9, ror #10 //ror and mask to match fixslicing + eor r11, r11, #0x01400000 //add rconst + eor r11, r11, #0x00001000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 30th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #12 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #28 + and r11, r10, r7, ror #12 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #28 + and r11, r10, r8, ror #12 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #28 + and r11, r10, r9, ror #12 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #28 //ror and masks to match fixslicing --- + eor r6, r6, #0x00000400 //add rconst + eor r7, r7, #0x00000400 //add rconst + eor r8, r8, #0x00004000 //add rconst + eor r9, r9, #0x01000000 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 31th round + strd r6, r7, [r0], #8 //store 2nd half tk for 31th round + ldm r0, {r6-r9} //load tk + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6 //ror and mask to match fixslicing + and r12, r10, r7 //ror and mask to match fixslicing + strd r11, r12, [r0, #24] //store 2nd half tk for 33th round + and r11, r10, r8 //ror and mask to match fixslicing + and r12, r10, r9 //ror and mask to match fixslicing + eor r11, r11, #0x00000014 //add rconst + eor r12, r12, #0x00000050 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 33th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #30 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #22 + and r11, r10, r7, ror #30 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #22 + and r11, r10, r8, ror #30 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #22 + and r11, r10, r9, ror #30 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #22 //ror and masks to match fixslicing --- + eor r6 ,r6, #0x00000010 + eor r8, r8, #0x00010400 + eor r9, r9, #0x00000400 + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 32th round + strd r8, r9, [r0], #24 //store 2nd half tk for 32th round + ldm r0, {r6-r9} //load tk + bl p2 //apply the permutation twice + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #26 //ror and mask to match fixslicing + and r12, r10, r7, ror #26 //ror and mask to match fixslicing + strd r11, r12, [r0], #8 //store 1st half tk for 34th round + and r11, r10, r8, ror #26 //ror and mask to match fixslicing + and r12, r10, r9, ror #26 //ror and mask to match fixslicing + eor r11, r11, #0x10000000 //add rconst + eor r11, r11, #0x00000140 //add rconst + eor r12, r12, #0x00000100 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 34th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #28 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #12 + and r11, r10, r7, ror #28 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #12 + and r11, r10, r8, ror #28 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #12 + and r11, r10, r9, ror #28 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #12 //ror and masks to match fixslicing --- + eor r7, r7, #0x04000000 //add rconst + eor r8, r8, #0x44000000 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 35th round + strd r6, r7, [r0], #8 //store 2nd half tk for 35th round + ldm r0, {r6-r9} //load tk + bl p4 //apply the permutation 4 times + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6, ror #16 //ror and mask to match fixslicing + and r12, r10, r7, ror #16 //ror and mask to match fixslicing + eor r11, r11, #0x00400000 //add rconst + strd r11, r12, [r0, #24] //store 2nd half tk for 37th round + and r11, r10, r8, ror #16 //ror and mask to match fixslicing + and r12, r10, r9, ror #16 //ror and mask to match fixslicing + eor r11, r11, #0x00440000 //add rconst + eor r12, r12, #0x00500000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 37th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #14 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #6 + and r11, r10, r7, ror #14 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #6 + and r11, r10, r8, ror #14 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #6 + and r11, r10, r9, ror #14 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #6 //ror and masks to match fixslicing --- + eor r6, r6, #0x00100000 //add rconst + eor r7, r7, #0x00100000 //add rconst + eor r8, r8, #0x00000001 //add rconst + eor r9, r9, #0x00100000 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 36th round + strd r8, r9, [r0], #24 //store 2nd half tk for 36th round + ldm r0, {r6-r9} //load tk + bl p6 //apply the permutation 6 times + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #10 //ror and mask to match fixslicing + and r12, r10, r7, ror #10 //ror and mask to match fixslicing + eor r12, r12, #0x01000000 //add rconst + strd r11, r12, [r0], #8 //store 1st half tk for 38th round + and r11, r10, r8, ror #10 //ror and mask to match fixslicing + and r12, r10, r9, ror #10 //ror and mask to match fixslicing + eor r11, r11, #0x01400000 //add rconst + eor r11, r11, #0x00001000 //add rconst + eor r12, r12, #0x00400000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 38th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #12 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #28 + and r11, r10, r7, ror #12 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #28 + and r11, r10, r8, ror #12 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #28 + and r11, r10, r9, ror #12 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #28 //ror and masks to match fixslicing --- + eor r6, r6, #0x00000400 //add rconst + eor r7, r7, #0x00000400 //add rconst + eor r8, r8, #0x01000000 + eor r8, r8, #0x00004000 //add rconst + eor r9, r9, #0x00000400 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 39th round + strd r6, r7, [r0], #8 //store 2nd half tk for 39th round + ldm r0, {r6-r9} //load tk + bl p8 //apply the permutation 8 times + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6 //ror and mask to match fixslicing + and r12, r10, r7 //ror and mask to match fixslicing + eor r12, r12, #0x00000040 //add rconst + strd r11, r12, [r0, #24] //store 2nd half tk for 41th round + and r11, r10, r8 //ror and mask to match fixslicing + and r12, r10, r9 //ror and mask to match fixslicing + eor r11, r11, #0x00000014 //add rconst + eor r12, r12, #0x00000010 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 41th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #30 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #22 + and r11, r10, r7, ror #30 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #22 + and r11, r10, r8, ror #30 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #22 + and r11, r10, r9, ror #30 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #22 //ror and masks to match fixslicing --- + eor r6, r6, #0x00000010 + eor r8, r8, #0x00010000 + eor r8, r8, #0x00000010 + eor r9, r9, #0x00000400 + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 40th round + strd r8, r9, [r0], #24 //store 2nd half tk for 40th round + ldm r0, {r6-r9} //load tk + bl p10 //apply the permutation 10 times + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #26 //ror and mask to match fixslicing + and r12, r10, r7, ror #26 //ror and mask to match fixslicing + eor r11, r11, #0x00000100 //add rconst + strd r11, r12, [r0], #8 //store 1st half tk for 42th round + and r11, r10, r8, ror #26 //ror and mask to match fixslicing + and r12, r10, r9, ror #26 //ror and mask to match fixslicing + eor r11, r11, #0x10000000 //add rconst + eor r11, r11, #0x00000040 //add rconst + eor r12, r12, #0x00000100 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 42th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #28 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #12 + and r11, r10, r7, ror #28 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #12 + and r11, r10, r8, ror #28 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #12 + and r11, r10, r9, ror #28 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #12 //ror and masks to match fixslicing --- + eor r8, r8, #0x44000000 //add rconst + eor r9, r9, #0x00000100 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 43th round + strd r6, r7, [r0], #8 //store 2nd half tk for 43th round + ldm r0, {r6-r9} //load tk + bl p12 //apply the permutation 4 times + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6, ror #16 //ror and mask to match fixslicing + and r12, r10, r7, ror #16 //ror and mask to match fixslicing + eor r11, r11, #0x00400000 //add rconst + strd r11, r12, [r0, #24] //store 2nd half tk for 45th round + and r11, r10, r8, ror #16 //ror and mask to match fixslicing + and r12, r10, r9, ror #16 //ror and mask to match fixslicing + eor r11, r11, #0x00040000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 45th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #14 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #6 + and r11, r10, r7, ror #14 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #6 + and r11, r10, r8, ror #14 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #6 + and r11, r10, r9, ror #14 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #6 //ror and masks to match fixslicing --- + eor r7, r7, #0x00100000 //add rconst + eor r8, r8, #0x04000000 //add rconst + eor r8, r8, #0x00000001 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 44th round + strd r8, r9, [r0], #24 //store 2nd half tk for 44th round + ldm r0, {r6-r9} //load tk + bl p14 //apply the permutation 6 times + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #10 //ror and mask to match fixslicing + and r12, r10, r7, ror #10 //ror and mask to match fixslicing + strd r11, r12, [r0], #8 //store 1st half tk for 46th round + and r11, r10, r8, ror #10 //ror and mask to match fixslicing + and r12, r10, r9, ror #10 //ror and mask to match fixslicing + eor r11, r11, #0x00001000 //add rconst + eor r12, r12, #0x01400000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 46th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #12 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #28 + and r11, r10, r7, ror #12 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #28 + and r11, r10, r8, ror #12 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #28 + and r11, r10, r9, ror #12 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #28 //ror and masks to match fixslicing --- + eor r8, r8, #0x01000000 //add rconst + eor r8, r8, #0x00004400 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 47th round + strd r6, r7, [r0], #8 //store 2nd half tk for 47th round + ldm r0, {r6-r9} //load tk + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6 //ror and mask to match fixslicing + and r12, r10, r7 //ror and mask to match fixslicing + eor r11, r11, #0x00000040 //add rconst + strd r11, r12, [r0, #24] //store 2nd half tk for 49th round + and r11, r10, r8 //ror and mask to match fixslicing + and r12, r10, r9 //ror and mask to match fixslicing + eor r11, r11, #0x00000004 //add rconst + eor r12, r12, #0x00000040 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 49th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #30 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #22 + and r11, r10, r7, ror #30 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #22 + and r11, r10, r8, ror #30 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #22 + and r11, r10, r9, ror #30 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #22 //ror and masks to match fixslicing --- + eor r7 ,r7, #0x00000010 + eor r8, r8, #0x00010000 + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 48th round + strd r8, r9, [r0], #24 //store 2nd half tk for 48th round + ldm r0, {r6-r9} //load tk + bl p2 //apply the permutation twice + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #26 //ror and mask to match fixslicing + and r12, r10, r7, ror #26 //ror and mask to match fixslicing + strd r11, r12, [r0], #8 //store 1st half tk for 50th round + and r11, r10, r8, ror #26 //ror and mask to match fixslicing + and r12, r10, r9, ror #26 //ror and mask to match fixslicing + eor r11, r11, #0x10000000 //add rconst + eor r11, r11, #0x00000100 //add rconst + eor r12, r12, #0x00000140 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 50th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #28 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #12 + and r11, r10, r7, ror #28 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #12 + and r11, r10, r8, ror #28 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #12 + and r11, r10, r9, ror #28 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #12 //ror and masks to match fixslicing --- + eor r7, r7, #0x04000000 //add rconst + eor r8, r8, #0x44000000 //add rconst + eor r8, r8, #0x00000100 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 51th round + strd r6, r7, [r0], #8 //store 2nd half tk for 51th round + ldm r0, {r6-r9} //load tk + bl p4 //apply the permutation 4 times + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6, ror #16 //ror and mask to match fixslicing + and r12, r10, r7, ror #16 //ror and mask to match fixslicing + eor r11, r11, #0x00400000 //add rconst + strd r11, r12, [r0, #24] //store 2nd half tk for 53th round + and r11, r10, r8, ror #16 //ror and mask to match fixslicing + and r12, r10, r9, ror #16 //ror and mask to match fixslicing + eor r11, r11, #0x00040000 //add rconst + eor r12, r12, #0x00500000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 53th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #14 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #6 + and r11, r10, r7, ror #14 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #6 + and r11, r10, r8, ror #14 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #6 + and r11, r10, r9, ror #14 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #6 //ror and masks to match fixslicing --- + eor r6, r6, #0x00100000 //add rconst + eor r7, r7, #0x00100000 //add rconst + eor r8, r8, #0x00000001 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 52th round + strd r8, r9, [r0], #24 //store 2nd half tk for 52th round + ldm r0, {r6-r9} //load tk + bl p6 //apply the permutation 6 times + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #10 //ror and mask to match fixslicing + and r12, r10, r7, ror #10 //ror and mask to match fixslicing + strd r11, r12, [r0], #8 //store 1st half tk for 54th round + and r11, r10, r8, ror #10 //ror and mask to match fixslicing + and r12, r10, r9, ror #10 //ror and mask to match fixslicing + eor r11, r11, #0x01400000 //add rconst + eor r11, r11, #0x00001000 //add rconst + eor r12, r12, #0x00400000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 54th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #12 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #28 + and r11, r10, r7, ror #12 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #28 + and r11, r10, r8, ror #12 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #28 + and r11, r10, r9, ror #12 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #28 //ror and masks to match fixslicing --- + eor r7, r7, #0x00000400 //add rconst + eor r8, r8, #0x01000000 + eor r8, r8, #0x00004000 //add rconst + eor r9, r9, #0x00000400 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 55th round + strd r6, r7, [r0], #8 //store 2nd half tk for 55th round + ldm r0, {r6-r9} //load tk + bl p8 //apply the permutation 8 times + movw r10, #0x3030 + movt r10, #0x3030 //r10<- 0x30303030 + and r11, r10, r6, ror #30 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #22 + and r11, r10, r7, ror #30 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #22 + and r11, r10, r8, ror #30 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #22 + and r11, r10, r9, ror #30 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #22 //ror and masks to match fixslicing --- + eor r6, r6, #0x00000010 + eor r8, r8, #0x00010000 + eor r8, r8, #0x00000010 + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 56th round + strd r8, r9, [r0], #24 //store 2nd half tk for 56th round + add.w sp, #4 + pop {r0-r12, lr} + bx lr + +/****************************************************************************** +* Applies the permutations P^2, ..., P^14 for rounds 0 to 16. Since P^16=Id, we +* don't need more calculations as no LFSR is applied to TK1. +******************************************************************************/ +@ void tkschedule_perm_tk1(u32* tk, const u8* key) +.global tkschedule_perm_tk1 +.type tkschedule_perm_tk1,%function +.align 2 +tkschedule_perm_tk1: + push {r0-r12, lr} + ldr.w r3, [r1, #8] //load tk1 (3rd word) + ldr.w r4, [r1, #4] //load tk1 (2nd word) + ldr.w r5, [r1, #12] //load tk1 (4th word) + ldr.w r2, [r1] //load tk1 (1st word) + movw r10, #0x0a0a + movt r10, #0x0a0a //r6 <- 0x0a0a0a0a + movw r11, #0x3030 + movt r11, #0x3030 //r7 <- 0x30303030 + bl packing //pack tk1 + mov r6, r2 //move tk1 from r2-r5 to r6-r9 + mov r7, r3 //move tk1 from r2-r5 to r6-r9 + mov r8, r4 //move tk1 from r2-r5 to r6-r9 + mov r9, r5 //move tk1 from r2-r5 to r6-r9 + movw r2, #0xf0f0 + movt r2, #0xf0f0 //r2<- 0xf0f0f0f0 + and r11, r8, r2 //tk &= 0xf0f0f0f0 (3rd word) + and r12, r9, r2 //tk &= 0xf0f0f0f0 (4th word) + strd r11, r12, [r0], #8 //store 1st half tk for 1st round + and r11, r6, r2 //tk &= 0xf0f0f0f0 (1st word) + and r12, r7, r2 //tk &= 0xf0f0f0f0 (2nd word) + strd r11, r12, [r0], #8 //store 2nd half tk for 1st round + + bl p2 //apply the permutation twice + movw r3, #0x0303 + movt r3, #0x0303 //r3<- 0x03030303 + and r11, r3, r6, ror #28 //--- ror and masks to match fixslicing + and r12, r6, r3, lsl #6 + orr r12, r11, r12, ror #12 + str.w r12, [r0, #8] + and r11, r3, r7, ror #28 + and r12, r7, r3, lsl #6 + orr r12, r11, r12, ror #12 + str.w r12, [r0, #12] + and r11, r3, r9, ror #28 + and r12, r9, r3, lsl #6 + orr r12, r11, r12, ror #12 + str.w r12, [r0, #4] + and r11, r3, r8, ror #28 + and r12, r8, r3, lsl #6 + orr r12, r11, r12, ror #12 + str.w r12, [r0], #16 //ror and masks to match fixslicing --- + bl p2 //apply the permutation 4 times + and r11, r2, r6, ror #16 //ror and mask to match fixslicing + and r12, r2, r7, ror #16 //ror and mask to match fixslicing + strd r11, r12, [r0, #8] //store 2nd half tk for 5th round + and r11, r2, r8, ror #16 //ror and mask to match fixslicing + and r12, r2, r9, ror #16 //ror and mask to match fixslicing + strd r11, r12, [r0], #16 //store 1st half tk for 5th round + bl p2 //apply the permutation 6 times + and r11, r3, r6, ror #12 //--- ror and masks to match fixslicing + and r12, r6, r3, lsl #6 + orr r12, r11, r12, ror #28 + str.w r12, [r0, #8] + and r11, r3, r7, ror #12 + and r12, r7, r3, lsl #6 + orr r12, r11, r12, ror #28 + str.w r12, [r0, #12] + and r11, r3, r9, ror #12 + and r12, r9, r3, lsl #6 + orr r12, r11, r12, ror #28 + str.w r12, [r0, #4] + and r11, r3, r8, ror #12 + and r12, r8, r3, lsl #6 + orr r12, r11, r12, ror #28 + str.w r12, [r0], #16 //ror and masks to match fixslicing --- + bl p2 //apply the permutation 8 times + and r11, r2, r6 //ror and mask to match fixslicing + and r12, r2, r7 //ror and mask to match fixslicing + strd r11, r12, [r0, #8] //store 2nd half tk for 9th round + and r11, r2, r8 //ror and mask to match fixslicing + and r12, r2, r9 //ror and mask to match fixslicing + strd r11, r12, [r0], #16 //store 1st half tk for 9th round + bl p2 //apply the permutation 10 + and r11, r3, r6, ror #28 //--- ror and masks to match fixslicing + and r12, r6, r3, lsl #6 + orr r12, r11, r12, ror #12 + str.w r12, [r0, #8] + and r11, r3, r7, ror #28 + and r12, r7, r3, lsl #6 + orr r12, r11, r12, ror #12 + str.w r12, [r0, #12] + and r11, r3, r9, ror #28 + and r12, r9, r3, lsl #6 + orr r12, r11, r12, ror #12 + str.w r12, [r0, #4] + and r11, r3, r8, ror #28 + and r12, r8, r3, lsl #6 + orr r12, r11, r12, ror #12 + str.w r12, [r0], #16 //ror and masks to match fixslicing --- + bl p2 //apply the permutation 12 times + and r11, r2, r6, ror #16 //ror and mask to match fixslicing + and r12, r2, r7, ror #16 //ror and mask to match fixslicing + strd r11, r12, [r0, #8] //store 2nd half tk for 5th round + and r11, r2, r8, ror #16 //ror and mask to match fixslicing + and r12, r2, r9, ror #16 //ror and mask to match fixslicing + strd r11, r12, [r0], #16 //store 1st half tk for 5th round + bl p2 //apply the permutation 14 times + and r11, r3, r6, ror #12 //--- ror and masks to match fixslicing + and r12, r6, r3, lsl #6 + orr r12, r11, r12, ror #28 + str.w r12, [r0, #8] + and r11, r3, r7, ror #12 + and r12, r7, r3, lsl #6 + orr r12, r11, r12, ror #28 + str.w r12, [r0, #12] + and r11, r3, r9, ror #12 + and r12, r9, r3, lsl #6 + orr r12, r11, r12, ror #28 + str.w r12, [r0, #4] + and r11, r3, r8, ror #12 + and r12, r8, r3, lsl #6 + orr r12, r11, r12, ror #28 + str.w r12, [r0] //ror and masks to match fixslicing --- + pop {r0-r12, lr} + bx lr + +.align 2 +quadruple_round: + orr r8, r2, r3 + eor r5, r5, r8 + mvn r5, r5 + eor r8, r3, r4, lsr #1 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8, lsl #1 //SWAPMOVE(r4, r3, 0x55555555, 1); + eor r8, r4, r5, lsr #1 + and r8, r8, r6 + eor r4, r4, r8 + eor r5, r5, r8, lsl #1 //SWAPMOVE(r5, r4, 0x55555555, 1); + orr r8, r4, r5 + eor r3, r3, r8 + mvn r3, r3 + eor r8, r2, r3, lsr #1 + and r8, r8, r6 + eor r2, r2, r8 + eor r3, r3, r8, lsl #1 //SWAPMOVE(r3, r2, 0x55555555, 1); + eor r8, r5, r2, lsr #1 + and r8, r8, r6 + eor r5, r5, r8 + eor r2, r2, r8, lsl #1 //SWAPMOVE(r2, r5, 0x55555555, 1); + orr r8, r2, r3 + eor r5, r5, r8 + mvn r5, r5 + eor r8, r3, r4, lsr #1 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8, lsl #1 //SWAPMOVE(r4, r3, 0x55555555, 1); + eor r8, r4, r5, lsr #1 + and r8, r8, r6 + eor r4, r4, r8 + eor r5, r5, r8, lsl #1 //SWAPMOVE(r5, r4, 0x55555555, 1); + orr r8, r4, r5 + eor r3, r3, r8 + eor r8, r2, r5 + and r8, r8, r6 + eor r2, r2, r8 + eor r5, r5, r8 //SWAPMOVE(r5, r2, 0x55555555, 0); + ldmia.w r1!, {r8-r11} //load rkeys in r8,...,r11 + eor r2, r2, r8 //add rtk_2_3 + rconst + eor r3, r3, r9 //add rtk_2_3 + rconst + eor r4, r4, r10 //add rtk_2_3 + rconst + eor r5, r5, r11 //add rtk_2_3 + rconst + ldmia.w r0!,{r8-r11} + eor r2, r2, r8 //add rtk_1 + eor r3, r3, r9 //add rtk_1 + eor r4, r4, r10 //add rtk_1 + eor r5, r5, r11 //add rtk_1 + and r8, r7, r2, ror #30 // --- mixcolumns 0 --- + eor r2, r2, r8, ror #24 + and r8, r7, r2, ror #18 + eor r2, r2, r8, ror #2 + and r8, r7, r2, ror #6 + eor r2, r2, r8, ror #4 + and r8, r7, r3, ror #30 + eor r3, r3, r8, ror #24 + and r8, r7, r3, ror #18 + eor r3, r3, r8, ror #2 + and r8, r7, r3, ror #6 + eor r3, r3, r8, ror #4 + and r8, r7, r4, ror #30 + eor r4, r4, r8, ror #24 + and r8, r7, r4, ror #18 + eor r4, r4, r8, ror #2 + and r8, r7, r4, ror #6 + eor r4, r4, r8, ror #4 + and r8, r7, r5, ror #30 + eor r5, r5, r8, ror #24 + and r8, r7, r5, ror #18 + eor r5, r5, r8, ror #2 + and r8, r7, r5, ror #6 + eor r5, r5, r8, ror #4 + orr r8, r4, r5 + eor r3, r3, r8 + mvn r3, r3 + eor r8, r2, r3, lsr #1 + and r8, r8, r6 + eor r2, r2, r8 + eor r3, r3, r8, lsl #1 //SWAPMOVE(r3, r2, 0x55555555, 1); + eor r8, r5, r2, lsr #1 + and r8, r8, r6 + eor r5, r5, r8 + eor r2, r2, r8, lsl #1 //SWAPMOVE(r2, r5, 0x55555555, 1); + orr r8, r2, r3 + eor r5, r5, r8 + mvn r5, r5 + eor r8, r3, r4, lsr #1 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8, lsl #1 //SWAPMOVE(r4, r3, 0x55555555, 1); + eor r8, r4, r5, lsr #1 + and r8, r8, r6 + eor r4, r4, r8 + eor r5, r5, r8, lsl #1 //SWAPMOVE(r5, r4, 0x55555555, 1); + orr r8, r4, r5 + eor r3, r3, r8 + mvn r3, r3 + eor r8, r2, r3, lsr #1 + and r8, r8, r6 + eor r2, r2, r8 + eor r3, r3, r8, lsl #1 //SWAPMOVE(r3, r2, 0x55555555, 1); + eor r8, r5, r2, lsr #1 + and r8, r8, r6 + eor r5, r5, r8 + eor r2, r2, r8, lsl #1 //SWAPMOVE(r2, r5, 0x55555555, 1); + orr r8, r2, r3 + eor r5, r5, r8 + eor r8, r3, r4 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8 //SWAPMOVE(r4, r3, 0x55555555, 0); + ldmia.w r1!, {r8-r11} //load rkeys in r8,...,r11 + eor r2, r2, r8 //add rkey + rconst + eor r3, r3, r9 //add rkey + rconst + eor r4, r4, r10 //add rkey + rconst + eor r5, r5, r11 //add rkey + rconst + and r8, r7, r2, ror #16 // --- mixcolumns 1 --- + eor r2, r2, r8, ror #30 + and r8, r7, r2, ror #28 + eor r2, r2, r8 + and r8, r7, r2, ror #16 + eor r2, r2, r8, ror #2 + and r8, r7, r3, ror #16 + eor r3, r3, r8, ror #30 + and r8, r7, r3, ror #28 + eor r3, r3, r8 + and r8, r7, r3, ror #16 + eor r3, r3, r8, ror #2 + and r8, r7, r4, ror #16 + eor r4, r4, r8, ror #30 + and r8, r7, r4, ror #28 + eor r4, r4, r8 + and r8, r7, r4, ror #16 + eor r4, r4, r8, ror #2 + and r8, r7, r5, ror #16 + eor r5, r5, r8, ror #30 + and r8, r7, r5, ror #28 + eor r5, r5, r8 + and r8, r7, r5, ror #16 + eor r5, r5, r8, ror #2 + orr r8, r2, r3 + eor r5, r5, r8 + mvn r5, r5 + eor r8, r3, r4, lsr #1 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8, lsl #1 //SWAPMOVE(r4, r3, 0x55555555, 1); + eor r8, r4, r5, lsr #1 + and r8, r8, r6 + eor r4, r4, r8 + eor r5, r5, r8, lsl #1 //SWAPMOVE(r5, r4, 0x55555555, 1); + orr r8, r4, r5 + eor r3, r3, r8 + mvn r3, r3 + eor r8, r2, r3, lsr #1 + and r8, r8, r6 + eor r2, r2, r8 + eor r3, r3, r8, lsl #1 //SWAPMOVE(r3, r2, 0x55555555, 1); + eor r8, r5, r2, lsr #1 + and r8, r8, r6 + eor r5, r5, r8 + eor r2, r2, r8, lsl #1 //SWAPMOVE(r2, r5, 0x55555555, 1); + orr r8, r2, r3 + eor r5, r5, r8 + mvn r5, r5 + eor r8, r3, r4, lsr #1 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8, lsl #1 //SWAPMOVE(r4, r3, 0x55555555, 1); + eor r8, r4, r5, lsr #1 + and r8, r8, r6 + eor r4, r4, r8 + eor r5, r5, r8, lsl #1 //SWAPMOVE(r5, r4, 0x55555555, 1); + orr r8, r4, r5 + eor r3, r3, r8 + eor r8, r2, r5 + and r8, r8, r6 + eor r2, r2, r8 + eor r5, r5, r8 //SWAPMOVE(r5, r2, 0x55555555, 0); + ldmia.w r1!, {r8-r11} //load rkeys in r8,...,r11 + eor r2, r2, r8 //add rtk_2_3 + rconst + eor r3, r3, r9 //add rtk_2_3 + rconst + eor r4, r4, r10 //add rtk_2_3 + rconst + eor r5, r5, r11 //add rtk_2_3 + rconst + ldmia.w r0!,{r8-r11} + eor r2, r2, r8 //add rtk_1 + eor r3, r3, r9 //add rtk_1 + eor r4, r4, r10 //add rtk_1 + eor r5, r5, r11 //add rtk_1 + and r8, r7, r2, ror #10 // --- mixcolumns 2 --- + eor r2, r2, r8, ror #4 + and r8, r7, r2, ror #6 + eor r2, r2, r8, ror #6 + and r8, r7, r2, ror #26 + eor r2, r2, r8 + and r8, r7, r3, ror #10 + eor r3, r3, r8, ror #4 + and r8, r7, r3, ror #6 + eor r3, r3, r8, ror #6 + and r8, r7, r3, ror #26 + eor r3, r3, r8 + and r8, r7, r4, ror #10 + eor r4, r4, r8, ror #4 + and r8, r7, r4, ror #6 + eor r4, r4, r8, ror #6 + and r8, r7, r4, ror #26 + eor r4, r4, r8 + and r8, r7, r5, ror #10 + eor r5, r5, r8, ror #4 + and r8, r7, r5, ror #6 + eor r5, r5, r8, ror #6 + and r8, r7, r5, ror #26 + eor r5, r5, r8 + orr r8, r4, r5 + eor r3, r3, r8 + mvn r3, r3 + eor r8, r2, r3, lsr #1 + and r8, r8, r6 + eor r2, r2, r8 + eor r3, r3, r8, lsl #1 //SWAPMOVE(r3, r2, 0x55555555, 1); + eor r8, r5, r2, lsr #1 + and r8, r8, r6 + eor r5, r5, r8 + eor r2, r2, r8, lsl #1 //SWAPMOVE(r2, r5, 0x55555555, 1); + orr r8, r2, r3 + eor r5, r5, r8 + mvn r5, r5 + eor r8, r3, r4, lsr #1 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8, lsl #1 //SWAPMOVE(r4, r3, 0x55555555, 1); + eor r8, r4, r5, lsr #1 + and r8, r8, r6 + eor r4, r4, r8 + eor r5, r5, r8, lsl #1 //SWAPMOVE(r5, r4, 0x55555555, 1); + orr r8, r4, r5 + eor r3, r3, r8 + mvn r3, r3 + eor r8, r2, r3, lsr #1 + and r8, r8, r6 + eor r2, r2, r8 + eor r3, r3, r8, lsl #1 //SWAPMOVE(r3, r2, 0x55555555, 1); + eor r8, r5, r2, lsr #1 + and r8, r8, r6 + eor r5, r5, r8 + eor r2, r2, r8, lsl #1 //SWAPMOVE(r2, r5, 0x55555555, 1); + orr r8, r2, r3 + eor r5, r5, r8 + eor r8, r3, r4 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8 //SWAPMOVE(r4, r3, 0x55555555, 0); + ldmia r1!, {r8-r11} //load rkeys in r8,...,r11 + eor r2, r2, r8 //add rkey + rconst + eor r3, r3, r9 //add rkey + rconst + eor r4, r4, r10 //add rkey + rconst + eor r5, r5, r11 //add rkey + rconst + and r8, r7, r2, ror #4 // --- mixcolumns 3 --- + eor r2, r2, r8, ror #26 + and r8, r7, r2 + eor r2, r2, r8, ror #4 + and r8, r7, r2, ror #4 + eor r2, r2, r8, ror #22 + and r8, r7, r3, ror #4 + eor r3, r3, r8, ror #26 + and r8, r7, r3 + eor r3, r3, r8, ror #4 + and r8, r7, r3, ror #4 + eor r3, r3, r8, ror #22 + and r8, r7, r4, ror #4 + eor r4, r4, r8, ror #26 + and r8, r7, r4 + eor r4, r4, r8, ror #4 + and r8, r7, r4, ror #4 + eor r4, r4, r8, ror #22 + and r8, r7, r5, ror #4 + eor r5, r5, r8, ror #26 + and r8, r7, r5 + eor r5, r5, r8, ror #4 + and r8, r7, r5, ror #4 + eor r5, r5, r8, ror #22 + bx lr + +/****************************************************************************** +* Encrypt a single block using fixsliced SKINNY-128-128. +******************************************************************************/ +@ void skinny128_384(u8* ctext, const u32* tk, const u8* ptext, const u32* rtk1) +.global skinny128_384 +.type skinny128_384,%function +.align 2 +skinny128_384: + push {r0-r12, r14} + mov.w r0, r3 + ldr.w r3, [r2, #8] + ldr.w r4, [r2, #4] + ldr.w r5, [r2, #12] + ldr.w r2, [r2] + movw r6, #0x0a0a + movt r6, #0x0a0a //r6 <- 0x0a0a0a0a + movw r7, #0x3030 + movt r7, #0x3030 //r7 <- 0x30303030 + eor r12, r2, r2, lsr #3 + and r12, r12, r6 + eor r2, r2, r12 + eor r2, r2, r12, lsl #3 //SWAPMOVE(r2, r2, 0x0a0a0a0a, 3) + eor r12, r3, r3, lsr #3 + and r12, r12, r6 + eor r3, r3, r12 + eor r3, r3, r12, lsl #3 //SWAPMOVE(r3, r3, 0x0a0a0a0a, 3) + eor r12, r4, r4, lsr #3 + and r12, r12, r6 + eor r4, r4, r12 + eor r4, r4, r12, lsl #3 //SWAPMOVE(r4, r4, 0x0a0a0a0a, 3) + eor r12, r5, r5, lsr #3 + and r12, r12, r6 + eor r5, r5, r12 + eor r5, r5, r12, lsl #3 //SWAPMOVE(r5, r5, 0x0a0a0a0a, 3) + eor r12, r2, r4, lsr #2 + and r12, r12, r7 + eor r2, r2, r12 + eor r4, r4, r12, lsl #2 //SWAPMOVE(r4, r2, 0x30303030, 2) + eor r12, r2, r3, lsr #4 + and r12, r12, r7, lsr #2 + eor r2, r2, r12 + eor r3, r3, r12, lsl #4 //SWAPMOVE(r3, r2, 0x0c0c0c0c, 4) + eor r12, r2, r5, lsr #6 + and r12, r12, r7, lsr #4 + eor r2, r2, r12 + eor r5, r5, r12, lsl #6 //SWAPMOVE(r5, r2, 0x03030303, 6) + eor r12, r4, r3, lsr #2 + and r12, r12, r7, lsr #2 + eor r4, r4, r12 + eor r3, r3, r12, lsl #2 //SWAPMOVE(r3, r4, 0x0c0c0c0c, 2) + eor r12, r4, r5, lsr #4 + and r12, r12, r7, lsr #4 + eor r4, r4, r12 + eor r5, r5, r12, lsl #4 //SWAPMOVE(r5, r4, 0x03030303, 4) + eor r12, r3, r5, lsr #2 + and r12, r12, r7, lsr #4 + eor r3, r3, r12 + eor r5, r5, r12, lsl #2 //SWAPMOVE(r5, r3, 0x03030303, 2) + movw r6, #0x5555 + movt r6, #0x5555 //r6 <- 0x55555555 + bl quadruple_round + bl quadruple_round + bl quadruple_round + bl quadruple_round + sub.w r0, #128 // rtk1 repeats every 16 rounds + bl quadruple_round + bl quadruple_round + bl quadruple_round + bl quadruple_round + sub.w r0, #128 // rtk1 repeats every 16 rounds + bl quadruple_round + bl quadruple_round + bl quadruple_round + bl quadruple_round + sub.w r0, #128 // rtk1 repeats every 16 rounds + bl quadruple_round + bl quadruple_round + movw r6, #0x0a0a + movt r6, #0x0a0a //r6 <- 0x0a0a0a0a + eor r10, r3, r5, lsr #2 + and r10, r10, r7, lsr #4 + eor r3, r3, r10 + eor r5, r5, r10, lsl #2 //SWAPMOVE(r5, r3, 0x03030303, 2) + eor r10, r4, r5, lsr #4 + and r10, r10, r7, lsr #4 + eor r4, r4, r10 + eor r5, r5, r10, lsl #4 //SWAPMOVE(r5, r4, 0x03030303, 4) + eor r10, r4, r3, lsr #2 + and r10, r10, r7, lsr #2 + eor r4, r4, r10 + eor r3, r3, r10, lsl #2 //SWAPMOVE(r3, r4, 0x0c0c0c0c, 2) + eor r10, r2, r5, lsr #6 + and r10, r10, r7, lsr #4 + eor r2, r2, r10 + eor r5, r5, r10, lsl #6 //SWAPMOVE(r5, r2, 0x03030303, 6) + eor r10, r2, r3, lsr #4 + and r10, r10, r7, lsr #2 + eor r2, r2, r10 + eor r3, r3, r10, lsl #4 //SWAPMOVE(r3, r2, 0x0c0c0c0c, 4) + eor r10, r2, r4, lsr #2 + and r10, r10, r7 + eor r2, r2, r10 + eor r4, r4, r10, lsl #2 //SWAPMOVE(r4, r2, 0x30303030, 2) + eor r10, r5, r5, lsr #3 + and r10, r10, r6 + eor r5, r5, r10 + eor r5, r5, r10, lsl #3 //SWAPMOVE(r5, r5, 0x0a0a0a0a, 3) + eor r10, r4, r4, lsr #3 + and r10, r10, r6 + eor r4, r4, r10 + eor r4, r4, r10, lsl #3 //SWAPMOVE(r4, r4, 0x0a0a0a0a, 3) + eor r10, r3, r3, lsr #3 + and r10, r10, r6 + eor r3, r3, r10 + eor r3, r3, r10, lsl #3 //SWAPMOVE(r3, r3, 0x0a0a0a0a, 3) + eor r10, r2, r2, lsr #3 + and r10, r10, r6 + eor r2, r2, r10 + eor r2, r2, r10, lsl #3 //SWAPMOVE(r2, r2, 0x0a0a0a0a, 3) + ldr.w r0, [sp], #4 + strd r2, r4, [r0] + strd r3, r5, [r0, #8] + pop {r1-r12,r14} + bx lr + \ No newline at end of file diff --git a/romulus/Implementations/crypto_aead/romulusn1v12/opt32/api.h b/romulus/Implementations/crypto_aead/romulusn1v12/opt32/api.h new file mode 100644 index 0000000..a4aa567 --- /dev/null +++ b/romulus/Implementations/crypto_aead/romulusn1v12/opt32/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/romulus/Implementations/crypto_aead/romulusn1v12/opt32/crypto_aead.h b/romulus/Implementations/crypto_aead/romulusn1v12/opt32/crypto_aead.h new file mode 100644 index 0000000..e2ca9b0 --- /dev/null +++ b/romulus/Implementations/crypto_aead/romulusn1v12/opt32/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 +); \ No newline at end of file diff --git a/romulus/Implementations/crypto_aead/romulusn1v12/opt32/encrypt.c b/romulus/Implementations/crypto_aead/romulusn1v12/opt32/encrypt.c new file mode 100644 index 0000000..071cf2a --- /dev/null +++ b/romulus/Implementations/crypto_aead/romulusn1v12/opt32/encrypt.c @@ -0,0 +1,270 @@ +#include "skinny128.h" +#include "tk_schedule.h" +#include "romulus.h" +#include +#include + +//Encryption and authentication using Romulus-N1 +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 i; + u32 tmp; + skinny_128_384_tks tks; + u8 state[BLOCKBYTES], pad[BLOCKBYTES]; + (void)nsec; + + // ----------------- Initialization ----------------- + *clen = mlen + TAGBYTES; + memset(tks.tk1, 0x00, KEYBYTES); + memset(state, 0x00, BLOCKBYTES); + tks.tk1[0] = 0x01; //56-bit LFSR counter + // ----------------- Initialization ----------------- + + // ----------------- Process the associated data ----------------- + //Handle the special case of no associated data + if (adlen == 0) { + UPDATE_CTR(tks.tk1); + SET_DOMAIN(tks, 0x1A); + precompute_rtk2_3(tks.rtk2_3, npub, k); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384(state, state, tks.rtk1, tks.rtk2_3); + } else { + // Process all double blocks except the last + SET_DOMAIN(tks, 0x08); + while (adlen > 2*BLOCKBYTES) { + UPDATE_CTR(tks.tk1); + XOR_BLOCK(state, state, ad); + precompute_rtk2_3(tks.rtk2_3, ad + BLOCKBYTES, k); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384(state, state, tks.rtk1, tks.rtk2_3); + UPDATE_CTR(tks.tk1); + ad += 2*BLOCKBYTES; + adlen -= 2*BLOCKBYTES; + } + //Pad and process the left-over blocks + UPDATE_CTR(tks.tk1); + if (adlen == 2*BLOCKBYTES) { + // Left-over complete double block + XOR_BLOCK(state, state, ad); + precompute_rtk2_3(tks.rtk2_3, ad + BLOCKBYTES, k); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384(state, state, tks.rtk1, tks.rtk2_3); + UPDATE_CTR(tks.tk1); + SET_DOMAIN(tks, 0x18); + } else if (adlen > BLOCKBYTES) { + // Left-over partial double block + adlen -= BLOCKBYTES; + XOR_BLOCK(state, state, ad); + memcpy(pad, ad + BLOCKBYTES, adlen); + memset(pad + adlen, 0x00, 15 - adlen); + pad[15] = adlen; + precompute_rtk2_3(tks.rtk2_3, pad, k); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384(state, state, tks.rtk1, tks.rtk2_3); + UPDATE_CTR(tks.tk1); + SET_DOMAIN(tks, 0x1A); + } else if (adlen == BLOCKBYTES) { + // Left-over complete single block + XOR_BLOCK(state, state, ad); + SET_DOMAIN(tks, 0x18); + } else { + // Left-over partial single block + for(i =0; i < (int)adlen; i++) + state[i] ^= ad[i]; + state[15] ^= adlen; + SET_DOMAIN(tks, 0x1A); + } + precompute_rtk2_3(tks.rtk2_3, npub, k); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384(state, state, tks.rtk1, tks.rtk2_3); + } + // ----------------- Process the associated data ----------------- + + // ----------------- Process the plaintext ----------------- + memset(tks.tk1, 0, KEYBYTES); + tks.tk1[0] = 0x01; //init the 56-bit LFSR counter + if (mlen == 0) { + UPDATE_CTR(tks.tk1); + SET_DOMAIN(tks, 0x15); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384(state, state, tks.rtk1, tks.rtk2_3); + } else { + //process all blocks except the last + SET_DOMAIN(tks, 0x04); + while (mlen > BLOCKBYTES) { + RHO(state,c,m); + UPDATE_CTR(tks.tk1); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384(state, state, tks.rtk1, tks.rtk2_3); + c += BLOCKBYTES; + m += BLOCKBYTES; + mlen -= BLOCKBYTES; + } + //pad and process the last block + UPDATE_CTR(tks.tk1); + if (mlen < BLOCKBYTES) { + for(i = 0; i < (int)mlen; i++) { + tmp = m[i]; //use of tmp variable just in case 'c = m' + c[i] = m[i] ^ (state[i] >> 1) ^ (state[i] & 0x80) ^ (state[i] << 7); + state[i] ^= (u8)tmp; + } + state[15] ^= (u8)mlen; //padding + SET_DOMAIN(tks, 0x15); + } else { + RHO(state,c,m); + SET_DOMAIN(tks, 0x14); + } + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384(state, state, tks.rtk1, tks.rtk2_3); + c += mlen; + } + // ----------------- Process the plaintext ----------------- + + // ----------------- Generate the tag ----------------- + G(state,state); + memcpy(c, state, TAGBYTES); + // ----------------- Generate the tag ----------------- + + return 0; +} + + +//Decryption and tag verification using Romulus-N1 +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 i; + u32 tmp; + skinny_128_384_tks tks; + u8 state[BLOCKBYTES], pad[BLOCKBYTES]; + (void)nsec; + + if (clen < TAGBYTES) + return -1; + + // ----------------- Initialization ----------------- + *mlen = clen - TAGBYTES; + memset(tks.tk1, 0x00, KEYBYTES); + memset(state, 0x00, BLOCKBYTES); + tks.tk1[0] = 0x01; //56-bit LFSR counter + // ----------------- Initialization ----------------- + + // ----------------- Process the associated data ----------------- + //Handle the special case of no associated data + if (adlen == 0) { + UPDATE_CTR(tks.tk1); + SET_DOMAIN(tks, 0x1A); + precompute_rtk2_3(tks.rtk2_3, npub, k); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384(state, state, tks.rtk1, tks.rtk2_3); + } else { + // Process all double blocks except the last + SET_DOMAIN(tks, 0x08); + while (adlen > 2*BLOCKBYTES) { + UPDATE_CTR(tks.tk1); + XOR_BLOCK(state, state, ad); + precompute_rtk2_3(tks.rtk2_3, ad + BLOCKBYTES, k); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384(state, state, tks.rtk1, tks.rtk2_3); + UPDATE_CTR(tks.tk1); + ad += 2*BLOCKBYTES; + adlen -= 2*BLOCKBYTES; + } + //Pad and process the left-over blocks + UPDATE_CTR(tks.tk1); + if (adlen == 2*BLOCKBYTES) { + // Left-over complete double block + XOR_BLOCK(state, state, ad); + precompute_rtk2_3(tks.rtk2_3, ad + BLOCKBYTES, k); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384(state, state, tks.rtk1, tks.rtk2_3); + UPDATE_CTR(tks.tk1); + SET_DOMAIN(tks, 0x18); + } else if (adlen > BLOCKBYTES) { + // Left-over partial double block + adlen -= BLOCKBYTES; + XOR_BLOCK(state, state, ad); + memcpy(pad, ad + BLOCKBYTES, adlen); + memset(pad + adlen, 0x00, 15 - adlen); + pad[15] = adlen; + precompute_rtk2_3(tks.rtk2_3, pad, k); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384(state, state, tks.rtk1, tks.rtk2_3); + UPDATE_CTR(tks.tk1); + SET_DOMAIN(tks, 0x1A); + } else if (adlen == BLOCKBYTES) { + // Left-over complete single block + XOR_BLOCK(state, state, ad); + SET_DOMAIN(tks, 0x18); + } else { + // Left-over partial single block + for(i =0; i < (int)adlen; i++) + state[i] ^= ad[i]; + state[15] ^= adlen; + SET_DOMAIN(tks, 0x1A); + } + precompute_rtk2_3(tks.rtk2_3, npub, k); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384(state, state, tks.rtk1, tks.rtk2_3); + } + // ----------------- Process the associated data ----------------- + + // ----------------- Process the ciphertext ----------------- + clen -= TAGBYTES; + memset(tks.tk1, 0, KEYBYTES); + tks.tk1[0] = 0x01; //init the 56-bit LFSR counter + if (clen == 0) { + UPDATE_CTR(tks.tk1); + SET_DOMAIN(tks, 0x15); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384(state, state, tks.rtk1, tks.rtk2_3); + } else { + //process all blocks except the last + SET_DOMAIN(tks, 0x04); + while (clen > BLOCKBYTES) { + RHO_INV(state,c,m); + UPDATE_CTR(tks.tk1); + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384(state, state, tks.rtk1, tks.rtk2_3); + c += BLOCKBYTES; + m += BLOCKBYTES; + clen -= BLOCKBYTES; + } + //pad and process the last block + UPDATE_CTR(tks.tk1); + if (clen < BLOCKBYTES) { + for(i = 0; i < (int)clen; i++) { + m[i] = c[i] ^ (state[i] >> 1) ^ (state[i] & 0x80) ^ (state[i] << 7); + state[i] ^= m[i]; + } + state[15] ^= (u8)clen; //padding + SET_DOMAIN(tks, 0x15); + } else { + RHO_INV(state,c,m); + SET_DOMAIN(tks, 0x14); + } + precompute_rtk1(tks.rtk1, tks.tk1); + skinny128_384(state, state, tks.rtk1, tks.rtk2_3); + } + // ----------------- Process the plaintext ----------------- + + // ----------------- Generate and check the tag ----------------- + G(state,state); + tmp = 0; + for(i = 0; i < TAGBYTES; i++) + tmp |= state[i] ^ c[clen+i]; //constant-time tag comparison + // ----------------- Generate and check the tag ----------------- + + return tmp; +} \ No newline at end of file diff --git a/romulus/Implementations/crypto_aead/romulusn1v12/opt32/romulus.h b/romulus/Implementations/crypto_aead/romulusn1v12/opt32/romulus.h new file mode 100644 index 0000000..3a70219 --- /dev/null +++ b/romulus/Implementations/crypto_aead/romulusn1v12/opt32/romulus.h @@ -0,0 +1,68 @@ +#ifndef ROMULUSN1_H_ +#define ROMULUSN1_H_ + +#include "skinny128.h" + +typedef unsigned char u8; +typedef unsigned int u32; +typedef struct { + u8 tk1[16]; //to manipulate tk1 byte-wise + u32 rtk1[4*16]; //to avoid tk schedule recomputations + u32 rtk2_3[4*SKINNY128_384_ROUNDS]; //all round tweakeys +} skinny_128_384_tks; + +#define TAGBYTES 16 +#define KEYBYTES 16 +#define BLOCKBYTES 16 + +#define SET_DOMAIN(tks, domain) ((tks).tk1[7] = (domain)) + +//G as defined in the Romulus specification in a 32-bit word-wise manner +#define G(x,y) ({ \ + tmp = ((u32*)(y))[0]; \ + ((u32*)(x))[0] = (tmp >> 1 & 0x7f7f7f7f) ^ ((tmp ^ (tmp << 7)) & 0x80808080); \ + tmp = ((u32*)(y))[1]; \ + ((u32*)(x))[1] = (tmp >> 1 & 0x7f7f7f7f) ^ ((tmp ^ (tmp << 7)) & 0x80808080); \ + tmp = ((u32*)(y))[2]; \ + ((u32*)(x))[2] = (tmp >> 1 & 0x7f7f7f7f) ^ ((tmp ^ (tmp << 7)) & 0x80808080); \ + tmp = ((u32*)(y))[3]; \ + ((u32*)(x))[3] = (tmp >> 1 & 0x7f7f7f7f) ^ ((tmp ^ (tmp << 7)) & 0x80808080); \ +}) + +//update the counter in tk1 in a 32-bit word-wise manner +#define UPDATE_CTR(tk1) ({ \ + tmp = ((u32*)(tk1))[1]; \ + ((u32*)(tk1))[1] = (tmp << 1) & 0x00ffffff; \ + ((u32*)(tk1))[1] |= (((u32*)(tk1))[0] >> 31); \ + ((u32*)(tk1))[1] |= tmp & 0xff000000; \ + ((u32*)(tk1))[0] <<= 1; \ + if ((tmp >> 23) & 0x01) \ + ((u32*)(tk1))[0] ^= 0x95; \ +}) + +//x <- y ^ z for 128-bit blocks +#define XOR_BLOCK(x,y,z) ({ \ + ((u32*)(x))[0] = ((u32*)(y))[0] ^ ((u32*)(z))[0]; \ + ((u32*)(x))[1] = ((u32*)(y))[1] ^ ((u32*)(z))[1]; \ + ((u32*)(x))[2] = ((u32*)(y))[2] ^ ((u32*)(z))[2]; \ + ((u32*)(x))[3] = ((u32*)(y))[3] ^ ((u32*)(z))[3]; \ +}) + + +//Rho as defined in the Romulus specification +//use pad as a tmp variable in case y = z +#define RHO(x,y,z) ({ \ + G(pad,x); \ + XOR_BLOCK(y, pad, z); \ + XOR_BLOCK(x, x, z); \ +}) + +//Rho inverse as defined in the Romulus specification +//use pad as a tmp variable in case y = z +#define RHO_INV(x, y, z) ({ \ + G(pad, x); \ + XOR_BLOCK(z, pad, y); \ + XOR_BLOCK(x, x, z); \ +}) + +#endif // ROMULUSN1_H_ \ No newline at end of file diff --git a/romulus/Implementations/crypto_aead/romulusn1v12/opt32/skinny128.c b/romulus/Implementations/crypto_aead/romulusn1v12/opt32/skinny128.c new file mode 100644 index 0000000..87718e3 --- /dev/null +++ b/romulus/Implementations/crypto_aead/romulusn1v12/opt32/skinny128.c @@ -0,0 +1,110 @@ +/****************************************************************************** +* Constant-time implementation of the SKINNY tweakable block ciphers. +* +* This implementation doesn't compute the ShiftRows operation. Some masks and +* shifts are applied during the MixColumns operation so that the proper bits +* are XORed together. Moreover, the row permutation within the MixColumns +* is omitted, as well as the bit permutation at the end of the Sbox. The rows +* are synchronized with the classical after only 4 rounds. Therefore, this +* implementation relies on a "QUADRUPLE_ROUND" routine. +* +* The Sbox computation takes advantage of some symmetry in the 8-bit Sbox to +* turn it into a 4-bit S-box computation. Although the last bit permutation +* within the Sbox is not computed, the bit ordering is synchronized with the +* classical representation after 2 calls. +* +* @author Alexandre Adomnicai, Nanyang Technological University, +* alexandre.adomnicai@ntu.edu.sg +* +* @date May 2020 +******************************************************************************/ +#include +#include +#include "skinny128.h" +#include "tk_schedule.h" + +/****************************************************************************** +* The MixColumns computation for rounds i such that (i % 4) == 0 +******************************************************************************/ +void mixcolumns_0(u32* state) { + u32 tmp; + for(int i = 0; i < 4; i++) { + tmp = ROR(state[i],24) & 0x0c0c0c0c; + state[i] ^= ROR(tmp,30); + tmp = ROR(state[i],16) & 0xc0c0c0c0; + state[i] ^= ROR(tmp,4); + tmp = ROR(state[i],8) & 0x0c0c0c0c; + state[i] ^= ROR(tmp,2); + } +} + +/****************************************************************************** +* The MixColumns computation for rounds i such that (i % 4) == 1 +******************************************************************************/ +void mixcolumns_1(u32* state) { + u32 tmp; + for(int i = 0; i < 4; i++) { + tmp = ROR(state[i],16) & 0x30303030; + state[i] ^= ROR(tmp,30); + tmp = state[i] & 0x03030303; + state[i] ^= ROR(tmp,28); + tmp = ROR(state[i],16) & 0x30303030; + state[i] ^= ROR(tmp,2); + } +} + +/****************************************************************************** +* The MixColumns computation for rounds i such that (i % 4) == 2 +******************************************************************************/ +void mixcolumns_2(u32* state) { + u32 tmp; + for(int i = 0; i < 4; i++) { + tmp = ROR(state[i],8) & 0xc0c0c0c0; + state[i] ^= ROR(tmp,6); + tmp = ROR(state[i],16) & 0x0c0c0c0c; + state[i] ^= ROR(tmp,28); + tmp = ROR(state[i],24) & 0xc0c0c0c0; + state[i] ^= ROR(tmp,2); + } +} + +/****************************************************************************** +* The MixColumns computation for rounds i such that (i % 4) == 3 +******************************************************************************/ +void mixcolumns_3(u32* state) { + u32 tmp; + for(int i = 0; i < 4; i++) { + tmp = state[i] & 0x03030303; + state[i] ^= ROR(tmp,30); + tmp = state[i] & 0x30303030; + state[i] ^= ROR(tmp,4); + tmp = state[i] & 0x03030303; + state[i] ^= ROR(tmp,26); + } +} + +/****************************************************************************** +* Encryption of a single block without any operation mode using SKINNY-128-384. +* RTK1 and RTK2_3 are given separately to take advantage of the fact that +* TK2 and TK3 remains the same through the entire data encryption/decryption. +******************************************************************************/ +void skinny128_384(u8* ctext, const u8* ptext, const u32* rtk1, const u32* rtk2_3) { + u32 tmp; // used in SWAPMOVE macro + u32 state[4]; // 128-bit state + packing(state, ptext); // from byte to bitsliced representation + QUADRUPLE_ROUND(state, rtk1, rtk2_3); + QUADRUPLE_ROUND(state, rtk1+16, rtk2_3+16); + QUADRUPLE_ROUND(state, rtk1+32, rtk2_3+32); + QUADRUPLE_ROUND(state, rtk1+48, rtk2_3+48); + QUADRUPLE_ROUND(state, rtk1, rtk2_3+64); + QUADRUPLE_ROUND(state, rtk1+16, rtk2_3+80); + QUADRUPLE_ROUND(state, rtk1+32, rtk2_3+96); + QUADRUPLE_ROUND(state, rtk1+48, rtk2_3+112); + QUADRUPLE_ROUND(state, rtk1, rtk2_3+128); + QUADRUPLE_ROUND(state, rtk1+16, rtk2_3+144); + QUADRUPLE_ROUND(state, rtk1+32, rtk2_3+160); + QUADRUPLE_ROUND(state, rtk1+48, rtk2_3+176); + QUADRUPLE_ROUND(state, rtk1, rtk2_3+192); + QUADRUPLE_ROUND(state, rtk1+16, rtk2_3+208); + unpacking(ctext, state); // from bitsliced to byte representation +} \ No newline at end of file diff --git a/romulus/Implementations/crypto_aead/romulusn1v12/opt32/skinny128.h b/romulus/Implementations/crypto_aead/romulusn1v12/opt32/skinny128.h new file mode 100644 index 0000000..dab6338 --- /dev/null +++ b/romulus/Implementations/crypto_aead/romulusn1v12/opt32/skinny128.h @@ -0,0 +1,94 @@ +#ifndef SKINNY128_H_ +#define SKINNY128_H_ + +typedef unsigned char u8; +typedef unsigned int u32; + +#define SKINNY128_384_ROUNDS 56 + +#define QUADRUPLE_ROUND(state, rtk1, rtk2_3) ({ \ + state[3] ^= ~(state[0] | state[1]); \ + SWAPMOVE(state[2], state[1], 0x55555555, 1); \ + SWAPMOVE(state[3], state[2], 0x55555555, 1); \ + state[1] ^= ~(state[2] | state[3]); \ + SWAPMOVE(state[1], state[0], 0x55555555, 1); \ + SWAPMOVE(state[0], state[3], 0x55555555, 1); \ + state[3] ^= ~(state[0] | state[1]); \ + SWAPMOVE(state[2], state[1], 0x55555555, 1); \ + SWAPMOVE(state[3], state[2], 0x55555555, 1); \ + state[1] ^= (state[2] | state[3]); \ + SWAPMOVE(state[3], state[0], 0x55555555, 0); \ + state[0] ^= (rtk1)[0]; \ + state[1] ^= (rtk1)[1]; \ + state[2] ^= (rtk1)[2]; \ + state[3] ^= (rtk1)[3]; \ + state[0] ^= (rtk2_3)[0]; \ + state[1] ^= (rtk2_3)[1]; \ + state[2] ^= (rtk2_3)[2]; \ + state[3] ^= (rtk2_3)[3]; \ + mixcolumns_0(state); \ + state[1] ^= ~(state[2] | state[3]); \ + SWAPMOVE(state[1], state[0], 0x55555555, 1); \ + SWAPMOVE(state[0], state[3], 0x55555555, 1); \ + state[3] ^= ~(state[0] | state[1]); \ + SWAPMOVE(state[2], state[1], 0x55555555, 1); \ + SWAPMOVE(state[3], state[2], 0x55555555, 1); \ + state[1] ^= ~(state[2] | state[3]); \ + SWAPMOVE(state[1], state[0], 0x55555555, 1); \ + SWAPMOVE(state[0], state[3], 0x55555555, 1); \ + state[3] ^= (state[0] | state[1]); \ + SWAPMOVE(state[1], state[2], 0x55555555, 0); \ + state[0] ^= (rtk1)[4]; \ + state[1] ^= (rtk1)[5]; \ + state[2] ^= (rtk1)[6]; \ + state[3] ^= (rtk1)[7]; \ + state[0] ^= (rtk2_3)[4]; \ + state[1] ^= (rtk2_3)[5]; \ + state[2] ^= (rtk2_3)[6]; \ + state[3] ^= (rtk2_3)[7]; \ + mixcolumns_1(state); \ + state[3] ^= ~(state[0] | state[1]); \ + SWAPMOVE(state[2], state[1], 0x55555555, 1); \ + SWAPMOVE(state[3], state[2], 0x55555555, 1); \ + state[1] ^= ~(state[2] | state[3]); \ + SWAPMOVE(state[1], state[0], 0x55555555, 1); \ + SWAPMOVE(state[0], state[3], 0x55555555, 1); \ + state[3] ^= ~(state[0] | state[1]); \ + SWAPMOVE(state[2], state[1], 0x55555555, 1); \ + SWAPMOVE(state[3], state[2], 0x55555555, 1); \ + state[1] ^= (state[2] | state[3]); \ + SWAPMOVE(state[3], state[0], 0x55555555, 0); \ + state[0] ^= (rtk1)[8]; \ + state[1] ^= (rtk1)[9]; \ + state[2] ^= (rtk1)[10]; \ + state[3] ^= (rtk1)[11]; \ + state[0] ^= (rtk2_3)[8]; \ + state[1] ^= (rtk2_3)[9]; \ + state[2] ^= (rtk2_3)[10]; \ + state[3] ^= (rtk2_3)[11]; \ + mixcolumns_2(state); \ + state[1] ^= ~(state[2] | state[3]); \ + SWAPMOVE(state[1], state[0], 0x55555555, 1); \ + SWAPMOVE(state[0], state[3], 0x55555555, 1); \ + state[3] ^= ~(state[0] | state[1]); \ + SWAPMOVE(state[2], state[1], 0x55555555, 1); \ + SWAPMOVE(state[3], state[2], 0x55555555, 1); \ + state[1] ^= ~(state[2] | state[3]); \ + SWAPMOVE(state[1], state[0], 0x55555555, 1); \ + SWAPMOVE(state[0], state[3], 0x55555555, 1); \ + state[3] ^= (state[0] | state[1]); \ + SWAPMOVE(state[1], state[2], 0x55555555, 0); \ + state[0] ^= (rtk1)[12]; \ + state[1] ^= (rtk1)[13]; \ + state[2] ^= (rtk1)[14]; \ + state[3] ^= (rtk1)[15]; \ + state[0] ^= (rtk2_3)[12]; \ + state[1] ^= (rtk2_3)[13]; \ + state[2] ^= (rtk2_3)[14]; \ + state[3] ^= (rtk2_3)[15]; \ + mixcolumns_3(state); \ +}) + +void skinny128_384(u8* ctext, const u8* ptext, const u32* rtk1, const u32* rtk2_3); + +#endif // SKINNY128_H_ \ No newline at end of file diff --git a/romulus/Implementations/crypto_aead/romulusn1v12/opt32/tk_schedule.c b/romulus/Implementations/crypto_aead/romulusn1v12/opt32/tk_schedule.c new file mode 100644 index 0000000..c818cf2 --- /dev/null +++ b/romulus/Implementations/crypto_aead/romulusn1v12/opt32/tk_schedule.c @@ -0,0 +1,379 @@ +/****************************************************************************** +* Implementation of the SKINNY tweakey schedule to match fixslicing. +* +* @author Alexandre Adomnicai, Nanyang Technological University, +* alexandre.adomnicai@ntu.edu.sg +* +* @date May 2020 +******************************************************************************/ +#include +#include //for memcmp +#include "tk_schedule.h" +#include "skinny128.h" + +typedef unsigned char u8; +typedef unsigned int u32; + +/****************************************************************************** +* The round constants according to the new representation. +******************************************************************************/ +u32 rconst_32_bs[224] = { + 0x00000004, 0xffffffbf, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x10000100, 0xfffffeff, 0x44000000, 0xfbffffff, 0x00000000, 0x04000000, + 0x00100000, 0x00100000, 0x00100001, 0xffefffff, 0x00440000, 0xffafffff, + 0x00400000, 0x00400000, 0x01000000, 0x01000000, 0x01401000, 0xffbfffff, + 0x01004000, 0xfefffbff, 0x00000400, 0x00000400, 0x00000010, 0x00000000, + 0x00010410, 0xfffffbef, 0x00000054, 0xffffffaf, 0x00000000, 0x00000040, + 0x00000100, 0x00000100, 0x10000140, 0xfffffeff, 0x44000000, 0xfffffeff, + 0x04000000, 0x04000000, 0x00100000, 0x00100000, 0x04000001, 0xfbffffff, + 0x00140000, 0xffafffff, 0x00400000, 0x00000000, 0x00000000, 0x00000000, + 0x01401000, 0xfebfffff, 0x01004400, 0xfffffbff, 0x00000000, 0x00000400, + 0x00000010, 0x00000010, 0x00010010, 0xffffffff, 0x00000004, 0xffffffaf, + 0x00000040, 0x00000040, 0x00000100, 0x00000000, 0x10000140, 0xffffffbf, + 0x40000100, 0xfbfffeff, 0x00000000, 0x04000000, 0x00100000, 0x00000000, + 0x04100001, 0xffefffff, 0x00440000, 0xffefffff, 0x00000000, 0x00400000, + 0x01000000, 0x01000000, 0x00401000, 0xffffffff, 0x00004000, 0xfeffffff, + 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00010400, 0xfffffbff, + 0x00000014, 0xffffffbf, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x10000100, 0xffffffff, 0x40000000, 0xfbffffff, 0x00000000, 0x04000000, + 0x00100000, 0x00000000, 0x00100001, 0xffefffff, 0x00440000, 0xffafffff, + 0x00000000, 0x00400000, 0x01000000, 0x01000000, 0x01401000, 0xffffffff, + 0x00004000, 0xfeffffff, 0x00000400, 0x00000400, 0x00000010, 0x00000000, + 0x00010400, 0xfffffbff, 0x00000014, 0xffffffaf, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x10000140, 0xfffffeff, 0x44000000, 0xffffffff, + 0x00000000, 0x04000000, 0x00100000, 0x00100000, 0x00000001, 0xffefffff, + 0x00440000, 0xffafffff, 0x00400000, 0x00000000, 0x00000000, 0x01000000, + 0x01401000, 0xffbfffff, 0x01004000, 0xfffffbff, 0x00000400, 0x00000400, + 0x00000010, 0x00000000, 0x00010010, 0xfffffbff, 0x00000014, 0xffffffef, + 0x00000000, 0x00000040, 0x00000100, 0x00000000, 0x10000040, 0xfffffeff, + 0x44000000, 0xfffffeff, 0x00000000, 0x00000000, 0x00000000, 0x00100000, + 0x04000001, 0xffffffff, 0x00040000, 0xffffffff, 0x00400000, 0x00000000, + 0x00000000, 0x00000000, 0x00001000, 0xfebfffff, 0x01004400, 0xffffffff, + 0x00000000, 0x00000000, 0x00000000, 0x00000010, 0x00010000, 0xffffffff, + 0x00000004, 0xffffffbf, 0x00000040, 0x00000000, 0x00000000, 0x00000000, + 0x10000100, 0xfffffebf, 0x44000100, 0xffffffff, 0x00000000, 0x04000000, + 0x00100000, 0x00100000, 0x00000001, 0xffffffff, 0x00040000, 0xffafffff, + 0x00400000, 0x00000000, 0x00000000, 0x00000000, 0x01401000, 0xffbfffff, + 0x01004000, 0xfffffbff, 0x00000000, 0x00000400, 0x00000010, 0x00000000, + 0x00010010, 0xffffffff +}; + +/****************************************************************************** +* Pack the input into the bitsliced representation +* 24 28 56 60 88 92 120 124 | ... | 0 4 32 36 64 68 96 100 +* 25 29 57 61 89 93 121 125 | ... | 1 5 33 37 65 69 97 101 +* 26 30 58 62 90 94 122 126 | ... | 2 6 34 38 66 70 98 102 +* 27 31 59 63 91 95 123 127 | ... | 3 7 35 39 67 71 99 103 +******************************************************************************/ +void packing(u32* out, const u8* in) { + u32 tmp; + LE_LOAD(out, in); + LE_LOAD(out + 1, in + 8); + LE_LOAD(out + 2, in + 4); + LE_LOAD(out + 3, in + 12); + SWAPMOVE(out[0], out[0], 0x0a0a0a0a, 3); + SWAPMOVE(out[1], out[1], 0x0a0a0a0a, 3); + SWAPMOVE(out[2], out[2], 0x0a0a0a0a, 3); + SWAPMOVE(out[3], out[3], 0x0a0a0a0a, 3); + SWAPMOVE(out[2], out[0], 0x30303030, 2); + SWAPMOVE(out[1], out[0], 0x0c0c0c0c, 4); + SWAPMOVE(out[3], out[0], 0x03030303, 6); + SWAPMOVE(out[1], out[2], 0x0c0c0c0c, 2); + SWAPMOVE(out[3], out[2], 0x03030303, 4); + SWAPMOVE(out[3], out[1], 0x03030303, 2); +} + +/****************************************************************************** +* Unpack the input to a byte-wise representation +******************************************************************************/ +void unpacking(u8* out, u32 *in) { + u32 tmp; + SWAPMOVE(in[3], in[1], 0x03030303, 2); + SWAPMOVE(in[3], in[2], 0x03030303, 4); + SWAPMOVE(in[1], in[2], 0x0c0c0c0c, 2); + SWAPMOVE(in[3], in[0], 0x03030303, 6); + SWAPMOVE(in[1], in[0], 0x0c0c0c0c, 4); + SWAPMOVE(in[2], in[0], 0x30303030, 2); + SWAPMOVE(in[0], in[0], 0x0a0a0a0a, 3); + SWAPMOVE(in[1], in[1], 0x0a0a0a0a, 3); + SWAPMOVE(in[2], in[2], 0x0a0a0a0a, 3); + SWAPMOVE(in[3], in[3], 0x0a0a0a0a, 3); + LE_STORE(out, in[0]); + LE_STORE(out + 8, in[1]); + LE_STORE(out + 4, in[2]); + LE_STORE(out + 12, in[3]); +} + +/****************************************************************************** +* 0 4 1 5 +* 1 5 ---> 2 6 +* 2 6 3 7 +* 3 7 4 0 +******************************************************************************/ +void lfsr2_bs(u32* tk) { + u32 tmp; + tmp = tk[0] ^ (tk[2] & 0xaaaaaaaa); + tmp = ((tmp & 0xaaaaaaaa) >> 1) | ((tmp << 1) & 0xaaaaaaaa); + tk[0] = tk[1]; + tk[1] = tk[2]; + tk[2] = tk[3]; + tk[3] = tmp; +} + +/****************************************************************************** +* 0 4 7 3 +* 1 5 ---> 0 4 +* 2 6 1 5 +* 3 7 2 6 +******************************************************************************/ +void lfsr3_bs(u32* tk) { + u32 tmp; + tmp = tk[3] ^ ((tk[1] & 0xaaaaaaaa) >> 1); + tmp = ((tmp & 0xaaaaaaaa) >> 1) | ((tmp << 1) & 0xaaaaaaaa); + tk[3] = tk[2]; + tk[2] = tk[1]; + tk[1] = tk[0]; + tk[0] = tmp; +} + +/****************************************************************************** +* Apply the permutation in a bitsliced manner, twice +******************************************************************************/ +void permute_tk_2(u32* tk) { + u32 tmp; + for(int i =0; i < 4; i++) { + tmp = tk[i]; + tk[i] = ROR(tmp,14) & 0xcc00cc00; + tk[i] |= (tmp & 0x000000ff) << 16; + tk[i] |= (tmp & 0xcc000000)>> 2; + tk[i] |= (tmp & 0x0033cc00) >> 8; + tk[i] |= (tmp & 0x00cc0000) >>18; + } +} + +/****************************************************************************** +* Apply the permutation in a bitsliced manner, 4 times +******************************************************************************/ +void permute_tk_4(u32* tk) { + u32 tmp; + for(int i =0; i < 4; i++) { + tmp = tk[i]; + tk[i] = ROR(tmp,22) & 0xcc0000cc; + tk[i] |= ROR(tmp,16) & 0x3300cc00; + tk[i] |= ROR(tmp, 24) & 0x00cc3300; + tk[i] |= (tmp & 0x00cc00cc) >> 2; + } +} + +/****************************************************************************** +* Apply the permutation in a bitsliced manner, 6 times +******************************************************************************/ +void permute_tk_6(u32* tk) { + u32 tmp; + for(int i =0; i < 4; i++) { + tmp = tk[i]; + tk[i] = ROR(tmp,6) & 0xcccc0000; + tk[i] |= ROR(tmp,24) & 0x330000cc; + tk[i] |= ROR(tmp,10) & 0x3333; + tk[i] |= (tmp & 0xcc) << 14; + tk[i] |= (tmp & 0x3300) << 2; + } +} + +/****************************************************************************** +* Apply the permutation in a bitsliced manner, 8 times +******************************************************************************/ +void permute_tk_8(u32* tk) { + u32 tmp; + for(int i =0; i < 4; i++) { + tmp = tk[i]; + tk[i] = ROR(tmp,24) & 0xcc000033; + tk[i] |= ROR(tmp,8) & 0x33cc0000; + tk[i] |= ROR(tmp,26) & 0x00333300; + tk[i] |= (tmp & 0x00333300) >> 6; + } +} + +/****************************************************************************** +* Apply the permutation in a bitsliced manner, 10 times +******************************************************************************/ +void permute_tk_10(u32* tk) { + u32 tmp; + for(int i =0; i < 4; i++) { + tmp = tk[i]; + tk[i] = ROR(tmp,8) & 0xcc330000; + tk[i] |= ROR(tmp,26) & 0x33000033; + tk[i] |= ROR(tmp,22) & 0x00cccc00; + tk[i] |= (tmp & 0x00330000) >> 14; + tk[i] |= (tmp & 0xcc00) >> 2; + } +} + +/****************************************************************************** +* Apply the permutation in a bitsliced manner, 12 times +******************************************************************************/ +void permute_tk_12(u32* tk) { + u32 tmp; + for(int i =0; i < 4; i++) { + tmp = tk[i]; + tk[i] = ROR(tmp,8) & 0xcc33; + tk[i] |= ROR(tmp,30) & 0x00cc00cc; + tk[i] |= ROR(tmp,10) & 0x33330000; + tk[i] |= ROR(tmp,16) & 0xcc003300; + } +} + +/****************************************************************************** +* Apply the permutation in a bitsliced manner, 14 times +******************************************************************************/ +void permute_tk_14(u32* tk) { + u32 tmp; + for(int i =0; i < 4; i++) { + tmp = tk[i]; + tk[i] = ROR(tmp,24) & 0x0033cc00; + tk[i] |= ROR(tmp,14) & 0x00cc0000; + tk[i] |= ROR(tmp,30) & 0xcc000000; + tk[i] |= ROR(tmp,16) & 0x000000ff; + tk[i] |= ROR(tmp,18) & 0x33003300; + } +} + +/****************************************************************************** +* Precompute all LFSRs on TK2 +******************************************************************************/ +void precompute_lfsr_tk2(u32* tk, const u8* key, const int rounds) { + u32 tk2[4]; + packing(tk2, key); + memcpy(tk, tk2, 16); + for(int i = 0 ; i < rounds; i+=2) { + lfsr2_bs(tk2); + memcpy(tk+i*4+4, tk2, 16); + } +} + +/****************************************************************************** +* Precompute all LFSRs on TK3 +******************************************************************************/ +void precompute_lfsr_tk3(u32* tk, const u8* key, const int rounds) { + u32 tk3[4]; + packing(tk3, key); + tk[0] ^= tk3[0]; + tk[1] ^= tk3[1]; + tk[2] ^= tk3[2]; + tk[3] ^= tk3[3]; + for(int i = 0 ; i < rounds; i+=2) { + lfsr3_bs(tk3); + tk[i*4+4] ^= tk3[0]; + tk[i*4+5] ^= tk3[1]; + tk[i*4+6] ^= tk3[2]; + tk[i*4+7] ^= tk3[3]; + } +} + +/****************************************************************************** +* XOR TK with TK1 before applying the permutations. +* The key is then rearranged to match the barrel shiftrows representation. +******************************************************************************/ +void permute_tk(u32* tk, const u8* key, const int rounds) { + u32 test; + u32 tk1[4], tmp[4]; + packing(tk1, key); + memcpy(tmp, tk, 16); + tmp[0] ^= tk1[0]; + tmp[1] ^= tk1[1]; + tmp[2] ^= tk1[2]; + tmp[3] ^= tk1[3]; + for(int i = 0 ; i < rounds; i += 8) { + test = (i % 16 < 8) ? 1 : 0; //to apply the right power of P + tk[i*4] = tmp[2] & 0xf0f0f0f0; + tk[i*4+1] = tmp[3] & 0xf0f0f0f0; + tk[i*4+2] = tmp[0] & 0xf0f0f0f0; + tk[i*4+3] = tmp[1] & 0xf0f0f0f0; + memcpy(tmp, tk+i*4+4, 16); + XOR_BLOCKS(tmp, tk1); + if (test) + permute_tk_2(tmp); // applies P^2 + else + permute_tk_10(tmp); // applies P^10 + tk[i*4+4] = ROR(tmp[0],26) & 0xc3c3c3c3; + tk[i*4+5] = ROR(tmp[1],26) & 0xc3c3c3c3; + tk[i*4+6] = ROR(tmp[2],26) & 0xc3c3c3c3; + tk[i*4+7] = ROR(tmp[3],26) & 0xc3c3c3c3; + tk[i*4+8] = ROR(tmp[2],28) & 0x03030303; + tk[i*4+8] |= ROR(tmp[2],12) & 0x0c0c0c0c; + tk[i*4+9] = ROR(tmp[3],28) & 0x03030303; + tk[i*4+9] |= ROR(tmp[3],12) & 0x0c0c0c0c; + tk[i*4+10] = ROR(tmp[0],28) & 0x03030303; + tk[i*4+10] |= ROR(tmp[0],12) & 0x0c0c0c0c; + tk[i*4+11] = ROR(tmp[1],28) & 0x03030303; + tk[i*4+11] |= ROR(tmp[1],12) & 0x0c0c0c0c; + memcpy(tmp, tk+i*4+12, 16); + XOR_BLOCKS(tmp, tk1); + if (test) + permute_tk_4(tmp); // applies P^4 + else + permute_tk_12(tmp); // applies P^12 + for(int j = 0; j < 4; j++) { + tk[i*4+12+j] = ROR(tmp[j],14) & 0x30303030; + tk[i*4+12+j] |= ROR(tmp[j],6) & 0x0c0c0c0c; + } + tk[i*4+16] = ROR(tmp[2], 16) & 0xf0f0f0f0; + tk[i*4+17] = ROR(tmp[3], 16) & 0xf0f0f0f0; + tk[i*4+18] = ROR(tmp[0], 16) & 0xf0f0f0f0; + tk[i*4+19] = ROR(tmp[1], 16) & 0xf0f0f0f0; + memcpy(tmp, tk+i*4+20, 16); + XOR_BLOCKS(tmp, tk1); + if (test) + permute_tk_6(tmp); // applies P^6 + else + permute_tk_14(tmp); // applies P^14 + tk[i*4+20] = ROR(tmp[0], 10) & 0xc3c3c3c3; + tk[i*4+21] = ROR(tmp[1], 10) & 0xc3c3c3c3; + tk[i*4+22] = ROR(tmp[2], 10) & 0xc3c3c3c3; + tk[i*4+23] = ROR(tmp[3], 10) & 0xc3c3c3c3; + tk[i*4+24] = ROR(tmp[2],12) & 0x03030303; + tk[i*4+24] |= ROR(tmp[2],28) & 0x0c0c0c0c; + tk[i*4+25] = ROR(tmp[3],12) & 0x03030303; + tk[i*4+25] |= ROR(tmp[3],28) & 0x0c0c0c0c; + tk[i*4+26] = ROR(tmp[0],12) & 0x03030303; + tk[i*4+26] |= ROR(tmp[0],28) & 0x0c0c0c0c; + tk[i*4+27] = ROR(tmp[1],12) & 0x03030303; + tk[i*4+27] |= ROR(tmp[1],28) & 0x0c0c0c0c; + memcpy(tmp, tk+i*4+28, 16); + XOR_BLOCKS(tmp, tk1); + if (test) + permute_tk_8(tmp); // applies P^8 + for(int j = 0; j < 4; j++) { + tk[i*4+28+j] = ROR(tmp[j],30) & 0x30303030; + tk[i*4+28+j] |= ROR(tmp[j],22) & 0x0c0c0c0c; + } + if (test && (i+8 < rounds)) { //only if next loop iteration + tk[i*4+32] = tmp[2] & 0xf0f0f0f0; + tk[i*4+33] = tmp[3] & 0xf0f0f0f0; + tk[i*4+34] = tmp[0] & 0xf0f0f0f0; + tk[i*4+35] = tmp[1] & 0xf0f0f0f0; + } + } +} + +/****************************************************************************** +* Precompute LFSR2(TK2) ^ LFSR3(TK3) ^ rconst. +******************************************************************************/ +void precompute_rtk2_3(u32* rtk, const u8* tk2, const u8 * tk3) { + memset(rtk, 0x00, 16*SKINNY128_384_ROUNDS); + precompute_lfsr_tk2(rtk, tk2, SKINNY128_384_ROUNDS); + precompute_lfsr_tk3(rtk, tk3, SKINNY128_384_ROUNDS); + permute_tk(rtk, (u8*)(rtk+8), SKINNY128_384_ROUNDS); // rtk+8 is NULL + for(int i = 0; i < SKINNY128_384_ROUNDS; i++) { // add rconsts + for(int j = 0; j < 4; j++) + rtk[i*4+j] ^= rconst_32_bs[i*4+j]; + } +} + +/****************************************************************************** +* Precompute RTK1. +******************************************************************************/ +void precompute_rtk1(u32* rtk1, const u8* tk1) { + memset(rtk1, 0x00, 16*16); + permute_tk(rtk1, tk1, 16); +} \ No newline at end of file diff --git a/romulus/Implementations/crypto_aead/romulusn1v12/opt32/tk_schedule.h b/romulus/Implementations/crypto_aead/romulusn1v12/opt32/tk_schedule.h new file mode 100644 index 0000000..5615cbd --- /dev/null +++ b/romulus/Implementations/crypto_aead/romulusn1v12/opt32/tk_schedule.h @@ -0,0 +1,39 @@ +#ifndef TK_SCHEDULE_H_ +#define TK_SCHEDULE_H_ + +typedef unsigned char u8; +typedef unsigned int u32; + +void packing(u32* out, const u8* in); +void unpacking(u8* out, u32 *in); +void precompute_rtk2_3(u32* rtk, const u8* tk2, const u8* tk3); +void precompute_rtk1(u32* rtk1, const u8* tk1); + +#define ROR(x,y) (((x) >> (y)) | ((x) << (32 - (y)))) + +#define XOR_BLOCKS(x,y) ({ \ + (x)[0] ^= (y)[0]; \ + (x)[1] ^= (y)[1]; \ + (x)[2] ^= (y)[2]; \ + (x)[3] ^= (y)[3]; \ +}) + +#define SWAPMOVE(a, b, mask, n) ({ \ + tmp = (b ^ (a >> n)) & mask; \ + b ^= tmp; \ + a ^= (tmp << n); \ +}) + +#define LE_LOAD(x, y) \ + *(x) = (((u32)(y)[3] << 24) | \ + ((u32)(y)[2] << 16) | \ + ((u32)(y)[1] << 8) | \ + (y)[0]); + +#define LE_STORE(x, y) \ + (x)[0] = (y) & 0xff; \ + (x)[1] = ((y) >> 8) & 0xff; \ + (x)[2] = ((y) >> 16) & 0xff; \ + (x)[3] = (y) >> 24; + +#endif // TK_SCHEDULE_H_ \ No newline at end of file diff --git a/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/LWC_AEAD_KAT_128_128.txt b/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/LWC_AEAD_KAT_128_128.txt new file mode 100644 index 0000000..5fa5db6 --- /dev/null +++ b/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/LWC_AEAD_KAT_128_128.txt @@ -0,0 +1,7623 @@ +Count = 1 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = +CT = E352FC5FB5767FF5F2FF5495A8C8218F + +Count = 2 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 00 +CT = 63B6A50B4454EE32B3F177545D3A7C02 + +Count = 3 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 0001 +CT = B43884D3BEDF17E676DA12608E582579 + +Count = 4 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102 +CT = 97E0C5EFB8700DC8DD09962C13AE7728 + +Count = 5 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 00010203 +CT = 7D9CC11F45E213AD15CB347795EFCF90 + +Count = 6 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 0001020304 +CT = E3BAEE04A820B4FD6B83F964F82BFA0C + +Count = 7 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405 +CT = 314EE05FED3F602B463C7CEAB87A3397 + +Count = 8 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 00010203040506 +CT = 113F54E053619D5CDAA0A4C6B8975517 + +Count = 9 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 0001020304050607 +CT = 1A0167242F9FD4BEDB4C35B724D72EF7 + +Count = 10 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708 +CT = A3D0DFE59034892439C7E8283A46930B + +Count = 11 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 00010203040506070809 +CT = 9F9FECF4AF18004CE65A58491011A47B + +Count = 12 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A +CT = AC3AC5EBBC6B527E7B8D7606F78855FA + +Count = 13 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B +CT = 0806B1B83A4F572CEDF082C701845672 + +Count = 14 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C +CT = 7F7416FC91D101A70695F86A9A11AD92 + +Count = 15 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D +CT = EA2AFEEA5839643270FA2DF5AB2D279C + +Count = 16 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E +CT = 66D9DD131F71F4E055E4F225F689FA23 + +Count = 17 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F +CT = AC347EAB569CE203301EECC167429023 + +Count = 18 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 0863E98295015DEE519269B45BDC0439 + +Count = 19 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 262E7D4B2F1AAEC4470B50F07C197964 + +Count = 20 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = ADEEC6D17668879A0768C0D257CD7B75 + +Count = 21 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 745B96471F00E0893CB872AAC4C2A312 + +Count = 22 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = CBA2BBDD4AE518F8443AB08C8EFF7000 + +Count = 23 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = DD94D78FFC82B3131B57B085570CE819 + +Count = 24 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 63A5F205432F97E57E4F8A1D6E960620 + +Count = 25 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 14AC341D41D4BC9F67B2FC4972533C4C + +Count = 26 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 3B43198E32AD9749B7C393A114D1A07D + +Count = 27 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 3ED270F9A6485546F3AB9214A98363A1 + +Count = 28 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = B21F1DD80113930E1624135BC71BFA10 + +Count = 29 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = A80EB58C2E5DC05989E92EE41250CAC7 + +Count = 30 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 30EE65EDAC193AFD2DEFCA0BD3F47BDC + +Count = 31 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 8EF7EBA974302BF1E3455144A8440C2D + +Count = 32 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = D4860DC90AA69B0F7A1657E68907B6F3 + +Count = 33 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = BAF9A7EC2A3FE825E199136101316FA0 + +Count = 34 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = +CT = E5854125E62C76F605F9C9FCF34D599072 + +Count = 35 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 00 +CT = E505A57CB2DD5467C2B8C7DF32B8ABCDFF + +Count = 36 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 0001 +CT = E5D22B5D6A27DF9E167DECBA066BC99484 + +Count = 37 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102 +CT = E5F1F31C5621708438D63F3E4AF63FC6D5 + +Count = 38 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 00010203 +CT = E51B8F18A6DCE29A5D1EFD9C11707E7E6D + +Count = 39 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 0001020304 +CT = E585A937BD31203D0D60B551021DBA4BF1 + +Count = 40 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405 +CT = E5575D39E6743FE9DB4D0AD48C5DEB826A + +Count = 41 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 00010203040506 +CT = E5772C8D59CA6114ACD1960CA05D06E4EA + +Count = 42 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 0001020304050607 +CT = E57C12BE9DB69F5D4ED07A9DD1C1469F0A + +Count = 43 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708 +CT = E5C5C3065C093400D432F1404EDFD722F6 + +Count = 44 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 00010203040506070809 +CT = E5F98C354D361889BCED6CF02FF5801586 + +Count = 45 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A +CT = E5CA291C52256BDB8E70BBDE601219E407 + +Count = 46 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B +CT = E56E156801A34FDEDCE6C62AA1E415E78F + +Count = 47 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C +CT = E51967CF4508D188570DA3500C7F801C6F + +Count = 48 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D +CT = E58C392753C139EDC27BCC85934EBC9661 + +Count = 49 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E +CT = E500CA04AA86717D105ED25A4313184BDE + +Count = 50 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F +CT = E5CA27A712CF9C6BF33B2844A782D321DE + +Count = 51 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = E56E70303B0C01D41E5AA4C1D2BE4DB5C4 + +Count = 52 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = E5403DA4F2B61A27344C3DF8969988C899 + +Count = 53 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = E5CBFD1F68EF680E6A0C5E68B4B25CCA88 + +Count = 54 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = E512484FFE86006979378EDACC215312EF + +Count = 55 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = E5ADB16264D3E591084F0C18EA6B6EC1FD + +Count = 56 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = E5BB870E3665823AE3106118E3B29D59E4 + +Count = 57 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = E505B62BBCDA2F1E157579227B8B07B7DD + +Count = 58 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = E572BFEDA4D8D4356F6C84542F97C28DB1 + +Count = 59 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = E55D50C037ABAD1EB9BCF53BC7F1401180 + +Count = 60 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = E558C1A9403F48DCB6F89D3A724C12D25C + +Count = 61 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = E5D40CC46198131AFE1D12BB3D228A4BED + +Count = 62 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = E5CE1D6C35B75D49A982DF8682F7C17B3A + +Count = 63 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = E556FDBC543519B30D26D9626D3665CA21 + +Count = 64 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = E5E8E43210ED30A201E873F9224DD5BDD0 + +Count = 65 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = E5B295D47093A612FF7120FF806C96070E + +Count = 66 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = E5DCEA7E55B33F61D5EAAFBB07E4A0DE5D + +Count = 67 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = +CT = E529A8C59E92614F212E2E6D0E8ABFC6B87C + +Count = 68 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 00 +CT = E5292821C7C6906DB0E96F632D4B4A34E5F1 + +Count = 69 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 0001 +CT = E529FFAFE61E6AE6493DAA48487F9956BC8A + +Count = 70 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102 +CT = E529DC77A7226C495313019BCC3304A0EEDB + +Count = 71 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 00010203 +CT = E529360BA3D291DB4D76C9596E6882E15663 + +Count = 72 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 0001020304 +CT = E529A82D8CC97C19EA26B711A37BEF2563FF + +Count = 73 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405 +CT = E5297AD9829239063EF09AAE26F5AF74AA64 + +Count = 74 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 00010203040506 +CT = E5295AA8362D8758C3870632FED9AF99CCE4 + +Count = 75 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 0001020304050607 +CT = E529519605E9FBA68A6507DE6FA833D9B704 + +Count = 76 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708 +CT = E529E847BD28440DD7FFE555B2372D480AF8 + +Count = 77 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 00010203040506070809 +CT = E529D4088E397B215E973AC80256071F3D88 + +Count = 78 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A +CT = E529E7ADA72668520CA5A71F2C19E086CC09 + +Count = 79 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B +CT = E5294391D375EE7609F73162D8D8168ACF81 + +Count = 80 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C +CT = E52934E3743145E85F7CDA07A2758D1F3461 + +Count = 81 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D +CT = E529A1BD9C278C003AE9AC6877EABC23BE6F + +Count = 82 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E +CT = E5292D4EBFDECB48AA3B8976A83AE18763D0 + +Count = 83 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F +CT = E529E7A31C6682A5BCD8EC8CB6DE704C09D0 + +Count = 84 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = E52943F48B4F413803358D0033AB4CD29DCA + +Count = 85 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = E5296DB91F86FB23F01F9B990AEF6B17E097 + +Count = 86 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = E529E679A41CA251D941DBFA9ACD40C3E286 + +Count = 87 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = E5293FCCF48ACB39BE52E02A28B5D3CC3AE1 + +Count = 88 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = E5298035D9109EDC462398A8EA9399F1E9F3 + +Count = 89 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = E5299603B54228BBEDC8C7C5EA9A400271EA + +Count = 90 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = E529283290C89716C93EA2DDD00279989FD3 + +Count = 91 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = E5295F3B56D095EDE244BB20A656655DA5BF + +Count = 92 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = E52970D47B43E694C9926B51C9BE03DF398E + +Count = 93 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = E5297545123472710B9D2F39C80BBE8DFA52 + +Count = 94 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = E529F9887F15D52ACDD5CAB64944D01563E3 + +Count = 95 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = E529E399D741FA649E82557B74FB055E5334 + +Count = 96 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = E5297B79072078206426F17D9014C4FAE22F + +Count = 97 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = E529C5608964A009752A3FD70B5BBF4A95DE + +Count = 98 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = E5299F116F04DE9FC5D4A6840DF99E092F00 + +Count = 99 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = E529F16EC521FE06B6FE3D0B497E163FF653 + +Count = 100 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = +CT = E529B08D94449EB3BC9D56CE473A51A4267A28 + +Count = 101 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 00 +CT = E529B00D701DCA429E0C918F49199051D427A5 + +Count = 102 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 0001 +CT = E529B0DAFE3C12B815F5454A627CA482B67EDE + +Count = 103 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102 +CT = E529B0F9267D2EBEBAEF6BE1B1F8E81F402C8F + +Count = 104 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 00010203 +CT = E529B0135A79DE4328F10E29735AB399019437 + +Count = 105 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 0001020304 +CT = E529B08D7C56C5AEEA565E573B97A0F4C5A1AB + +Count = 106 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405 +CT = E529B05F88589EEBF582887A84122EB4946830 + +Count = 107 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 00010203040506 +CT = E529B07FF9EC2155AB7FFFE618CA02B4790EB0 + +Count = 108 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 0001020304050607 +CT = E529B074C7DFE52955361DE7F45B7328397550 + +Count = 109 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708 +CT = E529B0CD16672496FE6B87057F86EC36A8C8AC + +Count = 110 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 00010203040506070809 +CT = E529B0F1595435A9D2E2EFDAE2368D1CFFFFDC + +Count = 111 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A +CT = E529B0C2FC7D2ABAA1B0DD473518C2FB660E5D + +Count = 112 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B +CT = E529B066C009793C85B58FD148EC030D6A0DD5 + +Count = 113 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C +CT = E529B011B2AE3D971BE3043A2D96AE96FFF635 + +Count = 114 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D +CT = E529B084EC462B5EF386914C424331A7C37C3B + +Count = 115 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E +CT = E529B0081F65D219BB1643695C9CE1FA67A184 + +Count = 116 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F +CT = E529B0C2F2C66A505600A00CA682056BACCB84 + +Count = 117 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = E529B066A5514393CBBF4D6D2A077057325F9E + +Count = 118 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = E529B048E8C58A29D04C677BB33E3470F722C3 + +Count = 119 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = E529B0C3287E1070A265393BD0AE165B2320D2 + +Count = 120 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = E529B01A9D2E8619CA022A00001C6EC82CF8B5 + +Count = 121 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = E529B0A564031C4C2FFA5B7882DE4882112BA7 + +Count = 122 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = E529B0B3526F4EFA4851B027EFDE415BE2B3BE + +Count = 123 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = E529B00D634AC445E5754642F7E4D962785D87 + +Count = 124 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = E529B07A6A8CDC471E5E3C5B0A928D7EBD67EB + +Count = 125 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = E529B05585A14F346775EA8B7BFD65183FFBDA + +Count = 126 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = E529B05014C838A082B7E5CF13FCD0A56D3806 + +Count = 127 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = E529B0DCD9A51907D971AD2A9C7D9FCBF5A1B7 + +Count = 128 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = E529B0C6C80D4D289722FAB55140201EBE9160 + +Count = 129 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = E529B05E28DD2CAAD3D85E1157A4CFDF1A207B + +Count = 130 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = E529B0E031536872FAC952DFFD3F80A4AA578A + +Count = 131 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = E529B0BA40B5080C6C79AC46AE392285E9ED54 + +Count = 132 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = E529B0D43F1F2D2CF50A86DD217DA50DDF3407 + +Count = 133 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = +CT = E529B07657411D891702C818EFE971A5557ED4A2 + +Count = 134 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 00 +CT = E529B076D7A544DDE62059DFAEE75264A08C892F + +Count = 135 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 0001 +CT = E529B076002B65051CABA00B6BCC375073EED054 + +Count = 136 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102 +CT = E529B07623F324391A04BA25C01FB31CEE188205 + +Count = 137 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 00010203 +CT = E529B076C98F20C9E796A44008DD114768593ABD + +Count = 138 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 0001020304 +CT = E529B07657A90FD20A5403107695DC54059D0F21 + +Count = 139 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405 +CT = E529B076855D01894F4BD7C65B2A59DA45CCC6BA + +Count = 140 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 00010203040506 +CT = E529B076A52CB536F1152AB1C7B681F64521A03A + +Count = 141 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 0001020304050607 +CT = E529B076AE1286F28DEB6353C65A1087D961DBDA + +Count = 142 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708 +CT = E529B07617C33E3332403EC924D1CD18C7F06626 + +Count = 143 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 00010203040506070809 +CT = E529B0762B8C0D220D6CB7A1FB4C7D79EDA75156 + +Count = 144 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A +CT = E529B0761829243D1E1FE593669B53360A3EA0D7 + +Count = 145 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B +CT = E529B076BC15506E983BE0C1F0E6A7F7FC32A35F + +Count = 146 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C +CT = E529B076CB67F72A33A5B64A1B83DD5A67A758BF + +Count = 147 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D +CT = E529B0765E391F3CFA4DD3DF6DEC08C5569BD2B1 + +Count = 148 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E +CT = E529B076D2CA3CC5BD05430D48F2D7150B3F0F0E + +Count = 149 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F +CT = E529B07618279F7DF4E855EE2D08C9F19AF4650E + +Count = 150 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = E529B076BC7008543775EA034C844C84A66AF114 + +Count = 151 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = E529B076923D9C9D8D6E19295A1D75C081AF8C49 + +Count = 152 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = E529B07619FD2707D41C30771A7EE5E2AA7B8E58 + +Count = 153 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = E529B076C0487791BD74576421AE579A3974563F + +Count = 154 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = E529B0767FB15A0BE891AF15592C95BC7349852D + +Count = 155 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = E529B076698736595EF604FE064195B5AABA1D34 + +Count = 156 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = E529B076D7B613D3E15B20086359AF2D9320F30D + +Count = 157 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = E529B076A0BFD5CBE3A00B727AA4D9798FE5C961 + +Count = 158 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = E529B0768F50F85890D920A4AAD5B691E9675550 + +Count = 159 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = E529B0768AC1912F043CE2ABEEBDB7245435968C + +Count = 160 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = E529B076060CFC0EA36724E30B32366B3AAD0F3D + +Count = 161 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = E529B0761C1D545A8C2977B494FF0BD4EFE63FEA + +Count = 162 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = E529B07684FD843B0E6D8D1030F9EF3B2E428EF1 + +Count = 163 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = E529B0763AE40A7FD6449C1CFE53747455F2F900 + +Count = 164 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = E529B0766095EC1FA8D22CE2670072D674B143DE + +Count = 165 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = E529B0760EEA463A884B5FC8FC8F3651FC879A8D + +Count = 166 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = +CT = E529B07637871E339392367AA905EA2380E7F74674 + +Count = 167 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 00 +CT = E529B0763707FA6AC76314EB6E44E4004112051BF9 + +Count = 168 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 0001 +CT = E529B07637D0744B1F999F12BA81CF6575C1674282 + +Count = 169 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102 +CT = E529B07637F3AC0A239F3008942A1CE1395C9110D3 + +Count = 170 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 00010203 +CT = E529B0763719D00ED362A216F1E2DE4362DAD0A86B + +Count = 171 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 0001020304 +CT = E529B0763787F621C88F60B1A19C968E71B7149DF7 + +Count = 172 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405 +CT = E529B0763755022F93CA7F6577B1290BFFF745546C + +Count = 173 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 00010203040506 +CT = E529B0763775739B2C742198002DB5D3D3F7A832EC + +Count = 174 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 0001020304050607 +CT = E529B076377E4DA8E808DFD1E22C5942A26BE8490C + +Count = 175 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708 +CT = E529B07637C79C1029B7748C78CED29F3D7579F4F0 + +Count = 176 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 00010203040506070809 +CT = E529B07637FBD3233888580510114F2F5C5F2EC380 + +Count = 177 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A +CT = E529B07637C8760A279B2B57228C980113B8B73201 + +Count = 178 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B +CT = E529B076376C4A7E741D0F52701AE5F5D24EBB3189 + +Count = 179 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C +CT = E529B076371B38D930B69104FBF1808F7FD52ECA69 + +Count = 180 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D +CT = E529B076378E6631267F79616E87EF5AE0E4124067 + +Count = 181 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E +CT = E529B07637029512DF3831F1BCA2F18530B9B69DD8 + +Count = 182 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F +CT = E529B07637C878B16771DCE75FC70B9BD4287DF7D8 + +Count = 183 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = E529B076376C2F264EB24158B2A6871EA114E363C2 + +Count = 184 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = E529B076374262B287085AAB98B01E27E533261E9F + +Count = 185 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = E529B07637C9A2091D512882C6F07DB7C718F21C8E + +Count = 186 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = E529B076371017598B3840E5D5CBAD05BF8BFDC4E9 + +Count = 187 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = E529B07637AFEE74116DA51DA4B32FC799C1C017FB + +Count = 188 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = E529B07637B9D81843DBC2B64FEC42C79018338FE2 + +Count = 189 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = E529B0763707E93DC9646F92B9895AFD0821A961DB + +Count = 190 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = E529B0763770E0FBD16694B9C390A78B5C3D6C5BB7 + +Count = 191 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = E529B076375F0FD64215ED921540D6E4B45BEEC786 + +Count = 192 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = E529B076375A9EBF358108501A04BEE501E6BC045A + +Count = 193 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = E529B07637D653D21426539652E131644E88249DEB + +Count = 194 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = E529B07637CC427A40091DC5057EFC59F15D6FAD3C + +Count = 195 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = E529B0763754A2AA218B593FA1DAFABD1E9CCB1C27 + +Count = 196 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = E529B07637EABB246553702EAD14502651E77B6BD6 + +Count = 197 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = E529B07637B0CAC2052DE69E538D0320F3C638D108 + +Count = 198 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = E529B07637DEB568200D7FED79168C64744E0E085B + +Count = 199 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = +CT = E529B07637F035257B77B8293A441A8F2323B92EB4F3 + +Count = 200 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 00 +CT = E529B07637F0B5C12223490BAB835B8100E24CDCE97E + +Count = 201 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 0001 +CT = E529B07637F0624F03FBB38052579EAA65D69FBEB005 + +Count = 202 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102 +CT = E529B07637F0419742C7B52F48793579E19A0248E254 + +Count = 203 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 00010203 +CT = E529B07637F0ABEB463748BD561CFDBB43C184095AEC + +Count = 204 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 0001020304 +CT = E529B07637F035CD692CA57FF14C83F38ED2E9CD6F70 + +Count = 205 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405 +CT = E529B07637F0E7396777E060259AAE4C0B5CA99CA6EB + +Count = 206 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 00010203040506 +CT = E529B07637F0C748D3C85E3ED8ED32D0D370A971C06B + +Count = 207 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 0001020304050607 +CT = E529B07637F0CC76E00C22C0910F333C42013531BB8B + +Count = 208 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708 +CT = E529B07637F075A758CD9D6BCC95D1B79F9E2BA00677 + +Count = 209 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 00010203040506070809 +CT = E529B07637F049E86BDCA24745FD0E2A2FFF01F73107 + +Count = 210 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A +CT = E529B07637F07A4D42C3B13417CF93FD01B0E66EC086 + +Count = 211 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B +CT = E529B07637F0DE7136903710129D0580F5711062C30E + +Count = 212 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C +CT = E529B07637F0A90391D49C8E4416EEE58FDC8BF738EE + +Count = 213 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D +CT = E529B07637F03C5D79C255662183988A5A43BACBB2E0 + +Count = 214 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E +CT = E529B07637F0B0AE5A3B122EB151BD948593E76F6F5F + +Count = 215 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F +CT = E529B07637F07A43F9835BC3A7B2D86E9B7776A4055F + +Count = 216 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = E529B07637F0DE146EAA985E185FB9E21E024A3A9145 + +Count = 217 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = E529B07637F0F059FA632245EB75AF7B27466DFFEC18 + +Count = 218 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = E529B07637F07B9941F97B37C22BEF18B764462BEE09 + +Count = 219 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = E529B07637F0A22C116F125FA538D4C8051CD524366E + +Count = 220 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = E529B07637F01DD53CF547BA5D49AC4AC73A9F19E57C + +Count = 221 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = E529B07637F00BE350A7F1DDF6A2F327C73346EA7D65 + +Count = 222 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = E529B07637F0B5D2752D4E70D254963FFDAB7F70935C + +Count = 223 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = E529B07637F0C2DBB3354C8BF92E8FC28BFF63B5A930 + +Count = 224 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = E529B07637F0ED349EA63FF2D2F85FB3E41705373501 + +Count = 225 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = E529B07637F0E8A5F7D1AB1710F71BDBE5A2B865F6DD + +Count = 226 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = E529B07637F064689AF00C4CD6BFFE5464EDD6FD6F6C + +Count = 227 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = E529B07637F07E7932A4230285E86199595203B65FBB + +Count = 228 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = E529B07637F0E699E2C5A1467F4CC59FBDBDC212EEA0 + +Count = 229 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = E529B07637F058806C81796F6E400B3526F2B9A29951 + +Count = 230 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = E529B07637F002F18AE107F9DEBE9266205098E1238F + +Count = 231 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = E529B07637F06C8E20C42760AD9409E964D710D7FADC + +Count = 232 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = +CT = E529B07637F03259C6069153227B6A19A5616202695A78 + +Count = 233 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 00 +CT = E529B07637F032D9225FC5A200EAAD58AB42A3F79B07F5 + +Count = 234 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 0001 +CT = E529B07637F0320EAC7E1D588B13799D80279724F95E8E + +Count = 235 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102 +CT = E529B07637F0322D743F215E2409573653A3DBB90F0CDF + +Count = 236 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 00010203 +CT = E529B07637F032C7083BD1A3B61732FE9101803F4EB467 + +Count = 237 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 0001020304 +CT = E529B07637F032592E14CA4E74B06280D9CC93528A81FB + +Count = 238 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405 +CT = E529B07637F0328BDA1A910B6B64B4AD66491D12DB4860 + +Count = 239 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 00010203040506 +CT = E529B07637F032ABABAE2EB53599C331FA913112362EE0 + +Count = 240 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 0001020304050607 +CT = E529B07637F032A0959DEAC9CBD021301600408E765500 + +Count = 241 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708 +CT = E529B07637F0321944252B76608DBBD29DDDDF90E7E8FC + +Count = 242 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 00010203040506070809 +CT = E529B07637F032250B163A494C04D30D006DBEBAB0DF8C + +Count = 243 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A +CT = E529B07637F03216AE3F255A3F56E190D743F15D292E0D + +Count = 244 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B +CT = E529B07637F032B2924B76DC1B53B306AAB730AB252D85 + +Count = 245 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C +CT = E529B07637F032C5E0EC3277850538EDCFCD9D30B0D665 + +Count = 246 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D +CT = E529B07637F03250BE0424BE6D60AD9BA01802018C5C6B + +Count = 247 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E +CT = E529B07637F032DC4D27DDF925F07FBEBEC7D25C2881D4 + +Count = 248 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F +CT = E529B07637F03216A08465B0C8E69CDB44D936CDE3EBD4 + +Count = 249 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = E529B07637F032B2F7134C73555971BAC85C43F17D7FCE + +Count = 250 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = E529B07637F0329CBA8785C94EAA5BAC516507D6B80293 + +Count = 251 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = E529B07637F032177A3C1F903C8305EC32F525FD6C0082 + +Count = 252 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = E529B07637F032CECF6C89F954E416D7E2475D6E63D8E5 + +Count = 253 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = E529B07637F03271364113ACB11C67AF60857B245E0BF7 + +Count = 254 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = E529B07637F03267002D411AD6B78CF00D8572FDAD93EE + +Count = 255 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = E529B07637F032D93108CBA57B937A9515BFEAC4377DD7 + +Count = 256 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = E529B07637F032AE38CED3A780B8008CE8C9BED8F247BB + +Count = 257 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = E529B07637F03281D7E340D4F993D65C99A656BE70DB8A + +Count = 258 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = E529B07637F03284468A37401C51D918F1A7E303221856 + +Count = 259 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = E529B07637F032088BE716E7479791FD7E26AC6DBA81E7 + +Count = 260 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = E529B07637F032129A4F42C809C4C662B31B13B8F1B130 + +Count = 261 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = E529B07637F0328A7A9F234A4D3E62C6B5FFFC7955002B + +Count = 262 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = E529B07637F0323463116792642F6E081F64B302E577DA + +Count = 263 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = E529B07637F0326E12F707ECF29F90914C621123A6CD04 + +Count = 264 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = E529B07637F032006D5D22CC6BECBA0AC32696AB901457 + +Count = 265 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = +CT = E529B07637F03226B065804E4E9DE263EB0CA4DEA32E9CA3 + +Count = 266 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 00 +CT = E529B07637F032263081D91ABFBF73A4AA02871F56DCC12E + +Count = 267 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 0001 +CT = E529B07637F03226E70FF8C245348A706F29E22B85BE9855 + +Count = 268 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102 +CT = E529B07637F03226C4D7B9FE439B905EC4FA66671848CA04 + +Count = 269 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 00010203 +CT = E529B07637F032262EABBD0EBE098E3B0C38C43C9E0972BC + +Count = 270 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 0001020304 +CT = E529B07637F03226B08D921553CB296B7270092FF3CD4720 + +Count = 271 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405 +CT = E529B07637F0322662799C4E16D4FDBD5FCF8CA1B39C8EBB + +Count = 272 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 00010203040506 +CT = E529B07637F03226420828F1A88A00CAC353548DB371E83B + +Count = 273 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 0001020304050607 +CT = E529B07637F0322649361B35D4744928C2BFC5FC2F3193DB + +Count = 274 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708 +CT = E529B07637F03226F0E7A3F46BDF14B22034186331A02E27 + +Count = 275 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 00010203040506070809 +CT = E529B07637F03226CCA890E554F39DDAFFA9A8021BF71957 + +Count = 276 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A +CT = E529B07637F03226FF0DB9FA4780CFE8627E864DFC6EE8D6 + +Count = 277 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B +CT = E529B07637F032265B31CDA9C1A4CABAF403728C0A62EB5E + +Count = 278 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C +CT = E529B07637F032262C436AED6A3A9C311F66082191F710BE + +Count = 279 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D +CT = E529B07637F03226B91D82FBA3D2F9A46909DDBEA0CB9AB0 + +Count = 280 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E +CT = E529B07637F0322635EEA102E49A69764C17026EFD6F470F + +Count = 281 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F +CT = E529B07637F03226FF0302BAAD777F9529ED1C8A6CA42D0F + +Count = 282 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = E529B07637F032265B5495936EEAC078486199FF503AB915 + +Count = 283 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = E529B07637F032267519015AD4F133525EF8A0BB77FFC448 + +Count = 284 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = E529B07637F03226FED9BAC08D831A0C1E9B30995C2BC659 + +Count = 285 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = E529B07637F03226276CEA56E4EB7D1F254B82E1CF241E3E + +Count = 286 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = E529B07637F032269895C7CCB10E856E5DC940C78519CD2C + +Count = 287 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = E529B07637F032268EA3AB9E07692E8502A440CE5CEA5535 + +Count = 288 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = E529B07637F0322630928E14B8C40A7367BC7A566570BB0C + +Count = 289 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = E529B07637F03226479B480CBA3F21097E410C0279B58160 + +Count = 290 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = E529B07637F032266874659FC9460ADFAE3063EA1F371D51 + +Count = 291 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = E529B07637F032266DE50CE85DA3C8D0EA58625FA265DE8D + +Count = 292 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = E529B07637F03226E12861C9FAF80E980FD7E310CCFD473C + +Count = 293 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = E529B07637F03226FB39C99DD5B65DCF901ADEAF19B677EB + +Count = 294 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = E529B07637F0322663D919FC57F2A76B341C3A40D812C6F0 + +Count = 295 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = E529B07637F03226DDC097B88FDBB667FAB6A10FA3A2B101 + +Count = 296 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = E529B07637F0322687B171D8F14D069963E5A7AD82E10BDF + +Count = 297 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 0001020304050607 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = E529B07637F03226E9CEDBFDD1D475B3F86AE32A0AD7D28C + +Count = 298 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = +CT = E529B07637F03226829B767A18947DE02E3BCE6DD9E7B7E4E6 + +Count = 299 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 00 +CT = E529B07637F03226821B92234C655F71E97AC04E181245B96B + +Count = 300 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 0001 +CT = E529B07637F0322682CC1C02949FD4883DBFEB2B2CC127E010 + +Count = 301 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102 +CT = E529B07637F0322682EFC443A8997B92131438AF605CD1B241 + +Count = 302 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 00010203 +CT = E529B07637F032268205B8475864E98C76DCFA0D3BDA900AF9 + +Count = 303 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 0001020304 +CT = E529B07637F03226829B9E6843892B2B26A2B2C028B7543F65 + +Count = 304 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405 +CT = E529B07637F0322682496A6618CC34FFF08F0D45A6F705F6FE + +Count = 305 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 00010203040506 +CT = E529B07637F0322682691BD2A7726A028713919D8AF7E8907E + +Count = 306 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 0001020304050607 +CT = E529B07637F03226826225E1630E944B65127D0CFB6BA8EB9E + +Count = 307 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708 +CT = E529B07637F0322682DBF459A2B13F16FFF0F6D16475395662 + +Count = 308 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 00010203040506070809 +CT = E529B07637F0322682E7BB6AB38E139F972F6B61055F6E6112 + +Count = 309 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A +CT = E529B07637F0322682D41E43AC9D60CDA5B2BC4F4AB8F79093 + +Count = 310 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B +CT = E529B07637F0322682702237FF1B44C8F724C1BB8B4EFB931B + +Count = 311 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C +CT = E529B07637F0322682075090BBB0DA9E7CCFA4C126D56E68FB + +Count = 312 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D +CT = E529B07637F0322682920E78AD7932FBE9B9CB14B9E452E2F5 + +Count = 313 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E +CT = E529B07637F03226821EFD5B543E7A6B3B9CD5CB69B9F63F4A + +Count = 314 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F +CT = E529B07637F0322682D410F8EC77977DD8F92FD58D283D554A + +Count = 315 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = E529B07637F032268270476FC5B40AC23598A350F814A3C150 + +Count = 316 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = E529B07637F03226825E0AFB0C0E11311F8E3A69BC3366BC0D + +Count = 317 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = E529B07637F0322682D5CA409657631841CE59F99E18B2BE1C + +Count = 318 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = E529B07637F03226820C7F10003E0B7F52F5894BE68BBD667B + +Count = 319 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = E529B07637F0322682B3863D9A6BEE87238D0B89C0C180B569 + +Count = 320 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = E529B07637F0322682A5B051C8DD892CC8D26689C918732D70 + +Count = 321 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = E529B07637F03226821B8174426224083EB77EB35121E9C349 + +Count = 322 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = E529B07637F03226826C88B25A60DF2344AE83C5053D2CF925 + +Count = 323 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = E529B07637F032268243679FC913A608927EF2AAED5BAE6514 + +Count = 324 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = E529B07637F032268246F6F6BE8743CA9D3A9AAB58E6FCA6C8 + +Count = 325 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = E529B07637F0322682CA3B9B9F20180CD5DF152A1788643F79 + +Count = 326 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = E529B07637F0322682D02A33CB0F565F8240D817A85D2F0FAE + +Count = 327 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = E529B07637F032268248CAE3AA8D12A526E4DEF3479C8BBEB5 + +Count = 328 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = E529B07637F0322682F6D36DEE553BB42A2A746808E73BC944 + +Count = 329 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = E529B07637F0322682ACA28B8E2BAD04D4B3276EAAC678739A + +Count = 330 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = E529B07637F0322682C2DD21AB0B3477FE28A82A2D4E4EAAC9 + +Count = 331 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = +CT = E529B07637F03226820A9844034D40F2B63E6C4A528468D70F84 + +Count = 332 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 00 +CT = E529B07637F03226820A18A05A19B1D027F92D4471459D255209 + +Count = 333 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 0001 +CT = E529B07637F03226820ACF2E7BC14B5BDE2DE86F14714E470B72 + +Count = 334 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102 +CT = E529B07637F03226820AECF63AFD4DF4C40343BC903DD3B15923 + +Count = 335 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 00010203 +CT = E529B07637F03226820A068A3E0DB066DA668B7E326655F0E19B + +Count = 336 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 0001020304 +CT = E529B07637F03226820A98AC11165DA47D36F536FF753834D407 + +Count = 337 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405 +CT = E529B07637F03226820A4A581F4D18BBA9E0D8897AFB78651D9C + +Count = 338 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 00010203040506 +CT = E529B07637F03226820A6A29ABF2A6E554974415A2D778887B1C + +Count = 339 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 0001020304050607 +CT = E529B07637F03226820A61179836DA1B1D7545F933A6E4C800FC + +Count = 340 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708 +CT = E529B07637F03226820AD8C620F765B040EFA772EE39FA59BD00 + +Count = 341 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 00010203040506070809 +CT = E529B07637F03226820AE48913E65A9CC98778EF5E58D00E8A70 + +Count = 342 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A +CT = E529B07637F03226820AD72C3AF949EF9BB5E538701737977BF1 + +Count = 343 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B +CT = E529B07637F03226820A73104EAACFCB9EE7734584D6C19B7879 + +Count = 344 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C +CT = E529B07637F03226820A0462E9EE6455C86C9820FE7B5A0E8399 + +Count = 345 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D +CT = E529B07637F03226820A913C01F8ADBDADF9EE4F2BE46B320997 + +Count = 346 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E +CT = E529B07637F03226820A1DCF2201EAF53D2BCB51F4343696D428 + +Count = 347 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F +CT = E529B07637F03226820AD72281B9A3182BC8AEABEAD0A75DBE28 + +Count = 348 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = E529B07637F03226820A7375169060859425CF276FA59BC32A32 + +Count = 349 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = E529B07637F03226820A5D388259DA9E670FD9BE56E1BC06576F + +Count = 350 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = E529B07637F03226820AD6F839C383EC4E5199DDC6C397D2557E + +Count = 351 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = E529B07637F03226820A0F4D6955EA842942A20D74BB04DD8D19 + +Count = 352 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = E529B07637F03226820AB0B444CFBF61D133DA8FB69D4EE05E0B + +Count = 353 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = E529B07637F03226820AA682289D09067AD885E2B6949713C612 + +Count = 354 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = E529B07637F03226820A18B30D17B6AB5E2EE0FA8C0CAE89282B + +Count = 355 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = E529B07637F03226820A6FBACB0FB4507554F907FA58B24C1247 + +Count = 356 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = E529B07637F03226820A4055E69CC7295E82297695B0D4CE8E76 + +Count = 357 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = E529B07637F03226820A45C48FEB53CC9C8D6D1E9405699C4DAA + +Count = 358 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = E529B07637F03226820AC909E2CAF4975AC58891154A0704D41B + +Count = 359 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = E529B07637F03226820AD3184A9EDBD90992175C28F5D24FE4CC + +Count = 360 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = E529B07637F03226820A4BF89AFF599DF336B35ACC1A13EB55D7 + +Count = 361 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = E529B07637F03226820AF5E114BB81B4E23A7DF05755685B2226 + +Count = 362 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = E529B07637F03226820AAF90F2DBFF2252C4E4A351F7491898F8 + +Count = 363 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 00010203040506070809 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = E529B07637F03226820AC1EF58FEDFBB21EE7F2C1570C12E41AB + +Count = 364 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = +CT = E529B07637F03226820A44CCDA6FF8659E59F2FE774607D12B5AFF + +Count = 365 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 00 +CT = E529B07637F03226820A444C3E36AC94BCC835BF7965C624D90772 + +Count = 366 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 0001 +CT = E529B07637F03226820A449BB017746E3731E17A5200F2F7BB5E09 + +Count = 367 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102 +CT = E529B07637F03226820A44B868564868982BCFD18184BE6A4D0C58 + +Count = 368 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 00010203 +CT = E529B07637F03226820A44521452B8950A35AA194326E5EC0CB4E0 + +Count = 369 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 0001020304 +CT = E529B07637F03226820A44CC327DA378C892FA670BEBF681C8817C + +Count = 370 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405 +CT = E529B07637F03226820A441EC673F83DD7462C4AB46E78C19948E7 + +Count = 371 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 00010203040506 +CT = E529B07637F03226820A443EB7C7478389BB5BD628B654C1742E67 + +Count = 372 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 0001020304050607 +CT = E529B07637F03226820A443589F483FF77F2B9D7C427255D345587 + +Count = 373 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708 +CT = E529B07637F03226820A448C584C4240DCAF23354FFABA43A5E87B + +Count = 374 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 00010203040506070809 +CT = E529B07637F03226820A44B0177F537FF0264BEAD24ADB69F2DF0B + +Count = 375 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A +CT = E529B07637F03226820A4483B2564C6C837479770564948E6B2E8A + +Count = 376 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B +CT = E529B07637F03226820A44278E221FEAA7712BE178905578672D02 + +Count = 377 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C +CT = E529B07637F03226820A4450FC855B413927A00A1DEAF8E3F2D6E2 + +Count = 378 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D +CT = E529B07637F03226820A44C5A26D4D88D142357C723F67D2CE5CEC + +Count = 379 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E +CT = E529B07637F03226820A4449514EB4CF99D2E7596CE0B78F6A8153 + +Count = 380 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F +CT = E529B07637F03226820A4483BCED0C8674C4043C96FE531EA1EB53 + +Count = 381 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F10 +CT = E529B07637F03226820A4427EB7A2545E97BE95D1A7B26223F7F49 + +Count = 382 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = E529B07637F03226820A4409A6EEECFFF288C34B83426205FA0214 + +Count = 383 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = E529B07637F03226820A4482665576A680A19D0BE0D2402E2E0005 + +Count = 384 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = E529B07637F03226820A445BD305E0CFE8C68E30306038BD21D862 + +Count = 385 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = E529B07637F03226820A44E42A287A9A0D3EFF48B2A21EF71C0B70 + +Count = 386 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = E529B07637F03226820A44F21C44282C6A951417DFA2172EEF9369 + +Count = 387 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = E529B07637F03226820A444C2D61A293C7B1E272C7988F17757D50 + +Count = 388 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = E529B07637F03226820A443B24A7BA913C9A986B3AEEDB0BB0473C + +Count = 389 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = E529B07637F03226820A4414CB8A29E245B14EBB4B81336D32DB0D + +Count = 390 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = E529B07637F03226820A44115AE35E76A07341FF238086D06018D1 + +Count = 391 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = E529B07637F03226820A449D978E7FD1FBB5091AAC01C9BEF88160 + +Count = 392 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = E529B07637F03226820A448786262BFEB5E65E85613C766BB3B1B7 + +Count = 393 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = E529B07637F03226820A441F66F64A7CF11CFA2167D899AA1700AC + +Count = 394 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = E529B07637F03226820A44A17F780EA4D80DF6EFCD43D6D1A7775D + +Count = 395 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = E529B07637F03226820A44FB0E9E6EDA4EBD08769E4574F0E4CD83 + +Count = 396 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = E529B07637F03226820A449571344BFAD7CE22ED1101F378D214D0 + +Count = 397 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = +CT = E529B07637F03226820A4472D7D2BE580C734AAEB15EFBA88CB12FE9 + +Count = 398 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 00 +CT = E529B07637F03226820A44725736E70CFD51DB69F050D86979437264 + +Count = 399 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 0001 +CT = E529B07637F03226820A447280B8C6D407DA22BD357BBD5DAA212B1F + +Count = 400 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102 +CT = E529B07637F03226820A4472A36087E8017538939EA8391137D7794E + +Count = 401 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 00010203 +CT = E529B07637F03226820A4472491C8318FCE726F6566A9B4AB196C1F6 + +Count = 402 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 0001020304 +CT = E529B07637F03226820A4472D73AAC03112581A628225659DC52F46A + +Count = 403 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405 +CT = E529B07637F03226820A447205CEA258543A5570059DD3D79C033DF1 + +Count = 404 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 00010203040506 +CT = E529B07637F03226820A447225BF16E7EA64A80799010BFB9CEE5B71 + +Count = 405 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 0001020304050607 +CT = E529B07637F03226820A44722E812523969AE1E598ED9A8A00AE2091 + +Count = 406 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708 +CT = E529B07637F03226820A447297509DE22931BC7F7A6647151E3F9D6D + +Count = 407 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 00010203040506070809 +CT = E529B07637F03226820A4472AB1FAEF3161D3517A5FBF7743468AA1D + +Count = 408 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A +CT = E529B07637F03226820A447298BA87EC056E6725382CD93BD3F15B9C + +Count = 409 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B +CT = E529B07637F03226820A44723C86F3BF834A6277AE512DFA25FD5814 + +Count = 410 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C +CT = E529B07637F03226820A44724BF454FB28D434FC45345757BE68A3F4 + +Count = 411 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D +CT = E529B07637F03226820A4472DEAABCEDE13C5169335B82C88F5429FA + +Count = 412 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E +CT = E529B07637F03226820A447252599F14A674C1BB16455D18D2F0F445 + +Count = 413 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F +CT = E529B07637F03226820A447298B43CACEF99D75873BF43FC433B9E45 + +Count = 414 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F10 +CT = E529B07637F03226820A44723CE3AB852C0468B51233C6897FA50A5F + +Count = 415 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = E529B07637F03226820A447212AE3F4C961F9B9F04AAFFCD58607702 + +Count = 416 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = E529B07637F03226820A4472996E84D6CF6DB2C144C96FEF73B47513 + +Count = 417 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = E529B07637F03226820A447240DBD440A605D5D27F19DD97E0BBAD74 + +Count = 418 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = E529B07637F03226820A4472FF22F9DAF3E02DA3079B1FB1AA867E66 + +Count = 419 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = E529B07637F03226820A4472E91495884587864858F61FB87375E67F + +Count = 420 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = E529B07637F03226820A44725725B002FA2AA2BE3DEE25204AEF0846 + +Count = 421 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = E529B07637F03226820A4472202C761AF8D189C424135374562A322A + +Count = 422 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = E529B07637F03226820A44720FC35B898BA8A212F4623C9C30A8AE1B + +Count = 423 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = E529B07637F03226820A44720A5232FE1F4D601DB00A3D298DFA6DC7 + +Count = 424 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = E529B07637F03226820A4472869F5FDFB816A6555585BC66E362F476 + +Count = 425 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = E529B07637F03226820A44729C8EF78B9758F502CA4881D93629C4A1 + +Count = 426 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = E529B07637F03226820A4472046E27EA151C0FA66E4E6536F78D75BA + +Count = 427 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = E529B07637F03226820A4472BA77A9AECD351EAAA0E4FE798C3D024B + +Count = 428 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = E529B07637F03226820A4472E0064FCEB3A3AE5439B7F8DBAD7EB895 + +Count = 429 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = E529B07637F03226820A44728E79E5EB933ADD7EA238BC5C254861C6 + +Count = 430 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = +CT = E529B07637F03226820A4472B329CC91F861773318FA1BB9B25DC9E56C + +Count = 431 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 00 +CT = E529B07637F03226820A4472B3A928C8AC9055A2DFBB159A73A83BB8E1 + +Count = 432 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 0001 +CT = E529B07637F03226820A4472B37EA6E9746ADE5B0B7E3EFF477B59E19A + +Count = 433 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102 +CT = E529B07637F03226820A4472B35D7EA8486C714125D5ED7B0BE6AFB3CB + +Count = 434 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 00010203 +CT = E529B07637F03226820A4472B3B702ACB891E35F401D2FD95060EE0B73 + +Count = 435 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 0001020304 +CT = E529B07637F03226820A4472B3292483A37C21F810636714430D2A3EEF + +Count = 436 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405 +CT = E529B07637F03226820A4472B3FBD08DF8393E2CC64ED891CD4D7BF774 + +Count = 437 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 00010203040506 +CT = E529B07637F03226820A4472B3DBA139478760D1B1D24449E14D9691F4 + +Count = 438 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 0001020304050607 +CT = E529B07637F03226820A4472B3D09F0A83FB9E9853D3A8D890D1D6EA14 + +Count = 439 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708 +CT = E529B07637F03226820A4472B3694EB2424435C5C93123050FCF4757E8 + +Count = 440 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 00010203040506070809 +CT = E529B07637F03226820A4472B3550181537B194CA1EEBEB56EE5106098 + +Count = 441 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A +CT = E529B07637F03226820A4472B366A4A84C686A1E9373699B2102899119 + +Count = 442 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B +CT = E529B07637F03226820A4472B3C298DC1FEE4E1BC1E5146FE0F4859291 + +Count = 443 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C +CT = E529B07637F03226820A4472B3B5EA7B5B45D04D4A0E71154D6F106971 + +Count = 444 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D +CT = E529B07637F03226820A4472B320B4934D8C3828DF781EC0D25E2CE37F + +Count = 445 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E +CT = E529B07637F03226820A4472B3AC47B0B4CB70B80D5D001F0203883EC0 + +Count = 446 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F +CT = E529B07637F03226820A4472B366AA130C829DAEEE38FA01E6924354C0 + +Count = 447 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F10 +CT = E529B07637F03226820A4472B3C2FD84254100110359768493AEDDC0DA + +Count = 448 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = E529B07637F03226820A4472B3ECB010ECFB1BE2294FEFBDD78918BD87 + +Count = 449 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = E529B07637F03226820A4472B36770AB76A269CB770F8C2DF5A2CCBF96 + +Count = 450 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = E529B07637F03226820A4472B3BEC5FBE0CB01AC64345C9F8D31C367F1 + +Count = 451 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = E529B07637F03226820A4472B3013CD67A9EE454154CDE5DAB7BFEB4E3 + +Count = 452 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = E529B07637F03226820A4472B3170ABA282883FFFE13B35DA2A20D2CFA + +Count = 453 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = E529B07637F03226820A4472B3A93B9FA2972EDB0876AB673A9B97C2C3 + +Count = 454 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = E529B07637F03226820A4472B3DE3259BA95D5F0726F56116E8752F8AF + +Count = 455 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = E529B07637F03226820A4472B3F1DD7429E6ACDBA4BF277E86E1D0649E + +Count = 456 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = E529B07637F03226820A4472B3F44C1D5E724919ABFB4F7F335C82A742 + +Count = 457 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = E529B07637F03226820A4472B37881707FD512DFE31EC0FE7C321A3EF3 + +Count = 458 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = E529B07637F03226820A4472B36290D82BFA5C8CB4810DC3C3E7510E24 + +Count = 459 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = E529B07637F03226820A4472B3FA70084A78187610250B272C26F5BF3F + +Count = 460 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = E529B07637F03226820A4472B34469860EA031671CEBA1BC635D45C8CE + +Count = 461 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = E529B07637F03226820A4472B31E18606EDEA7D7E272F2BAC17C067210 + +Count = 462 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = E529B07637F03226820A4472B37067CA4BFE3EA4C8E97DFE46F430AB43 + +Count = 463 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = +CT = E529B07637F03226820A4472B394601DC7D0668BE50803A5698B50E1F3A7 + +Count = 464 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 00 +CT = E529B07637F03226820A4472B394E0F99E8497A974CF42AB4A4AA513AE2A + +Count = 465 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 0001 +CT = E529B07637F03226820A4472B3943777BF5C6D228D1B87802F7E7671F751 + +Count = 466 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102 +CT = E529B07637F03226820A4472B39414AFFE606B8D97352C53AB32EB87A500 + +Count = 467 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 00010203 +CT = E529B07637F03226820A4472B394FED3FA90961F8950E49109696DC61DB8 + +Count = 468 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 0001020304 +CT = E529B07637F03226820A4472B39460F5D58B7BDD2E009AD9C47A00022824 + +Count = 469 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405 +CT = E529B07637F03226820A4472B394B201DBD03EC2FAD6B76641F44053E1BF + +Count = 470 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 00010203040506 +CT = E529B07637F03226820A4472B39492706F6F809C07A12BFA99D840BE873F + +Count = 471 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 0001020304050607 +CT = E529B07637F03226820A4472B394994E5CABFC624E432A1608A9DCFEFCDF + +Count = 472 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708 +CT = E529B07637F03226820A4472B394209FE46A43C913D9C89DD536C26F4123 + +Count = 473 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 00010203040506070809 +CT = E529B07637F03226820A4472B3941CD0D77B7CE59AB117006557E8387653 + +Count = 474 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A +CT = E529B07637F03226820A4472B3942F75FE646F96C8838AD74B180FA187D2 + +Count = 475 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B +CT = E529B07637F03226820A4472B3948B498A37E9B2CDD11CAABFD9F9AD845A + +Count = 476 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C +CT = E529B07637F03226820A4472B394FC3B2D73422C9B5AF7CFC57462387FBA + +Count = 477 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D +CT = E529B07637F03226820A4472B3946965C5658BC4FECF81A010EB5304F5B4 + +Count = 478 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E +CT = E529B07637F03226820A4472B394E596E69CCC8C6E1DA4BECF3B0EA0280B + +Count = 479 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F +CT = E529B07637F03226820A4472B3942F7B4524856178FEC144D1DF9F6B420B + +Count = 480 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F10 +CT = E529B07637F03226820A4472B3948B2CD20D46FCC713A0C854AAA3F5D611 + +Count = 481 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = E529B07637F03226820A4472B394A56146C4FCE73439B6516DEE8430AB4C + +Count = 482 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = E529B07637F03226820A4472B3942EA1FD5EA5951D67F632FDCCAFE4A95D + +Count = 483 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = E529B07637F03226820A4472B394F714ADC8CCFD7A74CDE24FB43CEB713A + +Count = 484 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = E529B07637F03226820A4472B39448ED805299188205B5608D9276D6A228 + +Count = 485 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = E529B07637F03226820A4472B3945EDBEC002F7F29EEEA0D8D9BAF253A31 + +Count = 486 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = E529B07637F03226820A4472B394E0EAC98A90D20D188F15B70396BFD408 + +Count = 487 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = E529B07637F03226820A4472B39497E30F929229266296E8C1578A7AEE64 + +Count = 488 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = E529B07637F03226820A4472B394B80C2201E1500DB44699AEBFECF87255 + +Count = 489 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = E529B07637F03226820A4472B394BD9D4B7675B5CFBB02F1AF0A51AAB189 + +Count = 490 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = E529B07637F03226820A4472B39431502657D2EE09F3E77E2E453F322838 + +Count = 491 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = E529B07637F03226820A4472B3942B418E03FDA05AA478B313FAEA7918EF + +Count = 492 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = E529B07637F03226820A4472B394B3A15E627FE4A000DCB5F7152BDDA9F4 + +Count = 493 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = E529B07637F03226820A4472B3940DB8D026A7CDB10C121F6C5A506DDE05 + +Count = 494 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = E529B07637F03226820A4472B39457C93646D95B01F28B4C6AF8712E64DB + +Count = 495 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = E529B07637F03226820A4472B39439B69C63F9C272D810C32E7FF918BD88 + +Count = 496 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = +CT = E529B07637F03226820A4472B394652B61DE1B8898DA0DF4AD642E9D44C4DC + +Count = 497 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 00 +CT = E529B07637F03226820A4472B39465AB85874F79BA4BCAB5A347EF68B69951 + +Count = 498 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 0001 +CT = E529B07637F03226820A4472B394657C0BA6978331B21E708822DBBBD4C02A + +Count = 499 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102 +CT = E529B07637F03226820A4472B394655FD3E7AB859EA830DB5BA6972622927B + +Count = 500 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 00010203 +CT = E529B07637F03226820A4472B39465B5AFE35B780CB655139904CCA0632AC3 + +Count = 501 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 0001020304 +CT = E529B07637F03226820A4472B394652B89CC4095CE11056DD1C9DFCDA71F5F + +Count = 502 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405 +CT = E529B07637F03226820A4472B39465F97DC21BD0D1C5D3406E4C518DF6D6C4 + +Count = 503 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 00010203040506 +CT = E529B07637F03226820A4472B39465D90C76A46E8F38A4DCF2947D8D1BB044 + +Count = 504 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 0001020304050607 +CT = E529B07637F03226820A4472B39465D232456012717146DD1E050C115BCBA4 + +Count = 505 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708 +CT = E529B07637F03226820A4472B394656BE3FDA1ADDA2CDC3F95D8930FCA7658 + +Count = 506 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 00010203040506070809 +CT = E529B07637F03226820A4472B3946557ACCEB092F6A5B4E00868F2259D4128 + +Count = 507 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A +CT = E529B07637F03226820A4472B394656409E7AF8185F7867DDF46BDC204B0A9 + +Count = 508 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B +CT = E529B07637F03226820A4472B39465C03593FC07A1F2D4EBA2B27C3408B321 + +Count = 509 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C +CT = E529B07637F03226820A4472B39465B74734B8AC3FA45F00C7C8D1AF9D48C1 + +Count = 510 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D +CT = E529B07637F03226820A4472B394652219DCAE65D7C1CA76A81D4E9EA1C2CF + +Count = 511 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E +CT = E529B07637F03226820A4472B39465AEEAFF57229F511853B6C29EC3051F70 + +Count = 512 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F +CT = E529B07637F03226820A4472B3946564075CEF6B7247FB364CDC7A52CE7570 + +Count = 513 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F10 +CT = E529B07637F03226820A4472B39465C050CBC6A8EFF81657C0590F6E50E16A + +Count = 514 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = E529B07637F03226820A4472B39465EE1D5F0F12F40B3C4159604B49959C37 + +Count = 515 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = E529B07637F03226820A4472B3946565DDE4954B862262013AF06962419E26 + +Count = 516 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = E529B07637F03226820A4472B39465BC68B40322EE45713AEA4211F14E4641 + +Count = 517 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = E529B07637F03226820A4472B3946503919999770BBD0042688037BB739553 + +Count = 518 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = E529B07637F03226820A4472B3946515A7F5CBC16C16EB1D05803E62800D4A + +Count = 519 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = E529B07637F03226820A4472B39465AB96D0417EC1321D781DBAA65B1AE373 + +Count = 520 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = E529B07637F03226820A4472B39465DC9F16597C3A196761E0CCF247DFD91F + +Count = 521 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = E529B07637F03226820A4472B39465F3703BCA0F4332B1B191A31A215D452E + +Count = 522 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = E529B07637F03226820A4472B39465F6E152BD9BA6F0BEF5F9A2AF9C0F86F2 + +Count = 523 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = E529B07637F03226820A4472B394657A2C3F9C3CFD36F6107623E0F2971F43 + +Count = 524 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = E529B07637F03226820A4472B39465603D97C813B365A18FBB1E5F27DC2F94 + +Count = 525 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = E529B07637F03226820A4472B39465F8DD47A991F79F052BBDFAB0E6789E8F + +Count = 526 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = E529B07637F03226820A4472B3946546C4C9ED49DE8E09E51761FF9DC8E97E + +Count = 527 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = E529B07637F03226820A4472B394651CB52F8D37483EF77C44675DBC8B53A0 + +Count = 528 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = E529B07637F03226820A4472B3946572CA85A817D14DDDE7CB23DA34BD8AF3 + +Count = 529 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BBD751A91924DBD20180C9CAAFD795D5C4 + +Count = 530 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 00 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB57B5F04DD5F943C6C1C7E96E22678849 + +Count = 531 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 0001 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB803BD1952F72BA1204EC8C5AF105D132 + +Count = 532 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BBA3E390A929DDA03CAF3F08166CF38363 + +Count = 533 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 00010203 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB499F9459D44FBE5967FDAA4DEAB23BDB + +Count = 534 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 0001020304 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BBD7B9BB42398D190919B5675E87760E47 + +Count = 535 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB054DB5197C92CDDF340AE2D0C727C7DC + +Count = 536 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 00010203040506 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB253C01A6C2CC30A8A8963AFCC7CAA15C + +Count = 537 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 0001020304050607 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB2E023262BE32794AA97AAB8D5B8ADABC + +Count = 538 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB97D38AA3019924D04BF17612451B6740 + +Count = 539 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 00010203040506070809 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BBAB9CB9B23EB5ADB8946CC6736F4C5030 + +Count = 540 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB983990AD2DC6FF8A09BBE83C88D5A1B1 + +Count = 541 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3C05E4FEABE2FAD89FC61CFD7ED9A239 + +Count = 542 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB4B7743BA007CAC5374A36650E54C59D9 + +Count = 543 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BBDE29ABACC994C9C602CCB3CFD470D3D7 + +Count = 544 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB52DA88558EDC591427D26C1F89D40E68 + +Count = 545 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB98372BEDC7314FF7422872FB181F6468 + +Count = 546 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3C60BCC404ACF01A23A4F78E2481F072 + +Count = 547 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB122D280DBEB70330353DCECA03448D2F + +Count = 548 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB99ED9397E7C52A6E755E5EE828908F3E + +Count = 549 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB4058C3018EAD4D7D4E8EEC90BB9F5759 + +Count = 550 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BBFFA1EE9BDB48B50C360C2EB6F1A2844B + +Count = 551 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BBE99782C96D2F1EE769612EBF28511C52 + +Count = 552 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB57A6A743D2823A110C79142711CBF26B + +Count = 553 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB20AF615BD079116B158462730D0EC807 + +Count = 554 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB0F404CC8A3003ABDC5F50D9B6B8C5436 + +Count = 555 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB0AD125BF37E5F8B2819D0C2ED6DE97EA + +Count = 556 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB861C489E90BE3EFA64128D61B8460E5B + +Count = 557 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB9C0DE0CABFF06DADFBDFB0DE6D0D3E8C + +Count = 558 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB04ED30AB3DB497095FD95431ACA98F97 + +Count = 559 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BBBAF4BEEFE59D86059173CF7ED719F866 + +Count = 560 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BBE085588F9B0B36FB0820C9DCF65A42B8 + +Count = 561 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB8EFAF2AABB9245D193AF8D5B7E6C9BEB + +Count = 562 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB388CEB23FB27FB333F0DE02623C31FAEF1 + +Count = 563 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 00 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB380C0F7AAFD6D9A2F84CEE05E236EDF37C + +Count = 564 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 0001 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB38DB815B772C525B2C89C560D6E58FAA07 + +Count = 565 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB38F8591A4B2AFD41022216E49A7879F856 + +Count = 566 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 00010203 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3812251EBBD76F5F67EAD446C1FE3840EE + +Count = 567 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 0001020304 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB388C0331A03AADF837949C8BD293FC7572 + +Count = 568 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB385EF73FFB7FB22CE1B9230E5CD3ADBCE9 + +Count = 569 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 00010203040506 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB387E868B44C1ECD19625BFD670D340DA69 + +Count = 570 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 0001020304050607 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3875B8B880BD129874245347014F00A189 + +Count = 571 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB38CC69004102B9C5EEC6D89A9E51911C75 + +Count = 572 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 00010203040506070809 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB38F02633503D954C8619452AFF7BC62B05 + +Count = 573 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB38C3831A4F2EE61EB4849204B09C5FDA84 + +Count = 574 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3867BF6E1CA8C21BE612EFF0716A53D90C + +Count = 575 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3810CDC958035C4D6DF98A8ADCF1C622EC + +Count = 576 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB388593214ECAB428F88FE55F43C0FAA8E2 + +Count = 577 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB38096002B78DFCB82AAAFB80939D5E755D + +Count = 578 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB38C38DA10FC411AEC9CF019E770C951F5D + +Count = 579 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3867DA3626078C1124AE8D1B02300B8B47 + +Count = 580 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB384997A2EFBD97E20EB814224617CEF61A + +Count = 581 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB38C2571975E4E5CB50F877B2643C1AF40B + +Count = 582 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB381BE249E38D8DAC43C3A7001CAF152C6C + +Count = 583 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB38A41B6479D8685432BB25C23AE528FF7E + +Count = 584 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB38B22D082B6E0FFFD9E448C2333CDB6767 + +Count = 585 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB380C1C2DA1D1A2DB2F8150F8AB0541895E + +Count = 586 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB387B15EBB9D359F05598AD8EFF1984B332 + +Count = 587 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3854FAC62AA020DB8348DCE1177F062F03 + +Count = 588 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB38516BAF5D34C5198C0CB4E0A2C254ECDF + +Count = 589 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB38DDA6C27C939EDFC4E93B61EDACCC756E + +Count = 590 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB38C7B76A28BCD08C9376F65C52798745B9 + +Count = 591 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB385F57BA493E947637D2F0B8BDB823F4A2 + +Count = 592 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB38E14E340DE6BD673B1C5A23F2C3938353 + +Count = 593 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB38BB3FD26D982BD7C585092550E2D0398D + +Count = 594 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB38D5407848B8B2A4EF1E8661D76AE6E0DE + +Count = 595 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850389E436D347ACC7269FCA2F2A3F8E014 + +Count = 596 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 00 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850B87A1A39C5585DB528F28133560ABD99 + +Count = 597 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 0001 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB38506FF43BE13FD3A461EDD9E4078568E4E2 + +Count = 598 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB38504C2C7ADD397CBE4F460A604B189EB6B3 + +Count = 599 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 00010203 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850A6507E2DC4EEA02A8EC8C2109EDF0E0B + +Count = 600 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 0001020304 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB385038765136292C077AF0800F03F31B3B97 + +Count = 601 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850EA825F6D6C33D3ACDD3F8A8DB34AF20C + +Count = 602 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 00010203040506 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850CAF3EBD2D26D2EDB41A352A1B3A7948C + +Count = 603 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 0001020304050607 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850C1CDD816AE936739404FC3D02FE7EF6C + +Count = 604 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850781C60D711383AA3A2C41E4F31765290 + +Count = 605 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 00010203040506070809 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850445353C62E14B3CB7D59AE2E1B2165E0 + +Count = 606 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB385077F67AD93D67E1F9E08E8061FCB89461 + +Count = 607 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850D3CA0E8ABB43E4AB76F374A00AB497E9 + +Count = 608 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850A4B8A9CE10DDB2209D960E0D91216C09 + +Count = 609 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB385031E641D8D935D7B5EBF9DB92A01DE607 + +Count = 610 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850BD1562219E7D4767CEE70442FDB93BB8 + +Count = 611 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB385077F8C199D7905184AB1D1AA66C7251B8 + +Count = 612 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850D3AF56B0140DEE69CA919FD350ECC5A2 + +Count = 613 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850FDE2C279AE161D43DC08A6977729B8FF + +Count = 614 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850762279E3F764341D9C6B36B55CFDBAEE + +Count = 615 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850AF9729759E0C530EA7BB84CDCFF26289 + +Count = 616 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850106E04EFCBE9AB7FDF3946EB85CFB19B + +Count = 617 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850065868BD7D8E0094805446E25C3C2982 + +Count = 618 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850B8694D37C2232462E54C7C7A65A6C7BB + +Count = 619 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850CF608B2FC0D80F18FCB10A2E7963FDD7 + +Count = 620 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E08FA6BCB3A124CE2CC065C61FE161E6 + +Count = 621 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E51ECFCB2744E6C168A86473A2B3A23A + +Count = 622 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB385069D3A2EA801F20898D27E53CCC2B3B8B + +Count = 623 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB385073C20ABEAF5173DE12EAD88319600B5C + +Count = 624 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850EB22DADF2D15897AB6EC3C6CD8C4BA47 + +Count = 625 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850553B549BF53C98767846A723A374CDB6 + +Count = 626 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB38500F4AB2FB8BAA2888E115A18182377768 + +Count = 627 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850613518DEAB335BA27A9AE5060A01AE3B + +Count = 628 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E9BBCE0D22D50CEF67CE526B87A3BF7469 + +Count = 629 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 00 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E93B2A5476242E7EA08F5C4846564D29E4 + +Count = 630 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 0001 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E9ECA475AEDEA587744A772D72852F709F + +Count = 631 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E9CF7C3492D80A9D5AE1A4A93E18D922CE + +Count = 632 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 00010203 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E9250030622598833F29660B659E989A76 + +Count = 633 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 0001020304 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E9BB261F79C85A246F572EC676F35CAFEA + +Count = 634 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E969D211228D45F0B97A9143F8B30D6671 + +Count = 635 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 00010203040506 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E949A3A59D331B0DCEE60D9BD4B3E000F1 + +Count = 636 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 0001020304050607 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E9429D96594FE5442CE7E10AA52FA07B11 + +Count = 637 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E9FB4C2E98F04E19B6056AD73A3131C6ED + +Count = 638 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 00010203040506070809 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E9C7031D89CF6290DEDAF7675B1B66F19D + +Count = 639 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E9F4A63496DC11C2EC47204914FCFF001C + +Count = 640 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E9509A40C55A35C7BED15DBDD50AF30394 + +Count = 641 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E927E8E781F1AB91353A38C7789166F874 + +Count = 642 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E9B2B60F973843F4A04C5712E7A05A727A + +Count = 643 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E93E452C6E7F0B64726949CD37FDFEAFC5 + +Count = 644 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E9F4A88FD636E672910CB3D3D36C35C5C5 + +Count = 645 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E950FF18FFF57BCD7C6D3F56A650AB51DF + +Count = 646 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E97EB28C364F603E567BA66FE2776E2C82 + +Count = 647 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E9F57237AC161217083BC5FFC05CBA2E93 + +Count = 648 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E92CC7673A7F7A701B00154DB8CFB5F6F4 + +Count = 649 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E9933E4AA02A9F886A78978F9E858825E6 + +Count = 650 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E9850826F29CF8238127FA8F975C7BBDFF + +Count = 651 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E93B3903782355077742E2B50F65E153C6 + +Count = 652 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94C30C56021AE2C0D5B1FC35B792469AA + +Count = 653 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E963DFE8F352D707DB8B6EACB31FA6F59B + +Count = 654 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E9664E8184C632C5D4CF06AD06A2F43647 + +Count = 655 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E9EA83ECA56169039C2A892C49CC6CAFF6 + +Count = 656 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E9F09244F14E2750CBB54411F619279F21 + +Count = 657 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E968729490CC63AA6F1142F519D8832E3A + +Count = 658 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E9D66B1AD4144ABB63DFE86E56A33359CB + +Count = 659 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E98C1AFCB46ADC0B9D46BB68F48270E315 + +Count = 660 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E9E26556914A4578B7DD342C730A463A46 + +Count = 661 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94D90BF81182AD5D9CE57A3FD6393DC267D + +Count = 662 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 00 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94D105BD84CDBF7480916ADDEA2662E7BF0 + +Count = 663 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 0001 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DC7D5F994217CB1DDD386BB96B54C228B + +Count = 664 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DE40DB8A827D3ABF378553FDA28BA70DA + +Count = 665 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 00010203 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94D0E71BC58DA41B596B0979D81AEFBC862 + +Count = 666 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 0001020304 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94D90579343378312C6CEDF5092C33FFDFE + +Count = 667 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94D42A39D18729CC610E360D51C836E3465 + +Count = 668 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 00010203040506 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94D62D229A7CCC23B677FFC0D30838352E5 + +Count = 669 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 0001020304050607 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94D69EC1A63B03C72857E109C411FC32905 + +Count = 670 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DD03DA2A20F972F1F9C9B41DE015294F9 + +Count = 671 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 00010203040506070809 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DEC7291B330BBA6774306F1BF2B05A389 + +Count = 672 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DDFD7B8AC23C8F445DED1DFF0CC9C5208 + +Count = 673 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94D7BEBCCFFA5ECF11748AC2B313A905180 + +Count = 674 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94D0C996BBB0E72A79CA3C9519CA105AA60 + +Count = 675 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94D99C783ADC79AC209D5A684039039206E + +Count = 676 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94D1534A05480D252DBF0B85BD3CD9DFDD1 + +Count = 677 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DDFD903ECC93F4438954245375C5697D1 + +Count = 678 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94D7B8E94C50AA2FBD5F4CEC04260C803CB + +Count = 679 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94D55C3000CB0B908FFE257F906470D7E96 + +Count = 680 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DDE03BB96E9CB21A1A23469246CD97C87 + +Count = 681 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94D07B6EB0080A346B299E4DB5CFFD6A4E0 + +Count = 682 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DB84FC69AD546BEC3E166197AB5EB77F2 + +Count = 683 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DAE79AAC863211528BE0B19736C18EFEB + +Count = 684 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94D10488F42DC8C31DEDB1323EB558201D2 + +Count = 685 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94D6741495ADE771AA4C2EE55BF49473BBE + +Count = 686 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94D48AE64C9AD0E3172129F3A572FC5A78F + +Count = 687 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94D4D3F0DBE39EBF37D56F73BE292976453 + +Count = 688 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DC1F2609F9EB03535B378BAADFC0FFDE2 + +Count = 689 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DDBE3C8CBB1FE66622CB587122944CD35 + +Count = 690 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94D430318AA33BA9CC688B363FDE8E07C2E + +Count = 691 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DFD1A96EEEB938DCA4619F8B293500BDF + +Count = 692 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DA76B708E95053D34DF4AFE10B213B101 + +Count = 693 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DC914DAABB59C4E1E44C5BA973A256852 + +Count = 694 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBFE6F49937E9BDA147D393F17A330913B5 + +Count = 695 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 00 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF6610C063189F3080929DD2BBC6FB4E38 + +Count = 696 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 0001 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBFB19EE1BBE214C95457B6B78F15991743 + +Count = 697 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF9246A087E4BBD37AFC6533C3886F4512 + +Count = 698 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 00010203 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF783AA4771929CD1F34A791980E2EFDAA + +Count = 699 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 0001020304 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBFE61C8B6CF4EB6A4F4AEF5C8B63EAC836 + +Count = 700 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF34E88537B1F4BE996750D90523BB01AD + +Count = 701 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 00010203040506 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF149931880FAA43EEFBCC01292356672D + +Count = 702 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 0001020304050607 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF1FA7024C73540A0CFA209058BF161CCD + +Count = 703 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBFA676BA8DCCFF579618AB4DC7A187A131 + +Count = 704 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 00010203040506070809 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF9A39899CF3D3DEFEC736FDA68BD09641 + +Count = 705 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBFA99CA083E0A08CCC5AE1D3E96C4967C0 + +Count = 706 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF0DA0D4D06684899ECC9C27289A456448 + +Count = 707 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF7AD27394CD1ADF1527F95D8501D09FA8 + +Count = 708 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBFEF8C9B8204F2BA805196881A30EC15A6 + +Count = 709 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF637FB87B43BA2A52748857CA6D48C819 + +Count = 710 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBFA9921BC30A573CB11172492EFC83A219 + +Count = 711 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF0DC58CEAC9CA835C70FECC5BC01D3603 + +Count = 712 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF2388182373D170766667F51FE7D84B5E + +Count = 713 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBFA848A3B92AA359282604653DCC0C494F + +Count = 714 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF71FDF32F43CB3E3B1DD4D7455F039128 + +Count = 715 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBFCE04DEB5162EC64A65561563153E423A + +Count = 716 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBFD832B2E7A0496DA13A3B156ACCCDDA23 + +Count = 717 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF6603976D1FE449575F232FF2F557341A + +Count = 718 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF110A51751D1F622D46DE59A6E9920E76 + +Count = 719 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF3EE57CE66E6649FB96AF364E8F109247 + +Count = 720 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF3B741591FA838BF4D2C737FB3242519B + +Count = 721 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBFB7B978B05DD84DBC3748B6B45CDAC82A + +Count = 722 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBFADA8D0E472961EEBA8858B0B8991F8FD + +Count = 723 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF35480085F0D2E44F0C836FE4483549E6 + +Count = 724 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF8B518EC128FBF543C229F4AB33853E17 + +Count = 725 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBFD12068A1566D45BD5B7AF20912C684C9 + +Count = 726 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBFBF5FC28476F43697C0F5B68E9AF05D9A + +Count = 727 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98797312339E7DE97B3682DC9AE41D3F06 + +Count = 728 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 00 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98F9974B676F5F78BC778CFF5B11EF628B + +Count = 729 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 0001 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF982E196ABF95D48168B2A79A6FC28D3BF0 + +Count = 730 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF980DC12B83937B9B4619741E235F7B69A1 + +Count = 731 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 00010203 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98E7BD2F736EE98523D1B6BC78D93AD119 + +Count = 732 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 0001020304 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98799B0068832B2273AFFE716BB4FEE485 + +Count = 733 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98AB6F0E33C634F6A58241F4E5F4AF2D1E + +Count = 734 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 00010203040506 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF988B1EBA8C786A0BD21EDD2CC9F4424B9E + +Count = 735 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 0001020304050607 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF9880208948049442301F31BDB86802307E + +Count = 736 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF9839F13189BB3F1FAAFDBA602776938D82 + +Count = 737 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 00010203040506070809 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF9805BE0298841396C22227D0465CC4BAF2 + +Count = 738 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98361B2B879760C4F0BFF0FE09BB5D4B73 + +Count = 739 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF9892275FD41144C1A2298D0AC84D5148FB + +Count = 740 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98E555F890BADA9729C2E87065D6C4B31B + +Count = 741 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98700B10867332F2BCB487A5FAE7F83915 + +Count = 742 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98FCF8337F347A626E91997A2ABA5CE4AA + +Count = 743 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98361590C77D97748DF46364CE2B978EAA + +Count = 744 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98924207EEBE0ACB6095EFE1BB17091AB0 + +Count = 745 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98BC0F93270411384A8376D8FF30CC67ED + +Count = 746 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF9837CF28BD5D631114C31548DD1B1865FC + +Count = 747 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98EE7A782B340B7607F8C5FAA58817BD9B + +Count = 748 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98518355B161EE8E7680473883C22A6E89 + +Count = 749 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF9847B539E3D789259DDF2A388A1BD9F690 + +Count = 750 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98F9841C696824016BBA320212224318A9 + +Count = 751 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF988E8DDA716ADF2A11A3CF74463E8622C5 + +Count = 752 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98A162F7E219A601C773BE1BAE5804BEF4 + +Count = 753 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98A4F39E958D43C3C837D61A1BE5567D28 + +Count = 754 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98283EF3B42A180580D2599B548BCEE499 + +Count = 755 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98322F5BE0055656D74D94A6EB5E85D44E + +Count = 756 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98AACF8B818712AC73E99242049F216555 + +Count = 757 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF9814D605C55F3BBD7F2738D94BE49112A4 + +Count = 758 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF984EA7E3A521AD0D81BE6BDFE9C5D2A87A + +Count = 759 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF9820D8498001347EAB25E49B6E4DE47129 + +Count = 760 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA315A271C403148CCC76B3CBEA9095699 + +Count = 761 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 00 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CAB1BE7E48B113D90B86651F7F5CFB0B14 + +Count = 762 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 0001 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA66305F904B9820DF434E7A4B8F99526F + +Count = 763 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA45E81EAC4D373AF1E89DFE07126F003E + +Count = 764 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 00010203 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CAAF941A5CB0A52494205F5C5C942EB886 + +Count = 765 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 0001020304 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA31B235475D6783C45E17914FF9EA8D1A + +Count = 766 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CAE3463B1C1878571273A814C1B9BB4481 + +Count = 767 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 00010203040506 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CAC3378FA3A626AA65EF34CCEDB9562201 + +Count = 768 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 0001020304050607 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CAC809BC67DAD8E387EED85D9C251659E1 + +Count = 769 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA71D804A66573BE1D0C5380033B87E41D + +Count = 770 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 00010203040506070809 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA4D9737B75A5F3775D3CE306211D0D36D + +Count = 771 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7E321EA8492C65474E191E2DF64922EC + +Count = 772 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CADA0E6AFBCF086015D864EAEC00452164 + +Count = 773 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CAAD7CCDBF6496369E330190419BD0DA84 + +Count = 774 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA382225A9AD7E530B456E45DEAAEC508A + +Count = 775 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CAB4D10650EA36C3D960709A0EF7488D35 + +Count = 776 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7E3CA5E8A3DBD53A058A84EA6683E735 + +Count = 777 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CADA6B32C160466AD76406019F5A1D732F + +Count = 778 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CAF426A608DA5D99FD729F38DB7DD80E72 + +Count = 779 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7FE61D92832FB0A332FCA8F9560C0C63 + +Count = 780 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CAA6534D04EA47D7B0092C1A81C503D404 + +Count = 781 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA19AA609EBFA22FC171AED8A78F3E0716 + +Count = 782 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA0F9C0CCC09C5842A2EC3D8AE56CD9F0F + +Count = 783 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CAB1AD2946B668A0DC4BDBE2366F577136 + +Count = 784 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CAC6A4EF5EB4938BA65226946273924B5A + +Count = 785 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CAE94BC2CDC7EAA0708257FB8A1510D76B + +Count = 786 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CAECDAABBA530F627FC63FFA3FA84214B7 + +Count = 787 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA6017C69BF454A43723B07B70C6DA8D06 + +Count = 788 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7A066ECFDB1AF760BC7D46CF1391BDD1 + +Count = 789 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CAE2E6BEAE595E0DC4187BA220D2350CCA + +Count = 790 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA5CFF30EA81771CC8D6D1396FA9857B3B + +Count = 791 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA068ED68AFFE1AC364F823FCD88C6C1E5 + +Count = 792 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA68F17CAFDF78DF1CD40D7B4A00F018B6 + +Count = 793 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D3879249A8815AA6E1E2FADA01DA93FB4 + +Count = 794 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 00 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7DB89D7DCE79373BA95F218E61E85B6239 + +Count = 795 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 0001 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D6F135C1683BCC27D9A0AEB553B393B42 + +Count = 796 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D4CCB1D2A8513D85331D96F19A6CF6913 + +Count = 797 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 00010203 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7DA6B719DA7881C636F91BCD42208ED1AB + +Count = 798 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 0001020304 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D389136C195436166875300514D4AE437 + +Count = 799 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7DEA65389AD05CB5B0AAEC85DF0D1B2DAC + +Count = 800 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 00010203040506 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7DCA148C256E0248C736705DF30DF64B2C + +Count = 801 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 0001020304050607 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7DC12ABFE112FC0125379CCC8291B630CC + +Count = 802 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D78FB0720AD575CBFD517111D8F278D30 + +Count = 803 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 00010203040506070809 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D44B43431927BD5D70A8AA17CA570BA40 + +Count = 804 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D77111D2E810887E5975D8F3342E94BC1 + +Count = 805 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7DD32D697D072C82B701207BF2B4E54849 + +Count = 806 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7DA45FCE39ACB2D43CEA45015F2F70B3A9 + +Count = 807 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D3101262F655AB1A99C2AD4C01E4C39A7 + +Count = 808 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7DBDF205D62212217BB9340B1043E8E418 + +Count = 809 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D771FA66E6BFF3798DCCE15F4D2238E18 + +Count = 810 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7DD3483147A8628875BD429081EEBD1A02 + +Count = 811 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7DFD05A58E12797B5FABDBA9C5C978675F + +Count = 812 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D76C51E144B0B5201EBB839E7E2AC654E + +Count = 813 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7DAF704E8222633512D0688B9F71A3BD29 + +Count = 814 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D108963187786CD63A8EA49B93B9E6E3B + +Count = 815 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D06BF0F4AC1E16688F78749B0E26DF622 + +Count = 816 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7DB88E2AC07E4C427E929F7328DBF7181B + +Count = 817 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7DCF87ECD87CB769048B62057CC7322277 + +Count = 818 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7DE068C14B0FCE42D25B136A94A1B0BE46 + +Count = 819 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7DE5F9A83C9B2B80DD1F7B6B211CE27D9A + +Count = 820 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D6934C51D3C704695FAF4EA6E727AE42B + +Count = 821 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D73256D49133E15C26539D7D1A731D4FC + +Count = 822 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7DEBC5BD28917AEF66C13F333E669565E7 + +Count = 823 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D55DC336C4953FE6A0F95A8711D251216 + +Count = 824 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D0FADD50C37C54E9496C6AED33C66A8C8 + +Count = 825 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F1011121314151617 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D61D27F29175C3DBE0D49EA54B450719B + +Count = 826 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D56D289C6B924DE277E1A8E88E768123B25 + +Count = 827 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 00 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D56526D9FEDD5FCB6B95B80AB269DE066A8 + +Count = 828 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 0001 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D5685E3BE352F774F6D9EABCE124E823FD3 + +Count = 829 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D56A63BFF0929D8554335784A5ED3746D82 + +Count = 830 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 00010203 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D564C47FBF9D44A4B26FDBAE8055535D53A + +Count = 831 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 0001020304 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D56D261D4E23988EC7683F2251638F1E0A6 + +Count = 832 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D560095DAB97C9738A0AE4DA09878A0293D + +Count = 833 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 00010203040506 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D5620E46E06C2C9C5D732D178B4784D4FBD + +Count = 834 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 0001020304050607 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D562BDA5DC2BE378C35333DE9C5E40D345D + +Count = 835 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D56920BE503019CD1AFD1B6345AFA9C89A1 + +Count = 836 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 00010203040506070809 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D56AE44D6123EB058C70E2B843BD0CBBED1 + +Count = 837 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D569DE1FF0D2DC30AF593FCAA7437524F50 + +Count = 838 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D5639DD8B5EABE70FA705815EB5C15E4CD8 + +Count = 839 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D564EAF2C1A0079592CEEE424185ACBB738 + +Count = 840 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D56DBF1C40CC9913CB9988BF1876BF73D36 + +Count = 841 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565702E7F58ED9AC6BBD952E573653E089 + +Count = 842 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D569DEF444DC734BA88D86F30B3A7988A89 + +Count = 843 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D5639B8D36404A90565B9E3B5C69B061E93 + +Count = 844 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D5617F547ADBEB2F64FAF7A8C82BCC363CE + +Count = 845 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D569C35FC37E7C0DF11EF191CA0971761DF + +Count = 846 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D564580ACA18EA8B802D4C9AED80418B9B8 + +Count = 847 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D56FA79813BDB4D4073AC4B6CFE4E256AAA + +Count = 848 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D56EC4FED696D2AEB98F3266CF797D6F2B3 + +Count = 849 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D56527EC8E3D287CF6E963E566FAE4C1C8A + +Count = 850 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D5625770EFBD07CE4148FC3203BB28926E6 + +Count = 851 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D560A982368A305CFC25FB24FD3D40BBAD7 + +Count = 852 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D560F094A1F37E00DCD1BDA4E666959790B + +Count = 853 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D5683C4273E90BBCB85FE55CF2907C1E0BA + +Count = 854 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D5699D58F6ABFF598D26198F296D28AD06D + +Count = 855 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D5601355F0B3DB16276C59E1679132E6176 + +Count = 856 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D56BF2CD14FE598737A0B348D36689E1687 + +Count = 857 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D56E55D372F9B0EC38492678B9449DDAC59 + +Count = 858 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D568B229D0ABB97B0AE09E8CF13C1EB750A + +Count = 859 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D5652EB73118CA18636EBDB576C67EE1D205E + +Count = 860 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 00 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D56526B9748D850A4A72C9A594FA61BEF7DD3 + +Count = 861 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 0001 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D5652BC196900AA2F5EF85F722A92C88D24A8 + +Count = 862 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D56529FC1283CAC8044D6F4A1AEDE557B76F9 + +Count = 863 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 00010203 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565275BD2CCC51125AB33C630C85D33ACE41 + +Count = 864 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 0001020304 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D5652EB9B03D7BCD0FDE3422BC196BEFEFBDD + +Count = 865 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D5652396F0D8CF9CF29356F944418FEAF3246 + +Count = 866 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 00010203040506 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D5652191EB9334791D442F3089C34FE4254C6 + +Count = 867 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 0001020304050607 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565212208AF73B6F9DA0F2E40D4562022F26 + +Count = 868 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D5652ABF1323684C4C03A106FD0DA7C9392DA + +Count = 869 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 00010203040506070809 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565297BE0127BBE84952CFF260BB56C4A5AA + +Count = 870 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D5652A41B2838A89B1B6052254EF4B15D542B + +Count = 871 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565200275C6B2EBF1E32C458BA35475157A3 + +Count = 872 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D56527755FB2F852148B92F3DC098DCC4AC43 + +Count = 873 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D5652E20B13394CC92D2C59521507EDF8264D + +Count = 874 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D56526EF830C00B81BDFE7C4CCAD7B05CFBF2 + +Count = 875 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D5652A4159378426CAB1D19B6D433219791F2 + +Count = 876 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D56520042045181F114F0783A51461D0905E8 + +Count = 877 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D56522E0F90983BEAE7DA6EA368023ACC78B5 + +Count = 878 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D5652A5CF2B026298CE842EC0F82011187AA4 + +Count = 879 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D56527C7A7B940BF0A99715104A588217A2C3 + +Count = 880 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D5652C383560E5E1551E66D92887EC82A71D1 + +Count = 881 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D5652D5B53A5CE872FA0D32FF887711D9E9C8 + +Count = 882 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D56526B841FD657DFDEFB57E7B2EF284307F1 + +Count = 883 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D56521C8DD9CE5524F5814E1AC4BB34863D9D + +Count = 884 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D56523362F45D265DDE579E6BAB535204A1AC + +Count = 885 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565236F39D2AB2B81C58DA03AAE6EF566270 + +Count = 886 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D5652BA3EF00B15E3DA103F8C2BA981CEFBC1 + +Count = 887 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D5652A02F585F3AAD8947A04116165485CB16 + +Count = 888 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565238CF883EB8E973E30447F2F995217A0D + +Count = 889 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565286D6067A60C062EFCAED69B6EE910DFC + +Count = 890 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D5652DCA7E01A1E56D21153BE6F14CFD2B722 + +Count = 891 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F10111213141516171819 +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D5652B2D84A3F3ECFA13BC8312B9347E46E71 + +Count = 892 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246DE164A4E9E3FBCE56CDC9BFB7E8EA0AF + +Count = 893 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 00 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D5652465EF2131A6F1D2D222DD2B83A8B7CFD22 + +Count = 894 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 0001 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246897C32C29596D4F6E8F9DD0E581EA459 + +Count = 895 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AAA473FE9339CED8432A5942C5E8F608 + +Count = 896 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 00010203 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D56524640D8770E6EABD0BD8BE8FB1943A94EB0 + +Count = 897 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 0001020304 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246DEFE5815836977EDF5A0360A2E6D7B2C + +Count = 898 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D5652460C0A564EC676A33BD81FB3846E3CB2B7 + +Count = 899 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 00010203040506 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D5652462C7BE2F178285E4C44836BA86ED1D437 + +Count = 900 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 0001020304050607 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D5652462745D13504D617AE456FFAD9F291AFD7 + +Count = 901 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D5652469E9469F4BB7D4A34A7E42746EC00122B + +Count = 902 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 00010203040506070809 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246A2DB5AE58451C35C78799727C657255B + +Count = 903 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246917E73FA9722916EE5AEB96821CED4DA + +Count = 904 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246354207A91106943C73D34DA9D7C2D752 + +Count = 905 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D5652464230A0EDBA98C2B798B637044C572CB2 + +Count = 906 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246D76E48FB7370A722EED9E29B7D6BA6BC + +Count = 907 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D5652465B9D6B02343837F0CBC73D4B20CF7B03 + +Count = 908 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D5652469170C8BA7DD52113AE3D23AFB1041103 + +Count = 909 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D56524635275F93BE489EFECFB1A6DA8D9A8519 + +Count = 910 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D5652461B6ACB5A04536DD4D9289F9EAA5FF844 + +Count = 911 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D56524690AA70C05D21448A994B0FBC818BFA55 + +Count = 912 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246491F205634492399A29BBDC412842232 + +Count = 913 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246F6E60DCC61ACDBE8DA197FE258B9F120 + +Count = 914 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246E0D0619ED7CB700385747FEB814A6939 + +Count = 915 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D5652465EE14414686654F5E06C4573B8D08700 + +Count = 916 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D56524629E8820C6A9D7F8FF9913327A415BD6C + +Count = 917 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D5652460607AF9F19E4545929E05CCFC297215D + +Count = 918 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D5652460396C6E88D0196566D885D7A7FC5E281 + +Count = 919 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D5652468F5BABC92A5A501E8807DC35115D7B30 + +Count = 920 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246954A039D0514034917CAE18AC4164BE7 + +Count = 921 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D5652460DAAD3FC8750F9EDB3CC056505B2FAFC + +Count = 922 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246B3B35DB85F79E8E17D669E2A7E028D0D + +Count = 923 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246E9C2BBD821EF581FE43598885F4137D3 + +Count = 924 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D56524687BD11FD01762B357FBADC0FD777EE80 + +Count = 925 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246ADB5240A851D678E9A0392822781F0652A + +Count = 926 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 00 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD35C053D1EC451F5D429CA1E6740238A7 + +Count = 927 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 0001 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246ADE24E720916CEE68987B7C4D2A76061DC + +Count = 928 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246ADC19633351061FCA72C64409E3A96338D + +Count = 929 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 00010203 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD2BEA37C5EDF3E2C2E4A6E2C5BCD78B35 + +Count = 930 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 0001020304 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246ADB5CC18DE003145929AEE2FD6D113BEA9 + +Count = 931 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD67381685452E9144B751AA5891427732 + +Count = 932 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 00010203040506 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD4749A23AFB706C332BCD727491AF11B2 + +Count = 933 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 0001020304050607 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD4C7791FE878E25D12A21E3050DEF6A52 + +Count = 934 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246ADF5A6293F3825784BC8AA3E9A137ED7AE + +Count = 935 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 00010203040506070809 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246ADC9E91A2E0709F12317378EFB3929E0DE + +Count = 936 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246ADFA4C3331147AA3118AE0A0B4DEB0115F + +Count = 937 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD5E704762925EA6431C9D547528BC12D7 + +Count = 938 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD2902E02639C0F0C8F7F82ED8B329E937 + +Count = 939 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246ADBC5C0830F028955D8197FB4782156339 + +Count = 940 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD30AF2BC9B760058FA4892497DFB1BE86 + +Count = 941 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246ADFA428871FE8D136CC1733A734E7AD486 + +Count = 942 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD5E151F583D10AC81A0FFBF0672E4409C + +Count = 943 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD70588B91870B5FABB666864255213DC1 + +Count = 944 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246ADFB98300BDE7976F5F60516607EF53FD0 + +Count = 945 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD222D609DB71111E6CDD5A418EDFAE7B7 + +Count = 946 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD9DD44D07E2F4E997B557663EA7C734A5 + +Count = 947 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD8BE221555493427CEA3A66377E34ACBC + +Count = 948 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD35D304DFEB3E668A8F225CAF47AE4285 + +Count = 949 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD42DAC2C7E9C54DF096DF2AFB5B6B78E9 + +Count = 950 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD6D35EF549ABC662646AE45133DE9E4D8 + +Count = 951 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD68A486230E59A42902C644A680BB2704 + +Count = 952 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246ADE469EB02A9026261E749C5E9EE23BEB5 + +Count = 953 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246ADFE784356864C31367884F8563B688E62 + +Count = 954 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD669893370408CB92DC821CB9FACC3F79 + +Count = 955 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246ADD8811D73DC21DA9E122887F6817C4888 + +Count = 956 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD82F0FB13A2B76A608B7B8154A03FF256 + +Count = 957 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246ADEC8F5136822E194A10F4C5D328092B05 + +Count = 958 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02449FB931CB69C53A8FFFCFD806C36049 + +Count = 959 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 00 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02C47BE0653A4B54FDCEF1EC19F3313DC4 + +Count = 960 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 0001 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD0213F5C1BDC0C0AD290BDA892D205364BF + +Count = 961 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02302D8081C66FB707A0090D61BDA536EE + +Count = 962 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 00010203 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02DA5184713BFDA96268CBAF3A3BE48E56 + +Count = 963 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 0001020304 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD024477AB6AD63F0E32168362295620BBCA + +Count = 964 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD029683A5319320DAE43B3CE7A716717251 + +Count = 965 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 00010203040506 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02B6F2118E2D7E2793A7A03F8B169C14D1 + +Count = 966 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 0001020304050607 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02BDCC224A51806E71A64CAEFA8ADC6F31 + +Count = 967 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02041D9A8BEE2B33EB44C77365944DD2CD + +Count = 968 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 00010203040506070809 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD023852A99AD107BA839B5AC304BE1AE5BD + +Count = 969 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD020BF78085C274E8B1068DED4B5983143C + +Count = 970 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02AFCBF4D64450EDE390F0198AAF8F17B4 + +Count = 971 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02D8B95392EFCEBB687B956327341AEC54 + +Count = 972 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD024DE7BB842626DEFD0DFAB6B80526665A + +Count = 973 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02C114987D616E4E2F28E469685882BBE5 + +Count = 974 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD020BF93BC5288358CC4D1E778CC949D1E5 + +Count = 975 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02AFAEACECEB1EE7212C92F2F9F5D745FF + +Count = 976 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD0281E338255105140B3A0BCBBDD21238A2 + +Count = 977 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD020A2383BF08773D557A685B9FF9C63AB3 + +Count = 978 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02D396D329611F5A4641B8E9E76AC9E2D4 + +Count = 979 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD026C6FFEB334FAA237393A2BC120F431C6 + +Count = 980 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD027A5992E1829D09DC66572BC8F907A9DF + +Count = 981 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02C468B76B3D302D2A034F1150C09D47E6 + +Count = 982 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02B36171733FCB06501AB26704DC587D8A + +Count = 983 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD029C8E5CE04CB22D86CAC308ECBADAE1BB + +Count = 984 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02991F3597D857EF898EAB095907882267 + +Count = 985 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD0215D258B67F0C29C16B2488166910BBD6 + +Count = 986 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD020FC3F0E250427A96F4E9B5A9BC5B8B01 + +Count = 987 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD0297232083D206803250EF51467DFF3A1A + +Count = 988 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02293AAEC70A2F913E9E45CA09064F4DEB + +Count = 989 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02734B48A774B921C00716CCAB270CF735 + +Count = 990 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD021D34E282542052EA9C99882CAF3A2E66 + +Count = 991 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD0207543A1A74389A92DB5117FCAA6311BF17 + +Count = 992 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 00 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD0207D4DE4320C9B8031C1019DF6B96E3E29A + +Count = 993 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 0001 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD0207035062F83333FAC8D532BA5F4581BBE1 + +Count = 994 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD0207208823C4359CE0E67EE13E13D877E9B0 + +Count = 995 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 00010203 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD0207CAF42734C80EFE83B6239C485E365108 + +Count = 996 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 0001020304 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD020754D2082F25CC59D3C86B515B33F26494 + +Count = 997 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02078626067460D38D05E5D4D4D573A3AD0F + +Count = 998 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 00010203040506 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD0207A657B2CBDE8D707279480CF9734ECB8F + +Count = 999 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 0001020304050607 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD0207AD69810FA273399078A49D88EF0EB06F + +Count = 1000 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD020714B839CE1DD8640A9A2F4017F19F0D93 + +Count = 1001 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 00010203040506070809 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD020728F70ADF22F4ED6245B2F076DBC83AE3 + +Count = 1002 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02071B5223C03187BF50D865DE393C51CB62 + +Count = 1003 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD0207BF6E5793B7A3BA024E182AF8CA5DC8EA + +Count = 1004 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD0207C81CF0D71C3DEC89A57D505551C8330A + +Count = 1005 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02075D4218C1D5D5891CD31285CA60F4B904 + +Count = 1006 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD0207D1B13B38929D19CEF60C5A1A3D5064BB + +Count = 1007 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02071B5C9880DB700F2D93F644FEAC9B0EBB + +Count = 1008 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD0207BF0B0FA918EDB0C0F27AC18B90059AA1 + +Count = 1009 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD020791469B60A2F643EAE4E3F8CFB7C0E7FC + +Count = 1010 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02071A8620FAFB846AB4A48068ED9C14E5ED + +Count = 1011 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD0207C333706C92EC0DA79F50DA950F1B3D8A + +Count = 1012 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02077CCA5DF6C709F5D6E7D218B34526EE98 + +Count = 1013 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02076AFC31A4716E5E3DB8BF18BA9CD57681 + +Count = 1014 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD0207D4CD142ECEC37ACBDDA72222A54F98B8 + +Count = 1015 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD0207A3C4D236CC3851B1C45A5476B98AA2D4 + +Count = 1016 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02078C2BFFA5BF417A67142B3B9EDF083EE5 + +Count = 1017 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD020789BA96D22BA4B86850433A2B625AFD39 + +Count = 1018 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02070577FBF38CFF7E20B5CCBB640CC26488 + +Count = 1019 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02071F6653A7A3B12D772A0186DBD989545F + +Count = 1020 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD0207878683C621F5D7D38E076234182DE544 + +Count = 1021 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD0207399F0D82F9DCC6DF40ADF97B639D92B5 + +Count = 1022 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD020763EEEBE2874A7621D9FEFFD942DE286B + +Count = 1023 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02070D9141C7A7D3050B4271BB5ECAE8F138 + +Count = 1024 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02070EE5AF8F9C40050554CBD76E8A5C19BE07 + +Count = 1025 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 00 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02070E654BD6C8B12794938AD94D4BA9EBE38A + +Count = 1026 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 0001 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02070EB2C5F7104BAC6D474FF2287F7A89BAF1 + +Count = 1027 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02070E911DB62C4D037769E421AC33E77FE8A0 + +Count = 1028 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 00010203 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02070E7B61B2DCB091690C2CE30E68613E5018 + +Count = 1029 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 0001020304 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02070EE5479DC75D53CE5C52ABC37B0CFA6584 + +Count = 1030 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02070E37B3939C184C1A8A7F1446F54CABAC1F + +Count = 1031 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 00010203040506 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02070E17C22723A612E7FDE3889ED94C46CA9F + +Count = 1032 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 0001020304050607 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02070E1CFC14E7DAECAE1FE2640FA8D006B17F + +Count = 1033 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02070EA52DAC266547F38500EFD237CE970C83 + +Count = 1034 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 00010203040506070809 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02070E99629F375A6B7AEDDF726256E4C03BF3 + +Count = 1035 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02070EAAC7B628491828DF42A54C190359CA72 + +Count = 1036 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02070E0EFBC27BCF3C2D8DD4D8B8D8F555C9FA + +Count = 1037 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02070E7989653F64A27B063FBDC2756EC0321A + +Count = 1038 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02070EECD78D29AD4A1E9349D217EA5FFCB814 + +Count = 1039 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02070E6024AED0EA028E416CCCC83A025865AB + +Count = 1040 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02070EAAC90D68A3EF98A20936D6DE93930FAB + +Count = 1041 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02070E0E9E9A416072274F68BA53ABAF0D9BB1 + +Count = 1042 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02070E20D30E88DA69D4657E236AEF88C8E6EC + +Count = 1043 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02070EAB13B512831BFD3B3E40FACDA31CE4FD + +Count = 1044 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02070E72A6E584EA739A28059048B530133C9A + +Count = 1045 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02070ECD5FC81EBF9662597D128A937A2EEF88 + +Count = 1046 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02070EDB69A44C09F1C9B2227F8A9AA3DD7791 + +Count = 1047 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02070E655881C6B65CED444767B0029A4799A8 + +Count = 1048 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02070E125147DEB4A7C63E5E9AC6568682A3C4 + +Count = 1049 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02070E3DBE6A4DC7DEEDE88EEBA9BEE0003FF5 + +Count = 1050 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02070E382F033A533B2FE7CA83A80B5D52FC29 + +Count = 1051 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02070EB4E26E1BF460E9AF2F0C294433CA6598 + +Count = 1052 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02070EAEF3C64FDB2EBAF8B0C114FBE681554F + +Count = 1053 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02070E3613162E596A405C14C7F0142725E454 + +Count = 1054 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02070E880A986A81435150DA6D6B5B5C9593A5 + +Count = 1055 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02070ED27B7E0AFFD5E1AE433E6DF97DD6297B + +Count = 1056 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BB3850E94DBF98CA7D565246AD02070EBC04D42FDF4C9284D8B1297EF5E0F028 + +Count = 1057 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BBE70783C4E76E8339FCB66C381327D9CF159AF1D2E487A8710728DE9B07AEC5BA + +Count = 1058 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 00 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BBE70783C4E76E8339FCB66C381327D9CF957EA88615A539B64626FD5AF25C9837 + +Count = 1059 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 0001 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BBE70783C4E76E8339FCB66C381327D9CF42F0895EEF2EC062830D986E213EC14C + +Count = 1060 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BBE70783C4E76E8339FCB66C381327D9CF6128C862E981DA4C28DE1C22BCC8931D + +Count = 1061 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 00010203 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BBE70783C4E76E8339FCB66C381327D9CF8B54CC921413C429E01CBE793A892BA5 + +Count = 1062 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 0001020304 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BBE70783C4E76E8339FCB66C381327D9CF1572E389F9D163799E54736A574D1E39 + +Count = 1063 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BBE70783C4E76E8339FCB66C381327D9CFC786EDD2BCCEB7AFB3EBF6E4171CD7A2 + +Count = 1064 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 00010203040506 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BBE70783C4E76E8339FCB66C381327D9CFE7F7596D02904AD82F772EC817F1B122 + +Count = 1065 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 0001020304050607 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BBE70783C4E76E8339FCB66C381327D9CFECC96AA97E6E033A2E9BBFB98BB1CAC2 + +Count = 1066 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BBE70783C4E76E8339FCB66C381327D9CF5518D268C1C55EA0CC1062269520773E + +Count = 1067 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 00010203040506070809 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BBE70783C4E76E8339FCB66C381327D9CF6957E179FEE9D7C8138DD247BF77404E + +Count = 1068 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BBE70783C4E76E8339FCB66C381327D9CF5AF2C866ED9A85FA8E5AFC0858EEB1CF + +Count = 1069 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BBE70783C4E76E8339FCB66C381327D9CFFECEBC356BBE80A8182708C9AEE2B247 + +Count = 1070 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BBE70783C4E76E8339FCB66C381327D9CF89BC1B71C020D623F3427264357749A7 + +Count = 1071 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BBE70783C4E76E8339FCB66C381327D9CF1CE2F36709C8B3B6852DA7FB044BC3A9 + +Count = 1072 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BBE70783C4E76E8339FCB66C381327D9CF9011D09E4E802364A033782B59EF1E16 + +Count = 1073 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BBE70783C4E76E8339FCB66C381327D9CF5AFC7326076D3587C5C966CFC8247416 + +Count = 1074 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F10 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BBE70783C4E76E8339FCB66C381327D9CFFEABE40FC4F08A6AA445E3BAF4BAE00C + +Count = 1075 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F1011 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BBE70783C4E76E8339FCB66C381327D9CFD0E670C67EEB7940B2DCDAFED37F9D51 + +Count = 1076 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BBE70783C4E76E8339FCB66C381327D9CF5B26CB5C2799501EF2BF4ADCF8AB9F40 + +Count = 1077 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F10111213 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BBE70783C4E76E8339FCB66C381327D9CF82939BCA4EF1370DC96FF8A46BA44727 + +Count = 1078 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F1011121314 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BBE70783C4E76E8339FCB66C381327D9CF3D6AB6501B14CF7CB1ED3A8221999435 + +Count = 1079 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112131415 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BBE70783C4E76E8339FCB66C381327D9CF2B5CDA02AD736497EE803A8BF86A0C2C + +Count = 1080 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F10111213141516 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BBE70783C4E76E8339FCB66C381327D9CF956DFF8812DE40618B980013C1F0E215 + +Count = 1081 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F1011121314151617 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BBE70783C4E76E8339FCB66C381327D9CFE264399010256B1B92657647DD35D879 + +Count = 1082 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BBE70783C4E76E8339FCB66C381327D9CFCD8B1403635C40CD421419AFBBB74448 + +Count = 1083 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F10111213141516171819 +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BBE70783C4E76E8339FCB66C381327D9CFC81A7D74F7B982C2067C181A06E58794 + +Count = 1084 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BBE70783C4E76E8339FCB66C381327D9CF44D7105550E2448AE3F39955687D1E25 + +Count = 1085 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BBE70783C4E76E8339FCB66C381327D9CF5EC6B8017FAC17DD7C3EA4EABD362EF2 + +Count = 1086 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BBE70783C4E76E8339FCB66C381327D9CFC6266860FDE8ED79D83840057C929FE9 + +Count = 1087 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BBE70783C4E76E8339FCB66C381327D9CF783FE62425C1FC751692DB4A0722E818 + +Count = 1088 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BBE70783C4E76E8339FCB66C381327D9CF224E00445B574C8B8FC1DDE8266152C6 + +Count = 1089 +Key = 000102030405060708090A0B0C0D0E0F +Nonce = 000102030405060708090A0B0C0D0E0F +PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +CT = 22D072FBFF7C1E1B601F8BD9CA10C7BBE70783C4E76E8339FCB66C381327D9CF4C31AA617BCE3FA1144E996FAE578B95 + diff --git a/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/armcortexm_1/api.h b/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/armcortexm_1/api.h new file mode 100644 index 0000000..a4aa567 --- /dev/null +++ b/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/armcortexm_1/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/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/armcortexm_1/crypto_aead.h b/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/armcortexm_1/crypto_aead.h new file mode 100644 index 0000000..e2ca9b0 --- /dev/null +++ b/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/armcortexm_1/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 +); \ No newline at end of file diff --git a/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/armcortexm_1/encrypt.c b/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/armcortexm_1/encrypt.c new file mode 100644 index 0000000..de98d07 --- /dev/null +++ b/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/armcortexm_1/encrypt.c @@ -0,0 +1,201 @@ +/****************************************************************************** +* Constant-time implementation of SKINNY-AEAD-M1 (v1.1). +* +* Two blocks are treated in parallel with SKINNY-128-384 whenever possible. +* +* For more details, see the paper at: https:// +* +* @author Alexandre Adomnicai, Nanyang Technological University, +* alexandre.adomnicai@ntu.edu.sg +* +* @date May 2020 +******************************************************************************/ +#include "skinny128.h" +#include "skinnyaead.h" +#include +#include + +/****************************************************************************** +* x ^= y where x, y are 128-bit blocks (16 bytes array). +******************************************************************************/ +static void xor_block(u8 * x, const u8* y) { + for(int i = 0; i < BLOCKBYTES; i++) + x[i] ^= y[i]; +} + +/****************************************************************************** +* Encryption and authentication using SKINNY-AEAD-M1 +******************************************************************************/ +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) { + u64 i,lfsr = 1; + u8 feedback; + u32 rtk1[4*16]; + u32 rtk2_3[4*SKINNY128_384_ROUNDS]; + u8 tmp[BLOCKBYTES], auth[BLOCKBYTES], sum[BLOCKBYTES]; + (void)nsec; + + // ----------------- Initialization ----------------- + *clen = mlen + TAGBYTES; + tkschedule_lfsr(rtk2_3, npub, k, SKINNY128_384_ROUNDS); + tkschedule_perm(rtk2_3); + memset(tmp, 0x00, BLOCKBYTES); + memset(auth, 0x00, BLOCKBYTES); + memset(sum, 0x00, BLOCKBYTES); + // ----------------- Initialization ----------------- + + // ----------------- Process the plaintext ----------------- + while (mlen >= BLOCKBYTES) { // while entire blocks to process + LE_STR_64(tmp, lfsr); + tkschedule_perm_tk1(rtk1, tmp); // precompute RTK1 given the LFSR + skinny128_384(c, rtk2_3, m, rtk1); + xor_block(sum, m); // sum for tag computation + mlen -= BLOCKBYTES; + c += BLOCKBYTES; + m += BLOCKBYTES; + UPDATE_LFSR(lfsr); // update lfsr for next block + } + SET_DOMAIN(tmp, 0x04); // domain for tag computation + if (mlen > 0) { // last block is partial + LE_STR_64(tmp, lfsr); // lfsr for last block + SET_DOMAIN(tmp, 0x01); // domain for padding + for(i = 0; i < mlen; i++) + sum[i] ^= m[i]; // sum for tag computation + sum[i] ^= 0x80; // padding + tkschedule_perm_tk1(rtk1, tmp); + skinny128_384(auth, rtk2_3, auth, rtk1); // encrypt 'auth' = 0^16 + for(i = 0; i < mlen; i++) + c[i] = auth[i] ^ m[i]; // encrypted padded block + c += mlen; + SET_DOMAIN(tmp, 0x05); // domain for tag computation + UPDATE_LFSR(lfsr); + } + LE_STR_64(tmp, lfsr); // lfsr for tag computation + tkschedule_perm_tk1(rtk1, tmp); + skinny128_384(sum, rtk2_3, sum, rtk1); // compute the tag + memcpy(c, sum, TAGBYTES); + // ----------------- Process the plaintext ----------------- + + // ----------------- Process the associated data ----------------- + lfsr = 1; + SET_DOMAIN(tmp, 0x02); + memset(auth, 0x00, BLOCKBYTES); + while (adlen >= BLOCKBYTES) { + LE_STR_64(tmp, lfsr); + tkschedule_perm_tk1(rtk1, tmp); + skinny128_384(sum, rtk2_3, ad, rtk1); // use 'sum' as tmp array + xor_block(auth, sum); + adlen -= BLOCKBYTES; + ad += BLOCKBYTES; + UPDATE_LFSR(lfsr); + } + if (adlen > 0) { + LE_STR_64(tmp, lfsr); + SET_DOMAIN(tmp, 0x03); // domain for padding ad + tkschedule_perm_tk1(rtk1, tmp); + memset(tmp, 0x00, BLOCKBYTES); // padding + memcpy(tmp, ad, adlen); // padding + tmp[adlen] = 0x80; // padding + skinny128_384(tmp, rtk2_3, tmp, rtk1); + xor_block(auth, tmp); + } + xor_block(c, auth); // XOR for tag computation + // ----------------- Process the associated data ----------------- + + return 0; +} + +/****************************************************************************** +* Encryption and authentication using SKINNY-AEAD-M1 +******************************************************************************/ +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) { + u64 i,lfsr = 1; + u8 feedback; + u32 rtk1[4*16]; + u32 rtk2_3[4*SKINNY128_384_ROUNDS]; + u8 tmp[2*BLOCKBYTES], auth[BLOCKBYTES], sum[BLOCKBYTES]; + (void)nsec; + + if (clen < TAGBYTES) + return -1; + + // ----------------- Initialization ----------------- + clen -= TAGBYTES; + *mlen = clen; + tkschedule_lfsr(rtk2_3, npub, k, SKINNY128_384_ROUNDS); + tkschedule_perm(rtk2_3); + memset(tmp, 0x00, 2*BLOCKBYTES); + memset(auth, 0x00, BLOCKBYTES); + memset(sum, 0x00, BLOCKBYTES); + // ----------------- Initialization ----------------- + + // ----------------- Process the plaintext ----------------- + while (clen >= BLOCKBYTES) { // while entire blocks to process + LE_STR_64(tmp, lfsr); + tkschedule_perm_tk1(rtk1, tmp); // precompute RTK1 given the LFSR + skinny128_384_inv(m, rtk2_3, c, rtk1); + xor_block(sum, m); // sum for tag computation + clen -= BLOCKBYTES; + c += BLOCKBYTES; + m += BLOCKBYTES; + UPDATE_LFSR(lfsr); // update LFSR for the next block + } + SET_DOMAIN(tmp, 0x04); // domain for tag computation + if (clen > 0) { // last block is partial + LE_STR_64(tmp, lfsr); // lfsr for last block + SET_DOMAIN(tmp, 0x01); // domain for padding + tkschedule_perm_tk1(rtk1, tmp); + skinny128_384(auth, rtk2_3, auth, rtk1); + for(i = 0; i < clen; i++) { + m[i] = auth[i] ^ c[i]; // encrypted padded block + sum[i] ^= m[i]; // sum for tag computation + } + sum[i] ^= 0x80; // padding + c += clen; + SET_DOMAIN(tmp, 0x05); // domain for tag computation + UPDATE_LFSR(lfsr); + } + LE_STR_64(tmp, lfsr); // lfsr for tag computation + tkschedule_perm_tk1(rtk1, tmp); + skinny128_384(sum, rtk2_3, sum, rtk1); // compute the tag + // ----------------- Process the plaintext ----------------- + + // ----------------- Process the associated data ----------------- + lfsr = 1; + SET_DOMAIN(tmp, 0x02); + memset(auth, 0x00, BLOCKBYTES); + while (adlen >= BLOCKBYTES) { + LE_STR_64(tmp, lfsr); + tkschedule_perm_tk1(rtk1, tmp); + skinny128_384(tmp + BLOCKBYTES, rtk2_3, ad, rtk1); + xor_block(auth, tmp + BLOCKBYTES); + adlen -= BLOCKBYTES; + ad += BLOCKBYTES; + UPDATE_LFSR(lfsr); + } + if (adlen > 0) { + LE_STR_64(tmp, lfsr); + SET_DOMAIN(tmp, 0x03); // domain for padding ad + tkschedule_perm_tk1(rtk1, tmp); + memset(tmp, 0x00, BLOCKBYTES); // padding + memcpy(tmp, ad, adlen); // padding + tmp[adlen] ^= 0x80; // padding + skinny128_384(tmp, rtk2_3, tmp, rtk1); + xor_block(auth, tmp); + } + xor_block(sum, auth); // XOR for tag computation + feedback = 0; + for(i = 0; i < TAGBYTES; i++) + feedback |= sum[i] ^ c[i]; // constant-time tag verification + return feedback; + // ----------------- Process the associated data ----------------- +} \ No newline at end of file diff --git a/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/armcortexm_1/skinny128.h b/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/armcortexm_1/skinny128.h new file mode 100644 index 0000000..ce1f4f3 --- /dev/null +++ b/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/armcortexm_1/skinny128.h @@ -0,0 +1,16 @@ +#ifndef SKINNY128_H_ +#define SKINNY128_H_ + +typedef unsigned char u8; +typedef unsigned int u32; + +#define SKINNY128_384_ROUNDS 40 + +extern void skinny128_384(u8* ctext, const u32* rtk2_3, const u8* ptext, const u32* rtk1); +extern void skinny128_384_inv(u8* ptext, const u32* rtk2_3, const u8* ctext, const u32* rtk1); +extern void tkschedule_lfsr(u32* rtk2_3, const u8* tk2, const u8* tk3, const int rounds); +extern void tkschedule_perm(u32* rtk2_3); +extern void tkschedule_perm_tk1(u32* rtk1, const u8* tk1); + + +#endif // SKINNY128_H_ \ No newline at end of file diff --git a/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/armcortexm_1/skinny128.s b/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/armcortexm_1/skinny128.s new file mode 100644 index 0000000..9ae625e --- /dev/null +++ b/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/armcortexm_1/skinny128.s @@ -0,0 +1,2137 @@ +/******************************************************************************* +* ARM assembly implementation of fixsliced SKINNY-128-384. +* +* For more details, see the paper at: https:// +* +* @author Alexandre Adomnicai, Nanyang Technological University, +* alexandre.adomnicai@ntu.edu.sg +* +* @date May 2020 +*******************************************************************************/ + +.syntax unified +.thumb + +/******************************************************************************* +* applies P^2 on the tweakey state in a bitsliced manner +*******************************************************************************/ +.align 2 +p2: + movw r1, #0xcc00 + movt r1, #0xcc00 //r1 <- 0xcc00cc00 + movw r10, #0xcc00 + movt r10, #0x0033 //r10<- 0xcc000033 + and r11, r1, r6, ror #14 + bfi r11, r6, #16, #8 + and r12, r6, #0xcc000000 + orr r11, r11, r12, lsr #2 + and r12, r10, r6 + orr r11, r11, r12, lsr #8 + and r12, r6, #0x00cc0000 + orr r6, r11, r12, lsr #18 + and r11, r1, r7, ror #14 + bfi r11, r7, #16, #8 + and r12, r7, #0xcc000000 + orr r11, r11, r12, lsr #2 + and r12, r10, r7 + orr r11, r11, r12, lsr #8 + and r12, r7, #0x00cc0000 + orr r7, r11, r12, lsr #18 + and r11, r1, r8, ror #14 + bfi r11, r8, #16, #8 + and r12, r8, #0xcc000000 + orr r11, r11, r12, lsr #2 + and r12, r10, r8 + orr r11, r11, r12, lsr #8 + and r12, r8, #0x00cc0000 + orr r8, r11, r12, lsr #18 + and r11, r1, r9, ror #14 + bfi r11, r9, #16, #8 + and r12, r9, #0xcc000000 + orr r11, r11, r12, lsr #2 + and r12, r10, r9 + orr r11, r11, r12, lsr #8 + and r12, r9, #0x00cc0000 + orr r9, r11, r12, lsr #18 + bx lr + +/******************************************************************************* +* applies P^4 on the tweakey state in a bitsliced manner +*******************************************************************************/ +.align 2 +p4: + str.w r14, [sp] //store r14 on the stack + movw r14, #0x00cc + movt r14, #0xcc00 //r14<- 0xcc0000cc + movw r12, #0xcc00 + movt r12, #0x3300 //r12<- 0x3300cc00 + movw r11, #0x00cc + movt r11, #0x00cc //r11<- 0x00cc00cc + and r10, r14, r6, ror #22 + and r1, r12, r6, ror #16 + orr r10, r10, r1 + and r1, r6, r11 + orr r10, r10, r1, lsr #2 + movw r1, #0xcc33 //r1 <- 0x0000cc33 + and r6, r6, r1 + orr r6, r10, r6, ror #24 + and r10, r14, r7, ror #22 + and r1, r12, r7, ror #16 + orr r10, r10, r1 + and r1, r7, r11 + orr r10, r10, r1, lsr #2 + movw r1, #0xcc33 //r1 <- 0x0000cc33 + and r7, r7, r1 + orr r7, r10, r7, ror #24 + and r10, r14, r8, ror #22 + and r1, r12, r8, ror #16 + orr r10, r10, r1 + and r1, r8, r11 + orr r10, r10, r1, lsr #2 + movw r1, #0xcc33 //r1 <- 0x0000cc33 + and r8, r8, r1 + orr r8, r10, r8, ror #24 + and r10, r14, r9, ror #22 + ldr.w r14, [sp] //restore r14 + and r12, r12, r9, ror #16 + orr r10, r10, r12 + and r12, r9, r11 + orr r10, r10, r12, lsr #2 + movw r12, #0xcc33 //r1 <- 0x0000cc33 + and r9, r9, r12 + orr r9, r10, r9, ror #24 + bx lr + +/******************************************************************************* +* applies P^6 on the tweakey state in a bitsliced manner +*******************************************************************************/ +.align 2 +p6: + movw r1, #0x3333 //r1 <- 0x00003333 + movw r12, #0x00cc + movt r12, #0x3300 //r12<- 0x330000cc + and r10, r6, r1, ror #8 // --- permute r6 6 times + and r11, r12, r6, ror #24 + orr r11, r11, r10, ror #6 + and r10, r1, r6, ror #10 + orr r11, r11, r10 + and r10, r6, #0x000000cc + orr r11, r11, r10, lsl #14 + and r10, r6, #0x00003300 + orr r6, r11, r10, lsl #2 // permute r6 6 times --- + and r10, r7, r1, ror #8 // --- permute r7 6 times + and r11, r12, r7, ror #24 + orr r11, r11, r10, ror #6 + and r10, r1, r7, ror #10 + orr r11, r11, r10 + and r10, r7, #0x000000cc + orr r11, r11, r10, lsl #14 + and r10, r7, #0x00003300 + orr r7, r11, r10, lsl #2 // permute r7 6 times --- + and r10, r8, r1, ror #8 // --- permute r8 6 times + and r11, r12, r8, ror #24 + orr r11, r11, r10, ror #6 + and r10, r1, r8, ror #10 + orr r11, r11, r10 + and r10, r8, #0x000000cc + orr r11, r11, r10, lsl #14 + and r10, r8, #0x00003300 + orr r8, r11, r10, lsl #2 // permute r8 6 times --- + and r10, r9, r1, ror #8 // --- permute r9 6 times + and r11, r12, r9, ror #24 + orr r11, r11, r10, ror #6 + and r10, r1, r9, ror #10 + orr r11, r11, r10 + and r10, r9, #0x000000cc + orr r11, r11, r10, lsl #14 + and r10, r9, #0x00003300 // permute r9 6 times --- + orr r9, r11, r10, lsl #2 + bx lr + +/******************************************************************************* +* applies P^8 on the tweakey state in a bitsliced manner +*******************************************************************************/ +.align 2 +p8: + movw r12, #0x3333 //r12<- 0x00003333 + movw r1, #0x0000 + movt r1, #0x33cc //r1 <- 0x33cc0000 + and r10, r6, r1 // --- permute r6 8 times + and r11, r1, r6, ror #8 + orr r11, r11, r10, ror #24 + and r10, r6, r12, lsl #2 + orr r11, r11, r10, ror #26 + and r10, r6, r12, lsl #8 + orr r6, r11, r10, lsr #6 // permute r6 8 times --- + and r10, r7, r1 // --- permute r7 8 times + and r11, r1, r7, ror #8 + orr r11, r11, r10, ror #24 + and r10, r7, r12, lsl #2 + orr r11, r11, r10, ror #26 + and r10, r7, r12, lsl #8 + orr r7, r11, r10, lsr #6 // permute r7 8 times --- + and r10, r8, r1 // --- permute r8 8 times + and r11, r1, r8, ror #8 + orr r11, r11, r10, ror #24 + and r10, r8, r12, lsl #2 + orr r11, r11, r10, ror #26 + and r10, r8, r12, lsl #8 + orr r8, r11, r10, lsr #6 // permute r8 8 times --- + and r10, r9, r1 // --- permute r9 8 times + and r11, r1, r9, ror #8 + orr r11, r11, r10, ror #24 + and r10, r9, r12, lsl #2 + orr r11, r11, r10, ror #26 + and r10, r9, r12, lsl #8 + orr r9, r11, r10, lsr #6 // permute r9 8 times --- + bx lr + +/******************************************************************************* +* applies P^10 on the tweakey state in a bitsliced manner +*******************************************************************************/ +.align 2 +p10: + movw r12, #0x0033 + movt r12, #0x3300 //r12<- 0x33000033 + movw r1, #0xcc33 //r1 <- 0x0000cc33 + and r10, r6, r1, ror #8 // --- permute r6 10 times + and r11, r12, r6, ror #26 + orr r11, r11, r10, ror #8 + and r10, r6, r12, ror #24 + orr r11, r11, r10, ror #22 + and r10, r6, #0x00330000 + orr r11, r11, r10, lsr #14 + and r10, r6, #0x0000cc00 + orr r6, r11, r10, lsr #2 // permute r6 10 times --- + and r10, r7, r1, ror #8 // --- permute r6 10 times + and r11, r12, r7, ror #26 + orr r11, r11, r10, ror #8 + and r10, r7, r12, ror #24 + orr r11, r11, r10, ror #22 + and r10, r7, #0x00330000 + orr r11, r11, r10, lsr #14 + and r10, r7, #0x0000cc00 + orr r7, r11, r10, lsr #2 // permute r6 10 times --- + and r10, r8, r1, ror #8 // --- permute r6 10 times + and r11, r12, r8, ror #26 + orr r11, r11, r10, ror #8 + and r10, r8, r12, ror #24 + orr r11, r11, r10, ror #22 + and r10, r8, #0x00330000 + orr r11, r11, r10, lsr #14 + and r10, r8, #0x0000cc00 + orr r8, r11, r10, lsr #2 // permute r6 10 times --- + and r10, r9, r1, ror #8 // --- permute r6 10 times + and r11, r12, r9, ror #26 + orr r11, r11, r10, ror #8 + and r10, r9, r12, ror #24 + orr r11, r11, r10, ror #22 + and r10, r9, #0x00330000 + orr r11, r11, r10, lsr #14 + and r10, r9, #0x0000cc00 + orr r9, r11, r10, lsr #2 // permute r6 10 times --- + bx lr + +/******************************************************************************* +* applies P^12 on the tweakey state in a bitsliced manner +*******************************************************************************/ +.align 2 +p12: + str.w r14, [sp] //store r14 on the stack + movw r14, #0xcc33 //r14<- 0x0000cc33 + movw r12, #0x00cc + movt r12, #0x00cc //r12<- 0x00cc00cc + movw r1, #0x3300 + movt r1, #0xcc00 //r1 <- 0xcc003300 + and r10, r14, r6, ror #8 // --- permute r6 12 times + and r11, r12, r6, ror #30 + orr r11, r11, r10 + and r10, r1, r6, ror #16 + orr r11, r11, r10 + movw r10, #0xcccc //r10<- 0x0000cccc + and r10, r6, r10, ror #8 + orr r6, r11, r10, ror #10 // permute r6 12 times --- + and r10, r14, r7, ror #8 // --- permute r7 12 times + and r11, r12, r7, ror #30 + orr r11, r11, r10 + and r10, r1, r7, ror #16 + orr r11, r11, r10 + movw r10, #0xcccc //r10<- 0x0000cccc + and r10, r7, r10, ror #8 + orr r7, r11, r10, ror #10 // permute r7 12 times --- + and r10, r14, r8, ror #8 // --- permute r8 12 times + and r11, r12, r8, ror #30 + orr r11, r11, r10 + and r10, r1, r8, ror #16 + orr r11, r11, r10 + movw r10, #0xcccc //r10<- 0x0000cccc + and r10, r8, r10, ror #8 + orr r8, r11, r10, ror #10 // permute r8 12 times --- + and r10, r14, r9, ror #8 // --- permute r9 12 times + and r11, r12, r9, ror #30 + orr r11, r11, r10 + and r10, r1, r9, ror #16 + ldr.w r14, [sp] + orr r11, r11, r10 + movw r10, #0xcccc //r10<- 0x0000cccc + and r10, r9, r10, ror #8 + orr r9, r11, r10, ror #10 // permute r9 12 times --- + bx lr + +/******************************************************************************* +* applies P^14 on the tweakey state in a bitsliced manner +*******************************************************************************/ +.align 2 +p14: + movw r1, #0xcc00 + movt r1, #0x0033 //r1 <- 0x0033cc00 + movw r12, #0xcc00 + movt r12, #0xcc00 //r12<- 0x33003300 + and r10, r1, r6, ror #24 // --- permute r6 14 times + and r11, r6, #0x00000033 + orr r11, r10, r11, ror #14 + and r10, r6, #0x33000000 + orr r11, r11, r10, ror #30 + and r10, r6, #0x00ff0000 + orr r11, r11, r10, ror #16 + and r10, r6, r12 + orr r6, r11, r10, ror #18 // permute r6 14 times --- + and r10, r1, r7, ror #24 // --- permute r7 14 times + and r11, r7, #0x00000033 + orr r11, r10, r11, ror #14 + and r10, r7, #0x33000000 + orr r11, r11, r10, ror #30 + and r10, r7, #0x00ff0000 + orr r11, r11, r10, ror #16 + and r10, r7, r12 + orr r7, r11, r10, ror #18 // permute r7 14 times --- + and r10, r1, r8, ror #24 // --- permute r8 14 times + and r11, r8, #0x00000033 + orr r11, r10, r11, ror #14 + and r10, r8, #0x33000000 + orr r11, r11, r10, ror #30 + and r10, r8, #0x00ff0000 + orr r11, r11, r10, ror #16 + and r10, r8, r12 + orr r8, r11, r10, ror #18 // permute r8 14 times --- + and r10, r1, r9, ror #24 // --- permute r9 14 times + and r11, r9, #0x00000033 + orr r11, r10, r11, ror #14 + and r10, r9, #0x33000000 + orr r11, r11, r10, ror #30 + and r10, r9, #0x00ff0000 + orr r11, r11, r10, ror #16 + and r10, r9, r12 + orr r9, r11, r10, ror #18 // permute r9 14 times --- + bx lr + +.align 2 +packing: + eor r12, r2, r2, lsr #3 + and r12, r12, r10 + eor r2, r2, r12 + eor r2, r2, r12, lsl #3 //SWAPMOVE(r2, r2, 0x0a0a0a0a, 3) + eor r12, r3, r3, lsr #3 + and r12, r12, r10 + eor r3, r3, r12 + eor r3, r3, r12, lsl #3 //SWAPMOVE(r3, r3, 0x0a0a0a0a, 3) + eor r12, r4, r4, lsr #3 + and r12, r12, r10 + eor r4, r4, r12 + eor r4, r4, r12, lsl #3 //SWAPMOVE(r4, r4, 0x0a0a0a0a, 3) + eor r12, r5, r5, lsr #3 + and r12, r12, r10 + eor r5, r5, r12 + eor r5, r5, r12, lsl #3 //SWAPMOVE(r5, r5, 0x0a0a0a0a, 3) + eor r12, r2, r4, lsr #2 + and r12, r12, r11 + eor r2, r2, r12 + eor r4, r4, r12, lsl #2 //SWAPMOVE(r4, r2, 0x30303030, 2) + eor r12, r2, r3, lsr #4 + and r12, r12, r11, lsr #2 + eor r2, r2, r12 + eor r3, r3, r12, lsl #4 //SWAPMOVE(r3, r2, 0x0c0c0c0c, 4) + eor r12, r2, r5, lsr #6 + and r12, r12, r11, lsr #4 + eor r2, r2, r12 + eor r5, r5, r12, lsl #6 //SWAPMOVE(r5, r2, 0x03030303, 6) + eor r12, r4, r3, lsr #2 + and r12, r12, r11, lsr #2 + eor r4, r4, r12 + eor r3, r3, r12, lsl #2 //SWAPMOVE(r3, r4, 0x0c0c0c0c, 2) + eor r12, r4, r5, lsr #4 + and r12, r12, r11, lsr #4 + eor r4, r4, r12 + eor r5, r5, r12, lsl #4 //SWAPMOVE(r5, r4, 0x03030303, 4) + eor r12, r3, r5, lsr #2 + and r12, r12, r11, lsr #4 + eor r3, r3, r12 + eor r5, r5, r12, lsl #2 //SWAPMOVE(r5, r3, 0x03030303, 2) + bx lr + +.align 2 +unpacking: + movw r6, #0x0a0a + movt r6, #0x0a0a //r6 <- 0x0a0a0a0a + eor r10, r3, r5, lsr #2 + and r10, r10, r7, lsr #4 + eor r3, r3, r10 + eor r5, r5, r10, lsl #2 //SWAPMOVE(r5, r3, 0x03030303, 2) + eor r10, r4, r5, lsr #4 + and r10, r10, r7, lsr #4 + eor r4, r4, r10 + eor r5, r5, r10, lsl #4 //SWAPMOVE(r5, r4, 0x03030303, 4) + eor r10, r4, r3, lsr #2 + and r10, r10, r7, lsr #2 + eor r4, r4, r10 + eor r3, r3, r10, lsl #2 //SWAPMOVE(r3, r4, 0x0c0c0c0c, 2) + eor r10, r2, r5, lsr #6 + and r10, r10, r7, lsr #4 + eor r2, r2, r10 + eor r5, r5, r10, lsl #6 //SWAPMOVE(r5, r2, 0x03030303, 6) + eor r10, r2, r3, lsr #4 + and r10, r10, r7, lsr #2 + eor r2, r2, r10 + eor r3, r3, r10, lsl #4 //SWAPMOVE(r3, r2, 0x0c0c0c0c, 4) + eor r10, r2, r4, lsr #2 + and r10, r10, r7 + eor r2, r2, r10 + eor r4, r4, r10, lsl #2 //SWAPMOVE(r4, r2, 0x30303030, 2) + eor r10, r5, r5, lsr #3 + and r10, r10, r6 + eor r5, r5, r10 + eor r5, r5, r10, lsl #3 //SWAPMOVE(r5, r5, 0x0a0a0a0a, 3) + eor r10, r4, r4, lsr #3 + and r10, r10, r6 + eor r4, r4, r10 + eor r4, r4, r10, lsl #3 //SWAPMOVE(r4, r4, 0x0a0a0a0a, 3) + eor r10, r3, r3, lsr #3 + and r10, r10, r6 + eor r3, r3, r10 + eor r3, r3, r10, lsl #3 //SWAPMOVE(r3, r3, 0x0a0a0a0a, 3) + eor r10, r2, r2, lsr #3 + and r10, r10, r6 + eor r2, r2, r10 + eor r2, r2, r10, lsl #3 //SWAPMOVE(r2, r2, 0x0a0a0a0a, 3) + bx lr + +/****************************************************************************** +* Compute LFSR2(TK2) ^ LFSR3(TK3) for all rounds. +* Performing both at the same time allows to save some memory accesses. +******************************************************************************/ +@ void tkschedule_lfsr(u32* tk, const u8* tk2, const u8* tk3, const int rounds) +.global tkschedule_lfsr +.type tkschedule_lfsr,%function +.align 2 +tkschedule_lfsr: + push {r0-r12, r14} + ldr.w r3, [r1, #8] //load tk2 (3rd word) + ldr.w r4, [r1, #4] //load tk2 (2nd word) + ldr.w r5, [r1, #12] //load tk2 (4th word) + ldr.w r12, [r1] //load tk2 (1st word) + mov r1, r2 //move tk3 address in r1 + mov r2, r12 //move 1st tk2 word in r2 + movw r10, #0x0a0a + movt r10, #0x0a0a //r10 <- 0x0a0a0a0a + movw r11, #0x3030 + movt r11, #0x3030 //r7 <- 0x30303030 + bl packing //pack tk2 + mov r6, r2 //move tk2 from r2-r5 to r6-r9 + mov r7, r3 //move tk2 from r2-r5 to r6-r9 + mov r8, r4 //move tk2 from r2-r5 to r6-r9 + mov r9, r5 //move tk2 from r2-r5 to r6-r9 + ldr.w r3, [r1, #8] //load tk3 (3rd word) + ldr.w r4, [r1, #4] //load tk3 (2nd word) + ldr.w r5, [r1, #12] //load tk3 (4th) word) + ldr.w r2, [r1] //load tk3 (1st) word) + bl packing //pack tk3 + eor r10, r10, r10, lsl #4 //r10<- 0xaaaaaaaa + ldr.w r1, [sp, #12] //load loop counter in r1 + eor r11, r2, r6 //tk2 ^ tk3 (1st word) + eor r12, r3, r7 //tk2 ^ tk3 (2nd word) + strd r11, r12, [r0], #8 //store in tk + eor r11, r4, r8 //tk2 ^ tk3 (3rd word) + eor r12, r5, r9 //tk2 ^ tk3 (4th word) + strd r11, r12, [r0], #8 //store in tk + loop: + and r12, r8, r10 // --- apply LFSR2 to tk2 + eor r12, r12, r6 + and r14, r10, r12, lsl #1 + and r12, r12, r10 + orr r6, r14, r12, lsr #1 // apply LFSR2 to tk2 --- + and r12, r3, r10 // --- apply LFSR3 to tk3 + eor r12, r5, r12, lsr #1 + and r14, r10, r12, lsl #1 + and r12, r12, r10 + orr r5, r14, r12, lsr #1 // apply LFSR3 to tk3 --- + eor r11, r5, r7 //tk2 ^ tk3 (1st word) + eor r12, r2, r8 //tk2 ^ tk3 (2nd word) + strd r11, r12, [r0], #8 //store in tk + eor r11, r3, r9 //tk2 ^ tk3 (3rd word) + eor r12, r4, r6 //tk2 ^ tk3 (4th word) + strd r11, r12, [r0], #24 //store in tk + and r12, r9, r10 // --- apply LFSR2 to tk2 + eor r12, r12, r7 + and r14, r10, r12, lsl #1 + and r12, r12, r10 + orr r7, r14, r12, lsr #1 // apply LFSR2 to tk2 --- + and r12, r2, r10 // --- apply LFSR3 to tk3 + eor r12, r4, r12, lsr #1 + and r14, r10, r12, lsl #1 + and r12, r12, r10 + orr r4, r14, r12, lsr #1 // apply LFSR3 to tk3 --- + eor r11, r4, r8 //tk2 ^ tk3 (1st word) + eor r12, r5, r9 //tk2 ^ tk3 (2nd word) + strd r11, r12, [r0], #8 //store in tk + eor r11, r2, r6 //tk2 ^ tk3 (3rd word) + eor r12, r3, r7 //tk2 ^ tk3 (4th word) + strd r11, r12, [r0], #24 //store in tk + and r12, r6, r10 // --- apply LFSR2 to tk2 + eor r12, r12, r8 + and r14, r10, r12, lsl #1 + and r12, r12, r10 + orr r8, r14, r12, lsr #1 // apply LFSR2 to tk2 --- + and r12, r5, r10 // --- apply LFSR3 to tk3 + eor r12, r3, r12, lsr #1 + and r14, r10, r12, lsl #1 + and r12, r12, r10 + orr r3, r14, r12, lsr #1 // apply LFSR3 to tk3 --- + eor r11, r3, r9 //tk2 ^ tk3 (1st word) + eor r12, r4, r6 //tk2 ^ tk3 (2nd word) + strd r11, r12, [r0], #8 //store in tk + eor r11, r5, r7 //tk2 ^ tk3 (3rd word) + eor r12, r2, r8 //tk2 ^ tk3 (4th word) + strd r11, r12, [r0], #24 //store in tk + and r12, r7, r10 // --- apply LFSR2 to tk2 + eor r12, r12, r9 + and r14, r10, r12, lsl #1 + and r12, r12, r10 + orr r9, r14, r12, lsr #1 // apply LFSR2 to tk2 --- + and r12, r4, r10 // --- apply LFSR3 to tk3 + eor r12, r2, r12, lsr #1 + and r14, r10, r12, lsl #1 + and r12, r12, r10 + orr r2, r14, r12, lsr #1 // apply LFSR3 to tk3 --- + eor r11, r2, r6 //tk2 ^ tk3 (1st word) + eor r12, r3, r7 //tk2 ^ tk3 (2nd word) + strd r11, r12, [r0], #8 //store in tk + eor r11, r4, r8 //tk2 ^ tk3 (3rd word) + eor r12, r5, r9 //tk2 ^ tk3 (4th word) + strd r11, r12, [r0], #24 //store in tk + subs.w r1, r1, #8 //decrease loop counter by 8 + bne loop + pop {r0-r12, r14} + bx lr + +/****************************************************************************** +* Applies the permutation P and add the round constants to all round tweakeys. +******************************************************************************/ +@ void tkschedule_perm(u32* tk) +.global tkschedule_perm +.type tkschedule_perm,%function +.align 2 +tkschedule_perm: + push {r0-r12, lr} + sub.w sp, #4 //to store r14 in subroutines + ldm r0, {r6-r9} //load tk + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r6, r6, r10 //tk &= 0xf0f0f0f0 (1st word) + and r7, r7, r10 //tk &= 0xf0f0f0f0 (2nd word) + and r8, r8, r10 //tk &= 0xf0f0f0f0 (3rd word) + and r9, r9, r10 //tk &= 0xf0f0f0f0 (4th word) + eor r8, r8, #0x00000004 //add rconst + eor r9, r9, #0x00000040 //add rconst + mvn r9, r9 //to remove a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 1st round + strd r6, r7, [r0], #8 //store 2nd half tk for 1st round + ldm r0, {r6-r9} //load tk + bl p2 //apply the permutation twice + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #26 //ror and mask to match fixslicing + and r12, r10, r7, ror #26 //ror and mask to match fixslicing + strd r11, r12, [r0], #8 //store 1st half tk for 2nd round + and r11, r10, r8, ror #26 //ror and mask to match fixslicing + and r12, r10, r9, ror #26 //ror and mask to match fixslicing + eor r11, r11, #0x10000000 //add rconst + eor r11, r11, #0x00000100 //add rconst + eor r12, r12, #0x00000100 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 2nd round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #28 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #12 + and r11, r10, r7, ror #28 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #12 + and r11, r10, r8, ror #28 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #12 + and r11, r10, r9, ror #28 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #12 //ror and masks to match fixslicing --- + eor r7, r7, #0x04000000 //add rconst + eor r8, r8, #0x44000000 //add rconst + eor r9, r9, #0x04000000 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 3rd round + strd r6, r7, [r0], #8 //store 2nd half tk for 3rd round + ldm r0, {r6-r9} //load tk + bl p4 //apply the permutation 4 times + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6, ror #16 //ror and mask to match fixslicing + and r12, r10, r7, ror #16 //ror and mask to match fixslicing + eor r11, r11, #0x00400000 //add rconst + eor r12, r12, #0x00400000 //add rconst + strd r11, r12, [r0, #24] //store 2nd half tk for 5th round + and r11, r10, r8, ror #16 //ror and mask to match fixslicing + and r12, r10, r9, ror #16 //ror and mask to match fixslicing + eor r11, r11, #0x00440000 //add rconst + eor r12, r12, #0x00500000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 5th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #14 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #6 + and r11, r10, r7, ror #14 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #6 + and r11, r10, r8, ror #14 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #6 + and r11, r10, r9, ror #14 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #6 //ror and masks to match fixslicing --- + eor r6, r6, #0x00100000 //add rconst + eor r7, r7, #0x00100000 //add rconst + eor r8, r8, #0x00100000 //add rconst + eor r8, r8, #0x00000001 //add rconst + eor r9, r9, #0x00100000 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 4th round + strd r8, r9, [r0], #24 //store 2nd half tk for 4th round + ldm r0, {r6-r9} //load tk + bl p6 //apply the permutation 6 times + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #10 //ror and mask to match fixslicing + and r12, r10, r7, ror #10 //ror and mask to match fixslicing + eor r11, r11, #0x01000000 //add rconst + eor r12, r12, #0x01000000 //add rconst + strd r11, r12, [r0], #8 //store 1st half tk for 6th round + and r11, r10, r8, ror #10 //ror and mask to match fixslicing + and r12, r10, r9, ror #10 //ror and mask to match fixslicing + eor r11, r11, #0x01400000 //add rconst + eor r11, r11, #0x00001000 //add rconst + eor r12, r12, #0x00400000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 6th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #12 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #28 + and r11, r10, r7, ror #12 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #28 + and r11, r10, r8, ror #12 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #28 + and r11, r10, r9, ror #12 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #28 //ror and masks to match fixslicing --- + eor r6, r6, #0x00000400 //add rconst + eor r7, r7, #0x00000400 //add rconst + eor r8, r8, #0x01000000 //add rconst + eor r8, r8, #0x00004000 //add rconst + eor r9, r9, #0x01000000 //add rconst + eor r9, r9, #0x00000400 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 7th round + strd r6, r7, [r0], #8 //store 2nd half tk for 7th round + ldm r0, {r6-r9} //load tk + bl p8 //apply the permutation 8 times + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6 //ror and mask to match fixslicing + and r12, r10, r7 //ror and mask to match fixslicing + eor r12, r12, #0x00000040 //add rconst + strd r11, r12, [r0, #24] //store 2nd half tk for 9th round + and r11, r10, r8 //ror and mask to match fixslicing + and r12, r10, r9 //ror and mask to match fixslicing + eor r11, r11, #0x00000054 //add rconst + eor r12, r12, #0x00000050 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 9th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #30 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #22 + and r11, r10, r7, ror #30 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #22 + and r11, r10, r8, ror #30 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #22 + and r11, r10, r9, ror #30 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #22 //ror and masks to match fixslicing --- + eor r6 ,r6, #0x00000010 + eor r8, r8, #0x00010000 + eor r8, r8, #0x00000410 + eor r9, r9, #0x00000410 + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 8th round + strd r8, r9, [r0], #24 //store 2nd half tk for 8th round + ldm r0, {r6-r9} //load tk + bl p10 //apply the permutation 10 times + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #26 //ror and mask to match fixslicing + and r12, r10, r7, ror #26 //ror and mask to match fixslicing + eor r11, r11, #0x00000100 //add rconst + eor r12, r12, #0x00000100 //add rconst + strd r11, r12, [r0], #8 //store 1st half tk for 10th round + and r11, r10, r8, ror #26 //ror and mask to match fixslicing + and r12, r10, r9, ror #26 //ror and mask to match fixslicing + eor r11, r11, #0x10000000 //add rconst + eor r11, r11, #0x00000140 //add rconst + eor r12, r12, #0x00000100 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 10th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #28 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #12 + and r11, r10, r7, ror #28 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #12 + and r11, r10, r8, ror #28 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #12 + and r11, r10, r9, ror #28 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #12 //ror and masks to match fixslicing --- + eor r6, r6, #0x04000000 //add rconst + eor r7, r7, #0x04000000 //add rconst + eor r8, r8, #0x44000000 //add rconst + eor r9, r9, #0x00000100 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 11th round + strd r6, r7, [r0], #8 //store 2nd half tk for 11th round + ldm r0, {r6-r9} //load tk + bl p12 //apply the permutation 4 times + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6, ror #16 //ror and mask to match fixslicing + and r12, r10, r7, ror #16 //ror and mask to match fixslicing + eor r11, r11, #0x00400000 //add rconst + strd r11, r12, [r0, #24] //store 2nd half tk for 13th round + and r11, r10, r8, ror #16 //ror and mask to match fixslicing + and r12, r10, r9, ror #16 //ror and mask to match fixslicing + eor r11, r11, #0x00140000 //add rconst + eor r12, r12, #0x00500000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 13th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #14 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #6 + and r11, r10, r7, ror #14 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #6 + and r11, r10, r8, ror #14 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #6 + and r11, r10, r9, ror #14 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #6 //ror and masks to match fixslicing --- + eor r6, r6, #0x00100000 //add rconst + eor r7, r7, #0x00100000 //add rconst + eor r8, r8, #0x04000000 //add rconst + eor r8, r8, #0x00000001 //add rconst + eor r9, r9, #0x04000000 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 12th round + strd r8, r9, [r0], #24 //store 2nd half tk for 12th round + ldm r0, {r6-r9} //load tk + bl p14 //apply the permutation 6 times + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #10 //ror and mask to match fixslicing + and r12, r10, r7, ror #10 //ror and mask to match fixslicing + strd r11, r12, [r0], #8 //store 1st half tk for 14th round + and r11, r10, r8, ror #10 //ror and mask to match fixslicing + and r12, r10, r9, ror #10 //ror and mask to match fixslicing + eor r11, r11, #0x01400000 //add rconst + eor r11, r11, #0x00001000 //add rconst + eor r12, r12, #0x01400000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 14th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #12 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #28 + and r11, r10, r7, ror #12 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #28 + and r11, r10, r8, ror #12 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #28 + and r11, r10, r9, ror #12 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #28 //ror and masks to match fixslicing --- + eor r7, r7, #0x00000400 //add rconst + eor r8, r8, #0x01000000 //add rconst + eor r8, r8, #0x00004400 //add rconst + eor r9, r9, #0x00000400 //add const + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 15th round + strd r6, r7, [r0], #8 //store 2nd half tk for 15th round + ldm r0, {r6-r9} //load tk + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6 //ror and mask to match fixslicing + and r12, r10, r7 //ror and mask to match fixslicing + eor r11, r11, #0x00000040 //add rconst + eor r12, r12, #0x00000040 //add rconst + strd r11, r12, [r0, #24] //store 2nd half tk for 17th round + and r11, r10, r8 //ror and mask to match fixslicing + and r12, r10, r9 //ror and mask to match fixslicing + eor r11, r11, #0x00000004 //add rconst + eor r12, r12, #0x00000050 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 17th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #30 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #22 + and r11, r10, r7, ror #30 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #22 + and r11, r10, r8, ror #30 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #22 + and r11, r10, r9, ror #30 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #22 //ror and masks to match fixslicing --- + eor r6 ,r6, #0x00000010 + eor r7 ,r7, #0x00000010 + eor r8, r8, #0x00000010 + eor r8, r8, #0x00010000 + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 16th round + strd r8, r9, [r0], #24 //store 2nd half tk for 16th round + ldm r0, {r6-r9} //load tk + bl p2 //apply the permutation twice + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #26 //ror and mask to match fixslicing + and r12, r10, r7, ror #26 //ror and mask to match fixslicing + eor r11, r11, #0x00000100 //add rconst + strd r11, r12, [r0], #8 //store 1st half tk for 18th round + and r11, r10, r8, ror #26 //ror and mask to match fixslicing + and r12, r10, r9, ror #26 //ror and mask to match fixslicing + eor r11, r11, #0x10000000 //add rconst + eor r11, r11, #0x00000140 //add rconst + eor r12, r12, #0x00000040 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 18th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #28 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #12 + and r11, r10, r7, ror #28 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #12 + and r11, r10, r8, ror #28 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #12 + and r11, r10, r9, ror #28 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #12 //ror and masks to match fixslicing --- + eor r7, r7, #0x04000000 //add rconst + eor r8, r8, #0x40000000 //add rconst + eor r8, r8, #0x00000100 //add rconst + eor r9, r9, #0x04000000 //add rconst + eor r9, r9, #0x00000100 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 19th round + strd r6, r7, [r0], #8 //store 2nd half tk for 19th round + ldm r0, {r6-r9} //load tk + bl p4 //apply the permutation 4 times + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6, ror #16 //ror and mask to match fixslicing + and r12, r10, r7, ror #16 //ror and mask to match fixslicing + eor r12, r12, #0x00400000 //add rconst + strd r11, r12, [r0, #24] //store 2nd half tk for 21th round + and r11, r10, r8, ror #16 //ror and mask to match fixslicing + and r12, r10, r9, ror #16 //ror and mask to match fixslicing + eor r11, r11, #0x00440000 //add rconst + eor r12, r12, #0x00100000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 21th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #14 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #6 + and r11, r10, r7, ror #14 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #6 + and r11, r10, r8, ror #14 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #6 + and r11, r10, r9, ror #14 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #6 //ror and masks to match fixslicing --- + eor r6, r6, #0x00100000 //add rconst + eor r8, r8, #0x04100000 //add rconst + eor r8, r8, #0x00000001 //add rconst + eor r9, r9, #0x00100000 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 20th round + strd r8, r9, [r0], #24 //store 2nd half tk for 20th round + ldm r0, {r6-r9} //load tk + bl p6 //apply the permutation 6 times + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #10 //ror and mask to match fixslicing + and r12, r10, r7, ror #10 //ror and mask to match fixslicing + eor r11, r11, #0x01000000 //add rconst + eor r12, r12, #0x01000000 //add rconst + strd r11, r12, [r0], #8 //store 1st half tk for 22th round + and r11, r10, r8, ror #10 //ror and mask to match fixslicing + and r12, r10, r9, ror #10 //ror and mask to match fixslicing + eor r11, r11, #0x00400000 //add rconst + eor r11, r11, #0x00001000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 22th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #12 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #28 + and r11, r10, r7, ror #12 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #28 + and r11, r10, r8, ror #12 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #28 + and r11, r10, r9, ror #12 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #28 //ror and masks to match fixslicing --- + eor r6, r6, #0x00000400 //add rconst + eor r8, r8, #0x00004000 //add rconst + eor r9, r9, #0x01000000 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 23th round + strd r6, r7, [r0], #8 //store 2nd half tk for 23th round + ldm r0, {r6-r9} //load tk + bl p8 //apply the permutation 8 times + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6 //ror and mask to match fixslicing + and r12, r10, r7 //ror and mask to match fixslicing + strd r11, r12, [r0, #24] //store 2nd half tk for 25th round + and r11, r10, r8 //ror and mask to match fixslicing + and r12, r10, r9 //ror and mask to match fixslicing + eor r11, r11, #0x00000014 //add rconst + eor r12, r12, #0x00000040 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 25th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #30 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #22 + and r11, r10, r7, ror #30 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #22 + and r11, r10, r8, ror #30 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #22 + and r11, r10, r9, ror #30 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #22 //ror and masks to match fixslicing --- + eor r8, r8, #0x00010400 + eor r9, r9, #0x00000400 + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 24th round + strd r8, r9, [r0], #24 //store 2nd half tk for 24th round + ldm r0, {r6-r9} //load tk + bl p10 //apply the permutation 10 times + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #26 //ror and mask to match fixslicing + and r12, r10, r7, ror #26 //ror and mask to match fixslicing + strd r11, r12, [r0], #8 //store 1st half tk for 26th round + and r11, r10, r8, ror #26 //ror and mask to match fixslicing + and r12, r10, r9, ror #26 //ror and mask to match fixslicing + eor r11, r11, #0x10000000 //add rconst + eor r11, r11, #0x00000100 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 26th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #28 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #12 + and r11, r10, r7, ror #28 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #12 + and r11, r10, r8, ror #28 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #12 + and r11, r10, r9, ror #28 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #12 //ror and masks to match fixslicing --- + eor r7, r7, #0x04000000 //add rconst + eor r8, r8, #0x40000000 //add rconst + eor r9, r9, #0x04000000 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 27th round + strd r6, r7, [r0], #8 //store 2nd half tk for 27th round + ldm r0, {r6-r9} //load tk + bl p12 //apply the permutation 4 times + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6, ror #16 //ror and mask to match fixslicing + and r12, r10, r7, ror #16 //ror and mask to match fixslicing + eor r12, r12, #0x00400000 //add rconst + strd r11, r12, [r0, #24] //store 2nd half tk for 29th round + and r11, r10, r8, ror #16 //ror and mask to match fixslicing + and r12, r10, r9, ror #16 //ror and mask to match fixslicing + eor r11, r11, #0x00440000 //add rconst + eor r12, r12, #0x00500000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 29th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #14 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #6 + and r11, r10, r7, ror #14 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #6 + and r11, r10, r8, ror #14 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #6 + and r11, r10, r9, ror #14 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #6 //ror and masks to match fixslicing --- + eor r6, r6, #0x00100000 //add rconst + eor r8, r8, #0x00100000 //add rconst + eor r8, r8, #0x00000001 //add rconst + eor r9, r9, #0x00100000 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 28th round + strd r8, r9, [r0], #24 //store 2nd half tk for 28th round + ldm r0, {r6-r9} //load tk + bl p14 //apply the permutation 6 times + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #10 //ror and mask to match fixslicing + and r12, r10, r7, ror #10 //ror and mask to match fixslicing + eor r11, r11, #0x01000000 //add rconst + eor r12, r12, #0x01000000 //add rconst + strd r11, r12, [r0], #8 //store 1st half tk for 30th round + and r11, r10, r8, ror #10 //ror and mask to match fixslicing + and r12, r10, r9, ror #10 //ror and mask to match fixslicing + eor r11, r11, #0x01400000 //add rconst + eor r11, r11, #0x00001000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 30th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #12 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #28 + and r11, r10, r7, ror #12 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #28 + and r11, r10, r8, ror #12 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #28 + and r11, r10, r9, ror #12 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #28 //ror and masks to match fixslicing --- + eor r6, r6, #0x00000400 //add rconst + eor r7, r7, #0x00000400 //add rconst + eor r8, r8, #0x00004000 //add rconst + eor r9, r9, #0x01000000 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 31th round + strd r6, r7, [r0], #8 //store 2nd half tk for 31th round + ldm r0, {r6-r9} //load tk + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6 //ror and mask to match fixslicing + and r12, r10, r7 //ror and mask to match fixslicing + strd r11, r12, [r0, #24] //store 2nd half tk for 33th round + and r11, r10, r8 //ror and mask to match fixslicing + and r12, r10, r9 //ror and mask to match fixslicing + eor r11, r11, #0x00000014 //add rconst + eor r12, r12, #0x00000050 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 33th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #30 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #22 + and r11, r10, r7, ror #30 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #22 + and r11, r10, r8, ror #30 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #22 + and r11, r10, r9, ror #30 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #22 //ror and masks to match fixslicing --- + eor r6 ,r6, #0x00000010 + eor r8, r8, #0x00010400 + eor r9, r9, #0x00000400 + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 32th round + strd r8, r9, [r0], #24 //store 2nd half tk for 32th round + ldm r0, {r6-r9} //load tk + bl p2 //apply the permutation twice + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #26 //ror and mask to match fixslicing + and r12, r10, r7, ror #26 //ror and mask to match fixslicing + strd r11, r12, [r0], #8 //store 1st half tk for 34th round + and r11, r10, r8, ror #26 //ror and mask to match fixslicing + and r12, r10, r9, ror #26 //ror and mask to match fixslicing + eor r11, r11, #0x10000000 //add rconst + eor r11, r11, #0x00000140 //add rconst + eor r12, r12, #0x00000100 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 34th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #28 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #12 + and r11, r10, r7, ror #28 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #12 + and r11, r10, r8, ror #28 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #12 + and r11, r10, r9, ror #28 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #12 //ror and masks to match fixslicing --- + eor r7, r7, #0x04000000 //add rconst + eor r8, r8, #0x44000000 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 35th round + strd r6, r7, [r0], #8 //store 2nd half tk for 35th round + ldm r0, {r6-r9} //load tk + bl p4 //apply the permutation 4 times + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6, ror #16 //ror and mask to match fixslicing + and r12, r10, r7, ror #16 //ror and mask to match fixslicing + eor r11, r11, #0x00400000 //add rconst + strd r11, r12, [r0, #24] //store 2nd half tk for 37th round + and r11, r10, r8, ror #16 //ror and mask to match fixslicing + and r12, r10, r9, ror #16 //ror and mask to match fixslicing + eor r11, r11, #0x00440000 //add rconst + eor r12, r12, #0x00500000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 37th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #14 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #6 + and r11, r10, r7, ror #14 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #6 + and r11, r10, r8, ror #14 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #6 + and r11, r10, r9, ror #14 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #6 //ror and masks to match fixslicing --- + eor r6, r6, #0x00100000 //add rconst + eor r7, r7, #0x00100000 //add rconst + eor r8, r8, #0x00000001 //add rconst + eor r9, r9, #0x00100000 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 36th round + strd r8, r9, [r0], #24 //store 2nd half tk for 36th round + ldm r0, {r6-r9} //load tk + bl p6 //apply the permutation 6 times + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #10 //ror and mask to match fixslicing + and r12, r10, r7, ror #10 //ror and mask to match fixslicing + eor r12, r12, #0x01000000 //add rconst + strd r11, r12, [r0], #8 //store 1st half tk for 38th round + and r11, r10, r8, ror #10 //ror and mask to match fixslicing + and r12, r10, r9, ror #10 //ror and mask to match fixslicing + eor r11, r11, #0x01400000 //add rconst + eor r11, r11, #0x00001000 //add rconst + eor r12, r12, #0x00400000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 38th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #12 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #28 + and r11, r10, r7, ror #12 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #28 + and r11, r10, r8, ror #12 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #28 + and r11, r10, r9, ror #12 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #28 //ror and masks to match fixslicing --- + eor r6, r6, #0x00000400 //add rconst + eor r7, r7, #0x00000400 //add rconst + eor r8, r8, #0x01000000 + eor r8, r8, #0x00004000 //add rconst + eor r9, r9, #0x00000400 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 39th round + strd r6, r7, [r0], #8 //store 2nd half tk for 39th round + ldm r0, {r6-r9} //load tk + bl p8 //apply the permutation 8 times + movw r10, #0x30 + movt r10, #0x30 //r10<- 0x30303030 + and r11, r10, r6, ror #30 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #22 + and r11, r10, r7, ror #30 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #22 + and r11, r10, r8, ror #30 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #22 + and r11, r10, r9, ror #30 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #22 //ror and masks to match fixslicing --- + eor r6, r6, #0x00000010 + eor r8, r8, #0x00010000 + eor r8, r8, #0x00000010 + eor r9, r9, #0x00000400 + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 40th round + strd r8, r9, [r0] //store 2nd half tk for 40th round + add.w sp, #4 //restore stack pointer + pop {r0-r12, lr} + bx lr + +/****************************************************************************** +* Applies the permutations P^2, ..., P^14 for rounds 0 to 16. Since P^16=Id, we +* dont need more calculations as no LFSR is applied to TK1. +******************************************************************************/ +@ void tkschedule_perm_tk1(u32* tk, const u8* key) +.global tkschedule_perm_tk1 +.type tkschedule_perm_tk1,%function +.align 2 +tkschedule_perm_tk1: + push {r0-r12, lr} + ldr.w r3, [r1, #8] //load tk1 (3rd word) + ldr.w r4, [r1, #4] //load tk1 (2nd word) + ldr.w r5, [r1, #12] //load tk1 (4th word) + ldr.w r2, [r1] //load tk1 (1st word) + movw r10, #0x0a0a + movt r10, #0x0a0a //r6 <- 0x0a0a0a0a + movw r11, #0x3030 + movt r11, #0x3030 //r7 <- 0x30303030 + bl packing //pack tk1 + mov r6, r2 //move tk1 from r2-r5 to r6-r9 + mov r7, r3 //move tk1 from r2-r5 to r6-r9 + mov r8, r4 //move tk1 from r2-r5 to r6-r9 + mov r9, r5 //move tk1 from r2-r5 to r6-r9 + movw r2, #0xf0f0 + movt r2, #0xf0f0 //r2<- 0xf0f0f0f0 + and r11, r8, r2 //tk &= 0xf0f0f0f0 (3rd word) + and r12, r9, r2 //tk &= 0xf0f0f0f0 (4th word) + strd r11, r12, [r0], #8 //store 1st half tk for 1st round + and r11, r6, r2 //tk &= 0xf0f0f0f0 (1st word) + and r12, r7, r2 //tk &= 0xf0f0f0f0 (2nd word) + strd r11, r12, [r0], #8 //store 2nd half tk for 1st round + movw r3, #0x3030 + movt r3, #0x3030 //r3 <- 0x30303030 + and r11, r3, r6, ror #30 //--- ror and masks to match fixslicing + and r12, r6, r3, ror #4 + orr r12, r11, r12, ror #22 + str.w r12, [r0, #224] + and r11, r3, r7, ror #30 + and r12, r7, r3, ror #4 + orr r12, r11, r12, ror #22 + str.w r12, [r0, #228] + and r11, r3, r8, ror #30 + and r12, r8, r3, ror #4 + orr r12, r11, r12, ror #22 + str.w r12, [r0, #232] + and r11, r3, r9, ror #30 + and r12, r9, r3, ror #4 + orr r12, r11, r12, ror #22 //ror and masks to match fixslicing --- + str.w r12, [r0, #236] + bl p2 //apply the permutation twice + movw r3, #0xc3c3 + movt r3, #0xc3c3 //r3 <- 0xc3c3c3c3 + and r11, r3, r6, ror #26 //ror and mask to match fixslicing + and r12, r3, r7, ror #26 //ror and mask to match fixslicing + strd r11, r12, [r0], #8 //store 1st half tk for 2nd round + and r11, r3, r8, ror #26 //ror and mask to match fixslicing + and r12, r3, r9, ror #26 //ror and mask to match fixslicing + strd r11, r12, [r0], #8 //store 2nd half tk for 2nd round + and r3, r3, r3, lsr #6 //r3<- 0x03030303 + and r11, r3, r6, ror #28 //--- ror and masks to match fixslicing + and r12, r6, r3, lsl #6 + orr r12, r11, r12, ror #12 + str.w r12, [r0, #8] + and r11, r3, r7, ror #28 + and r12, r7, r3, lsl #6 + orr r12, r11, r12, ror #12 + str.w r12, [r0, #12] + and r11, r3, r9, ror #28 + and r12, r9, r3, lsl #6 + orr r12, r11, r12, ror #12 + str.w r12, [r0, #4] + and r11, r3, r8, ror #28 + and r12, r8, r3, lsl #6 + orr r12, r11, r12, ror #12 + str.w r12, [r0], #16 //ror and masks to match fixslicing --- + bl p2 //apply the permutation 4 times + lsl r3, r3, #4 //r3 <- 0x30303030 + and r11, r3, r6, ror #14 //--- ror and masks to match fixslicing + and r12, r6, r3, ror #4 + orr r12, r11, r12, ror #6 + str.w r12, [r0], #4 + and r11, r3, r7, ror #14 + and r12, r7, r3, ror #4 + orr r12, r11, r12, ror #6 + str.w r12, [r0], #4 + and r11, r3, r8, ror #14 + and r12, r8, r3, ror #4 + orr r12, r11, r12, ror #6 + str.w r12, [r0], #4 + and r11, r3, r9, ror #14 + and r12, r9, r3, ror #4 + orr r12, r11, r12, ror #6 //ror and masks to match fixslicing --- + str.w r12, [r0], #4 + and r11, r2, r6, ror #16 //ror and mask to match fixslicing + and r12, r2, r7, ror #16 //ror and mask to match fixslicing + strd r11, r12, [r0, #8] //store 2nd half tk for 5th round + and r11, r2, r8, ror #16 //ror and mask to match fixslicing + and r12, r2, r9, ror #16 //ror and mask to match fixslicing + strd r11, r12, [r0], #16 //store 1st half tk for 5th round + bl p2 //apply the permutation twice + movw r3, #0xc3c3 + movt r3, #0xc3c3 //r3<- 0xc3c3c3c3 + and r11, r3, r6, ror #10 //ror and mask to match fixslicing + and r12, r3, r7, ror #10 //ror and mask to match fixslicing + strd r11, r12, [r0], #8 //store 1st half tk for 6th round + and r11, r3, r8, ror #10 //ror and mask to match fixslicing + and r12, r3, r9, ror #10 //ror and mask to match fixslicing + strd r11, r12, [r0], #8 //store 2nd half tk for 6th round + and r3, r3, r3, lsr #6 //r3<- 0x03030303 + and r11, r3, r6, ror #12 //--- ror and masks to match fixslicing + and r12, r6, r3, lsl #6 + orr r12, r11, r12, ror #28 + str.w r12, [r0, #8] + and r11, r3, r7, ror #12 + and r12, r7, r3, lsl #6 + orr r12, r11, r12, ror #28 + str.w r12, [r0, #12] + and r11, r3, r9, ror #12 + and r12, r9, r3, lsl #6 + orr r12, r11, r12, ror #28 + str.w r12, [r0, #4] + and r11, r3, r8, ror #12 + and r12, r8, r3, lsl #6 + orr r12, r11, r12, ror #28 + str.w r12, [r0], #16 //ror and masks to match fixslicing --- + bl p2 //apply the permutation 8 times + lsl r3, r3, #4 //r3 <- 0x30303030 + and r11, r3, r6, ror #30 //--- ror and masks to match fixslicing + and r12, r6, r3, ror #4 + orr r12, r11, r12, ror #22 + str.w r12, [r0], #4 + and r11, r3, r7, ror #30 + and r12, r7, r3, ror #4 + orr r12, r11, r12, ror #22 + str.w r12, [r0], #4 + and r11, r3, r8, ror #30 + and r12, r8, r3, ror #4 + orr r12, r11, r12, ror #22 + str.w r12, [r0], #4 + and r11, r3, r9, ror #30 + and r12, r9, r3, ror #4 + orr r12, r11, r12, ror #22 //ror and masks to match fixslicing --- + str.w r12, [r0], #4 + and r11, r2, r6 //ror and mask to match fixslicing + and r12, r2, r7 //ror and mask to match fixslicing + strd r11, r12, [r0, #8] //store 2nd half tk for 9th round + and r11, r2, r8 //ror and mask to match fixslicing + and r12, r2, r9 //ror and mask to match fixslicing + strd r11, r12, [r0], #16 //store 1st half tk for 9th round + bl p2 //apply the permutation 10 + movw r3, #0xc3c3 + movt r3, #0xc3c3 //r3 <- 0xc3c3c3c3 + and r11, r3, r6, ror #26 //ror and mask to match fixslicing + and r12, r3, r7, ror #26 //ror and mask to match fixslicing + strd r11, r12, [r0], #8 //store 1st half tk for 10th round + and r11, r3, r8, ror #26 //ror and mask to match fixslicing + and r12, r3, r9, ror #26 //ror and mask to match fixslicing + strd r11, r12, [r0], #8 //store 2nd half tk for 10th round + and r3, r3, r3, lsr #6 //r3 <- 0x03030303 + and r11, r3, r6, ror #28 //--- ror and masks to match fixslicing + and r12, r6, r3, lsl #6 + orr r12, r11, r12, ror #12 + str.w r12, [r0, #8] + and r11, r3, r7, ror #28 + and r12, r7, r3, lsl #6 + orr r12, r11, r12, ror #12 + str.w r12, [r0, #12] + and r11, r3, r9, ror #28 + and r12, r9, r3, lsl #6 + orr r12, r11, r12, ror #12 + str.w r12, [r0, #4] + and r11, r3, r8, ror #28 + and r12, r8, r3, lsl #6 + orr r12, r11, r12, ror #12 + str.w r12, [r0], #16 //ror and masks to match fixslicing --- + bl p2 //apply the permutation 12 times + lsl r3, r3, #4 //r3 <- 0x30303030 + and r11, r3, r6, ror #14 //--- ror and masks to match fixslicing + and r12, r6, r3, ror #4 + orr r12, r11, r12, ror #6 + str.w r12, [r0], #4 + and r11, r3, r7, ror #14 + and r12, r7, r3, ror #4 + orr r12, r11, r12, ror #6 + str.w r12, [r0], #4 + and r11, r3, r8, ror #14 + and r12, r8, r3, ror #4 + orr r12, r11, r12, ror #6 + str.w r12, [r0], #4 + and r11, r3, r9, ror #14 + and r12, r9, r3, ror #4 + orr r12, r11, r12, ror #6 //ror and masks to match fixslicing --- + str.w r12, [r0], #4 + and r11, r2, r6, ror #16 //ror and mask to match fixslicing + and r12, r2, r7, ror #16 //ror and mask to match fixslicing + strd r11, r12, [r0, #8] //store 2nd half tk for 5th round + and r11, r2, r8, ror #16 //ror and mask to match fixslicing + and r12, r2, r9, ror #16 //ror and mask to match fixslicing + strd r11, r12, [r0], #16 //store 1st half tk for 5th round + bl p2 //apply the permutation 14 times + movw r3, #0xc3c3 + movt r3, #0xc3c3 //r3 <- 0xc3c3c3c3 + and r11, r3, r6, ror #10 //ror and mask to match fixslicing + and r12, r3, r7, ror #10 //ror and mask to match fixslicing + strd r11, r12, [r0], #8 //store 1st half tk for 14th round + and r11, r3, r8, ror #10 //ror and mask to match fixslicing + and r12, r3, r9, ror #10 //ror and mask to match fixslicing + strd r11, r12, [r0], #8 //store 2nd half tk for 14th round + and r3, r3, r3, lsr #6 //r3 <- 0x03030303 + and r11, r3, r6, ror #12 //--- ror and masks to match fixslicing + and r12, r6, r3, lsl #6 + orr r12, r11, r12, ror #28 + str.w r12, [r0, #8] + and r11, r3, r7, ror #12 + and r12, r7, r3, lsl #6 + orr r12, r11, r12, ror #28 + str.w r12, [r0, #12] + and r11, r3, r9, ror #12 + and r12, r9, r3, lsl #6 + orr r12, r11, r12, ror #28 + str.w r12, [r0, #4] + and r11, r3, r8, ror #12 + and r12, r8, r3, lsl #6 + orr r12, r11, r12, ror #28 + str.w r12, [r0], #16 //ror and masks to match fixslicing --- + pop {r0-r12, lr} + bx lr + +.align 2 +quadruple_round: + orr r8, r2, r3 + eor r5, r5, r8 + mvn r5, r5 + eor r8, r3, r4, lsr #1 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8, lsl #1 //SWAPMOVE(r4, r3, 0x55555555, 1); + eor r8, r4, r5, lsr #1 + and r8, r8, r6 + eor r4, r4, r8 + eor r5, r5, r8, lsl #1 //SWAPMOVE(r5, r4, 0x55555555, 1); + orr r8, r4, r5 + eor r3, r3, r8 + mvn r3, r3 + eor r8, r2, r3, lsr #1 + and r8, r8, r6 + eor r2, r2, r8 + eor r3, r3, r8, lsl #1 //SWAPMOVE(r3, r2, 0x55555555, 1); + eor r8, r5, r2, lsr #1 + and r8, r8, r6 + eor r5, r5, r8 + eor r2, r2, r8, lsl #1 //SWAPMOVE(r2, r5, 0x55555555, 1); + orr r8, r2, r3 + eor r5, r5, r8 + mvn r5, r5 + eor r8, r3, r4, lsr #1 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8, lsl #1 //SWAPMOVE(r4, r3, 0x55555555, 1); + eor r8, r4, r5, lsr #1 + and r8, r8, r6 + eor r4, r4, r8 + eor r5, r5, r8, lsl #1 //SWAPMOVE(r5, r4, 0x55555555, 1); + orr r8, r4, r5 + eor r3, r3, r8 + eor r8, r2, r5 + and r8, r8, r6 + eor r2, r2, r8 + eor r5, r5, r8 //SWAPMOVE(r5, r2, 0x55555555, 0); + ldmia.w r1!, {r8-r11} //load rkeys in r8,...,r11 + eor r2, r2, r8 //add rtk_2_3 + rconst + eor r3, r3, r9 //add rtk_2_3 + rconst + eor r4, r4, r10 //add rtk_2_3 + rconst + eor r5, r5, r11 //add rtk_2_3 + rconst + ldmia.w r0!,{r8-r11} + eor r2, r2, r8 //add rtk_1 + eor r3, r3, r9 //add rtk_1 + eor r4, r4, r10 //add rtk_1 + eor r5, r5, r11 //add rtk_1 + and r8, r7, r2, ror #30 // --- mixcolumns 0 --- + eor r2, r2, r8, ror #24 + and r8, r7, r2, ror #18 + eor r2, r2, r8, ror #2 + and r8, r7, r2, ror #6 + eor r2, r2, r8, ror #4 + and r8, r7, r3, ror #30 + eor r3, r3, r8, ror #24 + and r8, r7, r3, ror #18 + eor r3, r3, r8, ror #2 + and r8, r7, r3, ror #6 + eor r3, r3, r8, ror #4 + and r8, r7, r4, ror #30 + eor r4, r4, r8, ror #24 + and r8, r7, r4, ror #18 + eor r4, r4, r8, ror #2 + and r8, r7, r4, ror #6 + eor r4, r4, r8, ror #4 + and r8, r7, r5, ror #30 + eor r5, r5, r8, ror #24 + and r8, r7, r5, ror #18 + eor r5, r5, r8, ror #2 + and r8, r7, r5, ror #6 + eor r5, r5, r8, ror #4 + orr r8, r4, r5 + eor r3, r3, r8 + mvn r3, r3 + eor r8, r2, r3, lsr #1 + and r8, r8, r6 + eor r2, r2, r8 + eor r3, r3, r8, lsl #1 //SWAPMOVE(r3, r2, 0x55555555, 1); + eor r8, r5, r2, lsr #1 + and r8, r8, r6 + eor r5, r5, r8 + eor r2, r2, r8, lsl #1 //SWAPMOVE(r2, r5, 0x55555555, 1); + orr r8, r2, r3 + eor r5, r5, r8 + mvn r5, r5 + eor r8, r3, r4, lsr #1 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8, lsl #1 //SWAPMOVE(r4, r3, 0x55555555, 1); + eor r8, r4, r5, lsr #1 + and r8, r8, r6 + eor r4, r4, r8 + eor r5, r5, r8, lsl #1 //SWAPMOVE(r5, r4, 0x55555555, 1); + orr r8, r4, r5 + eor r3, r3, r8 + mvn r3, r3 + eor r8, r2, r3, lsr #1 + and r8, r8, r6 + eor r2, r2, r8 + eor r3, r3, r8, lsl #1 //SWAPMOVE(r3, r2, 0x55555555, 1); + eor r8, r5, r2, lsr #1 + and r8, r8, r6 + eor r5, r5, r8 + eor r2, r2, r8, lsl #1 //SWAPMOVE(r2, r5, 0x55555555, 1); + orr r8, r2, r3 + eor r5, r5, r8 + eor r8, r3, r4 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8 //SWAPMOVE(r4, r3, 0x55555555, 0); + ldmia.w r1!, {r8-r11} //load rkeys in r8,...,r11 + eor r2, r2, r8 //add rkey + rconst + eor r3, r3, r9 //add rkey + rconst + eor r4, r4, r10 //add rkey + rconst + eor r5, r5, r11 //add rkey + rconst + ldmia.w r0!,{r8-r11} + eor r2, r2, r8 //add rtk_1 + eor r3, r3, r9 //add rtk_1 + eor r4, r4, r10 //add rtk_1 + eor r5, r5, r11 //add rtk_1 + and r8, r7, r2, ror #16 // --- mixcolumns 1 --- + eor r2, r2, r8, ror #30 + and r8, r7, r2, ror #28 + eor r2, r2, r8 + and r8, r7, r2, ror #16 + eor r2, r2, r8, ror #2 + and r8, r7, r3, ror #16 + eor r3, r3, r8, ror #30 + and r8, r7, r3, ror #28 + eor r3, r3, r8 + and r8, r7, r3, ror #16 + eor r3, r3, r8, ror #2 + and r8, r7, r4, ror #16 + eor r4, r4, r8, ror #30 + and r8, r7, r4, ror #28 + eor r4, r4, r8 + and r8, r7, r4, ror #16 + eor r4, r4, r8, ror #2 + and r8, r7, r5, ror #16 + eor r5, r5, r8, ror #30 + and r8, r7, r5, ror #28 + eor r5, r5, r8 + and r8, r7, r5, ror #16 + eor r5, r5, r8, ror #2 + orr r8, r2, r3 + eor r5, r5, r8 + mvn r5, r5 + eor r8, r3, r4, lsr #1 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8, lsl #1 //SWAPMOVE(r4, r3, 0x55555555, 1); + eor r8, r4, r5, lsr #1 + and r8, r8, r6 + eor r4, r4, r8 + eor r5, r5, r8, lsl #1 //SWAPMOVE(r5, r4, 0x55555555, 1); + orr r8, r4, r5 + eor r3, r3, r8 + mvn r3, r3 + eor r8, r2, r3, lsr #1 + and r8, r8, r6 + eor r2, r2, r8 + eor r3, r3, r8, lsl #1 //SWAPMOVE(r3, r2, 0x55555555, 1); + eor r8, r5, r2, lsr #1 + and r8, r8, r6 + eor r5, r5, r8 + eor r2, r2, r8, lsl #1 //SWAPMOVE(r2, r5, 0x55555555, 1); + orr r8, r2, r3 + eor r5, r5, r8 + mvn r5, r5 + eor r8, r3, r4, lsr #1 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8, lsl #1 //SWAPMOVE(r4, r3, 0x55555555, 1); + eor r8, r4, r5, lsr #1 + and r8, r8, r6 + eor r4, r4, r8 + eor r5, r5, r8, lsl #1 //SWAPMOVE(r5, r4, 0x55555555, 1); + orr r8, r4, r5 + eor r3, r3, r8 + eor r8, r2, r5 + and r8, r8, r6 + eor r2, r2, r8 + eor r5, r5, r8 //SWAPMOVE(r5, r2, 0x55555555, 0); + ldmia.w r1!, {r8-r11} //load rkeys in r8,...,r11 + eor r2, r2, r8 //add rtk_2_3 + rconst + eor r3, r3, r9 //add rtk_2_3 + rconst + eor r4, r4, r10 //add rtk_2_3 + rconst + eor r5, r5, r11 //add rtk_2_3 + rconst + ldmia.w r0!,{r8-r11} + eor r2, r2, r8 //add rtk_1 + eor r3, r3, r9 //add rtk_1 + eor r4, r4, r10 //add rtk_1 + eor r5, r5, r11 //add rtk_1 + and r8, r7, r2, ror #10 // --- mixcolumns 2 --- + eor r2, r2, r8, ror #4 + and r8, r7, r2, ror #6 + eor r2, r2, r8, ror #6 + and r8, r7, r2, ror #26 + eor r2, r2, r8 + and r8, r7, r3, ror #10 + eor r3, r3, r8, ror #4 + and r8, r7, r3, ror #6 + eor r3, r3, r8, ror #6 + and r8, r7, r3, ror #26 + eor r3, r3, r8 + and r8, r7, r4, ror #10 + eor r4, r4, r8, ror #4 + and r8, r7, r4, ror #6 + eor r4, r4, r8, ror #6 + and r8, r7, r4, ror #26 + eor r4, r4, r8 + and r8, r7, r5, ror #10 + eor r5, r5, r8, ror #4 + and r8, r7, r5, ror #6 + eor r5, r5, r8, ror #6 + and r8, r7, r5, ror #26 + eor r5, r5, r8 + orr r8, r4, r5 + eor r3, r3, r8 + mvn r3, r3 + eor r8, r2, r3, lsr #1 + and r8, r8, r6 + eor r2, r2, r8 + eor r3, r3, r8, lsl #1 //SWAPMOVE(r3, r2, 0x55555555, 1); + eor r8, r5, r2, lsr #1 + and r8, r8, r6 + eor r5, r5, r8 + eor r2, r2, r8, lsl #1 //SWAPMOVE(r2, r5, 0x55555555, 1); + orr r8, r2, r3 + eor r5, r5, r8 + mvn r5, r5 + eor r8, r3, r4, lsr #1 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8, lsl #1 //SWAPMOVE(r4, r3, 0x55555555, 1); + eor r8, r4, r5, lsr #1 + and r8, r8, r6 + eor r4, r4, r8 + eor r5, r5, r8, lsl #1 //SWAPMOVE(r5, r4, 0x55555555, 1); + orr r8, r4, r5 + eor r3, r3, r8 + mvn r3, r3 + eor r8, r2, r3, lsr #1 + and r8, r8, r6 + eor r2, r2, r8 + eor r3, r3, r8, lsl #1 //SWAPMOVE(r3, r2, 0x55555555, 1); + eor r8, r5, r2, lsr #1 + and r8, r8, r6 + eor r5, r5, r8 + eor r2, r2, r8, lsl #1 //SWAPMOVE(r2, r5, 0x55555555, 1); + orr r8, r2, r3 + eor r5, r5, r8 + eor r8, r3, r4 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8 //SWAPMOVE(r4, r3, 0x55555555, 0); + ldmia.w r1!, {r8-r11} //load rkeys in r8,...,r11 + eor r2, r2, r8 //add rkey + rconst + eor r3, r3, r9 //add rkey + rconst + eor r4, r4, r10 //add rkey + rconst + eor r5, r5, r11 //add rkey + rconst + ldmia.w r0!,{r8-r11} + eor r2, r2, r8 //add rtk_1 + eor r3, r3, r9 //add rtk_1 + eor r4, r4, r10 //add rtk_1 + eor r5, r5, r11 //add rtk_1 + and r8, r7, r2, ror #4 // --- mixcolumns 3 --- + eor r2, r2, r8, ror #26 + and r8, r7, r2 + eor r2, r2, r8, ror #4 + and r8, r7, r2, ror #4 + eor r2, r2, r8, ror #22 + and r8, r7, r3, ror #4 + eor r3, r3, r8, ror #26 + and r8, r7, r3 + eor r3, r3, r8, ror #4 + and r8, r7, r3, ror #4 + eor r3, r3, r8, ror #22 + and r8, r7, r4, ror #4 + eor r4, r4, r8, ror #26 + and r8, r7, r4 + eor r4, r4, r8, ror #4 + and r8, r7, r4, ror #4 + eor r4, r4, r8, ror #22 + and r8, r7, r5, ror #4 + eor r5, r5, r8, ror #26 + and r8, r7, r5 + eor r5, r5, r8, ror #4 + and r8, r7, r5, ror #4 + eor r5, r5, r8, ror #22 + bx lr + +/****************************************************************************** +* Inverse quadruple round of fixsliced SKINNY-128. +******************************************************************************/ +.align 2 +inv_quadruple_round: + and r8, r7, r2, ror #4 // --- mixcolumns 3 --- + eor r2, r2, r8, ror #22 + and r8, r7, r2 + eor r2, r2, r8, ror #4 + and r8, r7, r2, ror #4 + eor r2, r2, r8, ror #26 + and r8, r7, r3, ror #4 + eor r3, r3, r8, ror #22 + and r8, r7, r3 + eor r3, r3, r8, ror #4 + and r8, r7, r3, ror #4 + eor r3, r3, r8, ror #26 + and r8, r7, r4, ror #4 + eor r4, r4, r8, ror #22 + and r8, r7, r4 + eor r4, r4, r8, ror #4 + and r8, r7, r4, ror #4 + eor r4, r4, r8, ror #26 + and r8, r7, r5, ror #4 + eor r5, r5, r8, ror #22 + and r8, r7, r5 + eor r5, r5, r8, ror #4 + and r8, r7, r5, ror #4 + eor r5, r5, r8, ror #26 + ldrd r10, r11, [r1], #-8 + ldrd r8, r9, [r1], #-8 + eor r2, r2, r8 //add rkey + rconst + eor r3, r3, r9 //add rkey + rconst + eor r4, r4, r10 //add rkey + rconst + eor r5, r5, r11 //add rkey + rconst + ldrd r10, r11, [r0], #-8 + ldrd r8, r9, [r0], #-8 + eor r2, r2, r8 //add rtk1 + eor r3, r3, r9 //add rtk1 + eor r4, r4, r10 //add rtk1 + eor r5, r5, r11 //add rtk1 + eor r8, r3, r4 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8 //SWAPMOVE(r4, r3, 0x55555555, 0); + orr r8, r2, r3 + eor r5, r5, r8 + eor r8, r5, r2, lsr #1 + and r8, r8, r6 + eor r5, r5, r8 + eor r2, r2, r8, lsl #1 //SWAPMOVE(r2, r5, 0x55555555, 1); + eor r8, r2, r3, lsr #1 + and r8, r8, r6 + eor r2, r2, r8 + eor r3, r3, r8, lsl #1 //SWAPMOVE(r3, r2, 0x55555555, 1); + orr r8, r4, r5 + eor r3, r3, r8 + mvn r3, r3 + eor r8, r4, r5, lsr #1 + and r8, r8, r6 + eor r4, r4, r8 + eor r5, r5, r8, lsl #1 //SWAPMOVE(r5, r4, 0x55555555, 1); + eor r8, r3, r4, lsr #1 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8, lsl #1 //SWAPMOVE(r4, r3, 0x55555555, 1); + orr r8, r2, r3 + eor r5, r5, r8 + mvn r5, r5 + eor r8, r5, r2, lsr #1 + and r8, r8, r6 + eor r5, r5, r8 + eor r2, r2, r8, lsl #1 //SWAPMOVE(r2, r5, 0x55555555, 1); + eor r8, r2, r3, lsr #1 + and r8, r8, r6 + eor r2, r2, r8 + eor r3, r3, r8, lsl #1 //SWAPMOVE(r3, r2, 0x55555555, 1); + orr r8, r4, r5 + eor r3, r3, r8 + mvn r3, r3 + and r8, r7, r2, ror #26 // --- mixcolumns 2 --- + eor r2, r2, r8 + and r8, r7, r2, ror #6 + eor r2, r2, r8, ror #6 + and r8, r7, r2, ror #10 + eor r2, r2, r8, ror #4 + and r8, r7, r3, ror #26 + eor r3, r3, r8 + and r8, r7, r3, ror #6 + eor r3, r3, r8, ror #6 + and r8, r7, r3, ror #10 + eor r3, r3, r8, ror #4 + and r8, r7, r4, ror #26 + eor r4, r4, r8 + and r8, r7, r4, ror #6 + eor r4, r4, r8, ror #6 + and r8, r7, r4, ror #10 + eor r4, r4, r8, ror #4 + and r8, r7, r5, ror #26 + eor r5, r5, r8 + and r8, r7, r5, ror #6 + eor r5, r5, r8, ror #6 + and r8, r7, r5, ror #10 + eor r5, r5, r8, ror #4 + ldrd r10, r11, [r1], #-8 + ldrd r8, r9, [r1], #-8 + eor r2, r2, r8 //add rk2_3 + rconst + eor r3, r3, r9 //add rk2_3 + rconst + eor r4, r4, r10 //add rk2_3 + rconst + eor r5, r5, r11 //add rk2_3 + rconst + ldrd r10, r11, [r0], #-8 + ldrd r8, r9, [r0], #-8 + eor r2, r2, r8 //add rtk1 + eor r3, r3, r9 //add rtk1 + eor r4, r4, r10 //add rtk1 + eor r5, r5, r11 //add rtk1 + eor r8, r2, r5 + and r8, r8, r6 + eor r2, r2, r8 + eor r5, r5, r8 //SWAPMOVE(r5, r2, 0x55555555, 0); + orr r8, r4, r5 + eor r3, r3, r8 + eor r8, r4, r5, lsr #1 + and r8, r8, r6 + eor r4, r4, r8 + eor r5, r5, r8, lsl #1 //SWAPMOVE(r5, r4, 0x55555555, 1); + eor r8, r3, r4, lsr #1 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8, lsl #1 //SWAPMOVE(r4, r3, 0x55555555, 1); + orr r8, r2, r3 + eor r5, r5, r8 + mvn r5, r5 + eor r8, r5, r2, lsr #1 + and r8, r8, r6 + eor r5, r5, r8 + eor r2, r2, r8, lsl #1 //SWAPMOVE(r2, r5, 0x55555555, 1); + eor r8, r2, r3, lsr #1 + and r8, r8, r6 + eor r2, r2, r8 + eor r3, r3, r8, lsl #1 //SWAPMOVE(r3, r2, 0x55555555, 1); + orr r8, r4, r5 + eor r3, r3, r8 + mvn r3, r3 + eor r8, r4, r5, lsr #1 + and r8, r8, r6 + eor r4, r4, r8 + eor r5, r5, r8, lsl #1 //SWAPMOVE(r5, r4, 0x55555555, 1); + eor r8, r3, r4, lsr #1 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8, lsl #1 //SWAPMOVE(r4, r3, 0x55555555, 1); + orr r8, r2, r3 + eor r5, r5, r8 + mvn r5, r5 + and r8, r7, r2, ror #16 // --- mixcolumns 1 --- + eor r2, r2, r8, ror #2 + and r8, r7, r2, ror #28 + eor r2, r2, r8 + and r8, r7, r2, ror #16 + eor r2, r2, r8, ror #30 + and r8, r7, r3, ror #16 + eor r3, r3, r8, ror #2 + and r8, r7, r3, ror #28 + eor r3, r3, r8 + and r8, r7, r3, ror #16 + eor r3, r3, r8, ror #30 + and r8, r7, r4, ror #16 + eor r4, r4, r8, ror #2 + and r8, r7, r4, ror #28 + eor r4, r4, r8 + and r8, r7, r4, ror #16 + eor r4, r4, r8, ror #30 + and r8, r7, r5, ror #16 + eor r5, r5, r8, ror #2 + and r8, r7, r5, ror #28 + eor r5, r5, r8 + and r8, r7, r5, ror #16 + eor r5, r5, r8, ror #30 + ldrd r10, r11, [r1], #-8 + ldrd r8, r9, [r1], #-8 + eor r2, r2, r8 //add rkey + rconst + eor r3, r3, r9 //add rkey + rconst + eor r4, r4, r10 //add rkey + rconst + eor r5, r5, r11 //add rkey + rconst + ldrd r10, r11, [r0], #-8 + ldrd r8, r9, [r0], #-8 + eor r2, r2, r8 //add rtk1 + eor r3, r3, r9 //add rtk1 + eor r4, r4, r10 //add rtk1 + eor r5, r5, r11 //add rtk1 + eor r8, r3, r4 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8 //SWAPMOVE(r4, r3, 0x55555555, 0); + orr r8, r2, r3 + eor r5, r5, r8 + eor r8, r5, r2, lsr #1 + and r8, r8, r6 + eor r5, r5, r8 + eor r2, r2, r8, lsl #1 //SWAPMOVE(r2, r5, 0x55555555, 1); + eor r8, r2, r3, lsr #1 + and r8, r8, r6 + eor r2, r2, r8 + eor r3, r3, r8, lsl #1 //SWAPMOVE(r3, r2, 0x55555555, 1); + orr r8, r4, r5 + eor r3, r3, r8 + mvn r3, r3 + eor r8, r4, r5, lsr #1 + and r8, r8, r6 + eor r4, r4, r8 + eor r5, r5, r8, lsl #1 //SWAPMOVE(r5, r4, 0x55555555, 1); + eor r8, r3, r4, lsr #1 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8, lsl #1 //SWAPMOVE(r4, r3, 0x55555555, 1); + orr r8, r2, r3 + eor r5, r5, r8 + mvn r5, r5 + eor r8, r5, r2, lsr #1 + and r8, r8, r6 + eor r5, r5, r8 + eor r2, r2, r8, lsl #1 //SWAPMOVE(r2, r5, 0x55555555, 1); + eor r8, r2, r3, lsr #1 + and r8, r8, r6 + eor r2, r2, r8 + eor r3, r3, r8, lsl #1 //SWAPMOVE(r3, r2, 0x55555555, 1); + orr r8, r4, r5 + eor r3, r3, r8 + mvn r3, r3 + and r8, r7, r2, ror #6 // --- mixcolumns 0 --- + eor r2, r2, r8, ror #4 + and r8, r7, r2, ror #18 + eor r2, r2, r8, ror #2 + and r8, r7, r2, ror #30 + eor r2, r2, r8, ror #24 + and r8, r7, r3, ror #6 + eor r3, r3, r8, ror #4 + and r8, r7, r3, ror #18 + eor r3, r3, r8, ror #2 + and r8, r7, r3, ror #30 + eor r3, r3, r8, ror #24 + and r8, r7, r4, ror #6 + eor r4, r4, r8, ror #4 + and r8, r7, r4, ror #18 + eor r4, r4, r8, ror #2 + and r8, r7, r4, ror #30 + eor r4, r4, r8, ror #24 + and r8, r7, r5, ror #6 + eor r5, r5, r8, ror #4 + and r8, r7, r5, ror #18 + eor r5, r5, r8, ror #2 + and r8, r7, r5, ror #30 + eor r5, r5, r8, ror #24 + ldrd r10, r11, [r1], #-8 + ldrd r8, r9, [r1], #-8 + eor r2, r2, r8 //add rkey + rconst + eor r3, r3, r9 //add rkey + rconst + eor r4, r4, r10 //add rkey + rconst + eor r5, r5, r11 //add rkey + rconst + ldrd r10, r11, [r0], #-8 + ldrd r8, r9, [r0], #-8 + eor r2, r2, r8 //add rtk1 + eor r3, r3, r9 //add rtk1 + eor r4, r4, r10 //add rtk1 + eor r5, r5, r11 //add rtk1 + eor r8, r2, r5 + and r8, r8, r6 + eor r2, r2, r8 + eor r5, r5, r8 //SWAPMOVE(r5, r2, 0x55555555, 0); + orr r8, r4, r5 + eor r3, r3, r8 + eor r8, r4, r5, lsr #1 + and r8, r8, r6 + eor r4, r4, r8 + eor r5, r5, r8, lsl #1 //SWAPMOVE(r5, r4, 0x55555555, 1); + eor r8, r3, r4, lsr #1 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8, lsl #1 //SWAPMOVE(r4, r3, 0x55555555, 1); + orr r8, r2, r3 + eor r5, r5, r8 + mvn r5, r5 + eor r8, r5, r2, lsr #1 + and r8, r8, r6 + eor r5, r5, r8 + eor r2, r2, r8, lsl #1 //SWAPMOVE(r2, r5, 0x55555555, 1); + eor r8, r2, r3, lsr #1 + and r8, r8, r6 + eor r2, r2, r8 + eor r3, r3, r8, lsl #1 //SWAPMOVE(r3, r2, 0x55555555, 1); + orr r8, r4, r5 + eor r3, r3, r8 + mvn r3, r3 + eor r8, r4, r5, lsr #1 + and r8, r8, r6 + eor r4, r4, r8 + eor r5, r5, r8, lsl #1 //SWAPMOVE(r5, r4, 0x55555555, 1); + eor r8, r3, r4, lsr #1 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8, lsl #1 //SWAPMOVE(r4, r3, 0x55555555, 1); + orr r8, r2, r3 + eor r5, r5, r8 + mvn r5, r5 + bx lr + +/****************************************************************************** +* Encrypt a single block using fixsliced SKINNY-128-128. +******************************************************************************/ +@ void skinny128_384(u8* ctext, const u32* tk, const u8* ptext, const u32* rtk1) +.global skinny128_384 +.type skinny128_384,%function +.align 2 +skinny128_384: + push {r0-r12, r14} + mov.w r0, r3 + ldr.w r3, [r2, #8] + ldr.w r4, [r2, #4] + ldr.w r5, [r2, #12] + ldr.w r2, [r2] + movw r10, #0x0a0a + movt r10, #0x0a0a //r10 <- 0x0a0a0a0a + movw r11, #0x3030 + movt r11, #0x3030 //r11 <- 0x30303030 + bl packing + mov r7, r11 + movw r6, #0x5555 + movt r6, #0x5555 //r6 <- 0x55555555 + bl quadruple_round + bl quadruple_round + bl quadruple_round + bl quadruple_round + sub.w r0, #256 // rtk1 repeats every 16 rounds + bl quadruple_round + bl quadruple_round + bl quadruple_round + bl quadruple_round + sub.w r0, #256 // rtk1 repeats every 16 rounds + bl quadruple_round + bl quadruple_round + bl unpacking + ldr.w r0, [sp], #4 + strd r2, r4, [r0] + strd r3, r5, [r0, #8] + pop {r1-r12,r14} + bx lr + +/****************************************************************************** +* Decrypt a single block using fixsliced SKINNY-128-128. +******************************************************************************/ +@ void skinny128_384_inv(u8* ctext, const u32* tk, const u8* ptext, const u32* rtk1) +.global skinny128_384_inv +.type skinny128_384_inv,%function +.align 2 +skinny128_384_inv: + push {r0-r12, r14} + mov.w r0, r3 + ldr.w r3, [r2, #8] + ldr.w r4, [r2, #4] + ldr.w r5, [r2, #12] + ldr.w r2, [r2] + movw r10, #0x0a0a + movt r10, #0x0a0a //r10 <- 0x0a0a0a0a + movw r11, #0x3030 + movt r11, #0x3030 //r11 <- 0x30303030 + bl packing + mov r7, r11 + movw r6, #0x5555 + movt r6, #0x5555 //r6 <- 0x55555555 + add.w r0, #120 // points to the right rtk1 + add.w r1, #632 // points to the last rtk2_3 + bl inv_quadruple_round + bl inv_quadruple_round + add.w r0, #256 // rtk1 repeats every 16 rounds + bl inv_quadruple_round + bl inv_quadruple_round + bl inv_quadruple_round + bl inv_quadruple_round + add.w r0, #256 // rtk1 repeats every 16 rounds + bl inv_quadruple_round + bl inv_quadruple_round + bl inv_quadruple_round + bl inv_quadruple_round + bl unpacking + ldr.w r0, [sp], #4 + strd r2, r4, [r0] + strd r3, r5, [r0, #8] + pop {r1-r12,r14} + bx lr diff --git a/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/armcortexm_1/skinnyaead.h b/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/armcortexm_1/skinnyaead.h new file mode 100644 index 0000000..0cf0fa9 --- /dev/null +++ b/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/armcortexm_1/skinnyaead.h @@ -0,0 +1,39 @@ +#ifndef SKINNYAEADM1_H_ +#define SKINNYAEADM1_H_ + +#include "skinny128.h" + +typedef unsigned char u8; +typedef unsigned int u32; +typedef unsigned long long u64; + +#define TAGBYTES 16 +#define KEYBYTES 16 +#define BLOCKBYTES 16 + +#define SET_DOMAIN(ptr, domain) ((ptr)[15] = (domain)) + +#define UPDATE_LFSR(lfsr) ({ \ + feedback = ((lfsr) & (1ULL << 63)) ? 0x1B : 0x00; \ + (lfsr) = ((lfsr) << 1) ^ feedback; \ +}) + +#define LE_STR_64(ptr, x) ({ \ + (ptr)[0] = (u8)(x); \ + (ptr)[1] = (u8)((x) >> 8); \ + (ptr)[2] = (u8)((x) >> 16); \ + (ptr)[3] = (u8)((x) >> 24); \ + (ptr)[4] = (u8)((x) >> 32); \ + (ptr)[5] = (u8)((x) >> 40); \ + (ptr)[6] = (u8)((x) >> 48); \ + (ptr)[7] = (u8)((x) >> 56); \ +}) +//x ^= y with x, y 128-bit blocks +#define XOR_BLOCK(x,y) ({ \ + ((u32*)(x))[0] ^= ((u32*)(y))[0]; \ + ((u32*)(x))[1] ^= ((u32*)(y))[1]; \ + ((u32*)(x))[2] ^= ((u32*)(y))[2]; \ + ((u32*)(x))[3] ^= ((u32*)(y))[3]; \ +}) + +#endif // SKINNYAEADM1_H_ \ No newline at end of file diff --git a/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/armcortexm_2/api.h b/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/armcortexm_2/api.h new file mode 100644 index 0000000..a4aa567 --- /dev/null +++ b/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/armcortexm_2/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/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/armcortexm_2/crypto_aead.h b/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/armcortexm_2/crypto_aead.h new file mode 100644 index 0000000..6f4ee42 --- /dev/null +++ b/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/armcortexm_2/crypto_aead.h @@ -0,0 +1,13 @@ +//API required by the NIST for the LWC competition +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); + +//API required by the NIST for the LWC competition +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); diff --git a/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/armcortexm_2/encrypt.c b/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/armcortexm_2/encrypt.c new file mode 100644 index 0000000..fa4a24b --- /dev/null +++ b/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/armcortexm_2/encrypt.c @@ -0,0 +1,298 @@ +/****************************************************************************** +* Constant-time implementation of SKINNY-AEAD-M1 (v1.1). +* +* Two blocks are treated in parallel with SKINNY-128-384 whenever possible. +* +* For more details, see the paper at: https:// +* +* @author Alexandre Adomnicai, Nanyang Technological University, +* alexandre.adomnicai@ntu.edu.sg +* +* @date May 2020 +******************************************************************************/ +#include "skinny128.h" +#include "skinnyaead.h" +#include +#include + +/****************************************************************************** +* x ^= y where x, y are 128-bit blocks (16 bytes array). +******************************************************************************/ +static void xor_block(u8 * x, const u8* y) { + for(int i = 0; i < BLOCKBYTES; i++) + x[i] ^= y[i]; +} + +/****************************************************************************** +* Process the associated data. Common to SKINNY-AEAD-M1 encrypt and decrypt +* functions. +******************************************************************************/ +static void skinny_aead_m1_auth(u8* auth, u8* c, u8* tag, u32* rtk1, + u32* rtk2_3, u64 mlen, const u8* ad, u64 adlen) { + u64 lfsr = 1; + u8 feedback; + u8 tmp[2*BLOCKBYTES]; + memset(tmp, 0x00, 2*BLOCKBYTES); + memset(auth, 0x00, BLOCKBYTES); + SET_DOMAIN(tmp, 0x02); + while (adlen >= 2*BLOCKBYTES) { + LE_STR_64(tmp, lfsr); + UPDATE_LFSR(lfsr); + LE_STR_64(tmp + BLOCKBYTES, lfsr); + SET_DOMAIN(tmp + BLOCKBYTES, 0x02); + tkschedule_perm_tk1(rtk1, tmp, tmp+BLOCKBYTES); + skinny128_384(tmp, tmp+BLOCKBYTES, ad, ad+BLOCKBYTES, rtk1, rtk2_3); + xor_block(auth, tmp); + xor_block(auth, tmp + BLOCKBYTES); + adlen -= 2*BLOCKBYTES; + ad += 2*BLOCKBYTES; + UPDATE_LFSR(lfsr); + } + if (adlen > BLOCKBYTES) { // pad and process 2 blocs + LE_STR_64(tmp, lfsr); + UPDATE_LFSR(lfsr); + LE_STR_64(tmp + BLOCKBYTES, lfsr); + SET_DOMAIN(tmp + BLOCKBYTES, 0x03); // domain for padding ad + tkschedule_perm_tk1(rtk1, tmp, tmp + BLOCKBYTES); + adlen -= BLOCKBYTES; + memset(tmp, 0x00, BLOCKBYTES); + memcpy(tmp, ad + BLOCKBYTES, adlen); + tmp[adlen] ^= 0x80; // padding + skinny128_384(tmp + BLOCKBYTES, tmp, ad, tmp, rtk1, rtk2_3); + xor_block(auth, tmp); + xor_block(auth, tmp + BLOCKBYTES); + } else if (adlen == BLOCKBYTES) { + LE_STR_64(tmp, lfsr); + if (mlen == 0) { // if tag has *NOT* been calculated yet + tkschedule_perm_tk1(rtk1, tmp, tag); + skinny128_384(auth, c, ad, c, rtk1, rtk2_3); + } else { // if tag has been calculated yet + tkschedule_perm_tk1(rtk1, tmp, tmp); // process last ad block + skinny128_384(auth, auth, ad, ad, rtk1, rtk2_3); + } + } else if (adlen > 0) { + LE_STR_64(tmp, lfsr); + SET_DOMAIN(tmp, 0x03); // domain for padding ad + memset(tmp + BLOCKBYTES, 0x00, BLOCKBYTES); // padding + memcpy(tmp + BLOCKBYTES, ad, adlen); // padding + tmp[BLOCKBYTES + adlen] ^= 0x80; // padding + if (mlen == 0) { // if tag has *NOT* been calculated yet + tkschedule_perm_tk1(rtk1, tmp, tag); // compute the tag + skinny128_384(auth, c, tmp + BLOCKBYTES, c, rtk1, rtk2_3); + } else { // if tag has been calculated yet + tkschedule_perm_tk1(rtk1, tmp, tmp); // process last ad block + skinny128_384(auth, auth, tmp + BLOCKBYTES, tmp + BLOCKBYTES, rtk1, rtk2_3); + } + } +} + +/****************************************************************************** +* Encryption and authentication using SKINNY-AEAD-M1 +******************************************************************************/ +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 feedback; + u64 i,lfsr = 1; + u32 rtk1[8*16]; + u32 rtk2_3[8*SKINNY128_384_ROUNDS]; + u8 tmp[2*BLOCKBYTES], tag[BLOCKBYTES], auth[BLOCKBYTES], sum[BLOCKBYTES]; + (void)nsec; + + // ----------------- Initialization ----------------- + *clen = mlen + TAGBYTES; + tkschedule_lfsr_2(rtk2_3, npub, npub, SKINNY128_384_ROUNDS); + tkschedule_lfsr_3(rtk2_3, k, k, SKINNY128_384_ROUNDS); + tkschedule_perm(rtk2_3); + memset(tmp, 0x00, 2*BLOCKBYTES); + memset(tag, 0x00, BLOCKBYTES); + memset(auth, 0x00, BLOCKBYTES); + memset(sum, 0x00, BLOCKBYTES); + // ----------------- Initialization ----------------- + + // ----------------- Process the plaintext ----------------- + while (mlen >= 2*BLOCKBYTES) { // process 2 blocks in // + LE_STR_64(tmp, lfsr); + UPDATE_LFSR(lfsr); + LE_STR_64(tmp + BLOCKBYTES, lfsr); + tkschedule_perm_tk1(rtk1, tmp, tmp + BLOCKBYTES); + skinny128_384(c, c + BLOCKBYTES, m, m + BLOCKBYTES, rtk1, rtk2_3); + xor_block(sum, m); // sum for tag computation + xor_block(sum, m + BLOCKBYTES); // sum for tag computation + mlen -= 2*BLOCKBYTES; + c += 2*BLOCKBYTES; + m += 2*BLOCKBYTES; + UPDATE_LFSR(lfsr); + } + SET_DOMAIN(tag, 0x04); // domain for tag computation + if (mlen > BLOCKBYTES) { // pad and process 2 blocs in // + LE_STR_64(tmp, lfsr); + UPDATE_LFSR(lfsr); + LE_STR_64(tmp + BLOCKBYTES, lfsr); + SET_DOMAIN(tmp + BLOCKBYTES, 0x01); // domain for padding m + tkschedule_perm_tk1(rtk1, tmp, tmp + BLOCKBYTES); + skinny128_384(c, auth, m, auth, rtk1, rtk2_3); + xor_block(sum, m); + for(i = 0; i < mlen - BLOCKBYTES; i++) { + c[BLOCKBYTES + i] = auth[i] ^ m[BLOCKBYTES + i]; + sum[i] ^= m[BLOCKBYTES + i]; + } + sum[i] ^= 0x80; // padding + SET_DOMAIN(tag, 0x05); // domain for tag computation + m += mlen; + c += mlen; + mlen = 0; + UPDATE_LFSR(lfsr); + } else if (mlen == BLOCKBYTES) { // last block is full + LE_STR_64(tmp, lfsr); + UPDATE_LFSR(lfsr); + LE_STR_64(tmp + BLOCKBYTES, lfsr); + SET_DOMAIN(tmp + BLOCKBYTES, 0x04); // domain for tag computation + xor_block(sum, m); // sum for tag computation + tkschedule_perm_tk1(rtk1, tmp, tmp + BLOCKBYTES); + skinny128_384(c, sum, m, sum, rtk1, rtk2_3); + c += BLOCKBYTES; + } else if (mlen > 0) { // last block is partial + LE_STR_64(tmp, lfsr); + SET_DOMAIN(tmp, 0x01); // domain for padding + UPDATE_LFSR(lfsr); + LE_STR_64(tmp + BLOCKBYTES, lfsr); + SET_DOMAIN(tmp + BLOCKBYTES, 0x05); // domain for tag computation + for(i = 0; i < mlen; i++) // sum for tag computation + sum[i] ^= m[i]; // sum for tag computation + sum[i] ^= 0x80; // padding + tkschedule_perm_tk1(rtk1, tmp, tmp + BLOCKBYTES); + skinny128_384(auth, sum, auth, sum, rtk1, rtk2_3); + for(i = 0; i < mlen; i++) + c[i] = auth[i] ^ m[i]; // encrypted padded block + c += mlen; + } + if (mlen == 0) { // if tag has *NOT* been calculated yet + LE_STR_64(tag, lfsr); // lfsr for tag computation + if((adlen % 32) == 0 || (adlen % 32) > BLOCKBYTES) { + tkschedule_perm_tk1(rtk1, tag, tag); + skinny128_384(sum, sum, sum, sum, rtk1, rtk2_3); // compute the tag + } + } + // ----------------- Process the plaintext ----------------- + + // ----------------- Process the associated data ----------------- + skinny_aead_m1_auth(auth, sum, tag, rtk1, rtk2_3, mlen, ad, adlen); + xor_block(sum, auth); + memcpy(c, sum, TAGBYTES); + // ----------------- Process the associated data ----------------- + + return 0; +} + + +/****************************************************************************** +* Decryption and authentication using SKINNY-AEAD-M1 +******************************************************************************/ +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 feedback; + u64 i,lfsr = 1; + u32 rtk1[8*16]; + u32 rtk2_3[8*SKINNY128_384_ROUNDS]; + u8 tmp[2*BLOCKBYTES]; + u8 sum[BLOCKBYTES], tag[BLOCKBYTES], auth[BLOCKBYTES]; + (void)nsec; + + if (clen < TAGBYTES) + return -1; + + // ----------------- Initialization ----------------- + clen -= TAGBYTES; + *mlen = clen; + tkschedule_lfsr_2(rtk2_3, npub, npub, SKINNY128_384_ROUNDS); + tkschedule_lfsr_3(rtk2_3, k, k, SKINNY128_384_ROUNDS); + tkschedule_perm(rtk2_3); + memset(tmp, 0x00, 2*BLOCKBYTES); + memset(tag, 0x00, BLOCKBYTES); + memset(auth, 0x00, BLOCKBYTES); + memset(sum, 0x00, BLOCKBYTES); + // ----------------- Initialization ----------------- + + // ----------------- Process the plaintext ----------------- + while (clen >= 2*BLOCKBYTES) { // process 2 blocks in // + LE_STR_64(tmp, lfsr); + UPDATE_LFSR(lfsr); + LE_STR_64(tmp + BLOCKBYTES, lfsr); + tkschedule_perm_tk1(rtk1, tmp, tmp + BLOCKBYTES); + skinny128_384_inv(m, m + BLOCKBYTES, c, c + BLOCKBYTES, rtk1, rtk2_3); + xor_block(sum, m); // sum for tag computation + xor_block(sum, m + BLOCKBYTES); // sum for tag computation + clen -= 2*BLOCKBYTES; + c += 2*BLOCKBYTES; + m += 2*BLOCKBYTES; + UPDATE_LFSR(lfsr); + } + SET_DOMAIN(tag, 0x04); // domain for tag computation + if (clen > BLOCKBYTES) { // pad and process 2 blocs in // + LE_STR_64(tmp, lfsr); + tkschedule_perm_tk1(rtk1, tmp, tmp); + skinny128_384_inv(m, m, c, c, rtk1, rtk2_3); + xor_block(sum, m); + UPDATE_LFSR(lfsr); + LE_STR_64(tmp, lfsr); + SET_DOMAIN(tmp, 0x01); // domain for padding m + tkschedule_perm_tk1(rtk1, tmp, tmp); + skinny128_384(auth, auth, auth, auth, rtk1, rtk2_3); + for(i = 0; i < clen - BLOCKBYTES; i++) { + m[BLOCKBYTES + i] = auth[i] ^ c[BLOCKBYTES + i]; + sum[i] ^= m[BLOCKBYTES + i]; + } + sum[i] ^= 0x80; // padding + SET_DOMAIN(tag, 0x05); // domain for tag computation + c += clen; + clen = 0; + UPDATE_LFSR(lfsr); + } else if (clen == BLOCKBYTES) { // last block is full + LE_STR_64(tmp, lfsr); + tkschedule_perm_tk1(rtk1, tmp, tmp); + skinny128_384_inv(m, m, c, c, rtk1, rtk2_3); + xor_block(sum, m); // sum for tag computation + SET_DOMAIN(tag, 0x04); // domain for tag computation + UPDATE_LFSR(lfsr); + c += BLOCKBYTES; + clen = 0; + } else if (clen > 0) { // last block is partial + LE_STR_64(tmp, lfsr); + SET_DOMAIN(tmp, 0x01); // domain for padding + tkschedule_perm_tk1(rtk1, tmp, tmp); + skinny128_384(auth, auth, auth, auth, rtk1, rtk2_3); + for(i = 0; i < clen; i++) { + m[i] = auth[i] ^ c[i]; // encrypted padded block + sum[i] ^= m[i]; // sum for tag computation + } + sum[i] ^= 0x80; // padding + SET_DOMAIN(tag, 0x05); // domain for tag computation + UPDATE_LFSR(lfsr); + c += clen; + clen = 0; + } + if (clen == 0) { // if tag has *NOT* been calculated yet + LE_STR_64(tag, lfsr); + if((adlen % 32) == 0 || (adlen % 32) > BLOCKBYTES) { + tkschedule_perm_tk1(rtk1, tag, tag); //if AD can be processed in // + skinny128_384(sum, sum, sum, sum, rtk1, rtk2_3); // compute the tag + } + } + + // ----------------- Process the associated data ----------------- + skinny_aead_m1_auth(auth, sum, tag, rtk1, rtk2_3, clen, ad, adlen); + xor_block(sum, auth); + feedback = 0; + for(i = 0; i < TAGBYTES; i++) + feedback |= sum[i] ^ c[i]; // constant-time tag verification + return feedback; + // ----------------- Process the associated data ----------------- +} \ No newline at end of file diff --git a/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/armcortexm_2/skinny128.h b/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/armcortexm_2/skinny128.h new file mode 100644 index 0000000..299d162 --- /dev/null +++ b/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/armcortexm_2/skinny128.h @@ -0,0 +1,17 @@ +#ifndef SKINNY128_H_ +#define SKINNY128_H_ + +typedef unsigned char u8; +typedef unsigned int u32; + +#define SKINNY128_384_ROUNDS 40 + +extern void skinny128_384(u8* ctext, u8* ctext_bis, const u8* ptext, const u8* ptext_bis, const u32* rtk1, const u32* rtk2_3); +extern void skinny128_384_inv(u8* ptext, u8* ptext_bis, const u8* ctext, const u8* ctext_bis, const u32* rtk1, const u32* rtk2_3); +extern void tkschedule_lfsr_2(u32* rtk, const u8* tk2, const u8* tk2_bis, const int rounds); +extern void pack_tk1(u32* rtk, const u8* tk2, const u8* tk2_bis, const int rounds); +extern void tkschedule_lfsr_3(u32* rtk, const u8* tk3, const u8* tk3_bis, const int rounds); +extern void tkschedule_perm(u32* rtk); +extern void tkschedule_perm_tk1(u32* rtk1, const u8* tk1, const u8* tk1_bis); + +#endif // SKINNY128_H_ \ No newline at end of file diff --git a/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/armcortexm_2/skinny128.s b/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/armcortexm_2/skinny128.s new file mode 100644 index 0000000..b09c99b --- /dev/null +++ b/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/armcortexm_2/skinny128.s @@ -0,0 +1,3426 @@ +/******************************************************************************* +* Constant-time ARM assembly implementation of the SKINNY block cipher. +* Two blocks are processed in parallel. +* +* @author Alexandre Adomnicai, Nanyang Technological University, +* alexandre.adomnicai@ntu.edu.sg +* +* @date April 2020 +*******************************************************************************/ + +.syntax unified +.thumb + +/******************************************************************************* +* Applies P^2 on the tweakey state in a bitsliced manner. +*******************************************************************************/ +.align 2 +p2: + movw r3, #0xcc00 + movt r3, #0xcc00 //r1 <- 0xcc00cc00 + movw r4, #0xcc00 + movt r4, #0x0033 //r10<- 0xcc000033 + and r1, r3, r5, ror #14 + bfi r1, r5, #16, #8 + and r2, r5, #0xcc000000 + orr r1, r1, r2, lsr #2 + and r2, r4, r5 + orr r1, r1, r2, lsr #8 + and r2, r5, #0x00cc0000 + orr r5, r1, r2, lsr #18 + and r1, r3, r6, ror #14 + bfi r1, r6, #16, #8 + and r2, r6, #0xcc000000 + orr r1, r1, r2, lsr #2 + and r2, r4, r6 + orr r1, r1, r2, lsr #8 + and r2, r6, #0x00cc0000 + orr r6, r1, r2, lsr #18 + and r1, r3, r7, ror #14 + bfi r1, r7, #16, #8 + and r2, r7, #0xcc000000 + orr r1, r1, r2, lsr #2 + and r2, r4, r7 + orr r1, r1, r2, lsr #8 + and r2, r7, #0x00cc0000 + orr r7, r1, r2, lsr #18 + and r1, r3, r8, ror #14 + bfi r1, r8, #16, #8 + and r2, r8, #0xcc000000 + orr r1, r1, r2, lsr #2 + and r2, r4, r8 + orr r1, r1, r2, lsr #8 + and r2, r8, #0x00cc0000 + orr r8, r1, r2, lsr #18 + and r1, r3, r9, ror #14 + bfi r1, r9, #16, #8 + and r2, r9, #0xcc000000 + orr r1, r1, r2, lsr #2 + and r2, r4, r9 + orr r1, r1, r2, lsr #8 + and r2, r9, #0x00cc0000 + orr r9, r1, r2, lsr #18 + and r1, r3, r10, ror #14 + bfi r1, r10, #16, #8 + and r2, r10, #0xcc000000 + orr r1, r1, r2, lsr #2 + and r2, r4, r10 + orr r1, r1, r2, lsr #8 + and r2, r10, #0x00cc0000 + orr r10, r1, r2, lsr #18 + and r1, r3, r11, ror #14 + bfi r1, r11, #16, #8 + and r2, r11, #0xcc000000 + orr r1, r1, r2, lsr #2 + and r2, r4, r11 + orr r1, r1, r2, lsr #8 + and r2, r11, #0x00cc0000 + orr r11, r1, r2, lsr #18 + and r1, r3, r12, ror #14 + bfi r1, r12, #16, #8 + and r2, r12, #0xcc000000 + orr r1, r1, r2, lsr #2 + and r2, r4, r12 + orr r1, r1, r2, lsr #8 + and r2, r12, #0x00cc0000 + orr r12, r1, r2, lsr #18 + bx lr + +/******************************************************************************* +* Applies P^4 on the tweakey state in a bitsliced manner. +*******************************************************************************/ +.align 2 +p4: + str.w r14, [sp] //store r14 on the stack + movw r14, #0x00cc + movt r14, #0xcc00 //r14<- 0xcc0000cc + movw r3, #0xcc00 + movt r3, #0x3300 //r3 <- 0x3300cc00 + movw r4, #0x00cc + movt r4, #0x00cc //r4 <- 0x00cc00cc + and r2, r14, r5, ror #22 + and r1, r3, r5, ror #16 + orr r2, r2, r1 + and r1, r5, r4 + orr r2, r2, r1, lsr #2 + movw r1, #0xcc33 //r1 <- 0x0000cc33 + and r5, r5, r1 + orr r5, r2, r5, ror #24 + and r2, r14, r6, ror #22 + and r1, r3, r6, ror #16 + orr r2, r2, r1 + and r1, r6, r4 + orr r2, r2, r1, lsr #2 + movw r1, #0xcc33 //r1 <- 0x0000cc33 + and r6, r6, r1 + orr r6, r2, r6, ror #24 + and r2, r14, r7, ror #22 + and r1, r3, r7, ror #16 + orr r2, r2, r1 + and r1, r7, r4 + orr r2, r2, r1, lsr #2 + movw r1, #0xcc33 //r1 <- 0x0000cc33 + and r7, r7, r1 + orr r7, r2, r7, ror #24 + and r2, r14, r8, ror #22 + and r1, r3, r8, ror #16 + orr r2, r2, r1 + and r1, r8, r4 + orr r2, r2, r1, lsr #2 + movw r1, #0xcc33 //r1 <- 0x0000cc33 + and r8, r8, r1 + orr r8, r2, r8, ror #24 + and r2, r14, r9, ror #22 + and r1, r3, r9, ror #16 + orr r2, r2, r1 + and r1, r9, r4 + orr r2, r2, r1, lsr #2 + movw r1, #0xcc33 //r1 <- 0x0000cc33 + and r9, r9, r1 + orr r9, r2, r9, ror #24 + and r2, r14, r10, ror #22 + and r1, r3, r10, ror #16 + orr r2, r2, r1 + and r1, r10, r4 + orr r2, r2, r1, lsr #2 + movw r1, #0xcc33 //r1 <- 0x0000cc33 + and r10, r10, r1 + orr r10, r2, r10, ror #24 + and r2, r14, r11, ror #22 + and r1, r3, r11, ror #16 + orr r2, r2, r1 + and r1, r11, r4 + orr r2, r2, r1, lsr #2 + movw r1, #0xcc33 //r1 <- 0x0000cc33 + and r11, r11, r1 + orr r11, r2, r11, ror #24 + and r2, r14, r12, ror #22 + and r1, r3, r12, ror #16 + orr r2, r2, r1 + and r1, r12, r4 + orr r2, r2, r1, lsr #2 + movw r1, #0xcc33 //r1 <- 0x0000cc33 + and r12, r12, r1 + orr r12, r2, r12, ror #24 + ldr.w r14, [sp] //restore r14 + bx lr + +/******************************************************************************* +* Applies P^6 on the tweakey state in a bitsliced manner +*******************************************************************************/ +.align 2 +p6: + movw r3, #0x3333 //r1 <- 0x00003333 + movw r4, #0x00cc + movt r4, #0x3300 //r12<- 0x330000cc + and r1, r5, r3, ror #8 // --- permute r5 6 times + and r2, r4, r5, ror #24 + orr r2, r2, r1, ror #6 + and r1, r3, r5, ror #10 + orr r2, r2, r1 + and r1, r5, #0x000000cc + orr r2, r2, r1, lsl #14 + and r1, r5, #0x00003300 + orr r5, r2, r1, lsl #2 // permute r5 6 times --- + and r1, r6, r3, ror #8 // --- permute r6 6 times + and r2, r4, r6, ror #24 + orr r2, r2, r1, ror #6 + and r1, r3, r6, ror #10 + orr r2, r2, r1 + and r1, r6, #0x000000cc + orr r2, r2, r1, lsl #14 + and r1, r6, #0x00003300 + orr r6, r2, r1, lsl #2 // permute r6 6 times --- + and r1, r7, r3, ror #8 // --- permute r7 6 times + and r2, r4, r7, ror #24 + orr r2, r2, r1, ror #6 + and r1, r3, r7, ror #10 + orr r2, r2, r1 + and r1, r7, #0x000000cc + orr r2, r2, r1, lsl #14 + and r1, r7, #0x00003300 + orr r7, r2, r1, lsl #2 // permute r7 6 times --- + and r1, r8, r3, ror #8 // --- permute r8 6 times + and r2, r4, r8, ror #24 + orr r2, r2, r1, ror #6 + and r1, r3, r8, ror #10 + orr r2, r2, r1 + and r1, r8, #0x000000cc + orr r2, r2, r1, lsl #14 + and r1, r8, #0x00003300 + orr r8, r2, r1, lsl #2 // permute r8 6 times --- + and r1, r9, r3, ror #8 // --- permute r9 6 times + and r2, r4, r9, ror #24 + orr r2, r2, r1, ror #6 + and r1, r3, r9, ror #10 + orr r2, r2, r1 + and r1, r9, #0x000000cc + orr r2, r2, r1, lsl #14 + and r1, r9, #0x00003300 + orr r9, r2, r1, lsl #2 // permute r9 6 times --- + and r1, r10, r3, ror #8 // --- permute r10 6 times + and r2, r4, r10, ror #24 + orr r2, r2, r1, ror #6 + and r1, r3, r10, ror #10 + orr r2, r2, r1 + and r1, r10, #0x000000cc + orr r2, r2, r1, lsl #14 + and r1, r10, #0x00003300 + orr r10, r2, r1, lsl #2 // permute r10 6 times --- + and r1, r11, r3, ror #8 // --- permute r11 6 times + and r2, r4, r11, ror #24 + orr r2, r2, r1, ror #6 + and r1, r3, r11, ror #10 + orr r2, r2, r1 + and r1, r11, #0x000000cc + orr r2, r2, r1, lsl #14 + and r1, r11, #0x00003300 + orr r11, r2, r1, lsl #2 // permute r11 6 times --- + and r1, r12, r3, ror #8 // --- permute r12 6 times + and r2, r4, r12, ror #24 + orr r2, r2, r1, ror #6 + and r1, r3, r12, ror #10 + orr r2, r2, r1 + and r1, r12, #0x000000cc + orr r2, r2, r1, lsl #14 + and r1, r12, #0x00003300 + orr r12, r2, r1, lsl #2 // permute r12 6 times --- + bx lr + +/******************************************************************************* +* Applies P^8 on the tweakey state in a bitsliced manner. +*******************************************************************************/ +.align 2 +p8: + movw r3, #0x3333 //r3 <- 0x00003333 + movw r4, #0x0000 + movt r4, #0x33cc //r4 <- 0x33cc0000 + and r1, r5, r4 // --- permute r5 8 times + and r2, r4, r5, ror #8 + orr r2, r2, r1, ror #24 + and r1, r5, r3, lsl #2 + orr r2, r2, r1, ror #26 + and r1, r5, r3, lsl #8 + orr r5, r2, r1, lsr #6 // permute r5 8 times --- + and r1, r6, r4 // --- permute r6 8 times + and r2, r4, r6, ror #8 + orr r2, r2, r1, ror #24 + and r1, r6, r3, lsl #2 + orr r2, r2, r1, ror #26 + and r1, r6, r3, lsl #8 + orr r6, r2, r1, lsr #6 // permute r6 8 times --- + and r1, r7, r4 // --- permute r7 8 times + and r2, r4, r7, ror #8 + orr r2, r2, r1, ror #24 + and r1, r7, r3, lsl #2 + orr r2, r2, r1, ror #26 + and r1, r7, r3, lsl #8 + orr r7, r2, r1, lsr #6 // permute r7 8 times --- + and r1, r8, r4 // --- permute r8 8 times + and r2, r4, r8, ror #8 + orr r2, r2, r1, ror #24 + and r1, r8, r3, lsl #2 + orr r2, r2, r1, ror #26 + and r1, r8, r3, lsl #8 + orr r8, r2, r1, lsr #6 // permute r8 8 times --- + and r1, r9, r4 // --- permute r9 8 times + and r2, r4, r9, ror #8 + orr r2, r2, r1, ror #24 + and r1, r9, r3, lsl #2 + orr r2, r2, r1, ror #26 + and r1, r9, r3, lsl #8 + orr r9, r2, r1, lsr #6 // permute r9 8 times --- + and r1, r10, r4 // --- permute r10 8 times + and r2, r4, r10, ror #8 + orr r2, r2, r1, ror #24 + and r1, r10, r3, lsl #2 + orr r2, r2, r1, ror #26 + and r1, r10, r3, lsl #8 + orr r10, r2, r1, lsr #6 // permute r10 8 times --- + and r1, r11, r4 // --- permute r11 8 times + and r2, r4, r11, ror #8 + orr r2, r2, r1, ror #24 + and r1, r11, r3, lsl #2 + orr r2, r2, r1, ror #26 + and r1, r11, r3, lsl #8 + orr r11, r2, r1, lsr #6 // permute r11 8 times --- + and r1, r12, r4 // --- permute r12 8 times + and r2, r4, r12, ror #8 + orr r2, r2, r1, ror #24 + and r1, r12, r3, lsl #2 + orr r2, r2, r1, ror #26 + and r1, r12, r3, lsl #8 + orr r12, r2, r1, lsr #6 // permute r12 8 times --- + bx lr + +/******************************************************************************* +* Applies P^10 on the tweakey state in a bitsliced manner. +*******************************************************************************/ +.align 2 +p10: + movw r4, #0x0033 + movt r4, #0x3300 //r4 <- 0x33000033 + movw r3, #0xcc33 //r3 <- 0x0000cc33 + and r1, r5, r3, ror #8 // --- permute r5 10 times + and r2, r4, r5, ror #26 + orr r2, r2, r1, ror #8 + and r1, r5, r4, ror #24 + orr r2, r2, r1, ror #22 + and r1, r5, #0x00330000 + orr r2, r2, r1, lsr #14 + and r1, r5, #0x0000cc00 + orr r5, r2, r1, lsr #2 // permute r5 10 times --- + and r1, r6, r3, ror #8 // --- permute r6 10 times + and r2, r4, r6, ror #26 + orr r2, r2, r1, ror #8 + and r1, r6, r4, ror #24 + orr r2, r2, r1, ror #22 + and r1, r6, #0x00330000 + orr r2, r2, r1, lsr #14 + and r1, r6, #0x0000cc00 + orr r6, r2, r1, lsr #2 // permute r6 10 times --- + and r1, r7, r3, ror #8 // --- permute r7 10 times + and r2, r4, r7, ror #26 + orr r2, r2, r1, ror #8 + and r1, r7, r4, ror #24 + orr r2, r2, r1, ror #22 + and r1, r7, #0x00330000 + orr r2, r2, r1, lsr #14 + and r1, r7, #0x0000cc00 + orr r7, r2, r1, lsr #2 // permute r7 10 times --- + and r1, r8, r3, ror #8 // --- permute r8 10 times + and r2, r4, r8, ror #26 + orr r2, r2, r1, ror #8 + and r1, r8, r4, ror #24 + orr r2, r2, r1, ror #22 + and r1, r8, #0x00330000 + orr r2, r2, r1, lsr #14 + and r1, r8, #0x0000cc00 + orr r8, r2, r1, lsr #2 // permute r8 10 times --- + and r1, r9, r3, ror #8 // --- permute r9 10 times + and r2, r4, r9, ror #26 + orr r2, r2, r1, ror #8 + and r1, r9, r4, ror #24 + orr r2, r2, r1, ror #22 + and r1, r9, #0x00330000 + orr r2, r2, r1, lsr #14 + and r1, r9, #0x0000cc00 + orr r9, r2, r1, lsr #2 // permute r9 10 times --- + and r1, r10, r3, ror #8 // --- permute r10 10 times + and r2, r4, r10, ror #26 + orr r2, r2, r1, ror #8 + and r1, r10, r4, ror #24 + orr r2, r2, r1, ror #22 + and r1, r10, #0x00330000 + orr r2, r2, r1, lsr #14 + and r1, r10, #0x0000cc00 + orr r10, r2, r1, lsr #2 // permute r10 10 times --- + and r1, r11, r3, ror #8 // --- permute r11 10 times + and r2, r4, r11, ror #26 + orr r2, r2, r1, ror #8 + and r1, r11, r4, ror #24 + orr r2, r2, r1, ror #22 + and r1, r11, #0x00330000 + orr r2, r2, r1, lsr #14 + and r1, r11, #0x0000cc00 + orr r11, r2, r1, lsr #2 // permute r11 10 times --- + and r1, r12, r3, ror #8 // --- permute r12 10 times + and r2, r4, r12, ror #26 + orr r2, r2, r1, ror #8 + and r1, r12, r4, ror #24 + orr r2, r2, r1, ror #22 + and r1, r12, #0x00330000 + orr r2, r2, r1, lsr #14 + and r1, r12, #0x0000cc00 + orr r12, r2, r1, lsr #2 // permute r12 10 times --- + bx lr + +/******************************************************************************* +* Applies P^12 on the tweakey state in a bitsliced manner. +*******************************************************************************/ +.align 2 +p12: + str.w r14, [sp] //store r14 on the stack + movw r14, #0xcc33 //r14<- 0x0000cc33 + movw r4, #0x00cc + movt r4, #0x00cc //r4 <- 0x00cc00cc + movw r3, #0x3300 + movt r3, #0xcc00 //r3 <- 0xcc003300 + and r1, r14, r5, ror #8 // --- permute r5 12 times + and r2, r4, r5, ror #30 + orr r2, r2, r1 + and r1, r3, r5, ror #16 + orr r2, r2, r1 + movw r1, #0xcccc //r1 <- 0x0000cccc + and r1, r5, r1, ror #8 + orr r5, r2, r1, ror #10 // permute r5 12 times --- + and r1, r14, r6, ror #8 // --- permute r6 12 times + and r2, r4, r6, ror #30 + orr r2, r2, r1 + and r1, r3, r6, ror #16 + orr r2, r2, r1 + movw r1, #0xcccc //r1 <- 0x0000cccc + and r1, r6, r1, ror #8 + orr r6, r2, r1, ror #10 // permute r6 12 times --- + and r1, r14, r7, ror #8 // --- permute r7 12 times + and r2, r4, r7, ror #30 + orr r2, r2, r1 + and r1, r3, r7, ror #16 + orr r2, r2, r1 + movw r1, #0xcccc //r1 <- 0x0000cccc + and r1, r7, r1, ror #8 + orr r7, r2, r1, ror #10 // permute r7 12 times --- + and r1, r14, r8, ror #8 // --- permute r8 12 times + and r2, r4, r8, ror #30 + orr r2, r2, r1 + and r1, r3, r8, ror #16 + orr r2, r2, r1 + movw r1, #0xcccc //r1 <- 0x0000cccc + and r1, r8, r1, ror #8 + orr r8, r2, r1, ror #10 // permute r8 12 times --- + and r1, r14, r9, ror #8 // --- permute r9 12 times + and r2, r4, r9, ror #30 + orr r2, r2, r1 + and r1, r3, r9, ror #16 + orr r2, r2, r1 + movw r1, #0xcccc //r1 <- 0x0000cccc + and r1, r9, r1, ror #8 + orr r9, r2, r1, ror #10 // permute r9 12 times --- + and r1, r14, r10, ror #8 // --- permute r10 12 times + and r2, r4, r10, ror #30 + orr r2, r2, r1 + and r1, r3, r10, ror #16 + orr r2, r2, r1 + movw r1, #0xcccc //r1 <- 0x0000cccc + and r1, r10, r1, ror #8 + orr r10, r2, r1, ror #10 // permute r10 12 times --- + and r1, r14, r11, ror #8 // --- permute r11 12 times + and r2, r4, r11, ror #30 + orr r2, r2, r1 + and r1, r3, r11, ror #16 + orr r2, r2, r1 + movw r1, #0xcccc //r1 <- 0x0000cccc + and r1, r11, r1, ror #8 + orr r11, r2, r1, ror #10 // permute r11 12 times --- + and r1, r14, r12, ror #8 // --- permute r12 12 times + and r2, r4, r12, ror #30 + orr r2, r2, r1 + and r1, r3, r12, ror #16 + ldr.w r14, [sp] + orr r2, r2, r1 + movw r1, #0xcccc //r1 <- 0x0000cccc + and r1, r12, r1, ror #8 + orr r12, r2, r1, ror #10 // permute r12 12 times --- + bx lr + +/******************************************************************************* +* Applies P^14 on the tweakey state in a bitsliced manner. +*******************************************************************************/ +.align 2 +p14: + movw r3, #0xcc00 + movt r3, #0x0033 //r3 <- 0x0033cc00 + movw r4, #0xcc00 + movt r4, #0xcc00 //r4 <- 0x33003300 + and r1, r3, r5, ror #24 // --- permute r5 14 times + and r2, r5, #0x00000033 + orr r2, r1, r2, ror #14 + and r1, r5, #0x33000000 + orr r2, r2, r1, ror #30 + and r1, r5, #0x00ff0000 + orr r2, r2, r1, ror #16 + and r1, r5, r4 + orr r5, r2, r1, ror #18 // permute r5 14 times --- + and r1, r3, r6, ror #24 // --- permute r6 14 times + and r2, r6, #0x00000033 + orr r2, r1, r2, ror #14 + and r1, r6, #0x33000000 + orr r2, r2, r1, ror #30 + and r1, r6, #0x00ff0000 + orr r2, r2, r1, ror #16 + and r1, r6, r4 + orr r6, r2, r1, ror #18 // permute r6 14 times --- + and r1, r3, r7, ror #24 // --- permute r7 14 times + and r2, r7, #0x00000033 + orr r2, r1, r2, ror #14 + and r1, r7, #0x33000000 + orr r2, r2, r1, ror #30 + and r1, r7, #0x00ff0000 + orr r2, r2, r1, ror #16 + and r1, r7, r4 + orr r7, r2, r1, ror #18 // permute r7 14 times --- + and r1, r3, r8, ror #24 // --- permute r8 14 times + and r2, r8, #0x00000033 + orr r2, r1, r2, ror #14 + and r1, r8, #0x33000000 + orr r2, r2, r1, ror #30 + and r1, r8, #0x00ff0000 + orr r2, r2, r1, ror #16 + and r1, r8, r4 + orr r8, r2, r1, ror #18 // permute r8 14 times --- + and r1, r3, r9, ror #24 // --- permute r9 14 times + and r2, r9, #0x00000033 + orr r2, r1, r2, ror #14 + and r1, r9, #0x33000000 + orr r2, r2, r1, ror #30 + and r1, r9, #0x00ff0000 + orr r2, r2, r1, ror #16 + and r1, r9, r4 + orr r9, r2, r1, ror #18 // permute r9 14 times --- + and r1, r3, r10, ror #24 // --- permute r10 14 times + and r2, r10, #0x00000033 + orr r2, r1, r2, ror #14 + and r1, r10, #0x33000000 + orr r2, r2, r1, ror #30 + and r1, r10, #0x00ff0000 + orr r2, r2, r1, ror #16 + and r1, r10, r4 + orr r10, r2, r1, ror #18 // permute r10 14 times --- + and r1, r3, r11, ror #24 // --- permute r11 14 times + and r2, r11, #0x00000033 + orr r2, r1, r2, ror #14 + and r1, r11, #0x33000000 + orr r2, r2, r1, ror #30 + and r1, r11, #0x00ff0000 + orr r2, r2, r1, ror #16 + and r1, r11, r4 + orr r11, r2, r1, ror #18 // permute r11 14 times --- + and r1, r3, r12, ror #24 // --- permute r12 14 times + and r2, r12, #0x00000033 + orr r2, r1, r2, ror #14 + and r1, r12, #0x33000000 + orr r2, r2, r1, ror #30 + and r1, r12, #0x00ff0000 + orr r2, r2, r1, ror #16 + and r1, r12, r4 + orr r12, r2, r1, ror #18 // permute r12 14 times --- + bx lr + +/******************************************************************************* +* Packs the input byte array into the fixsliced representation. +*******************************************************************************/ +.align 2 +packing: + eor r4, r5, r6, lsr #1 + and r4, r4, r2 + eor r5, r5, r4 + eor r6, r6, r4, lsl #1 //SWAPMOVE(r6, r5, 0x55555555, 1) + eor r4, r7, r8, lsr #1 + and r4, r4, r2 + eor r7, r7, r4 + eor r8, r8, r4, lsl #1 //SWAPMOVE(r8, r7, 0x55555555, 1) + eor r4, r9, r10, lsr #1 + and r4, r4, r2 + eor r9, r9, r4 + eor r10, r10, r4, lsl #1 //SWAPMOVE(r10, r9, 0x55555555, 1) + eor r4, r11, r12, lsr #1 + and r4, r4, r2 + eor r11, r11, r4 + eor r12, r12, r4, lsl #1 //SWAPMOVE(r12, r11, 0x55555555, 1) + eor r4, r5, r7, lsr #2 + and r4, r4, r3 + eor r5, r5, r4 + eor r7, r7, r4, lsl #2 //SWAPMOVE(r7, r5, 0x30303030, 2) + eor r4, r5, r9, lsr #4 + and r4, r4, r3, lsr #2 + eor r5, r5, r4 + eor r9, r9, r4, lsl #4 //SWAPMOVE(r9, r5, 0x0c0c0c0c, 4) + eor r4, r5, r11, lsr #6 + and r4, r4, r3, lsr #4 + eor r5, r5, r4 + eor r11, r11, r4, lsl #6 //SWAPMOVE(r11, r5, 0x03030303, 6) + eor r4, r6, r8, lsr #2 + and r4, r4, r3 + eor r6, r6, r4 + eor r8, r8, r4, lsl #2 //SWAPMOVE(r8, r6, 0x30303030, 2) + eor r4, r6, r10, lsr #4 + and r4, r4, r3, lsr #2 + eor r6, r6, r4 + eor r10, r10, r4, lsl #4 //SWAPMOVE(r10, r6, 0x0c0c0c0c, 4) + eor r4, r6, r12, lsr #6 + and r4, r4, r3, lsr #4 + eor r6, r6, r4 + eor r12, r12, r4, lsl #6 //SWAPMOVE(r12, r6, 0x03030303, 6) + eor r4, r7, r9, lsr #2 + and r4, r4, r3, lsr #2 + eor r7, r7, r4 + eor r9, r9, r4, lsl #2 //SWAPMOVE(r9, r7, 0x0c0c0c0c, 2) + eor r4, r7, r11, lsr #4 + and r4, r4, r3, lsr #4 + eor r7, r7, r4 + eor r11, r11, r4, lsl #4 //SWAPMOVE(r11, r7, 0x03030303, 4) + eor r4, r8, r10, lsr #2 + and r4, r4, r3, lsr #2 + eor r8, r8, r4 + eor r10, r10, r4, lsl #2 //SWAPMOVE(r10, r8, 0x0c0c0c0c, 2) + eor r4, r8, r12, lsr #4 + and r4, r4, r3, lsr #4 + eor r8, r8, r4 + eor r12, r12, r4, lsl #4 //SWAPMOVE(r12, r8, 0x03030303, 4) + eor r4, r9, r11, lsr #2 + and r4, r4, r3, lsr #4 + eor r9, r9, r4 + eor r11, r11, r4, lsl #2 //SWAPMOVE(r11, r9, 0x03030303, 2) + eor r4, r10, r12, lsr #2 + and r4, r4, r3, lsr #4 + eor r10, r10, r4 + eor r12, r12, r4, lsl #2 //SWAPMOVE(r12, r10, 0x03030303, 2) + bx lr + +/******************************************************************************* +* Unpacks the internal state in fixsliced representation into a byte array. +*******************************************************************************/ +.align 2 +unpacking: + movw r2, #0x5555 + movt r2, #0x5555 //r2 <- 0x55555555 + movw r3, #0x3030 + movt r3, #0x3030 //r3 <- 0x30303030 + eor r4, r9, r11, lsr #2 + and r4, r4, r3, lsr #4 + eor r9, r9, r4 + eor r11, r11, r4, lsl #2 //SWAPMOVE(r11, r9, 0x03030303, 2) + eor r4, r10, r12, lsr #2 + and r4, r4, r3, lsr #4 + eor r10, r10, r4 + eor r12, r12, r4, lsl #2 //SWAPMOVE(r12, r10, 0x03030303, 2) + eor r4, r8, r10, lsr #2 + and r4, r4, r3, lsr #2 + eor r8, r8, r4 + eor r10, r10, r4, lsl #2 //SWAPMOVE(r10, r8, 0x0c0c0c0c, 2) + eor r4, r8, r12, lsr #4 + and r4, r4, r3, lsr #4 + eor r8, r8, r4 + eor r12, r12, r4, lsl #4 //SWAPMOVE(r12, r8, 0x03030303, 4) + eor r4, r7, r9, lsr #2 + and r4, r4, r3, lsr #2 + eor r7, r7, r4 + eor r9, r9, r4, lsl #2 //SWAPMOVE(r9, r7, 0x0c0c0c0c, 2) + eor r4, r7, r11, lsr #4 + and r4, r4, r3, lsr #4 + eor r7, r7, r4 + eor r11, r11, r4, lsl #4 //SWAPMOVE(r11, r7, 0x03030303, 4) + eor r4, r6, r12, lsr #6 + and r4, r4, r3, lsr #4 + eor r6, r6, r4 + eor r12, r12, r4, lsl #6 //SWAPMOVE(r12, r6, 0x03030303, 6) + eor r4, r6, r10, lsr #4 + and r4, r4, r3, lsr #2 + eor r6, r6, r4 + eor r10, r10, r4, lsl #4 //SWAPMOVE(r10, r6, 0x0c0c0c0c, 4) + eor r4, r6, r8, lsr #2 + and r4, r4, r3 + eor r6, r6, r4 + eor r8, r8, r4, lsl #2 //SWAPMOVE(r8, r6, 0x30303030, 2) + eor r4, r5, r11, lsr #6 + and r4, r4, r3, lsr #4 + eor r5, r5, r4 + eor r11, r11, r4, lsl #6 //SWAPMOVE(r11, r5, 0x03030303, 6) + eor r4, r5, r9, lsr #4 + and r4, r4, r3, lsr #2 + eor r5, r5, r4 + eor r9, r9, r4, lsl #4 //SWAPMOVE(r9, r5, 0x0c0c0c0c, 4) + eor r4, r5, r7, lsr #2 + and r4, r4, r3 + eor r5, r5, r4 + eor r7, r7, r4, lsl #2 //SWAPMOVE(r7, r5, 0x30303030, 2) + eor r4, r5, r6, lsr #1 + and r4, r4, r2 + eor r5, r5, r4 + eor r6, r6, r4, lsl #1 //SWAPMOVE(r6, r5, 0x55555555, 1) + eor r4, r7, r8, lsr #1 + and r4, r4, r2 + eor r7, r7, r4 + eor r8, r8, r4, lsl #1 //SWAPMOVE(r8, r7, 0x55555555, 1) + eor r4, r9, r10, lsr #1 + and r4, r4, r2 + eor r9, r9, r4 + eor r10, r10, r4, lsl #1 //SWAPMOVE(r10, r9, 0x55555555, 1) + eor r4, r11, r12, lsr #1 + and r4, r4, r2 + eor r11, r11, r4 + eor r12, r12, r4, lsl #1 //SWAPMOVE(r12, r11, 0x55555555, 1) + bx lr + + + +/****************************************************************************** +* Compute TK = LFSR2(TK2) for all rounds. +******************************************************************************/ +@ void tkschedule_lfsr_2(u32* rtk, const u8* tk2, const u8* tk2_bis, const int rounds) +.global tkschedule_lfsr_2 +.type tkschedule_lfsr_2,%function +.align 2 +tkschedule_lfsr_2: + push {r0-r12, r14} + ldm r1, {r5,r7,r9,r11} // load the 1st block in r5,r7,r9,r11 + ldm r2, {r6,r8,r10,r12} // load the 2nd block in r6,r8,r10,r12 + mov.w r1, r3 //load loop counter in r1 + movw r2, #0x5555 + movt r2, #0x5555 //r2 <- 0x55555555 + movw r3, #0x3030 + movt r3, #0x3030 //r3 <- 0x30303030 + bl packing + stmia r0!, {r5-r12} + loop_2: + eor r5, r5, r7 // apply LFSR2 to tk2 + stmia r0!, {r6-r12} + str.w r5, [r0], #36 + subs r1, r1, #2 // decrease loop counter by 2 + beq exit_lfsr // r1 = 0 => we are done + eor r6, r6, r8 // apply LFSR2 to tk2 + stmia r0!, {r7-r12} + strd r5, r6, [r0], #40 + subs r1, r1, #2 // decrease loop counter by 2 + beq exit_lfsr // r1 = 0 => we are done + eor r7, r7, r9 // apply LFSR2 to tk2 + stmia r0!, {r8-r12} + stmia r0!, {r5-r7} + add r0, r0, #32 // same round tweakey every 2 rounds + subs r1, r1, #2 // decrease loop counter by 2 + beq exit_lfsr // r1 = 0 => we are done + eor r8, r8, r10 // apply LFSR2 to tk2 + stmia r0!, {r9-r12} + stmia r0!, {r5-r8} + add r0, r0, #32 // same round tweakey every 2 rounds + subs r1, r1, #2 // decrease loop counter by 2 + beq exit_lfsr // r1 = 0 => we are done + eor r9, r9, r11 // apply LFSR2 to tk2 + stmia r0!, {r10-r12} + stmia r0!, {r5-r9} + add r0, r0, #32 // same round tweakey every 2 rounds + subs r1, r1, #2 // decrease loop counter by 2 + beq exit_lfsr // r1 = 0 => we are done + eor r10, r10, r12 // apply LFSR2 to tk2 + strd r11, r12, [r0], #8 + stmia r0!, {r5-r10} + add r0, r0, #32 // same round tweakey every 2 rounds + subs r1, r1, #2 // decrease loop counter by 2 + beq exit_lfsr // r1 = 0 => we are done + eor r11, r11, r5 // apply LFSR2 to tk2 + str.w r12, [r0], #4 + stmia r0!, {r5-r11} + add r0, r0, #32 // same round tweakey every 2 rounds + subs r1, r1, #2 // decrease loop counter by 2 + beq exit_lfsr // r1 = 0 => we are done + eor r12, r12, r6 // apply LFSR2 to tk2 + stmia r0!, {r5-r12} + add r0, r0, #32 // same round tweakey every 2 rounds + subs r1, r1, #2 // decrease loop counter by 2 + bne loop_2 // if not 0 then we run the loop again + exit_lfsr: + pop {r0-r12, r14} + bx lr + + +/****************************************************************************** +* Compute TK ^= LFSR3(TK3) for all rounds. +******************************************************************************/ +@ void tkschedule_lfsr_3(u32* rtk, const u8* tk2, const u8* tk2_bis, +@ const int rounds) +.global tkschedule_lfsr_3 +.type tkschedule_lfsr_3,%function +.align 2 +tkschedule_lfsr_3: + push {r0-r12, r14} + ldm r1, {r5,r7,r9,r11} // load the 1st block in r5,r7,r9,r11 + ldm r2, {r6,r8,r10,r12} // load the 2nd block in r6,r8,r10,r12 + mov.w r1, r3 //load loop counter in r1 + movw r2, #0x5555 + movt r2, #0x5555 //r2 <- 0x55555555 + movw r3, #0x3030 + movt r3, #0x3030 //r3 <- 0x30303030 + bl packing + ldm r0, {r2-r4,r14} // load rtk (computed by tkschedule_lfsr_2) + eor r2, r2, r5 // rtk <- tk2 ^ tk3 + eor r3, r3, r6 // rtk <- tk2 ^ tk3 + eor r4, r4, r7 // rtk <- tk2 ^ tk3 + eor r14, r14, r8 // rtk <- tk2 ^ tk3 + stmia r0!, {r2-r4,r14} // store rtk after adding tk3 + ldm r0, {r2-r4,r14} // load rtk (computed by tkschedule_lfsr_2) + eor r2, r2, r9 // rtk <- tk2 ^ tk3 + eor r3, r3, r10 // rtk <- tk2 ^ tk3 + eor r4, r4, r11 // rtk <- tk2 ^ tk3 + eor r14, r14, r12 // rtk <- tk2 ^ tk3 + stmia r0!, {r2-r4,r14} // store rtk after adding tk3 + loop_3: + eor r12, r12, r6 // apply LFSR3 to tk3 + ldm r0, {r2-r4,r14} // load rtk (computed by tkschedule_lfsr_2) + eor r2, r2, r12 // rtk <- tk2 ^ tk3 + eor r3, r3, r5 // rtk <- tk2 ^ tk3 + eor r4, r4, r6 // rtk <- tk2 ^ tk3 + eor r14, r14, r7 // rtk <- tk2 ^ tk3 + stmia r0!, {r2-r4,r14} // store rtk after adding tk3 + ldm r0, {r2-r4,r14} // load rtk (computed by tkschedule_lfsr_2) + eor r2, r2, r8 // rtk <- tk2 ^ tk3 + eor r3, r3, r9 // rtk <- tk2 ^ tk3 + eor r4, r4, r10 // rtk <- tk2 ^ tk3 + eor r14, r14, r11 // rtk <- tk2 ^ tk3 + stmia r0!, {r2-r4,r14} // store rtk after adding tk3 + add r0, r0, #32 // same round tweakey every 2 rounds + subs r1, r1, #2 // decrease loop counter by 2 + beq exit_lfsr // if 0 then we are done + eor r11, r11, r5 // apply LFSR3 to tk3 + ldm r0, {r2-r4,r14} // load rtk (computed by tkschedule_lfsr_2) + eor r2, r2, r11 // rtk <- tk2 ^ tk3 + eor r3, r3, r12 // rtk <- tk2 ^ tk3 + eor r4, r4, r5 // rtk <- tk2 ^ tk3 + eor r14, r14, r6 // rtk <- tk2 ^ tk3 + stmia r0!, {r2-r4,r14} // store rtk after adding tk3 + ldm r0, {r2-r4,r14} // load rtk (computed by tkschedule_lfsr_2) + eor r2, r2, r7 // rtk <- tk2 ^ tk3 + eor r3, r3, r8 // rtk <- tk2 ^ tk3 + eor r4, r4, r9 // rtk <- tk2 ^ tk3 + eor r14, r14, r10 // rtk <- tk2 ^ tk3 + stmia r0!, {r2-r4,r14} // store rtk after adding tk3 + add r0, r0, #32 // same round tweakey every 2 rounds + subs r1, r1, #2 // decrease loop counter by 2 + beq exit_lfsr // if 0 then we are done + eor r10, r10, r12 // apply LFSR3 to tk3 + ldm r0, {r2-r4,r14} // load rtk (computed by tkschedule_lfsr_2) + eor r2, r2, r10 // rtk <- tk2 ^ tk3 + eor r3, r3, r11 // rtk <- tk2 ^ tk3 + eor r4, r4, r12 // rtk <- tk2 ^ tk3 + eor r14, r14, r5 // rtk <- tk2 ^ tk3 + stmia r0!, {r2-r4,r14} // store rtk after adding tk3 + ldm r0, {r2-r4,r14} // load rtk (computed by tkschedule_lfsr_2) + eor r2, r2, r6 // rtk <- tk2 ^ tk3 + eor r3, r3, r7 // rtk <- tk2 ^ tk3 + eor r4, r4, r8 // rtk <- tk2 ^ tk3 + eor r14, r14, r9 // rtk <- tk2 ^ tk3 + stmia r0!, {r2-r4,r14} // store rtk after adding tk3 + add r0, r0, #32 // same round tweakey every 2 rounds + subs r1, r1, #2 // decrease loop counter by 2 + beq exit_lfsr // if 0 then we are done + eor r9, r9, r11 // apply LFSR3 to tk3 + ldm r0, {r2-r4,r14} // load rtk (computed by tkschedule_lfsr_2) + eor r2, r2, r9 // rtk <- tk2 ^ tk3 + eor r3, r3, r10 // rtk <- tk2 ^ tk3 + eor r4, r4, r11 // rtk <- tk2 ^ tk3 + eor r14, r14, r12 // rtk <- tk2 ^ tk3 + stmia r0!, {r2-r4,r14} // store rtk after adding tk3 + ldm r0, {r2-r4,r14} // load rtk (computed by tkschedule_lfsr_2) + eor r2, r2, r5 // rtk <- tk2 ^ tk3 + eor r3, r3, r6 // rtk <- tk2 ^ tk3 + eor r4, r4, r7 // rtk <- tk2 ^ tk3 + eor r14, r14, r8 // rtk <- tk2 ^ tk3 + stmia r0!, {r2-r4,r14} // store rtk after adding tk3 + add r0, r0, #32 // same round tweakey every 2 rounds + subs r1, r1, #2 // decrease loop counter by 2 + beq exit_lfsr // if 0 then we are done + eor r8, r8, r10 // apply LFSR3 to tk3 + ldm r0, {r2-r4,r14} // load rtk (computed by tkschedule_lfsr_2) + eor r2, r2, r8 // rtk <- tk2 ^ tk3 + eor r3, r3, r9 // rtk <- tk2 ^ tk3 + eor r4, r4, r10 // rtk <- tk2 ^ tk3 + eor r14, r14, r11 // rtk <- tk2 ^ tk3 + stmia r0!, {r2-r4,r14} // store rtk after adding tk3 + ldm r0, {r2-r4,r14} // load rtk (computed by tkschedule_lfsr_2) + eor r2, r2, r12 // rtk <- tk2 ^ tk3 + eor r3, r3, r5 // rtk <- tk2 ^ tk3 + eor r4, r4, r6 // rtk <- tk2 ^ tk3 + eor r14, r14, r7 // rtk <- tk2 ^ tk3 + stmia r0!, {r2-r4,r14} // store rtk after adding tk3 + add r0, r0, #32 // same round tweakey every 2 rounds + subs r1, r1, #2 // decrease loop counter by 2 + beq exit_lfsr // if 0 then we are done + eor r7, r7, r9 // apply LFSR3 to tk3 + ldm r0, {r2-r4,r14} // load rtk (computed by tkschedule_lfsr_2) + eor r2, r2, r7 // rtk <- tk2 ^ tk3 + eor r3, r3, r8 // rtk <- tk2 ^ tk3 + eor r4, r4, r9 // rtk <- tk2 ^ tk3 + eor r14, r14, r10 // rtk <- tk2 ^ tk3 + stmia r0!, {r2-r4,r14} // store rtk after adding tk3 + ldm r0, {r2-r4,r14} // load rtk (computed by tkschedule_lfsr_2) + eor r2, r2, r11 // rtk <- tk2 ^ tk3 + eor r3, r3, r12 // rtk <- tk2 ^ tk3 + eor r4, r4, r5 // rtk <- tk2 ^ tk3 + eor r14, r14, r6 // rtk <- tk2 ^ tk3 + stmia r0!, {r2-r4,r14} // store rtk after adding tk3 + add r0, r0, #32 // same round tweakey every 2 rounds + subs r1, r1, #2 // decrease loop counter by 2 + beq exit_lfsr // if 0 then we are done + eor r6, r6, r8 // apply LFSR3 to tk3 + ldm r0, {r2-r4,r14} // load rtk (computed by tkschedule_lfsr_2) + eor r2, r2, r6 // rtk <- tk2 ^ tk3 + eor r3, r3, r7 // rtk <- tk2 ^ tk3 + eor r4, r4, r8 // rtk <- tk2 ^ tk3 + eor r14, r14, r9 // rtk <- tk2 ^ tk3 + stmia r0!, {r2-r4,r14} // store rtk after adding tk3 + ldm r0, {r2-r4,r14} // load rtk (computed by tkschedule_lfsr_2) + eor r2, r2, r10 // rtk <- tk2 ^ tk3 + eor r3, r3, r11 // rtk <- tk2 ^ tk3 + eor r4, r4, r12 // rtk <- tk2 ^ tk3 + eor r14, r14, r5 // rtk <- tk2 ^ tk3 + stmia r0!, {r2-r4,r14} // store rtk after adding tk3 + add r0, r0, #32 // same round tweakey every 2 rounds + subs r1, r1, #2 // decrease loop counter by 2 + beq exit_lfsr // if 0 then we are done + eor r5, r5, r7 // apply LFSR3 to tk3 + ldm r0, {r2-r4,r14} // load rtk (computed by tkschedule_lfsr_2) + eor r2, r2, r5 // rtk <- tk2 ^ tk3 + eor r3, r3, r6 // rtk <- tk2 ^ tk3 + eor r4, r4, r7 // rtk <- tk2 ^ tk3 + eor r14, r14, r8 // rtk <- tk2 ^ tk3 + stmia r0!, {r2-r4,r14} // store rtk after adding tk3 + ldm r0, {r2-r4,r14} // load rtk (computed by tkschedule_lfsr_2) + eor r2, r2, r9 // rtk <- tk2 ^ tk3 + eor r3, r3, r10 // rtk <- tk2 ^ tk3 + eor r4, r4, r11 // rtk <- tk2 ^ tk3 + eor r14, r14, r12 // rtk <- tk2 ^ tk3 + stmia r0!, {r2-r4,r14} // store rtk after adding tk3 + add r0, r0, #32 // same round tweakey every 2 rounds + subs r1, r1, #2 // decrease loop counter by 8 + bne loop_3 + pop {r0-r12, r14} + bx lr + +/****************************************************************************** +* Compute TK = rearrange(perm(TK ^ TK1)) for all rounds. +* The function 'rearrange' aims at reording bits for all round tweakeys to +* match the fixsliced implementation of the SKINNY block cipher. +******************************************************************************/ +@ void tkschedule_perm(u32* rtk) +.global tkschedule_perm +.type tkschedule_perm,%function +.align 2 +tkschedule_perm: + push {r0-r12, r14} + sub.w sp, #4 // to store 'lr' during subroutines + movw r4, #0xf0f0 + movt r4, #0xf0f0 + ldm r0, {r5-r12} // load rtk = tk1 ^ lfsr2(tk2) ^ lfsr3(tk3) + and r5, r5, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r6, r6, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r7, r7, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r8, r8, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r9, r9, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r10, r10, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r11, r11, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r12, r12, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + eor r11, r11, #0x0000000c // add rconst + mvn r11, r11 // to save 1 NOT in Sbox calculations + mvn r10, r10 // to save 1 NOT in Sbox calculations + mvn r6, r6 // to save 1 NOT in Sbox calculations + mvn r8, r8 // to save 1 NOT in Sbox calculations + eor r12, r12, #0x000000c0 // add rconst + mvn r9, r9 // to save 1 NOT in Sbox calculations + mvn r7, r7 // to save 1 NOT in Sbox calculations + strd r11, r10, [r0], #8 + strd r5, r6, [r0], #8 + strd r8, r12, [r0], #8 + strd r9, r7, [r0], #8 + ldm r0, {r5-r12} // load rtk = tk1 ^ lfsr2(tk2) ^ lfsr3(tk3) + bl p2 // apply the permutation twice + movw r4, #0xc3c3 + movt r4, #0xc3c3 // r4 <- 0xc3c3c3c3 + and r1, r4, r9, ror #26 + and r2, r4, r12, ror #26 + and r3, r4, r11, ror #26 + mvn r1, r1 + eor r2, r2, #0x00000300 + eor r3, r3, #0x00000300 + eor r3, r3, #0x30000000 + mvn r3, r3 + stmia.w r0!, {r1-r3} + and r1, r4, r10, ror #26 + and r2, r4, r6, ror #26 + and r3, r4, r7, ror #26 + mvn r1, r1 + mvn r2, r2 + mvn r3, r3 + stmia.w r0!, {r1-r3} + and r1, r4, r8, ror #26 + and r2, r4, r5, ror #26 + mvn r1, r1 + stmia.w r0!, {r1-r2} + and r4, r4, r4, lsr #6 // r4 <- 0x03030303 + and r1, r4, r5, ror #28 // --- ror and masks to match fixslicing + and r5, r5, r4, lsl #6 + orr r5, r1, r5, ror #12 + and r1, r4, r6, ror #28 + and r6, r6, r4, lsl #6 + orr r6, r1, r6, ror #12 + and r1, r4, r7, ror #28 + and r7, r7, r4, lsl #6 + orr r7, r1, r7, ror #12 + and r1, r4, r8, ror #28 + and r8, r8, r4, lsl #6 + orr r8, r1, r8, ror #12 + and r1, r4, r9, ror #28 + and r9, r9, r4, lsl #6 + orr r9, r1, r9, ror #12 + and r1, r4, r10, ror #28 + and r10, r10, r4, lsl #6 + orr r10, r1, r10, ror #12 + and r1, r4, r11, ror #28 + and r11, r11, r4, lsl #6 + orr r11, r1, r11, ror #12 + and r1, r4, r12, ror #28 + and r12, r12, r4, lsl #6 + orr r12, r1, r12, ror #12 // ror and masks to match fixslicing --- + mvn r8, r8 // to save 1 NOT in Sbox calculations + mvn r7, r7 // to save 1 NOT in Sbox calculations + mvn r9, r9 // to save 1 NOT in Sbox calculations + eor r12, r12, #0x0c000000 // add rconst + str.w r8, [r0], #4 + stmia r0!, {r7,r9,r12} + eor r10, r10, #0x0c000000 // add rconst + mvn r10, r10 // to save 1 NOT in Sbox calculations + str.w r10, [r0], #4 + mvn r6, r6 // to save 1 NOT in Sbox calculations + eor r11, r11, #0xcc000000 // add rconst + mvn r11, r11 // to save 1 NOT in Sbox calculations + stmia r0!, {r5,r6,r11} + ldm r0, {r5-r12} // load rtk = tk1 ^ lfsr2(tk2) ^ lfsr3(tk3) + bl p4 // apply the permutation 4 times + movw r4, #0x3030 + movt r4, #0x3030 // r4 <- 0x30303030 + and r1, r4, r5, ror #14 // --- ror and masks to match fixslicing + and r2, r5, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r6, ror #14 + and r3, r6, r4, ror #4 + orr r3, r1, r3, ror #6 + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r3, r2, [r0], #8 + and r1, r4, r7, ror #14 + and r2, r7, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r8, ror #14 + and r3, r8, r4, ror #4 + orr r3, r1, r3, ror #6 + mvn r2, r2 // to save 1 NOT in Sbox calculations + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r3, r2, [r0], #8 + and r1, r4, r11, ror #14 + and r2, r11, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r12, ror #14 + and r3, r12, r4, ror #4 + orr r3, r1, r3, ror #6 + eor r2, r2, #0x00300000 // add rconst + eor r2, r2, #0x00000003 // add rconst + mvn r2, r2 // to save 1 NOT in Sbox calculations + eor r3, r3, #0x00300000 // add rconst + strd r3, r2, [r0], #8 + and r1, r4, r9, ror #14 + and r2, r9, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r10, ror #14 + and r3, r10, r4, ror #4 + orr r3, r1, r3, ror #6 + eor r2, r2, #0x00300000 // add rconst + mvn r2, r2 // to save 1 NOT in Sbox calculations + eor r3, r3, #0x00300000 // add rconst + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r3, r2, [r0], #8 + orr r4, r4, r4, lsl #2 // r4 <- 0xf0f0f0f0 + and r5, r4, r5, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r6, r4, r6, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r7, r4, r7, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r8, r4, r8, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r9, r4, r9, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r10, r4, r10, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r11, r4, r11, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r12, r4, r12, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + eor r11, r11, #0x00cc0000 // add rconst + mvn r11, r11 // to save 1 NOT in Sbox calculations + eor r10, r10, #0x00c00000 // add rconst + mvn r10, r10 // to save 1 NOT in Sbox calculations + mvn r6, r6 // to save 1 NOT in Sbox calculations + mvn r8, r8 // to save 1 NOT in Sbox calculations + eor r12, r12, #0x00f00000 // add rconst + eor r9, r9, #0x00c00000 // add rconst + mvn r9, r9 // to save 1 NOT in Sbox calculations + mvn r7, r7 + strd r11, r10, [r0], #8 + strd r5, r6, [r0], #8 + strd r8, r12, [r0], #8 + strd r9, r7, [r0], #8 + ldm r0, {r5-r12} // load rtk = tk1 ^ lfsr2(tk2) ^ lfsr3(tk3) + bl p6 + movw r4, #0xc3c3 + movt r4, #0xc3c3 // r4 <- 0xc3c3c3c3 + and r1, r4, r9, ror #10 // ror and mask to match fixslicing + and r2, r4, r12, ror #10 // ror and mask to match fixslicing + and r3, r4, r11, ror #10 // ror and mask to match fixslicing + eor r1, r1, #0x03000000 // add rconst + mvn r1, r1 // to save 1 NOT in Sbox calculations + eor r2, r2, #0x00c00000 // add rconst + eor r3, r3, #0x03c00000 // add rconst + eor r3, r3, #0x00003000 // add rconst + mvn r3, r3 // to save 1 NOT in Sbox calculations + stmia.w r0!, {r1-r3} + and r1, r4, r10, ror #10 // ror and mask to match fixslicing + and r2, r4, r6, ror #10 // ror and mask to match fixslicing + and r3, r4, r7, ror #10 // ror and mask to match fixslicing + eor r1, r1, #0x03000000 // add rconst + mvn r1, r1 // to save 1 NOT in Sbox calculations + mvn r2, r2 // to save 1 NOT in Sbox calculations + mvn r3, r3 // to save 1 NOT in Sbox calculations + stmia.w r0!, {r1-r3} + and r1, r4, r8, ror #10 // ror and mask to match fixslicing + and r2, r4, r5, ror #10 // ror and mask to match fixslicing + mvn r1, r1 // to save 1 NOT in Sbox calculations + strd r1, r2, [r0], #8 + and r4, r4, r4, lsr #6 // r4 <- 0x03030303 + and r1, r4, r5, ror #12 //--- ror and masks to match fixslicing + and r5, r5, r4, lsl #6 + orr r5, r1, r5, ror #28 + and r1, r4, r6, ror #12 + and r6, r6, r4, lsl #6 + orr r6, r1, r6, ror #28 + and r1, r4, r7, ror #12 + and r7, r7, r4, lsl #6 + orr r7, r1, r7, ror #28 + and r1, r4, r8, ror #12 + and r8, r8, r4, lsl #6 + orr r8, r1, r8, ror #28 + and r1, r4, r9, ror #12 + and r9, r9, r4, lsl #6 + orr r9, r1, r9, ror #28 + and r1, r4, r10, ror #12 + and r10, r10, r4, lsl #6 + orr r10, r1, r10, ror #28 + and r1, r4, r11, ror #12 + and r11, r11, r4, lsl #6 + orr r11, r1, r11, ror #28 + and r1, r4, r12, ror #12 + and r12, r12, r4, lsl #6 + orr r12, r1, r12, ror #28 //ror and masks to match fixslicing --- + mvn r7, r7 // to save 1 NOT in Sbox calculations + mvn r8, r8 // to save 1 NOT in Sbox calculations + strd r8, r7, [r0], #8 + eor r9, r9, #0x00000c00 // add rconst + mvn r9, r9 // to save 1 NOT in Sbox calculations + eor r12, r12, #0x00000c00 // add rconst + eor r12, r12, #0x03000000 // add rconst + strd r9, r12, [r0], #8 + eor r10, r10, #0x00000c00 // add rconst + mvn r10, r10 // to save 1 NOT in Sbox calculations + strd r10, r5, [r0], #8 + mvn r6, r6 // to save 1 NOT in Sbox calculations + eor r11, r11, #0x0000c000 // add rconst + eor r11, r11, #0x03000000 // add rconst + mvn r11, r11 // to save 1 NOT in Sbox calculations + strd r6, r11, [r0], #8 + ldm r0, {r5-r12} // load rtk = tk1 ^ lfsr2(tk2) ^ lfsr3(tk3) + bl p8 + movw r4, #0x3030 + movt r4, #0x3030 // r4 <- 0x30303030 + and r1, r4, r6, ror #30 + and r2, r6, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r5, ror #30 + and r2, r5, r4, ror #4 + orr r3, r3, r2, ror #22 + mvn r1, r1 // to save 1 NOT in Sbox calculations + strd r1, r3, [r0], #8 + and r1, r4, r8, ror #30 + and r2, r8, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r7, ror #30 + and r2, r7, r4, ror #4 + orr r3, r3, r2, ror #22 + mvn r1, r1 // to save 1 NOT in Sbox calculations + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r1, r3, [r0], #8 + and r1, r4, r12, ror #30 + and r2, r12, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r11, ror #30 + and r2, r11, r4, ror #4 + orr r3, r3, r2, ror #22 + eor r1, r1, #0x00000c30 // add rconst + eor r3, r3, #0x00000c30 // add rconst + eor r3, r3, #0x00030000 // add rconst + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r1, r3, [r0], #8 + and r1, r4, r10, ror #30 + and r2, r10, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r9, ror #30 + and r2, r9, r4, ror #4 + orr r3, r3, r2, ror #22 + mvn r1, r1 // to save 1 NOT in Sbox calculations + eor r3, r3, #0x00000030 // add rconst + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r1, r3, [r0], #8 + orr r4, r4, r4, lsl #2 // r4 <- 0xf0f0f0f0 + and r5, r5, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r6, r6, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r7, r7, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r8, r8, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r9, r9, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r10, r10, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r11, r11, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r12, r12, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + eor r11, r11, #0x000000fc // add rconst + mvn r11, r11 // to save 1 NOT in Sbox calculations + eor r10, r10, #0x000000c0 // add rconst + mvn r10, r10 // to save 1 NOT in Sbox calculations + mvn r6, r6 // to save 1 NOT in Sbox calculations + mvn r8, r8 // to save 1 NOT in Sbox calculations + eor r12, r12, #0x000000f0 // add rconst + mvn r9, r9 // to save 1 NOT in Sbox calculations + mvn r7, r7 // to save 1 NOT in Sbox calculations + strd r11, r10, [r0], #8 + strd r5, r6, [r0], #8 + strd r8, r12, [r0], #8 + strd r9, r7, [r0], #8 + ldm r0, {r5-r12} // load rtk = tk1 ^ lfsr2(tk2) ^ lfsr3(tk3) + bl p10 + movw r4, #0xc3c3 + movt r4, #0xc3c3 // r4 <- 0xc3c3c3c3 + and r1, r4, r9, ror #26 + and r2, r4, r12, ror #26 + eor r1, r1, #0x00000300 // add rconst + mvn r1, r1 // to save 1 NOT in Sbox calculations + eor r2, r2, #0x00000300 // add rconst + strd r1, r2, [r0], #8 + and r1, r4, r11, ror #26 + and r2, r4, r10, ror #26 + eor r1, r1, #0x30000000 // add rconst + eor r1, r1, #0x000003c0 // add rconst + mvn r1, r1 // to save 1 NOT in Sbox calculations + eor r2, r2, #0x00000300 // add rconst + mvn r2, r2 // to save 1 NOT in Sbox calculations + strd r1, r2, [r0], #8 + and r1, r4, r6, ror #26 + and r2, r4, r7, ror #26 + mvn r1, r1 // to save 1 NOT in Sbox calculations + mvn r2, r2 // to save 1 NOT in Sbox calculations + strd r1, r2, [r0], #8 + and r1, r4, r8, ror #26 + and r2, r4, r5, ror #26 + mvn r1, r1 // to save 1 NOT in Sbox calculations + strd r1, r2, [r0], #8 + and r4, r4, r4, lsr #6 // r4 <- 0x03030303 + and r1, r4, r5, ror #28 // --- ror and masks to match fixslicing + and r5, r5, r4, lsl #6 + orr r5, r1, r5, ror #12 + and r1, r4, r6, ror #28 + and r6, r6, r4, lsl #6 + orr r6, r1, r6, ror #12 + and r1, r4, r7, ror #28 + and r7, r7, r4, lsl #6 + orr r7, r1, r7, ror #12 + and r1, r4, r8, ror #28 + and r8, r8, r4, lsl #6 + orr r8, r1, r8, ror #12 + and r1, r4, r9, ror #28 + and r9, r9, r4, lsl #6 + orr r9, r1, r9, ror #12 + and r1, r4, r10, ror #28 + and r10, r10, r4, lsl #6 + orr r10, r1, r10, ror #12 + and r1, r4, r11, ror #28 + and r11, r11, r4, lsl #6 + orr r11, r1, r11, ror #12 + and r1, r4, r12, ror #28 + and r12, r12, r4, lsl #6 + orr r12, r1, r12, ror #12 // ror and masks to match fixslicing --- + mvn r8, r8 // to save 1 NOT in Sbox calculations + mvn r7, r7 // to save 1 NOT in Sbox calculations + strd r8, r7, [r0], #8 + eor r9, r9, #0x0c000000 // add rconst + mvn r9, r9 // to save 1 NOT in Sbox calculations + eor r12, r12, #0x00000300 // add rconst + strd r9, r12, [r0], #8 + eor r10, r10, #0x0c000000 // add rconst + mvn r10, r10 // to save 1 NOT in Sbox calculations + strd r10, r5, [r0], #8 + mvn r6, r6 // to save 1 NOT in Sbox calculations + eor r11, r11, #0xcc000000 // add rconst + mvn r11, r11 // to save 1 NOT in Sbox calculations + strd r6, r11, [r0], #8 + ldm r0, {r5-r12} // load rtk = tk1 ^ lfsr2(tk2) ^ lfsr3(tk3) + bl p12 + movw r4, #0x3030 + movt r4, #0x3030 // r4 <- 0x30303030 + and r1, r4, r5, ror #14 // --- ror and masks to match fixslicing + and r2, r5, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r6, ror #14 + and r3, r6, r4, ror #4 + orr r3, r1, r3, ror #6 + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r3, r2, [r0], #8 + and r1, r4, r7, ror #14 + and r2, r7, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r8, ror #14 + and r3, r8, r4, ror #4 + orr r3, r1, r3, ror #6 + mvn r2, r2 // to save 1 NOT in Sbox calculations + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r3, r2, [r0], #8 + and r1, r4, r11, ror #14 + and r2, r11, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r12, ror #14 + and r3, r12, r4, ror #4 + orr r3, r1, r3, ror #6 + eor r3, r3, #0x0c000000 // add rconst + eor r2, r2, #0x00000003 // add rconst + eor r2, r2, #0x0c000000 // add rconst + mvn r2, r2 // to save 1 NOT in Sbox calculations + strd r3, r2, [r0], #8 + and r1, r4, r9, ror #14 + and r2, r9, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r10, ror #14 + and r3, r10, r4, ror #4 + orr r3, r1, r3, ror #6 + eor r2, r2, #0x00300000 // add rconst + mvn r2, r2 // to save 1 NOT in Sbox calculations + eor r3, r3, #0x00300000 // add rconst + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r3, r2, [r0], #8 + orr r4, r4, r4, lsl #2 // r4 <- 0xf0f0f0f0 + and r5, r4, r5, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r6, r4, r6, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r7, r4, r7, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r8, r4, r8, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r9, r4, r9, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r10, r4, r10, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r11, r4, r11, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r12, r4, r12, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + eor r11, r11, #0x003c0000 // add rconst + mvn r11, r11 // to save 1 NOT in Sbox calculations + mvn r10, r10 // to save 1 NOT in Sbox calculations + strd r11, r10, [r0], #8 + mvn r6, r6 // to save 1 NOT in Sbox calculations + strd r5, r6, [r0], #8 + mvn r8, r8 // to save 1 NOT in Sbox calculations + eor r12, r12, #0x00f00000 // add rconst + strd r8, r12, [r0], #8 + eor r9, r9, #0x00c00000 // add rconst + mvn r9, r9 // to save 1 NOT in Sbox calculations + mvn r7, r7 + strd r9, r7, [r0], #8 + ldm r0, {r5-r12} // load rtk = tk1 ^ lfsr2(tk2) ^ lfsr3(tk3) + bl p14 + movw r4, #0xc3c3 + movt r4, #0xc3c3 // r4 <- 0xc3c3c3c3 + and r1, r4, r9, ror #10 // ror and mask to match fixslicing + and r2, r4, r12, ror #10 // ror and mask to match fixslicing + and r3, r4, r11, ror #10 // ror and mask to match fixslicing + mvn r1, r1 // to save 1 NOT in Sbox calculations + eor r2, r2, #0x03c00000 // add rconst + eor r3, r3, #0x03c00000 // add rconst + eor r3, r3, #0x00003000 // add rconst + mvn r3, r3 // to save 1 NOT in Sbox calculations + stmia.w r0!, {r1-r3} + and r1, r4, r10, ror #10 // ror and mask to match fixslicing + and r2, r4, r6, ror #10 // ror and mask to match fixslicing + and r3, r4, r7, ror #10 // ror and mask to match fixslicing + mvn r1, r1 // to save 1 NOT in Sbox calculations + mvn r2, r2 // to save 1 NOT in Sbox calculations + mvn r3, r3 // to save 1 NOT in Sbox calculations + stmia.w r0!, {r1-r3} + and r1, r4, r8, ror #10 // ror and mask to match fixslicing + and r2, r4, r5, ror #10 // ror and mask to match fixslicing + mvn r1, r1 // to save 1 NOT in Sbox calculations + strd r1, r2, [r0], #8 + and r4, r4, r4, lsr #6 // r4 <- 0x03030303 + and r1, r4, r5, ror #12 //--- ror and masks to match fixslicing + and r5, r5, r4, lsl #6 + orr r5, r1, r5, ror #28 + and r1, r4, r6, ror #12 + and r6, r6, r4, lsl #6 + orr r6, r1, r6, ror #28 + and r1, r4, r7, ror #12 + and r7, r7, r4, lsl #6 + orr r7, r1, r7, ror #28 + and r1, r4, r8, ror #12 + and r8, r8, r4, lsl #6 + orr r8, r1, r8, ror #28 + and r1, r4, r9, ror #12 + and r9, r9, r4, lsl #6 + orr r9, r1, r9, ror #28 + and r1, r4, r10, ror #12 + and r10, r10, r4, lsl #6 + orr r10, r1, r10, ror #28 + and r1, r4, r11, ror #12 + and r11, r11, r4, lsl #6 + orr r11, r1, r11, ror #28 + and r1, r4, r12, ror #12 + and r12, r12, r4, lsl #6 + orr r12, r1, r12, ror #28 //ror and masks to match fixslicing --- + mvn r7, r7 // to save 1 NOT in Sbox calculations + mvn r8, r8 // to save 1 NOT in Sbox calculations + strd r8, r7, [r0], #8 + mvn r9, r9 // to save 1 NOT in Sbox calculations + eor r12, r12, #0x00000c00 // add rconst + strd r9, r12, [r0], #8 + eor r10, r10, #0x00000c00 // add rconst + mvn r10, r10 // to save 1 NOT in Sbox calculations + strd r10, r5, [r0], #8 + mvn r6, r6 // to save 1 NOT in Sbox calculations + eor r11, r11, #0x0000cc00 // add rconst + eor r11, r11, #0x03000000 // add rconst + mvn r11, r11 // to save 1 NOT in Sbox calculations + strd r6, r11, [r0], #8 + ldm r0, {r5-r12} // load rtk = tk1 ^ lfsr2(tk2) ^ lfsr3(tk3) + movw r4, #0x3030 + movt r4, #0x3030 // r4 <- 0x30303030 + and r1, r4, r6, ror #30 + and r2, r6, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r5, ror #30 + and r2, r5, r4, ror #4 + orr r3, r3, r2, ror #22 + mvn r1, r1 // to save 1 NOT in Sbox calculations + strd r1, r3, [r0], #8 + and r1, r4, r8, ror #30 + and r2, r8, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r7, ror #30 + and r2, r7, r4, ror #4 + orr r3, r3, r2, ror #22 + mvn r1, r1 // to save 1 NOT in Sbox calculations + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r1, r3, [r0], #8 + and r1, r4, r12, ror #30 + and r2, r12, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r11, ror #30 + and r2, r11, r4, ror #4 + orr r3, r3, r2, ror #22 + eor r3, r3, #0x00000030 // add rconst + eor r3, r3, #0x00030000 // add rconst + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r1, r3, [r0], #8 + and r1, r4, r10, ror #30 + and r2, r10, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r9, ror #30 + and r2, r9, r4, ror #4 + orr r3, r3, r2, ror #22 + eor r1, r1, #0x00000030 // add rconst + mvn r1, r1 // to save 1 NOT in Sbox calculations + eor r3, r3, #0x00000030 // add rconst + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r1, r3, [r0], #8 + orr r4, r4, r4, lsl #2 // r4 <- 0xf0f0f0f0 + and r5, r5, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r6, r6, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r7, r7, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r8, r8, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r9, r9, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r10, r10, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r11, r11, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r12, r12, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + eor r11, r11, #0x0000000c // add rconst + mvn r11, r11 // to save 1 NOT in Sbox calculations + eor r10, r10, #0x000000c0 // add rconst + mvn r10, r10 // to save 1 NOT in Sbox calculations + strd r11, r10, [r0], #8 + mvn r6, r6 // to save 1 NOT in Sbox calculations + strd r5, r6, [r0], #8 + mvn r8, r8 // to save 1 NOT in Sbox calculations + eor r12, r12, #0x000000f0 // add rconst + strd r8, r12, [r0], #8 + eor r9, r9, #0x000000c0 // add rconst + mvn r9, r9 // to save 1 NOT in Sbox calculations + mvn r7, r7 // to save 1 NOT in Sbox calculations + strd r9, r7, [r0], #8 + ldm r0, {r5-r12} // load rtk = tk1 ^ lfsr2(tk2) ^ lfsr3(tk3) + bl p2 // apply the permutation twice + movw r4, #0xc3c3 + movt r4, #0xc3c3 // r4 <- 0xc3c3c3c3 + and r1, r4, r9, ror #26 + and r2, r4, r12, ror #26 + and r3, r4, r11, ror #26 + eor r1, r1, #0x00000300 // add rconst + mvn r1, r1 // to save 1 NOT in Sbox calculations + eor r2, r2, #0x000000c0 // add rconst + eor r3, r3, #0x000003c0 // add rconst + eor r3, r3, #0x30000000 // add rconst + mvn r3, r3 // to save 1 NOT in Sbox calculations + stmia.w r0!, {r1-r3} + and r1, r4, r10, ror #26 + and r2, r4, r6, ror #26 + and r3, r4, r7, ror #26 + mvn r1, r1 // to save 1 NOT in Sbox calculations + mvn r2, r2 // to save 1 NOT in Sbox calculations + mvn r3, r3 // to save 1 NOT in Sbox calculations + stmia.w r0!, {r1-r3} + and r1, r4, r8, ror #26 + and r2, r4, r5, ror #26 + mvn r1, r1 // to save 1 NOT in Sbox calculations + stmia.w r0!, {r1-r2} + and r4, r4, r4, lsr #6 // r4 <- 0x03030303 + and r1, r4, r5, ror #28 // --- ror and masks to match fixslicing + and r5, r5, r4, lsl #6 + orr r5, r1, r5, ror #12 + and r1, r4, r6, ror #28 + and r6, r6, r4, lsl #6 + orr r6, r1, r6, ror #12 + and r1, r4, r7, ror #28 + and r7, r7, r4, lsl #6 + orr r7, r1, r7, ror #12 + and r1, r4, r8, ror #28 + and r8, r8, r4, lsl #6 + orr r8, r1, r8, ror #12 + and r1, r4, r9, ror #28 + and r9, r9, r4, lsl #6 + orr r9, r1, r9, ror #12 + and r1, r4, r10, ror #28 + and r10, r10, r4, lsl #6 + orr r10, r1, r10, ror #12 + and r1, r4, r11, ror #28 + and r11, r11, r4, lsl #6 + orr r11, r1, r11, ror #12 + and r1, r4, r12, ror #28 + and r12, r12, r4, lsl #6 + orr r12, r1, r12, ror #12 // ror and masks to match fixslicing --- + mvn r8, r8 // to save 1 NOT in Sbox calculations + mvn r7, r7 // to save 1 NOT in Sbox calculations + strd r8, r7, [r0], #8 + mvn r9, r9 // to save 1 NOT in Sbox calculations + eor r12, r12, #0x0c000000 // add rconst + eor r12, r12, #0x00000300 // add rconst + strd r9, r12, [r0], #8 + eor r10, r10, #0x0c000000 // add rconst + mvn r10, r10 // to save 1 NOT in Sbox calculations + strd r10, r5, [r0], #8 + mvn r6, r6 // to save 1 NOT in Sbox calculations + eor r11, r11, #0xc0000000 // add rconst + eor r11, r11, #0x00000300 // add rconst + mvn r11, r11 // to save 1 NOT in Sbox calculations + strd r6, r11, [r0], #8 + ldm r0, {r5-r12} // load rtk = tk1 ^ lfsr2(tk2) ^ lfsr3(tk3) + bl p4 // apply the permutation 4 times + movw r4, #0x3030 + movt r4, #0x3030 // r4 <- 0x30303030 + and r1, r4, r5, ror #14 // --- ror and masks to match fixslicing + and r2, r5, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r6, ror #14 + and r3, r6, r4, ror #4 + orr r3, r1, r3, ror #6 + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r3, r2, [r0], #8 + and r1, r4, r7, ror #14 + and r2, r7, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r8, ror #14 + and r3, r8, r4, ror #4 + orr r3, r1, r3, ror #6 + mvn r2, r2 // to save 1 NOT in Sbox calculations + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r3, r2, [r0], #8 + and r1, r4, r11, ror #14 + and r2, r11, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r12, ror #14 + and r3, r12, r4, ror #4 + orr r3, r1, r3, ror #6 + eor r2, r2, #0x0c300000 // add rconst + eor r2, r2, #0x00000003 // add rconst + mvn r2, r2 // to save 1 NOT in Sbox calculations + eor r3, r3, #0x00300000 // add rconst + strd r3, r2, [r0], #8 + and r1, r4, r9, ror #14 + and r2, r9, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r10, ror #14 + and r3, r10, r4, ror #4 + orr r3, r1, r3, ror #6 + eor r2, r2, #0x00300000 // add rconst + mvn r2, r2 // to save 1 NOT in Sbox calculations + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r3, r2, [r0], #8 + orr r4, r4, r4, lsl #2 // r4 <- 0xf0f0f0f0 + and r5, r4, r5, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r6, r4, r6, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r7, r4, r7, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r8, r4, r8, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r9, r4, r9, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r10, r4, r10, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r11, r4, r11, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r12, r4, r12, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + eor r11, r11, #0x00cc0000 // add rconst + mvn r11, r11 // to save 1 NOT in Sbox calculations + eor r10, r10, #0x00c00000 // add rconst + mvn r10, r10 // to save 1 NOT in Sbox calculations + mvn r6, r6 // to save 1 NOT in Sbox calculations + mvn r8, r8 // to save 1 NOT in Sbox calculations + eor r12, r12, #0x00300000 // add rconst + mvn r9, r9 // to save 1 NOT in Sbox calculations + mvn r7, r7 + strd r11, r10, [r0], #8 + strd r5, r6, [r0], #8 + strd r8, r12, [r0], #8 + strd r9, r7, [r0], #8 + ldm r0, {r5-r12} // load rtk = tk1 ^ lfsr2(tk2) ^ lfsr3(tk3) + bl p6 + movw r4, #0xc3c3 + movt r4, #0xc3c3 // r4 <- 0xc3c3c3c3 + and r1, r4, r9, ror #10 // ror and mask to match fixslicing + and r2, r4, r12, ror #10 // ror and mask to match fixslicing + and r3, r4, r11, ror #10 // ror and mask to match fixslicing + eor r1, r1, #0x03000000 // add rconst + mvn r1, r1 // to save 1 NOT in Sbox calculations + eor r3, r3, #0x00c00000 // add rconst + eor r3, r3, #0x00003000 // add rconst + mvn r3, r3 // to save 1 NOT in Sbox calculations + stmia.w r0!, {r1-r3} + and r1, r4, r10, ror #10 // ror and mask to match fixslicing + and r2, r4, r6, ror #10 // ror and mask to match fixslicing + and r3, r4, r7, ror #10 // ror and mask to match fixslicing + eor r1, r1, #0x03000000 // add rconst + mvn r1, r1 // to save 1 NOT in Sbox calculations + mvn r2, r2 // to save 1 NOT in Sbox calculations + mvn r3, r3 // to save 1 NOT in Sbox calculations + stmia.w r0!, {r1-r3} + and r1, r4, r8, ror #10 // ror and mask to match fixslicing + and r2, r4, r5, ror #10 // ror and mask to match fixslicing + mvn r1, r1 // to save 1 NOT in Sbox calculations + strd r1, r2, [r0], #8 + and r4, r4, r4, lsr #6 // r4 <- 0x03030303 + and r1, r4, r5, ror #12 //--- ror and masks to match fixslicing + and r5, r5, r4, lsl #6 + orr r5, r1, r5, ror #28 + and r1, r4, r6, ror #12 + and r6, r6, r4, lsl #6 + orr r6, r1, r6, ror #28 + and r1, r4, r7, ror #12 + and r7, r7, r4, lsl #6 + orr r7, r1, r7, ror #28 + and r1, r4, r8, ror #12 + and r8, r8, r4, lsl #6 + orr r8, r1, r8, ror #28 + and r1, r4, r9, ror #12 + and r9, r9, r4, lsl #6 + orr r9, r1, r9, ror #28 + and r1, r4, r10, ror #12 + and r10, r10, r4, lsl #6 + orr r10, r1, r10, ror #28 + and r1, r4, r11, ror #12 + and r11, r11, r4, lsl #6 + orr r11, r1, r11, ror #28 + and r1, r4, r12, ror #12 + and r12, r12, r4, lsl #6 + orr r12, r1, r12, ror #28 //ror and masks to match fixslicing --- + mvn r7, r7 // to save 1 NOT in Sbox calculations + mvn r8, r8 // to save 1 NOT in Sbox calculations + strd r8, r7, [r0], #8 + eor r9, r9, #0x00000c00 // add rconst + mvn r9, r9 // to save 1 NOT in Sbox calculations + eor r12, r12, #0x03000000 // add rconst + strd r9, r12, [r0], #8 + mvn r10, r10 // to save 1 NOT in Sbox calculations + strd r10, r5, [r0], #8 + mvn r6, r6 // to save 1 NOT in Sbox calculations + eor r11, r11, #0x0000c000 // add rconst + mvn r11, r11 // to save 1 NOT in Sbox calculations + strd r6, r11, [r0], #8 + ldm r0, {r5-r12} // load rtk = tk1 ^ lfsr2(tk2) ^ lfsr3(tk3) + bl p8 + movw r4, #0x3030 + movt r4, #0x3030 // r4 <- 0x30303030 + and r1, r4, r6, ror #30 + and r2, r6, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r5, ror #30 + and r2, r5, r4, ror #4 + orr r3, r3, r2, ror #22 + mvn r1, r1 // to save 1 NOT in Sbox calculations + strd r1, r3, [r0], #8 + and r1, r4, r8, ror #30 + and r2, r8, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r7, ror #30 + and r2, r7, r4, ror #4 + orr r3, r3, r2, ror #22 + mvn r1, r1 // to save 1 NOT in Sbox calculations + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r1, r3, [r0], #8 + and r1, r4, r12, ror #30 + and r2, r12, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r11, ror #30 + and r2, r11, r4, ror #4 + orr r3, r3, r2, ror #22 + eor r1, r1, #0x00000c00 // add rconst + eor r3, r3, #0x00030c00 // add rconst + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r1, r3, [r0], #8 + and r1, r4, r10, ror #30 + and r2, r10, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r9, ror #30 + and r2, r9, r4, ror #4 + orr r3, r3, r2, ror #22 + mvn r1, r1 // to save 1 NOT in Sbox calculations + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r1, r3, [r0], #8 + orr r4, r4, r4, lsl #2 // r4 <- 0xf0f0f0f0 + and r5, r5, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r6, r6, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r7, r7, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r8, r8, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r9, r9, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r10, r10, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r11, r11, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r12, r12, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + eor r11, r11, #0x0000003c // add rconst + mvn r11, r11 // to save 1 NOT in Sbox calculations + mvn r10, r10 // to save 1 NOT in Sbox calculations + mvn r6, r6 // to save 1 NOT in Sbox calculations + mvn r8, r8 // to save 1 NOT in Sbox calculations + eor r12, r12, #0x000000c0 // add rconst + mvn r9, r9 // to save 1 NOT in Sbox calculations + mvn r7, r7 // to save 1 NOT in Sbox calculations + strd r11, r10, [r0], #8 + strd r5, r6, [r0], #8 + strd r8, r12, [r0], #8 + strd r9, r7, [r0], #8 + ldm r0, {r5-r12} // load rtk = tk1 ^ lfsr2(tk2) ^ lfsr3(tk3) + bl p10 + movw r4, #0xc3c3 + movt r4, #0xc3c3 // r4 <- 0xc3c3c3c3 + and r1, r4, r9, ror #26 + and r2, r4, r12, ror #26 + mvn r1, r1 // to save 1 NOT in Sbox calculations + strd r1, r2, [r0], #8 + and r1, r4, r11, ror #26 + and r2, r4, r10, ror #26 + eor r1, r1, #0x30000000 // add rconst + eor r1, r1, #0x00000300 // add rconst + mvn r1, r1 // to save 1 NOT in Sbox calculations + mvn r2, r2 // to save 1 NOT in Sbox calculations + strd r1, r2, [r0], #8 + and r1, r4, r6, ror #26 + and r2, r4, r7, ror #26 + mvn r1, r1 // to save 1 NOT in Sbox calculations + mvn r2, r2 // to save 1 NOT in Sbox calculations + strd r1, r2, [r0], #8 + and r1, r4, r8, ror #26 + and r2, r4, r5, ror #26 + mvn r1, r1 // to save 1 NOT in Sbox calculations + strd r1, r2, [r0], #8 + and r4, r4, r4, lsr #6 // r4 <- 0x03030303 + and r1, r4, r5, ror #28 // --- ror and masks to match fixslicing + and r5, r5, r4, lsl #6 + orr r5, r1, r5, ror #12 + and r1, r4, r6, ror #28 + and r6, r6, r4, lsl #6 + orr r6, r1, r6, ror #12 + and r1, r4, r7, ror #28 + and r7, r7, r4, lsl #6 + orr r7, r1, r7, ror #12 + and r1, r4, r8, ror #28 + and r8, r8, r4, lsl #6 + orr r8, r1, r8, ror #12 + and r1, r4, r9, ror #28 + and r9, r9, r4, lsl #6 + orr r9, r1, r9, ror #12 + and r1, r4, r10, ror #28 + and r10, r10, r4, lsl #6 + orr r10, r1, r10, ror #12 + and r1, r4, r11, ror #28 + and r11, r11, r4, lsl #6 + orr r11, r1, r11, ror #12 + and r1, r4, r12, ror #28 + and r12, r12, r4, lsl #6 + orr r12, r1, r12, ror #12 // ror and masks to match fixslicing --- + mvn r8, r8 // to save 1 NOT in Sbox calculations + mvn r7, r7 // to save 1 NOT in Sbox calculations + strd r8, r7, [r0], #8 + mvn r9, r9 // to save 1 NOT in Sbox calculations + eor r12, r12, #0x0c000000 // add rconst + strd r9, r12, [r0], #8 + eor r10, r10, #0x0c000000 // add rconst + mvn r10, r10 // to save 1 NOT in Sbox calculations + strd r10, r5, [r0], #8 + mvn r6, r6 // to save 1 NOT in Sbox calculations + eor r11, r11, #0xc0000000 // add rconst + mvn r11, r11 // to save 1 NOT in Sbox calculations + strd r6, r11, [r0], #8 + ldm r0, {r5-r12} // load rtk = tk1 ^ lfsr2(tk2) ^ lfsr3(tk3) + bl p12 + movw r4, #0x3030 + movt r4, #0x3030 // r4 <- 0x30303030 + and r1, r4, r5, ror #14 // --- ror and masks to match fixslicing + and r2, r5, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r6, ror #14 + and r3, r6, r4, ror #4 + orr r3, r1, r3, ror #6 + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r3, r2, [r0], #8 + and r1, r4, r7, ror #14 + and r2, r7, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r8, ror #14 + and r3, r8, r4, ror #4 + orr r3, r1, r3, ror #6 + mvn r2, r2 // to save 1 NOT in Sbox calculations + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r3, r2, [r0], #8 + and r1, r4, r11, ror #14 + and r2, r11, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r12, ror #14 + and r3, r12, r4, ror #4 + orr r3, r1, r3, ror #6 + eor r3, r3, #0x00300000 // add rconst + eor r2, r2, #0x00000003 // add rconst + eor r2, r2, #0x00300000 // add rconst + mvn r2, r2 // to save 1 NOT in Sbox calculations + strd r3, r2, [r0], #8 + and r1, r4, r9, ror #14 + and r2, r9, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r10, ror #14 + and r3, r10, r4, ror #4 + orr r3, r1, r3, ror #6 + eor r2, r2, #0x00300000 // add rconst + mvn r2, r2 // to save 1 NOT in Sbox calculations + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r3, r2, [r0], #8 + orr r4, r4, r4, lsl #2 // r4 <- 0xf0f0f0f0 + and r5, r4, r5, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r6, r4, r6, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r7, r4, r7, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r8, r4, r8, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r9, r4, r9, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r10, r4, r10, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r11, r4, r11, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r12, r4, r12, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + eor r11, r11, #0x00cc0000 // add rconst + mvn r11, r11 // to save 1 NOT in Sbox calculations + eor r10, r10, #0x00c00000 // add rconst + mvn r10, r10 // to save 1 NOT in Sbox calculations + strd r11, r10, [r0], #8 + mvn r6, r6 // to save 1 NOT in Sbox calculations + strd r5, r6, [r0], #8 + mvn r8, r8 // to save 1 NOT in Sbox calculations + eor r12, r12, #0x00f00000 // add rconst + strd r8, r12, [r0], #8 + mvn r9, r9 // to save 1 NOT in Sbox calculations + mvn r7, r7 + strd r9, r7, [r0], #8 + ldm r0, {r5-r12} // load rtk = tk1 ^ lfsr2(tk2) ^ lfsr3(tk3) + bl p14 + movw r4, #0xc3c3 + movt r4, #0xc3c3 // r4 <- 0xc3c3c3c3 + and r1, r4, r9, ror #10 // ror and mask to match fixslicing + and r2, r4, r12, ror #10 // ror and mask to match fixslicing + and r3, r4, r11, ror #10 // ror and mask to match fixslicing + eor r1, r1, #0x03000000 // add rconst + mvn r1, r1 // to save 1 NOT in Sbox calculations + eor r3, r3, #0x03c00000 // add rconst + eor r3, r3, #0x00003000 // add rconst + mvn r3, r3 // to save 1 NOT in Sbox calculations + stmia.w r0!, {r1-r3} + and r1, r4, r10, ror #10 // ror and mask to match fixslicing + and r2, r4, r6, ror #10 // ror and mask to match fixslicing + and r3, r4, r7, ror #10 // ror and mask to match fixslicing + eor r1, r1, #0x03000000 // add rconst + mvn r1, r1 // to save 1 NOT in Sbox calculations + mvn r2, r2 // to save 1 NOT in Sbox calculations + mvn r3, r3 // to save 1 NOT in Sbox calculations + stmia.w r0!, {r1-r3} + and r1, r4, r8, ror #10 // ror and mask to match fixslicing + and r2, r4, r5, ror #10 // ror and mask to match fixslicing + mvn r1, r1 // to save 1 NOT in Sbox calculations + strd r1, r2, [r0], #8 + and r4, r4, r4, lsr #6 // r4 <- 0x03030303 + and r1, r4, r5, ror #12 //--- ror and masks to match fixslicing + and r5, r5, r4, lsl #6 + orr r5, r1, r5, ror #28 + and r1, r4, r6, ror #12 + and r6, r6, r4, lsl #6 + orr r6, r1, r6, ror #28 + and r1, r4, r7, ror #12 + and r7, r7, r4, lsl #6 + orr r7, r1, r7, ror #28 + and r1, r4, r8, ror #12 + and r8, r8, r4, lsl #6 + orr r8, r1, r8, ror #28 + and r1, r4, r9, ror #12 + and r9, r9, r4, lsl #6 + orr r9, r1, r9, ror #28 + and r1, r4, r10, ror #12 + and r10, r10, r4, lsl #6 + orr r10, r1, r10, ror #28 + and r1, r4, r11, ror #12 + and r11, r11, r4, lsl #6 + orr r11, r1, r11, ror #28 + and r1, r4, r12, ror #12 + and r12, r12, r4, lsl #6 + orr r12, r1, r12, ror #28 //ror and masks to match fixslicing --- + mvn r7, r7 // to save 1 NOT in Sbox calculations + mvn r8, r8 // to save 1 NOT in Sbox calculations + strd r8, r7, [r0], #8 + eor r9, r9, #0x00000c00 // add rconst + mvn r9, r9 // to save 1 NOT in Sbox calculations + eor r12, r12, #0x03000000 // add rconst + strd r9, r12, [r0], #8 + eor r10, r10, #0x00000c00 // add rconst + mvn r10, r10 // to save 1 NOT in Sbox calculations + strd r10, r5, [r0], #8 + mvn r6, r6 // to save 1 NOT in Sbox calculations + eor r11, r11, #0x0000c000 // add rconst + mvn r11, r11 // to save 1 NOT in Sbox calculations + strd r6, r11, [r0], #8 + ldm r0, {r5-r12} // load rtk = tk1 ^ lfsr2(tk2) ^ lfsr3(tk3) + movw r4, #0x3030 + movt r4, #0x3030 // r4 <- 0x30303030 + and r1, r4, r6, ror #30 + and r2, r6, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r5, ror #30 + and r2, r5, r4, ror #4 + orr r3, r3, r2, ror #22 + mvn r1, r1 // to save 1 NOT in Sbox calculations + strd r1, r3, [r0], #8 + and r1, r4, r8, ror #30 + and r2, r8, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r7, ror #30 + and r2, r7, r4, ror #4 + orr r3, r3, r2, ror #22 + mvn r1, r1 // to save 1 NOT in Sbox calculations + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r1, r3, [r0], #8 + and r1, r4, r12, ror #30 + and r2, r12, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r11, ror #30 + and r2, r11, r4, ror #4 + orr r3, r3, r2, ror #22 + eor r1, r1, #0x00000c00 // add rconst + eor r3, r3, #0x00030c00 // add rconst + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r1, r3, [r0], #8 + and r1, r4, r10, ror #30 + and r2, r10, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r9, ror #30 + and r2, r9, r4, ror #4 + orr r3, r3, r2, ror #22 + mvn r1, r1 // to save 1 NOT in Sbox calculations + eor r3, r3, #0x00000030 // add rconst + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r1, r3, [r0], #8 + orr r4, r4, r4, lsl #2 // r4 <- 0xf0f0f0f0 + and r5, r5, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r6, r6, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r7, r7, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r8, r8, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r9, r9, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r10, r10, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r11, r11, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r12, r12, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + eor r11, r11, #0x0000003c // add rconst + mvn r11, r11 // to save 1 NOT in Sbox calculations + mvn r10, r10 // to save 1 NOT in Sbox calculations + strd r11, r10, [r0], #8 + mvn r6, r6 // to save 1 NOT in Sbox calculations + strd r5, r6, [r0], #8 + mvn r8, r8 // to save 1 NOT in Sbox calculations + eor r12, r12, #0x000000f0 // add rconst + strd r8, r12, [r0], #8 + mvn r9, r9 // to save 1 NOT in Sbox calculations + mvn r7, r7 // to save 1 NOT in Sbox calculations + strd r9, r7, [r0], #8 + ldm r0, {r5-r12} // load rtk = tk1 ^ lfsr2(tk2) ^ lfsr3(tk3) + bl p2 // apply the permutation twice + movw r4, #0xc3c3 + movt r4, #0xc3c3 // r4 <- 0xc3c3c3c3 + and r1, r4, r9, ror #26 + and r2, r4, r12, ror #26 + and r3, r4, r11, ror #26 + mvn r1, r1 // to save 1 NOT in Sbox calculations + eor r2, r2, #0x00000300 // add rconst + eor r3, r3, #0x000003c0 // add rconst + eor r3, r3, #0x30000000 // add rconst + mvn r3, r3 // to save 1 NOT in Sbox calculations + stmia.w r0!, {r1-r3} + and r1, r4, r10, ror #26 + and r2, r4, r6, ror #26 + and r3, r4, r7, ror #26 + mvn r1, r1 // to save 1 NOT in Sbox calculations + mvn r2, r2 // to save 1 NOT in Sbox calculations + mvn r3, r3 // to save 1 NOT in Sbox calculations + stmia.w r0!, {r1-r3} + and r1, r4, r8, ror #26 + and r2, r4, r5, ror #26 + mvn r1, r1 // to save 1 NOT in Sbox calculations + stmia.w r0!, {r1-r2} + and r4, r4, r4, lsr #6 // r4 <- 0x03030303 + and r1, r4, r5, ror #28 // --- ror and masks to match fixslicing + and r5, r5, r4, lsl #6 + orr r5, r1, r5, ror #12 + and r1, r4, r6, ror #28 + and r6, r6, r4, lsl #6 + orr r6, r1, r6, ror #12 + and r1, r4, r7, ror #28 + and r7, r7, r4, lsl #6 + orr r7, r1, r7, ror #12 + and r1, r4, r8, ror #28 + and r8, r8, r4, lsl #6 + orr r8, r1, r8, ror #12 + and r1, r4, r9, ror #28 + and r9, r9, r4, lsl #6 + orr r9, r1, r9, ror #12 + and r1, r4, r10, ror #28 + and r10, r10, r4, lsl #6 + orr r10, r1, r10, ror #12 + and r1, r4, r11, ror #28 + and r11, r11, r4, lsl #6 + orr r11, r1, r11, ror #12 + and r1, r4, r12, ror #28 + and r12, r12, r4, lsl #6 + orr r12, r1, r12, ror #12 // ror and masks to match fixslicing --- + mvn r8, r8 // to save 1 NOT in Sbox calculations + mvn r7, r7 // to save 1 NOT in Sbox calculations + strd r8, r7, [r0], #8 + mvn r9, r9 // to save 1 NOT in Sbox calculations + strd r9, r12, [r0], #8 + eor r10, r10, #0x0c000000 // add rconst + mvn r10, r10 // to save 1 NOT in Sbox calculations + strd r10, r5, [r0], #8 + mvn r6, r6 // to save 1 NOT in Sbox calculations + eor r11, r11, #0xcc000000 // add rconst + mvn r11, r11 // to save 1 NOT in Sbox calculations + strd r6, r11, [r0], #8 + ldm r0, {r5-r12} // load rtk = tk1 ^ lfsr2(tk2) ^ lfsr3(tk3) + bl p4 // apply the permutation 4 times + movw r4, #0x3030 + movt r4, #0x3030 // r4 <- 0x30303030 + and r1, r4, r5, ror #14 // --- ror and masks to match fixslicing + and r2, r5, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r6, ror #14 + and r3, r6, r4, ror #4 + orr r3, r1, r3, ror #6 + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r3, r2, [r0], #8 + and r1, r4, r7, ror #14 + and r2, r7, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r8, ror #14 + and r3, r8, r4, ror #4 + orr r3, r1, r3, ror #6 + mvn r2, r2 // to save 1 NOT in Sbox calculations + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r3, r2, [r0], #8 + and r1, r4, r11, ror #14 + and r2, r11, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r12, ror #14 + and r3, r12, r4, ror #4 + orr r3, r1, r3, ror #6 + eor r3, r3, #0x00300000 // add rconst + eor r2, r2, #0x00000003 // add rconst + mvn r2, r2 // to save 1 NOT in Sbox calculations + strd r3, r2, [r0], #8 + and r1, r4, r9, ror #14 + and r2, r9, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r10, ror #14 + and r3, r10, r4, ror #4 + orr r3, r1, r3, ror #6 + eor r2, r2, #0x00300000 // add rconst + mvn r2, r2 // to save 1 NOT in Sbox calculations + eor r3, r3, #0x00300000 // add rconst + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r3, r2, [r0], #8 + orr r4, r4, r4, lsl #2 // r4 <- 0xf0f0f0f0 + and r5, r4, r5, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r6, r4, r6, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r7, r4, r7, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r8, r4, r8, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r9, r4, r9, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r10, r4, r10, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r11, r4, r11, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r12, r4, r12, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + eor r11, r11, #0x00cc0000 // add rconst + mvn r11, r11 // to save 1 NOT in Sbox calculations + mvn r10, r10 // to save 1 NOT in Sbox calculations + mvn r6, r6 // to save 1 NOT in Sbox calculations + mvn r8, r8 // to save 1 NOT in Sbox calculations + eor r12, r12, #0x00f00000 // add rconst + eor r9, r9, #0x00c00000 // add rconst + mvn r9, r9 // to save 1 NOT in Sbox calculations + mvn r7, r7 + strd r11, r10, [r0], #8 + strd r5, r6, [r0], #8 + strd r8, r12, [r0], #8 + strd r9, r7, [r0], #8 + ldm r0, {r5-r12} // load rtk = tk1 ^ lfsr2(tk2) ^ lfsr3(tk3) + bl p6 + movw r4, #0xc3c3 + movt r4, #0xc3c3 // r4 <- 0xc3c3c3c3 + and r1, r4, r9, ror #10 // ror and mask to match fixslicing + and r2, r4, r12, ror #10 // ror and mask to match fixslicing + and r3, r4, r11, ror #10 // ror and mask to match fixslicing + mvn r1, r1 // to save 1 NOT in Sbox calculations + eor r2, r2, #0x00c00000 // add rconst + eor r3, r3, #0x03c00000 // add rconst + eor r3, r3, #0x00003000 // add rconst + mvn r3, r3 // to save 1 NOT in Sbox calculations + stmia.w r0!, {r1-r3} + and r1, r4, r10, ror #10 // ror and mask to match fixslicing + and r2, r4, r6, ror #10 // ror and mask to match fixslicing + and r3, r4, r7, ror #10 // ror and mask to match fixslicing + eor r1, r1, #0x03000000 // add rconst + mvn r1, r1 // to save 1 NOT in Sbox calculations + mvn r2, r2 // to save 1 NOT in Sbox calculations + mvn r3, r3 // to save 1 NOT in Sbox calculations + stmia.w r0!, {r1-r3} + and r1, r4, r8, ror #10 // ror and mask to match fixslicing + and r2, r4, r5, ror #10 // ror and mask to match fixslicing + mvn r1, r1 // to save 1 NOT in Sbox calculations + strd r1, r2, [r0], #8 + and r4, r4, r4, lsr #6 // r4 <- 0x03030303 + and r1, r4, r5, ror #12 //--- ror and masks to match fixslicing + and r5, r5, r4, lsl #6 + orr r5, r1, r5, ror #28 + and r1, r4, r6, ror #12 + and r6, r6, r4, lsl #6 + orr r6, r1, r6, ror #28 + and r1, r4, r7, ror #12 + and r7, r7, r4, lsl #6 + orr r7, r1, r7, ror #28 + and r1, r4, r8, ror #12 + and r8, r8, r4, lsl #6 + orr r8, r1, r8, ror #28 + and r1, r4, r9, ror #12 + and r9, r9, r4, lsl #6 + orr r9, r1, r9, ror #28 + and r1, r4, r10, ror #12 + and r10, r10, r4, lsl #6 + orr r10, r1, r10, ror #28 + and r1, r4, r11, ror #12 + and r11, r11, r4, lsl #6 + orr r11, r1, r11, ror #28 + and r1, r4, r12, ror #12 + and r12, r12, r4, lsl #6 + orr r12, r1, r12, ror #28 //ror and masks to match fixslicing --- + mvn r7, r7 // to save 1 NOT in Sbox calculations + mvn r8, r8 // to save 1 NOT in Sbox calculations + strd r8, r7, [r0], #8 + eor r9, r9, #0x00000c00 // add rconst + mvn r9, r9 // to save 1 NOT in Sbox calculations + eor r12, r12, #0x00000c00 // add rconst + strd r9, r12, [r0], #8 + eor r10, r10, #0x00000c00 // add rconst + mvn r10, r10 // to save 1 NOT in Sbox calculations + strd r10, r5, [r0], #8 + mvn r6, r6 // to save 1 NOT in Sbox calculations + eor r11, r11, #0x03000000 // add rconst + eor r11, r11, #0x0000c000 // add rconst + mvn r11, r11 // to save 1 NOT in Sbox calculations + strd r6, r11, [r0], #8 + ldm r0, {r5-r12} // load rtk = tk1 ^ lfsr2(tk2) ^ lfsr3(tk3) + bl p8 + movw r4, #0x3030 + movt r4, #0x3030 // r4 <- 0x30303030 + and r1, r4, r6, ror #30 + and r2, r6, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r5, ror #30 + and r2, r5, r4, ror #4 + orr r3, r3, r2, ror #22 + mvn r1, r1 // to save 1 NOT in Sbox calculations + strd r1, r3, [r0], #8 + and r1, r4, r8, ror #30 + and r2, r8, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r7, ror #30 + and r2, r7, r4, ror #4 + orr r3, r3, r2, ror #22 + mvn r1, r1 // to save 1 NOT in Sbox calculations + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r1, r3, [r0], #8 + and r1, r4, r12, ror #30 + and r2, r12, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r11, ror #30 + and r2, r11, r4, ror #4 + orr r3, r3, r2, ror #22 + eor r1, r1, #0x00000c00 // add rconst + eor r3, r3, #0x00000030 // add rconst + eor r3, r3, #0x00030000 // add rconst + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r1, r3, [r0], #8 + and r1, r4, r10, ror #30 + and r2, r10, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r9, ror #30 + and r2, r9, r4, ror #4 + orr r3, r3, r2, ror #22 + mvn r1, r1 // to save 1 NOT in Sbox calculations + eor r3, r3, #0x00000030 // add rconst + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r1, r3, [r0], #8 + add.w sp, #4 + pop {r0-r12, r14} + bx lr + +/****************************************************************************** +* Compute TK = rearrange(perm(TK ^ TK1)) for all rounds. +* The function 'rearrange' aims at reording bits for all round tweakeys to +* match the fixsliced implementation of the SKINNY block cipher. +******************************************************************************/ +@ void tkschedule_perm_tk1(u32* rtk) +.global tkschedule_perm_tk1 +.type tkschedule_perm_tk1,%function +.align 2 +tkschedule_perm_tk1: + push {r0-r12, r14} + sub.w sp, #32 // to store packed tk1 + ldm r1, {r5,r7,r9,r11} // load the 1st block in r5,r7,r9,r11 + ldm r2, {r6,r8,r10,r12} // load the 1st block in r5,r7,r9,r11 + movw r2, #0x5555 + movt r2, #0x5555 // r2 <- 0x55555555 + movw r3, #0x3030 + movt r3, #0x3030 // r3 <- 0x30303030 + bl packing + stm sp, {r5-r12} + movw r4, #0xf0f0 + movt r4, #0xf0f0 + and r1, r11, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r2, r10, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r3, r5, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + stmia r0!, {r1-r3} + and r1, r6, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r2, r8, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r3, r12, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + stmia r0!, {r1-r3} + and r1, r9, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r2, r7, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + strd r1, r2, [r0], #8 + bl p2 // apply the permutation twice + movw r4, #0xc3c3 + movt r4, #0xc3c3 // r4 <- 0xc3c3c3c3 + and r1, r4, r9, ror #26 + and r2, r4, r12, ror #26 + and r3, r4, r11, ror #26 + stmia.w r0!, {r1-r3} + and r1, r4, r10, ror #26 + and r2, r4, r6, ror #26 + and r3, r4, r7, ror #26 + stmia.w r0!, {r1-r3} + and r1, r4, r8, ror #26 + and r2, r4, r5, ror #26 + stmia.w r0!, {r1-r2} + and r4, r4, r4, lsr #6 // r4 <- 0x03030303 + and r1, r4, r8, ror #28 // --- ror and masks to match fixslicing + and r2, r8, r4, lsl #6 + orr r2, r1, r2, ror #12 + and r1, r4, r7, ror #28 + and r3, r7, r4, lsl #6 + orr r3, r1, r3, ror #12 + strd r2, r3, [r0], #8 + and r1, r4, r9, ror #28 + and r2, r9, r4, lsl #6 + orr r2, r1, r2, ror #12 + and r1, r4, r12, ror #28 + and r3, r12, r4, lsl #6 + orr r3, r1, r3, ror #12 + strd r2, r3, [r0], #8 + and r1, r4, r10, ror #28 + and r2, r10, r4, lsl #6 + orr r2, r1, r2, ror #12 + and r1, r4, r5, ror #28 + and r3, r5, r4, lsl #6 + orr r3, r1, r3, ror #12 + strd r2, r3, [r0], #8 + and r1, r4, r6, ror #28 + and r2, r6, r4, lsl #6 + orr r2, r1, r2, ror #12 + and r1, r4, r11, ror #28 + and r3, r11, r4, lsl #6 + orr r3, r1, r3, ror #12 + strd r2, r3, [r0], #8 + bl p2 // apply the permutation twice + movw r4, #0x3030 + movt r4, #0x3030 // r4 <- 0x30303030 + and r1, r4, r5, ror #14 // --- ror and masks to match fixslicing + and r2, r5, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r6, ror #14 + and r3, r6, r4, ror #4 + orr r3, r1, r3, ror #6 + strd r3, r2, [r0], #8 + and r1, r4, r7, ror #14 + and r2, r7, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r8, ror #14 + and r3, r8, r4, ror #4 + orr r3, r1, r3, ror #6 + strd r3, r2, [r0], #8 + and r1, r4, r11, ror #14 + and r2, r11, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r12, ror #14 + and r3, r12, r4, ror #4 + orr r3, r1, r3, ror #6 + strd r3, r2, [r0], #8 + and r1, r4, r9, ror #14 + and r2, r9, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r10, ror #14 + and r3, r10, r4, ror #4 + orr r3, r1, r3, ror #6 + strd r3, r2, [r0], #8 + orr r4, r4, r4, lsl #2 // r4 <- 0xf0f0f0f0 + and r1, r4, r11, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r2, r4, r10, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r3, r4, r5, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + stmia r0!, {r1-r3} + and r1, r4, r6, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r2, r4, r8, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r3, r4, r12, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + stmia r0!, {r1-r3} + and r1, r4, r9, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r2, r4, r7, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + strd r1, r2, [r0], #8 + bl p2 // apply the permutation twice + movw r4, #0xc3c3 + movt r4, #0xc3c3 // r4 <- 0xc3c3c3c3 + and r1, r4, r9, ror #10 // ror and mask to match fixslicing + and r2, r4, r12, ror #10 // ror and mask to match fixslicing + and r3, r4, r11, ror #10 // ror and mask to match fixslicing + stmia r0!, {r1-r3} + and r1, r4, r10, ror #10 // ror and mask to match fixslicing + and r2, r4, r6, ror #10 // ror and mask to match fixslicing + and r3, r4, r7, ror #10 // ror and mask to match fixslicing + stmia r0!, {r1-r3} + and r1, r4, r8, ror #10 // ror and mask to match fixslicing + and r2, r4, r5, ror #10 // ror and mask to match fixslicing + strd r1, r2, [r0], #8 + and r4, r4, r4, lsr #6 // r4 <- 0x03030303 + and r1, r4, r8, ror #12 // --- ror and masks to match fixslicing + and r2, r8, r4, lsl #6 + orr r2, r1, r2, ror #28 + and r1, r4, r7, ror #12 + and r3, r7, r4, lsl #6 + orr r3, r1, r3, ror #28 + strd r2, r3, [r0], #8 + and r1, r4, r9, ror #12 + and r2, r9, r4, lsl #6 + orr r2, r1, r2, ror #28 + and r1, r4, r12, ror #12 + and r3, r12, r4, lsl #6 + orr r3, r1, r3, ror #28 + strd r2, r3, [r0], #8 + and r1, r4, r10, ror #12 + and r2, r10, r4, lsl #6 + orr r2, r1, r2, ror #28 + and r1, r4, r5, ror #12 + and r3, r5, r4, lsl #6 + orr r3, r1, r3, ror #28 + strd r2, r3, [r0], #8 + and r1, r4, r6, ror #12 + and r2, r6, r4, lsl #6 + orr r2, r1, r2, ror #28 + and r1, r4, r11, ror #12 + and r3, r11, r4, lsl #6 + orr r3, r1, r3, ror #28 + strd r2, r3, [r0], #8 + bl p2 // apply the permutation twice + movw r4, #0x3030 + movt r4, #0x3030 // r4 <- 0x30303030 + and r1, r4, r6, ror #30 + and r2, r6, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r5, ror #30 + and r2, r5, r4, ror #4 + orr r3, r3, r2, ror #22 + strd r1, r3, [r0], #8 + and r1, r4, r8, ror #30 + and r2, r8, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r7, ror #30 + and r2, r7, r4, ror #4 + orr r3, r3, r2, ror #22 + strd r1, r3, [r0], #8 + and r1, r4, r12, ror #30 + and r2, r12, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r11, ror #30 + and r2, r11, r4, ror #4 + orr r3, r3, r2, ror #22 + strd r1, r3, [r0], #8 + and r1, r4, r10, ror #30 + and r2, r10, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r9, ror #30 + and r2, r9, r4, ror #4 + orr r3, r3, r2, ror #22 + strd r1, r3, [r0], #8 + orr r4, r4, r4, lsl #2 // r4 <- 0xf0f0f0f0 + and r1, r11, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r2, r10, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r3, r5, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + stmia r0!, {r1-r3} + and r1, r6, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r2, r8, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r3, r12, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + stmia r0!, {r1-r3} + and r1, r9, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r2, r7, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + strd r1, r2, [r0], #8 + bl p2 // apply the permutation twice + movw r4, #0xc3c3 + movt r4, #0xc3c3 // r4 <- 0xc3c3c3c3 + and r1, r4, r9, ror #26 + and r2, r4, r12, ror #26 + strd r1, r2, [r0], #8 + and r1, r4, r11, ror #26 + and r2, r4, r10, ror #26 + strd r1, r2, [r0], #8 + and r1, r4, r6, ror #26 + and r2, r4, r7, ror #26 + strd r1, r2, [r0], #8 + and r1, r4, r8, ror #26 + and r2, r4, r5, ror #26 + strd r1, r2, [r0], #8 + and r4, r4, r4, lsr #6 // r4 <- 0x03030303 + and r1, r4, r8, ror #28 // --- ror and masks to match fixslicing + and r2, r8, r4, lsl #6 + orr r2, r1, r2, ror #12 + and r1, r4, r7, ror #28 + and r3, r7, r4, lsl #6 + orr r3, r1, r3, ror #12 + strd r2, r3, [r0], #8 + and r1, r4, r9, ror #28 + and r2, r9, r4, lsl #6 + orr r2, r1, r2, ror #12 + and r1, r4, r12, ror #28 + and r3, r12, r4, lsl #6 + orr r3, r1, r3, ror #12 + strd r2, r3, [r0], #8 + and r1, r4, r10, ror #28 + and r2, r10, r4, lsl #6 + orr r2, r1, r2, ror #12 + and r1, r4, r5, ror #28 + and r3, r5, r4, lsl #6 + orr r3, r1, r3, ror #12 + strd r2, r3, [r0], #8 + and r1, r4, r6, ror #28 + and r2, r6, r4, lsl #6 + orr r2, r1, r2, ror #12 + and r1, r4, r11, ror #28 + and r3, r11, r4, lsl #6 + orr r3, r1, r3, ror #12 + strd r2, r3, [r0], #8 + bl p2 // apply the permutation twice + movw r4, #0x3030 + movt r4, #0x3030 // r4 <- 0x30303030 + and r1, r4, r5, ror #14 // --- ror and masks to match fixslicing + and r2, r5, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r6, ror #14 + and r3, r6, r4, ror #4 + orr r3, r1, r3, ror #6 + strd r3, r2, [r0], #8 + and r1, r4, r7, ror #14 + and r2, r7, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r8, ror #14 + and r3, r8, r4, ror #4 + orr r3, r1, r3, ror #6 + strd r3, r2, [r0], #8 + and r1, r4, r11, ror #14 + and r2, r11, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r12, ror #14 + and r3, r12, r4, ror #4 + orr r3, r1, r3, ror #6 + strd r3, r2, [r0], #8 + and r1, r4, r9, ror #14 + and r2, r9, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r10, ror #14 + and r3, r10, r4, ror #4 + orr r3, r1, r3, ror #6 + strd r3, r2, [r0], #8 + orr r4, r4, r4, lsl #2 // r4 <- 0xf0f0f0f0 + and r1, r4, r11, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r2, r4, r10, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r3, r4, r5, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + stmia r0!, {r1-r3} + and r1, r4, r6, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r2, r4, r8, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r3, r4, r12, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + stmia r0!, {r1-r3} + and r1, r4, r9, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r2, r4, r7, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + strd r1, r2, [r0], #8 + bl p2 // apply the permutation twice + movw r4, #0xc3c3 + movt r4, #0xc3c3 // r4 <- 0xc3c3c3c3 + and r1, r4, r9, ror #10 // ror and mask to match fixslicing + and r2, r4, r12, ror #10 // ror and mask to match fixslicing + and r3, r4, r11, ror #10 // ror and mask to match fixslicing + stmia.w r0!, {r1-r3} + and r1, r4, r10, ror #10 // ror and mask to match fixslicing + and r2, r4, r6, ror #10 // ror and mask to match fixslicing + and r3, r4, r7, ror #10 // ror and mask to match fixslicing + stmia.w r0!, {r1-r3} + and r1, r4, r8, ror #10 // ror and mask to match fixslicing + and r2, r4, r5, ror #10 // ror and mask to match fixslicing + strd r1, r2, [r0], #8 + and r4, r4, r4, lsr #6 // r4 <- 0x03030303 + and r1, r4, r8, ror #12 // --- ror and masks to match fixslicing + and r2, r8, r4, lsl #6 + orr r2, r1, r2, ror #28 + and r1, r4, r7, ror #12 + and r3, r7, r4, lsl #6 + orr r3, r1, r3, ror #28 + strd r2, r3, [r0], #8 + and r1, r4, r9, ror #12 + and r2, r9, r4, lsl #6 + orr r2, r1, r2, ror #28 + and r1, r4, r12, ror #12 + and r3, r12, r4, lsl #6 + orr r3, r1, r3, ror #28 + strd r2, r3, [r0], #8 + and r1, r4, r10, ror #12 + and r2, r10, r4, lsl #6 + orr r2, r1, r2, ror #28 + and r1, r4, r5, ror #12 + and r3, r5, r4, lsl #6 + orr r3, r1, r3, ror #28 + strd r2, r3, [r0], #8 + and r1, r4, r6, ror #12 + and r2, r6, r4, lsl #6 + orr r2, r1, r2, ror #28 + and r1, r4, r11, ror #12 + and r3, r11, r4, lsl #6 + orr r3, r1, r3, ror #28 + strd r2, r3, [r0], #8 + ldmia.w sp!, {r5-r12} + movw r4, #0x3030 + movt r4, #0x3030 // r4 <- 0x30303030 + and r1, r4, r6, ror #30 + and r2, r6, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r5, ror #30 + and r2, r5, r4, ror #4 + orr r3, r3, r2, ror #22 + strd r1, r3, [r0], #8 + and r1, r4, r8, ror #30 + and r2, r8, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r7, ror #30 + and r2, r7, r4, ror #4 + orr r3, r3, r2, ror #22 + strd r1, r3, [r0], #8 + and r1, r4, r12, ror #30 + and r2, r12, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r11, ror #30 + and r2, r11, r4, ror #4 + orr r3, r3, r2, ror #22 + strd r1, r3, [r0], #8 + and r1, r4, r10, ror #30 + and r2, r10, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r9, ror #30 + and r2, r9, r4, ror #4 + orr r3, r3, r2, ror #22 + strd r1, r3, [r0] + pop {r0-r12, r14} + bx lr + +/****************************************************************************** +* Quadruple round of the SKINNY block cipher in a bitsliced manner. +******************************************************************************/ +.align 2 +quadruple_round: + str.w r14, [sp] // store r14 on the stack + orr r4, r5, r6 // state[0] | state[1] + eor r8, r8, r4 // state[3] ^= (state[0] | state[1]) + orr r4, r9, r10 // state[4] | state[5] + eor r12, r12, r4 // state[7] ^= (state[4] | state[5]) + orr r4, r11, r10 // state[6] | state[5] + eor r6, r6, r4 // state[1] ^= (state[6] | state[5]) + and r4, r8, r12 // state[3] & state[7] + eor r7, r7, r4 // state[2] ^= (state[3] & state[7]) + orn r4, r9, r12 // ~state[7] | state[4] + eor r11, r11, r4 // state[6] ^= (~state[7] | state[4]) + orn r4, r7, r6 // state[2] | ~state[1] + eor r5, r5, r4 // state[0] ^= (state[2] | ~state[1]) + orn r4, r7, r8 // ~state[3] | state[2] + eor r9, r9, r4 // state[4] ^= (~state[3] | state[2]) + and r4, r5, r11 // state[0] & state[6] + eor r10, r10, r4 // state[5] ^= (state[6] & state[0]) + ldmia.w r1!, {r2-r4,r14} // load rtk_2_3 in r0,r2,r3,r4 + eor r5, r5, r2 // add rtk_2_3 + rconst + eor r6, r6, r3 // add rtk_2_3 + rconst + eor r7, r7, r4 // add rtk_2_3 + rconst + eor r8, r8, r14 // add rtk_2_3 + rconst + ldmia.w r1!, {r2-r4,r14} // load rtk_2_3 in r0,r2,r3,r4 + eor r9, r9, r2 // add rtk_2_3 + rconst + eor r10, r10, r3 // add rtk_2_3 + rconst + eor r11, r11, r4 // add rtk_2_3 + rconst + eor r12, r12, r14 // add rtk_2_3 + rconst + ldmia.w r0!, {r2-r4,r14} // load rtk_1 in r0,r2,r3,r4 + eor r5, r5, r2 // add rtk_1 + eor r6, r6, r3 // add rtk_1 + eor r7, r7, r4 // add rtk_1 + eor r8, r8, r14 // add rtk_1 + ldmia.w r0!, {r2-r4, r14} // load rtk_1 in r0,r2,r3,r4 + eor r9, r9, r2 // add rtk_1 + eor r10, r10, r3 // add rtk_1 + eor r11, r11, r4 // add rtk_1 + eor r12, r12, r14 // add rtk_1 + movw r2, #0x3030 + movt r2, #0x3030 // r2 <- 0x30303030 + and r4, r2, r5, ror #30 // --- mixcolumns + eor r5, r5, r4, ror #24 + and r4, r2, r5, ror #18 + eor r5, r5, r4, ror #2 + and r4, r2, r5, ror #6 + eor r5, r5, r4, ror #4 + and r4, r2, r6, ror #30 + eor r6, r6, r4, ror #24 + and r4, r2, r6, ror #18 + eor r6, r6, r4, ror #2 + and r4, r2, r6, ror #6 + eor r6, r6, r4, ror #4 + and r4, r2, r7, ror #30 + eor r7, r7, r4, ror #24 + and r4, r2, r7, ror #18 + eor r7, r7, r4, ror #2 + and r4, r2, r7, ror #6 + eor r7, r7, r4, ror #4 + and r4, r2, r8, ror #30 + eor r8, r8, r4, ror #24 + and r4, r2, r8, ror #18 + eor r8, r8, r4, ror #2 + and r4, r2, r8, ror #6 + eor r8, r8, r4, ror #4 + and r4, r2, r9, ror #30 + eor r9, r9, r4, ror #24 + and r4, r2, r9, ror #18 + eor r9, r9, r4, ror #2 + and r4, r2, r9, ror #6 + eor r9, r9, r4, ror #4 + and r4, r2, r10, ror #30 + eor r10, r10, r4, ror #24 + and r4, r2, r10, ror #18 + eor r10, r10, r4, ror #2 + and r4, r2, r10, ror #6 + eor r10, r10, r4, ror #4 + and r4, r2, r11, ror #30 + eor r11, r11, r4, ror #24 + and r4, r2, r11, ror #18 + eor r11, r11, r4, ror #2 + and r4, r2, r11, ror #6 + eor r11, r11, r4, ror #4 + and r4, r2, r12, ror #30 + eor r12, r12, r4, ror #24 + and r4, r2, r12, ror #18 + eor r12, r12, r4, ror #2 + and r4, r2, r12, ror #6 + eor r12, r12, r4, ror #4 // mixcolumns --- + orr r4, r7, r8 // state[2] | state[3] + eor r9, r9, r4 // state[4] ^= (state[2] | state[3]) + orr r4, r6, r11 // state[1] | state[6] + eor r10, r10, r4 // state[5] ^= (state[6] | state[1]) + orr r4, r5, r6 // state[0] | state[1] + eor r8, r8, r4 // state[3] ^= (state[0] | state[1]) + and r4, r9, r10 // state[4] & state[5] + eor r12, r12, r4 // state[7] ^= (state[4] & state[5]) + orn r4, r11, r10 // ~state[5] | state[6] + eor r5, r5, r4 // state[0] ^= (~state[5] | state[6]) + orn r4, r12, r8 // state[7] | ~state[3] + eor r7, r7, r4 // state[2] ^= (state[7] | ~state[3]) + orn r4, r12, r9 // state[7] | ~state[4] + eor r11, r11, r4 // state[6] ^= (~state[4] | state[7]) + and r4, r5, r7 // state[0] & state[2] + eor r6, r6, r4 // state[1] ^= (state[0] & state[2]) + ldmia.w r1!, {r2-r4,r14} // load rtk_2_3 in r0,r2,r3,r4 + eor r5, r5, r2 // add rtk_2_3 + rconst + eor r6, r6, r3 // add rtk_2_3 + rconst + eor r7, r7, r4 // add rtk_2_3 + rconst + eor r8, r8, r14 // add rtk_2_3 + rconst + ldmia.w r1!, {r2-r4,r14} // load rtk_2_3 in r0,r2,r3,r4 + eor r9, r9, r2 // add rtk_2_3 + rconst + eor r10, r10, r3 // add rtk_2_3 + rconst + eor r11, r11, r4 // add rtk_2_3 + rconst + eor r12, r12, r14 // add rtk_2_3 + rconst + ldmia.w r0!, {r2-r4,r14} // load rtk_1 in r0,r2,r3,r4 + eor r5, r5, r2 // add rtk_1 + eor r6, r6, r3 // add rtk_1 + eor r7, r7, r4 // add rtk_1 + eor r8, r8, r14 // add rtk_1 + ldmia.w r0!, {r2-r4, r14} // load rtk_1 in r0,r2,r3,r4 + eor r9, r9, r2 // add rtk_1 + eor r10, r10, r3 // add rtk_1 + eor r11, r11, r4 // add rtk_1 + eor r12, r12, r14 // add rtk_1 + movw r2, #0x3030 + movt r2, #0x3030 //r2 <- 0x30303030 + and r4, r2, r5, ror #16 // --- mixcolumns + eor r5, r5, r4, ror #30 + and r4, r2, r5, ror #28 + eor r5, r5, r4 + and r4, r2, r5, ror #16 + eor r5, r5, r4, ror #2 + and r4, r2, r6, ror #16 + eor r6, r6, r4, ror #30 + and r4, r2, r6, ror #28 + eor r6, r6, r4 + and r4, r2, r6, ror #16 + eor r6, r6, r4, ror #2 + and r4, r2, r7, ror #16 + eor r7, r7, r4, ror #30 + and r4, r2, r7, ror #28 + eor r7, r7, r4 + and r4, r2, r7, ror #16 + eor r7, r7, r4, ror #2 + and r4, r2, r8, ror #16 + eor r8, r8, r4, ror #30 + and r4, r2, r8, ror #28 + eor r8, r8, r4 + and r4, r2, r8, ror #16 + eor r8, r8, r4, ror #2 + and r4, r2, r9, ror #16 + eor r9, r9, r4, ror #30 + and r4, r2, r9, ror #28 + eor r9, r9, r4 + and r4, r2, r9, ror #16 + eor r9, r9, r4, ror #2 + and r4, r2, r10, ror #16 + eor r10, r10, r4, ror #30 + and r4, r2, r10, ror #28 + eor r10, r10, r4 + and r4, r2, r10, ror #16 + eor r10, r10, r4, ror #2 + and r4, r2, r11, ror #16 + eor r11, r11, r4, ror #30 + and r4, r2, r11, ror #28 + eor r11, r11, r4 + and r4, r2, r11, ror #16 + eor r11, r11, r4, ror #2 + and r4, r2, r12, ror #16 + eor r12, r12, r4, ror #30 + and r4, r2, r12, ror #28 + eor r12, r12, r4 + and r4, r2, r12, ror #16 + eor r12, r12, r4, ror #2 // mixcolumns --- + orr r4, r12, r9 // state[7] | state[4] + eor r11, r11, r4 // state[6] ^= (state[7] | state[4]) + orr r4, r5, r8 // state[0] | state[3] + eor r6, r6, r4 // state[1] ^= (state[0] | state[3]) + orr r4, r7, r8 // state[2] | state[3] + eor r9, r9, r4 // state[4] ^= (state[2] | state[3]) + and r4, r6, r11 // state[1] & state[6] + eor r10, r10, r4 // state[5] ^= (state[6] & state[1]) + orn r4, r5, r6 // ~state[1] | state[0] + eor r7, r7, r4 // state[2] ^= (~state[1] | state[0]) + orn r4, r10, r9 // state[5] | ~state[4] + eor r12, r12, r4 // state[7] ^= (state[5] | ~state[4]) + orn r4, r10, r11 // ~state[6] | state[5] + eor r5, r5, r4 // state[0] ^= (~state[6] | state[5]) + and r4, r7, r12 // state[2] & state[7] + eor r8, r8, r4 // state[3] ^= (state[2] & state[7]) + ldmia.w r1!, {r2-r4,r14} // load rtk_2_3 in r0,r2,r3,r4 + eor r5, r5, r2 // add rtk_2_3 + rconst + eor r6, r6, r3 // add rtk_2_3 + rconst + eor r7, r7, r4 // add rtk_2_3 + rconst + eor r8, r8, r14 // add rtk_2_3 + rconst + ldmia.w r1!, {r2-r4,r14} // load rtk_2_3 in r0,r2,r3,r4 + eor r9, r9, r2 // add rtk_2_3 + rconst + eor r10, r10, r3 // add rtk_2_3 + rconst + eor r11, r11, r4 // add rtk_2_3 + rconst + eor r12, r12, r14 // add rtk_2_3 + rconst + ldmia.w r0!, {r2-r4,r14} // load rtk_1 in r0,r2,r3,r4 + eor r5, r5, r2 // add rtk_1 + eor r6, r6, r3 // add rtk_1 + eor r7, r7, r4 // add rtk_1 + eor r8, r8, r14 // add rtk_1 + ldmia.w r0!, {r2-r4, r14} // load rtk_1 in r0,r2,r3,r4 + eor r9, r9, r2 // add rtk_1 + eor r10, r10, r3 // add rtk_1 + eor r11, r11, r4 // add rtk_1 + eor r12, r12, r14 // add rtk_1 + movw r2, #0x3030 + movt r2, #0x3030 // r2 <- 0x30303030 + and r4, r2, r5, ror #10 // --- mixcolumns + eor r5, r5, r4, ror #4 + and r4, r2, r5, ror #6 + eor r5, r5, r4, ror #6 + and r4, r2, r5, ror #26 + eor r5, r5, r4 + and r4, r2, r6, ror #10 + eor r6, r6, r4, ror #4 + and r4, r2, r6, ror #6 + eor r6, r6, r4, ror #6 + and r4, r2, r6, ror #26 + eor r6, r6, r4 + and r4, r2, r7, ror #10 + eor r7, r7, r4, ror #4 + and r4, r2, r7, ror #6 + eor r7, r7, r4, ror #6 + and r4, r2, r7, ror #26 + eor r7, r7, r4 + and r4, r2, r8, ror #10 + eor r8, r8, r4, ror #4 + and r4, r2, r8, ror #6 + eor r8, r8, r4, ror #6 + and r4, r2, r8, ror #26 + eor r8, r8, r4 + and r4, r2, r9, ror #10 + eor r9, r9, r4, ror #4 + and r4, r2, r9, ror #6 + eor r9, r9, r4, ror #6 + and r4, r2, r9, ror #26 + eor r9, r9, r4 + and r4, r2, r10, ror #10 + eor r10, r10, r4, ror #4 + and r4, r2, r10, ror #6 + eor r10, r10, r4, ror #6 + and r4, r2, r10, ror #26 + eor r10, r10, r4 + and r4, r2, r11, ror #10 + eor r11, r11, r4, ror #4 + and r4, r2, r11, ror #6 + eor r11, r11, r4, ror #6 + and r4, r2, r11, ror #26 + eor r11, r11, r4 + and r4, r2, r12, ror #10 + eor r12, r12, r4, ror #4 + and r4, r2, r12, ror #6 + eor r12, r12, r4, ror #6 + and r4, r2, r12, ror #26 + eor r12, r12, r4 // mixcolumns --- + orr r4, r10, r11 // state[5] | state[6] + eor r5, r5, r4 // state[0] ^= (state[5] | state[6]) + orr r4, r7, r9 // state[2] | state[4] + eor r8, r8, r4 // state[3] ^= (state[2] | state[4]) + orr r4, r9, r12 // state[7] | state[4] + eor r11, r11, r4 // state[6] ^= (state[7] | state[4]) + and r4, r5, r8 // state[0] & state[3] + eor r6, r6, r4 // state[1] ^= (state[0] & state[3]) + orn r4, r7, r8 // ~state[3] | state[2] + eor r12, r12, r4 // state[7] ^= (~state[3] | state[2]) + orn r4, r6, r11 // state[1] | ~state[6] + eor r10, r10, r4 // state[5] ^= (state[1] | ~state[6]) + orn r4, r6, r5 // ~state[0] | state[1] + eor r7, r7, r4 // state[2] ^= (~state[0] | state[1]) + and r4, r12, r10 // state[7] & state[5] + eor r9, r9, r4 // state[4] ^= (state[7] & state[5]) + ldmia.w r1!, {r2-r4,r14} // load rtk_2_3 in r0,r2,r3,r4 + eor r5, r5, r2 // add rtk_2_3 + rconst + eor r6, r6, r3 // add rtk_2_3 + rconst + eor r7, r7, r4 // add rtk_2_3 + rconst + eor r8, r8, r14 // add rtk_2_3 + rconst + ldmia.w r1!, {r2-r4,r14} // load rtk_2_3 in r0,r2,r3,r4 + eor r9, r9, r2 // add rtk_2_3 + rconst + eor r10, r10, r3 // add rtk_2_3 + rconst + eor r11, r11, r4 // add rtk_2_3 + rconst + eor r12, r12, r14 // add rtk_2_3 + rconst + ldmia.w r0!, {r2-r4,r14} // load rtk_1 in r0,r2,r3,r4 + eor r5, r5, r2 // add rtk_1 + eor r6, r6, r3 // add rtk_1 + eor r7, r7, r4 // add rtk_1 + eor r8, r8, r14 // add rtk_1 + ldmia.w r0!, {r2-r4, r14} // load rtk_1 in r0,r2,r3,r4 + eor r9, r9, r2 // add rtk_1 + eor r10, r10, r3 // add rtk_1 + eor r11, r11, r4 // add rtk_1 + eor r12, r12, r14 // add rtk_1 + movw r2, #0x3030 + movt r2, #0x3030 // r2 <- 0x30303030 + and r4, r2, r5, ror #4 // --- mixcolumns + eor r5, r5, r4, ror #26 + and r4, r2, r5 + eor r5, r5, r4, ror #4 + and r4, r2, r5, ror #4 + eor r5, r5, r4, ror #22 + and r4, r2, r6, ror #4 + eor r6, r6, r4, ror #26 + and r4, r2, r6 + eor r6, r6, r4, ror #4 + and r4, r2, r6, ror #4 + eor r6, r6, r4, ror #22 + and r4, r2, r7, ror #4 + eor r7, r7, r4, ror #26 + and r4, r2, r7 + eor r7, r7, r4, ror #4 + and r4, r2, r7, ror #4 + eor r7, r7, r4, ror #22 + and r4, r2, r8, ror #4 + eor r8, r8, r4, ror #26 + and r4, r2, r8 + eor r8, r8, r4, ror #4 + and r4, r2, r8, ror #4 + eor r8, r8, r4, ror #22 + and r4, r2, r9, ror #4 + eor r9, r9, r4, ror #26 + and r4, r2, r9 + eor r9, r9, r4, ror #4 + and r4, r2, r9, ror #4 + eor r9, r9, r4, ror #22 + and r4, r2, r10, ror #4 + eor r10, r10, r4, ror #26 + and r4, r2, r10 + eor r10, r10, r4, ror #4 + and r4, r2, r10, ror #4 + eor r10, r10, r4, ror #22 + and r4, r2, r11, ror #4 + eor r11, r11, r4, ror #26 + and r4, r2, r11 + eor r11, r11, r4, ror #4 + and r4, r2, r11, ror #4 + eor r11, r11, r4, ror #22 + and r4, r2, r12, ror #4 + eor r12, r12, r4, ror #26 + and r4, r2, r12 + eor r12, r12, r4, ror #4 + and r4, r2, r12, ror #4 + eor r12, r12, r4, ror #22 // mixcolumns --- + // renaming slices for the sbox calculations + // can be avoided with an octuple_round routine=>increase of the code size + ldr.w r14, [sp] // restore link register + eor r5, r5, r6 // --- swap state[0] with state[1] + eor r6, r6, r5 + eor r5, r5, r6 // swap state[0] with state[1] --- + eor r7, r7, r8 // --- swap state[2] with state[3] + eor r8, r8, r7 + eor r7, r7, r8 // swap state[2] with state[3] --- + eor r9, r9, r12 // --- swap state[4] with state[7] + eor r12, r12, r9 + eor r9, r9, r12 // swap state[4] with state[7] --- + eor r11, r11, r10 // --- swap state[6] with state[5] + eor r10, r10, r11 + eor r11, r11, r10 // swap state[6] with state[5] --- + bx lr + +/****************************************************************************** +* Inverse quadruple round of fixsliced SKINNY-128 tweakable block cipher. +* The 2 blocks are stored in r5-r12 (fixsliced representation). +******************************************************************************/ +.align 2 +inv_quadruple_round: + str.w r14, [sp] // store r14 on the stack + eor r5, r5, r6 // --- swap state[0] with state[1] + eor r6, r6, r5 + eor r5, r5, r6 // swap state[0] with state[1] --- + eor r7, r7, r8 // --- swap state[2] with state[3] + eor r8, r8, r7 + eor r7, r7, r8 // swap state[2] with state[3] --- + eor r9, r9, r12 // --- swap state[4] with state[7] + eor r12, r12, r9 + eor r9, r9, r12 // swap state[4] with state[7] --- + eor r11, r11, r10 // --- swap state[6] with state[5] + eor r10, r10, r11 + eor r11, r11, r10 // swap state[6] with state[5] --- + movw r2, #0x3030 + movt r2, #0x3030 // mask for ininv_mixcolumns + and r4, r2, r5, ror #4 // --- inv_mixcolumns_3 + eor r5, r5, r4, ror #22 + and r4, r2, r5 + eor r5, r5, r4, ror #4 + and r4, r2, r5, ror #4 + eor r5, r5, r4, ror #26 + and r4, r2, r6, ror #4 + eor r6, r6, r4, ror #22 + and r4, r2, r6 + eor r6, r6, r4, ror #4 + and r4, r2, r6, ror #4 + eor r6, r6, r4, ror #26 + and r4, r2, r7, ror #4 + eor r7, r7, r4, ror #22 + and r4, r2, r7 + eor r7, r7, r4, ror #4 + and r4, r2, r7, ror #4 + eor r7, r7, r4, ror #26 + and r4, r2, r8, ror #4 + eor r8, r8, r4, ror #22 + and r4, r2, r8 + eor r8, r8, r4, ror #4 + and r4, r2, r8, ror #4 + eor r8, r8, r4, ror #26 + and r4, r2, r9, ror #4 + eor r9, r9, r4, ror #22 + and r4, r2, r9 + eor r9, r9, r4, ror #4 + and r4, r2, r9, ror #4 + eor r9, r9, r4, ror #26 + and r4, r2, r10, ror #4 + eor r10, r10, r4, ror #22 + and r4, r2, r10 + eor r10, r10, r4, ror #4 + and r4, r2, r10, ror #4 + eor r10, r10, r4, ror #26 + and r4, r2, r11, ror #4 + eor r11, r11, r4, ror #22 + and r4, r2, r11 + eor r11, r11, r4, ror #4 + and r4, r2, r11, ror #4 + eor r11, r11, r4, ror #26 + and r4, r2, r12, ror #4 + eor r12, r12, r4, ror #22 + and r4, r2, r12 + eor r12, r12, r4, ror #4 + and r4, r2, r12, ror #4 + eor r12, r12, r4, ror #26 // inv_mixcolumns_3 --- + ldrd r4, r14, [r1], #-8 // load rtk_2_3 + eor r11, r11, r4 // add rtk_2_3 + rconst + eor r12, r12, r14 // add rtk_2_3 + rconst + ldrd r2, r3, [r1], #-8 // load rtk_2_3 + eor r9, r9, r2 // add rtk_2_3 + rconst + eor r10, r10, r3 // add rtk_2_3 + rconst + ldrd r4, r14, [r1], #-8 // load rtk_2_3 + eor r7, r7, r4 // add rtk_2_3 + rconst + eor r8, r8, r14 // add rtk_2_3 + rconst + ldrd r2, r3, [r1], #-8 // load rtk_2_3 + eor r5, r5, r2 // add rtk_2_3 + rconst + eor r6, r6, r3 // add rtk_2_3 + rconst + ldrd r4, r14, [r0], #-8 // load rtk1 + eor r11, r11, r4 // add rtk1 + eor r12, r12, r14 // add rtk1 + ldrd r2, r3, [r0], #-8 // load rtk1 + eor r9, r9, r2 // add rtk1 + eor r10, r10, r3 // add rtk1 + ldrd r4, r14, [r0], #-8 // load rtk1 + eor r7, r7, r4 // add rtk1 + eor r8, r8, r14 // add rtk1 + ldrd r2, r3, [r0], #-8 // load rtk1 + eor r5, r5, r2 // add rtk1 + eor r6, r6, r3 // add rtk1 + and r4, r12, r10 // state[7] & state[5] + eor r9, r9, r4 // state[4] ^= (state[7] & state[5]) + orn r4, r6, r5 // ~state[0] | state[1] + eor r7, r7, r4 // state[2] ^= (~state[0] | state[1]) + orn r4, r6, r11 // state[1] | ~state[6] + eor r10, r10, r4 // state[5] ^= (state[1] | ~state[6]) + orn r4, r7, r8 // ~state[3] | state[2] + eor r12, r12, r4 // state[7] ^= (~state[3] | state[2]) + and r4, r5, r8 // state[0] & state[3] + eor r6, r6, r4 // state[1] ^= (state[0] & state[3]) + orr r4, r9, r12 // state[7] | state[4] + eor r11, r11, r4 // state[6] ^= (state[7] | state[4]) + orr r4, r7, r9 // state[2] | state[4] + eor r8, r8, r4 // state[3] ^= (state[2] | state[4]) + orr r4, r10, r11 // state[5] | state[6] + eor r5, r5, r4 // state[0] ^= (state[5] | state[6]) + movw r2, #0x3030 + movt r2, #0x3030 // mask for inv_mixcolumns + and r4, r2, r5, ror #26 // --- inv_mixcolumns_2 + eor r5, r5, r4 + and r4, r2, r5, ror #6 + eor r5, r5, r4, ror #6 + and r4, r2, r5, ror #10 + eor r5, r5, r4, ror #4 + and r4, r2, r6, ror #26 + eor r6, r6, r4 + and r4, r2, r6, ror #6 + eor r6, r6, r4, ror #6 + and r4, r2, r6, ror #10 + eor r6, r6, r4, ror #4 + and r4, r2, r7, ror #26 + eor r7, r7, r4 + and r4, r2, r7, ror #6 + eor r7, r7, r4, ror #6 + and r4, r2, r7, ror #10 + eor r7, r7, r4, ror #4 + and r4, r2, r8, ror #26 + eor r8, r8, r4 + and r4, r2, r8, ror #6 + eor r8, r8, r4, ror #6 + and r4, r2, r8, ror #10 + eor r8, r8, r4, ror #4 + and r4, r2, r9, ror #26 + eor r9, r9, r4 + and r4, r2, r9, ror #6 + eor r9, r9, r4, ror #6 + and r4, r2, r9, ror #10 + eor r9, r9, r4, ror #4 + and r4, r2, r10, ror #26 + eor r10, r10, r4 + and r4, r2, r10, ror #6 + eor r10, r10, r4, ror #6 + and r4, r2, r10, ror #10 + eor r10, r10, r4, ror #4 + and r4, r2, r11, ror #26 + eor r11, r11, r4 + and r4, r2, r11, ror #6 + eor r11, r11, r4, ror #6 + and r4, r2, r11, ror #10 + eor r11, r11, r4, ror #4 + and r4, r2, r12, ror #26 + eor r12, r12, r4 + and r4, r2, r12, ror #6 + eor r12, r12, r4, ror #6 + and r4, r2, r12, ror #10 + eor r12, r12, r4, ror #4 // inv_mixcolumns_2 --- + ldrd r4, r14, [r1], #-8 // load rtk_2_3 + eor r11, r11, r4 // add rtk_2_3 + rconst + eor r12, r12, r14 // add rtk_2_3 + rconst + ldrd r2, r3, [r1], #-8 // load rtk_2_3 + eor r9, r9, r2 // add rtk_2_3 + rconst + eor r10, r10, r3 // add rtk_2_3 + rconst + ldrd r4, r14, [r1], #-8 // load rtk_2_3 + eor r7, r7, r4 // add rtk_2_3 + rconst + eor r8, r8, r14 // add rtk_2_3 + rconst + ldrd r2, r3, [r1], #-8 // load rtk_2_3 + eor r5, r5, r2 // add rtk_2_3 + rconst + eor r6, r6, r3 // add rtk_2_3 + rconst + ldrd r4, r14, [r0], #-8 // load rtk1 + eor r11, r11, r4 // add rtk1 + eor r12, r12, r14 // add rtk1 + ldrd r2, r3, [r0], #-8 // load rtk1 + eor r9, r9, r2 // add rtk1 + eor r10, r10, r3 // add rtk1 + ldrd r4, r14, [r0], #-8 // load rtk1 + eor r7, r7, r4 // add rtk1 + eor r8, r8, r14 // add rtk1 + ldrd r2, r3, [r0], #-8 // load rtk1 + eor r5, r5, r2 // add rtk1 + eor r6, r6, r3 // add rtk1 + and r4, r7, r12 // state[2] & state[7] + eor r8, r8, r4 // state[3] ^= (state[2] & state[7]) + orn r4, r10, r11 // ~state[6] | state[5] + eor r5, r5, r4 // state[0] ^= (~state[6] | state[5]) + orn r4, r10, r9 // state[5] | ~state[4] + eor r12, r12, r4 // state[7] ^= (state[5] | ~state[4]) + orn r4, r5, r6 // ~state[1] | state[0] + eor r7, r7, r4 // state[2] ^= (~state[1] | state[0]) + and r4, r6, r11 // state[1] & state[6] + eor r10, r10, r4 // state[5] ^= (state[6] & state[1]) + orr r4, r7, r8 // state[2] | state[3] + eor r9, r9, r4 // state[4] ^= (state[2] | state[3]) + orr r4, r5, r8 // state[0] | state[3] + eor r6, r6, r4 // state[1] ^= (state[0] | state[3]) + orr r4, r12, r9 // state[7] | state[4] + eor r11, r11, r4 // state[6] ^= (state[7] | state[4]) + movw r2, #0x3030 + movt r2, #0x3030 // mask for inv_mixcolumns + and r4, r2, r5, ror #16 // --- inv_mixcolumns_1 + eor r5, r5, r4, ror #2 + and r4, r2, r5, ror #28 + eor r5, r5, r4 + and r4, r2, r5, ror #16 + eor r5, r5, r4, ror #30 + and r4, r2, r6, ror #16 + eor r6, r6, r4, ror #2 + and r4, r2, r6, ror #28 + eor r6, r6, r4 + and r4, r2, r6, ror #16 + eor r6, r6, r4, ror #30 + and r4, r2, r7, ror #16 + eor r7, r7, r4, ror #2 + and r4, r2, r7, ror #28 + eor r7, r7, r4 + and r4, r2, r7, ror #16 + eor r7, r7, r4, ror #30 + and r4, r2, r8, ror #16 + eor r8, r8, r4, ror #2 + and r4, r2, r8, ror #28 + eor r8, r8, r4 + and r4, r2, r8, ror #16 + eor r8, r8, r4, ror #30 + and r4, r2, r9, ror #16 + eor r9, r9, r4, ror #2 + and r4, r2, r9, ror #28 + eor r9, r9, r4 + and r4, r2, r9, ror #16 + eor r9, r9, r4, ror #30 + and r4, r2, r10, ror #16 + eor r10, r10, r4, ror #2 + and r4, r2, r10, ror #28 + eor r10, r10, r4 + and r4, r2, r10, ror #16 + eor r10, r10, r4, ror #30 + and r4, r2, r11, ror #16 + eor r11, r11, r4, ror #2 + and r4, r2, r11, ror #28 + eor r11, r11, r4 + and r4, r2, r11, ror #16 + eor r11, r11, r4, ror #30 + and r4, r2, r12, ror #16 + eor r12, r12, r4, ror #2 + and r4, r2, r12, ror #28 + eor r12, r12, r4 + and r4, r2, r12, ror #16 + eor r12, r12, r4, ror #30 // inv_mixcolumns_1 --- + ldrd r4, r14, [r1], #-8 // load rtk_2_3 + eor r11, r11, r4 // add rtk_2_3 + rconst + eor r12, r12, r14 // add rtk_2_3 + rconst + ldrd r2, r3, [r1], #-8 // load rtk_2_3 + eor r9, r9, r2 // add rtk_2_3 + rconst + eor r10, r10, r3 // add rtk_2_3 + rconst + ldrd r4, r14, [r1], #-8 // load rtk_2_3 + eor r7, r7, r4 // add rtk_2_3 + rconst + eor r8, r8, r14 // add rtk_2_3 + rconst + ldrd r2, r3, [r1], #-8 // load rtk_2_3 + eor r5, r5, r2 // add rtk_2_3 + rconst + eor r6, r6, r3 // add rtk_2_3 + rconst + ldrd r4, r14, [r0], #-8 // load rtk1 + eor r11, r11, r4 // add rtk1 + eor r12, r12, r14 // add rtk1 + ldrd r2, r3, [r0], #-8 // load rtk1 + eor r9, r9, r2 // add rtk1 + eor r10, r10, r3 // add rtk1 + ldrd r4, r14, [r0], #-8 // load rtk1 + eor r7, r7, r4 // add rtk1 + eor r8, r8, r14 // add rtk1 + ldrd r2, r3, [r0], #-8 // load rtk1 + eor r5, r5, r2 // add rtk1 + eor r6, r6, r3 // add rtk1 + and r4, r5, r7 // state[0] & state[2] + eor r6, r6, r4 // state[1] ^= (state[0] & state[2]) + orn r4, r12, r9 // state[7] | ~state[4] + eor r11, r11, r4 // state[6] ^= (~state[4] | state[7]) + orn r4, r12, r8 // state[7] | ~state[3] + eor r7, r7, r4 // state[2] ^= (state[7] | ~state[3]) + orn r4, r11, r10 // ~state[5] | state[6] + eor r5, r5, r4 // state[0] ^= (~state[5] | state[6]) + and r4, r9, r10 // state[4] & state[5] + eor r12, r12, r4 // state[7] ^= (state[4] & state[5]) + orr r4, r5, r6 // state[0] | state[1] + eor r8, r8, r4 // state[3] ^= (state[0] | state[1]) + orr r4, r6, r11 // state[1] | state[6] + eor r10, r10, r4 // state[5] ^= (state[6] | state[1]) + orr r4, r7, r8 // state[2] | state[3] + eor r9, r9, r4 // state[4] ^= (state[2] | state[3]) + movw r2, #0x3030 + movt r2, #0x3030 // mask for inv_mixcolumns + and r4, r2, r5, ror #6 // --- inv_mixcolumns_0 + eor r5, r5, r4, ror #4 + and r4, r2, r5, ror #18 + eor r5, r5, r4, ror #2 + and r4, r2, r5, ror #30 + eor r5, r5, r4, ror #24 + and r4, r2, r6, ror #6 + eor r6, r6, r4, ror #4 + and r4, r2, r6, ror #18 + eor r6, r6, r4, ror #2 + and r4, r2, r6, ror #30 + eor r6, r6, r4, ror #24 + and r4, r2, r7, ror #6 + eor r7, r7, r4, ror #4 + and r4, r2, r7, ror #18 + eor r7, r7, r4, ror #2 + and r4, r2, r7, ror #30 + eor r7, r7, r4, ror #24 + and r4, r2, r8, ror #6 + eor r8, r8, r4, ror #4 + and r4, r2, r8, ror #18 + eor r8, r8, r4, ror #2 + and r4, r2, r8, ror #30 + eor r8, r8, r4, ror #24 + and r4, r2, r9, ror #6 + eor r9, r9, r4, ror #4 + and r4, r2, r9, ror #18 + eor r9, r9, r4, ror #2 + and r4, r2, r9, ror #30 + eor r9, r9, r4, ror #24 + and r4, r2, r10, ror #6 + eor r10, r10, r4, ror #4 + and r4, r2, r10, ror #18 + eor r10, r10, r4, ror #2 + and r4, r2, r10, ror #30 + eor r10, r10, r4, ror #24 + and r4, r2, r11, ror #6 + eor r11, r11, r4, ror #4 + and r4, r2, r11, ror #18 + eor r11, r11, r4, ror #2 + and r4, r2, r11, ror #30 + eor r11, r11, r4, ror #24 + and r4, r2, r12, ror #6 + eor r12, r12, r4, ror #4 + and r4, r2, r12, ror #18 + eor r12, r12, r4, ror #2 + and r4, r2, r12, ror #30 + eor r12, r12, r4, ror #24 + ldrd r4, r14, [r1], #-8 // load rtk_2_3 + eor r11, r11, r4 // add rtk_2_3 + rconst + eor r12, r12, r14 // add rtk_2_3 + rconst + ldrd r2, r3, [r1], #-8 // load rtk_2_3 + eor r9, r9, r2 // add rtk_2_3 + rconst + eor r10, r10, r3 // add rtk_2_3 + rconst + ldrd r4, r14, [r1], #-8 // load rtk_2_3 + eor r7, r7, r4 // add rtk_2_3 + rconst + eor r8, r8, r14 // add rtk_2_3 + rconst + ldrd r2, r3, [r1], #-8 // load rtk_2_3 + eor r5, r5, r2 // add rtk_2_3 + rconst + eor r6, r6, r3 // add rtk_2_3 + rconst + ldrd r4, r14, [r0], #-8 // load rtk1 + eor r11, r11, r4 // add rtk1 + eor r12, r12, r14 // add rtk1 + ldrd r2, r3, [r0], #-8 // load rtk1 + eor r9, r9, r2 // add rtk1 + eor r10, r10, r3 // add rtk1 + ldrd r4, r14, [r0], #-8 // load rtk1 + eor r7, r7, r4 // add rtk1 + eor r8, r8, r14 // add rtk1 + ldrd r2, r3, [r0], #-8 // load rtk1 + eor r5, r5, r2 // add rtk1 + eor r6, r6, r3 // add rtk1 + ldr.w r14, [sp] // restore link register + and r4, r5, r11 // state[0] & state[6] + eor r10, r10, r4 // state[5] ^= (state[6] & state[0]) + orn r4, r7, r8 // ~state[3] | state[2] + eor r9, r9, r4 // state[4] ^= (~state[3] | state[2]) + orn r4, r7, r6 // state[2] | ~state[1] + eor r5, r5, r4 // state[0] ^= (state[2] | ~state[1]) + orn r4, r9, r12 // ~state[7] | state[4] + eor r11, r11, r4 // state[6] ^= (~state[7] | state[4]) + and r4, r8, r12 // state[3] & state[7] + eor r7, r7, r4 // state[2] ^= (state[3] & state[7]) + orr r4, r11, r10 // state[6] | state[5] + eor r6, r6, r4 // state[1] ^= (state[6] | state[5]) + orr r4, r9, r10 // state[4] | state[5] + eor r12, r12, r4 // state[7] ^= (state[4] | state[5]) + orr r4, r5, r6 // state[0] | state[1] + eor r8, r8, r4 // state[3] ^= (state[0] | state[1]) + bx lr + +/****************************************************************************** +* Compute the SKINNY block cipher on a single block in a fixsliced manner. +******************************************************************************/ +@ void skinny128_384(u8* ctext, u8* ctext_bis, const u8* ptext, +@ const u8* ptext_bis, const u32* rtk_1, const u32* rtk_2_3) +.global skinny128_384 +.type skinny128_384,%function +.align 2 +skinny128_384: + push {r0-r12, r14} + sub.w sp, #4 // to store r14 during subroutines + ldm r2, {r5,r7,r9,r11} // load the 2nd block in r6,r8,r10,r12 + ldm r3, {r6,r8,r10,r12} // load the 2nd block in r6,r8,r10,r12 + movw r2, #0x5555 + movt r2, #0x5555 //r2 <- 0x55555555 + movw r3, #0x3030 + movt r3, #0x3030 //r3 <- 0x30303030 + bl packing + ldrd r0, r1, [sp, #60] // get rtk addr (1st stack argument) + bl quadruple_round + bl quadruple_round + bl quadruple_round + bl quadruple_round + sub.w r0, #512 + bl quadruple_round + bl quadruple_round + bl quadruple_round + bl quadruple_round + sub.w r0, #512 + bl quadruple_round + bl quadruple_round + bl unpacking + ldrd r0, r1, [sp, #4] + add.w sp, #12 + stm r0, {r5, r7, r9, r11} // store the 1st enc block in [r0] + stm r1, {r6, r8, r10, r12} // store the 2nd enc block in [r1] + pop {r2-r12, r14} + bx lr + +/****************************************************************************** +* Compute the SKINNY block cipher on a single block in a fixsliced manner. +******************************************************************************/ +@ void skinny128_384_inv(u8* ptext, u8* ptext_bis, const u8* ctext, +@ const u8* ctext_bis, const u32* rtk_1, const u32* rtk_2_3) +.global skinny128_384_inv +.type skinny128_384_inv,%function +.align 2 +skinny128_384_inv: + push {r0-r12, r14} + sub.w sp, #4 // to store r14 during subroutines + ldm r2, {r5,r7,r9,r11} // load the 2nd block in r6,r8,r10,r12 + ldm r3, {r6,r8,r10,r12} // load the 2nd block in r6,r8,r10,r12 + movw r2, #0x5555 + movt r2, #0x5555 //r2 <- 0x55555555 + movw r3, #0x3030 + movt r3, #0x3030 //r3 <- 0x30303030 + bl packing + ldrd r0, r1, [sp, #60] // get rtk addr (1st stack argument) + add.w r0, #248 // points to the last rtk1 + add.w r1, #1272 // points to the last rtk2_3 + bl inv_quadruple_round + bl inv_quadruple_round + add.w r0, #512 + bl inv_quadruple_round + bl inv_quadruple_round + bl inv_quadruple_round + bl inv_quadruple_round + add.w r0, #512 + bl inv_quadruple_round + bl inv_quadruple_round + bl inv_quadruple_round + bl inv_quadruple_round + bl unpacking + ldrd r0, r1, [sp, #4] + add.w sp, #12 + stm r0, {r5, r7, r9, r11} // store the 1st enc block in [r0] + stm r1, {r6, r8, r10, r12} // store the 2nd enc block in [r1] + pop {r2-r12,r14} + bx lr diff --git a/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/armcortexm_2/skinnyaead.h b/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/armcortexm_2/skinnyaead.h new file mode 100644 index 0000000..e41c204 --- /dev/null +++ b/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/armcortexm_2/skinnyaead.h @@ -0,0 +1,40 @@ +#ifndef SKINNYAEADM1_H_ +#define SKINNYAEADM1_H_ + +#include "skinny128.h" + +typedef unsigned char u8; +typedef unsigned int u32; +typedef unsigned long long u64; + +#define TAGBYTES 16 +#define KEYBYTES 16 +#define BLOCKBYTES 16 + +#define SET_DOMAIN(ptr, domain) ((ptr)[15] = (domain)) + +#define UPDATE_LFSR(lfsr) ({ \ + feedback = ((lfsr) & (1ULL << 63)) ? 0x1B : 0x00; \ + (lfsr) = ((lfsr) << 1) ^ feedback; \ +}) + +#define LE_STR_64(ptr, x) ({ \ + (ptr)[0] = (u8)(x); \ + (ptr)[1] = (u8)((x) >> 8); \ + (ptr)[2] = (u8)((x) >> 16); \ + (ptr)[3] = (u8)((x) >> 24); \ + (ptr)[4] = (u8)((x) >> 32); \ + (ptr)[5] = (u8)((x) >> 40); \ + (ptr)[6] = (u8)((x) >> 48); \ + (ptr)[7] = (u8)((x) >> 56); \ +}) + +//x ^= y with x, y 128-bit blocks +#define XOR_BLOCK(x,y) ({ \ + ((u32*)(x))[0] ^= ((u32*)(y))[0]; \ + ((u32*)(x))[1] ^= ((u32*)(y))[1]; \ + ((u32*)(x))[2] ^= ((u32*)(y))[2]; \ + ((u32*)(x))[3] ^= ((u32*)(y))[3]; \ +}) + +#endif // SKINNYAEADM1_H_ \ No newline at end of file diff --git a/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_1/api.h b/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_1/api.h new file mode 100644 index 0000000..a4aa567 --- /dev/null +++ b/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_1/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/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_1/crypto_aead.h b/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_1/crypto_aead.h new file mode 100644 index 0000000..e2ca9b0 --- /dev/null +++ b/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_1/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 +); \ No newline at end of file diff --git a/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_1/encrypt.c b/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_1/encrypt.c new file mode 100644 index 0000000..4a1b26e --- /dev/null +++ b/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_1/encrypt.c @@ -0,0 +1,197 @@ +/****************************************************************************** +* Constant-time implementation of SKINNY-AEAD-M1 (v1.1). +* +* Two blocks are treated in parallel with SKINNY-128-384 whenever possible. +* +* For more details, see the paper at: https:// +* +* @author Alexandre Adomnicai, Nanyang Technological University, +* alexandre.adomnicai@ntu.edu.sg +* +* @date May 2020 +******************************************************************************/ +#include "skinny128.h" +#include "skinnyaead.h" +#include +#include + +/****************************************************************************** +* x ^= y where x, y are 128-bit blocks (16 bytes array). +******************************************************************************/ +static void xor_block(u8 * x, const u8* y) { + for(int i = 0; i < BLOCKBYTES; i++) + x[i] ^= y[i]; +} + +/****************************************************************************** +* Encryption and authentication using SKINNY-AEAD-M1 +******************************************************************************/ +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) { + u64 i,lfsr = 1; + u8 feedback; + u32 rtk1[4*16]; + u32 rtk2_3[4*SKINNY128_384_ROUNDS]; + u8 tmp[2*BLOCKBYTES], auth[BLOCKBYTES]; + (void)nsec; + + // ----------------- Initialization ----------------- + *clen = mlen + TAGBYTES; + precompute_rtk2_3(rtk2_3, npub, k); + memset(tmp, 0x00, 2*BLOCKBYTES); + memset(auth, 0x00, BLOCKBYTES); + memset(c + mlen, 0x00, BLOCKBYTES); + // ----------------- Initialization ----------------- + + // ----------------- Process the plaintext ----------------- + while (mlen >= BLOCKBYTES) { // while entire blocks to process + LE_STR_64(tmp, lfsr); + precompute_rtk1(rtk1, tmp); // precompute RTK1 given the LFSR + skinny128_384_plus_encrypt(c, m, rtk1, rtk2_3); + xor_block(c + mlen, m); // sum for tag computation + mlen -= BLOCKBYTES; + c += BLOCKBYTES; + m += BLOCKBYTES; + UPDATE_LFSR(lfsr); // update lfsr for next block + } + SET_DOMAIN(tmp, 0x04); // domain for tag computation + if (mlen > 0) { // last block is partial + LE_STR_64(tmp, lfsr); // lfsr for last block + SET_DOMAIN(tmp, 0x01); // domain for padding + for(i = 0; i < mlen; i++) + c[mlen + i] ^= m[i]; // sum for tag computation + c[mlen + i] ^= 0x80; // padding + precompute_rtk1(rtk1, tmp); + skinny128_384_plus_encrypt(auth, auth, rtk1, rtk2_3); + for(i = 0; i < mlen; i++) + c[i] = auth[i] ^ m[i]; // encrypted padded block + c += mlen; + SET_DOMAIN(tmp, 0x05); // domain for tag computation + UPDATE_LFSR(lfsr); + } + LE_STR_64(tmp, lfsr); // lfsr for tag computation + precompute_rtk1(rtk1, tmp); + skinny128_384_plus_encrypt(c, c, rtk1, rtk2_3); // compute the tag + // ----------------- Process the plaintext ----------------- + + // ----------------- Process the associated data ----------------- + lfsr = 1; + SET_DOMAIN(tmp, 0x02); + memset(auth, 0x00, BLOCKBYTES); + while (adlen >= BLOCKBYTES) { + LE_STR_64(tmp, lfsr); + precompute_rtk1(rtk1, tmp); + skinny128_384_plus_encrypt(tmp + BLOCKBYTES, ad, rtk1, rtk2_3); + xor_block(auth, tmp + BLOCKBYTES); + adlen -= BLOCKBYTES; + ad += BLOCKBYTES; + UPDATE_LFSR(lfsr); + } + if (adlen > 0) { + LE_STR_64(tmp, lfsr); + SET_DOMAIN(tmp, 0x03); // domain for padding ad + precompute_rtk1(rtk1, tmp); + memset(tmp, 0x00, BLOCKBYTES); // padding + memcpy(tmp, ad, adlen); // padding + tmp[adlen] ^= 0x80; // padding + skinny128_384_plus_encrypt(tmp, tmp, rtk1, rtk2_3); + xor_block(auth, tmp); + } + xor_block(c, auth); // XOR for tag computation + // ----------------- Process the associated data ----------------- + return 0; +} + +/****************************************************************************** +* Encryption and authentication using SKINNY-AEAD-M1 +******************************************************************************/ +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) { + u64 i,lfsr = 1; + u8 feedback; + u32 rtk1[4*16]; + u32 rtk2_3[4*SKINNY128_384_ROUNDS]; + u8 tmp[2*BLOCKBYTES], auth[BLOCKBYTES], sum[BLOCKBYTES]; + (void)nsec; + + if (clen < TAGBYTES) + return -1; + + // ----------------- Initialization ----------------- + clen -= TAGBYTES; + *mlen = clen; + precompute_rtk2_3(rtk2_3, npub, k); + memset(tmp, 0x00, 2*BLOCKBYTES); + memset(auth, 0x00, BLOCKBYTES); + memset(sum, 0x00, BLOCKBYTES); + // ----------------- Initialization ----------------- + + // ----------------- Process the plaintext ----------------- + while (clen >= BLOCKBYTES) { // while entire blocks to process + LE_STR_64(tmp, lfsr); + precompute_rtk1(rtk1, tmp); // precompute RTK1 given the LFSR + skinny128_384_plus_decrypt(m, c, rtk1, rtk2_3); + xor_block(sum, m); // sum for tag computation + clen -= BLOCKBYTES; + c += BLOCKBYTES; + m += BLOCKBYTES; + UPDATE_LFSR(lfsr); // update LFSR for the next block + } + SET_DOMAIN(tmp, 0x04); // domain for tag computation + if (clen > 0) { // last block is partial + LE_STR_64(tmp, lfsr); // lfsr for last block + SET_DOMAIN(tmp, 0x01); // domain for padding + precompute_rtk1(rtk1, tmp); + skinny128_384_plus_encrypt(auth, auth, rtk1, rtk2_3); + for(i = 0; i < clen; i++) { + m[i] = auth[i] ^ c[i]; // encrypted padded block + sum[i] ^= m[i]; // sum for tag computation + } + sum[i] ^= 0x80; // padding + c += clen; + SET_DOMAIN(tmp, 0x05); // domain for tag computation + UPDATE_LFSR(lfsr); + } + LE_STR_64(tmp, lfsr); // lfsr for tag computation + precompute_rtk1(rtk1, tmp); + skinny128_384_plus_encrypt(sum, sum, rtk1, rtk2_3); // compute the tag + // ----------------- Process the plaintext ----------------- + + // ----------------- Process the associated data ----------------- + lfsr = 1; + SET_DOMAIN(tmp, 0x02); + memset(auth, 0x00, BLOCKBYTES); + while (adlen >= BLOCKBYTES) { + LE_STR_64(tmp, lfsr); + precompute_rtk1(rtk1, tmp); + skinny128_384_plus_encrypt(tmp + BLOCKBYTES, ad, rtk1, rtk2_3); + xor_block(auth, tmp + BLOCKBYTES); + adlen -= BLOCKBYTES; + ad += BLOCKBYTES; + UPDATE_LFSR(lfsr); + } + if (adlen > 0) { + LE_STR_64(tmp, lfsr); + SET_DOMAIN(tmp, 0x03); // domain for padding ad + precompute_rtk1(rtk1, tmp); + memset(tmp, 0x00, BLOCKBYTES); // padding + memcpy(tmp, ad, adlen); // padding + tmp[adlen] ^= 0x80; // padding + skinny128_384_plus_encrypt(tmp, tmp, rtk1, rtk2_3); + xor_block(auth, tmp); + } + xor_block(sum, auth); // XOR for tag computation + feedback = 0; + for(i = 0; i < TAGBYTES; i++) + feedback |= sum[i] ^ c[i]; // constant-time tag verification + return feedback; + // ----------------- Process the associated data ----------------- +} \ No newline at end of file diff --git a/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_1/skinny128.c b/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_1/skinny128.c new file mode 100644 index 0000000..2082889 --- /dev/null +++ b/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_1/skinny128.c @@ -0,0 +1,190 @@ +/****************************************************************************** +* Constant-time implementation of the SKINNY tweakable block ciphers. +* +* This implementation doesn't compute the ShiftRows operation. Some masks and +* shifts are applied during the MixColumns operation so that the proper bits +* are XORed together. Moreover, the row permutation within the MixColumns +* is omitted, as well as the bit permutation at the end of the Sbox. The rows +* are synchronized with the classical after only 4 rounds. Therefore, this +* implementation relies on a "QUADRUPLE_ROUND" routine. +* +* The Sbox computation takes advantage of some symmetry in the 8-bit Sbox to +* turn it into a 4-bit S-box computation. Although the last bit permutation +* within the Sbox is not computed, the bit ordering is synchronized with the +* classical representation after 2 calls. +* +* @author Alexandre Adomnicai, Nanyang Technological University, +* alexandre.adomnicai@ntu.edu.sg +* +* @date May 2020 +******************************************************************************/ +#include +#include +#include "skinny128.h" +#include "tk_schedule.h" + +/****************************************************************************** +* The MixColumns computation for rounds i such that (i % 4) == 0 +******************************************************************************/ +void mixcolumns_0(u32* state) { + u32 tmp; + for(int i = 0; i < 4; i++) { + tmp = ROR(state[i],24) & 0x0c0c0c0c; + state[i] ^= ROR(tmp,30); + tmp = ROR(state[i],16) & 0xc0c0c0c0; + state[i] ^= ROR(tmp,4); + tmp = ROR(state[i],8) & 0x0c0c0c0c; + state[i] ^= ROR(tmp,2); + } +} + +/****************************************************************************** +* The MixColumns computation for rounds i such that (i % 4) == 1 +******************************************************************************/ +void mixcolumns_1(u32* state) { + u32 tmp; + for(int i = 0; i < 4; i++) { + tmp = ROR(state[i],16) & 0x30303030; + state[i] ^= ROR(tmp,30); + tmp = state[i] & 0x03030303; + state[i] ^= ROR(tmp,28); + tmp = ROR(state[i],16) & 0x30303030; + state[i] ^= ROR(tmp,2); + } +} + +/****************************************************************************** +* The MixColumns computation for rounds i such that (i % 4) == 2 +******************************************************************************/ +void mixcolumns_2(u32* state) { + u32 tmp; + for(int i = 0; i < 4; i++) { + tmp = ROR(state[i],8) & 0xc0c0c0c0; + state[i] ^= ROR(tmp,6); + tmp = ROR(state[i],16) & 0x0c0c0c0c; + state[i] ^= ROR(tmp,28); + tmp = ROR(state[i],24) & 0xc0c0c0c0; + state[i] ^= ROR(tmp,2); + } +} + +/****************************************************************************** +* The MixColumns computation for rounds i such that (i % 4) == 3 +******************************************************************************/ +void mixcolumns_3(u32* state) { + u32 tmp; + for(int i = 0; i < 4; i++) { + tmp = state[i] & 0x03030303; + state[i] ^= ROR(tmp,30); + tmp = state[i] & 0x30303030; + state[i] ^= ROR(tmp,4); + tmp = state[i] & 0x03030303; + state[i] ^= ROR(tmp,26); + } +} + +/****************************************************************************** +* The inverse MixColumns operation for rounds i such that (i % 4) == 0 +******************************************************************************/ +void inv_mixcolumns_0(u32* state) { + u32 tmp; + for(int i = 0; i < 4; i++) { + tmp = ROR(state[i],8) & 0x0c0c0c0c; + state[i] ^= ROR(tmp,2); + tmp = ROR(state[i],16) & 0xc0c0c0c0; + state[i] ^= ROR(tmp,4); + tmp = ROR(state[i],24) & 0x0c0c0c0c; + state[i] ^= ROR(tmp,30); + } +} + +/****************************************************************************** +* The inverse MixColumns operation for rounds i such that (i % 4) == 0 +******************************************************************************/ +void inv_mixcolumns_1(u32* state) { + u32 tmp; + for(int i = 0; i < 4; i++) { + tmp = ROR(state[i],16) & 0x30303030; + state[i] ^= ROR(tmp,2); + tmp = state[i] & 0x03030303; + state[i] ^= ROR(tmp,28); + tmp = ROR(state[i],16) & 0x30303030; + state[i] ^= ROR(tmp,30); + } +} + +/****************************************************************************** +* The inverse MixColumns operation for rounds i such that (i % 4) == 0 +******************************************************************************/ +void inv_mixcolumns_2(u32* state) { + u32 tmp; + for(int i = 0; i < 4; i++) { + tmp = ROR(state[i],24) & 0xc0c0c0c0; + state[i] ^= ROR(tmp,2); + tmp = ROR(state[i],16) & 0x0c0c0c0c; + state[i] ^= ROR(tmp,28); + tmp = ROR(state[i],8) & 0xc0c0c0c0; + state[i] ^= ROR(tmp,6); + } +} + +/****************************************************************************** +* The inverse MixColumns operation for rounds i such that (i % 4) == 0 +******************************************************************************/ +void inv_mixcolumns_3(u32* state) { + u32 tmp; + for(int i = 0; i < 4; i++) { + tmp = state[i] & 0x03030303; + state[i] ^= ROR(tmp,26); + tmp = state[i] & 0x30303030; + state[i] ^= ROR(tmp,4); + tmp = state[i] & 0x03030303; + state[i] ^= ROR(tmp,30); + } +} + +/****************************************************************************** +* Encryption of a single block without any operation mode using SKINNY-128-384. +* RTK1 and RTK2_3 are given separately to take advantage of the fact that +* TK2 and TK3 remains the same through the entire data encryption/decryption. +******************************************************************************/ +void skinny128_384_plus_encrypt(u8* ctext, const u8* ptext, const u32* rtk1, + const u32* rtk2_3) { + u32 tmp; // used in SWAPMOVE macro + u32 state[4]; // 128-bit state + packing(state, ptext); // from byte to bitsliced representation + QUADRUPLE_ROUND(state, rtk1, rtk2_3); + QUADRUPLE_ROUND(state, rtk1+16, rtk2_3+16); + QUADRUPLE_ROUND(state, rtk1+32, rtk2_3+32); + QUADRUPLE_ROUND(state, rtk1+48, rtk2_3+48); + QUADRUPLE_ROUND(state, rtk1, rtk2_3+64); + QUADRUPLE_ROUND(state, rtk1+16, rtk2_3+80); + QUADRUPLE_ROUND(state, rtk1+32, rtk2_3+96); + QUADRUPLE_ROUND(state, rtk1+48, rtk2_3+112); + QUADRUPLE_ROUND(state, rtk1, rtk2_3+128); + QUADRUPLE_ROUND(state, rtk1+16, rtk2_3+144); + unpacking(ctext, state); // from bitsliced to byte representation +} + +/****************************************************************************** +* Decryption of a single block without any operation mode using SKINNY-128-384. +* RTK1 and RTK2_3 are given separately to take advantage of the fact that +* TK2 and TK3 remains the same through the entire data encryption/decryption. +******************************************************************************/ +void skinny128_384_plus_decrypt(u8* ctext, const u8* ptext, const u32* rtk1, + const u32* rtk2_3) { + u32 tmp; // used in SWAPMOVE macro + u32 state[4]; // 128-bit state + packing(state, ptext); // from byte to bitsliced representation + INV_QUADRUPLE_ROUND(state, rtk1+16, rtk2_3+144); + INV_QUADRUPLE_ROUND(state, rtk1, rtk2_3+128); + INV_QUADRUPLE_ROUND(state, rtk1+48, rtk2_3+112); + INV_QUADRUPLE_ROUND(state, rtk1+32, rtk2_3+96); + INV_QUADRUPLE_ROUND(state, rtk1+16, rtk2_3+80); + INV_QUADRUPLE_ROUND(state, rtk1, rtk2_3+64); + INV_QUADRUPLE_ROUND(state, rtk1+48, rtk2_3+48); + INV_QUADRUPLE_ROUND(state, rtk1+32, rtk2_3+32); + INV_QUADRUPLE_ROUND(state, rtk1+16, rtk2_3+16); + INV_QUADRUPLE_ROUND(state, rtk1, rtk2_3); + unpacking(ctext, state); // from bitsliced to byte representation +} \ No newline at end of file diff --git a/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_1/skinny128.h b/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_1/skinny128.h new file mode 100644 index 0000000..28316ec --- /dev/null +++ b/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_1/skinny128.h @@ -0,0 +1,177 @@ +#ifndef SKINNY128_H_ +#define SKINNY128_H_ + +#include "tk_schedule.h" + +void skinny128_384_plus_encrypt(u8* ctext, const u8* ptext, const u32* rtk1, const u32* rtk2_3); +void skinny128_384_plus_decrypt(u8* ctext, const u8* ptext, const u32* rtk1, const u32* rtk2_3); + +#define SKINNY128_384_ROUNDS 40 + +#define QUADRUPLE_ROUND(state, rtk1, rtk2_3) ({ \ + state[3] ^= ~(state[0] | state[1]); \ + SWAPMOVE(state[2], state[1], 0x55555555, 1); \ + SWAPMOVE(state[3], state[2], 0x55555555, 1); \ + state[1] ^= ~(state[2] | state[3]); \ + SWAPMOVE(state[1], state[0], 0x55555555, 1); \ + SWAPMOVE(state[0], state[3], 0x55555555, 1); \ + state[3] ^= ~(state[0] | state[1]); \ + SWAPMOVE(state[2], state[1], 0x55555555, 1); \ + SWAPMOVE(state[3], state[2], 0x55555555, 1); \ + state[1] ^= (state[2] | state[3]); \ + SWAPMOVE(state[3], state[0], 0x55555555, 0); \ + state[0] ^= (rtk1)[0]; \ + state[1] ^= (rtk1)[1]; \ + state[2] ^= (rtk1)[2]; \ + state[3] ^= (rtk1)[3]; \ + state[0] ^= (rtk2_3)[0]; \ + state[1] ^= (rtk2_3)[1]; \ + state[2] ^= (rtk2_3)[2]; \ + state[3] ^= (rtk2_3)[3]; \ + mixcolumns_0(state); \ + state[1] ^= ~(state[2] | state[3]); \ + SWAPMOVE(state[1], state[0], 0x55555555, 1); \ + SWAPMOVE(state[0], state[3], 0x55555555, 1); \ + state[3] ^= ~(state[0] | state[1]); \ + SWAPMOVE(state[2], state[1], 0x55555555, 1); \ + SWAPMOVE(state[3], state[2], 0x55555555, 1); \ + state[1] ^= ~(state[2] | state[3]); \ + SWAPMOVE(state[1], state[0], 0x55555555, 1); \ + SWAPMOVE(state[0], state[3], 0x55555555, 1); \ + state[3] ^= (state[0] | state[1]); \ + SWAPMOVE(state[1], state[2], 0x55555555, 0); \ + state[0] ^= (rtk1)[4]; \ + state[1] ^= (rtk1)[5]; \ + state[2] ^= (rtk1)[6]; \ + state[3] ^= (rtk1)[7]; \ + state[0] ^= (rtk2_3)[4]; \ + state[1] ^= (rtk2_3)[5]; \ + state[2] ^= (rtk2_3)[6]; \ + state[3] ^= (rtk2_3)[7]; \ + mixcolumns_1(state); \ + state[3] ^= ~(state[0] | state[1]); \ + SWAPMOVE(state[2], state[1], 0x55555555, 1); \ + SWAPMOVE(state[3], state[2], 0x55555555, 1); \ + state[1] ^= ~(state[2] | state[3]); \ + SWAPMOVE(state[1], state[0], 0x55555555, 1); \ + SWAPMOVE(state[0], state[3], 0x55555555, 1); \ + state[3] ^= ~(state[0] | state[1]); \ + SWAPMOVE(state[2], state[1], 0x55555555, 1); \ + SWAPMOVE(state[3], state[2], 0x55555555, 1); \ + state[1] ^= (state[2] | state[3]); \ + SWAPMOVE(state[3], state[0], 0x55555555, 0); \ + state[0] ^= (rtk1)[8]; \ + state[1] ^= (rtk1)[9]; \ + state[2] ^= (rtk1)[10]; \ + state[3] ^= (rtk1)[11]; \ + state[0] ^= (rtk2_3)[8]; \ + state[1] ^= (rtk2_3)[9]; \ + state[2] ^= (rtk2_3)[10]; \ + state[3] ^= (rtk2_3)[11]; \ + mixcolumns_2(state); \ + state[1] ^= ~(state[2] | state[3]); \ + SWAPMOVE(state[1], state[0], 0x55555555, 1); \ + SWAPMOVE(state[0], state[3], 0x55555555, 1); \ + state[3] ^= ~(state[0] | state[1]); \ + SWAPMOVE(state[2], state[1], 0x55555555, 1); \ + SWAPMOVE(state[3], state[2], 0x55555555, 1); \ + state[1] ^= ~(state[2] | state[3]); \ + SWAPMOVE(state[1], state[0], 0x55555555, 1); \ + SWAPMOVE(state[0], state[3], 0x55555555, 1); \ + state[3] ^= (state[0] | state[1]); \ + SWAPMOVE(state[1], state[2], 0x55555555, 0); \ + state[0] ^= (rtk1)[12]; \ + state[1] ^= (rtk1)[13]; \ + state[2] ^= (rtk1)[14]; \ + state[3] ^= (rtk1)[15]; \ + state[0] ^= (rtk2_3)[12]; \ + state[1] ^= (rtk2_3)[13]; \ + state[2] ^= (rtk2_3)[14]; \ + state[3] ^= (rtk2_3)[15]; \ + mixcolumns_3(state); \ +}) + +#define INV_QUADRUPLE_ROUND(state, rtk1, rtk2_3) ({ \ + inv_mixcolumns_3(state); \ + state[0] ^= (rtk1)[12]; \ + state[1] ^= (rtk1)[13]; \ + state[2] ^= (rtk1)[14]; \ + state[3] ^= (rtk1)[15]; \ + state[0] ^= (rtk2_3)[12]; \ + state[1] ^= (rtk2_3)[13]; \ + state[2] ^= (rtk2_3)[14]; \ + state[3] ^= (rtk2_3)[15]; \ + SWAPMOVE(state[1], state[2], 0x55555555, 0); \ + state[3] ^= (state[0] | state[1]); \ + SWAPMOVE(state[0], state[3], 0x55555555, 1); \ + SWAPMOVE(state[1], state[0], 0x55555555, 1); \ + state[1] ^= ~(state[2] | state[3]); \ + SWAPMOVE(state[3], state[2], 0x55555555, 1); \ + SWAPMOVE(state[2], state[1], 0x55555555, 1); \ + state[3] ^= ~(state[0] | state[1]); \ + SWAPMOVE(state[0], state[3], 0x55555555, 1); \ + SWAPMOVE(state[1], state[0], 0x55555555, 1); \ + state[1] ^= ~(state[2] | state[3]); \ + inv_mixcolumns_2(state); \ + state[0] ^= (rtk1)[8]; \ + state[1] ^= (rtk1)[9]; \ + state[2] ^= (rtk1)[10]; \ + state[3] ^= (rtk1)[11]; \ + state[0] ^= (rtk2_3)[8]; \ + state[1] ^= (rtk2_3)[9]; \ + state[2] ^= (rtk2_3)[10]; \ + state[3] ^= (rtk2_3)[11]; \ + SWAPMOVE(state[3], state[0], 0x55555555, 0); \ + state[1] ^= (state[2] | state[3]); \ + SWAPMOVE(state[3], state[2], 0x55555555, 1); \ + SWAPMOVE(state[2], state[1], 0x55555555, 1); \ + state[3] ^= ~(state[0] | state[1]); \ + SWAPMOVE(state[0], state[3], 0x55555555, 1); \ + SWAPMOVE(state[1], state[0], 0x55555555, 1); \ + state[1] ^= ~(state[2] | state[3]); \ + SWAPMOVE(state[3], state[2], 0x55555555, 1); \ + SWAPMOVE(state[2], state[1], 0x55555555, 1); \ + state[3] ^= ~(state[0] | state[1]); \ + inv_mixcolumns_1(state); \ + state[0] ^= (rtk1)[4]; \ + state[1] ^= (rtk1)[5]; \ + state[2] ^= (rtk1)[6]; \ + state[3] ^= (rtk1)[7]; \ + state[0] ^= (rtk2_3)[4]; \ + state[1] ^= (rtk2_3)[5]; \ + state[2] ^= (rtk2_3)[6]; \ + state[3] ^= (rtk2_3)[7]; \ + SWAPMOVE(state[1], state[2], 0x55555555, 0); \ + state[3] ^= (state[0] | state[1]); \ + SWAPMOVE(state[0], state[3], 0x55555555, 1); \ + SWAPMOVE(state[1], state[0], 0x55555555, 1); \ + state[1] ^= ~(state[2] | state[3]); \ + SWAPMOVE(state[3], state[2], 0x55555555, 1); \ + SWAPMOVE(state[2], state[1], 0x55555555, 1); \ + state[3] ^= ~(state[0] | state[1]); \ + SWAPMOVE(state[0], state[3], 0x55555555, 1); \ + SWAPMOVE(state[1], state[0], 0x55555555, 1); \ + state[1] ^= ~(state[2] | state[3]); \ + inv_mixcolumns_0(state); \ + state[0] ^= (rtk1)[0]; \ + state[1] ^= (rtk1)[1]; \ + state[2] ^= (rtk1)[2]; \ + state[3] ^= (rtk1)[3]; \ + state[0] ^= (rtk2_3)[0]; \ + state[1] ^= (rtk2_3)[1]; \ + state[2] ^= (rtk2_3)[2]; \ + state[3] ^= (rtk2_3)[3]; \ + SWAPMOVE(state[3], state[0], 0x55555555, 0); \ + state[1] ^= (state[2] | state[3]); \ + SWAPMOVE(state[3], state[2], 0x55555555, 1); \ + SWAPMOVE(state[2], state[1], 0x55555555, 1); \ + state[3] ^= ~(state[0] | state[1]); \ + SWAPMOVE(state[0], state[3], 0x55555555, 1); \ + SWAPMOVE(state[1], state[0], 0x55555555, 1); \ + state[1] ^= ~(state[2] | state[3]); \ + SWAPMOVE(state[3], state[2], 0x55555555, 1); \ + SWAPMOVE(state[2], state[1], 0x55555555, 1); \ + state[3] ^= ~(state[0] | state[1]); \ +}) + +#endif // SKINNY128_H_ \ No newline at end of file diff --git a/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_1/skinnyaead.h b/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_1/skinnyaead.h new file mode 100644 index 0000000..5500af8 --- /dev/null +++ b/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_1/skinnyaead.h @@ -0,0 +1,32 @@ +#ifndef SKINNYAEADM1_H_ +#define SKINNYAEADM1_H_ + +#include "skinny128.h" + +typedef unsigned char u8; +typedef unsigned int u32; +typedef unsigned long long u64; + +#define TAGBYTES 16 +#define KEYBYTES 16 +#define BLOCKBYTES 16 + +#define SET_DOMAIN(ptr, domain) ((ptr)[15] = (domain)) + +#define UPDATE_LFSR(lfsr) ({ \ + feedback = ((lfsr) & (1ULL << 63)) ? 0x1B : 0x00; \ + (lfsr) = ((lfsr) << 1) ^ feedback; \ +}) + +#define LE_STR_64(ptr, x) ({ \ + (ptr)[0] = (u8)(x); \ + (ptr)[1] = (u8)((x) >> 8); \ + (ptr)[2] = (u8)((x) >> 16); \ + (ptr)[3] = (u8)((x) >> 24); \ + (ptr)[4] = (u8)((x) >> 32); \ + (ptr)[5] = (u8)((x) >> 40); \ + (ptr)[6] = (u8)((x) >> 48); \ + (ptr)[7] = (u8)((x) >> 56); \ +}) + +#endif // SKINNYAEADM1_H_ \ No newline at end of file diff --git a/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_1/tk_schedule.c b/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_1/tk_schedule.c new file mode 100644 index 0000000..1da4277 --- /dev/null +++ b/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_1/tk_schedule.c @@ -0,0 +1,368 @@ +/****************************************************************************** +* Implementation of the SKINNY tweakey schedule to match fixslicing. +* +* @author Alexandre Adomnicai, Nanyang Technological University, +* alexandre.adomnicai@ntu.edu.sg +* +* @date May 2020 +******************************************************************************/ +#include +#include //for memcmp +#include "tk_schedule.h" +#include "skinny128.h" + +typedef unsigned char u8; +typedef unsigned int u32; + +/****************************************************************************** +* The round constants according to the new representation. +******************************************************************************/ +u32 rconst_32_bs[160] = { + 0x00000004, 0xffffffbf, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x10000100, 0xfffffeff, 0x44000000, 0xfbffffff, 0x00000000, 0x04000000, + 0x00100000, 0x00100000, 0x00100001, 0xffefffff, 0x00440000, 0xffafffff, + 0x00400000, 0x00400000, 0x01000000, 0x01000000, 0x01401000, 0xffbfffff, + 0x01004000, 0xfefffbff, 0x00000400, 0x00000400, 0x00000010, 0x00000000, + 0x00010410, 0xfffffbef, 0x00000054, 0xffffffaf, 0x00000000, 0x00000040, + 0x00000100, 0x00000100, 0x10000140, 0xfffffeff, 0x44000000, 0xfffffeff, + 0x04000000, 0x04000000, 0x00100000, 0x00100000, 0x04000001, 0xfbffffff, + 0x00140000, 0xffafffff, 0x00400000, 0x00000000, 0x00000000, 0x00000000, + 0x01401000, 0xfebfffff, 0x01004400, 0xfffffbff, 0x00000000, 0x00000400, + 0x00000010, 0x00000010, 0x00010010, 0xffffffff, 0x00000004, 0xffffffaf, + 0x00000040, 0x00000040, 0x00000100, 0x00000000, 0x10000140, 0xffffffbf, + 0x40000100, 0xfbfffeff, 0x00000000, 0x04000000, 0x00100000, 0x00000000, + 0x04100001, 0xffefffff, 0x00440000, 0xffefffff, 0x00000000, 0x00400000, + 0x01000000, 0x01000000, 0x00401000, 0xffffffff, 0x00004000, 0xfeffffff, + 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00010400, 0xfffffbff, + 0x00000014, 0xffffffbf, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x10000100, 0xffffffff, 0x40000000, 0xfbffffff, 0x00000000, 0x04000000, + 0x00100000, 0x00000000, 0x00100001, 0xffefffff, 0x00440000, 0xffafffff, + 0x00000000, 0x00400000, 0x01000000, 0x01000000, 0x01401000, 0xffffffff, + 0x00004000, 0xfeffffff, 0x00000400, 0x00000400, 0x00000010, 0x00000000, + 0x00010400, 0xfffffbff, 0x00000014, 0xffffffaf, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x10000140, 0xfffffeff, 0x44000000, 0xffffffff, + 0x00000000, 0x04000000, 0x00100000, 0x00100000, 0x00000001, 0xffefffff, + 0x00440000, 0xffafffff, 0x00400000, 0x00000000, 0x00000000, 0x01000000, + 0x01401000, 0xffbfffff, 0x01004000, 0xfffffbff, 0x00000400, 0x00000400, + 0x00000010, 0x00000000, 0x00010010, 0xfffffbff +}; + +/****************************************************************************** +* Pack the input into the bitsliced representation +* 24 28 56 60 88 92 120 124 | ... | 0 4 32 36 64 68 96 100 +* 25 29 57 61 89 93 121 125 | ... | 1 5 33 37 65 69 97 101 +* 26 30 58 62 90 94 122 126 | ... | 2 6 34 38 66 70 98 102 +* 27 31 59 63 91 95 123 127 | ... | 3 7 35 39 67 71 99 103 +******************************************************************************/ +void packing(u32* out, const u8* in) { + u32 tmp; + LE_LOAD(out, in); + LE_LOAD(out + 1, in + 8); + LE_LOAD(out + 2, in + 4); + LE_LOAD(out + 3, in + 12); + SWAPMOVE(out[0], out[0], 0x0a0a0a0a, 3); + SWAPMOVE(out[1], out[1], 0x0a0a0a0a, 3); + SWAPMOVE(out[2], out[2], 0x0a0a0a0a, 3); + SWAPMOVE(out[3], out[3], 0x0a0a0a0a, 3); + SWAPMOVE(out[2], out[0], 0x30303030, 2); + SWAPMOVE(out[1], out[0], 0x0c0c0c0c, 4); + SWAPMOVE(out[3], out[0], 0x03030303, 6); + SWAPMOVE(out[1], out[2], 0x0c0c0c0c, 2); + SWAPMOVE(out[3], out[2], 0x03030303, 4); + SWAPMOVE(out[3], out[1], 0x03030303, 2); +} + +/****************************************************************************** +* Unpack the input to a byte-wise representation +******************************************************************************/ +void unpacking(u8* out, u32 *in) { + u32 tmp; + SWAPMOVE(in[3], in[1], 0x03030303, 2); + SWAPMOVE(in[3], in[2], 0x03030303, 4); + SWAPMOVE(in[1], in[2], 0x0c0c0c0c, 2); + SWAPMOVE(in[3], in[0], 0x03030303, 6); + SWAPMOVE(in[1], in[0], 0x0c0c0c0c, 4); + SWAPMOVE(in[2], in[0], 0x30303030, 2); + SWAPMOVE(in[0], in[0], 0x0a0a0a0a, 3); + SWAPMOVE(in[1], in[1], 0x0a0a0a0a, 3); + SWAPMOVE(in[2], in[2], 0x0a0a0a0a, 3); + SWAPMOVE(in[3], in[3], 0x0a0a0a0a, 3); + LE_STORE(out, in[0]); + LE_STORE(out + 8, in[1]); + LE_STORE(out + 4, in[2]); + LE_STORE(out + 12, in[3]); +} + +/****************************************************************************** +* 0 4 1 5 +* 1 5 ---> 2 6 +* 2 6 3 7 +* 3 7 4 0 +******************************************************************************/ +void lfsr2_bs(u32* tk) { + u32 tmp; + tmp = tk[0] ^ (tk[2] & 0xaaaaaaaa); + tmp = ((tmp & 0xaaaaaaaa) >> 1) | ((tmp << 1) & 0xaaaaaaaa); + tk[0] = tk[1]; + tk[1] = tk[2]; + tk[2] = tk[3]; + tk[3] = tmp; +} + +/****************************************************************************** +* 0 4 7 3 +* 1 5 ---> 0 4 +* 2 6 1 5 +* 3 7 2 6 +******************************************************************************/ +void lfsr3_bs(u32* tk) { + u32 tmp; + tmp = tk[3] ^ ((tk[1] & 0xaaaaaaaa) >> 1); + tmp = ((tmp & 0xaaaaaaaa) >> 1) | ((tmp << 1) & 0xaaaaaaaa); + tk[3] = tk[2]; + tk[2] = tk[1]; + tk[1] = tk[0]; + tk[0] = tmp; +} + +/****************************************************************************** +* Apply the permutation in a bitsliced manner, twice +******************************************************************************/ +void permute_tk_2(u32* tk) { + u32 tmp; + for(int i =0; i < 4; i++) { + tmp = tk[i]; + tk[i] = ROR(tmp,14) & 0xcc00cc00; + tk[i] |= (tmp & 0x000000ff) << 16; + tk[i] |= (tmp & 0xcc000000)>> 2; + tk[i] |= (tmp & 0x0033cc00) >> 8; + tk[i] |= (tmp & 0x00cc0000) >>18; + } +} + +/****************************************************************************** +* Apply the permutation in a bitsliced manner, 4 times +******************************************************************************/ +void permute_tk_4(u32* tk) { + u32 tmp; + for(int i =0; i < 4; i++) { + tmp = tk[i]; + tk[i] = ROR(tmp,22) & 0xcc0000cc; + tk[i] |= ROR(tmp,16) & 0x3300cc00; + tk[i] |= ROR(tmp, 24) & 0x00cc3300; + tk[i] |= (tmp & 0x00cc00cc) >> 2; + } +} + +/****************************************************************************** +* Apply the permutation in a bitsliced manner, 6 times +******************************************************************************/ +void permute_tk_6(u32* tk) { + u32 tmp; + for(int i =0; i < 4; i++) { + tmp = tk[i]; + tk[i] = ROR(tmp,6) & 0xcccc0000; + tk[i] |= ROR(tmp,24) & 0x330000cc; + tk[i] |= ROR(tmp,10) & 0x3333; + tk[i] |= (tmp & 0xcc) << 14; + tk[i] |= (tmp & 0x3300) << 2; + } +} + +/****************************************************************************** +* Apply the permutation in a bitsliced manner, 8 times +******************************************************************************/ +void permute_tk_8(u32* tk) { + u32 tmp; + for(int i =0; i < 4; i++) { + tmp = tk[i]; + tk[i] = ROR(tmp,24) & 0xcc000033; + tk[i] |= ROR(tmp,8) & 0x33cc0000; + tk[i] |= ROR(tmp,26) & 0x00333300; + tk[i] |= (tmp & 0x00333300) >> 6; + } +} + +/****************************************************************************** +* Apply the permutation in a bitsliced manner, 10 times +******************************************************************************/ +void permute_tk_10(u32* tk) { + u32 tmp; + for(int i =0; i < 4; i++) { + tmp = tk[i]; + tk[i] = ROR(tmp,8) & 0xcc330000; + tk[i] |= ROR(tmp,26) & 0x33000033; + tk[i] |= ROR(tmp,22) & 0x00cccc00; + tk[i] |= (tmp & 0x00330000) >> 14; + tk[i] |= (tmp & 0xcc00) >> 2; + } +} + +/****************************************************************************** +* Apply the permutation in a bitsliced manner, 12 times +******************************************************************************/ +void permute_tk_12(u32* tk) { + u32 tmp; + for(int i =0; i < 4; i++) { + tmp = tk[i]; + tk[i] = ROR(tmp,8) & 0xcc33; + tk[i] |= ROR(tmp,30) & 0x00cc00cc; + tk[i] |= ROR(tmp,10) & 0x33330000; + tk[i] |= ROR(tmp,16) & 0xcc003300; + } +} + +/****************************************************************************** +* Apply the permutation in a bitsliced manner, 14 times +******************************************************************************/ +void permute_tk_14(u32* tk) { + u32 tmp; + for(int i =0; i < 4; i++) { + tmp = tk[i]; + tk[i] = ROR(tmp,24) & 0x0033cc00; + tk[i] |= ROR(tmp,14) & 0x00cc0000; + tk[i] |= ROR(tmp,30) & 0xcc000000; + tk[i] |= ROR(tmp,16) & 0x000000ff; + tk[i] |= ROR(tmp,18) & 0x33003300; + } +} + +/****************************************************************************** +* Precompute all LFSRs on TK2 +******************************************************************************/ +void precompute_lfsr_tk2(u32* tk, const u8* key, const int rounds) { + u32 tk2[4]; + packing(tk2, key); + memcpy(tk, tk2, 16); + for(int i = 0 ; i < rounds; i+=2) { + lfsr2_bs(tk2); + memcpy(tk+i*4+4, tk2, 16); + } +} + +/****************************************************************************** +* Precompute all LFSRs on TK3 +******************************************************************************/ +void precompute_lfsr_tk3(u32* tk, const u8* key, const int rounds) { + u32 tk3[4]; + packing(tk3, key); + tk[0] ^= tk3[0]; + tk[1] ^= tk3[1]; + tk[2] ^= tk3[2]; + tk[3] ^= tk3[3]; + for(int i = 0 ; i < rounds; i+=2) { + lfsr3_bs(tk3); + tk[i*4+4] ^= tk3[0]; + tk[i*4+5] ^= tk3[1]; + tk[i*4+6] ^= tk3[2]; + tk[i*4+7] ^= tk3[3]; + } +} + +/****************************************************************************** +* XOR TK with TK1 before applying the permutations. +* The key is then rearranged to match the barrel shiftrows representation. +******************************************************************************/ +void permute_tk(u32* tk, const u8* key, const int rounds) { + u32 test; + u32 tk1[4], tmp[4]; + packing(tk1, key); + memcpy(tmp, tk, 16); + tmp[0] ^= tk1[0]; + tmp[1] ^= tk1[1]; + tmp[2] ^= tk1[2]; + tmp[3] ^= tk1[3]; + for(int i = 0 ; i < rounds; i += 8) { + test = (i % 16 < 8) ? 1 : 0; //to apply the right power of P + tk[i*4] = tmp[2] & 0xf0f0f0f0; + tk[i*4+1] = tmp[3] & 0xf0f0f0f0; + tk[i*4+2] = tmp[0] & 0xf0f0f0f0; + tk[i*4+3] = tmp[1] & 0xf0f0f0f0; + memcpy(tmp, tk+i*4+4, 16); + XOR_BLOCKS(tmp, tk1); + if (test) + permute_tk_2(tmp); // applies P^2 + else + permute_tk_10(tmp); // applies P^10 + tk[i*4+4] = ROR(tmp[0],26) & 0xc3c3c3c3; + tk[i*4+5] = ROR(tmp[1],26) & 0xc3c3c3c3; + tk[i*4+6] = ROR(tmp[2],26) & 0xc3c3c3c3; + tk[i*4+7] = ROR(tmp[3],26) & 0xc3c3c3c3; + tk[i*4+8] = ROR(tmp[2],28) & 0x03030303; + tk[i*4+8] |= ROR(tmp[2],12) & 0x0c0c0c0c; + tk[i*4+9] = ROR(tmp[3],28) & 0x03030303; + tk[i*4+9] |= ROR(tmp[3],12) & 0x0c0c0c0c; + tk[i*4+10] = ROR(tmp[0],28) & 0x03030303; + tk[i*4+10] |= ROR(tmp[0],12) & 0x0c0c0c0c; + tk[i*4+11] = ROR(tmp[1],28) & 0x03030303; + tk[i*4+11] |= ROR(tmp[1],12) & 0x0c0c0c0c; + memcpy(tmp, tk+i*4+12, 16); + XOR_BLOCKS(tmp, tk1); + if (test) + permute_tk_4(tmp); // applies P^4 + else + permute_tk_12(tmp); // applies P^12 + for(int j = 0; j < 4; j++) { + tk[i*4+12+j] = ROR(tmp[j],14) & 0x30303030; + tk[i*4+12+j] |= ROR(tmp[j],6) & 0x0c0c0c0c; + } + tk[i*4+16] = ROR(tmp[2], 16) & 0xf0f0f0f0; + tk[i*4+17] = ROR(tmp[3], 16) & 0xf0f0f0f0; + tk[i*4+18] = ROR(tmp[0], 16) & 0xf0f0f0f0; + tk[i*4+19] = ROR(tmp[1], 16) & 0xf0f0f0f0; + memcpy(tmp, tk+i*4+20, 16); + XOR_BLOCKS(tmp, tk1); + if (test) + permute_tk_6(tmp); // applies P^6 + else + permute_tk_14(tmp); // applies P^14 + tk[i*4+20] = ROR(tmp[0], 10) & 0xc3c3c3c3; + tk[i*4+21] = ROR(tmp[1], 10) & 0xc3c3c3c3; + tk[i*4+22] = ROR(tmp[2], 10) & 0xc3c3c3c3; + tk[i*4+23] = ROR(tmp[3], 10) & 0xc3c3c3c3; + tk[i*4+24] = ROR(tmp[2],12) & 0x03030303; + tk[i*4+24] |= ROR(tmp[2],28) & 0x0c0c0c0c; + tk[i*4+25] = ROR(tmp[3],12) & 0x03030303; + tk[i*4+25] |= ROR(tmp[3],28) & 0x0c0c0c0c; + tk[i*4+26] = ROR(tmp[0],12) & 0x03030303; + tk[i*4+26] |= ROR(tmp[0],28) & 0x0c0c0c0c; + tk[i*4+27] = ROR(tmp[1],12) & 0x03030303; + tk[i*4+27] |= ROR(tmp[1],28) & 0x0c0c0c0c; + memcpy(tmp, tk+i*4+28, 16); + XOR_BLOCKS(tmp, tk1); + if (test) + permute_tk_8(tmp); // applies P^8 + for(int j = 0; j < 4; j++) { + tk[i*4+28+j] = ROR(tmp[j],30) & 0x30303030; + tk[i*4+28+j] |= ROR(tmp[j],22) & 0x0c0c0c0c; + } + if (test && (i+8 < rounds)) { //only if next loop iteration + tk[i*4+32] = tmp[2] & 0xf0f0f0f0; + tk[i*4+33] = tmp[3] & 0xf0f0f0f0; + tk[i*4+34] = tmp[0] & 0xf0f0f0f0; + tk[i*4+35] = tmp[1] & 0xf0f0f0f0; + } + } +} + +/****************************************************************************** +* Precompute LFSR2(TK2) ^ LFSR3(TK3) ^ rconst. +******************************************************************************/ +void precompute_rtk2_3(u32* rtk, const u8* tk2, const u8 * tk3) { + memset(rtk, 0x00, 16*SKINNY128_384_ROUNDS); + precompute_lfsr_tk2(rtk, tk2, SKINNY128_384_ROUNDS); + precompute_lfsr_tk3(rtk, tk3, SKINNY128_384_ROUNDS); + permute_tk(rtk, (u8*)(rtk+8), SKINNY128_384_ROUNDS); // rtk+8 is NULL + for(int i = 0; i < SKINNY128_384_ROUNDS; i++) { // add rconsts + for(int j = 0; j < 4; j++) + rtk[i*4+j] ^= rconst_32_bs[i*4+j]; + } +} + +/****************************************************************************** +* Precompute RTK1. +******************************************************************************/ +void precompute_rtk1(u32* rtk1, const u8* tk1) { + memset(rtk1, 0x00, 16*16); + permute_tk(rtk1, tk1, 16); +} \ No newline at end of file diff --git a/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_1/tk_schedule.h b/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_1/tk_schedule.h new file mode 100644 index 0000000..5615cbd --- /dev/null +++ b/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_1/tk_schedule.h @@ -0,0 +1,39 @@ +#ifndef TK_SCHEDULE_H_ +#define TK_SCHEDULE_H_ + +typedef unsigned char u8; +typedef unsigned int u32; + +void packing(u32* out, const u8* in); +void unpacking(u8* out, u32 *in); +void precompute_rtk2_3(u32* rtk, const u8* tk2, const u8* tk3); +void precompute_rtk1(u32* rtk1, const u8* tk1); + +#define ROR(x,y) (((x) >> (y)) | ((x) << (32 - (y)))) + +#define XOR_BLOCKS(x,y) ({ \ + (x)[0] ^= (y)[0]; \ + (x)[1] ^= (y)[1]; \ + (x)[2] ^= (y)[2]; \ + (x)[3] ^= (y)[3]; \ +}) + +#define SWAPMOVE(a, b, mask, n) ({ \ + tmp = (b ^ (a >> n)) & mask; \ + b ^= tmp; \ + a ^= (tmp << n); \ +}) + +#define LE_LOAD(x, y) \ + *(x) = (((u32)(y)[3] << 24) | \ + ((u32)(y)[2] << 16) | \ + ((u32)(y)[1] << 8) | \ + (y)[0]); + +#define LE_STORE(x, y) \ + (x)[0] = (y) & 0xff; \ + (x)[1] = ((y) >> 8) & 0xff; \ + (x)[2] = ((y) >> 16) & 0xff; \ + (x)[3] = (y) >> 24; + +#endif // TK_SCHEDULE_H_ \ No newline at end of file diff --git a/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_2/api.h b/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_2/api.h new file mode 100644 index 0000000..a4aa567 --- /dev/null +++ b/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_2/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/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_2/crypto_aead.h b/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_2/crypto_aead.h new file mode 100644 index 0000000..e2ca9b0 --- /dev/null +++ b/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_2/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 +); \ No newline at end of file diff --git a/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_2/encrypt.c b/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_2/encrypt.c new file mode 100644 index 0000000..fa46817 --- /dev/null +++ b/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_2/encrypt.c @@ -0,0 +1,293 @@ +/****************************************************************************** +* Constant-time implementation of SKINNY-AEAD-M1 (v1.1). +* +* Two blocks are treated in parallel with SKINNY-128-384 whenever possible. +* +* For more details, see the paper at: https:// +* +* @author Alexandre Adomnicai, Nanyang Technological University, +* alexandre.adomnicai@ntu.edu.sg +* +* @date May 2020 +******************************************************************************/ +#include "skinny128.h" +#include "skinnyaead.h" +#include +#include + +/****************************************************************************** +* x ^= y where x, y are 128-bit blocks (16 bytes array). +******************************************************************************/ +static void xor_block(u8 * x, const u8* y) { + for(int i = 0; i < BLOCKBYTES; i++) + x[i] ^= y[i]; +} + +/****************************************************************************** +* Process the associated data. Common to SKINNY-AEAD-M1 encrypt and decrypt +* functions. +******************************************************************************/ +static void skinny_aead_m1_auth(u8* auth, u8* c, u8* tag, tweakey* tk, + u64 mlen, const u8* ad, u64 adlen) { + u64 lfsr = 1; + u8 feedback; + u8 tmp[2*BLOCKBYTES]; + memset(tmp, 0x00, 2*BLOCKBYTES); + memset(auth, 0x00, BLOCKBYTES); + SET_DOMAIN(tmp, 0x02); + while (adlen >= 2*BLOCKBYTES) { + LE_STR_64(tmp, lfsr); + UPDATE_LFSR(lfsr); + LE_STR_64(tmp + BLOCKBYTES, lfsr); + SET_DOMAIN(tmp + BLOCKBYTES, 0x02); + precompute_rtk1(tk->rtk1, tmp, tmp+BLOCKBYTES); + skinny128_384_plus_encrypt(tmp, tmp+BLOCKBYTES, ad, ad+BLOCKBYTES, *tk); + xor_block(auth, tmp); + xor_block(auth, tmp + BLOCKBYTES); + adlen -= 2*BLOCKBYTES; + ad += 2*BLOCKBYTES; + UPDATE_LFSR(lfsr); + } + if (adlen > BLOCKBYTES) { // pad and process 2 blocs in // + LE_STR_64(tmp, lfsr); + UPDATE_LFSR(lfsr); + LE_STR_64(tmp + BLOCKBYTES, lfsr); + SET_DOMAIN(tmp + BLOCKBYTES, 0x03); // domain for padding ad + precompute_rtk1(tk->rtk1, tmp, tmp + BLOCKBYTES); + adlen -= BLOCKBYTES; + memset(tmp, 0x00, BLOCKBYTES); + memcpy(tmp, ad + BLOCKBYTES, adlen); + tmp[adlen] ^= 0x80; // padding + skinny128_384_plus_encrypt(tmp + BLOCKBYTES, tmp, ad, tmp, *tk); + xor_block(auth, tmp); + xor_block(auth, tmp + BLOCKBYTES); + } else if (adlen == BLOCKBYTES) { + LE_STR_64(tmp, lfsr); + if (mlen == 0) { // if tag has *NOT* been calculated yet + precompute_rtk1(tk->rtk1, tmp, tag); // compute the tag + skinny128_384_plus_encrypt(auth, c, ad, c, *tk); + } else { // if tag has been calculated yet + precompute_rtk1(tk->rtk1, tmp, tmp); // process last ad block + skinny128_384_plus_encrypt(auth, auth, ad, ad, *tk); + } + } else if (adlen > 0) { + LE_STR_64(tmp, lfsr); + SET_DOMAIN(tmp, 0x03); // domain for padding ad + memset(tmp + BLOCKBYTES, 0x00, BLOCKBYTES); // padding + memcpy(tmp + BLOCKBYTES, ad, adlen); // padding + tmp[BLOCKBYTES + adlen] ^= 0x80; // padding + if (mlen == 0) { // if tag has *NOT* been calculated yet + precompute_rtk1(tk->rtk1, tmp, tag); // compute the tag + skinny128_384_plus_encrypt(auth, c, tmp + BLOCKBYTES, c, *tk); + } else { // if tag has been calculated yet + precompute_rtk1(tk->rtk1, tmp, tmp); // process last ad block + skinny128_384_plus_encrypt(auth, auth, tmp + BLOCKBYTES, tmp + BLOCKBYTES, *tk); + } + } +} + +/****************************************************************************** +* Encryption and authentication using SKINNY-AEAD-M1 +******************************************************************************/ +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) { + u64 i,lfsr = 1; + u8 feedback; + tweakey tk; + u8 tmp[2*BLOCKBYTES], tag[BLOCKBYTES], auth[BLOCKBYTES]; + (void)nsec; + + // ----------------- Initialization ----------------- + *clen = mlen + TAGBYTES; + precompute_rtk2_3(tk.rtk2_3, npub, k, SKINNY128_384_ROUNDS); + memset(tmp, 0x00, 2*BLOCKBYTES); + memset(tag, 0x00, BLOCKBYTES); + memset(auth, 0x00, BLOCKBYTES); + memset(c + mlen, 0x00, BLOCKBYTES); + // ----------------- Initialization ----------------- + + // ----------------- Process the plaintext ----------------- + while (mlen >= 2*BLOCKBYTES) { // process 2 blocks in // + LE_STR_64(tmp, lfsr); // lfsr for 1st block + UPDATE_LFSR(lfsr); + LE_STR_64(tmp + BLOCKBYTES, lfsr); // lfsr for 2nd block + precompute_rtk1(tk.rtk1, tmp, tmp + BLOCKBYTES); + skinny128_384_plus_encrypt(c, c + BLOCKBYTES, m, m + BLOCKBYTES, tk); + xor_block(c + mlen, m); // sum for tag computation + xor_block(c + mlen, m + BLOCKBYTES); // sum for tag computation + mlen -= 2*BLOCKBYTES; + c += 2*BLOCKBYTES; + m += 2*BLOCKBYTES; + UPDATE_LFSR(lfsr); + } + SET_DOMAIN(tag, 0x04); // domain for tag computation + if (mlen > BLOCKBYTES) { // pad and process 2 blocs in // + LE_STR_64(tmp, lfsr); // lfsr for 1st block + UPDATE_LFSR(lfsr); + LE_STR_64(tmp + BLOCKBYTES, lfsr); // lfsr for 2nd block + SET_DOMAIN(tmp + BLOCKBYTES, 0x01); // domain for padding m + precompute_rtk1(tk.rtk1, tmp, tmp + BLOCKBYTES); + skinny128_384_plus_encrypt(c, auth, m, auth, tk); + xor_block(c + mlen, m); + for(i = 0; i < mlen - BLOCKBYTES; i++) { + c[BLOCKBYTES + i] = auth[i] ^ m[BLOCKBYTES + i]; + c[mlen + i] ^= m[BLOCKBYTES + i]; + } + c[mlen + i] ^= 0x80; // padding + SET_DOMAIN(tag, 0x05); // domain for tag computation + m += mlen; + c += mlen; + mlen = 0; + UPDATE_LFSR(lfsr); + } else if (mlen == BLOCKBYTES) { // last block is full + LE_STR_64(tmp, lfsr); // lfsr for last full block + UPDATE_LFSR(lfsr); + LE_STR_64(tmp + BLOCKBYTES, lfsr); // lfsr for tag computation + SET_DOMAIN(tmp + BLOCKBYTES, 0x04); // domain for tag computation + xor_block(c + mlen, m); // sum for tag computation + precompute_rtk1(tk.rtk1, tmp, tmp + BLOCKBYTES); + skinny128_384_plus_encrypt(c, c + mlen, m, c + mlen, tk); + c += BLOCKBYTES; + } else if (mlen > 0) { // last block is partial + LE_STR_64(tmp, lfsr); // lfsr for last block + SET_DOMAIN(tmp, 0x01); // domain for padding + UPDATE_LFSR(lfsr); + LE_STR_64(tmp + BLOCKBYTES, lfsr); // lfsr for tag computation + SET_DOMAIN(tmp + BLOCKBYTES, 0x05); // domain for tag computation + for(i = 0; i < mlen; i++) // sum for tag computation + c[mlen + i] ^= m[i]; // sum for tag computation + c[mlen + i] ^= 0x80; // padding + precompute_rtk1(tk.rtk1, tmp, tmp + BLOCKBYTES); + skinny128_384_plus_encrypt(auth, c + mlen, auth, c + mlen, tk); + for(i = 0; i < mlen; i++) + c[i] = auth[i] ^ m[i]; // encrypted padded block + c += mlen; + } + if (mlen == 0) { // if tag has *NOT* been calculated yet + LE_STR_64(tag, lfsr); // lfsr for tag computation + if((adlen % 32) == 0 || (adlen % 32) > BLOCKBYTES) { //if all AD can be processed in // + precompute_rtk1(tk.rtk1, tag, tag); + skinny128_384_plus_encrypt(c, c, c, c, tk); // compute the tag + } + } + // ----------------- Process the plaintext ----------------- + + // ----------------- Process the associated data ----------------- + skinny_aead_m1_auth(auth, c, tag, &tk, mlen, ad, adlen); + xor_block(c, auth); + // ----------------- Process the associated data ----------------- + + return 0; +} + + +/****************************************************************************** +* Decryption and authentication using SKINNY-AEAD-M1 +******************************************************************************/ +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) { + u64 i,lfsr = 1; + u8 feedback; + tweakey tk; + u8 tmp[2*BLOCKBYTES]; + u8 sum[BLOCKBYTES], tag[BLOCKBYTES], auth[BLOCKBYTES]; + (void)nsec; + + if (clen < TAGBYTES) + return -1; + + // ----------------- Initialization ----------------- + clen -= TAGBYTES; + *mlen = clen; + precompute_rtk2_3(tk.rtk2_3, npub, k, SKINNY128_384_ROUNDS); + memset(tmp, 0x00, 2*BLOCKBYTES); + memset(tag, 0x00, BLOCKBYTES); + memset(auth, 0x00, BLOCKBYTES); + memset(sum, 0x00, BLOCKBYTES); + // ----------------- Initialization ----------------- + + // ----------------- Process the plaintext ----------------- + while (clen >= 2*BLOCKBYTES) { // process 2 blocks in // + LE_STR_64(tmp, lfsr); // lfsr for 1st block + UPDATE_LFSR(lfsr); + LE_STR_64(tmp + BLOCKBYTES, lfsr); // lfsr for 2nd block + precompute_rtk1(tk.rtk1, tmp, tmp + BLOCKBYTES); + skinny128_384_plus_decrypt(m, m + BLOCKBYTES, c, c + BLOCKBYTES, tk); + xor_block(sum, m); // sum for tag computation + xor_block(sum, m + BLOCKBYTES); // sum for tag computation + clen -= 2*BLOCKBYTES; + c += 2*BLOCKBYTES; + m += 2*BLOCKBYTES; + UPDATE_LFSR(lfsr); + } + SET_DOMAIN(tag, 0x04); // domain for tag computation + if (clen > BLOCKBYTES) { // pad and process 2 blocs in // + LE_STR_64(tmp, lfsr); // lfsr for 1st block + precompute_rtk1(tk.rtk1, tmp, tmp); + skinny128_384_plus_decrypt(m, m, c, c, tk); + xor_block(sum, m); + UPDATE_LFSR(lfsr); + LE_STR_64(tmp, lfsr); // lfsr for 2nd block + SET_DOMAIN(tmp, 0x01); // domain for padding m + precompute_rtk1(tk.rtk1, tmp, tmp); + skinny128_384_plus_encrypt(auth, auth, auth, auth, tk); + for(i = 0; i < clen - BLOCKBYTES; i++) { + m[BLOCKBYTES + i] = auth[i] ^ c[BLOCKBYTES + i]; + sum[i] ^= m[BLOCKBYTES + i]; + } + sum[i] ^= 0x80; // padding + SET_DOMAIN(tag, 0x05); // domain for tag computation + m += clen; + c += clen; + clen = 0; + UPDATE_LFSR(lfsr); + } else if (clen == BLOCKBYTES) { // last block is full + LE_STR_64(tmp, lfsr); // lfsr for last full block + precompute_rtk1(tk.rtk1, tmp, tmp); + skinny128_384_plus_decrypt(m, m, c, c, tk); + xor_block(sum, m); // sum for tag computation + SET_DOMAIN(tag, 0x04); // domain for tag computation + UPDATE_LFSR(lfsr); + c += BLOCKBYTES; + clen = 0; + } else if (clen > 0) { // last block is partial + LE_STR_64(tmp, lfsr); // lfsr for last block + SET_DOMAIN(tmp, 0x01); // domain for padding + precompute_rtk1(tk.rtk1, tmp, tmp); + skinny128_384_plus_encrypt(auth, auth, auth, auth, tk); + for(i = 0; i < clen; i++) { + m[i] = auth[i] ^ c[i]; // encrypted padded block + sum[i] ^= m[i]; // sum for tag computation + } + sum[i] ^= 0x80; // padding + SET_DOMAIN(tag, 0x05); // domain for tag computation + UPDATE_LFSR(lfsr); + m += clen; + c += clen; + clen = 0; + } + if (clen == 0) { // if tag has *NOT* been calculated yet + LE_STR_64(tag, lfsr); // lfsr for tag computation + if((adlen % 32) == 0 || (adlen % 32) > BLOCKBYTES) { + precompute_rtk1(tk.rtk1, tag, tag); //if AD can be processed in // + skinny128_384_plus_encrypt(sum, sum, sum, sum, tk); // compute the tag + } + } + + // ----------------- Process the associated data ----------------- + skinny_aead_m1_auth(auth, sum, tag, &tk, clen, ad, adlen); + xor_block(sum, auth); + feedback = 0; + for(i = 0; i < TAGBYTES; i++) + feedback |= sum[i] ^ c[i]; // constant-time tag verification + return feedback; + // ----------------- Process the associated data ----------------- +} \ No newline at end of file diff --git a/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_2/skinny128.c b/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_2/skinny128.c new file mode 100644 index 0000000..ed1e619 --- /dev/null +++ b/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_2/skinny128.c @@ -0,0 +1,202 @@ +/****************************************************************************** +* Fixsliced implementation of SKINNY-128-384. +* Two blocks are processed in parallel. +* +* This implementation doesn't compute the ShiftRows operation. Some masks and +* shifts are applied during the MixColumns operation so that the proper bits +* are XORed together. Moreover, the row permutation within the MixColumns +* is omitted, as well as the bit permutation at the end of the Sbox. The rows +* are synchronized with the classical after only 4 rounds. However, the Sbox +* permutation requires 8 rounds for a synchronization. To limit the impact +* on code size, we compute the permutation every 4 rounds. Therefore, this +* implementation relies on a "QUADRUPLE_ROUND" routine. +* +* For more details, see the paper at: https:// +* +* @author Alexandre Adomnicai, Nanyang Technological University, +* alexandre.adomnicai@ntu.edu.sg +* +* @date May 2020 +******************************************************************************/ +#include +#include +#include "skinny128.h" +#include "tk_schedule.h" + +/**************************************************************************** +* The MixColumns operation for rounds i such that (i % 4) == 0. +****************************************************************************/ +void mixcolumns_0(u32* state) { + u32 tmp; + for(int i = 0; i < 8; i++) { + tmp = ROR(state[i],24) & 0x0c0c0c0c; + state[i] ^= ROR(tmp,30); + tmp = ROR(state[i],16) & 0xc0c0c0c0; + state[i] ^= ROR(tmp,4); + tmp = ROR(state[i],8) & 0x0c0c0c0c; + state[i] ^= ROR(tmp,2); + } +} + +/**************************************************************************** +* The MixColumns operation for rounds i such that (i % 4) == 1. +****************************************************************************/ +void mixcolumns_1(u32* state) { + u32 tmp; + for(int i = 0; i < 8; i++) { + tmp = ROR(state[i],16) & 0x30303030; + state[i] ^= ROR(tmp,30); + tmp = state[i] & 0x03030303; + state[i] ^= ROR(tmp,28); + tmp = ROR(state[i],16) & 0x30303030; + state[i] ^= ROR(tmp,2); + } +} + +/**************************************************************************** +* The MixColumns operation for rounds i such that (i % 4) == 2. +****************************************************************************/ +void mixcolumns_2(u32* state) { + u32 tmp; + for(int i = 0; i < 8; i++) { + tmp = ROR(state[i],8) & 0xc0c0c0c0; + state[i] ^= ROR(tmp,6); + tmp = ROR(state[i],16) & 0x0c0c0c0c; + state[i] ^= ROR(tmp,28); + tmp = ROR(state[i],24) & 0xc0c0c0c0; + state[i] ^= ROR(tmp,2); + } +} + +/**************************************************************************** +* The MixColumns operation for rounds i such that (i % 4) == 3. +****************************************************************************/ +void mixcolumns_3(u32* state) { + u32 tmp; + for(int i = 0; i < 8; i++) { + tmp = state[i] & 0x03030303; + state[i] ^= ROR(tmp,30); + tmp = state[i] & 0x30303030; + state[i] ^= ROR(tmp,4); + tmp = state[i] & 0x03030303; + state[i] ^= ROR(tmp,26); + } +} + +/**************************************************************************** +* The inverse MixColumns oepration for rounds i such that (i % 4) == 0 +****************************************************************************/ +void inv_mixcolumns_0(u32* state) { + u32 tmp; + for(int i = 0; i < 8; i++) { + tmp = ROR(state[i],8) & 0x0c0c0c0c; + state[i] ^= ROR(tmp,2); + tmp = ROR(state[i],16) & 0xc0c0c0c0; + state[i] ^= ROR(tmp,4); + tmp = ROR(state[i],24) & 0x0c0c0c0c; + state[i] ^= ROR(tmp,30); + } +} + +/**************************************************************************** +* The inverse MixColumns oepration for rounds i such that (i % 4) == 1 +****************************************************************************/ +void inv_mixcolumns_1(u32* state) { + u32 tmp; + for(int i = 0; i < 8; i++) { + tmp = ROR(state[i],16) & 0x30303030; + state[i] ^= ROR(tmp,2); + tmp = state[i] & 0x03030303; + state[i] ^= ROR(tmp,28); + tmp = ROR(state[i],16) & 0x30303030; + state[i] ^= ROR(tmp,30); + } +} + +/**************************************************************************** +* The inverse MixColumns oepration for rounds i such that (i % 4) == 2 +****************************************************************************/ +void inv_mixcolumns_2(u32* state) { + u32 tmp; + for(int i = 0; i < 8; i++) { + tmp = ROR(state[i],24) & 0xc0c0c0c0; + state[i] ^= ROR(tmp,2); + tmp = ROR(state[i],16) & 0x0c0c0c0c; + state[i] ^= ROR(tmp,28); + tmp = ROR(state[i],8) & 0xc0c0c0c0; + state[i] ^= ROR(tmp,6); + } +} + +/**************************************************************************** +* The inverse MixColumns oepration for rounds i such that (i % 4) == 3 +****************************************************************************/ +void inv_mixcolumns_3(u32* state) { + u32 tmp; + for(int i = 0; i < 8; i++) { + tmp = state[i] & 0x03030303; + state[i] ^= ROR(tmp,26); + tmp = state[i] & 0x30303030; + state[i] ^= ROR(tmp,4); + tmp = state[i] & 0x03030303; + state[i] ^= ROR(tmp,30); + } +} + +/**************************************************************************** +* Adds the tweakey (including the round constants) to the state. +****************************************************************************/ +void add_tweakey(u32* state, const u32* rtk1, const u32* rtk2_3) { + state[0] ^= rtk1[0] ^ rtk2_3[0]; + state[1] ^= rtk1[1] ^ rtk2_3[1]; + state[2] ^= rtk1[2] ^ rtk2_3[2]; + state[3] ^= rtk1[3] ^ rtk2_3[3]; + state[4] ^= rtk1[4] ^ rtk2_3[4]; + state[5] ^= rtk1[5] ^ rtk2_3[5]; + state[6] ^= rtk1[6] ^ rtk2_3[6]; + state[7] ^= rtk1[7] ^ rtk2_3[7]; +} + +/**************************************************************************** +* Encryption of 2 blocks in parallel using SKINNY-128-384. +* The input parameters 'rtk1' and 'rtk2_3' are given seperately to avoid +* unnecessary recomputations of the entire tk schedule during SKINNY-AEAD-M1. +****************************************************************************/ +void skinny128_384_plus_encrypt(u8* ctext, u8* ctext_bis, const u8* ptext, + const u8* ptext_bis, const tweakey tk) { + u32 state[8]; + packing(state, ptext, ptext_bis); + QUADRUPLE_ROUND(state, tk.rtk1, tk.rtk2_3); + QUADRUPLE_ROUND(state, tk.rtk1+32, tk.rtk2_3+32); + QUADRUPLE_ROUND(state, tk.rtk1+64, tk.rtk2_3+64); + QUADRUPLE_ROUND(state, tk.rtk1+96, tk.rtk2_3+96); + QUADRUPLE_ROUND(state, tk.rtk1, tk.rtk2_3+128); + QUADRUPLE_ROUND(state, tk.rtk1+32, tk.rtk2_3+160); + QUADRUPLE_ROUND(state, tk.rtk1+64, tk.rtk2_3+192); + QUADRUPLE_ROUND(state, tk.rtk1+96, tk.rtk2_3+224); + QUADRUPLE_ROUND(state, tk.rtk1, tk.rtk2_3+256); + QUADRUPLE_ROUND(state, tk.rtk1+32, tk.rtk2_3+288); + unpacking(ctext, ctext_bis, state); +} + +/**************************************************************************** +* Decryption of 2 blocks in parallel using SKINNY-128-384. +* The input parameters 'rtk1' and 'rtk2_3' are given seperately to avoid +* unnecessary recomputations of the entire tk schedule during SKINNY-AEAD-M1. +****************************************************************************/ +void skinny128_384_plus_decrypt(u8* ptext, u8* ptext_bis, const u8* ctext, + const u8* ctext_bis, const tweakey tk) { + u32 state[8]; + packing(state, ctext, ctext_bis); + INV_QUADRUPLE_ROUND(state, tk.rtk1+32, tk.rtk2_3+288); + INV_QUADRUPLE_ROUND(state, tk.rtk1, tk.rtk2_3+256); + INV_QUADRUPLE_ROUND(state, tk.rtk1+96, tk.rtk2_3+224); + INV_QUADRUPLE_ROUND(state, tk.rtk1+64, tk.rtk2_3+192); + INV_QUADRUPLE_ROUND(state, tk.rtk1+32, tk.rtk2_3+160); + INV_QUADRUPLE_ROUND(state, tk.rtk1, tk.rtk2_3+128); + INV_QUADRUPLE_ROUND(state, tk.rtk1+96, tk.rtk2_3+96); + INV_QUADRUPLE_ROUND(state, tk.rtk1+64, tk.rtk2_3+64); + INV_QUADRUPLE_ROUND(state, tk.rtk1+32, tk.rtk2_3+32); + INV_QUADRUPLE_ROUND(state, tk.rtk1, tk.rtk2_3); + unpacking(ptext, ptext_bis, state); +} \ No newline at end of file diff --git a/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_2/skinny128.h b/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_2/skinny128.h new file mode 100644 index 0000000..01dd271 --- /dev/null +++ b/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_2/skinny128.h @@ -0,0 +1,125 @@ +#ifndef SKINNY128_H_ +#define SKINNY128_H_ +#include "tk_schedule.h" + +void skinny128_384_plus_encrypt(u8* ctext, u8* ctext_bis, const u8* ptext, + const u8* ptext_bis, const tweakey tk); + +void skinny128_384_plus_decrypt(u8* ctext, u8* ctext_bis, const u8* ptext, + const u8* ptext_bis, const tweakey tk); + +#define SKINNY128_384_ROUNDS 40 + +#define ROR(x,y) (((x) >> (y)) | ((x) << (32 - (y)))) + +#define QUADRUPLE_ROUND(state, rtk1, rtk2_3) ({ \ + state[3] ^= (state[0] | state[1]); \ + state[7] ^= (state[4] | state[5]); \ + state[1] ^= (state[6] | state[5]); \ + state[2] ^= (state[3] & state[7]); \ + state[6] ^= (~state[7] | state[4]); \ + state[0] ^= (state[2] | ~state[1]); \ + state[4] ^= (~state[3] | state[2]); \ + state[5] ^= (state[6] & state[0]); \ + add_tweakey(state, rtk1, rtk2_3); \ + mixcolumns_0(state); \ + state[4] ^= (state[2] | state[3]); \ + state[5] ^= (state[6] | state[1]); \ + state[3] ^= (state[0] | state[1]); \ + state[7] ^= (state[4] & state[5]); \ + state[0] ^= (~state[5] | state[6]); \ + state[2] ^= (state[7] | ~state[3]); \ + state[6] ^= (~state[4] | state[7]); \ + state[1] ^= (state[0] & state[2]); \ + add_tweakey(state, rtk1+8, rtk2_3+8); \ + mixcolumns_1(state); \ + state[6] ^= (state[7] | state[4]); \ + state[1] ^= (state[0] | state[3]); \ + state[4] ^= (state[2] | state[3]); \ + state[5] ^= (state[6] & state[1]); \ + state[2] ^= (~state[1] | state[0]); \ + state[7] ^= (state[5] | ~state[4]); \ + state[0] ^= (~state[6] | state[5]); \ + state[3] ^= (state[2] & state[7]); \ + add_tweakey(state, rtk1+16, rtk2_3+16); \ + mixcolumns_2(state); \ + state[0] ^= (state[5] | state[6]); \ + state[3] ^= (state[2] | state[4]); \ + state[6] ^= (state[7] | state[4]); \ + state[1] ^= (state[0] & state[3]); \ + state[7] ^= (~state[3] | state[2]); \ + state[5] ^= (state[1] | ~state[6]); \ + state[2] ^= (~state[0] | state[1]); \ + state[4] ^= (state[7] & state[5]); \ + add_tweakey(state, rtk1+24, rtk2_3+24); \ + mixcolumns_3(state); \ + state[0] ^= state[1]; \ + state[1] ^= state[0]; \ + state[0] ^= state[1]; \ + state[2] ^= state[3]; \ + state[3] ^= state[2]; \ + state[2] ^= state[3]; \ + state[4] ^= state[7]; \ + state[7] ^= state[4]; \ + state[4] ^= state[7]; \ + state[5] ^= state[6]; \ + state[6] ^= state[5]; \ + state[5] ^= state[6]; \ +}) + +#define INV_QUADRUPLE_ROUND(state, rtk1, rtk2_3) ({ \ + state[0] ^= state[1]; \ + state[1] ^= state[0]; \ + state[0] ^= state[1]; \ + state[2] ^= state[3]; \ + state[3] ^= state[2]; \ + state[2] ^= state[3]; \ + state[4] ^= state[7]; \ + state[7] ^= state[4]; \ + state[4] ^= state[7]; \ + state[5] ^= state[6]; \ + state[6] ^= state[5]; \ + state[5] ^= state[6]; \ + inv_mixcolumns_3(state); \ + add_tweakey(state, rtk1+24, rtk2_3+24); \ + state[4] ^= (state[7] & state[5]); \ + state[2] ^= (~state[0] | state[1]); \ + state[5] ^= (state[1] | ~state[6]); \ + state[7] ^= (~state[3] | state[2]); \ + state[1] ^= (state[0] & state[3]); \ + state[6] ^= (state[7] | state[4]); \ + state[3] ^= (state[2] | state[4]); \ + state[0] ^= (state[5] | state[6]); \ + inv_mixcolumns_2(state); \ + add_tweakey(state, rtk1+16, rtk2_3+16); \ + state[3] ^= (state[2] & state[7]); \ + state[0] ^= (~state[6] | state[5]); \ + state[7] ^= (state[5] | ~state[4]); \ + state[2] ^= (~state[1] | state[0]); \ + state[5] ^= (state[6] & state[1]); \ + state[4] ^= (state[2] | state[3]); \ + state[1] ^= (state[0] | state[3]); \ + state[6] ^= (state[7] | state[4]); \ + inv_mixcolumns_1(state); \ + add_tweakey(state, rtk1+8, rtk2_3+8); \ + state[1] ^= (state[0] & state[2]); \ + state[6] ^= (~state[4] | state[7]); \ + state[2] ^= (state[7] | ~state[3]); \ + state[0] ^= (~state[5] | state[6]); \ + state[7] ^= (state[4] & state[5]); \ + state[3] ^= (state[0] | state[1]); \ + state[5] ^= (state[6] | state[1]); \ + state[4] ^= (state[2] | state[3]); \ + inv_mixcolumns_0(state); \ + add_tweakey(state, rtk1, rtk2_3); \ + state[5] ^= (state[6] & state[0]); \ + state[4] ^= (~state[3] | state[2]); \ + state[0] ^= (state[2] | ~state[1]); \ + state[6] ^= (~state[7] | state[4]); \ + state[2] ^= (state[3] & state[7]); \ + state[1] ^= (state[6] | state[5]); \ + state[7] ^= (state[4] | state[5]); \ + state[3] ^= (state[0] | state[1]); \ +}) + +#endif // SKINNY128_H_ \ No newline at end of file diff --git a/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_2/skinnyaead.h b/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_2/skinnyaead.h new file mode 100644 index 0000000..5500af8 --- /dev/null +++ b/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_2/skinnyaead.h @@ -0,0 +1,32 @@ +#ifndef SKINNYAEADM1_H_ +#define SKINNYAEADM1_H_ + +#include "skinny128.h" + +typedef unsigned char u8; +typedef unsigned int u32; +typedef unsigned long long u64; + +#define TAGBYTES 16 +#define KEYBYTES 16 +#define BLOCKBYTES 16 + +#define SET_DOMAIN(ptr, domain) ((ptr)[15] = (domain)) + +#define UPDATE_LFSR(lfsr) ({ \ + feedback = ((lfsr) & (1ULL << 63)) ? 0x1B : 0x00; \ + (lfsr) = ((lfsr) << 1) ^ feedback; \ +}) + +#define LE_STR_64(ptr, x) ({ \ + (ptr)[0] = (u8)(x); \ + (ptr)[1] = (u8)((x) >> 8); \ + (ptr)[2] = (u8)((x) >> 16); \ + (ptr)[3] = (u8)((x) >> 24); \ + (ptr)[4] = (u8)((x) >> 32); \ + (ptr)[5] = (u8)((x) >> 40); \ + (ptr)[6] = (u8)((x) >> 48); \ + (ptr)[7] = (u8)((x) >> 56); \ +}) + +#endif // SKINNYAEADM1_H_ \ No newline at end of file diff --git a/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_2/tk_schedule.c b/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_2/tk_schedule.c new file mode 100644 index 0000000..ae7a820 --- /dev/null +++ b/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_2/tk_schedule.c @@ -0,0 +1,464 @@ +/******************************************************************************* +* Implementation of the tweakey schedule according to the fixsliced +* representation. +* +* For more details, see the paper at: https:// +* +* @author Alexandre Adomnicai, Nanyang Technological University, +* alexandre.adomnicai@ntu.edu.sg +* +* @date May 2020 +*******************************************************************************/ +#include +#include +#include "tk_schedule.h" + +typedef unsigned char u8; +typedef unsigned int u32; + +/**************************************************************************** +* The round constants according to the fixsliced representation. +****************************************************************************/ +u32 rconst_32_bs[320] = { + 0xfffffff3, 0xffffffff, 0x00000000, 0xffffffff, + 0xffffffff, 0x000000c0, 0xffffffff, 0xffffffff, + 0xffffffff, 0x00000300, 0xcffffcff, 0xffffffff, + 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, + 0xffffffff, 0xffffffff, 0xffffffff, 0x0c000000, + 0xf3ffffff, 0x00000000, 0xffffffff, 0x33ffffff, + 0xffffffff, 0x00000000, 0xffffffff, 0xffffffff, + 0x00300000, 0xffcffffc, 0xffcfffff, 0xffcfffff, + 0xff33ffff, 0xff3fffff, 0x00000000, 0xffffffff, + 0xffffffff, 0x00f00000, 0xff3fffff, 0xffffffff, + 0xfcffffff, 0x00c00000, 0xfc3fcfff, 0xfcffffff, + 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, + 0xffffffff, 0xffffffff, 0xfffff3ff, 0x03000c00, + 0xfffff3ff, 0x00000000, 0xffffffff, 0xfcff3fff, + 0xffffffff, 0x00000000, 0xffffffff, 0xffffffff, + 0x00000c30, 0xfffcf3cf, 0xffffffff, 0xffffffcf, + 0xffffff03, 0xffffff3f, 0x00000000, 0xffffffff, + 0xffffffff, 0x000000f0, 0xffffffff, 0xffffffff, + 0xfffffcff, 0x00000300, 0xcffffc3f, 0xfffffcff, + 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, + 0xffffffff, 0xffffffff, 0xf3ffffff, 0x00000300, + 0xf3ffffff, 0x00000000, 0xffffffff, 0x33ffffff, + 0xffffffff, 0x00000000, 0xffffffff, 0xffffffff, + 0x0c000000, 0xf3fffffc, 0xffcfffff, 0xffcfffff, + 0xffc3ffff, 0xffffffff, 0x00000000, 0xffffffff, + 0xffffffff, 0x00f00000, 0xff3fffff, 0xffffffff, + 0xffffffff, 0x03c00000, 0xfc3fcfff, 0xffffffff, + 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, + 0xffffffff, 0xffffffff, 0xffffffff, 0x00000c00, + 0xfffff3ff, 0x00000000, 0xffffffff, 0xfcff33ff, + 0xffffffff, 0x00000000, 0xffffffff, 0xffffffff, + 0x00000000, 0xfffcffcf, 0xffffffcf, 0xffffffcf, + 0xfffffff3, 0xffffff3f, 0x00000000, 0xffffffff, + 0xffffffff, 0x000000f0, 0xffffff3f, 0xffffffff, + 0xfffffcff, 0x000000c0, 0xcffffc3f, 0xffffffff, + 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, + 0xffffffff, 0xffffffff, 0xffffffff, 0x0c000300, + 0xf3ffffff, 0x00000000, 0xffffffff, 0x3ffffcff, + 0xffffffff, 0x00000000, 0xffffffff, 0xffffffff, + 0x00300000, 0xf3cffffc, 0xffffffff, 0xffcfffff, + 0xff33ffff, 0xff3fffff, 0x00000000, 0xffffffff, + 0xffffffff, 0x00300000, 0xffffffff, 0xffffffff, + 0xfcffffff, 0x00000000, 0xff3fcfff, 0xfcffffff, + 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, + 0xffffffff, 0xffffffff, 0xfffff3ff, 0x03000000, + 0xffffffff, 0x00000000, 0xffffffff, 0xffff3fff, + 0xffffffff, 0x00000000, 0xffffffff, 0xffffffff, + 0x00000c00, 0xfffcf3ff, 0xffffffff, 0xffffffff, + 0xffffffc3, 0xffffffff, 0x00000000, 0xffffffff, + 0xffffffff, 0x000000c0, 0xffffffff, 0xffffffff, + 0xffffffff, 0x00000000, 0xcffffcff, 0xffffffff, + 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, + 0xffffffff, 0xffffffff, 0xffffffff, 0x0c000000, + 0xf3ffffff, 0x00000000, 0xffffffff, 0x3fffffff, + 0xffffffff, 0x00000000, 0xffffffff, 0xffffffff, + 0x00300000, 0xffcffffc, 0xffffffff, 0xffcfffff, + 0xff33ffff, 0xff3fffff, 0x00000000, 0xffffffff, + 0xffffffff, 0x00f00000, 0xffffffff, 0xffffffff, + 0xfcffffff, 0x00000000, 0xfc3fcfff, 0xfcffffff, + 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, + 0xffffffff, 0xffffffff, 0xfffff3ff, 0x03000000, + 0xfffff3ff, 0x00000000, 0xffffffff, 0xffff3fff, + 0xffffffff, 0x00000000, 0xffffffff, 0xffffffff, + 0x00000c00, 0xfffcf3ff, 0xffffffff, 0xffffffcf, + 0xffffffc3, 0xffffffff, 0x00000000, 0xffffffff, + 0xffffffff, 0x000000f0, 0xffffffff, 0xffffffff, + 0xffffffff, 0x00000300, 0xcffffc3f, 0xffffffff, + 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, + 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, + 0xf3ffffff, 0x00000000, 0xffffffff, 0x33ffffff, + 0xffffffff, 0x00000000, 0xffffffff, 0xffffffff, + 0x00300000, 0xfffffffc, 0xffcfffff, 0xffcfffff, + 0xff33ffff, 0xffffffff, 0x00000000, 0xffffffff, + 0xffffffff, 0x00f00000, 0xff3fffff, 0xffffffff, + 0xffffffff, 0x00c00000, 0xfc3fcfff, 0xfcffffff, + 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, + 0xffffffff, 0xffffffff, 0xfffff3ff, 0x00000c00, + 0xfffff3ff, 0x00000000, 0xffffffff, 0xfcff3fff, + 0xffffffff, 0x00000000, 0xffffffff, 0xffffffff, + 0x00000c00, 0xfffcffcf, 0xffffffff, 0xffffffcf +}; + +/**************************************************************************** +* Packs 2 input blocks B, B' into the state using a bitsliced representation. +* Once the packing process is complete, the 256-bit state consists of 8 +* 32-bit word and the input blocks bit positioning is as follows: +* +* 24 24' 56 56' 88 88' 120 120' | ... | 0 0' 32 32' 64 64' 96 96' +* 25 25' 57 57' 89 89' 121 121' | ... | 1 1' 33 33' 65 65' 97 97' +* 26 26' 58 58' 90 90' 122 122' | ... | 2 2' 34 34' 66 66' 98 98' +* 27 27' 59 59' 91 91' 123 123' | ... | 3 3' 35 35' 67 67' 99 99' +* 28 28' 60 60' 92 92' 124 124' | ... | 4 4' 36 36' 68 68' 100 100' +* 29 29' 61 61' 93 93' 125 125' | ... | 5 5' 37 37' 69 69' 101 101' +* 30 30' 62 62' 94 94' 126 126' | ... | 6 6' 38 38' 70 70' 102 102' +* 31 31' 63 63' 95 95' 127 127' | ... | 7 7' 39 39' 71 71' 103 103' +****************************************************************************/ +void packing(u32* out, const u8* block0, const u8* block1) { + u32 tmp; + LE_LOAD(out, block0); + LE_LOAD(out + 1, block1); + LE_LOAD(out + 2, block0 + 4); + LE_LOAD(out + 3, block1 + 4); + LE_LOAD(out + 4, block0 + 8); + LE_LOAD(out + 5, block1 + 8); + LE_LOAD(out + 6, block0 + 12); + LE_LOAD(out + 7, block1 + 12); + SWAPMOVE(out[1], out[0], 0x55555555, 1); + SWAPMOVE(out[3], out[2], 0x55555555, 1); + SWAPMOVE(out[5], out[4], 0x55555555, 1); + SWAPMOVE(out[7], out[6], 0x55555555, 1); + SWAPMOVE(out[2], out[0], 0x30303030, 2); + SWAPMOVE(out[4], out[0], 0x0c0c0c0c, 4); + SWAPMOVE(out[6], out[0], 0x03030303, 6); + SWAPMOVE(out[3], out[1], 0x30303030, 2); + SWAPMOVE(out[5], out[1], 0x0c0c0c0c, 4); + SWAPMOVE(out[7], out[1], 0x03030303, 6); + SWAPMOVE(out[4], out[2], 0x0c0c0c0c, 2); + SWAPMOVE(out[6], out[2], 0x03030303, 4); + SWAPMOVE(out[5], out[3], 0x0c0c0c0c, 2); + SWAPMOVE(out[7], out[3], 0x03030303, 4); + SWAPMOVE(out[6], out[4], 0x03030303, 2); + SWAPMOVE(out[7], out[5], 0x03030303, 2); +} + +/**************************************************************************** +* Unacks the 256-bit state into the 32-byte output byte array. +* Once the unpacking process is complete, the byte ordering within the output +* array is as follows: +* +* 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, +* 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 +****************************************************************************/ +void unpacking(u8* out, u8* out_bis, u32 *in) { + u32 tmp; + SWAPMOVE(in[6], in[4], 0x03030303, 2); + SWAPMOVE(in[7], in[5], 0x03030303, 2); + SWAPMOVE(in[5], in[3], 0x0c0c0c0c, 2); + SWAPMOVE(in[7], in[3], 0x03030303, 4); + SWAPMOVE(in[4], in[2], 0x0c0c0c0c, 2); + SWAPMOVE(in[6], in[2], 0x03030303, 4); + SWAPMOVE(in[7], in[1], 0x03030303, 6); + SWAPMOVE(in[5], in[1], 0x0c0c0c0c, 4); + SWAPMOVE(in[3], in[1], 0x30303030, 2); + SWAPMOVE(in[6], in[0], 0x03030303, 6); + SWAPMOVE(in[4], in[0], 0x0c0c0c0c, 4); + SWAPMOVE(in[2], in[0], 0x30303030, 2); + SWAPMOVE(in[1], in[0], 0x55555555, 1); + SWAPMOVE(in[3], in[2], 0x55555555, 1); + SWAPMOVE(in[5], in[4], 0x55555555, 1); + SWAPMOVE(in[7], in[6], 0x55555555, 1); + LE_STORE(out, in[0]); + LE_STORE(out_bis, in[1]); + LE_STORE(out + 4, in[2]); + LE_STORE(out_bis + 4, in[3]); + LE_STORE(out + 8, in[4]); + LE_STORE(out_bis + 8, in[5]); + LE_STORE(out + 12, in[6]); + LE_STORE(out_bis + 12, in[7]); +} + + +//Apply the permutation in a bitsliced manner, twice +void permute_tk_2(u32* tk) { + u32 tmp; + for(int i =0; i < 8; i++) { + tmp = tk[i]; + tk[i] = ROR(tmp,14) & 0xcc00cc00; + tk[i] |= (tmp & 0x000000ff) << 16; + tk[i] |= (tmp & 0xcc000000)>> 2; + tk[i] |= (tmp & 0x0033cc00) >> 8; + tk[i] |= (tmp & 0x00cc0000) >>18; + } +} + +//Apply the permutation in a bitsliced manner, 4 times +void permute_tk_4(u32* tk) { + u32 tmp; + for(int i =0; i < 8; i++) { + tmp = tk[i]; + tk[i] = ROR(tmp,22) & 0xcc0000cc; + tk[i] |= ROR(tmp,16) & 0x3300cc00; + tk[i] |= ROR(tmp, 24) & 0x00cc3300; + tk[i] |= (tmp & 0x00cc00cc) >> 2; + } +} + +//Apply the permutation in a bitsliced manner, 6 times +void permute_tk_6(u32* tk) { + u32 tmp; + for(int i =0; i < 8; i++) { + tmp = tk[i]; + tk[i] = ROR(tmp,6) & 0xcccc0000; + tk[i] |= ROR(tmp,24) & 0x330000cc; + tk[i] |= ROR(tmp,10) & 0x3333; + tk[i] |= (tmp & 0xcc) << 14; + tk[i] |= (tmp & 0x3300) << 2; + } +} + +//Apply the permutation in a bitsliced manner, 8 times +void permute_tk_8(u32* tk) { + u32 tmp; + for(int i =0; i < 8; i++) { + tmp = tk[i]; + tk[i] = ROR(tmp,24) & 0xcc000033; + tk[i] |= ROR(tmp,8) & 0x33cc0000; + tk[i] |= ROR(tmp,26) & 0x00333300; + tk[i] |= (tmp & 0x00333300) >> 6; + } +} + +//Apply the permutation in a bitsliced manner, 10 times +void permute_tk_10(u32* tk) { + u32 tmp; + for(int i =0; i < 8; i++) { + tmp = tk[i]; + tk[i] = ROR(tmp,8) & 0xcc330000; + tk[i] |= ROR(tmp,26) & 0x33000033; + tk[i] |= ROR(tmp,22) & 0x00cccc00; + tk[i] |= (tmp & 0x00330000) >> 14; + tk[i] |= (tmp & 0xcc00) >> 2; + } +} + +//Apply the permutation in a bitsliced manner, 12 times +void permute_tk_12(u32* tk) { + u32 tmp; + for(int i =0; i < 8; i++) { + tmp = tk[i]; + tk[i] = ROR(tmp,8) & 0xcc33; + tk[i] |= ROR(tmp,30) & 0x00cc00cc; + tk[i] |= ROR(tmp,10) & 0x33330000; + tk[i] |= ROR(tmp,16) & 0xcc003300; + } +} + +//Apply the permutation in a bitsliced manner, 14 times +void permute_tk_14(u32* tk) { + u32 tmp; + for(int i =0; i < 8; i++) { + tmp = tk[i]; + tk[i] = ROR(tmp,24) & 0x0033cc00; //red + tk[i] |= ROR(tmp,14) & 0x00cc0000; //green + tk[i] |= ROR(tmp,30) & 0xcc000000; //blue + tk[i] |= ROR(tmp,16) & 0x000000ff; //yellow + tk[i] |= ROR(tmp,18) & 0x33003300; //purp + } +} + +void precompute_lfsr_tk2(u32* tk, const u8* tk2_0, + const u8* tk2_1, const int rounds) { + u32 tmp; + u32 state[8]; + packing(state, tk2_0, tk2_1); + memcpy(tk, state, 32); + for(int i = 0 ; i < rounds; i+=2) { + LFSR2(state); + memcpy(tk+i*8+8, state, 32); + } +} + +void precompute_lfsr_tk3(u32* tk, const u8* tk3_0, + const u8* tk3_1, const int rounds) { + u32 tmp; + u32 state[8]; + packing(state, tk3_0, tk3_1); + for(int i = 0; i < 8; i++) + tk[i] ^= state[i]; + for(int i = 0 ; i < rounds; i+=2) { + LFSR3(state); + tk[i*8+8] ^= state[0]; + tk[i*8+9] ^= state[1]; + tk[i*8+10] ^= state[2]; + tk[i*8+11] ^= state[3]; + tk[i*8+12] ^= state[4]; + tk[i*8+13] ^= state[5]; + tk[i*8+14] ^= state[6]; + tk[i*8+15] ^= state[7]; + } +} + +/**************************************************************************** +* XOR with TK with TK1 before applying the permutations. +* The key is then rearranged to match the fixsliced representation. +****************************************************************************/ +void permute_tk(u32* tk, const u8* tk1_0, const u8* tk1_1, const int rounds) { + u32 test; + u32 tk1[8], tmp[8]; + packing(tk1, tk1_0, tk1_1); + memcpy(tmp, tk, 32); + XOR_BLOCK(tmp, tk1); + tk[0] = tmp[6] & 0xf0f0f0f0; //mask to extract rows 1&2 only + tk[1] = tmp[5] & 0xf0f0f0f0; + tk[2] = tmp[0] & 0xf0f0f0f0; + tk[3] = tmp[1] & 0xf0f0f0f0; + tk[4] = tmp[3] & 0xf0f0f0f0; + tk[5] = tmp[7] & 0xf0f0f0f0; + tk[6] = tmp[4] & 0xf0f0f0f0; + tk[7] = tmp[2] & 0xf0f0f0f0; + for(int i = 0 ; i < rounds; i+=8) { + test = (i % 16 < 8) ? 1 : 0; //to apply the right power of P + memcpy(tmp, tk+i*8+8, 32); + XOR_BLOCK(tmp, tk1); + if (test) + permute_tk_2(tmp); // applies P^2 + else + permute_tk_10(tmp); // applies P^10 + tk[i*8+8] = ROR(tmp[4],26) & 0xc3c3c3c3; //mask to extract rows 1&2 only + tk[i*8+9] = ROR(tmp[7],26) & 0xc3c3c3c3; //rotation to match fixslicing + tk[i*8+10] = ROR(tmp[6],26) & 0xc3c3c3c3; + tk[i*8+11] = ROR(tmp[5],26) & 0xc3c3c3c3; + tk[i*8+12] = ROR(tmp[1],26) & 0xc3c3c3c3; + tk[i*8+13] = ROR(tmp[2],26) & 0xc3c3c3c3; + tk[i*8+14] = ROR(tmp[3],26) & 0xc3c3c3c3; + tk[i*8+15] = ROR(tmp[0],26) & 0xc3c3c3c3; + tk[i*8+16] = ROR(tmp[3],28) & 0x03030303; //mask to extract rows 1&2 only + tk[i*8+16] |= ROR(tmp[3],12) & 0x0c0c0c0c; //rotation to match fixslicing + tk[i*8+17] = ROR(tmp[2],28) & 0x03030303; + tk[i*8+17] |= ROR(tmp[2],12) & 0x0c0c0c0c; + tk[i*8+18] = ROR(tmp[4],28) & 0x03030303; + tk[i*8+18] |= ROR(tmp[4],12) & 0x0c0c0c0c; + tk[i*8+19] = ROR(tmp[7],28) & 0x03030303; + tk[i*8+19] |= ROR(tmp[7],12) & 0x0c0c0c0c; + tk[i*8+20] = ROR(tmp[5],28) & 0x03030303; + tk[i*8+20] |= ROR(tmp[5],12) & 0x0c0c0c0c; + tk[i*8+21] = ROR(tmp[0],28) & 0x03030303; + tk[i*8+21] |= ROR(tmp[0],12) & 0x0c0c0c0c; + tk[i*8+22] = ROR(tmp[1],28) & 0x03030303; + tk[i*8+22] |= ROR(tmp[1],12) & 0x0c0c0c0c; + tk[i*8+23] = ROR(tmp[6],28) & 0x03030303; + tk[i*8+23] |= ROR(tmp[6],12) & 0x0c0c0c0c; + memcpy(tmp, tk+i*8+24, 32); + XOR_BLOCK(tmp, tk1); + if (test) + permute_tk_4(tmp); // applies P^4 + else + permute_tk_12(tmp); // applies P^12 + tk[i*8+24] = ROR(tmp[1],14) & 0x30303030; //mask to extract rows 1&2 only + tk[i*8+24] |= ROR(tmp[1],6) & 0x0c0c0c0c; //rotation to match fixslicing + tk[i*8+25] = ROR(tmp[0],14) & 0x30303030; + tk[i*8+25] |= ROR(tmp[0],6) & 0x0c0c0c0c; + tk[i*8+26] = ROR(tmp[3],14) & 0x30303030; + tk[i*8+26] |= ROR(tmp[3],6) & 0x0c0c0c0c; + tk[i*8+27] = ROR(tmp[2],14) & 0x30303030; + tk[i*8+27] |= ROR(tmp[2],6) & 0x0c0c0c0c; + tk[i*8+28] = ROR(tmp[7],14) & 0x30303030; + tk[i*8+28] |= ROR(tmp[7],6) & 0x0c0c0c0c; + tk[i*8+29] = ROR(tmp[6],14) & 0x30303030; + tk[i*8+29] |= ROR(tmp[6],6) & 0x0c0c0c0c; + tk[i*8+30] = ROR(tmp[5],14) & 0x30303030; + tk[i*8+30] |= ROR(tmp[5],6) & 0x0c0c0c0c; + tk[i*8+31] = ROR(tmp[4],14) & 0x30303030; + tk[i*8+31] |= ROR(tmp[4],6) & 0x0c0c0c0c; + tk[i*8+32] = ROR(tmp[6],16) & 0xf0f0f0f0; //mask to extract rows 1&2 only + tk[i*8+33] = ROR(tmp[5],16) & 0xf0f0f0f0; //rotation to match fixslicing + tk[i*8+34] = ROR(tmp[0],16) & 0xf0f0f0f0; + tk[i*8+35] = ROR(tmp[1],16) & 0xf0f0f0f0; + tk[i*8+36] = ROR(tmp[3],16) & 0xf0f0f0f0; + tk[i*8+37] = ROR(tmp[7],16) & 0xf0f0f0f0; + tk[i*8+38] = ROR(tmp[4],16) & 0xf0f0f0f0; + tk[i*8+39] = ROR(tmp[2],16) & 0xf0f0f0f0; + memcpy(tmp, tk+i*8+40, 32); + XOR_BLOCK(tmp, tk1); + if (test) + permute_tk_6(tmp); // applies P^6 + else + permute_tk_14(tmp); // applies P^14 + tk[i*8+40] = ROR(tmp[4],10) & 0xc3c3c3c3; //mask to extract rows 1&2 only + tk[i*8+41] = ROR(tmp[7],10) & 0xc3c3c3c3; //rotation to match fixslicing + tk[i*8+42] = ROR(tmp[6],10) & 0xc3c3c3c3; + tk[i*8+43] = ROR(tmp[5],10) & 0xc3c3c3c3; + tk[i*8+44] = ROR(tmp[1],10) & 0xc3c3c3c3; + tk[i*8+45] = ROR(tmp[2],10) & 0xc3c3c3c3; + tk[i*8+46] = ROR(tmp[3],10) & 0xc3c3c3c3; + tk[i*8+47] = ROR(tmp[0],10) & 0xc3c3c3c3; + tk[i*8+48] = ROR(tmp[3],12) & 0x03030303; //mask to extract rows 1&2 only + tk[i*8+48] |= ROR(tmp[3],28) & 0x0c0c0c0c; //rotation to match fixslicing + tk[i*8+49] = ROR(tmp[2],12) & 0x03030303; + tk[i*8+49] |= ROR(tmp[2],28) & 0x0c0c0c0c; + tk[i*8+50] = ROR(tmp[4],12) & 0x03030303; + tk[i*8+50] |= ROR(tmp[4],28) & 0x0c0c0c0c; + tk[i*8+51] = ROR(tmp[7],12) & 0x03030303; + tk[i*8+51] |= ROR(tmp[7],28) & 0x0c0c0c0c; + tk[i*8+52] = ROR(tmp[5],12) & 0x03030303; + tk[i*8+52] |= ROR(tmp[5],28) & 0x0c0c0c0c; + tk[i*8+53] = ROR(tmp[0],12) & 0x03030303; + tk[i*8+53] |= ROR(tmp[0],28) & 0x0c0c0c0c; + tk[i*8+54] = ROR(tmp[1],12) & 0x03030303; + tk[i*8+54] |= ROR(tmp[1],28) & 0x0c0c0c0c; + tk[i*8+55] = ROR(tmp[6],12) & 0x03030303; + tk[i*8+55] |= ROR(tmp[6],28) & 0x0c0c0c0c; + memcpy(tmp, tk+i*8+56, 32); + XOR_BLOCK(tmp, tk1); + if (test) + permute_tk_8(tmp); // applies P^8 + tk[i*8+56] = ROR(tmp[1],30) & 0x30303030; //mask to extract rows 1&2 only + tk[i*8+56] |= ROR(tmp[1],22) & 0x0c0c0c0c; //rotation to match fixslicing + tk[i*8+57] = ROR(tmp[0],30) & 0x30303030; + tk[i*8+57] |= ROR(tmp[0],22) & 0x0c0c0c0c; + tk[i*8+58] = ROR(tmp[3],30) & 0x30303030; + tk[i*8+58] |= ROR(tmp[3],22) & 0x0c0c0c0c; + tk[i*8+59] = ROR(tmp[2],30) & 0x30303030; + tk[i*8+59] |= ROR(tmp[2],22) & 0x0c0c0c0c; + tk[i*8+60] = ROR(tmp[7],30) & 0x30303030; + tk[i*8+60] |= ROR(tmp[7],22) & 0x0c0c0c0c; + tk[i*8+61] = ROR(tmp[6],30) & 0x30303030; + tk[i*8+61] |= ROR(tmp[6],22) & 0x0c0c0c0c; + tk[i*8+62] = ROR(tmp[5],30) & 0x30303030; + tk[i*8+62] |= ROR(tmp[5],22) & 0x0c0c0c0c; + tk[i*8+63] = ROR(tmp[4],30) & 0x30303030; + tk[i*8+63] |= ROR(tmp[4],22) & 0x0c0c0c0c; + //if (test && (i+8 < rounds)) { //only if next loop iteration + if (i+8 < rounds) { //only if next loop iteration + tk[i*8+64] = tmp[6] & 0xf0f0f0f0; //mask to extract rows 1&2 only + tk[i*8+65] = tmp[5] & 0xf0f0f0f0; + tk[i*8+66] = tmp[0] & 0xf0f0f0f0; + tk[i*8+67] = tmp[1] & 0xf0f0f0f0; + tk[i*8+68] = tmp[3] & 0xf0f0f0f0; + tk[i*8+69] = tmp[7] & 0xf0f0f0f0; + tk[i*8+70] = tmp[4] & 0xf0f0f0f0; + tk[i*8+71] = tmp[2] & 0xf0f0f0f0; + } + } +} + +//Precompute LFSR2(TK2) ^ LFSR3(TK3) ^ rconst +void precompute_rtk2_3(u32* rtk, const u8* tk2, const u8 * tk3, int rounds) { + memset(rtk, 0x00, 32*rounds); + precompute_lfsr_tk2(rtk, tk2, tk2, rounds); + precompute_lfsr_tk3(rtk, tk3, tk3, rounds); + permute_tk(rtk, (u8*)(rtk+16), (u8*)(rtk+16), rounds); // rtk+16 is NULL + for(int i = 0; i < rounds; i++) { // add rconsts + for(int j = 0; j < 8; j++) + rtk[i*8+j] ^= rconst_32_bs[i*8+j]; + } +} + +//Precompute TK1 +void precompute_rtk1(u32* rtk1, const u8* tk1, const u8* tk1_bis) { + memset(rtk1, 0x00, 32*16); + permute_tk(rtk1, tk1, tk1_bis, 16); +} diff --git a/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_2/tk_schedule.h b/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_2/tk_schedule.h new file mode 100644 index 0000000..29a2ddb --- /dev/null +++ b/skinny/Implementations/crypto_aead/skinnyaeadm1+v11/opt32_2/tk_schedule.h @@ -0,0 +1,72 @@ +#ifndef TK_SCHEDULE_BS_H_ +#define TK_SCHEDULE_BS_H_ + +typedef unsigned char u8; +typedef unsigned int u32; + +typedef struct { + u32 rtk1[8*16]; + u32 rtk2_3[8*40]; +} tweakey; + +void packing(u32* out, const u8* block0, const u8* block1); +void unpacking(u8* out, u8* out_bis, u32 *in); +void precompute_rtk2_3(u32* rtk, const u8* tk2, const u8* tk3, int rounds); +void precompute_rtk1(u32* rtk1, const u8* tk1, const u8* tk1_bis); + +#define LFSR2(tk) ({ \ + tmp = (tk)[0] ^ (tk)[2]; \ + (tk)[0] = (tk)[1]; \ + (tk)[1] = (tk)[2]; \ + (tk)[2] = (tk)[3]; \ + (tk)[3] = (tk)[4]; \ + (tk)[4] = (tk)[5]; \ + (tk)[5] = (tk)[6]; \ + (tk)[6] = (tk)[7]; \ + (tk)[7] = tmp; \ +}) + +#define LFSR3(tk) ({ \ + tmp = (tk)[7] ^ (tk)[1]; \ + (tk)[7] = (tk)[6]; \ + (tk)[6] = (tk)[5]; \ + (tk)[5] = (tk)[4]; \ + (tk)[4] = (tk)[3]; \ + (tk)[3] = (tk)[2]; \ + (tk)[2] = (tk)[1]; \ + (tk)[1] = (tk)[0]; \ + (tk)[0] = tmp; \ +}) + +#define XOR_BLOCK(x,y) ({ \ + (x)[0] ^= (y)[0]; \ + (x)[1] ^= (y)[1]; \ + (x)[2] ^= (y)[2]; \ + (x)[3] ^= (y)[3]; \ + (x)[4] ^= (y)[4]; \ + (x)[5] ^= (y)[5]; \ + (x)[6] ^= (y)[6]; \ + (x)[7] ^= (y)[7]; \ +}) + +#define SWAPMOVE(a, b, mask, n) ({ \ + tmp = (b ^ (a >> n)) & mask; \ + b ^= tmp; \ + a ^= (tmp << n); \ +}) + +#define LE_LOAD(x, y) \ + *(x) = (((u32)(y)[3] << 24) | \ + ((u32)(y)[2] << 16) | \ + ((u32)(y)[1] << 8) | \ + (y)[0]); + +#define LE_STORE(x, y) \ + (x)[0] = (y) & 0xff; \ + (x)[1] = ((y) >> 8) & 0xff; \ + (x)[2] = ((y) >> 16) & 0xff; \ + (x)[3] = (y) >> 24; + +#define ROR(x,y) (((x) >> (y)) | ((x) << (32 - (y)))) + +#endif // TK_SCHEDULE_BS_H_ \ No newline at end of file diff --git a/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/armcortexm_1/api.h b/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/armcortexm_1/api.h new file mode 100644 index 0000000..a4aa567 --- /dev/null +++ b/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/armcortexm_1/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/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/armcortexm_1/crypto_aead.h b/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/armcortexm_1/crypto_aead.h new file mode 100644 index 0000000..e2ca9b0 --- /dev/null +++ b/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/armcortexm_1/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 +); \ No newline at end of file diff --git a/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/armcortexm_1/encrypt.c b/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/armcortexm_1/encrypt.c new file mode 100644 index 0000000..bdfd14d --- /dev/null +++ b/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/armcortexm_1/encrypt.c @@ -0,0 +1,200 @@ +/****************************************************************************** +* Constant-time implementation of SKINNY-AEAD-M1 (v1.1). +* +* Two blocks are treated in parallel with SKINNY-128-384 whenever possible. +* +* For more details, see the paper at: https:// +* +* @author Alexandre Adomnicai, Nanyang Technological University, +* alexandre.adomnicai@ntu.edu.sg +* +* @date May 2020 +******************************************************************************/ +#include "skinny128.h" +#include "skinnyaead.h" +#include +#include + +/****************************************************************************** +* x ^= y where x, y are 128-bit blocks (16 bytes array). +******************************************************************************/ +static void xor_block(u8 * x, const u8* y) { + for(int i = 0; i < BLOCKBYTES; i++) + x[i] ^= y[i]; +} + +/****************************************************************************** +* Encryption and authentication using SKINNY-AEAD-M1 +******************************************************************************/ +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) { + u64 i,lfsr = 1; + u8 feedback; + u32 rtk1[4*16]; + u32 rtk2_3[4*SKINNY128_384_ROUNDS]; + u8 tmp[BLOCKBYTES], auth[BLOCKBYTES], sum [BLOCKBYTES]; + (void)nsec; + + // ----------------- Initialization ----------------- + *clen = mlen + TAGBYTES; + tkschedule_lfsr(rtk2_3, npub, k, SKINNY128_384_ROUNDS); + tkschedule_perm(rtk2_3); + memset(tmp, 0x00, BLOCKBYTES); + memset(auth, 0x00, BLOCKBYTES); + memset(sum, 0x00, BLOCKBYTES); + // ----------------- Initialization ----------------- + + // ----------------- Process the plaintext ----------------- + while (mlen >= BLOCKBYTES) { // while entire blocks to process + LE_STR_64(tmp, lfsr); + tkschedule_perm_tk1(rtk1, tmp); // precompute RTK1 given the LFSR + skinny128_384(c, rtk2_3, m, rtk1); + xor_block(sum, m); // sum for tag computation + mlen -= BLOCKBYTES; + c += BLOCKBYTES; + m += BLOCKBYTES; + UPDATE_LFSR(lfsr); // update lfsr for next block + } + SET_DOMAIN(tmp, 0x04); // domain for tag computation + if (mlen > 0) { // last block is partial + LE_STR_64(tmp, lfsr); // lfsr for last block + SET_DOMAIN(tmp, 0x01); // domain for padding + for(i = 0; i < mlen; i++) + sum[i] ^= m[i]; // sum for tag computation + sum[i] ^= 0x80; // padding + tkschedule_perm_tk1(rtk1, tmp); + skinny128_384(auth, rtk2_3, auth, rtk1); // encrypt 'auth' = 0^16 + for(i = 0; i < mlen; i++) + c[i] = auth[i] ^ m[i]; // encrypted padded block + c += mlen; + SET_DOMAIN(tmp, 0x05); // domain for tag computation + UPDATE_LFSR(lfsr); + } + LE_STR_64(tmp, lfsr); // lfsr for tag computation + tkschedule_perm_tk1(rtk1, tmp); + skinny128_384(sum, rtk2_3, sum, rtk1); // compute the tag + memcpy(c, sum, TAGBYTES); + // ----------------- Process the plaintext ----------------- + + // ----------------- Process the associated data ----------------- + lfsr = 1; + SET_DOMAIN(tmp, 0x02); + memset(auth, 0x00, BLOCKBYTES); + while (adlen >= BLOCKBYTES) { + LE_STR_64(tmp, lfsr); + tkschedule_perm_tk1(rtk1, tmp); + skinny128_384(sum, rtk2_3, ad, rtk1); // use 'sum' as tmp array + xor_block(auth, sum); + adlen -= BLOCKBYTES; + ad += BLOCKBYTES; + UPDATE_LFSR(lfsr); + } + if (adlen > 0) { + LE_STR_64(tmp, lfsr); + SET_DOMAIN(tmp, 0x03); // domain for padding ad + tkschedule_perm_tk1(rtk1, tmp); + memset(tmp, 0x00, BLOCKBYTES); // padding + memcpy(tmp, ad, adlen); // padding + tmp[adlen] = 0x80; // padding + skinny128_384(tmp, rtk2_3, tmp, rtk1); + xor_block(auth, tmp); + } + xor_block(c, auth); // XOR for tag computation + // ----------------- Process the associated data ----------------- + return 0; +} + +/****************************************************************************** +* Encryption and authentication using SKINNY-AEAD-M1 +******************************************************************************/ +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) { + u64 i,lfsr = 1; + u8 feedback; + u32 rtk1[4*16]; + u32 rtk2_3[4*SKINNY128_384_ROUNDS]; + u8 tmp[2*BLOCKBYTES], auth[BLOCKBYTES], sum[BLOCKBYTES]; + (void)nsec; + + if (clen < TAGBYTES) + return -1; + + // ----------------- Initialization ----------------- + clen -= TAGBYTES; + *mlen = clen; + tkschedule_lfsr(rtk2_3, npub, k, SKINNY128_384_ROUNDS); + tkschedule_perm(rtk2_3); + memset(tmp, 0x00, 2*BLOCKBYTES); + memset(auth, 0x00, BLOCKBYTES); + memset(sum, 0x00, BLOCKBYTES); + // ----------------- Initialization ----------------- + + // ----------------- Process the plaintext ----------------- + while (clen >= BLOCKBYTES) { // while entire blocks to process + LE_STR_64(tmp, lfsr); + tkschedule_perm_tk1(rtk1, tmp); // precompute RTK1 given the LFSR + skinny128_384_inv(m, rtk2_3, c, rtk1); + xor_block(sum, m); // sum for tag computation + clen -= BLOCKBYTES; + c += BLOCKBYTES; + m += BLOCKBYTES; + UPDATE_LFSR(lfsr); // update LFSR for the next block + } + SET_DOMAIN(tmp, 0x04); // domain for tag computation + if (clen > 0) { // last block is partial + LE_STR_64(tmp, lfsr); // lfsr for last block + SET_DOMAIN(tmp, 0x01); // domain for padding + tkschedule_perm_tk1(rtk1, tmp); + skinny128_384(auth, rtk2_3, auth, rtk1); + for(i = 0; i < clen; i++) { + m[i] = auth[i] ^ c[i]; // encrypted padded block + sum[i] ^= m[i]; // sum for tag computation + } + sum[i] ^= 0x80; // padding + c += clen; + SET_DOMAIN(tmp, 0x05); // domain for tag computation + UPDATE_LFSR(lfsr); + } + LE_STR_64(tmp, lfsr); // lfsr for tag computation + tkschedule_perm_tk1(rtk1, tmp); + skinny128_384(sum, rtk2_3, sum, rtk1); // compute the tag + // ----------------- Process the plaintext ----------------- + + // ----------------- Process the associated data ----------------- + lfsr = 1; + SET_DOMAIN(tmp, 0x02); + memset(auth, 0x00, BLOCKBYTES); + while (adlen >= BLOCKBYTES) { + LE_STR_64(tmp, lfsr); + tkschedule_perm_tk1(rtk1, tmp); + skinny128_384(tmp + BLOCKBYTES, rtk2_3, ad, rtk1); + xor_block(auth, tmp + BLOCKBYTES); + adlen -= BLOCKBYTES; + ad += BLOCKBYTES; + UPDATE_LFSR(lfsr); + } + if (adlen > 0) { + LE_STR_64(tmp, lfsr); + SET_DOMAIN(tmp, 0x03); // domain for padding ad + tkschedule_perm_tk1(rtk1, tmp); + memset(tmp, 0x00, BLOCKBYTES); // padding + memcpy(tmp, ad, adlen); // padding + tmp[adlen] ^= 0x80; // padding + skinny128_384(tmp, rtk2_3, tmp, rtk1); + xor_block(auth, tmp); + } + xor_block(sum, auth); // XOR for tag computation + feedback = 0; + for(i = 0; i < TAGBYTES; i++) + feedback |= sum[i] ^ c[i]; // constant-time tag verification + return feedback; + // ----------------- Process the associated data ----------------- +} \ No newline at end of file diff --git a/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/armcortexm_1/skinny128.h b/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/armcortexm_1/skinny128.h new file mode 100644 index 0000000..6611571 --- /dev/null +++ b/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/armcortexm_1/skinny128.h @@ -0,0 +1,16 @@ +#ifndef SKINNY128_H_ +#define SKINNY128_H_ + +typedef unsigned char u8; +typedef unsigned int u32; + +#define SKINNY128_384_ROUNDS 56 + +extern void skinny128_384(u8* ctext, const u32* rtk2_3, const u8* ptext, const u32* rtk1); +extern void skinny128_384_inv(u8* ptext, const u32* rtk2_3, const u8* ctext, const u32* rtk1); +extern void tkschedule_lfsr(u32* rtk2_3, const u8* tk2, const u8* tk3, const int rounds); +extern void tkschedule_perm(u32* rtk2_3); +extern void tkschedule_perm_tk1(u32* rtk1, const u8* tk1); + + +#endif // SKINNY128_H_ \ No newline at end of file diff --git a/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/armcortexm_1/skinny128.s b/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/armcortexm_1/skinny128.s new file mode 100644 index 0000000..a6d13d7 --- /dev/null +++ b/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/armcortexm_1/skinny128.s @@ -0,0 +1,2407 @@ +/******************************************************************************* +* ARM assembly implementation of fixsliced SKINNY-128-384. +* +* For more details, see the paper at: https:// +* +* @author Alexandre Adomnicai, Nanyang Technological University, +* alexandre.adomnicai@ntu.edu.sg +* +* @date May 2020 +*******************************************************************************/ + +.syntax unified +.thumb + +/******************************************************************************* +* applies P^2 on the tweakey state in a bitsliced manner +*******************************************************************************/ +.align 2 +p2: + movw r1, #0xcc00 + movt r1, #0xcc00 //r1 <- 0xcc00cc00 + movw r10, #0xcc00 + movt r10, #0x0033 //r10<- 0xcc000033 + and r11, r1, r6, ror #14 + bfi r11, r6, #16, #8 + and r12, r6, #0xcc000000 + orr r11, r11, r12, lsr #2 + and r12, r10, r6 + orr r11, r11, r12, lsr #8 + and r12, r6, #0x00cc0000 + orr r6, r11, r12, lsr #18 + and r11, r1, r7, ror #14 + bfi r11, r7, #16, #8 + and r12, r7, #0xcc000000 + orr r11, r11, r12, lsr #2 + and r12, r10, r7 + orr r11, r11, r12, lsr #8 + and r12, r7, #0x00cc0000 + orr r7, r11, r12, lsr #18 + and r11, r1, r8, ror #14 + bfi r11, r8, #16, #8 + and r12, r8, #0xcc000000 + orr r11, r11, r12, lsr #2 + and r12, r10, r8 + orr r11, r11, r12, lsr #8 + and r12, r8, #0x00cc0000 + orr r8, r11, r12, lsr #18 + and r11, r1, r9, ror #14 + bfi r11, r9, #16, #8 + and r12, r9, #0xcc000000 + orr r11, r11, r12, lsr #2 + and r12, r10, r9 + orr r11, r11, r12, lsr #8 + and r12, r9, #0x00cc0000 + orr r9, r11, r12, lsr #18 + bx lr + +/******************************************************************************* +* applies P^4 on the tweakey state in a bitsliced manner +*******************************************************************************/ +.align 2 +p4: + str.w r14, [sp] //store r14 on the stack + movw r14, #0x00cc + movt r14, #0xcc00 //r14<- 0xcc0000cc + movw r12, #0xcc00 + movt r12, #0x3300 //r12<- 0x3300cc00 + movw r11, #0x00cc + movt r11, #0x00cc //r11<- 0x00cc00cc + and r10, r14, r6, ror #22 + and r1, r12, r6, ror #16 + orr r10, r10, r1 + and r1, r6, r11 + orr r10, r10, r1, lsr #2 + movw r1, #0xcc33 //r1 <- 0x0000cc33 + and r6, r6, r1 + orr r6, r10, r6, ror #24 + and r10, r14, r7, ror #22 + and r1, r12, r7, ror #16 + orr r10, r10, r1 + and r1, r7, r11 + orr r10, r10, r1, lsr #2 + movw r1, #0xcc33 //r1 <- 0x0000cc33 + and r7, r7, r1 + orr r7, r10, r7, ror #24 + and r10, r14, r8, ror #22 + and r1, r12, r8, ror #16 + orr r10, r10, r1 + and r1, r8, r11 + orr r10, r10, r1, lsr #2 + movw r1, #0xcc33 //r1 <- 0x0000cc33 + and r8, r8, r1 + orr r8, r10, r8, ror #24 + and r10, r14, r9, ror #22 + ldr.w r14, [sp] //restore r14 + and r12, r12, r9, ror #16 + orr r10, r10, r12 + and r12, r9, r11 + orr r10, r10, r12, lsr #2 + movw r12, #0xcc33 //r1 <- 0x0000cc33 + and r9, r9, r12 + orr r9, r10, r9, ror #24 + bx lr + +/******************************************************************************* +* applies P^6 on the tweakey state in a bitsliced manner +*******************************************************************************/ +.align 2 +p6: + movw r1, #0x3333 //r1 <- 0x00003333 + movw r12, #0x00cc + movt r12, #0x3300 //r12<- 0x330000cc + and r10, r6, r1, ror #8 // --- permute r6 6 times + and r11, r12, r6, ror #24 + orr r11, r11, r10, ror #6 + and r10, r1, r6, ror #10 + orr r11, r11, r10 + and r10, r6, #0x000000cc + orr r11, r11, r10, lsl #14 + and r10, r6, #0x00003300 + orr r6, r11, r10, lsl #2 // permute r6 6 times --- + and r10, r7, r1, ror #8 // --- permute r7 6 times + and r11, r12, r7, ror #24 + orr r11, r11, r10, ror #6 + and r10, r1, r7, ror #10 + orr r11, r11, r10 + and r10, r7, #0x000000cc + orr r11, r11, r10, lsl #14 + and r10, r7, #0x00003300 + orr r7, r11, r10, lsl #2 // permute r7 6 times --- + and r10, r8, r1, ror #8 // --- permute r8 6 times + and r11, r12, r8, ror #24 + orr r11, r11, r10, ror #6 + and r10, r1, r8, ror #10 + orr r11, r11, r10 + and r10, r8, #0x000000cc + orr r11, r11, r10, lsl #14 + and r10, r8, #0x00003300 + orr r8, r11, r10, lsl #2 // permute r8 6 times --- + and r10, r9, r1, ror #8 // --- permute r9 6 times + and r11, r12, r9, ror #24 + orr r11, r11, r10, ror #6 + and r10, r1, r9, ror #10 + orr r11, r11, r10 + and r10, r9, #0x000000cc + orr r11, r11, r10, lsl #14 + and r10, r9, #0x00003300 // permute r9 6 times --- + orr r9, r11, r10, lsl #2 + bx lr + +/******************************************************************************* +* applies P^8 on the tweakey state in a bitsliced manner +*******************************************************************************/ +.align 2 +p8: + movw r12, #0x3333 //r12<- 0x00003333 + movw r1, #0x0000 + movt r1, #0x33cc //r1 <- 0x33cc0000 + and r10, r6, r1 // --- permute r6 8 times + and r11, r1, r6, ror #8 + orr r11, r11, r10, ror #24 + and r10, r6, r12, lsl #2 + orr r11, r11, r10, ror #26 + and r10, r6, r12, lsl #8 + orr r6, r11, r10, lsr #6 // permute r6 8 times --- + and r10, r7, r1 // --- permute r7 8 times + and r11, r1, r7, ror #8 + orr r11, r11, r10, ror #24 + and r10, r7, r12, lsl #2 + orr r11, r11, r10, ror #26 + and r10, r7, r12, lsl #8 + orr r7, r11, r10, lsr #6 // permute r7 8 times --- + and r10, r8, r1 // --- permute r8 8 times + and r11, r1, r8, ror #8 + orr r11, r11, r10, ror #24 + and r10, r8, r12, lsl #2 + orr r11, r11, r10, ror #26 + and r10, r8, r12, lsl #8 + orr r8, r11, r10, lsr #6 // permute r8 8 times --- + and r10, r9, r1 // --- permute r9 8 times + and r11, r1, r9, ror #8 + orr r11, r11, r10, ror #24 + and r10, r9, r12, lsl #2 + orr r11, r11, r10, ror #26 + and r10, r9, r12, lsl #8 + orr r9, r11, r10, lsr #6 // permute r9 8 times --- + bx lr + +/******************************************************************************* +* applies P^10 on the tweakey state in a bitsliced manner +*******************************************************************************/ +.align 2 +p10: + movw r12, #0x0033 + movt r12, #0x3300 //r12<- 0x33000033 + movw r1, #0xcc33 //r1 <- 0x0000cc33 + and r10, r6, r1, ror #8 // --- permute r6 10 times + and r11, r12, r6, ror #26 + orr r11, r11, r10, ror #8 + and r10, r6, r12, ror #24 + orr r11, r11, r10, ror #22 + and r10, r6, #0x00330000 + orr r11, r11, r10, lsr #14 + and r10, r6, #0x0000cc00 + orr r6, r11, r10, lsr #2 // permute r6 10 times --- + and r10, r7, r1, ror #8 // --- permute r6 10 times + and r11, r12, r7, ror #26 + orr r11, r11, r10, ror #8 + and r10, r7, r12, ror #24 + orr r11, r11, r10, ror #22 + and r10, r7, #0x00330000 + orr r11, r11, r10, lsr #14 + and r10, r7, #0x0000cc00 + orr r7, r11, r10, lsr #2 // permute r6 10 times --- + and r10, r8, r1, ror #8 // --- permute r6 10 times + and r11, r12, r8, ror #26 + orr r11, r11, r10, ror #8 + and r10, r8, r12, ror #24 + orr r11, r11, r10, ror #22 + and r10, r8, #0x00330000 + orr r11, r11, r10, lsr #14 + and r10, r8, #0x0000cc00 + orr r8, r11, r10, lsr #2 // permute r6 10 times --- + and r10, r9, r1, ror #8 // --- permute r6 10 times + and r11, r12, r9, ror #26 + orr r11, r11, r10, ror #8 + and r10, r9, r12, ror #24 + orr r11, r11, r10, ror #22 + and r10, r9, #0x00330000 + orr r11, r11, r10, lsr #14 + and r10, r9, #0x0000cc00 + orr r9, r11, r10, lsr #2 // permute r6 10 times --- + bx lr + +/******************************************************************************* +* applies P^12 on the tweakey state in a bitsliced manner +*******************************************************************************/ +.align 2 +p12: + str.w r14, [sp] //store r14 on the stack + movw r14, #0xcc33 //r14<- 0x0000cc33 + movw r12, #0x00cc + movt r12, #0x00cc //r12<- 0x00cc00cc + movw r1, #0x3300 + movt r1, #0xcc00 //r1 <- 0xcc003300 + and r10, r14, r6, ror #8 // --- permute r6 12 times + and r11, r12, r6, ror #30 + orr r11, r11, r10 + and r10, r1, r6, ror #16 + orr r11, r11, r10 + movw r10, #0xcccc //r10<- 0x0000cccc + and r10, r6, r10, ror #8 + orr r6, r11, r10, ror #10 // permute r6 12 times --- + and r10, r14, r7, ror #8 // --- permute r7 12 times + and r11, r12, r7, ror #30 + orr r11, r11, r10 + and r10, r1, r7, ror #16 + orr r11, r11, r10 + movw r10, #0xcccc //r10<- 0x0000cccc + and r10, r7, r10, ror #8 + orr r7, r11, r10, ror #10 // permute r7 12 times --- + and r10, r14, r8, ror #8 // --- permute r8 12 times + and r11, r12, r8, ror #30 + orr r11, r11, r10 + and r10, r1, r8, ror #16 + orr r11, r11, r10 + movw r10, #0xcccc //r10<- 0x0000cccc + and r10, r8, r10, ror #8 + orr r8, r11, r10, ror #10 // permute r8 12 times --- + and r10, r14, r9, ror #8 // --- permute r9 12 times + and r11, r12, r9, ror #30 + orr r11, r11, r10 + and r10, r1, r9, ror #16 + ldr.w r14, [sp] + orr r11, r11, r10 + movw r10, #0xcccc //r10<- 0x0000cccc + and r10, r9, r10, ror #8 + orr r9, r11, r10, ror #10 // permute r9 12 times --- + bx lr + +/******************************************************************************* +* applies P^14 on the tweakey state in a bitsliced manner +*******************************************************************************/ +.align 2 +p14: + movw r1, #0xcc00 + movt r1, #0x0033 //r1 <- 0x0033cc00 + movw r12, #0xcc00 + movt r12, #0xcc00 //r12<- 0x33003300 + and r10, r1, r6, ror #24 // --- permute r6 14 times + and r11, r6, #0x00000033 + orr r11, r10, r11, ror #14 + and r10, r6, #0x33000000 + orr r11, r11, r10, ror #30 + and r10, r6, #0x00ff0000 + orr r11, r11, r10, ror #16 + and r10, r6, r12 + orr r6, r11, r10, ror #18 // permute r6 14 times --- + and r10, r1, r7, ror #24 // --- permute r7 14 times + and r11, r7, #0x00000033 + orr r11, r10, r11, ror #14 + and r10, r7, #0x33000000 + orr r11, r11, r10, ror #30 + and r10, r7, #0x00ff0000 + orr r11, r11, r10, ror #16 + and r10, r7, r12 + orr r7, r11, r10, ror #18 // permute r7 14 times --- + and r10, r1, r8, ror #24 // --- permute r8 14 times + and r11, r8, #0x00000033 + orr r11, r10, r11, ror #14 + and r10, r8, #0x33000000 + orr r11, r11, r10, ror #30 + and r10, r8, #0x00ff0000 + orr r11, r11, r10, ror #16 + and r10, r8, r12 + orr r8, r11, r10, ror #18 // permute r8 14 times --- + and r10, r1, r9, ror #24 // --- permute r9 14 times + and r11, r9, #0x00000033 + orr r11, r10, r11, ror #14 + and r10, r9, #0x33000000 + orr r11, r11, r10, ror #30 + and r10, r9, #0x00ff0000 + orr r11, r11, r10, ror #16 + and r10, r9, r12 + orr r9, r11, r10, ror #18 // permute r9 14 times --- + bx lr + +.align 2 +packing: + eor r12, r2, r2, lsr #3 + and r12, r12, r10 + eor r2, r2, r12 + eor r2, r2, r12, lsl #3 //SWAPMOVE(r2, r2, 0x0a0a0a0a, 3) + eor r12, r3, r3, lsr #3 + and r12, r12, r10 + eor r3, r3, r12 + eor r3, r3, r12, lsl #3 //SWAPMOVE(r3, r3, 0x0a0a0a0a, 3) + eor r12, r4, r4, lsr #3 + and r12, r12, r10 + eor r4, r4, r12 + eor r4, r4, r12, lsl #3 //SWAPMOVE(r4, r4, 0x0a0a0a0a, 3) + eor r12, r5, r5, lsr #3 + and r12, r12, r10 + eor r5, r5, r12 + eor r5, r5, r12, lsl #3 //SWAPMOVE(r5, r5, 0x0a0a0a0a, 3) + eor r12, r2, r4, lsr #2 + and r12, r12, r11 + eor r2, r2, r12 + eor r4, r4, r12, lsl #2 //SWAPMOVE(r4, r2, 0x30303030, 2) + eor r12, r2, r3, lsr #4 + and r12, r12, r11, lsr #2 + eor r2, r2, r12 + eor r3, r3, r12, lsl #4 //SWAPMOVE(r3, r2, 0x0c0c0c0c, 4) + eor r12, r2, r5, lsr #6 + and r12, r12, r11, lsr #4 + eor r2, r2, r12 + eor r5, r5, r12, lsl #6 //SWAPMOVE(r5, r2, 0x03030303, 6) + eor r12, r4, r3, lsr #2 + and r12, r12, r11, lsr #2 + eor r4, r4, r12 + eor r3, r3, r12, lsl #2 //SWAPMOVE(r3, r4, 0x0c0c0c0c, 2) + eor r12, r4, r5, lsr #4 + and r12, r12, r11, lsr #4 + eor r4, r4, r12 + eor r5, r5, r12, lsl #4 //SWAPMOVE(r5, r4, 0x03030303, 4) + eor r12, r3, r5, lsr #2 + and r12, r12, r11, lsr #4 + eor r3, r3, r12 + eor r5, r5, r12, lsl #2 //SWAPMOVE(r5, r3, 0x03030303, 2) + bx lr + +.align 2 +unpacking: + movw r6, #0x0a0a + movt r6, #0x0a0a //r6 <- 0x0a0a0a0a + eor r10, r3, r5, lsr #2 + and r10, r10, r7, lsr #4 + eor r3, r3, r10 + eor r5, r5, r10, lsl #2 //SWAPMOVE(r5, r3, 0x03030303, 2) + eor r10, r4, r5, lsr #4 + and r10, r10, r7, lsr #4 + eor r4, r4, r10 + eor r5, r5, r10, lsl #4 //SWAPMOVE(r5, r4, 0x03030303, 4) + eor r10, r4, r3, lsr #2 + and r10, r10, r7, lsr #2 + eor r4, r4, r10 + eor r3, r3, r10, lsl #2 //SWAPMOVE(r3, r4, 0x0c0c0c0c, 2) + eor r10, r2, r5, lsr #6 + and r10, r10, r7, lsr #4 + eor r2, r2, r10 + eor r5, r5, r10, lsl #6 //SWAPMOVE(r5, r2, 0x03030303, 6) + eor r10, r2, r3, lsr #4 + and r10, r10, r7, lsr #2 + eor r2, r2, r10 + eor r3, r3, r10, lsl #4 //SWAPMOVE(r3, r2, 0x0c0c0c0c, 4) + eor r10, r2, r4, lsr #2 + and r10, r10, r7 + eor r2, r2, r10 + eor r4, r4, r10, lsl #2 //SWAPMOVE(r4, r2, 0x30303030, 2) + eor r10, r5, r5, lsr #3 + and r10, r10, r6 + eor r5, r5, r10 + eor r5, r5, r10, lsl #3 //SWAPMOVE(r5, r5, 0x0a0a0a0a, 3) + eor r10, r4, r4, lsr #3 + and r10, r10, r6 + eor r4, r4, r10 + eor r4, r4, r10, lsl #3 //SWAPMOVE(r4, r4, 0x0a0a0a0a, 3) + eor r10, r3, r3, lsr #3 + and r10, r10, r6 + eor r3, r3, r10 + eor r3, r3, r10, lsl #3 //SWAPMOVE(r3, r3, 0x0a0a0a0a, 3) + eor r10, r2, r2, lsr #3 + and r10, r10, r6 + eor r2, r2, r10 + eor r2, r2, r10, lsl #3 //SWAPMOVE(r2, r2, 0x0a0a0a0a, 3) + bx lr + +/****************************************************************************** +* Compute LFSR2(TK2) ^ LFSR3(TK3) for all rounds. +* Performing both at the same time allows to save some memory accesses. +******************************************************************************/ +@ void tkschedule_lfsr(u32* tk, const u8* tk2, const u8* tk3, const int rounds) +.global tkschedule_lfsr +.type tkschedule_lfsr,%function +.align 2 +tkschedule_lfsr: + push {r0-r12, r14} + ldr.w r3, [r1, #8] //load tk2 (3rd word) + ldr.w r4, [r1, #4] //load tk2 (2nd word) + ldr.w r5, [r1, #12] //load tk2 (4th word) + ldr.w r12, [r1] //load tk2 (1st word) + mov r1, r2 //move tk3 address in r1 + mov r2, r12 //move 1st tk2 word in r2 + movw r10, #0x0a0a + movt r10, #0x0a0a //r10 <- 0x0a0a0a0a + movw r11, #0x3030 + movt r11, #0x3030 //r7 <- 0x30303030 + bl packing //pack tk2 + mov r6, r2 //move tk2 from r2-r5 to r6-r9 + mov r7, r3 //move tk2 from r2-r5 to r6-r9 + mov r8, r4 //move tk2 from r2-r5 to r6-r9 + mov r9, r5 //move tk2 from r2-r5 to r6-r9 + ldr.w r3, [r1, #8] //load tk3 (3rd word) + ldr.w r4, [r1, #4] //load tk3 (2nd word) + ldr.w r5, [r1, #12] //load tk3 (4th) word) + ldr.w r2, [r1] //load tk3 (1st) word) + bl packing //pack tk3 + eor r10, r10, r10, lsl #4 //r10<- 0xaaaaaaaa + ldr.w r1, [sp, #12] //load loop counter in r1 + eor r11, r2, r6 //tk2 ^ tk3 (1st word) + eor r12, r3, r7 //tk2 ^ tk3 (2nd word) + strd r11, r12, [r0], #8 //store in tk + eor r11, r4, r8 //tk2 ^ tk3 (3rd word) + eor r12, r5, r9 //tk2 ^ tk3 (4th word) + strd r11, r12, [r0], #8 //store in tk + loop: + and r12, r8, r10 // --- apply LFSR2 to tk2 + eor r12, r12, r6 + and r14, r10, r12, lsl #1 + and r12, r12, r10 + orr r6, r14, r12, lsr #1 // apply LFSR2 to tk2 --- + and r12, r3, r10 // --- apply LFSR3 to tk3 + eor r12, r5, r12, lsr #1 + and r14, r10, r12, lsl #1 + and r12, r12, r10 + orr r5, r14, r12, lsr #1 // apply LFSR3 to tk3 --- + eor r11, r5, r7 //tk2 ^ tk3 (1st word) + eor r12, r2, r8 //tk2 ^ tk3 (2nd word) + strd r11, r12, [r0], #8 //store in tk + eor r11, r3, r9 //tk2 ^ tk3 (3rd word) + eor r12, r4, r6 //tk2 ^ tk3 (4th word) + strd r11, r12, [r0], #24 //store in tk + and r12, r9, r10 // --- apply LFSR2 to tk2 + eor r12, r12, r7 + and r14, r10, r12, lsl #1 + and r12, r12, r10 + orr r7, r14, r12, lsr #1 // apply LFSR2 to tk2 --- + and r12, r2, r10 // --- apply LFSR3 to tk3 + eor r12, r4, r12, lsr #1 + and r14, r10, r12, lsl #1 + and r12, r12, r10 + orr r4, r14, r12, lsr #1 // apply LFSR3 to tk3 --- + eor r11, r4, r8 //tk2 ^ tk3 (1st word) + eor r12, r5, r9 //tk2 ^ tk3 (2nd word) + strd r11, r12, [r0], #8 //store in tk + eor r11, r2, r6 //tk2 ^ tk3 (3rd word) + eor r12, r3, r7 //tk2 ^ tk3 (4th word) + strd r11, r12, [r0], #24 //store in tk + and r12, r6, r10 // --- apply LFSR2 to tk2 + eor r12, r12, r8 + and r14, r10, r12, lsl #1 + and r12, r12, r10 + orr r8, r14, r12, lsr #1 // apply LFSR2 to tk2 --- + and r12, r5, r10 // --- apply LFSR3 to tk3 + eor r12, r3, r12, lsr #1 + and r14, r10, r12, lsl #1 + and r12, r12, r10 + orr r3, r14, r12, lsr #1 // apply LFSR3 to tk3 --- + eor r11, r3, r9 //tk2 ^ tk3 (1st word) + eor r12, r4, r6 //tk2 ^ tk3 (2nd word) + strd r11, r12, [r0], #8 //store in tk + eor r11, r5, r7 //tk2 ^ tk3 (3rd word) + eor r12, r2, r8 //tk2 ^ tk3 (4th word) + strd r11, r12, [r0], #24 //store in tk + and r12, r7, r10 // --- apply LFSR2 to tk2 + eor r12, r12, r9 + and r14, r10, r12, lsl #1 + and r12, r12, r10 + orr r9, r14, r12, lsr #1 // apply LFSR2 to tk2 --- + and r12, r4, r10 // --- apply LFSR3 to tk3 + eor r12, r2, r12, lsr #1 + and r14, r10, r12, lsl #1 + and r12, r12, r10 + orr r2, r14, r12, lsr #1 // apply LFSR3 to tk3 --- + eor r11, r2, r6 //tk2 ^ tk3 (1st word) + eor r12, r3, r7 //tk2 ^ tk3 (2nd word) + strd r11, r12, [r0], #8 //store in tk + eor r11, r4, r8 //tk2 ^ tk3 (3rd word) + eor r12, r5, r9 //tk2 ^ tk3 (4th word) + strd r11, r12, [r0], #24 //store in tk + subs.w r1, r1, #8 //decrease loop counter by 8 + bne loop + pop {r0-r12, r14} + bx lr + +/****************************************************************************** +* Applies the permutation P and add the round constants to all round tweakeys. +******************************************************************************/ +@ void tkschedule_perm(u32* tk) +.global tkschedule_perm +.type tkschedule_perm,%function +.align 2 +tkschedule_perm: + push {r0-r12, lr} + sub.w sp, #4 //to store r14 in subroutines + ldm r0, {r6-r9} //load tk + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r6, r6, r10 //tk &= 0xf0f0f0f0 (1st word) + and r7, r7, r10 //tk &= 0xf0f0f0f0 (2nd word) + and r8, r8, r10 //tk &= 0xf0f0f0f0 (3rd word) + and r9, r9, r10 //tk &= 0xf0f0f0f0 (4th word) + eor r8, r8, #0x00000004 //add rconst + eor r9, r9, #0x00000040 //add rconst + mvn r9, r9 //to remove a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 1st round + strd r6, r7, [r0], #8 //store 2nd half tk for 1st round + ldm r0, {r6-r9} //load tk + bl p2 //apply the permutation twice + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #26 //ror and mask to match fixslicing + and r12, r10, r7, ror #26 //ror and mask to match fixslicing + strd r11, r12, [r0], #8 //store 1st half tk for 2nd round + and r11, r10, r8, ror #26 //ror and mask to match fixslicing + and r12, r10, r9, ror #26 //ror and mask to match fixslicing + eor r11, r11, #0x10000000 //add rconst + eor r11, r11, #0x00000100 //add rconst + eor r12, r12, #0x00000100 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 2nd round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #28 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #12 + and r11, r10, r7, ror #28 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #12 + and r11, r10, r8, ror #28 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #12 + and r11, r10, r9, ror #28 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #12 //ror and masks to match fixslicing --- + eor r7, r7, #0x04000000 //add rconst + eor r8, r8, #0x44000000 //add rconst + eor r9, r9, #0x04000000 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 3rd round + strd r6, r7, [r0], #8 //store 2nd half tk for 3rd round + ldm r0, {r6-r9} //load tk + bl p4 //apply the permutation 4 times + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6, ror #16 //ror and mask to match fixslicing + and r12, r10, r7, ror #16 //ror and mask to match fixslicing + eor r11, r11, #0x00400000 //add rconst + eor r12, r12, #0x00400000 //add rconst + strd r11, r12, [r0, #24] //store 2nd half tk for 5th round + and r11, r10, r8, ror #16 //ror and mask to match fixslicing + and r12, r10, r9, ror #16 //ror and mask to match fixslicing + eor r11, r11, #0x00440000 //add rconst + eor r12, r12, #0x00500000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 5th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #14 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #6 + and r11, r10, r7, ror #14 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #6 + and r11, r10, r8, ror #14 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #6 + and r11, r10, r9, ror #14 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #6 //ror and masks to match fixslicing --- + eor r6, r6, #0x00100000 //add rconst + eor r7, r7, #0x00100000 //add rconst + eor r8, r8, #0x00100000 //add rconst + eor r8, r8, #0x00000001 //add rconst + eor r9, r9, #0x00100000 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 4th round + strd r8, r9, [r0], #24 //store 2nd half tk for 4th round + ldm r0, {r6-r9} //load tk + bl p6 //apply the permutation 6 times + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #10 //ror and mask to match fixslicing + and r12, r10, r7, ror #10 //ror and mask to match fixslicing + eor r11, r11, #0x01000000 //add rconst + eor r12, r12, #0x01000000 //add rconst + strd r11, r12, [r0], #8 //store 1st half tk for 6th round + and r11, r10, r8, ror #10 //ror and mask to match fixslicing + and r12, r10, r9, ror #10 //ror and mask to match fixslicing + eor r11, r11, #0x01400000 //add rconst + eor r11, r11, #0x00001000 //add rconst + eor r12, r12, #0x00400000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 6th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #12 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #28 + and r11, r10, r7, ror #12 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #28 + and r11, r10, r8, ror #12 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #28 + and r11, r10, r9, ror #12 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #28 //ror and masks to match fixslicing --- + eor r6, r6, #0x00000400 //add rconst + eor r7, r7, #0x00000400 //add rconst + eor r8, r8, #0x01000000 //add rconst + eor r8, r8, #0x00004000 //add rconst + eor r9, r9, #0x01000000 //add rconst + eor r9, r9, #0x00000400 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 7th round + strd r6, r7, [r0], #8 //store 2nd half tk for 7th round + ldm r0, {r6-r9} //load tk + bl p8 //apply the permutation 8 times + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6 //ror and mask to match fixslicing + and r12, r10, r7 //ror and mask to match fixslicing + eor r12, r12, #0x00000040 //add rconst + strd r11, r12, [r0, #24] //store 2nd half tk for 9th round + and r11, r10, r8 //ror and mask to match fixslicing + and r12, r10, r9 //ror and mask to match fixslicing + eor r11, r11, #0x00000054 //add rconst + eor r12, r12, #0x00000050 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 9th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #30 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #22 + and r11, r10, r7, ror #30 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #22 + and r11, r10, r8, ror #30 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #22 + and r11, r10, r9, ror #30 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #22 //ror and masks to match fixslicing --- + eor r6 ,r6, #0x00000010 + eor r8, r8, #0x00010000 + eor r8, r8, #0x00000410 + eor r9, r9, #0x00000410 + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 8th round + strd r8, r9, [r0], #24 //store 2nd half tk for 8th round + ldm r0, {r6-r9} //load tk + bl p10 //apply the permutation 10 times + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #26 //ror and mask to match fixslicing + and r12, r10, r7, ror #26 //ror and mask to match fixslicing + eor r11, r11, #0x00000100 //add rconst + eor r12, r12, #0x00000100 //add rconst + strd r11, r12, [r0], #8 //store 1st half tk for 10th round + and r11, r10, r8, ror #26 //ror and mask to match fixslicing + and r12, r10, r9, ror #26 //ror and mask to match fixslicing + eor r11, r11, #0x10000000 //add rconst + eor r11, r11, #0x00000140 //add rconst + eor r12, r12, #0x00000100 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 10th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #28 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #12 + and r11, r10, r7, ror #28 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #12 + and r11, r10, r8, ror #28 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #12 + and r11, r10, r9, ror #28 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #12 //ror and masks to match fixslicing --- + eor r6, r6, #0x04000000 //add rconst + eor r7, r7, #0x04000000 //add rconst + eor r8, r8, #0x44000000 //add rconst + eor r9, r9, #0x00000100 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 11th round + strd r6, r7, [r0], #8 //store 2nd half tk for 11th round + ldm r0, {r6-r9} //load tk + bl p12 //apply the permutation 4 times + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6, ror #16 //ror and mask to match fixslicing + and r12, r10, r7, ror #16 //ror and mask to match fixslicing + eor r11, r11, #0x00400000 //add rconst + strd r11, r12, [r0, #24] //store 2nd half tk for 13th round + and r11, r10, r8, ror #16 //ror and mask to match fixslicing + and r12, r10, r9, ror #16 //ror and mask to match fixslicing + eor r11, r11, #0x00140000 //add rconst + eor r12, r12, #0x00500000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 13th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #14 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #6 + and r11, r10, r7, ror #14 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #6 + and r11, r10, r8, ror #14 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #6 + and r11, r10, r9, ror #14 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #6 //ror and masks to match fixslicing --- + eor r6, r6, #0x00100000 //add rconst + eor r7, r7, #0x00100000 //add rconst + eor r8, r8, #0x04000000 //add rconst + eor r8, r8, #0x00000001 //add rconst + eor r9, r9, #0x04000000 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 12th round + strd r8, r9, [r0], #24 //store 2nd half tk for 12th round + ldm r0, {r6-r9} //load tk + bl p14 //apply the permutation 6 times + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #10 //ror and mask to match fixslicing + and r12, r10, r7, ror #10 //ror and mask to match fixslicing + strd r11, r12, [r0], #8 //store 1st half tk for 14th round + and r11, r10, r8, ror #10 //ror and mask to match fixslicing + and r12, r10, r9, ror #10 //ror and mask to match fixslicing + eor r11, r11, #0x01400000 //add rconst + eor r11, r11, #0x00001000 //add rconst + eor r12, r12, #0x01400000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 14th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #12 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #28 + and r11, r10, r7, ror #12 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #28 + and r11, r10, r8, ror #12 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #28 + and r11, r10, r9, ror #12 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #28 //ror and masks to match fixslicing --- + eor r7, r7, #0x00000400 //add rconst + eor r8, r8, #0x01000000 //add rconst + eor r8, r8, #0x00004400 //add rconst + eor r9, r9, #0x00000400 //add const + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 15th round + strd r6, r7, [r0], #8 //store 2nd half tk for 15th round + ldm r0, {r6-r9} //load tk + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6 //ror and mask to match fixslicing + and r12, r10, r7 //ror and mask to match fixslicing + eor r11, r11, #0x00000040 //add rconst + eor r12, r12, #0x00000040 //add rconst + strd r11, r12, [r0, #24] //store 2nd half tk for 17th round + and r11, r10, r8 //ror and mask to match fixslicing + and r12, r10, r9 //ror and mask to match fixslicing + eor r11, r11, #0x00000004 //add rconst + eor r12, r12, #0x00000050 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 17th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #30 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #22 + and r11, r10, r7, ror #30 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #22 + and r11, r10, r8, ror #30 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #22 + and r11, r10, r9, ror #30 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #22 //ror and masks to match fixslicing --- + eor r6 ,r6, #0x00000010 + eor r7 ,r7, #0x00000010 + eor r8, r8, #0x00000010 + eor r8, r8, #0x00010000 + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 16th round + strd r8, r9, [r0], #24 //store 2nd half tk for 16th round + ldm r0, {r6-r9} //load tk + bl p2 //apply the permutation twice + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #26 //ror and mask to match fixslicing + and r12, r10, r7, ror #26 //ror and mask to match fixslicing + eor r11, r11, #0x00000100 //add rconst + strd r11, r12, [r0], #8 //store 1st half tk for 18th round + and r11, r10, r8, ror #26 //ror and mask to match fixslicing + and r12, r10, r9, ror #26 //ror and mask to match fixslicing + eor r11, r11, #0x10000000 //add rconst + eor r11, r11, #0x00000140 //add rconst + eor r12, r12, #0x00000040 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 18th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #28 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #12 + and r11, r10, r7, ror #28 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #12 + and r11, r10, r8, ror #28 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #12 + and r11, r10, r9, ror #28 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #12 //ror and masks to match fixslicing --- + eor r7, r7, #0x04000000 //add rconst + eor r8, r8, #0x40000000 //add rconst + eor r8, r8, #0x00000100 //add rconst + eor r9, r9, #0x04000000 //add rconst + eor r9, r9, #0x00000100 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 19th round + strd r6, r7, [r0], #8 //store 2nd half tk for 19th round + ldm r0, {r6-r9} //load tk + bl p4 //apply the permutation 4 times + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6, ror #16 //ror and mask to match fixslicing + and r12, r10, r7, ror #16 //ror and mask to match fixslicing + eor r12, r12, #0x00400000 //add rconst + strd r11, r12, [r0, #24] //store 2nd half tk for 21th round + and r11, r10, r8, ror #16 //ror and mask to match fixslicing + and r12, r10, r9, ror #16 //ror and mask to match fixslicing + eor r11, r11, #0x00440000 //add rconst + eor r12, r12, #0x00100000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 21th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #14 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #6 + and r11, r10, r7, ror #14 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #6 + and r11, r10, r8, ror #14 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #6 + and r11, r10, r9, ror #14 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #6 //ror and masks to match fixslicing --- + eor r6, r6, #0x00100000 //add rconst + eor r8, r8, #0x04100000 //add rconst + eor r8, r8, #0x00000001 //add rconst + eor r9, r9, #0x00100000 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 20th round + strd r8, r9, [r0], #24 //store 2nd half tk for 20th round + ldm r0, {r6-r9} //load tk + bl p6 //apply the permutation 6 times + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #10 //ror and mask to match fixslicing + and r12, r10, r7, ror #10 //ror and mask to match fixslicing + eor r11, r11, #0x01000000 //add rconst + eor r12, r12, #0x01000000 //add rconst + strd r11, r12, [r0], #8 //store 1st half tk for 22th round + and r11, r10, r8, ror #10 //ror and mask to match fixslicing + and r12, r10, r9, ror #10 //ror and mask to match fixslicing + eor r11, r11, #0x00400000 //add rconst + eor r11, r11, #0x00001000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 22th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #12 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #28 + and r11, r10, r7, ror #12 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #28 + and r11, r10, r8, ror #12 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #28 + and r11, r10, r9, ror #12 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #28 //ror and masks to match fixslicing --- + eor r6, r6, #0x00000400 //add rconst + eor r8, r8, #0x00004000 //add rconst + eor r9, r9, #0x01000000 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 23th round + strd r6, r7, [r0], #8 //store 2nd half tk for 23th round + ldm r0, {r6-r9} //load tk + bl p8 //apply the permutation 8 times + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6 //ror and mask to match fixslicing + and r12, r10, r7 //ror and mask to match fixslicing + strd r11, r12, [r0, #24] //store 2nd half tk for 25th round + and r11, r10, r8 //ror and mask to match fixslicing + and r12, r10, r9 //ror and mask to match fixslicing + eor r11, r11, #0x00000014 //add rconst + eor r12, r12, #0x00000040 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 25th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #30 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #22 + and r11, r10, r7, ror #30 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #22 + and r11, r10, r8, ror #30 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #22 + and r11, r10, r9, ror #30 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #22 //ror and masks to match fixslicing --- + eor r8, r8, #0x00010400 + eor r9, r9, #0x00000400 + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 24th round + strd r8, r9, [r0], #24 //store 2nd half tk for 24th round + ldm r0, {r6-r9} //load tk + bl p10 //apply the permutation 10 times + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #26 //ror and mask to match fixslicing + and r12, r10, r7, ror #26 //ror and mask to match fixslicing + strd r11, r12, [r0], #8 //store 1st half tk for 26th round + and r11, r10, r8, ror #26 //ror and mask to match fixslicing + and r12, r10, r9, ror #26 //ror and mask to match fixslicing + eor r11, r11, #0x10000000 //add rconst + eor r11, r11, #0x00000100 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 26th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #28 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #12 + and r11, r10, r7, ror #28 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #12 + and r11, r10, r8, ror #28 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #12 + and r11, r10, r9, ror #28 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #12 //ror and masks to match fixslicing --- + eor r7, r7, #0x04000000 //add rconst + eor r8, r8, #0x40000000 //add rconst + eor r9, r9, #0x04000000 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 27th round + strd r6, r7, [r0], #8 //store 2nd half tk for 27th round + ldm r0, {r6-r9} //load tk + bl p12 //apply the permutation 4 times + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6, ror #16 //ror and mask to match fixslicing + and r12, r10, r7, ror #16 //ror and mask to match fixslicing + eor r12, r12, #0x00400000 //add rconst + strd r11, r12, [r0, #24] //store 2nd half tk for 29th round + and r11, r10, r8, ror #16 //ror and mask to match fixslicing + and r12, r10, r9, ror #16 //ror and mask to match fixslicing + eor r11, r11, #0x00440000 //add rconst + eor r12, r12, #0x00500000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 29th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #14 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #6 + and r11, r10, r7, ror #14 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #6 + and r11, r10, r8, ror #14 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #6 + and r11, r10, r9, ror #14 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #6 //ror and masks to match fixslicing --- + eor r6, r6, #0x00100000 //add rconst + eor r8, r8, #0x00100000 //add rconst + eor r8, r8, #0x00000001 //add rconst + eor r9, r9, #0x00100000 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 28th round + strd r8, r9, [r0], #24 //store 2nd half tk for 28th round + ldm r0, {r6-r9} //load tk + bl p14 //apply the permutation 6 times + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #10 //ror and mask to match fixslicing + and r12, r10, r7, ror #10 //ror and mask to match fixslicing + eor r11, r11, #0x01000000 //add rconst + eor r12, r12, #0x01000000 //add rconst + strd r11, r12, [r0], #8 //store 1st half tk for 30th round + and r11, r10, r8, ror #10 //ror and mask to match fixslicing + and r12, r10, r9, ror #10 //ror and mask to match fixslicing + eor r11, r11, #0x01400000 //add rconst + eor r11, r11, #0x00001000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 30th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #12 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #28 + and r11, r10, r7, ror #12 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #28 + and r11, r10, r8, ror #12 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #28 + and r11, r10, r9, ror #12 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #28 //ror and masks to match fixslicing --- + eor r6, r6, #0x00000400 //add rconst + eor r7, r7, #0x00000400 //add rconst + eor r8, r8, #0x00004000 //add rconst + eor r9, r9, #0x01000000 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 31th round + strd r6, r7, [r0], #8 //store 2nd half tk for 31th round + ldm r0, {r6-r9} //load tk + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6 //ror and mask to match fixslicing + and r12, r10, r7 //ror and mask to match fixslicing + strd r11, r12, [r0, #24] //store 2nd half tk for 33th round + and r11, r10, r8 //ror and mask to match fixslicing + and r12, r10, r9 //ror and mask to match fixslicing + eor r11, r11, #0x00000014 //add rconst + eor r12, r12, #0x00000050 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 33th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #30 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #22 + and r11, r10, r7, ror #30 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #22 + and r11, r10, r8, ror #30 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #22 + and r11, r10, r9, ror #30 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #22 //ror and masks to match fixslicing --- + eor r6 ,r6, #0x00000010 + eor r8, r8, #0x00010400 + eor r9, r9, #0x00000400 + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 32th round + strd r8, r9, [r0], #24 //store 2nd half tk for 32th round + ldm r0, {r6-r9} //load tk + bl p2 //apply the permutation twice + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #26 //ror and mask to match fixslicing + and r12, r10, r7, ror #26 //ror and mask to match fixslicing + strd r11, r12, [r0], #8 //store 1st half tk for 34th round + and r11, r10, r8, ror #26 //ror and mask to match fixslicing + and r12, r10, r9, ror #26 //ror and mask to match fixslicing + eor r11, r11, #0x10000000 //add rconst + eor r11, r11, #0x00000140 //add rconst + eor r12, r12, #0x00000100 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 34th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #28 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #12 + and r11, r10, r7, ror #28 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #12 + and r11, r10, r8, ror #28 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #12 + and r11, r10, r9, ror #28 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #12 //ror and masks to match fixslicing --- + eor r7, r7, #0x04000000 //add rconst + eor r8, r8, #0x44000000 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 35th round + strd r6, r7, [r0], #8 //store 2nd half tk for 35th round + ldm r0, {r6-r9} //load tk + bl p4 //apply the permutation 4 times + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6, ror #16 //ror and mask to match fixslicing + and r12, r10, r7, ror #16 //ror and mask to match fixslicing + eor r11, r11, #0x00400000 //add rconst + strd r11, r12, [r0, #24] //store 2nd half tk for 37th round + and r11, r10, r8, ror #16 //ror and mask to match fixslicing + and r12, r10, r9, ror #16 //ror and mask to match fixslicing + eor r11, r11, #0x00440000 //add rconst + eor r12, r12, #0x00500000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 37th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #14 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #6 + and r11, r10, r7, ror #14 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #6 + and r11, r10, r8, ror #14 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #6 + and r11, r10, r9, ror #14 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #6 //ror and masks to match fixslicing --- + eor r6, r6, #0x00100000 //add rconst + eor r7, r7, #0x00100000 //add rconst + eor r8, r8, #0x00000001 //add rconst + eor r9, r9, #0x00100000 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 36th round + strd r8, r9, [r0], #24 //store 2nd half tk for 36th round + ldm r0, {r6-r9} //load tk + bl p6 //apply the permutation 6 times + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #10 //ror and mask to match fixslicing + and r12, r10, r7, ror #10 //ror and mask to match fixslicing + eor r12, r12, #0x01000000 //add rconst + strd r11, r12, [r0], #8 //store 1st half tk for 38th round + and r11, r10, r8, ror #10 //ror and mask to match fixslicing + and r12, r10, r9, ror #10 //ror and mask to match fixslicing + eor r11, r11, #0x01400000 //add rconst + eor r11, r11, #0x00001000 //add rconst + eor r12, r12, #0x00400000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 38th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #12 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #28 + and r11, r10, r7, ror #12 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #28 + and r11, r10, r8, ror #12 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #28 + and r11, r10, r9, ror #12 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #28 //ror and masks to match fixslicing --- + eor r6, r6, #0x00000400 //add rconst + eor r7, r7, #0x00000400 //add rconst + eor r8, r8, #0x01000000 + eor r8, r8, #0x00004000 //add rconst + eor r9, r9, #0x00000400 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 39th round + strd r6, r7, [r0], #8 //store 2nd half tk for 39th round + ldm r0, {r6-r9} //load tk + bl p8 //apply the permutation 8 times + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6 //ror and mask to match fixslicing + and r12, r10, r7 //ror and mask to match fixslicing + eor r12, r12, #0x00000040 //add rconst + strd r11, r12, [r0, #24] //store 2nd half tk for 41th round + and r11, r10, r8 //ror and mask to match fixslicing + and r12, r10, r9 //ror and mask to match fixslicing + eor r11, r11, #0x00000014 //add rconst + eor r12, r12, #0x00000010 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 41th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #30 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #22 + and r11, r10, r7, ror #30 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #22 + and r11, r10, r8, ror #30 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #22 + and r11, r10, r9, ror #30 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #22 //ror and masks to match fixslicing --- + eor r6, r6, #0x00000010 + eor r8, r8, #0x00010000 + eor r8, r8, #0x00000010 + eor r9, r9, #0x00000400 + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 40th round + strd r8, r9, [r0], #24 //store 2nd half tk for 40th round + ldm r0, {r6-r9} //load tk + bl p10 //apply the permutation 10 times + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #26 //ror and mask to match fixslicing + and r12, r10, r7, ror #26 //ror and mask to match fixslicing + eor r11, r11, #0x00000100 //add rconst + strd r11, r12, [r0], #8 //store 1st half tk for 42th round + and r11, r10, r8, ror #26 //ror and mask to match fixslicing + and r12, r10, r9, ror #26 //ror and mask to match fixslicing + eor r11, r11, #0x10000000 //add rconst + eor r11, r11, #0x00000040 //add rconst + eor r12, r12, #0x00000100 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 42th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #28 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #12 + and r11, r10, r7, ror #28 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #12 + and r11, r10, r8, ror #28 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #12 + and r11, r10, r9, ror #28 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #12 //ror and masks to match fixslicing --- + eor r8, r8, #0x44000000 //add rconst + eor r9, r9, #0x00000100 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 43th round + strd r6, r7, [r0], #8 //store 2nd half tk for 43th round + ldm r0, {r6-r9} //load tk + bl p12 //apply the permutation 4 times + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6, ror #16 //ror and mask to match fixslicing + and r12, r10, r7, ror #16 //ror and mask to match fixslicing + eor r11, r11, #0x00400000 //add rconst + strd r11, r12, [r0, #24] //store 2nd half tk for 45th round + and r11, r10, r8, ror #16 //ror and mask to match fixslicing + and r12, r10, r9, ror #16 //ror and mask to match fixslicing + eor r11, r11, #0x00040000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 45th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #14 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #6 + and r11, r10, r7, ror #14 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #6 + and r11, r10, r8, ror #14 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #6 + and r11, r10, r9, ror #14 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #6 //ror and masks to match fixslicing --- + eor r7, r7, #0x00100000 //add rconst + eor r8, r8, #0x04000000 //add rconst + eor r8, r8, #0x00000001 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 44th round + strd r8, r9, [r0], #24 //store 2nd half tk for 44th round + ldm r0, {r6-r9} //load tk + bl p14 //apply the permutation 6 times + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #10 //ror and mask to match fixslicing + and r12, r10, r7, ror #10 //ror and mask to match fixslicing + strd r11, r12, [r0], #8 //store 1st half tk for 46th round + and r11, r10, r8, ror #10 //ror and mask to match fixslicing + and r12, r10, r9, ror #10 //ror and mask to match fixslicing + eor r11, r11, #0x00001000 //add rconst + eor r12, r12, #0x01400000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 46th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #12 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #28 + and r11, r10, r7, ror #12 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #28 + and r11, r10, r8, ror #12 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #28 + and r11, r10, r9, ror #12 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #28 //ror and masks to match fixslicing --- + eor r8, r8, #0x01000000 //add rconst + eor r8, r8, #0x00004400 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 47th round + strd r6, r7, [r0], #8 //store 2nd half tk for 47th round + ldm r0, {r6-r9} //load tk + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6 //ror and mask to match fixslicing + and r12, r10, r7 //ror and mask to match fixslicing + eor r11, r11, #0x00000040 //add rconst + strd r11, r12, [r0, #24] //store 2nd half tk for 49th round + and r11, r10, r8 //ror and mask to match fixslicing + and r12, r10, r9 //ror and mask to match fixslicing + eor r11, r11, #0x00000004 //add rconst + eor r12, r12, #0x00000040 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 49th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #30 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #22 + and r11, r10, r7, ror #30 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #22 + and r11, r10, r8, ror #30 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #22 + and r11, r10, r9, ror #30 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #22 //ror and masks to match fixslicing --- + eor r7 ,r7, #0x00000010 + eor r8, r8, #0x00010000 + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 48th round + strd r8, r9, [r0], #24 //store 2nd half tk for 48th round + ldm r0, {r6-r9} //load tk + bl p2 //apply the permutation twice + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #26 //ror and mask to match fixslicing + and r12, r10, r7, ror #26 //ror and mask to match fixslicing + strd r11, r12, [r0], #8 //store 1st half tk for 50th round + and r11, r10, r8, ror #26 //ror and mask to match fixslicing + and r12, r10, r9, ror #26 //ror and mask to match fixslicing + eor r11, r11, #0x10000000 //add rconst + eor r11, r11, #0x00000100 //add rconst + eor r12, r12, #0x00000140 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 50th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #28 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #12 + and r11, r10, r7, ror #28 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #12 + and r11, r10, r8, ror #28 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #12 + and r11, r10, r9, ror #28 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #12 //ror and masks to match fixslicing --- + eor r7, r7, #0x04000000 //add rconst + eor r8, r8, #0x44000000 //add rconst + eor r8, r8, #0x00000100 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 51th round + strd r6, r7, [r0], #8 //store 2nd half tk for 51th round + ldm r0, {r6-r9} //load tk + bl p4 //apply the permutation 4 times + movw r10, #0xf0f0 + movt r10, #0xf0f0 //r10<- 0xf0f0f0f0 + and r11, r10, r6, ror #16 //ror and mask to match fixslicing + and r12, r10, r7, ror #16 //ror and mask to match fixslicing + eor r11, r11, #0x00400000 //add rconst + strd r11, r12, [r0, #24] //store 2nd half tk for 53th round + and r11, r10, r8, ror #16 //ror and mask to match fixslicing + and r12, r10, r9, ror #16 //ror and mask to match fixslicing + eor r11, r11, #0x00040000 //add rconst + eor r12, r12, #0x00500000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0, #16] //store 1st half tk for 53th round + and r10, r10, r10, lsr #2 //r10<- 0x30303030 + and r11, r10, r6, ror #14 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #6 + and r11, r10, r7, ror #14 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #6 + and r11, r10, r8, ror #14 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #6 + and r11, r10, r9, ror #14 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #6 //ror and masks to match fixslicing --- + eor r6, r6, #0x00100000 //add rconst + eor r7, r7, #0x00100000 //add rconst + eor r8, r8, #0x00000001 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 52th round + strd r8, r9, [r0], #24 //store 2nd half tk for 52th round + ldm r0, {r6-r9} //load tk + bl p6 //apply the permutation 6 times + movw r10, #0xc3c3 + movt r10, #0xc3c3 //r10<- 0xc3c3c3c3 + and r11, r10, r6, ror #10 //ror and mask to match fixslicing + and r12, r10, r7, ror #10 //ror and mask to match fixslicing + strd r11, r12, [r0], #8 //store 1st half tk for 54th round + and r11, r10, r8, ror #10 //ror and mask to match fixslicing + and r12, r10, r9, ror #10 //ror and mask to match fixslicing + eor r11, r11, #0x01400000 //add rconst + eor r11, r11, #0x00001000 //add rconst + eor r12, r12, #0x00400000 //add rconst + mvn r12, r12 //to save a NOT in sbox calculations + strd r11, r12, [r0], #8 //store 2nd half tk for 54th round + and r10, r10, r10, lsr #6 //r10<- 0x03030303 + and r11, r10, r6, ror #12 //--- ror and masks to match fixslicing + and r6, r6, r10, lsl #6 + orr r6, r11, r6, ror #28 + and r11, r10, r7, ror #12 + and r7, r7, r10, lsl #6 + orr r7, r11, r7, ror #28 + and r11, r10, r8, ror #12 + and r8, r8, r10, lsl #6 + orr r8, r11, r8, ror #28 + and r11, r10, r9, ror #12 + and r9, r9, r10, lsl #6 + orr r9, r11, r9, ror #28 //ror and masks to match fixslicing --- + eor r7, r7, #0x00000400 //add rconst + eor r8, r8, #0x01000000 + eor r8, r8, #0x00004000 //add rconst + eor r9, r9, #0x00000400 //add rconst + mvn r9, r9 //to save a NOT in sbox calculations + strd r8, r9, [r0], #8 //store 1st half tk for 55th round + strd r6, r7, [r0], #8 //store 2nd half tk for 55th round + ldm r0, {r6-r9} //load tk + bl p8 //apply the permutation 8 times + movw r10, #0x3030 + movt r10, #0x3030 //r10<- 0x30303030 + and r11, r10, r6, ror #30 //--- ror and masks to match fixslicing + and r6, r6, r10, ror #4 + orr r6, r11, r6, ror #22 + and r11, r10, r7, ror #30 + and r7, r7, r10, ror #4 + orr r7, r11, r7, ror #22 + and r11, r10, r8, ror #30 + and r8, r8, r10, ror #4 + orr r8, r11, r8, ror #22 + and r11, r10, r9, ror #30 + and r9, r9, r10, ror #4 + orr r9, r11, r9, ror #22 //ror and masks to match fixslicing --- + eor r6, r6, #0x00000010 + eor r8, r8, #0x00010000 + eor r8, r8, #0x00000010 + mvn r9, r9 //to save a NOT in sbox calculations + strd r6, r7, [r0], #8 //store 1st half tk for 56th round + strd r8, r9, [r0], #24 //store 2nd half tk for 56th round + add.w sp, #4 + pop {r0-r12, lr} + bx lr + +/****************************************************************************** +* Applies the permutations P^2, ..., P^14 for rounds 0 to 16. Since P^16=Id, we +* don't need more calculations as no LFSR is applied to TK1. +******************************************************************************/ +@ void tkschedule_perm_tk1(u32* tk, const u8* key) +.global tkschedule_perm_tk1 +.type tkschedule_perm_tk1,%function +.align 2 +tkschedule_perm_tk1: + push {r0-r12, lr} + ldr.w r3, [r1, #8] //load tk1 (3rd word) + ldr.w r4, [r1, #4] //load tk1 (2nd word) + ldr.w r5, [r1, #12] //load tk1 (4th word) + ldr.w r2, [r1] //load tk1 (1st word) + movw r10, #0x0a0a + movt r10, #0x0a0a //r6 <- 0x0a0a0a0a + movw r11, #0x3030 + movt r11, #0x3030 //r7 <- 0x30303030 + bl packing //pack tk1 + mov r6, r2 //move tk1 from r2-r5 to r6-r9 + mov r7, r3 //move tk1 from r2-r5 to r6-r9 + mov r8, r4 //move tk1 from r2-r5 to r6-r9 + mov r9, r5 //move tk1 from r2-r5 to r6-r9 + movw r2, #0xf0f0 + movt r2, #0xf0f0 //r2<- 0xf0f0f0f0 + and r11, r8, r2 //tk &= 0xf0f0f0f0 (3rd word) + and r12, r9, r2 //tk &= 0xf0f0f0f0 (4th word) + strd r11, r12, [r0], #8 //store 1st half tk for 1st round + and r11, r6, r2 //tk &= 0xf0f0f0f0 (1st word) + and r12, r7, r2 //tk &= 0xf0f0f0f0 (2nd word) + strd r11, r12, [r0], #8 //store 2nd half tk for 1st round + movw r3, #0x3030 + movt r3, #0x3030 //r3 <- 0x30303030 + and r11, r3, r6, ror #30 //--- ror and masks to match fixslicing + and r12, r6, r3, ror #4 + orr r12, r11, r12, ror #22 + str.w r12, [r0, #224] + and r11, r3, r7, ror #30 + and r12, r7, r3, ror #4 + orr r12, r11, r12, ror #22 + str.w r12, [r0, #228] + and r11, r3, r8, ror #30 + and r12, r8, r3, ror #4 + orr r12, r11, r12, ror #22 + str.w r12, [r0, #232] + and r11, r3, r9, ror #30 + and r12, r9, r3, ror #4 + orr r12, r11, r12, ror #22 //ror and masks to match fixslicing --- + str.w r12, [r0, #236] + bl p2 //apply the permutation twice + movw r3, #0xc3c3 + movt r3, #0xc3c3 //r3 <- 0xc3c3c3c3 + and r11, r3, r6, ror #26 //ror and mask to match fixslicing + and r12, r3, r7, ror #26 //ror and mask to match fixslicing + strd r11, r12, [r0], #8 //store 1st half tk for 2nd round + and r11, r3, r8, ror #26 //ror and mask to match fixslicing + and r12, r3, r9, ror #26 //ror and mask to match fixslicing + strd r11, r12, [r0], #8 //store 2nd half tk for 2nd round + and r3, r3, r3, lsr #6 //r3<- 0x03030303 + and r11, r3, r6, ror #28 //--- ror and masks to match fixslicing + and r12, r6, r3, lsl #6 + orr r12, r11, r12, ror #12 + str.w r12, [r0, #8] + and r11, r3, r7, ror #28 + and r12, r7, r3, lsl #6 + orr r12, r11, r12, ror #12 + str.w r12, [r0, #12] + and r11, r3, r9, ror #28 + and r12, r9, r3, lsl #6 + orr r12, r11, r12, ror #12 + str.w r12, [r0, #4] + and r11, r3, r8, ror #28 + and r12, r8, r3, lsl #6 + orr r12, r11, r12, ror #12 + str.w r12, [r0], #16 //ror and masks to match fixslicing --- + bl p2 //apply the permutation 4 times + lsl r3, r3, #4 //r3 <- 0x30303030 + and r11, r3, r6, ror #14 //--- ror and masks to match fixslicing + and r12, r6, r3, ror #4 + orr r12, r11, r12, ror #6 + str.w r12, [r0], #4 + and r11, r3, r7, ror #14 + and r12, r7, r3, ror #4 + orr r12, r11, r12, ror #6 + str.w r12, [r0], #4 + and r11, r3, r8, ror #14 + and r12, r8, r3, ror #4 + orr r12, r11, r12, ror #6 + str.w r12, [r0], #4 + and r11, r3, r9, ror #14 + and r12, r9, r3, ror #4 + orr r12, r11, r12, ror #6 //ror and masks to match fixslicing --- + str.w r12, [r0], #4 + and r11, r2, r6, ror #16 //ror and mask to match fixslicing + and r12, r2, r7, ror #16 //ror and mask to match fixslicing + strd r11, r12, [r0, #8] //store 2nd half tk for 5th round + and r11, r2, r8, ror #16 //ror and mask to match fixslicing + and r12, r2, r9, ror #16 //ror and mask to match fixslicing + strd r11, r12, [r0], #16 //store 1st half tk for 5th round + bl p2 //apply the permutation twice + movw r3, #0xc3c3 + movt r3, #0xc3c3 //r3<- 0xc3c3c3c3 + and r11, r3, r6, ror #10 //ror and mask to match fixslicing + and r12, r3, r7, ror #10 //ror and mask to match fixslicing + strd r11, r12, [r0], #8 //store 1st half tk for 6th round + and r11, r3, r8, ror #10 //ror and mask to match fixslicing + and r12, r3, r9, ror #10 //ror and mask to match fixslicing + strd r11, r12, [r0], #8 //store 2nd half tk for 6th round + and r3, r3, r3, lsr #6 //r3<- 0x03030303 + and r11, r3, r6, ror #12 //--- ror and masks to match fixslicing + and r12, r6, r3, lsl #6 + orr r12, r11, r12, ror #28 + str.w r12, [r0, #8] + and r11, r3, r7, ror #12 + and r12, r7, r3, lsl #6 + orr r12, r11, r12, ror #28 + str.w r12, [r0, #12] + and r11, r3, r9, ror #12 + and r12, r9, r3, lsl #6 + orr r12, r11, r12, ror #28 + str.w r12, [r0, #4] + and r11, r3, r8, ror #12 + and r12, r8, r3, lsl #6 + orr r12, r11, r12, ror #28 + str.w r12, [r0], #16 //ror and masks to match fixslicing --- + bl p2 //apply the permutation 8 times + lsl r3, r3, #4 //r3 <- 0x30303030 + and r11, r3, r6, ror #30 //--- ror and masks to match fixslicing + and r12, r6, r3, ror #4 + orr r12, r11, r12, ror #22 + str.w r12, [r0], #4 + and r11, r3, r7, ror #30 + and r12, r7, r3, ror #4 + orr r12, r11, r12, ror #22 + str.w r12, [r0], #4 + and r11, r3, r8, ror #30 + and r12, r8, r3, ror #4 + orr r12, r11, r12, ror #22 + str.w r12, [r0], #4 + and r11, r3, r9, ror #30 + and r12, r9, r3, ror #4 + orr r12, r11, r12, ror #22 //ror and masks to match fixslicing --- + str.w r12, [r0], #4 + and r11, r2, r6 //ror and mask to match fixslicing + and r12, r2, r7 //ror and mask to match fixslicing + strd r11, r12, [r0, #8] //store 2nd half tk for 9th round + and r11, r2, r8 //ror and mask to match fixslicing + and r12, r2, r9 //ror and mask to match fixslicing + strd r11, r12, [r0], #16 //store 1st half tk for 9th round + bl p2 //apply the permutation 10 + movw r3, #0xc3c3 + movt r3, #0xc3c3 //r3 <- 0xc3c3c3c3 + and r11, r3, r6, ror #26 //ror and mask to match fixslicing + and r12, r3, r7, ror #26 //ror and mask to match fixslicing + strd r11, r12, [r0], #8 //store 1st half tk for 10th round + and r11, r3, r8, ror #26 //ror and mask to match fixslicing + and r12, r3, r9, ror #26 //ror and mask to match fixslicing + strd r11, r12, [r0], #8 //store 2nd half tk for 10th round + and r3, r3, r3, lsr #6 //r3 <- 0x03030303 + and r11, r3, r6, ror #28 //--- ror and masks to match fixslicing + and r12, r6, r3, lsl #6 + orr r12, r11, r12, ror #12 + str.w r12, [r0, #8] + and r11, r3, r7, ror #28 + and r12, r7, r3, lsl #6 + orr r12, r11, r12, ror #12 + str.w r12, [r0, #12] + and r11, r3, r9, ror #28 + and r12, r9, r3, lsl #6 + orr r12, r11, r12, ror #12 + str.w r12, [r0, #4] + and r11, r3, r8, ror #28 + and r12, r8, r3, lsl #6 + orr r12, r11, r12, ror #12 + str.w r12, [r0], #16 //ror and masks to match fixslicing --- + bl p2 //apply the permutation 12 times + lsl r3, r3, #4 //r3 <- 0x30303030 + and r11, r3, r6, ror #14 //--- ror and masks to match fixslicing + and r12, r6, r3, ror #4 + orr r12, r11, r12, ror #6 + str.w r12, [r0], #4 + and r11, r3, r7, ror #14 + and r12, r7, r3, ror #4 + orr r12, r11, r12, ror #6 + str.w r12, [r0], #4 + and r11, r3, r8, ror #14 + and r12, r8, r3, ror #4 + orr r12, r11, r12, ror #6 + str.w r12, [r0], #4 + and r11, r3, r9, ror #14 + and r12, r9, r3, ror #4 + orr r12, r11, r12, ror #6 //ror and masks to match fixslicing --- + str.w r12, [r0], #4 + and r11, r2, r6, ror #16 //ror and mask to match fixslicing + and r12, r2, r7, ror #16 //ror and mask to match fixslicing + strd r11, r12, [r0, #8] //store 2nd half tk for 5th round + and r11, r2, r8, ror #16 //ror and mask to match fixslicing + and r12, r2, r9, ror #16 //ror and mask to match fixslicing + strd r11, r12, [r0], #16 //store 1st half tk for 5th round + bl p2 //apply the permutation 14 times + movw r3, #0xc3c3 + movt r3, #0xc3c3 //r3 <- 0xc3c3c3c3 + and r11, r3, r6, ror #10 //ror and mask to match fixslicing + and r12, r3, r7, ror #10 //ror and mask to match fixslicing + strd r11, r12, [r0], #8 //store 1st half tk for 14th round + and r11, r3, r8, ror #10 //ror and mask to match fixslicing + and r12, r3, r9, ror #10 //ror and mask to match fixslicing + strd r11, r12, [r0], #8 //store 2nd half tk for 14th round + and r3, r3, r3, lsr #6 //r3 <- 0x03030303 + and r11, r3, r6, ror #12 //--- ror and masks to match fixslicing + and r12, r6, r3, lsl #6 + orr r12, r11, r12, ror #28 + str.w r12, [r0, #8] + and r11, r3, r7, ror #12 + and r12, r7, r3, lsl #6 + orr r12, r11, r12, ror #28 + str.w r12, [r0, #12] + and r11, r3, r9, ror #12 + and r12, r9, r3, lsl #6 + orr r12, r11, r12, ror #28 + str.w r12, [r0, #4] + and r11, r3, r8, ror #12 + and r12, r8, r3, lsl #6 + orr r12, r11, r12, ror #28 + str.w r12, [r0], #16 //ror and masks to match fixslicing --- + pop {r0-r12, lr} + bx lr + +.align 2 +quadruple_round: + orr r8, r2, r3 + eor r5, r5, r8 + mvn r5, r5 + eor r8, r3, r4, lsr #1 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8, lsl #1 //SWAPMOVE(r4, r3, 0x55555555, 1); + eor r8, r4, r5, lsr #1 + and r8, r8, r6 + eor r4, r4, r8 + eor r5, r5, r8, lsl #1 //SWAPMOVE(r5, r4, 0x55555555, 1); + orr r8, r4, r5 + eor r3, r3, r8 + mvn r3, r3 + eor r8, r2, r3, lsr #1 + and r8, r8, r6 + eor r2, r2, r8 + eor r3, r3, r8, lsl #1 //SWAPMOVE(r3, r2, 0x55555555, 1); + eor r8, r5, r2, lsr #1 + and r8, r8, r6 + eor r5, r5, r8 + eor r2, r2, r8, lsl #1 //SWAPMOVE(r2, r5, 0x55555555, 1); + orr r8, r2, r3 + eor r5, r5, r8 + mvn r5, r5 + eor r8, r3, r4, lsr #1 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8, lsl #1 //SWAPMOVE(r4, r3, 0x55555555, 1); + eor r8, r4, r5, lsr #1 + and r8, r8, r6 + eor r4, r4, r8 + eor r5, r5, r8, lsl #1 //SWAPMOVE(r5, r4, 0x55555555, 1); + orr r8, r4, r5 + eor r3, r3, r8 + eor r8, r2, r5 + and r8, r8, r6 + eor r2, r2, r8 + eor r5, r5, r8 //SWAPMOVE(r5, r2, 0x55555555, 0); + ldmia.w r1!, {r8-r11} //load rkeys in r8,...,r11 + eor r2, r2, r8 //add rtk_2_3 + rconst + eor r3, r3, r9 //add rtk_2_3 + rconst + eor r4, r4, r10 //add rtk_2_3 + rconst + eor r5, r5, r11 //add rtk_2_3 + rconst + ldmia.w r0!,{r8-r11} + eor r2, r2, r8 //add rtk_1 + eor r3, r3, r9 //add rtk_1 + eor r4, r4, r10 //add rtk_1 + eor r5, r5, r11 //add rtk_1 + and r8, r7, r2, ror #30 // --- mixcolumns 0 --- + eor r2, r2, r8, ror #24 + and r8, r7, r2, ror #18 + eor r2, r2, r8, ror #2 + and r8, r7, r2, ror #6 + eor r2, r2, r8, ror #4 + and r8, r7, r3, ror #30 + eor r3, r3, r8, ror #24 + and r8, r7, r3, ror #18 + eor r3, r3, r8, ror #2 + and r8, r7, r3, ror #6 + eor r3, r3, r8, ror #4 + and r8, r7, r4, ror #30 + eor r4, r4, r8, ror #24 + and r8, r7, r4, ror #18 + eor r4, r4, r8, ror #2 + and r8, r7, r4, ror #6 + eor r4, r4, r8, ror #4 + and r8, r7, r5, ror #30 + eor r5, r5, r8, ror #24 + and r8, r7, r5, ror #18 + eor r5, r5, r8, ror #2 + and r8, r7, r5, ror #6 + eor r5, r5, r8, ror #4 + orr r8, r4, r5 + eor r3, r3, r8 + mvn r3, r3 + eor r8, r2, r3, lsr #1 + and r8, r8, r6 + eor r2, r2, r8 + eor r3, r3, r8, lsl #1 //SWAPMOVE(r3, r2, 0x55555555, 1); + eor r8, r5, r2, lsr #1 + and r8, r8, r6 + eor r5, r5, r8 + eor r2, r2, r8, lsl #1 //SWAPMOVE(r2, r5, 0x55555555, 1); + orr r8, r2, r3 + eor r5, r5, r8 + mvn r5, r5 + eor r8, r3, r4, lsr #1 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8, lsl #1 //SWAPMOVE(r4, r3, 0x55555555, 1); + eor r8, r4, r5, lsr #1 + and r8, r8, r6 + eor r4, r4, r8 + eor r5, r5, r8, lsl #1 //SWAPMOVE(r5, r4, 0x55555555, 1); + orr r8, r4, r5 + eor r3, r3, r8 + mvn r3, r3 + eor r8, r2, r3, lsr #1 + and r8, r8, r6 + eor r2, r2, r8 + eor r3, r3, r8, lsl #1 //SWAPMOVE(r3, r2, 0x55555555, 1); + eor r8, r5, r2, lsr #1 + and r8, r8, r6 + eor r5, r5, r8 + eor r2, r2, r8, lsl #1 //SWAPMOVE(r2, r5, 0x55555555, 1); + orr r8, r2, r3 + eor r5, r5, r8 + eor r8, r3, r4 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8 //SWAPMOVE(r4, r3, 0x55555555, 0); + ldmia.w r1!, {r8-r11} //load rkeys in r8,...,r11 + eor r2, r2, r8 //add rkey + rconst + eor r3, r3, r9 //add rkey + rconst + eor r4, r4, r10 //add rkey + rconst + eor r5, r5, r11 //add rkey + rconst + ldmia.w r0!,{r8-r11} + eor r2, r2, r8 //add rtk_1 + eor r3, r3, r9 //add rtk_1 + eor r4, r4, r10 //add rtk_1 + eor r5, r5, r11 //add rtk_1 + and r8, r7, r2, ror #16 // --- mixcolumns 1 --- + eor r2, r2, r8, ror #30 + and r8, r7, r2, ror #28 + eor r2, r2, r8 + and r8, r7, r2, ror #16 + eor r2, r2, r8, ror #2 + and r8, r7, r3, ror #16 + eor r3, r3, r8, ror #30 + and r8, r7, r3, ror #28 + eor r3, r3, r8 + and r8, r7, r3, ror #16 + eor r3, r3, r8, ror #2 + and r8, r7, r4, ror #16 + eor r4, r4, r8, ror #30 + and r8, r7, r4, ror #28 + eor r4, r4, r8 + and r8, r7, r4, ror #16 + eor r4, r4, r8, ror #2 + and r8, r7, r5, ror #16 + eor r5, r5, r8, ror #30 + and r8, r7, r5, ror #28 + eor r5, r5, r8 + and r8, r7, r5, ror #16 + eor r5, r5, r8, ror #2 + orr r8, r2, r3 + eor r5, r5, r8 + mvn r5, r5 + eor r8, r3, r4, lsr #1 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8, lsl #1 //SWAPMOVE(r4, r3, 0x55555555, 1); + eor r8, r4, r5, lsr #1 + and r8, r8, r6 + eor r4, r4, r8 + eor r5, r5, r8, lsl #1 //SWAPMOVE(r5, r4, 0x55555555, 1); + orr r8, r4, r5 + eor r3, r3, r8 + mvn r3, r3 + eor r8, r2, r3, lsr #1 + and r8, r8, r6 + eor r2, r2, r8 + eor r3, r3, r8, lsl #1 //SWAPMOVE(r3, r2, 0x55555555, 1); + eor r8, r5, r2, lsr #1 + and r8, r8, r6 + eor r5, r5, r8 + eor r2, r2, r8, lsl #1 //SWAPMOVE(r2, r5, 0x55555555, 1); + orr r8, r2, r3 + eor r5, r5, r8 + mvn r5, r5 + eor r8, r3, r4, lsr #1 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8, lsl #1 //SWAPMOVE(r4, r3, 0x55555555, 1); + eor r8, r4, r5, lsr #1 + and r8, r8, r6 + eor r4, r4, r8 + eor r5, r5, r8, lsl #1 //SWAPMOVE(r5, r4, 0x55555555, 1); + orr r8, r4, r5 + eor r3, r3, r8 + eor r8, r2, r5 + and r8, r8, r6 + eor r2, r2, r8 + eor r5, r5, r8 //SWAPMOVE(r5, r2, 0x55555555, 0); + ldmia.w r1!, {r8-r11} //load rkeys in r8,...,r11 + eor r2, r2, r8 //add rtk_2_3 + rconst + eor r3, r3, r9 //add rtk_2_3 + rconst + eor r4, r4, r10 //add rtk_2_3 + rconst + eor r5, r5, r11 //add rtk_2_3 + rconst + ldmia.w r0!,{r8-r11} + eor r2, r2, r8 //add rtk_1 + eor r3, r3, r9 //add rtk_1 + eor r4, r4, r10 //add rtk_1 + eor r5, r5, r11 //add rtk_1 + and r8, r7, r2, ror #10 // --- mixcolumns 2 --- + eor r2, r2, r8, ror #4 + and r8, r7, r2, ror #6 + eor r2, r2, r8, ror #6 + and r8, r7, r2, ror #26 + eor r2, r2, r8 + and r8, r7, r3, ror #10 + eor r3, r3, r8, ror #4 + and r8, r7, r3, ror #6 + eor r3, r3, r8, ror #6 + and r8, r7, r3, ror #26 + eor r3, r3, r8 + and r8, r7, r4, ror #10 + eor r4, r4, r8, ror #4 + and r8, r7, r4, ror #6 + eor r4, r4, r8, ror #6 + and r8, r7, r4, ror #26 + eor r4, r4, r8 + and r8, r7, r5, ror #10 + eor r5, r5, r8, ror #4 + and r8, r7, r5, ror #6 + eor r5, r5, r8, ror #6 + and r8, r7, r5, ror #26 + eor r5, r5, r8 + orr r8, r4, r5 + eor r3, r3, r8 + mvn r3, r3 + eor r8, r2, r3, lsr #1 + and r8, r8, r6 + eor r2, r2, r8 + eor r3, r3, r8, lsl #1 //SWAPMOVE(r3, r2, 0x55555555, 1); + eor r8, r5, r2, lsr #1 + and r8, r8, r6 + eor r5, r5, r8 + eor r2, r2, r8, lsl #1 //SWAPMOVE(r2, r5, 0x55555555, 1); + orr r8, r2, r3 + eor r5, r5, r8 + mvn r5, r5 + eor r8, r3, r4, lsr #1 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8, lsl #1 //SWAPMOVE(r4, r3, 0x55555555, 1); + eor r8, r4, r5, lsr #1 + and r8, r8, r6 + eor r4, r4, r8 + eor r5, r5, r8, lsl #1 //SWAPMOVE(r5, r4, 0x55555555, 1); + orr r8, r4, r5 + eor r3, r3, r8 + mvn r3, r3 + eor r8, r2, r3, lsr #1 + and r8, r8, r6 + eor r2, r2, r8 + eor r3, r3, r8, lsl #1 //SWAPMOVE(r3, r2, 0x55555555, 1); + eor r8, r5, r2, lsr #1 + and r8, r8, r6 + eor r5, r5, r8 + eor r2, r2, r8, lsl #1 //SWAPMOVE(r2, r5, 0x55555555, 1); + orr r8, r2, r3 + eor r5, r5, r8 + eor r8, r3, r4 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8 //SWAPMOVE(r4, r3, 0x55555555, 0); + ldmia.w r1!, {r8-r11} //load rkeys in r8,...,r11 + eor r2, r2, r8 //add rkey + rconst + eor r3, r3, r9 //add rkey + rconst + eor r4, r4, r10 //add rkey + rconst + eor r5, r5, r11 //add rkey + rconst + ldmia.w r0!,{r8-r11} + eor r2, r2, r8 //add rtk_1 + eor r3, r3, r9 //add rtk_1 + eor r4, r4, r10 //add rtk_1 + eor r5, r5, r11 //add rtk_1 + and r8, r7, r2, ror #4 // --- mixcolumns 3 --- + eor r2, r2, r8, ror #26 + and r8, r7, r2 + eor r2, r2, r8, ror #4 + and r8, r7, r2, ror #4 + eor r2, r2, r8, ror #22 + and r8, r7, r3, ror #4 + eor r3, r3, r8, ror #26 + and r8, r7, r3 + eor r3, r3, r8, ror #4 + and r8, r7, r3, ror #4 + eor r3, r3, r8, ror #22 + and r8, r7, r4, ror #4 + eor r4, r4, r8, ror #26 + and r8, r7, r4 + eor r4, r4, r8, ror #4 + and r8, r7, r4, ror #4 + eor r4, r4, r8, ror #22 + and r8, r7, r5, ror #4 + eor r5, r5, r8, ror #26 + and r8, r7, r5 + eor r5, r5, r8, ror #4 + and r8, r7, r5, ror #4 + eor r5, r5, r8, ror #22 + bx lr + +/****************************************************************************** +* Inverse quadruple round of fixsliced SKINNY-128. +******************************************************************************/ +.align 2 +inv_quadruple_round: + and r8, r7, r2, ror #4 // --- mixcolumns 3 --- + eor r2, r2, r8, ror #22 + and r8, r7, r2 + eor r2, r2, r8, ror #4 + and r8, r7, r2, ror #4 + eor r2, r2, r8, ror #26 + and r8, r7, r3, ror #4 + eor r3, r3, r8, ror #22 + and r8, r7, r3 + eor r3, r3, r8, ror #4 + and r8, r7, r3, ror #4 + eor r3, r3, r8, ror #26 + and r8, r7, r4, ror #4 + eor r4, r4, r8, ror #22 + and r8, r7, r4 + eor r4, r4, r8, ror #4 + and r8, r7, r4, ror #4 + eor r4, r4, r8, ror #26 + and r8, r7, r5, ror #4 + eor r5, r5, r8, ror #22 + and r8, r7, r5 + eor r5, r5, r8, ror #4 + and r8, r7, r5, ror #4 + eor r5, r5, r8, ror #26 + ldrd r10, r11, [r1], #-8 + ldrd r8, r9, [r1], #-8 + eor r2, r2, r8 //add rkey + rconst + eor r3, r3, r9 //add rkey + rconst + eor r4, r4, r10 //add rkey + rconst + eor r5, r5, r11 //add rkey + rconst + ldrd r10, r11, [r0], #-8 + ldrd r8, r9, [r0], #-8 + eor r2, r2, r8 //add rtk1 + eor r3, r3, r9 //add rtk1 + eor r4, r4, r10 //add rtk1 + eor r5, r5, r11 //add rtk1 + eor r8, r3, r4 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8 //SWAPMOVE(r4, r3, 0x55555555, 0); + orr r8, r2, r3 + eor r5, r5, r8 + eor r8, r5, r2, lsr #1 + and r8, r8, r6 + eor r5, r5, r8 + eor r2, r2, r8, lsl #1 //SWAPMOVE(r2, r5, 0x55555555, 1); + eor r8, r2, r3, lsr #1 + and r8, r8, r6 + eor r2, r2, r8 + eor r3, r3, r8, lsl #1 //SWAPMOVE(r3, r2, 0x55555555, 1); + orr r8, r4, r5 + eor r3, r3, r8 + mvn r3, r3 + eor r8, r4, r5, lsr #1 + and r8, r8, r6 + eor r4, r4, r8 + eor r5, r5, r8, lsl #1 //SWAPMOVE(r5, r4, 0x55555555, 1); + eor r8, r3, r4, lsr #1 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8, lsl #1 //SWAPMOVE(r4, r3, 0x55555555, 1); + orr r8, r2, r3 + eor r5, r5, r8 + mvn r5, r5 + eor r8, r5, r2, lsr #1 + and r8, r8, r6 + eor r5, r5, r8 + eor r2, r2, r8, lsl #1 //SWAPMOVE(r2, r5, 0x55555555, 1); + eor r8, r2, r3, lsr #1 + and r8, r8, r6 + eor r2, r2, r8 + eor r3, r3, r8, lsl #1 //SWAPMOVE(r3, r2, 0x55555555, 1); + orr r8, r4, r5 + eor r3, r3, r8 + mvn r3, r3 + and r8, r7, r2, ror #26 // --- mixcolumns 2 --- + eor r2, r2, r8 + and r8, r7, r2, ror #6 + eor r2, r2, r8, ror #6 + and r8, r7, r2, ror #10 + eor r2, r2, r8, ror #4 + and r8, r7, r3, ror #26 + eor r3, r3, r8 + and r8, r7, r3, ror #6 + eor r3, r3, r8, ror #6 + and r8, r7, r3, ror #10 + eor r3, r3, r8, ror #4 + and r8, r7, r4, ror #26 + eor r4, r4, r8 + and r8, r7, r4, ror #6 + eor r4, r4, r8, ror #6 + and r8, r7, r4, ror #10 + eor r4, r4, r8, ror #4 + and r8, r7, r5, ror #26 + eor r5, r5, r8 + and r8, r7, r5, ror #6 + eor r5, r5, r8, ror #6 + and r8, r7, r5, ror #10 + eor r5, r5, r8, ror #4 + ldrd r10, r11, [r1], #-8 + ldrd r8, r9, [r1], #-8 + eor r2, r2, r8 //add rk2_3 + rconst + eor r3, r3, r9 //add rk2_3 + rconst + eor r4, r4, r10 //add rk2_3 + rconst + eor r5, r5, r11 //add rk2_3 + rconst + ldrd r10, r11, [r0], #-8 + ldrd r8, r9, [r0], #-8 + eor r2, r2, r8 //add rtk1 + eor r3, r3, r9 //add rtk1 + eor r4, r4, r10 //add rtk1 + eor r5, r5, r11 //add rtk1 + eor r8, r2, r5 + and r8, r8, r6 + eor r2, r2, r8 + eor r5, r5, r8 //SWAPMOVE(r5, r2, 0x55555555, 0); + orr r8, r4, r5 + eor r3, r3, r8 + eor r8, r4, r5, lsr #1 + and r8, r8, r6 + eor r4, r4, r8 + eor r5, r5, r8, lsl #1 //SWAPMOVE(r5, r4, 0x55555555, 1); + eor r8, r3, r4, lsr #1 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8, lsl #1 //SWAPMOVE(r4, r3, 0x55555555, 1); + orr r8, r2, r3 + eor r5, r5, r8 + mvn r5, r5 + eor r8, r5, r2, lsr #1 + and r8, r8, r6 + eor r5, r5, r8 + eor r2, r2, r8, lsl #1 //SWAPMOVE(r2, r5, 0x55555555, 1); + eor r8, r2, r3, lsr #1 + and r8, r8, r6 + eor r2, r2, r8 + eor r3, r3, r8, lsl #1 //SWAPMOVE(r3, r2, 0x55555555, 1); + orr r8, r4, r5 + eor r3, r3, r8 + mvn r3, r3 + eor r8, r4, r5, lsr #1 + and r8, r8, r6 + eor r4, r4, r8 + eor r5, r5, r8, lsl #1 //SWAPMOVE(r5, r4, 0x55555555, 1); + eor r8, r3, r4, lsr #1 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8, lsl #1 //SWAPMOVE(r4, r3, 0x55555555, 1); + orr r8, r2, r3 + eor r5, r5, r8 + mvn r5, r5 + and r8, r7, r2, ror #16 // --- mixcolumns 1 --- + eor r2, r2, r8, ror #2 + and r8, r7, r2, ror #28 + eor r2, r2, r8 + and r8, r7, r2, ror #16 + eor r2, r2, r8, ror #30 + and r8, r7, r3, ror #16 + eor r3, r3, r8, ror #2 + and r8, r7, r3, ror #28 + eor r3, r3, r8 + and r8, r7, r3, ror #16 + eor r3, r3, r8, ror #30 + and r8, r7, r4, ror #16 + eor r4, r4, r8, ror #2 + and r8, r7, r4, ror #28 + eor r4, r4, r8 + and r8, r7, r4, ror #16 + eor r4, r4, r8, ror #30 + and r8, r7, r5, ror #16 + eor r5, r5, r8, ror #2 + and r8, r7, r5, ror #28 + eor r5, r5, r8 + and r8, r7, r5, ror #16 + eor r5, r5, r8, ror #30 + ldrd r10, r11, [r1], #-8 + ldrd r8, r9, [r1], #-8 + eor r2, r2, r8 //add rkey + rconst + eor r3, r3, r9 //add rkey + rconst + eor r4, r4, r10 //add rkey + rconst + eor r5, r5, r11 //add rkey + rconst + ldrd r10, r11, [r0], #-8 + ldrd r8, r9, [r0], #-8 + eor r2, r2, r8 //add rtk1 + eor r3, r3, r9 //add rtk1 + eor r4, r4, r10 //add rtk1 + eor r5, r5, r11 //add rtk1 + eor r8, r3, r4 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8 //SWAPMOVE(r4, r3, 0x55555555, 0); + orr r8, r2, r3 + eor r5, r5, r8 + eor r8, r5, r2, lsr #1 + and r8, r8, r6 + eor r5, r5, r8 + eor r2, r2, r8, lsl #1 //SWAPMOVE(r2, r5, 0x55555555, 1); + eor r8, r2, r3, lsr #1 + and r8, r8, r6 + eor r2, r2, r8 + eor r3, r3, r8, lsl #1 //SWAPMOVE(r3, r2, 0x55555555, 1); + orr r8, r4, r5 + eor r3, r3, r8 + mvn r3, r3 + eor r8, r4, r5, lsr #1 + and r8, r8, r6 + eor r4, r4, r8 + eor r5, r5, r8, lsl #1 //SWAPMOVE(r5, r4, 0x55555555, 1); + eor r8, r3, r4, lsr #1 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8, lsl #1 //SWAPMOVE(r4, r3, 0x55555555, 1); + orr r8, r2, r3 + eor r5, r5, r8 + mvn r5, r5 + eor r8, r5, r2, lsr #1 + and r8, r8, r6 + eor r5, r5, r8 + eor r2, r2, r8, lsl #1 //SWAPMOVE(r2, r5, 0x55555555, 1); + eor r8, r2, r3, lsr #1 + and r8, r8, r6 + eor r2, r2, r8 + eor r3, r3, r8, lsl #1 //SWAPMOVE(r3, r2, 0x55555555, 1); + orr r8, r4, r5 + eor r3, r3, r8 + mvn r3, r3 + and r8, r7, r2, ror #6 // --- mixcolumns 0 --- + eor r2, r2, r8, ror #4 + and r8, r7, r2, ror #18 + eor r2, r2, r8, ror #2 + and r8, r7, r2, ror #30 + eor r2, r2, r8, ror #24 + and r8, r7, r3, ror #6 + eor r3, r3, r8, ror #4 + and r8, r7, r3, ror #18 + eor r3, r3, r8, ror #2 + and r8, r7, r3, ror #30 + eor r3, r3, r8, ror #24 + and r8, r7, r4, ror #6 + eor r4, r4, r8, ror #4 + and r8, r7, r4, ror #18 + eor r4, r4, r8, ror #2 + and r8, r7, r4, ror #30 + eor r4, r4, r8, ror #24 + and r8, r7, r5, ror #6 + eor r5, r5, r8, ror #4 + and r8, r7, r5, ror #18 + eor r5, r5, r8, ror #2 + and r8, r7, r5, ror #30 + eor r5, r5, r8, ror #24 + ldrd r10, r11, [r1], #-8 + ldrd r8, r9, [r1], #-8 + eor r2, r2, r8 //add rkey + rconst + eor r3, r3, r9 //add rkey + rconst + eor r4, r4, r10 //add rkey + rconst + eor r5, r5, r11 //add rkey + rconst + ldrd r10, r11, [r0], #-8 + ldrd r8, r9, [r0], #-8 + eor r2, r2, r8 //add rtk1 + eor r3, r3, r9 //add rtk1 + eor r4, r4, r10 //add rtk1 + eor r5, r5, r11 //add rtk1 + eor r8, r2, r5 + and r8, r8, r6 + eor r2, r2, r8 + eor r5, r5, r8 //SWAPMOVE(r5, r2, 0x55555555, 0); + orr r8, r4, r5 + eor r3, r3, r8 + eor r8, r4, r5, lsr #1 + and r8, r8, r6 + eor r4, r4, r8 + eor r5, r5, r8, lsl #1 //SWAPMOVE(r5, r4, 0x55555555, 1); + eor r8, r3, r4, lsr #1 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8, lsl #1 //SWAPMOVE(r4, r3, 0x55555555, 1); + orr r8, r2, r3 + eor r5, r5, r8 + mvn r5, r5 + eor r8, r5, r2, lsr #1 + and r8, r8, r6 + eor r5, r5, r8 + eor r2, r2, r8, lsl #1 //SWAPMOVE(r2, r5, 0x55555555, 1); + eor r8, r2, r3, lsr #1 + and r8, r8, r6 + eor r2, r2, r8 + eor r3, r3, r8, lsl #1 //SWAPMOVE(r3, r2, 0x55555555, 1); + orr r8, r4, r5 + eor r3, r3, r8 + mvn r3, r3 + eor r8, r4, r5, lsr #1 + and r8, r8, r6 + eor r4, r4, r8 + eor r5, r5, r8, lsl #1 //SWAPMOVE(r5, r4, 0x55555555, 1); + eor r8, r3, r4, lsr #1 + and r8, r8, r6 + eor r3, r3, r8 + eor r4, r4, r8, lsl #1 //SWAPMOVE(r4, r3, 0x55555555, 1); + orr r8, r2, r3 + eor r5, r5, r8 + mvn r5, r5 + bx lr + +/****************************************************************************** +* Encrypt a single block using fixsliced SKINNY-128-128. +******************************************************************************/ +@ void skinny128_384(u8* ctext, const u32* tk, const u8* ptext, const u32* rtk1) +.global skinny128_384 +.type skinny128_384,%function +.align 2 +skinny128_384: + push {r0-r12, r14} + mov.w r0, r3 + ldr.w r3, [r2, #8] + ldr.w r4, [r2, #4] + ldr.w r5, [r2, #12] + ldr.w r2, [r2] + movw r10, #0x0a0a + movt r10, #0x0a0a //r10 <- 0x0a0a0a0a + movw r11, #0x3030 + movt r11, #0x3030 //r11 <- 0x30303030 + bl packing + mov r7, r11 + movw r6, #0x5555 + movt r6, #0x5555 //r6 <- 0x55555555 + bl quadruple_round + bl quadruple_round + bl quadruple_round + bl quadruple_round + sub.w r0, #256 // rtk1 repeats every 16 rounds + bl quadruple_round + bl quadruple_round + bl quadruple_round + bl quadruple_round + sub.w r0, #256 // rtk1 repeats every 16 rounds + bl quadruple_round + bl quadruple_round + bl quadruple_round + bl quadruple_round + sub.w r0, #256 // rtk1 repeats every 16 rounds + bl quadruple_round + bl quadruple_round + bl unpacking + ldr.w r0, [sp], #4 + strd r2, r4, [r0] + strd r3, r5, [r0, #8] + pop {r1-r12,r14} + bx lr + +/****************************************************************************** +* Decrypt a single block using fixsliced SKINNY-128-128. +******************************************************************************/ +@ void skinny128_384_inv(u8* ctext, const u32* tk, const u8* ptext, const u32* rtk1) +.global skinny128_384_inv +.type skinny128_384_inv,%function +.align 2 +skinny128_384_inv: + push {r0-r12, r14} + mov.w r0, r3 + ldr.w r3, [r2, #8] + ldr.w r4, [r2, #4] + ldr.w r5, [r2, #12] + ldr.w r2, [r2] + movw r10, #0x0a0a + movt r10, #0x0a0a //r10 <- 0x0a0a0a0a + movw r11, #0x3030 + movt r11, #0x3030 //r11 <- 0x30303030 + bl packing + mov r7, r11 + movw r6, #0x5555 + movt r6, #0x5555 //r6 <- 0x55555555 + add.w r0, #120 // points to the right rtk1 + add.w r1, #888 + bl inv_quadruple_round + bl inv_quadruple_round + add.w r0, #256 // rtk1 repeats every 16 rounds + bl inv_quadruple_round + bl inv_quadruple_round + bl inv_quadruple_round + bl inv_quadruple_round + add.w r0, #256 // rtk1 repeats every 16 rounds + bl inv_quadruple_round + bl inv_quadruple_round + bl inv_quadruple_round + bl inv_quadruple_round + add.w r0, #256 // rtk1 repeats every 16 rounds + bl inv_quadruple_round + bl inv_quadruple_round + bl inv_quadruple_round + bl inv_quadruple_round + bl unpacking + ldr.w r0, [sp], #4 + strd r2, r4, [r0] + strd r3, r5, [r0, #8] + pop {r1-r12,r14} + bx lr diff --git a/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/armcortexm_1/skinnyaead.h b/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/armcortexm_1/skinnyaead.h new file mode 100644 index 0000000..0cf0fa9 --- /dev/null +++ b/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/armcortexm_1/skinnyaead.h @@ -0,0 +1,39 @@ +#ifndef SKINNYAEADM1_H_ +#define SKINNYAEADM1_H_ + +#include "skinny128.h" + +typedef unsigned char u8; +typedef unsigned int u32; +typedef unsigned long long u64; + +#define TAGBYTES 16 +#define KEYBYTES 16 +#define BLOCKBYTES 16 + +#define SET_DOMAIN(ptr, domain) ((ptr)[15] = (domain)) + +#define UPDATE_LFSR(lfsr) ({ \ + feedback = ((lfsr) & (1ULL << 63)) ? 0x1B : 0x00; \ + (lfsr) = ((lfsr) << 1) ^ feedback; \ +}) + +#define LE_STR_64(ptr, x) ({ \ + (ptr)[0] = (u8)(x); \ + (ptr)[1] = (u8)((x) >> 8); \ + (ptr)[2] = (u8)((x) >> 16); \ + (ptr)[3] = (u8)((x) >> 24); \ + (ptr)[4] = (u8)((x) >> 32); \ + (ptr)[5] = (u8)((x) >> 40); \ + (ptr)[6] = (u8)((x) >> 48); \ + (ptr)[7] = (u8)((x) >> 56); \ +}) +//x ^= y with x, y 128-bit blocks +#define XOR_BLOCK(x,y) ({ \ + ((u32*)(x))[0] ^= ((u32*)(y))[0]; \ + ((u32*)(x))[1] ^= ((u32*)(y))[1]; \ + ((u32*)(x))[2] ^= ((u32*)(y))[2]; \ + ((u32*)(x))[3] ^= ((u32*)(y))[3]; \ +}) + +#endif // SKINNYAEADM1_H_ \ No newline at end of file diff --git a/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/armcortexm_2/api.h b/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/armcortexm_2/api.h new file mode 100644 index 0000000..a4aa567 --- /dev/null +++ b/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/armcortexm_2/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/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/armcortexm_2/crypto_aead.h b/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/armcortexm_2/crypto_aead.h new file mode 100644 index 0000000..6f4ee42 --- /dev/null +++ b/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/armcortexm_2/crypto_aead.h @@ -0,0 +1,13 @@ +//API required by the NIST for the LWC competition +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); + +//API required by the NIST for the LWC competition +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); diff --git a/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/armcortexm_2/encrypt.c b/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/armcortexm_2/encrypt.c new file mode 100644 index 0000000..fa4a24b --- /dev/null +++ b/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/armcortexm_2/encrypt.c @@ -0,0 +1,298 @@ +/****************************************************************************** +* Constant-time implementation of SKINNY-AEAD-M1 (v1.1). +* +* Two blocks are treated in parallel with SKINNY-128-384 whenever possible. +* +* For more details, see the paper at: https:// +* +* @author Alexandre Adomnicai, Nanyang Technological University, +* alexandre.adomnicai@ntu.edu.sg +* +* @date May 2020 +******************************************************************************/ +#include "skinny128.h" +#include "skinnyaead.h" +#include +#include + +/****************************************************************************** +* x ^= y where x, y are 128-bit blocks (16 bytes array). +******************************************************************************/ +static void xor_block(u8 * x, const u8* y) { + for(int i = 0; i < BLOCKBYTES; i++) + x[i] ^= y[i]; +} + +/****************************************************************************** +* Process the associated data. Common to SKINNY-AEAD-M1 encrypt and decrypt +* functions. +******************************************************************************/ +static void skinny_aead_m1_auth(u8* auth, u8* c, u8* tag, u32* rtk1, + u32* rtk2_3, u64 mlen, const u8* ad, u64 adlen) { + u64 lfsr = 1; + u8 feedback; + u8 tmp[2*BLOCKBYTES]; + memset(tmp, 0x00, 2*BLOCKBYTES); + memset(auth, 0x00, BLOCKBYTES); + SET_DOMAIN(tmp, 0x02); + while (adlen >= 2*BLOCKBYTES) { + LE_STR_64(tmp, lfsr); + UPDATE_LFSR(lfsr); + LE_STR_64(tmp + BLOCKBYTES, lfsr); + SET_DOMAIN(tmp + BLOCKBYTES, 0x02); + tkschedule_perm_tk1(rtk1, tmp, tmp+BLOCKBYTES); + skinny128_384(tmp, tmp+BLOCKBYTES, ad, ad+BLOCKBYTES, rtk1, rtk2_3); + xor_block(auth, tmp); + xor_block(auth, tmp + BLOCKBYTES); + adlen -= 2*BLOCKBYTES; + ad += 2*BLOCKBYTES; + UPDATE_LFSR(lfsr); + } + if (adlen > BLOCKBYTES) { // pad and process 2 blocs + LE_STR_64(tmp, lfsr); + UPDATE_LFSR(lfsr); + LE_STR_64(tmp + BLOCKBYTES, lfsr); + SET_DOMAIN(tmp + BLOCKBYTES, 0x03); // domain for padding ad + tkschedule_perm_tk1(rtk1, tmp, tmp + BLOCKBYTES); + adlen -= BLOCKBYTES; + memset(tmp, 0x00, BLOCKBYTES); + memcpy(tmp, ad + BLOCKBYTES, adlen); + tmp[adlen] ^= 0x80; // padding + skinny128_384(tmp + BLOCKBYTES, tmp, ad, tmp, rtk1, rtk2_3); + xor_block(auth, tmp); + xor_block(auth, tmp + BLOCKBYTES); + } else if (adlen == BLOCKBYTES) { + LE_STR_64(tmp, lfsr); + if (mlen == 0) { // if tag has *NOT* been calculated yet + tkschedule_perm_tk1(rtk1, tmp, tag); + skinny128_384(auth, c, ad, c, rtk1, rtk2_3); + } else { // if tag has been calculated yet + tkschedule_perm_tk1(rtk1, tmp, tmp); // process last ad block + skinny128_384(auth, auth, ad, ad, rtk1, rtk2_3); + } + } else if (adlen > 0) { + LE_STR_64(tmp, lfsr); + SET_DOMAIN(tmp, 0x03); // domain for padding ad + memset(tmp + BLOCKBYTES, 0x00, BLOCKBYTES); // padding + memcpy(tmp + BLOCKBYTES, ad, adlen); // padding + tmp[BLOCKBYTES + adlen] ^= 0x80; // padding + if (mlen == 0) { // if tag has *NOT* been calculated yet + tkschedule_perm_tk1(rtk1, tmp, tag); // compute the tag + skinny128_384(auth, c, tmp + BLOCKBYTES, c, rtk1, rtk2_3); + } else { // if tag has been calculated yet + tkschedule_perm_tk1(rtk1, tmp, tmp); // process last ad block + skinny128_384(auth, auth, tmp + BLOCKBYTES, tmp + BLOCKBYTES, rtk1, rtk2_3); + } + } +} + +/****************************************************************************** +* Encryption and authentication using SKINNY-AEAD-M1 +******************************************************************************/ +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 feedback; + u64 i,lfsr = 1; + u32 rtk1[8*16]; + u32 rtk2_3[8*SKINNY128_384_ROUNDS]; + u8 tmp[2*BLOCKBYTES], tag[BLOCKBYTES], auth[BLOCKBYTES], sum[BLOCKBYTES]; + (void)nsec; + + // ----------------- Initialization ----------------- + *clen = mlen + TAGBYTES; + tkschedule_lfsr_2(rtk2_3, npub, npub, SKINNY128_384_ROUNDS); + tkschedule_lfsr_3(rtk2_3, k, k, SKINNY128_384_ROUNDS); + tkschedule_perm(rtk2_3); + memset(tmp, 0x00, 2*BLOCKBYTES); + memset(tag, 0x00, BLOCKBYTES); + memset(auth, 0x00, BLOCKBYTES); + memset(sum, 0x00, BLOCKBYTES); + // ----------------- Initialization ----------------- + + // ----------------- Process the plaintext ----------------- + while (mlen >= 2*BLOCKBYTES) { // process 2 blocks in // + LE_STR_64(tmp, lfsr); + UPDATE_LFSR(lfsr); + LE_STR_64(tmp + BLOCKBYTES, lfsr); + tkschedule_perm_tk1(rtk1, tmp, tmp + BLOCKBYTES); + skinny128_384(c, c + BLOCKBYTES, m, m + BLOCKBYTES, rtk1, rtk2_3); + xor_block(sum, m); // sum for tag computation + xor_block(sum, m + BLOCKBYTES); // sum for tag computation + mlen -= 2*BLOCKBYTES; + c += 2*BLOCKBYTES; + m += 2*BLOCKBYTES; + UPDATE_LFSR(lfsr); + } + SET_DOMAIN(tag, 0x04); // domain for tag computation + if (mlen > BLOCKBYTES) { // pad and process 2 blocs in // + LE_STR_64(tmp, lfsr); + UPDATE_LFSR(lfsr); + LE_STR_64(tmp + BLOCKBYTES, lfsr); + SET_DOMAIN(tmp + BLOCKBYTES, 0x01); // domain for padding m + tkschedule_perm_tk1(rtk1, tmp, tmp + BLOCKBYTES); + skinny128_384(c, auth, m, auth, rtk1, rtk2_3); + xor_block(sum, m); + for(i = 0; i < mlen - BLOCKBYTES; i++) { + c[BLOCKBYTES + i] = auth[i] ^ m[BLOCKBYTES + i]; + sum[i] ^= m[BLOCKBYTES + i]; + } + sum[i] ^= 0x80; // padding + SET_DOMAIN(tag, 0x05); // domain for tag computation + m += mlen; + c += mlen; + mlen = 0; + UPDATE_LFSR(lfsr); + } else if (mlen == BLOCKBYTES) { // last block is full + LE_STR_64(tmp, lfsr); + UPDATE_LFSR(lfsr); + LE_STR_64(tmp + BLOCKBYTES, lfsr); + SET_DOMAIN(tmp + BLOCKBYTES, 0x04); // domain for tag computation + xor_block(sum, m); // sum for tag computation + tkschedule_perm_tk1(rtk1, tmp, tmp + BLOCKBYTES); + skinny128_384(c, sum, m, sum, rtk1, rtk2_3); + c += BLOCKBYTES; + } else if (mlen > 0) { // last block is partial + LE_STR_64(tmp, lfsr); + SET_DOMAIN(tmp, 0x01); // domain for padding + UPDATE_LFSR(lfsr); + LE_STR_64(tmp + BLOCKBYTES, lfsr); + SET_DOMAIN(tmp + BLOCKBYTES, 0x05); // domain for tag computation + for(i = 0; i < mlen; i++) // sum for tag computation + sum[i] ^= m[i]; // sum for tag computation + sum[i] ^= 0x80; // padding + tkschedule_perm_tk1(rtk1, tmp, tmp + BLOCKBYTES); + skinny128_384(auth, sum, auth, sum, rtk1, rtk2_3); + for(i = 0; i < mlen; i++) + c[i] = auth[i] ^ m[i]; // encrypted padded block + c += mlen; + } + if (mlen == 0) { // if tag has *NOT* been calculated yet + LE_STR_64(tag, lfsr); // lfsr for tag computation + if((adlen % 32) == 0 || (adlen % 32) > BLOCKBYTES) { + tkschedule_perm_tk1(rtk1, tag, tag); + skinny128_384(sum, sum, sum, sum, rtk1, rtk2_3); // compute the tag + } + } + // ----------------- Process the plaintext ----------------- + + // ----------------- Process the associated data ----------------- + skinny_aead_m1_auth(auth, sum, tag, rtk1, rtk2_3, mlen, ad, adlen); + xor_block(sum, auth); + memcpy(c, sum, TAGBYTES); + // ----------------- Process the associated data ----------------- + + return 0; +} + + +/****************************************************************************** +* Decryption and authentication using SKINNY-AEAD-M1 +******************************************************************************/ +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 feedback; + u64 i,lfsr = 1; + u32 rtk1[8*16]; + u32 rtk2_3[8*SKINNY128_384_ROUNDS]; + u8 tmp[2*BLOCKBYTES]; + u8 sum[BLOCKBYTES], tag[BLOCKBYTES], auth[BLOCKBYTES]; + (void)nsec; + + if (clen < TAGBYTES) + return -1; + + // ----------------- Initialization ----------------- + clen -= TAGBYTES; + *mlen = clen; + tkschedule_lfsr_2(rtk2_3, npub, npub, SKINNY128_384_ROUNDS); + tkschedule_lfsr_3(rtk2_3, k, k, SKINNY128_384_ROUNDS); + tkschedule_perm(rtk2_3); + memset(tmp, 0x00, 2*BLOCKBYTES); + memset(tag, 0x00, BLOCKBYTES); + memset(auth, 0x00, BLOCKBYTES); + memset(sum, 0x00, BLOCKBYTES); + // ----------------- Initialization ----------------- + + // ----------------- Process the plaintext ----------------- + while (clen >= 2*BLOCKBYTES) { // process 2 blocks in // + LE_STR_64(tmp, lfsr); + UPDATE_LFSR(lfsr); + LE_STR_64(tmp + BLOCKBYTES, lfsr); + tkschedule_perm_tk1(rtk1, tmp, tmp + BLOCKBYTES); + skinny128_384_inv(m, m + BLOCKBYTES, c, c + BLOCKBYTES, rtk1, rtk2_3); + xor_block(sum, m); // sum for tag computation + xor_block(sum, m + BLOCKBYTES); // sum for tag computation + clen -= 2*BLOCKBYTES; + c += 2*BLOCKBYTES; + m += 2*BLOCKBYTES; + UPDATE_LFSR(lfsr); + } + SET_DOMAIN(tag, 0x04); // domain for tag computation + if (clen > BLOCKBYTES) { // pad and process 2 blocs in // + LE_STR_64(tmp, lfsr); + tkschedule_perm_tk1(rtk1, tmp, tmp); + skinny128_384_inv(m, m, c, c, rtk1, rtk2_3); + xor_block(sum, m); + UPDATE_LFSR(lfsr); + LE_STR_64(tmp, lfsr); + SET_DOMAIN(tmp, 0x01); // domain for padding m + tkschedule_perm_tk1(rtk1, tmp, tmp); + skinny128_384(auth, auth, auth, auth, rtk1, rtk2_3); + for(i = 0; i < clen - BLOCKBYTES; i++) { + m[BLOCKBYTES + i] = auth[i] ^ c[BLOCKBYTES + i]; + sum[i] ^= m[BLOCKBYTES + i]; + } + sum[i] ^= 0x80; // padding + SET_DOMAIN(tag, 0x05); // domain for tag computation + c += clen; + clen = 0; + UPDATE_LFSR(lfsr); + } else if (clen == BLOCKBYTES) { // last block is full + LE_STR_64(tmp, lfsr); + tkschedule_perm_tk1(rtk1, tmp, tmp); + skinny128_384_inv(m, m, c, c, rtk1, rtk2_3); + xor_block(sum, m); // sum for tag computation + SET_DOMAIN(tag, 0x04); // domain for tag computation + UPDATE_LFSR(lfsr); + c += BLOCKBYTES; + clen = 0; + } else if (clen > 0) { // last block is partial + LE_STR_64(tmp, lfsr); + SET_DOMAIN(tmp, 0x01); // domain for padding + tkschedule_perm_tk1(rtk1, tmp, tmp); + skinny128_384(auth, auth, auth, auth, rtk1, rtk2_3); + for(i = 0; i < clen; i++) { + m[i] = auth[i] ^ c[i]; // encrypted padded block + sum[i] ^= m[i]; // sum for tag computation + } + sum[i] ^= 0x80; // padding + SET_DOMAIN(tag, 0x05); // domain for tag computation + UPDATE_LFSR(lfsr); + c += clen; + clen = 0; + } + if (clen == 0) { // if tag has *NOT* been calculated yet + LE_STR_64(tag, lfsr); + if((adlen % 32) == 0 || (adlen % 32) > BLOCKBYTES) { + tkschedule_perm_tk1(rtk1, tag, tag); //if AD can be processed in // + skinny128_384(sum, sum, sum, sum, rtk1, rtk2_3); // compute the tag + } + } + + // ----------------- Process the associated data ----------------- + skinny_aead_m1_auth(auth, sum, tag, rtk1, rtk2_3, clen, ad, adlen); + xor_block(sum, auth); + feedback = 0; + for(i = 0; i < TAGBYTES; i++) + feedback |= sum[i] ^ c[i]; // constant-time tag verification + return feedback; + // ----------------- Process the associated data ----------------- +} \ No newline at end of file diff --git a/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/armcortexm_2/skinny128.h b/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/armcortexm_2/skinny128.h new file mode 100644 index 0000000..2f7171b --- /dev/null +++ b/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/armcortexm_2/skinny128.h @@ -0,0 +1,17 @@ +#ifndef SKINNY128_H_ +#define SKINNY128_H_ + +typedef unsigned char u8; +typedef unsigned int u32; + +#define SKINNY128_384_ROUNDS 56 + +extern void skinny128_384(u8* ctext, u8* ctext_bis, const u8* ptext, const u8* ptext_bis, const u32* rtk1, const u32* rtk2_3); +extern void skinny128_384_inv(u8* ptext, u8* ptext_bis, const u8* ctext, const u8* ctext_bis, const u32* rtk1, const u32* rtk2_3); +extern void tkschedule_lfsr_2(u32* rtk, const u8* tk2, const u8* tk2_bis, const int rounds); +extern void pack_tk1(u32* rtk, const u8* tk2, const u8* tk2_bis, const int rounds); +extern void tkschedule_lfsr_3(u32* rtk, const u8* tk3, const u8* tk3_bis, const int rounds); +extern void tkschedule_perm(u32* rtk); +extern void tkschedule_perm_tk1(u32* rtk1, const u8* tk1, const u8* tk1_bis); + +#endif // SKINNY128_H_ \ No newline at end of file diff --git a/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/armcortexm_2/skinny128.s b/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/armcortexm_2/skinny128.s new file mode 100644 index 0000000..33415d7 --- /dev/null +++ b/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/armcortexm_2/skinny128.s @@ -0,0 +1,3935 @@ +/******************************************************************************* +* Constant-time ARM assembly implementation of the SKINNY block cipher. +* Two blocks are processed in parallel. +* +* @author Alexandre Adomnicai, Nanyang Technological University, +* alexandre.adomnicai@ntu.edu.sg +* +* @date April 2020 +*******************************************************************************/ + +.syntax unified +.thumb + +/******************************************************************************* +* Applies P^2 on the tweakey state in a bitsliced manner. +*******************************************************************************/ +.align 2 +p2: + movw r3, #0xcc00 + movt r3, #0xcc00 //r1 <- 0xcc00cc00 + movw r4, #0xcc00 + movt r4, #0x0033 //r10<- 0xcc000033 + and r1, r3, r5, ror #14 + bfi r1, r5, #16, #8 + and r2, r5, #0xcc000000 + orr r1, r1, r2, lsr #2 + and r2, r4, r5 + orr r1, r1, r2, lsr #8 + and r2, r5, #0x00cc0000 + orr r5, r1, r2, lsr #18 + and r1, r3, r6, ror #14 + bfi r1, r6, #16, #8 + and r2, r6, #0xcc000000 + orr r1, r1, r2, lsr #2 + and r2, r4, r6 + orr r1, r1, r2, lsr #8 + and r2, r6, #0x00cc0000 + orr r6, r1, r2, lsr #18 + and r1, r3, r7, ror #14 + bfi r1, r7, #16, #8 + and r2, r7, #0xcc000000 + orr r1, r1, r2, lsr #2 + and r2, r4, r7 + orr r1, r1, r2, lsr #8 + and r2, r7, #0x00cc0000 + orr r7, r1, r2, lsr #18 + and r1, r3, r8, ror #14 + bfi r1, r8, #16, #8 + and r2, r8, #0xcc000000 + orr r1, r1, r2, lsr #2 + and r2, r4, r8 + orr r1, r1, r2, lsr #8 + and r2, r8, #0x00cc0000 + orr r8, r1, r2, lsr #18 + and r1, r3, r9, ror #14 + bfi r1, r9, #16, #8 + and r2, r9, #0xcc000000 + orr r1, r1, r2, lsr #2 + and r2, r4, r9 + orr r1, r1, r2, lsr #8 + and r2, r9, #0x00cc0000 + orr r9, r1, r2, lsr #18 + and r1, r3, r10, ror #14 + bfi r1, r10, #16, #8 + and r2, r10, #0xcc000000 + orr r1, r1, r2, lsr #2 + and r2, r4, r10 + orr r1, r1, r2, lsr #8 + and r2, r10, #0x00cc0000 + orr r10, r1, r2, lsr #18 + and r1, r3, r11, ror #14 + bfi r1, r11, #16, #8 + and r2, r11, #0xcc000000 + orr r1, r1, r2, lsr #2 + and r2, r4, r11 + orr r1, r1, r2, lsr #8 + and r2, r11, #0x00cc0000 + orr r11, r1, r2, lsr #18 + and r1, r3, r12, ror #14 + bfi r1, r12, #16, #8 + and r2, r12, #0xcc000000 + orr r1, r1, r2, lsr #2 + and r2, r4, r12 + orr r1, r1, r2, lsr #8 + and r2, r12, #0x00cc0000 + orr r12, r1, r2, lsr #18 + bx lr + +/******************************************************************************* +* Applies P^4 on the tweakey state in a bitsliced manner. +*******************************************************************************/ +.align 2 +p4: + str.w r14, [sp] //store r14 on the stack + movw r14, #0x00cc + movt r14, #0xcc00 //r14<- 0xcc0000cc + movw r3, #0xcc00 + movt r3, #0x3300 //r3 <- 0x3300cc00 + movw r4, #0x00cc + movt r4, #0x00cc //r4 <- 0x00cc00cc + and r2, r14, r5, ror #22 + and r1, r3, r5, ror #16 + orr r2, r2, r1 + and r1, r5, r4 + orr r2, r2, r1, lsr #2 + movw r1, #0xcc33 //r1 <- 0x0000cc33 + and r5, r5, r1 + orr r5, r2, r5, ror #24 + and r2, r14, r6, ror #22 + and r1, r3, r6, ror #16 + orr r2, r2, r1 + and r1, r6, r4 + orr r2, r2, r1, lsr #2 + movw r1, #0xcc33 //r1 <- 0x0000cc33 + and r6, r6, r1 + orr r6, r2, r6, ror #24 + and r2, r14, r7, ror #22 + and r1, r3, r7, ror #16 + orr r2, r2, r1 + and r1, r7, r4 + orr r2, r2, r1, lsr #2 + movw r1, #0xcc33 //r1 <- 0x0000cc33 + and r7, r7, r1 + orr r7, r2, r7, ror #24 + and r2, r14, r8, ror #22 + and r1, r3, r8, ror #16 + orr r2, r2, r1 + and r1, r8, r4 + orr r2, r2, r1, lsr #2 + movw r1, #0xcc33 //r1 <- 0x0000cc33 + and r8, r8, r1 + orr r8, r2, r8, ror #24 + and r2, r14, r9, ror #22 + and r1, r3, r9, ror #16 + orr r2, r2, r1 + and r1, r9, r4 + orr r2, r2, r1, lsr #2 + movw r1, #0xcc33 //r1 <- 0x0000cc33 + and r9, r9, r1 + orr r9, r2, r9, ror #24 + and r2, r14, r10, ror #22 + and r1, r3, r10, ror #16 + orr r2, r2, r1 + and r1, r10, r4 + orr r2, r2, r1, lsr #2 + movw r1, #0xcc33 //r1 <- 0x0000cc33 + and r10, r10, r1 + orr r10, r2, r10, ror #24 + and r2, r14, r11, ror #22 + and r1, r3, r11, ror #16 + orr r2, r2, r1 + and r1, r11, r4 + orr r2, r2, r1, lsr #2 + movw r1, #0xcc33 //r1 <- 0x0000cc33 + and r11, r11, r1 + orr r11, r2, r11, ror #24 + and r2, r14, r12, ror #22 + and r1, r3, r12, ror #16 + orr r2, r2, r1 + and r1, r12, r4 + orr r2, r2, r1, lsr #2 + movw r1, #0xcc33 //r1 <- 0x0000cc33 + and r12, r12, r1 + orr r12, r2, r12, ror #24 + ldr.w r14, [sp] //restore r14 + bx lr + +/******************************************************************************* +* Applies P^6 on the tweakey state in a bitsliced manner +*******************************************************************************/ +.align 2 +p6: + movw r3, #0x3333 //r1 <- 0x00003333 + movw r4, #0x00cc + movt r4, #0x3300 //r12<- 0x330000cc + and r1, r5, r3, ror #8 // --- permute r5 6 times + and r2, r4, r5, ror #24 + orr r2, r2, r1, ror #6 + and r1, r3, r5, ror #10 + orr r2, r2, r1 + and r1, r5, #0x000000cc + orr r2, r2, r1, lsl #14 + and r1, r5, #0x00003300 + orr r5, r2, r1, lsl #2 // permute r5 6 times --- + and r1, r6, r3, ror #8 // --- permute r6 6 times + and r2, r4, r6, ror #24 + orr r2, r2, r1, ror #6 + and r1, r3, r6, ror #10 + orr r2, r2, r1 + and r1, r6, #0x000000cc + orr r2, r2, r1, lsl #14 + and r1, r6, #0x00003300 + orr r6, r2, r1, lsl #2 // permute r6 6 times --- + and r1, r7, r3, ror #8 // --- permute r7 6 times + and r2, r4, r7, ror #24 + orr r2, r2, r1, ror #6 + and r1, r3, r7, ror #10 + orr r2, r2, r1 + and r1, r7, #0x000000cc + orr r2, r2, r1, lsl #14 + and r1, r7, #0x00003300 + orr r7, r2, r1, lsl #2 // permute r7 6 times --- + and r1, r8, r3, ror #8 // --- permute r8 6 times + and r2, r4, r8, ror #24 + orr r2, r2, r1, ror #6 + and r1, r3, r8, ror #10 + orr r2, r2, r1 + and r1, r8, #0x000000cc + orr r2, r2, r1, lsl #14 + and r1, r8, #0x00003300 + orr r8, r2, r1, lsl #2 // permute r8 6 times --- + and r1, r9, r3, ror #8 // --- permute r9 6 times + and r2, r4, r9, ror #24 + orr r2, r2, r1, ror #6 + and r1, r3, r9, ror #10 + orr r2, r2, r1 + and r1, r9, #0x000000cc + orr r2, r2, r1, lsl #14 + and r1, r9, #0x00003300 + orr r9, r2, r1, lsl #2 // permute r9 6 times --- + and r1, r10, r3, ror #8 // --- permute r10 6 times + and r2, r4, r10, ror #24 + orr r2, r2, r1, ror #6 + and r1, r3, r10, ror #10 + orr r2, r2, r1 + and r1, r10, #0x000000cc + orr r2, r2, r1, lsl #14 + and r1, r10, #0x00003300 + orr r10, r2, r1, lsl #2 // permute r10 6 times --- + and r1, r11, r3, ror #8 // --- permute r11 6 times + and r2, r4, r11, ror #24 + orr r2, r2, r1, ror #6 + and r1, r3, r11, ror #10 + orr r2, r2, r1 + and r1, r11, #0x000000cc + orr r2, r2, r1, lsl #14 + and r1, r11, #0x00003300 + orr r11, r2, r1, lsl #2 // permute r11 6 times --- + and r1, r12, r3, ror #8 // --- permute r12 6 times + and r2, r4, r12, ror #24 + orr r2, r2, r1, ror #6 + and r1, r3, r12, ror #10 + orr r2, r2, r1 + and r1, r12, #0x000000cc + orr r2, r2, r1, lsl #14 + and r1, r12, #0x00003300 + orr r12, r2, r1, lsl #2 // permute r12 6 times --- + bx lr + +/******************************************************************************* +* Applies P^8 on the tweakey state in a bitsliced manner. +*******************************************************************************/ +.align 2 +p8: + movw r3, #0x3333 //r3 <- 0x00003333 + movw r4, #0x0000 + movt r4, #0x33cc //r4 <- 0x33cc0000 + and r1, r5, r4 // --- permute r5 8 times + and r2, r4, r5, ror #8 + orr r2, r2, r1, ror #24 + and r1, r5, r3, lsl #2 + orr r2, r2, r1, ror #26 + and r1, r5, r3, lsl #8 + orr r5, r2, r1, lsr #6 // permute r5 8 times --- + and r1, r6, r4 // --- permute r6 8 times + and r2, r4, r6, ror #8 + orr r2, r2, r1, ror #24 + and r1, r6, r3, lsl #2 + orr r2, r2, r1, ror #26 + and r1, r6, r3, lsl #8 + orr r6, r2, r1, lsr #6 // permute r6 8 times --- + and r1, r7, r4 // --- permute r7 8 times + and r2, r4, r7, ror #8 + orr r2, r2, r1, ror #24 + and r1, r7, r3, lsl #2 + orr r2, r2, r1, ror #26 + and r1, r7, r3, lsl #8 + orr r7, r2, r1, lsr #6 // permute r7 8 times --- + and r1, r8, r4 // --- permute r8 8 times + and r2, r4, r8, ror #8 + orr r2, r2, r1, ror #24 + and r1, r8, r3, lsl #2 + orr r2, r2, r1, ror #26 + and r1, r8, r3, lsl #8 + orr r8, r2, r1, lsr #6 // permute r8 8 times --- + and r1, r9, r4 // --- permute r9 8 times + and r2, r4, r9, ror #8 + orr r2, r2, r1, ror #24 + and r1, r9, r3, lsl #2 + orr r2, r2, r1, ror #26 + and r1, r9, r3, lsl #8 + orr r9, r2, r1, lsr #6 // permute r9 8 times --- + and r1, r10, r4 // --- permute r10 8 times + and r2, r4, r10, ror #8 + orr r2, r2, r1, ror #24 + and r1, r10, r3, lsl #2 + orr r2, r2, r1, ror #26 + and r1, r10, r3, lsl #8 + orr r10, r2, r1, lsr #6 // permute r10 8 times --- + and r1, r11, r4 // --- permute r11 8 times + and r2, r4, r11, ror #8 + orr r2, r2, r1, ror #24 + and r1, r11, r3, lsl #2 + orr r2, r2, r1, ror #26 + and r1, r11, r3, lsl #8 + orr r11, r2, r1, lsr #6 // permute r11 8 times --- + and r1, r12, r4 // --- permute r12 8 times + and r2, r4, r12, ror #8 + orr r2, r2, r1, ror #24 + and r1, r12, r3, lsl #2 + orr r2, r2, r1, ror #26 + and r1, r12, r3, lsl #8 + orr r12, r2, r1, lsr #6 // permute r12 8 times --- + bx lr + +/******************************************************************************* +* Applies P^10 on the tweakey state in a bitsliced manner. +*******************************************************************************/ +.align 2 +p10: + movw r4, #0x0033 + movt r4, #0x3300 //r4 <- 0x33000033 + movw r3, #0xcc33 //r3 <- 0x0000cc33 + and r1, r5, r3, ror #8 // --- permute r5 10 times + and r2, r4, r5, ror #26 + orr r2, r2, r1, ror #8 + and r1, r5, r4, ror #24 + orr r2, r2, r1, ror #22 + and r1, r5, #0x00330000 + orr r2, r2, r1, lsr #14 + and r1, r5, #0x0000cc00 + orr r5, r2, r1, lsr #2 // permute r5 10 times --- + and r1, r6, r3, ror #8 // --- permute r6 10 times + and r2, r4, r6, ror #26 + orr r2, r2, r1, ror #8 + and r1, r6, r4, ror #24 + orr r2, r2, r1, ror #22 + and r1, r6, #0x00330000 + orr r2, r2, r1, lsr #14 + and r1, r6, #0x0000cc00 + orr r6, r2, r1, lsr #2 // permute r6 10 times --- + and r1, r7, r3, ror #8 // --- permute r7 10 times + and r2, r4, r7, ror #26 + orr r2, r2, r1, ror #8 + and r1, r7, r4, ror #24 + orr r2, r2, r1, ror #22 + and r1, r7, #0x00330000 + orr r2, r2, r1, lsr #14 + and r1, r7, #0x0000cc00 + orr r7, r2, r1, lsr #2 // permute r7 10 times --- + and r1, r8, r3, ror #8 // --- permute r8 10 times + and r2, r4, r8, ror #26 + orr r2, r2, r1, ror #8 + and r1, r8, r4, ror #24 + orr r2, r2, r1, ror #22 + and r1, r8, #0x00330000 + orr r2, r2, r1, lsr #14 + and r1, r8, #0x0000cc00 + orr r8, r2, r1, lsr #2 // permute r8 10 times --- + and r1, r9, r3, ror #8 // --- permute r9 10 times + and r2, r4, r9, ror #26 + orr r2, r2, r1, ror #8 + and r1, r9, r4, ror #24 + orr r2, r2, r1, ror #22 + and r1, r9, #0x00330000 + orr r2, r2, r1, lsr #14 + and r1, r9, #0x0000cc00 + orr r9, r2, r1, lsr #2 // permute r9 10 times --- + and r1, r10, r3, ror #8 // --- permute r10 10 times + and r2, r4, r10, ror #26 + orr r2, r2, r1, ror #8 + and r1, r10, r4, ror #24 + orr r2, r2, r1, ror #22 + and r1, r10, #0x00330000 + orr r2, r2, r1, lsr #14 + and r1, r10, #0x0000cc00 + orr r10, r2, r1, lsr #2 // permute r10 10 times --- + and r1, r11, r3, ror #8 // --- permute r11 10 times + and r2, r4, r11, ror #26 + orr r2, r2, r1, ror #8 + and r1, r11, r4, ror #24 + orr r2, r2, r1, ror #22 + and r1, r11, #0x00330000 + orr r2, r2, r1, lsr #14 + and r1, r11, #0x0000cc00 + orr r11, r2, r1, lsr #2 // permute r11 10 times --- + and r1, r12, r3, ror #8 // --- permute r12 10 times + and r2, r4, r12, ror #26 + orr r2, r2, r1, ror #8 + and r1, r12, r4, ror #24 + orr r2, r2, r1, ror #22 + and r1, r12, #0x00330000 + orr r2, r2, r1, lsr #14 + and r1, r12, #0x0000cc00 + orr r12, r2, r1, lsr #2 // permute r12 10 times --- + bx lr + +/******************************************************************************* +* Applies P^12 on the tweakey state in a bitsliced manner. +*******************************************************************************/ +.align 2 +p12: + str.w r14, [sp] //store r14 on the stack + movw r14, #0xcc33 //r14<- 0x0000cc33 + movw r4, #0x00cc + movt r4, #0x00cc //r4 <- 0x00cc00cc + movw r3, #0x3300 + movt r3, #0xcc00 //r3 <- 0xcc003300 + and r1, r14, r5, ror #8 // --- permute r5 12 times + and r2, r4, r5, ror #30 + orr r2, r2, r1 + and r1, r3, r5, ror #16 + orr r2, r2, r1 + movw r1, #0xcccc //r1 <- 0x0000cccc + and r1, r5, r1, ror #8 + orr r5, r2, r1, ror #10 // permute r5 12 times --- + and r1, r14, r6, ror #8 // --- permute r6 12 times + and r2, r4, r6, ror #30 + orr r2, r2, r1 + and r1, r3, r6, ror #16 + orr r2, r2, r1 + movw r1, #0xcccc //r1 <- 0x0000cccc + and r1, r6, r1, ror #8 + orr r6, r2, r1, ror #10 // permute r6 12 times --- + and r1, r14, r7, ror #8 // --- permute r7 12 times + and r2, r4, r7, ror #30 + orr r2, r2, r1 + and r1, r3, r7, ror #16 + orr r2, r2, r1 + movw r1, #0xcccc //r1 <- 0x0000cccc + and r1, r7, r1, ror #8 + orr r7, r2, r1, ror #10 // permute r7 12 times --- + and r1, r14, r8, ror #8 // --- permute r8 12 times + and r2, r4, r8, ror #30 + orr r2, r2, r1 + and r1, r3, r8, ror #16 + orr r2, r2, r1 + movw r1, #0xcccc //r1 <- 0x0000cccc + and r1, r8, r1, ror #8 + orr r8, r2, r1, ror #10 // permute r8 12 times --- + and r1, r14, r9, ror #8 // --- permute r9 12 times + and r2, r4, r9, ror #30 + orr r2, r2, r1 + and r1, r3, r9, ror #16 + orr r2, r2, r1 + movw r1, #0xcccc //r1 <- 0x0000cccc + and r1, r9, r1, ror #8 + orr r9, r2, r1, ror #10 // permute r9 12 times --- + and r1, r14, r10, ror #8 // --- permute r10 12 times + and r2, r4, r10, ror #30 + orr r2, r2, r1 + and r1, r3, r10, ror #16 + orr r2, r2, r1 + movw r1, #0xcccc //r1 <- 0x0000cccc + and r1, r10, r1, ror #8 + orr r10, r2, r1, ror #10 // permute r10 12 times --- + and r1, r14, r11, ror #8 // --- permute r11 12 times + and r2, r4, r11, ror #30 + orr r2, r2, r1 + and r1, r3, r11, ror #16 + orr r2, r2, r1 + movw r1, #0xcccc //r1 <- 0x0000cccc + and r1, r11, r1, ror #8 + orr r11, r2, r1, ror #10 // permute r11 12 times --- + and r1, r14, r12, ror #8 // --- permute r12 12 times + and r2, r4, r12, ror #30 + orr r2, r2, r1 + and r1, r3, r12, ror #16 + ldr.w r14, [sp] + orr r2, r2, r1 + movw r1, #0xcccc //r1 <- 0x0000cccc + and r1, r12, r1, ror #8 + orr r12, r2, r1, ror #10 // permute r12 12 times --- + bx lr + +/******************************************************************************* +* Applies P^14 on the tweakey state in a bitsliced manner. +*******************************************************************************/ +.align 2 +p14: + movw r3, #0xcc00 + movt r3, #0x0033 //r3 <- 0x0033cc00 + movw r4, #0xcc00 + movt r4, #0xcc00 //r4 <- 0x33003300 + and r1, r3, r5, ror #24 // --- permute r5 14 times + and r2, r5, #0x00000033 + orr r2, r1, r2, ror #14 + and r1, r5, #0x33000000 + orr r2, r2, r1, ror #30 + and r1, r5, #0x00ff0000 + orr r2, r2, r1, ror #16 + and r1, r5, r4 + orr r5, r2, r1, ror #18 // permute r5 14 times --- + and r1, r3, r6, ror #24 // --- permute r6 14 times + and r2, r6, #0x00000033 + orr r2, r1, r2, ror #14 + and r1, r6, #0x33000000 + orr r2, r2, r1, ror #30 + and r1, r6, #0x00ff0000 + orr r2, r2, r1, ror #16 + and r1, r6, r4 + orr r6, r2, r1, ror #18 // permute r6 14 times --- + and r1, r3, r7, ror #24 // --- permute r7 14 times + and r2, r7, #0x00000033 + orr r2, r1, r2, ror #14 + and r1, r7, #0x33000000 + orr r2, r2, r1, ror #30 + and r1, r7, #0x00ff0000 + orr r2, r2, r1, ror #16 + and r1, r7, r4 + orr r7, r2, r1, ror #18 // permute r7 14 times --- + and r1, r3, r8, ror #24 // --- permute r8 14 times + and r2, r8, #0x00000033 + orr r2, r1, r2, ror #14 + and r1, r8, #0x33000000 + orr r2, r2, r1, ror #30 + and r1, r8, #0x00ff0000 + orr r2, r2, r1, ror #16 + and r1, r8, r4 + orr r8, r2, r1, ror #18 // permute r8 14 times --- + and r1, r3, r9, ror #24 // --- permute r9 14 times + and r2, r9, #0x00000033 + orr r2, r1, r2, ror #14 + and r1, r9, #0x33000000 + orr r2, r2, r1, ror #30 + and r1, r9, #0x00ff0000 + orr r2, r2, r1, ror #16 + and r1, r9, r4 + orr r9, r2, r1, ror #18 // permute r9 14 times --- + and r1, r3, r10, ror #24 // --- permute r10 14 times + and r2, r10, #0x00000033 + orr r2, r1, r2, ror #14 + and r1, r10, #0x33000000 + orr r2, r2, r1, ror #30 + and r1, r10, #0x00ff0000 + orr r2, r2, r1, ror #16 + and r1, r10, r4 + orr r10, r2, r1, ror #18 // permute r10 14 times --- + and r1, r3, r11, ror #24 // --- permute r11 14 times + and r2, r11, #0x00000033 + orr r2, r1, r2, ror #14 + and r1, r11, #0x33000000 + orr r2, r2, r1, ror #30 + and r1, r11, #0x00ff0000 + orr r2, r2, r1, ror #16 + and r1, r11, r4 + orr r11, r2, r1, ror #18 // permute r11 14 times --- + and r1, r3, r12, ror #24 // --- permute r12 14 times + and r2, r12, #0x00000033 + orr r2, r1, r2, ror #14 + and r1, r12, #0x33000000 + orr r2, r2, r1, ror #30 + and r1, r12, #0x00ff0000 + orr r2, r2, r1, ror #16 + and r1, r12, r4 + orr r12, r2, r1, ror #18 // permute r12 14 times --- + bx lr + +/******************************************************************************* +* Packs the input byte array into the fixsliced representation. +*******************************************************************************/ +.align 2 +packing: + eor r4, r5, r6, lsr #1 + and r4, r4, r2 + eor r5, r5, r4 + eor r6, r6, r4, lsl #1 //SWAPMOVE(r6, r5, 0x55555555, 1) + eor r4, r7, r8, lsr #1 + and r4, r4, r2 + eor r7, r7, r4 + eor r8, r8, r4, lsl #1 //SWAPMOVE(r8, r7, 0x55555555, 1) + eor r4, r9, r10, lsr #1 + and r4, r4, r2 + eor r9, r9, r4 + eor r10, r10, r4, lsl #1 //SWAPMOVE(r10, r9, 0x55555555, 1) + eor r4, r11, r12, lsr #1 + and r4, r4, r2 + eor r11, r11, r4 + eor r12, r12, r4, lsl #1 //SWAPMOVE(r12, r11, 0x55555555, 1) + eor r4, r5, r7, lsr #2 + and r4, r4, r3 + eor r5, r5, r4 + eor r7, r7, r4, lsl #2 //SWAPMOVE(r7, r5, 0x30303030, 2) + eor r4, r5, r9, lsr #4 + and r4, r4, r3, lsr #2 + eor r5, r5, r4 + eor r9, r9, r4, lsl #4 //SWAPMOVE(r9, r5, 0x0c0c0c0c, 4) + eor r4, r5, r11, lsr #6 + and r4, r4, r3, lsr #4 + eor r5, r5, r4 + eor r11, r11, r4, lsl #6 //SWAPMOVE(r11, r5, 0x03030303, 6) + eor r4, r6, r8, lsr #2 + and r4, r4, r3 + eor r6, r6, r4 + eor r8, r8, r4, lsl #2 //SWAPMOVE(r8, r6, 0x30303030, 2) + eor r4, r6, r10, lsr #4 + and r4, r4, r3, lsr #2 + eor r6, r6, r4 + eor r10, r10, r4, lsl #4 //SWAPMOVE(r10, r6, 0x0c0c0c0c, 4) + eor r4, r6, r12, lsr #6 + and r4, r4, r3, lsr #4 + eor r6, r6, r4 + eor r12, r12, r4, lsl #6 //SWAPMOVE(r12, r6, 0x03030303, 6) + eor r4, r7, r9, lsr #2 + and r4, r4, r3, lsr #2 + eor r7, r7, r4 + eor r9, r9, r4, lsl #2 //SWAPMOVE(r9, r7, 0x0c0c0c0c, 2) + eor r4, r7, r11, lsr #4 + and r4, r4, r3, lsr #4 + eor r7, r7, r4 + eor r11, r11, r4, lsl #4 //SWAPMOVE(r11, r7, 0x03030303, 4) + eor r4, r8, r10, lsr #2 + and r4, r4, r3, lsr #2 + eor r8, r8, r4 + eor r10, r10, r4, lsl #2 //SWAPMOVE(r10, r8, 0x0c0c0c0c, 2) + eor r4, r8, r12, lsr #4 + and r4, r4, r3, lsr #4 + eor r8, r8, r4 + eor r12, r12, r4, lsl #4 //SWAPMOVE(r12, r8, 0x03030303, 4) + eor r4, r9, r11, lsr #2 + and r4, r4, r3, lsr #4 + eor r9, r9, r4 + eor r11, r11, r4, lsl #2 //SWAPMOVE(r11, r9, 0x03030303, 2) + eor r4, r10, r12, lsr #2 + and r4, r4, r3, lsr #4 + eor r10, r10, r4 + eor r12, r12, r4, lsl #2 //SWAPMOVE(r12, r10, 0x03030303, 2) + bx lr + +/******************************************************************************* +* Unpacks the internal state in fixsliced representation into a byte array. +*******************************************************************************/ +.align 2 +unpacking: + movw r2, #0x5555 + movt r2, #0x5555 //r2 <- 0x55555555 + movw r3, #0x3030 + movt r3, #0x3030 //r3 <- 0x30303030 + eor r4, r9, r11, lsr #2 + and r4, r4, r3, lsr #4 + eor r9, r9, r4 + eor r11, r11, r4, lsl #2 //SWAPMOVE(r11, r9, 0x03030303, 2) + eor r4, r10, r12, lsr #2 + and r4, r4, r3, lsr #4 + eor r10, r10, r4 + eor r12, r12, r4, lsl #2 //SWAPMOVE(r12, r10, 0x03030303, 2) + eor r4, r8, r10, lsr #2 + and r4, r4, r3, lsr #2 + eor r8, r8, r4 + eor r10, r10, r4, lsl #2 //SWAPMOVE(r10, r8, 0x0c0c0c0c, 2) + eor r4, r8, r12, lsr #4 + and r4, r4, r3, lsr #4 + eor r8, r8, r4 + eor r12, r12, r4, lsl #4 //SWAPMOVE(r12, r8, 0x03030303, 4) + eor r4, r7, r9, lsr #2 + and r4, r4, r3, lsr #2 + eor r7, r7, r4 + eor r9, r9, r4, lsl #2 //SWAPMOVE(r9, r7, 0x0c0c0c0c, 2) + eor r4, r7, r11, lsr #4 + and r4, r4, r3, lsr #4 + eor r7, r7, r4 + eor r11, r11, r4, lsl #4 //SWAPMOVE(r11, r7, 0x03030303, 4) + eor r4, r6, r12, lsr #6 + and r4, r4, r3, lsr #4 + eor r6, r6, r4 + eor r12, r12, r4, lsl #6 //SWAPMOVE(r12, r6, 0x03030303, 6) + eor r4, r6, r10, lsr #4 + and r4, r4, r3, lsr #2 + eor r6, r6, r4 + eor r10, r10, r4, lsl #4 //SWAPMOVE(r10, r6, 0x0c0c0c0c, 4) + eor r4, r6, r8, lsr #2 + and r4, r4, r3 + eor r6, r6, r4 + eor r8, r8, r4, lsl #2 //SWAPMOVE(r8, r6, 0x30303030, 2) + eor r4, r5, r11, lsr #6 + and r4, r4, r3, lsr #4 + eor r5, r5, r4 + eor r11, r11, r4, lsl #6 //SWAPMOVE(r11, r5, 0x03030303, 6) + eor r4, r5, r9, lsr #4 + and r4, r4, r3, lsr #2 + eor r5, r5, r4 + eor r9, r9, r4, lsl #4 //SWAPMOVE(r9, r5, 0x0c0c0c0c, 4) + eor r4, r5, r7, lsr #2 + and r4, r4, r3 + eor r5, r5, r4 + eor r7, r7, r4, lsl #2 //SWAPMOVE(r7, r5, 0x30303030, 2) + eor r4, r5, r6, lsr #1 + and r4, r4, r2 + eor r5, r5, r4 + eor r6, r6, r4, lsl #1 //SWAPMOVE(r6, r5, 0x55555555, 1) + eor r4, r7, r8, lsr #1 + and r4, r4, r2 + eor r7, r7, r4 + eor r8, r8, r4, lsl #1 //SWAPMOVE(r8, r7, 0x55555555, 1) + eor r4, r9, r10, lsr #1 + and r4, r4, r2 + eor r9, r9, r4 + eor r10, r10, r4, lsl #1 //SWAPMOVE(r10, r9, 0x55555555, 1) + eor r4, r11, r12, lsr #1 + and r4, r4, r2 + eor r11, r11, r4 + eor r12, r12, r4, lsl #1 //SWAPMOVE(r12, r11, 0x55555555, 1) + bx lr + + + +/****************************************************************************** +* Compute TK = LFSR2(TK2) for all rounds. +******************************************************************************/ +@ void tkschedule_lfsr_2(u32* rtk, const u8* tk2, const u8* tk2_bis, const int rounds) +.global tkschedule_lfsr_2 +.type tkschedule_lfsr_2,%function +.align 2 +tkschedule_lfsr_2: + push {r0-r12, r14} + ldm r1, {r5,r7,r9,r11} // load the 1st block in r5,r7,r9,r11 + ldm r2, {r6,r8,r10,r12} // load the 2nd block in r6,r8,r10,r12 + mov.w r1, r3 //load loop counter in r1 + movw r2, #0x5555 + movt r2, #0x5555 //r2 <- 0x55555555 + movw r3, #0x3030 + movt r3, #0x3030 //r3 <- 0x30303030 + bl packing + stmia r0!, {r5-r12} + loop_2: + eor r5, r5, r7 // apply LFSR2 to tk2 + stmia r0!, {r6-r12} + str.w r5, [r0], #36 + subs r1, r1, #2 // decrease loop counter by 2 + beq exit_lfsr // r1 = 0 => we are done + eor r6, r6, r8 // apply LFSR2 to tk2 + stmia r0!, {r7-r12} + strd r5, r6, [r0], #40 + subs r1, r1, #2 // decrease loop counter by 2 + beq exit_lfsr // r1 = 0 => we are done + eor r7, r7, r9 // apply LFSR2 to tk2 + stmia r0!, {r8-r12} + stmia r0!, {r5-r7} + add r0, r0, #32 // same round tweakey every 2 rounds + subs r1, r1, #2 // decrease loop counter by 2 + beq exit_lfsr // r1 = 0 => we are done + eor r8, r8, r10 // apply LFSR2 to tk2 + stmia r0!, {r9-r12} + stmia r0!, {r5-r8} + add r0, r0, #32 // same round tweakey every 2 rounds + subs r1, r1, #2 // decrease loop counter by 2 + beq exit_lfsr // r1 = 0 => we are done + eor r9, r9, r11 // apply LFSR2 to tk2 + stmia r0!, {r10-r12} + stmia r0!, {r5-r9} + add r0, r0, #32 // same round tweakey every 2 rounds + subs r1, r1, #2 // decrease loop counter by 2 + beq exit_lfsr // r1 = 0 => we are done + eor r10, r10, r12 // apply LFSR2 to tk2 + strd r11, r12, [r0], #8 + stmia r0!, {r5-r10} + add r0, r0, #32 // same round tweakey every 2 rounds + subs r1, r1, #2 // decrease loop counter by 2 + beq exit_lfsr // r1 = 0 => we are done + eor r11, r11, r5 // apply LFSR2 to tk2 + str.w r12, [r0], #4 + stmia r0!, {r5-r11} + add r0, r0, #32 // same round tweakey every 2 rounds + subs r1, r1, #2 // decrease loop counter by 2 + beq exit_lfsr // r1 = 0 => we are done + eor r12, r12, r6 // apply LFSR2 to tk2 + stmia r0!, {r5-r12} + add r0, r0, #32 // same round tweakey every 2 rounds + subs r1, r1, #2 // decrease loop counter by 2 + bne loop_2 // if not 0 then we run the loop again + exit_lfsr: + pop {r0-r12, r14} + bx lr + + +/****************************************************************************** +* Compute TK ^= LFSR3(TK3) for all rounds. +******************************************************************************/ +@ void tkschedule_lfsr_3(u32* rtk, const u8* tk2, const u8* tk2_bis, +@ const int rounds) +.global tkschedule_lfsr_3 +.type tkschedule_lfsr_3,%function +.align 2 +tkschedule_lfsr_3: + push {r0-r12, r14} + ldm r1, {r5,r7,r9,r11} // load the 1st block in r5,r7,r9,r11 + ldm r2, {r6,r8,r10,r12} // load the 2nd block in r6,r8,r10,r12 + mov.w r1, r3 //load loop counter in r1 + movw r2, #0x5555 + movt r2, #0x5555 //r2 <- 0x55555555 + movw r3, #0x3030 + movt r3, #0x3030 //r3 <- 0x30303030 + bl packing + ldm r0, {r2-r4,r14} // load rtk (computed by tkschedule_lfsr_2) + eor r2, r2, r5 // rtk <- tk2 ^ tk3 + eor r3, r3, r6 // rtk <- tk2 ^ tk3 + eor r4, r4, r7 // rtk <- tk2 ^ tk3 + eor r14, r14, r8 // rtk <- tk2 ^ tk3 + stmia r0!, {r2-r4,r14} // store rtk after adding tk3 + ldm r0, {r2-r4,r14} // load rtk (computed by tkschedule_lfsr_2) + eor r2, r2, r9 // rtk <- tk2 ^ tk3 + eor r3, r3, r10 // rtk <- tk2 ^ tk3 + eor r4, r4, r11 // rtk <- tk2 ^ tk3 + eor r14, r14, r12 // rtk <- tk2 ^ tk3 + stmia r0!, {r2-r4,r14} // store rtk after adding tk3 + loop_3: + eor r12, r12, r6 // apply LFSR3 to tk3 + ldm r0, {r2-r4,r14} // load rtk (computed by tkschedule_lfsr_2) + eor r2, r2, r12 // rtk <- tk2 ^ tk3 + eor r3, r3, r5 // rtk <- tk2 ^ tk3 + eor r4, r4, r6 // rtk <- tk2 ^ tk3 + eor r14, r14, r7 // rtk <- tk2 ^ tk3 + stmia r0!, {r2-r4,r14} // store rtk after adding tk3 + ldm r0, {r2-r4,r14} // load rtk (computed by tkschedule_lfsr_2) + eor r2, r2, r8 // rtk <- tk2 ^ tk3 + eor r3, r3, r9 // rtk <- tk2 ^ tk3 + eor r4, r4, r10 // rtk <- tk2 ^ tk3 + eor r14, r14, r11 // rtk <- tk2 ^ tk3 + stmia r0!, {r2-r4,r14} // store rtk after adding tk3 + add r0, r0, #32 // same round tweakey every 2 rounds + subs r1, r1, #2 // decrease loop counter by 2 + beq exit_lfsr // if 0 then we are done + eor r11, r11, r5 // apply LFSR3 to tk3 + ldm r0, {r2-r4,r14} // load rtk (computed by tkschedule_lfsr_2) + eor r2, r2, r11 // rtk <- tk2 ^ tk3 + eor r3, r3, r12 // rtk <- tk2 ^ tk3 + eor r4, r4, r5 // rtk <- tk2 ^ tk3 + eor r14, r14, r6 // rtk <- tk2 ^ tk3 + stmia r0!, {r2-r4,r14} // store rtk after adding tk3 + ldm r0, {r2-r4,r14} // load rtk (computed by tkschedule_lfsr_2) + eor r2, r2, r7 // rtk <- tk2 ^ tk3 + eor r3, r3, r8 // rtk <- tk2 ^ tk3 + eor r4, r4, r9 // rtk <- tk2 ^ tk3 + eor r14, r14, r10 // rtk <- tk2 ^ tk3 + stmia r0!, {r2-r4,r14} // store rtk after adding tk3 + add r0, r0, #32 // same round tweakey every 2 rounds + subs r1, r1, #2 // decrease loop counter by 2 + beq exit_lfsr // if 0 then we are done + eor r10, r10, r12 // apply LFSR3 to tk3 + ldm r0, {r2-r4,r14} // load rtk (computed by tkschedule_lfsr_2) + eor r2, r2, r10 // rtk <- tk2 ^ tk3 + eor r3, r3, r11 // rtk <- tk2 ^ tk3 + eor r4, r4, r12 // rtk <- tk2 ^ tk3 + eor r14, r14, r5 // rtk <- tk2 ^ tk3 + stmia r0!, {r2-r4,r14} // store rtk after adding tk3 + ldm r0, {r2-r4,r14} // load rtk (computed by tkschedule_lfsr_2) + eor r2, r2, r6 // rtk <- tk2 ^ tk3 + eor r3, r3, r7 // rtk <- tk2 ^ tk3 + eor r4, r4, r8 // rtk <- tk2 ^ tk3 + eor r14, r14, r9 // rtk <- tk2 ^ tk3 + stmia r0!, {r2-r4,r14} // store rtk after adding tk3 + add r0, r0, #32 // same round tweakey every 2 rounds + subs r1, r1, #2 // decrease loop counter by 2 + beq exit_lfsr // if 0 then we are done + eor r9, r9, r11 // apply LFSR3 to tk3 + ldm r0, {r2-r4,r14} // load rtk (computed by tkschedule_lfsr_2) + eor r2, r2, r9 // rtk <- tk2 ^ tk3 + eor r3, r3, r10 // rtk <- tk2 ^ tk3 + eor r4, r4, r11 // rtk <- tk2 ^ tk3 + eor r14, r14, r12 // rtk <- tk2 ^ tk3 + stmia r0!, {r2-r4,r14} // store rtk after adding tk3 + ldm r0, {r2-r4,r14} // load rtk (computed by tkschedule_lfsr_2) + eor r2, r2, r5 // rtk <- tk2 ^ tk3 + eor r3, r3, r6 // rtk <- tk2 ^ tk3 + eor r4, r4, r7 // rtk <- tk2 ^ tk3 + eor r14, r14, r8 // rtk <- tk2 ^ tk3 + stmia r0!, {r2-r4,r14} // store rtk after adding tk3 + add r0, r0, #32 // same round tweakey every 2 rounds + subs r1, r1, #2 // decrease loop counter by 2 + beq exit_lfsr // if 0 then we are done + eor r8, r8, r10 // apply LFSR3 to tk3 + ldm r0, {r2-r4,r14} // load rtk (computed by tkschedule_lfsr_2) + eor r2, r2, r8 // rtk <- tk2 ^ tk3 + eor r3, r3, r9 // rtk <- tk2 ^ tk3 + eor r4, r4, r10 // rtk <- tk2 ^ tk3 + eor r14, r14, r11 // rtk <- tk2 ^ tk3 + stmia r0!, {r2-r4,r14} // store rtk after adding tk3 + ldm r0, {r2-r4,r14} // load rtk (computed by tkschedule_lfsr_2) + eor r2, r2, r12 // rtk <- tk2 ^ tk3 + eor r3, r3, r5 // rtk <- tk2 ^ tk3 + eor r4, r4, r6 // rtk <- tk2 ^ tk3 + eor r14, r14, r7 // rtk <- tk2 ^ tk3 + stmia r0!, {r2-r4,r14} // store rtk after adding tk3 + add r0, r0, #32 // same round tweakey every 2 rounds + subs r1, r1, #2 // decrease loop counter by 2 + beq exit_lfsr // if 0 then we are done + eor r7, r7, r9 // apply LFSR3 to tk3 + ldm r0, {r2-r4,r14} // load rtk (computed by tkschedule_lfsr_2) + eor r2, r2, r7 // rtk <- tk2 ^ tk3 + eor r3, r3, r8 // rtk <- tk2 ^ tk3 + eor r4, r4, r9 // rtk <- tk2 ^ tk3 + eor r14, r14, r10 // rtk <- tk2 ^ tk3 + stmia r0!, {r2-r4,r14} // store rtk after adding tk3 + ldm r0, {r2-r4,r14} // load rtk (computed by tkschedule_lfsr_2) + eor r2, r2, r11 // rtk <- tk2 ^ tk3 + eor r3, r3, r12 // rtk <- tk2 ^ tk3 + eor r4, r4, r5 // rtk <- tk2 ^ tk3 + eor r14, r14, r6 // rtk <- tk2 ^ tk3 + stmia r0!, {r2-r4,r14} // store rtk after adding tk3 + add r0, r0, #32 // same round tweakey every 2 rounds + subs r1, r1, #2 // decrease loop counter by 2 + beq exit_lfsr // if 0 then we are done + eor r6, r6, r8 // apply LFSR3 to tk3 + ldm r0, {r2-r4,r14} // load rtk (computed by tkschedule_lfsr_2) + eor r2, r2, r6 // rtk <- tk2 ^ tk3 + eor r3, r3, r7 // rtk <- tk2 ^ tk3 + eor r4, r4, r8 // rtk <- tk2 ^ tk3 + eor r14, r14, r9 // rtk <- tk2 ^ tk3 + stmia r0!, {r2-r4,r14} // store rtk after adding tk3 + ldm r0, {r2-r4,r14} // load rtk (computed by tkschedule_lfsr_2) + eor r2, r2, r10 // rtk <- tk2 ^ tk3 + eor r3, r3, r11 // rtk <- tk2 ^ tk3 + eor r4, r4, r12 // rtk <- tk2 ^ tk3 + eor r14, r14, r5 // rtk <- tk2 ^ tk3 + stmia r0!, {r2-r4,r14} // store rtk after adding tk3 + add r0, r0, #32 // same round tweakey every 2 rounds + subs r1, r1, #2 // decrease loop counter by 2 + beq exit_lfsr // if 0 then we are done + eor r5, r5, r7 // apply LFSR3 to tk3 + ldm r0, {r2-r4,r14} // load rtk (computed by tkschedule_lfsr_2) + eor r2, r2, r5 // rtk <- tk2 ^ tk3 + eor r3, r3, r6 // rtk <- tk2 ^ tk3 + eor r4, r4, r7 // rtk <- tk2 ^ tk3 + eor r14, r14, r8 // rtk <- tk2 ^ tk3 + stmia r0!, {r2-r4,r14} // store rtk after adding tk3 + ldm r0, {r2-r4,r14} // load rtk (computed by tkschedule_lfsr_2) + eor r2, r2, r9 // rtk <- tk2 ^ tk3 + eor r3, r3, r10 // rtk <- tk2 ^ tk3 + eor r4, r4, r11 // rtk <- tk2 ^ tk3 + eor r14, r14, r12 // rtk <- tk2 ^ tk3 + stmia r0!, {r2-r4,r14} // store rtk after adding tk3 + add r0, r0, #32 // same round tweakey every 2 rounds + subs r1, r1, #2 // decrease loop counter by 8 + bne loop_3 + pop {r0-r12, r14} + bx lr + +/****************************************************************************** +* Compute TK = rearrange(perm(TK ^ TK1)) for all rounds. +* The function 'rearrange' aims at reording bits for all round tweakeys to +* match the fixsliced implementation of the SKINNY block cipher. +******************************************************************************/ +@ void tkschedule_perm(u32* rtk) +.global tkschedule_perm +.type tkschedule_perm,%function +.align 2 +tkschedule_perm: + push {r0-r12, r14} + sub.w sp, #4 // to store 'lr' during subroutines + movw r4, #0xf0f0 + movt r4, #0xf0f0 + ldm r0, {r5-r12} // load rtk = tk1 ^ lfsr2(tk2) ^ lfsr3(tk3) + and r5, r5, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r6, r6, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r7, r7, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r8, r8, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r9, r9, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r10, r10, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r11, r11, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r12, r12, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + eor r11, r11, #0x0000000c // add rconst + mvn r11, r11 // to save 1 NOT in Sbox calculations + mvn r10, r10 // to save 1 NOT in Sbox calculations + mvn r6, r6 // to save 1 NOT in Sbox calculations + mvn r8, r8 // to save 1 NOT in Sbox calculations + eor r12, r12, #0x000000c0 // add rconst + mvn r9, r9 // to save 1 NOT in Sbox calculations + mvn r7, r7 // to save 1 NOT in Sbox calculations + strd r11, r10, [r0], #8 + strd r5, r6, [r0], #8 + strd r8, r12, [r0], #8 + strd r9, r7, [r0], #8 + ldm r0, {r5-r12} // load rtk = tk1 ^ lfsr2(tk2) ^ lfsr3(tk3) + bl p2 // apply the permutation twice + movw r4, #0xc3c3 + movt r4, #0xc3c3 // r4 <- 0xc3c3c3c3 + and r1, r4, r9, ror #26 + and r2, r4, r12, ror #26 + and r3, r4, r11, ror #26 + mvn r1, r1 + eor r2, r2, #0x00000300 + eor r3, r3, #0x00000300 + eor r3, r3, #0x30000000 + mvn r3, r3 + stmia.w r0!, {r1-r3} + and r1, r4, r10, ror #26 + and r2, r4, r6, ror #26 + and r3, r4, r7, ror #26 + mvn r1, r1 + mvn r2, r2 + mvn r3, r3 + stmia.w r0!, {r1-r3} + and r1, r4, r8, ror #26 + and r2, r4, r5, ror #26 + mvn r1, r1 + stmia.w r0!, {r1-r2} + and r4, r4, r4, lsr #6 // r4 <- 0x03030303 + and r1, r4, r5, ror #28 // --- ror and masks to match fixslicing + and r5, r5, r4, lsl #6 + orr r5, r1, r5, ror #12 + and r1, r4, r6, ror #28 + and r6, r6, r4, lsl #6 + orr r6, r1, r6, ror #12 + and r1, r4, r7, ror #28 + and r7, r7, r4, lsl #6 + orr r7, r1, r7, ror #12 + and r1, r4, r8, ror #28 + and r8, r8, r4, lsl #6 + orr r8, r1, r8, ror #12 + and r1, r4, r9, ror #28 + and r9, r9, r4, lsl #6 + orr r9, r1, r9, ror #12 + and r1, r4, r10, ror #28 + and r10, r10, r4, lsl #6 + orr r10, r1, r10, ror #12 + and r1, r4, r11, ror #28 + and r11, r11, r4, lsl #6 + orr r11, r1, r11, ror #12 + and r1, r4, r12, ror #28 + and r12, r12, r4, lsl #6 + orr r12, r1, r12, ror #12 // ror and masks to match fixslicing --- + mvn r8, r8 // to save 1 NOT in Sbox calculations + mvn r7, r7 // to save 1 NOT in Sbox calculations + mvn r9, r9 // to save 1 NOT in Sbox calculations + eor r12, r12, #0x0c000000 // add rconst + str.w r8, [r0], #4 + stmia r0!, {r7,r9,r12} + eor r10, r10, #0x0c000000 // add rconst + mvn r10, r10 // to save 1 NOT in Sbox calculations + str.w r10, [r0], #4 + mvn r6, r6 // to save 1 NOT in Sbox calculations + eor r11, r11, #0xcc000000 // add rconst + mvn r11, r11 // to save 1 NOT in Sbox calculations + stmia r0!, {r5,r6,r11} + ldm r0, {r5-r12} // load rtk = tk1 ^ lfsr2(tk2) ^ lfsr3(tk3) + bl p4 // apply the permutation 4 times + movw r4, #0x3030 + movt r4, #0x3030 // r4 <- 0x30303030 + and r1, r4, r5, ror #14 // --- ror and masks to match fixslicing + and r2, r5, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r6, ror #14 + and r3, r6, r4, ror #4 + orr r3, r1, r3, ror #6 + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r3, r2, [r0], #8 + and r1, r4, r7, ror #14 + and r2, r7, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r8, ror #14 + and r3, r8, r4, ror #4 + orr r3, r1, r3, ror #6 + mvn r2, r2 // to save 1 NOT in Sbox calculations + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r3, r2, [r0], #8 + and r1, r4, r11, ror #14 + and r2, r11, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r12, ror #14 + and r3, r12, r4, ror #4 + orr r3, r1, r3, ror #6 + eor r2, r2, #0x00300000 // add rconst + eor r2, r2, #0x00000003 // add rconst + mvn r2, r2 // to save 1 NOT in Sbox calculations + eor r3, r3, #0x00300000 // add rconst + strd r3, r2, [r0], #8 + and r1, r4, r9, ror #14 + and r2, r9, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r10, ror #14 + and r3, r10, r4, ror #4 + orr r3, r1, r3, ror #6 + eor r2, r2, #0x00300000 // add rconst + mvn r2, r2 // to save 1 NOT in Sbox calculations + eor r3, r3, #0x00300000 // add rconst + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r3, r2, [r0], #8 + orr r4, r4, r4, lsl #2 // r4 <- 0xf0f0f0f0 + and r5, r4, r5, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r6, r4, r6, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r7, r4, r7, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r8, r4, r8, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r9, r4, r9, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r10, r4, r10, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r11, r4, r11, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r12, r4, r12, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + eor r11, r11, #0x00cc0000 // add rconst + mvn r11, r11 // to save 1 NOT in Sbox calculations + eor r10, r10, #0x00c00000 // add rconst + mvn r10, r10 // to save 1 NOT in Sbox calculations + mvn r6, r6 // to save 1 NOT in Sbox calculations + mvn r8, r8 // to save 1 NOT in Sbox calculations + eor r12, r12, #0x00f00000 // add rconst + eor r9, r9, #0x00c00000 // add rconst + mvn r9, r9 // to save 1 NOT in Sbox calculations + mvn r7, r7 + strd r11, r10, [r0], #8 + strd r5, r6, [r0], #8 + strd r8, r12, [r0], #8 + strd r9, r7, [r0], #8 + ldm r0, {r5-r12} // load rtk = tk1 ^ lfsr2(tk2) ^ lfsr3(tk3) + bl p6 + movw r4, #0xc3c3 + movt r4, #0xc3c3 // r4 <- 0xc3c3c3c3 + and r1, r4, r9, ror #10 // ror and mask to match fixslicing + and r2, r4, r12, ror #10 // ror and mask to match fixslicing + and r3, r4, r11, ror #10 // ror and mask to match fixslicing + eor r1, r1, #0x03000000 // add rconst + mvn r1, r1 // to save 1 NOT in Sbox calculations + eor r2, r2, #0x00c00000 // add rconst + eor r3, r3, #0x03c00000 // add rconst + eor r3, r3, #0x00003000 // add rconst + mvn r3, r3 // to save 1 NOT in Sbox calculations + stmia.w r0!, {r1-r3} + and r1, r4, r10, ror #10 // ror and mask to match fixslicing + and r2, r4, r6, ror #10 // ror and mask to match fixslicing + and r3, r4, r7, ror #10 // ror and mask to match fixslicing + eor r1, r1, #0x03000000 // add rconst + mvn r1, r1 // to save 1 NOT in Sbox calculations + mvn r2, r2 // to save 1 NOT in Sbox calculations + mvn r3, r3 // to save 1 NOT in Sbox calculations + stmia.w r0!, {r1-r3} + and r1, r4, r8, ror #10 // ror and mask to match fixslicing + and r2, r4, r5, ror #10 // ror and mask to match fixslicing + mvn r1, r1 // to save 1 NOT in Sbox calculations + strd r1, r2, [r0], #8 + and r4, r4, r4, lsr #6 // r4 <- 0x03030303 + and r1, r4, r5, ror #12 //--- ror and masks to match fixslicing + and r5, r5, r4, lsl #6 + orr r5, r1, r5, ror #28 + and r1, r4, r6, ror #12 + and r6, r6, r4, lsl #6 + orr r6, r1, r6, ror #28 + and r1, r4, r7, ror #12 + and r7, r7, r4, lsl #6 + orr r7, r1, r7, ror #28 + and r1, r4, r8, ror #12 + and r8, r8, r4, lsl #6 + orr r8, r1, r8, ror #28 + and r1, r4, r9, ror #12 + and r9, r9, r4, lsl #6 + orr r9, r1, r9, ror #28 + and r1, r4, r10, ror #12 + and r10, r10, r4, lsl #6 + orr r10, r1, r10, ror #28 + and r1, r4, r11, ror #12 + and r11, r11, r4, lsl #6 + orr r11, r1, r11, ror #28 + and r1, r4, r12, ror #12 + and r12, r12, r4, lsl #6 + orr r12, r1, r12, ror #28 //ror and masks to match fixslicing --- + mvn r7, r7 // to save 1 NOT in Sbox calculations + mvn r8, r8 // to save 1 NOT in Sbox calculations + strd r8, r7, [r0], #8 + eor r9, r9, #0x00000c00 // add rconst + mvn r9, r9 // to save 1 NOT in Sbox calculations + eor r12, r12, #0x00000c00 // add rconst + eor r12, r12, #0x03000000 // add rconst + strd r9, r12, [r0], #8 + eor r10, r10, #0x00000c00 // add rconst + mvn r10, r10 // to save 1 NOT in Sbox calculations + strd r10, r5, [r0], #8 + mvn r6, r6 // to save 1 NOT in Sbox calculations + eor r11, r11, #0x0000c000 // add rconst + eor r11, r11, #0x03000000 // add rconst + mvn r11, r11 // to save 1 NOT in Sbox calculations + strd r6, r11, [r0], #8 + ldm r0, {r5-r12} // load rtk = tk1 ^ lfsr2(tk2) ^ lfsr3(tk3) + bl p8 + movw r4, #0x3030 + movt r4, #0x3030 // r4 <- 0x30303030 + and r1, r4, r6, ror #30 + and r2, r6, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r5, ror #30 + and r2, r5, r4, ror #4 + orr r3, r3, r2, ror #22 + mvn r1, r1 // to save 1 NOT in Sbox calculations + strd r1, r3, [r0], #8 + and r1, r4, r8, ror #30 + and r2, r8, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r7, ror #30 + and r2, r7, r4, ror #4 + orr r3, r3, r2, ror #22 + mvn r1, r1 // to save 1 NOT in Sbox calculations + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r1, r3, [r0], #8 + and r1, r4, r12, ror #30 + and r2, r12, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r11, ror #30 + and r2, r11, r4, ror #4 + orr r3, r3, r2, ror #22 + eor r1, r1, #0x00000c30 // add rconst + eor r3, r3, #0x00000c30 // add rconst + eor r3, r3, #0x00030000 // add rconst + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r1, r3, [r0], #8 + and r1, r4, r10, ror #30 + and r2, r10, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r9, ror #30 + and r2, r9, r4, ror #4 + orr r3, r3, r2, ror #22 + mvn r1, r1 // to save 1 NOT in Sbox calculations + eor r3, r3, #0x00000030 // add rconst + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r1, r3, [r0], #8 + orr r4, r4, r4, lsl #2 // r4 <- 0xf0f0f0f0 + and r5, r5, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r6, r6, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r7, r7, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r8, r8, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r9, r9, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r10, r10, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r11, r11, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r12, r12, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + eor r11, r11, #0x000000fc // add rconst + mvn r11, r11 // to save 1 NOT in Sbox calculations + eor r10, r10, #0x000000c0 // add rconst + mvn r10, r10 // to save 1 NOT in Sbox calculations + mvn r6, r6 // to save 1 NOT in Sbox calculations + mvn r8, r8 // to save 1 NOT in Sbox calculations + eor r12, r12, #0x000000f0 // add rconst + mvn r9, r9 // to save 1 NOT in Sbox calculations + mvn r7, r7 // to save 1 NOT in Sbox calculations + strd r11, r10, [r0], #8 + strd r5, r6, [r0], #8 + strd r8, r12, [r0], #8 + strd r9, r7, [r0], #8 + ldm r0, {r5-r12} // load rtk = tk1 ^ lfsr2(tk2) ^ lfsr3(tk3) + bl p10 + movw r4, #0xc3c3 + movt r4, #0xc3c3 // r4 <- 0xc3c3c3c3 + and r1, r4, r9, ror #26 + and r2, r4, r12, ror #26 + eor r1, r1, #0x00000300 // add rconst + mvn r1, r1 // to save 1 NOT in Sbox calculations + eor r2, r2, #0x00000300 // add rconst + strd r1, r2, [r0], #8 + and r1, r4, r11, ror #26 + and r2, r4, r10, ror #26 + eor r1, r1, #0x30000000 // add rconst + eor r1, r1, #0x000003c0 // add rconst + mvn r1, r1 // to save 1 NOT in Sbox calculations + eor r2, r2, #0x00000300 // add rconst + mvn r2, r2 // to save 1 NOT in Sbox calculations + strd r1, r2, [r0], #8 + and r1, r4, r6, ror #26 + and r2, r4, r7, ror #26 + mvn r1, r1 // to save 1 NOT in Sbox calculations + mvn r2, r2 // to save 1 NOT in Sbox calculations + strd r1, r2, [r0], #8 + and r1, r4, r8, ror #26 + and r2, r4, r5, ror #26 + mvn r1, r1 // to save 1 NOT in Sbox calculations + strd r1, r2, [r0], #8 + and r4, r4, r4, lsr #6 // r4 <- 0x03030303 + and r1, r4, r5, ror #28 // --- ror and masks to match fixslicing + and r5, r5, r4, lsl #6 + orr r5, r1, r5, ror #12 + and r1, r4, r6, ror #28 + and r6, r6, r4, lsl #6 + orr r6, r1, r6, ror #12 + and r1, r4, r7, ror #28 + and r7, r7, r4, lsl #6 + orr r7, r1, r7, ror #12 + and r1, r4, r8, ror #28 + and r8, r8, r4, lsl #6 + orr r8, r1, r8, ror #12 + and r1, r4, r9, ror #28 + and r9, r9, r4, lsl #6 + orr r9, r1, r9, ror #12 + and r1, r4, r10, ror #28 + and r10, r10, r4, lsl #6 + orr r10, r1, r10, ror #12 + and r1, r4, r11, ror #28 + and r11, r11, r4, lsl #6 + orr r11, r1, r11, ror #12 + and r1, r4, r12, ror #28 + and r12, r12, r4, lsl #6 + orr r12, r1, r12, ror #12 // ror and masks to match fixslicing --- + mvn r8, r8 // to save 1 NOT in Sbox calculations + mvn r7, r7 // to save 1 NOT in Sbox calculations + strd r8, r7, [r0], #8 + eor r9, r9, #0x0c000000 // add rconst + mvn r9, r9 // to save 1 NOT in Sbox calculations + eor r12, r12, #0x00000300 // add rconst + strd r9, r12, [r0], #8 + eor r10, r10, #0x0c000000 // add rconst + mvn r10, r10 // to save 1 NOT in Sbox calculations + strd r10, r5, [r0], #8 + mvn r6, r6 // to save 1 NOT in Sbox calculations + eor r11, r11, #0xcc000000 // add rconst + mvn r11, r11 // to save 1 NOT in Sbox calculations + strd r6, r11, [r0], #8 + ldm r0, {r5-r12} // load rtk = tk1 ^ lfsr2(tk2) ^ lfsr3(tk3) + bl p12 + movw r4, #0x3030 + movt r4, #0x3030 // r4 <- 0x30303030 + and r1, r4, r5, ror #14 // --- ror and masks to match fixslicing + and r2, r5, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r6, ror #14 + and r3, r6, r4, ror #4 + orr r3, r1, r3, ror #6 + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r3, r2, [r0], #8 + and r1, r4, r7, ror #14 + and r2, r7, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r8, ror #14 + and r3, r8, r4, ror #4 + orr r3, r1, r3, ror #6 + mvn r2, r2 // to save 1 NOT in Sbox calculations + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r3, r2, [r0], #8 + and r1, r4, r11, ror #14 + and r2, r11, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r12, ror #14 + and r3, r12, r4, ror #4 + orr r3, r1, r3, ror #6 + eor r3, r3, #0x0c000000 // add rconst + eor r2, r2, #0x00000003 // add rconst + eor r2, r2, #0x0c000000 // add rconst + mvn r2, r2 // to save 1 NOT in Sbox calculations + strd r3, r2, [r0], #8 + and r1, r4, r9, ror #14 + and r2, r9, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r10, ror #14 + and r3, r10, r4, ror #4 + orr r3, r1, r3, ror #6 + eor r2, r2, #0x00300000 // add rconst + mvn r2, r2 // to save 1 NOT in Sbox calculations + eor r3, r3, #0x00300000 // add rconst + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r3, r2, [r0], #8 + orr r4, r4, r4, lsl #2 // r4 <- 0xf0f0f0f0 + and r5, r4, r5, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r6, r4, r6, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r7, r4, r7, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r8, r4, r8, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r9, r4, r9, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r10, r4, r10, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r11, r4, r11, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r12, r4, r12, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + eor r11, r11, #0x003c0000 // add rconst + mvn r11, r11 // to save 1 NOT in Sbox calculations + mvn r10, r10 // to save 1 NOT in Sbox calculations + strd r11, r10, [r0], #8 + mvn r6, r6 // to save 1 NOT in Sbox calculations + strd r5, r6, [r0], #8 + mvn r8, r8 // to save 1 NOT in Sbox calculations + eor r12, r12, #0x00f00000 // add rconst + strd r8, r12, [r0], #8 + eor r9, r9, #0x00c00000 // add rconst + mvn r9, r9 // to save 1 NOT in Sbox calculations + mvn r7, r7 + strd r9, r7, [r0], #8 + ldm r0, {r5-r12} // load rtk = tk1 ^ lfsr2(tk2) ^ lfsr3(tk3) + bl p14 + movw r4, #0xc3c3 + movt r4, #0xc3c3 // r4 <- 0xc3c3c3c3 + and r1, r4, r9, ror #10 // ror and mask to match fixslicing + and r2, r4, r12, ror #10 // ror and mask to match fixslicing + and r3, r4, r11, ror #10 // ror and mask to match fixslicing + mvn r1, r1 // to save 1 NOT in Sbox calculations + eor r2, r2, #0x03c00000 // add rconst + eor r3, r3, #0x03c00000 // add rconst + eor r3, r3, #0x00003000 // add rconst + mvn r3, r3 // to save 1 NOT in Sbox calculations + stmia.w r0!, {r1-r3} + and r1, r4, r10, ror #10 // ror and mask to match fixslicing + and r2, r4, r6, ror #10 // ror and mask to match fixslicing + and r3, r4, r7, ror #10 // ror and mask to match fixslicing + mvn r1, r1 // to save 1 NOT in Sbox calculations + mvn r2, r2 // to save 1 NOT in Sbox calculations + mvn r3, r3 // to save 1 NOT in Sbox calculations + stmia.w r0!, {r1-r3} + and r1, r4, r8, ror #10 // ror and mask to match fixslicing + and r2, r4, r5, ror #10 // ror and mask to match fixslicing + mvn r1, r1 // to save 1 NOT in Sbox calculations + strd r1, r2, [r0], #8 + and r4, r4, r4, lsr #6 // r4 <- 0x03030303 + and r1, r4, r5, ror #12 //--- ror and masks to match fixslicing + and r5, r5, r4, lsl #6 + orr r5, r1, r5, ror #28 + and r1, r4, r6, ror #12 + and r6, r6, r4, lsl #6 + orr r6, r1, r6, ror #28 + and r1, r4, r7, ror #12 + and r7, r7, r4, lsl #6 + orr r7, r1, r7, ror #28 + and r1, r4, r8, ror #12 + and r8, r8, r4, lsl #6 + orr r8, r1, r8, ror #28 + and r1, r4, r9, ror #12 + and r9, r9, r4, lsl #6 + orr r9, r1, r9, ror #28 + and r1, r4, r10, ror #12 + and r10, r10, r4, lsl #6 + orr r10, r1, r10, ror #28 + and r1, r4, r11, ror #12 + and r11, r11, r4, lsl #6 + orr r11, r1, r11, ror #28 + and r1, r4, r12, ror #12 + and r12, r12, r4, lsl #6 + orr r12, r1, r12, ror #28 //ror and masks to match fixslicing --- + mvn r7, r7 // to save 1 NOT in Sbox calculations + mvn r8, r8 // to save 1 NOT in Sbox calculations + strd r8, r7, [r0], #8 + mvn r9, r9 // to save 1 NOT in Sbox calculations + eor r12, r12, #0x00000c00 // add rconst + strd r9, r12, [r0], #8 + eor r10, r10, #0x00000c00 // add rconst + mvn r10, r10 // to save 1 NOT in Sbox calculations + strd r10, r5, [r0], #8 + mvn r6, r6 // to save 1 NOT in Sbox calculations + eor r11, r11, #0x0000cc00 // add rconst + eor r11, r11, #0x03000000 // add rconst + mvn r11, r11 // to save 1 NOT in Sbox calculations + strd r6, r11, [r0], #8 + ldm r0, {r5-r12} // load rtk = tk1 ^ lfsr2(tk2) ^ lfsr3(tk3) + movw r4, #0x3030 + movt r4, #0x3030 // r4 <- 0x30303030 + and r1, r4, r6, ror #30 + and r2, r6, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r5, ror #30 + and r2, r5, r4, ror #4 + orr r3, r3, r2, ror #22 + mvn r1, r1 // to save 1 NOT in Sbox calculations + strd r1, r3, [r0], #8 + and r1, r4, r8, ror #30 + and r2, r8, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r7, ror #30 + and r2, r7, r4, ror #4 + orr r3, r3, r2, ror #22 + mvn r1, r1 // to save 1 NOT in Sbox calculations + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r1, r3, [r0], #8 + and r1, r4, r12, ror #30 + and r2, r12, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r11, ror #30 + and r2, r11, r4, ror #4 + orr r3, r3, r2, ror #22 + eor r3, r3, #0x00000030 // add rconst + eor r3, r3, #0x00030000 // add rconst + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r1, r3, [r0], #8 + and r1, r4, r10, ror #30 + and r2, r10, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r9, ror #30 + and r2, r9, r4, ror #4 + orr r3, r3, r2, ror #22 + eor r1, r1, #0x00000030 // add rconst + mvn r1, r1 // to save 1 NOT in Sbox calculations + eor r3, r3, #0x00000030 // add rconst + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r1, r3, [r0], #8 + orr r4, r4, r4, lsl #2 // r4 <- 0xf0f0f0f0 + and r5, r5, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r6, r6, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r7, r7, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r8, r8, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r9, r9, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r10, r10, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r11, r11, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r12, r12, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + eor r11, r11, #0x0000000c // add rconst + mvn r11, r11 // to save 1 NOT in Sbox calculations + eor r10, r10, #0x000000c0 // add rconst + mvn r10, r10 // to save 1 NOT in Sbox calculations + strd r11, r10, [r0], #8 + mvn r6, r6 // to save 1 NOT in Sbox calculations + strd r5, r6, [r0], #8 + mvn r8, r8 // to save 1 NOT in Sbox calculations + eor r12, r12, #0x000000f0 // add rconst + strd r8, r12, [r0], #8 + eor r9, r9, #0x000000c0 // add rconst + mvn r9, r9 // to save 1 NOT in Sbox calculations + mvn r7, r7 // to save 1 NOT in Sbox calculations + strd r9, r7, [r0], #8 + ldm r0, {r5-r12} // load rtk = tk1 ^ lfsr2(tk2) ^ lfsr3(tk3) + bl p2 // apply the permutation twice + movw r4, #0xc3c3 + movt r4, #0xc3c3 // r4 <- 0xc3c3c3c3 + and r1, r4, r9, ror #26 + and r2, r4, r12, ror #26 + and r3, r4, r11, ror #26 + eor r1, r1, #0x00000300 // add rconst + mvn r1, r1 // to save 1 NOT in Sbox calculations + eor r2, r2, #0x000000c0 // add rconst + eor r3, r3, #0x000003c0 // add rconst + eor r3, r3, #0x30000000 // add rconst + mvn r3, r3 // to save 1 NOT in Sbox calculations + stmia.w r0!, {r1-r3} + and r1, r4, r10, ror #26 + and r2, r4, r6, ror #26 + and r3, r4, r7, ror #26 + mvn r1, r1 // to save 1 NOT in Sbox calculations + mvn r2, r2 // to save 1 NOT in Sbox calculations + mvn r3, r3 // to save 1 NOT in Sbox calculations + stmia.w r0!, {r1-r3} + and r1, r4, r8, ror #26 + and r2, r4, r5, ror #26 + mvn r1, r1 // to save 1 NOT in Sbox calculations + stmia.w r0!, {r1-r2} + and r4, r4, r4, lsr #6 // r4 <- 0x03030303 + and r1, r4, r5, ror #28 // --- ror and masks to match fixslicing + and r5, r5, r4, lsl #6 + orr r5, r1, r5, ror #12 + and r1, r4, r6, ror #28 + and r6, r6, r4, lsl #6 + orr r6, r1, r6, ror #12 + and r1, r4, r7, ror #28 + and r7, r7, r4, lsl #6 + orr r7, r1, r7, ror #12 + and r1, r4, r8, ror #28 + and r8, r8, r4, lsl #6 + orr r8, r1, r8, ror #12 + and r1, r4, r9, ror #28 + and r9, r9, r4, lsl #6 + orr r9, r1, r9, ror #12 + and r1, r4, r10, ror #28 + and r10, r10, r4, lsl #6 + orr r10, r1, r10, ror #12 + and r1, r4, r11, ror #28 + and r11, r11, r4, lsl #6 + orr r11, r1, r11, ror #12 + and r1, r4, r12, ror #28 + and r12, r12, r4, lsl #6 + orr r12, r1, r12, ror #12 // ror and masks to match fixslicing --- + mvn r8, r8 // to save 1 NOT in Sbox calculations + mvn r7, r7 // to save 1 NOT in Sbox calculations + strd r8, r7, [r0], #8 + mvn r9, r9 // to save 1 NOT in Sbox calculations + eor r12, r12, #0x0c000000 // add rconst + eor r12, r12, #0x00000300 // add rconst + strd r9, r12, [r0], #8 + eor r10, r10, #0x0c000000 // add rconst + mvn r10, r10 // to save 1 NOT in Sbox calculations + strd r10, r5, [r0], #8 + mvn r6, r6 // to save 1 NOT in Sbox calculations + eor r11, r11, #0xc0000000 // add rconst + eor r11, r11, #0x00000300 // add rconst + mvn r11, r11 // to save 1 NOT in Sbox calculations + strd r6, r11, [r0], #8 + ldm r0, {r5-r12} // load rtk = tk1 ^ lfsr2(tk2) ^ lfsr3(tk3) + bl p4 // apply the permutation 4 times + movw r4, #0x3030 + movt r4, #0x3030 // r4 <- 0x30303030 + and r1, r4, r5, ror #14 // --- ror and masks to match fixslicing + and r2, r5, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r6, ror #14 + and r3, r6, r4, ror #4 + orr r3, r1, r3, ror #6 + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r3, r2, [r0], #8 + and r1, r4, r7, ror #14 + and r2, r7, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r8, ror #14 + and r3, r8, r4, ror #4 + orr r3, r1, r3, ror #6 + mvn r2, r2 // to save 1 NOT in Sbox calculations + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r3, r2, [r0], #8 + and r1, r4, r11, ror #14 + and r2, r11, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r12, ror #14 + and r3, r12, r4, ror #4 + orr r3, r1, r3, ror #6 + eor r2, r2, #0x0c300000 // add rconst + eor r2, r2, #0x00000003 // add rconst + mvn r2, r2 // to save 1 NOT in Sbox calculations + eor r3, r3, #0x00300000 // add rconst + strd r3, r2, [r0], #8 + and r1, r4, r9, ror #14 + and r2, r9, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r10, ror #14 + and r3, r10, r4, ror #4 + orr r3, r1, r3, ror #6 + eor r2, r2, #0x00300000 // add rconst + mvn r2, r2 // to save 1 NOT in Sbox calculations + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r3, r2, [r0], #8 + orr r4, r4, r4, lsl #2 // r4 <- 0xf0f0f0f0 + and r5, r4, r5, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r6, r4, r6, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r7, r4, r7, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r8, r4, r8, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r9, r4, r9, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r10, r4, r10, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r11, r4, r11, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r12, r4, r12, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + eor r11, r11, #0x00cc0000 // add rconst + mvn r11, r11 // to save 1 NOT in Sbox calculations + eor r10, r10, #0x00c00000 // add rconst + mvn r10, r10 // to save 1 NOT in Sbox calculations + mvn r6, r6 // to save 1 NOT in Sbox calculations + mvn r8, r8 // to save 1 NOT in Sbox calculations + eor r12, r12, #0x00300000 // add rconst + mvn r9, r9 // to save 1 NOT in Sbox calculations + mvn r7, r7 + strd r11, r10, [r0], #8 + strd r5, r6, [r0], #8 + strd r8, r12, [r0], #8 + strd r9, r7, [r0], #8 + ldm r0, {r5-r12} // load rtk = tk1 ^ lfsr2(tk2) ^ lfsr3(tk3) + bl p6 + movw r4, #0xc3c3 + movt r4, #0xc3c3 // r4 <- 0xc3c3c3c3 + and r1, r4, r9, ror #10 // ror and mask to match fixslicing + and r2, r4, r12, ror #10 // ror and mask to match fixslicing + and r3, r4, r11, ror #10 // ror and mask to match fixslicing + eor r1, r1, #0x03000000 // add rconst + mvn r1, r1 // to save 1 NOT in Sbox calculations + eor r3, r3, #0x00c00000 // add rconst + eor r3, r3, #0x00003000 // add rconst + mvn r3, r3 // to save 1 NOT in Sbox calculations + stmia.w r0!, {r1-r3} + and r1, r4, r10, ror #10 // ror and mask to match fixslicing + and r2, r4, r6, ror #10 // ror and mask to match fixslicing + and r3, r4, r7, ror #10 // ror and mask to match fixslicing + eor r1, r1, #0x03000000 // add rconst + mvn r1, r1 // to save 1 NOT in Sbox calculations + mvn r2, r2 // to save 1 NOT in Sbox calculations + mvn r3, r3 // to save 1 NOT in Sbox calculations + stmia.w r0!, {r1-r3} + and r1, r4, r8, ror #10 // ror and mask to match fixslicing + and r2, r4, r5, ror #10 // ror and mask to match fixslicing + mvn r1, r1 // to save 1 NOT in Sbox calculations + strd r1, r2, [r0], #8 + and r4, r4, r4, lsr #6 // r4 <- 0x03030303 + and r1, r4, r5, ror #12 //--- ror and masks to match fixslicing + and r5, r5, r4, lsl #6 + orr r5, r1, r5, ror #28 + and r1, r4, r6, ror #12 + and r6, r6, r4, lsl #6 + orr r6, r1, r6, ror #28 + and r1, r4, r7, ror #12 + and r7, r7, r4, lsl #6 + orr r7, r1, r7, ror #28 + and r1, r4, r8, ror #12 + and r8, r8, r4, lsl #6 + orr r8, r1, r8, ror #28 + and r1, r4, r9, ror #12 + and r9, r9, r4, lsl #6 + orr r9, r1, r9, ror #28 + and r1, r4, r10, ror #12 + and r10, r10, r4, lsl #6 + orr r10, r1, r10, ror #28 + and r1, r4, r11, ror #12 + and r11, r11, r4, lsl #6 + orr r11, r1, r11, ror #28 + and r1, r4, r12, ror #12 + and r12, r12, r4, lsl #6 + orr r12, r1, r12, ror #28 //ror and masks to match fixslicing --- + mvn r7, r7 // to save 1 NOT in Sbox calculations + mvn r8, r8 // to save 1 NOT in Sbox calculations + strd r8, r7, [r0], #8 + eor r9, r9, #0x00000c00 // add rconst + mvn r9, r9 // to save 1 NOT in Sbox calculations + eor r12, r12, #0x03000000 // add rconst + strd r9, r12, [r0], #8 + mvn r10, r10 // to save 1 NOT in Sbox calculations + strd r10, r5, [r0], #8 + mvn r6, r6 // to save 1 NOT in Sbox calculations + eor r11, r11, #0x0000c000 // add rconst + mvn r11, r11 // to save 1 NOT in Sbox calculations + strd r6, r11, [r0], #8 + ldm r0, {r5-r12} // load rtk = tk1 ^ lfsr2(tk2) ^ lfsr3(tk3) + bl p8 + movw r4, #0x3030 + movt r4, #0x3030 // r4 <- 0x30303030 + and r1, r4, r6, ror #30 + and r2, r6, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r5, ror #30 + and r2, r5, r4, ror #4 + orr r3, r3, r2, ror #22 + mvn r1, r1 // to save 1 NOT in Sbox calculations + strd r1, r3, [r0], #8 + and r1, r4, r8, ror #30 + and r2, r8, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r7, ror #30 + and r2, r7, r4, ror #4 + orr r3, r3, r2, ror #22 + mvn r1, r1 // to save 1 NOT in Sbox calculations + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r1, r3, [r0], #8 + and r1, r4, r12, ror #30 + and r2, r12, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r11, ror #30 + and r2, r11, r4, ror #4 + orr r3, r3, r2, ror #22 + eor r1, r1, #0x00000c00 // add rconst + eor r3, r3, #0x00030c00 // add rconst + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r1, r3, [r0], #8 + and r1, r4, r10, ror #30 + and r2, r10, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r9, ror #30 + and r2, r9, r4, ror #4 + orr r3, r3, r2, ror #22 + mvn r1, r1 // to save 1 NOT in Sbox calculations + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r1, r3, [r0], #8 + orr r4, r4, r4, lsl #2 // r4 <- 0xf0f0f0f0 + and r5, r5, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r6, r6, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r7, r7, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r8, r8, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r9, r9, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r10, r10, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r11, r11, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r12, r12, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + eor r11, r11, #0x0000003c // add rconst + mvn r11, r11 // to save 1 NOT in Sbox calculations + mvn r10, r10 // to save 1 NOT in Sbox calculations + mvn r6, r6 // to save 1 NOT in Sbox calculations + mvn r8, r8 // to save 1 NOT in Sbox calculations + eor r12, r12, #0x000000c0 // add rconst + mvn r9, r9 // to save 1 NOT in Sbox calculations + mvn r7, r7 // to save 1 NOT in Sbox calculations + strd r11, r10, [r0], #8 + strd r5, r6, [r0], #8 + strd r8, r12, [r0], #8 + strd r9, r7, [r0], #8 + ldm r0, {r5-r12} // load rtk = tk1 ^ lfsr2(tk2) ^ lfsr3(tk3) + bl p10 + movw r4, #0xc3c3 + movt r4, #0xc3c3 // r4 <- 0xc3c3c3c3 + and r1, r4, r9, ror #26 + and r2, r4, r12, ror #26 + mvn r1, r1 // to save 1 NOT in Sbox calculations + strd r1, r2, [r0], #8 + and r1, r4, r11, ror #26 + and r2, r4, r10, ror #26 + eor r1, r1, #0x30000000 // add rconst + eor r1, r1, #0x00000300 // add rconst + mvn r1, r1 // to save 1 NOT in Sbox calculations + mvn r2, r2 // to save 1 NOT in Sbox calculations + strd r1, r2, [r0], #8 + and r1, r4, r6, ror #26 + and r2, r4, r7, ror #26 + mvn r1, r1 // to save 1 NOT in Sbox calculations + mvn r2, r2 // to save 1 NOT in Sbox calculations + strd r1, r2, [r0], #8 + and r1, r4, r8, ror #26 + and r2, r4, r5, ror #26 + mvn r1, r1 // to save 1 NOT in Sbox calculations + strd r1, r2, [r0], #8 + and r4, r4, r4, lsr #6 // r4 <- 0x03030303 + and r1, r4, r5, ror #28 // --- ror and masks to match fixslicing + and r5, r5, r4, lsl #6 + orr r5, r1, r5, ror #12 + and r1, r4, r6, ror #28 + and r6, r6, r4, lsl #6 + orr r6, r1, r6, ror #12 + and r1, r4, r7, ror #28 + and r7, r7, r4, lsl #6 + orr r7, r1, r7, ror #12 + and r1, r4, r8, ror #28 + and r8, r8, r4, lsl #6 + orr r8, r1, r8, ror #12 + and r1, r4, r9, ror #28 + and r9, r9, r4, lsl #6 + orr r9, r1, r9, ror #12 + and r1, r4, r10, ror #28 + and r10, r10, r4, lsl #6 + orr r10, r1, r10, ror #12 + and r1, r4, r11, ror #28 + and r11, r11, r4, lsl #6 + orr r11, r1, r11, ror #12 + and r1, r4, r12, ror #28 + and r12, r12, r4, lsl #6 + orr r12, r1, r12, ror #12 // ror and masks to match fixslicing --- + mvn r8, r8 // to save 1 NOT in Sbox calculations + mvn r7, r7 // to save 1 NOT in Sbox calculations + strd r8, r7, [r0], #8 + mvn r9, r9 // to save 1 NOT in Sbox calculations + eor r12, r12, #0x0c000000 // add rconst + strd r9, r12, [r0], #8 + eor r10, r10, #0x0c000000 // add rconst + mvn r10, r10 // to save 1 NOT in Sbox calculations + strd r10, r5, [r0], #8 + mvn r6, r6 // to save 1 NOT in Sbox calculations + eor r11, r11, #0xc0000000 // add rconst + mvn r11, r11 // to save 1 NOT in Sbox calculations + strd r6, r11, [r0], #8 + ldm r0, {r5-r12} // load rtk = tk1 ^ lfsr2(tk2) ^ lfsr3(tk3) + bl p12 + movw r4, #0x3030 + movt r4, #0x3030 // r4 <- 0x30303030 + and r1, r4, r5, ror #14 // --- ror and masks to match fixslicing + and r2, r5, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r6, ror #14 + and r3, r6, r4, ror #4 + orr r3, r1, r3, ror #6 + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r3, r2, [r0], #8 + and r1, r4, r7, ror #14 + and r2, r7, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r8, ror #14 + and r3, r8, r4, ror #4 + orr r3, r1, r3, ror #6 + mvn r2, r2 // to save 1 NOT in Sbox calculations + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r3, r2, [r0], #8 + and r1, r4, r11, ror #14 + and r2, r11, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r12, ror #14 + and r3, r12, r4, ror #4 + orr r3, r1, r3, ror #6 + eor r3, r3, #0x00300000 // add rconst + eor r2, r2, #0x00000003 // add rconst + eor r2, r2, #0x00300000 // add rconst + mvn r2, r2 // to save 1 NOT in Sbox calculations + strd r3, r2, [r0], #8 + and r1, r4, r9, ror #14 + and r2, r9, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r10, ror #14 + and r3, r10, r4, ror #4 + orr r3, r1, r3, ror #6 + eor r2, r2, #0x00300000 // add rconst + mvn r2, r2 // to save 1 NOT in Sbox calculations + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r3, r2, [r0], #8 + orr r4, r4, r4, lsl #2 // r4 <- 0xf0f0f0f0 + and r5, r4, r5, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r6, r4, r6, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r7, r4, r7, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r8, r4, r8, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r9, r4, r9, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r10, r4, r10, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r11, r4, r11, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r12, r4, r12, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + eor r11, r11, #0x00cc0000 // add rconst + mvn r11, r11 // to save 1 NOT in Sbox calculations + eor r10, r10, #0x00c00000 // add rconst + mvn r10, r10 // to save 1 NOT in Sbox calculations + strd r11, r10, [r0], #8 + mvn r6, r6 // to save 1 NOT in Sbox calculations + strd r5, r6, [r0], #8 + mvn r8, r8 // to save 1 NOT in Sbox calculations + eor r12, r12, #0x00f00000 // add rconst + strd r8, r12, [r0], #8 + mvn r9, r9 // to save 1 NOT in Sbox calculations + mvn r7, r7 + strd r9, r7, [r0], #8 + ldm r0, {r5-r12} // load rtk = tk1 ^ lfsr2(tk2) ^ lfsr3(tk3) + bl p14 + movw r4, #0xc3c3 + movt r4, #0xc3c3 // r4 <- 0xc3c3c3c3 + and r1, r4, r9, ror #10 // ror and mask to match fixslicing + and r2, r4, r12, ror #10 // ror and mask to match fixslicing + and r3, r4, r11, ror #10 // ror and mask to match fixslicing + eor r1, r1, #0x03000000 // add rconst + mvn r1, r1 // to save 1 NOT in Sbox calculations + eor r3, r3, #0x03c00000 // add rconst + eor r3, r3, #0x00003000 // add rconst + mvn r3, r3 // to save 1 NOT in Sbox calculations + stmia.w r0!, {r1-r3} + and r1, r4, r10, ror #10 // ror and mask to match fixslicing + and r2, r4, r6, ror #10 // ror and mask to match fixslicing + and r3, r4, r7, ror #10 // ror and mask to match fixslicing + eor r1, r1, #0x03000000 // add rconst + mvn r1, r1 // to save 1 NOT in Sbox calculations + mvn r2, r2 // to save 1 NOT in Sbox calculations + mvn r3, r3 // to save 1 NOT in Sbox calculations + stmia.w r0!, {r1-r3} + and r1, r4, r8, ror #10 // ror and mask to match fixslicing + and r2, r4, r5, ror #10 // ror and mask to match fixslicing + mvn r1, r1 // to save 1 NOT in Sbox calculations + strd r1, r2, [r0], #8 + and r4, r4, r4, lsr #6 // r4 <- 0x03030303 + and r1, r4, r5, ror #12 //--- ror and masks to match fixslicing + and r5, r5, r4, lsl #6 + orr r5, r1, r5, ror #28 + and r1, r4, r6, ror #12 + and r6, r6, r4, lsl #6 + orr r6, r1, r6, ror #28 + and r1, r4, r7, ror #12 + and r7, r7, r4, lsl #6 + orr r7, r1, r7, ror #28 + and r1, r4, r8, ror #12 + and r8, r8, r4, lsl #6 + orr r8, r1, r8, ror #28 + and r1, r4, r9, ror #12 + and r9, r9, r4, lsl #6 + orr r9, r1, r9, ror #28 + and r1, r4, r10, ror #12 + and r10, r10, r4, lsl #6 + orr r10, r1, r10, ror #28 + and r1, r4, r11, ror #12 + and r11, r11, r4, lsl #6 + orr r11, r1, r11, ror #28 + and r1, r4, r12, ror #12 + and r12, r12, r4, lsl #6 + orr r12, r1, r12, ror #28 //ror and masks to match fixslicing --- + mvn r7, r7 // to save 1 NOT in Sbox calculations + mvn r8, r8 // to save 1 NOT in Sbox calculations + strd r8, r7, [r0], #8 + eor r9, r9, #0x00000c00 // add rconst + mvn r9, r9 // to save 1 NOT in Sbox calculations + eor r12, r12, #0x03000000 // add rconst + strd r9, r12, [r0], #8 + eor r10, r10, #0x00000c00 // add rconst + mvn r10, r10 // to save 1 NOT in Sbox calculations + strd r10, r5, [r0], #8 + mvn r6, r6 // to save 1 NOT in Sbox calculations + eor r11, r11, #0x0000c000 // add rconst + mvn r11, r11 // to save 1 NOT in Sbox calculations + strd r6, r11, [r0], #8 + ldm r0, {r5-r12} // load rtk = tk1 ^ lfsr2(tk2) ^ lfsr3(tk3) + movw r4, #0x3030 + movt r4, #0x3030 // r4 <- 0x30303030 + and r1, r4, r6, ror #30 + and r2, r6, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r5, ror #30 + and r2, r5, r4, ror #4 + orr r3, r3, r2, ror #22 + mvn r1, r1 // to save 1 NOT in Sbox calculations + strd r1, r3, [r0], #8 + and r1, r4, r8, ror #30 + and r2, r8, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r7, ror #30 + and r2, r7, r4, ror #4 + orr r3, r3, r2, ror #22 + mvn r1, r1 // to save 1 NOT in Sbox calculations + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r1, r3, [r0], #8 + and r1, r4, r12, ror #30 + and r2, r12, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r11, ror #30 + and r2, r11, r4, ror #4 + orr r3, r3, r2, ror #22 + eor r1, r1, #0x00000c00 // add rconst + eor r3, r3, #0x00030c00 // add rconst + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r1, r3, [r0], #8 + and r1, r4, r10, ror #30 + and r2, r10, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r9, ror #30 + and r2, r9, r4, ror #4 + orr r3, r3, r2, ror #22 + mvn r1, r1 // to save 1 NOT in Sbox calculations + eor r3, r3, #0x00000030 // add rconst + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r1, r3, [r0], #8 + orr r4, r4, r4, lsl #2 // r4 <- 0xf0f0f0f0 + and r5, r5, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r6, r6, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r7, r7, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r8, r8, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r9, r9, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r10, r10, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r11, r11, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r12, r12, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + eor r11, r11, #0x0000003c // add rconst + mvn r11, r11 // to save 1 NOT in Sbox calculations + mvn r10, r10 // to save 1 NOT in Sbox calculations + strd r11, r10, [r0], #8 + mvn r6, r6 // to save 1 NOT in Sbox calculations + strd r5, r6, [r0], #8 + mvn r8, r8 // to save 1 NOT in Sbox calculations + eor r12, r12, #0x000000f0 // add rconst + strd r8, r12, [r0], #8 + mvn r9, r9 // to save 1 NOT in Sbox calculations + mvn r7, r7 // to save 1 NOT in Sbox calculations + strd r9, r7, [r0], #8 + ldm r0, {r5-r12} // load rtk = tk1 ^ lfsr2(tk2) ^ lfsr3(tk3) + bl p2 // apply the permutation twice + movw r4, #0xc3c3 + movt r4, #0xc3c3 // r4 <- 0xc3c3c3c3 + and r1, r4, r9, ror #26 + and r2, r4, r12, ror #26 + and r3, r4, r11, ror #26 + mvn r1, r1 // to save 1 NOT in Sbox calculations + eor r2, r2, #0x00000300 // add rconst + eor r3, r3, #0x000003c0 // add rconst + eor r3, r3, #0x30000000 // add rconst + mvn r3, r3 // to save 1 NOT in Sbox calculations + stmia.w r0!, {r1-r3} + and r1, r4, r10, ror #26 + and r2, r4, r6, ror #26 + and r3, r4, r7, ror #26 + mvn r1, r1 // to save 1 NOT in Sbox calculations + mvn r2, r2 // to save 1 NOT in Sbox calculations + mvn r3, r3 // to save 1 NOT in Sbox calculations + stmia.w r0!, {r1-r3} + and r1, r4, r8, ror #26 + and r2, r4, r5, ror #26 + mvn r1, r1 // to save 1 NOT in Sbox calculations + stmia.w r0!, {r1-r2} + and r4, r4, r4, lsr #6 // r4 <- 0x03030303 + and r1, r4, r5, ror #28 // --- ror and masks to match fixslicing + and r5, r5, r4, lsl #6 + orr r5, r1, r5, ror #12 + and r1, r4, r6, ror #28 + and r6, r6, r4, lsl #6 + orr r6, r1, r6, ror #12 + and r1, r4, r7, ror #28 + and r7, r7, r4, lsl #6 + orr r7, r1, r7, ror #12 + and r1, r4, r8, ror #28 + and r8, r8, r4, lsl #6 + orr r8, r1, r8, ror #12 + and r1, r4, r9, ror #28 + and r9, r9, r4, lsl #6 + orr r9, r1, r9, ror #12 + and r1, r4, r10, ror #28 + and r10, r10, r4, lsl #6 + orr r10, r1, r10, ror #12 + and r1, r4, r11, ror #28 + and r11, r11, r4, lsl #6 + orr r11, r1, r11, ror #12 + and r1, r4, r12, ror #28 + and r12, r12, r4, lsl #6 + orr r12, r1, r12, ror #12 // ror and masks to match fixslicing --- + mvn r8, r8 // to save 1 NOT in Sbox calculations + mvn r7, r7 // to save 1 NOT in Sbox calculations + strd r8, r7, [r0], #8 + mvn r9, r9 // to save 1 NOT in Sbox calculations + strd r9, r12, [r0], #8 + eor r10, r10, #0x0c000000 // add rconst + mvn r10, r10 // to save 1 NOT in Sbox calculations + strd r10, r5, [r0], #8 + mvn r6, r6 // to save 1 NOT in Sbox calculations + eor r11, r11, #0xcc000000 // add rconst + mvn r11, r11 // to save 1 NOT in Sbox calculations + strd r6, r11, [r0], #8 + ldm r0, {r5-r12} // load rtk = tk1 ^ lfsr2(tk2) ^ lfsr3(tk3) + bl p4 // apply the permutation 4 times + movw r4, #0x3030 + movt r4, #0x3030 // r4 <- 0x30303030 + and r1, r4, r5, ror #14 // --- ror and masks to match fixslicing + and r2, r5, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r6, ror #14 + and r3, r6, r4, ror #4 + orr r3, r1, r3, ror #6 + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r3, r2, [r0], #8 + and r1, r4, r7, ror #14 + and r2, r7, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r8, ror #14 + and r3, r8, r4, ror #4 + orr r3, r1, r3, ror #6 + mvn r2, r2 // to save 1 NOT in Sbox calculations + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r3, r2, [r0], #8 + and r1, r4, r11, ror #14 + and r2, r11, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r12, ror #14 + and r3, r12, r4, ror #4 + orr r3, r1, r3, ror #6 + eor r3, r3, #0x00300000 // add rconst + eor r2, r2, #0x00000003 // add rconst + mvn r2, r2 // to save 1 NOT in Sbox calculations + strd r3, r2, [r0], #8 + and r1, r4, r9, ror #14 + and r2, r9, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r10, ror #14 + and r3, r10, r4, ror #4 + orr r3, r1, r3, ror #6 + eor r2, r2, #0x00300000 // add rconst + mvn r2, r2 // to save 1 NOT in Sbox calculations + eor r3, r3, #0x00300000 // add rconst + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r3, r2, [r0], #8 + orr r4, r4, r4, lsl #2 // r4 <- 0xf0f0f0f0 + and r5, r4, r5, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r6, r4, r6, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r7, r4, r7, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r8, r4, r8, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r9, r4, r9, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r10, r4, r10, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r11, r4, r11, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r12, r4, r12, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + eor r11, r11, #0x00cc0000 // add rconst + mvn r11, r11 // to save 1 NOT in Sbox calculations + mvn r10, r10 // to save 1 NOT in Sbox calculations + mvn r6, r6 // to save 1 NOT in Sbox calculations + mvn r8, r8 // to save 1 NOT in Sbox calculations + eor r12, r12, #0x00f00000 // add rconst + eor r9, r9, #0x00c00000 // add rconst + mvn r9, r9 // to save 1 NOT in Sbox calculations + mvn r7, r7 + strd r11, r10, [r0], #8 + strd r5, r6, [r0], #8 + strd r8, r12, [r0], #8 + strd r9, r7, [r0], #8 + ldm r0, {r5-r12} // load rtk = tk1 ^ lfsr2(tk2) ^ lfsr3(tk3) + bl p6 + movw r4, #0xc3c3 + movt r4, #0xc3c3 // r4 <- 0xc3c3c3c3 + and r1, r4, r9, ror #10 // ror and mask to match fixslicing + and r2, r4, r12, ror #10 // ror and mask to match fixslicing + and r3, r4, r11, ror #10 // ror and mask to match fixslicing + mvn r1, r1 // to save 1 NOT in Sbox calculations + eor r2, r2, #0x00c00000 // add rconst + eor r3, r3, #0x03c00000 // add rconst + eor r3, r3, #0x00003000 // add rconst + mvn r3, r3 // to save 1 NOT in Sbox calculations + stmia.w r0!, {r1-r3} + and r1, r4, r10, ror #10 // ror and mask to match fixslicing + and r2, r4, r6, ror #10 // ror and mask to match fixslicing + and r3, r4, r7, ror #10 // ror and mask to match fixslicing + eor r1, r1, #0x03000000 // add rconst + mvn r1, r1 // to save 1 NOT in Sbox calculations + mvn r2, r2 // to save 1 NOT in Sbox calculations + mvn r3, r3 // to save 1 NOT in Sbox calculations + stmia.w r0!, {r1-r3} + and r1, r4, r8, ror #10 // ror and mask to match fixslicing + and r2, r4, r5, ror #10 // ror and mask to match fixslicing + mvn r1, r1 // to save 1 NOT in Sbox calculations + strd r1, r2, [r0], #8 + and r4, r4, r4, lsr #6 // r4 <- 0x03030303 + and r1, r4, r5, ror #12 //--- ror and masks to match fixslicing + and r5, r5, r4, lsl #6 + orr r5, r1, r5, ror #28 + and r1, r4, r6, ror #12 + and r6, r6, r4, lsl #6 + orr r6, r1, r6, ror #28 + and r1, r4, r7, ror #12 + and r7, r7, r4, lsl #6 + orr r7, r1, r7, ror #28 + and r1, r4, r8, ror #12 + and r8, r8, r4, lsl #6 + orr r8, r1, r8, ror #28 + and r1, r4, r9, ror #12 + and r9, r9, r4, lsl #6 + orr r9, r1, r9, ror #28 + and r1, r4, r10, ror #12 + and r10, r10, r4, lsl #6 + orr r10, r1, r10, ror #28 + and r1, r4, r11, ror #12 + and r11, r11, r4, lsl #6 + orr r11, r1, r11, ror #28 + and r1, r4, r12, ror #12 + and r12, r12, r4, lsl #6 + orr r12, r1, r12, ror #28 //ror and masks to match fixslicing --- + mvn r7, r7 // to save 1 NOT in Sbox calculations + mvn r8, r8 // to save 1 NOT in Sbox calculations + strd r8, r7, [r0], #8 + eor r9, r9, #0x00000c00 // add rconst + mvn r9, r9 // to save 1 NOT in Sbox calculations + eor r12, r12, #0x00000c00 // add rconst + strd r9, r12, [r0], #8 + eor r10, r10, #0x00000c00 // add rconst + mvn r10, r10 // to save 1 NOT in Sbox calculations + strd r10, r5, [r0], #8 + mvn r6, r6 // to save 1 NOT in Sbox calculations + eor r11, r11, #0x03000000 // add rconst + eor r11, r11, #0x0000c000 // add rconst + mvn r11, r11 // to save 1 NOT in Sbox calculations + strd r6, r11, [r0], #8 + ldm r0, {r5-r12} // load rtk = tk1 ^ lfsr2(tk2) ^ lfsr3(tk3) + bl p8 + movw r4, #0x3030 + movt r4, #0x3030 // r4 <- 0x30303030 + and r1, r4, r6, ror #30 + and r2, r6, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r5, ror #30 + and r2, r5, r4, ror #4 + orr r3, r3, r2, ror #22 + mvn r1, r1 // to save 1 NOT in Sbox calculations + strd r1, r3, [r0], #8 + and r1, r4, r8, ror #30 + and r2, r8, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r7, ror #30 + and r2, r7, r4, ror #4 + orr r3, r3, r2, ror #22 + mvn r1, r1 // to save 1 NOT in Sbox calculations + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r1, r3, [r0], #8 + and r1, r4, r12, ror #30 + and r2, r12, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r11, ror #30 + and r2, r11, r4, ror #4 + orr r3, r3, r2, ror #22 + eor r1, r1, #0x00000c00 // add rconst + eor r3, r3, #0x00000030 // add rconst + eor r3, r3, #0x00030000 // add rconst + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r1, r3, [r0], #8 + and r1, r4, r10, ror #30 + and r2, r10, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r9, ror #30 + and r2, r9, r4, ror #4 + orr r3, r3, r2, ror #22 + mvn r1, r1 // to save 1 NOT in Sbox calculations + eor r3, r3, #0x00000030 // add rconst + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r1, r3, [r0], #8 + // COMMENT HERE FOR SKINNY-128-128 + orr r4, r4, r4, lsl #2 // r4 <- 0xf0f0f0f0 + and r5, r5, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r6, r6, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r7, r7, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r8, r8, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r9, r9, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r10, r10, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r11, r11, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r12, r12, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + eor r11, r11, #0x0000003c // add rconst + mvn r11, r11 // to save 1 NOT in Sbox calculations + eor r10, r10, #0x000000c0 // add rconst + mvn r10, r10 // to save 1 NOT in Sbox calculations + mvn r6, r6 // to save 1 NOT in Sbox calculations + mvn r8, r8 // to save 1 NOT in Sbox calculations + eor r12, r12, #0x00000030 // add rconst + mvn r9, r9 // to save 1 NOT in Sbox calculations + mvn r7, r7 // to save 1 NOT in Sbox calculations + strd r11, r10, [r0], #8 + strd r5, r6, [r0], #8 + strd r8, r12, [r0], #8 + strd r9, r7, [r0], #8 + ldm r0, {r5-r12} // load rtk = tk1 ^ lfsr2(tk2) ^ lfsr3(tk3) + bl p10 + movw r4, #0xc3c3 + movt r4, #0xc3c3 // r4 <- 0xc3c3c3c3 + and r1, r4, r9, ror #26 + and r2, r4, r12, ror #26 + eor r1, r1, #0x00000300 // add rconst + mvn r1, r1 // to save 1 NOT in Sbox calculations + eor r2, r2, #0x00000300 // add rconst + strd r1, r2, [r0], #8 + and r1, r4, r11, ror #26 + and r2, r4, r10, ror #26 + eor r1, r1, #0x30000000 // add rconst + eor r1, r1, #0x000000c0 // add rconst + mvn r1, r1 // to save 1 NOT in Sbox calculations + mvn r2, r2 // to save 1 NOT in Sbox calculations + strd r1, r2, [r0], #8 + and r1, r4, r6, ror #26 + and r2, r4, r7, ror #26 + mvn r1, r1 // to save 1 NOT in Sbox calculations + mvn r2, r2 // to save 1 NOT in Sbox calculations + strd r1, r2, [r0], #8 + and r1, r4, r8, ror #26 + and r2, r4, r5, ror #26 + mvn r1, r1 // to save 1 NOT in Sbox calculations + strd r1, r2, [r0], #8 + and r4, r4, r4, lsr #6 // r4 <- 0x03030303 + and r1, r4, r5, ror #28 // --- ror and masks to match fixslicing + and r5, r5, r4, lsl #6 + orr r5, r1, r5, ror #12 + and r1, r4, r6, ror #28 + and r6, r6, r4, lsl #6 + orr r6, r1, r6, ror #12 + and r1, r4, r7, ror #28 + and r7, r7, r4, lsl #6 + orr r7, r1, r7, ror #12 + and r1, r4, r8, ror #28 + and r8, r8, r4, lsl #6 + orr r8, r1, r8, ror #12 + and r1, r4, r9, ror #28 + and r9, r9, r4, lsl #6 + orr r9, r1, r9, ror #12 + and r1, r4, r10, ror #28 + and r10, r10, r4, lsl #6 + orr r10, r1, r10, ror #12 + and r1, r4, r11, ror #28 + and r11, r11, r4, lsl #6 + orr r11, r1, r11, ror #12 + and r1, r4, r12, ror #28 + and r12, r12, r4, lsl #6 + orr r12, r1, r12, ror #12 // ror and masks to match fixslicing --- + mvn r8, r8 // to save 1 NOT in Sbox calculations + mvn r7, r7 // to save 1 NOT in Sbox calculations + strd r8, r7, [r0], #8 + mvn r9, r9 // to save 1 NOT in Sbox calculations + eor r12, r12, #0x00000300 // add rconst + strd r9, r12, [r0], #8 + mvn r10, r10 // to save 1 NOT in Sbox calculations + strd r10, r5, [r0], #8 + mvn r6, r6 // to save 1 NOT in Sbox calculations + eor r11, r11, #0xcc000000 // add rconst + mvn r11, r11 // to save 1 NOT in Sbox calculations + strd r6, r11, [r0], #8 + ldm r0, {r5-r12} // load rtk = tk1 ^ lfsr2(tk2) ^ lfsr3(tk3) + bl p12 + movw r4, #0x3030 + movt r4, #0x3030 // r4 <- 0x30303030 + and r1, r4, r5, ror #14 // --- ror and masks to match fixslicing + and r2, r5, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r6, ror #14 + and r3, r6, r4, ror #4 + orr r3, r1, r3, ror #6 + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r3, r2, [r0], #8 + and r1, r4, r7, ror #14 + and r2, r7, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r8, ror #14 + and r3, r8, r4, ror #4 + orr r3, r1, r3, ror #6 + mvn r2, r2 // to save 1 NOT in Sbox calculations + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r3, r2, [r0], #8 + and r1, r4, r11, ror #14 + and r2, r11, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r12, ror #14 + and r3, r12, r4, ror #4 + orr r3, r1, r3, ror #6 + eor r2, r2, #0x0c000000 // add rconst + eor r2, r2, #0x00000003 // add rconst + mvn r2, r2 // to save 1 NOT in Sbox calculations + strd r3, r2, [r0], #8 + and r1, r4, r9, ror #14 + and r2, r9, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r10, ror #14 + and r3, r10, r4, ror #4 + orr r3, r1, r3, ror #6 + eor r3, r3, #0x00300000 // add rconst + mvn r2, r2 // to save 1 NOT in Sbox calculations + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r3, r2, [r0], #8 + orr r4, r4, r4, lsl #2 // r4 <- 0xf0f0f0f0 + and r5, r4, r5, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r6, r4, r6, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r7, r4, r7, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r8, r4, r8, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r9, r4, r9, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r10, r4, r10, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r11, r4, r11, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r12, r4, r12, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + eor r11, r11, #0x000c0000 // add rconst + mvn r11, r11 // to save 1 NOT in Sbox calculations + mvn r10, r10 // to save 1 NOT in Sbox calculations + strd r11, r10, [r0], #8 + mvn r6, r6 // to save 1 NOT in Sbox calculations + strd r5, r6, [r0], #8 + mvn r8, r8 // to save 1 NOT in Sbox calculations + strd r8, r12, [r0], #8 + eor r9, r9, #0x00c00000 // add rconst + mvn r9, r9 // to save 1 NOT in Sbox calculations + mvn r7, r7 + strd r9, r7, [r0], #8 + ldm r0, {r5-r12} // load rtk = tk1 ^ lfsr2(tk2) ^ lfsr3(tk3) + bl p14 + movw r4, #0xc3c3 + movt r4, #0xc3c3 // r4 <- 0xc3c3c3c3 + and r1, r4, r9, ror #10 // ror and mask to match fixslicing + and r2, r4, r12, ror #10 // ror and mask to match fixslicing + and r3, r4, r11, ror #10 // ror and mask to match fixslicing + mvn r1, r1 // to save 1 NOT in Sbox calculations + eor r2, r2, #0x03c00000 // add rconst + eor r3, r3, #0x00003000 // add rconst + mvn r3, r3 // to save 1 NOT in Sbox calculations + stmia.w r0!, {r1-r3} + and r1, r4, r10, ror #10 // ror and mask to match fixslicing + and r2, r4, r6, ror #10 // ror and mask to match fixslicing + and r3, r4, r7, ror #10 // ror and mask to match fixslicing + mvn r1, r1 // to save 1 NOT in Sbox calculations + mvn r2, r2 // to save 1 NOT in Sbox calculations + mvn r3, r3 // to save 1 NOT in Sbox calculations + stmia.w r0!, {r1-r3} + and r1, r4, r8, ror #10 // ror and mask to match fixslicing + and r2, r4, r5, ror #10 // ror and mask to match fixslicing + mvn r1, r1 // to save 1 NOT in Sbox calculations + strd r1, r2, [r0], #8 + and r4, r4, r4, lsr #6 // r4 <- 0x03030303 + and r1, r4, r5, ror #12 //--- ror and masks to match fixslicing + and r5, r5, r4, lsl #6 + orr r5, r1, r5, ror #28 + and r1, r4, r6, ror #12 + and r6, r6, r4, lsl #6 + orr r6, r1, r6, ror #28 + and r1, r4, r7, ror #12 + and r7, r7, r4, lsl #6 + orr r7, r1, r7, ror #28 + and r1, r4, r8, ror #12 + and r8, r8, r4, lsl #6 + orr r8, r1, r8, ror #28 + and r1, r4, r9, ror #12 + and r9, r9, r4, lsl #6 + orr r9, r1, r9, ror #28 + and r1, r4, r10, ror #12 + and r10, r10, r4, lsl #6 + orr r10, r1, r10, ror #28 + and r1, r4, r11, ror #12 + and r11, r11, r4, lsl #6 + orr r11, r1, r11, ror #28 + and r1, r4, r12, ror #12 + and r12, r12, r4, lsl #6 + orr r12, r1, r12, ror #28 //ror and masks to match fixslicing --- + mvn r7, r7 // to save 1 NOT in Sbox calculations + mvn r8, r8 // to save 1 NOT in Sbox calculations + strd r8, r7, [r0], #8 + mvn r9, r9 // to save 1 NOT in Sbox calculations + strd r9, r12, [r0], #8 + mvn r10, r10 // to save 1 NOT in Sbox calculations + strd r10, r5, [r0], #8 + mvn r6, r6 // to save 1 NOT in Sbox calculations + eor r11, r11, #0x03000000 // add rconst + eor r11, r11, #0x0000cc00 // add rconst + mvn r11, r11 // to save 1 NOT in Sbox calculations + strd r6, r11, [r0], #8 + ldm r0, {r5-r12} // load rtk = tk1 ^ lfsr2(tk2) ^ lfsr3(tk3) + movw r4, #0x3030 + movt r4, #0x3030 // r4 <- 0x30303030 + and r1, r4, r6, ror #30 + and r2, r6, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r5, ror #30 + and r2, r5, r4, ror #4 + orr r3, r3, r2, ror #22 + mvn r1, r1 // to save 1 NOT in Sbox calculations + strd r1, r3, [r0], #8 + and r1, r4, r8, ror #30 + and r2, r8, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r7, ror #30 + and r2, r7, r4, ror #4 + orr r3, r3, r2, ror #22 + mvn r1, r1 // to save 1 NOT in Sbox calculations + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r1, r3, [r0], #8 + and r1, r4, r12, ror #30 + and r2, r12, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r11, ror #30 + and r2, r11, r4, ror #4 + orr r3, r3, r2, ror #22 + eor r3, r3, #0x00030000 // add rconst + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r1, r3, [r0], #8 + and r1, r4, r10, ror #30 + and r2, r10, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r9, ror #30 + and r2, r9, r4, ror #4 + orr r3, r3, r2, ror #22 + eor r1, r1, #0x00000030 // add rconst + mvn r1, r1 // to save 1 NOT in Sbox calculations + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r1, r3, [r0], #8 + // COMMENT HERE FOR SKINNY-128-256 + orr r4, r4, r4, lsl #2 // r4 <- 0xf0f0f0f0 + and r5, r5, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r6, r6, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r7, r7, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r8, r8, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r9, r9, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r10, r10, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r11, r11, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r12, r12, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + eor r11, r11, #0x0000000c // add rconst + mvn r11, r11 // to save 1 NOT in Sbox calculations + mvn r10, r10 // to save 1 NOT in Sbox calculations + strd r11, r10, [r0], #8 + mvn r6, r6 // to save 1 NOT in Sbox calculations + strd r5, r6, [r0], #8 + mvn r8, r8 // to save 1 NOT in Sbox calculations + eor r12, r12, #0x000000c0 // add rconst + strd r8, r12, [r0], #8 + mvn r9, r9 // to save 1 NOT in Sbox calculations + eor r9, r9, #0x000000c0 // add rconst + mvn r7, r7 // to save 1 NOT in Sbox calculations + strd r9, r7, [r0], #8 + ldm r0, {r5-r12} // load rtk = tk1 ^ lfsr2(tk2) ^ lfsr3(tk3) + bl p2 // apply the permutation twice + movw r4, #0xc3c3 + movt r4, #0xc3c3 // r4 <- 0xc3c3c3c3 + and r1, r4, r9, ror #26 + and r2, r4, r12, ror #26 + and r3, r4, r11, ror #26 + mvn r1, r1 // to save 1 NOT in Sbox calculations + eor r2, r2, #0x000003c0 // add rconst + eor r3, r3, #0x00000300 // add rconst + eor r3, r3, #0x30000000 // add rconst + mvn r3, r3 // to save 1 NOT in Sbox calculations + stmia.w r0!, {r1-r3} + and r1, r4, r10, ror #26 + and r2, r4, r6, ror #26 + and r3, r4, r7, ror #26 + mvn r1, r1 // to save 1 NOT in Sbox calculations + mvn r2, r2 // to save 1 NOT in Sbox calculations + mvn r3, r3 // to save 1 NOT in Sbox calculations + stmia.w r0!, {r1-r3} + and r1, r4, r8, ror #26 + and r2, r4, r5, ror #26 + mvn r1, r1 // to save 1 NOT in Sbox calculations + stmia.w r0!, {r1-r2} + and r4, r4, r4, lsr #6 // r4 <- 0x03030303 + and r1, r4, r5, ror #28 // --- ror and masks to match fixslicing + and r5, r5, r4, lsl #6 + orr r5, r1, r5, ror #12 + and r1, r4, r6, ror #28 + and r6, r6, r4, lsl #6 + orr r6, r1, r6, ror #12 + and r1, r4, r7, ror #28 + and r7, r7, r4, lsl #6 + orr r7, r1, r7, ror #12 + and r1, r4, r8, ror #28 + and r8, r8, r4, lsl #6 + orr r8, r1, r8, ror #12 + and r1, r4, r9, ror #28 + and r9, r9, r4, lsl #6 + orr r9, r1, r9, ror #12 + and r1, r4, r10, ror #28 + and r10, r10, r4, lsl #6 + orr r10, r1, r10, ror #12 + and r1, r4, r11, ror #28 + and r11, r11, r4, lsl #6 + orr r11, r1, r11, ror #12 + and r1, r4, r12, ror #28 + and r12, r12, r4, lsl #6 + orr r12, r1, r12, ror #12 // ror and masks to match fixslicing --- + mvn r8, r8 // to save 1 NOT in Sbox calculations + mvn r7, r7 // to save 1 NOT in Sbox calculations + strd r8, r7, [r0], #8 + mvn r9, r9 // to save 1 NOT in Sbox calculations + strd r9, r12, [r0], #8 + eor r10, r10, #0x0c000000 // add rconst + mvn r10, r10 // to save 1 NOT in Sbox calculations + strd r10, r5, [r0], #8 + mvn r6, r6 // to save 1 NOT in Sbox calculations + eor r11, r11, #0xcc000000 // add rconst + eor r11, r11, #0x00000300 // add rconst + mvn r11, r11 // to save 1 NOT in Sbox calculations + strd r6, r11, [r0], #8 + ldm r0, {r5-r12} // load rtk = tk1 ^ lfsr2(tk2) ^ lfsr3(tk3) + bl p4 // apply the permutation 4 times + movw r4, #0x3030 + movt r4, #0x3030 // r4 <- 0x30303030 + and r1, r4, r5, ror #14 // --- ror and masks to match fixslicing + and r2, r5, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r6, ror #14 + and r3, r6, r4, ror #4 + orr r3, r1, r3, ror #6 + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r3, r2, [r0], #8 + and r1, r4, r7, ror #14 + and r2, r7, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r8, ror #14 + and r3, r8, r4, ror #4 + orr r3, r1, r3, ror #6 + mvn r2, r2 // to save 1 NOT in Sbox calculations + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r3, r2, [r0], #8 + and r1, r4, r11, ror #14 + and r2, r11, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r12, ror #14 + and r3, r12, r4, ror #4 + orr r3, r1, r3, ror #6 + eor r2, r2, #0x00000003 // add rconst + mvn r2, r2 // to save 1 NOT in Sbox calculations + strd r3, r2, [r0], #8 + and r1, r4, r9, ror #14 + and r2, r9, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r10, ror #14 + and r3, r10, r4, ror #4 + orr r3, r1, r3, ror #6 + eor r2, r2, #0x00300000 // add rconst + mvn r2, r2 // to save 1 NOT in Sbox calculations + eor r3, r3, #0x00300000 // add rconst + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r3, r2, [r0], #8 + orr r4, r4, r4, lsl #2 // r4 <- 0xf0f0f0f0 + and r5, r4, r5, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r6, r4, r6, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r7, r4, r7, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r8, r4, r8, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r9, r4, r9, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r10, r4, r10, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r11, r4, r11, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r12, r4, r12, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + eor r11, r11, #0x000c0000 // add rconst + mvn r11, r11 // to save 1 NOT in Sbox calculations + mvn r10, r10 // to save 1 NOT in Sbox calculations + mvn r6, r6 // to save 1 NOT in Sbox calculations + mvn r8, r8 // to save 1 NOT in Sbox calculations + eor r12, r12, #0x00f00000 // add rconst + eor r9, r9, #0x00c00000 // add rconst + mvn r9, r9 // to save 1 NOT in Sbox calculations + mvn r7, r7 + strd r11, r10, [r0], #8 + strd r5, r6, [r0], #8 + strd r8, r12, [r0], #8 + strd r9, r7, [r0], #8 + ldm r0, {r5-r12} // load rtk = tk1 ^ lfsr2(tk2) ^ lfsr3(tk3) + bl p6 + movw r4, #0xc3c3 + movt r4, #0xc3c3 // r4 <- 0xc3c3c3c3 + and r1, r4, r9, ror #10 // ror and mask to match fixslicing + and r2, r4, r12, ror #10 // ror and mask to match fixslicing + and r3, r4, r11, ror #10 // ror and mask to match fixslicing + mvn r1, r1 // to save 1 NOT in Sbox calculations + eor r2, r2, #0x00c00000 // add rconst + eor r3, r3, #0x03c00000 // add rconst + eor r3, r3, #0x00003000 // add rconst + mvn r3, r3 // to save 1 NOT in Sbox calculations + stmia.w r0!, {r1-r3} + and r1, r4, r10, ror #10 // ror and mask to match fixslicing + and r2, r4, r6, ror #10 // ror and mask to match fixslicing + and r3, r4, r7, ror #10 // ror and mask to match fixslicing + mvn r1, r1 // to save 1 NOT in Sbox calculations + mvn r2, r2 // to save 1 NOT in Sbox calculations + mvn r3, r3 // to save 1 NOT in Sbox calculations + stmia.w r0!, {r1-r3} + and r1, r4, r8, ror #10 // ror and mask to match fixslicing + and r2, r4, r5, ror #10 // ror and mask to match fixslicing + mvn r1, r1 // to save 1 NOT in Sbox calculations + strd r1, r2, [r0], #8 + and r4, r4, r4, lsr #6 // r4 <- 0x03030303 + and r1, r4, r5, ror #12 //--- ror and masks to match fixslicing + and r5, r5, r4, lsl #6 + orr r5, r1, r5, ror #28 + and r1, r4, r6, ror #12 + and r6, r6, r4, lsl #6 + orr r6, r1, r6, ror #28 + and r1, r4, r7, ror #12 + and r7, r7, r4, lsl #6 + orr r7, r1, r7, ror #28 + and r1, r4, r8, ror #12 + and r8, r8, r4, lsl #6 + orr r8, r1, r8, ror #28 + and r1, r4, r9, ror #12 + and r9, r9, r4, lsl #6 + orr r9, r1, r9, ror #28 + and r1, r4, r10, ror #12 + and r10, r10, r4, lsl #6 + orr r10, r1, r10, ror #28 + and r1, r4, r11, ror #12 + and r11, r11, r4, lsl #6 + orr r11, r1, r11, ror #28 + and r1, r4, r12, ror #12 + and r12, r12, r4, lsl #6 + orr r12, r1, r12, ror #28 //ror and masks to match fixslicing --- + mvn r7, r7 // to save 1 NOT in Sbox calculations + mvn r8, r8 // to save 1 NOT in Sbox calculations + strd r8, r7, [r0], #8 + mvn r9, r9 // to save 1 NOT in Sbox calculations + eor r12, r12, #0x00000c00 // add rconst + strd r9, r12, [r0], #8 + eor r10, r10, #0x00000c00 // add rconst + mvn r10, r10 // to save 1 NOT in Sbox calculations + strd r10, r5, [r0], #8 + mvn r6, r6 // to save 1 NOT in Sbox calculations + eor r11, r11, #0x03000000 // add rconst + eor r11, r11, #0x0000c000 // add rconst + mvn r11, r11 // to save 1 NOT in Sbox calculations + strd r6, r11, [r0], #8 + ldm r0, {r5-r12} // load rtk = tk1 ^ lfsr2(tk2) ^ lfsr3(tk3) + bl p8 + movw r4, #0x3030 + movt r4, #0x3030 // r4 <- 0x30303030 + and r1, r4, r6, ror #30 + and r2, r6, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r5, ror #30 + and r2, r5, r4, ror #4 + orr r3, r3, r2, ror #22 + mvn r1, r1 // to save 1 NOT in Sbox calculations + strd r1, r3, [r0], #8 + and r1, r4, r8, ror #30 + and r2, r8, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r7, ror #30 + and r2, r7, r4, ror #4 + orr r3, r3, r2, ror #22 + mvn r1, r1 // to save 1 NOT in Sbox calculations + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r1, r3, [r0], #8 + and r1, r4, r12, ror #30 + and r2, r12, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r11, ror #30 + and r2, r11, r4, ror #4 + orr r3, r3, r2, ror #22 + eor r3, r3, #0x00000030 // add rconst + eor r3, r3, #0x00030000 // add rconst + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r1, r3, [r0], #8 + and r1, r4, r10, ror #30 + and r2, r10, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r9, ror #30 + and r2, r9, r4, ror #4 + orr r3, r3, r2, ror #22 + mvn r1, r1 // to save 1 NOT in Sbox calculations + eor r3, r3, #0x00000030 // add rconst + mvn r3, r3 // to save 1 NOT in Sbox calculations + strd r1, r3, [r0] + add.w sp, #4 + pop {r0-r12, r14} + bx lr + +/****************************************************************************** +* Compute TK = rearrange(perm(TK ^ TK1)) for all rounds. +* The function 'rearrange' aims at reording bits for all round tweakeys to +* match the fixsliced implementation of the SKINNY block cipher. +******************************************************************************/ +@ void tkschedule_perm_tk1(u32* rtk) +.global tkschedule_perm_tk1 +.type tkschedule_perm_tk1,%function +.align 2 +tkschedule_perm_tk1: + push {r0-r12, r14} + sub.w sp, #32 // to store packed tk1 + ldm r1, {r5,r7,r9,r11} // load the 1st block in r5,r7,r9,r11 + ldm r2, {r6,r8,r10,r12} // load the 1st block in r5,r7,r9,r11 + movw r2, #0x5555 + movt r2, #0x5555 // r2 <- 0x55555555 + movw r3, #0x3030 + movt r3, #0x3030 // r3 <- 0x30303030 + bl packing + stm sp, {r5-r12} + movw r4, #0xf0f0 + movt r4, #0xf0f0 + and r1, r11, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r2, r10, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r3, r5, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + stmia r0!, {r1-r3} + and r1, r6, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r2, r8, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r3, r12, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + stmia r0!, {r1-r3} + and r1, r9, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r2, r7, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + strd r1, r2, [r0], #8 + bl p2 // apply the permutation twice + movw r4, #0xc3c3 + movt r4, #0xc3c3 // r4 <- 0xc3c3c3c3 + and r1, r4, r9, ror #26 + and r2, r4, r12, ror #26 + and r3, r4, r11, ror #26 + stmia.w r0!, {r1-r3} + and r1, r4, r10, ror #26 + and r2, r4, r6, ror #26 + and r3, r4, r7, ror #26 + stmia.w r0!, {r1-r3} + and r1, r4, r8, ror #26 + and r2, r4, r5, ror #26 + stmia.w r0!, {r1-r2} + and r4, r4, r4, lsr #6 // r4 <- 0x03030303 + and r1, r4, r8, ror #28 // --- ror and masks to match fixslicing + and r2, r8, r4, lsl #6 + orr r2, r1, r2, ror #12 + and r1, r4, r7, ror #28 + and r3, r7, r4, lsl #6 + orr r3, r1, r3, ror #12 + strd r2, r3, [r0], #8 + and r1, r4, r9, ror #28 + and r2, r9, r4, lsl #6 + orr r2, r1, r2, ror #12 + and r1, r4, r12, ror #28 + and r3, r12, r4, lsl #6 + orr r3, r1, r3, ror #12 + strd r2, r3, [r0], #8 + and r1, r4, r10, ror #28 + and r2, r10, r4, lsl #6 + orr r2, r1, r2, ror #12 + and r1, r4, r5, ror #28 + and r3, r5, r4, lsl #6 + orr r3, r1, r3, ror #12 + strd r2, r3, [r0], #8 + and r1, r4, r6, ror #28 + and r2, r6, r4, lsl #6 + orr r2, r1, r2, ror #12 + and r1, r4, r11, ror #28 + and r3, r11, r4, lsl #6 + orr r3, r1, r3, ror #12 + strd r2, r3, [r0], #8 + bl p2 // apply the permutation twice + movw r4, #0x3030 + movt r4, #0x3030 // r4 <- 0x30303030 + and r1, r4, r5, ror #14 // --- ror and masks to match fixslicing + and r2, r5, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r6, ror #14 + and r3, r6, r4, ror #4 + orr r3, r1, r3, ror #6 + strd r3, r2, [r0], #8 + and r1, r4, r7, ror #14 + and r2, r7, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r8, ror #14 + and r3, r8, r4, ror #4 + orr r3, r1, r3, ror #6 + strd r3, r2, [r0], #8 + and r1, r4, r11, ror #14 + and r2, r11, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r12, ror #14 + and r3, r12, r4, ror #4 + orr r3, r1, r3, ror #6 + strd r3, r2, [r0], #8 + and r1, r4, r9, ror #14 + and r2, r9, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r10, ror #14 + and r3, r10, r4, ror #4 + orr r3, r1, r3, ror #6 + strd r3, r2, [r0], #8 + orr r4, r4, r4, lsl #2 // r4 <- 0xf0f0f0f0 + and r1, r4, r11, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r2, r4, r10, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r3, r4, r5, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + stmia r0!, {r1-r3} + and r1, r4, r6, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r2, r4, r8, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r3, r4, r12, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + stmia r0!, {r1-r3} + and r1, r4, r9, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r2, r4, r7, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + strd r1, r2, [r0], #8 + bl p2 // apply the permutation twice + movw r4, #0xc3c3 + movt r4, #0xc3c3 // r4 <- 0xc3c3c3c3 + and r1, r4, r9, ror #10 // ror and mask to match fixslicing + and r2, r4, r12, ror #10 // ror and mask to match fixslicing + and r3, r4, r11, ror #10 // ror and mask to match fixslicing + stmia r0!, {r1-r3} + and r1, r4, r10, ror #10 // ror and mask to match fixslicing + and r2, r4, r6, ror #10 // ror and mask to match fixslicing + and r3, r4, r7, ror #10 // ror and mask to match fixslicing + stmia r0!, {r1-r3} + and r1, r4, r8, ror #10 // ror and mask to match fixslicing + and r2, r4, r5, ror #10 // ror and mask to match fixslicing + strd r1, r2, [r0], #8 + and r4, r4, r4, lsr #6 // r4 <- 0x03030303 + and r1, r4, r8, ror #12 // --- ror and masks to match fixslicing + and r2, r8, r4, lsl #6 + orr r2, r1, r2, ror #28 + and r1, r4, r7, ror #12 + and r3, r7, r4, lsl #6 + orr r3, r1, r3, ror #28 + strd r2, r3, [r0], #8 + and r1, r4, r9, ror #12 + and r2, r9, r4, lsl #6 + orr r2, r1, r2, ror #28 + and r1, r4, r12, ror #12 + and r3, r12, r4, lsl #6 + orr r3, r1, r3, ror #28 + strd r2, r3, [r0], #8 + and r1, r4, r10, ror #12 + and r2, r10, r4, lsl #6 + orr r2, r1, r2, ror #28 + and r1, r4, r5, ror #12 + and r3, r5, r4, lsl #6 + orr r3, r1, r3, ror #28 + strd r2, r3, [r0], #8 + and r1, r4, r6, ror #12 + and r2, r6, r4, lsl #6 + orr r2, r1, r2, ror #28 + and r1, r4, r11, ror #12 + and r3, r11, r4, lsl #6 + orr r3, r1, r3, ror #28 + strd r2, r3, [r0], #8 + bl p2 // apply the permutation twice + movw r4, #0x3030 + movt r4, #0x3030 // r4 <- 0x30303030 + and r1, r4, r6, ror #30 + and r2, r6, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r5, ror #30 + and r2, r5, r4, ror #4 + orr r3, r3, r2, ror #22 + strd r1, r3, [r0], #8 + and r1, r4, r8, ror #30 + and r2, r8, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r7, ror #30 + and r2, r7, r4, ror #4 + orr r3, r3, r2, ror #22 + strd r1, r3, [r0], #8 + and r1, r4, r12, ror #30 + and r2, r12, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r11, ror #30 + and r2, r11, r4, ror #4 + orr r3, r3, r2, ror #22 + strd r1, r3, [r0], #8 + and r1, r4, r10, ror #30 + and r2, r10, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r9, ror #30 + and r2, r9, r4, ror #4 + orr r3, r3, r2, ror #22 + strd r1, r3, [r0], #8 + orr r4, r4, r4, lsl #2 // r4 <- 0xf0f0f0f0 + and r1, r11, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r2, r10, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r3, r5, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + stmia r0!, {r1-r3} + and r1, r6, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r2, r8, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r3, r12, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + stmia r0!, {r1-r3} + and r1, r9, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r2, r7, r4 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + strd r1, r2, [r0], #8 + bl p2 // apply the permutation twice + movw r4, #0xc3c3 + movt r4, #0xc3c3 // r4 <- 0xc3c3c3c3 + and r1, r4, r9, ror #26 + and r2, r4, r12, ror #26 + strd r1, r2, [r0], #8 + and r1, r4, r11, ror #26 + and r2, r4, r10, ror #26 + strd r1, r2, [r0], #8 + and r1, r4, r6, ror #26 + and r2, r4, r7, ror #26 + strd r1, r2, [r0], #8 + and r1, r4, r8, ror #26 + and r2, r4, r5, ror #26 + strd r1, r2, [r0], #8 + and r4, r4, r4, lsr #6 // r4 <- 0x03030303 + and r1, r4, r8, ror #28 // --- ror and masks to match fixslicing + and r2, r8, r4, lsl #6 + orr r2, r1, r2, ror #12 + and r1, r4, r7, ror #28 + and r3, r7, r4, lsl #6 + orr r3, r1, r3, ror #12 + strd r2, r3, [r0], #8 + and r1, r4, r9, ror #28 + and r2, r9, r4, lsl #6 + orr r2, r1, r2, ror #12 + and r1, r4, r12, ror #28 + and r3, r12, r4, lsl #6 + orr r3, r1, r3, ror #12 + strd r2, r3, [r0], #8 + and r1, r4, r10, ror #28 + and r2, r10, r4, lsl #6 + orr r2, r1, r2, ror #12 + and r1, r4, r5, ror #28 + and r3, r5, r4, lsl #6 + orr r3, r1, r3, ror #12 + strd r2, r3, [r0], #8 + and r1, r4, r6, ror #28 + and r2, r6, r4, lsl #6 + orr r2, r1, r2, ror #12 + and r1, r4, r11, ror #28 + and r3, r11, r4, lsl #6 + orr r3, r1, r3, ror #12 + strd r2, r3, [r0], #8 + bl p2 // apply the permutation twice + movw r4, #0x3030 + movt r4, #0x3030 // r4 <- 0x30303030 + and r1, r4, r5, ror #14 // --- ror and masks to match fixslicing + and r2, r5, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r6, ror #14 + and r3, r6, r4, ror #4 + orr r3, r1, r3, ror #6 + strd r3, r2, [r0], #8 + and r1, r4, r7, ror #14 + and r2, r7, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r8, ror #14 + and r3, r8, r4, ror #4 + orr r3, r1, r3, ror #6 + strd r3, r2, [r0], #8 + and r1, r4, r11, ror #14 + and r2, r11, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r12, ror #14 + and r3, r12, r4, ror #4 + orr r3, r1, r3, ror #6 + strd r3, r2, [r0], #8 + and r1, r4, r9, ror #14 + and r2, r9, r4, ror #4 + orr r2, r1, r2, ror #6 + and r1, r4, r10, ror #14 + and r3, r10, r4, ror #4 + orr r3, r1, r3, ror #6 + strd r3, r2, [r0], #8 + orr r4, r4, r4, lsl #2 // r4 <- 0xf0f0f0f0 + and r1, r4, r11, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r2, r4, r10, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r3, r4, r5, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + stmia r0!, {r1-r3} + and r1, r4, r6, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r2, r4, r8, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r3, r4, r12, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + stmia r0!, {r1-r3} + and r1, r4, r9, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + and r2, r4, r7, ror #16 // tk &= 0xf0f0f0f0 (extract rows 1&2 only) + strd r1, r2, [r0], #8 + bl p2 // apply the permutation twice + movw r4, #0xc3c3 + movt r4, #0xc3c3 // r4 <- 0xc3c3c3c3 + and r1, r4, r9, ror #10 // ror and mask to match fixslicing + and r2, r4, r12, ror #10 // ror and mask to match fixslicing + and r3, r4, r11, ror #10 // ror and mask to match fixslicing + stmia.w r0!, {r1-r3} + and r1, r4, r10, ror #10 // ror and mask to match fixslicing + and r2, r4, r6, ror #10 // ror and mask to match fixslicing + and r3, r4, r7, ror #10 // ror and mask to match fixslicing + stmia.w r0!, {r1-r3} + and r1, r4, r8, ror #10 // ror and mask to match fixslicing + and r2, r4, r5, ror #10 // ror and mask to match fixslicing + strd r1, r2, [r0], #8 + and r4, r4, r4, lsr #6 // r4 <- 0x03030303 + and r1, r4, r8, ror #12 // --- ror and masks to match fixslicing + and r2, r8, r4, lsl #6 + orr r2, r1, r2, ror #28 + and r1, r4, r7, ror #12 + and r3, r7, r4, lsl #6 + orr r3, r1, r3, ror #28 + strd r2, r3, [r0], #8 + and r1, r4, r9, ror #12 + and r2, r9, r4, lsl #6 + orr r2, r1, r2, ror #28 + and r1, r4, r12, ror #12 + and r3, r12, r4, lsl #6 + orr r3, r1, r3, ror #28 + strd r2, r3, [r0], #8 + and r1, r4, r10, ror #12 + and r2, r10, r4, lsl #6 + orr r2, r1, r2, ror #28 + and r1, r4, r5, ror #12 + and r3, r5, r4, lsl #6 + orr r3, r1, r3, ror #28 + strd r2, r3, [r0], #8 + and r1, r4, r6, ror #12 + and r2, r6, r4, lsl #6 + orr r2, r1, r2, ror #28 + and r1, r4, r11, ror #12 + and r3, r11, r4, lsl #6 + orr r3, r1, r3, ror #28 + strd r2, r3, [r0], #8 + ldmia.w sp!, {r5-r12} + movw r4, #0x3030 + movt r4, #0x3030 // r4 <- 0x30303030 + and r1, r4, r6, ror #30 + and r2, r6, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r5, ror #30 + and r2, r5, r4, ror #4 + orr r3, r3, r2, ror #22 + strd r1, r3, [r0], #8 + and r1, r4, r8, ror #30 + and r2, r8, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r7, ror #30 + and r2, r7, r4, ror #4 + orr r3, r3, r2, ror #22 + strd r1, r3, [r0], #8 + and r1, r4, r12, ror #30 + and r2, r12, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r11, ror #30 + and r2, r11, r4, ror #4 + orr r3, r3, r2, ror #22 + strd r1, r3, [r0], #8 + and r1, r4, r10, ror #30 + and r2, r10, r4, ror #4 + orr r1, r1, r2, ror #22 + and r3, r4, r9, ror #30 + and r2, r9, r4, ror #4 + orr r3, r3, r2, ror #22 + strd r1, r3, [r0] + pop {r0-r12, r14} + bx lr + +/****************************************************************************** +* Quadruple round of the SKINNY block cipher in a bitsliced manner. +******************************************************************************/ +.align 2 +quadruple_round: + str.w r14, [sp] // store r14 on the stack + orr r4, r5, r6 // state[0] | state[1] + eor r8, r8, r4 // state[3] ^= (state[0] | state[1]) + orr r4, r9, r10 // state[4] | state[5] + eor r12, r12, r4 // state[7] ^= (state[4] | state[5]) + orr r4, r11, r10 // state[6] | state[5] + eor r6, r6, r4 // state[1] ^= (state[6] | state[5]) + and r4, r8, r12 // state[3] & state[7] + eor r7, r7, r4 // state[2] ^= (state[3] & state[7]) + orn r4, r9, r12 // ~state[7] | state[4] + eor r11, r11, r4 // state[6] ^= (~state[7] | state[4]) + orn r4, r7, r6 // state[2] | ~state[1] + eor r5, r5, r4 // state[0] ^= (state[2] | ~state[1]) + orn r4, r7, r8 // ~state[3] | state[2] + eor r9, r9, r4 // state[4] ^= (~state[3] | state[2]) + and r4, r5, r11 // state[0] & state[6] + eor r10, r10, r4 // state[5] ^= (state[6] & state[0]) + ldmia.w r1!, {r2-r4,r14} // load rtk_2_3 in r0,r2,r3,r4 + eor r5, r5, r2 // add rtk_2_3 + rconst + eor r6, r6, r3 // add rtk_2_3 + rconst + eor r7, r7, r4 // add rtk_2_3 + rconst + eor r8, r8, r14 // add rtk_2_3 + rconst + ldmia.w r1!, {r2-r4,r14} // load rtk_2_3 in r0,r2,r3,r4 + eor r9, r9, r2 // add rtk_2_3 + rconst + eor r10, r10, r3 // add rtk_2_3 + rconst + eor r11, r11, r4 // add rtk_2_3 + rconst + eor r12, r12, r14 // add rtk_2_3 + rconst + ldmia.w r0!, {r2-r4,r14} // load rtk_1 in r0,r2,r3,r4 + eor r5, r5, r2 // add rtk_1 + eor r6, r6, r3 // add rtk_1 + eor r7, r7, r4 // add rtk_1 + eor r8, r8, r14 // add rtk_1 + ldmia.w r0!, {r2-r4, r14} // load rtk_1 in r0,r2,r3,r4 + eor r9, r9, r2 // add rtk_1 + eor r10, r10, r3 // add rtk_1 + eor r11, r11, r4 // add rtk_1 + eor r12, r12, r14 // add rtk_1 + movw r2, #0x3030 + movt r2, #0x3030 // r2 <- 0x30303030 + and r4, r2, r5, ror #30 // --- mixcolumns + eor r5, r5, r4, ror #24 + and r4, r2, r5, ror #18 + eor r5, r5, r4, ror #2 + and r4, r2, r5, ror #6 + eor r5, r5, r4, ror #4 + and r4, r2, r6, ror #30 + eor r6, r6, r4, ror #24 + and r4, r2, r6, ror #18 + eor r6, r6, r4, ror #2 + and r4, r2, r6, ror #6 + eor r6, r6, r4, ror #4 + and r4, r2, r7, ror #30 + eor r7, r7, r4, ror #24 + and r4, r2, r7, ror #18 + eor r7, r7, r4, ror #2 + and r4, r2, r7, ror #6 + eor r7, r7, r4, ror #4 + and r4, r2, r8, ror #30 + eor r8, r8, r4, ror #24 + and r4, r2, r8, ror #18 + eor r8, r8, r4, ror #2 + and r4, r2, r8, ror #6 + eor r8, r8, r4, ror #4 + and r4, r2, r9, ror #30 + eor r9, r9, r4, ror #24 + and r4, r2, r9, ror #18 + eor r9, r9, r4, ror #2 + and r4, r2, r9, ror #6 + eor r9, r9, r4, ror #4 + and r4, r2, r10, ror #30 + eor r10, r10, r4, ror #24 + and r4, r2, r10, ror #18 + eor r10, r10, r4, ror #2 + and r4, r2, r10, ror #6 + eor r10, r10, r4, ror #4 + and r4, r2, r11, ror #30 + eor r11, r11, r4, ror #24 + and r4, r2, r11, ror #18 + eor r11, r11, r4, ror #2 + and r4, r2, r11, ror #6 + eor r11, r11, r4, ror #4 + and r4, r2, r12, ror #30 + eor r12, r12, r4, ror #24 + and r4, r2, r12, ror #18 + eor r12, r12, r4, ror #2 + and r4, r2, r12, ror #6 + eor r12, r12, r4, ror #4 // mixcolumns --- + orr r4, r7, r8 // state[2] | state[3] + eor r9, r9, r4 // state[4] ^= (state[2] | state[3]) + orr r4, r6, r11 // state[1] | state[6] + eor r10, r10, r4 // state[5] ^= (state[6] | state[1]) + orr r4, r5, r6 // state[0] | state[1] + eor r8, r8, r4 // state[3] ^= (state[0] | state[1]) + and r4, r9, r10 // state[4] & state[5] + eor r12, r12, r4 // state[7] ^= (state[4] & state[5]) + orn r4, r11, r10 // ~state[5] | state[6] + eor r5, r5, r4 // state[0] ^= (~state[5] | state[6]) + orn r4, r12, r8 // state[7] | ~state[3] + eor r7, r7, r4 // state[2] ^= (state[7] | ~state[3]) + orn r4, r12, r9 // state[7] | ~state[4] + eor r11, r11, r4 // state[6] ^= (~state[4] | state[7]) + and r4, r5, r7 // state[0] & state[2] + eor r6, r6, r4 // state[1] ^= (state[0] & state[2]) + ldmia.w r1!, {r2-r4,r14} // load rtk_2_3 in r0,r2,r3,r4 + eor r5, r5, r2 // add rtk_2_3 + rconst + eor r6, r6, r3 // add rtk_2_3 + rconst + eor r7, r7, r4 // add rtk_2_3 + rconst + eor r8, r8, r14 // add rtk_2_3 + rconst + ldmia.w r1!, {r2-r4,r14} // load rtk_2_3 in r0,r2,r3,r4 + eor r9, r9, r2 // add rtk_2_3 + rconst + eor r10, r10, r3 // add rtk_2_3 + rconst + eor r11, r11, r4 // add rtk_2_3 + rconst + eor r12, r12, r14 // add rtk_2_3 + rconst + ldmia.w r0!, {r2-r4,r14} // load rtk_1 in r0,r2,r3,r4 + eor r5, r5, r2 // add rtk_1 + eor r6, r6, r3 // add rtk_1 + eor r7, r7, r4 // add rtk_1 + eor r8, r8, r14 // add rtk_1 + ldmia.w r0!, {r2-r4, r14} // load rtk_1 in r0,r2,r3,r4 + eor r9, r9, r2 // add rtk_1 + eor r10, r10, r3 // add rtk_1 + eor r11, r11, r4 // add rtk_1 + eor r12, r12, r14 // add rtk_1 + movw r2, #0x3030 + movt r2, #0x3030 //r2 <- 0x30303030 + and r4, r2, r5, ror #16 // --- mixcolumns + eor r5, r5, r4, ror #30 + and r4, r2, r5, ror #28 + eor r5, r5, r4 + and r4, r2, r5, ror #16 + eor r5, r5, r4, ror #2 + and r4, r2, r6, ror #16 + eor r6, r6, r4, ror #30 + and r4, r2, r6, ror #28 + eor r6, r6, r4 + and r4, r2, r6, ror #16 + eor r6, r6, r4, ror #2 + and r4, r2, r7, ror #16 + eor r7, r7, r4, ror #30 + and r4, r2, r7, ror #28 + eor r7, r7, r4 + and r4, r2, r7, ror #16 + eor r7, r7, r4, ror #2 + and r4, r2, r8, ror #16 + eor r8, r8, r4, ror #30 + and r4, r2, r8, ror #28 + eor r8, r8, r4 + and r4, r2, r8, ror #16 + eor r8, r8, r4, ror #2 + and r4, r2, r9, ror #16 + eor r9, r9, r4, ror #30 + and r4, r2, r9, ror #28 + eor r9, r9, r4 + and r4, r2, r9, ror #16 + eor r9, r9, r4, ror #2 + and r4, r2, r10, ror #16 + eor r10, r10, r4, ror #30 + and r4, r2, r10, ror #28 + eor r10, r10, r4 + and r4, r2, r10, ror #16 + eor r10, r10, r4, ror #2 + and r4, r2, r11, ror #16 + eor r11, r11, r4, ror #30 + and r4, r2, r11, ror #28 + eor r11, r11, r4 + and r4, r2, r11, ror #16 + eor r11, r11, r4, ror #2 + and r4, r2, r12, ror #16 + eor r12, r12, r4, ror #30 + and r4, r2, r12, ror #28 + eor r12, r12, r4 + and r4, r2, r12, ror #16 + eor r12, r12, r4, ror #2 // mixcolumns --- + orr r4, r12, r9 // state[7] | state[4] + eor r11, r11, r4 // state[6] ^= (state[7] | state[4]) + orr r4, r5, r8 // state[0] | state[3] + eor r6, r6, r4 // state[1] ^= (state[0] | state[3]) + orr r4, r7, r8 // state[2] | state[3] + eor r9, r9, r4 // state[4] ^= (state[2] | state[3]) + and r4, r6, r11 // state[1] & state[6] + eor r10, r10, r4 // state[5] ^= (state[6] & state[1]) + orn r4, r5, r6 // ~state[1] | state[0] + eor r7, r7, r4 // state[2] ^= (~state[1] | state[0]) + orn r4, r10, r9 // state[5] | ~state[4] + eor r12, r12, r4 // state[7] ^= (state[5] | ~state[4]) + orn r4, r10, r11 // ~state[6] | state[5] + eor r5, r5, r4 // state[0] ^= (~state[6] | state[5]) + and r4, r7, r12 // state[2] & state[7] + eor r8, r8, r4 // state[3] ^= (state[2] & state[7]) + ldmia.w r1!, {r2-r4,r14} // load rtk_2_3 in r0,r2,r3,r4 + eor r5, r5, r2 // add rtk_2_3 + rconst + eor r6, r6, r3 // add rtk_2_3 + rconst + eor r7, r7, r4 // add rtk_2_3 + rconst + eor r8, r8, r14 // add rtk_2_3 + rconst + ldmia.w r1!, {r2-r4,r14} // load rtk_2_3 in r0,r2,r3,r4 + eor r9, r9, r2 // add rtk_2_3 + rconst + eor r10, r10, r3 // add rtk_2_3 + rconst + eor r11, r11, r4 // add rtk_2_3 + rconst + eor r12, r12, r14 // add rtk_2_3 + rconst + ldmia.w r0!, {r2-r4,r14} // load rtk_1 in r0,r2,r3,r4 + eor r5, r5, r2 // add rtk_1 + eor r6, r6, r3 // add rtk_1 + eor r7, r7, r4 // add rtk_1 + eor r8, r8, r14 // add rtk_1 + ldmia.w r0!, {r2-r4, r14} // load rtk_1 in r0,r2,r3,r4 + eor r9, r9, r2 // add rtk_1 + eor r10, r10, r3 // add rtk_1 + eor r11, r11, r4 // add rtk_1 + eor r12, r12, r14 // add rtk_1 + movw r2, #0x3030 + movt r2, #0x3030 // r2 <- 0x30303030 + and r4, r2, r5, ror #10 // --- mixcolumns + eor r5, r5, r4, ror #4 + and r4, r2, r5, ror #6 + eor r5, r5, r4, ror #6 + and r4, r2, r5, ror #26 + eor r5, r5, r4 + and r4, r2, r6, ror #10 + eor r6, r6, r4, ror #4 + and r4, r2, r6, ror #6 + eor r6, r6, r4, ror #6 + and r4, r2, r6, ror #26 + eor r6, r6, r4 + and r4, r2, r7, ror #10 + eor r7, r7, r4, ror #4 + and r4, r2, r7, ror #6 + eor r7, r7, r4, ror #6 + and r4, r2, r7, ror #26 + eor r7, r7, r4 + and r4, r2, r8, ror #10 + eor r8, r8, r4, ror #4 + and r4, r2, r8, ror #6 + eor r8, r8, r4, ror #6 + and r4, r2, r8, ror #26 + eor r8, r8, r4 + and r4, r2, r9, ror #10 + eor r9, r9, r4, ror #4 + and r4, r2, r9, ror #6 + eor r9, r9, r4, ror #6 + and r4, r2, r9, ror #26 + eor r9, r9, r4 + and r4, r2, r10, ror #10 + eor r10, r10, r4, ror #4 + and r4, r2, r10, ror #6 + eor r10, r10, r4, ror #6 + and r4, r2, r10, ror #26 + eor r10, r10, r4 + and r4, r2, r11, ror #10 + eor r11, r11, r4, ror #4 + and r4, r2, r11, ror #6 + eor r11, r11, r4, ror #6 + and r4, r2, r11, ror #26 + eor r11, r11, r4 + and r4, r2, r12, ror #10 + eor r12, r12, r4, ror #4 + and r4, r2, r12, ror #6 + eor r12, r12, r4, ror #6 + and r4, r2, r12, ror #26 + eor r12, r12, r4 // mixcolumns --- + orr r4, r10, r11 // state[5] | state[6] + eor r5, r5, r4 // state[0] ^= (state[5] | state[6]) + orr r4, r7, r9 // state[2] | state[4] + eor r8, r8, r4 // state[3] ^= (state[2] | state[4]) + orr r4, r9, r12 // state[7] | state[4] + eor r11, r11, r4 // state[6] ^= (state[7] | state[4]) + and r4, r5, r8 // state[0] & state[3] + eor r6, r6, r4 // state[1] ^= (state[0] & state[3]) + orn r4, r7, r8 // ~state[3] | state[2] + eor r12, r12, r4 // state[7] ^= (~state[3] | state[2]) + orn r4, r6, r11 // state[1] | ~state[6] + eor r10, r10, r4 // state[5] ^= (state[1] | ~state[6]) + orn r4, r6, r5 // ~state[0] | state[1] + eor r7, r7, r4 // state[2] ^= (~state[0] | state[1]) + and r4, r12, r10 // state[7] & state[5] + eor r9, r9, r4 // state[4] ^= (state[7] & state[5]) + ldmia.w r1!, {r2-r4,r14} // load rtk_2_3 in r0,r2,r3,r4 + eor r5, r5, r2 // add rtk_2_3 + rconst + eor r6, r6, r3 // add rtk_2_3 + rconst + eor r7, r7, r4 // add rtk_2_3 + rconst + eor r8, r8, r14 // add rtk_2_3 + rconst + ldmia.w r1!, {r2-r4,r14} // load rtk_2_3 in r0,r2,r3,r4 + eor r9, r9, r2 // add rtk_2_3 + rconst + eor r10, r10, r3 // add rtk_2_3 + rconst + eor r11, r11, r4 // add rtk_2_3 + rconst + eor r12, r12, r14 // add rtk_2_3 + rconst + ldmia.w r0!, {r2-r4,r14} // load rtk_1 in r0,r2,r3,r4 + eor r5, r5, r2 // add rtk_1 + eor r6, r6, r3 // add rtk_1 + eor r7, r7, r4 // add rtk_1 + eor r8, r8, r14 // add rtk_1 + ldmia.w r0!, {r2-r4, r14} // load rtk_1 in r0,r2,r3,r4 + eor r9, r9, r2 // add rtk_1 + eor r10, r10, r3 // add rtk_1 + eor r11, r11, r4 // add rtk_1 + eor r12, r12, r14 // add rtk_1 + movw r2, #0x3030 + movt r2, #0x3030 // r2 <- 0x30303030 + and r4, r2, r5, ror #4 // --- mixcolumns + eor r5, r5, r4, ror #26 + and r4, r2, r5 + eor r5, r5, r4, ror #4 + and r4, r2, r5, ror #4 + eor r5, r5, r4, ror #22 + and r4, r2, r6, ror #4 + eor r6, r6, r4, ror #26 + and r4, r2, r6 + eor r6, r6, r4, ror #4 + and r4, r2, r6, ror #4 + eor r6, r6, r4, ror #22 + and r4, r2, r7, ror #4 + eor r7, r7, r4, ror #26 + and r4, r2, r7 + eor r7, r7, r4, ror #4 + and r4, r2, r7, ror #4 + eor r7, r7, r4, ror #22 + and r4, r2, r8, ror #4 + eor r8, r8, r4, ror #26 + and r4, r2, r8 + eor r8, r8, r4, ror #4 + and r4, r2, r8, ror #4 + eor r8, r8, r4, ror #22 + and r4, r2, r9, ror #4 + eor r9, r9, r4, ror #26 + and r4, r2, r9 + eor r9, r9, r4, ror #4 + and r4, r2, r9, ror #4 + eor r9, r9, r4, ror #22 + and r4, r2, r10, ror #4 + eor r10, r10, r4, ror #26 + and r4, r2, r10 + eor r10, r10, r4, ror #4 + and r4, r2, r10, ror #4 + eor r10, r10, r4, ror #22 + and r4, r2, r11, ror #4 + eor r11, r11, r4, ror #26 + and r4, r2, r11 + eor r11, r11, r4, ror #4 + and r4, r2, r11, ror #4 + eor r11, r11, r4, ror #22 + and r4, r2, r12, ror #4 + eor r12, r12, r4, ror #26 + and r4, r2, r12 + eor r12, r12, r4, ror #4 + and r4, r2, r12, ror #4 + eor r12, r12, r4, ror #22 // mixcolumns --- + // renaming slices for the sbox calculations + // can be avoided with an octuple_round routine=>increase of the code size + ldr.w r14, [sp] // restore link register + eor r5, r5, r6 // --- swap state[0] with state[1] + eor r6, r6, r5 + eor r5, r5, r6 // swap state[0] with state[1] --- + eor r7, r7, r8 // --- swap state[2] with state[3] + eor r8, r8, r7 + eor r7, r7, r8 // swap state[2] with state[3] --- + eor r9, r9, r12 // --- swap state[4] with state[7] + eor r12, r12, r9 + eor r9, r9, r12 // swap state[4] with state[7] --- + eor r11, r11, r10 // --- swap state[6] with state[5] + eor r10, r10, r11 + eor r11, r11, r10 // swap state[6] with state[5] --- + bx lr + +/****************************************************************************** +* Inverse quadruple round of fixsliced SKINNY-128 tweakable block cipher. +* The 2 blocks are stored in r5-r12 (fixsliced representation). +******************************************************************************/ +.align 2 +inv_quadruple_round: + str.w r14, [sp] // store r14 on the stack + eor r5, r5, r6 // --- swap state[0] with state[1] + eor r6, r6, r5 + eor r5, r5, r6 // swap state[0] with state[1] --- + eor r7, r7, r8 // --- swap state[2] with state[3] + eor r8, r8, r7 + eor r7, r7, r8 // swap state[2] with state[3] --- + eor r9, r9, r12 // --- swap state[4] with state[7] + eor r12, r12, r9 + eor r9, r9, r12 // swap state[4] with state[7] --- + eor r11, r11, r10 // --- swap state[6] with state[5] + eor r10, r10, r11 + eor r11, r11, r10 // swap state[6] with state[5] --- + movw r2, #0x3030 + movt r2, #0x3030 // mask for ininv_mixcolumns + and r4, r2, r5, ror #4 // --- inv_mixcolumns_3 + eor r5, r5, r4, ror #22 + and r4, r2, r5 + eor r5, r5, r4, ror #4 + and r4, r2, r5, ror #4 + eor r5, r5, r4, ror #26 + and r4, r2, r6, ror #4 + eor r6, r6, r4, ror #22 + and r4, r2, r6 + eor r6, r6, r4, ror #4 + and r4, r2, r6, ror #4 + eor r6, r6, r4, ror #26 + and r4, r2, r7, ror #4 + eor r7, r7, r4, ror #22 + and r4, r2, r7 + eor r7, r7, r4, ror #4 + and r4, r2, r7, ror #4 + eor r7, r7, r4, ror #26 + and r4, r2, r8, ror #4 + eor r8, r8, r4, ror #22 + and r4, r2, r8 + eor r8, r8, r4, ror #4 + and r4, r2, r8, ror #4 + eor r8, r8, r4, ror #26 + and r4, r2, r9, ror #4 + eor r9, r9, r4, ror #22 + and r4, r2, r9 + eor r9, r9, r4, ror #4 + and r4, r2, r9, ror #4 + eor r9, r9, r4, ror #26 + and r4, r2, r10, ror #4 + eor r10, r10, r4, ror #22 + and r4, r2, r10 + eor r10, r10, r4, ror #4 + and r4, r2, r10, ror #4 + eor r10, r10, r4, ror #26 + and r4, r2, r11, ror #4 + eor r11, r11, r4, ror #22 + and r4, r2, r11 + eor r11, r11, r4, ror #4 + and r4, r2, r11, ror #4 + eor r11, r11, r4, ror #26 + and r4, r2, r12, ror #4 + eor r12, r12, r4, ror #22 + and r4, r2, r12 + eor r12, r12, r4, ror #4 + and r4, r2, r12, ror #4 + eor r12, r12, r4, ror #26 // inv_mixcolumns_3 --- + ldrd r4, r14, [r1], #-8 // load rtk_2_3 + eor r11, r11, r4 // add rtk_2_3 + rconst + eor r12, r12, r14 // add rtk_2_3 + rconst + ldrd r2, r3, [r1], #-8 // load rtk_2_3 + eor r9, r9, r2 // add rtk_2_3 + rconst + eor r10, r10, r3 // add rtk_2_3 + rconst + ldrd r4, r14, [r1], #-8 // load rtk_2_3 + eor r7, r7, r4 // add rtk_2_3 + rconst + eor r8, r8, r14 // add rtk_2_3 + rconst + ldrd r2, r3, [r1], #-8 // load rtk_2_3 + eor r5, r5, r2 // add rtk_2_3 + rconst + eor r6, r6, r3 // add rtk_2_3 + rconst + ldrd r4, r14, [r0], #-8 // load rtk1 + eor r11, r11, r4 // add rtk1 + eor r12, r12, r14 // add rtk1 + ldrd r2, r3, [r0], #-8 // load rtk1 + eor r9, r9, r2 // add rtk1 + eor r10, r10, r3 // add rtk1 + ldrd r4, r14, [r0], #-8 // load rtk1 + eor r7, r7, r4 // add rtk1 + eor r8, r8, r14 // add rtk1 + ldrd r2, r3, [r0], #-8 // load rtk1 + eor r5, r5, r2 // add rtk1 + eor r6, r6, r3 // add rtk1 + and r4, r12, r10 // state[7] & state[5] + eor r9, r9, r4 // state[4] ^= (state[7] & state[5]) + orn r4, r6, r5 // ~state[0] | state[1] + eor r7, r7, r4 // state[2] ^= (~state[0] | state[1]) + orn r4, r6, r11 // state[1] | ~state[6] + eor r10, r10, r4 // state[5] ^= (state[1] | ~state[6]) + orn r4, r7, r8 // ~state[3] | state[2] + eor r12, r12, r4 // state[7] ^= (~state[3] | state[2]) + and r4, r5, r8 // state[0] & state[3] + eor r6, r6, r4 // state[1] ^= (state[0] & state[3]) + orr r4, r9, r12 // state[7] | state[4] + eor r11, r11, r4 // state[6] ^= (state[7] | state[4]) + orr r4, r7, r9 // state[2] | state[4] + eor r8, r8, r4 // state[3] ^= (state[2] | state[4]) + orr r4, r10, r11 // state[5] | state[6] + eor r5, r5, r4 // state[0] ^= (state[5] | state[6]) + movw r2, #0x3030 + movt r2, #0x3030 // mask for inv_mixcolumns + and r4, r2, r5, ror #26 // --- inv_mixcolumns_2 + eor r5, r5, r4 + and r4, r2, r5, ror #6 + eor r5, r5, r4, ror #6 + and r4, r2, r5, ror #10 + eor r5, r5, r4, ror #4 + and r4, r2, r6, ror #26 + eor r6, r6, r4 + and r4, r2, r6, ror #6 + eor r6, r6, r4, ror #6 + and r4, r2, r6, ror #10 + eor r6, r6, r4, ror #4 + and r4, r2, r7, ror #26 + eor r7, r7, r4 + and r4, r2, r7, ror #6 + eor r7, r7, r4, ror #6 + and r4, r2, r7, ror #10 + eor r7, r7, r4, ror #4 + and r4, r2, r8, ror #26 + eor r8, r8, r4 + and r4, r2, r8, ror #6 + eor r8, r8, r4, ror #6 + and r4, r2, r8, ror #10 + eor r8, r8, r4, ror #4 + and r4, r2, r9, ror #26 + eor r9, r9, r4 + and r4, r2, r9, ror #6 + eor r9, r9, r4, ror #6 + and r4, r2, r9, ror #10 + eor r9, r9, r4, ror #4 + and r4, r2, r10, ror #26 + eor r10, r10, r4 + and r4, r2, r10, ror #6 + eor r10, r10, r4, ror #6 + and r4, r2, r10, ror #10 + eor r10, r10, r4, ror #4 + and r4, r2, r11, ror #26 + eor r11, r11, r4 + and r4, r2, r11, ror #6 + eor r11, r11, r4, ror #6 + and r4, r2, r11, ror #10 + eor r11, r11, r4, ror #4 + and r4, r2, r12, ror #26 + eor r12, r12, r4 + and r4, r2, r12, ror #6 + eor r12, r12, r4, ror #6 + and r4, r2, r12, ror #10 + eor r12, r12, r4, ror #4 // inv_mixcolumns_2 --- + ldrd r4, r14, [r1], #-8 // load rtk_2_3 + eor r11, r11, r4 // add rtk_2_3 + rconst + eor r12, r12, r14 // add rtk_2_3 + rconst + ldrd r2, r3, [r1], #-8 // load rtk_2_3 + eor r9, r9, r2 // add rtk_2_3 + rconst + eor r10, r10, r3 // add rtk_2_3 + rconst + ldrd r4, r14, [r1], #-8 // load rtk_2_3 + eor r7, r7, r4 // add rtk_2_3 + rconst + eor r8, r8, r14 // add rtk_2_3 + rconst + ldrd r2, r3, [r1], #-8 // load rtk_2_3 + eor r5, r5, r2 // add rtk_2_3 + rconst + eor r6, r6, r3 // add rtk_2_3 + rconst + ldrd r4, r14, [r0], #-8 // load rtk1 + eor r11, r11, r4 // add rtk1 + eor r12, r12, r14 // add rtk1 + ldrd r2, r3, [r0], #-8 // load rtk1 + eor r9, r9, r2 // add rtk1 + eor r10, r10, r3 // add rtk1 + ldrd r4, r14, [r0], #-8 // load rtk1 + eor r7, r7, r4 // add rtk1 + eor r8, r8, r14 // add rtk1 + ldrd r2, r3, [r0], #-8 // load rtk1 + eor r5, r5, r2 // add rtk1 + eor r6, r6, r3 // add rtk1 + and r4, r7, r12 // state[2] & state[7] + eor r8, r8, r4 // state[3] ^= (state[2] & state[7]) + orn r4, r10, r11 // ~state[6] | state[5] + eor r5, r5, r4 // state[0] ^= (~state[6] | state[5]) + orn r4, r10, r9 // state[5] | ~state[4] + eor r12, r12, r4 // state[7] ^= (state[5] | ~state[4]) + orn r4, r5, r6 // ~state[1] | state[0] + eor r7, r7, r4 // state[2] ^= (~state[1] | state[0]) + and r4, r6, r11 // state[1] & state[6] + eor r10, r10, r4 // state[5] ^= (state[6] & state[1]) + orr r4, r7, r8 // state[2] | state[3] + eor r9, r9, r4 // state[4] ^= (state[2] | state[3]) + orr r4, r5, r8 // state[0] | state[3] + eor r6, r6, r4 // state[1] ^= (state[0] | state[3]) + orr r4, r12, r9 // state[7] | state[4] + eor r11, r11, r4 // state[6] ^= (state[7] | state[4]) + movw r2, #0x3030 + movt r2, #0x3030 // mask for inv_mixcolumns + and r4, r2, r5, ror #16 // --- inv_mixcolumns_1 + eor r5, r5, r4, ror #2 + and r4, r2, r5, ror #28 + eor r5, r5, r4 + and r4, r2, r5, ror #16 + eor r5, r5, r4, ror #30 + and r4, r2, r6, ror #16 + eor r6, r6, r4, ror #2 + and r4, r2, r6, ror #28 + eor r6, r6, r4 + and r4, r2, r6, ror #16 + eor r6, r6, r4, ror #30 + and r4, r2, r7, ror #16 + eor r7, r7, r4, ror #2 + and r4, r2, r7, ror #28 + eor r7, r7, r4 + and r4, r2, r7, ror #16 + eor r7, r7, r4, ror #30 + and r4, r2, r8, ror #16 + eor r8, r8, r4, ror #2 + and r4, r2, r8, ror #28 + eor r8, r8, r4 + and r4, r2, r8, ror #16 + eor r8, r8, r4, ror #30 + and r4, r2, r9, ror #16 + eor r9, r9, r4, ror #2 + and r4, r2, r9, ror #28 + eor r9, r9, r4 + and r4, r2, r9, ror #16 + eor r9, r9, r4, ror #30 + and r4, r2, r10, ror #16 + eor r10, r10, r4, ror #2 + and r4, r2, r10, ror #28 + eor r10, r10, r4 + and r4, r2, r10, ror #16 + eor r10, r10, r4, ror #30 + and r4, r2, r11, ror #16 + eor r11, r11, r4, ror #2 + and r4, r2, r11, ror #28 + eor r11, r11, r4 + and r4, r2, r11, ror #16 + eor r11, r11, r4, ror #30 + and r4, r2, r12, ror #16 + eor r12, r12, r4, ror #2 + and r4, r2, r12, ror #28 + eor r12, r12, r4 + and r4, r2, r12, ror #16 + eor r12, r12, r4, ror #30 // inv_mixcolumns_1 --- + ldrd r4, r14, [r1], #-8 // load rtk_2_3 + eor r11, r11, r4 // add rtk_2_3 + rconst + eor r12, r12, r14 // add rtk_2_3 + rconst + ldrd r2, r3, [r1], #-8 // load rtk_2_3 + eor r9, r9, r2 // add rtk_2_3 + rconst + eor r10, r10, r3 // add rtk_2_3 + rconst + ldrd r4, r14, [r1], #-8 // load rtk_2_3 + eor r7, r7, r4 // add rtk_2_3 + rconst + eor r8, r8, r14 // add rtk_2_3 + rconst + ldrd r2, r3, [r1], #-8 // load rtk_2_3 + eor r5, r5, r2 // add rtk_2_3 + rconst + eor r6, r6, r3 // add rtk_2_3 + rconst + ldrd r4, r14, [r0], #-8 // load rtk1 + eor r11, r11, r4 // add rtk1 + eor r12, r12, r14 // add rtk1 + ldrd r2, r3, [r0], #-8 // load rtk1 + eor r9, r9, r2 // add rtk1 + eor r10, r10, r3 // add rtk1 + ldrd r4, r14, [r0], #-8 // load rtk1 + eor r7, r7, r4 // add rtk1 + eor r8, r8, r14 // add rtk1 + ldrd r2, r3, [r0], #-8 // load rtk1 + eor r5, r5, r2 // add rtk1 + eor r6, r6, r3 // add rtk1 + and r4, r5, r7 // state[0] & state[2] + eor r6, r6, r4 // state[1] ^= (state[0] & state[2]) + orn r4, r12, r9 // state[7] | ~state[4] + eor r11, r11, r4 // state[6] ^= (~state[4] | state[7]) + orn r4, r12, r8 // state[7] | ~state[3] + eor r7, r7, r4 // state[2] ^= (state[7] | ~state[3]) + orn r4, r11, r10 // ~state[5] | state[6] + eor r5, r5, r4 // state[0] ^= (~state[5] | state[6]) + and r4, r9, r10 // state[4] & state[5] + eor r12, r12, r4 // state[7] ^= (state[4] & state[5]) + orr r4, r5, r6 // state[0] | state[1] + eor r8, r8, r4 // state[3] ^= (state[0] | state[1]) + orr r4, r6, r11 // state[1] | state[6] + eor r10, r10, r4 // state[5] ^= (state[6] | state[1]) + orr r4, r7, r8 // state[2] | state[3] + eor r9, r9, r4 // state[4] ^= (state[2] | state[3]) + movw r2, #0x3030 + movt r2, #0x3030 // mask for inv_mixcolumns + and r4, r2, r5, ror #6 // --- inv_mixcolumns_0 + eor r5, r5, r4, ror #4 + and r4, r2, r5, ror #18 + eor r5, r5, r4, ror #2 + and r4, r2, r5, ror #30 + eor r5, r5, r4, ror #24 + and r4, r2, r6, ror #6 + eor r6, r6, r4, ror #4 + and r4, r2, r6, ror #18 + eor r6, r6, r4, ror #2 + and r4, r2, r6, ror #30 + eor r6, r6, r4, ror #24 + and r4, r2, r7, ror #6 + eor r7, r7, r4, ror #4 + and r4, r2, r7, ror #18 + eor r7, r7, r4, ror #2 + and r4, r2, r7, ror #30 + eor r7, r7, r4, ror #24 + and r4, r2, r8, ror #6 + eor r8, r8, r4, ror #4 + and r4, r2, r8, ror #18 + eor r8, r8, r4, ror #2 + and r4, r2, r8, ror #30 + eor r8, r8, r4, ror #24 + and r4, r2, r9, ror #6 + eor r9, r9, r4, ror #4 + and r4, r2, r9, ror #18 + eor r9, r9, r4, ror #2 + and r4, r2, r9, ror #30 + eor r9, r9, r4, ror #24 + and r4, r2, r10, ror #6 + eor r10, r10, r4, ror #4 + and r4, r2, r10, ror #18 + eor r10, r10, r4, ror #2 + and r4, r2, r10, ror #30 + eor r10, r10, r4, ror #24 + and r4, r2, r11, ror #6 + eor r11, r11, r4, ror #4 + and r4, r2, r11, ror #18 + eor r11, r11, r4, ror #2 + and r4, r2, r11, ror #30 + eor r11, r11, r4, ror #24 + and r4, r2, r12, ror #6 + eor r12, r12, r4, ror #4 + and r4, r2, r12, ror #18 + eor r12, r12, r4, ror #2 + and r4, r2, r12, ror #30 + eor r12, r12, r4, ror #24 + ldrd r4, r14, [r1], #-8 // load rtk_2_3 + eor r11, r11, r4 // add rtk_2_3 + rconst + eor r12, r12, r14 // add rtk_2_3 + rconst + ldrd r2, r3, [r1], #-8 // load rtk_2_3 + eor r9, r9, r2 // add rtk_2_3 + rconst + eor r10, r10, r3 // add rtk_2_3 + rconst + ldrd r4, r14, [r1], #-8 // load rtk_2_3 + eor r7, r7, r4 // add rtk_2_3 + rconst + eor r8, r8, r14 // add rtk_2_3 + rconst + ldrd r2, r3, [r1], #-8 // load rtk_2_3 + eor r5, r5, r2 // add rtk_2_3 + rconst + eor r6, r6, r3 // add rtk_2_3 + rconst + ldrd r4, r14, [r0], #-8 // load rtk1 + eor r11, r11, r4 // add rtk1 + eor r12, r12, r14 // add rtk1 + ldrd r2, r3, [r0], #-8 // load rtk1 + eor r9, r9, r2 // add rtk1 + eor r10, r10, r3 // add rtk1 + ldrd r4, r14, [r0], #-8 // load rtk1 + eor r7, r7, r4 // add rtk1 + eor r8, r8, r14 // add rtk1 + ldrd r2, r3, [r0], #-8 // load rtk1 + eor r5, r5, r2 // add rtk1 + eor r6, r6, r3 // add rtk1 + ldr.w r14, [sp] // restore link register + and r4, r5, r11 // state[0] & state[6] + eor r10, r10, r4 // state[5] ^= (state[6] & state[0]) + orn r4, r7, r8 // ~state[3] | state[2] + eor r9, r9, r4 // state[4] ^= (~state[3] | state[2]) + orn r4, r7, r6 // state[2] | ~state[1] + eor r5, r5, r4 // state[0] ^= (state[2] | ~state[1]) + orn r4, r9, r12 // ~state[7] | state[4] + eor r11, r11, r4 // state[6] ^= (~state[7] | state[4]) + and r4, r8, r12 // state[3] & state[7] + eor r7, r7, r4 // state[2] ^= (state[3] & state[7]) + orr r4, r11, r10 // state[6] | state[5] + eor r6, r6, r4 // state[1] ^= (state[6] | state[5]) + orr r4, r9, r10 // state[4] | state[5] + eor r12, r12, r4 // state[7] ^= (state[4] | state[5]) + orr r4, r5, r6 // state[0] | state[1] + eor r8, r8, r4 // state[3] ^= (state[0] | state[1]) + bx lr + +/****************************************************************************** +* Compute the SKINNY block cipher on a single block in a fixsliced manner. +******************************************************************************/ +@ void skinny128_384(u8* ctext, u8* ctext_bis, const u8* ptext, +@ const u8* ptext_bis, const u32* rtk_1, const u32* rtk_2_3) +.global skinny128_384 +.type skinny128_384,%function +.align 2 +skinny128_384: + push {r0-r12, r14} + sub.w sp, #4 // to store r14 during subroutines + ldm r2, {r5,r7,r9,r11} // load the 2nd block in r6,r8,r10,r12 + ldm r3, {r6,r8,r10,r12} // load the 2nd block in r6,r8,r10,r12 + movw r2, #0x5555 + movt r2, #0x5555 //r2 <- 0x55555555 + movw r3, #0x3030 + movt r3, #0x3030 //r3 <- 0x30303030 + bl packing + ldrd r0, r1, [sp, #60] // get rtk addr (1st stack argument) + bl quadruple_round + bl quadruple_round + bl quadruple_round + bl quadruple_round + sub.w r0, #512 + bl quadruple_round + bl quadruple_round + bl quadruple_round + bl quadruple_round + sub.w r0, #512 + bl quadruple_round + bl quadruple_round + bl quadruple_round + bl quadruple_round + sub.w r0, #512 + bl quadruple_round + bl quadruple_round + bl unpacking + ldrd r0, r1, [sp, #4] + add.w sp, #12 + stm r0, {r5, r7, r9, r11} // store the 1st enc block in [r0] + stm r1, {r6, r8, r10, r12} // store the 2nd enc block in [r1] + pop {r2-r12, r14} + bx lr + +/****************************************************************************** +* Compute the SKINNY block cipher on a single block in a fixsliced manner. +******************************************************************************/ +@ void skinny128_384_inv(u8* ptext, u8* ptext_bis, const u8* ctext, +@ const u8* ctext_bis, const u32* rtk_1, const u32* rtk_2_3) +.global skinny128_384_inv +.type skinny128_384_inv,%function +.align 2 +skinny128_384_inv: + push {r0-r12, r14} + sub.w sp, #4 // to store r14 during subroutines + ldm r2, {r5,r7,r9,r11} // load the 2nd block in r6,r8,r10,r12 + ldm r3, {r6,r8,r10,r12} // load the 2nd block in r6,r8,r10,r12 + movw r2, #0x5555 + movt r2, #0x5555 //r2 <- 0x55555555 + movw r3, #0x3030 + movt r3, #0x3030 //r3 <- 0x30303030 + bl packing + ldrd r0, r1, [sp, #60] // get rtk addr (1st stack argument) + add.w r0, #248 // points to the last rtk1 + add.w r1, #1784 // points to the last rtk2_3 + bl inv_quadruple_round + bl inv_quadruple_round + add.w r0, #512 + bl inv_quadruple_round + bl inv_quadruple_round + bl inv_quadruple_round + bl inv_quadruple_round + add.w r0, #512 + bl inv_quadruple_round + bl inv_quadruple_round + bl inv_quadruple_round + bl inv_quadruple_round + add.w r0, #512 + bl inv_quadruple_round + bl inv_quadruple_round + bl inv_quadruple_round + bl inv_quadruple_round + bl unpacking + ldrd r0, r1, [sp, #4] + add.w sp, #12 + stm r0, {r5, r7, r9, r11} // store the 1st enc block in [r0] + stm r1, {r6, r8, r10, r12} // store the 2nd enc block in [r1] + pop {r2-r12,r14} + bx lr diff --git a/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/armcortexm_2/skinnyaead.h b/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/armcortexm_2/skinnyaead.h new file mode 100644 index 0000000..e41c204 --- /dev/null +++ b/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/armcortexm_2/skinnyaead.h @@ -0,0 +1,40 @@ +#ifndef SKINNYAEADM1_H_ +#define SKINNYAEADM1_H_ + +#include "skinny128.h" + +typedef unsigned char u8; +typedef unsigned int u32; +typedef unsigned long long u64; + +#define TAGBYTES 16 +#define KEYBYTES 16 +#define BLOCKBYTES 16 + +#define SET_DOMAIN(ptr, domain) ((ptr)[15] = (domain)) + +#define UPDATE_LFSR(lfsr) ({ \ + feedback = ((lfsr) & (1ULL << 63)) ? 0x1B : 0x00; \ + (lfsr) = ((lfsr) << 1) ^ feedback; \ +}) + +#define LE_STR_64(ptr, x) ({ \ + (ptr)[0] = (u8)(x); \ + (ptr)[1] = (u8)((x) >> 8); \ + (ptr)[2] = (u8)((x) >> 16); \ + (ptr)[3] = (u8)((x) >> 24); \ + (ptr)[4] = (u8)((x) >> 32); \ + (ptr)[5] = (u8)((x) >> 40); \ + (ptr)[6] = (u8)((x) >> 48); \ + (ptr)[7] = (u8)((x) >> 56); \ +}) + +//x ^= y with x, y 128-bit blocks +#define XOR_BLOCK(x,y) ({ \ + ((u32*)(x))[0] ^= ((u32*)(y))[0]; \ + ((u32*)(x))[1] ^= ((u32*)(y))[1]; \ + ((u32*)(x))[2] ^= ((u32*)(y))[2]; \ + ((u32*)(x))[3] ^= ((u32*)(y))[3]; \ +}) + +#endif // SKINNYAEADM1_H_ \ No newline at end of file diff --git a/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_1/api.h b/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_1/api.h new file mode 100644 index 0000000..a4aa567 --- /dev/null +++ b/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_1/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/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_1/crypto_aead.h b/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_1/crypto_aead.h new file mode 100644 index 0000000..e2ca9b0 --- /dev/null +++ b/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_1/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 +); \ No newline at end of file diff --git a/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_1/encrypt.c b/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_1/encrypt.c new file mode 100644 index 0000000..838c830 --- /dev/null +++ b/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_1/encrypt.c @@ -0,0 +1,203 @@ +/****************************************************************************** +* Constant-time implementation of SKINNY-AEAD-M1 (v1.1). +* +* Two blocks are treated in parallel with SKINNY-128-384 whenever possible. +* +* For more details, see the paper at: https:// +* +* @author Alexandre Adomnicai, Nanyang Technological University, +* alexandre.adomnicai@ntu.edu.sg +* +* @date May 2020 +******************************************************************************/ +#include "skinny128.h" +#include "skinnyaead.h" +#include +#include + +/****************************************************************************** +* x ^= y where x, y are 128-bit blocks (16 bytes array). +******************************************************************************/ +static void xor_block(u8 * x, const u8* y) { + for(int i = 0; i < BLOCKBYTES; i++) + x[i] ^= y[i]; +} + +/****************************************************************************** +* Encryption and authentication using SKINNY-AEAD-M1 +******************************************************************************/ +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) { + u64 i,lfsr = 1; + u8 feedback; + u32 rtk1[4*16]; + u32 rtk2_3[4*SKINNY128_384_ROUNDS]; + u8 tmp[2*BLOCKBYTES], auth[BLOCKBYTES]; + (void)nsec; + + // ----------------- Initialization ----------------- + *clen = mlen + TAGBYTES; + precompute_rtk2_3(rtk2_3, npub, k); + memset(tmp, 0x00, 2*BLOCKBYTES); + memset(auth, 0x00, BLOCKBYTES); + memset(c + mlen, 0x00, BLOCKBYTES); + // ----------------- Initialization ----------------- + + // ----------------- Process the plaintext ----------------- + while (mlen >= BLOCKBYTES) { // while entire blocks to process + LE_STR_64(tmp, lfsr); + precompute_rtk1(rtk1, tmp); // precompute RTK1 given the LFSR + skinny128_384_encrypt(c, m, rtk1, rtk2_3); + xor_block(c + mlen, m); // sum for tag computation + mlen -= BLOCKBYTES; + c += BLOCKBYTES; + m += BLOCKBYTES; + UPDATE_LFSR(lfsr); // update lfsr for next block + } + SET_DOMAIN(tmp, 0x04); // domain for tag computation + if (mlen > 0) { // last block is partial + LE_STR_64(tmp, lfsr); // lfsr for last block + SET_DOMAIN(tmp, 0x01); // domain for padding + for(i = 0; i < mlen; i++) + c[mlen + i] ^= m[i]; // sum for tag computation + c[mlen + i] ^= 0x80; // padding + precompute_rtk1(rtk1, tmp); + skinny128_384_encrypt(auth, auth, rtk1, rtk2_3); + for(i = 0; i < mlen; i++) + c[i] = auth[i] ^ m[i]; // encrypted padded block + c += mlen; + SET_DOMAIN(tmp, 0x05); // domain for tag computation + UPDATE_LFSR(lfsr); + } + LE_STR_64(tmp, lfsr); // lfsr for tag computation + precompute_rtk1(rtk1, tmp); + for(int i = 0; i < 16; i++) { + printf("%08x %08x %08x %08x\n",rtk1[i*4], rtk1[i*4+1],rtk1[i*4+2],rtk1[i*4+3]); + } + for(int i = 0; i < 56; i++) { + printf("%08x %08x %08x %08x\n",rtk2_3[i*4], rtk2_3[i*4+1],rtk2_3[i*4+2],rtk2_3[i*4+3]); + } + skinny128_384_encrypt(c, c, rtk1, rtk2_3); // compute the tag + // ----------------- Process the plaintext ----------------- + + // ----------------- Process the associated data ----------------- + lfsr = 1; + SET_DOMAIN(tmp, 0x02); + memset(auth, 0x00, BLOCKBYTES); + while (adlen >= BLOCKBYTES) { + LE_STR_64(tmp, lfsr); + precompute_rtk1(rtk1, tmp); + skinny128_384_encrypt(tmp + BLOCKBYTES, ad, rtk1, rtk2_3); + xor_block(auth, tmp + BLOCKBYTES); + adlen -= BLOCKBYTES; + ad += BLOCKBYTES; + UPDATE_LFSR(lfsr); + } + if (adlen > 0) { + LE_STR_64(tmp, lfsr); + SET_DOMAIN(tmp, 0x03); // domain for padding ad + precompute_rtk1(rtk1, tmp); + memset(tmp, 0x00, BLOCKBYTES); // padding + memcpy(tmp, ad, adlen); // padding + tmp[adlen] ^= 0x80; // padding + skinny128_384_encrypt(tmp, tmp, rtk1, rtk2_3); + xor_block(auth, tmp); + } + xor_block(c, auth); // XOR for tag computation + // ----------------- Process the associated data ----------------- + return 0; +} + +/****************************************************************************** +* Encryption and authentication using SKINNY-AEAD-M1 +******************************************************************************/ +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) { + u64 i,lfsr = 1; + u8 feedback; + u32 rtk1[4*16]; + u32 rtk2_3[4*SKINNY128_384_ROUNDS]; + u8 tmp[2*BLOCKBYTES], auth[BLOCKBYTES], sum[BLOCKBYTES]; + (void)nsec; + + if (clen < TAGBYTES) + return -1; + + // ----------------- Initialization ----------------- + clen -= TAGBYTES; + *mlen = clen; + precompute_rtk2_3(rtk2_3, npub, k); + memset(tmp, 0x00, 2*BLOCKBYTES); + memset(auth, 0x00, BLOCKBYTES); + memset(sum, 0x00, BLOCKBYTES); + // ----------------- Initialization ----------------- + + // ----------------- Process the plaintext ----------------- + while (clen >= BLOCKBYTES) { // while entire blocks to process + LE_STR_64(tmp, lfsr); + precompute_rtk1(rtk1, tmp); // precompute RTK1 given the LFSR + skinny128_384_decrypt(m, c, rtk1, rtk2_3); + xor_block(sum, m); // sum for tag computation + clen -= BLOCKBYTES; + c += BLOCKBYTES; + m += BLOCKBYTES; + UPDATE_LFSR(lfsr); // update LFSR for the next block + } + SET_DOMAIN(tmp, 0x04); // domain for tag computation + if (clen > 0) { // last block is partial + LE_STR_64(tmp, lfsr); // lfsr for last block + SET_DOMAIN(tmp, 0x01); // domain for padding + precompute_rtk1(rtk1, tmp); + skinny128_384_encrypt(auth, auth, rtk1, rtk2_3); + for(i = 0; i < clen; i++) { + m[i] = auth[i] ^ c[i]; // encrypted padded block + sum[i] ^= m[i]; // sum for tag computation + } + sum[i] ^= 0x80; // padding + c += clen; + SET_DOMAIN(tmp, 0x05); // domain for tag computation + UPDATE_LFSR(lfsr); + } + LE_STR_64(tmp, lfsr); // lfsr for tag computation + precompute_rtk1(rtk1, tmp); + skinny128_384_encrypt(sum, sum, rtk1, rtk2_3); // compute the tag + // ----------------- Process the plaintext ----------------- + + // ----------------- Process the associated data ----------------- + lfsr = 1; + SET_DOMAIN(tmp, 0x02); + memset(auth, 0x00, BLOCKBYTES); + while (adlen >= BLOCKBYTES) { + LE_STR_64(tmp, lfsr); + precompute_rtk1(rtk1, tmp); + skinny128_384_encrypt(tmp + BLOCKBYTES, ad, rtk1, rtk2_3); + xor_block(auth, tmp + BLOCKBYTES); + adlen -= BLOCKBYTES; + ad += BLOCKBYTES; + UPDATE_LFSR(lfsr); + } + if (adlen > 0) { + LE_STR_64(tmp, lfsr); + SET_DOMAIN(tmp, 0x03); // domain for padding ad + precompute_rtk1(rtk1, tmp); + memset(tmp, 0x00, BLOCKBYTES); // padding + memcpy(tmp, ad, adlen); // padding + tmp[adlen] ^= 0x80; // padding + skinny128_384_encrypt(tmp, tmp, rtk1, rtk2_3); + xor_block(auth, tmp); + } + xor_block(sum, auth); // XOR for tag computation + feedback = 0; + for(i = 0; i < TAGBYTES; i++) + feedback |= sum[i] ^ c[i]; // constant-time tag verification + return feedback; + // ----------------- Process the associated data ----------------- +} \ No newline at end of file diff --git a/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_1/skinny128.c b/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_1/skinny128.c new file mode 100644 index 0000000..e6177a2 --- /dev/null +++ b/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_1/skinny128.c @@ -0,0 +1,198 @@ +/****************************************************************************** +* Constant-time implementation of the SKINNY tweakable block ciphers. +* +* This implementation doesn't compute the ShiftRows operation. Some masks and +* shifts are applied during the MixColumns operation so that the proper bits +* are XORed together. Moreover, the row permutation within the MixColumns +* is omitted, as well as the bit permutation at the end of the Sbox. The rows +* are synchronized with the classical after only 4 rounds. Therefore, this +* implementation relies on a "QUADRUPLE_ROUND" routine. +* +* The Sbox computation takes advantage of some symmetry in the 8-bit Sbox to +* turn it into a 4-bit S-box computation. Although the last bit permutation +* within the Sbox is not computed, the bit ordering is synchronized with the +* classical representation after 2 calls. +* +* @author Alexandre Adomnicai, Nanyang Technological University, +* alexandre.adomnicai@ntu.edu.sg +* +* @date May 2020 +******************************************************************************/ +#include +#include +#include "skinny128.h" +#include "tk_schedule.h" + +/****************************************************************************** +* The MixColumns computation for rounds i such that (i % 4) == 0 +******************************************************************************/ +void mixcolumns_0(u32* state) { + u32 tmp; + for(int i = 0; i < 4; i++) { + tmp = ROR(state[i],24) & 0x0c0c0c0c; + state[i] ^= ROR(tmp,30); + tmp = ROR(state[i],16) & 0xc0c0c0c0; + state[i] ^= ROR(tmp,4); + tmp = ROR(state[i],8) & 0x0c0c0c0c; + state[i] ^= ROR(tmp,2); + } +} + +/****************************************************************************** +* The MixColumns computation for rounds i such that (i % 4) == 1 +******************************************************************************/ +void mixcolumns_1(u32* state) { + u32 tmp; + for(int i = 0; i < 4; i++) { + tmp = ROR(state[i],16) & 0x30303030; + state[i] ^= ROR(tmp,30); + tmp = state[i] & 0x03030303; + state[i] ^= ROR(tmp,28); + tmp = ROR(state[i],16) & 0x30303030; + state[i] ^= ROR(tmp,2); + } +} + +/****************************************************************************** +* The MixColumns computation for rounds i such that (i % 4) == 2 +******************************************************************************/ +void mixcolumns_2(u32* state) { + u32 tmp; + for(int i = 0; i < 4; i++) { + tmp = ROR(state[i],8) & 0xc0c0c0c0; + state[i] ^= ROR(tmp,6); + tmp = ROR(state[i],16) & 0x0c0c0c0c; + state[i] ^= ROR(tmp,28); + tmp = ROR(state[i],24) & 0xc0c0c0c0; + state[i] ^= ROR(tmp,2); + } +} + +/****************************************************************************** +* The MixColumns computation for rounds i such that (i % 4) == 3 +******************************************************************************/ +void mixcolumns_3(u32* state) { + u32 tmp; + for(int i = 0; i < 4; i++) { + tmp = state[i] & 0x03030303; + state[i] ^= ROR(tmp,30); + tmp = state[i] & 0x30303030; + state[i] ^= ROR(tmp,4); + tmp = state[i] & 0x03030303; + state[i] ^= ROR(tmp,26); + } +} + +/****************************************************************************** +* The inverse MixColumns operation for rounds i such that (i % 4) == 0 +******************************************************************************/ +void inv_mixcolumns_0(u32* state) { + u32 tmp; + for(int i = 0; i < 4; i++) { + tmp = ROR(state[i],8) & 0x0c0c0c0c; + state[i] ^= ROR(tmp,2); + tmp = ROR(state[i],16) & 0xc0c0c0c0; + state[i] ^= ROR(tmp,4); + tmp = ROR(state[i],24) & 0x0c0c0c0c; + state[i] ^= ROR(tmp,30); + } +} + +/****************************************************************************** +* The inverse MixColumns operation for rounds i such that (i % 4) == 0 +******************************************************************************/ +void inv_mixcolumns_1(u32* state) { + u32 tmp; + for(int i = 0; i < 4; i++) { + tmp = ROR(state[i],16) & 0x30303030; + state[i] ^= ROR(tmp,2); + tmp = state[i] & 0x03030303; + state[i] ^= ROR(tmp,28); + tmp = ROR(state[i],16) & 0x30303030; + state[i] ^= ROR(tmp,30); + } +} + +/****************************************************************************** +* The inverse MixColumns operation for rounds i such that (i % 4) == 0 +******************************************************************************/ +void inv_mixcolumns_2(u32* state) { + u32 tmp; + for(int i = 0; i < 4; i++) { + tmp = ROR(state[i],24) & 0xc0c0c0c0; + state[i] ^= ROR(tmp,2); + tmp = ROR(state[i],16) & 0x0c0c0c0c; + state[i] ^= ROR(tmp,28); + tmp = ROR(state[i],8) & 0xc0c0c0c0; + state[i] ^= ROR(tmp,6); + } +} + +/****************************************************************************** +* The inverse MixColumns operation for rounds i such that (i % 4) == 0 +******************************************************************************/ +void inv_mixcolumns_3(u32* state) { + u32 tmp; + for(int i = 0; i < 4; i++) { + tmp = state[i] & 0x03030303; + state[i] ^= ROR(tmp,26); + tmp = state[i] & 0x30303030; + state[i] ^= ROR(tmp,4); + tmp = state[i] & 0x03030303; + state[i] ^= ROR(tmp,30); + } +} + +/****************************************************************************** +* Encryption of a single block without any operation mode using SKINNY-128-384. +* RTK1 and RTK2_3 are given separately to take advantage of the fact that +* TK2 and TK3 remains the same through the entire data encryption/decryption. +******************************************************************************/ +void skinny128_384_encrypt(u8* ctext, const u8* ptext, const u32* rtk1, + const u32* rtk2_3) { + u32 tmp; // used in SWAPMOVE macro + u32 state[4]; // 128-bit state + packing(state, ptext); // from byte to bitsliced representation + QUADRUPLE_ROUND(state, rtk1, rtk2_3); + QUADRUPLE_ROUND(state, rtk1+16, rtk2_3+16); + QUADRUPLE_ROUND(state, rtk1+32, rtk2_3+32); + QUADRUPLE_ROUND(state, rtk1+48, rtk2_3+48); + QUADRUPLE_ROUND(state, rtk1, rtk2_3+64); + QUADRUPLE_ROUND(state, rtk1+16, rtk2_3+80); + QUADRUPLE_ROUND(state, rtk1+32, rtk2_3+96); + QUADRUPLE_ROUND(state, rtk1+48, rtk2_3+112); + QUADRUPLE_ROUND(state, rtk1, rtk2_3+128); + QUADRUPLE_ROUND(state, rtk1+16, rtk2_3+144); + QUADRUPLE_ROUND(state, rtk1+32, rtk2_3+160); + QUADRUPLE_ROUND(state, rtk1+48, rtk2_3+176); + QUADRUPLE_ROUND(state, rtk1, rtk2_3+192); + QUADRUPLE_ROUND(state, rtk1+16, rtk2_3+208); + unpacking(ctext, state); // from bitsliced to byte representation +} + +/****************************************************************************** +* Decryption of a single block without any operation mode using SKINNY-128-384. +* RTK1 and RTK2_3 are given separately to take advantage of the fact that +* TK2 and TK3 remains the same through the entire data encryption/decryption. +******************************************************************************/ +void skinny128_384_decrypt(u8* ctext, const u8* ptext, const u32* rtk1, + const u32* rtk2_3) { + u32 tmp; // used in SWAPMOVE macro + u32 state[4]; // 128-bit state + packing(state, ptext); // from byte to bitsliced representation + INV_QUADRUPLE_ROUND(state, rtk1+16, rtk2_3+208); + INV_QUADRUPLE_ROUND(state, rtk1, rtk2_3+192); + INV_QUADRUPLE_ROUND(state, rtk1+48, rtk2_3+176); + INV_QUADRUPLE_ROUND(state, rtk1+32, rtk2_3+160); + INV_QUADRUPLE_ROUND(state, rtk1+16, rtk2_3+144); + INV_QUADRUPLE_ROUND(state, rtk1, rtk2_3+128); + INV_QUADRUPLE_ROUND(state, rtk1+48, rtk2_3+112); + INV_QUADRUPLE_ROUND(state, rtk1+32, rtk2_3+96); + INV_QUADRUPLE_ROUND(state, rtk1+16, rtk2_3+80); + INV_QUADRUPLE_ROUND(state, rtk1, rtk2_3+64); + INV_QUADRUPLE_ROUND(state, rtk1+48, rtk2_3+48); + INV_QUADRUPLE_ROUND(state, rtk1+32, rtk2_3+32); + INV_QUADRUPLE_ROUND(state, rtk1+16, rtk2_3+16); + INV_QUADRUPLE_ROUND(state, rtk1, rtk2_3); + unpacking(ctext, state); // from bitsliced to byte representation +} \ No newline at end of file diff --git a/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_1/skinny128.h b/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_1/skinny128.h new file mode 100644 index 0000000..fe88540 --- /dev/null +++ b/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_1/skinny128.h @@ -0,0 +1,177 @@ +#ifndef SKINNY128_H_ +#define SKINNY128_H_ + +#include "tk_schedule.h" + +void skinny128_384_encrypt(u8* ctext, const u8* ptext, const u32* rtk1, const u32* rtk2_3); +void skinny128_384_decrypt(u8* ctext, const u8* ptext, const u32* rtk1, const u32* rtk2_3); + +#define SKINNY128_384_ROUNDS 56 + +#define QUADRUPLE_ROUND(state, rtk1, rtk2_3) ({ \ + state[3] ^= ~(state[0] | state[1]); \ + SWAPMOVE(state[2], state[1], 0x55555555, 1); \ + SWAPMOVE(state[3], state[2], 0x55555555, 1); \ + state[1] ^= ~(state[2] | state[3]); \ + SWAPMOVE(state[1], state[0], 0x55555555, 1); \ + SWAPMOVE(state[0], state[3], 0x55555555, 1); \ + state[3] ^= ~(state[0] | state[1]); \ + SWAPMOVE(state[2], state[1], 0x55555555, 1); \ + SWAPMOVE(state[3], state[2], 0x55555555, 1); \ + state[1] ^= (state[2] | state[3]); \ + SWAPMOVE(state[3], state[0], 0x55555555, 0); \ + state[0] ^= (rtk1)[0]; \ + state[1] ^= (rtk1)[1]; \ + state[2] ^= (rtk1)[2]; \ + state[3] ^= (rtk1)[3]; \ + state[0] ^= (rtk2_3)[0]; \ + state[1] ^= (rtk2_3)[1]; \ + state[2] ^= (rtk2_3)[2]; \ + state[3] ^= (rtk2_3)[3]; \ + mixcolumns_0(state); \ + state[1] ^= ~(state[2] | state[3]); \ + SWAPMOVE(state[1], state[0], 0x55555555, 1); \ + SWAPMOVE(state[0], state[3], 0x55555555, 1); \ + state[3] ^= ~(state[0] | state[1]); \ + SWAPMOVE(state[2], state[1], 0x55555555, 1); \ + SWAPMOVE(state[3], state[2], 0x55555555, 1); \ + state[1] ^= ~(state[2] | state[3]); \ + SWAPMOVE(state[1], state[0], 0x55555555, 1); \ + SWAPMOVE(state[0], state[3], 0x55555555, 1); \ + state[3] ^= (state[0] | state[1]); \ + SWAPMOVE(state[1], state[2], 0x55555555, 0); \ + state[0] ^= (rtk1)[4]; \ + state[1] ^= (rtk1)[5]; \ + state[2] ^= (rtk1)[6]; \ + state[3] ^= (rtk1)[7]; \ + state[0] ^= (rtk2_3)[4]; \ + state[1] ^= (rtk2_3)[5]; \ + state[2] ^= (rtk2_3)[6]; \ + state[3] ^= (rtk2_3)[7]; \ + mixcolumns_1(state); \ + state[3] ^= ~(state[0] | state[1]); \ + SWAPMOVE(state[2], state[1], 0x55555555, 1); \ + SWAPMOVE(state[3], state[2], 0x55555555, 1); \ + state[1] ^= ~(state[2] | state[3]); \ + SWAPMOVE(state[1], state[0], 0x55555555, 1); \ + SWAPMOVE(state[0], state[3], 0x55555555, 1); \ + state[3] ^= ~(state[0] | state[1]); \ + SWAPMOVE(state[2], state[1], 0x55555555, 1); \ + SWAPMOVE(state[3], state[2], 0x55555555, 1); \ + state[1] ^= (state[2] | state[3]); \ + SWAPMOVE(state[3], state[0], 0x55555555, 0); \ + state[0] ^= (rtk1)[8]; \ + state[1] ^= (rtk1)[9]; \ + state[2] ^= (rtk1)[10]; \ + state[3] ^= (rtk1)[11]; \ + state[0] ^= (rtk2_3)[8]; \ + state[1] ^= (rtk2_3)[9]; \ + state[2] ^= (rtk2_3)[10]; \ + state[3] ^= (rtk2_3)[11]; \ + mixcolumns_2(state); \ + state[1] ^= ~(state[2] | state[3]); \ + SWAPMOVE(state[1], state[0], 0x55555555, 1); \ + SWAPMOVE(state[0], state[3], 0x55555555, 1); \ + state[3] ^= ~(state[0] | state[1]); \ + SWAPMOVE(state[2], state[1], 0x55555555, 1); \ + SWAPMOVE(state[3], state[2], 0x55555555, 1); \ + state[1] ^= ~(state[2] | state[3]); \ + SWAPMOVE(state[1], state[0], 0x55555555, 1); \ + SWAPMOVE(state[0], state[3], 0x55555555, 1); \ + state[3] ^= (state[0] | state[1]); \ + SWAPMOVE(state[1], state[2], 0x55555555, 0); \ + state[0] ^= (rtk1)[12]; \ + state[1] ^= (rtk1)[13]; \ + state[2] ^= (rtk1)[14]; \ + state[3] ^= (rtk1)[15]; \ + state[0] ^= (rtk2_3)[12]; \ + state[1] ^= (rtk2_3)[13]; \ + state[2] ^= (rtk2_3)[14]; \ + state[3] ^= (rtk2_3)[15]; \ + mixcolumns_3(state); \ +}) + +#define INV_QUADRUPLE_ROUND(state, rtk1, rtk2_3) ({ \ + inv_mixcolumns_3(state); \ + state[0] ^= (rtk1)[12]; \ + state[1] ^= (rtk1)[13]; \ + state[2] ^= (rtk1)[14]; \ + state[3] ^= (rtk1)[15]; \ + state[0] ^= (rtk2_3)[12]; \ + state[1] ^= (rtk2_3)[13]; \ + state[2] ^= (rtk2_3)[14]; \ + state[3] ^= (rtk2_3)[15]; \ + SWAPMOVE(state[1], state[2], 0x55555555, 0); \ + state[3] ^= (state[0] | state[1]); \ + SWAPMOVE(state[0], state[3], 0x55555555, 1); \ + SWAPMOVE(state[1], state[0], 0x55555555, 1); \ + state[1] ^= ~(state[2] | state[3]); \ + SWAPMOVE(state[3], state[2], 0x55555555, 1); \ + SWAPMOVE(state[2], state[1], 0x55555555, 1); \ + state[3] ^= ~(state[0] | state[1]); \ + SWAPMOVE(state[0], state[3], 0x55555555, 1); \ + SWAPMOVE(state[1], state[0], 0x55555555, 1); \ + state[1] ^= ~(state[2] | state[3]); \ + inv_mixcolumns_2(state); \ + state[0] ^= (rtk1)[8]; \ + state[1] ^= (rtk1)[9]; \ + state[2] ^= (rtk1)[10]; \ + state[3] ^= (rtk1)[11]; \ + state[0] ^= (rtk2_3)[8]; \ + state[1] ^= (rtk2_3)[9]; \ + state[2] ^= (rtk2_3)[10]; \ + state[3] ^= (rtk2_3)[11]; \ + SWAPMOVE(state[3], state[0], 0x55555555, 0); \ + state[1] ^= (state[2] | state[3]); \ + SWAPMOVE(state[3], state[2], 0x55555555, 1); \ + SWAPMOVE(state[2], state[1], 0x55555555, 1); \ + state[3] ^= ~(state[0] | state[1]); \ + SWAPMOVE(state[0], state[3], 0x55555555, 1); \ + SWAPMOVE(state[1], state[0], 0x55555555, 1); \ + state[1] ^= ~(state[2] | state[3]); \ + SWAPMOVE(state[3], state[2], 0x55555555, 1); \ + SWAPMOVE(state[2], state[1], 0x55555555, 1); \ + state[3] ^= ~(state[0] | state[1]); \ + inv_mixcolumns_1(state); \ + state[0] ^= (rtk1)[4]; \ + state[1] ^= (rtk1)[5]; \ + state[2] ^= (rtk1)[6]; \ + state[3] ^= (rtk1)[7]; \ + state[0] ^= (rtk2_3)[4]; \ + state[1] ^= (rtk2_3)[5]; \ + state[2] ^= (rtk2_3)[6]; \ + state[3] ^= (rtk2_3)[7]; \ + SWAPMOVE(state[1], state[2], 0x55555555, 0); \ + state[3] ^= (state[0] | state[1]); \ + SWAPMOVE(state[0], state[3], 0x55555555, 1); \ + SWAPMOVE(state[1], state[0], 0x55555555, 1); \ + state[1] ^= ~(state[2] | state[3]); \ + SWAPMOVE(state[3], state[2], 0x55555555, 1); \ + SWAPMOVE(state[2], state[1], 0x55555555, 1); \ + state[3] ^= ~(state[0] | state[1]); \ + SWAPMOVE(state[0], state[3], 0x55555555, 1); \ + SWAPMOVE(state[1], state[0], 0x55555555, 1); \ + state[1] ^= ~(state[2] | state[3]); \ + inv_mixcolumns_0(state); \ + state[0] ^= (rtk1)[0]; \ + state[1] ^= (rtk1)[1]; \ + state[2] ^= (rtk1)[2]; \ + state[3] ^= (rtk1)[3]; \ + state[0] ^= (rtk2_3)[0]; \ + state[1] ^= (rtk2_3)[1]; \ + state[2] ^= (rtk2_3)[2]; \ + state[3] ^= (rtk2_3)[3]; \ + SWAPMOVE(state[3], state[0], 0x55555555, 0); \ + state[1] ^= (state[2] | state[3]); \ + SWAPMOVE(state[3], state[2], 0x55555555, 1); \ + SWAPMOVE(state[2], state[1], 0x55555555, 1); \ + state[3] ^= ~(state[0] | state[1]); \ + SWAPMOVE(state[0], state[3], 0x55555555, 1); \ + SWAPMOVE(state[1], state[0], 0x55555555, 1); \ + state[1] ^= ~(state[2] | state[3]); \ + SWAPMOVE(state[3], state[2], 0x55555555, 1); \ + SWAPMOVE(state[2], state[1], 0x55555555, 1); \ + state[3] ^= ~(state[0] | state[1]); \ +}) + +#endif // SKINNY128_H_ \ No newline at end of file diff --git a/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_1/skinnyaead.h b/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_1/skinnyaead.h new file mode 100644 index 0000000..5500af8 --- /dev/null +++ b/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_1/skinnyaead.h @@ -0,0 +1,32 @@ +#ifndef SKINNYAEADM1_H_ +#define SKINNYAEADM1_H_ + +#include "skinny128.h" + +typedef unsigned char u8; +typedef unsigned int u32; +typedef unsigned long long u64; + +#define TAGBYTES 16 +#define KEYBYTES 16 +#define BLOCKBYTES 16 + +#define SET_DOMAIN(ptr, domain) ((ptr)[15] = (domain)) + +#define UPDATE_LFSR(lfsr) ({ \ + feedback = ((lfsr) & (1ULL << 63)) ? 0x1B : 0x00; \ + (lfsr) = ((lfsr) << 1) ^ feedback; \ +}) + +#define LE_STR_64(ptr, x) ({ \ + (ptr)[0] = (u8)(x); \ + (ptr)[1] = (u8)((x) >> 8); \ + (ptr)[2] = (u8)((x) >> 16); \ + (ptr)[3] = (u8)((x) >> 24); \ + (ptr)[4] = (u8)((x) >> 32); \ + (ptr)[5] = (u8)((x) >> 40); \ + (ptr)[6] = (u8)((x) >> 48); \ + (ptr)[7] = (u8)((x) >> 56); \ +}) + +#endif // SKINNYAEADM1_H_ \ No newline at end of file diff --git a/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_1/tk_schedule.c b/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_1/tk_schedule.c new file mode 100644 index 0000000..c818cf2 --- /dev/null +++ b/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_1/tk_schedule.c @@ -0,0 +1,379 @@ +/****************************************************************************** +* Implementation of the SKINNY tweakey schedule to match fixslicing. +* +* @author Alexandre Adomnicai, Nanyang Technological University, +* alexandre.adomnicai@ntu.edu.sg +* +* @date May 2020 +******************************************************************************/ +#include +#include //for memcmp +#include "tk_schedule.h" +#include "skinny128.h" + +typedef unsigned char u8; +typedef unsigned int u32; + +/****************************************************************************** +* The round constants according to the new representation. +******************************************************************************/ +u32 rconst_32_bs[224] = { + 0x00000004, 0xffffffbf, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x10000100, 0xfffffeff, 0x44000000, 0xfbffffff, 0x00000000, 0x04000000, + 0x00100000, 0x00100000, 0x00100001, 0xffefffff, 0x00440000, 0xffafffff, + 0x00400000, 0x00400000, 0x01000000, 0x01000000, 0x01401000, 0xffbfffff, + 0x01004000, 0xfefffbff, 0x00000400, 0x00000400, 0x00000010, 0x00000000, + 0x00010410, 0xfffffbef, 0x00000054, 0xffffffaf, 0x00000000, 0x00000040, + 0x00000100, 0x00000100, 0x10000140, 0xfffffeff, 0x44000000, 0xfffffeff, + 0x04000000, 0x04000000, 0x00100000, 0x00100000, 0x04000001, 0xfbffffff, + 0x00140000, 0xffafffff, 0x00400000, 0x00000000, 0x00000000, 0x00000000, + 0x01401000, 0xfebfffff, 0x01004400, 0xfffffbff, 0x00000000, 0x00000400, + 0x00000010, 0x00000010, 0x00010010, 0xffffffff, 0x00000004, 0xffffffaf, + 0x00000040, 0x00000040, 0x00000100, 0x00000000, 0x10000140, 0xffffffbf, + 0x40000100, 0xfbfffeff, 0x00000000, 0x04000000, 0x00100000, 0x00000000, + 0x04100001, 0xffefffff, 0x00440000, 0xffefffff, 0x00000000, 0x00400000, + 0x01000000, 0x01000000, 0x00401000, 0xffffffff, 0x00004000, 0xfeffffff, + 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00010400, 0xfffffbff, + 0x00000014, 0xffffffbf, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x10000100, 0xffffffff, 0x40000000, 0xfbffffff, 0x00000000, 0x04000000, + 0x00100000, 0x00000000, 0x00100001, 0xffefffff, 0x00440000, 0xffafffff, + 0x00000000, 0x00400000, 0x01000000, 0x01000000, 0x01401000, 0xffffffff, + 0x00004000, 0xfeffffff, 0x00000400, 0x00000400, 0x00000010, 0x00000000, + 0x00010400, 0xfffffbff, 0x00000014, 0xffffffaf, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x10000140, 0xfffffeff, 0x44000000, 0xffffffff, + 0x00000000, 0x04000000, 0x00100000, 0x00100000, 0x00000001, 0xffefffff, + 0x00440000, 0xffafffff, 0x00400000, 0x00000000, 0x00000000, 0x01000000, + 0x01401000, 0xffbfffff, 0x01004000, 0xfffffbff, 0x00000400, 0x00000400, + 0x00000010, 0x00000000, 0x00010010, 0xfffffbff, 0x00000014, 0xffffffef, + 0x00000000, 0x00000040, 0x00000100, 0x00000000, 0x10000040, 0xfffffeff, + 0x44000000, 0xfffffeff, 0x00000000, 0x00000000, 0x00000000, 0x00100000, + 0x04000001, 0xffffffff, 0x00040000, 0xffffffff, 0x00400000, 0x00000000, + 0x00000000, 0x00000000, 0x00001000, 0xfebfffff, 0x01004400, 0xffffffff, + 0x00000000, 0x00000000, 0x00000000, 0x00000010, 0x00010000, 0xffffffff, + 0x00000004, 0xffffffbf, 0x00000040, 0x00000000, 0x00000000, 0x00000000, + 0x10000100, 0xfffffebf, 0x44000100, 0xffffffff, 0x00000000, 0x04000000, + 0x00100000, 0x00100000, 0x00000001, 0xffffffff, 0x00040000, 0xffafffff, + 0x00400000, 0x00000000, 0x00000000, 0x00000000, 0x01401000, 0xffbfffff, + 0x01004000, 0xfffffbff, 0x00000000, 0x00000400, 0x00000010, 0x00000000, + 0x00010010, 0xffffffff +}; + +/****************************************************************************** +* Pack the input into the bitsliced representation +* 24 28 56 60 88 92 120 124 | ... | 0 4 32 36 64 68 96 100 +* 25 29 57 61 89 93 121 125 | ... | 1 5 33 37 65 69 97 101 +* 26 30 58 62 90 94 122 126 | ... | 2 6 34 38 66 70 98 102 +* 27 31 59 63 91 95 123 127 | ... | 3 7 35 39 67 71 99 103 +******************************************************************************/ +void packing(u32* out, const u8* in) { + u32 tmp; + LE_LOAD(out, in); + LE_LOAD(out + 1, in + 8); + LE_LOAD(out + 2, in + 4); + LE_LOAD(out + 3, in + 12); + SWAPMOVE(out[0], out[0], 0x0a0a0a0a, 3); + SWAPMOVE(out[1], out[1], 0x0a0a0a0a, 3); + SWAPMOVE(out[2], out[2], 0x0a0a0a0a, 3); + SWAPMOVE(out[3], out[3], 0x0a0a0a0a, 3); + SWAPMOVE(out[2], out[0], 0x30303030, 2); + SWAPMOVE(out[1], out[0], 0x0c0c0c0c, 4); + SWAPMOVE(out[3], out[0], 0x03030303, 6); + SWAPMOVE(out[1], out[2], 0x0c0c0c0c, 2); + SWAPMOVE(out[3], out[2], 0x03030303, 4); + SWAPMOVE(out[3], out[1], 0x03030303, 2); +} + +/****************************************************************************** +* Unpack the input to a byte-wise representation +******************************************************************************/ +void unpacking(u8* out, u32 *in) { + u32 tmp; + SWAPMOVE(in[3], in[1], 0x03030303, 2); + SWAPMOVE(in[3], in[2], 0x03030303, 4); + SWAPMOVE(in[1], in[2], 0x0c0c0c0c, 2); + SWAPMOVE(in[3], in[0], 0x03030303, 6); + SWAPMOVE(in[1], in[0], 0x0c0c0c0c, 4); + SWAPMOVE(in[2], in[0], 0x30303030, 2); + SWAPMOVE(in[0], in[0], 0x0a0a0a0a, 3); + SWAPMOVE(in[1], in[1], 0x0a0a0a0a, 3); + SWAPMOVE(in[2], in[2], 0x0a0a0a0a, 3); + SWAPMOVE(in[3], in[3], 0x0a0a0a0a, 3); + LE_STORE(out, in[0]); + LE_STORE(out + 8, in[1]); + LE_STORE(out + 4, in[2]); + LE_STORE(out + 12, in[3]); +} + +/****************************************************************************** +* 0 4 1 5 +* 1 5 ---> 2 6 +* 2 6 3 7 +* 3 7 4 0 +******************************************************************************/ +void lfsr2_bs(u32* tk) { + u32 tmp; + tmp = tk[0] ^ (tk[2] & 0xaaaaaaaa); + tmp = ((tmp & 0xaaaaaaaa) >> 1) | ((tmp << 1) & 0xaaaaaaaa); + tk[0] = tk[1]; + tk[1] = tk[2]; + tk[2] = tk[3]; + tk[3] = tmp; +} + +/****************************************************************************** +* 0 4 7 3 +* 1 5 ---> 0 4 +* 2 6 1 5 +* 3 7 2 6 +******************************************************************************/ +void lfsr3_bs(u32* tk) { + u32 tmp; + tmp = tk[3] ^ ((tk[1] & 0xaaaaaaaa) >> 1); + tmp = ((tmp & 0xaaaaaaaa) >> 1) | ((tmp << 1) & 0xaaaaaaaa); + tk[3] = tk[2]; + tk[2] = tk[1]; + tk[1] = tk[0]; + tk[0] = tmp; +} + +/****************************************************************************** +* Apply the permutation in a bitsliced manner, twice +******************************************************************************/ +void permute_tk_2(u32* tk) { + u32 tmp; + for(int i =0; i < 4; i++) { + tmp = tk[i]; + tk[i] = ROR(tmp,14) & 0xcc00cc00; + tk[i] |= (tmp & 0x000000ff) << 16; + tk[i] |= (tmp & 0xcc000000)>> 2; + tk[i] |= (tmp & 0x0033cc00) >> 8; + tk[i] |= (tmp & 0x00cc0000) >>18; + } +} + +/****************************************************************************** +* Apply the permutation in a bitsliced manner, 4 times +******************************************************************************/ +void permute_tk_4(u32* tk) { + u32 tmp; + for(int i =0; i < 4; i++) { + tmp = tk[i]; + tk[i] = ROR(tmp,22) & 0xcc0000cc; + tk[i] |= ROR(tmp,16) & 0x3300cc00; + tk[i] |= ROR(tmp, 24) & 0x00cc3300; + tk[i] |= (tmp & 0x00cc00cc) >> 2; + } +} + +/****************************************************************************** +* Apply the permutation in a bitsliced manner, 6 times +******************************************************************************/ +void permute_tk_6(u32* tk) { + u32 tmp; + for(int i =0; i < 4; i++) { + tmp = tk[i]; + tk[i] = ROR(tmp,6) & 0xcccc0000; + tk[i] |= ROR(tmp,24) & 0x330000cc; + tk[i] |= ROR(tmp,10) & 0x3333; + tk[i] |= (tmp & 0xcc) << 14; + tk[i] |= (tmp & 0x3300) << 2; + } +} + +/****************************************************************************** +* Apply the permutation in a bitsliced manner, 8 times +******************************************************************************/ +void permute_tk_8(u32* tk) { + u32 tmp; + for(int i =0; i < 4; i++) { + tmp = tk[i]; + tk[i] = ROR(tmp,24) & 0xcc000033; + tk[i] |= ROR(tmp,8) & 0x33cc0000; + tk[i] |= ROR(tmp,26) & 0x00333300; + tk[i] |= (tmp & 0x00333300) >> 6; + } +} + +/****************************************************************************** +* Apply the permutation in a bitsliced manner, 10 times +******************************************************************************/ +void permute_tk_10(u32* tk) { + u32 tmp; + for(int i =0; i < 4; i++) { + tmp = tk[i]; + tk[i] = ROR(tmp,8) & 0xcc330000; + tk[i] |= ROR(tmp,26) & 0x33000033; + tk[i] |= ROR(tmp,22) & 0x00cccc00; + tk[i] |= (tmp & 0x00330000) >> 14; + tk[i] |= (tmp & 0xcc00) >> 2; + } +} + +/****************************************************************************** +* Apply the permutation in a bitsliced manner, 12 times +******************************************************************************/ +void permute_tk_12(u32* tk) { + u32 tmp; + for(int i =0; i < 4; i++) { + tmp = tk[i]; + tk[i] = ROR(tmp,8) & 0xcc33; + tk[i] |= ROR(tmp,30) & 0x00cc00cc; + tk[i] |= ROR(tmp,10) & 0x33330000; + tk[i] |= ROR(tmp,16) & 0xcc003300; + } +} + +/****************************************************************************** +* Apply the permutation in a bitsliced manner, 14 times +******************************************************************************/ +void permute_tk_14(u32* tk) { + u32 tmp; + for(int i =0; i < 4; i++) { + tmp = tk[i]; + tk[i] = ROR(tmp,24) & 0x0033cc00; + tk[i] |= ROR(tmp,14) & 0x00cc0000; + tk[i] |= ROR(tmp,30) & 0xcc000000; + tk[i] |= ROR(tmp,16) & 0x000000ff; + tk[i] |= ROR(tmp,18) & 0x33003300; + } +} + +/****************************************************************************** +* Precompute all LFSRs on TK2 +******************************************************************************/ +void precompute_lfsr_tk2(u32* tk, const u8* key, const int rounds) { + u32 tk2[4]; + packing(tk2, key); + memcpy(tk, tk2, 16); + for(int i = 0 ; i < rounds; i+=2) { + lfsr2_bs(tk2); + memcpy(tk+i*4+4, tk2, 16); + } +} + +/****************************************************************************** +* Precompute all LFSRs on TK3 +******************************************************************************/ +void precompute_lfsr_tk3(u32* tk, const u8* key, const int rounds) { + u32 tk3[4]; + packing(tk3, key); + tk[0] ^= tk3[0]; + tk[1] ^= tk3[1]; + tk[2] ^= tk3[2]; + tk[3] ^= tk3[3]; + for(int i = 0 ; i < rounds; i+=2) { + lfsr3_bs(tk3); + tk[i*4+4] ^= tk3[0]; + tk[i*4+5] ^= tk3[1]; + tk[i*4+6] ^= tk3[2]; + tk[i*4+7] ^= tk3[3]; + } +} + +/****************************************************************************** +* XOR TK with TK1 before applying the permutations. +* The key is then rearranged to match the barrel shiftrows representation. +******************************************************************************/ +void permute_tk(u32* tk, const u8* key, const int rounds) { + u32 test; + u32 tk1[4], tmp[4]; + packing(tk1, key); + memcpy(tmp, tk, 16); + tmp[0] ^= tk1[0]; + tmp[1] ^= tk1[1]; + tmp[2] ^= tk1[2]; + tmp[3] ^= tk1[3]; + for(int i = 0 ; i < rounds; i += 8) { + test = (i % 16 < 8) ? 1 : 0; //to apply the right power of P + tk[i*4] = tmp[2] & 0xf0f0f0f0; + tk[i*4+1] = tmp[3] & 0xf0f0f0f0; + tk[i*4+2] = tmp[0] & 0xf0f0f0f0; + tk[i*4+3] = tmp[1] & 0xf0f0f0f0; + memcpy(tmp, tk+i*4+4, 16); + XOR_BLOCKS(tmp, tk1); + if (test) + permute_tk_2(tmp); // applies P^2 + else + permute_tk_10(tmp); // applies P^10 + tk[i*4+4] = ROR(tmp[0],26) & 0xc3c3c3c3; + tk[i*4+5] = ROR(tmp[1],26) & 0xc3c3c3c3; + tk[i*4+6] = ROR(tmp[2],26) & 0xc3c3c3c3; + tk[i*4+7] = ROR(tmp[3],26) & 0xc3c3c3c3; + tk[i*4+8] = ROR(tmp[2],28) & 0x03030303; + tk[i*4+8] |= ROR(tmp[2],12) & 0x0c0c0c0c; + tk[i*4+9] = ROR(tmp[3],28) & 0x03030303; + tk[i*4+9] |= ROR(tmp[3],12) & 0x0c0c0c0c; + tk[i*4+10] = ROR(tmp[0],28) & 0x03030303; + tk[i*4+10] |= ROR(tmp[0],12) & 0x0c0c0c0c; + tk[i*4+11] = ROR(tmp[1],28) & 0x03030303; + tk[i*4+11] |= ROR(tmp[1],12) & 0x0c0c0c0c; + memcpy(tmp, tk+i*4+12, 16); + XOR_BLOCKS(tmp, tk1); + if (test) + permute_tk_4(tmp); // applies P^4 + else + permute_tk_12(tmp); // applies P^12 + for(int j = 0; j < 4; j++) { + tk[i*4+12+j] = ROR(tmp[j],14) & 0x30303030; + tk[i*4+12+j] |= ROR(tmp[j],6) & 0x0c0c0c0c; + } + tk[i*4+16] = ROR(tmp[2], 16) & 0xf0f0f0f0; + tk[i*4+17] = ROR(tmp[3], 16) & 0xf0f0f0f0; + tk[i*4+18] = ROR(tmp[0], 16) & 0xf0f0f0f0; + tk[i*4+19] = ROR(tmp[1], 16) & 0xf0f0f0f0; + memcpy(tmp, tk+i*4+20, 16); + XOR_BLOCKS(tmp, tk1); + if (test) + permute_tk_6(tmp); // applies P^6 + else + permute_tk_14(tmp); // applies P^14 + tk[i*4+20] = ROR(tmp[0], 10) & 0xc3c3c3c3; + tk[i*4+21] = ROR(tmp[1], 10) & 0xc3c3c3c3; + tk[i*4+22] = ROR(tmp[2], 10) & 0xc3c3c3c3; + tk[i*4+23] = ROR(tmp[3], 10) & 0xc3c3c3c3; + tk[i*4+24] = ROR(tmp[2],12) & 0x03030303; + tk[i*4+24] |= ROR(tmp[2],28) & 0x0c0c0c0c; + tk[i*4+25] = ROR(tmp[3],12) & 0x03030303; + tk[i*4+25] |= ROR(tmp[3],28) & 0x0c0c0c0c; + tk[i*4+26] = ROR(tmp[0],12) & 0x03030303; + tk[i*4+26] |= ROR(tmp[0],28) & 0x0c0c0c0c; + tk[i*4+27] = ROR(tmp[1],12) & 0x03030303; + tk[i*4+27] |= ROR(tmp[1],28) & 0x0c0c0c0c; + memcpy(tmp, tk+i*4+28, 16); + XOR_BLOCKS(tmp, tk1); + if (test) + permute_tk_8(tmp); // applies P^8 + for(int j = 0; j < 4; j++) { + tk[i*4+28+j] = ROR(tmp[j],30) & 0x30303030; + tk[i*4+28+j] |= ROR(tmp[j],22) & 0x0c0c0c0c; + } + if (test && (i+8 < rounds)) { //only if next loop iteration + tk[i*4+32] = tmp[2] & 0xf0f0f0f0; + tk[i*4+33] = tmp[3] & 0xf0f0f0f0; + tk[i*4+34] = tmp[0] & 0xf0f0f0f0; + tk[i*4+35] = tmp[1] & 0xf0f0f0f0; + } + } +} + +/****************************************************************************** +* Precompute LFSR2(TK2) ^ LFSR3(TK3) ^ rconst. +******************************************************************************/ +void precompute_rtk2_3(u32* rtk, const u8* tk2, const u8 * tk3) { + memset(rtk, 0x00, 16*SKINNY128_384_ROUNDS); + precompute_lfsr_tk2(rtk, tk2, SKINNY128_384_ROUNDS); + precompute_lfsr_tk3(rtk, tk3, SKINNY128_384_ROUNDS); + permute_tk(rtk, (u8*)(rtk+8), SKINNY128_384_ROUNDS); // rtk+8 is NULL + for(int i = 0; i < SKINNY128_384_ROUNDS; i++) { // add rconsts + for(int j = 0; j < 4; j++) + rtk[i*4+j] ^= rconst_32_bs[i*4+j]; + } +} + +/****************************************************************************** +* Precompute RTK1. +******************************************************************************/ +void precompute_rtk1(u32* rtk1, const u8* tk1) { + memset(rtk1, 0x00, 16*16); + permute_tk(rtk1, tk1, 16); +} \ No newline at end of file diff --git a/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_1/tk_schedule.h b/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_1/tk_schedule.h new file mode 100644 index 0000000..5615cbd --- /dev/null +++ b/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_1/tk_schedule.h @@ -0,0 +1,39 @@ +#ifndef TK_SCHEDULE_H_ +#define TK_SCHEDULE_H_ + +typedef unsigned char u8; +typedef unsigned int u32; + +void packing(u32* out, const u8* in); +void unpacking(u8* out, u32 *in); +void precompute_rtk2_3(u32* rtk, const u8* tk2, const u8* tk3); +void precompute_rtk1(u32* rtk1, const u8* tk1); + +#define ROR(x,y) (((x) >> (y)) | ((x) << (32 - (y)))) + +#define XOR_BLOCKS(x,y) ({ \ + (x)[0] ^= (y)[0]; \ + (x)[1] ^= (y)[1]; \ + (x)[2] ^= (y)[2]; \ + (x)[3] ^= (y)[3]; \ +}) + +#define SWAPMOVE(a, b, mask, n) ({ \ + tmp = (b ^ (a >> n)) & mask; \ + b ^= tmp; \ + a ^= (tmp << n); \ +}) + +#define LE_LOAD(x, y) \ + *(x) = (((u32)(y)[3] << 24) | \ + ((u32)(y)[2] << 16) | \ + ((u32)(y)[1] << 8) | \ + (y)[0]); + +#define LE_STORE(x, y) \ + (x)[0] = (y) & 0xff; \ + (x)[1] = ((y) >> 8) & 0xff; \ + (x)[2] = ((y) >> 16) & 0xff; \ + (x)[3] = (y) >> 24; + +#endif // TK_SCHEDULE_H_ \ No newline at end of file diff --git a/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_2/api.h b/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_2/api.h new file mode 100644 index 0000000..a4aa567 --- /dev/null +++ b/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_2/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/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_2/crypto_aead.h b/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_2/crypto_aead.h new file mode 100644 index 0000000..e2ca9b0 --- /dev/null +++ b/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_2/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 +); \ No newline at end of file diff --git a/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_2/encrypt.c b/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_2/encrypt.c new file mode 100644 index 0000000..640910e --- /dev/null +++ b/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_2/encrypt.c @@ -0,0 +1,293 @@ +/****************************************************************************** +* Constant-time implementation of SKINNY-AEAD-M1 (v1.1). +* +* Two blocks are treated in parallel with SKINNY-128-384 whenever possible. +* +* For more details, see the paper at: https:// +* +* @author Alexandre Adomnicai, Nanyang Technological University, +* alexandre.adomnicai@ntu.edu.sg +* +* @date May 2020 +******************************************************************************/ +#include "skinny128.h" +#include "skinnyaead.h" +#include +#include + +/****************************************************************************** +* x ^= y where x, y are 128-bit blocks (16 bytes array). +******************************************************************************/ +static void xor_block(u8 * x, const u8* y) { + for(int i = 0; i < BLOCKBYTES; i++) + x[i] ^= y[i]; +} + +/****************************************************************************** +* Process the associated data. Common to SKINNY-AEAD-M1 encrypt and decrypt +* functions. +******************************************************************************/ +static void skinny_aead_m1_auth(u8* auth, u8* c, u8* tag, tweakey* tk, + u64 mlen, const u8* ad, u64 adlen) { + u64 lfsr = 1; + u8 feedback; + u8 tmp[2*BLOCKBYTES]; + memset(tmp, 0x00, 2*BLOCKBYTES); + memset(auth, 0x00, BLOCKBYTES); + SET_DOMAIN(tmp, 0x02); + while (adlen >= 2*BLOCKBYTES) { + LE_STR_64(tmp, lfsr); + UPDATE_LFSR(lfsr); + LE_STR_64(tmp + BLOCKBYTES, lfsr); + SET_DOMAIN(tmp + BLOCKBYTES, 0x02); + precompute_rtk1(tk->rtk1, tmp, tmp+BLOCKBYTES); + skinny128_384_encrypt(tmp, tmp+BLOCKBYTES, ad, ad+BLOCKBYTES, *tk); + xor_block(auth, tmp); + xor_block(auth, tmp + BLOCKBYTES); + adlen -= 2*BLOCKBYTES; + ad += 2*BLOCKBYTES; + UPDATE_LFSR(lfsr); + } + if (adlen > BLOCKBYTES) { // pad and process 2 blocs in // + LE_STR_64(tmp, lfsr); + UPDATE_LFSR(lfsr); + LE_STR_64(tmp + BLOCKBYTES, lfsr); + SET_DOMAIN(tmp + BLOCKBYTES, 0x03); // domain for padding ad + precompute_rtk1(tk->rtk1, tmp, tmp + BLOCKBYTES); + adlen -= BLOCKBYTES; + memset(tmp, 0x00, BLOCKBYTES); + memcpy(tmp, ad + BLOCKBYTES, adlen); + tmp[adlen] ^= 0x80; // padding + skinny128_384_encrypt(tmp + BLOCKBYTES, tmp, ad, tmp, *tk); + xor_block(auth, tmp); + xor_block(auth, tmp + BLOCKBYTES); + } else if (adlen == BLOCKBYTES) { + LE_STR_64(tmp, lfsr); + if (mlen == 0) { // if tag has *NOT* been calculated yet + precompute_rtk1(tk->rtk1, tmp, tag); // compute the tag + skinny128_384_encrypt(auth, c, ad, c, *tk); + } else { // if tag has been calculated yet + precompute_rtk1(tk->rtk1, tmp, tmp); // process last ad block + skinny128_384_encrypt(auth, auth, ad, ad, *tk); + } + } else if (adlen > 0) { + LE_STR_64(tmp, lfsr); + SET_DOMAIN(tmp, 0x03); // domain for padding ad + memset(tmp + BLOCKBYTES, 0x00, BLOCKBYTES); // padding + memcpy(tmp + BLOCKBYTES, ad, adlen); // padding + tmp[BLOCKBYTES + adlen] ^= 0x80; // padding + if (mlen == 0) { // if tag has *NOT* been calculated yet + precompute_rtk1(tk->rtk1, tmp, tag); // compute the tag + skinny128_384_encrypt(auth, c, tmp + BLOCKBYTES, c, *tk); + } else { // if tag has been calculated yet + precompute_rtk1(tk->rtk1, tmp, tmp); // process last ad block + skinny128_384_encrypt(auth, auth, tmp + BLOCKBYTES, tmp + BLOCKBYTES, *tk); + } + } +} + +/****************************************************************************** +* Encryption and authentication using SKINNY-AEAD-M1 +******************************************************************************/ +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) { + u64 i,lfsr = 1; + u8 feedback; + tweakey tk; + u8 tmp[2*BLOCKBYTES], tag[BLOCKBYTES], auth[BLOCKBYTES]; + (void)nsec; + + // ----------------- Initialization ----------------- + *clen = mlen + TAGBYTES; + precompute_rtk2_3(tk.rtk2_3, npub, k, SKINNY128_384_ROUNDS); + memset(tmp, 0x00, 2*BLOCKBYTES); + memset(tag, 0x00, BLOCKBYTES); + memset(auth, 0x00, BLOCKBYTES); + memset(c + mlen, 0x00, BLOCKBYTES); + // ----------------- Initialization ----------------- + + // ----------------- Process the plaintext ----------------- + while (mlen >= 2*BLOCKBYTES) { // process 2 blocks in // + LE_STR_64(tmp, lfsr); // lfsr for 1st block + UPDATE_LFSR(lfsr); + LE_STR_64(tmp + BLOCKBYTES, lfsr); // lfsr for 2nd block + precompute_rtk1(tk.rtk1, tmp, tmp + BLOCKBYTES); + skinny128_384_encrypt(c, c + BLOCKBYTES, m, m + BLOCKBYTES, tk); + xor_block(c + mlen, m); // sum for tag computation + xor_block(c + mlen, m + BLOCKBYTES); // sum for tag computation + mlen -= 2*BLOCKBYTES; + c += 2*BLOCKBYTES; + m += 2*BLOCKBYTES; + UPDATE_LFSR(lfsr); + } + SET_DOMAIN(tag, 0x04); // domain for tag computation + if (mlen > BLOCKBYTES) { // pad and process 2 blocs in // + LE_STR_64(tmp, lfsr); // lfsr for 1st block + UPDATE_LFSR(lfsr); + LE_STR_64(tmp + BLOCKBYTES, lfsr); // lfsr for 2nd block + SET_DOMAIN(tmp + BLOCKBYTES, 0x01); // domain for padding m + precompute_rtk1(tk.rtk1, tmp, tmp + BLOCKBYTES); + skinny128_384_encrypt(c, auth, m, auth, tk); + xor_block(c + mlen, m); + for(i = 0; i < mlen - BLOCKBYTES; i++) { + c[BLOCKBYTES + i] = auth[i] ^ m[BLOCKBYTES + i]; + c[mlen + i] ^= m[BLOCKBYTES + i]; + } + c[mlen + i] ^= 0x80; // padding + SET_DOMAIN(tag, 0x05); // domain for tag computation + m += mlen; + c += mlen; + mlen = 0; + UPDATE_LFSR(lfsr); + } else if (mlen == BLOCKBYTES) { // last block is full + LE_STR_64(tmp, lfsr); // lfsr for last full block + UPDATE_LFSR(lfsr); + LE_STR_64(tmp + BLOCKBYTES, lfsr); // lfsr for tag computation + SET_DOMAIN(tmp + BLOCKBYTES, 0x04); // domain for tag computation + xor_block(c + mlen, m); // sum for tag computation + precompute_rtk1(tk.rtk1, tmp, tmp + BLOCKBYTES); + skinny128_384_encrypt(c, c + mlen, m, c + mlen, tk); + c += BLOCKBYTES; + } else if (mlen > 0) { // last block is partial + LE_STR_64(tmp, lfsr); // lfsr for last block + SET_DOMAIN(tmp, 0x01); // domain for padding + UPDATE_LFSR(lfsr); + LE_STR_64(tmp + BLOCKBYTES, lfsr); // lfsr for tag computation + SET_DOMAIN(tmp + BLOCKBYTES, 0x05); // domain for tag computation + for(i = 0; i < mlen; i++) // sum for tag computation + c[mlen + i] ^= m[i]; // sum for tag computation + c[mlen + i] ^= 0x80; // padding + precompute_rtk1(tk.rtk1, tmp, tmp + BLOCKBYTES); + skinny128_384_encrypt(auth, c + mlen, auth, c + mlen, tk); + for(i = 0; i < mlen; i++) + c[i] = auth[i] ^ m[i]; // encrypted padded block + c += mlen; + } + if (mlen == 0) { // if tag has *NOT* been calculated yet + LE_STR_64(tag, lfsr); // lfsr for tag computation + if((adlen % 32) == 0 || (adlen % 32) > BLOCKBYTES) { //if all AD can be processed in // + precompute_rtk1(tk.rtk1, tag, tag); + skinny128_384_encrypt(c, c, c, c, tk); // compute the tag + } + } + // ----------------- Process the plaintext ----------------- + + // ----------------- Process the associated data ----------------- + skinny_aead_m1_auth(auth, c, tag, &tk, mlen, ad, adlen); + xor_block(c, auth); + // ----------------- Process the associated data ----------------- + + return 0; +} + + +/****************************************************************************** +* Decryption and authentication using SKINNY-AEAD-M1 +******************************************************************************/ +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) { + u64 i,lfsr = 1; + u8 feedback; + tweakey tk; + u8 tmp[2*BLOCKBYTES]; + u8 sum[BLOCKBYTES], tag[BLOCKBYTES], auth[BLOCKBYTES]; + (void)nsec; + + if (clen < TAGBYTES) + return -1; + + // ----------------- Initialization ----------------- + clen -= TAGBYTES; + *mlen = clen; + precompute_rtk2_3(tk.rtk2_3, npub, k, SKINNY128_384_ROUNDS); + memset(tmp, 0x00, 2*BLOCKBYTES); + memset(tag, 0x00, BLOCKBYTES); + memset(auth, 0x00, BLOCKBYTES); + memset(sum, 0x00, BLOCKBYTES); + // ----------------- Initialization ----------------- + + // ----------------- Process the plaintext ----------------- + while (clen >= 2*BLOCKBYTES) { // process 2 blocks in // + LE_STR_64(tmp, lfsr); // lfsr for 1st block + UPDATE_LFSR(lfsr); + LE_STR_64(tmp + BLOCKBYTES, lfsr); // lfsr for 2nd block + precompute_rtk1(tk.rtk1, tmp, tmp + BLOCKBYTES); + skinny128_384_decrypt(m, m + BLOCKBYTES, c, c + BLOCKBYTES, tk); + xor_block(sum, m); // sum for tag computation + xor_block(sum, m + BLOCKBYTES); // sum for tag computation + clen -= 2*BLOCKBYTES; + c += 2*BLOCKBYTES; + m += 2*BLOCKBYTES; + UPDATE_LFSR(lfsr); + } + SET_DOMAIN(tag, 0x04); // domain for tag computation + if (clen > BLOCKBYTES) { // pad and process 2 blocs in // + LE_STR_64(tmp, lfsr); // lfsr for 1st block + precompute_rtk1(tk.rtk1, tmp, tmp); + skinny128_384_decrypt(m, m, c, c, tk); + xor_block(sum, m); + UPDATE_LFSR(lfsr); + LE_STR_64(tmp, lfsr); // lfsr for 2nd block + SET_DOMAIN(tmp, 0x01); // domain for padding m + precompute_rtk1(tk.rtk1, tmp, tmp); + skinny128_384_encrypt(auth, auth, auth, auth, tk); + for(i = 0; i < clen - BLOCKBYTES; i++) { + m[BLOCKBYTES + i] = auth[i] ^ c[BLOCKBYTES + i]; + sum[i] ^= m[BLOCKBYTES + i]; + } + sum[i] ^= 0x80; // padding + SET_DOMAIN(tag, 0x05); // domain for tag computation + m += clen; + c += clen; + clen = 0; + UPDATE_LFSR(lfsr); + } else if (clen == BLOCKBYTES) { // last block is full + LE_STR_64(tmp, lfsr); // lfsr for last full block + precompute_rtk1(tk.rtk1, tmp, tmp); + skinny128_384_decrypt(m, m, c, c, tk); + xor_block(sum, m); // sum for tag computation + SET_DOMAIN(tag, 0x04); // domain for tag computation + UPDATE_LFSR(lfsr); + c += BLOCKBYTES; + clen = 0; + } else if (clen > 0) { // last block is partial + LE_STR_64(tmp, lfsr); // lfsr for last block + SET_DOMAIN(tmp, 0x01); // domain for padding + precompute_rtk1(tk.rtk1, tmp, tmp); + skinny128_384_encrypt(auth, auth, auth, auth, tk); + for(i = 0; i < clen; i++) { + m[i] = auth[i] ^ c[i]; // encrypted padded block + sum[i] ^= m[i]; // sum for tag computation + } + sum[i] ^= 0x80; // padding + SET_DOMAIN(tag, 0x05); // domain for tag computation + UPDATE_LFSR(lfsr); + m += clen; + c += clen; + clen = 0; + } + if (clen == 0) { // if tag has *NOT* been calculated yet + LE_STR_64(tag, lfsr); // lfsr for tag computation + if((adlen % 32) == 0 || (adlen % 32) > BLOCKBYTES) { + precompute_rtk1(tk.rtk1, tag, tag); //if AD can be processed in // + skinny128_384_encrypt(sum, sum, sum, sum, tk); // compute the tag + } + } + + // ----------------- Process the associated data ----------------- + skinny_aead_m1_auth(auth, sum, tag, &tk, clen, ad, adlen); + xor_block(sum, auth); + feedback = 0; + for(i = 0; i < TAGBYTES; i++) + feedback |= sum[i] ^ c[i]; // constant-time tag verification + return feedback; + // ----------------- Process the associated data ----------------- +} \ No newline at end of file diff --git a/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_2/skinny128.c b/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_2/skinny128.c new file mode 100644 index 0000000..2e1e9c3 --- /dev/null +++ b/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_2/skinny128.c @@ -0,0 +1,210 @@ +/****************************************************************************** +* Fixsliced implementation of SKINNY-128-384. +* Two blocks are processed in parallel. +* +* This implementation doesn't compute the ShiftRows operation. Some masks and +* shifts are applied during the MixColumns operation so that the proper bits +* are XORed together. Moreover, the row permutation within the MixColumns +* is omitted, as well as the bit permutation at the end of the Sbox. The rows +* are synchronized with the classical after only 4 rounds. However, the Sbox +* permutation requires 8 rounds for a synchronization. To limit the impact +* on code size, we compute the permutation every 4 rounds. Therefore, this +* implementation relies on a "QUADRUPLE_ROUND" routine. +* +* For more details, see the paper at: https:// +* +* @author Alexandre Adomnicai, Nanyang Technological University, +* alexandre.adomnicai@ntu.edu.sg +* +* @date May 2020 +******************************************************************************/ +#include +#include +#include "skinny128.h" +#include "tk_schedule.h" + +/**************************************************************************** +* The MixColumns operation for rounds i such that (i % 4) == 0. +****************************************************************************/ +void mixcolumns_0(u32* state) { + u32 tmp; + for(int i = 0; i < 8; i++) { + tmp = ROR(state[i],24) & 0x0c0c0c0c; + state[i] ^= ROR(tmp,30); + tmp = ROR(state[i],16) & 0xc0c0c0c0; + state[i] ^= ROR(tmp,4); + tmp = ROR(state[i],8) & 0x0c0c0c0c; + state[i] ^= ROR(tmp,2); + } +} + +/**************************************************************************** +* The MixColumns operation for rounds i such that (i % 4) == 1. +****************************************************************************/ +void mixcolumns_1(u32* state) { + u32 tmp; + for(int i = 0; i < 8; i++) { + tmp = ROR(state[i],16) & 0x30303030; + state[i] ^= ROR(tmp,30); + tmp = state[i] & 0x03030303; + state[i] ^= ROR(tmp,28); + tmp = ROR(state[i],16) & 0x30303030; + state[i] ^= ROR(tmp,2); + } +} + +/**************************************************************************** +* The MixColumns operation for rounds i such that (i % 4) == 2. +****************************************************************************/ +void mixcolumns_2(u32* state) { + u32 tmp; + for(int i = 0; i < 8; i++) { + tmp = ROR(state[i],8) & 0xc0c0c0c0; + state[i] ^= ROR(tmp,6); + tmp = ROR(state[i],16) & 0x0c0c0c0c; + state[i] ^= ROR(tmp,28); + tmp = ROR(state[i],24) & 0xc0c0c0c0; + state[i] ^= ROR(tmp,2); + } +} + +/**************************************************************************** +* The MixColumns operation for rounds i such that (i % 4) == 3. +****************************************************************************/ +void mixcolumns_3(u32* state) { + u32 tmp; + for(int i = 0; i < 8; i++) { + tmp = state[i] & 0x03030303; + state[i] ^= ROR(tmp,30); + tmp = state[i] & 0x30303030; + state[i] ^= ROR(tmp,4); + tmp = state[i] & 0x03030303; + state[i] ^= ROR(tmp,26); + } +} + +/**************************************************************************** +* The inverse MixColumns oepration for rounds i such that (i % 4) == 0 +****************************************************************************/ +void inv_mixcolumns_0(u32* state) { + u32 tmp; + for(int i = 0; i < 8; i++) { + tmp = ROR(state[i],8) & 0x0c0c0c0c; + state[i] ^= ROR(tmp,2); + tmp = ROR(state[i],16) & 0xc0c0c0c0; + state[i] ^= ROR(tmp,4); + tmp = ROR(state[i],24) & 0x0c0c0c0c; + state[i] ^= ROR(tmp,30); + } +} + +/**************************************************************************** +* The inverse MixColumns oepration for rounds i such that (i % 4) == 1 +****************************************************************************/ +void inv_mixcolumns_1(u32* state) { + u32 tmp; + for(int i = 0; i < 8; i++) { + tmp = ROR(state[i],16) & 0x30303030; + state[i] ^= ROR(tmp,2); + tmp = state[i] & 0x03030303; + state[i] ^= ROR(tmp,28); + tmp = ROR(state[i],16) & 0x30303030; + state[i] ^= ROR(tmp,30); + } +} + +/**************************************************************************** +* The inverse MixColumns oepration for rounds i such that (i % 4) == 2 +****************************************************************************/ +void inv_mixcolumns_2(u32* state) { + u32 tmp; + for(int i = 0; i < 8; i++) { + tmp = ROR(state[i],24) & 0xc0c0c0c0; + state[i] ^= ROR(tmp,2); + tmp = ROR(state[i],16) & 0x0c0c0c0c; + state[i] ^= ROR(tmp,28); + tmp = ROR(state[i],8) & 0xc0c0c0c0; + state[i] ^= ROR(tmp,6); + } +} + +/**************************************************************************** +* The inverse MixColumns oepration for rounds i such that (i % 4) == 3 +****************************************************************************/ +void inv_mixcolumns_3(u32* state) { + u32 tmp; + for(int i = 0; i < 8; i++) { + tmp = state[i] & 0x03030303; + state[i] ^= ROR(tmp,26); + tmp = state[i] & 0x30303030; + state[i] ^= ROR(tmp,4); + tmp = state[i] & 0x03030303; + state[i] ^= ROR(tmp,30); + } +} + +/**************************************************************************** +* Adds the tweakey (including the round constants) to the state. +****************************************************************************/ +void add_tweakey(u32* state, const u32* rtk1, const u32* rtk2_3) { + state[0] ^= rtk1[0] ^ rtk2_3[0]; + state[1] ^= rtk1[1] ^ rtk2_3[1]; + state[2] ^= rtk1[2] ^ rtk2_3[2]; + state[3] ^= rtk1[3] ^ rtk2_3[3]; + state[4] ^= rtk1[4] ^ rtk2_3[4]; + state[5] ^= rtk1[5] ^ rtk2_3[5]; + state[6] ^= rtk1[6] ^ rtk2_3[6]; + state[7] ^= rtk1[7] ^ rtk2_3[7]; +} + +/**************************************************************************** +* Encryption of 2 blocks in parallel using SKINNY-128-384. +* The input parameters 'rtk1' and 'rtk2_3' are given seperately to avoid +* unnecessary recomputations of the entire tk schedule during SKINNY-AEAD-M1. +****************************************************************************/ +void skinny128_384_encrypt(u8* ctext, u8* ctext_bis, const u8* ptext, + const u8* ptext_bis, const tweakey tk) { + u32 state[8]; + packing(state, ptext, ptext_bis); + QUADRUPLE_ROUND(state, tk.rtk1, tk.rtk2_3); + QUADRUPLE_ROUND(state, tk.rtk1+32, tk.rtk2_3+32); + QUADRUPLE_ROUND(state, tk.rtk1+64, tk.rtk2_3+64); + QUADRUPLE_ROUND(state, tk.rtk1+96, tk.rtk2_3+96); + QUADRUPLE_ROUND(state, tk.rtk1, tk.rtk2_3+128); + QUADRUPLE_ROUND(state, tk.rtk1+32, tk.rtk2_3+160); + QUADRUPLE_ROUND(state, tk.rtk1+64, tk.rtk2_3+192); + QUADRUPLE_ROUND(state, tk.rtk1+96, tk.rtk2_3+224); + QUADRUPLE_ROUND(state, tk.rtk1, tk.rtk2_3+256); + QUADRUPLE_ROUND(state, tk.rtk1+32, tk.rtk2_3+288); + QUADRUPLE_ROUND(state, tk.rtk1+64, tk.rtk2_3+320); + QUADRUPLE_ROUND(state, tk.rtk1+96, tk.rtk2_3+352); + QUADRUPLE_ROUND(state, tk.rtk1, tk.rtk2_3+384); + QUADRUPLE_ROUND(state, tk.rtk1+32, tk.rtk2_3+416); + unpacking(ctext, ctext_bis, state); +} + +/**************************************************************************** +* Decryption of 2 blocks in parallel using SKINNY-128-384. +* The input parameters 'rtk1' and 'rtk2_3' are given seperately to avoid +* unnecessary recomputations of the entire tk schedule during SKINNY-AEAD-M1. +****************************************************************************/ +void skinny128_384_decrypt(u8* ptext, u8* ptext_bis, const u8* ctext, + const u8* ctext_bis, const tweakey tk) { + u32 state[8]; + packing(state, ctext, ctext_bis); + INV_QUADRUPLE_ROUND(state, tk.rtk1+32, tk.rtk2_3+416); + INV_QUADRUPLE_ROUND(state, tk.rtk1, tk.rtk2_3+384); + INV_QUADRUPLE_ROUND(state, tk.rtk1+96, tk.rtk2_3+352); + INV_QUADRUPLE_ROUND(state, tk.rtk1+64, tk.rtk2_3+320); + INV_QUADRUPLE_ROUND(state, tk.rtk1+32, tk.rtk2_3+288); + INV_QUADRUPLE_ROUND(state, tk.rtk1, tk.rtk2_3+256); + INV_QUADRUPLE_ROUND(state, tk.rtk1+96, tk.rtk2_3+224); + INV_QUADRUPLE_ROUND(state, tk.rtk1+64, tk.rtk2_3+192); + INV_QUADRUPLE_ROUND(state, tk.rtk1+32, tk.rtk2_3+160); + INV_QUADRUPLE_ROUND(state, tk.rtk1, tk.rtk2_3+128); + INV_QUADRUPLE_ROUND(state, tk.rtk1+96, tk.rtk2_3+96); + INV_QUADRUPLE_ROUND(state, tk.rtk1+64, tk.rtk2_3+64); + INV_QUADRUPLE_ROUND(state, tk.rtk1+32, tk.rtk2_3+32); + INV_QUADRUPLE_ROUND(state, tk.rtk1, tk.rtk2_3); + unpacking(ptext, ptext_bis, state); +} \ No newline at end of file diff --git a/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_2/skinny128.h b/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_2/skinny128.h new file mode 100644 index 0000000..f173be5 --- /dev/null +++ b/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_2/skinny128.h @@ -0,0 +1,127 @@ +#ifndef SKINNY128_H_ +#define SKINNY128_H_ +#include "tk_schedule.h" + +void skinny128_384_encrypt(u8* ctext, u8* ctext_bis, const u8* ptext, + const u8* ptext_bis, const tweakey tk); + +void skinny128_384_decrypt(u8* ctext, u8* ctext_bis, const u8* ptext, + const u8* ptext_bis, const tweakey tk); + +#define SKINNY128_128_ROUNDS 40 +#define SKINNY128_256_ROUNDS 48 +#define SKINNY128_384_ROUNDS 56 + +#define ROR(x,y) (((x) >> (y)) | ((x) << (32 - (y)))) + +#define QUADRUPLE_ROUND(state, rtk1, rtk2_3) ({ \ + state[3] ^= (state[0] | state[1]); \ + state[7] ^= (state[4] | state[5]); \ + state[1] ^= (state[6] | state[5]); \ + state[2] ^= (state[3] & state[7]); \ + state[6] ^= (~state[7] | state[4]); \ + state[0] ^= (state[2] | ~state[1]); \ + state[4] ^= (~state[3] | state[2]); \ + state[5] ^= (state[6] & state[0]); \ + add_tweakey(state, rtk1, rtk2_3); \ + mixcolumns_0(state); \ + state[4] ^= (state[2] | state[3]); \ + state[5] ^= (state[6] | state[1]); \ + state[3] ^= (state[0] | state[1]); \ + state[7] ^= (state[4] & state[5]); \ + state[0] ^= (~state[5] | state[6]); \ + state[2] ^= (state[7] | ~state[3]); \ + state[6] ^= (~state[4] | state[7]); \ + state[1] ^= (state[0] & state[2]); \ + add_tweakey(state, rtk1+8, rtk2_3+8); \ + mixcolumns_1(state); \ + state[6] ^= (state[7] | state[4]); \ + state[1] ^= (state[0] | state[3]); \ + state[4] ^= (state[2] | state[3]); \ + state[5] ^= (state[6] & state[1]); \ + state[2] ^= (~state[1] | state[0]); \ + state[7] ^= (state[5] | ~state[4]); \ + state[0] ^= (~state[6] | state[5]); \ + state[3] ^= (state[2] & state[7]); \ + add_tweakey(state, rtk1+16, rtk2_3+16); \ + mixcolumns_2(state); \ + state[0] ^= (state[5] | state[6]); \ + state[3] ^= (state[2] | state[4]); \ + state[6] ^= (state[7] | state[4]); \ + state[1] ^= (state[0] & state[3]); \ + state[7] ^= (~state[3] | state[2]); \ + state[5] ^= (state[1] | ~state[6]); \ + state[2] ^= (~state[0] | state[1]); \ + state[4] ^= (state[7] & state[5]); \ + add_tweakey(state, rtk1+24, rtk2_3+24); \ + mixcolumns_3(state); \ + state[0] ^= state[1]; \ + state[1] ^= state[0]; \ + state[0] ^= state[1]; \ + state[2] ^= state[3]; \ + state[3] ^= state[2]; \ + state[2] ^= state[3]; \ + state[4] ^= state[7]; \ + state[7] ^= state[4]; \ + state[4] ^= state[7]; \ + state[5] ^= state[6]; \ + state[6] ^= state[5]; \ + state[5] ^= state[6]; \ +}) + +#define INV_QUADRUPLE_ROUND(state, rtk1, rtk2_3) ({ \ + state[0] ^= state[1]; \ + state[1] ^= state[0]; \ + state[0] ^= state[1]; \ + state[2] ^= state[3]; \ + state[3] ^= state[2]; \ + state[2] ^= state[3]; \ + state[4] ^= state[7]; \ + state[7] ^= state[4]; \ + state[4] ^= state[7]; \ + state[5] ^= state[6]; \ + state[6] ^= state[5]; \ + state[5] ^= state[6]; \ + inv_mixcolumns_3(state); \ + add_tweakey(state, rtk1+24, rtk2_3+24); \ + state[4] ^= (state[7] & state[5]); \ + state[2] ^= (~state[0] | state[1]); \ + state[5] ^= (state[1] | ~state[6]); \ + state[7] ^= (~state[3] | state[2]); \ + state[1] ^= (state[0] & state[3]); \ + state[6] ^= (state[7] | state[4]); \ + state[3] ^= (state[2] | state[4]); \ + state[0] ^= (state[5] | state[6]); \ + inv_mixcolumns_2(state); \ + add_tweakey(state, rtk1+16, rtk2_3+16); \ + state[3] ^= (state[2] & state[7]); \ + state[0] ^= (~state[6] | state[5]); \ + state[7] ^= (state[5] | ~state[4]); \ + state[2] ^= (~state[1] | state[0]); \ + state[5] ^= (state[6] & state[1]); \ + state[4] ^= (state[2] | state[3]); \ + state[1] ^= (state[0] | state[3]); \ + state[6] ^= (state[7] | state[4]); \ + inv_mixcolumns_1(state); \ + add_tweakey(state, rtk1+8, rtk2_3+8); \ + state[1] ^= (state[0] & state[2]); \ + state[6] ^= (~state[4] | state[7]); \ + state[2] ^= (state[7] | ~state[3]); \ + state[0] ^= (~state[5] | state[6]); \ + state[7] ^= (state[4] & state[5]); \ + state[3] ^= (state[0] | state[1]); \ + state[5] ^= (state[6] | state[1]); \ + state[4] ^= (state[2] | state[3]); \ + inv_mixcolumns_0(state); \ + add_tweakey(state, rtk1, rtk2_3); \ + state[5] ^= (state[6] & state[0]); \ + state[4] ^= (~state[3] | state[2]); \ + state[0] ^= (state[2] | ~state[1]); \ + state[6] ^= (~state[7] | state[4]); \ + state[2] ^= (state[3] & state[7]); \ + state[1] ^= (state[6] | state[5]); \ + state[7] ^= (state[4] | state[5]); \ + state[3] ^= (state[0] | state[1]); \ +}) + +#endif // SKINNY128_H_ \ No newline at end of file diff --git a/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_2/skinnyaead.h b/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_2/skinnyaead.h new file mode 100644 index 0000000..5500af8 --- /dev/null +++ b/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_2/skinnyaead.h @@ -0,0 +1,32 @@ +#ifndef SKINNYAEADM1_H_ +#define SKINNYAEADM1_H_ + +#include "skinny128.h" + +typedef unsigned char u8; +typedef unsigned int u32; +typedef unsigned long long u64; + +#define TAGBYTES 16 +#define KEYBYTES 16 +#define BLOCKBYTES 16 + +#define SET_DOMAIN(ptr, domain) ((ptr)[15] = (domain)) + +#define UPDATE_LFSR(lfsr) ({ \ + feedback = ((lfsr) & (1ULL << 63)) ? 0x1B : 0x00; \ + (lfsr) = ((lfsr) << 1) ^ feedback; \ +}) + +#define LE_STR_64(ptr, x) ({ \ + (ptr)[0] = (u8)(x); \ + (ptr)[1] = (u8)((x) >> 8); \ + (ptr)[2] = (u8)((x) >> 16); \ + (ptr)[3] = (u8)((x) >> 24); \ + (ptr)[4] = (u8)((x) >> 32); \ + (ptr)[5] = (u8)((x) >> 40); \ + (ptr)[6] = (u8)((x) >> 48); \ + (ptr)[7] = (u8)((x) >> 56); \ +}) + +#endif // SKINNYAEADM1_H_ \ No newline at end of file diff --git a/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_2/tk_schedule.c b/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_2/tk_schedule.c new file mode 100644 index 0000000..3897777 --- /dev/null +++ b/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_2/tk_schedule.c @@ -0,0 +1,496 @@ +/******************************************************************************* +* Implementation of the tweakey schedule according to the fixsliced +* representation. +* +* For more details, see the paper at: https:// +* +* @author Alexandre Adomnicai, Nanyang Technological University, +* alexandre.adomnicai@ntu.edu.sg +* +* @date May 2020 +*******************************************************************************/ +#include +#include +#include "tk_schedule.h" + +typedef unsigned char u8; +typedef unsigned int u32; + +/**************************************************************************** +* The round constants according to the fixsliced representation. +****************************************************************************/ +u32 rconst_32_bs[448] = { + 0xfffffff3, 0xffffffff, 0x00000000, 0xffffffff, + 0xffffffff, 0x000000c0, 0xffffffff, 0xffffffff, + 0xffffffff, 0x00000300, 0xcffffcff, 0xffffffff, + 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, + 0xffffffff, 0xffffffff, 0xffffffff, 0x0c000000, + 0xf3ffffff, 0x00000000, 0xffffffff, 0x33ffffff, + 0xffffffff, 0x00000000, 0xffffffff, 0xffffffff, + 0x00300000, 0xffcffffc, 0xffcfffff, 0xffcfffff, + 0xff33ffff, 0xff3fffff, 0x00000000, 0xffffffff, + 0xffffffff, 0x00f00000, 0xff3fffff, 0xffffffff, + 0xfcffffff, 0x00c00000, 0xfc3fcfff, 0xfcffffff, + 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, + 0xffffffff, 0xffffffff, 0xfffff3ff, 0x03000c00, + 0xfffff3ff, 0x00000000, 0xffffffff, 0xfcff3fff, + 0xffffffff, 0x00000000, 0xffffffff, 0xffffffff, + 0x00000c30, 0xfffcf3cf, 0xffffffff, 0xffffffcf, + 0xffffff03, 0xffffff3f, 0x00000000, 0xffffffff, + 0xffffffff, 0x000000f0, 0xffffffff, 0xffffffff, + 0xfffffcff, 0x00000300, 0xcffffc3f, 0xfffffcff, + 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, + 0xffffffff, 0xffffffff, 0xf3ffffff, 0x00000300, + 0xf3ffffff, 0x00000000, 0xffffffff, 0x33ffffff, + 0xffffffff, 0x00000000, 0xffffffff, 0xffffffff, + 0x0c000000, 0xf3fffffc, 0xffcfffff, 0xffcfffff, + 0xffc3ffff, 0xffffffff, 0x00000000, 0xffffffff, + 0xffffffff, 0x00f00000, 0xff3fffff, 0xffffffff, + 0xffffffff, 0x03c00000, 0xfc3fcfff, 0xffffffff, + 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, + 0xffffffff, 0xffffffff, 0xffffffff, 0x00000c00, + 0xfffff3ff, 0x00000000, 0xffffffff, 0xfcff33ff, + 0xffffffff, 0x00000000, 0xffffffff, 0xffffffff, + 0x00000000, 0xfffcffcf, 0xffffffcf, 0xffffffcf, + 0xfffffff3, 0xffffff3f, 0x00000000, 0xffffffff, + 0xffffffff, 0x000000f0, 0xffffff3f, 0xffffffff, + 0xfffffcff, 0x000000c0, 0xcffffc3f, 0xffffffff, + 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, + 0xffffffff, 0xffffffff, 0xffffffff, 0x0c000300, + 0xf3ffffff, 0x00000000, 0xffffffff, 0x3ffffcff, + 0xffffffff, 0x00000000, 0xffffffff, 0xffffffff, + 0x00300000, 0xf3cffffc, 0xffffffff, 0xffcfffff, + 0xff33ffff, 0xff3fffff, 0x00000000, 0xffffffff, + 0xffffffff, 0x00300000, 0xffffffff, 0xffffffff, + 0xfcffffff, 0x00000000, 0xff3fcfff, 0xfcffffff, + 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, + 0xffffffff, 0xffffffff, 0xfffff3ff, 0x03000000, + 0xffffffff, 0x00000000, 0xffffffff, 0xffff3fff, + 0xffffffff, 0x00000000, 0xffffffff, 0xffffffff, + 0x00000c00, 0xfffcf3ff, 0xffffffff, 0xffffffff, + 0xffffffc3, 0xffffffff, 0x00000000, 0xffffffff, + 0xffffffff, 0x000000c0, 0xffffffff, 0xffffffff, + 0xffffffff, 0x00000000, 0xcffffcff, 0xffffffff, + 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, + 0xffffffff, 0xffffffff, 0xffffffff, 0x0c000000, + 0xf3ffffff, 0x00000000, 0xffffffff, 0x3fffffff, + 0xffffffff, 0x00000000, 0xffffffff, 0xffffffff, + 0x00300000, 0xffcffffc, 0xffffffff, 0xffcfffff, + 0xff33ffff, 0xff3fffff, 0x00000000, 0xffffffff, + 0xffffffff, 0x00f00000, 0xffffffff, 0xffffffff, + 0xfcffffff, 0x00000000, 0xfc3fcfff, 0xfcffffff, + 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, + 0xffffffff, 0xffffffff, 0xfffff3ff, 0x03000000, + 0xfffff3ff, 0x00000000, 0xffffffff, 0xffff3fff, + 0xffffffff, 0x00000000, 0xffffffff, 0xffffffff, + 0x00000c00, 0xfffcf3ff, 0xffffffff, 0xffffffcf, + 0xffffffc3, 0xffffffff, 0x00000000, 0xffffffff, + 0xffffffff, 0x000000f0, 0xffffffff, 0xffffffff, + 0xffffffff, 0x00000300, 0xcffffc3f, 0xffffffff, + 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, + 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, + 0xf3ffffff, 0x00000000, 0xffffffff, 0x33ffffff, + 0xffffffff, 0x00000000, 0xffffffff, 0xffffffff, + 0x00300000, 0xfffffffc, 0xffcfffff, 0xffcfffff, + 0xff33ffff, 0xffffffff, 0x00000000, 0xffffffff, + 0xffffffff, 0x00f00000, 0xff3fffff, 0xffffffff, + 0xffffffff, 0x00c00000, 0xfc3fcfff, 0xfcffffff, + 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, + 0xffffffff, 0xffffffff, 0xfffff3ff, 0x00000c00, + 0xfffff3ff, 0x00000000, 0xffffffff, 0xfcff3fff, + 0xffffffff, 0x00000000, 0xffffffff, 0xffffffff, + 0x00000c00, 0xfffcffcf, 0xffffffff, 0xffffffcf, + 0xffffffc3, 0xffffff3f, 0x00000000, 0xffffffff, + 0xffffffff, 0x00000030, 0xffffffff, 0xffffffff, + 0xfffffcff, 0x00000300, 0xcfffff3f, 0xffffffff, + 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, + 0xffffffff, 0xffffffff, 0xffffffff, 0x00000300, + 0xffffffff, 0x00000000, 0xffffffff, 0x33ffffff, + 0xffffffff, 0x00000000, 0xffffffff, 0xffffffff, + 0x00000000, 0xf3fffffc, 0xffcfffff, 0xffffffff, + 0xfff3ffff, 0xffffffff, 0x00000000, 0xffffffff, + 0xffffffff, 0x00000000, 0xff3fffff, 0xffffffff, + 0xffffffff, 0x03c00000, 0xffffcfff, 0xffffffff, + 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, + 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, + 0xffffffff, 0x00000000, 0xffffffff, 0xfcff33ff, + 0xffffffff, 0x00000000, 0xffffffff, 0xffffffff, + 0x00000000, 0xfffcffff, 0xffffffcf, 0xffffffff, + 0xfffffff3, 0xffffffff, 0x00000000, 0xffffffff, + 0xffffffff, 0x000000c0, 0xffffff3f, 0xffffffff, + 0xffffffff, 0x000003c0, 0xcffffcff, 0xffffffff, + 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, + 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, + 0xf3ffffff, 0x00000000, 0xffffffff, 0x33fffcff, + 0xffffffff, 0x00000000, 0xffffffff, 0xffffffff, + 0x00000000, 0xfffffffc, 0xffcfffff, 0xffcfffff, + 0xfff3ffff, 0xffffffff, 0x00000000, 0xffffffff, + 0xffffffff, 0x00f00000, 0xff3fffff, 0xffffffff, + 0xffffffff, 0x00c00000, 0xfc3fcfff, 0xffffffff, + 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, + 0xffffffff, 0xffffffff, 0xffffffff, 0x00000c00, + 0xfffff3ff, 0x00000000, 0xffffffff, 0xfcff3fff, + 0xffffffff, 0x00000000, 0xffffffff, 0xffffffff, + 0x00000000, 0xfffcffcf, 0xffffffff, 0xffffffcf +}; + +/**************************************************************************** +* Packs 2 input blocks B, B' into the state using a bitsliced representation. +* Once the packing process is complete, the 256-bit state consists of 8 +* 32-bit word and the input blocks bit positioning is as follows: +* +* 24 24' 56 56' 88 88' 120 120' | ... | 0 0' 32 32' 64 64' 96 96' +* 25 25' 57 57' 89 89' 121 121' | ... | 1 1' 33 33' 65 65' 97 97' +* 26 26' 58 58' 90 90' 122 122' | ... | 2 2' 34 34' 66 66' 98 98' +* 27 27' 59 59' 91 91' 123 123' | ... | 3 3' 35 35' 67 67' 99 99' +* 28 28' 60 60' 92 92' 124 124' | ... | 4 4' 36 36' 68 68' 100 100' +* 29 29' 61 61' 93 93' 125 125' | ... | 5 5' 37 37' 69 69' 101 101' +* 30 30' 62 62' 94 94' 126 126' | ... | 6 6' 38 38' 70 70' 102 102' +* 31 31' 63 63' 95 95' 127 127' | ... | 7 7' 39 39' 71 71' 103 103' +****************************************************************************/ +void packing(u32* out, const u8* block0, const u8* block1) { + u32 tmp; + LE_LOAD(out, block0); + LE_LOAD(out + 1, block1); + LE_LOAD(out + 2, block0 + 4); + LE_LOAD(out + 3, block1 + 4); + LE_LOAD(out + 4, block0 + 8); + LE_LOAD(out + 5, block1 + 8); + LE_LOAD(out + 6, block0 + 12); + LE_LOAD(out + 7, block1 + 12); + SWAPMOVE(out[1], out[0], 0x55555555, 1); + SWAPMOVE(out[3], out[2], 0x55555555, 1); + SWAPMOVE(out[5], out[4], 0x55555555, 1); + SWAPMOVE(out[7], out[6], 0x55555555, 1); + SWAPMOVE(out[2], out[0], 0x30303030, 2); + SWAPMOVE(out[4], out[0], 0x0c0c0c0c, 4); + SWAPMOVE(out[6], out[0], 0x03030303, 6); + SWAPMOVE(out[3], out[1], 0x30303030, 2); + SWAPMOVE(out[5], out[1], 0x0c0c0c0c, 4); + SWAPMOVE(out[7], out[1], 0x03030303, 6); + SWAPMOVE(out[4], out[2], 0x0c0c0c0c, 2); + SWAPMOVE(out[6], out[2], 0x03030303, 4); + SWAPMOVE(out[5], out[3], 0x0c0c0c0c, 2); + SWAPMOVE(out[7], out[3], 0x03030303, 4); + SWAPMOVE(out[6], out[4], 0x03030303, 2); + SWAPMOVE(out[7], out[5], 0x03030303, 2); +} + +/**************************************************************************** +* Unacks the 256-bit state into the 32-byte output byte array. +* Once the unpacking process is complete, the byte ordering within the output +* array is as follows: +* +* 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, +* 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 +****************************************************************************/ +void unpacking(u8* out, u8* out_bis, u32 *in) { + u32 tmp; + SWAPMOVE(in[6], in[4], 0x03030303, 2); + SWAPMOVE(in[7], in[5], 0x03030303, 2); + SWAPMOVE(in[5], in[3], 0x0c0c0c0c, 2); + SWAPMOVE(in[7], in[3], 0x03030303, 4); + SWAPMOVE(in[4], in[2], 0x0c0c0c0c, 2); + SWAPMOVE(in[6], in[2], 0x03030303, 4); + SWAPMOVE(in[7], in[1], 0x03030303, 6); + SWAPMOVE(in[5], in[1], 0x0c0c0c0c, 4); + SWAPMOVE(in[3], in[1], 0x30303030, 2); + SWAPMOVE(in[6], in[0], 0x03030303, 6); + SWAPMOVE(in[4], in[0], 0x0c0c0c0c, 4); + SWAPMOVE(in[2], in[0], 0x30303030, 2); + SWAPMOVE(in[1], in[0], 0x55555555, 1); + SWAPMOVE(in[3], in[2], 0x55555555, 1); + SWAPMOVE(in[5], in[4], 0x55555555, 1); + SWAPMOVE(in[7], in[6], 0x55555555, 1); + LE_STORE(out, in[0]); + LE_STORE(out_bis, in[1]); + LE_STORE(out + 4, in[2]); + LE_STORE(out_bis + 4, in[3]); + LE_STORE(out + 8, in[4]); + LE_STORE(out_bis + 8, in[5]); + LE_STORE(out + 12, in[6]); + LE_STORE(out_bis + 12, in[7]); +} + + +//Apply the permutation in a bitsliced manner, twice +void permute_tk_2(u32* tk) { + u32 tmp; + for(int i =0; i < 8; i++) { + tmp = tk[i]; + tk[i] = ROR(tmp,14) & 0xcc00cc00; + tk[i] |= (tmp & 0x000000ff) << 16; + tk[i] |= (tmp & 0xcc000000)>> 2; + tk[i] |= (tmp & 0x0033cc00) >> 8; + tk[i] |= (tmp & 0x00cc0000) >>18; + } +} + +//Apply the permutation in a bitsliced manner, 4 times +void permute_tk_4(u32* tk) { + u32 tmp; + for(int i =0; i < 8; i++) { + tmp = tk[i]; + tk[i] = ROR(tmp,22) & 0xcc0000cc; + tk[i] |= ROR(tmp,16) & 0x3300cc00; + tk[i] |= ROR(tmp, 24) & 0x00cc3300; + tk[i] |= (tmp & 0x00cc00cc) >> 2; + } +} + +//Apply the permutation in a bitsliced manner, 6 times +void permute_tk_6(u32* tk) { + u32 tmp; + for(int i =0; i < 8; i++) { + tmp = tk[i]; + tk[i] = ROR(tmp,6) & 0xcccc0000; + tk[i] |= ROR(tmp,24) & 0x330000cc; + tk[i] |= ROR(tmp,10) & 0x3333; + tk[i] |= (tmp & 0xcc) << 14; + tk[i] |= (tmp & 0x3300) << 2; + } +} + +//Apply the permutation in a bitsliced manner, 8 times +void permute_tk_8(u32* tk) { + u32 tmp; + for(int i =0; i < 8; i++) { + tmp = tk[i]; + tk[i] = ROR(tmp,24) & 0xcc000033; + tk[i] |= ROR(tmp,8) & 0x33cc0000; + tk[i] |= ROR(tmp,26) & 0x00333300; + tk[i] |= (tmp & 0x00333300) >> 6; + } +} + +//Apply the permutation in a bitsliced manner, 10 times +void permute_tk_10(u32* tk) { + u32 tmp; + for(int i =0; i < 8; i++) { + tmp = tk[i]; + tk[i] = ROR(tmp,8) & 0xcc330000; + tk[i] |= ROR(tmp,26) & 0x33000033; + tk[i] |= ROR(tmp,22) & 0x00cccc00; + tk[i] |= (tmp & 0x00330000) >> 14; + tk[i] |= (tmp & 0xcc00) >> 2; + } +} + +//Apply the permutation in a bitsliced manner, 12 times +void permute_tk_12(u32* tk) { + u32 tmp; + for(int i =0; i < 8; i++) { + tmp = tk[i]; + tk[i] = ROR(tmp,8) & 0xcc33; + tk[i] |= ROR(tmp,30) & 0x00cc00cc; + tk[i] |= ROR(tmp,10) & 0x33330000; + tk[i] |= ROR(tmp,16) & 0xcc003300; + } +} + +//Apply the permutation in a bitsliced manner, 14 times +void permute_tk_14(u32* tk) { + u32 tmp; + for(int i =0; i < 8; i++) { + tmp = tk[i]; + tk[i] = ROR(tmp,24) & 0x0033cc00; //red + tk[i] |= ROR(tmp,14) & 0x00cc0000; //green + tk[i] |= ROR(tmp,30) & 0xcc000000; //blue + tk[i] |= ROR(tmp,16) & 0x000000ff; //yellow + tk[i] |= ROR(tmp,18) & 0x33003300; //purp + } +} + +void precompute_lfsr_tk2(u32* tk, const u8* tk2_0, + const u8* tk2_1, const int rounds) { + u32 tmp; + u32 state[8]; + packing(state, tk2_0, tk2_1); + memcpy(tk, state, 32); + for(int i = 0 ; i < rounds; i+=2) { + LFSR2(state); + memcpy(tk+i*8+8, state, 32); + } +} + +void precompute_lfsr_tk3(u32* tk, const u8* tk3_0, + const u8* tk3_1, const int rounds) { + u32 tmp; + u32 state[8]; + packing(state, tk3_0, tk3_1); + for(int i = 0; i < 8; i++) + tk[i] ^= state[i]; + for(int i = 0 ; i < rounds; i+=2) { + LFSR3(state); + tk[i*8+8] ^= state[0]; + tk[i*8+9] ^= state[1]; + tk[i*8+10] ^= state[2]; + tk[i*8+11] ^= state[3]; + tk[i*8+12] ^= state[4]; + tk[i*8+13] ^= state[5]; + tk[i*8+14] ^= state[6]; + tk[i*8+15] ^= state[7]; + } +} + +/**************************************************************************** +* XOR with TK with TK1 before applying the permutations. +* The key is then rearranged to match the fixsliced representation. +****************************************************************************/ +void permute_tk(u32* tk, const u8* tk1_0, const u8* tk1_1, const int rounds) { + u32 test; + u32 tk1[8], tmp[8]; + packing(tk1, tk1_0, tk1_1); + memcpy(tmp, tk, 32); + XOR_BLOCK(tmp, tk1); + tk[0] = tmp[6] & 0xf0f0f0f0; //mask to extract rows 1&2 only + tk[1] = tmp[5] & 0xf0f0f0f0; + tk[2] = tmp[0] & 0xf0f0f0f0; + tk[3] = tmp[1] & 0xf0f0f0f0; + tk[4] = tmp[3] & 0xf0f0f0f0; + tk[5] = tmp[7] & 0xf0f0f0f0; + tk[6] = tmp[4] & 0xf0f0f0f0; + tk[7] = tmp[2] & 0xf0f0f0f0; + for(int i = 0 ; i < rounds; i+=8) { + test = (i % 16 < 8) ? 1 : 0; //to apply the right power of P + memcpy(tmp, tk+i*8+8, 32); + XOR_BLOCK(tmp, tk1); + if (test) + permute_tk_2(tmp); // applies P^2 + else + permute_tk_10(tmp); // applies P^10 + tk[i*8+8] = ROR(tmp[4],26) & 0xc3c3c3c3; //mask to extract rows 1&2 only + tk[i*8+9] = ROR(tmp[7],26) & 0xc3c3c3c3; //rotation to match fixslicing + tk[i*8+10] = ROR(tmp[6],26) & 0xc3c3c3c3; + tk[i*8+11] = ROR(tmp[5],26) & 0xc3c3c3c3; + tk[i*8+12] = ROR(tmp[1],26) & 0xc3c3c3c3; + tk[i*8+13] = ROR(tmp[2],26) & 0xc3c3c3c3; + tk[i*8+14] = ROR(tmp[3],26) & 0xc3c3c3c3; + tk[i*8+15] = ROR(tmp[0],26) & 0xc3c3c3c3; + tk[i*8+16] = ROR(tmp[3],28) & 0x03030303; //mask to extract rows 1&2 only + tk[i*8+16] |= ROR(tmp[3],12) & 0x0c0c0c0c; //rotation to match fixslicing + tk[i*8+17] = ROR(tmp[2],28) & 0x03030303; + tk[i*8+17] |= ROR(tmp[2],12) & 0x0c0c0c0c; + tk[i*8+18] = ROR(tmp[4],28) & 0x03030303; + tk[i*8+18] |= ROR(tmp[4],12) & 0x0c0c0c0c; + tk[i*8+19] = ROR(tmp[7],28) & 0x03030303; + tk[i*8+19] |= ROR(tmp[7],12) & 0x0c0c0c0c; + tk[i*8+20] = ROR(tmp[5],28) & 0x03030303; + tk[i*8+20] |= ROR(tmp[5],12) & 0x0c0c0c0c; + tk[i*8+21] = ROR(tmp[0],28) & 0x03030303; + tk[i*8+21] |= ROR(tmp[0],12) & 0x0c0c0c0c; + tk[i*8+22] = ROR(tmp[1],28) & 0x03030303; + tk[i*8+22] |= ROR(tmp[1],12) & 0x0c0c0c0c; + tk[i*8+23] = ROR(tmp[6],28) & 0x03030303; + tk[i*8+23] |= ROR(tmp[6],12) & 0x0c0c0c0c; + memcpy(tmp, tk+i*8+24, 32); + XOR_BLOCK(tmp, tk1); + if (test) + permute_tk_4(tmp); // applies P^4 + else + permute_tk_12(tmp); // applies P^12 + tk[i*8+24] = ROR(tmp[1],14) & 0x30303030; //mask to extract rows 1&2 only + tk[i*8+24] |= ROR(tmp[1],6) & 0x0c0c0c0c; //rotation to match fixslicing + tk[i*8+25] = ROR(tmp[0],14) & 0x30303030; + tk[i*8+25] |= ROR(tmp[0],6) & 0x0c0c0c0c; + tk[i*8+26] = ROR(tmp[3],14) & 0x30303030; + tk[i*8+26] |= ROR(tmp[3],6) & 0x0c0c0c0c; + tk[i*8+27] = ROR(tmp[2],14) & 0x30303030; + tk[i*8+27] |= ROR(tmp[2],6) & 0x0c0c0c0c; + tk[i*8+28] = ROR(tmp[7],14) & 0x30303030; + tk[i*8+28] |= ROR(tmp[7],6) & 0x0c0c0c0c; + tk[i*8+29] = ROR(tmp[6],14) & 0x30303030; + tk[i*8+29] |= ROR(tmp[6],6) & 0x0c0c0c0c; + tk[i*8+30] = ROR(tmp[5],14) & 0x30303030; + tk[i*8+30] |= ROR(tmp[5],6) & 0x0c0c0c0c; + tk[i*8+31] = ROR(tmp[4],14) & 0x30303030; + tk[i*8+31] |= ROR(tmp[4],6) & 0x0c0c0c0c; + tk[i*8+32] = ROR(tmp[6],16) & 0xf0f0f0f0; //mask to extract rows 1&2 only + tk[i*8+33] = ROR(tmp[5],16) & 0xf0f0f0f0; //rotation to match fixslicing + tk[i*8+34] = ROR(tmp[0],16) & 0xf0f0f0f0; + tk[i*8+35] = ROR(tmp[1],16) & 0xf0f0f0f0; + tk[i*8+36] = ROR(tmp[3],16) & 0xf0f0f0f0; + tk[i*8+37] = ROR(tmp[7],16) & 0xf0f0f0f0; + tk[i*8+38] = ROR(tmp[4],16) & 0xf0f0f0f0; + tk[i*8+39] = ROR(tmp[2],16) & 0xf0f0f0f0; + memcpy(tmp, tk+i*8+40, 32); + XOR_BLOCK(tmp, tk1); + if (test) + permute_tk_6(tmp); // applies P^6 + else + permute_tk_14(tmp); // applies P^14 + tk[i*8+40] = ROR(tmp[4],10) & 0xc3c3c3c3; //mask to extract rows 1&2 only + tk[i*8+41] = ROR(tmp[7],10) & 0xc3c3c3c3; //rotation to match fixslicing + tk[i*8+42] = ROR(tmp[6],10) & 0xc3c3c3c3; + tk[i*8+43] = ROR(tmp[5],10) & 0xc3c3c3c3; + tk[i*8+44] = ROR(tmp[1],10) & 0xc3c3c3c3; + tk[i*8+45] = ROR(tmp[2],10) & 0xc3c3c3c3; + tk[i*8+46] = ROR(tmp[3],10) & 0xc3c3c3c3; + tk[i*8+47] = ROR(tmp[0],10) & 0xc3c3c3c3; + tk[i*8+48] = ROR(tmp[3],12) & 0x03030303; //mask to extract rows 1&2 only + tk[i*8+48] |= ROR(tmp[3],28) & 0x0c0c0c0c; //rotation to match fixslicing + tk[i*8+49] = ROR(tmp[2],12) & 0x03030303; + tk[i*8+49] |= ROR(tmp[2],28) & 0x0c0c0c0c; + tk[i*8+50] = ROR(tmp[4],12) & 0x03030303; + tk[i*8+50] |= ROR(tmp[4],28) & 0x0c0c0c0c; + tk[i*8+51] = ROR(tmp[7],12) & 0x03030303; + tk[i*8+51] |= ROR(tmp[7],28) & 0x0c0c0c0c; + tk[i*8+52] = ROR(tmp[5],12) & 0x03030303; + tk[i*8+52] |= ROR(tmp[5],28) & 0x0c0c0c0c; + tk[i*8+53] = ROR(tmp[0],12) & 0x03030303; + tk[i*8+53] |= ROR(tmp[0],28) & 0x0c0c0c0c; + tk[i*8+54] = ROR(tmp[1],12) & 0x03030303; + tk[i*8+54] |= ROR(tmp[1],28) & 0x0c0c0c0c; + tk[i*8+55] = ROR(tmp[6],12) & 0x03030303; + tk[i*8+55] |= ROR(tmp[6],28) & 0x0c0c0c0c; + memcpy(tmp, tk+i*8+56, 32); + XOR_BLOCK(tmp, tk1); + if (test) + permute_tk_8(tmp); // applies P^8 + tk[i*8+56] = ROR(tmp[1],30) & 0x30303030; //mask to extract rows 1&2 only + tk[i*8+56] |= ROR(tmp[1],22) & 0x0c0c0c0c; //rotation to match fixslicing + tk[i*8+57] = ROR(tmp[0],30) & 0x30303030; + tk[i*8+57] |= ROR(tmp[0],22) & 0x0c0c0c0c; + tk[i*8+58] = ROR(tmp[3],30) & 0x30303030; + tk[i*8+58] |= ROR(tmp[3],22) & 0x0c0c0c0c; + tk[i*8+59] = ROR(tmp[2],30) & 0x30303030; + tk[i*8+59] |= ROR(tmp[2],22) & 0x0c0c0c0c; + tk[i*8+60] = ROR(tmp[7],30) & 0x30303030; + tk[i*8+60] |= ROR(tmp[7],22) & 0x0c0c0c0c; + tk[i*8+61] = ROR(tmp[6],30) & 0x30303030; + tk[i*8+61] |= ROR(tmp[6],22) & 0x0c0c0c0c; + tk[i*8+62] = ROR(tmp[5],30) & 0x30303030; + tk[i*8+62] |= ROR(tmp[5],22) & 0x0c0c0c0c; + tk[i*8+63] = ROR(tmp[4],30) & 0x30303030; + tk[i*8+63] |= ROR(tmp[4],22) & 0x0c0c0c0c; + //if (test && (i+8 < rounds)) { //only if next loop iteration + if (i+8 < rounds) { //only if next loop iteration + tk[i*8+64] = tmp[6] & 0xf0f0f0f0; //mask to extract rows 1&2 only + tk[i*8+65] = tmp[5] & 0xf0f0f0f0; + tk[i*8+66] = tmp[0] & 0xf0f0f0f0; + tk[i*8+67] = tmp[1] & 0xf0f0f0f0; + tk[i*8+68] = tmp[3] & 0xf0f0f0f0; + tk[i*8+69] = tmp[7] & 0xf0f0f0f0; + tk[i*8+70] = tmp[4] & 0xf0f0f0f0; + tk[i*8+71] = tmp[2] & 0xf0f0f0f0; + } + } +} + +//Precompute LFSR2(TK2) ^ LFSR3(TK3) ^ rconst +void precompute_rtk2_3(u32* rtk, const u8* tk2, const u8 * tk3, int rounds) { + memset(rtk, 0x00, 32*rounds); + precompute_lfsr_tk2(rtk, tk2, tk2, rounds); + precompute_lfsr_tk3(rtk, tk3, tk3, rounds); + permute_tk(rtk, (u8*)(rtk+16), (u8*)(rtk+16), rounds); // rtk+16 is NULL + for(int i = 0; i < rounds; i++) { // add rconsts + for(int j = 0; j < 8; j++) + rtk[i*8+j] ^= rconst_32_bs[i*8+j]; + } +} + +//Precompute TK1 +void precompute_rtk1(u32* rtk1, const u8* tk1, const u8* tk1_bis) { + memset(rtk1, 0x00, 32*16); + permute_tk(rtk1, tk1, tk1_bis, 16); +} diff --git a/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_2/tk_schedule.h b/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_2/tk_schedule.h new file mode 100644 index 0000000..c6d03ce --- /dev/null +++ b/skinny/Implementations/crypto_aead/skinnyaeadtk3128128v1/opt32_2/tk_schedule.h @@ -0,0 +1,72 @@ +#ifndef TK_SCHEDULE_BS_H_ +#define TK_SCHEDULE_BS_H_ + +typedef unsigned char u8; +typedef unsigned int u32; + +typedef struct { + u32 rtk1[8*16]; + u32 rtk2_3[8*56]; +} tweakey; + +void packing(u32* out, const u8* block0, const u8* block1); +void unpacking(u8* out, u8* out_bis, u32 *in); +void precompute_rtk2_3(u32* rtk, const u8* tk2, const u8* tk3, int rounds); +void precompute_rtk1(u32* rtk1, const u8* tk1, const u8* tk1_bis); + +#define LFSR2(tk) ({ \ + tmp = (tk)[0] ^ (tk)[2]; \ + (tk)[0] = (tk)[1]; \ + (tk)[1] = (tk)[2]; \ + (tk)[2] = (tk)[3]; \ + (tk)[3] = (tk)[4]; \ + (tk)[4] = (tk)[5]; \ + (tk)[5] = (tk)[6]; \ + (tk)[6] = (tk)[7]; \ + (tk)[7] = tmp; \ +}) + +#define LFSR3(tk) ({ \ + tmp = (tk)[7] ^ (tk)[1]; \ + (tk)[7] = (tk)[6]; \ + (tk)[6] = (tk)[5]; \ + (tk)[5] = (tk)[4]; \ + (tk)[4] = (tk)[3]; \ + (tk)[3] = (tk)[2]; \ + (tk)[2] = (tk)[1]; \ + (tk)[1] = (tk)[0]; \ + (tk)[0] = tmp; \ +}) + +#define XOR_BLOCK(x,y) ({ \ + (x)[0] ^= (y)[0]; \ + (x)[1] ^= (y)[1]; \ + (x)[2] ^= (y)[2]; \ + (x)[3] ^= (y)[3]; \ + (x)[4] ^= (y)[4]; \ + (x)[5] ^= (y)[5]; \ + (x)[6] ^= (y)[6]; \ + (x)[7] ^= (y)[7]; \ +}) + +#define SWAPMOVE(a, b, mask, n) ({ \ + tmp = (b ^ (a >> n)) & mask; \ + b ^= tmp; \ + a ^= (tmp << n); \ +}) + +#define LE_LOAD(x, y) \ + *(x) = (((u32)(y)[3] << 24) | \ + ((u32)(y)[2] << 16) | \ + ((u32)(y)[1] << 8) | \ + (y)[0]); + +#define LE_STORE(x, y) \ + (x)[0] = (y) & 0xff; \ + (x)[1] = ((y) >> 8) & 0xff; \ + (x)[2] = ((y) >> 16) & 0xff; \ + (x)[3] = (y) >> 24; + +#define ROR(x,y) (((x) >> (y)) | ((x) << (32 - (y)))) + +#endif // TK_SCHEDULE_BS_H_ \ No newline at end of file -- libgit2 0.26.0