void bench_dh(void) { int i; byte tmp[1024]; size_t bytes; word32 idx = 0, pubSz, privSz, pubSz2, privSz2, agreeSz; byte pub[256]; /* for 2048 bit */ byte priv[256]; /* for 2048 bit */ byte pub2[256]; /* for 2048 bit */ byte priv2[256]; /* for 2048 bit */ byte agree[256]; /* for 2048 bit */ double start, total, each, milliEach; DhKey dhKey; FILE* file = fopen("./certs/dh2048.der", "rb"); if (!file) { printf("can't find ./certs/dh2048.der, " "Please run from CyaSSL home dir\n"); return; } bytes = fread(tmp, 1, sizeof(tmp), file); InitDhKey(&dhKey); bytes = DhKeyDecode(tmp, &idx, &dhKey, (word32)bytes); if (bytes != 0) { printf("dhekydecode failed, can't benchmark\n"); return; } start = current_time(); for (i = 0; i < times; i++) DhGenerateKeyPair(&dhKey, &rng, priv, &privSz, pub, &pubSz); total = current_time() - start; each = total / times; /* per second */ milliEach = each * 1000; /* milliseconds */ printf("DH 2048 key generation %6.2f milliseconds, avg over %d" " iterations\n", milliEach, times); DhGenerateKeyPair(&dhKey, &rng, priv2, &privSz2, pub2, &pubSz2); start = current_time(); for (i = 0; i < times; i++) DhAgree(&dhKey, agree, &agreeSz, priv, privSz, pub2, pubSz2); total = current_time() - start; each = total / times; /* per second */ milliEach = each * 1000; /* milliseconds */ printf("DH 2048 key agreement %6.2f milliseconds, avg over %d" " iterations\n", milliEach, times); fclose(file); FreeDhKey(&dhKey); }
int dh_test() { int ret; word32 bytes; word32 idx = 0, privSz, pubSz, privSz2, pubSz2, agreeSz, agreeSz2; byte tmp[1024]; byte priv[128]; byte pub[128]; byte priv2[128]; byte pub2[128]; byte agree[128]; byte agree2[128]; DhKey key; DhKey key2; RNG rng; FILE* file = fopen(dhKey, "rb"); if (!file) return -50; bytes = (word32) fread(tmp, 1, 1024, file); InitDhKey(&key); InitDhKey(&key2); ret = DhKeyDecode(tmp, &idx, &key, bytes); if (ret != 0) return -51; idx = 0; ret = DhKeyDecode(tmp, &idx, &key2, bytes); if (ret != 0) return -52; ret = InitRng(&rng); if (ret != 0) return -53; ret = DhGenerateKeyPair(&key, &rng, priv, &privSz, pub, &pubSz); ret = DhGenerateKeyPair(&key2, &rng, priv2, &privSz2, pub2, &pubSz2); if (ret != 0) return -54; ret = DhAgree(&key, agree, &agreeSz, priv, privSz, pub2, pubSz2); ret = DhAgree(&key2, agree2, &agreeSz2, priv2, privSz2, pub, pubSz); if (ret != 0) return -55; if (memcmp(agree, agree2, agreeSz)) return -56; FreeDhKey(&key); FreeDhKey(&key2); fclose(file); return 0; }
void bench_dh() { int i; byte tmp[1024]; size_t bytes; word32 idx = 0, pubSz, privSz, pubSz2, privSz2, agreeSz; byte pub[128]; /* for 1024 bit */ byte priv[128]; /* for 1024 bit */ byte pub2[128]; /* for 1024 bit */ byte priv2[128]; /* for 1024 bit */ byte agree[128]; /* for 1024 bit */ double start, total, each, milliEach; DhKey key; FILE* file = fopen("./dh1024.der", "rb"); if (!file) { printf("can't find ./dh1024.der\n"); return; } bytes = fread(tmp, 1, 1024, file); InitDhKey(&key); bytes = DhKeyDecode(tmp, &idx, &key, (word32)bytes); start = current_time(); for (i = 0; i < times; i++) DhGenerateKeyPair(&key, &rng, priv, &privSz, pub, &pubSz); total = current_time() - start; each = total / times; /* per second */ milliEach = each * 1000; /* milliseconds */ printf("DH 1024 key generation %6.2f milliseconds, avg over %d" " iterations\n", milliEach, times); DhGenerateKeyPair(&key, &rng, priv2, &privSz2, pub2, &pubSz2); start = current_time(); for (i = 0; i < times; i++) DhAgree(&key, agree, &agreeSz, priv, privSz, pub2, pubSz2); total = current_time() - start; each = total / times; /* per second */ milliEach = each * 1000; /* milliseconds */ printf("DH 1024 key agreement %6.2f milliseconds, avg over %d" " iterations\n", milliEach, times); fclose(file); FreeDhKey(&key); }
bool tr_dh_make_key (tr_dh_ctx_t raw_handle, size_t private_key_length UNUSED, uint8_t * public_key, size_t * public_key_length) { struct tr_dh_ctx * handle = raw_handle; word32 my_private_key_length, my_public_key_length; tr_lock * rng_lock = get_rng_lock (); assert (handle != NULL); assert (public_key != NULL); if (handle->private_key == NULL) handle->private_key = tr_malloc (handle->key_length); tr_lockLock (rng_lock); if (!check_result (DhGenerateKeyPair (&handle->dh, get_rng (), handle->private_key, &my_private_key_length, public_key, &my_public_key_length))) { tr_lockUnlock (rng_lock); return false; } tr_lockUnlock (rng_lock); tr_dh_align_key (public_key, my_public_key_length, handle->key_length); handle->private_key_length = my_private_key_length; if (public_key_length != NULL) *public_key_length = handle->key_length; return true; }
void bench_dh(void) { #if !defined(USE_CERT_BUFFERS_1024) && !defined(USE_CERT_BUFFERS_2048) int ret; #endif int i ; byte tmp[1024]; size_t bytes; word32 idx = 0, pubSz, privSz = 0, pubSz2, privSz2, agreeSz; byte pub[256]; /* for 2048 bit */ byte priv[256]; /* for 2048 bit */ byte pub2[256]; /* for 2048 bit */ byte priv2[256]; /* for 2048 bit */ byte agree[256]; /* for 2048 bit */ double start, total, each, milliEach; DhKey dhKey; int dhKeySz = 2048; /* used in printf */ #ifdef USE_CERT_BUFFERS_1024 XMEMCPY(tmp, dh_key_der_1024, sizeof_dh_key_der_1024); bytes = sizeof_dh_key_der_1024; dhKeySz = 1024; #elif defined(USE_CERT_BUFFERS_2048) XMEMCPY(tmp, dh_key_der_2048, sizeof_dh_key_der_2048); bytes = sizeof_dh_key_der_2048; #else FILE* file = fopen(certDHname, "rb"); if (!file) { printf("can't find %s, Please run from CyaSSL home dir\n", certDHname); return; } ret = InitRng(&rng); if (ret < 0) { printf("InitRNG failed\n"); return; } bytes = fread(tmp, 1, sizeof(tmp), file); #endif /* USE_CERT_BUFFERS */ InitDhKey(&dhKey); bytes = DhKeyDecode(tmp, &idx, &dhKey, (word32)bytes); if (bytes != 0) { printf("dhekydecode failed, can't benchmark\n"); #if !defined(USE_CERT_BUFFERS_1024) && !defined(USE_CERT_BUFFERS_2048) fclose(file); #endif return; } start = current_time(1); for (i = 0; i < ntimes; i++) DhGenerateKeyPair(&dhKey, &rng, priv, &privSz, pub, &pubSz); total = current_time(0) - start; each = total / ntimes; /* per second */ milliEach = each * 1000; /* milliseconds */ printf("DH %d key generation %6.3f milliseconds, avg over %d" " iterations\n", dhKeySz, milliEach, ntimes); DhGenerateKeyPair(&dhKey, &rng, priv2, &privSz2, pub2, &pubSz2); start = current_time(1); for (i = 0; i < ntimes; i++) DhAgree(&dhKey, agree, &agreeSz, priv, privSz, pub2, pubSz2); total = current_time(0) - start; each = total / ntimes; /* per second */ milliEach = each * 1000; /* milliseconds */ printf("DH %d key agreement %6.3f milliseconds, avg over %d" " iterations\n", dhKeySz, milliEach, ntimes); #if !defined(USE_CERT_BUFFERS_1024) && !defined(USE_CERT_BUFFERS_2048) fclose(file); #endif FreeDhKey(&dhKey); }