"""Tests for the C header emitted from a TrustBundle.""" from cryptography.hazmat.primitives.asymmetric import ec from aliro_harness.trustgen.header import TrustBundle, render_trust_header def _bundle(): return TrustBundle( issuer_public_key=ec.generate_private_key(ec.SECP256R1()).public_key(), reader_private_key=ec.generate_private_key(ec.SECP256R1()), reader_group_id=bytes(range(16)), reader_group_sub_id=bytes(range(16, 32)), ) def test_header_has_include_guard(): text = render_trust_header(_bundle()) assert "#ifndef ALIRO_TRUST_H_" in text assert "#define ALIRO_TRUST_H_" in text assert "#endif" in text def test_header_marks_file_as_autogenerated(): text = render_trust_header(_bundle()) assert "AUTO-GENERATED" in text assert "DO NOT EDIT" in text def test_header_defines_reader_private_key_as_32_bytes(): text = render_trust_header(_bundle()) assert "#define ALIRO_READER_PRIVATE_KEY" in text assert text.count("0x", text.index("ALIRO_READER_PRIVATE_KEY")) >= 32 def test_header_defines_reader_public_key_as_x_y_concatenated_64_bytes(): text = render_trust_header(_bundle()) assert "#define ALIRO_READER_PUBLIC_KEY" in text def test_header_defines_issuer_pub_x_y_and_concatenated(): text = render_trust_header(_bundle()) assert "#define ALIRO_ISSUER_PUB_X" in text assert "#define ALIRO_ISSUER_PUB_Y" in text assert "#define ALIRO_ISSUER_PUB" in text def test_header_defines_issuer_kid(): text = render_trust_header(_bundle()) assert "#define ALIRO_ISSUER_KID" in text def test_header_defines_reader_group_ids(): text = render_trust_header(_bundle()) assert "#define ALIRO_READER_GROUP_ID" in text assert "#define ALIRO_READER_GROUP_SUB_ID" in text def test_reader_private_key_bytes_match_input(): bundle = _bundle() text = render_trust_header(bundle) expected = bundle.reader_private_key.private_numbers().private_value.to_bytes(32, "big") first_byte_hex = f"0x{expected[0]:02x}" last_byte_hex = f"0x{expected[-1]:02x}" priv_block_start = text.index("ALIRO_READER_PRIVATE_KEY") priv_block_end = text.index("#define", priv_block_start + 1) block = text[priv_block_start:priv_block_end] assert first_byte_hex in block assert last_byte_hex in block def test_issuer_kid_matches_compute_issuer_kid(): from aliro_harness.issuer.kid import compute_issuer_kid bundle = _bundle() text = render_trust_header(bundle) expected_kid = compute_issuer_kid(bundle.issuer_public_key) kid_start = text.index("ALIRO_ISSUER_KID") kid_end = text.index("\n", kid_start) kid_line = text[kid_start:kid_end] for b in expected_kid: assert f"0x{b:02x}" in kid_line