int main(int argc, char **argv) { printf("Config: bits: %d, optimize mult: %d, use mul table: %d, use tables: %d\n", get_bits(), use_galois(), use_mul_table(), use_tables()); kuz_key_t key; w128_t x; uint32_t buf[0x100]; clock_t tim; kuz_init(); self_test(); // == Speed Test == for (int i = 0; i < 0x100; i++) buf[i] = i; kuz_set_encrypt_key(&key, testvec_key); for (int n = 4000, tim = 0; tim < 2 * CLOCKS_PER_SEC; n <<= 1) { tim = clock(); for (int j = 0; j < n; j++) { for (int i = 0; i < 0x100; i += 4) kuz_encrypt_block(&key, &buf[i]); } tim = clock() - tim; printf("kuz_encrypt_block(): %.3f kB/s (n=%dkB,t=%.3fs)\r", ((double) CLOCKS_PER_SEC * n) / ((double) tim), n, ((double) tim) / ((double) CLOCKS_PER_SEC)); fflush(stdout); } printf("\n"); for (int i = 0; i < 0x100; i++) buf[i] = i; kuz_set_decrypt_key(&key, testvec_key); for (int n = 4000, tim = 0; tim < 2 * CLOCKS_PER_SEC; n <<= 1) { tim = clock(); for (int j = 0; j < n; j++) { for (int i = 0; i < 0x100; i += 4) kuz_decrypt_block(&key, &buf[i]); } tim = clock() - tim; printf("kuz_decrypt_block(): %.3f kB/s (n=%dkB,t=%.3fs)\r", ((double) CLOCKS_PER_SEC * n) / ((double) tim), n, ((double) tim) / ((double) CLOCKS_PER_SEC)); fflush(stdout); } printf("\n"); printf("Tables: %.1fK (encrypt: %.1fK, decrypt: %.1fK)\n", (float)get_used_memory_count() / 1024, (float)get_encrypt_used_memory_count() / 1024, (float)get_decrypt_used_memory_count() / 1024); return 0; }
// key setup void kuz_setkey(kuz_key_t *kuz, const uint8_t key[32]) { uint32_t i, j; w128_t c, z; w256_t x; kuz_init(kuz); // copy key to context memcpy (&kuz->k[0].b[0], key, 32); // copy key to local buffer memcpy (&x.b[0], key, 32); for (i=1; i<=32; i++) { // C Value memset (&c.b[0], 0, 16); c.b[15] = (uint8_t)i; // load round in lsb kuz_lt(&c, KUZ_ENCRYPT); for (j=0; j<16; j++) { z.b[j] = x.b[j] ^ c.b[j]; } kuz_subbytes(&z, kuz, KUZ_ENCRYPT); kuz_lt(&z, KUZ_ENCRYPT); for (j=0; j<16; j++) { z.b[j] ^= x.b[16+j]; } memcpy (&x.b[16], &x.b[0], 16); memcpy (&x.b[0], &z.b[0], 16); if ((i & 7) == 0) { memcpy (&kuz->k[(i >> 2)].b[0], &x.b[0], 32); } }