Skip to content

Commit

Permalink
Merge pull request #54 from dongbeiouba/test/ascon_gen_kat
Browse files Browse the repository at this point in the history
Add ascon_gen_kat
  • Loading branch information
InfoHunter authored Jan 30, 2024
2 parents 21cbad7 + 7f172e2 commit 8758f8e
Show file tree
Hide file tree
Showing 8 changed files with 215 additions and 8 deletions.
203 changes: 203 additions & 0 deletions test/ascon_gen_kat.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,203 @@
/*
* Copyright 2024 The Tongsuo Project Authors. All Rights Reserved.
*
* Licensed under the Apache License 2.0 (the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
* in the file LICENSE in the source distribution or at
* https://github.com/Tongsuo-Project/tongsuo-mini/blob/main/LICENSE
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <tongsuo/minisuo.h>
#include <tongsuo/ascon.h>
#include <tongsuo/hmac.h>

static int gen_aead(FILE *fp, int scheme)
{
unsigned char key[TSM_ASCON_AEAD_KEY_LEN];
unsigned char iv[TSM_ASCON_AEAD_IV_LEN];
unsigned char pt[32];
unsigned char ad[32];
unsigned char ct[1024];
unsigned char tag[TSM_ASCON_AEAD_TAG_LEN];
size_t outl;
int i, j, k, cnt = 0;

for (i = 0; i < sizeof(key); i++) {
key[i] = i;
}
for (i = 0; i < sizeof(iv); i++) {
iv[i] = i;
}
for (i = 0; i < sizeof(pt); i++) {
pt[i] = i;
}
for (i = 0; i < sizeof(ad); i++) {
ad[i] = i;
}

fprintf(fp, "# Generated by ascon_gen_kat\n");

for (i = 0; i <= sizeof(pt); i++) {
for (j = 0; j <= sizeof(ad); j++) {
fprintf(fp, "Count = %d\n", ++cnt);

fprintf(fp, "Key = ");
for (k = 0; k < sizeof(key); k++) {
fprintf(fp, "%02X", key[k]);
}

fprintf(fp, "\nNonce = ");
for (k = 0; k < sizeof(iv); k++) {
fprintf(fp, "%02X", iv[k]);
}

fprintf(fp, "\nPT = ");
for (k = 0; k < i; k++) {
fprintf(fp, "%02X", pt[k]);
}

fprintf(fp, "\nAD = ");
for (k = 0; k < j; k++) {
fprintf(fp, "%02X", ad[k]);
}

fprintf(fp, "\nCT = ");
if (tsm_ascon_aead_oneshot(scheme, key, iv, ad, j, pt, i, ct, &outl,
TSM_CIPH_FLAG_ENCRYPT)
!= TSM_OK) {
fprintf(stderr, "Error: could not encrypt\n");
return 0;
}
for (k = 0; k < outl; k++) {
fprintf(fp, "%02X", ct[k]);
}

fprintf(fp, "\n\n");
}
}

return 1;
}

static int gen_hash(FILE *fp, int scheme)
{
unsigned int i, j, cnt = 0;
unsigned char buf[1024];
unsigned char hash[TSM_ASCON_HASH_LEN];
size_t outl;

for (i = 0; i < sizeof(buf); i++) {
buf[i] = i & 0xff;
}

fprintf(fp, "# Generated by ascon_gen_kat\n");
for (i = 0; i <= sizeof(buf); i++) {
fprintf(fp, "Count = %u\n", i + 1);

fprintf(fp, "Msg = ");
for (j = 0; j < i; j++) {
fprintf(fp, "%02X", buf[j]);
}
fprintf(fp, "\n");

if (tsm_ascon_hash_oneshot(scheme, buf, i, hash, &outl) != TSM_OK) {
fprintf(stderr, "Error: could not generate hash\n");
return 0;
}

fprintf(fp, "MD = ");
for (j = 0; j < TSM_ASCON_HASH_LEN; j++) {
fprintf(fp, "%02X", hash[j]);
}

fprintf(fp, "\n\n");
}

return 1;
}

static int gen_hmac(FILE *fp, int hash)
{
unsigned char msg[1024];
unsigned char key[32];
unsigned char buf[TSM_ASCON_HMAC_LEN];
size_t outlen;
int i;

fprintf(fp, "# Generated by ascon_gen_kat\n");

for (i = 0; i < sizeof(key); i++) {
key[i] = i;
}

for (i = 0; i < sizeof(msg); i++) {
msg[i] = i & 0xff;
}

for (i = 0; i <= sizeof(msg); i++) {
fprintf(fp, "Count = %d\n", i + 1);

fprintf(fp, "Key = ");
for (int j = 0; j < sizeof(key); j++) {
fprintf(fp, "%02X", key[j]);
}

fprintf(fp, "\nMsg = ");
for (int j = 0; j < i; j++) {
fprintf(fp, "%02X", msg[j]);
}

fprintf(fp, "\nTag = ");
if (tsm_hmac_oneshot(hash, key, sizeof(key), msg, i, buf, &outlen) != TSM_OK) {
fprintf(stderr, "Error: could not generate HMAC\n");
return 0;
}
for (int j = 0; j < outlen; j++) {
fprintf(fp, "%02X", buf[j]);
}

fprintf(fp, "\n\n");
}

return 1;
}

int main(int argc, char **argv)
{
int ret = 0;

if (argc != 2) {
fprintf(stderr, "Usage: %s [-hash|-hasha|-aead128|-aead128a|-hmac|-hmaca]\n", argv[0]);
exit(EXIT_FAILURE);
}

if (strcmp(argv[1], "-hash") == 0) {
ret = gen_hash(stdout, TSM_HASH_ASCON_HASH);
} else if (strcmp(argv[1], "-hasha") == 0) {
ret = gen_hash(stdout, TSM_HASH_ASCON_HASHA);
} else if (strcmp(argv[1], "-aead128") == 0) {
ret = gen_aead(stdout, TSM_ASCON_AEAD_128);
} else if (strcmp(argv[1], "-aead128a") == 0) {
ret = gen_aead(stdout, TSM_ASCON_AEAD_128A);
} else if (strcmp(argv[1], "-hmac") == 0) {
ret = gen_hmac(stdout, TSM_HASH_ASCON_HASH);
} else if (strcmp(argv[1], "-hmaca") == 0) {
ret = gen_hmac(stdout, TSM_HASH_ASCON_HASHA);
} else {
fprintf(stderr, "Error: invalid argument %s\n", argv[1]);
exit(EXIT_FAILURE);
}

if (ret == 0) {
fprintf(stderr, "Error: could not generate KAT\n");
exit(EXIT_FAILURE);
}

return 0;
}

// cc ascon_gen_kat.c ../build/libtongsuo-mini.a -o ascon_gen_kat -I ../include
// ./ascon_gen_kat -hash > ascon_hash.txt
4 changes: 2 additions & 2 deletions test/test_ascon_aead.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@
@pytest.mark.parametrize(
"scheme, kat_file",
[
("ascon128", "test_ascon_data/ascon128_aead.txt"),
("ascon128a", "test_ascon_data/ascon128a_aead.txt"),
("ascon128", "test_ascon_data/ascon_aead128.txt"),
("ascon128a", "test_ascon_data/ascon_aead128a.txt"),
],
)
def test_ascon_aead(scheme, kat_file, subtests):
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
# test cases for ascon128v12 from LWC AEAD KAT 128
# tag is appended to ciphertext
# Generated by ascon_gen_kat
Count = 1
Key = 000102030405060708090A0B0C0D0E0F
Nonce = 000102030405060708090A0B0C0D0E0F
Expand Down Expand Up @@ -7622,3 +7621,4 @@ Nonce = 000102030405060708090A0B0C0D0E0F
PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F
AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F
CT = B96C78651B6246B0C3B1A5D373B0D5168DCA4A96734CF0DDF5F92F8D15E30270279BF6A6CC3F2FC9350B915C292BDB8D

Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
# test cases for ascon128av12 from LWC AEAD KAT 128
# tag is appended to ciphertext
# Generated by ascon_gen_kat
Count = 1
Key = 000102030405060708090A0B0C0D0E0F
Nonce = 000102030405060708090A0B0C0D0E0F
Expand Down Expand Up @@ -7622,3 +7621,4 @@ Nonce = 000102030405060708090A0B0C0D0E0F
PT = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F
AD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F
CT = A55236AC020DBDA74CE6CCD10C68C4D8514450A382BC87C68946D86A921DD88E2ADDDFBBE77D4112830E01960B9D38D5

2 changes: 1 addition & 1 deletion test/test_ascon_data/ascon_hash.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# test cases for ascon hash from LWC HASH KAT 256
# Generated by ascon_gen_kat
Count = 1
Msg =
MD = 7346BC14F036E87AE03D0997913088F5F68411434B3CF8B54FA796A80D251F91
Expand Down
3 changes: 2 additions & 1 deletion test/test_ascon_data/ascon_hasha.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# test cases for ascon hasha from LWC HASH KAT 256
# Generated by ascon_gen_kat
Count = 1
Msg =
MD = AECD027026D0675F9DE7A8AD8CCF512DB64B1EDCF0B20C388A0C7CC617AAA2C4
Expand Down Expand Up @@ -4098,3 +4098,4 @@ MD = 9CC90678B18BA6FA51832BE07629A83AB577A4D2ED79E20A415775C0B86BBB9C
Count = 1025
Msg = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF
MD = 14F6A0C1E5751733955B820CA67BC89BB7EB7014C88CAEB5F380D75EED484FE9

2 changes: 2 additions & 0 deletions test/test_hmac_data/ascon_hmac.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# Generated by ascon_gen_kat
Count = 1
Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F
Msg =
Expand Down Expand Up @@ -5122,3 +5123,4 @@ Count = 1025
Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F
Msg = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF
Tag = A571531AA19DE451A64C437394D9E54DB280E2BA5B12041061FCE58E7AEF06B3

1 change: 1 addition & 0 deletions test/test_hmac_data/ascon_hmaca.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# Generated by ascon_gen_kat
Count = 1
Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F
Msg =
Expand Down

0 comments on commit 8758f8e

Please sign in to comment.