コード例 #1
0
ファイル: main.cpp プロジェクト: debunge/kuznezhik
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;
}
コード例 #2
0
ファイル: kuznyechik.c プロジェクト: odzhan/tinycrypt
// 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);
      }
    }