test 2.2 KB
Newer Older
1 2 3 4
#!/usr/bin/env python3

import os
import sys
5
import time
6
import subprocess
lwc-tester committed
7 8 9 10 11 12 13 14
import serial.tools.list_ports
from test_common import (
    LogicMultiplexerTimeMeasurements,
    parse_nist_aead_test_vectors,
    DeviceUnderTestAeadUARTP,
    eprint,
    run_nist_aead_test_line,
)
15

16

lwc-tester committed
17 18 19 20 21 22 23 24 25
def get_serial():
    ports = serial.tools.list_ports.comports()
    devices = [
        p.device
        for p in ports
        if (p.vid == 0x1A86 and p.pid == 0x7523)
    ]
    devices.sort()
    return devices[0]
26

27

lwc-tester committed
28
class Uno(DeviceUnderTestAeadUARTP):
29

lwc-tester committed
30 31
    def __init__(self, build_dir):
        DeviceUnderTestAeadUARTP.__init__(self)
32

lwc-tester committed
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
        self.build_dir = build_dir

    def flash(self):
        pipe = subprocess.PIPE
        previous_dir = os.path.abspath(os.curdir)
        os.chdir(self.build_dir)
        cmd = ['platformio', 'run', '-e', 'uno', '--target', 'upload']
        cmd.extend(['--upload-port', get_serial()])
        cmd.extend(['--upload-port', get_serial()])
        p = subprocess.Popen(
            cmd, stdout=sys.stderr, stdin=pipe)
        stdout, stderr = p.communicate("")
        eprint("Firmware flashed.")
        os.chdir(previous_dir)

    def dump_ram(self):
        return None
50 51


52
def main(argv):
lwc-tester committed
53 54
    if len(argv) != 3:
        print("Usage: test LWC_AEAD_KAT.txt build_dir")
55
        return 1
lwc-tester committed
56 57 58 59

    kat = list(parse_nist_aead_test_vectors(argv[1]))
    build_dir = argv[2]

lwc-tester committed
60
    dut = Uno(build_dir)
lwc-tester committed
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96

    try:
        tool = LogicMultiplexerTimeMeasurements(0x0c00)
        tool.begin_measurement()

        dut.flash()

        ser = serial.Serial(
            get_serial(),
            baudrate=115200,
            timeout=5)

        ser.setDTR(True)
        time.sleep(0.01)
        ser.setDTR(False)
        time.sleep(1)

        dut.ser = ser

        dut.prepare()
        sys.stdout.write("Board prepared\n")
        sys.stdout.flush()

        for i, m, ad, k, npub, c in kat:
            tool.arm()
            run_nist_aead_test_line(dut, i, m, ad, k, npub, c)
            tool.unarm()

    except Exception as ex:
        print("TEST FAILED")
        raise ex

    finally:
        tool.end_measurement()
        sys.stdout.flush()
        sys.stderr.flush()
97 98 99 100


if __name__ == "__main__":
    sys.exit(main(sys.argv))