all repos — TinyCrypT @ 15791d38c8f011a16648742e77b25435ee93ab76

Short and sweet classical cryptographic primitives

tests/src/sha2/testgen.py (view raw)

 1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
# Modify as necessary, generates GoogleTest harnesses from the NIST-provided testing files

vecno = 0
print("#include <cstdint>")
print("#include <cstring>")
print("#include \"gtest/gtest.h\"")
print("extern \"C\" {")
print("#include \"tinycrypt/sha2.h\"")
print("}")

# with open("SHA512LongMsg.rsp") as f:
#     for line in f:
#         if line.startswith("Msg"):
#             print(f"static uint8_t MSG{vecno}[] = " + "{0x" + ",0x".join([line[6:-1][i:i+2] for i in range(0, len(line) - 7, 2)]) + ",};")
#         elif line.startswith("MD"):
#             print(f"static uint8_t DIGEST{vecno}[] = " + "{0x" + ",0x".join([line[5:-1][i:i+2] for i in range(0, len(line) - 6, 2)]) + ",};")
#             vecno += 1

# for i in range(vecno):
#     print(f"TEST (TinyCrypT_SHA512, long_message_{i})")
#     print("{")
#     print("uint8_t actual_digest[64];")
#     print(f"tct_sha512(MSG{i}, sizeof(MSG{i}), actual_digest);")
#     print(f"EXPECT_EQ(memcmp(DIGEST{i}, actual_digest, 64), 0);")
#     print("}")

with open("SHA512Monte.rsp") as f:
    for line in f:
        if line.startswith("Seed"):
            print(f"static uint8_t SEED[] = " + "{0x" + ",0x".join([line[7:-1][i:i+2] for i in range(0, len(line) - 8, 2)]) + ",};")
        elif line.startswith("MD"):
            print(f"static uint8_t ROUND{vecno}[] = " + "{0x" + ",0x".join([line[5:-1][i:i+2] for i in range(0, len(line) - 6, 2)]) + ",};")
            vecno += 1

for i in range(vecno):
    print(f"TEST (TinyCrypT_SHA512, monte_{i})")
    print("{")
    print("uint8_t msg[192];")
    print("uint8_t digest[64];")
    print("uint8_t *a = msg; uint8_t *b = msg + 64; uint8_t *c = msg + 128;")
    print("for (uint64_t j = 0; j < 64; ++j) a[j] = b[j] = c[j] = SEED[j];")
    print(f"for (uint64_t i = 0; i < ({i} + 1) * 1000; ++i)")
    print("{")
    print("if (i % 1000 == 0 && i != 0) {")
    print("for (uint64_t j = 0; j < 64; ++j) a[j] = b[j] = c[j] = digest[j];")
    print("}")
    print(f"tct_sha512(msg, sizeof(msg), digest);")
    print("for (uint64_t j = 0; j < 64; ++j) { a[j] = b[j]; b[j] = c[j]; c[j] = digest[j]; }")
    print("}")
    print(f"EXPECT_EQ(memcmp(ROUND{i}, digest, 64), 0);")
    print("}")