metamorphic tests for onetimeauth
This commit is contained in:
parent
a7b75a2d7d
commit
bd69a3083a
@ -6,7 +6,7 @@
|
|||||||
#define MAX_ITER 1000
|
#define MAX_ITER 1000
|
||||||
|
|
||||||
static void
|
static void
|
||||||
mm_1(void)
|
mm_generichash(void)
|
||||||
{
|
{
|
||||||
crypto_generichash_state st;
|
crypto_generichash_state st;
|
||||||
unsigned char *h, *h2;
|
unsigned char *h, *h2;
|
||||||
@ -31,6 +31,7 @@ mm_1(void)
|
|||||||
h = (unsigned char *) sodium_malloc(hlen);
|
h = (unsigned char *) sodium_malloc(hlen);
|
||||||
h2 = (unsigned char *) sodium_malloc(hlen);
|
h2 = (unsigned char *) sodium_malloc(hlen);
|
||||||
|
|
||||||
|
randombytes_buf(k, klen);
|
||||||
randombytes_buf(m, mlen);
|
randombytes_buf(m, mlen);
|
||||||
|
|
||||||
crypto_generichash_init(&st, k, klen, hlen);
|
crypto_generichash_init(&st, k, klen, hlen);
|
||||||
@ -52,10 +53,51 @@ mm_1(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
mm_onetimeauth(void)
|
||||||
|
{
|
||||||
|
crypto_onetimeauth_state st;
|
||||||
|
unsigned char *h, *h2;
|
||||||
|
unsigned char *k;
|
||||||
|
unsigned char *m;
|
||||||
|
size_t mlen;
|
||||||
|
size_t l1, l2;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < MAX_ITER; i++) {
|
||||||
|
mlen = randombytes_uniform(MAXLEN);
|
||||||
|
m = (unsigned char *) sodium_malloc(mlen);
|
||||||
|
k = (unsigned char *) sodium_malloc(crypto_onetimeauth_KEYBYTES);
|
||||||
|
h = (unsigned char *) sodium_malloc(crypto_onetimeauth_BYTES);
|
||||||
|
h2 = (unsigned char *) sodium_malloc(crypto_onetimeauth_BYTES);
|
||||||
|
|
||||||
|
crypto_onetimeauth_keygen(k);
|
||||||
|
randombytes_buf(m, mlen);
|
||||||
|
|
||||||
|
crypto_onetimeauth_init(&st, k);
|
||||||
|
l1 = randombytes_uniform(mlen);
|
||||||
|
l2 = randombytes_uniform(mlen - l1);
|
||||||
|
crypto_onetimeauth_update(&st, m, l1);
|
||||||
|
crypto_onetimeauth_update(&st, m + l1, l2);
|
||||||
|
crypto_onetimeauth_update(&st, m + l1 + l2, mlen - l1 - l2);
|
||||||
|
crypto_onetimeauth_final(&st, h);
|
||||||
|
|
||||||
|
crypto_onetimeauth(h2, m, mlen, k);
|
||||||
|
|
||||||
|
assert(memcmp(h, h2, crypto_onetimeauth_BYTES) == 0);
|
||||||
|
|
||||||
|
sodium_free(h2);
|
||||||
|
sodium_free(h);
|
||||||
|
sodium_free(k);
|
||||||
|
sodium_free(m);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
main(void)
|
main(void)
|
||||||
{
|
{
|
||||||
mm_1();
|
mm_generichash();
|
||||||
|
mm_onetimeauth();
|
||||||
|
|
||||||
printf("OK\n");
|
printf("OK\n");
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user