aegis 0.9.8

AEGIS authenticated ciphers (AEGIS-128, AEGIS-256, AEGIS-128X, AEGIS-256X)
Documentation
#! /usr/bin/env python3

import json
import re


def tvdump(topic, tvs):
    with open(filename(topic), "w") as f:
        f.write(json.dumps(tvs, indent=2))

    print(json.dumps(tvs, indent=2))


def filename(topic):
    return re.sub(r"[^a-z0-9]+", "-", topic.lower()) + ".json"


header = True
in_tv = False
tv = {}
tvs = []
must_fail = False
with open("../draft-irtf-cfrg-aegis-aead.md") as f:
    for line in f:
        line = line.strip()
        if line == "":
            continue
        if line.startswith("# Test Vectors"):
            header = False
            continue
        if header:
            continue

        if line.startswith("## "):
            if len(tvs) > 0:
                tvdump(topic, tvs)
            topic = line[3:]
            tv_name = topic
            tvs = []
            continue

        if line.startswith("### "):
            tv_name = line[4:]
            tv = {"test": tv_name}
            in_tv = False
            continue

        if line == "~~~ test-vectors":
            in_tv = True
            tv = {"name": tv_name}
            if must_fail:
                tv["error"] = "verification failed"
                must_fail = False
            continue

        if line == "~~~":
            tvs.append(tv)
            in_tv = False
            current_key = None
            continue

        if line.find("verification failed") != -1:
            must_fail = True
            continue

        if line == "After initialization:":
            tv_name = tv_name + " (after initialization)"

        if not in_tv:
            continue

        parts = line.split(":")
        if len(parts) == 2:
            key = parts[0].strip()
            value = parts[1].strip()
            if key == "After Update":
                continue
            if key in tv:
                key = key + "_2"
            tv[key] = value
            current_key = key
            continue

        if not current_key:
            continue

        tv[key] += line.strip()

tvdump(topic, tvs)