from __future__ import annotations
from datetime import datetime, timezone
from pathlib import Path
from cryptography.hazmat.primitives.asymmetric import ec
from cryptography.x509 import ObjectIdentifier
from encypher_pki.cawg_identity import (
generate_cawg_identity_issuing_certificate,
generate_cawg_identity_organization_certificate,
generate_cawg_identity_root_certificate,
)
ISSUED_AT = datetime(2027, 1, 1, tzinfo=timezone.utc)
MAILBOX_VALIDATED_POLICY_OID = ObjectIdentifier("2.23.140.1.5.1.1")
HERE = Path(__file__).resolve().parent
def write(name: str, text: str) -> None:
(HERE / name).write_text(text, encoding="ascii")
def pem(certificate) -> str:
return certificate.public_bytes(serialization.Encoding.PEM).decode("ascii")
def main() -> None:
root_key = ec.generate_private_key(ec.SECP384R1())
root = generate_cawg_identity_root_certificate(
root_key.public_key(),
private_key=root_key,
common_name="Encypher Organizational Identity TEST Root CA",
now=ISSUED_AT,
)
issuing_key = ec.generate_private_key(ec.SECP384R1())
issuing = generate_cawg_identity_issuing_certificate(
issuing_key.public_key(),
root,
root_private_key=root_key,
common_name="Encypher CAWG Identity TEST Issuing CA",
now=ISSUED_AT,
)
leaf_key = ec.generate_private_key(ec.SECP384R1())
leaf = generate_cawg_identity_organization_certificate(
leaf_key.public_key(),
issuing,
issuing_private_key=issuing_key,
organization_name="Encypher Fixture Publisher",
country_code="US",
email_address="identity@fixture.encypher.test",
common_name="Encypher Fixture Publisher TEST",
now=ISSUED_AT,
)
mailbox_key = ec.generate_private_key(ec.SECP384R1())
mailbox_leaf = generate_cawg_identity_organization_certificate(
mailbox_key.public_key(),
issuing,
issuing_private_key=issuing_key,
organization_name="Encypher Fixture Publisher",
country_code="US",
email_address="mailbox@fixture.encypher.test",
common_name="Encypher Fixture Mailbox Policy TEST",
policy_oid=MAILBOX_VALIDATED_POLICY_OID,
now=ISSUED_AT,
)
write("root.pem", pem(root))
write("issuing-ca.pem", pem(issuing))
write("leaf.pem", pem(leaf))
write("leaf-mailbox-policy.pem", pem(mailbox_leaf))
if __name__ == "__main__":
main()