From: batt Date: Fri, 5 Nov 2010 16:38:04 +0000 (+0000) Subject: Remove sec dir: not to be released now. X-Git-Tag: 2.6.0~3 X-Git-Url: https://codewiz.org/gitweb?p=bertos.git;a=commitdiff_plain;h=7c9ad48eef7b90f76b74a37f11a27af21f234f92 Remove sec dir: not to be released now. git-svn-id: https://src.develer.com/svnoss/bertos/branches/2.6@4524 38d2e660-2303-0410-9eaa-f027e97ec537 --- diff --git a/bertos/sec/benchmarks.c b/bertos/sec/benchmarks.c deleted file mode 100644 index d0e3cdff..00000000 --- a/bertos/sec/benchmarks.c +++ /dev/null @@ -1,80 +0,0 @@ -#include "benchmarks.h" -#include -#include - -static uint8_t buf[512]; - -void hash_benchmark(Hash *h, const char *hname, int numk) -{ - memset(buf, 0x12, sizeof(buf)); - ticks_t t = timer_clock(); - - for (int j=0;j<64;++j) { - hash_begin(h); - for (int i=0; i= prng_seed_len(prng)); - prng_reseed(prng, buf); - - ticks_t t = timer_clock(); - enum { CYCLES = 2048 }; - - for (int j=0;j= cipher_key_len(c)); - cipher_set_key(c, buf); - - uint8_t iv[cipher_block_len(c)]; - memset(iv, 0, sizeof(iv)); - - ticks_t t = timer_clock(); - enum { CYCLES = 64 }; - - for (int j=0;j -#include -#include - -void hash_benchmark(Hash *h, const char *hname, int numk); -void prng_benchmark(PRNG *prng, const char *hname, int numk); -void cipher_benchmark(BlockCipher *c, const char *cname, int msg_len); - -#endif /* SEC_BENCHMARKS_H */ diff --git a/bertos/sec/cipher.c b/bertos/sec/cipher.c deleted file mode 100644 index ba4ae981..00000000 --- a/bertos/sec/cipher.c +++ /dev/null @@ -1,103 +0,0 @@ -/** - * \file - * - * - * \brief Generic interface for symmetric block ciphers. - * \author Giovanni Bajo - * - */ - -#include "cipher.h" -#include - -void cipher_cbc_encrypt(BlockCipher *c, void *block) -{ - xor_block(c->buf, c->buf, block, c->block_len); - c->enc_block(c, c->buf); - memcpy(block, c->buf, c->block_len); -} - -void cipher_cbc_decrypt(BlockCipher *c, void *block) -{ - uint8_t temp[c->block_len]; - memcpy(temp, block, c->block_len); - - c->dec_block(c, block); - xor_block(block, block, c->buf, c->block_len); - - memcpy(c->buf, temp, c->block_len); -} - -static void ctr_increment(void *buf, size_t len) -{ - uint8_t *data = (uint8_t*)buf; - while (len--) - if (LIKELY(++data[len] != 0)) - return; -} - -void cipher_ctr_step(BlockCipher *c, void *block) -{ - memcpy(block, c->buf, c->block_len); - c->enc_block(c, block); - ctr_increment(c->buf, c->block_len); -} - -void cipher_ctr_encrypt(BlockCipher *c, void *block) -{ - uint8_t temp[c->block_len]; - - cipher_ctr_step(c, temp); - xor_block(block, block, temp, c->block_len); - - PURGE(temp); -} - -void cipher_ctr_decrypt(BlockCipher *c, void *block) -{ - cipher_ctr_encrypt(c, block); -} - -static void ofb_step(BlockCipher *c) -{ - c->enc_block(c, c->buf); -} - -void cipher_ofb_encrypt(BlockCipher *c, void *block) -{ - ofb_step(c); - xor_block(block, block, c->buf, c->block_len); -} - -void cipher_ofb_decrypt(BlockCipher *c, void *block) -{ - cipher_ofb_encrypt(c, block); -} diff --git a/bertos/sec/cipher.h b/bertos/sec/cipher.h deleted file mode 100644 index 845a32d2..00000000 --- a/bertos/sec/cipher.h +++ /dev/null @@ -1,219 +0,0 @@ -/** - * \file - * - * - * \brief Generic interface for symmetric block ciphers. - * \author Giovanni Bajo - * - */ - -#ifndef SEC_CIPHER_H -#define SEC_CIPHER_H - -#include -#include - -typedef struct BlockCipher -{ - void (*set_key)(struct BlockCipher *c, const void *key, size_t len); - void (*enc_block)(struct BlockCipher *c, void *block); - void (*dec_block)(struct BlockCipher *c, void *block); - - void *buf; - uint8_t key_len; - uint8_t block_len; -} BlockCipher; - - -/** - * Return the key length (in bytes). - * - * In case of ciphers that allow a variabile key size with a fixed state - * (eg: Blowfish), this returns the preferred key length. - */ -INLINE size_t cipher_key_len(BlockCipher *c) -{ - return c->key_len; -} - -/** - * Return the block length (in bytes) - */ -INLINE size_t cipher_block_len(BlockCipher *c) -{ - return c->block_len; -} - -/** - * Set the current key used by the cipher. - * - * \note the buffer pointed by \a key is not modified and it is - * not needed anymore after this call returns. Its lenght must match - * the value returned by \a cipher_key_len(). - */ -INLINE void cipher_set_key(BlockCipher *c, const void *key) -{ - ASSERT(c->set_key); - c->set_key(c, key, c->key_len); -} - -/** - * Set the current key (of variable size) used by the cipher. - * - * This function is useful for ciphers that allow a variable size for the key - * (even with a fixed state). For all the other ciphers, the length must - * match the value returned by \a cipher_key_len(). - * - * \note the buffer pointed by \a key is not modified and it is - * not needed anymore after this call returns. - */ -INLINE void cipher_set_vkey(BlockCipher *c, const void *key, size_t len) -{ - ASSERT(c->set_key); - c->set_key(c, key, len); -} - -/*********************************************************************************/ -/* ECB mode */ -/*********************************************************************************/ - -/** - * Encrypt a block (in-place) using the current key in ECB mode. - */ -INLINE void cipher_ecb_encrypt(BlockCipher *c, void *block) -{ - ASSERT(c->enc_block); - c->enc_block(c, block); -} - -/** - * Decrypt a block (in-place) using the current key in ECB mode. - */ -INLINE void cipher_ecb_decrypt(BlockCipher *c, void *block) -{ - ASSERT(c->dec_block); - c->dec_block(c, block); -} - - -/*********************************************************************************/ -/* CBC mode */ -/*********************************************************************************/ - -/** - * Initialize CBC by setting the IV. - * - * \note the memory pointed by \a iv will be used and modified by the CBC - * functions. It is caller's responsibility to keep it available until there is - * no more CBC work to do. - */ -INLINE void cipher_cbc_begin(BlockCipher *c, void *iv) -{ - c->buf = iv; -} - -/** - * Encrypt a block (in-place) using the current key in CBC mode. - */ -void cipher_cbc_encrypt(BlockCipher *c, void *block); - -/** - * Decrypt a block (in-place) using the current key in CBC mode. - */ -void cipher_cbc_decrypt(BlockCipher *c, void *block); - - - -/*********************************************************************************/ -/* CTR mode */ -/*********************************************************************************/ - -/** - * Initialize CTR by setting the counter. - * - * \note the memory pointed by \a counter will be used and modified (incremented) - * by the CTR functions. It is caller's responsibility to keep it available until - * there is no more CTR work to do. - */ -INLINE void cipher_ctr_begin(BlockCipher *c, void *counter) -{ - c->buf = counter; -} - -/** - * Encrypt a block (in-place) using the current key in CTR mode. - */ -void cipher_ctr_encrypt(BlockCipher *c, void *block); - -/** - * Decrypt a block (in-place) using the current key in CTR mode. - */ -void cipher_ctr_decrypt(BlockCipher *c, void *block); - -/** - * Generate the crypted stream block in CTR mode for the current - * counter, and then bump it. - * - * This function is basically the core CTR operation, without the final - * XOR pass with the plaintext or ciphertext. For normal CTR usage, - * you never need to call it. - */ -void cipher_ctr_step(BlockCipher *c, void *block); - - -/*********************************************************************************/ -/* OFB mode */ -/*********************************************************************************/ - -/** - * Initialize OFB by setting the IV. - * - * \note the memory pointed by \a iv will be used and modified by the CBC - * functions. It is caller's responsibility to keep it available until there is - * no more OFB work to do. - */ -INLINE void cipher_ofb_begin(BlockCipher *c, void *iv) -{ - c->buf = iv; -} - -/** - * Encrypt a block (in-place) using the current key in OFB mode. - */ -void cipher_ofb_encrypt(BlockCipher *c, void *block); - -/** - * Decrypt a block (in-place) using the current key in OFB mode. - */ -void cipher_ofb_decrypt(BlockCipher *c, void *block); - - -#endif /* SEC_CIPHER_H */ diff --git a/bertos/sec/cipher/aes.c b/bertos/sec/cipher/aes.c deleted file mode 100644 index 53b8510d..00000000 --- a/bertos/sec/cipher/aes.c +++ /dev/null @@ -1,107 +0,0 @@ -/** - * \file - * - * - * \brief AES Advanced Encryption Standard implementation - * - * \author Giovanni Bajo - * - * $WIZ$ module_name = "aes" - */ - - -#include "aes.h" -#include -#include - -#include - -// AES only supports Nb=4 -#define Nb 4 // number of columns in the state & expanded key - -typedef struct -{ - BlockCipher c; - uint8_t num_rounds; - int8_t key_status; - uint8_t _dummy1; - uint8_t _dummy2; - uint8_t expkey[0]; -} AES_Context; - - -#if CPU_REG_BITS == 32 - -// 32-bit optimized implementation -#include "aes_f32.h" - -#else - -// Full 8-bit implementation -#include "aes_f8.h" - -#endif - - -/******************************************************************************/ - -void AES128_init(AES128_Context *aes_) -{ - AES_Context *aes = (AES_Context *)aes_; - aes->c.set_key = AES_expandKey; - aes->c.enc_block = AES_encrypt; - aes->c.dec_block = AES_decrypt; - aes->c.block_len = Nb*4; - aes->c.key_len = 16; - aes->num_rounds = 10; -} - -void AES192_init(AES192_Context *aes_) -{ - AES_Context *aes = (AES_Context *)aes_; - aes->c.set_key = AES_expandKey; - aes->c.enc_block = AES_encrypt; - aes->c.dec_block = AES_decrypt; - aes->c.block_len = Nb*4; - aes->c.key_len = 24; - aes->num_rounds = 12; -} - -void AES256_init(AES256_Context *aes_) -{ - AES_Context *aes = (AES_Context *)aes_; - aes->c.set_key = AES_expandKey; - aes->c.enc_block = AES_encrypt; - aes->c.dec_block = AES_decrypt; - aes->c.block_len = Nb*4; - aes->c.key_len = 32; - aes->num_rounds = 14; -} diff --git a/bertos/sec/cipher/aes.h b/bertos/sec/cipher/aes.h deleted file mode 100644 index 7be6265e..00000000 --- a/bertos/sec/cipher/aes.h +++ /dev/null @@ -1,85 +0,0 @@ -/** - * \file - * - * - * \brief AES Advanced Encryption Standard implementation - * - * \author Giovanni Bajo - * - * $WIZ$ module_name = "aes" - */ - -#ifndef SEC_CIPHER_AES_H -#define SEC_CIPHER_AES_H - -#include -#include -#include - -typedef struct -{ - BlockCipher c; - uint32_t status; - uint8_t expkey[44*4]; -} AES128_Context; - -typedef struct -{ - BlockCipher c; - uint32_t status; - uint8_t expkey[52*4]; -} AES192_Context; - -typedef struct -{ - BlockCipher c; - uint32_t status; - uint8_t expkey[60*4]; -} AES256_Context; - -void AES128_init(AES128_Context *c); -void AES192_init(AES192_Context *c); -void AES256_init(AES256_Context *c); - -#define AES128_stackinit(...) \ - ({ AES128_Context *ctx = alloca(sizeof(AES128_Context)); AES128_init(ctx, ##__VA_ARGS__); &ctx->c; }) - -#define AES192_stackinit(...) \ - ({ AES192_Context *ctx = alloca(sizeof(AES192_Context)); AES192_init(ctx, ##__VA_ARGS__); &ctx->c; }) - -#define AES256_stackinit(...) \ - ({ AES256_Context *ctx = alloca(sizeof(AES256_Context)); AES256_init(ctx, ##__VA_ARGS__); &ctx->c; }) - -int AES_testSetup(void); -int AES_testRun(void); -int AES_testTearDown(void); - -#endif /* SEC_CIPHER_AES_H */ diff --git a/bertos/sec/cipher/aes_f32.h b/bertos/sec/cipher/aes_f32.h deleted file mode 100644 index d172388d..00000000 --- a/bertos/sec/cipher/aes_f32.h +++ /dev/null @@ -1,566 +0,0 @@ -/** - * \file - * - * - * \brief AES Advanced Encryption Standard implementation - * - * \author Giovanni Bajo - * - */ - -/*****************************************************************************/ -// ENCRYPTION TABLES -/*****************************************************************************/ - -static const uint32_t TE0[256] = -{ - be32_to_cpu(0xc66363a5UL), be32_to_cpu(0xf87c7c84UL), be32_to_cpu(0xee777799UL), be32_to_cpu(0xf67b7b8dUL), - be32_to_cpu(0xfff2f20dUL), be32_to_cpu(0xd66b6bbdUL), be32_to_cpu(0xde6f6fb1UL), be32_to_cpu(0x91c5c554UL), - be32_to_cpu(0x60303050UL), be32_to_cpu(0x02010103UL), be32_to_cpu(0xce6767a9UL), be32_to_cpu(0x562b2b7dUL), - be32_to_cpu(0xe7fefe19UL), be32_to_cpu(0xb5d7d762UL), be32_to_cpu(0x4dababe6UL), be32_to_cpu(0xec76769aUL), - be32_to_cpu(0x8fcaca45UL), be32_to_cpu(0x1f82829dUL), be32_to_cpu(0x89c9c940UL), be32_to_cpu(0xfa7d7d87UL), - be32_to_cpu(0xeffafa15UL), be32_to_cpu(0xb25959ebUL), be32_to_cpu(0x8e4747c9UL), be32_to_cpu(0xfbf0f00bUL), - be32_to_cpu(0x41adadecUL), be32_to_cpu(0xb3d4d467UL), be32_to_cpu(0x5fa2a2fdUL), be32_to_cpu(0x45afafeaUL), - be32_to_cpu(0x239c9cbfUL), be32_to_cpu(0x53a4a4f7UL), be32_to_cpu(0xe4727296UL), be32_to_cpu(0x9bc0c05bUL), - be32_to_cpu(0x75b7b7c2UL), be32_to_cpu(0xe1fdfd1cUL), be32_to_cpu(0x3d9393aeUL), be32_to_cpu(0x4c26266aUL), - be32_to_cpu(0x6c36365aUL), be32_to_cpu(0x7e3f3f41UL), be32_to_cpu(0xf5f7f702UL), be32_to_cpu(0x83cccc4fUL), - be32_to_cpu(0x6834345cUL), be32_to_cpu(0x51a5a5f4UL), be32_to_cpu(0xd1e5e534UL), be32_to_cpu(0xf9f1f108UL), - be32_to_cpu(0xe2717193UL), be32_to_cpu(0xabd8d873UL), be32_to_cpu(0x62313153UL), be32_to_cpu(0x2a15153fUL), - be32_to_cpu(0x0804040cUL), be32_to_cpu(0x95c7c752UL), be32_to_cpu(0x46232365UL), be32_to_cpu(0x9dc3c35eUL), - be32_to_cpu(0x30181828UL), be32_to_cpu(0x379696a1UL), be32_to_cpu(0x0a05050fUL), be32_to_cpu(0x2f9a9ab5UL), - be32_to_cpu(0x0e070709UL), be32_to_cpu(0x24121236UL), be32_to_cpu(0x1b80809bUL), be32_to_cpu(0xdfe2e23dUL), - be32_to_cpu(0xcdebeb26UL), be32_to_cpu(0x4e272769UL), be32_to_cpu(0x7fb2b2cdUL), be32_to_cpu(0xea75759fUL), - be32_to_cpu(0x1209091bUL), be32_to_cpu(0x1d83839eUL), be32_to_cpu(0x582c2c74UL), be32_to_cpu(0x341a1a2eUL), - be32_to_cpu(0x361b1b2dUL), be32_to_cpu(0xdc6e6eb2UL), be32_to_cpu(0xb45a5aeeUL), be32_to_cpu(0x5ba0a0fbUL), - be32_to_cpu(0xa45252f6UL), be32_to_cpu(0x763b3b4dUL), be32_to_cpu(0xb7d6d661UL), be32_to_cpu(0x7db3b3ceUL), - be32_to_cpu(0x5229297bUL), be32_to_cpu(0xdde3e33eUL), be32_to_cpu(0x5e2f2f71UL), be32_to_cpu(0x13848497UL), - be32_to_cpu(0xa65353f5UL), be32_to_cpu(0xb9d1d168UL), be32_to_cpu(0x00000000UL), be32_to_cpu(0xc1eded2cUL), - be32_to_cpu(0x40202060UL), be32_to_cpu(0xe3fcfc1fUL), be32_to_cpu(0x79b1b1c8UL), be32_to_cpu(0xb65b5bedUL), - be32_to_cpu(0xd46a6abeUL), be32_to_cpu(0x8dcbcb46UL), be32_to_cpu(0x67bebed9UL), be32_to_cpu(0x7239394bUL), - be32_to_cpu(0x944a4adeUL), be32_to_cpu(0x984c4cd4UL), be32_to_cpu(0xb05858e8UL), be32_to_cpu(0x85cfcf4aUL), - be32_to_cpu(0xbbd0d06bUL), be32_to_cpu(0xc5efef2aUL), be32_to_cpu(0x4faaaae5UL), be32_to_cpu(0xedfbfb16UL), - be32_to_cpu(0x864343c5UL), be32_to_cpu(0x9a4d4dd7UL), be32_to_cpu(0x66333355UL), be32_to_cpu(0x11858594UL), - be32_to_cpu(0x8a4545cfUL), be32_to_cpu(0xe9f9f910UL), be32_to_cpu(0x04020206UL), be32_to_cpu(0xfe7f7f81UL), - be32_to_cpu(0xa05050f0UL), be32_to_cpu(0x783c3c44UL), be32_to_cpu(0x259f9fbaUL), be32_to_cpu(0x4ba8a8e3UL), - be32_to_cpu(0xa25151f3UL), be32_to_cpu(0x5da3a3feUL), be32_to_cpu(0x804040c0UL), be32_to_cpu(0x058f8f8aUL), - be32_to_cpu(0x3f9292adUL), be32_to_cpu(0x219d9dbcUL), be32_to_cpu(0x70383848UL), be32_to_cpu(0xf1f5f504UL), - be32_to_cpu(0x63bcbcdfUL), be32_to_cpu(0x77b6b6c1UL), be32_to_cpu(0xafdada75UL), be32_to_cpu(0x42212163UL), - be32_to_cpu(0x20101030UL), be32_to_cpu(0xe5ffff1aUL), be32_to_cpu(0xfdf3f30eUL), be32_to_cpu(0xbfd2d26dUL), - be32_to_cpu(0x81cdcd4cUL), be32_to_cpu(0x180c0c14UL), be32_to_cpu(0x26131335UL), be32_to_cpu(0xc3ecec2fUL), - be32_to_cpu(0xbe5f5fe1UL), be32_to_cpu(0x359797a2UL), be32_to_cpu(0x884444ccUL), be32_to_cpu(0x2e171739UL), - be32_to_cpu(0x93c4c457UL), be32_to_cpu(0x55a7a7f2UL), be32_to_cpu(0xfc7e7e82UL), be32_to_cpu(0x7a3d3d47UL), - be32_to_cpu(0xc86464acUL), be32_to_cpu(0xba5d5de7UL), be32_to_cpu(0x3219192bUL), be32_to_cpu(0xe6737395UL), - be32_to_cpu(0xc06060a0UL), be32_to_cpu(0x19818198UL), be32_to_cpu(0x9e4f4fd1UL), be32_to_cpu(0xa3dcdc7fUL), - be32_to_cpu(0x44222266UL), be32_to_cpu(0x542a2a7eUL), be32_to_cpu(0x3b9090abUL), be32_to_cpu(0x0b888883UL), - be32_to_cpu(0x8c4646caUL), be32_to_cpu(0xc7eeee29UL), be32_to_cpu(0x6bb8b8d3UL), be32_to_cpu(0x2814143cUL), - be32_to_cpu(0xa7dede79UL), be32_to_cpu(0xbc5e5ee2UL), be32_to_cpu(0x160b0b1dUL), be32_to_cpu(0xaddbdb76UL), - be32_to_cpu(0xdbe0e03bUL), be32_to_cpu(0x64323256UL), be32_to_cpu(0x743a3a4eUL), be32_to_cpu(0x140a0a1eUL), - be32_to_cpu(0x924949dbUL), be32_to_cpu(0x0c06060aUL), be32_to_cpu(0x4824246cUL), be32_to_cpu(0xb85c5ce4UL), - be32_to_cpu(0x9fc2c25dUL), be32_to_cpu(0xbdd3d36eUL), be32_to_cpu(0x43acacefUL), be32_to_cpu(0xc46262a6UL), - be32_to_cpu(0x399191a8UL), be32_to_cpu(0x319595a4UL), be32_to_cpu(0xd3e4e437UL), be32_to_cpu(0xf279798bUL), - be32_to_cpu(0xd5e7e732UL), be32_to_cpu(0x8bc8c843UL), be32_to_cpu(0x6e373759UL), be32_to_cpu(0xda6d6db7UL), - be32_to_cpu(0x018d8d8cUL), be32_to_cpu(0xb1d5d564UL), be32_to_cpu(0x9c4e4ed2UL), be32_to_cpu(0x49a9a9e0UL), - be32_to_cpu(0xd86c6cb4UL), be32_to_cpu(0xac5656faUL), be32_to_cpu(0xf3f4f407UL), be32_to_cpu(0xcfeaea25UL), - be32_to_cpu(0xca6565afUL), be32_to_cpu(0xf47a7a8eUL), be32_to_cpu(0x47aeaee9UL), be32_to_cpu(0x10080818UL), - be32_to_cpu(0x6fbabad5UL), be32_to_cpu(0xf0787888UL), be32_to_cpu(0x4a25256fUL), be32_to_cpu(0x5c2e2e72UL), - be32_to_cpu(0x381c1c24UL), be32_to_cpu(0x57a6a6f1UL), be32_to_cpu(0x73b4b4c7UL), be32_to_cpu(0x97c6c651UL), - be32_to_cpu(0xcbe8e823UL), be32_to_cpu(0xa1dddd7cUL), be32_to_cpu(0xe874749cUL), be32_to_cpu(0x3e1f1f21UL), - be32_to_cpu(0x964b4bddUL), be32_to_cpu(0x61bdbddcUL), be32_to_cpu(0x0d8b8b86UL), be32_to_cpu(0x0f8a8a85UL), - be32_to_cpu(0xe0707090UL), be32_to_cpu(0x7c3e3e42UL), be32_to_cpu(0x71b5b5c4UL), be32_to_cpu(0xcc6666aaUL), - be32_to_cpu(0x904848d8UL), be32_to_cpu(0x06030305UL), be32_to_cpu(0xf7f6f601UL), be32_to_cpu(0x1c0e0e12UL), - be32_to_cpu(0xc26161a3UL), be32_to_cpu(0x6a35355fUL), be32_to_cpu(0xae5757f9UL), be32_to_cpu(0x69b9b9d0UL), - be32_to_cpu(0x17868691UL), be32_to_cpu(0x99c1c158UL), be32_to_cpu(0x3a1d1d27UL), be32_to_cpu(0x279e9eb9UL), - be32_to_cpu(0xd9e1e138UL), be32_to_cpu(0xebf8f813UL), be32_to_cpu(0x2b9898b3UL), be32_to_cpu(0x22111133UL), - be32_to_cpu(0xd26969bbUL), be32_to_cpu(0xa9d9d970UL), be32_to_cpu(0x078e8e89UL), be32_to_cpu(0x339494a7UL), - be32_to_cpu(0x2d9b9bb6UL), be32_to_cpu(0x3c1e1e22UL), be32_to_cpu(0x15878792UL), be32_to_cpu(0xc9e9e920UL), - be32_to_cpu(0x87cece49UL), be32_to_cpu(0xaa5555ffUL), be32_to_cpu(0x50282878UL), be32_to_cpu(0xa5dfdf7aUL), - be32_to_cpu(0x038c8c8fUL), be32_to_cpu(0x59a1a1f8UL), be32_to_cpu(0x09898980UL), be32_to_cpu(0x1a0d0d17UL), - be32_to_cpu(0x65bfbfdaUL), be32_to_cpu(0xd7e6e631UL), be32_to_cpu(0x844242c6UL), be32_to_cpu(0xd06868b8UL), - be32_to_cpu(0x824141c3UL), be32_to_cpu(0x299999b0UL), be32_to_cpu(0x5a2d2d77UL), be32_to_cpu(0x1e0f0f11UL), - be32_to_cpu(0x7bb0b0cbUL), be32_to_cpu(0xa85454fcUL), be32_to_cpu(0x6dbbbbd6UL), be32_to_cpu(0x2c16163aUL), -}; - -static const uint8_t TE4[256] = -{ - 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, - 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, - 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, - 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, - 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, - 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, - 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, - 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, - 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, - 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, - 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, - 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, - 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, - 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, - 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, - 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, - 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, - 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, - 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, - 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, - 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, - 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, - 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, - 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, - 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, - 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, - 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, - 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, - 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, - 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, - 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, - 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16 -}; - -static const uint8_t rcon[10] = -{ - 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, - /* for 128-bit blocks, Rijndael never uses more than 10 rcon values */ -}; - -#if CPU_BYTE_ORDER == CPU_LITTLE_ENDIAN - -#define Te0(x) TE0[x&0xFF] -#define Te1(x) ROTL(TE0[(x>>8)&0xFF], 8) -#define Te2(x) ROTL(TE0[(x>>16)&0xFF], 16) -#define Te3(x) ROTL(TE0[x>>24], 24) - -#define Te4_0(x) ((uint32_t)TE4[x>>24] << 24) -#define Te4_1(x) ((uint32_t)TE4[(x>>16)&0xFF] << 16) -#define Te4_2(x) ((uint32_t)TE4[(x>>8)&0xFF] << 8) -#define Te4_3(x) ((uint32_t)TE4[x&0xFF]) - -#define RCON(x) ((uint32_t)rcon[x]) - -#define TeKeyMix(x) \ - (((uint32_t)TE4[(x>>8)&0xFF]) ^ \ - ((uint32_t)TE4[(x>>16)&0xFF] << 8) ^ \ - ((uint32_t)TE4[x>>24] << 16) ^ \ - ((uint32_t)TE4[x&0xFF]) << 24) - -#define TeKeyMix2(x) TeKeyMix(ROTL(x, 8)) - -#else - -#define Te0(x) TE0[x>>24] -#define Te1(x) ROTR(TE0[(x>>16)&0xFF], 8) -#define Te2(x) ROTR(TE0[(x>>8)&0xFF], 16) -#define Te3(x) ROTR(TE0[x&0xFF], 24) - -#define Te4_0(x) ((uint32_t)TE4[x&0xFF]) -#define Te4_1(x) ((uint32_t)TE4[(x>>8)&0xFF] << 8) -#define Te4_2(x) ((uint32_t)TE4[(x>>16)&0xFF] << 16) -#define Te4_3(x) ((uint32_t)TE4[x>>24] << 24) - -#define TeKeyMix(x) \ - ((TE4[(x>>16)&0xFF] << 24) ^ \ - (TE4[(x>>8)&0xFF] << 16) ^ \ - (TE4[x&0xFF] << 8) ^ \ - (TE4[x>>24])) - -#define TeKeyMix2(x) TeKeyMix(ROTR(x, 8)) - -#define RCON(x) (((uint32_t)rcon[x])<<24) - -#endif - - -/*****************************************************************************/ -// DECRYPTION TABLES -/*****************************************************************************/ - -static const uint32_t TD0[256] = -{ - be32_to_cpu(0x51f4a750UL), be32_to_cpu(0x7e416553UL), be32_to_cpu(0x1a17a4c3UL), be32_to_cpu(0x3a275e96UL), - be32_to_cpu(0x3bab6bcbUL), be32_to_cpu(0x1f9d45f1UL), be32_to_cpu(0xacfa58abUL), be32_to_cpu(0x4be30393UL), - be32_to_cpu(0x2030fa55UL), be32_to_cpu(0xad766df6UL), be32_to_cpu(0x88cc7691UL), be32_to_cpu(0xf5024c25UL), - be32_to_cpu(0x4fe5d7fcUL), be32_to_cpu(0xc52acbd7UL), be32_to_cpu(0x26354480UL), be32_to_cpu(0xb562a38fUL), - be32_to_cpu(0xdeb15a49UL), be32_to_cpu(0x25ba1b67UL), be32_to_cpu(0x45ea0e98UL), be32_to_cpu(0x5dfec0e1UL), - be32_to_cpu(0xc32f7502UL), be32_to_cpu(0x814cf012UL), be32_to_cpu(0x8d4697a3UL), be32_to_cpu(0x6bd3f9c6UL), - be32_to_cpu(0x038f5fe7UL), be32_to_cpu(0x15929c95UL), be32_to_cpu(0xbf6d7aebUL), be32_to_cpu(0x955259daUL), - be32_to_cpu(0xd4be832dUL), be32_to_cpu(0x587421d3UL), be32_to_cpu(0x49e06929UL), be32_to_cpu(0x8ec9c844UL), - be32_to_cpu(0x75c2896aUL), be32_to_cpu(0xf48e7978UL), be32_to_cpu(0x99583e6bUL), be32_to_cpu(0x27b971ddUL), - be32_to_cpu(0xbee14fb6UL), be32_to_cpu(0xf088ad17UL), be32_to_cpu(0xc920ac66UL), be32_to_cpu(0x7dce3ab4UL), - be32_to_cpu(0x63df4a18UL), be32_to_cpu(0xe51a3182UL), be32_to_cpu(0x97513360UL), be32_to_cpu(0x62537f45UL), - be32_to_cpu(0xb16477e0UL), be32_to_cpu(0xbb6bae84UL), be32_to_cpu(0xfe81a01cUL), be32_to_cpu(0xf9082b94UL), - be32_to_cpu(0x70486858UL), be32_to_cpu(0x8f45fd19UL), be32_to_cpu(0x94de6c87UL), be32_to_cpu(0x527bf8b7UL), - be32_to_cpu(0xab73d323UL), be32_to_cpu(0x724b02e2UL), be32_to_cpu(0xe31f8f57UL), be32_to_cpu(0x6655ab2aUL), - be32_to_cpu(0xb2eb2807UL), be32_to_cpu(0x2fb5c203UL), be32_to_cpu(0x86c57b9aUL), be32_to_cpu(0xd33708a5UL), - be32_to_cpu(0x302887f2UL), be32_to_cpu(0x23bfa5b2UL), be32_to_cpu(0x02036abaUL), be32_to_cpu(0xed16825cUL), - be32_to_cpu(0x8acf1c2bUL), be32_to_cpu(0xa779b492UL), be32_to_cpu(0xf307f2f0UL), be32_to_cpu(0x4e69e2a1UL), - be32_to_cpu(0x65daf4cdUL), be32_to_cpu(0x0605bed5UL), be32_to_cpu(0xd134621fUL), be32_to_cpu(0xc4a6fe8aUL), - be32_to_cpu(0x342e539dUL), be32_to_cpu(0xa2f355a0UL), be32_to_cpu(0x058ae132UL), be32_to_cpu(0xa4f6eb75UL), - be32_to_cpu(0x0b83ec39UL), be32_to_cpu(0x4060efaaUL), be32_to_cpu(0x5e719f06UL), be32_to_cpu(0xbd6e1051UL), - be32_to_cpu(0x3e218af9UL), be32_to_cpu(0x96dd063dUL), be32_to_cpu(0xdd3e05aeUL), be32_to_cpu(0x4de6bd46UL), - be32_to_cpu(0x91548db5UL), be32_to_cpu(0x71c45d05UL), be32_to_cpu(0x0406d46fUL), be32_to_cpu(0x605015ffUL), - be32_to_cpu(0x1998fb24UL), be32_to_cpu(0xd6bde997UL), be32_to_cpu(0x894043ccUL), be32_to_cpu(0x67d99e77UL), - be32_to_cpu(0xb0e842bdUL), be32_to_cpu(0x07898b88UL), be32_to_cpu(0xe7195b38UL), be32_to_cpu(0x79c8eedbUL), - be32_to_cpu(0xa17c0a47UL), be32_to_cpu(0x7c420fe9UL), be32_to_cpu(0xf8841ec9UL), be32_to_cpu(0x00000000UL), - be32_to_cpu(0x09808683UL), be32_to_cpu(0x322bed48UL), be32_to_cpu(0x1e1170acUL), be32_to_cpu(0x6c5a724eUL), - be32_to_cpu(0xfd0efffbUL), be32_to_cpu(0x0f853856UL), be32_to_cpu(0x3daed51eUL), be32_to_cpu(0x362d3927UL), - be32_to_cpu(0x0a0fd964UL), be32_to_cpu(0x685ca621UL), be32_to_cpu(0x9b5b54d1UL), be32_to_cpu(0x24362e3aUL), - be32_to_cpu(0x0c0a67b1UL), be32_to_cpu(0x9357e70fUL), be32_to_cpu(0xb4ee96d2UL), be32_to_cpu(0x1b9b919eUL), - be32_to_cpu(0x80c0c54fUL), be32_to_cpu(0x61dc20a2UL), be32_to_cpu(0x5a774b69UL), be32_to_cpu(0x1c121a16UL), - be32_to_cpu(0xe293ba0aUL), be32_to_cpu(0xc0a02ae5UL), be32_to_cpu(0x3c22e043UL), be32_to_cpu(0x121b171dUL), - be32_to_cpu(0x0e090d0bUL), be32_to_cpu(0xf28bc7adUL), be32_to_cpu(0x2db6a8b9UL), be32_to_cpu(0x141ea9c8UL), - be32_to_cpu(0x57f11985UL), be32_to_cpu(0xaf75074cUL), be32_to_cpu(0xee99ddbbUL), be32_to_cpu(0xa37f60fdUL), - be32_to_cpu(0xf701269fUL), be32_to_cpu(0x5c72f5bcUL), be32_to_cpu(0x44663bc5UL), be32_to_cpu(0x5bfb7e34UL), - be32_to_cpu(0x8b432976UL), be32_to_cpu(0xcb23c6dcUL), be32_to_cpu(0xb6edfc68UL), be32_to_cpu(0xb8e4f163UL), - be32_to_cpu(0xd731dccaUL), be32_to_cpu(0x42638510UL), be32_to_cpu(0x13972240UL), be32_to_cpu(0x84c61120UL), - be32_to_cpu(0x854a247dUL), be32_to_cpu(0xd2bb3df8UL), be32_to_cpu(0xaef93211UL), be32_to_cpu(0xc729a16dUL), - be32_to_cpu(0x1d9e2f4bUL), be32_to_cpu(0xdcb230f3UL), be32_to_cpu(0x0d8652ecUL), be32_to_cpu(0x77c1e3d0UL), - be32_to_cpu(0x2bb3166cUL), be32_to_cpu(0xa970b999UL), be32_to_cpu(0x119448faUL), be32_to_cpu(0x47e96422UL), - be32_to_cpu(0xa8fc8cc4UL), be32_to_cpu(0xa0f03f1aUL), be32_to_cpu(0x567d2cd8UL), be32_to_cpu(0x223390efUL), - be32_to_cpu(0x87494ec7UL), be32_to_cpu(0xd938d1c1UL), be32_to_cpu(0x8ccaa2feUL), be32_to_cpu(0x98d40b36UL), - be32_to_cpu(0xa6f581cfUL), be32_to_cpu(0xa57ade28UL), be32_to_cpu(0xdab78e26UL), be32_to_cpu(0x3fadbfa4UL), - be32_to_cpu(0x2c3a9de4UL), be32_to_cpu(0x5078920dUL), be32_to_cpu(0x6a5fcc9bUL), be32_to_cpu(0x547e4662UL), - be32_to_cpu(0xf68d13c2UL), be32_to_cpu(0x90d8b8e8UL), be32_to_cpu(0x2e39f75eUL), be32_to_cpu(0x82c3aff5UL), - be32_to_cpu(0x9f5d80beUL), be32_to_cpu(0x69d0937cUL), be32_to_cpu(0x6fd52da9UL), be32_to_cpu(0xcf2512b3UL), - be32_to_cpu(0xc8ac993bUL), be32_to_cpu(0x10187da7UL), be32_to_cpu(0xe89c636eUL), be32_to_cpu(0xdb3bbb7bUL), - be32_to_cpu(0xcd267809UL), be32_to_cpu(0x6e5918f4UL), be32_to_cpu(0xec9ab701UL), be32_to_cpu(0x834f9aa8UL), - be32_to_cpu(0xe6956e65UL), be32_to_cpu(0xaaffe67eUL), be32_to_cpu(0x21bccf08UL), be32_to_cpu(0xef15e8e6UL), - be32_to_cpu(0xbae79bd9UL), be32_to_cpu(0x4a6f36ceUL), be32_to_cpu(0xea9f09d4UL), be32_to_cpu(0x29b07cd6UL), - be32_to_cpu(0x31a4b2afUL), be32_to_cpu(0x2a3f2331UL), be32_to_cpu(0xc6a59430UL), be32_to_cpu(0x35a266c0UL), - be32_to_cpu(0x744ebc37UL), be32_to_cpu(0xfc82caa6UL), be32_to_cpu(0xe090d0b0UL), be32_to_cpu(0x33a7d815UL), - be32_to_cpu(0xf104984aUL), be32_to_cpu(0x41ecdaf7UL), be32_to_cpu(0x7fcd500eUL), be32_to_cpu(0x1791f62fUL), - be32_to_cpu(0x764dd68dUL), be32_to_cpu(0x43efb04dUL), be32_to_cpu(0xccaa4d54UL), be32_to_cpu(0xe49604dfUL), - be32_to_cpu(0x9ed1b5e3UL), be32_to_cpu(0x4c6a881bUL), be32_to_cpu(0xc12c1fb8UL), be32_to_cpu(0x4665517fUL), - be32_to_cpu(0x9d5eea04UL), be32_to_cpu(0x018c355dUL), be32_to_cpu(0xfa877473UL), be32_to_cpu(0xfb0b412eUL), - be32_to_cpu(0xb3671d5aUL), be32_to_cpu(0x92dbd252UL), be32_to_cpu(0xe9105633UL), be32_to_cpu(0x6dd64713UL), - be32_to_cpu(0x9ad7618cUL), be32_to_cpu(0x37a10c7aUL), be32_to_cpu(0x59f8148eUL), be32_to_cpu(0xeb133c89UL), - be32_to_cpu(0xcea927eeUL), be32_to_cpu(0xb761c935UL), be32_to_cpu(0xe11ce5edUL), be32_to_cpu(0x7a47b13cUL), - be32_to_cpu(0x9cd2df59UL), be32_to_cpu(0x55f2733fUL), be32_to_cpu(0x1814ce79UL), be32_to_cpu(0x73c737bfUL), - be32_to_cpu(0x53f7cdeaUL), be32_to_cpu(0x5ffdaa5bUL), be32_to_cpu(0xdf3d6f14UL), be32_to_cpu(0x7844db86UL), - be32_to_cpu(0xcaaff381UL), be32_to_cpu(0xb968c43eUL), be32_to_cpu(0x3824342cUL), be32_to_cpu(0xc2a3405fUL), - be32_to_cpu(0x161dc372UL), be32_to_cpu(0xbce2250cUL), be32_to_cpu(0x283c498bUL), be32_to_cpu(0xff0d9541UL), - be32_to_cpu(0x39a80171UL), be32_to_cpu(0x080cb3deUL), be32_to_cpu(0xd8b4e49cUL), be32_to_cpu(0x6456c190UL), - be32_to_cpu(0x7bcb8461UL), be32_to_cpu(0xd532b670UL), be32_to_cpu(0x486c5c74UL), be32_to_cpu(0xd0b85742UL), -}; - -static const uint8_t TD4[256] = -{ - 0x52, 0x09, 0x6a, 0xd5, - 0x30, 0x36, 0xa5, 0x38, - 0xbf, 0x40, 0xa3, 0x9e, - 0x81, 0xf3, 0xd7, 0xfb, - 0x7c, 0xe3, 0x39, 0x82, - 0x9b, 0x2f, 0xff, 0x87, - 0x34, 0x8e, 0x43, 0x44, - 0xc4, 0xde, 0xe9, 0xcb, - 0x54, 0x7b, 0x94, 0x32, - 0xa6, 0xc2, 0x23, 0x3d, - 0xee, 0x4c, 0x95, 0x0b, - 0x42, 0xfa, 0xc3, 0x4e, - 0x08, 0x2e, 0xa1, 0x66, - 0x28, 0xd9, 0x24, 0xb2, - 0x76, 0x5b, 0xa2, 0x49, - 0x6d, 0x8b, 0xd1, 0x25, - 0x72, 0xf8, 0xf6, 0x64, - 0x86, 0x68, 0x98, 0x16, - 0xd4, 0xa4, 0x5c, 0xcc, - 0x5d, 0x65, 0xb6, 0x92, - 0x6c, 0x70, 0x48, 0x50, - 0xfd, 0xed, 0xb9, 0xda, - 0x5e, 0x15, 0x46, 0x57, - 0xa7, 0x8d, 0x9d, 0x84, - 0x90, 0xd8, 0xab, 0x00, - 0x8c, 0xbc, 0xd3, 0x0a, - 0xf7, 0xe4, 0x58, 0x05, - 0xb8, 0xb3, 0x45, 0x06, - 0xd0, 0x2c, 0x1e, 0x8f, - 0xca, 0x3f, 0x0f, 0x02, - 0xc1, 0xaf, 0xbd, 0x03, - 0x01, 0x13, 0x8a, 0x6b, - 0x3a, 0x91, 0x11, 0x41, - 0x4f, 0x67, 0xdc, 0xea, - 0x97, 0xf2, 0xcf, 0xce, - 0xf0, 0xb4, 0xe6, 0x73, - 0x96, 0xac, 0x74, 0x22, - 0xe7, 0xad, 0x35, 0x85, - 0xe2, 0xf9, 0x37, 0xe8, - 0x1c, 0x75, 0xdf, 0x6e, - 0x47, 0xf1, 0x1a, 0x71, - 0x1d, 0x29, 0xc5, 0x89, - 0x6f, 0xb7, 0x62, 0x0e, - 0xaa, 0x18, 0xbe, 0x1b, - 0xfc, 0x56, 0x3e, 0x4b, - 0xc6, 0xd2, 0x79, 0x20, - 0x9a, 0xdb, 0xc0, 0xfe, - 0x78, 0xcd, 0x5a, 0xf4, - 0x1f, 0xdd, 0xa8, 0x33, - 0x88, 0x07, 0xc7, 0x31, - 0xb1, 0x12, 0x10, 0x59, - 0x27, 0x80, 0xec, 0x5f, - 0x60, 0x51, 0x7f, 0xa9, - 0x19, 0xb5, 0x4a, 0x0d, - 0x2d, 0xe5, 0x7a, 0x9f, - 0x93, 0xc9, 0x9c, 0xef, - 0xa0, 0xe0, 0x3b, 0x4d, - 0xae, 0x2a, 0xf5, 0xb0, - 0xc8, 0xeb, 0xbb, 0x3c, - 0x83, 0x53, 0x99, 0x61, - 0x17, 0x2b, 0x04, 0x7e, - 0xba, 0x77, 0xd6, 0x26, - 0xe1, 0x69, 0x14, 0x63, - 0x55, 0x21, 0x0c, 0x7d, -}; - - -#if CPU_BYTE_ORDER == CPU_LITTLE_ENDIAN - -#define XTd0(x) TD0[x] -#define XTd1(x) ROTL(TD0[x], 8) -#define XTd2(x) ROTL(TD0[x], 16) -#define XTd3(x) ROTL(TD0[x], 24) - -#define Td0(x) XTd0(x&0xff) -#define Td1(x) XTd1((x>>8)&0xff) -#define Td2(x) XTd2((x>>16)&0xff) -#define Td3(x) XTd3(x>>24) - -#define TdMix_0(x) TE4[x&0xFF] -#define TdMix_1(x) TE4[(x>>8)&0xFF] -#define TdMix_2(x) TE4[(x>>16)&0xFF] -#define TdMix_3(x) TE4[x>>24] - -#define Td4_0(x) ((uint32_t)TD4[x&0xFF]) -#define Td4_1(x) ((uint32_t)TD4[(x>>8)&0xFF] << 8) -#define Td4_2(x) ((uint32_t)TD4[(x>>16)&0xFF] << 16) -#define Td4_3(x) ((uint32_t)TD4[x>>24] << 24) - -#else - -#define XTd0(x) TD0[x] -#define XTd1(x) ROTR(TD0[x], 8) -#define XTd2(x) ROTR(TD0[x], 16) -#define XTd3(x) ROTR(TD0[x], 24) - -#define Td0(x) XTd0(x>>24) -#define Td1(x) XTd1((x>>16)&0xff) -#define Td2(x) XTd2((x>>8)&0xff) -#define Td3(x) XTd3(x&0xff) - -#define TdMix_0(x) TE4[x>>24] -#define TdMix_1(x) TE4[(x>>16)&0xFF] -#define TdMix_2(x) TE4[(x>>8)&0xFF] -#define TdMix_3(x) TE4[x&0xFF] - -#define Td4_0(x) ((uint32_t)TD4[x>>24] << 24) -#define Td4_1(x) ((uint32_t)TD4[(x>>16)&0xFF] << 16) -#define Td4_2(x) ((uint32_t)TD4[(x>>8)&0xFF] << 8) -#define Td4_3(x) ((uint32_t)TD4[x&0xFF]) - -#endif - - -/*****************************************************************************/ -// CODE -/*****************************************************************************/ - -static void lazy_expandKeyEnc128(uint32_t *k) -{ - int i = 0; - while (1) - { - k[4] = k[0] ^ TeKeyMix(k[3]) ^ RCON(i); - k[5] = k[1] ^ k[4]; - k[6] = k[2] ^ k[5]; - k[7] = k[3] ^ k[6]; - if (++i == 10) - break; - k += 4; - } -} - -static void lazy_expandKeyEnc192(uint32_t *k) -{ - int i = 0; - while (1) - { - k[ 6] = k[ 0] ^ TeKeyMix(k[5]) ^ RCON(i); - k[ 7] = k[ 1] ^ k[ 6]; - k[ 8] = k[ 2] ^ k[ 7]; - k[ 9] = k[ 3] ^ k[ 8]; - if (++i == 8) - break; - k[10] = k[ 4] ^ k[ 9]; - k[11] = k[ 5] ^ k[10]; - k += 6; - } -} - -static void lazy_expandKeyEnc256(uint32_t *k) -{ - int i = 0; - for (;;) - { - k[ 8] = k[ 0] ^ TeKeyMix(k[7]) ^ RCON(i); - k[ 9] = k[ 1] ^ k[ 8]; - k[10] = k[ 2] ^ k[ 9]; - k[11] = k[ 3] ^ k[10]; - if (++i == 7) - break; - k[12] = k[ 4] ^ TeKeyMix2(k[11]); - k[13] = k[ 5] ^ k[12]; - k[14] = k[ 6] ^ k[13]; - k[15] = k[ 7] ^ k[14]; - k += 8; - } -} - -static const void (*lazy_expandKeyEnc[3])(uint32_t *k) = -{ - lazy_expandKeyEnc128, lazy_expandKeyEnc192, lazy_expandKeyEnc256, -}; - -static void lazy_expandKeyDec(uint32_t *k, int len) -{ - k += len-5; - for (int i=0;ic.key_len); - - memcpy (c->expkey, key, c->c.key_len); - c->key_status = 0; -} - -static void AES_encrypt(BlockCipher *c_, void *block) -{ - AES_Context *c = (AES_Context *)c_; - uint32_t *k = c->expkey; - uint32_t t0, t1, t2, t3, s0, s1, s2, s3; - int Nr = c->num_rounds; - - if (c->key_status <= 0) - { - lazy_expandKeyEnc[(Nr-10U)/2](k); - c->key_status = 1; - } - - s0 = ((uint32_t*)block)[0]; - s1 = ((uint32_t*)block)[1]; - s2 = ((uint32_t*)block)[2]; - s3 = ((uint32_t*)block)[3]; - - s0 ^= k[0]; - s1 ^= k[1]; - s2 ^= k[2]; - s3 ^= k[3]; - - int r = 0; - while (1) - { - k += 4; - t0 = Te0(s0)^Te1(s1)^Te2(s2)^Te3(s3)^k[0]; - t1 = Te0(s1)^Te1(s2)^Te2(s3)^Te3(s0)^k[1]; - t2 = Te0(s2)^Te1(s3)^Te2(s0)^Te3(s1)^k[2]; - t3 = Te0(s3)^Te1(s0)^Te2(s1)^Te3(s2)^k[3]; - if (r == Nr-2) - break; - s0 = t0; s1 = t1; s2 = t2; s3 = t3; - ++r; - } - k += 4; - - s0 = Te4_3(t0)^Te4_2(t1)^Te4_1(t2)^Te4_0(t3)^k[0]; - s1 = Te4_3(t1)^Te4_2(t2)^Te4_1(t3)^Te4_0(t0)^k[1]; - s2 = Te4_3(t2)^Te4_2(t3)^Te4_1(t0)^Te4_0(t1)^k[2]; - s3 = Te4_3(t3)^Te4_2(t0)^Te4_1(t1)^Te4_0(t2)^k[3]; - - ((uint32_t*)block)[0] = s0; - ((uint32_t*)block)[1] = s1; - ((uint32_t*)block)[2] = s2; - ((uint32_t*)block)[3] = s3; -} - - -static void AES_decrypt(BlockCipher *c_, void *block) -{ - AES_Context *c = (AES_Context *)c_; - uint32_t *k = c->expkey; - uint32_t t0, t1, t2, t3, s0, s1, s2, s3; - uint8_t Nr = c->num_rounds; - int klen = (Nr+1)*4; - - if (c->key_status >= 0) - { - if (c->key_status == 0) - lazy_expandKeyEnc[(Nr-10U)/2](k); - lazy_expandKeyDec(k, klen); - c->key_status = -1; - } - - k += klen-4; - - s0 = ((uint32_t*)block)[0] ^ k[0]; - s1 = ((uint32_t*)block)[1] ^ k[1]; - s2 = ((uint32_t*)block)[2] ^ k[2]; - s3 = ((uint32_t*)block)[3] ^ k[3]; - - int r = 0; - while (1) - { - k -= 4; - - t0 = Td0(s0)^Td1(s3)^Td2(s2)^Td3(s1)^k[0]; - t1 = Td0(s1)^Td1(s0)^Td2(s3)^Td3(s2)^k[1]; - t2 = Td0(s2)^Td1(s1)^Td2(s0)^Td3(s3)^k[2]; - t3 = Td0(s3)^Td1(s2)^Td2(s1)^Td3(s0)^k[3]; - - if (r == Nr-2) - break; - s0 = t0; s1 = t1; s2 = t2; s3 = t3; - ++r; - } - - k -= 4; - s0 = Td4_0(t0)^Td4_1(t3)^Td4_2(t2)^Td4_3(t1)^k[0]; - s1 = Td4_0(t1)^Td4_1(t0)^Td4_2(t3)^Td4_3(t2)^k[1]; - s2 = Td4_0(t2)^Td4_1(t1)^Td4_2(t0)^Td4_3(t3)^k[2]; - s3 = Td4_0(t3)^Td4_1(t2)^Td4_2(t1)^Td4_3(t0)^k[3]; - - ((uint32_t*)block)[0] = s0; - ((uint32_t*)block)[1] = s1; - ((uint32_t*)block)[2] = s2; - ((uint32_t*)block)[3] = s3; -} diff --git a/bertos/sec/cipher/aes_f8.h b/bertos/sec/cipher/aes_f8.h deleted file mode 100644 index 40e9909a..00000000 --- a/bertos/sec/cipher/aes_f8.h +++ /dev/null @@ -1,433 +0,0 @@ -/** - * \file - * - * - * \brief AES Advanced Encryption Standard implementation - * - * \author Giovanni Bajo - * - */ - -// advanced encryption standard -// author: karl malbrain, malbrain@yahoo.com -/* -This work, including the source code, documentation -and related data, is placed into the public domain. - -The orginal author is Karl Malbrain. - -THIS SOFTWARE IS PROVIDED AS-IS WITHOUT WARRANTY -OF ANY KIND, NOT EVEN THE IMPLIED WARRANTY OF -MERCHANTABILITY. THE AUTHOR OF THIS SOFTWARE, -ASSUMES _NO_ RESPONSIBILITY FOR ANY CONSEQUENCE -RESULTING FROM THE USE, MODIFICATION, OR -REDISTRIBUTION OF THIS SOFTWARE. -*/ - -static uint8_t Sbox[256] = { // forward s-box -0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, -0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, -0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, -0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, -0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, -0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, -0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, -0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, -0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, -0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, -0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, -0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, -0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, -0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, -0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, -0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16}; - -static uint8_t InvSbox[256] = { // inverse s-box -0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, -0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, -0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, -0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, -0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, -0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, -0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, -0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, -0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, -0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, -0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, -0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, -0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, -0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, -0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, -0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d}; - -// combined Xtimes2[Sbox[]] -static uint8_t Xtime2Sbox[256] = { -0xc6, 0xf8, 0xee, 0xf6, 0xff, 0xd6, 0xde, 0x91, 0x60, 0x02, 0xce, 0x56, 0xe7, 0xb5, 0x4d, 0xec, -0x8f, 0x1f, 0x89, 0xfa, 0xef, 0xb2, 0x8e, 0xfb, 0x41, 0xb3, 0x5f, 0x45, 0x23, 0x53, 0xe4, 0x9b, -0x75, 0xe1, 0x3d, 0x4c, 0x6c, 0x7e, 0xf5, 0x83, 0x68, 0x51, 0xd1, 0xf9, 0xe2, 0xab, 0x62, 0x2a, -0x08, 0x95, 0x46, 0x9d, 0x30, 0x37, 0x0a, 0x2f, 0x0e, 0x24, 0x1b, 0xdf, 0xcd, 0x4e, 0x7f, 0xea, -0x12, 0x1d, 0x58, 0x34, 0x36, 0xdc, 0xb4, 0x5b, 0xa4, 0x76, 0xb7, 0x7d, 0x52, 0xdd, 0x5e, 0x13, -0xa6, 0xb9, 0x00, 0xc1, 0x40, 0xe3, 0x79, 0xb6, 0xd4, 0x8d, 0x67, 0x72, 0x94, 0x98, 0xb0, 0x85, -0xbb, 0xc5, 0x4f, 0xed, 0x86, 0x9a, 0x66, 0x11, 0x8a, 0xe9, 0x04, 0xfe, 0xa0, 0x78, 0x25, 0x4b, -0xa2, 0x5d, 0x80, 0x05, 0x3f, 0x21, 0x70, 0xf1, 0x63, 0x77, 0xaf, 0x42, 0x20, 0xe5, 0xfd, 0xbf, -0x81, 0x18, 0x26, 0xc3, 0xbe, 0x35, 0x88, 0x2e, 0x93, 0x55, 0xfc, 0x7a, 0xc8, 0xba, 0x32, 0xe6, -0xc0, 0x19, 0x9e, 0xa3, 0x44, 0x54, 0x3b, 0x0b, 0x8c, 0xc7, 0x6b, 0x28, 0xa7, 0xbc, 0x16, 0xad, -0xdb, 0x64, 0x74, 0x14, 0x92, 0x0c, 0x48, 0xb8, 0x9f, 0xbd, 0x43, 0xc4, 0x39, 0x31, 0xd3, 0xf2, -0xd5, 0x8b, 0x6e, 0xda, 0x01, 0xb1, 0x9c, 0x49, 0xd8, 0xac, 0xf3, 0xcf, 0xca, 0xf4, 0x47, 0x10, -0x6f, 0xf0, 0x4a, 0x5c, 0x38, 0x57, 0x73, 0x97, 0xcb, 0xa1, 0xe8, 0x3e, 0x96, 0x61, 0x0d, 0x0f, -0xe0, 0x7c, 0x71, 0xcc, 0x90, 0x06, 0xf7, 0x1c, 0xc2, 0x6a, 0xae, 0x69, 0x17, 0x99, 0x3a, 0x27, -0xd9, 0xeb, 0x2b, 0x22, 0xd2, 0xa9, 0x07, 0x33, 0x2d, 0x3c, 0x15, 0xc9, 0x87, 0xaa, 0x50, 0xa5, -0x03, 0x59, 0x09, 0x1a, 0x65, 0xd7, 0x84, 0xd0, 0x82, 0x29, 0x5a, 0x1e, 0x7b, 0xa8, 0x6d, 0x2c -}; - -// combined Xtimes3[Sbox[]] -static uint8_t Xtime3Sbox[256] = { -0xa5, 0x84, 0x99, 0x8d, 0x0d, 0xbd, 0xb1, 0x54, 0x50, 0x03, 0xa9, 0x7d, 0x19, 0x62, 0xe6, 0x9a, -0x45, 0x9d, 0x40, 0x87, 0x15, 0xeb, 0xc9, 0x0b, 0xec, 0x67, 0xfd, 0xea, 0xbf, 0xf7, 0x96, 0x5b, -0xc2, 0x1c, 0xae, 0x6a, 0x5a, 0x41, 0x02, 0x4f, 0x5c, 0xf4, 0x34, 0x08, 0x93, 0x73, 0x53, 0x3f, -0x0c, 0x52, 0x65, 0x5e, 0x28, 0xa1, 0x0f, 0xb5, 0x09, 0x36, 0x9b, 0x3d, 0x26, 0x69, 0xcd, 0x9f, -0x1b, 0x9e, 0x74, 0x2e, 0x2d, 0xb2, 0xee, 0xfb, 0xf6, 0x4d, 0x61, 0xce, 0x7b, 0x3e, 0x71, 0x97, -0xf5, 0x68, 0x00, 0x2c, 0x60, 0x1f, 0xc8, 0xed, 0xbe, 0x46, 0xd9, 0x4b, 0xde, 0xd4, 0xe8, 0x4a, -0x6b, 0x2a, 0xe5, 0x16, 0xc5, 0xd7, 0x55, 0x94, 0xcf, 0x10, 0x06, 0x81, 0xf0, 0x44, 0xba, 0xe3, -0xf3, 0xfe, 0xc0, 0x8a, 0xad, 0xbc, 0x48, 0x04, 0xdf, 0xc1, 0x75, 0x63, 0x30, 0x1a, 0x0e, 0x6d, -0x4c, 0x14, 0x35, 0x2f, 0xe1, 0xa2, 0xcc, 0x39, 0x57, 0xf2, 0x82, 0x47, 0xac, 0xe7, 0x2b, 0x95, -0xa0, 0x98, 0xd1, 0x7f, 0x66, 0x7e, 0xab, 0x83, 0xca, 0x29, 0xd3, 0x3c, 0x79, 0xe2, 0x1d, 0x76, -0x3b, 0x56, 0x4e, 0x1e, 0xdb, 0x0a, 0x6c, 0xe4, 0x5d, 0x6e, 0xef, 0xa6, 0xa8, 0xa4, 0x37, 0x8b, -0x32, 0x43, 0x59, 0xb7, 0x8c, 0x64, 0xd2, 0xe0, 0xb4, 0xfa, 0x07, 0x25, 0xaf, 0x8e, 0xe9, 0x18, -0xd5, 0x88, 0x6f, 0x72, 0x24, 0xf1, 0xc7, 0x51, 0x23, 0x7c, 0x9c, 0x21, 0xdd, 0xdc, 0x86, 0x85, -0x90, 0x42, 0xc4, 0xaa, 0xd8, 0x05, 0x01, 0x12, 0xa3, 0x5f, 0xf9, 0xd0, 0x91, 0x58, 0x27, 0xb9, -0x38, 0x13, 0xb3, 0x33, 0xbb, 0x70, 0x89, 0xa7, 0xb6, 0x22, 0x92, 0x20, 0x49, 0xff, 0x78, 0x7a, -0x8f, 0xf8, 0x80, 0x17, 0xda, 0x31, 0xc6, 0xb8, 0xc3, 0xb0, 0x77, 0x11, 0xcb, 0xfc, 0xd6, 0x3a -}; - -// modular multiplication tables -// based on: - -// Xtime2[x] = (x & 0x80 ? 0x1b : 0) ^ (x + x) -// Xtime3[x] = x^Xtime2[x]; -#if 0 -static uint8_t Xtime2[256] = { -0x00, 0x02, 0x04, 0x06, 0x08, 0x0a, 0x0c, 0x0e, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e, -0x20, 0x22, 0x24, 0x26, 0x28, 0x2a, 0x2c, 0x2e, 0x30, 0x32, 0x34, 0x36, 0x38, 0x3a, 0x3c, 0x3e, -0x40, 0x42, 0x44, 0x46, 0x48, 0x4a, 0x4c, 0x4e, 0x50, 0x52, 0x54, 0x56, 0x58, 0x5a, 0x5c, 0x5e, -0x60, 0x62, 0x64, 0x66, 0x68, 0x6a, 0x6c, 0x6e, 0x70, 0x72, 0x74, 0x76, 0x78, 0x7a, 0x7c, 0x7e, -0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c, 0x8e, 0x90, 0x92, 0x94, 0x96, 0x98, 0x9a, 0x9c, 0x9e, -0xa0, 0xa2, 0xa4, 0xa6, 0xa8, 0xaa, 0xac, 0xae, 0xb0, 0xb2, 0xb4, 0xb6, 0xb8, 0xba, 0xbc, 0xbe, -0xc0, 0xc2, 0xc4, 0xc6, 0xc8, 0xca, 0xcc, 0xce, 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, 0xda, 0xdc, 0xde, -0xe0, 0xe2, 0xe4, 0xe6, 0xe8, 0xea, 0xec, 0xee, 0xf0, 0xf2, 0xf4, 0xf6, 0xf8, 0xfa, 0xfc, 0xfe, -0x1b, 0x19, 0x1f, 0x1d, 0x13, 0x11, 0x17, 0x15, 0x0b, 0x09, 0x0f, 0x0d, 0x03, 0x01, 0x07, 0x05, -0x3b, 0x39, 0x3f, 0x3d, 0x33, 0x31, 0x37, 0x35, 0x2b, 0x29, 0x2f, 0x2d, 0x23, 0x21, 0x27, 0x25, -0x5b, 0x59, 0x5f, 0x5d, 0x53, 0x51, 0x57, 0x55, 0x4b, 0x49, 0x4f, 0x4d, 0x43, 0x41, 0x47, 0x45, -0x7b, 0x79, 0x7f, 0x7d, 0x73, 0x71, 0x77, 0x75, 0x6b, 0x69, 0x6f, 0x6d, 0x63, 0x61, 0x67, 0x65, -0x9b, 0x99, 0x9f, 0x9d, 0x93, 0x91, 0x97, 0x95, 0x8b, 0x89, 0x8f, 0x8d, 0x83, 0x81, 0x87, 0x85, -0xbb, 0xb9, 0xbf, 0xbd, 0xb3, 0xb1, 0xb7, 0xb5, 0xab, 0xa9, 0xaf, 0xad, 0xa3, 0xa1, 0xa7, 0xa5, -0xdb, 0xd9, 0xdf, 0xdd, 0xd3, 0xd1, 0xd7, 0xd5, 0xcb, 0xc9, 0xcf, 0xcd, 0xc3, 0xc1, 0xc7, 0xc5, -0xfb, 0xf9, 0xff, 0xfd, 0xf3, 0xf1, 0xf7, 0xf5, 0xeb, 0xe9, 0xef, 0xed, 0xe3, 0xe1, 0xe7, 0xe5}; -#endif - -static uint8_t Xtime9[256] = { -0x00, 0x09, 0x12, 0x1b, 0x24, 0x2d, 0x36, 0x3f, 0x48, 0x41, 0x5a, 0x53, 0x6c, 0x65, 0x7e, 0x77, -0x90, 0x99, 0x82, 0x8b, 0xb4, 0xbd, 0xa6, 0xaf, 0xd8, 0xd1, 0xca, 0xc3, 0xfc, 0xf5, 0xee, 0xe7, -0x3b, 0x32, 0x29, 0x20, 0x1f, 0x16, 0x0d, 0x04, 0x73, 0x7a, 0x61, 0x68, 0x57, 0x5e, 0x45, 0x4c, -0xab, 0xa2, 0xb9, 0xb0, 0x8f, 0x86, 0x9d, 0x94, 0xe3, 0xea, 0xf1, 0xf8, 0xc7, 0xce, 0xd5, 0xdc, -0x76, 0x7f, 0x64, 0x6d, 0x52, 0x5b, 0x40, 0x49, 0x3e, 0x37, 0x2c, 0x25, 0x1a, 0x13, 0x08, 0x01, -0xe6, 0xef, 0xf4, 0xfd, 0xc2, 0xcb, 0xd0, 0xd9, 0xae, 0xa7, 0xbc, 0xb5, 0x8a, 0x83, 0x98, 0x91, -0x4d, 0x44, 0x5f, 0x56, 0x69, 0x60, 0x7b, 0x72, 0x05, 0x0c, 0x17, 0x1e, 0x21, 0x28, 0x33, 0x3a, -0xdd, 0xd4, 0xcf, 0xc6, 0xf9, 0xf0, 0xeb, 0xe2, 0x95, 0x9c, 0x87, 0x8e, 0xb1, 0xb8, 0xa3, 0xaa, -0xec, 0xe5, 0xfe, 0xf7, 0xc8, 0xc1, 0xda, 0xd3, 0xa4, 0xad, 0xb6, 0xbf, 0x80, 0x89, 0x92, 0x9b, -0x7c, 0x75, 0x6e, 0x67, 0x58, 0x51, 0x4a, 0x43, 0x34, 0x3d, 0x26, 0x2f, 0x10, 0x19, 0x02, 0x0b, -0xd7, 0xde, 0xc5, 0xcc, 0xf3, 0xfa, 0xe1, 0xe8, 0x9f, 0x96, 0x8d, 0x84, 0xbb, 0xb2, 0xa9, 0xa0, -0x47, 0x4e, 0x55, 0x5c, 0x63, 0x6a, 0x71, 0x78, 0x0f, 0x06, 0x1d, 0x14, 0x2b, 0x22, 0x39, 0x30, -0x9a, 0x93, 0x88, 0x81, 0xbe, 0xb7, 0xac, 0xa5, 0xd2, 0xdb, 0xc0, 0xc9, 0xf6, 0xff, 0xe4, 0xed, -0x0a, 0x03, 0x18, 0x11, 0x2e, 0x27, 0x3c, 0x35, 0x42, 0x4b, 0x50, 0x59, 0x66, 0x6f, 0x74, 0x7d, -0xa1, 0xa8, 0xb3, 0xba, 0x85, 0x8c, 0x97, 0x9e, 0xe9, 0xe0, 0xfb, 0xf2, 0xcd, 0xc4, 0xdf, 0xd6, -0x31, 0x38, 0x23, 0x2a, 0x15, 0x1c, 0x07, 0x0e, 0x79, 0x70, 0x6b, 0x62, 0x5d, 0x54, 0x4f, 0x46}; - -static uint8_t XtimeB[256] = { -0x00, 0x0b, 0x16, 0x1d, 0x2c, 0x27, 0x3a, 0x31, 0x58, 0x53, 0x4e, 0x45, 0x74, 0x7f, 0x62, 0x69, -0xb0, 0xbb, 0xa6, 0xad, 0x9c, 0x97, 0x8a, 0x81, 0xe8, 0xe3, 0xfe, 0xf5, 0xc4, 0xcf, 0xd2, 0xd9, -0x7b, 0x70, 0x6d, 0x66, 0x57, 0x5c, 0x41, 0x4a, 0x23, 0x28, 0x35, 0x3e, 0x0f, 0x04, 0x19, 0x12, -0xcb, 0xc0, 0xdd, 0xd6, 0xe7, 0xec, 0xf1, 0xfa, 0x93, 0x98, 0x85, 0x8e, 0xbf, 0xb4, 0xa9, 0xa2, -0xf6, 0xfd, 0xe0, 0xeb, 0xda, 0xd1, 0xcc, 0xc7, 0xae, 0xa5, 0xb8, 0xb3, 0x82, 0x89, 0x94, 0x9f, -0x46, 0x4d, 0x50, 0x5b, 0x6a, 0x61, 0x7c, 0x77, 0x1e, 0x15, 0x08, 0x03, 0x32, 0x39, 0x24, 0x2f, -0x8d, 0x86, 0x9b, 0x90, 0xa1, 0xaa, 0xb7, 0xbc, 0xd5, 0xde, 0xc3, 0xc8, 0xf9, 0xf2, 0xef, 0xe4, -0x3d, 0x36, 0x2b, 0x20, 0x11, 0x1a, 0x07, 0x0c, 0x65, 0x6e, 0x73, 0x78, 0x49, 0x42, 0x5f, 0x54, -0xf7, 0xfc, 0xe1, 0xea, 0xdb, 0xd0, 0xcd, 0xc6, 0xaf, 0xa4, 0xb9, 0xb2, 0x83, 0x88, 0x95, 0x9e, -0x47, 0x4c, 0x51, 0x5a, 0x6b, 0x60, 0x7d, 0x76, 0x1f, 0x14, 0x09, 0x02, 0x33, 0x38, 0x25, 0x2e, -0x8c, 0x87, 0x9a, 0x91, 0xa0, 0xab, 0xb6, 0xbd, 0xd4, 0xdf, 0xc2, 0xc9, 0xf8, 0xf3, 0xee, 0xe5, -0x3c, 0x37, 0x2a, 0x21, 0x10, 0x1b, 0x06, 0x0d, 0x64, 0x6f, 0x72, 0x79, 0x48, 0x43, 0x5e, 0x55, -0x01, 0x0a, 0x17, 0x1c, 0x2d, 0x26, 0x3b, 0x30, 0x59, 0x52, 0x4f, 0x44, 0x75, 0x7e, 0x63, 0x68, -0xb1, 0xba, 0xa7, 0xac, 0x9d, 0x96, 0x8b, 0x80, 0xe9, 0xe2, 0xff, 0xf4, 0xc5, 0xce, 0xd3, 0xd8, -0x7a, 0x71, 0x6c, 0x67, 0x56, 0x5d, 0x40, 0x4b, 0x22, 0x29, 0x34, 0x3f, 0x0e, 0x05, 0x18, 0x13, -0xca, 0xc1, 0xdc, 0xd7, 0xe6, 0xed, 0xf0, 0xfb, 0x92, 0x99, 0x84, 0x8f, 0xbe, 0xb5, 0xa8, 0xa3}; - -static uint8_t XtimeD[256] = { -0x00, 0x0d, 0x1a, 0x17, 0x34, 0x39, 0x2e, 0x23, 0x68, 0x65, 0x72, 0x7f, 0x5c, 0x51, 0x46, 0x4b, -0xd0, 0xdd, 0xca, 0xc7, 0xe4, 0xe9, 0xfe, 0xf3, 0xb8, 0xb5, 0xa2, 0xaf, 0x8c, 0x81, 0x96, 0x9b, -0xbb, 0xb6, 0xa1, 0xac, 0x8f, 0x82, 0x95, 0x98, 0xd3, 0xde, 0xc9, 0xc4, 0xe7, 0xea, 0xfd, 0xf0, -0x6b, 0x66, 0x71, 0x7c, 0x5f, 0x52, 0x45, 0x48, 0x03, 0x0e, 0x19, 0x14, 0x37, 0x3a, 0x2d, 0x20, -0x6d, 0x60, 0x77, 0x7a, 0x59, 0x54, 0x43, 0x4e, 0x05, 0x08, 0x1f, 0x12, 0x31, 0x3c, 0x2b, 0x26, -0xbd, 0xb0, 0xa7, 0xaa, 0x89, 0x84, 0x93, 0x9e, 0xd5, 0xd8, 0xcf, 0xc2, 0xe1, 0xec, 0xfb, 0xf6, -0xd6, 0xdb, 0xcc, 0xc1, 0xe2, 0xef, 0xf8, 0xf5, 0xbe, 0xb3, 0xa4, 0xa9, 0x8a, 0x87, 0x90, 0x9d, -0x06, 0x0b, 0x1c, 0x11, 0x32, 0x3f, 0x28, 0x25, 0x6e, 0x63, 0x74, 0x79, 0x5a, 0x57, 0x40, 0x4d, -0xda, 0xd7, 0xc0, 0xcd, 0xee, 0xe3, 0xf4, 0xf9, 0xb2, 0xbf, 0xa8, 0xa5, 0x86, 0x8b, 0x9c, 0x91, -0x0a, 0x07, 0x10, 0x1d, 0x3e, 0x33, 0x24, 0x29, 0x62, 0x6f, 0x78, 0x75, 0x56, 0x5b, 0x4c, 0x41, -0x61, 0x6c, 0x7b, 0x76, 0x55, 0x58, 0x4f, 0x42, 0x09, 0x04, 0x13, 0x1e, 0x3d, 0x30, 0x27, 0x2a, -0xb1, 0xbc, 0xab, 0xa6, 0x85, 0x88, 0x9f, 0x92, 0xd9, 0xd4, 0xc3, 0xce, 0xed, 0xe0, 0xf7, 0xfa, -0xb7, 0xba, 0xad, 0xa0, 0x83, 0x8e, 0x99, 0x94, 0xdf, 0xd2, 0xc5, 0xc8, 0xeb, 0xe6, 0xf1, 0xfc, -0x67, 0x6a, 0x7d, 0x70, 0x53, 0x5e, 0x49, 0x44, 0x0f, 0x02, 0x15, 0x18, 0x3b, 0x36, 0x21, 0x2c, -0x0c, 0x01, 0x16, 0x1b, 0x38, 0x35, 0x22, 0x2f, 0x64, 0x69, 0x7e, 0x73, 0x50, 0x5d, 0x4a, 0x47, -0xdc, 0xd1, 0xc6, 0xcb, 0xe8, 0xe5, 0xf2, 0xff, 0xb4, 0xb9, 0xae, 0xa3, 0x80, 0x8d, 0x9a, 0x97}; - -static uint8_t XtimeE[256] = { -0x00, 0x0e, 0x1c, 0x12, 0x38, 0x36, 0x24, 0x2a, 0x70, 0x7e, 0x6c, 0x62, 0x48, 0x46, 0x54, 0x5a, -0xe0, 0xee, 0xfc, 0xf2, 0xd8, 0xd6, 0xc4, 0xca, 0x90, 0x9e, 0x8c, 0x82, 0xa8, 0xa6, 0xb4, 0xba, -0xdb, 0xd5, 0xc7, 0xc9, 0xe3, 0xed, 0xff, 0xf1, 0xab, 0xa5, 0xb7, 0xb9, 0x93, 0x9d, 0x8f, 0x81, -0x3b, 0x35, 0x27, 0x29, 0x03, 0x0d, 0x1f, 0x11, 0x4b, 0x45, 0x57, 0x59, 0x73, 0x7d, 0x6f, 0x61, -0xad, 0xa3, 0xb1, 0xbf, 0x95, 0x9b, 0x89, 0x87, 0xdd, 0xd3, 0xc1, 0xcf, 0xe5, 0xeb, 0xf9, 0xf7, -0x4d, 0x43, 0x51, 0x5f, 0x75, 0x7b, 0x69, 0x67, 0x3d, 0x33, 0x21, 0x2f, 0x05, 0x0b, 0x19, 0x17, -0x76, 0x78, 0x6a, 0x64, 0x4e, 0x40, 0x52, 0x5c, 0x06, 0x08, 0x1a, 0x14, 0x3e, 0x30, 0x22, 0x2c, -0x96, 0x98, 0x8a, 0x84, 0xae, 0xa0, 0xb2, 0xbc, 0xe6, 0xe8, 0xfa, 0xf4, 0xde, 0xd0, 0xc2, 0xcc, -0x41, 0x4f, 0x5d, 0x53, 0x79, 0x77, 0x65, 0x6b, 0x31, 0x3f, 0x2d, 0x23, 0x09, 0x07, 0x15, 0x1b, -0xa1, 0xaf, 0xbd, 0xb3, 0x99, 0x97, 0x85, 0x8b, 0xd1, 0xdf, 0xcd, 0xc3, 0xe9, 0xe7, 0xf5, 0xfb, -0x9a, 0x94, 0x86, 0x88, 0xa2, 0xac, 0xbe, 0xb0, 0xea, 0xe4, 0xf6, 0xf8, 0xd2, 0xdc, 0xce, 0xc0, -0x7a, 0x74, 0x66, 0x68, 0x42, 0x4c, 0x5e, 0x50, 0x0a, 0x04, 0x16, 0x18, 0x32, 0x3c, 0x2e, 0x20, -0xec, 0xe2, 0xf0, 0xfe, 0xd4, 0xda, 0xc8, 0xc6, 0x9c, 0x92, 0x80, 0x8e, 0xa4, 0xaa, 0xb8, 0xb6, -0x0c, 0x02, 0x10, 0x1e, 0x34, 0x3a, 0x28, 0x26, 0x7c, 0x72, 0x60, 0x6e, 0x44, 0x4a, 0x58, 0x56, -0x37, 0x39, 0x2b, 0x25, 0x0f, 0x01, 0x13, 0x1d, 0x47, 0x49, 0x5b, 0x55, 0x7f, 0x71, 0x63, 0x6d, -0xd7, 0xd9, 0xcb, 0xc5, 0xef, 0xe1, 0xf3, 0xfd, 0xa7, 0xa9, 0xbb, 0xb5, 0x9f, 0x91, 0x83, 0x8d}; - -// exchanges columns in each of 4 rows -// row0 - unchanged, row1- shifted left 1, -// row2 - shifted left 2 and row3 - shifted left 3 -static void ShiftRows (uint8_t *state) -{ - uint8_t tmp; - - // just substitute row 0 - state[0] = Sbox[state[0]], state[4] = Sbox[state[4]]; - state[8] = Sbox[state[8]], state[12] = Sbox[state[12]]; - - // rotate row 1 - tmp = Sbox[state[1]], state[1] = Sbox[state[5]]; - state[5] = Sbox[state[9]], state[9] = Sbox[state[13]], state[13] = tmp; - - // rotate row 2 - tmp = Sbox[state[2]], state[2] = Sbox[state[10]], state[10] = tmp; - tmp = Sbox[state[6]], state[6] = Sbox[state[14]], state[14] = tmp; - - // rotate row 3 - tmp = Sbox[state[15]], state[15] = Sbox[state[11]]; - state[11] = Sbox[state[7]], state[7] = Sbox[state[3]], state[3] = tmp; -} - -// restores columns in each of 4 rows -// row0 - unchanged, row1- shifted right 1, -// row2 - shifted right 2 and row3 - shifted right 3 -static void InvShiftRows (uint8_t *state) -{ - uint8_t tmp; - - // restore row 0 - state[0] = InvSbox[state[0]], state[4] = InvSbox[state[4]]; - state[8] = InvSbox[state[8]], state[12] = InvSbox[state[12]]; - - // restore row 1 - tmp = InvSbox[state[13]], state[13] = InvSbox[state[9]]; - state[9] = InvSbox[state[5]], state[5] = InvSbox[state[1]], state[1] = tmp; - - // restore row 2 - tmp = InvSbox[state[2]], state[2] = InvSbox[state[10]], state[10] = tmp; - tmp = InvSbox[state[6]], state[6] = InvSbox[state[14]], state[14] = tmp; - - // restore row 3 - tmp = InvSbox[state[3]], state[3] = InvSbox[state[7]]; - state[7] = InvSbox[state[11]], state[11] = InvSbox[state[15]], state[15] = tmp; -} - -// recombine and mix each row in a column -static void MixSubColumns (uint8_t *state) -{ - uint8_t tmp[4 * Nb]; - - // mixing column 0 - tmp[0] = Xtime2Sbox[state[0]] ^ Xtime3Sbox[state[5]] ^ Sbox[state[10]] ^ Sbox[state[15]]; - tmp[1] = Sbox[state[0]] ^ Xtime2Sbox[state[5]] ^ Xtime3Sbox[state[10]] ^ Sbox[state[15]]; - tmp[2] = Sbox[state[0]] ^ Sbox[state[5]] ^ Xtime2Sbox[state[10]] ^ Xtime3Sbox[state[15]]; - tmp[3] = Xtime3Sbox[state[0]] ^ Sbox[state[5]] ^ Sbox[state[10]] ^ Xtime2Sbox[state[15]]; - - // mixing column 1 - tmp[4] = Xtime2Sbox[state[4]] ^ Xtime3Sbox[state[9]] ^ Sbox[state[14]] ^ Sbox[state[3]]; - tmp[5] = Sbox[state[4]] ^ Xtime2Sbox[state[9]] ^ Xtime3Sbox[state[14]] ^ Sbox[state[3]]; - tmp[6] = Sbox[state[4]] ^ Sbox[state[9]] ^ Xtime2Sbox[state[14]] ^ Xtime3Sbox[state[3]]; - tmp[7] = Xtime3Sbox[state[4]] ^ Sbox[state[9]] ^ Sbox[state[14]] ^ Xtime2Sbox[state[3]]; - - // mixing column 2 - tmp[8] = Xtime2Sbox[state[8]] ^ Xtime3Sbox[state[13]] ^ Sbox[state[2]] ^ Sbox[state[7]]; - tmp[9] = Sbox[state[8]] ^ Xtime2Sbox[state[13]] ^ Xtime3Sbox[state[2]] ^ Sbox[state[7]]; - tmp[10] = Sbox[state[8]] ^ Sbox[state[13]] ^ Xtime2Sbox[state[2]] ^ Xtime3Sbox[state[7]]; - tmp[11] = Xtime3Sbox[state[8]] ^ Sbox[state[13]] ^ Sbox[state[2]] ^ Xtime2Sbox[state[7]]; - - // mixing column 3 - tmp[12] = Xtime2Sbox[state[12]] ^ Xtime3Sbox[state[1]] ^ Sbox[state[6]] ^ Sbox[state[11]]; - tmp[13] = Sbox[state[12]] ^ Xtime2Sbox[state[1]] ^ Xtime3Sbox[state[6]] ^ Sbox[state[11]]; - tmp[14] = Sbox[state[12]] ^ Sbox[state[1]] ^ Xtime2Sbox[state[6]] ^ Xtime3Sbox[state[11]]; - tmp[15] = Xtime3Sbox[state[12]] ^ Sbox[state[1]] ^ Sbox[state[6]] ^ Xtime2Sbox[state[11]]; - - memcpy (state, tmp, sizeof(tmp)); -} - -// restore and un-mix each row in a column -static void InvMixSubColumns (uint8_t *state) -{ - uint8_t tmp[4 * Nb]; - int i; - - // restore column 0 - tmp[0] = XtimeE[state[0]] ^ XtimeB[state[1]] ^ XtimeD[state[2]] ^ Xtime9[state[3]]; - tmp[5] = Xtime9[state[0]] ^ XtimeE[state[1]] ^ XtimeB[state[2]] ^ XtimeD[state[3]]; - tmp[10] = XtimeD[state[0]] ^ Xtime9[state[1]] ^ XtimeE[state[2]] ^ XtimeB[state[3]]; - tmp[15] = XtimeB[state[0]] ^ XtimeD[state[1]] ^ Xtime9[state[2]] ^ XtimeE[state[3]]; - - // restore column 1 - tmp[4] = XtimeE[state[4]] ^ XtimeB[state[5]] ^ XtimeD[state[6]] ^ Xtime9[state[7]]; - tmp[9] = Xtime9[state[4]] ^ XtimeE[state[5]] ^ XtimeB[state[6]] ^ XtimeD[state[7]]; - tmp[14] = XtimeD[state[4]] ^ Xtime9[state[5]] ^ XtimeE[state[6]] ^ XtimeB[state[7]]; - tmp[3] = XtimeB[state[4]] ^ XtimeD[state[5]] ^ Xtime9[state[6]] ^ XtimeE[state[7]]; - - // restore column 2 - tmp[8] = XtimeE[state[8]] ^ XtimeB[state[9]] ^ XtimeD[state[10]] ^ Xtime9[state[11]]; - tmp[13] = Xtime9[state[8]] ^ XtimeE[state[9]] ^ XtimeB[state[10]] ^ XtimeD[state[11]]; - tmp[2] = XtimeD[state[8]] ^ Xtime9[state[9]] ^ XtimeE[state[10]] ^ XtimeB[state[11]]; - tmp[7] = XtimeB[state[8]] ^ XtimeD[state[9]] ^ Xtime9[state[10]] ^ XtimeE[state[11]]; - - // restore column 3 - tmp[12] = XtimeE[state[12]] ^ XtimeB[state[13]] ^ XtimeD[state[14]] ^ Xtime9[state[15]]; - tmp[1] = Xtime9[state[12]] ^ XtimeE[state[13]] ^ XtimeB[state[14]] ^ XtimeD[state[15]]; - tmp[6] = XtimeD[state[12]] ^ Xtime9[state[13]] ^ XtimeE[state[14]] ^ XtimeB[state[15]]; - tmp[11] = XtimeB[state[12]] ^ XtimeD[state[13]] ^ Xtime9[state[14]] ^ XtimeE[state[15]]; - - for( i=0; i < 4 * Nb; i++ ) - state[i] = InvSbox[tmp[i]]; -} - -// encrypt/decrypt columns of the key -INLINE void AddRoundKey (uint8_t *state, uint8_t *key) -{ - xor_block(state, state, key, 16); -} - -static uint8_t Rcon[11] = -{ - 0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36 -}; - -// produce Nb bytes for each round -static void AES_expandKey(BlockCipher *c_, const void *key, size_t len) -{ - AES_Context *c = (AES_Context *)c_; - ASSERT(len == c->c.key_len); - - uint8_t tmp0, tmp1, tmp2, tmp3, tmp4; - uint32_t idx, idx_mod_nk, idx_div_nk; - int Nk = c->c.key_len/4; - int Nr = c->num_rounds; - - memcpy (c->expkey, key, Nk*4); - - for( idx = Nk, idx_mod_nk = 0, idx_div_nk = 1; idx < Nb * (Nr + 1); idx++ ) { - tmp0 = c->expkey[4*idx - 4]; - tmp1 = c->expkey[4*idx - 3]; - tmp2 = c->expkey[4*idx - 2]; - tmp3 = c->expkey[4*idx - 1]; - - if( idx_mod_nk == 0 ) { - tmp4 = tmp3; - tmp3 = Sbox[tmp0]; - tmp0 = Sbox[tmp1] ^ Rcon[idx_div_nk]; - tmp1 = Sbox[tmp2]; - tmp2 = Sbox[tmp4]; - } else if( Nk > 6 && idx_mod_nk == 4 ) { - tmp0 = Sbox[tmp0]; - tmp1 = Sbox[tmp1]; - tmp2 = Sbox[tmp2]; - tmp3 = Sbox[tmp3]; - } - - c->expkey[4*idx+0] = c->expkey[4*idx - 4*Nk + 0] ^ tmp0; - c->expkey[4*idx+1] = c->expkey[4*idx - 4*Nk + 1] ^ tmp1; - c->expkey[4*idx+2] = c->expkey[4*idx - 4*Nk + 2] ^ tmp2; - c->expkey[4*idx+3] = c->expkey[4*idx - 4*Nk + 3] ^ tmp3; - - idx_mod_nk += 1; - if (idx_mod_nk == Nk) - { - idx_mod_nk = 0; - ++idx_div_nk; - } - } -} - -// encrypt one 128 bit block -static void AES_encrypt(BlockCipher *c_, void *block) -{ - AES_Context *c = (AES_Context *)c_; - uint8_t Nr = c->num_rounds; - uint32_t round; - - AddRoundKey (block, c->expkey); - - for( round = 1; round < Nr + 1; round++ ) { - if( round < Nr ) - MixSubColumns (block); - else - ShiftRows (block); - - AddRoundKey (block, c->expkey + round * Nb * 4); - } -} - -static void AES_decrypt(BlockCipher *c_, void *block) -{ - AES_Context *c = (AES_Context *)c_; - uint8_t Nr = c->num_rounds; - uint32_t round; - - AddRoundKey (block, c->expkey + Nr * Nb * 4); - InvShiftRows(block); - - for( round = Nr; round--; ) - { - AddRoundKey (block, c->expkey + round * Nb * 4); - if( round ) - InvMixSubColumns (block); - } -} diff --git a/bertos/sec/cipher/aes_test.c b/bertos/sec/cipher/aes_test.c deleted file mode 100644 index 1d10740c..00000000 --- a/bertos/sec/cipher/aes_test.c +++ /dev/null @@ -1,1097 +0,0 @@ - -#include -#include - -#include "aes.h" -#include - -int AES_testSetup(void) -{ - kdbg_init(); - return 0; -} - -int AES_testTearDown(void) -{ - return 0; -} - -static const struct ECB128_Test -{ - uint8_t key[16]; - uint8_t pt[16]; - uint8_t ct[16]; -} -ECB128_Tests[] = -{ -{ "\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x0e\xdd\x33\xd3\xc6\x21\xe5\x46\x45\x5b\xd8\xba\x14\x18\xbe\xc8", }, -{ "\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x4b\xc3\xf8\x83\x45\x0c\x11\x3c\x64\xca\x42\xe1\x11\x2a\x9e\x87", }, -{ "\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x72\xa1\xda\x77\x0f\x5d\x7a\xc4\xc9\xef\x94\xd8\x22\xaf\xfd\x97", }, -{ "\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x97\x00\x14\xd6\x34\xe2\xb7\x65\x07\x77\xe8\xe8\x4d\x03\xcc\xd8", }, -{ "\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf1\x7e\x79\xae\xd0\xdb\x7e\x27\x9e\x95\x5b\x5f\x49\x38\x75\xa7", }, -{ "\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x9e\xd5\xa7\x51\x36\xa9\x40\xd0\x96\x3d\xa3\x79\xdb\x4a\xf2\x6a", }, -{ "\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc4\x29\x5f\x83\x46\x5c\x77\x55\xe8\xfa\x36\x4b\xac\x6a\x7e\xa5", }, -{ "\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb1\xd7\x58\x25\x6b\x28\xfd\x85\x0a\xd4\x94\x42\x08\xcf\x11\x55", }, -{ "\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x42\xff\xb3\x4c\x74\x3d\xe4\xd8\x8c\xa3\x80\x11\xc9\x90\x89\x0b", }, -{ "\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x99\x58\xf0\xec\xea\x8b\x21\x72\xc0\xc1\x99\x5f\x91\x82\xc0\xf3", }, -{ "\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x95\x6d\x77\x98\xfa\xc2\x0f\x82\xa8\x82\x3f\x98\x4d\x06\xf7\xf5", }, -{ "\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa0\x1b\xf4\x4f\x2d\x16\xbe\x92\x8c\xa4\x4a\xaf\x7b\x9b\x10\x6b", }, -{ "\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb5\xf1\xa3\x3e\x50\xd4\x0d\x10\x37\x64\xc7\x6b\xd4\xc6\xb6\xf8", }, -{ "\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x26\x37\x05\x0c\x9f\xc0\xd4\x81\x7e\x2d\x69\xde\x87\x8a\xee\x8d", }, -{ "\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x11\x3e\xcb\xe4\xa4\x53\x26\x9a\x0d\xd2\x60\x69\x46\x7f\xb5\xb5", }, -{ "\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x97\xd0\x75\x4f\xe6\x8f\x11\xb9\xe3\x75\xd0\x70\xa6\x08\xc8\x84", }, -{ "\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc6\xa0\xb3\xe9\x98\xd0\x50\x68\xa5\x39\x97\x78\x40\x52\x00\xb4", }, -{ "\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xdf\x55\x6a\x33\x43\x8d\xb8\x7b\xc4\x1b\x17\x52\xc5\x5e\x5e\x49", }, -{ "\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x90\xfb\x12\x8d\x3a\x1a\xf6\xe5\x48\x52\x1b\xb9\x62\xbf\x1f\x05", }, -{ "\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x26\x29\x8e\x9c\x1d\xb5\x17\xc2\x15\xfa\xdf\xb7\xd2\xa8\xd6\x91", }, -{ "\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa6\xcb\x76\x1d\x61\xf8\x29\x2d\x0d\xf3\x93\xa2\x79\xad\x03\x80", }, -{ "\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x12\xac\xd8\x9b\x13\xcd\x5f\x87\x26\xe3\x4d\x44\xfd\x48\x61\x08", }, -{ "\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x95\xb1\x70\x3f\xc5\x7b\xa0\x9f\xe0\xc3\x58\x0f\xeb\xdd\x7e\xd4", }, -{ "\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xde\x11\x72\x2d\x89\x3e\x9f\x91\x21\xc3\x81\xbe\xcc\x1d\xa5\x9a", }, -{ "\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x6d\x11\x4c\xcb\x27\xbf\x39\x10\x12\xe8\x97\x4c\x54\x6d\x9b\xf2", }, -{ "\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x5c\xe3\x7e\x17\xeb\x46\x46\xec\xfa\xc2\x9b\x9c\xc3\x8d\x93\x40", }, -{ "\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x18\xc1\xb6\xe2\x15\x71\x22\x05\x6d\x02\x43\xd8\xa1\x65\xcd\xdb", }, -{ "\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x99\x69\x3e\x6a\x59\xd1\x36\x6c\x74\xd8\x23\x56\x2d\x7e\x14\x31", }, -{ "\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x6c\x7c\x64\xdc\x84\xa8\xbb\xa7\x58\xed\x17\xeb\x02\x5a\x57\xe3", }, -{ "\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe1\x7b\xc7\x9f\x30\xea\xab\x2f\xac\x2c\xbb\xe3\x45\x8d\x68\x7a", }, -{ "\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x11\x14\xbc\x20\x28\x00\x9b\x92\x3f\x0b\x01\x91\x5c\xe5\xe7\xc4", }, -{ "\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x9c\x28\x52\x4a\x16\xa1\xe1\xc1\x45\x29\x71\xca\xa8\xd1\x34\x76", }, -{ "\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xed\x62\xe1\x63\x63\x63\x83\x60\xfd\xd6\xad\x62\x11\x27\x94\xf0", }, -{ "\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x5a\x86\x88\xf0\xb2\xa2\xc1\x62\x24\xc1\x61\x65\x8f\xfd\x40\x44", }, -{ "\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x23\xf7\x10\x84\x2b\x9b\xb9\xc3\x2f\x26\x64\x8c\x78\x68\x07\xca", }, -{ "\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x44\xa9\x8b\xf1\x1e\x16\x3f\x63\x2c\x47\xec\x6a\x49\x68\x3a\x89", }, -{ "\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x0f\x18\xaf\xf9\x42\x74\x69\x6d\x9b\x61\x84\x8b\xd5\x0a\xc5\xe5", }, -{ "\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x82\x40\x85\x71\xc3\xe2\x42\x45\x40\x20\x7f\x83\x3b\x6d\xda\x69", }, -{ "\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x30\x3f\xf9\x96\x94\x7f\x0c\x7d\x1f\x43\xc8\xf3\x02\x7b\x9b\x75", }, -{ "\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x7d\xf4\xda\xf4\xad\x29\xa3\x61\x5a\x9b\x6e\xce\x5c\x99\x51\x8a", }, -{ "\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc7\x29\x54\xa4\x8d\x07\x74\xdb\x0b\x49\x71\xc5\x26\x26\x04\x15", }, -{ "\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1d\xf9\xb7\x61\x12\xdc\x65\x31\xe0\x7d\x2c\xfd\xa0\x44\x11\xf0", }, -{ "\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8e\x4d\x8e\x69\x91\x19\xe1\xfc\x87\x54\x5a\x64\x7f\xb1\xd3\x4f", }, -{ "\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe6\xc4\x80\x7a\xe1\x1f\x36\xf0\x91\xc5\x7d\x9f\xb6\x85\x48\xd1", }, -{ "\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8e\xbf\x73\xaa\xd4\x9c\x82\x00\x7f\x77\xa5\xc1\xcc\xec\x6a\xb4", }, -{ "\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x4f\xb2\x88\xcc\x20\x40\x04\x90\x01\xd2\xc7\x58\x5a\xd1\x23\xfc", }, -{ "\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x04\x49\x71\x10\xef\xb9\xdc\xeb\x13\xe2\xb1\x3f\xb4\x46\x55\x64", }, -{ "\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x75\x55\x0e\x6c\xb5\xa8\x8e\x49\x63\x4c\x9a\xb6\x9e\xda\x04\x30", }, -{ "\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb6\x76\x84\x73\xce\x98\x43\xea\x66\xa8\x14\x05\xdd\x50\xb3\x45", }, -{ "\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xcb\x2f\x43\x03\x83\xf9\x08\x4e\x03\xa6\x53\x57\x1e\x06\x5d\xe6", }, -{ "\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\x4e\x66\xc0\x7b\xae\x3e\x79\xfb\x7d\x21\x08\x47\xa3\xb0\xba", }, -{ "\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x7b\x90\x78\x51\x25\x50\x5f\xad\x59\xb1\x3c\x18\x6d\xd6\x6c\xe3", }, -{ "\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8b\x52\x7a\x6a\xeb\xda\xec\x9e\xae\xf8\xed\xa2\xcb\x77\x83\xe5", }, -{ "\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x43\xfd\xaf\x53\xeb\xbc\x98\x80\xc2\x28\x61\x7d\x6a\x9b\x54\x8b", }, -{ "\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x53\x78\x61\x04\xb9\x74\x4b\x98\xf0\x52\xc4\x6f\x1c\x85\x0d\x0b", }, -{ "\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb5\xab\x30\x13\xdd\x1e\x61\xdf\x06\xcb\xaf\x34\xca\x2a\xee\x78", }, -{ "\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x74\x70\x46\x9b\xe9\x72\x30\x30\xfd\xcc\x73\xa8\xcd\x4f\xbb\x10", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa3\x5a\x63\xf5\x34\x3e\xbe\x9e\xf8\x16\x7b\xcb\x48\xad\x12\x2e", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfd\x86\x87\xf0\x75\x7a\x21\x0e\x9f\xdf\x18\x12\x04\xc3\x08\x63", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x7a\x18\x1e\x84\xbd\x54\x57\xd2\x6a\x88\xfb\xae\x96\x01\x8f\xb0", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x65\x33\x17\xb9\x36\x2b\x6f\x9b\x9e\x1a\x58\x0e\x68\xd4\x94\xb5", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x99\x5c\x9d\xc0\xb6\x89\xf0\x3c\x45\x86\x7b\x5f\xaa\x5c\x18\xd1", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x77\xa4\xd9\x6d\x56\xdd\xa3\x98\xb9\xaa\xbe\xcf\xc7\x57\x29\xfd", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x84\xbe\x19\xe0\x53\x63\x5f\x09\xf2\x66\x5e\x7b\xae\x85\xb4\x2d", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x32\xcd\x65\x28\x42\x92\x6a\xea\x4a\xa6\x13\x7b\xb2\xbe\x2b\x5e", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x49\x3d\x4a\x4f\x38\xeb\xb3\x37\xd1\x0a\xa8\x4e\x91\x71\xa5\x54", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd9\xbf\xf7\xff\x45\x4b\x0e\xc5\xa4\xa2\xa6\x95\x66\xe2\xcb\x84", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x35\x35\xd5\x65\xac\xe3\xf3\x1e\xb2\x49\xba\x2c\xc6\x76\x5d\x7a", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf6\x0e\x91\xfc\x32\x69\xee\xcf\x32\x31\xc6\xe9\x94\x56\x97\xc6", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xab\x69\xcf\xad\xf5\x1f\x8e\x60\x4d\x9c\xc3\x71\x82\xf6\x63\x5a", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x78\x66\x37\x3f\x24\xa0\xb6\xed\x56\xe0\xd9\x6f\xcd\xaf\xb8\x77", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1e\xa4\x48\xc2\xaa\xc9\x54\xf5\xd8\x12\xe9\xd7\x84\x94\x44\x6a", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xac\xc5\x59\x9d\xd8\xac\x02\x23\x9a\x0f\xef\x4a\x36\xdd\x16\x68", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd8\x76\x44\x68\xbb\x10\x38\x28\xcf\x7e\x14\x73\xce\x89\x50\x73", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1b\x0d\x02\x89\x36\x83\xb9\xf1\x80\x45\x8e\x4a\xa6\xb7\x39\x82", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x96\xd9\xb0\x17\xd3\x02\xdf\x41\x0a\x93\x7d\xcd\xb8\xbb\x6e\x43", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xef\x16\x23\xcc\x44\x31\x3c\xff\x44\x0b\x15\x94\xa7\xe2\x1c\xc6", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x28\x4c\xa2\xfa\x35\x80\x7b\x8b\x0a\xe4\xd1\x9e\x11\xd7\xdb\xd7", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf2\xe9\x76\x87\x57\x55\xf9\x40\x1d\x54\xf3\x6e\x2a\x23\xa5\x94", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xec\x19\x8a\x18\xe1\x0e\x53\x24\x03\xb7\xe2\x08\x87\xc8\xdd\x80", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x54\x5d\x50\xeb\xd9\x19\xe4\xa6\x94\x9d\x96\xad\x47\xe4\x6a\x80", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xdb\xdf\xb5\x27\x06\x0e\x0a\x71\x00\x9c\x7b\xb0\xc6\x8f\x1d\x44", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x9c\xfa\x13\x22\xea\x33\xda\x21\x73\xa0\x24\xf2\xff\x0d\x89\x6d", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x87\x85\xb1\xa7\x5b\x0f\x3b\xd9\x58\xdc\xd0\xe2\x93\x18\xc5\x21", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x38\xf6\x7b\x9e\x98\xe4\xa9\x7b\x6d\xf0\x30\xa9\xfc\xdd\x01\x04", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x19\x2a\xff\xfb\x2c\x88\x0e\x82\xb0\x59\x26\xd0\xfc\x6c\x44\x8b", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x6a\x79\x80\xce\x7b\x10\x5c\xf5\x30\x95\x2d\x74\xda\xaf\x79\x8c", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xea\x36\x95\xe1\x35\x1b\x9d\x68\x58\xbd\x95\x8c\xf5\x13\xef\x6c", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x6d\xa0\x49\x0b\xa0\xba\x03\x43\xb9\x35\x68\x1d\x2c\xce\x5b\xa1", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf0\xea\x23\xaf\x08\x53\x40\x11\xc6\x00\x09\xab\x29\xad\xa2\xf1", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\x13\x80\x6c\xf1\x9c\xc3\x87\x21\x55\x4d\x7c\x0f\xcd\xcd\x4b", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x68\x38\xaf\x1f\x4f\x69\xba\xe9\xd8\x5d\xd1\x88\xdc\xdf\x06\x88", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x36\xcf\x44\xc9\x2d\x55\x0b\xfb\x1e\xd2\x8e\xf5\x83\xdd\xf5\xd7", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd0\x6e\x31\x95\xb5\x37\x6f\x10\x9d\x5c\x4e\xc6\xc5\xd6\x2c\xed", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc4\x40\xde\x01\x4d\x3d\x61\x07\x07\x27\x9b\x13\x24\x2a\x5c\x36", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf0\xc5\xc6\xff\xa5\xe0\xbd\x3a\x94\xc8\x8f\x6b\x6f\x7c\x16\xb9", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x3e\x40\xc3\x90\x1c\xd7\xef\xfc\x22\xbf\xfc\x35\xde\xe0\xb4\xd9", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb6\x33\x05\xc7\x2b\xed\xfa\xb9\x73\x82\xc4\x06\xd0\xc4\x9b\xc6", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x36\xbb\xaa\xb2\x2a\x6b\xd4\x92\x5a\x99\xa2\xb4\x08\xd2\xdb\xae", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x30\x7c\x5b\x8f\xcd\x05\x33\xab\x98\xbc\x51\xe2\x7a\x6c\xe4\x61", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x82\x9c\x04\xff\x4c\x07\x51\x3c\x0b\x3e\xf0\x5c\x03\xe3\x37\xb5", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf1\x7a\xf0\xe8\x95\xdd\xa5\xeb\x98\xef\xc6\x80\x66\xe8\x4c\x54", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x27\x71\x67\xf3\x81\x2a\xff\xf1\xff\xac\xb4\xa9\x34\x37\x9f\xc3", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x2c\xb1\xdc\x3a\x9c\x72\x97\x2e\x42\x5a\xe2\xef\x3e\xb5\x97\xcd", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x36\xae\xaa\x3a\x21\x3e\x96\x8d\x4b\x5b\x67\x9d\x3a\x2c\x97\xfe", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x92\x41\xda\xca\x4f\xdd\x03\x4a\x82\x37\x2d\xb5\x0e\x1a\x0f\x3f", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc1\x45\x74\xd9\xcd\x00\xcf\x2b\x5a\x7f\x77\xe5\x3c\xd5\x78\x85", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x79\x3d\xe3\x92\x36\x57\x0a\xba\x83\xab\x9b\x73\x7c\xb5\x21\xc9", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x16\x59\x1c\x0f\x27\xd6\x0e\x29\xb8\x5a\x96\xc3\x38\x61\xa7\xef", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x44\xfb\x5c\x4d\x4f\x5c\xb7\x9b\xe5\xc1\x74\xa3\xb1\xc9\x73\x48", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x67\x4d\x2b\x61\x63\x3d\x16\x2b\xe5\x9d\xde\x04\x22\x2f\x47\x40", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb4\x75\x0f\xf2\x63\xa6\x5e\x1f\x9e\x92\x4c\xcf\xd9\x8f\x3e\x37", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x62\xd0\x66\x2d\x6e\xae\xdd\xed\xeb\xae\x7f\x7e\xa3\xa4\xf6\xb6", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x70\xc4\x6b\xb3\x06\x92\xbe\x65\x7f\x7e\xaa\x93\xeb\xad\x98\x97", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x32\x39\x94\xcf\xb9\xda\x28\x5a\x5d\x96\x42\xe1\x75\x9b\x22\x4a", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1d\xbf\x57\x87\x7b\x7b\x17\x38\x5c\x85\xd0\xb5\x48\x51\xe3\x71", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xdf\xa5\xc0\x97\xcd\xc1\x53\x2a\xc0\x71\xd5\x7b\x1d\x28\xd1\xbd", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x3a\x0c\x53\xfa\x37\x31\x1f\xc1\x0b\xd2\xa9\x98\x1f\x51\x31\x74", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xba\x4f\x97\x0c\x0a\x25\xc4\x18\x14\xbd\xae\x2e\x50\x6b\xe3\xb4", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x2d\xce\x3a\xcb\x72\x7c\xd1\x3c\xcd\x76\xd4\x25\xea\x56\xe4\xf6", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x51\x60\x47\x4d\x50\x4b\x9b\x3e\xef\xb6\x8d\x35\xf2\x45\xf4\xb3", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x41\xa8\xa9\x47\x76\x66\x35\xde\xc3\x75\x53\xd9\xa6\xc0\xcb\xb7", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x25\xd6\xcf\xe6\x88\x1f\x2b\xf4\x97\xdd\x14\xcd\x4d\xdf\x44\x5b", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x41\xc7\x8c\x13\x5e\xd9\xe9\x8c\x09\x66\x40\x64\x72\x65\xda\x1e", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x5a\x4d\x40\x4d\x89\x17\xe3\x53\xe9\x2a\x21\x07\x2c\x3b\x23\x05", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x02\xbc\x96\x84\x6b\x3f\xdc\x71\x64\x3f\x38\x4c\xd3\xcc\x3e\xaf", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x9b\xa4\xa9\x14\x3f\x4e\x5d\x40\x48\x52\x1c\x4f\x88\x77\xd8\x8e", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x3a\xd7\x8e\x72\x6c\x1e\xc0\x2b\x7e\xbf\xe9\x2b\x23\xd9\xec\x34", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xaa\xe5\x93\x9c\x8e\xfd\xf2\xf0\x4e\x60\xb9\xfe\x71\x17\xb2\xc2", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf0\x31\xd4\xd7\x4f\x5d\xcb\xf3\x9d\xaa\xf8\xca\x3a\xf6\xe5\x27", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x96\xd9\xfd\x5c\xc4\xf0\x74\x41\x72\x7d\xf0\xf3\x3e\x40\x1a\x36", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x30\xcc\xdb\x04\x46\x46\xd7\xe1\xf3\xcc\xea\x3d\xca\x08\xb8\xc0", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x16\xae\x4c\xe5\x04\x2a\x67\xee\x8e\x17\x7b\x7c\x58\x7e\xcc\x82", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb6\xda\x0b\xb1\x1a\x23\x85\x5d\x9c\x5c\xb1\xb4\xc6\x41\x2e\x0a", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xdb\x4f\x1a\xa5\x30\x96\x7d\x67\x32\xce\x47\x15\xeb\x0e\xe2\x4b", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa8\x17\x38\x25\x26\x21\xdd\x18\x0a\x34\xf3\x45\x5b\x4b\xaa\x2f", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x77\xe2\xb5\x08\xdb\x7f\xd8\x92\x34\xca\xf7\x93\x9e\xe5\x62\x1a", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb8\x49\x9c\x25\x1f\x84\x42\xee\x13\xf0\x93\x3b\x68\x8f\xcd\x19", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x96\x51\x35\xf8\xa8\x1f\x25\xc9\xd6\x30\xb1\x75\x02\xf6\x8e\x53", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8b\x87\x14\x5a\x01\xad\x1c\x6c\xed\xe9\x95\xea\x36\x70\x45\x4f", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8e\xae\x3b\x10\xa0\xc8\xca\x6d\x1d\x3b\x0f\xa6\x1e\x56\xb0\xb2", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x64\xb4\xd6\x29\x81\x0f\xda\x6b\xaf\xdf\x08\xf3\xb0\xd8\xd2\xc5", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd7\xe5\xdb\xd3\x32\x45\x95\xf8\xfd\xc7\xd7\xc5\x71\xda\x6c\x2a", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf3\xf7\x23\x75\x26\x4e\x16\x7f\xca\x9d\xe2\xc1\x52\x7d\x96\x06", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8e\xe7\x9d\xd4\xf4\x01\xff\x9b\x7e\xa9\x45\xd8\x66\x66\xc1\x3b", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xdd\x35\xce\xa2\x79\x99\x40\xb4\x0d\xb3\xf8\x19\xcb\x94\xc0\x8b", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x69\x41\xcb\x6b\x3e\x08\xc2\xb7\xaf\xa5\x81\xeb\xdd\x60\x7b\x87", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x2c\x20\xf4\x39\xf6\xbb\x09\x7b\x29\xb8\xbd\x6d\x99\xaa\xd7\x99", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x62\x5d\x01\xf0\x58\xe5\x65\xf7\x7a\xe8\x63\x78\xbd\x2c\x49\xb3", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc0\xb5\xfd\x98\x19\x0e\xf4\x5f\xbb\x43\x01\x43\x8d\x09\x59\x50", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x13\x00\x1f\xf5\xd9\x98\x06\xef\xd2\x5d\xa3\x4f\x56\xbe\x85\x4b", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x3b\x59\x4c\x60\xf5\xc8\x27\x7a\x51\x13\x67\x7f\x94\x20\x8d\x82", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe9\xc0\xfc\x18\x18\xe4\xaa\x46\xbd\x2e\x39\xd6\x38\xf8\x9e\x05", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf8\x02\x3e\xe9\xc3\xfd\xc4\x5a\x01\x9b\x4e\x98\x5c\x7e\x1a\x54", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x35\xf4\x01\x82\xab\x46\x62\xf3\x02\x3b\xae\xc1\xee\x79\x6b\x57", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x3a\xeb\xba\xd7\x30\x36\x49\xb4\x19\x4a\x69\x45\xc6\xcc\x36\x94", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa2\x12\x4b\xea\x53\xec\x28\x34\x27\x9b\xed\x7f\x7e\xb0\xf9\x38", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb9\xfb\x43\x99\xfa\x4f\xac\xc7\x30\x9e\x14\xec\x98\x36\x0b\x0a", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc2\x62\x77\x43\x74\x20\xc5\xd6\x34\xf7\x15\xae\xa8\x1a\x91\x32", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x17\x1a\x0e\x1b\x2d\xd4\x24\xf0\xe0\x89\xaf\x2c\x4c\x10\xf3\x2f", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x7c\xad\xbe\x40\x2d\x1b\x20\x8f\xe7\x35\xed\xce\x00\xae\xe7\xce", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x43\xb0\x2f\xf9\x29\xa1\x48\x5a\xf6\xf5\xc6\xd6\x55\x8b\xaa\x0f", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x09\x2f\xaa\xcc\x9b\xf4\x35\x08\xbf\x8f\xa8\x61\x3c\xa7\x5d\xea", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xcb\x2b\xf8\x28\x0f\x3f\x97\x42\xc7\xed\x51\x3f\xe8\x02\x62\x9c", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x21\x5a\x41\xee\x44\x2f\xa9\x92\xa6\xe3\x23\x98\x6d\xed\x3f\x68", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf2\x1e\x99\xcf\x4f\x0f\x77\xce\xa8\x36\xe1\x1a\x2f\xe7\x5f\xb1", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x95\xe3\xa0\xca\x90\x79\xe6\x46\x33\x1d\xf8\xb4\xe7\x0d\x2c\xd6", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x4a\xfe\x7f\x12\x0c\xe7\x61\x3f\x74\xfc\x12\xa0\x1a\x82\x80\x73", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x82\x7f\x00\x0e\x75\xe2\xc8\xb9\xd4\x79\xbe\xed\x91\x3f\xe6\x78", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x35\x83\x0c\x8e\x7a\xae\xfe\x2d\x30\x31\x0e\xf3\x81\xcb\xf6\x91", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x19\x1a\xa0\xf2\xc8\x57\x01\x44\xf3\x86\x57\xea\x40\x85\xeb\xe5", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x85\x06\x2c\x2c\x90\x9f\x15\xd9\x26\x9b\x6c\x18\xce\x99\xc4\xf0", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x67\x80\x34\xdc\x9e\x41\xb5\xa5\x60\xed\x23\x9e\xea\xb1\xbc\x78", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc2\xf9\x3a\x4c\xe5\xab\x6d\x5d\x56\xf1\xb9\x3c\xf1\x99\x11\xc1", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1c\x31\x12\xbc\xb0\xc1\xdc\xc7\x49\xd7\x99\x74\x36\x91\xbf\x82", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\xc5\x5b\xd7\x5c\x7f\x9c\x88\x19\x89\xd3\xec\x19\x11\xc0\xd4", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xea\x2e\x6b\x5e\xf1\x82\xb7\xdf\xf3\x62\x9a\xbd\x6a\x12\x04\x5f", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x22\x32\x23\x27\xe0\x17\x80\xb1\x73\x97\xf2\x40\x87\xf8\xcc\x6f", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc9\xca\xcb\x5c\xd1\x16\x92\xc3\x73\xb2\x41\x17\x68\x14\x9e\xe7", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa1\x8e\x3d\xbb\xca\x57\x78\x60\xda\xb6\xb8\x0d\xa3\x13\x92\x56", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x79\xb6\x1c\x37\xbf\x32\x8e\xcc\xa8\xd7\x43\x26\x5a\x3d\x42\x5c", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd2\xd9\x9c\x6b\xcc\x1f\x06\xfd\xa8\xe2\x7e\x8a\xe3\xf1\xcc\xc7", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1b\xfd\x4b\x91\xc7\x01\xfd\x6b\x61\xb7\xf9\x97\x82\x9d\x66\x3b", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00", "\x11\x00\x5d\x52\xf2\x5f\x16\xbd\xc9\x54\x5a\x87\x6a\x63\x49\x0a", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00", "\x3a\x4d\x35\x4f\x02\xbb\x5a\x5e\x47\xd3\x96\x66\x86\x7f\x24\x6a", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00", "\xd4\x51\xb8\xd6\xe1\xe1\xa0\xeb\xb1\x55\xfb\xbf\x6e\x7b\x7d\xc3", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00", "\x68\x98\xd4\xf4\x2f\xa7\xba\x6a\x10\xac\x05\xe8\x7b\x9f\x20\x80", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00", "\xb6\x11\x29\x5e\x73\x9c\xa7\xd9\xb5\x0f\x8e\x4c\x0e\x75\x4a\x3f", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00", "\x7d\x33\xfc\x7d\x8a\xbe\x3c\xa1\x93\x67\x59\xf8\xf5\xde\xaf\x20", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00", "\x3b\x5e\x0f\x56\x6d\xc9\x6c\x29\x8f\x0c\x12\x63\x75\x39\xb2\x5c", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00", "\xf8\x07\xc3\xe7\x98\x5f\xe0\xf5\xa5\x0e\x2c\xdb\x25\xc5\x10\x9e", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00", "\x41\xf9\x92\xa8\x56\xfb\x27\x8b\x38\x9a\x62\xf5\xd2\x74\xd7\xe9", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00", "\x10\xd3\xed\x7a\x6f\xe1\x5a\xb4\xd9\x1a\xcb\xc7\xd0\x76\x7a\xb1", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00", "\x21\xfe\xec\xd4\x5b\x2e\x67\x59\x73\xac\x33\xbf\x0c\x54\x24\xfc", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00", "\x14\x80\xcb\x39\x55\xba\x62\xd0\x9e\xea\x66\x8f\x7c\x70\x88\x17", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00", "\x66\x40\x40\x33\xd6\xb7\x2b\x60\x93\x54\xd5\x49\x6e\x7e\xb5\x11", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00", "\x1c\x31\x7a\x22\x0a\x7d\x70\x0d\xa2\xb1\xe0\x75\xb0\x02\x66\xe1", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00", "\xab\x3b\x89\x54\x22\x33\xf1\x27\x1b\xf8\xfd\x0c\x0f\x40\x35\x45", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00", "\xd9\x3e\xae\x96\x6f\xac\x46\xdc\xa9\x27\xd6\xb1\x14\xfa\x3f\x9e", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00", "\x1b\xde\xc5\x21\x31\x65\x03\xd9\xd5\xee\x65\xdf\x3e\xa9\x4d\xdf", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00", "\xee\xf4\x56\x43\x1d\xea\x8b\x4a\xcf\x83\xbd\xae\x37\x17\xf7\x5f", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00", "\x06\xf2\x51\x9a\x2f\xaf\xaa\x59\x6b\xfe\xf5\xcf\xa1\x5c\x21\xb9", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00", "\x25\x1a\x7e\xac\x7e\x2f\xe8\x09\xe4\xaa\x8d\x0d\x70\x12\x53\x1a", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00", "\x3b\xff\xc1\x6e\x4c\x49\xb2\x68\xa2\x0f\x8d\x96\xa6\x0b\x40\x58", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00", "\xe8\x86\xf9\x28\x19\x99\xc5\xbb\x3b\x3e\x88\x62\xe2\xf7\xc9\x88", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00", "\x56\x3b\xf9\x0d\x61\xbe\xef\x39\xf4\x8d\xd6\x25\xfc\xef\x13\x61", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00", "\x4d\x37\xc8\x50\x64\x45\x63\xc6\x9f\xd0\xac\xd9\xa0\x49\x32\x5b", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00", "\xb8\x7c\x92\x1b\x91\x82\x9e\xf3\xb1\x3c\xa5\x41\xee\x11\x30\xa6", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00", "\x2e\x65\xeb\x6b\x6e\xa3\x83\xe1\x09\xac\xcc\xe8\x32\x6b\x03\x93", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00", "\x9c\xa5\x47\xf7\x43\x9e\xdc\x3e\x25\x5c\x0f\x4d\x49\xaa\x89\x90", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00", "\xa5\xe6\x52\x61\x4c\x93\x00\xf3\x78\x16\xb1\xf9\xfd\x0c\x87\xf9", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00", "\x14\x95\x4f\x0b\x46\x97\x77\x6f\x44\x49\x4f\xe4\x58\xd8\x14\xed", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00", "\x7c\x8d\x9a\xb6\xc2\x76\x17\x23\xfe\x42\xf8\xbb\x50\x6c\xbc\xf7", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00", "\xdb\x7e\x19\x32\x67\x9f\xdd\x99\x74\x2a\xab\x04\xaa\x0d\x5a\x80", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00", "\x4c\x6a\x1c\x83\xe5\x68\xcd\x10\xf2\x7c\x2d\x73\xde\xd1\x9c\x28", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00", "\x90\xec\xbe\x61\x77\xe6\x74\xc9\x8d\xe4\x12\x41\x3f\x7a\xc9\x15", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00", "\x90\x68\x4a\x2a\xc5\x5f\xe1\xec\x2b\x8e\xbd\x56\x22\x52\x0b\x73", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00", "\x74\x72\xf9\xa7\x98\x86\x07\xca\x79\x70\x77\x95\x99\x10\x35\xe6", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00", "\x56\xaf\xf0\x89\x87\x8b\xf3\x35\x2f\x8d\xf1\x72\xa3\xae\x47\xd8", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00", "\x65\xc0\x52\x6c\xbe\x40\x16\x1b\x80\x19\xa2\xa3\x17\x1a\xbd\x23", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00", "\x37\x7b\xe0\xbe\x33\xb4\xe3\xe3\x10\xb4\xaa\xbd\xa1\x73\xf8\x4f", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00", "\x94\x02\xe9\xaa\x6f\x69\xde\x65\x04\xda\x8d\x20\xc4\xfc\xaa\x2f", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00", "\x12\x3c\x1f\x4a\xf3\x13\xad\x8c\x2c\xe6\x48\xb2\xe7\x1f\xb6\xe1", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00", "\x1f\xfc\x62\x6d\x30\x20\x3d\xcd\xb0\x01\x9f\xb8\x0f\x72\x6c\xf4", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00", "\x76\xda\x1f\xbe\x3a\x50\x72\x8c\x50\xfd\x2e\x62\x1b\x5a\xd8\x85", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00", "\x08\x2e\xb8\xbe\x35\xf4\x42\xfb\x52\x66\x8e\x16\xa5\x91\xd1\xd6", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00", "\xe6\x56\xf9\xec\xf5\xfe\x27\xec\x3e\x4a\x73\xd0\x0c\x28\x2f\xb3", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00", "\x2c\xa8\x20\x9d\x63\x27\x4c\xd9\xa2\x9b\xb7\x4b\xcd\x77\x68\x3a", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00", "\x79\xbf\x5d\xce\x14\xbb\x7d\xd7\x3a\x8e\x36\x11\xde\x7c\xe0\x26", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00", "\x3c\x84\x99\x39\xa5\xd2\x93\x99\xf3\x44\xc4\xa0\xec\xa8\xa5\x76", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00", "\xed\x3c\x0a\x94\xd5\x9b\xec\xe9\x88\x35\xda\x7a\xa4\xf0\x7c\xa2", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00", "\x63\x91\x9e\xd4\xce\x10\x19\x64\x38\xb6\xad\x09\xd9\x9c\xd7\x95", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00", "\x76\x78\xf3\xa8\x33\xf1\x9f\xea\x95\xf3\xc6\x02\x9e\x2b\xc6\x10", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00", "\x3a\xa4\x26\x83\x10\x67\xd3\x6b\x92\xbe\x7c\x5f\x81\xc1\x3c\x56", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00", "\x92\x72\xe2\xd2\xcd\xd1\x10\x50\x99\x8c\x84\x50\x77\xa3\x0e\xa0", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00", "\x08\x8c\x4b\x53\xf5\xec\x0f\xf8\x14\xc1\x9a\xda\xe7\xf6\x24\x6c", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00", "\x40\x10\xa5\xe4\x01\xfd\xf0\xa0\x35\x4d\xdb\xcc\x0d\x01\x2b\x17", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00", "\xa8\x7a\x38\x57\x36\xc0\xa6\x18\x9b\xd6\x58\x9b\xd8\x44\x5a\x93", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00", "\x54\x5f\x2b\x83\xd9\x61\x6d\xcc\xf6\x0f\xa9\x83\x0e\x9c\xd2\x87", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00", "\x4b\x70\x6f\x7f\x92\x40\x63\x52\x39\x40\x37\xa6\xd4\xf4\x68\x8d", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00", "\xb7\x97\x2b\x39\x41\xc4\x4b\x90\xaf\xa7\xb2\x64\xbf\xba\x73\x87", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00", "\x6f\x45\x73\x2c\xf1\x08\x81\x54\x6f\x0f\xd2\x38\x96\xd2\xbb\x60", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00", "\x2e\x35\x79\xca\x15\xaf\x27\xf6\x4b\x3c\x95\x5a\x5b\xfc\x30\xba", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00", "\x34\xa2\xc5\xa9\x1a\xe2\xae\xc9\x9b\x7d\x1b\x5f\xa6\x78\x04\x47", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00", "\xa4\xd6\x61\x6b\xd0\x4f\x87\x33\x5b\x0e\x53\x35\x12\x27\xa9\xee", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00", "\x7f\x69\x2b\x03\x94\x58\x67\xd1\x61\x79\xa8\xce\xfc\x83\xea\x3f", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00", "\x3b\xd1\x41\xee\x84\xa0\xe6\x41\x4a\x26\xe7\xa4\xf2\x81\xf8\xa2", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80", "\xd1\x78\x8f\x57\x2d\x98\xb2\xb1\x6e\xc5\xd5\xf3\x92\x2b\x99\xbc", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0", "\x08\x33\xff\x6f\x61\xd9\x8a\x57\xb2\x88\xe8\xc3\x58\x6b\x85\xa6", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0", "\x85\x68\x26\x17\x97\xde\x17\x6b\xf0\xb4\x3b\xec\xc6\x28\x5a\xfb", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0", "\xf9\xb0\xfd\xa0\xc4\xa8\x98\xf5\xb9\xe6\xf6\x61\xc4\xce\x4d\x07", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8", "\x8a\xde\x89\x59\x13\x68\x5c\x67\xc5\x26\x9f\x8a\xae\x42\x98\x3e", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc", "\x39\xbd\xe6\x7d\x5c\x8e\xd8\xa8\xb1\xc3\x7e\xb8\xfa\x9f\x5a\xc0", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe", "\x5c\x00\x5e\x72\xc1\x41\x8c\x44\xf5\x69\xf2\xea\x33\xba\x54\xf3", }, -}; - -static const struct ECB192_Test -{ - uint8_t key[24]; - uint8_t pt[16]; - uint8_t ct[16]; -} -ECB192_Tests[] = -{ -{ "\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xde\x88\x5d\xc8\x7f\x5a\x92\x59\x40\x82\xd0\x2c\xc1\xe1\xb4\x2c", }, -{ "\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x13\x2b\x07\x4e\x80\xf2\xa5\x97\xbf\x5f\xeb\xd8\xea\x5d\xa5\x5e", }, -{ "\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x6e\xcc\xed\xf8\xde\x59\x2c\x22\xfb\x81\x34\x7b\x79\xf2\xdb\x1f", }, -{ "\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x18\x0b\x09\xf2\x67\xc4\x51\x45\xdb\x2f\x82\x6c\x25\x82\xd3\x5c", }, -{ "\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xed\xd8\x07\xef\x76\x52\xd7\xeb\x0e\x13\xc8\xb5\xe1\x5b\x3b\xc0", }, -{ "\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x99\x78\xbc\xf8\xdd\x8f\xd7\x22\x41\x22\x3a\xd2\x4b\x31\xb8\xa4", }, -{ "\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x53\x10\xf6\x54\x34\x3e\x8f\x27\xe1\x2c\x83\xa4\x8d\x24\xff\x81", }, -{ "\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x83\x3f\x71\x25\x8d\x53\x03\x6b\x02\x95\x2c\x76\xc7\x44\xf5\xa1", }, -{ "\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xeb\xa8\x3f\xf2\x00\xcf\xf9\x31\x8a\x92\xf8\x69\x1a\x06\xb0\x9f", }, -{ "\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\x62\x0c\xcb\xe9\xf3\x29\x2a\xbd\xf2\x17\x6b\x09\xf0\x4e\xba", }, -{ "\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x7a\xba\xbc\x4b\x3f\x51\x6c\x9a\xaf\xb3\x5f\x41\x40\xb5\x48\xf9", }, -{ "\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xaa\x18\x78\x24\xd9\xc4\x58\x2b\x09\x16\x49\x3e\xcb\xde\x8c\x57", }, -{ "\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1c\x0a\xd5\x53\x17\x7f\xd5\xea\x10\x92\xc9\xd6\x26\xa2\x9d\xc4", }, -{ "\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa5\xdc\x46\xc3\x72\x61\x19\x41\x24\xec\xae\xbd\x68\x04\x08\xec", }, -{ "\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe4\xf2\xf2\xae\x23\xe9\xb1\x0b\xac\xfa\x58\x60\x15\x31\xba\x54", }, -{ "\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb7\xd6\x7c\xf1\xa1\xe9\x1e\x8f\xf3\xa5\x7a\x17\x2c\x7b\xf4\x12", }, -{ "\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x26\x70\x6b\xe0\x69\x67\x88\x4e\x84\x7d\x13\x71\x28\xce\x47\xb3", }, -{ "\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb2\xf8\xb4\x09\xb0\x58\x59\x09\xaa\xd3\xa7\xb5\xa2\x19\x07\x2a", }, -{ "\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x5e\x4b\x7b\xff\x02\x90\xc7\x83\x44\xc5\x4a\x23\xb7\x22\xcd\x20", }, -{ "\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x07\x09\x36\x57\x55\x2d\x44\x14\x22\x7c\xe1\x61\xe9\xeb\xf7\xdd", }, -{ "\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe1\xaf\x1e\x7d\x8b\xc2\x25\xed\x4d\xff\xb7\x71\xec\xbb\x9e\x67", }, -{ "\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xef\x65\x55\x25\x36\x35\xd8\x43\x21\x56\xcf\xd9\xc1\x1b\x14\x5a", }, -{ "\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfb\x40\x35\x07\x4a\x5d\x42\x60\xc9\x0c\xbd\x6d\xa6\xc3\xfc\xeb", }, -{ "\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x44\x6e\xe4\x16\xf9\xad\x1c\x10\x3e\xb0\xcc\x96\x75\x1c\x88\xe1", }, -{ "\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x19\x8a\xe2\xa4\x63\x7a\xc0\xa7\x89\x0a\x8f\xd1\x48\x54\x45\xc9", }, -{ "\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x56\x20\x12\xec\x8f\xad\xed\x08\x25\xfb\x2f\xa7\x0a\xb3\x0c\xbd", }, -{ "\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xcc\x8a\x64\xb4\x6b\x5d\x88\xbf\x7f\x24\x7d\x4d\xba\xf3\x8f\x05", }, -{ "\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa1\x68\x25\x37\x62\xe2\xcc\x81\xb4\x2d\x1e\x50\x01\x76\x26\x99", }, -{ "\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1b\x41\xf8\x3b\x38\xce\x50\x32\xc6\xcd\x7a\xf9\x8c\xf6\x20\x61", }, -{ "\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x61\xa8\x99\x90\xcd\x14\x11\x75\x0d\x5f\xb0\xdc\x98\x84\x47\xd4", }, -{ "\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb5\xac\xcc\x8e\xd6\x29\xed\xf8\xc6\x8a\x53\x91\x83\xb1\xea\x82", }, -{ "\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb1\x6f\xa7\x1f\x84\x6b\x81\xa1\x3f\x36\x1c\x43\xa8\x51\xf2\x90", }, -{ "\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x4f\xad\x6e\xfd\xff\x59\x75\xae\xe7\x69\x22\x34\xbc\xd5\x44\x88", }, -{ "\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xeb\xfd\xb0\x5a\x78\x3d\x03\x08\x2d\xfe\x5f\xdd\x80\xa0\x0b\x17", }, -{ "\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xeb\x81\xb5\x84\x76\x69\x97\xaf\x6b\xa5\x52\x9d\x3b\xdd\x86\x09", }, -{ "\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x0c\xf4\xff\x4f\x49\xc8\xa0\xca\x06\x0c\x44\x34\x99\xe2\x93\x13", }, -{ "\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xcc\x4b\xa8\xa8\xe0\x29\xf8\xb2\x6d\x8a\xff\xf9\xdf\x13\x3b\xb6", }, -{ "\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfe\xfe\xbf\x64\x36\x0f\x38\xe4\xe6\x35\x58\xf0\xff\xc5\x50\xc3", }, -{ "\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x12\xad\x98\xcb\xf7\x25\x13\x7d\x6a\x81\x08\xc2\xbe\xd9\x93\x22", }, -{ "\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x6a\xfa\xa9\x96\x22\x61\x98\xb3\xe2\x61\x04\x13\xce\x1b\x3f\x78", }, -{ "\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x2a\x8c\xe6\x74\x7a\x7e\x39\x36\x78\x28\xe2\x90\x84\x85\x02\xd9", }, -{ "\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x22\x37\x36\xe8\xb8\xf8\x9c\xa1\xe3\x7b\x6d\xea\xb4\x0f\xac\xf1", }, -{ "\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc0\xf7\x97\xe5\x04\x18\xb9\x5f\xa6\x01\x33\x33\x91\x7a\x94\x80", }, -{ "\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa7\x58\xde\x37\xc2\xec\xe2\xa0\x2c\x73\xc0\x1f\xed\xc9\xa1\x32", }, -{ "\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x3a\x9b\x87\xae\x77\xba\xe7\x06\x80\x39\x66\xc6\x6c\x73\xad\xbd", }, -{ "\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd3\x65\xab\x8d\xf8\xff\xd7\x82\xe3\x58\x12\x1a\x4a\x4f\xc5\x41", }, -{ "\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc8\xdc\xd9\xe6\xf7\x5e\x6c\x36\xc8\xda\xee\x04\x66\xf0\xed\x74", }, -{ "\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc7\x9a\x63\x7b\xeb\x1c\x03\x04\xf1\x40\x14\xc0\x37\xe7\x36\xdd", }, -{ "\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x10\x5f\x0a\x25\xe8\x4a\xc9\x30\xd9\x96\x28\x1a\x5f\x95\x4d\xd9", }, -{ "\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x42\xe4\x07\x4b\x29\x27\x97\x3e\x8d\x17\xff\xa9\x2f\x7f\xe6\x15", }, -{ "\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x4f\xe2\xa9\xd2\xc1\x82\x44\x49\xc6\x9e\x3e\x03\x98\xf1\x29\x63", }, -{ "\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb7\xf2\x9c\x1e\x1f\x62\x84\x7a\x15\x25\x3b\x28\xa1\xe9\xd7\x12", }, -{ "\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x36\xed\x5d\x29\xb9\x03\xf3\x1e\x89\x83\xef\x8b\x0a\x2b\xf9\x90", }, -{ "\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x27\xb8\x07\x02\x70\x81\x0f\x9d\x02\x3f\x9d\xd7\xff\x3b\x4a\xa2", }, -{ "\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x94\xd4\x6e\x15\x5c\x12\x28\xf6\x1d\x1a\x0d\xb4\x81\x5e\xcc\x4b", }, -{ "\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xca\x61\x08\xd1\xd9\x80\x71\x42\x8e\xec\xee\xf1\x71\x4b\x96\xdd", }, -{ "\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xdc\x5b\x25\xb7\x1b\x62\x96\xcf\x73\xdd\x2c\xdc\xac\x2f\x70\xb1", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x44\xab\xa9\x5e\x8a\x06\xa2\xd9\xd3\x53\x0d\x26\x77\x87\x8c\x80", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa5\x70\xd2\x0e\x89\xb4\x67\xe8\xf5\x17\x60\x61\xb8\x1d\xd3\x96", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x75\x8f\x44\x67\xa5\xd8\xf1\xe7\x30\x7d\xc3\x0b\x34\xe4\x04\xf4", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xbc\xea\x28\xe9\x07\x1b\x5a\x23\x02\x97\x0f\xf3\x52\x45\x1b\xc5", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x75\x23\xc0\x0b\xc1\x77\xd3\x31\xad\x31\x2e\x09\xc9\x01\x5c\x1c", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xcc\xac\x61\xe3\x18\x37\x47\xb3\xf5\x83\x6d\xa2\x1a\x1b\xc4\xf4", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x70\x7b\x07\x57\x91\x87\x88\x80\xb4\x41\x89\xd3\x52\x2b\x8c\x30", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x71\x32\xd0\xc0\xe4\xa0\x75\x93\xcf\x12\xeb\xb1\x2b\xe7\x68\x8c", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xef\xfb\xac\x16\x44\xde\xb0\xc7\x84\x27\x5f\xe5\x6e\x19\xea\xd3", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa0\x05\x06\x3f\x30\xf4\x22\x8b\x37\x4e\x24\x59\x73\x8f\x26\xbb", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x29\x97\x5b\x5f\x48\xbb\x68\xfc\xbb\xc7\xce\xa9\x3b\x45\x2e\xd7", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xcf\x3f\x25\x76\xe2\xaf\xed\xc7\x4b\xb1\xca\x7e\xee\xc1\xc0\xe7", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x07\xc4\x03\xf5\xf9\x66\xe0\xe3\xd9\xf2\x96\xd6\x22\x6d\xca\x28", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc8\xc2\x09\x08\x24\x9a\xb4\xa3\x4d\x6d\xd0\xa3\x13\x27\xff\x1a", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc0\x54\x13\x29\xec\xb6\x15\x9a\xb2\x3b\x7f\xc5\xe6\xa2\x1b\xca", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x7a\xa1\xac\xf1\xa2\xed\x9b\xa7\x2b\xc6\xde\xb3\x1d\x88\xb8\x63", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x80\x8b\xd8\xed\xda\xbb\x6f\x3b\xf0\xd5\xa8\xa2\x7b\xe1\xfe\x8a", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x27\x3c\x7d\x76\x85\xe1\x4e\xc6\x6b\xbb\x96\xb8\xf0\x5b\x6d\xdd", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x32\x75\x2e\xef\xc8\xc2\xa9\x3f\x91\xb6\xe7\x3e\xb0\x7c\xca\x6e", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd8\x93\xe7\xd6\x2f\x6c\xe5\x02\xc6\x4f\x75\xe2\x81\xf9\xc0\x00", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8d\xfd\x99\x9b\xe5\xd0\xcf\xa3\x57\x32\xc0\xdd\xc8\x8f\xf5\xa5", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x02\x64\x7c\x76\xa3\x00\xc3\x17\x3b\x84\x14\x87\xeb\x2b\xae\x9f", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x17\x2d\xf8\xb0\x2f\x04\xb5\x3a\xda\xb0\x28\xb4\xe0\x1a\xcd\x87", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x05\x4b\x3b\xf4\x99\x8a\xeb\x05\xaf\xd8\x7e\xc5\x36\x53\x3a\x36", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x37\x83\xf7\xbf\x44\xc9\x7f\x06\x52\x58\xa6\x66\xca\xe0\x30\x20", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xaa\xd4\xc8\xa6\x3f\x80\x95\x41\x04\xde\x7b\x92\xce\xde\x1b\xe1", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xcb\xfe\x61\x81\x0f\xd5\x46\x7c\xcd\xac\xb7\x58\x00\xf3\xac\x07", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x83\x0d\x8a\x25\x90\xf7\xd8\xe1\xb5\x5a\x73\x7f\x4a\xf4\x5f\x34", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xfc\xd4\x68\x3f\x85\x80\x58\xe7\x43\x14\x67\x1d\x43\xfa\x2c", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x52\x3d\x0b\xab\xbb\x82\xf4\x6e\xbc\x9e\x70\xb1\xcd\x41\xdd\xd0", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x34\x4a\xab\x37\x08\x0d\x74\x86\xf7\xd5\x42\xa3\x09\xe5\x3e\xed", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x56\xc5\x60\x9d\x09\x06\xb2\x3a\xb9\xca\xca\x81\x6f\x5d\xbe\xbd", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x70\x26\x02\x6e\xed\xd9\x1a\xdc\x6d\x83\x1c\xdf\x98\x94\xbd\xc6", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x88\x33\x0b\xaa\x4f\x2b\x61\x8f\xc9\xd9\xb0\x21\xbf\x50\x3d\x5a", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfc\x9e\x0e\xa2\x24\x80\xb0\xba\xc9\x35\xc8\xa8\xeb\xef\xcd\xcf", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x29\xca\x77\x9f\x39\x8f\xb0\x4f\x86\x7d\xa7\xe8\xa4\x47\x56\xcb", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x51\xf8\x9c\x42\x98\x57\x86\xbf\xc4\x3c\x6d\xf8\xad\xa3\x68\x32", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x6a\xc1\xde\x5f\xb8\xf2\x1d\x87\x4e\x91\xc5\x3b\x56\x0c\x50\xe3", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x03\xaa\x90\x58\x49\x0e\xda\x30\x60\x01\xa8\xa9\xf4\x8d\x0c\xa7", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe3\x4e\xc7\x1d\x61\x28\xd4\x87\x18\x65\xd6\x17\xc3\x0b\x37\xe3", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x14\xbe\x1c\x53\x5b\x17\xca\xbd\x0c\x4d\x93\x52\x9d\x69\xbf\x47", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc9\xef\x67\x75\x65\x07\xbe\xec\x9d\xd3\x86\x28\x83\x47\x80\x44", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x40\xe2\x31\xfa\x5a\x59\x48\xce\x21\x34\xe9\x2f\xc0\x66\x4d\x4b", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x03\x19\x4b\x8e\x5d\xda\x55\x30\xd0\xc6\x78\xc0\xb4\x8f\x5d\x92", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x90\xbd\x08\x6f\x23\x7c\xc4\xfd\x99\xf4\xd7\x6b\xde\x6b\x48\x26", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x19\x25\x97\x61\xca\x17\x13\x0d\x6e\xd8\x6d\x57\xcd\x79\x51\xee", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd7\xcb\xb3\xf3\x4b\x9b\x45\x0f\x24\xb0\xe8\x51\x8e\x54\xda\x6d", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x72\x5b\x9c\xae\xbe\x9f\x7f\x41\x7f\x40\x68\xd0\xd2\xee\x20\xb3", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x9d\x92\x4b\x93\x4a\x90\xce\x1f\xd3\x9b\x8a\x97\x94\xf8\x26\x72", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc5\x05\x62\xbf\x09\x45\x26\xa9\x1c\x5b\xc6\x3c\x0c\x22\x49\x95", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd2\xf1\x18\x05\x04\x67\x43\xbd\x74\xf5\x71\x88\xd9\x18\x8d\xf7", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8d\xd2\x74\xbd\x0f\x1b\x58\xae\x34\x5d\x9e\x72\x33\xf9\xb8\xf3", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x9d\x6b\xdc\x8f\x4c\xe5\xfe\xb0\xf3\xbe\xd2\xe4\xb9\xa9\xbb\x0b", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfd\x55\x48\xbc\xf3\xf4\x25\x65\xf7\xef\xa9\x45\x62\x52\x8d\x46", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd2\xcc\xae\xbd\x3a\x4c\x3e\x80\xb0\x63\x74\x81\x31\xba\x4a\x71", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe0\x3c\xb2\x3d\x9e\x11\xc9\xd9\x3f\x11\x7e\x9c\x0a\x91\xb5\x76", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x78\xf9\x33\xa2\x08\x1a\xc1\xdb\x84\xf6\x9d\x10\xf4\x52\x3f\xe0", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x40\x61\xf7\x41\x2e\xd3\x20\xde\x0e\xdc\x88\x51\xc2\xe2\x43\x6f", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x90\x64\xba\x1c\xd0\x4c\xe6\xba\xb9\x84\x74\x33\x08\x14\xb4\xd4", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x48\x39\x1b\xff\xb9\xcf\xff\x80\xac\x23\x8c\x88\x6e\xf0\xa4\x61", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb8\xd2\xa6\x7d\xf5\xa9\x99\xfd\xbf\x93\xed\xd0\x34\x32\x96\xc9", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xaa\xca\x73\x67\x39\x6b\x69\xa2\x21\xbd\x63\x2b\xea\x38\x6e\xec", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa8\x0f\xd5\x02\x0d\xfe\x65\xf5\xf1\x62\x93\xec\x92\xc6\xfd\x89", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x21\x62\x99\x5b\x82\x17\xa6\x7f\x1a\xbc\x34\x2e\x14\x64\x06\xf8", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc6\xa6\x16\x4b\x7a\x60\xba\xe4\xe9\x86\xff\xac\x28\xdf\xad\xd9", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x64\xe0\xd7\xf9\x00\xe3\xd9\xc8\x3e\x4b\x8f\x96\x71\x7b\x21\x46", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1a\xd2\x56\x1d\xe8\xc1\x23\x2f\x5d\x8d\xba\xb4\x73\x9b\x6c\xbb", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x27\x96\x89\xe9\xa5\x57\xf5\x8b\x1c\x3b\xf4\x0c\x97\xa9\x09\x64", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc4\x63\x7e\x4a\x5e\x63\x77\xf9\xcc\x5a\x86\x38\x04\x5d\xe0\x29", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x49\x2e\x60\x7e\x5a\xea\x46\x88\x59\x4b\x45\xf3\xae\xe3\xdf\x90", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe8\xc4\xe4\x38\x1f\xee\xc7\x40\x54\x95\x4c\x05\xb7\x77\xa0\x0a", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x91\x54\x95\x14\x60\x5f\x38\x24\x6c\x9b\x72\x4a\xd8\x39\xf0\x1d", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x74\xb2\x4e\x3b\x6f\xef\xe4\x0a\x4f\x9e\xf7\xac\x6e\x44\xd7\x6a", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x24\x37\xa6\x83\xdc\x5d\x4b\x52\xab\xb4\xa1\x23\xa8\xdf\x86\xc6", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xbb\x28\x52\xc8\x91\xc5\x94\x7d\x2e\xd4\x40\x32\xc4\x21\xb8\x5f", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1b\x9f\x5f\xbd\x5e\x8a\x42\x64\xc0\xa8\x5b\x80\x40\x9a\xfa\x5e", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x30\xda\xb8\x09\xf8\x5a\x91\x7f\xe9\x24\x73\x3f\x42\x4a\xc5\x89", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xea\xef\x5c\x1f\x8d\x60\x51\x92\x64\x66\x95\xce\xad\xc6\x5f\x32", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb8\xaa\x90\x04\x0b\x4c\x15\xa1\x23\x16\xb7\x8e\x0f\x95\x86\xfc", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x97\xfa\xc8\x29\x7c\xea\xab\xc8\x7d\x45\x43\x50\x60\x1e\x06\x73", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x9b\x47\xef\x56\x7a\xc2\x8d\xfe\x48\x84\x92\xf1\x57\xe2\xb2\xe0", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1b\x84\x26\x02\x7d\xdb\x96\x2b\x5c\x5b\xa7\xeb\x8b\xc9\xab\x63", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe9\x17\xfc\x77\xe7\x19\x92\xa1\x2d\xbe\x4c\x18\x06\x8b\xec\x82", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xdc\xee\xbb\xc9\x88\x40\xf8\xae\x6d\xaf\x76\x57\x3b\x7e\x56\xf4", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x4e\x11\xa9\xf7\x42\x05\x12\x5b\x61\xe0\xae\xe0\x47\xec\xa2\x0d", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf6\x04\x67\xf5\x5a\x1f\x17\xea\xb8\x8e\x80\x01\x20\xcb\xc2\x84", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd4\x36\x64\x9f\x60\x0b\x44\x9e\xe2\x76\x53\x0f\x0c\xd8\x3c\x11", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x3b\xc0\xe3\x65\x6a\x9e\x3a\xc7\xcd\x37\x8a\x73\x7f\x53\xb6\x37", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x6b\xac\xae\x63\xd3\x3b\x92\x8a\xa8\x38\x0f\x8d\x54\xd8\x8c\x17", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x89\x35\xff\xbc\x75\xae\x62\x51\xbf\x8e\x85\x9f\x08\x5a\xdc\xb9", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x93\xdc\x49\x70\xfe\x35\xf6\x77\x47\xcb\x05\x62\xc0\x6d\x87\x5a", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x14\xf9\xdf\x85\x89\x75\x85\x17\x97\xba\x60\x4f\xb0\xd1\x6c\xc7", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x02\xea\x0c\x98\xdc\xa1\x0b\x38\xc2\x1b\x3b\x14\xe8\xd1\xb7\x1f", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8f\x09\x1b\x1b\x5b\x07\x49\xb2\xad\xc8\x03\xe6\x3d\xda\x9b\x72", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x05\xb3\x89\xe3\x32\x2c\x6d\xa0\x83\x84\x34\x5a\x41\x37\xfd\x08", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x38\x13\x08\xc4\x38\xf3\x5b\x39\x9f\x10\xad\x71\xb0\x50\x27\xd8", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x68\xc2\x30\xfc\xfa\x92\x79\xc3\x40\x9f\xc4\x23\xe2\xac\xbe\x04", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1c\x84\xa4\x75\xac\xb0\x11\xf3\xf5\x9f\x4f\x46\xb7\x62\x74\xc0", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x45\x11\x9b\x68\xcb\x3f\x83\x99\xee\x60\x06\x6b\x56\x11\xa4\xd7", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x94\x23\x76\x2f\x52\x7a\x40\x60\xff\xca\x31\x2d\xcc\xa2\x2a\x16", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf3\x61\xa2\x74\x5a\x33\xf0\x56\xa5\xac\x6a\xce\x2f\x08\xe3\x44", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x5e\xf1\x45\x76\x6e\xca\x84\x9f\x5d\x01\x15\x36\xa6\x55\x7f\xdb", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc9\xaf\x27\xb2\xc8\x9c\x9b\x4c\xf4\xa0\xc4\x10\x6a\xc8\x03\x18", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfb\x9c\x4f\x16\xc6\x21\xf4\xea\xb7\xe9\xac\x1d\x75\x51\xdd\x57", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x13\x8e\x06\xfb\xa4\x66\xfa\x70\x85\x4d\x8c\x2e\x52\x4c\xff\xb2", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfb\x4b\xc7\x8b\x22\x50\x70\x77\x3f\x04\xc4\x04\x66\xd4\xe9\x0c", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8b\x2c\xbf\xf1\xed\x01\x50\xfe\xda\x8a\x47\x99\xbe\x94\x55\x1f", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x08\xb3\x0d\x7b\x3f\x27\x96\x27\x09\xa3\x6b\xca\xdf\xb9\x74\xbd", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfd\xf6\xd3\x2e\x04\x4d\x77\xad\xcf\x37\xfb\x97\xac\x21\x33\x26", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x93\xcb\x28\x4e\xcd\xcf\xd7\x81\xa8\xaf\xe3\x20\x77\x94\x9e\x88", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x7b\x01\x7b\xb0\x2e\xc8\x7b\x2b\x94\xc9\x6e\x40\xa2\x6f\xc7\x1a", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc5\xc0\x38\xb6\x99\x06\x64\xab\x08\xa3\xaa\xa5\xdf\x9f\x32\x66", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x4b\x70\x20\xbe\x37\xfa\xb6\x25\x9b\x2a\x27\xf4\xec\x55\x15\x76", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x60\x13\x67\x03\x37\x4f\x64\xe8\x60\xb4\x8c\xe3\x1f\x93\x07\x16", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8d\x63\xa2\x69\xb1\x4d\x50\x6c\xcc\x40\x1a\xb8\xa9\xf1\xb5\x91", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd3\x17\xf8\x1d\xc6\xaa\x45\x4a\xee\x4b\xd4\xa5\xa5\xcf\xf4\xbd", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xdd\xde\xce\xcd\x53\x54\xf0\x4d\x53\x0d\x76\xed\x88\x42\x46\xeb", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x41\xc5\x20\x5c\xc8\xfd\x8e\xda\x9a\x3c\xff\xd2\x51\x8f\x36\x5a", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xcf\x42\xfb\x47\x42\x93\xd9\x6e\xca\x9d\xb1\xb3\x7b\x1b\xa6\x76", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa2\x31\x69\x26\x07\x16\x9b\x4e\xcd\xea\xd5\xcd\x3b\x10\xdb\x3e", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xac\xe4\xb9\x1c\x9c\x66\x9e\x77\xe7\xac\xac\xd1\x98\x59\xed\x49", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x75\xdb\x7c\xfd\x4a\x7b\x2b\x62\xab\x78\xa4\x8f\x3d\xda\xf4\xaf", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc1\xfa\xba\x2d\x46\xe2\x59\xcf\x48\x0d\x7c\x38\xe4\x57\x2a\x58", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x24\x1c\x45\xbc\x6a\xe1\x6d\xee\x6e\xb7\xbe\xa1\x28\x70\x15\x82", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8f\xd0\x30\x57\xcf\x13\x64\x42\x0c\x2b\x78\x06\x9a\x3e\x25\x02", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xdd\xb5\x05\xe6\xcc\x13\x84\xcb\xae\xc1\xdf\x90\xb8\x0b\xeb\x20", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x56\x74\xa3\xbe\xd2\x7b\xf4\xbd\x36\x22\xf9\xf5\xfe\x20\x83\x06", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb6\x87\xf2\x6a\x89\xcf\xbf\xbb\x8e\x5e\xea\xc5\x40\x55\x31\x5e", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x05\x47\xdd\x32\xd3\xb2\x9a\xb6\xa4\xca\xeb\x60\x6c\x5b\x6f\x78", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x18\x68\x61\xf8\xbc\x53\x86\xd3\x1f\xb7\x7f\x72\x0c\x32\x26\xe6", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xea\xcf\x1e\x6c\x42\x24\xef\xb3\x89\x00\xb1\x85\xab\x1d\xfd\x42", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd2\x41\xaa\xb0\x5a\x42\xd3\x19\xde\x81\xd8\x74\xf5\xc7\xb9\x0d", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x5e\xb9\xbc\x75\x9e\x2a\xd8\xd2\x14\x0a\x6c\x76\x2a\xe9\xe1\xab", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x01\x85\x96\xe1\x5e\x78\xe2\xc0\x64\x15\x9d\xef\xce\x5f\x30\x85", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x6c\xd0\x25\x13\xe8\xd4\xdc\x98\x6b\x4a\xfe\x08\x7a\x60\xbd\x0c", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x2c\xe1\xf8\xb7\xe3\x06\x27\xc1\xc4\x51\x9e\xad\xa4\x4b\xc4\x36", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x99\x46\xb5\xf8\x7a\xf4\x46\xf5\x79\x6c\x1f\xee\x63\xa2\xda\x24", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x2a\x56\x03\x64\xce\x52\x9e\xfc\x21\x78\x87\x79\x56\x8d\x55\x55", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x35\xc1\x47\x18\x37\xaf\x44\x61\x53\xbc\xe5\x5d\x5b\xa7\x2a\x0a", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xce\x60\xbc\x52\x38\x62\x34\xf1\x58\xf8\x43\x41\xe5\x34\xcd\x9e", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8c\x7c\x27\xff\x32\xbc\xf8\xdc\x2d\xc5\x7c\x90\xc2\x90\x39\x61", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x32\xbb\x6a\x7e\xc8\x44\x99\xe1\x66\xf9\x36\x00\x3d\x55\xa5\xbb", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa5\xc7\x72\xe5\xc6\x26\x31\xef\x66\x0e\xe1\xd5\x87\x7f\x6d\x1b", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x03\x0d\x7e\x5b\x64\xf3\x80\xa7\xe4\xea\x53\x87\xb5\xcd\x7f\x49", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x0d\xc9\xa2\x61\x00\x37\x00\x9b\x69\x8f\x11\xbb\x7e\x86\xc8\x3e", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x46\x61\x2c\x76\x6d\x18\x40\xc2\x26\x36\x4f\x1f\xa7\xed\x72", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x48\x80\xc7\xe0\x8f\x27\xbe\xfe\x78\x59\x07\x43\xc0\x5e\x69\x8b", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x25\x20\xce\x82\x9a\x26\x57\x7f\x0f\x48\x22\xc4\xec\xc8\x74\x01", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x87\x65\xe8\xac\xc1\x69\x75\x83\x19\xcb\x46\xdc\x7b\xcf\x3d\xca", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe9\x8f\x4b\xa4\xf0\x73\xdf\x4b\xaa\x11\x6d\x01\x1d\xc2\x4a\x28", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf3\x78\xf6\x8c\x5d\xbf\x59\xe2\x11\xb3\xa6\x59\xa7\x31\x7d\x94", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x28\x3d\x3b\x06\x9d\x8e\xb9\xfb\x43\x2d\x74\xb9\x6c\xa7\x62\xb4", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa7\xe1\x84\x2e\x8a\x87\x86\x1c\x22\x1a\x50\x08\x83\x24\x5c\x51", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x77\xaa\x27\x04\x71\x88\x1b\xe0\x70\xfb\x52\xc7\x06\x7c\xe7\x32", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x01\xb0\xf4\x76\xd4\x84\xf4\x3f\x1a\xeb\x6e\xfa\x93\x61\xa8\xac", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1c\x3a\x94\xf1\xc0\x52\xc5\x5c\x2d\x83\x59\xaf\xf2\x16\x3b\x4f", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe8\xa0\x67\xb6\x04\xd5\x37\x3d\x8b\x0f\x2e\x05\xa0\x3b\x34\x1b", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa7\x87\x6e\xc8\x7f\x5a\x09\xbf\xea\x42\xc7\x7d\xa3\x0f\xd5\x0e", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x0c\xf3\xe9\xd3\xa4\x2b\xe5\xb8\x54\xca\x65\xb1\x3f\x35\xf4\x8d", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x6c\x62\xf6\xbb\xca\xb7\xc3\xe8\x21\xc9\x29\x0f\x08\x89\x2d\xda", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x7f\x5e\x05\xbd\x20\x68\x73\x81\x96\xfe\xe7\x9a\xce\x7e\x3a\xec", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x44\x0e\x0d\x73\x32\x55\xcd\xa9\x2f\xb4\x6e\x84\x2f\xe5\x80\x54", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xaa\x5d\x5b\x1c\x4e\xa1\xb7\xa2\x2e\x55\x83\xac\x2e\x9e\xd8\xa7", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x77\xe5\x37\xe8\x9e\x84\x91\xe8\x66\x2a\xae\x3b\xc8\x09\x42\x1d", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x99\x7d\xd3\xe9\xf1\x59\x8b\xfa\x73\xf7\x59\x73\xf7\xe9\x3b\x76", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1b\x38\xd4\xf7\x45\x2a\xfe\xfc\xb7\xfc\x72\x12\x44\xe4\xb7\x2e", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x0b\xe2\xb1\x82\x52\xe7\x74\xdd\xa3\x0c\xdd\xa0\x2c\x69\x06\xe3", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd2\x69\x5e\x59\xc2\x03\x61\xd8\x26\x52\xd7\xd5\x8b\x6f\x11\xb2", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x90\x2d\x88\xd1\x3e\xae\x52\x08\x9a\xbd\x61\x43\xcf\xe3\x94\xe9", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd4\x9b\xce\xb3\xb8\x23\xfe\xdd\x60\x2c\x30\x53\x45\x73\x4b\xd2", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x70\x7b\x1d\xbb\x0f\xfa\x40\xef\x7d\x95\xde\xf4\x21\x23\x3f\xae", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x7c\xa0\xc1\xd9\x33\x56\xd9\xeb\x8a\xa9\x52\x08\x4d\x75\xf9\x13", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf2\xcb\xf9\xcb\x18\x6e\x27\x0d\xd7\xbd\xb0\xc2\x8f\xeb\xc5\x7d", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc9\x43\x37\xc3\x7c\x4e\x79\x0a\xb4\x57\x80\xbd\x9c\x36\x74\xa0", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8e\x35\x58\xc1\x35\x25\x2f\xb9\xc9\xf3\x67\xed\x60\x94\x67\xa1", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1b\x72\xee\xae\xe4\x89\x9b\x44\x39\x14\xe5\xb3\xa5\x7f\xba\x92", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x01\x18\x65\xf9\x1b\xc5\x68\x68\xd0\x51\xe5\x2c\x9e\xfd\x59\xb7", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe4\x77\x13\x18\xad\x7a\x63\xdd\x68\x0f\x6e\x58\x3b\x77\x47\xea", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x61\xe3\xd1\x94\x08\x8d\xc8\xd9\x7e\x9e\x6d\xb3\x74\x57\xea\xc5", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x36\xff\x1e\xc9\xcc\xfb\xc3\x49\xe5\xd3\x56\xd0\x63\x69\x3a\xd6", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x3c\xc9\xe9\xa9\xbe\x8c\xc3\xf6\xfb\x2e\xa2\x40\x88\xe9\xbb\x19", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1e\xe5\xab\x00\x3d\xc8\x72\x2e\x74\x90\x5d\x9a\x8f\xe3\xd3\x50", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x24\x53\x39\x31\x95\x84\xb0\xa4\x12\x41\x28\x69\xd6\xc2\xea\xda", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x7b\xd4\x96\x91\x81\x15\xd1\x4e\xd5\x38\x08\x52\x71\x6c\x88\x14", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x27\x3a\xb2\xf2\xb4\xa3\x66\xa5\x7d\x58\x2a\x33\x93\x13\xc8\xb1", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x11\x33\x65\xa9\xff\xbe\x3b\x0c\xa6\x1e\x98\x50\x75\x54\x16\x8b", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xaf\xa9\x9c\x99\x7a\xc4\x78\xa0\xde\xa4\x11\x9c\x9e\x45\xf8\xb1", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x92\x16\x30\x9a\x78\x42\x43\x0b\x83\xff\xb9\x86\x38\x01\x15\x12", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x62\xab\xc7\x92\x28\x82\x58\x49\x2a\x7c\xb4\x51\x45\xf4\xb7\x59", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x53\x49\x23\xc1\x69\xd5\x04\xd7\x51\x9c\x15\xd3\x0e\x75\x6c\x50", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00", "\xfa\x75\xe0\x5b\xcd\xc7\xe0\x0c\x27\x3f\xa3\x3f\x6e\xe4\x41\xd2", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00", "\x7d\x35\x0f\xa6\x05\x70\x80\xf1\x08\x6a\x56\xb1\x7e\xc2\x40\xdb", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00", "\xf3\x4e\x4a\x63\x24\xea\x4a\x5c\x39\xa6\x61\xc8\xfe\x5a\xda\x8f", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00", "\x08\x82\xa1\x6f\x44\x08\x8d\x42\x44\x7a\x29\xac\x09\x0e\xc1\x7e", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00", "\x3a\x3c\x15\xbf\xc1\x1a\x95\x37\xc1\x30\x68\x70\x04\xe1\x36\xee", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00", "\x22\xc0\xa7\x67\x8d\xc6\xd8\xcf\x5c\x8a\x6d\x5a\x99\x60\x76\x7c", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00", "\xb4\x6b\x09\x80\x9d\x68\xb9\xa4\x56\x43\x2a\x79\xbd\xc2\xe3\x8c", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00", "\x93\xba\xaf\xfb\x35\xfb\xe7\x39\xc1\x7c\x6a\xc2\x2e\xec\xf1\x8f", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00", "\xc8\xaa\x80\xa7\x85\x06\x75\xbc\x00\x7c\x46\xdf\x06\xb4\x98\x68", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00", "\x12\xc6\xf3\x87\x7a\xf4\x21\xa9\x18\xa8\x4b\x77\x58\x58\x02\x1d", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00", "\x33\xf1\x23\x28\x2c\x5d\x63\x39\x24\xf7\xd5\xba\x3f\x3c\xab\x11", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00", "\xa8\xf1\x61\x00\x27\x33\xe9\x3c\xa4\x52\x7d\x22\xc1\xa0\xc5\xbb", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00", "\xb7\x2f\x70\xeb\xf3\xe3\xfd\xa2\x3f\x50\x8e\xec\x76\xb4\x2c\x02", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00", "\x6a\x9d\x96\x5e\x62\x74\x14\x3f\x25\xaf\xdc\xfc\x88\xff\xd7\x7c", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00", "\xa0\xc7\x4f\xd0\xb9\x36\x17\x64\xce\x91\xc5\x20\x0b\x09\x53\x57", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00", "\x09\x1d\x1f\xdc\x2b\xd2\xc3\x46\xcd\x50\x46\xa8\xc6\x20\x91\x46", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00", "\xe2\xa3\x75\x80\x11\x6c\xfb\x71\x85\x62\x54\x49\x6a\xb0\xac\xa8", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00", "\xe0\xb3\xa0\x07\x85\x91\x7c\x7e\xfc\x9a\xdb\xa3\x22\x81\x35\x71", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00", "\x73\x3d\x41\xf4\x72\x7b\x5e\xf0\xdf\x4a\xf4\xcf\x3c\xff\xa0\xcb", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00", "\xa9\x9e\xbb\x03\x02\x60\x82\x6f\x98\x1a\xd3\xe6\x44\x90\xaa\x4f", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00", "\x73\xf3\x4c\x7d\x3e\xae\x5e\x80\x08\x2c\x16\x47\x52\x43\x08\xee", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00", "\x40\xeb\xd5\xad\x08\x23\x45\xb7\xa2\x09\x7c\xcd\x34\x64\xda\x02", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00", "\x7c\xc4\xae\x9a\x42\x4b\x2c\xec\x90\xc9\x71\x53\xc2\x45\x7e\xc5", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00", "\x54\xd6\x32\xd0\x3a\xba\x0b\xd0\xf9\x18\x77\xeb\xdd\x4d\x09\xcb", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00", "\xd3\x42\x7b\xe7\xe4\xd2\x7c\xd5\x4f\x5f\xe3\x7b\x03\xcf\x08\x97", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00", "\xb2\x09\x97\x95\xe8\x8c\xc1\x58\xfd\x75\xea\x13\x3d\x7e\x7f\xbe", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00", "\xa6\xca\xe4\x6f\xb6\xfa\xdf\xe7\xa2\xc3\x02\xa3\x42\x42\x81\x7b", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00", "\x02\x6a\x70\x24\xd6\xa9\x02\xe0\xb3\xff\xcc\xba\xa9\x10\xcc\x3f", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00", "\x15\x6f\x07\x76\x7a\x85\xa4\x31\x23\x21\xf6\x39\x68\x33\x8a\x01", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00", "\x15\xee\xc9\xeb\xf4\x2b\x9c\xa7\x68\x97\xd2\xcd\x6c\x5a\x12\xe2", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00", "\xdb\x0d\x3a\x6f\xdc\xc1\x3f\x91\x5e\x2b\x30\x2c\xee\xb7\x0f\xd8", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00", "\x71\xdb\xf3\x7e\x87\xa2\xe3\x4d\x15\xb2\x0e\x8f\x10\xe4\x89\x24", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00", "\xc7\x45\xc4\x51\xe9\x6f\xf3\xc0\x45\xe4\x36\x7c\x83\x3e\x3b\x54", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00", "\x34\x0d\xa0\x9c\x2d\xd1\x1c\x3b\x67\x9d\x08\xcc\xd2\x7d\xd5\x95", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00", "\x82\x79\xf7\xc0\xc2\xa0\x3e\xe6\x60\xc6\xd3\x92\xdb\x02\x5d\x18", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00", "\xa4\xb2\xc7\xd8\xeb\xa5\x31\xff\x47\xc5\x04\x1a\x55\xfb\xd1\xec", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00", "\x74\x56\x9a\x2c\xa5\xa7\xbd\x51\x31\xce\x8d\xc7\xcb\xfb\xf7\x2f", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00", "\x37\x13\xda\x0c\x02\x19\xb6\x34\x54\x03\x56\x13\xb5\xa4\x03\xdd", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00", "\x88\x27\x55\x1d\xdc\xc9\xdf\x23\xfa\x72\xa3\xde\x4e\x9f\x0b\x07", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00", "\x2e\x3f\xeb\xfd\x62\x5b\xfc\xd0\xa2\xc0\x6e\xb4\x60\xda\x17\x32", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00", "\xee\x82\xe6\xba\x48\x81\x56\xf7\x64\x96\x31\x1d\xa6\x94\x1d\xeb", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00", "\x47\x70\x44\x6f\x01\xd1\xf3\x91\x25\x6e\x85\xa1\xb3\x0d\x89\xd3", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00", "\xaf\x04\xb6\x8f\x10\x4f\x21\xef\x2a\xfb\x47\x67\xcf\x74\x14\x3c", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00", "\xcf\x35\x79\xa9\xba\x38\xc8\xe4\x36\x53\x17\x3e\x14\xf3\xa4\xc6", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00", "\xb3\xbb\xa9\x04\xf4\x95\x3e\x09\xb5\x48\x00\xaf\x2f\x62\xe7\xd4", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00", "\xfc\x42\x49\x65\x6e\x14\xb2\x9e\xb9\xc4\x48\x29\xb4\xc5\x9a\x46", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00", "\x9b\x31\x56\x8f\xeb\xe8\x1c\xfc\x2e\x65\xaf\x1c\x86\xd1\xa3\x08", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00", "\x9c\xa0\x9c\x25\xf2\x73\xa7\x66\xdb\x98\xa4\x80\xce\x8d\xfe\xdc", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00", "\xb9\x09\x92\x57\x86\xf3\x4c\x3c\x92\xd9\x71\x88\x3c\x9f\xbe\xdf", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00", "\x82\x64\x7f\x13\x32\xfe\x57\x0a\x9d\x4d\x92\xb2\xee\x77\x1d\x3b", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00", "\x36\x04\xa7\xe8\x08\x32\xb3\xa9\x99\x54\xbc\xa6\xf5\xb9\xf5\x01", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00", "\x88\x46\x07\xb1\x28\xc5\xde\x3a\xb3\x9a\x52\x9a\x1e\xf5\x1b\xef", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00", "\x67\x0c\xfa\x09\x3d\x1d\xbd\xb2\x31\x70\x41\x40\x41\x02\x43\x5e", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00", "\x7a\x86\x71\x95\xf3\xce\x87\x69\xcb\xd3\x36\x50\x2f\xbb\x51\x30", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00", "\x52\xef\xcf\x64\xc7\x2b\x2f\x7c\xa5\xb3\xc8\x36\xb1\x07\x8c\x15", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00", "\x40\x19\x25\x0f\x6e\xef\xb2\xac\x5c\xcb\xca\xe0\x44\xe7\x5c\x7e", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00", "\x02\x2c\x4f\x6f\x5a\x01\x7d\x29\x27\x85\x62\x76\x67\xdd\xef\x24", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00", "\xe9\xc2\x10\x78\xa2\xeb\x7e\x03\x25\x0f\x71\x00\x0f\xa9\xe3\xed", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00", "\xa1\x3e\xae\xeb\x9c\xd3\x91\xda\x4e\x2b\x09\x49\x0b\x3e\x7f\xad", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00", "\xc9\x58\xa1\x71\xdc\xa1\xd4\xed\x53\xe1\xaf\x1d\x38\x08\x03\xa9", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00", "\x21\x44\x2e\x07\xa1\x10\x66\x7f\x25\x83\xea\xee\xee\x44\xdc\x8c", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00", "\x59\xbb\xb3\x53\xcf\x1d\xd8\x67\xa6\xe3\x37\x37\xaf\x65\x5e\x99", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00", "\x43\xcd\x3b\x25\x37\x5d\x0c\xe4\x10\x87\xff\x9f\xe2\x82\x96\x39", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00", "\x6b\x98\xb1\x7e\x80\xd1\x11\x8e\x35\x16\xbd\x76\x8b\x28\x5a\x84", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80", "\xae\x47\xed\x36\x76\xca\x0c\x08\xde\xea\x02\xd9\x5b\x81\xdb\x58", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0", "\x34\xec\x40\xdc\x20\x41\x37\x95\xed\x53\x62\x8e\xa7\x48\x72\x0b", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0", "\x4d\xc6\x81\x63\xf8\xe9\x83\x54\x73\x25\x35\x42\xc8\xa6\x5d\x46", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0", "\x2a\xab\xb9\x99\xf4\x36\x93\x17\x5a\xf6\x5c\x6c\x61\x2c\x46\xfb", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8", "\xe0\x1f\x94\x49\x9d\xac\x35\x47\x51\x5c\x5b\x1d\x75\x6f\x0f\x58", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc", "\x9d\x12\x43\x5a\x46\x48\x0c\xe0\x0e\xa3\x49\xf7\x17\x99\xdf\x9a", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe", "\xce\xf4\x1d\x16\xd2\x66\xbd\xfe\x46\x93\x8a\xd7\x88\x4c\xc0\xcf", }, -}; - -static const struct ECB256_Test -{ - uint8_t key[32]; - uint8_t pt[16]; - uint8_t ct[16]; -} -ECB256_Tests[] = -{ -{ "\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe3\x5a\x6d\xcb\x19\xb2\x01\xa0\x1e\xbc\xfa\x8a\xa2\x2b\x57\x59", }, -{ "\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb2\x91\x69\xcd\xcf\x2d\x83\xe8\x38\x12\x5a\x12\xee\x6a\xa4\x00", }, -{ "\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd8\xf3\xa7\x2f\xc3\xcd\xf7\x4d\xfa\xf6\xc3\xe6\xb9\x7b\x2f\xa6", }, -{ "\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1c\x77\x76\x79\xd5\x00\x37\xc7\x94\x91\xa9\x4d\xa7\x6a\x9a\x35", }, -{ "\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x9c\xf4\x89\x3e\xca\xfa\x0a\x02\x47\xa8\x98\xe0\x40\x69\x15\x59", }, -{ "\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8f\xbb\x41\x37\x03\x73\x53\x26\x31\x0a\x26\x9b\xd3\xaa\x94\xb2", }, -{ "\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x60\xe3\x22\x46\xbe\xd2\xb0\xe8\x59\xe5\x5c\x1c\xc6\xb2\x65\x02", }, -{ "\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xec\x52\xa2\x12\xf8\x0a\x09\xdf\x63\x17\x02\x1b\xc2\xa9\x81\x9e", }, -{ "\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf2\x3e\x5b\x60\x0e\xb7\x0d\xbc\xcf\x6c\x0b\x1d\x9a\x68\x18\x2c", }, -{ "\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa3\xf5\x99\xd6\x3a\x82\xa9\x68\xc3\x3f\xe2\x65\x90\x74\x59\x70", }, -{ "\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd1\xcc\xb9\xb1\x33\x70\x02\xcb\xac\x42\xc5\x20\xb5\xd6\x77\x22", }, -{ "\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xcc\x11\x1f\x6c\x37\xcf\x40\xa1\x15\x9d\x00\xfb\x59\xfb\x04\x88", }, -{ "\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xdc\x43\xb5\x1a\xb6\x09\x05\x23\x72\x98\x9a\x26\xe9\xcd\xd7\x14", }, -{ "\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x4d\xce\xde\x8d\xa9\xe2\x57\x8f\x39\x70\x3d\x44\x33\xdc\x64\x59", }, -{ "\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1a\x4c\x1c\x26\x3b\xbc\xcf\xaf\xc1\x17\x82\x89\x46\x85\xe3\xa8", }, -{ "\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x93\x7a\xd8\x48\x80\xdb\x50\x61\x34\x23\xd6\xd5\x27\xa2\x82\x3d", }, -{ "\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x61\x0b\x71\xdf\xc6\x88\xe1\x50\xd8\x15\x2c\x5b\x35\xeb\xc1\x4d", }, -{ "\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x27\xef\x24\x95\xda\xbf\x32\x38\x85\xaa\xb3\x9c\x80\xf1\x8d\x8b", }, -{ "\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x63\x3c\xaf\xea\x39\x5b\xc0\x3a\xda\xe3\xa1\xe2\x06\x8e\x4b\x4e", }, -{ "\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x6e\x1b\x48\x2b\x53\x76\x1c\xf6\x31\x81\x9b\x74\x9a\x6f\x37\x24", }, -{ "\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x97\x6e\x6f\x85\x1a\xb5\x2c\x77\x19\x98\xdb\xb2\xd7\x1c\x75\xa9", }, -{ "\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x85\xf2\xba\x84\xf8\xc3\x07\xcf\x52\x5e\x12\x4c\x3e\x22\xe6\xcc", }, -{ "\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x6b\xcc\xa9\x8b\xf6\xa8\x35\xfa\x64\x95\x5f\x72\xde\x41\x15\xfe", }, -{ "\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x2c\x75\xe2\xd3\x6e\xeb\xd6\x54\x11\xf1\x4f\xd0\xeb\x1d\x2a\x06", }, -{ "\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xbd\x49\x29\x50\x06\x25\x0f\xfc\xa5\x10\x0b\x60\x07\xa0\xea\xde", }, -{ "\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa1\x90\x52\x7d\x0e\xf7\xc7\x0f\x45\x9c\xd3\x94\x0d\xf3\x16\xec", }, -{ "\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xbb\xd1\x09\x7a\x62\x43\x3f\x79\x44\x9f\xa9\x7d\x4e\xe8\x0d\xbf", }, -{ "\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x07\x05\x8e\x40\x8f\x5b\x99\xb0\xe0\xf0\x61\xa1\x76\x1b\x5b\x3b", }, -{ "\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x5f\xd1\xf1\x3f\xa0\xf3\x1e\x37\xfa\xbd\xe3\x28\xf8\x94\xea\xc2", }, -{ "\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfc\x4a\xf7\xc9\x48\xdf\x26\xe2\xef\x3e\x01\xc1\xee\x5b\x8f\x6f", }, -{ "\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x82\x9f\xd7\x20\x8f\xb9\x2d\x44\xa0\x74\xa6\x77\xee\x98\x61\xac", }, -{ "\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xad\x9f\xc6\x13\xa7\x03\x25\x1b\x54\xc6\x4a\x0e\x76\x43\x17\x11", }, -{ "\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x33\xac\x9e\xcc\xc4\xcc\x75\xe2\x71\x16\x18\xf8\x0b\x15\x48\xe8", }, -{ "\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x20\x25\xc7\x4b\x8a\xd8\xf4\xcd\xa1\x7e\xe2\x04\x9c\x4c\x90\x2d", }, -{ "\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf8\x5c\xa0\x5f\xe5\x28\xf1\xce\x9b\x79\x01\x66\xe8\xd5\x51\xe7", }, -{ "\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x6f\x62\x38\xd8\x96\x60\x48\xd4\x96\x71\x54\xe0\xda\xd5\xa6\xc9", }, -{ "\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf2\xb2\x1b\x4e\x76\x40\xa9\xb3\x34\x6d\xe8\xb8\x2f\xb4\x1e\x49", }, -{ "\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf8\x36\xf2\x51\xad\x1d\x11\xd4\x9d\xc3\x44\x62\x8b\x18\x84\xe1", }, -{ "\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x07\x7e\x94\x70\xae\x7a\xbe\xa5\xa9\x76\x9d\x49\x18\x26\x28\xc3", }, -{ "\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe0\xdc\xc2\xd2\x7f\xc9\x86\x56\x33\xf8\x52\x23\xcf\x0d\x61\x1f", }, -{ "\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xbe\x66\xcf\xea\x2f\xec\xd6\xbf\x0e\xc7\xb4\x35\x2c\x99\xbc\xaa", }, -{ "\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xdf\x31\x14\x4f\x87\xa2\xef\x52\x3f\xac\xdc\xf2\x1a\x42\x78\x04", }, -{ "\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb5\xbb\x0f\x56\x29\xfb\x6a\xae\x5e\x18\x39\xa3\xc3\x62\x5d\x63", }, -{ "\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x3c\x9d\xb3\x33\x53\x06\xfe\x1e\xc6\x12\xbd\xbf\xae\x6b\x60\x28", }, -{ "\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x3d\xd5\xc3\x46\x34\xa7\x9d\x3c\xfc\xc8\x33\x97\x60\xe6\xf5\xf4", }, -{ "\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x82\xbd\xa1\x18\xa3\xed\x7a\xf3\x14\xfa\x2c\xcc\x5c\x07\xb7\x61", }, -{ "\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x29\x37\xa6\x4f\x7d\x4f\x46\xfe\x6f\xea\x3b\x34\x9e\xc7\x8e\x38", }, -{ "\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x22\x5f\x06\x8c\x28\x47\x66\x05\x73\x5a\xd6\x71\xbb\x8f\x39\xf3", }, -{ "\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xae\x68\x2c\x5e\xcd\x71\x89\x8e\x08\x94\x2a\xc9\xaa\x89\x87\x5c", }, -{ "\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x5e\x03\x1c\xb9\xd6\x76\xc3\x02\x2d\x7f\x26\x22\x7e\x85\xc3\x8f", }, -{ "\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa7\x84\x63\xfb\x06\x4d\xb5\xd5\x2b\xb6\x4b\xfe\xf6\x4f\x2d\xda", }, -{ "\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8a\xa9\xb7\x5e\x78\x45\x93\x87\x6c\x53\xa0\x0e\xae\x5a\xf5\x2b", }, -{ "\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x3f\x84\x56\x6d\xf2\x3d\xa4\x8a\xf6\x92\x72\x2f\xe9\x80\x57\x3a", }, -{ "\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x31\x69\x0b\x5e\xd4\x1c\x7e\xb4\x2a\x1e\x83\x27\x0a\x7f\xf0\xe6", }, -{ "\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x77\xdd\x77\x02\x64\x6d\x55\xf0\x83\x65\xe4\x77\xd3\x59\x0e\xda", }, -{ "\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x4c\x02\x2a\xc6\x2b\x3c\xb7\x8d\x73\x9c\xc6\x7b\x3e\x20\xbb\x7e", }, -{ "\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x09\x2f\xa1\x37\xce\x18\xb5\xdf\xe7\x90\x6f\x55\x0b\xb1\x33\x70", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x3e\x0c\xda\xdf\x2e\x68\x35\x3c\x00\x27\x67\x2c\x97\x14\x4d\xd3", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd8\xc4\xb2\x00\xb3\x83\xfc\x1f\x2b\x2e\xa6\x77\x61\x8a\x1d\x27", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x11\x82\x5f\x99\xb0\xe9\xbb\x34\x77\xc1\xc0\x71\x3b\x01\x5a\xac", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf8\xb9\xff\xfb\x5c\x18\x7f\x7d\xdc\x7a\xb1\x0f\x4f\xb7\x75\x76", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xb4\xe8\x7a\x32\xb3\x7d\x6f\x2c\x83\x28\xd3\xb5\x37\x78\x02", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd2\x76\xc1\x3a\x5d\x22\x0f\x4d\xa9\x22\x4e\x74\x89\x63\x91\xce", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x94\xef\xe7\xa0\xe2\xe0\x31\xe2\x53\x6d\xa0\x1d\xf7\x99\xc9\x27", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8f\x8f\xd8\x22\x68\x0a\x85\x97\x4e\x53\xa5\xa8\xeb\x9d\x38\xde", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe0\xf0\xa9\x1b\x2e\x45\xf8\xcc\x37\xb7\x80\x5a\x30\x42\x58\x8d", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x59\x7a\x62\x52\x25\x5e\x46\xd6\x36\x4d\xbe\xed\xa3\x1e\x27\x9c", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf5\x1a\x0f\x69\x44\x42\xb8\xf0\x55\x71\x79\x7f\xec\x7e\xe8\xbf", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x9f\xf0\x71\xb1\x65\xb5\x19\x8a\x93\xdd\xde\xeb\xc5\x4d\x09\xb5", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc2\x0a\x19\xfd\x57\x58\xb0\xc4\xbc\x1a\x5d\xf8\x9c\xf7\x38\x77", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x97\x12\x01\x66\x30\x71\x19\xca\x22\x80\xe9\x31\x56\x68\xe9\x6f", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x4b\x3b\x9f\x1e\x09\x9c\x2a\x09\xdc\x09\x1e\x90\xe4\xf1\x8f\x0a", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xeb\x04\x0b\x89\x1d\x4b\x37\xf6\x85\x1f\x7e\xc2\x19\xcd\x3f\x6d", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x9f\x0f\xde\xc0\x8b\x7f\xd7\x9a\xa3\x95\x35\xbe\xa4\x2d\xb9\x2a", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x2e\x70\xf1\x68\xfc\x74\xbf\x91\x1d\xf2\x40\xbc\xd2\xce\xf2\x36", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x46\x2c\xcd\x7f\x5f\xd1\x10\x8d\xbc\x15\x2f\x3c\xac\xad\x32\x8b", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa4\xaf\x53\x4a\x7d\x0b\x64\x3a\x01\x86\x87\x85\xd8\x6d\xfb\x95", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xab\x98\x02\x96\x19\x7e\x1a\x50\x22\x32\x6c\x31\xda\x4b\xf6\xf3", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf9\x7d\x57\xb3\x33\x3b\x62\x81\xb0\x7d\x48\x6d\xb2\xd4\xe2\x0c", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf3\x3f\xa3\x67\x20\x23\x1a\xfe\x4c\x75\x9a\xde\x6b\xd6\x2e\xb6", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfd\xcf\xac\x0c\x02\xca\x53\x83\x43\xc6\x81\x17\xe0\xa1\x59\x38", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xad\x49\x16\xf5\xee\x57\x72\xbe\x76\x4f\xc0\x27\xb8\xa6\xe5\x39", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x2e\x16\x87\x3e\x16\x78\x61\x0d\x7e\x14\xc0\x2d\x00\x2e\xa8\x45", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x4e\x6e\x62\x7c\x1a\xcc\x51\x34\x00\x53\xa8\x23\x6d\x57\x95\x76", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xab\x0c\x84\x10\xae\xee\xad\x92\xfe\xec\x1e\xb4\x30\xd6\x52\xcb", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe8\x6f\x7e\x23\xe8\x35\xe1\x14\x97\x7f\x60\xe1\xa5\x92\x20\x2e", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe6\x8a\xd5\x05\x5a\x36\x70\x41\xfa\xde\x09\xd9\xa7\x0a\x79\x4b", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x07\x91\x82\x3a\x3c\x66\x6b\xb6\x16\x28\x25\xe7\x86\x06\xa7\xfe", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xdc\xca\x36\x6a\x9b\xf4\x7b\x7b\x86\x8b\x77\xe2\x5c\x18\xa3\x64", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x68\x4c\x9e\xfc\x23\x7e\x4a\x44\x29\x65\xf8\x4b\xce\x20\x24\x7a", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa8\x58\x41\x1f\xfb\xe6\x3f\xdb\x9c\x8a\xa1\xbf\xae\xd6\x7b\x52", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x04\xbc\x3d\xa2\x17\x9c\x30\x15\x49\x8b\x0e\x03\x91\x0d\xb5\xb8", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x40\x07\x1e\xea\xb3\xf9\x35\xdb\xc2\x5d\x00\x84\x14\x60\x26\x0f", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x0e\xbd\x7c\x30\xed\x20\x16\xe0\x8b\xa8\x06\xdd\xb0\x08\xbc\xc8", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x15\xc6\xbe\xcf\x0f\x4c\xec\x71\x29\xcb\xd2\x2d\x1a\x79\xb1\xb8", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x0a\xee\xde\x5b\x91\xf7\x21\x70\x0e\x9e\x62\xed\xbf\x60\xb7\x81", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x26\x65\x81\xaf\x0d\xcf\xbe\xd1\x58\x5e\x0a\x24\x2c\x64\xb8\xdf", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x66\x93\xdc\x91\x16\x62\xae\x47\x32\x16\xba\x22\x18\x9a\x51\x1a", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x76\x06\xfa\x36\xd8\x64\x73\xe6\xfb\x3a\x1b\xb0\xe2\xc0\xad\xf5", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x11\x20\x78\xe9\xe1\x1f\xbb\x78\xe2\x6f\xfb\x88\x99\xe9\x6b\x9a", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x40\xb2\x64\xe9\x21\xe9\xe4\xa8\x26\x94\x58\x9e\xf3\x79\x82\x62", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8d\x45\x95\xcb\x4f\xa7\x02\x67\x15\xf5\x5b\xd6\x8e\x28\x82\xf9", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb5\x88\xa3\x02\xbd\xbc\x09\x19\x7d\xf1\xed\xae\x68\x92\x6e\xd9", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x33\xf7\x50\x23\x90\xb8\xa4\xa2\x21\xcf\xec\xd0\x66\x66\x24\xba", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x3d\x20\x25\x3a\xdb\xce\x3b\xe2\x37\x37\x67\xc4\xd8\x22\xc5\x66", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa4\x27\x34\xa3\x92\x9b\xf8\x4c\xf0\x11\x6c\x98\x56\xa3\xc1\x8c", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe3\xab\xc4\x93\x94\x57\x42\x2b\xb9\x57\xda\x3c\x56\x93\x8c\x6d", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x97\x2b\xdd\x2e\x7c\x52\x51\x30\xfa\xdc\x8f\x76\xfc\x6f\x4b\x3f", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x84\xa8\x3d\x7b\x94\xc6\x99\xcb\xcb\x8a\x7d\x9b\x61\xf6\x40\x93", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xce\x61\xd6\x35\x14\xad\xed\x03\xd4\x3e\x6e\xbf\xc3\xa9\x00\x1f", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x6c\x83\x9d\xd5\x8e\xea\xe6\xb8\xa3\x6a\xf4\x8e\xd6\x3d\x2d\xc9", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xcd\x5e\xce\x55\xb8\xda\x3b\xf6\x22\xc4\x10\x0d\xf5\xde\x46\xf9", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x3b\x6f\x46\xf4\x0e\x0a\xc5\xfc\x0a\x9c\x11\x05\xf8\x00\xf4\x8d", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xba\x26\xd4\x7d\xa3\xae\xb0\x28\xde\x4f\xb5\xb3\xa8\x54\xa2\x4b", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x87\xf5\x3b\xf6\x20\xd3\x67\x72\x68\x44\x52\x12\x90\x43\x89\xd5", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x10\x61\x7d\x28\xb5\xe0\xf4\x60\x54\x92\xb1\x82\xa5\xd7\xf9\xf6", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x9a\xae\xc4\xfa\xbb\xf6\xfa\xe2\xa7\x1f\xef\xf0\x2e\x37\x2b\x39", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x3a\x90\xc6\x2d\x88\xb5\xc4\x28\x09\xab\xf7\x82\x48\x8e\xd1\x30", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf1\xf1\xc5\xa4\x08\x99\xe1\x57\x72\x85\x7c\xcb\x65\xc7\xa0\x9a", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x19\x08\x43\xd2\x9b\x25\xa3\x89\x7c\x69\x2c\xe1\xdd\x81\xee\x52", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa8\x66\xbc\x65\xb6\x94\x1d\x86\xe8\x42\x0a\x7f\xfb\x09\x64\xdb", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x81\x93\xc6\xff\x85\x22\x5c\xed\x42\x55\xe9\x2f\x6e\x07\x8a\x14", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x96\x61\xcb\x24\x24\xd7\xd4\xa3\x80\xd5\x47\xf9\xe7\xec\x1c\xb9", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x86\xf9\x3d\x9e\xc0\x84\x53\xa0\x71\xe2\xe2\x87\x78\x77\xa9\xc8", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x27\xee\xfa\x80\xce\x6a\x4a\x9d\x59\x8e\x3f\xec\x36\x54\x34\xd2", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd6\x20\x68\x44\x45\x78\xe3\xab\x39\xce\x7e\xc9\x5d\xd0\x45\xdc", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb5\xf7\x1d\x4d\xd9\xa7\x1f\xe5\xd8\xbc\x8b\xa7\xe6\xea\x30\x48", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x68\x25\xa3\x47\xac\x47\x9d\x4f\x9d\x95\xc5\xcb\x8d\x3f\xd7\xe9", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe3\x71\x4e\x94\xa5\x77\x89\x55\xcc\x03\x46\x35\x8e\x94\x78\x3a", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd8\x36\xb4\x4b\xb2\x9e\x0c\x7d\x89\xfa\x4b\x2d\x4b\x67\x7d\x2a", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x5d\x45\x4b\x75\x02\x1d\x76\xd4\xb8\x4f\x87\x3a\x8f\x87\x7b\x92", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc3\x49\x8f\x7e\xce\xd2\x09\x53\x14\xfc\x28\x11\x58\x85\xb3\x3f", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x6e\x66\x88\x56\x53\x9a\xd8\xe4\x05\xbd\x12\x3f\xe6\xc8\x85\x30", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x86\x80\xdb\x7f\x3a\x87\xb8\x60\x55\x43\xcf\xdb\xe6\x75\x40\x76", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x6c\x5d\x03\xb1\x30\x69\xc3\x65\x8b\x31\x79\xbe\x91\xb0\x80\x0c", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xef\x1b\x38\x4a\xc4\xd9\x3e\xda\x00\xc9\x2a\xdd\x09\x95\xea\x5f", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xbf\x81\x15\x80\x54\x71\x74\x1b\xd5\xad\x20\xa0\x39\x44\x79\x0f", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc6\x4c\x24\xb6\x89\x4b\x03\x8b\x3c\x0d\x09\xb1\xdf\x06\x8b\x0b", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x39\x67\xa1\x0c\xff\xe2\x7d\x01\x78\x54\x5f\xbf\x6a\x40\x54\x4b", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x7c\x85\xe9\xc9\x5d\xe1\xa9\xec\x5a\x53\x63\xa8\xa0\x53\x47\x2d", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa9\xee\xc0\x3c\x8a\xbe\xc7\xba\x68\x31\x5c\x2c\x8c\x23\x16\xe0", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xca\xc8\xe4\x14\xc2\xf3\x88\x22\x7a\xe1\x49\x86\xfc\x98\x35\x24", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x5d\x94\x2b\x7f\x46\x22\xce\x05\x6c\x3c\xe3\xce\x5f\x1d\xd9\xd6", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd2\x40\xd6\x48\xce\x21\xa3\x02\x02\x82\xc3\xf1\xb5\x28\xa0\xb6", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x45\xd0\x89\xc3\x6d\x5c\x5a\x4e\xfc\x68\x9e\x3b\x0d\xe1\x0d\xd5", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb4\xda\x5d\xf4\xbe\xcb\x54\x62\xe0\x3a\x0e\xd0\x0d\x29\x56\x29", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xdc\xf4\xe1\x29\x13\x6c\x1a\x4b\x7a\x0f\x38\x93\x5c\xc3\x4b\x2b", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd9\xa4\xc7\x61\x8b\x0c\xe4\x8a\x3d\x5a\xee\x1a\x1c\x01\x14\xc4", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xca\x35\x2d\xf0\x25\xc6\x5c\x7b\x0b\xf3\x06\xfb\xee\x0f\x36\xba", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x23\x8a\xca\x23\xfd\x34\x09\xf3\x8a\xf6\x33\x78\xed\x2f\x54\x73", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x59\x83\x6a\x0e\x06\xa7\x96\x91\xb3\x66\x67\xd5\x38\x0d\x81\x88", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x33\x90\x50\x80\xf7\xac\xf1\xcd\xae\x0a\x91\xfc\x3e\x85\xae\xe4", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x72\xc9\xe4\x64\x6d\xbc\x3d\x63\x20\xfc\x66\x89\xd9\x3e\x88\x33", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xba\x77\x41\x3d\xea\x59\x25\xb7\xf5\x41\x7e\xa4\x7f\xf1\x9f\x59", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x6c\xae\x81\x29\xf8\x43\xd8\x6d\xc7\x86\xa0\xfb\x1a\x18\x49\x70", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfc\xfe\xfb\x53\x41\x00\x79\x6e\xeb\xbd\x99\x02\x06\x75\x4e\x19", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8c\x79\x1d\x5f\xdd\xdf\x47\x0d\xa0\x4f\x3e\x6d\xc4\xa5\xb5\xb5", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc9\x3b\xbd\xc0\x7a\x46\x11\xae\x4b\xb2\x66\xea\x50\x34\xa3\x87", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc1\x02\xe3\x8e\x48\x9a\xa7\x47\x62\xf3\xef\xc5\xbb\x23\x20\x5a", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x93\x20\x14\x81\x66\x5c\xba\xfc\x1f\xcc\x22\x0b\xc5\x45\xfb\x3d", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x49\x60\x75\x7e\xc6\xce\x68\xcf\x19\x5e\x45\x4c\xfd\x0f\x32\xca", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfe\xec\x7c\xe6\xa6\xcb\xd0\x7c\x04\x34\x16\x73\x7f\x1b\xbb\x33", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x11\xc5\x41\x39\x04\x48\x7a\x80\x5d\x70\xa8\xed\xd9\xc3\x55\x27", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x34\x78\x46\xb2\xb2\xe3\x6f\x1f\x03\x24\xc8\x6f\x7f\x1b\x98\xe2", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x33\x2e\xee\x1a\x0c\xbd\x19\xca\x2d\x69\xb4\x26\x89\x40\x44\xf0", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x86\x6b\x5b\x39\x77\xba\x6e\xfa\x51\x28\xef\xbd\xa9\xff\x03\xcd", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xcc\x14\x45\xee\x94\xc0\xf0\x8c\xde\xe5\xc3\x44\xec\xd1\xe2\x33", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xbe\x28\x83\x19\x02\x93\x63\xc2\x62\x2f\xeb\xa4\xb0\x5d\xfd\xfe", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xcf\xd1\x87\x55\x23\xf3\xcd\x21\xc3\x95\x65\x1e\x6e\xe1\x5e\x56", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xcb\x5a\x40\x86\x57\x83\x7c\x53\xbf\x16\xf9\xd8\x46\x5d\xce\x19", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xca\x0b\xf4\x2c\xb1\x07\xf5\x5c\xcf\xf2\xfc\x09\xee\x08\xca\x15", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfd\xd9\xbb\xb4\xa7\xdc\x2e\x4a\x23\x53\x6a\x58\x80\xa2\xdb\x67", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xed\xe4\x47\xb3\x62\xc4\x84\x99\x3d\xec\x94\x42\xa3\xb4\x6a\xef", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x10\xdf\xfb\x05\x90\x4b\xff\x7c\x47\x81\xdf\x78\x0a\xd2\x68\x37", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc3\x3b\xc1\x3e\x8d\xe8\x8a\xc2\x52\x32\xaa\x74\x96\x39\x87\x83", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xca\x35\x9c\x70\x80\x3a\x3b\x2a\x3d\x54\x2e\x87\x81\xde\xa9\x75", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xbc\xc6\x5b\x52\x6f\x88\xd0\x5b\x89\xce\x8a\x52\x02\x1f\xdb\x06", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xdb\x91\xa3\x88\x55\xc8\xc4\x64\x38\x51\xfb\xfb\x35\x8b\x01\x09", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xca\x6e\x88\x93\xa1\x14\xae\x8e\x27\xd5\xab\x03\xa5\x49\x96\x10", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x66\x29\xd2\xb8\xdf\x97\xda\x72\x8c\xdd\x8b\x1e\x7f\x94\x50\x77", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x45\x70\xa5\xa1\x8c\xfc\x0d\xd5\x82\xf1\xd8\x8d\x5c\x9a\x17\x20", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x72\xbc\x65\xaa\x8e\x89\x56\x2e\x3f\x27\x4d\x45\xaf\x1c\xd1\x0b", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x98\x55\x1d\xa1\xa6\x50\x32\x76\xae\x1c\x77\x62\x5f\x9e\xa6\x15", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x0d\xdf\xe5\x1c\xed\x7e\x3f\x4a\xe9\x27\xda\xa3\xfe\x45\x2c\xee", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xdb\x82\x62\x51\xe4\xce\x38\x4b\x80\x21\x8b\x0e\x1d\xa1\xdd\x4c", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x2c\xac\xf7\x28\xb8\x8a\xbb\xad\x70\x11\xed\x0e\x64\xa1\x68\x0c", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x33\x0d\x8e\xe7\xc5\x67\x7e\x09\x9a\xc7\x4c\x99\x94\xee\x4c\xfb", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xed\xf6\x1a\xe3\x62\xe8\x82\xdd\xc0\x16\x74\x74\xa7\xa7\x7f\x3a", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x61\x68\xb0\x0b\xa7\x85\x9e\x09\x70\xec\xfd\x75\x7e\xfe\xcf\x7c", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd1\x41\x54\x47\x86\x62\x30\xd2\x8b\xb1\xea\x18\xa4\xcd\xfd\x02", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x51\x61\x83\x39\x2f\x7a\x87\x63\xaf\xec\x68\xa0\x60\x26\x41\x41", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x77\x56\x5c\x8d\x73\xcf\xd4\x13\x0b\x4a\xa1\x4d\x89\x11\x71\x0f", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x37\x23\x2a\x4e\xd2\x1c\xcc\x27\xc1\x9c\x96\x10\x07\x8c\xab\xac", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x80\x4f\x32\xea\x71\x82\x8c\x7d\x32\x90\x77\xe7\x12\x23\x16\x66", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd6\x44\x24\xf2\x3c\xb9\x72\x15\xe9\xc2\xc6\xf2\x8d\x29\xea\xb7", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x02\x3e\x82\xb5\x33\xf6\x8c\x75\xc2\x38\xce\xbd\xb2\xee\x89\xa2", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x19\x3a\x3d\x24\x15\x7a\x51\xf1\xee\x08\x93\xf6\x77\x74\x17\xe7", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x84\xec\xac\xfc\xd4\x00\x08\x4d\x07\x86\x12\xb1\x94\x5f\x2e\xf5", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1d\xcd\x8b\xb1\x73\x25\x9e\xb3\x3a\x52\x42\xb0\xde\x31\xa4\x55", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x35\xe9\xed\xdb\xc3\x75\xe7\x92\xc1\x99\x92\xc1\x91\x65\x01\x2b", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8a\x77\x22\x31\xc0\x1d\xfd\xd7\xc9\x8e\x4c\xfd\xdc\xc0\x80\x7a", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x6e\xda\x7f\xf6\xb8\x31\x91\x80\xff\x0d\x6e\x65\x62\x9d\x01\xc3", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc2\x67\xef\x0e\x2d\x01\xa9\x93\x94\x4d\xd3\x97\x10\x14\x13\xcb", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe9\xf8\x0e\x9d\x84\x5b\xcc\x0f\x62\x92\x6a\xf7\x2e\xab\xca\x39", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x67\x02\x99\x07\x27\xaa\x08\x78\x63\x7b\x45\xdc\xd3\xa3\xb0\x74", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x2e\x2e\x64\x7d\x53\x60\xe0\x92\x30\xa5\xd7\x38\xca\x33\x47\x1e", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1f\x56\x41\x3c\x7a\xdd\x6f\x43\xd1\xd5\x6e\x4f\x02\x19\x03\x30", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x69\xcd\x06\x06\xe1\x5a\xf7\x29\xd6\xbc\xa1\x43\x01\x6d\x98\x42", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa0\x85\xd7\xc1\xa5\x00\x87\x3a\x20\x09\x9c\x4c\xaa\x3c\x3f\x5b", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x4f\xc0\xd2\x30\xf8\x89\x14\x15\xb8\x7b\x83\xf9\x5f\x2e\x09\xd1", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x43\x27\xd0\x8c\x52\x3d\x8e\xba\x69\x7a\x43\x36\x50\x7d\x1f\x42", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x7a\x15\xaa\xb8\x27\x01\xef\xa5\xae\x36\xab\x1d\x6b\x76\x29\x0f", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x5b\xf0\x05\x18\x93\xa1\x8b\xb3\x0e\x13\x9a\x58\xfe\xd0\xfa\x54", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x97\xe8\xad\xf6\x56\x38\xfd\x9c\xdf\x3b\xc2\x2c\x17\xfe\x4d\xbd", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1e\xe6\xee\x32\x65\x83\xa0\x58\x64\x91\xc9\x64\x18\xd1\xa3\x5d", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x26\xb5\x49\xc2\xec\x75\x6f\x82\xec\xc4\x80\x08\xe5\x29\x95\x6b", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x70\x37\x7b\x6d\xa6\x69\xb0\x72\x12\x9e\x05\x7c\xc2\x8e\x9c\xa5", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x9c\x94\xb8\xb0\xcb\x8b\xcc\x91\x90\x72\x26\x2b\x3f\xa0\x5a\xd9", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x2f\xbb\x83\xdf\xd0\xd7\xab\xcb\x05\xcd\x28\xca\xd2\xdf\xb5\x23", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x96\x87\x78\x03\xde\x77\x74\x4b\xb9\x70\xd0\xa9\x1f\x4d\xeb\xae", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x73\x79\xf3\x37\x0c\xf6\xe5\xce\x12\xae\x59\x69\xc8\xee\xa3\x12", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x02\xdc\x99\xfa\x3d\x4f\x98\xce\x80\x98\x5e\x72\x33\x88\x93\x13", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1e\x38\xe7\x59\x07\x5b\xa5\xca\xb6\x45\x7d\xa5\x18\x44\x29\x5a", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x70\xbe\xd8\xdb\xf6\x15\x86\x8a\x1f\x9d\x9b\x05\xd3\xe7\xa2\x67", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x23\x4b\x14\x8b\x8c\xb1\xd8\xc3\x2b\x28\x7e\x89\x69\x03\xd1\x50", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x29\x4b\x03\x3d\xf4\xda\x85\x3f\x4b\xe3\xe2\x43\xf7\xe5\x13\xf4", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x3f\x58\xc9\x50\xf0\x36\x71\x60\xad\xec\x45\xf2\x44\x1e\x74\x11", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x37\xf6\x55\x53\x6a\x70\x4e\x5a\xce\x18\x2d\x74\x2a\x82\x0c\xf4", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xea\x7b\xd6\xbb\x63\x41\x87\x31\xae\xac\x79\x0f\xe4\x2d\x61\xe8", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe7\x4a\x4c\x99\x9b\x4c\x06\x4e\x48\xbb\x1e\x41\x3f\x51\xe5\xea", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xba\x9e\xbe\xfd\xb4\xcc\xf3\x0f\x29\x6c\xec\xb3\xbc\x19\x43\xe8", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x31\x94\x36\x7a\x48\x98\xc5\x02\xc1\x3b\xb7\x47\x86\x40\xa7\x2d", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xda\x79\x77\x13\x26\x3d\x6f\x33\xa5\x47\x8a\x65\xef\x60\xd4\x12", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd1\xac\x39\xbb\x1e\xf8\x6b\x9c\x13\x44\xf2\x14\x67\x9a\xa3\x76", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x2f\xde\xa9\xe6\x50\x53\x2b\xe5\xbc\x0e\x73\x25\x33\x7f\xd3\x63", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd3\xa2\x04\xdb\xd9\xc2\xaf\x15\x8b\x6c\xa6\x7a\x51\x56\xce\x4a", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x3a\x0a\x0e\x75\xa8\xda\x36\x73\x5a\xee\x66\x84\xd9\x65\xa7\x78", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x52\xfc\x3e\x62\x04\x92\xea\x99\x64\x1e\xa1\x68\xda\x5b\x6d\x52", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd2\xe0\xc7\xf1\x5b\x47\x72\x46\x7d\x2c\xfc\x87\x30\x00\xb2\xca", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x56\x35\x31\x13\x5e\x0c\x4d\x70\xa3\x8f\x8b\xdb\x19\x0b\xa0\x4e", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa8\xa3\x9a\x0f\x56\x63\xf4\xc0\xfe\x5f\x2d\x3c\xaf\xff\x42\x1a", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd9\x4b\x5e\x90\xdb\x35\x4c\x1e\x42\xf6\x1f\xab\xe1\x67\xb2\xc0", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x50\xe6\xd3\xc9\xb6\x69\x8a\x7c\xd2\x76\xf9\x6b\x14\x73\xf3\x5a", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x93\x38\xf0\x8e\x0e\xbe\xe9\x69\x05\xd8\xf2\xe8\x25\x20\x8f\x43", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8b\x37\x8c\x86\x67\x2a\xa5\x4a\x3a\x26\x6b\xa1\x9d\x25\x80\xca", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xcc\xa7\xc3\x08\x6f\x5f\x95\x11\xb3\x12\x33\xda\x7c\xab\x91\x60", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x5b\x40\xff\x4e\xc9\xbe\x53\x6b\xa2\x30\x35\xfa\x4f\x06\x06\x4c", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x60\xeb\x5a\xf8\x41\x6b\x25\x71\x49\x37\x21\x94\xe8\xb8\x87\x49", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x2f\x00\x5a\x8a\xed\x8a\x36\x1c\x92\xe4\x40\xc1\x55\x20\xcb\xd1", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x7b\x03\x62\x76\x11\x67\x8a\x99\x77\x17\x57\x88\x07\xa8\x00\xe2", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xcf\x78\x61\x8f\x74\xf6\xf3\x69\x6e\x0a\x47\x79\xb9\x0b\x5a\x77", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x03\x72\x03\x71\xa0\x49\x62\xea\xea\x0a\x85\x2e\x69\x97\x28\x58", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1f\x8a\x81\x33\xaa\x8c\xcf\x70\xe2\xbd\x32\x85\x83\x1c\xa6\xb7", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x27\x93\x6b\xd2\x7f\xb1\x46\x8f\xc8\xb4\x8b\xc4\x83\x32\x17\x25", }, -{ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb0\x7d\x4f\x3e\x2c\xd2\xef\x2e\xb5\x45\x98\x07\x54\xdf\xea\x0f", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xdd\xc6\xbf\x79\x0c\x15\x76\x0d\x8d\x9a\xeb\x6f\x9a\x75\xfd\x4e", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x0a\x6b\xdc\x6d\x4c\x1e\x62\x80\x30\x1f\xd8\xe9\x7d\xdb\xe6\x01", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x9b\x80\xee\xfb\x7e\xbe\x2d\x2b\x16\x24\x7a\xa0\xef\xc7\x2f\x5d", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x7f\x2c\x5e\xce\x07\xa9\x8d\x8b\xee\x13\xc5\x11\x77\x39\x5f\xf7", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x78\x18\xd8\x00\xdc\xf6\xf4\xbe\x1e\x0e\x94\xf4\x03\xd1\xe4\xc2", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe7\x4c\xd1\xc9\x2f\x09\x19\xc3\x5a\x03\x24\x12\x3d\x61\x77\xd3", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x80\x92\xa4\xdc\xf2\xda\x7e\x77\xe9\x3b\xdd\x37\x1d\xfe\xd8\x2e", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x49\xaf\x6b\x37\x21\x35\xac\xef\x10\x13\x2e\x54\x8f\x21\x7b\x17", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8b\xcd\x40\xf9\x4e\xbb\x63\xb9\xf7\x90\x96\x76\xe6\x67\xf1\xe7", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfe\x1c\xff\xb8\x3f\x45\xdc\xfb\x38\xb2\x9b\xe4\x38\xdb\xd3\xab", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x0d\xc5\x8a\x8d\x88\x66\x23\x70\x5a\xec\x15\xcb\x1e\x70\xdc\x0e", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc2\x18\xfa\xa1\x60\x56\xbd\x07\x74\xc3\xe8\xd7\x9c\x35\xa5\xe4", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x04\x7b\xba\x83\xf7\xaa\x84\x17\x31\x50\x4e\x01\x22\x08\xfc\x9e", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xdc\x8f\x0e\x49\x15\xfd\x81\xba\x70\xa3\x31\x31\x08\x82\xf6\xda", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x15\x69\x85\x9e\xa6\xb7\x20\x6c\x30\xbf\x4f\xd0\xcb\xfa\xc3\x3c", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x30\x0a\xde\x92\xf8\x8f\x48\xfa\x2d\xf7\x30\xec\x16\xef\x44\xcd", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1f\xe6\xcc\x3c\x05\x96\x5d\xc0\x8e\xb0\x59\x0c\x95\xac\x71\xd0", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x59\xe8\x58\xea\xaa\x97\xfe\xc3\x81\x11\x27\x5b\x6c\xf5\xab\xc0", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x22\x39\x45\x5e\x7a\xfe\x3b\x06\x16\x10\x02\x88\xcc\x5a\x72\x3b", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x3e\xe5\x00\xc5\xc8\xd6\x34\x79\x71\x71\x63\xe5\x5c\x5c\x45\x22", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xd5\xe3\x8b\xf1\x5f\x16\xd9\x0e\x3e\x21\x40\x41\xd7\x74\xda\xa8", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb1\xf4\x06\x6e\x6f\x4f\x18\x7d\xfe\x5f\x2a\xd1\xb1\x78\x19\xd0", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x6e\xf4\xcc\x4d\xe4\x9b\x11\x06\x5d\x7a\xf2\x90\x98\x54\x79\x4a", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xac\x86\xbc\x60\x6b\x66\x40\xc3\x09\xe7\x82\xf2\x32\xbf\x36\x7f", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x36\xaf\xf0\xef\x7b\xf3\x28\x07\x72\xcf\x4c\xac\x80\xa0\xd2\xb2", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1f\x8e\xed\xea\x0f\x62\xa1\x40\x6d\x58\xcf\xc3\xec\xea\x72\xcf", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xab\xf4\x15\x4a\x33\x75\xa1\xd3\xe6\xb1\xd4\x54\x43\x8f\x95\xa6", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x96\xf9\x6e\x9d\x60\x7f\x66\x15\xfc\x19\x20\x61\xee\x64\x8b\x07", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xcf\x37\xcd\xaa\xa0\xd2\xd5\x36\xc7\x18\x57\x63\x4c\x79\x20\x64", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xfb\xd6\x64\x0c\x80\x24\x5c\x2b\x80\x53\x73\xf1\x30\x70\x31\x27", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x8d\x6a\x8a\xfe\x55\xa6\xe4\x81\xba\xda\xe0\xd1\x46\xf4\x36\xdb", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x6a\x49\x81\xf2\x91\x5e\x3e\x68\xaf\x6c\x22\x38\x5d\xd0\x67\x56", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x42\xa1\x13\x6e\x5f\x8d\x8d\x21\xd3\x10\x19\x98\x64\x2d\x57\x3b", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x9b\x47\x15\x96\xdc\x69\xae\x15\x86\xce\xe6\x15\x8b\x0b\x01\x81", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x75\x36\x65\xc4\xaf\x1e\xff\x33\xaa\x8b\x62\x8b\xf8\x74\x1c\xfd", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x9a\x68\x2a\xcf\x40\xbe\x01\xf5\xb2\xa4\x19\x3c\x9a\x82\x40\x4d", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x54\xfa\xfe\x26\xe4\x28\x7f\x17\xd1\x93\x5f\x87\xeb\x9a\xde\x01", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x49\xd5\x41\xb2\xe7\x4c\xfe\x73\xe6\xa8\xe8\x22\x5f\x7b\xd4\x49", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x11\xa4\x55\x30\xf6\x24\xff\x6f\x76\xa1\xb3\x82\x66\x26\xff\x7b", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xf9\x6b\x0c\x4a\x8b\xc6\xc8\x61\x30\x28\x9f\x60\xb4\x3b\x8f\xba", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x48\xc7\xd0\xe8\x08\x34\xeb\xdc\x35\xb6\x73\x5f\x76\xb4\x6c\x8b", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x24\x63\x53\x1a\xb5\x4d\x66\x95\x5e\x73\xed\xc4\xcb\x8e\xaa\x45", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xac\x9b\xd8\xe2\x53\x04\x69\x13\x4b\x9d\x5b\x06\x5d\x4f\x56\x5b", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x3f\x5f\x91\x06\xd0\xe5\x2f\x97\x3d\x48\x90\xe6\xf3\x7e\x8a\x00", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x20\xeb\xc8\x6f\x13\x04\xd2\x72\xe2\xe2\x07\xe5\x9d\xb6\x39\xf0", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xe6\x7a\xe6\x42\x6b\xf9\x52\x6c\x97\x2c\xff\x07\x2b\x52\x25\x2c", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x1a\x51\x8d\xdd\xaf\x9e\xfa\x0d\x00\x2c\xc5\x8d\x10\x7e\xdf\xc8", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xea\xd7\x31\xaf\x4d\x3a\x2f\xe3\xb3\x4b\xed\x04\x79\x42\xa4\x9f", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xb1\xd4\xef\xe4\x02\x42\xf8\x3e\x93\xb6\xc8\xd7\xef\xb5\xea\xe9", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xcd\x2b\x1f\xec\x11\xfd\x90\x6c\x5c\x76\x30\x09\x94\x43\x61\x0a", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xa1\x85\x3f\xe4\x7f\xe2\x92\x89\xd1\x53\x16\x1d\x06\x38\x7d\x21", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\x46\x32\x15\x41\x79\xa5\x55\xc1\x7e\xa6\x04\xd0\x88\x9f\xab\x14", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xdd\x27\xca\xc6\x40\x1a\x02\x2e\x8f\x38\xf9\xf9\x3e\x77\x44\x17", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc0\x90\x31\x3e\xb9\x86\x74\xf3\x5f\x31\x23\x38\x5f\xb9\x5d\x4d", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xcc\x35\x26\x26\x2b\x92\xf0\x2e\xdc\xe5\x48\xf7\x16\xb9\xf4\x5c", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xc0\x83\x8d\x1a\x2b\x16\xa7\xc7\xf0\xdf\xcc\x43\x3c\x39\x9c\x33", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00", "\x0d\x9a\xc7\x56\xeb\x29\x76\x95\xee\xd4\xd3\x82\xeb\x12\x6d\x26", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00", "\x56\xed\xe9\xdd\xa3\xf6\xf1\x41\xbf\xf1\x75\x7f\xa6\x89\xc3\xe1", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00", "\x76\x8f\x52\x0e\xfe\x0f\x23\xe6\x1d\x3e\xc8\xad\x9c\xe9\x17\x74", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00", "\xb1\x14\x4d\xdf\xa7\x57\x55\x21\x33\x90\xe7\xc5\x96\x66\x04\x90", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00", "\x1d\x7c\x0c\x40\x40\xb3\x55\xb9\xd1\x07\xa9\x93\x25\xe3\xb0\x50", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00", "\xd8\xe2\xbb\x1a\xe8\xee\x3d\xcf\x5b\xf7\xd6\xc3\x8d\xa8\x2a\x1a", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00", "\xfa\xf8\x2d\x17\x8a\xf2\x5a\x98\x86\xa4\x7e\x7f\x78\x9b\x98\xd7", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00", "\x9b\x58\xdb\xfd\x77\xfe\x5a\xca\x9c\xfc\x19\x0c\xd1\xb8\x2d\x19", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00", "\x77\xf3\x92\x08\x90\x42\xe4\x78\xac\x16\xc0\xc8\x6a\x0b\x5d\xb5", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00", "\x19\xf0\x8e\x34\x20\xee\x69\xb4\x77\xca\x14\x20\x28\x1c\x47\x82", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00", "\xa1\xb1\x9b\xee\xe4\xe1\x17\x13\x9f\x74\xb3\xc5\x3f\xdc\xb8\x75", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00", "\xa3\x7a\x58\x69\xb2\x18\xa9\xf3\xa0\x86\x8d\x19\xae\xa0\xad\x6a", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00", "\xbc\x35\x94\xe8\x65\xbc\xd0\x26\x1b\x13\x20\x27\x31\xf3\x35\x80", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00", "\x81\x14\x41\xce\x1d\x30\x9e\xee\x71\x85\xe8\xc7\x52\xc0\x75\x57", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00", "\x95\x99\x71\xce\x41\x34\x19\x05\x63\x51\x8e\x70\x0b\x98\x74\xd1", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00", "\x76\xb5\x61\x4a\x04\x27\x07\xc9\x8e\x21\x32\xe2\xe8\x05\xfe\x63", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00", "\x7d\x9f\xa6\xa5\x75\x30\xd0\xf0\x36\xfe\xc3\x1c\x23\x0b\x0c\xc6", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00", "\x96\x41\x53\xa8\x3b\xf6\x98\x9a\x4b\xa8\x0d\xaa\x91\xc3\xe0\x81", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00", "\xa0\x13\x01\x4d\x4c\xe8\x05\x4c\xf2\x59\x1d\x06\xf6\xf2\xf1\x76", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00", "\xd1\xc5\xf6\x39\x9b\xf3\x82\x50\x2e\x38\x5e\xee\x14\x74\xa8\x69", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00", "\x00\x07\xe2\x0b\x82\x98\xec\x35\x4f\x0f\x5f\xe7\x47\x0f\x36\xbd", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00", "\xb9\x5b\xa0\x5b\x33\x2d\xa6\x1e\xf6\x3a\x2b\x31\xfc\xad\x98\x79", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00", "\x46\x20\xa4\x9b\xd9\x67\x49\x15\x61\x66\x9a\xb2\x5d\xce\x45\xf4", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00", "\x12\xe7\x12\x14\xae\x8e\x04\xf0\xbb\x63\xd7\x42\x5c\x6f\x14\xd5", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00", "\x4c\xc4\x2f\xc1\x40\x7b\x00\x8f\xe3\x50\x90\x7c\x09\x2e\x80\xac", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00", "\x08\xb2\x44\xce\x7c\xbc\x8e\xe9\x7f\xbb\xa8\x08\xcb\x14\x6f\xda", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00", "\x39\xb3\x33\xe8\x69\x4f\x21\x54\x6a\xd1\xed\xd9\xd8\x7e\xd9\x5b", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00", "\x3b\x27\x1f\x8a\xb2\xe6\xe4\xa2\x0b\xa8\x09\x0f\x43\xba\x78\xf3", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00", "\x9a\xd9\x83\xf3\xbf\x65\x1c\xd0\x39\x3f\x0a\x73\xcc\xcd\xea\x50", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00", "\x8f\x47\x6c\xbf\xf7\x5c\x1f\x72\x5c\xe1\x8e\x4b\xbc\xd1\x9b\x32", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00", "\x90\x5b\x62\x67\xf1\xd6\xab\x53\x20\x83\x5a\x13\x3f\x09\x6f\x2a", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00", "\x14\x5b\x60\xd6\xd0\x19\x3c\x23\xf4\x22\x18\x48\xa8\x92\xd6\x1a", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00", "\x55\xcf\xb3\xfb\x6d\x75\xca\xd0\x44\x5b\xbc\x8d\xaf\xa2\x5b\x0f", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00", "\x7b\x8e\x70\x98\xe3\x57\xef\x71\x23\x7d\x46\xd8\xb0\x75\xb0\xf5", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00", "\x2b\xf2\x72\x29\x90\x1e\xb4\x0f\x2d\xf9\xd8\x39\x8d\x15\x05\xae", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00", "\x83\xa6\x34\x02\xa7\x7f\x9a\xd5\xc1\xe9\x31\xa9\x31\xec\xd7\x06", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00", "\x6f\x8b\xa6\x52\x11\x52\xd3\x1f\x2b\xad\xa1\x84\x3e\x26\xb9\x73", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00", "\xe5\xc3\xb8\xe3\x0f\xd2\xd8\xe6\x23\x9b\x17\xb4\x4b\xd2\x3b\xbd", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00", "\x1a\xc1\xf7\x10\x2c\x59\x93\x3e\x8b\x2d\xdc\x3f\x14\xe9\x4b\xaa", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00", "\x21\xd9\xba\x49\xf2\x76\xb4\x5f\x11\xaf\x8f\xc7\x1a\x08\x8e\x3d", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00", "\x64\x9f\x1c\xdd\xc3\x79\x2b\x46\x38\x63\x5a\x39\x2b\xc9\xba\xde", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00", "\xe2\x77\x5e\x4b\x59\xc1\xbc\x2e\x31\xa2\x07\x8c\x11\xb5\xa0\x8c", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00", "\x2b\xe1\xfa\xe5\x04\x8a\x25\x58\x2a\x67\x9c\xa1\x09\x05\xeb\x80", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00", "\xda\x86\xf2\x92\xc6\xf4\x1e\xa3\x4f\xb2\x06\x8d\xf7\x5e\xcc\x29", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00", "\x22\x0d\xf1\x9f\x85\xd6\x9b\x1b\x56\x2f\xa6\x9a\x3c\x5b\xec\xa5", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00", "\x1f\x11\xd5\xd0\x35\x5e\x0b\x55\x6c\xcd\xb6\xc7\xf5\x08\x3b\x4d", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00", "\x62\x52\x6b\x78\xbe\x79\xcb\x38\x46\x33\xc9\x1f\x83\xb4\x15\x1b", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00", "\x90\xdd\xbc\xb9\x50\x84\x35\x92\xdd\x47\xbb\xef\x00\xfd\xc8\x76", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00", "\x2f\xd0\xe4\x1c\x5b\x84\x02\x27\x73\x54\xa7\x39\x1d\x26\x18\xe2", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00", "\x3c\xdf\x13\xe7\x2d\xee\x4c\x58\x1b\xaf\xec\x70\xb8\x5f\x96\x60", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00", "\xaf\xa2\xff\xc1\x37\x57\x70\x92\xe2\xb6\x54\xfa\x19\x9d\x2c\x43", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00", "\x8d\x68\x3e\xe6\x3e\x60\xd2\x08\xe3\x43\xce\x48\xdb\xc4\x4c\xac", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00", "\x70\x5a\x4e\xf8\xba\x21\x33\x72\x9c\x20\x18\x5c\x3d\x3a\x47\x63", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00", "\x08\x61\xa8\x61\xc3\xdb\x4e\x94\x19\x42\x11\xb7\x7e\xd7\x61\xb9", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00", "\x4b\x00\xc2\x7e\x8b\x26\xda\x7e\xab\x9d\x3a\x88\xde\xc8\xb0\x31", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00", "\x5f\x39\x7b\xf0\x30\x84\x82\x0c\xc8\x81\x0d\x52\xe5\xb6\x66\xe9", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00", "\x63\xfa\xfa\xbb\x72\xc0\x7b\xfb\xd3\xdd\xc9\xb1\x20\x31\x04\xb8", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00", "\x68\x3e\x21\x40\x58\x5b\x18\x45\x2d\xd4\xff\xbb\x93\xc9\x5d\xf9", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00", "\x28\x68\x94\xe4\x8e\x53\x7f\x87\x63\xb5\x67\x07\xd7\xd1\x55\xc8", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00", "\xa4\x23\xde\xab\xc1\x73\xdc\xf7\xe2\xc4\xc5\x3e\x77\xd3\x7c\xd1", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00", "\xeb\x81\x68\x31\x3e\x1c\xfd\xfd\xb5\xe9\x86\xd5\x42\x9c\xf1\x72", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00", "\x27\x12\x7d\xaa\xfc\x9a\xcc\xd2\xfb\x33\x4e\xc3\xeb\xa5\x23\x23", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00", "\xee\x07\x15\xb9\x6f\x72\xe3\xf7\xa2\x2a\x50\x64\xfc\x59\x2f\x4c", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00", "\x29\xee\x52\x67\x70\xf2\xa1\x1d\xcf\xa9\x89\xd1\xce\x88\x83\x0f", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80", "\x04\x93\x37\x0e\x05\x4b\x09\x87\x11\x30\xfe\x49\xaf\x73\x0a\x5a", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0", "\x9b\x7b\x94\x0f\x6c\x50\x9f\x9e\x44\xa4\xee\x14\x04\x48\xee\x46", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0", "\x29\x15\xbe\x4a\x1e\xcf\xdc\xbe\x3e\x02\x38\x11\xa1\x2b\xb6\xc7", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0", "\x72\x40\xe5\x24\xbc\x51\xd8\xc4\xd4\x40\xb1\xbe\x55\xd1\x06\x2c", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8", "\xda\x63\x03\x9d\x38\xcb\x46\x12\xb2\xdc\x36\xba\x26\x68\x4b\x93", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc", "\x0f\x59\xcb\x5a\x4b\x52\x2e\x2a\xc5\x6c\x1a\x64\xf5\x58\xad\x9a", }, -{ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe", "\x7b\xfe\x9d\x87\x6c\x6d\x63\xc1\xd0\x35\xda\x8f\xe2\x1c\x40\x9d", }, -}; - - -static void AES128_testRun(void) -{ - uint32_t buf[4]; - BlockCipher *c = AES128_stackinit(); - for (size_t i=0;ikey); - - memcpy(buf, t->pt, 16); - cipher_ecb_encrypt(c, buf); - ASSERT(memcmp(buf, t->ct, 16) == 0); - cipher_ecb_decrypt(c, buf); - ASSERT(memcmp(buf, t->pt, 16) == 0); - } - - uint8_t data[16]; - memset(data, 0, 16); - cipher_set_key(c, "0123456789ABCDEF"); - for (int i=0;i<1000;++i) cipher_ecb_encrypt(c, data); - for (int i=0;i<1000;++i) cipher_ecb_decrypt(c, data); - ASSERT(memcmp(data, "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 16) == 0); -} - -static void AES192_testRun(void) -{ - uint32_t buf[4]; - BlockCipher *c = AES192_stackinit(); - for (size_t i=0;ikey); - - memcpy(buf, t->pt, 16); - cipher_ecb_encrypt(c, buf); - ASSERT(memcmp(buf, t->ct, 16) == 0); - cipher_ecb_decrypt(c, buf); - ASSERT(memcmp(buf, t->pt, 16) == 0); - } - - uint8_t data[16]; - memset(data, 0, 16); - cipher_set_key(c, "0123456789ABCDEF01234567"); - for (int i=0;i<1000;++i) cipher_ecb_encrypt(c, data); - for (int i=0;i<1000;++i) cipher_ecb_decrypt(c, data); - ASSERT(memcmp(data, "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 16) == 0); -} - -static void AES256_testRun(void) -{ - uint32_t buf[4]; - BlockCipher *c = AES256_stackinit(); - for (size_t i=0;ikey); - - memcpy(buf, t->pt, 16); - cipher_ecb_encrypt(c, buf); - ASSERT(memcmp(buf, t->ct, 16) == 0); - cipher_ecb_decrypt(c, buf); - ASSERT(memcmp(buf, t->pt, 16) == 0); - } - - uint8_t data[16]; - memset(data, 0, 16); - cipher_set_key(c, "0123456789ABCDEF0123456789ABCDEF"); - for (int i=0;i<1000;++i) cipher_ecb_encrypt(c, data); - for (int i=0;i<1000;++i) cipher_ecb_decrypt(c, data); - ASSERT(memcmp(data, "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 16) == 0); -} - -int AES_testRun(void) -{ - AES128_testRun(); - AES192_testRun(); - AES256_testRun(); - - //BlockCipher *c = AES192_stackinit(); - //cipher_set_key(c, "\x8e\x73\xb0\xf7\xda\x0e\x64\x52\xc8\x10\xf3\x2b\x80\x90\x79\xe5\x62\xf8\xea\xd2\x52\x2c\x6b\x7b"); - - // This is the step-by-step example in FIPS-197 - BlockCipher *c = AES128_stackinit(); - uint8_t data[] = { "\x32\x43\xf6\xa8\x88\x5a\x30\x8d\x31\x31\x98\xa2\xe0\x37\x07\x34" }; - cipher_set_key(c, "\x2b\x7e\x15\x16\x28\xae\xd2\xa6\xab\xf7\x15\x88\x09\xcf\x4f\x3c"); - cipher_ecb_encrypt(c, data); - ASSERT(memcmp(data, "\x39\x25\x84\x1D\x02\xDC\x09\xFB\xDC\x11\x85\x97\x19\x6A\x0B\x32", 16) == 0); - cipher_ecb_decrypt(c, data); - ASSERT(memcmp(data, "\x32\x43\xf6\xa8\x88\x5a\x30\x8d\x31\x31\x98\xa2\xe0\x37\x07\x34", 16) == 0); - - return 0; -} - -TEST_MAIN(AES); diff --git a/bertos/sec/cipher/blowfish.c b/bertos/sec/cipher/blowfish.c deleted file mode 100644 index 461594c3..00000000 --- a/bertos/sec/cipher/blowfish.c +++ /dev/null @@ -1,452 +0,0 @@ -/** - * \file - * - * - * \brief Blowfish implementation - * - * \author Giovanni Bajo - * - * - */ - -#include "blowfish.h" -#include -#include -#include - -#define N 16 - -static const uint32_t P[16 + 2] = -{ - 0x243F6A88L, 0x85A308D3L, 0x13198A2EL, 0x03707344L, - 0xA4093822L, 0x299F31D0L, 0x082EFA98L, 0xEC4E6C89L, - 0x452821E6L, 0x38D01377L, 0xBE5466CFL, 0x34E90C6CL, - 0xC0AC29B7L, 0xC97C50DDL, 0x3F84D5B5L, 0xB5470917L, - 0x9216D5D9L, 0x8979FB1BL -}; - -static const uint32_t S[4][256] = -{ - { - 0xD1310BA6L, 0x98DFB5ACL, 0x2FFD72DBL, 0xD01ADFB7L, - 0xB8E1AFEDL, 0x6A267E96L, 0xBA7C9045L, 0xF12C7F99L, - 0x24A19947L, 0xB3916CF7L, 0x0801F2E2L, 0x858EFC16L, - 0x636920D8L, 0x71574E69L, 0xA458FEA3L, 0xF4933D7EL, - 0x0D95748FL, 0x728EB658L, 0x718BCD58L, 0x82154AEEL, - 0x7B54A41DL, 0xC25A59B5L, 0x9C30D539L, 0x2AF26013L, - 0xC5D1B023L, 0x286085F0L, 0xCA417918L, 0xB8DB38EFL, - 0x8E79DCB0L, 0x603A180EL, 0x6C9E0E8BL, 0xB01E8A3EL, - 0xD71577C1L, 0xBD314B27L, 0x78AF2FDAL, 0x55605C60L, - 0xE65525F3L, 0xAA55AB94L, 0x57489862L, 0x63E81440L, - 0x55CA396AL, 0x2AAB10B6L, 0xB4CC5C34L, 0x1141E8CEL, - 0xA15486AFL, 0x7C72E993L, 0xB3EE1411L, 0x636FBC2AL, - 0x2BA9C55DL, 0x741831F6L, 0xCE5C3E16L, 0x9B87931EL, - 0xAFD6BA33L, 0x6C24CF5CL, 0x7A325381L, 0x28958677L, - 0x3B8F4898L, 0x6B4BB9AFL, 0xC4BFE81BL, 0x66282193L, - 0x61D809CCL, 0xFB21A991L, 0x487CAC60L, 0x5DEC8032L, - 0xEF845D5DL, 0xE98575B1L, 0xDC262302L, 0xEB651B88L, - 0x23893E81L, 0xD396ACC5L, 0x0F6D6FF3L, 0x83F44239L, - 0x2E0B4482L, 0xA4842004L, 0x69C8F04AL, 0x9E1F9B5EL, - 0x21C66842L, 0xF6E96C9AL, 0x670C9C61L, 0xABD388F0L, - 0x6A51A0D2L, 0xD8542F68L, 0x960FA728L, 0xAB5133A3L, - 0x6EEF0B6CL, 0x137A3BE4L, 0xBA3BF050L, 0x7EFB2A98L, - 0xA1F1651DL, 0x39AF0176L, 0x66CA593EL, 0x82430E88L, - 0x8CEE8619L, 0x456F9FB4L, 0x7D84A5C3L, 0x3B8B5EBEL, - 0xE06F75D8L, 0x85C12073L, 0x401A449FL, 0x56C16AA6L, - 0x4ED3AA62L, 0x363F7706L, 0x1BFEDF72L, 0x429B023DL, - 0x37D0D724L, 0xD00A1248L, 0xDB0FEAD3L, 0x49F1C09BL, - 0x075372C9L, 0x80991B7BL, 0x25D479D8L, 0xF6E8DEF7L, - 0xE3FE501AL, 0xB6794C3BL, 0x976CE0BDL, 0x04C006BAL, - 0xC1A94FB6L, 0x409F60C4L, 0x5E5C9EC2L, 0x196A2463L, - 0x68FB6FAFL, 0x3E6C53B5L, 0x1339B2EBL, 0x3B52EC6FL, - 0x6DFC511FL, 0x9B30952CL, 0xCC814544L, 0xAF5EBD09L, - 0xBEE3D004L, 0xDE334AFDL, 0x660F2807L, 0x192E4BB3L, - 0xC0CBA857L, 0x45C8740FL, 0xD20B5F39L, 0xB9D3FBDBL, - 0x5579C0BDL, 0x1A60320AL, 0xD6A100C6L, 0x402C7279L, - 0x679F25FEL, 0xFB1FA3CCL, 0x8EA5E9F8L, 0xDB3222F8L, - 0x3C7516DFL, 0xFD616B15L, 0x2F501EC8L, 0xAD0552ABL, - 0x323DB5FAL, 0xFD238760L, 0x53317B48L, 0x3E00DF82L, - 0x9E5C57BBL, 0xCA6F8CA0L, 0x1A87562EL, 0xDF1769DBL, - 0xD542A8F6L, 0x287EFFC3L, 0xAC6732C6L, 0x8C4F5573L, - 0x695B27B0L, 0xBBCA58C8L, 0xE1FFA35DL, 0xB8F011A0L, - 0x10FA3D98L, 0xFD2183B8L, 0x4AFCB56CL, 0x2DD1D35BL, - 0x9A53E479L, 0xB6F84565L, 0xD28E49BCL, 0x4BFB9790L, - 0xE1DDF2DAL, 0xA4CB7E33L, 0x62FB1341L, 0xCEE4C6E8L, - 0xEF20CADAL, 0x36774C01L, 0xD07E9EFEL, 0x2BF11FB4L, - 0x95DBDA4DL, 0xAE909198L, 0xEAAD8E71L, 0x6B93D5A0L, - 0xD08ED1D0L, 0xAFC725E0L, 0x8E3C5B2FL, 0x8E7594B7L, - 0x8FF6E2FBL, 0xF2122B64L, 0x8888B812L, 0x900DF01CL, - 0x4FAD5EA0L, 0x688FC31CL, 0xD1CFF191L, 0xB3A8C1ADL, - 0x2F2F2218L, 0xBE0E1777L, 0xEA752DFEL, 0x8B021FA1L, - 0xE5A0CC0FL, 0xB56F74E8L, 0x18ACF3D6L, 0xCE89E299L, - 0xB4A84FE0L, 0xFD13E0B7L, 0x7CC43B81L, 0xD2ADA8D9L, - 0x165FA266L, 0x80957705L, 0x93CC7314L, 0x211A1477L, - 0xE6AD2065L, 0x77B5FA86L, 0xC75442F5L, 0xFB9D35CFL, - 0xEBCDAF0CL, 0x7B3E89A0L, 0xD6411BD3L, 0xAE1E7E49L, - 0x00250E2DL, 0x2071B35EL, 0x226800BBL, 0x57B8E0AFL, - 0x2464369BL, 0xF009B91EL, 0x5563911DL, 0x59DFA6AAL, - 0x78C14389L, 0xD95A537FL, 0x207D5BA2L, 0x02E5B9C5L, - 0x83260376L, 0x6295CFA9L, 0x11C81968L, 0x4E734A41L, - 0xB3472DCAL, 0x7B14A94AL, 0x1B510052L, 0x9A532915L, - 0xD60F573FL, 0xBC9BC6E4L, 0x2B60A476L, 0x81E67400L, - 0x08BA6FB5L, 0x571BE91FL, 0xF296EC6BL, 0x2A0DD915L, - 0xB6636521L, 0xE7B9F9B6L, 0xFF34052EL, 0xC5855664L, - 0x53B02D5DL, 0xA99F8FA1L, 0x08BA4799L, 0x6E85076AL, - }, - { - 0x4B7A70E9L, 0xB5B32944L, 0xDB75092EL, 0xC4192623L, - 0xAD6EA6B0L, 0x49A7DF7DL, 0x9CEE60B8L, 0x8FEDB266L, - 0xECAA8C71L, 0x699A17FFL, 0x5664526CL, 0xC2B19EE1L, - 0x193602A5L, 0x75094C29L, 0xA0591340L, 0xE4183A3EL, - 0x3F54989AL, 0x5B429D65L, 0x6B8FE4D6L, 0x99F73FD6L, - 0xA1D29C07L, 0xEFE830F5L, 0x4D2D38E6L, 0xF0255DC1L, - 0x4CDD2086L, 0x8470EB26L, 0x6382E9C6L, 0x021ECC5EL, - 0x09686B3FL, 0x3EBAEFC9L, 0x3C971814L, 0x6B6A70A1L, - 0x687F3584L, 0x52A0E286L, 0xB79C5305L, 0xAA500737L, - 0x3E07841CL, 0x7FDEAE5CL, 0x8E7D44ECL, 0x5716F2B8L, - 0xB03ADA37L, 0xF0500C0DL, 0xF01C1F04L, 0x0200B3FFL, - 0xAE0CF51AL, 0x3CB574B2L, 0x25837A58L, 0xDC0921BDL, - 0xD19113F9L, 0x7CA92FF6L, 0x94324773L, 0x22F54701L, - 0x3AE5E581L, 0x37C2DADCL, 0xC8B57634L, 0x9AF3DDA7L, - 0xA9446146L, 0x0FD0030EL, 0xECC8C73EL, 0xA4751E41L, - 0xE238CD99L, 0x3BEA0E2FL, 0x3280BBA1L, 0x183EB331L, - 0x4E548B38L, 0x4F6DB908L, 0x6F420D03L, 0xF60A04BFL, - 0x2CB81290L, 0x24977C79L, 0x5679B072L, 0xBCAF89AFL, - 0xDE9A771FL, 0xD9930810L, 0xB38BAE12L, 0xDCCF3F2EL, - 0x5512721FL, 0x2E6B7124L, 0x501ADDE6L, 0x9F84CD87L, - 0x7A584718L, 0x7408DA17L, 0xBC9F9ABCL, 0xE94B7D8CL, - 0xEC7AEC3AL, 0xDB851DFAL, 0x63094366L, 0xC464C3D2L, - 0xEF1C1847L, 0x3215D908L, 0xDD433B37L, 0x24C2BA16L, - 0x12A14D43L, 0x2A65C451L, 0x50940002L, 0x133AE4DDL, - 0x71DFF89EL, 0x10314E55L, 0x81AC77D6L, 0x5F11199BL, - 0x043556F1L, 0xD7A3C76BL, 0x3C11183BL, 0x5924A509L, - 0xF28FE6EDL, 0x97F1FBFAL, 0x9EBABF2CL, 0x1E153C6EL, - 0x86E34570L, 0xEAE96FB1L, 0x860E5E0AL, 0x5A3E2AB3L, - 0x771FE71CL, 0x4E3D06FAL, 0x2965DCB9L, 0x99E71D0FL, - 0x803E89D6L, 0x5266C825L, 0x2E4CC978L, 0x9C10B36AL, - 0xC6150EBAL, 0x94E2EA78L, 0xA5FC3C53L, 0x1E0A2DF4L, - 0xF2F74EA7L, 0x361D2B3DL, 0x1939260FL, 0x19C27960L, - 0x5223A708L, 0xF71312B6L, 0xEBADFE6EL, 0xEAC31F66L, - 0xE3BC4595L, 0xA67BC883L, 0xB17F37D1L, 0x018CFF28L, - 0xC332DDEFL, 0xBE6C5AA5L, 0x65582185L, 0x68AB9802L, - 0xEECEA50FL, 0xDB2F953BL, 0x2AEF7DADL, 0x5B6E2F84L, - 0x1521B628L, 0x29076170L, 0xECDD4775L, 0x619F1510L, - 0x13CCA830L, 0xEB61BD96L, 0x0334FE1EL, 0xAA0363CFL, - 0xB5735C90L, 0x4C70A239L, 0xD59E9E0BL, 0xCBAADE14L, - 0xEECC86BCL, 0x60622CA7L, 0x9CAB5CABL, 0xB2F3846EL, - 0x648B1EAFL, 0x19BDF0CAL, 0xA02369B9L, 0x655ABB50L, - 0x40685A32L, 0x3C2AB4B3L, 0x319EE9D5L, 0xC021B8F7L, - 0x9B540B19L, 0x875FA099L, 0x95F7997EL, 0x623D7DA8L, - 0xF837889AL, 0x97E32D77L, 0x11ED935FL, 0x16681281L, - 0x0E358829L, 0xC7E61FD6L, 0x96DEDFA1L, 0x7858BA99L, - 0x57F584A5L, 0x1B227263L, 0x9B83C3FFL, 0x1AC24696L, - 0xCDB30AEBL, 0x532E3054L, 0x8FD948E4L, 0x6DBC3128L, - 0x58EBF2EFL, 0x34C6FFEAL, 0xFE28ED61L, 0xEE7C3C73L, - 0x5D4A14D9L, 0xE864B7E3L, 0x42105D14L, 0x203E13E0L, - 0x45EEE2B6L, 0xA3AAABEAL, 0xDB6C4F15L, 0xFACB4FD0L, - 0xC742F442L, 0xEF6ABBB5L, 0x654F3B1DL, 0x41CD2105L, - 0xD81E799EL, 0x86854DC7L, 0xE44B476AL, 0x3D816250L, - 0xCF62A1F2L, 0x5B8D2646L, 0xFC8883A0L, 0xC1C7B6A3L, - 0x7F1524C3L, 0x69CB7492L, 0x47848A0BL, 0x5692B285L, - 0x095BBF00L, 0xAD19489DL, 0x1462B174L, 0x23820E00L, - 0x58428D2AL, 0x0C55F5EAL, 0x1DADF43EL, 0x233F7061L, - 0x3372F092L, 0x8D937E41L, 0xD65FECF1L, 0x6C223BDBL, - 0x7CDE3759L, 0xCBEE7460L, 0x4085F2A7L, 0xCE77326EL, - 0xA6078084L, 0x19F8509EL, 0xE8EFD855L, 0x61D99735L, - 0xA969A7AAL, 0xC50C06C2L, 0x5A04ABFCL, 0x800BCADCL, - 0x9E447A2EL, 0xC3453484L, 0xFDD56705L, 0x0E1E9EC9L, - 0xDB73DBD3L, 0x105588CDL, 0x675FDA79L, 0xE3674340L, - 0xC5C43465L, 0x713E38D8L, 0x3D28F89EL, 0xF16DFF20L, - 0x153E21E7L, 0x8FB03D4AL, 0xE6E39F2BL, 0xDB83ADF7L, - }, - { - 0xE93D5A68L, 0x948140F7L, 0xF64C261CL, 0x94692934L, - 0x411520F7L, 0x7602D4F7L, 0xBCF46B2EL, 0xD4A20068L, - 0xD4082471L, 0x3320F46AL, 0x43B7D4B7L, 0x500061AFL, - 0x1E39F62EL, 0x97244546L, 0x14214F74L, 0xBF8B8840L, - 0x4D95FC1DL, 0x96B591AFL, 0x70F4DDD3L, 0x66A02F45L, - 0xBFBC09ECL, 0x03BD9785L, 0x7FAC6DD0L, 0x31CB8504L, - 0x96EB27B3L, 0x55FD3941L, 0xDA2547E6L, 0xABCA0A9AL, - 0x28507825L, 0x530429F4L, 0x0A2C86DAL, 0xE9B66DFBL, - 0x68DC1462L, 0xD7486900L, 0x680EC0A4L, 0x27A18DEEL, - 0x4F3FFEA2L, 0xE887AD8CL, 0xB58CE006L, 0x7AF4D6B6L, - 0xAACE1E7CL, 0xD3375FECL, 0xCE78A399L, 0x406B2A42L, - 0x20FE9E35L, 0xD9F385B9L, 0xEE39D7ABL, 0x3B124E8BL, - 0x1DC9FAF7L, 0x4B6D1856L, 0x26A36631L, 0xEAE397B2L, - 0x3A6EFA74L, 0xDD5B4332L, 0x6841E7F7L, 0xCA7820FBL, - 0xFB0AF54EL, 0xD8FEB397L, 0x454056ACL, 0xBA489527L, - 0x55533A3AL, 0x20838D87L, 0xFE6BA9B7L, 0xD096954BL, - 0x55A867BCL, 0xA1159A58L, 0xCCA92963L, 0x99E1DB33L, - 0xA62A4A56L, 0x3F3125F9L, 0x5EF47E1CL, 0x9029317CL, - 0xFDF8E802L, 0x04272F70L, 0x80BB155CL, 0x05282CE3L, - 0x95C11548L, 0xE4C66D22L, 0x48C1133FL, 0xC70F86DCL, - 0x07F9C9EEL, 0x41041F0FL, 0x404779A4L, 0x5D886E17L, - 0x325F51EBL, 0xD59BC0D1L, 0xF2BCC18FL, 0x41113564L, - 0x257B7834L, 0x602A9C60L, 0xDFF8E8A3L, 0x1F636C1BL, - 0x0E12B4C2L, 0x02E1329EL, 0xAF664FD1L, 0xCAD18115L, - 0x6B2395E0L, 0x333E92E1L, 0x3B240B62L, 0xEEBEB922L, - 0x85B2A20EL, 0xE6BA0D99L, 0xDE720C8CL, 0x2DA2F728L, - 0xD0127845L, 0x95B794FDL, 0x647D0862L, 0xE7CCF5F0L, - 0x5449A36FL, 0x877D48FAL, 0xC39DFD27L, 0xF33E8D1EL, - 0x0A476341L, 0x992EFF74L, 0x3A6F6EABL, 0xF4F8FD37L, - 0xA812DC60L, 0xA1EBDDF8L, 0x991BE14CL, 0xDB6E6B0DL, - 0xC67B5510L, 0x6D672C37L, 0x2765D43BL, 0xDCD0E804L, - 0xF1290DC7L, 0xCC00FFA3L, 0xB5390F92L, 0x690FED0BL, - 0x667B9FFBL, 0xCEDB7D9CL, 0xA091CF0BL, 0xD9155EA3L, - 0xBB132F88L, 0x515BAD24L, 0x7B9479BFL, 0x763BD6EBL, - 0x37392EB3L, 0xCC115979L, 0x8026E297L, 0xF42E312DL, - 0x6842ADA7L, 0xC66A2B3BL, 0x12754CCCL, 0x782EF11CL, - 0x6A124237L, 0xB79251E7L, 0x06A1BBE6L, 0x4BFB6350L, - 0x1A6B1018L, 0x11CAEDFAL, 0x3D25BDD8L, 0xE2E1C3C9L, - 0x44421659L, 0x0A121386L, 0xD90CEC6EL, 0xD5ABEA2AL, - 0x64AF674EL, 0xDA86A85FL, 0xBEBFE988L, 0x64E4C3FEL, - 0x9DBC8057L, 0xF0F7C086L, 0x60787BF8L, 0x6003604DL, - 0xD1FD8346L, 0xF6381FB0L, 0x7745AE04L, 0xD736FCCCL, - 0x83426B33L, 0xF01EAB71L, 0xB0804187L, 0x3C005E5FL, - 0x77A057BEL, 0xBDE8AE24L, 0x55464299L, 0xBF582E61L, - 0x4E58F48FL, 0xF2DDFDA2L, 0xF474EF38L, 0x8789BDC2L, - 0x5366F9C3L, 0xC8B38E74L, 0xB475F255L, 0x46FCD9B9L, - 0x7AEB2661L, 0x8B1DDF84L, 0x846A0E79L, 0x915F95E2L, - 0x466E598EL, 0x20B45770L, 0x8CD55591L, 0xC902DE4CL, - 0xB90BACE1L, 0xBB8205D0L, 0x11A86248L, 0x7574A99EL, - 0xB77F19B6L, 0xE0A9DC09L, 0x662D09A1L, 0xC4324633L, - 0xE85A1F02L, 0x09F0BE8CL, 0x4A99A025L, 0x1D6EFE10L, - 0x1AB93D1DL, 0x0BA5A4DFL, 0xA186F20FL, 0x2868F169L, - 0xDCB7DA83L, 0x573906FEL, 0xA1E2CE9BL, 0x4FCD7F52L, - 0x50115E01L, 0xA70683FAL, 0xA002B5C4L, 0x0DE6D027L, - 0x9AF88C27L, 0x773F8641L, 0xC3604C06L, 0x61A806B5L, - 0xF0177A28L, 0xC0F586E0L, 0x006058AAL, 0x30DC7D62L, - 0x11E69ED7L, 0x2338EA63L, 0x53C2DD94L, 0xC2C21634L, - 0xBBCBEE56L, 0x90BCB6DEL, 0xEBFC7DA1L, 0xCE591D76L, - 0x6F05E409L, 0x4B7C0188L, 0x39720A3DL, 0x7C927C24L, - 0x86E3725FL, 0x724D9DB9L, 0x1AC15BB4L, 0xD39EB8FCL, - 0xED545578L, 0x08FCA5B5L, 0xD83D7CD3L, 0x4DAD0FC4L, - 0x1E50EF5EL, 0xB161E6F8L, 0xA28514D9L, 0x6C51133CL, - 0x6FD5C7E7L, 0x56E14EC4L, 0x362ABFCEL, 0xDDC6C837L, - 0xD79A3234L, 0x92638212L, 0x670EFA8EL, 0x406000E0L, - }, - { - 0x3A39CE37L, 0xD3FAF5CFL, 0xABC27737L, 0x5AC52D1BL, - 0x5CB0679EL, 0x4FA33742L, 0xD3822740L, 0x99BC9BBEL, - 0xD5118E9DL, 0xBF0F7315L, 0xD62D1C7EL, 0xC700C47BL, - 0xB78C1B6BL, 0x21A19045L, 0xB26EB1BEL, 0x6A366EB4L, - 0x5748AB2FL, 0xBC946E79L, 0xC6A376D2L, 0x6549C2C8L, - 0x530FF8EEL, 0x468DDE7DL, 0xD5730A1DL, 0x4CD04DC6L, - 0x2939BBDBL, 0xA9BA4650L, 0xAC9526E8L, 0xBE5EE304L, - 0xA1FAD5F0L, 0x6A2D519AL, 0x63EF8CE2L, 0x9A86EE22L, - 0xC089C2B8L, 0x43242EF6L, 0xA51E03AAL, 0x9CF2D0A4L, - 0x83C061BAL, 0x9BE96A4DL, 0x8FE51550L, 0xBA645BD6L, - 0x2826A2F9L, 0xA73A3AE1L, 0x4BA99586L, 0xEF5562E9L, - 0xC72FEFD3L, 0xF752F7DAL, 0x3F046F69L, 0x77FA0A59L, - 0x80E4A915L, 0x87B08601L, 0x9B09E6ADL, 0x3B3EE593L, - 0xE990FD5AL, 0x9E34D797L, 0x2CF0B7D9L, 0x022B8B51L, - 0x96D5AC3AL, 0x017DA67DL, 0xD1CF3ED6L, 0x7C7D2D28L, - 0x1F9F25CFL, 0xADF2B89BL, 0x5AD6B472L, 0x5A88F54CL, - 0xE029AC71L, 0xE019A5E6L, 0x47B0ACFDL, 0xED93FA9BL, - 0xE8D3C48DL, 0x283B57CCL, 0xF8D56629L, 0x79132E28L, - 0x785F0191L, 0xED756055L, 0xF7960E44L, 0xE3D35E8CL, - 0x15056DD4L, 0x88F46DBAL, 0x03A16125L, 0x0564F0BDL, - 0xC3EB9E15L, 0x3C9057A2L, 0x97271AECL, 0xA93A072AL, - 0x1B3F6D9BL, 0x1E6321F5L, 0xF59C66FBL, 0x26DCF319L, - 0x7533D928L, 0xB155FDF5L, 0x03563482L, 0x8ABA3CBBL, - 0x28517711L, 0xC20AD9F8L, 0xABCC5167L, 0xCCAD925FL, - 0x4DE81751L, 0x3830DC8EL, 0x379D5862L, 0x9320F991L, - 0xEA7A90C2L, 0xFB3E7BCEL, 0x5121CE64L, 0x774FBE32L, - 0xA8B6E37EL, 0xC3293D46L, 0x48DE5369L, 0x6413E680L, - 0xA2AE0810L, 0xDD6DB224L, 0x69852DFDL, 0x09072166L, - 0xB39A460AL, 0x6445C0DDL, 0x586CDECFL, 0x1C20C8AEL, - 0x5BBEF7DDL, 0x1B588D40L, 0xCCD2017FL, 0x6BB4E3BBL, - 0xDDA26A7EL, 0x3A59FF45L, 0x3E350A44L, 0xBCB4CDD5L, - 0x72EACEA8L, 0xFA6484BBL, 0x8D6612AEL, 0xBF3C6F47L, - 0xD29BE463L, 0x542F5D9EL, 0xAEC2771BL, 0xF64E6370L, - 0x740E0D8DL, 0xE75B1357L, 0xF8721671L, 0xAF537D5DL, - 0x4040CB08L, 0x4EB4E2CCL, 0x34D2466AL, 0x0115AF84L, - 0xE1B00428L, 0x95983A1DL, 0x06B89FB4L, 0xCE6EA048L, - 0x6F3F3B82L, 0x3520AB82L, 0x011A1D4BL, 0x277227F8L, - 0x611560B1L, 0xE7933FDCL, 0xBB3A792BL, 0x344525BDL, - 0xA08839E1L, 0x51CE794BL, 0x2F32C9B7L, 0xA01FBAC9L, - 0xE01CC87EL, 0xBCC7D1F6L, 0xCF0111C3L, 0xA1E8AAC7L, - 0x1A908749L, 0xD44FBD9AL, 0xD0DADECBL, 0xD50ADA38L, - 0x0339C32AL, 0xC6913667L, 0x8DF9317CL, 0xE0B12B4FL, - 0xF79E59B7L, 0x43F5BB3AL, 0xF2D519FFL, 0x27D9459CL, - 0xBF97222CL, 0x15E6FC2AL, 0x0F91FC71L, 0x9B941525L, - 0xFAE59361L, 0xCEB69CEBL, 0xC2A86459L, 0x12BAA8D1L, - 0xB6C1075EL, 0xE3056A0CL, 0x10D25065L, 0xCB03A442L, - 0xE0EC6E0EL, 0x1698DB3BL, 0x4C98A0BEL, 0x3278E964L, - 0x9F1F9532L, 0xE0D392DFL, 0xD3A0342BL, 0x8971F21EL, - 0x1B0A7441L, 0x4BA3348CL, 0xC5BE7120L, 0xC37632D8L, - 0xDF359F8DL, 0x9B992F2EL, 0xE60B6F47L, 0x0FE3F11DL, - 0xE54CDA54L, 0x1EDAD891L, 0xCE6279CFL, 0xCD3E7E6FL, - 0x1618B166L, 0xFD2C1D05L, 0x848FD2C5L, 0xF6FB2299L, - 0xF523F357L, 0xA6327623L, 0x93A83531L, 0x56CCCD02L, - 0xACF08162L, 0x5A75EBB5L, 0x6E163697L, 0x88D273CCL, - 0xDE966292L, 0x81B949D0L, 0x4C50901BL, 0x71C65614L, - 0xE6C6C7BDL, 0x327A140AL, 0x45E1D006L, 0xC3F27B9AL, - 0xC9AA53FDL, 0x62A80F00L, 0xBB25BFE2L, 0x35BDD2F6L, - 0x71126905L, 0xB2040222L, 0xB6CBCF7CL, 0xCD769C2BL, - 0x53113EC0L, 0x1640E3D3L, 0x38ABBD60L, 0x2547ADF0L, - 0xBA38209CL, 0xF746CE76L, 0x77AFA1C5L, 0x20756060L, - 0x85CBFE4EL, 0x8AE88DD8L, 0x7AAAF9B0L, 0x4CF9AA7EL, - 0x1948C25CL, 0x02FB8A8CL, 0x01C36AE4L, 0xD6EBE1F9L, - 0x90D4F869L, 0xA65CDEA0L, 0x3F09252DL, 0xC208E69FL, - 0xB74E6132L, 0xCE77E25BL, 0x578FDFE3L, 0x3AC372E6L, - }, -}; - -INLINE uint32_t F(uint32_t S[4][256], uint32_t x) -{ - uint8_t a, b, c, d; - uint32_t y; - - d = x & 0x00FF; - x >>= 8; - c = x & 0x00FF; - x >>= 8; - b = x & 0x00FF; - x >>= 8; - a = x & 0x00FF; - - y = ((S[0][a] + S[1][b]) ^ S[2][c]) + S[3][d]; - - return y; -} - - -static void blowfish_enc(BlockCipher *ctx_, void *block) -{ - BlowfishContext *ctx = (BlowfishContext *)ctx_; - uint32_t Xl; - uint32_t Xr; - - Xl = be32_to_cpu(((uint32_t*)block)[0]); - Xr = be32_to_cpu(((uint32_t*)block)[1]); - - for (int i = 0; i < N; ++i) { - Xl = Xl ^ ctx->P[i]; - Xr = F(ctx->S, Xl) ^ Xr; - - SWAP(Xl, Xr); - } - - SWAP(Xl, Xr); - - Xr = Xr ^ ctx->P[N]; - Xl = Xl ^ ctx->P[N + 1]; - - ((uint32_t*)block)[0] = cpu_to_be32(Xl); - ((uint32_t*)block)[1] = cpu_to_be32(Xr); -} - -static void blowfish_dec(BlockCipher *ctx_, void *block) -{ - BlowfishContext *ctx = (BlowfishContext *)ctx_; - uint32_t Xl; - uint32_t Xr; - - Xl = be32_to_cpu(((uint32_t*)block)[0]); - Xr = be32_to_cpu(((uint32_t*)block)[1]); - - for (int i = N + 1; i > 1; --i) { - Xl = Xl ^ ctx->P[i]; - Xr = F(ctx->S, Xl) ^ Xr; - - SWAP(Xl, Xr); - } - - SWAP(Xl, Xr); - - Xr = Xr ^ ctx->P[1]; - Xl = Xl ^ ctx->P[0]; - - ((uint32_t*)block)[0] = cpu_to_be32(Xl); - ((uint32_t*)block)[1] = cpu_to_be32(Xr); -} - -static void blowfish_setkey(BlockCipher *ctx_, const void *key_, size_t klen) -{ - BlowfishContext *ctx = (BlowfishContext *)ctx_; - const uint8_t *key = (const uint8_t*)key_; - int i, k; - size_t j; - - STATIC_ASSERT(sizeof(P) == sizeof(ctx->P)); - STATIC_ASSERT(sizeof(S) == sizeof(ctx->S)); - - for (i = 0; i < 4; ++i) - for (k = 0; k < 256; ++k) - ctx->S[i][k] = S[i][k]; - - j = 0; - for (i = 0; i < N + 2; ++i) - { - uint32_t data = 0x00000000; - for (k = 0; k < 4; ++k) - { - data = (data << 8) | key[j]; - j = j + 1; - if (j >= klen) - j = 0; - } - ctx->P[i] = P[i] ^ data; - } - - uint32_t data[2] = { 0x00000000, 0x00000000 }; - - for (i = 0; i < N + 2; i += 2) - { - blowfish_enc(ctx_, data); - - ctx->P[i] = be32_to_cpu(data[0]); - ctx->P[i + 1] = be32_to_cpu(data[1]); - } - - for (i = 0; i < 4; ++i) - { - for (j = 0; j < 256; j += 2) - { - blowfish_enc(ctx_, data); - - ctx->S[i][j] = be32_to_cpu(data[0]); - ctx->S[i][j + 1] = be32_to_cpu(data[1]); - } - } -} - -/*****************************************************************************/ - -void blowfish_init(BlowfishContext *ctx) -{ - ctx->c.set_key = blowfish_setkey; - ctx->c.enc_block = blowfish_enc; - ctx->c.dec_block = blowfish_dec; - ctx->c.key_len = 16; - ctx->c.block_len = 8; -} diff --git a/bertos/sec/cipher/blowfish.h b/bertos/sec/cipher/blowfish.h deleted file mode 100644 index 0895ceb8..00000000 --- a/bertos/sec/cipher/blowfish.h +++ /dev/null @@ -1,63 +0,0 @@ -/** - * \file - * - * - * \brief Blowfish implementation - * - * \author Giovanni Bajo - * - * - */ - -#ifndef SEC_CIPHER_BLOWFISH_H -#define SEC_CIPHER_BLOWFISH_H - -#include -#include - -typedef struct BlowfishContext -{ - BlockCipher c; - uint32_t S[4][256]; - uint32_t P[18]; - -} BlowfishContext; - -void blowfish_init(BlowfishContext *ctx); - -#define blowfish_stackinit(...) \ - ({ BlowfishContext *ctx = alloca(sizeof(BlowfishContext)); blowfish_init(ctx, ##__VA_ARGS__); &ctx->c; }) - -int blowfish_testSetup(void); -int blowfish_testRun(void); -int blowfish_testTearDown(void); - -#endif /* SEC_CIPHER_BLOWFISH_H */ diff --git a/bertos/sec/cipher/blowfish_test.c b/bertos/sec/cipher/blowfish_test.c deleted file mode 100644 index ab60babc..00000000 --- a/bertos/sec/cipher/blowfish_test.c +++ /dev/null @@ -1,221 +0,0 @@ -/** - * \file - * - * - * \brief Blowfish testsuite - * \author Giovanni Bajo - * - */ - -#include "blowfish.h" - -#include -#include - -#include -#include - -/* - * Author : Randy L. Milbert - * E-mail : rmilbert@mit.edu - * Date : 18 Jun 97 - * Description: Eric Young's test vectors for Blowfish. - */ - -#define NUM_VARIABLE_KEY_TESTS 34 -#define NUM_SET_KEY_TESTS 24 - -/* plaintext bytes -- left halves */ -static const uint32_t plaintext_l[NUM_VARIABLE_KEY_TESTS + NUM_SET_KEY_TESTS] = { - 0x00000000l, 0xFFFFFFFFl, 0x10000000l, 0x11111111l, 0x11111111l, - 0x01234567l, 0x00000000l, 0x01234567l, 0x01A1D6D0l, 0x5CD54CA8l, - 0x0248D438l, 0x51454B58l, 0x42FD4430l, 0x059B5E08l, 0x0756D8E0l, - 0x762514B8l, 0x3BDD1190l, 0x26955F68l, 0x164D5E40l, 0x6B056E18l, - 0x004BD6EFl, 0x480D3900l, 0x437540C8l, 0x072D43A0l, 0x02FE5577l, - 0x1D9D5C50l, 0x30553228l, 0x01234567l, 0x01234567l, 0x01234567l, - 0xFFFFFFFFl, 0x00000000l, 0x00000000l, 0xFFFFFFFFl, 0xFEDCBA98l, - 0xFEDCBA98l, 0xFEDCBA98l, 0xFEDCBA98l, 0xFEDCBA98l, 0xFEDCBA98l, - 0xFEDCBA98l, 0xFEDCBA98l, 0xFEDCBA98l, 0xFEDCBA98l, 0xFEDCBA98l, - 0xFEDCBA98l, 0xFEDCBA98l, 0xFEDCBA98l, 0xFEDCBA98l, 0xFEDCBA98l, - 0xFEDCBA98l, 0xFEDCBA98l, 0xFEDCBA98l, 0xFEDCBA98l, 0xFEDCBA98l, - 0xFEDCBA98l, 0xFEDCBA98l, 0xFEDCBA98l }; - -/* plaintext bytes -- right halves */ -static const uint32_t plaintext_r[NUM_VARIABLE_KEY_TESTS + NUM_SET_KEY_TESTS] = { - 0x00000000l, 0xFFFFFFFFl, 0x00000001l, 0x11111111l, 0x11111111l, - 0x89ABCDEFl, 0x00000000l, 0x89ABCDEFl, 0x39776742l, 0x3DEF57DAl, - 0x06F67172l, 0x2DDF440Al, 0x59577FA2l, 0x51CF143Al, 0x774761D2l, - 0x29BF486Al, 0x49372802l, 0x35AF609Al, 0x4F275232l, 0x759F5CCAl, - 0x09176062l, 0x6EE762F2l, 0x698F3CFAl, 0x77075292l, 0x8117F12Al, - 0x18F728C2l, 0x6D6F295Al, 0x89ABCDEFl, 0x89ABCDEFl, 0x89ABCDEFl, - 0xFFFFFFFFl, 0x00000000l, 0x00000000l, 0xFFFFFFFFl, 0x76543210l, - 0x76543210l, 0x76543210l, 0x76543210l, 0x76543210l, 0x76543210l, - 0x76543210l, 0x76543210l, 0x76543210l, 0x76543210l, 0x76543210l, - 0x76543210l, 0x76543210l, 0x76543210l, 0x76543210l, 0x76543210l, - 0x76543210l, 0x76543210l, 0x76543210l, 0x76543210l, 0x76543210l, - 0x76543210l, 0x76543210l, 0x76543210l }; - -/* key bytes for variable key tests */ -static const uint8_t variable_key[NUM_VARIABLE_KEY_TESTS][8] = { - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, - { 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11 }, - { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF }, - { 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10 }, - { 0x7C, 0xA1, 0x10, 0x45, 0x4A, 0x1A, 0x6E, 0x57 }, - { 0x01, 0x31, 0xD9, 0x61, 0x9D, 0xC1, 0x37, 0x6E }, - { 0x07, 0xA1, 0x13, 0x3E, 0x4A, 0x0B, 0x26, 0x86 }, - { 0x38, 0x49, 0x67, 0x4C, 0x26, 0x02, 0x31, 0x9E }, - { 0x04, 0xB9, 0x15, 0xBA, 0x43, 0xFE, 0xB5, 0xB6 }, - { 0x01, 0x13, 0xB9, 0x70, 0xFD, 0x34, 0xF2, 0xCE }, - { 0x01, 0x70, 0xF1, 0x75, 0x46, 0x8F, 0xB5, 0xE6 }, - { 0x43, 0x29, 0x7F, 0xAD, 0x38, 0xE3, 0x73, 0xFE }, - { 0x07, 0xA7, 0x13, 0x70, 0x45, 0xDA, 0x2A, 0x16 }, - { 0x04, 0x68, 0x91, 0x04, 0xC2, 0xFD, 0x3B, 0x2F }, - { 0x37, 0xD0, 0x6B, 0xB5, 0x16, 0xCB, 0x75, 0x46 }, - { 0x1F, 0x08, 0x26, 0x0D, 0x1A, 0xC2, 0x46, 0x5E }, - { 0x58, 0x40, 0x23, 0x64, 0x1A, 0xBA, 0x61, 0x76 }, - { 0x02, 0x58, 0x16, 0x16, 0x46, 0x29, 0xB0, 0x07 }, - { 0x49, 0x79, 0x3E, 0xBC, 0x79, 0xB3, 0x25, 0x8F }, - { 0x4F, 0xB0, 0x5E, 0x15, 0x15, 0xAB, 0x73, 0xA7 }, - { 0x49, 0xE9, 0x5D, 0x6D, 0x4C, 0xA2, 0x29, 0xBF }, - { 0x01, 0x83, 0x10, 0xDC, 0x40, 0x9B, 0x26, 0xD6 }, - { 0x1C, 0x58, 0x7F, 0x1C, 0x13, 0x92, 0x4F, 0xEF }, - { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 }, - { 0x1F, 0x1F, 0x1F, 0x1F, 0x0E, 0x0E, 0x0E, 0x0E }, - { 0xE0, 0xFE, 0xE0, 0xFE, 0xF1, 0xFE, 0xF1, 0xFE }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, - { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF }, - { 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10 }}; - -/* key bytes for set key tests */ -static const uint8_t set_key[24] = { - 0xF0, 0xE1, 0xD2, 0xC3, 0xB4, 0xA5, 0x96, 0x87, - 0x78, 0x69, 0x5A, 0x4B, 0x3C, 0x2D, 0x1E, 0x0F, - 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77 }; - -/* ciphertext bytes -- left halves */ -static const uint32_t ciphertext_l[NUM_VARIABLE_KEY_TESTS + NUM_SET_KEY_TESTS] = { - 0x4EF99745l, 0x51866FD5l, 0x7D856F9Al, 0x2466DD87l, 0x61F9C380l, - 0x7D0CC630l, 0x4EF99745l, 0x0ACEAB0Fl, 0x59C68245l, 0xB1B8CC0Bl, - 0x1730E577l, 0xA25E7856l, 0x353882B1l, 0x48F4D088l, 0x432193B7l, - 0x13F04154l, 0x2EEDDA93l, 0xD887E039l, 0x5F99D04Fl, 0x4A057A3Bl, - 0x452031C1l, 0x7555AE39l, 0x53C55F9Cl, 0x7A8E7BFAl, 0xCF9C5D7Al, - 0xD1ABB290l, 0x55CB3774l, 0xFA34EC48l, 0xA7907951l, 0xC39E072Dl, - 0x014933E0l, 0xF21E9A77l, 0x24594688l, 0x6B5C5A9Cl, 0xF9AD597Cl, - 0xE91D21C1l, 0xE9C2B70Al, 0xBE1E6394l, 0xB39E4448l, 0x9457AA83l, - 0x8BB77032l, 0xE87A244El, 0x15750E7Al, 0x122BA70Bl, 0x3A833C9Al, - 0x9409DA87l, 0x884F8062l, 0x1F85031Cl, 0x79D9373Al, 0x93142887l, - 0x03429E83l, 0xA4299E27l, 0xAFD5AED1l, 0x10851C0El, 0xE6F51ED7l, - 0x64A6E14Al, 0x80C7D7D4l, 0x05044B62l }; - -/* ciphertext bytes -- right halves */ -static const uint32_t ciphertext_r[NUM_VARIABLE_KEY_TESTS + NUM_SET_KEY_TESTS] = { - 0x6198DD78l, 0xB85ECB8Al, 0x613063F2l, 0x8B963C9Dl, 0x2281B096l, - 0xAFDA1EC7l, 0x6198DD78l, 0xC6A0A28Dl, 0xEB05282Bl, 0x250F09A0l, - 0x8BEA1DA4l, 0xCF2651EBl, 0x09CE8F1Al, 0x4C379918l, 0x8951FC98l, - 0xD69D1AE5l, 0xFFD39C79l, 0x3C2DA6E3l, 0x5B163969l, 0x24D3977Bl, - 0xE4FADA8El, 0xF59B87BDl, 0xB49FC019l, 0x937E89A3l, 0x4986ADB5l, - 0x658BC778l, 0xD13EF201l, 0x47B268B2l, 0x08EA3CAEl, 0x9FAC631Dl, - 0xCDAFF6E4l, 0xB71C49BCl, 0x5754369Al, 0x5D9E0A5Al, 0x49DB005El, - 0xD961A6D6l, 0x1BC65CF3l, 0x08640F05l, 0x1BDB1E6El, 0xB1928C0Dl, - 0xF960629Dl, 0x2CC85E82l, 0x4F4EC577l, 0x3AB64AE0l, 0xFFC537F6l, - 0xA90F6BF2l, 0x5060B8B4l, 0x19E11968l, 0x714CA34Fl, 0xEE3BE15Cl, - 0x8CE2D14Bl, 0x469FF67Bl, 0xC1BC96A8l, 0x3858DA9Fl, 0x9B9DB21Fl, - 0xFD36B46Fl, 0x5A5479ADl, 0xFA52D080l }; - - - -int blowfish_testSetup(void) -{ - kdbg_init(); - return 0; -} - -int blowfish_testTearDown(void) -{ - return 0; -} - -int blowfish_testRun(void) -{ - // NOTE: we use a static variable here to avoid stack overflows due to the huge - // context structure of blowfish. - static BlowfishContext ctx; - blowfish_init(&ctx); - BlockCipher *c = &ctx.c; - - for (int i=0; i - * - * \brief Entropy pool generic interface - * \author Giovanni Bajo - * - */ - -#ifndef SEC_ENTROPY_H -#define SEC_ENTROPY_H - -#include -#include - -/** - * Maximum number of different sources of entropy available in BeRTOS. - * - * Increasing this value will likely make entropy pools use more RAM for their operations, - * so it should be kept to the minimum necessary for a given project. - */ -#define CONFIG_ENTROPY_NUM_SOURCES 8 - -typedef struct EntropyPool -{ - void (*add_entropy)(struct EntropyPool *ctx, int source_idx, - const uint8_t *data, size_t len, - int entropy); - bool (*seeding_ready)(struct EntropyPool *ctx); - void (*make_seed)(struct EntropyPool *ctx, uint8_t *out, size_t len); - -} EntropyPool; - - -/** - * Add some data samples containing entropy into the pool. - * the samples are in the buffer pointed by \a data for a total of \a len - * bytes. \a entropy is the number of bits of estimated entropy in the - * samples. \a source_idx is the index of the entropy source. - */ -INLINE void entropy_add(EntropyPool *e, int source_idx, - const uint8_t *data, size_t len, - int entropy) -{ - ASSERT(e->add_entropy); - e->add_entropy(e, source_idx, data, len, entropy); -} - -/** - * Check if the generator is ready to produce a new seed. - */ -INLINE bool entropy_seeding_ready(EntropyPool *ctx) -{ - ASSERT(ctx->seeding_ready); - return ctx->seeding_ready(ctx); -} - -/** - * Generate a new seed of the specified length. - * - * \note This should not be abused to generate a very long seed, since the pool - * cannot hold lots of entropy. - */ -INLINE void entropy_make_seed(EntropyPool *ctx, uint8_t *out, size_t len) -{ - ASSERT(ctx->make_seed); - ctx->make_seed(ctx, out, len); -} - -#endif /* SEC_ENTROPY_H */ diff --git a/bertos/sec/entropy/yarrow_pool.c b/bertos/sec/entropy/yarrow_pool.c deleted file mode 100644 index d9214700..00000000 --- a/bertos/sec/entropy/yarrow_pool.c +++ /dev/null @@ -1,172 +0,0 @@ -/** - * \file - * - * - * \brief Yarrow entropy pool - * \author Giovanni Bajo - * - */ - -#include "yarrow_pool.h" -#include -#include -#include -#include - -#define CONFIG_YARROW_POOL_FAST_RESEEDING_THRESHOLD 100 -#define CONFIG_YARROW_POOL_SLOW_RESEEDING_THRESHOLD 160 -#define CONFIG_YARROW_POOL_MAX_ENTROPY_DENSITY 50 // percent -#define CONFIG_YARROW_POOL_RESEED_ITERATIONS 80 - -static void yarrow_fast_reseed(YarrowPoolContext *ctx, uint8_t *out, size_t len) -{ - Hash *h = &ctx->pools[0].hash.h; - size_t hlen = hash_digest_len(h); - - uint8_t v0[hlen]; - memcpy(v0, hash_final(h), hlen); - - uint8_t vcur[hlen]; - memcpy(vcur, v0, hlen); - - for (uint32_t i=1;i<=CONFIG_YARROW_POOL_RESEED_ITERATIONS; ++i) { - hash_begin(h); - hash_update(h, vcur, hlen); - hash_update(h, v0, hlen); - hash_update(h, &i, 4); - memcpy(vcur, hash_final(h), hlen); - } - - - // FIXME: yarrow explains how to expand the hash digest if it's - // smaller than the output size. This is not the case for now, - // so we it's not implemented here. - ASSERT(len < hlen); - memcpy(out, vcur, len); - - // Reinitialize the fast pool - hash_begin(h); - for (int i=0; ipools[0].entropy[i] = 0; - - PURGE(v0); - PURGE(vcur); -} - -static void yarrow_slow_reseed(YarrowPoolContext *ctx, uint8_t *out, size_t len) -{ - uint8_t *data = hash_final(&ctx->pools[1].hash.h); - - hash_update(&ctx->pools[0].hash.h, data, hash_digest_len(&ctx->pools[1].hash.h)); - yarrow_fast_reseed(ctx, out, len); - - // Reinitialize the slow pool - hash_begin(&ctx->pools[1].hash.h); - for (int i=0; ipools[1].entropy[i] = 0; -} - -static void yarrow_add_entropy(EntropyPool *ctx_, int source_idx, const uint8_t *data, size_t len, int entropy) -{ - YarrowPoolContext *ctx = (YarrowPoolContext *)ctx_; - - ASSERT(source_idx < CONFIG_ENTROPY_NUM_SOURCES); - - int curpool = ctx->sources[source_idx].curpool; - ctx->sources[source_idx].curpool = 1 - ctx->sources[source_idx].curpool; - - // TODO: Yarrow also describes a statistical entropy estimator - // Currently, we just use the provided entropy and the maximum - // density. - entropy = MIN((size_t)entropy, len*8*100/CONFIG_YARROW_POOL_MAX_ENTROPY_DENSITY); - - hash_update(&ctx->pools[curpool].hash.h, data, len); - ctx->pools[curpool].entropy[source_idx] += entropy; -} - -static bool yarrow_fast_reseeding_ready(YarrowPoolContext *ctx) -{ - for (int i=0; ipools[0].entropy[i] >= - CONFIG_YARROW_POOL_FAST_RESEEDING_THRESHOLD) - return 1; - return 0; -} - -static bool yarrow_slow_reseeding_ready(YarrowPoolContext *ctx) -{ - int count = 0; - - for (int i=0; ipools[1].entropy[i] >= - CONFIG_YARROW_POOL_SLOW_RESEEDING_THRESHOLD) { - ++count; - if (count == 2) - return 1; - } - - return 0; -} - -static bool yarrow_reseeding_ready(EntropyPool *ctx_) -{ - YarrowPoolContext *ctx = (YarrowPoolContext *)ctx_; - return yarrow_fast_reseeding_ready(ctx) || yarrow_slow_reseeding_ready(ctx); -} - -static void yarrow_reseed(EntropyPool *ctx_, uint8_t *out, size_t len) -{ - YarrowPoolContext *ctx = (YarrowPoolContext *)ctx_; - - if (yarrow_slow_reseeding_ready(ctx)) - yarrow_slow_reseed(ctx, out, len); - else { - ASSERT(yarrow_fast_reseeding_ready(ctx)); - yarrow_fast_reseed(ctx, out, len); - } -} - -/**********************************************************************/ - -void yarrowpool_init(YarrowPoolContext *ctx) -{ - ctx->e.add_entropy = yarrow_add_entropy; - ctx->e.seeding_ready = yarrow_reseeding_ready; - ctx->e.make_seed = yarrow_reseed; - - for (int i=0; i<2; ++i) { - memset(ctx->pools[i].entropy, 0, sizeof(ctx->pools[i].entropy)); - SHA1_init(&ctx->pools[i].hash); - hash_begin(&ctx->pools[i].hash.h); - } - - memset(ctx->sources, 0, sizeof(ctx->sources)); -} diff --git a/bertos/sec/entropy/yarrow_pool.h b/bertos/sec/entropy/yarrow_pool.h deleted file mode 100644 index d19fb8a2..00000000 --- a/bertos/sec/entropy/yarrow_pool.h +++ /dev/null @@ -1,63 +0,0 @@ -/** - * \file - * - * - * \brief Yarrow pool implementation - * \author Giovanni Bajo - * - */ - -#ifndef SEC_ENTROPY_YARROW_POOL_H -#define SEC_ENTROPY_YARROW_POOL_H - -#include -#include - -typedef struct -{ - EntropyPool e; - - struct YarrowPool - { - SHA1_Context hash; - int entropy[CONFIG_ENTROPY_NUM_SOURCES]; - } pools[2]; - - struct YarrowSources - { - int curpool; - } sources[CONFIG_ENTROPY_NUM_SOURCES]; - -} YarrowPoolContext; - -void yarrowpool_init(YarrowPoolContext *ctx); - -#endif /* SEC_ENTROPY_YARROW_POOL_H */ diff --git a/bertos/sec/hash.h b/bertos/sec/hash.h deleted file mode 100644 index 937111c2..00000000 --- a/bertos/sec/hash.h +++ /dev/null @@ -1,106 +0,0 @@ -/** - * \file - * - * - * \brief Generic interface for hashing algorithms. - * \author Giovanni Bajo - * - */ - -#ifndef SEC_HASH_H -#define SEC_HASH_H - -#include -#include - -typedef struct Hash -{ - void (*begin)(struct Hash *h); - void (*update)(struct Hash *h, const void *data, size_t len); - uint8_t* (*final)(struct Hash *h); - uint8_t digest_len; - uint8_t block_len; -} Hash; - -/** - * Initialize a hash computation. - */ -INLINE void hash_begin(Hash *h) -{ - ASSERT(h->begin); - h->begin(h); -} - -/** - * Add some data to the computation. - */ -INLINE void hash_update(Hash *h, const void* data, size_t len) -{ - ASSERT(h->update); - h->update(h, data, len); -} - -/** - * Finalize the hash computation and return the digest. - * - * \note This function must be called exactly once per each computation. - * Calling it twice leads to undefined behaviour. - * - * \note The pointer returned is within the hash context structure \a h, so it - * has the same lifetime as the hash instance. The data will be invalidated - * as soon as \a hash_begin is called again on the same instance. - */ -INLINE uint8_t* hash_final(Hash *h) -{ - ASSERT(h->final); - return h->final(h); -} - -/** - * Return the digest length in bytes. - */ -INLINE int hash_digest_len(Hash *h) -{ - return h->digest_len; -} - -/* - * Return the internal block length in bytes. - * - * Hash functions operate on a fixed-size block. This information is useful - * for composite functions like HMAC to adjust their internal operations. - */ -INLINE int hash_block_len(Hash *h) -{ - return h->block_len; -} - -#endif /* SEC_HASH_H */ diff --git a/bertos/sec/hash/md5.c b/bertos/sec/hash/md5.c deleted file mode 100644 index 306bacc0..00000000 --- a/bertos/sec/hash/md5.c +++ /dev/null @@ -1,252 +0,0 @@ -/* - * This code implements the MD5 message-digest algorithm. - * The algorithm is due to Ron Rivest. This code was - * written by Colin Plumb in 1993, no copyright is claimed. - * This code is in the public domain; do with it what you wish. - * - * Equivalent code is available from RSA Data Security, Inc. - * This code has been tested against that, and is equivalent, - * except that you don't need to include two pages of legalese - * with every copy. - * - * To compute the message digest of a chunk of bytes, declare an - * MD5Context structure, pass it to MD5Init, call MD5Update as - * needed on buffers full of bytes, and then call MD5Final, which - * will fill a supplied 16-byte array with the digest. - */ - -#include "md5.h" -#include -#include -#include - -static void MD5Transform(uint32_t buf[4], uint32_t in[16]); - -static void byteReverse(uint32_t *buf, unsigned longs) -{ - do { - *buf = le32_to_cpu(*buf); - ++buf; - } while (--longs); -} - -/* - * Start MD5 accumulation. Set bit count to 0 and buffer to mysterious - * initialization constants. - */ -static void MD5_begin(Hash *h) -{ - MD5_Context *ctx = (MD5_Context *)h; - - ctx->buf[0] = 0x67452301; - ctx->buf[1] = 0xefcdab89; - ctx->buf[2] = 0x98badcfe; - ctx->buf[3] = 0x10325476; - - ctx->bits = 0; -} - -/* - * Update context to reflect the concatenation of another buffer full - * of bytes. - */ -static void MD5_update(Hash *h, const void* vbuf, size_t len) -{ - MD5_Context *ctx = (MD5_Context *)h; - const char *buf = (const char *)vbuf; - uint32_t t; - - /* Update bitcount */ - t = (ctx->bits >> 3) & 0x3f; /* Bytes already in shsInfo->data */ - ctx->bits += len*8; - - /* Handle any leading odd-sized chunks */ - - if (t) { - uint8_t *p = (uint8_t*) ctx->in + t; - - t = 64 - t; - if (len < t) { - memcpy(p, buf, len); - return; - } - memcpy(p, buf, t); - byteReverse((uint32_t*)ctx->in, 16); - MD5Transform(ctx->buf, (uint32_t*)ctx->in); - buf += t; - len -= t; - } - /* Process data in 64-byte chunks */ - - while (len >= 64) { - memcpy(ctx->in, buf, 64); - byteReverse((uint32_t*)ctx->in, 16); - MD5Transform(ctx->buf, (uint32_t*)ctx->in); - buf += 64; - len -= 64; - } - - /* Handle any remaining bytes of data. */ - memcpy(ctx->in, buf, len); -} - -/* - * Final wrapup - pad to 64-byte boundary with the bit pattern - * 1 0* (64-bit count of bits processed, MSB-first) - */ -static uint8_t* MD5_final(struct Hash *h) -{ - MD5_Context *ctx = (MD5_Context *)h; - unsigned count; - unsigned char *p; - - /* Compute number of bytes mod 64 */ - count = (ctx->bits >> 3) & 0x3F; - - /* Set the first char of padding to 0x80. This is safe since there is - always at least one byte free */ - p = ctx->in + count; - *p++ = 0x80; - - /* Bytes of padding needed to make 64 bytes */ - count = 64 - 1 - count; - - /* Pad out to 56 mod 64 */ - if (count < 8) { - /* Two lots of padding: Pad the first block to 64 bytes */ - memset(p, 0, count); - byteReverse((uint32_t*)ctx->in, 16); - MD5Transform(ctx->buf, (uint32_t *) ctx->in); - - /* Now fill the next block with 56 bytes */ - memset(ctx->in, 0, 56); - } else { - /* Pad block to 56 bytes */ - memset(p, 0, count - 8); - } - byteReverse((uint32_t*)ctx->in, 14); - - /* Append length in bits and transform */ - ((uint32_t*) ctx->in)[14] = (uint32_t)ctx->bits; - ((uint32_t*) ctx->in)[15] = (uint32_t)(ctx->bits >> 32); - - MD5Transform(ctx->buf, (uint32_t *) ctx->in); - byteReverse((uint32_t*)ctx->buf, 4); - - PURGE(ctx->in); - PURGE(ctx->bits); - - return (uint8_t *)ctx->buf; -} - - -/* The four core functions - F1 is optimized somewhat */ - -/* #define F1(x, y, z) (x & y | ~x & z) */ -#define F1(x, y, z) (z ^ (x & (y ^ z))) -#define F2(x, y, z) F1(z, x, y) -#define F3(x, y, z) (x ^ y ^ z) -#define F4(x, y, z) (y ^ (x | ~z)) - -/* This is the central step in the MD5 algorithm. */ -#define MD5STEP(f, w, x, y, z, data, s) \ - ( w += f(x, y, z) + data, w = w<>(32-s), w += x ) - -/* - * The core of the MD5 algorithm, this alters an existing MD5 hash to - * reflect the addition of 16 longwords of new data. MD5Update blocks - * the data and converts bytes into longwords for this routine. - */ -static void MD5Transform(uint32_t buf[4], uint32_t in[16]) -{ - register uint32_t a, b, c, d; - - a = buf[0]; - b = buf[1]; - c = buf[2]; - d = buf[3]; - - MD5STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7); - MD5STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12); - MD5STEP(F1, c, d, a, b, in[2] + 0x242070db, 17); - MD5STEP(F1, b, c, d, a, in[3] + 0xc1bdceee, 22); - MD5STEP(F1, a, b, c, d, in[4] + 0xf57c0faf, 7); - MD5STEP(F1, d, a, b, c, in[5] + 0x4787c62a, 12); - MD5STEP(F1, c, d, a, b, in[6] + 0xa8304613, 17); - MD5STEP(F1, b, c, d, a, in[7] + 0xfd469501, 22); - MD5STEP(F1, a, b, c, d, in[8] + 0x698098d8, 7); - MD5STEP(F1, d, a, b, c, in[9] + 0x8b44f7af, 12); - MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17); - MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22); - MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7); - MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12); - MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17); - MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22); - - MD5STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5); - MD5STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9); - MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14); - MD5STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20); - MD5STEP(F2, a, b, c, d, in[5] + 0xd62f105d, 5); - MD5STEP(F2, d, a, b, c, in[10] + 0x02441453, 9); - MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14); - MD5STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20); - MD5STEP(F2, a, b, c, d, in[9] + 0x21e1cde6, 5); - MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9); - MD5STEP(F2, c, d, a, b, in[3] + 0xf4d50d87, 14); - MD5STEP(F2, b, c, d, a, in[8] + 0x455a14ed, 20); - MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5); - MD5STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9); - MD5STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14); - MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20); - - MD5STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4); - MD5STEP(F3, d, a, b, c, in[8] + 0x8771f681, 11); - MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16); - MD5STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23); - MD5STEP(F3, a, b, c, d, in[1] + 0xa4beea44, 4); - MD5STEP(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11); - MD5STEP(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16); - MD5STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23); - MD5STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4); - MD5STEP(F3, d, a, b, c, in[0] + 0xeaa127fa, 11); - MD5STEP(F3, c, d, a, b, in[3] + 0xd4ef3085, 16); - MD5STEP(F3, b, c, d, a, in[6] + 0x04881d05, 23); - MD5STEP(F3, a, b, c, d, in[9] + 0xd9d4d039, 4); - MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11); - MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16); - MD5STEP(F3, b, c, d, a, in[2] + 0xc4ac5665, 23); - - MD5STEP(F4, a, b, c, d, in[0] + 0xf4292244, 6); - MD5STEP(F4, d, a, b, c, in[7] + 0x432aff97, 10); - MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15); - MD5STEP(F4, b, c, d, a, in[5] + 0xfc93a039, 21); - MD5STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6); - MD5STEP(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10); - MD5STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15); - MD5STEP(F4, b, c, d, a, in[1] + 0x85845dd1, 21); - MD5STEP(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6); - MD5STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10); - MD5STEP(F4, c, d, a, b, in[6] + 0xa3014314, 15); - MD5STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21); - MD5STEP(F4, a, b, c, d, in[4] + 0xf7537e82, 6); - MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10); - MD5STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15); - MD5STEP(F4, b, c, d, a, in[9] + 0xeb86d391, 21); - - buf[0] += a; - buf[1] += b; - buf[2] += c; - buf[3] += d; -} - -/*******************************************************************/ - -void MD5_init(MD5_Context *ctx) -{ - ctx->h.begin = MD5_begin; - ctx->h.update = MD5_update; - ctx->h.final = MD5_final; - ctx->h.digest_len = 16; - ctx->h.block_len = 64; -} diff --git a/bertos/sec/hash/md5.h b/bertos/sec/hash/md5.h deleted file mode 100644 index a6d886df..00000000 --- a/bertos/sec/hash/md5.h +++ /dev/null @@ -1,64 +0,0 @@ -/** - * \file - * - * - * \brief MD5 Hashing algorithm. - * \author Giovanni Bajo - * - * $WIZ$ module_name = "md5" - */ - -#ifndef SEC_HASH_MD5_H -#define SEC_HASH_MD5_H - -#include -#include -#include - -typedef struct -{ - Hash h; - uint32_t buf[4]; - uint8_t in[64]; - uint64_t bits; - -} MD5_Context; - -void MD5_init(MD5_Context *ctx); - -#define MD5_stackinit(...) \ - ({ MD5_Context *ctx = alloca(sizeof(MD5_Context)); MD5_init(ctx , ##__VA_ARGS__); &ctx->h; }) - -int MD5_testSetup(void); -int MD5_testRun(void); -int MD5_testTearDown(void); - -#endif /* SEC_HASH_MD5_H */ diff --git a/bertos/sec/hash/md5_test.c b/bertos/sec/hash/md5_test.c deleted file mode 100644 index c3102d10..00000000 --- a/bertos/sec/hash/md5_test.c +++ /dev/null @@ -1,54 +0,0 @@ - -#include -#include - -#include "md5.h" -#include - -int MD5_testSetup(void) -{ - kdbg_init(); - return 0; -} - -int MD5_testTearDown(void) -{ - return 0; -} - -int MD5_testRun(void) -{ - int i; - MD5_Context context; - MD5_init(&context); - - hash_begin(&context.h); - hash_update(&context.h, "abc", 3); - ASSERT(memcmp(hash_final(&context.h), "\x90\x01\x50\x98\x3C\xD2\x4F\xB0\xD6\x96\x3F\x7D\x28\xE1\x7F\x72", 16) == 0); - - hash_begin(&context.h); - hash_update(&context.h, "aaa", 3); - ASSERT(memcmp(hash_final(&context.h), "\x47\xBC\xE5\xC7\x4F\x58\x9F\x48\x67\xDB\xD5\x7E\x9C\xA9\xF8\x08", 16) == 0); - - hash_begin(&context.h); - hash_update(&context.h, "abcdefghijklmnopqrstuvwxyz", 26); - ASSERT(memcmp(hash_final(&context.h), "\xC3\xFC\xD3\xD7\x61\x92\xE4\x00\x7D\xFB\x49\x6C\xCA\x67\xE1\x3B", 16) == 0); - - hash_begin(&context.h); - hash_update(&context.h, "0123456789", 10); - ASSERT(memcmp(hash_final(&context.h), "\x78\x1E\x5E\x24\x5D\x69\xB5\x66\x97\x9B\x86\xE2\x8D\x23\xF2\xC7", 16) == 0); - - hash_begin(&context.h); - for (i = 0; i < 1000; i++) - hash_update(&context.h, "a", 1); - ASSERT(memcmp(hash_final(&context.h), "\xCA\xBE\x45\xDC\xC9\xAE\x5B\x66\xBA\x86\x60\x0C\xCA\x6B\x8B\xA8", 16) == 0); - - hash_begin(&context.h); - for (i = 0; i < 1000000; i++) - hash_update(&context.h, "a", 1); - ASSERT(memcmp(hash_final(&context.h), "\x77\x07\xd6\xae\x4e\x02\x7c\x70\xee\xa2\xa9\x35\xc2\x29\x6f\x21", 16) == 0); - - return 0; -} - -TEST_MAIN(MD5); diff --git a/bertos/sec/hash/ripemd.c b/bertos/sec/hash/ripemd.c deleted file mode 100644 index ed53d621..00000000 --- a/bertos/sec/hash/ripemd.c +++ /dev/null @@ -1,338 +0,0 @@ -/** - * \file - * - * - * \brief RIPEMD-160 Hashing algorithm. - * \author Giovanni Bajo - */ - -/* - * - * RIPEMD160.c : RIPEMD-160 implementation - * - * Written in 2008 by Dwayne C. Litzenberger - * - * =================================================================== - * The contents of this file are dedicated to the public domain. To - * the extent that dedication to the public domain is not available, - * everyone is granted a worldwide, perpetual, royalty-free, - * non-exclusive license to exercise all rights associated with the - * contents of this file for any purpose whatsoever. - * No rights are reserved. - * =================================================================== - */ - -#include "ripemd.h" -#include -#include -#include -#include - -#define RIPEMD160_DIGEST_SIZE 20 - - -/* cyclic left-shift the 32-bit word n left by s bits */ -#define ROL(s, n) ROTL(n, s) - -/* Initial values for the chaining variables. - * This is just 0123456789ABCDEFFEDCBA9876543210F0E1D2C3 in little-endian. */ -static const uint32_t initial_h[5] = { 0x67452301u, 0xEFCDAB89u, 0x98BADCFEu, 0x10325476u, 0xC3D2E1F0u }; - -/* Ordering of message words. Based on the permutations rho(i) and pi(i), defined as follows: - * - * rho(i) := { 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8 }[i] 0 <= i <= 15 - * - * pi(i) := 9*i + 5 (mod 16) - * - * Line | Round 1 | Round 2 | Round 3 | Round 4 | Round 5 - * -------+-----------+-----------+-----------+-----------+----------- - * left | id | rho | rho^2 | rho^3 | rho^4 - * right | pi | rho pi | rho^2 pi | rho^3 pi | rho^4 pi - */ - -/* Left line */ -static const uint8_t RL[5][16] = { - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }, /* Round 1: id */ - { 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8 }, /* Round 2: rho */ - { 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12 }, /* Round 3: rho^2 */ - { 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2 }, /* Round 4: rho^3 */ - { 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13 } /* Round 5: rho^4 */ -}; - -/* Right line */ -static const uint8_t RR[5][16] = { - { 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12 }, /* Round 1: pi */ - { 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2 }, /* Round 2: rho pi */ - { 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13 }, /* Round 3: rho^2 pi */ - { 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14 }, /* Round 4: rho^3 pi */ - { 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11 } /* Round 5: rho^4 pi */ -}; - -/* - * Shifts - Since we don't actually re-order the message words according to - * the permutations above (we could, but it would be slower), these tables - * come with the permutations pre-applied. - */ - -/* Shifts, left line */ -static const uint8_t SL[5][16] = { - { 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8 }, /* Round 1 */ - { 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12 }, /* Round 2 */ - { 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5 }, /* Round 3 */ - { 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12 }, /* Round 4 */ - { 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 } /* Round 5 */ -}; - -/* Shifts, right line */ -static const uint8_t SR[5][16] = { - { 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6 }, /* Round 1 */ - { 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11 }, /* Round 2 */ - { 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5 }, /* Round 3 */ - { 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8 }, /* Round 4 */ - { 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 } /* Round 5 */ -}; - -/* Boolean functions */ - -#define F1(x, y, z) ((x) ^ (y) ^ (z)) -#define F2(x, y, z) (((x) & (y)) | (~(x) & (z))) -#define F3(x, y, z) (((x) | ~(y)) ^ (z)) -#define F4(x, y, z) (((x) & (z)) | ((y) & ~(z))) -#define F5(x, y, z) ((x) ^ ((y) | ~(z))) - -/* Round constants, left line */ -static const uint32_t KL[5] = { - 0x00000000u, /* Round 1: 0 */ - 0x5A827999u, /* Round 2: floor(2**30 * sqrt(2)) */ - 0x6ED9EBA1u, /* Round 3: floor(2**30 * sqrt(3)) */ - 0x8F1BBCDCu, /* Round 4: floor(2**30 * sqrt(5)) */ - 0xA953FD4Eu /* Round 5: floor(2**30 * sqrt(7)) */ -}; - -/* Round constants, right line */ -static const uint32_t KR[5] = { - 0x50A28BE6u, /* Round 1: floor(2**30 * cubert(2)) */ - 0x5C4DD124u, /* Round 2: floor(2**30 * cubert(3)) */ - 0x6D703EF3u, /* Round 3: floor(2**30 * cubert(5)) */ - 0x7A6D76E9u, /* Round 4: floor(2**30 * cubert(7)) */ - 0x00000000u /* Round 5: 0 */ -}; - -static void ripemd160_init(Hash *h) -{ - RIPEMD_Context *self = (RIPEMD_Context *)h; - - memcpy(self->h, initial_h, RIPEMD160_DIGEST_SIZE); - memset(&self->buf, 0, sizeof(self->buf)); - self->length = 0; - self->bufpos = 0; -} - -static inline void byteswap_digest(uint32_t *p) -{ - unsigned int i; - - for (i = 0; i < 4; i++) { - p[0] = SWAB32(p[0]); - p[1] = SWAB32(p[1]); - p[2] = SWAB32(p[2]); - p[3] = SWAB32(p[3]); - p += 4; - } -} - -/* The RIPEMD160 compression function. Operates on self->buf */ -static void ripemd160_compress(RIPEMD_Context *self) -{ - uint8_t w, round; - uint32_t T; - uint32_t AL, BL, CL, DL, EL; /* left line */ - uint32_t AR, BR, CR, DR, ER; /* right line */ - - /* Sanity check */ - ASSERT(self->bufpos == 64); - - /* Byte-swap the buffer if we're on a big-endian machine */ -#if CPU_BYTE_ORDER == CPU_BIG_ENDIAN - byteswap_digest(self->buf.w); -#endif - - /* Load the left and right lines with the initial state */ - AL = AR = self->h[0]; - BL = BR = self->h[1]; - CL = CR = self->h[2]; - DL = DR = self->h[3]; - EL = ER = self->h[4]; - - /* Round 1 */ - round = 0; - for (w = 0; w < 16; w++) { /* left line */ - T = ROL(SL[round][w], AL + F1(BL, CL, DL) + self->buf.w[RL[round][w]] + KL[round]) + EL; - AL = EL; EL = DL; DL = ROL(10, CL); CL = BL; BL = T; - } - for (w = 0; w < 16; w++) { /* right line */ - T = ROL(SR[round][w], AR + F5(BR, CR, DR) + self->buf.w[RR[round][w]] + KR[round]) + ER; - AR = ER; ER = DR; DR = ROL(10, CR); CR = BR; BR = T; - } - - /* Round 2 */ - round++; - for (w = 0; w < 16; w++) { /* left line */ - T = ROL(SL[round][w], AL + F2(BL, CL, DL) + self->buf.w[RL[round][w]] + KL[round]) + EL; - AL = EL; EL = DL; DL = ROL(10, CL); CL = BL; BL = T; - } - for (w = 0; w < 16; w++) { /* right line */ - T = ROL(SR[round][w], AR + F4(BR, CR, DR) + self->buf.w[RR[round][w]] + KR[round]) + ER; - AR = ER; ER = DR; DR = ROL(10, CR); CR = BR; BR = T; - } - - /* Round 3 */ - round++; - for (w = 0; w < 16; w++) { /* left line */ - T = ROL(SL[round][w], AL + F3(BL, CL, DL) + self->buf.w[RL[round][w]] + KL[round]) + EL; - AL = EL; EL = DL; DL = ROL(10, CL); CL = BL; BL = T; - } - for (w = 0; w < 16; w++) { /* right line */ - T = ROL(SR[round][w], AR + F3(BR, CR, DR) + self->buf.w[RR[round][w]] + KR[round]) + ER; - AR = ER; ER = DR; DR = ROL(10, CR); CR = BR; BR = T; - } - - /* Round 4 */ - round++; - for (w = 0; w < 16; w++) { /* left line */ - T = ROL(SL[round][w], AL + F4(BL, CL, DL) + self->buf.w[RL[round][w]] + KL[round]) + EL; - AL = EL; EL = DL; DL = ROL(10, CL); CL = BL; BL = T; - } - for (w = 0; w < 16; w++) { /* right line */ - T = ROL(SR[round][w], AR + F2(BR, CR, DR) + self->buf.w[RR[round][w]] + KR[round]) + ER; - AR = ER; ER = DR; DR = ROL(10, CR); CR = BR; BR = T; - } - - /* Round 5 */ - round++; - for (w = 0; w < 16; w++) { /* left line */ - T = ROL(SL[round][w], AL + F5(BL, CL, DL) + self->buf.w[RL[round][w]] + KL[round]) + EL; - AL = EL; EL = DL; DL = ROL(10, CL); CL = BL; BL = T; - } - for (w = 0; w < 16; w++) { /* right line */ - T = ROL(SR[round][w], AR + F1(BR, CR, DR) + self->buf.w[RR[round][w]] + KR[round]) + ER; - AR = ER; ER = DR; DR = ROL(10, CR); CR = BR; BR = T; - } - - /* Final mixing stage */ - T = self->h[1] + CL + DR; - self->h[1] = self->h[2] + DL + ER; - self->h[2] = self->h[3] + EL + AR; - self->h[3] = self->h[4] + AL + BR; - self->h[4] = self->h[0] + BL + CR; - self->h[0] = T; - - /* Clear the buffer and wipe the temporary variables */ - T = AL = BL = CL = DL = EL = AR = BR = CR = DR = ER = 0; - memset(&self->buf, 0, sizeof(self->buf)); - self->bufpos = 0; -} - -static void ripemd160_update(Hash *h, const void *data, size_t length) -{ - RIPEMD_Context *self = (RIPEMD_Context *)h; - const uint8_t *p = (const uint8_t *)data; - unsigned int bytes_needed; - - /* Some assertions */ - ASSERT(p != NULL); - - /* We never leave a full buffer */ - ASSERT(self->bufpos < 64); - - while (length > 0) { - /* Figure out how many bytes we need to fill the internal buffer. */ - bytes_needed = 64 - self->bufpos; - - if (length >= bytes_needed) { - /* We have enough bytes, so copy them into the internal buffer and run - * the compression function. */ - memcpy(&self->buf.b[self->bufpos], p, bytes_needed); - self->bufpos += bytes_needed; - self->length += bytes_needed << 3; /* length is in bits */ - p += bytes_needed; - ripemd160_compress(self); - length -= bytes_needed; - continue; - } - - /* We do not have enough bytes to fill the internal buffer. - * Copy what's there and return. */ - memcpy(&self->buf.b[self->bufpos], p, length); - self->bufpos += length; - self->length += length << 3; /* length is in bits */ - return; - } -} - -static uint8_t* ripemd160_digest(Hash *h) -{ - RIPEMD_Context *self = (RIPEMD_Context *)h; - - /* Append the padding */ - self->buf.b[self->bufpos++] = 0x80; - - if (self->bufpos > 56) { - self->bufpos = 64; - ripemd160_compress(self); - } - - /* Append the length */ - self->buf.w[14] = cpu_to_le32((uint32_t)(self->length & 0xFFFFffffu)); - self->buf.w[15] = cpu_to_le32((uint32_t)((self->length >> 32) & 0xFFFFffffu)); - - self->bufpos = 64; - ripemd160_compress(self); - - /* Copy the final state into the output buffer */ -#if CPU_BYTE_ORDER == CPU_BIG_ENDIAN - byteswap_digest(self->h); -#endif - - return (uint8_t*)&self->h; -} - -/**************************************************************************************/ - - -void RIPEMD_init(RIPEMD_Context *ctx) -{ - ctx->hash.begin = ripemd160_init; - ctx->hash.update = ripemd160_update; - ctx->hash.final = ripemd160_digest; - ctx->hash.digest_len = RIPEMD160_DIGEST_SIZE; - ctx->hash.block_len = 64; -} diff --git a/bertos/sec/hash/ripemd.h b/bertos/sec/hash/ripemd.h deleted file mode 100644 index 4f955477..00000000 --- a/bertos/sec/hash/ripemd.h +++ /dev/null @@ -1,32 +0,0 @@ -#ifndef SEC_HASH_RIPEMD_H -#define SEC_HASH_RIPEMD_H - -#include -#include -#include - -typedef struct { - Hash hash; - uint32_t h[5]; /* The current hash state */ - uint64_t length; /* Total number of _bits_ (not bytes) added to the - hash. This includes bits that have been buffered - but not not fed through the compression function yet. */ - union { - uint32_t w[16]; - uint8_t b[64]; - } buf; - uint8_t bufpos; /* number of bytes currently in the buffer */ - -} RIPEMD_Context; - -void RIPEMD_init(RIPEMD_Context *ctx); - -#define RIPEMD_stackinit(...) \ - ({ RIPEMD_Context *ctx = alloca(sizeof(RIPEMD_Context)); RIPEMD_init(ctx , ##__VA_ARGS__); &ctx->hash; }) - -int RIPEMD_testSetup(void); -int RIPEMD_testRun(void); -int RIPEMD_testTearDown(void); - - -#endif /* SEC_HASH_RIPEMD_H */ \ No newline at end of file diff --git a/bertos/sec/hash/ripemd_test.c b/bertos/sec/hash/ripemd_test.c deleted file mode 100644 index 5c3c0512..00000000 --- a/bertos/sec/hash/ripemd_test.c +++ /dev/null @@ -1,64 +0,0 @@ - -#include "ripemd.h" - -#include -#include - -#include - -int RIPEMD_testSetup(void) -{ - kdbg_init(); - return 0; -} - -int RIPEMD_testTearDown(void) -{ - return 0; -} - -int RIPEMD_testRun(void) -{ - Hash *h = RIPEMD_stackinit(); - - hash_begin(h); - ASSERT(memcmp(hash_final(h), "\x9c\x11\x85\xa5\xc5\xe9\xfc\x54\x61\x28\x08\x97\x7e\xe8\xf5\x48\xb2\x25\x8d\x31", 20) == 0); - - hash_begin(h); - hash_update(h, "a", 1); - ASSERT(memcmp(hash_final(h), "\x0b\xdc\x9d\x2d\x25\x6b\x3e\xe9\xda\xae\x34\x7b\xe6\xf4\xdc\x83\x5a\x46\x7f\xfe", 20) == 0); - - hash_begin(h); - hash_update(h, "abc", 3); - ASSERT(memcmp(hash_final(h), "\x8e\xb2\x08\xf7\xe0\x5d\x98\x7a\x9b\x04\x4a\x8e\x98\xc6\xb0\x87\xf1\x5a\x0b\xfc", 20) == 0); - - hash_begin(h); - hash_update(h, "message digest", 14); - ASSERT(memcmp(hash_final(h), "\x5d\x06\x89\xef\x49\xd2\xfa\xe5\x72\xb8\x81\xb1\x23\xa8\x5f\xfa\x21\x59\x5f\x36", 20) == 0); - - hash_begin(h); - hash_update(h, "abcdefghijklmnopqrstuvwxyz", 26); - ASSERT(memcmp(hash_final(h), "\xf7\x1c\x27\x10\x9c\x69\x2c\x1b\x56\xbb\xdc\xeb\x5b\x9d\x28\x65\xb3\x70\x8d\xbc", 20) == 0); - - hash_begin(h); - hash_update(h, "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", 56); - ASSERT(memcmp(hash_final(h), "\x12\xa0\x53\x38\x4a\x9c\x0c\x88\xe4\x05\xa0\x6c\x27\xdc\xf4\x9a\xda\x62\xeb\x2b", 20) == 0); - - hash_begin(h); - hash_update(h, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", 62); - ASSERT(memcmp(hash_final(h), "\xb0\xe2\x0b\x6e\x31\x16\x64\x02\x86\xed\x3a\x87\xa5\x71\x30\x79\xb2\x1f\x51\x89", 20) == 0); - - hash_begin(h); - for (int i=0;i<8;++i) - hash_update(h, "1234567890", 10); - ASSERT(memcmp(hash_final(h), "\x9b\x75\x2e\x45\x57\x3d\x4b\x39\xf4\xdb\xd3\x32\x3c\xab\x82\xbf\x63\x32\x6b\xfb", 20) == 0); - - hash_begin(h); - for (int i=0;i<1000000;++i) - hash_update(h, "a", 1); - ASSERT(memcmp(hash_final(h), "\x52\x78\x32\x43\xc1\x69\x7b\xdb\xe1\x6d\x37\xf9\x7f\x68\xf0\x83\x25\xdc\x15\x28", 20) == 0); - - return 0; -} - -TEST_MAIN(RIPEMD); diff --git a/bertos/sec/hash/sha1.c b/bertos/sec/hash/sha1.c deleted file mode 100644 index 6f195a5b..00000000 --- a/bertos/sec/hash/sha1.c +++ /dev/null @@ -1,256 +0,0 @@ -/** - * \file - * - * - * \brief SHA-1 Hashing algorithm. - * \author Giovanni Bajo - */ - -/* - * Derived from: - * SHA-1 in C - * By Steve Reid - * 100% Public Domain - */ - -/* #define LITTLE_ENDIAN * This should be #define'd if true. */ -/* #define SHA1HANDSOFF * Copies data before messing with it. */ - -#include "sha1.h" - -#include -#include -#include -#include // CPU_BYTE_ORDER -#include -#include -#include - -#define SHA1_BLOCK_LEN 64 -#define SHA1_DIGEST_LEN 20 - -static void SHA1Transform(uint32_t state[5], const uint8_t buffer[64]); - -#define rol(value, bits) ROTL(value, bits) - -/* blk0() and blk() perform the initial expand. */ -/* I got the idea of expanding during the round function from SSLeay */ -#define blk0(i) (block[i] = be32_to_cpu(block[i])) -#define blk(i) (block[i&15] = rol(block[(i+13)&15]^block[(i+8)&15] \ - ^block[(i+2)&15]^block[i&15],1)) - -/* (R0+R1), R2, R3, R4 are the different operations used in SHA1 */ -#define R0(v,w,x,y,z,i) z+=((w&(x^y))^y)+blk0(i)+0x5A827999+rol(v,5);w=rol(w,30); -#define R1(v,w,x,y,z,i) z+=((w&(x^y))^y)+blk(i)+0x5A827999+rol(v,5);w=rol(w,30); -#define R2(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0x6ED9EBA1+rol(v,5);w=rol(w,30); -#define R3(v,w,x,y,z,i) z+=(((w|x)&y)|(w&x))+blk(i)+0x8F1BBCDC+rol(v,5);w=rol(w,30); -#define R4(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0xCA62C1D6+rol(v,5);w=rol(w,30); - - -/* Hash a single 512-bit block. This is the core of the algorithm. */ -static void SHA1Transform(uint32_t state[5], const uint8_t buffer[64]) -{ - uint32_t a, b, c, d, e; - uint32_t block[16]; - - memcpy(&block, buffer, 64); - - /* Copy context->state[] to working vars */ - a = state[0]; - b = state[1]; - c = state[2]; - d = state[3]; - e = state[4]; - /* 4 rounds of 20 operations each. Loop unrolled. */ - R0(a,b,c,d,e, 0); - R0(e,a,b,c,d, 1); - R0(d,e,a,b,c, 2); - R0(c,d,e,a,b, 3); - R0(b,c,d,e,a, 4); - R0(a,b,c,d,e, 5); - R0(e,a,b,c,d, 6); - R0(d,e,a,b,c, 7); - R0(c,d,e,a,b, 8); - R0(b,c,d,e,a, 9); - R0(a,b,c,d,e,10); - R0(e,a,b,c,d,11); - R0(d,e,a,b,c,12); - R0(c,d,e,a,b,13); - R0(b,c,d,e,a,14); - R0(a,b,c,d,e,15); - R1(e,a,b,c,d,16); - R1(d,e,a,b,c,17); - R1(c,d,e,a,b,18); - R1(b,c,d,e,a,19); - R2(a,b,c,d,e,20); - R2(e,a,b,c,d,21); - R2(d,e,a,b,c,22); - R2(c,d,e,a,b,23); - R2(b,c,d,e,a,24); - R2(a,b,c,d,e,25); - R2(e,a,b,c,d,26); - R2(d,e,a,b,c,27); - R2(c,d,e,a,b,28); - R2(b,c,d,e,a,29); - R2(a,b,c,d,e,30); - R2(e,a,b,c,d,31); - R2(d,e,a,b,c,32); - R2(c,d,e,a,b,33); - R2(b,c,d,e,a,34); - R2(a,b,c,d,e,35); - R2(e,a,b,c,d,36); - R2(d,e,a,b,c,37); - R2(c,d,e,a,b,38); - R2(b,c,d,e,a,39); - R3(a,b,c,d,e,40); - R3(e,a,b,c,d,41); - R3(d,e,a,b,c,42); - R3(c,d,e,a,b,43); - R3(b,c,d,e,a,44); - R3(a,b,c,d,e,45); - R3(e,a,b,c,d,46); - R3(d,e,a,b,c,47); - R3(c,d,e,a,b,48); - R3(b,c,d,e,a,49); - R3(a,b,c,d,e,50); - R3(e,a,b,c,d,51); - R3(d,e,a,b,c,52); - R3(c,d,e,a,b,53); - R3(b,c,d,e,a,54); - R3(a,b,c,d,e,55); - R3(e,a,b,c,d,56); - R3(d,e,a,b,c,57); - R3(c,d,e,a,b,58); - R3(b,c,d,e,a,59); - R4(a,b,c,d,e,60); - R4(e,a,b,c,d,61); - R4(d,e,a,b,c,62); - R4(c,d,e,a,b,63); - R4(b,c,d,e,a,64); - R4(a,b,c,d,e,65); - R4(e,a,b,c,d,66); - R4(d,e,a,b,c,67); - R4(c,d,e,a,b,68); - R4(b,c,d,e,a,69); - R4(a,b,c,d,e,70); - R4(e,a,b,c,d,71); - R4(d,e,a,b,c,72); - R4(c,d,e,a,b,73); - R4(b,c,d,e,a,74); - R4(a,b,c,d,e,75); - R4(e,a,b,c,d,76); - R4(d,e,a,b,c,77); - R4(c,d,e,a,b,78); - R4(b,c,d,e,a,79); - /* Add the working vars back into context.state[] */ - state[0] += a; - state[1] += b; - state[2] += c; - state[3] += d; - state[4] += e; - /* Wipe variables */ - a = b = c = d = e = 0; -} - -static void SHA1_begin(Hash* h) -{ - SHA1_Context *context = (SHA1_Context*)h; - /* SHA1 initialization constants */ - context->state[0] = 0x67452301; - context->state[1] = 0xEFCDAB89; - context->state[2] = 0x98BADCFE; - context->state[3] = 0x10325476; - context->state[4] = 0xC3D2E1F0; - context->count[0] = context->count[1] = 0; -} - -/* Run your data through this. */ - -static void SHA1_update(Hash* h, const void* vdata, size_t len) -{ - SHA1_Context *context = (SHA1_Context*)h; - const uint8_t *data = (const uint8_t*)vdata; - size_t i, j; - - j = (context->count[0] >> 3) & 63; - if ((context->count[0] += len << 3) < (len << 3)) - context->count[1]++; - context->count[1] += (len >> 29); - if ((j + len) > 63) { - memcpy(&context->buffer[j], data, (i = 64-j)); - SHA1Transform(context->state, context->buffer); - for ( ; i + 63 < len; i += 64) { - SHA1Transform(context->state, &data[i]); - } - j = 0; - } else - i = 0; - memcpy(&context->buffer[j], &data[i], len - i); -} - - -/* Add padding and return the message digest. */ - -static uint8_t *SHA1_final(Hash* h) -{ - SHA1_Context *context = (SHA1_Context*)h; - uint32_t i; - uint8_t finalcount[8]; - - for (i = 0; i < 8; i++) - finalcount[i] = (uint8_t)((context->count[(i >= 4 ? 0 : 1)] - >> ((3-(i & 3)) * 8) ) & 255); /* Endian independent */ - - SHA1_update(h, "\200", 1); - while ((context->count[0] & 504) != 448) - SHA1_update(h, "\0", 1); - SHA1_update(h, finalcount, 8); /* Should cause a SHA1Transform() */ - - for (i = 0; i < 20; i++) - context->buffer[i] = (uint8_t) - ((context->state[i>>2] >> ((3-(i & 3)) * 8) ) & 255); - - PURGE(i); - PURGE(finalcount); - return context->buffer; -} - - -/*************************************************************/ - -void SHA1_init(SHA1_Context* ctx) -{ - ctx->h.block_len = SHA1_BLOCK_LEN; - ctx->h.digest_len = SHA1_DIGEST_LEN; - ctx->h.begin = SHA1_begin; - ctx->h.update = SHA1_update; - ctx->h.final = SHA1_final; -} diff --git a/bertos/sec/hash/sha1.h b/bertos/sec/hash/sha1.h deleted file mode 100644 index eff7fa70..00000000 --- a/bertos/sec/hash/sha1.h +++ /dev/null @@ -1,65 +0,0 @@ -/** - * \file - * - * - * \brief SHA-1 Hashing algorithm. - * \author Giovanni Bajo - * - * $WIZ$ module_name = "sha1" - */ - -#ifndef SEC_HASH_SHA1 -#define SEC_HASH_SHA1 - -#include -#include -#include - -/** - * Context for SHA1 computation. - */ -typedef struct { - Hash h; - uint32_t state[5]; - uint32_t count[2]; - uint8_t buffer[64]; -} SHA1_Context; - -void SHA1_init(SHA1_Context *context); - -#define SHA1_stackinit(...) \ - ({ SHA1_Context *ctx = alloca(sizeof(SHA1_Context)); SHA1_init(ctx, ##__VA_ARGS__); &ctx->h; }) - -int SHA1_testSetup(void); -int SHA1_testRun(void); -int SHA1_testTearDown(void); - -#endif diff --git a/bertos/sec/hash/sha1_test.c b/bertos/sec/hash/sha1_test.c deleted file mode 100644 index 9ae38abc..00000000 --- a/bertos/sec/hash/sha1_test.c +++ /dev/null @@ -1,41 +0,0 @@ - -#include -#include - -#include "sha1.h" -#include - -int SHA1_testSetup(void) -{ - kdbg_init(); - return 0; -} - -int SHA1_testTearDown(void) -{ - return 0; -} - -int SHA1_testRun(void) -{ - int i; - SHA1_Context context; - SHA1_init(&context); - - hash_begin(&context.h); - hash_update(&context.h, "abc", 3); - ASSERT(memcmp(hash_final(&context.h), "\xA9\x99\x3E\x36\x47\x06\x81\x6A\xBA\x3E\x25\x71\x78\x50\xC2\x6C\x9C\xD0\xD8\x9D", 20) == 0); - - hash_begin(&context.h); - hash_update(&context.h, "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", 56); - ASSERT(memcmp(hash_final(&context.h), "\x84\x98\x3E\x44\x1C\x3B\xD2\x6E\xBA\xAE\x4A\xA1\xF9\x51\x29\xE5\xE5\x46\x70\xF1", 20) == 0); - - hash_begin(&context.h); - for (i = 0; i < 1000000; i++) - hash_update(&context.h, "a", 1); - ASSERT(memcmp(hash_final(&context.h), "\x34\xAA\x97\x3C\xD4\xC4\xDA\xA4\xF6\x1E\xEB\x2B\xDB\xAD\x27\x31\x65\x34\x01\x6F", 20) == 0); - - return 0; -} - -TEST_MAIN(SHA1); diff --git a/bertos/sec/kdf.h b/bertos/sec/kdf.h deleted file mode 100644 index 48ae1c74..00000000 --- a/bertos/sec/kdf.h +++ /dev/null @@ -1,95 +0,0 @@ -/** - * \file - * - * - * \brief Generic interface for key derivation functions. - * \author Giovanni Bajo - * - */ - -#ifndef SEC_KDF_H -#define SEC_KDF_H - -#include -#include -#include -#include - -typedef struct Kdf -{ - const uint8_t* block; - size_t block_len; - size_t to_read; - - void (*begin)(struct Kdf *kdf, const char *pwd, size_t pwd_len, - const uint8_t *salt, size_t salt_len); - void (*next)(struct Kdf *kdf); -} Kdf; - -/** - * Initialize the key derivation function, with the specified \a password and \a salt. - */ -INLINE void kdf_begin(Kdf *kdf, const char *pwd, size_t pwd_len, - const uint8_t *salt, size_t salt_len) -{ - ASSERT(kdf->begin); - kdf->begin(kdf, pwd, pwd_len, salt, salt_len); -} - -/** - * Extract \a len derived bytes into the \a out buffer. - * - * After having initialized the derivation function iwth \a kdf_begin, you can call - * this function multiple times, to produce several batches of derived data. - * - * \note Some algorithms implementing this API might have a maximum length of bytes - * that can be derived, after which they will simply ASSERT(). - */ -INLINE void kdf_read(Kdf *kdf, uint8_t *out, size_t len) -{ - do - { - if (kdf->to_read == 0) - { - kdf->next(kdf); - ASSERT(kdf->to_read != 0); - } - - size_t c = MIN(len, kdf->to_read); - memcpy(out, kdf->block, c); - len -= c; - out += c; - kdf->block += c; - kdf->to_read -= c; - } while (len); -} - -#endif /* SEC_KDF_H */ diff --git a/bertos/sec/kdf/pbkdf1.c b/bertos/sec/kdf/pbkdf1.c deleted file mode 100644 index bf4980bd..00000000 --- a/bertos/sec/kdf/pbkdf1.c +++ /dev/null @@ -1,106 +0,0 @@ -/** - * \file - * - * - * \brief PBKDF1 implementation - * \author Giovanni Bajo - * - */ - -#include "pbkdf1.h" -#include -#include - - -static void PBKDF1_begin(Kdf *ctx_, const char *pwd, size_t pwd_len, - const uint8_t *salt, size_t salt_len) -{ - PBKDF1_Context *ctx = (PBKDF1_Context *)ctx_; - - hash_begin(ctx->hash); - hash_update(ctx->hash, pwd, pwd_len); - hash_update(ctx->hash, salt, salt_len); - - ctx->kdf.to_read = 0; - ctx->kdf.block = NULL; -} - -static void PBKDF1_next(Kdf *ctx_) -{ - PBKDF1_Context *ctx = (PBKDF1_Context *)ctx_; - - // PBKDF1 will generate only one block of data (whose len depends - // on the underlying hash function). After that, the generation stops - // with an ASSERT. If you use PKBDF1, you are supposed to be aware - // of this limit while designing your algorithm. - ASSERT(ctx->kdf.block == NULL); - - int hlen = hash_digest_len(ctx->hash); - uint8_t temp[hlen]; - uint8_t *final = hash_final(ctx->hash); - - for (uint32_t i=0; iiterations-1; i++) - { - memcpy(temp, final, hlen); - hash_begin(ctx->hash); - hash_update(ctx->hash, temp, hlen); - final = hash_final(ctx->hash); - } - - PURGE(temp); - - ctx->kdf.to_read = ctx->kdf.block_len; - ctx->kdf.block = final; -} - -/**********************************************************************/ - -// Default iteration count. The RFC does not specify a "good" default -// value; it just says that this should be a high value to slow down -// computations. Since slowing down is not much of a concern for an -// embedded system, we settle for a value which is not too big. -#define PBKDF1_DEFAULT_ITERATIONS 100 - - -void PBKDF1_init(PBKDF1_Context *ctx, Hash *h) -{ - ctx->hash = h; - ctx->iterations = PBKDF1_DEFAULT_ITERATIONS; - ctx->kdf.begin = PBKDF1_begin; - ctx->kdf.next = PBKDF1_next; - ctx->kdf.block_len = hash_digest_len(h); -} - -void PBKDF1_set_iterations(Kdf *ctx_, uint32_t iterations) -{ - PBKDF1_Context *ctx = (PBKDF1_Context *)ctx_; - ctx->iterations = iterations; -} diff --git a/bertos/sec/kdf/pbkdf1.h b/bertos/sec/kdf/pbkdf1.h deleted file mode 100644 index f64d0d81..00000000 --- a/bertos/sec/kdf/pbkdf1.h +++ /dev/null @@ -1,61 +0,0 @@ -/** - * \file - * - * - * \brief PBKDF1 implementation - * \author Giovanni Bajo - * - */ - -#ifndef SEC_KDF_PBKDF1_H -#define SEC_KDF_PBKDF1_H - -#include -#include - -typedef struct -{ - Kdf kdf; - Hash *hash; - uint32_t iterations; -} PBKDF1_Context; - -void PBKDF1_init(PBKDF1_Context *ctx, Hash *h); -void PBKDF1_set_iterations(Kdf *kdf, uint32_t iterations); - -#define PBKDF1_stackinit(...) \ - ({ PBKDF1_Context *ctx = alloca(sizeof(PBKDF1_Context)); PBKDF1_init(ctx , ##__VA_ARGS__); &ctx->kdf; }) - -int PBKDF1_testSetup(void); -int PBKDF1_testRun(void); -int PBKDF1_testTearDown(void); - -#endif /* SEC_KDF_PBKDF1_H */ diff --git a/bertos/sec/kdf/pbkdf1_test.c b/bertos/sec/kdf/pbkdf1_test.c deleted file mode 100644 index 6cbe7fbb..00000000 --- a/bertos/sec/kdf/pbkdf1_test.c +++ /dev/null @@ -1,75 +0,0 @@ -/** - * \file - * - * - * \brief PBKDF1 testsuite - * \author Giovanni Bajo - * - */ - -#include "pbkdf1.h" - -#include -#include - -#include - -#include -#include - -#include - -int PBKDF1_testSetup(void) -{ - kdbg_init(); - return 0; -} - -int PBKDF1_testTearDown(void) -{ - return 0; -} - -int PBKDF1_testRun(void) -{ - Kdf *kdf = PBKDF1_stackinit(SHA1_stackinit()); - - uint8_t res[16]; - - PBKDF1_set_iterations(kdf, 1000); - kdf_begin(kdf, "password", 8, (const uint8_t*)"\x78\x57\x8E\x5A\x5D\x63\xCB\x06", 8); - kdf_read(kdf, res, 16); - ASSERT(memcmp(res, "\xDC\x19\x84\x7E\x05\xC6\x4D\x2F\xAF\x10\xEB\xFB\x4A\x3D\x2A\x20", 16) == 0); - - return 0; -} - -TEST_MAIN(PBKDF1); diff --git a/bertos/sec/kdf/pbkdf2.c b/bertos/sec/kdf/pbkdf2.c deleted file mode 100644 index e3d1f5f8..00000000 --- a/bertos/sec/kdf/pbkdf2.c +++ /dev/null @@ -1,113 +0,0 @@ -/** - * \file - * - * - * \brief PBKDF2 implementation - * \author Giovanni Bajo - * - */ - -#include "pbkdf2.h" -#include -#include -#include - -static void PBKDF2_begin(Kdf *ctx_, const char *pwd, size_t pwd_len, - const uint8_t *salt, size_t salt_len) -{ - PBKDF2_Context *ctx = (PBKDF2_Context*)ctx_; - - ASSERT(sizeof(ctx->salt) >= salt_len); - - mac_set_key(ctx->mac, (const uint8_t*)pwd, pwd_len); - ctx->salt_len = salt_len; - memcpy(ctx->salt, salt, salt_len); - ctx->c = 0; - ctx->kdf.to_read = 0; - ctx->kdf.block = NULL; -} - -static void PBKDF2_next(Kdf *ctx_) -{ - PBKDF2_Context *ctx = (PBKDF2_Context*)ctx_; - int dlen = mac_digest_len(ctx->mac); - uint8_t last[dlen]; - - ++ctx->c; - uint32_t bec = cpu_to_be32(ctx->c); - - mac_begin(ctx->mac); - mac_update(ctx->mac, ctx->salt, ctx->salt_len); - mac_update(ctx->mac, &bec, 4); - memcpy(last, mac_final(ctx->mac), dlen); - memcpy(ctx->block, last, dlen); - - for (uint32_t i=0; iiterations-1; ++i) - { - mac_begin(ctx->mac); - mac_update(ctx->mac, last, dlen); - memcpy(last, mac_final(ctx->mac), dlen); - xor_block(ctx->block, ctx->block, last, dlen); - } - - ctx->kdf.to_read = dlen; - ctx->kdf.block = ctx->block; - - PURGE(last); -} - - -/**********************************************************************/ - -// Default iteration count. The RFC does not specify a "good" default -// value; it just says that this should be a high value to slow down -// computations. Since slowing down is not much of a concern for an -// embedded system, we settle for a value which is not too big. -#define PBKDF2_DEFAULT_ITERATIONS 100 - - -void PBKDF2_init(PBKDF2_Context *ctx, Mac *mac) -{ - ctx->salt_len = 0; - ctx->mac = mac; - ctx->iterations = PBKDF2_DEFAULT_ITERATIONS; - ctx->kdf.begin = PBKDF2_begin; - ctx->kdf.next = PBKDF2_next; - ctx->kdf.block_len = mac_digest_len(mac); - ASSERT(ctx->kdf.block_len <= sizeof(ctx->block)); -} - -void PBKDF2_set_iterations(Kdf *ctx_, uint32_t iterations) -{ - PBKDF2_Context *ctx = (PBKDF2_Context*)ctx_; - ctx->iterations = iterations; -} - diff --git a/bertos/sec/kdf/pbkdf2.h b/bertos/sec/kdf/pbkdf2.h deleted file mode 100644 index 3a313711..00000000 --- a/bertos/sec/kdf/pbkdf2.h +++ /dev/null @@ -1,65 +0,0 @@ -/** - * \file - * - * - * \brief PBKDF2 implementation - * \author Giovanni Bajo - * - */ - -#ifndef SEC_KDF_PBKDF2_H -#define SEC_KDF_PBKDF2_H - -#include -#include - -typedef struct -{ - Kdf kdf; - Mac *mac; - uint8_t block[20]; - uint32_t c; - uint32_t iterations; - uint8_t salt_len; - uint8_t salt[48]; -} PBKDF2_Context; - -void PBKDF2_init(PBKDF2_Context *ctx, Mac *mac); -void PBKDF2_set_iterations(Kdf *kdf, uint32_t iterations); - -#define PBKDF2_stackinit(...) \ - ({ PBKDF2_Context *ctx = alloca(sizeof(PBKDF2_Context)); PBKDF2_init(ctx , ##__VA_ARGS__); &ctx->kdf; }) - -int PBKDF2_testSetup(void); -int PBKDF2_testRun(void); -int PBKDF2_testTearDown(void); - -#endif /* SEC_KDF_PBKDF2_H */ diff --git a/bertos/sec/kdf/pbkdf2_test.c b/bertos/sec/kdf/pbkdf2_test.c deleted file mode 100644 index f5f726f7..00000000 --- a/bertos/sec/kdf/pbkdf2_test.c +++ /dev/null @@ -1,105 +0,0 @@ -/** - * \file - * - * - * \brief PBKDF2 testsuite - * \author Giovanni Bajo - * - */ - - -#include "pbkdf2.h" - -#include -#include - -#include -#include - -#include - -#include - - -int PBKDF2_testSetup(void) -{ - kdbg_init(); - return 0; -} - -int PBKDF2_testTearDown(void) -{ - return 0; -} - -int PBKDF2_testRun(void) -{ - Kdf *kdf = PBKDF2_stackinit(hmac_stackinit(SHA1_stackinit())); - - uint8_t res[32]; - - PBKDF2_set_iterations(kdf, 1); - kdf_begin(kdf, "password", 8, (const uint8_t*)"salt", 4); - kdf_read(kdf, res, 20); - ASSERT(memcmp(res, "\x0c\x60\xc8\x0f\x96\x1f\x0e\x71\xf3\xa9\xb5\x24\xaf\x60\x12\x06\x2f\xe0\x37\xa6", 20) == 0); - - PBKDF2_set_iterations(kdf, 2); - kdf_begin(kdf, "password", 8, (const uint8_t*)"salt", 4); - kdf_read(kdf, res, 20); - ASSERT(memcmp(res, "\xea\x6c\x01\x4d\xc7\x2d\x6f\x8c\xcd\x1e\xd9\x2a\xce\x1d\x41\xf0\xd8\xde\x89\x57", 20) == 0); - - PBKDF2_set_iterations(kdf, 4096); - kdf_begin(kdf, "password", 8, (const uint8_t*)"salt", 4); - kdf_read(kdf, res, 20); - ASSERT(memcmp(res, "\x4b\x00\x79\x01\xb7\x65\x48\x9a\xbe\xad\x49\xd9\x26\xf7\x21\xd0\x65\xa4\x29\xc1", 20) == 0); - -#if CPU_X86 - // Too slow for an embedded system... - PBKDF2_set_iterations(kdf, 16777216); - kdf_begin(kdf, "password", 8, (const uint8_t*)"salt", 4); - kdf_read(kdf, res, 20); - ASSERT(memcmp(res, "\xee\xfe\x3d\x61\xcd\x4d\xa4\xe4\xe9\x94\x5b\x3d\x6b\xa2\x15\x8c\x26\x34\xe9\x84", 20) == 0); -#endif - - PBKDF2_set_iterations(kdf, 4096); - kdf_begin(kdf, "pass\0word", 9, (const uint8_t*)"sa\0lt", 5); - kdf_read(kdf, res, 16); - ASSERT(memcmp(res, "\x56\xfa\x6a\xa7\x55\x48\x09\x9d\xcc\x37\xd7\xf0\x34\x25\xe0\xc3", 16) == 0); - - PBKDF2_set_iterations(kdf, 4096); - kdf_begin(kdf, "passwordPASSWORDpassword", 24, (const uint8_t*)"saltSALTsaltSALTsaltSALTsaltSALTsalt", 36); - kdf_read(kdf, res, 25); - ASSERT(memcmp(res, "\x3d\x2e\xec\x4f\xe4\x1c\x84\x9b\x80\xc8\xd8\x36\x62\xc0\xe4\x4a\x8b\x29\x1a\x96\x4c\xf2\xf0\x70\x38", 25) == 0); - - return 0; -} - -TEST_MAIN(PBKDF2); diff --git a/bertos/sec/mac.h b/bertos/sec/mac.h deleted file mode 100644 index a9fc9eb7..00000000 --- a/bertos/sec/mac.h +++ /dev/null @@ -1,88 +0,0 @@ -/** - * \file - * - * - * \brief Generic interface for message authentication algorithms. - * \author Giovanni Bajo - * - */ - -#ifndef SEC_MAC_H -#define SEC_MAC_H - -#include -#include - -typedef struct Mac { - uint8_t digest_len; - uint8_t key_len; - - void (*set_key)(struct Mac *m, const void *key, size_t len); - void (*begin)(struct Mac *m); - void (*update)(struct Mac *m, const void *data, size_t len); - uint8_t* (*final)(struct Mac *m); -} Mac; - -INLINE void mac_set_key(Mac *m, const uint8_t* key, size_t len) -{ - ASSERT(m->set_key); - m->set_key(m, key, len); -} - -INLINE void mac_begin(Mac *m) -{ - ASSERT(m->begin); - m->begin(m); -} - -INLINE void mac_update(Mac *m, const void *data, size_t len) -{ - ASSERT(m->update); - m->update(m, data, len); -} - -INLINE uint8_t* mac_final(Mac *m) -{ - ASSERT(m->final); - return m->final(m); -} - -INLINE size_t mac_digest_len(Mac *m) -{ - return m->digest_len; -} - -INLINE size_t mac_key_len(Mac *m) -{ - return m->key_len; -} - -#endif diff --git a/bertos/sec/mac/hmac.c b/bertos/sec/mac/hmac.c deleted file mode 100644 index 7e077e94..00000000 --- a/bertos/sec/mac/hmac.c +++ /dev/null @@ -1,105 +0,0 @@ -/** - * \file - * - * - * \brief HMAC implementation - * \author Giovanni Bajo - * - */ - -#include "hmac.h" -#include -#include - - -static void hmac_set_key(Mac *m, const void *key, size_t key_len) -{ - HmacContext *ctx = (HmacContext *)m; - - memset(ctx->key, 0, ctx->m.key_len); - if (key_len <= ctx->m.key_len) - memcpy(ctx->key, key, key_len); - else - { - hash_begin(ctx->h); - hash_update(ctx->h, key, key_len); - memcpy(ctx->key, hash_final(ctx->h), hash_digest_len(ctx->h)); - } - - xor_block_const(ctx->key, ctx->key, 0x5C, ctx->m.key_len); -} - -static void hmac_begin(Mac *m) -{ - HmacContext *ctx = (HmacContext *)m; - int klen = ctx->m.key_len; - - xor_block_const(ctx->key, ctx->key, 0x36^0x5C, klen); - hash_begin(ctx->h); - hash_update(ctx->h, ctx->key, klen); -} - -static void hmac_update(Mac *m, const void *data, size_t len) -{ - HmacContext *ctx = (HmacContext *)m; - hash_update(ctx->h, data, len); -} - -static uint8_t *hmac_final(Mac *m) -{ - HmacContext *ctx = (HmacContext *)m; - int hlen = hash_digest_len(ctx->h); - - uint8_t temp[hlen]; - memcpy(temp, hash_final(ctx->h), hlen); - - xor_block_const(ctx->key, ctx->key, 0x5C^0x36, ctx->m.key_len); - hash_begin(ctx->h); - hash_update(ctx->h, ctx->key, ctx->m.key_len); - hash_update(ctx->h, temp, hlen); - - PURGE(temp); - return hash_final(ctx->h); -} - -/*********************************************************************/ - -void hmac_init(HmacContext *ctx, Hash *h) -{ - ctx->h = h; - ctx->m.key_len = hash_block_len(h); - ctx->m.digest_len = hash_digest_len(h); - ctx->m.set_key = hmac_set_key; - ctx->m.begin = hmac_begin; - ctx->m.update = hmac_update; - ctx->m.final = hmac_final; - ASSERT(sizeof(ctx->key) >= ctx->m.key_len); -} diff --git a/bertos/sec/mac/hmac.h b/bertos/sec/mac/hmac.h deleted file mode 100644 index 8e0b3573..00000000 --- a/bertos/sec/mac/hmac.h +++ /dev/null @@ -1,62 +0,0 @@ -/** - * \file - * - * - * \brief HMAC (RFC 2104) implementation - * \author Giovanni Bajo - * - */ - -#ifndef SEC_MAC_HMAC_H -#define SEC_MAC_HMAC_H - -#include -#include - -#include - -typedef struct HmacContext -{ - Mac m; - Hash *h; - uint8_t key[64]; -} HmacContext; - -void hmac_init(HmacContext* hmac, Hash *h); - -#define hmac_stackinit(...) \ - ({ HmacContext *ctx = alloca(sizeof(HmacContext)); hmac_init(ctx, ##__VA_ARGS__); &ctx->m; }) - -int hmac_testSetup(void); -int hmac_testRun(void); -int hmac_testTearDown(void); - -#endif /* SEC_MAC_HMAC_H */ diff --git a/bertos/sec/mac/hmac_test.c b/bertos/sec/mac/hmac_test.c deleted file mode 100644 index 1e89aae2..00000000 --- a/bertos/sec/mac/hmac_test.c +++ /dev/null @@ -1,176 +0,0 @@ - -#include "hmac.h" -#include -#include -#include -#include -#include - -int hmac_testSetup(void) -{ - kdbg_init(); - return 0; -} - -int hmac_testTearDown(void) -{ - return 0; -} - -struct Test_HMAC -{ - const char *key; - size_t key_len; - const char *data; - size_t data_len; - const char *digest; -}; - -const struct Test_HMAC tests_hmac_md5[] = -{ - { - "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b", 16, - "Hi There", 8, - "\x92\x94\x72\x7a\x36\x38\xbb\x1c\x13\xf4\x8e\xf8\x15\x8b\xfc\x9d", - }, - { - "Jefe", 4, - "what do ya want for nothing?", 28, - "\x75\x0c\x78\x3e\x6a\xb0\xb5\x03\xea\xa8\x6e\x31\x0a\x5d\xb7\x38", - }, - { - "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 16, - "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd" - "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd" - "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd" - "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd" - "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd", 50, - "\x56\xbe\x34\x52\x1d\x14\x4c\x88\xdb\xb8\xc7\x33\xf0\xe8\xb3\xf6", - }, - { - "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f" - "\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19", 25, - "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" - "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" - "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" - "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" - "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd", 50, - "\x69\x7e\xaf\x0a\xca\x3a\x3a\xea\x3a\x75\x16\x47\x46\xff\xaa\x79", - }, - { - "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c", 16, - "Test With Truncation", 20, - "\x56\x46\x1e\xf2\x34\x2e\xdc\x00\xf9\xba\xb9\x95\x69\x0e\xfd\x4c", - }, - { - "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" - "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" - "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" - "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" - "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" - "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" - "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" - "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 80, - "Test Using Larger Than Block-Size Key - Hash Key First", 54, - "\x6b\x1a\xb7\xfe\x4b\xd7\xbf\x8f\x0b\x62\xe6\xce\x61\xb9\xd0\xcd", - }, - { - "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" - "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" - "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" - "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" - "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" - "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" - "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" - "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 80, - "Test Using Larger Than Block-Size Key and Larger Than One " - "Block-Size Data", 73, - "\x6f\x63\x0f\xad\x67\xcd\xa0\xee\x1f\xb1\xf5\x62\xdb\x3a\xa5\x3e", - } -}; - -const struct Test_HMAC tests_hmac_sha1[] = -{ - { - "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b", 20, - "Hi There", 8, - "\xb6\x17\x31\x86\x55\x05\x72\x64\xe2\x8b\xc0\xb6\xfb\x37\x8c\x8e\xf1\x46\xbe\x00", - }, - { - "Jefe", 4, - "what do ya want for nothing?", 28, - "\xef\xfc\xdf\x6a\xe5\xeb\x2f\xa2\xd2\x74\x16\xd5\xf1\x84\xdf\x9c\x25\x9a\x7c\x79", - }, - { - "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 20, - "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd" - "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd" - "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd" - "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd" - "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd", 50, - "\x12\x5d\x73\x42\xb9\xac\x11\xcd\x91\xa3\x9a\xf4\x8a\xa1\x7b\x4f\x63\xf1\x75\xd3", - }, - { - "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19", 25, - "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" - "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" - "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" - "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" - "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd", 50, - "\x4c\x90\x07\xf4\x02\x62\x50\xc6\xbc\x84\x14\xf9\xbf\x50\xc8\x6c\x2d\x72\x35\xda", - }, - { - "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c", 20, - "Test With Truncation", 20, - "\x4c\x1a\x03\x42\x4b\x55\xe0\x7f\xe7\xf2\x7b\xe1\xd5\x8b\xb9\x32\x4a\x9a\x5a\x04", - }, - { - "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" - "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" - "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" - "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" - "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" - "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" - "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" - "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 80, - "Test Using Larger Than Block-Size Key - Hash Key First", 54, - "\xaa\x4a\xe5\xe1\x52\x72\xd0\x0e\x95\x70\x56\x37\xce\x8a\x3b\x55\xed\x40\x21\x12", - }, - { - "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" - "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" - "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" - "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" - "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" - "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" - "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" - "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 80, - "Test Using Larger Than Block-Size Key and Larger " - "Than One Block-Size Data", 73, - "\xe8\xe9\x9d\x0f\x45\x23\x7d\x78\x6d\x6b\xba\xa7\x96\x5c\x78\x08\xbb\xff\x1a\x91", - }, -}; - -static void algo_run_tests(Mac *mac, const struct Test_HMAC *t, int count) -{ - for (int i=0; ikey, t->key_len); - mac_begin(mac); - mac_update(mac, (const uint8_t*)t->data, t->data_len); - ASSERT(memcmp(mac_final(mac), t->digest, mac_digest_len(mac)) == 0); - } -} - -int hmac_testRun(void) -{ - algo_run_tests(hmac_stackinit(MD5_stackinit()), - tests_hmac_md5, countof(tests_hmac_md5)); - - algo_run_tests(hmac_stackinit(SHA1_stackinit()), - tests_hmac_sha1, countof(tests_hmac_sha1)); - - return 0; -} - -TEST_MAIN(hmac); diff --git a/bertos/sec/mac/omac.c b/bertos/sec/mac/omac.c deleted file mode 100644 index 570c04bc..00000000 --- a/bertos/sec/mac/omac.c +++ /dev/null @@ -1,193 +0,0 @@ -/** - * \file - * - * - * \brief OMAC implementation - * \author Giovanni Bajo - */ - -#include "omac.h" -#include -#include - -static void omac_set_key(Mac *ctx_, const void* key, size_t len) -{ - OmacContext *ctx = (OmacContext *)ctx_; - cipher_set_vkey(ctx->c, key, len); -} - -static void omac_begin(Mac *ctx_) -{ - OmacContext *ctx = (OmacContext *)ctx_; - - ctx->acc = 0; - - memset(ctx->Y, 0, cipher_block_len(ctx->c)); - cipher_cbc_begin(ctx->c, ctx->Y); -} - -static void omac_update(Mac *ctx_, const void *data_, size_t len) -{ - OmacContext *ctx = (OmacContext *)ctx_; - size_t blen = cipher_block_len(ctx->c); - const uint8_t *data = (const uint8_t *)data_; - - while (len) - { - ASSERT(ctx->acc <= blen); - if (ctx->acc == blen) - { - cipher_cbc_encrypt(ctx->c, ctx->accum); - ctx->acc = 0; - } - - size_t L = MIN(len, blen - ctx->acc); - memcpy(ctx->accum + ctx->acc, data, L); - data += L; - len -= L; - ctx->acc += L; - } -} - -static void omac_shift_left(uint8_t *L, size_t len) -{ - int firstbit = L[0] >> 7; - size_t i; - - for (i=0; i> 7); - L[i] <<= 1; - - if (firstbit) - { - if (len == 16) - L[i] ^= 0x87; - else if (len == 8) - L[i] ^= 0x1B; - else - ASSERT(0); - } -} - -static void omac_shift_right(uint8_t *L, size_t len) -{ - int firstbit = L[len-1] & 1; - size_t i; - - for (i=len-1; i>0; --i) - L[i] = (L[i] >> 1) | (L[i-1] << 7); - L[i] >>= 1; - - if (firstbit) - { - L[i] |= 0x80; - if (len == 16) - L[len-1] ^= 0x43; - else if (len == 8) - L[len-1] ^= 0x0D; - else - ASSERT(0); - } -} - -static uint8_t *omac1_final(Mac *ctx_) -{ - OmacContext *ctx = (OmacContext *)ctx_; - size_t blen = cipher_block_len(ctx->c); - - uint8_t L[blen]; - memset(L, 0, blen); - cipher_ecb_encrypt(ctx->c, L); - - omac_shift_left(L, blen); - if (ctx->acc < blen) - { - ctx->accum[ctx->acc++] = 0x80; - memset(ctx->accum + ctx->acc, 0, blen - ctx->acc); - omac_shift_left(L, blen); - } - - xor_block(ctx->accum, ctx->accum, L, blen); - cipher_cbc_encrypt(ctx->c, ctx->accum); - return ctx->accum; -} - -static uint8_t *omac2_final(Mac *ctx_) -{ - OmacContext *ctx = (OmacContext *)ctx_; - size_t blen = cipher_block_len(ctx->c); - - uint8_t L[blen]; - memset(L, 0, blen); - cipher_ecb_encrypt(ctx->c, L); - - if (ctx->acc < blen) - { - ctx->accum[ctx->acc++] = 0x80; - memset(ctx->accum + ctx->acc, 0, blen - ctx->acc); - omac_shift_right(L, blen); - } - else - omac_shift_left(L, blen); - - xor_block(ctx->accum, ctx->accum, L, blen); - cipher_cbc_encrypt(ctx->c, ctx->accum); - return ctx->accum; -} - - -/****************************************************************************/ - -static void omac_init(OmacContext *ctx, BlockCipher *c) -{ - ctx->mac.set_key = omac_set_key; - ctx->mac.begin = omac_begin; - ctx->mac.update = omac_update; - ctx->mac.key_len = cipher_key_len(c); - ctx->mac.digest_len = cipher_block_len(c); - ctx->c = c; - - ASSERT(cipher_block_len(c) == 8 || cipher_block_len(c) == 16); - ASSERT(sizeof(ctx->Y) >= cipher_block_len(c)); - ASSERT(sizeof(ctx->accum) >= cipher_block_len(c)); -} - -void omac1_init(OmacContext *ctx, BlockCipher *c) -{ - omac_init(ctx, c); - ctx->mac.final = omac1_final; -} - -void omac2_init(OmacContext *ctx, BlockCipher *c) -{ - omac_init(ctx, c); - ctx->mac.final = omac2_final; -} diff --git a/bertos/sec/mac/omac.h b/bertos/sec/mac/omac.h deleted file mode 100644 index a09d91ac..00000000 --- a/bertos/sec/mac/omac.h +++ /dev/null @@ -1,64 +0,0 @@ -/** - * \file - * - * - * \brief OMAC implementation - * \author Giovanni Bajo - */ - -#ifndef SEC_MAC_OMAC_H -#define SEC_MAC_OMAC_H - -#include -#include - -typedef struct OmacContext -{ - Mac mac; - BlockCipher *c; - uint8_t Y[16]; - uint8_t accum[16]; - uint8_t acc; -} OmacContext; - -void omac1_init(OmacContext *ctx, BlockCipher *c); -void omac2_init(OmacContext *ctx, BlockCipher *c); - -#define omac1_stackinit(...) \ - ({ OmacContext *ctx = alloca(sizeof(OmacContext)); omac1_init(ctx, ##__VA_ARGS__); &ctx->mac; }) -#define omac2_stackinit(...) \ - ({ OmacContext *ctx = alloca(sizeof(OmacContext)); omac2_init(ctx, ##__VA_ARGS__); &ctx->mac; }) - -int omac_testSetup(void); -int omac_testTearDown(void); -int omac_testRun(void); - -#endif /* SEC_MAC_OMAC_H */ diff --git a/bertos/sec/mac/omac_test.c b/bertos/sec/mac/omac_test.c deleted file mode 100644 index 40b81d72..00000000 --- a/bertos/sec/mac/omac_test.c +++ /dev/null @@ -1,270 +0,0 @@ - -#include -#include -#include -#include -#include - -int omac_testSetup(void) -{ - kdbg_init(); - return 0; -} - -int omac_testTearDown(void) -{ - return 0; -} - -struct OmacTest -{ - void *key; - size_t klen; - uint8_t *msg; - size_t mlen; - uint8_t digest[16*2]; -}; - -static const struct OmacTest tests1_aes128[] = -{ - { - "2b7e151628aed2a6abf7158809cf4f3c", 16, - "", 0, - "bb1d6929e95937287fa37d129b756746", - }, - { - "2b7e151628aed2a6abf7158809cf4f3c", 16, - "6bc1bee22e409f96e93d7e117393172a", 16, - "070a16b46b4d4144f79bdd9dd04a287c", - }, - { - "2b7e151628aed2a6abf7158809cf4f3c", 16, - "6bc1bee22e409f96e93d7e117393172a" - "ae2d8a571e03ac9c9eb76fac45af8e51" - "30c81c46a35ce411e5fbc1191a0a52ef" - "f69f2445df4f9b17ad2b417be66c3710", 64, - "51f0bebf7e3b9d92fc49741779363cfe", - }, -}; - -static const struct OmacTest tests1_aes192[] = -{ - { - "8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b", 24, - "", 0, - "d17ddf46adaacde531cac483de7a9367", - }, - { - "8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b", 24, - "6bc1bee22e409f96e93d7e117393172a", 16, - "9e99a7bf31e710900662f65e617c5184", - }, - { - "8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b", 24, - "6bc1bee22e409f96e93d7e117393172a" - "ae2d8a571e03ac9c9eb76fac45af8e51" - "30c81c46a35ce411", 40, - "8a1de5be2eb31aad089a82e6ee908b0e", - }, - { - "8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b", 24, - "6bc1bee22e409f96e93d7e117393172a" - "ae2d8a571e03ac9c9eb76fac45af8e51" - "30c81c46a35ce411e5fbc1191a0a52ef" - "f69f2445df4f9b17ad2b417be66c3710", 64, - "a1d5df0eed790f794d77589659f39a11", - }, -}; - -static const struct OmacTest tests1_aes256[] = -{ - { - "603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4", 32, - "", 0, - "028962f61b7bf89efc6b551f4667d983", - }, - { - "603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4", 32, - "6bc1bee22e409f96e93d7e117393172a", 16, - "28a7023f452e8f82bd4bf28d8c37c35c", - }, - { - "603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4", 32, - "6bc1bee22e409f96e93d7e117393172a" - "ae2d8a571e03ac9c9eb76fac45af8e51" - "30c81c46a35ce411", 40, - "aaf3d8f1de5640c232f5b169b9c911e6", - }, - { - "603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4", 32, - "6bc1bee22e409f96e93d7e117393172a" - "ae2d8a571e03ac9c9eb76fac45af8e51" - "30c81c46a35ce411e5fbc1191a0a52ef" - "f69f2445df4f9b17ad2b417be66c3710", 64, - "e1992190549f6ed5696a2c056c315410", - }, -}; - -static const struct OmacTest tests2_aes128[] = -{ - { - "2b7e151628aed2a6abf7158809cf4f3c", 16, - "", 0, - "f6bc6a41f4f84593809e59b719299cfe", - }, - { - "2b7e151628aed2a6abf7158809cf4f3c", 16, - "6bc1bee22e409f96e93d7e117393172a", 16, - "070a16b46b4d4144f79bdd9dd04a287c", - }, - { - "2b7e151628aed2a6abf7158809cf4f3c", 16, - "6bc1bee22e409f96e93d7e117393172a" - "ae2d8a571e03ac9c9eb76fac45af8e51" - "30c81c46a35ce411", 40, - "23fdaa0831cd314491ce4b25acb6023b", - }, - { - "2b7e151628aed2a6abf7158809cf4f3c", 16, - "6bc1bee22e409f96e93d7e117393172a" - "ae2d8a571e03ac9c9eb76fac45af8e51" - "30c81c46a35ce411e5fbc1191a0a52ef" - "f69f2445df4f9b17ad2b417be66c3710", 64, - "51f0bebf7e3b9d92fc49741779363cfe", - }, -}; - -static const struct OmacTest tests2_aes192[] = -{ - { - "8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b", 24, - "", 0, - "149f579df2129d45a69266898f55aeb2", - }, - { - "8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b", 24, - "6bc1bee22e409f96e93d7e117393172a", 16, - "9e99a7bf31e710900662f65e617c5184", - }, - { - "8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b", 24, - "6bc1bee22e409f96e93d7e117393172a" - "ae2d8a571e03ac9c9eb76fac45af8e51" - "30c81c46a35ce411", 40, - "b35e2d1b73aed49b78bdbdfe61f646df", - }, - { - "8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b", 24, - "6bc1bee22e409f96e93d7e117393172a" - "ae2d8a571e03ac9c9eb76fac45af8e51" - "30c81c46a35ce411e5fbc1191a0a52ef" - "f69f2445df4f9b17ad2b417be66c3710", 64, - "a1d5df0eed790f794d77589659f39a11", - }, -}; - -static const struct OmacTest tests2_aes256[] = -{ - { - "603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4", 32, - "", 0, - "47fbde71866eae6080355b5fc7ff704c", - }, - { - "603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4", 32, - "6bc1bee22e409f96e93d7e117393172a", 16, - "28a7023f452e8f82bd4bf28d8c37c35c", - }, - { - "603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4", 32, - "6bc1bee22e409f96e93d7e117393172a" - "ae2d8a571e03ac9c9eb76fac45af8e51" - "30c81c46a35ce411", 40, - "f018e6053611b34bc872d6b7ff24749f", - }, - { - "603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4", 32, - "6bc1bee22e409f96e93d7e117393172a" - "ae2d8a571e03ac9c9eb76fac45af8e51" - "30c81c46a35ce411e5fbc1191a0a52ef" - "f69f2445df4f9b17ad2b417be66c3710", 64, - "e1992190549f6ed5696a2c056c315410", - }, -}; - -static void hexunlify(uint8_t *out, const uint8_t *in, size_t len) -{ - #define TO_DEC(x) ((x >= '0' && x <= '9') ? x-'0' : \ - (x >= 'a' && x <= 'f') ? x-'a'+10 : \ - (x >= 'A' && x <= 'F') ? x-'A'+10 : 0) - while (len--) - { - *out++ = TO_DEC(in[0])*16 + TO_DEC(in[1]); - in += 2; - } -} - -static void runTest(Mac *m, const struct OmacTest *t, size_t num) -{ - for (size_t i=0; iklen]; - hexunlify(key, t->key, t->klen); - - uint8_t msg[t->mlen]; - hexunlify(msg, t->msg, t->mlen); - - uint8_t digest[16]; - hexunlify(digest, t->digest, 16); - - mac_set_key(m, key, t->klen); - mac_begin(m); - mac_update(m, msg, t->mlen); - uint8_t *result = mac_final(m); - - ASSERT(memcmp(result, digest, 16) == 0); - } -} - -int omac_testRun(void) -{ - if (1) - { - Mac *m = omac1_stackinit(AES128_stackinit()); - runTest(m, tests1_aes128, countof(tests1_aes128)); - } - - if (1) - { - Mac *m = omac1_stackinit(AES192_stackinit()); - runTest(m, tests1_aes192, countof(tests1_aes192)); - } - - if (1) - { - Mac *m = omac1_stackinit(AES256_stackinit()); - runTest(m, tests1_aes256, countof(tests1_aes256)); - } - - if (1) - { - Mac *m = omac2_stackinit(AES128_stackinit()); - runTest(m, tests2_aes128, countof(tests2_aes128)); - } - - if (1) - { - Mac *m = omac2_stackinit(AES192_stackinit()); - runTest(m, tests2_aes192, countof(tests2_aes192)); - } - - if (1) - { - Mac *m = omac2_stackinit(AES256_stackinit()); - runTest(m, tests2_aes256, countof(tests2_aes256)); - } - - return 0; -} - -TEST_MAIN(omac); diff --git a/bertos/sec/prng.h b/bertos/sec/prng.h deleted file mode 100644 index d0d21b45..00000000 --- a/bertos/sec/prng.h +++ /dev/null @@ -1,87 +0,0 @@ -/** - * \file - * - * - * \brief Generic interface for cryptographically-secure pseudo-RNG - * \author Giovanni Bajo - * - */ - -#ifndef SEC_PRNG_H -#define SEC_PRNG_H - -#include -#include - -typedef struct PRNG -{ - void (*reseed)(struct PRNG *ctx, const uint8_t *seed); - void (*generate)(struct PRNG *ctx, uint8_t *data, size_t len); - uint8_t seed_len; - uint8_t seeded; -} PRNG; - -/** - * Feed a new seed into the PRNG. - * - * \note: Being a cryptographically-secure PRNG, the seed will be - * mixed to the current state of the generator, so it is NOT possible - * to generate the same sequence simply by using the same seed. If you - * need such a property, use a normale PRGN like \a rand(). - */ -INLINE void prng_reseed(PRNG *ctx, const uint8_t *seed) -{ - ASSERT(ctx->reseed); - ctx->reseed(ctx, seed); - ctx->seeded = 1; -} - -/** - * Get the length of the seed in bytes required by this generator. - */ -INLINE size_t prng_seed_len(PRNG *ctx) -{ - return ctx->seed_len; -} - -/** - * Generate some cryptographically-secure random bytes into the specified - * buffer. - */ -INLINE void prng_generate(PRNG *ctx, uint8_t *data, size_t len) -{ - ASSERT(ctx->generate); - ASSERT(ctx->seeded); - ctx->generate(ctx, data, len); -} - - -#endif /* SEC_PRNG_H */ diff --git a/bertos/sec/prng/isaac.c b/bertos/sec/prng/isaac.c deleted file mode 100644 index f3320a54..00000000 --- a/bertos/sec/prng/isaac.c +++ /dev/null @@ -1,203 +0,0 @@ -/** - * \file - * - * - * \brief ISAAC implementation - * \author Giovanni Bajo - * - */ - -/* ------------------------------------------------------------------------------- -rand.c: By Bob Jenkins. My random number generator, ISAAC. Public Domain. -MODIFIED: - 960327: Creation (addition of randinit, really) - 970719: use context, not global variables, for internal state - 980324: added main (ifdef'ed out), also rearranged randinit() - 010626: Note that this is public domain ------------------------------------------------------------------------------- -*/ - -#include "isaac.h" -#include -#include -#include -#include - -typedef uint32_t ub4; -typedef uint16_t ub2; -typedef uint8_t ub1; - -#define ind(mm,x) (*(ub4 *)((ub1 *)(mm) + ((x) & ((CONFIG_ISAAC_RANDSIZ-1)<<2)))) -#define rngstep(mix,a,b,mm,m,m2,r,x) \ -{ \ - x = *m; \ - a = (a^(mix)) + *(m2++); \ - *(m++) = y = ind(mm,x) + a + b; \ - *(r++) = b = ind(mm,y>>CONFIG_ISAAC_RANDSIZL) + x; \ -} - -static void isaac(IsaacContext *ctx) -{ - register ub4 a,b,x,y,*m,*mm,*m2,*r,*mend; - mm=ctx->randmem; r=ctx->randrsl; - a = ctx->randa; b = ctx->randb + (++ctx->randc); - for (m = mm, mend = m2 = m+(CONFIG_ISAAC_RANDSIZ/2); m>6 , a, b, mm, m, m2, r, x); - rngstep( a<<2 , a, b, mm, m, m2, r, x); - rngstep( a>>16, a, b, mm, m, m2, r, x); - } - for (m2 = mm; m2>6 , a, b, mm, m, m2, r, x); - rngstep( a<<2 , a, b, mm, m, m2, r, x); - rngstep( a>>16, a, b, mm, m, m2, r, x); - } - ctx->randb = b; ctx->randa = a; -} - - -#define mix(a,b,c,d,e,f,g,h) \ -{ \ - a^=b<<11; d+=a; b+=c; \ - b^=c>>2; e+=b; c+=d; \ - c^=d<<8; f+=c; d+=e; \ - d^=e>>16; g+=d; e+=f; \ - e^=f<<10; h+=e; f+=g; \ - f^=g>>4; a+=f; g+=h; \ - g^=h<<8; b+=g; h+=a; \ - h^=a>>9; c+=h; a+=b; \ -} - -static void isaac_reseed(PRNG *ctx_, const uint8_t *seed) -{ - IsaacContext *ctx = (IsaacContext *)ctx_; - int i; - ub4 a,b,c,d,e,f,g,h; - ub4 *m,*r; - - // XOR the new seed over the current state, so to depend on - // the previously-generated output. - xor_block(ctx->randrsl, ctx->randrsl, seed, sizeof(ctx->randrsl)); - - ctx->randa = ctx->randb = ctx->randc = 0; - m=ctx->randmem; - r=ctx->randrsl; - a=b=c=d=e=f=g=h=0x9e3779b9; /* the golden ratio */ - - for (i=0; i<4; ++i) /* scramble it */ - { - mix(a,b,c,d,e,f,g,h); - } - - /* initialize using the contents of r[] as the seed */ - for (i=0; irandrsl) == CONFIG_ISAAC_RANDSIZ*4); - - while (len) - { - ASSERT(ctx->randcnt <= CONFIG_ISAAC_RANDSIZ*4); - - if (ctx->randcnt == CONFIG_ISAAC_RANDSIZ*4) - { - isaac(ctx); - ctx->randcnt = 0; - } - - size_t L = MIN(len, CONFIG_ISAAC_RANDSIZ*4 - (size_t)ctx->randcnt); - memcpy(data, (uint8_t*)ctx->randrsl + ctx->randcnt, L); - data += L; - ctx->randcnt += L; - len -= L; - } -} - - -/**********************************************************************/ - -void isaac_init(IsaacContext *ctx) -{ - ctx->prng.reseed = isaac_reseed; - ctx->prng.generate = isaac_generate; - ctx->prng.seed_len = sizeof(ctx->randrsl); - ctx->prng.seeded = 0; - - ctx->randcnt = CONFIG_ISAAC_RANDSIZ*4; - memset(ctx->randrsl, 0, sizeof(ctx->randrsl)); -} - - - - -#ifdef NEVER -int main() -{ - ub4 i,j; - randctx ctx; - ctx.randa=ctx.randb=ctx.randc=(ub4)0; - for (i=0; i<256; ++i) ctx.randrsl[i]=(ub4)0; - randinit(&ctx, TRUE); - for (i=0; i<2; ++i) - { - isaac(&ctx); - for (j=0; j<256; ++j) - { - printf("%.8lx",ctx.randrsl[j]); - if ((j&7)==7) printf("\n"); - } - } -} -#endif diff --git a/bertos/sec/prng/isaac.h b/bertos/sec/prng/isaac.h deleted file mode 100644 index 8be03c11..00000000 --- a/bertos/sec/prng/isaac.h +++ /dev/null @@ -1,77 +0,0 @@ -/** - * \file - * - * - * \brief ISAAC implementation - * \author Giovanni Bajo - * - */ - -#ifndef SEC_PRNG_ISAAC_H -#define SEC_PRNG_ISAAC_H - -#include - -/** - * Size of the internal ISAAC state (in 32-bit words). - * - * ISAAC is known to generate unbiased data as follows: - * * 3 words: 2^37 unbiased values - * * 4 words: 2^45 unbiased values - * * 5 words: 2^53 unbiased values - * * 6 words: 2^61 unbiased values - * * 7 words: 2^69 unbiased values - * * 8 words: 2^77 unbiased values - * - * The period of the generator is usually much longer, but it is - * obviously uninteresting for a CSPRNG. - */ -#define CONFIG_ISAAC_RANDSIZL (3) -#define CONFIG_ISAAC_RANDSIZ (1<<(CONFIG_ISAAC_RANDSIZL)) - -typedef struct IsaacContext -{ - PRNG prng; - uint32_t randcnt; - uint32_t randrsl[CONFIG_ISAAC_RANDSIZ]; - uint32_t randmem[CONFIG_ISAAC_RANDSIZ]; - uint32_t randa; - uint32_t randb; - uint32_t randc; -} IsaacContext; - -void isaac_init(IsaacContext *ctx); - -#define isaac_stackinit(...) \ - ({ IsaacContext *ctx = alloca(sizeof(IsaacContext)); isaac_init(ctx , ##__VA_ARGS__); &ctx->prng; }) - - -#endif /* SEC_PRNG_ISAAC_H */ diff --git a/bertos/sec/prng/x917.c b/bertos/sec/prng/x917.c deleted file mode 100644 index 540f91d6..00000000 --- a/bertos/sec/prng/x917.c +++ /dev/null @@ -1,132 +0,0 @@ -/** - * \file - * - * - * \brief ANSI X9.17 PRNG implementation - * \author Giovanni Bajo - * - */ - -#include "x917.h" -#include -#include -#include "hw/hw_timer.h" - -static void x917_next(X917Context *ctx, BlockCipher *cipher, uint8_t *out) -{ - const size_t blen = cipher_block_len(cipher); - - struct - { - time_t t0; - hptime_t t1; - uint8_t padding[blen - sizeof(time_t) - sizeof(hptime_t)]; - } DT; - - ASSERT(sizeof(DT) == blen); - - memset(&DT, 0, sizeof(DT)); - DT.t0 = timer_clock(); - DT.t1 = timer_hw_hpread(); - - cipher_ecb_encrypt(cipher, &DT); - - xor_block(out, (uint8_t*)&DT, ctx->state, blen); - cipher_ecb_encrypt(cipher, out); - - xor_block(ctx->state, (uint8_t*)&DT, out, blen); - cipher_ecb_encrypt(cipher, ctx->state); - - PURGE(DT); -} - - -static void x917_generate(PRNG *ctx_, uint8_t *data, size_t len) -{ - X917Context *ctx = (X917Context *)ctx_; - BlockCipher *cipher = AES128_stackinit(); - - const size_t blen = cipher_block_len(cipher); - uint8_t temp[blen]; - - ASSERT(len); - ASSERT(sizeof(ctx->state) >= blen); - ASSERT(sizeof(ctx->key) >= cipher_key_len(cipher)); - - cipher_set_key(cipher, ctx->key); - - while (len) - { - size_t L = MIN(blen, len); - x917_next(ctx, cipher, temp); - memcpy(data, temp, L); - len -= L; - data += L; - } -} - -static void x917_reseed(PRNG *ctx_, const uint8_t *seed) -{ - // The X9.17 standard does not specify reseeding. To avoid external - // dependencies, we implement it this way: - // * Generate a new random block, xor it with the first part - // of the seed, and use the result as new seed. - // * Generate and throw away a block to update the state. - X917Context *ctx = (X917Context *)ctx_; - const size_t klen = sizeof(ctx->key); - const size_t blen = sizeof(ctx->state); - - if (!ctx->rng.seeded) - { - memcpy(ctx->key, seed, klen); - memcpy(ctx->state, seed+klen, blen); - } - else - { - uint8_t buf[klen]; - x917_generate(ctx_, buf, klen); - - xor_block(ctx->key, buf, seed, klen); - xor_block(ctx->state, ctx->state, seed+klen, blen); - - PURGE(buf); - } -} - -/*********************************************************************/ - -void x917_init(X917Context *ctx) -{ - ctx->rng.reseed = x917_reseed; - ctx->rng.generate = x917_generate; - ctx->rng.seed_len = sizeof(ctx->key) + sizeof(ctx->state); - ctx->rng.seeded = 0; -} diff --git a/bertos/sec/prng/x917.h b/bertos/sec/prng/x917.h deleted file mode 100644 index a5cc94d5..00000000 --- a/bertos/sec/prng/x917.h +++ /dev/null @@ -1,58 +0,0 @@ -/** - * \file - * - * - * \brief ANSI X9.17 PRNG implementation - * \author Giovanni Bajo - * - */ - -#ifndef SEC_PRNG_X917_H -#define SEC_PRNG_X917_H - -#include -#include - -typedef struct X917Context -{ - PRNG rng; - uint8_t key[16]; - uint8_t state[16]; - -} X917Context; - -void x917_init(X917Context *ctx); - -#define x917_stackinit(...) \ - ({ X917Context *ctx = alloca(sizeof(X917Context)); x917_init(ctx, ##__VA_ARGS__); &ctx->rng; }) - - -#endif /* SEC_CSPRNG_X917_H */ diff --git a/bertos/sec/prng/yarrow.c b/bertos/sec/prng/yarrow.c deleted file mode 100644 index 3d9469fc..00000000 --- a/bertos/sec/prng/yarrow.c +++ /dev/null @@ -1,117 +0,0 @@ -/** - * \file - * - * - * \brief Yarrow implementation - * \author Giovanni Bajo - * - */ - -#include "yarrow.h" -#include -#include -#include - -#define CONFIG_YARROW_GENERATOR_GATE 10 - -static void yarrow_generate(PRNG *ctx_, uint8_t *data, size_t len) -{ - YarrowContext *ctx = (YarrowContext *)ctx_; - BlockCipher *cipher = 0; - - ASSERT(len != 0); - - do - { - if (ctx->lastidx == sizeof(ctx->last)) - { - if (!cipher) - { - cipher = AES128_stackinit(); - ASSERT(sizeof(ctx->counter) == cipher_block_len(cipher)); - ASSERT(sizeof(ctx->curkey) == cipher_key_len(cipher)); - - cipher_set_key(cipher, ctx->curkey); - cipher_ctr_begin(cipher, ctx->counter); - } - - cipher_ctr_step(cipher, ctx->last); - - if (ctx->curkey_gencount == CONFIG_YARROW_GENERATOR_GATE) - { - ASSERT(cipher_block_len(cipher) == cipher_key_len(cipher)); - cipher_set_key(cipher, ctx->last); - ctx->curkey_gencount = 0; - continue; - } - - ctx->lastidx = 0; - ctx->curkey_gencount++; - } - - int n = MIN(len, 16U-ctx->lastidx); - memcpy(data, ctx->last+ctx->lastidx, n); - data += n; - len -= n; - ctx->lastidx += n; - } while (len); -} - -static void yarrow_reseed(PRNG *ctx_, const uint8_t *seed) -{ - YarrowContext *ctx = (YarrowContext *)ctx_; - Hash *h = SHA1_stackinit(); - - hash_begin(h); - hash_update(h, seed, ctx->prng.seed_len); - hash_update(h, ctx->curkey, sizeof(ctx->curkey)); - memcpy(ctx->curkey, hash_final(h), sizeof(ctx->curkey)); - - // Reset the counter for the sequence - memset(ctx->counter, 0, sizeof(ctx->counter)); -} - - -/*********************************************************************/ - -void yarrow_init(YarrowContext *ctx) -{ - ctx->prng.reseed = yarrow_reseed; - ctx->prng.generate = yarrow_generate; - ctx->prng.seed_len = 16; - ctx->prng.seeded = 0; - - ctx->lastidx = sizeof(ctx->last); - ctx->curkey_gencount = 0; - memset(ctx->curkey, 0, sizeof(ctx->curkey)); - - ASSERT(sizeof(ctx->counter) == sizeof(ctx->last)); -} diff --git a/bertos/sec/prng/yarrow.h b/bertos/sec/prng/yarrow.h deleted file mode 100644 index 556d573f..00000000 --- a/bertos/sec/prng/yarrow.h +++ /dev/null @@ -1,60 +0,0 @@ -/** - * \file - * - * - * \brief Yarrow implementation - * \author Giovanni Bajo - * - */ - -#ifndef SEC_PRNG_YARROW_H -#define SEC_PRNG_YARROW_H - -#include -#include - -typedef struct YarrowContext -{ - PRNG prng; - - uint8_t counter[16]; - uint8_t curkey[16]; - uint8_t last[16]; - uint8_t curkey_gencount; - uint8_t lastidx; -} YarrowContext; - -void yarrow_init(YarrowContext *ctx); - -#define yarrow_stackinit(...) \ - ({ YarrowContext *ctx = alloca(sizeof(YarrowContext)); yarrow_init(ctx, ##__VA_ARGS__); &ctx->prng; }) - -#endif /* SEC_PRNG_YARROW_H */ diff --git a/bertos/sec/random.c b/bertos/sec/random.c deleted file mode 100644 index 67c24859..00000000 --- a/bertos/sec/random.c +++ /dev/null @@ -1,214 +0,0 @@ -/** - * \file - * - * - * \brief High-level random number generation functions. - * \author Giovanni Bajo - * - */ - -#include "random.h" -#include "random_p.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -/********************************************************************************/ -/* Configuration of the random module */ -/********************************************************************************/ - -#define POOL_CONTEXT PP_CAT(PP_CAT(POOL_NAMEU, CONFIG_RANDOM_POOL), Context) -#define POOL_INIT PP_CAT(PP_CAT(POOL_NAMEL, CONFIG_RANDOM_POOL), _init) - -#define EXTRACTOR_STACKINIT PP_CAT(PP_CAT(EXTRACTOR_NAME, CONFIG_RANDOM_EXTRACTOR), _stackinit) - -#define PRNG_CONTEXT PP_CAT(PP_CAT(PRNG_NAMEU, CONFIG_RANDOM_PRNG), Context) -#define PRNG_INIT PP_CAT(PP_CAT(PRNG_NAMEL, CONFIG_RANDOM_PRNG), _init) - - -/********************************************************************************/ -/* Global state */ -/********************************************************************************/ - -#if CONFIG_RANDOM_POOL != POOL_NONE -static POOL_CONTEXT epool_ctx; -static EntropyPool * const epool = (EntropyPool *)&epool_ctx; -#endif - -static PRNG_CONTEXT prng_ctx; -static PRNG * const prng = (PRNG*)&prng_ctx; - -static bool initialized = 0; - - -/********************************************************************************/ -/* Code */ -/********************************************************************************/ - -/* - * Reseed the PRNG if there is enough entropy available at this time. - * - * Some designs (eg: fortuna) suggest to artificially limit the frequency of - * this operation to something like 0.1s, to avoid attacks that try to exhaust - * the entropy pool. - * - * We don't believe such attacks are available in an embedded system (as an attacker - * does not have a way to ask random numbers from the pool) but we will play safe - * here in case eg. the user does something wrong. - */ -static void optional_reseeding(void) -{ -#if CONFIG_RANDOM_POOL != POOL_NONE - static ticks_t last_reseed = -1000; - - // We don't allow more than 10 reseedings per second - // (as suggested by Fortuna) - ticks_t current = timer_clock(); - if (ticks_to_ms(current - last_reseed) < 100) - return; - - if (entropy_seeding_ready(epool)) - { - uint8_t seed[prng_seed_len(prng)]; - - entropy_make_seed(epool, seed, sizeof(seed)); - prng_reseed(prng, seed); - - last_reseed = current; - PURGE(seed); - } -#endif -} - - -/* - * Perform the initial seeding of the PRNG. - * - * At startup, we want to immediately seed the PRNG to a point where it can - * generate safe-enough random numbers. To do this, we rely on a hw-dependent - * function to pull entropy from available hw sources, and then feed it - * through an extractor (if any is configured). - */ -static void initial_seeding(void) -{ -#if CONFIG_RANDOM_POOL != POOL_NONE - - // We feed entropy into the pool, until it is ready to perform a seeding. - do - { - uint8_t buf[16]; - random_pull_entropy(buf, sizeof(buf)); - entropy_add(epool, 0, buf, sizeof(buf), sizeof(buf)*8); - } while (!entropy_seeding_ready(epool)); - - optional_reseeding(); - -#elif CONFIG_RANDOM_EXTRACTOR != EXTRACTOR_NONE - - uint8_t seed[prng_seed_len(prng)]; - Hash *h = EXTRACTOR_STACKINIT(); - - // "Randomness Extraction and Key Derivation Using the CBC, Cascade and - // HMAC Modes" by Yevgeniy Dodis et al. suggests that an padded cascaded hash - // function with N bits of output must have at least 2n bits of min-entropy as input - // to be a randomness extractor (it generates an output that is computationally - // indistiguishable from an uniform distribution). - size_t hlen = hash_digest_len(h); - uint8_t buf[hlen*2]; - size_t sidx = 0; - - while (sidx < sizeof(seed)) - { - size_t cnt = MIN(sizeof(seed) - sidx, hlen); - - random_pull_entropy(buf, sizeof(buf)); - - hash_begin(h); - hash_update(h, buf, sizeof(buf)); - memcpy(seed+sidx, hash_final(h), cnt); - sidx += cnt; - } - - prng_reseed(prng, seed); - PURGE(buf); - PURGE(seed); - -#else - - // If we have been configured without a proper randomness extractor, we do not - // have many solutions but feeding the entropy bits directly to the PRNG, and - // hoping for the best. - uint8_t seed[prng_seed_len(prng)]; - random_pull_entropy(seed, sizeof(seed)); - prng_reseed(prng, seed); - PURGE(seed); - -#endif -} - -void random_init(void) -{ -#if CONFIG_RANDOM_POOL != POOL_NONE - POOL_INIT(&epool_ctx); -#endif - PRNG_INIT(&prng_ctx); - - initialized = 1; - initial_seeding(); -} - -void random_gen(uint8_t *out, size_t len) -{ - ASSERT(initialized); - - optional_reseeding(); - prng_generate(prng, out, len); -} - -#if CONFIG_RANDOM_POOL != POOL_NONE - -void random_add_entropy(enum EntropySource source_idx, - const uint8_t *data, size_t len, - int entropy) -{ - entropy_add(epool, source_idx, data, len, entropy); -} - -#endif diff --git a/bertos/sec/random.h b/bertos/sec/random.h deleted file mode 100644 index 04f570bb..00000000 --- a/bertos/sec/random.h +++ /dev/null @@ -1,106 +0,0 @@ -/** - * \file - * - * - * \brief High-level random number generation functions. - * \author Giovanni Bajo - * - */ - -#ifndef SEC_RANDOM_H -#define SEC_RANDOM_H - -#include - -#define RANDOM_SECURITY_MINIMUM 0 -#define RANDOM_SECURITY_MEDIUM 1 -#define RANDOM_SECURITY_STRONG 2 - -/** - * Configure the security level required by the application. - * - * Application developers are suggested to keep the strongest - * setting (default) unless there are memory or code size issues. - * - * Available settings are: - * - * * \a RANDOM_SECURITY_STRONG: The random library will use - * an entropy pool, automatically feeded by drivers, to gather - * entropy from hardware sources. Data from the pool will - * be used to reseed a secure random number generator. Moreover, - * the generator will be automatically initialised - * with enough entropy to generate safe random numbers even - * immediately after hw reset. - * The overall structure is the same as used by modern - * desktop PCs for generating secure random numbers. - * - * * \a RANDOM_SECURITY_MEDIUM: This intermediate settings will - * avoid usage of an entropy pool, to reduce memory and code - * usage. The security of this settings relies only on the - * good behaviour of the random number generator (even though - * it will be well-seeded at startup). - * - * * \a RANDOM_SECURITY_MINIMUM: This is the lighter setting that - * allows minimal memory and code usage, and it suggested only - * for extremely constrained systems, that only generates few - * random numbers. Even if the generator is still secure on - * paper, its seeding will not be safe (though still entropic - * to allow different sequences to be generated after each reset). - */ -#define RANDOM_SECURITY_LEVEL RANDOM_SECURITY_STRONG - - -void random_init(void); - -void random_gen(uint8_t *out, size_t len); - -INLINE uint8_t random_gen8(void) -{ - uint8_t x; - random_gen(&x, 1); - return x; -} - -INLINE uint16_t random_gen16(void) -{ - uint8_t x; - random_gen(&x, 2); - return x; -} - -INLINE uint32_t random_gen32(void) -{ - uint8_t x; - random_gen(&x, 4); - return x; -} - -#endif /* SEC_RANDOM_H */ diff --git a/bertos/sec/random_p.h b/bertos/sec/random_p.h deleted file mode 100644 index 990925f8..00000000 --- a/bertos/sec/random_p.h +++ /dev/null @@ -1,125 +0,0 @@ -/** - * \file - * - * - * \brief Internal function definitions for random - * \author Giovanni Bajo - * - */ - -#ifndef SEC_RANDOM_P_H -#define SEC_RANDOM_P_H - -#include -#include - -/********************************************************************************/ -/* Configuration of the random module */ -/********************************************************************************/ - -#define POOL_NONE 0 -#define POOL_YARROW 1 -#define POOL_NAMEU1 YarrowPool -#define POOL_NAMEL1 yarrowpool - -#define PRNG_ISAAC 1 -#define PRNG_X917 2 -#define PRNG_YARROW 3 -#define PRNG_NAMEU1 Isaac -#define PRNG_NAMEL1 isaac -#define PRNG_NAMEU2 X917 -#define PRNG_NAMEL2 x917 -#define PRNG_NAMEU3 Yarrow -#define PRNG_NAMEL3 yarrow - -#define EXTRACTOR_NONE 0 -#define EXTRACTOR_SHA1 1 -#define EXTRACTOR_NAME1 SHA1 - -#if RANDOM_SECURITY_LEVEL == RANDOM_SECURITY_STRONG - #define CONFIG_RANDOM_POOL POOL_YARROW - #define CONFIG_RANDOM_EXTRACTOR EXTRACTOR_NONE // not required with a pool - #define CONFIG_RANDOM_PRNG PRNG_YARROW -#elif RANDOM_SECURITY_LEVEL == RANDOM_SECURITY_MEDIUM - #define CONFIG_RANDOM_POOL POOL_NONE - #define CONFIG_RANDOM_EXTRACTOR EXTRACTOR_SHA1 - #define CONFIG_RANDOM_PRNG PRNG_X917 -#elif RANDOM_SECURITY_LEVEL == RANDOM_SECURITY_MINIMUM - #define CONFIG_RANDOM_POOL POOL_NONE - #define CONFIG_RANDOM_EXTRACTOR EXTRACTOR_NONE - #define CONFIG_RANDOM_PRNG PRNG_ISAAC -#else - #error Unsupported random security level value -#endif - -/***************************************************************************/ -/* Internal functions used by BeRTOS drivers to push data into */ -/* the entropy pool */ -/***************************************************************************/ - -#if CONFIG_RANDOM_POOL != POOL_NONE - -enum EntropySource -{ - ENTROPY_SOURCE_IRQ, - ENTROPY_SOURCE_ADC, -}; - -/* - * Add entropy to the global entropy pool. - */ -void random_add_entropy(enum EntropySource source_idx, - const uint8_t *data, size_t len, - int entropy); - - -/* - * Add entropy to the global interrupt pool based on the IRQ - * call time. - * - * This function can be called from interrupt handlers that are - * triggered at unpredictable intervals (so it should not be - * called from clock-driven interrupts like ADC, PWM, etc.). - * - */ -void random_add_entropy_irq(int irq); - -#endif - -/* - * This hardware-dependent function can be used to pull raw - * entropy from a hardware source at startup only. It is used - * for initial seeding of the random generator and should not - * be used in different situations. - */ -void random_pull_entropy(uint8_t *entropy, size_t len); - -#endif /* SEC_RANDOM_P_H */ diff --git a/bertos/sec/util.c b/bertos/sec/util.c deleted file mode 100644 index 7af6cdbe..00000000 --- a/bertos/sec/util.c +++ /dev/null @@ -1,57 +0,0 @@ -/** - * \file - * - * - * \brief Generic utilities. - * \author Giovanni Bajo - * - */ - -#include "util.h" -#include -#include -#include - -// FIXME: this macros should be generated by the wizard -#define BERTOS_PROJECT_NAME "bertos_project" - -#define SALT (BERTOS_PROJECT_NAME "P2K_SALT") - -void password2key(const char *pwd, size_t pwd_len, - uint8_t *key, size_t key_len) -{ - Kdf *kdf = PBKDF2_stackinit(hmac_stackinit(SHA1_stackinit())); - - kdf_begin(kdf, pwd, pwd_len, (uint8_t*)SALT, sizeof(SALT)); - kdf_read(kdf, key, key_len); - - // FIXME: how to purge the stack? -} diff --git a/bertos/sec/util.h b/bertos/sec/util.h deleted file mode 100644 index 189e4ed7..00000000 --- a/bertos/sec/util.h +++ /dev/null @@ -1,96 +0,0 @@ -#ifndef SEC_UTIL_H -#define SEC_UTIL_H - -#include -#include -#include - -/** - * Purge local variables, by zeroing them. - * - * This can be used to clear stack from intermediate results in crypto - * calculations that might somehow be leaked. - */ -#define PURGE(x) \ - memset(&x, 0, sizeof(x)) - -/** - * Convert a generic "password" (low-diffused) to a generic "key" - * (high-diffused). - * - * In common terminology, a "password" is a key with weak cryptographic - * characteristics, such as commonly used password input by an user, - * which are usually short and use only a few different characters from - * the 0-255 byte range. - * - * This function derives a strong key from the password using a one-way - * process. - * - * \note Uses PBKDF2 as key-derivation function, with a fixed salt that - * changes for each Bertos project. - */ -void password2key(const char *pwd, size_t pwd_len, - uint8_t *key, size_t key_len); - -/** - * Perform a bitwise xor between \a in and \a inout, and store - * the result into \a inout. - */ -INLINE void xor_block(uint8_t *out, const uint8_t *in1, const uint8_t* in2, size_t len); - -/** - * Perform a bitwise xor over \a inout with constant \a k. - */ -INLINE void xor_block_const(uint8_t *out, const uint8_t *in, uint8_t k, size_t len); - - -// FIXME: provide non-32bit fallback -// FIXME: proper ifdef conditional -#if 1 // 32-bit optimized versions - -// FIXME: this code is currently buggy because it ignores alignment issues. -INLINE void xor_block(uint8_t *out, const uint8_t *in1, const uint8_t* in2, size_t len) -{ - ASSERT(((size_t)in1 % 4) == 0); - ASSERT(((size_t)in2 % 4) == 0); - ASSERT(((size_t)out % 4) == 0); - - const uint32_t *ibuf1 = (const uint32_t *)in1; - const uint32_t *ibuf2 = (const uint32_t *)in2; - uint32_t *obuf = (uint32_t *)out; - size_t rem = (len & 3); - - len /= 4; - while (len--) - *obuf++ = *ibuf1++ ^ *ibuf2++; - - in1 = (const uint8_t*)ibuf1; - in2 = (const uint8_t*)ibuf2; - out = (uint8_t*)obuf; - while (rem--) - *out++ = *in1++ ^ *in2++; -} - -INLINE void xor_block_const(uint8_t *out, const uint8_t *in, uint8_t k, size_t len) -{ - ASSERT(((size_t)in % 4) == 0); - ASSERT(((size_t)out % 4) == 0); - - uint32_t k32 = k | ((uint32_t)k<<8) | ((uint32_t)k<<16) | ((uint32_t)k<<24); - const uint32_t *ibuf = (const uint32_t *)in; - uint32_t *obuf = (uint32_t *)out; - size_t rem = (len & 3); - - len /= 4; - while (len--) - *obuf++ = *ibuf++ ^ k32; - - in = (const uint8_t*)ibuf; - out = (uint8_t*)obuf; - while (rem--) - *out++ = *in++ ^ k; -} - -#endif - -#endif /* SEC_UTIL_H */