where-simd-helps/benchmark/test_speed.c

160 lines
3.5 KiB
C

/*
* This file comes from the Kyber repo; see the files in kyber/avx2/test or kyber/ref/test for further details.
*/
#include <stddef.h>
#include <stdint.h>
#include <stdlib.h>
#include <stdio.h>
#include "../kem.h"
#include "../params.h"
#include "../indcpa.h"
#include "../polyvec.h"
#include "../poly.h"
#include "../randombytes.h"
#include "cpucycles.h"
#include "speed_print.h"
#define NTESTS 1000
uint64_t t[NTESTS];
uint8_t seed[KYBER_SYMBYTES] = {0};
int main(void)
{
unsigned int i;
uint8_t pk[CRYPTO_PUBLICKEYBYTES];
uint8_t sk[CRYPTO_SECRETKEYBYTES];
uint8_t ct[CRYPTO_CIPHERTEXTBYTES];
uint8_t key[CRYPTO_BYTES];
uint8_t coins32[KYBER_SYMBYTES];
uint8_t coins64[2*KYBER_SYMBYTES];
polyvec matrix[KYBER_K];
poly ap;
randombytes(coins32, KYBER_SYMBYTES);
randombytes(coins64, 2*KYBER_SYMBYTES);
for(i=0;i<NTESTS;i++) {
t[i] = cpucycles();
gen_matrix(matrix, seed, 0);
}
print_results("gen_a: ", t, NTESTS);
for(i=0;i<NTESTS;i++) {
t[i] = cpucycles();
poly_getnoise_eta1(&ap, seed, 0);
}
print_results("poly_getnoise_eta1: ", t, NTESTS);
for(i=0;i<NTESTS;i++) {
t[i] = cpucycles();
poly_getnoise_eta2(&ap, seed, 0);
}
print_results("poly_getnoise_eta2: ", t, NTESTS);
for(i=0;i<NTESTS;i++) {
t[i] = cpucycles();
poly_ntt(&ap);
}
print_results("NTT: ", t, NTESTS);
for(i=0;i<NTESTS;i++) {
t[i] = cpucycles();
poly_invntt_tomont(&ap);
}
print_results("INVNTT: ", t, NTESTS);
for(i=0;i<NTESTS;i++) {
t[i] = cpucycles();
polyvec_basemul_acc_montgomery(&ap, &matrix[0], &matrix[1]);
}
print_results("polyvec_basemul_acc_montgomery: ", t, NTESTS);
for(i=0;i<NTESTS;i++) {
t[i] = cpucycles();
poly_tomsg(ct,&ap);
}
print_results("poly_tomsg: ", t, NTESTS);
for(i=0;i<NTESTS;i++) {
t[i] = cpucycles();
poly_frommsg(&ap,ct);
}
print_results("poly_frommsg: ", t, NTESTS);
for(i=0;i<NTESTS;i++) {
t[i] = cpucycles();
poly_compress(ct,&ap);
}
print_results("poly_compress: ", t, NTESTS);
for(i=0;i<NTESTS;i++) {
t[i] = cpucycles();
poly_decompress(&ap,ct);
}
print_results("poly_decompress: ", t, NTESTS);
for(i=0;i<NTESTS;i++) {
t[i] = cpucycles();
polyvec_compress(ct,&matrix[0]);
}
print_results("polyvec_compress: ", t, NTESTS);
for(i=0;i<NTESTS;i++) {
t[i] = cpucycles();
polyvec_decompress(&matrix[0],ct);
}
print_results("polyvec_decompress: ", t, NTESTS);
for(i=0;i<NTESTS;i++) {
t[i] = cpucycles();
indcpa_keypair_derand(pk, sk, coins32);
}
print_results("indcpa_keypair: ", t, NTESTS);
for(i=0;i<NTESTS;i++) {
t[i] = cpucycles();
indcpa_enc(ct, key, pk, seed);
}
print_results("indcpa_enc: ", t, NTESTS);
for(i=0;i<NTESTS;i++) {
t[i] = cpucycles();
indcpa_dec(key, ct, sk);
}
print_results("indcpa_dec: ", t, NTESTS);
for(i=0;i<NTESTS;i++) {
t[i] = cpucycles();
crypto_kem_keypair_derand(pk, sk, coins64);
}
print_results("kyber_keypair_derand: ", t, NTESTS);
for(i=0;i<NTESTS;i++) {
t[i] = cpucycles();
crypto_kem_keypair(pk, sk);
}
print_results("kyber_keypair: ", t, NTESTS);
for(i=0;i<NTESTS;i++) {
t[i] = cpucycles();
crypto_kem_enc_derand(ct, key, pk, coins32);
}
print_results("kyber_encaps_derand: ", t, NTESTS);
for(i=0;i<NTESTS;i++) {
t[i] = cpucycles();
crypto_kem_enc(ct, key, pk);
}
print_results("kyber_encaps: ", t, NTESTS);
for(i=0;i<NTESTS;i++) {
t[i] = cpucycles();
crypto_kem_dec(key, ct, sk);
}
print_results("kyber_decaps: ", t, NTESTS);
return 0;
}