import synta
import synta.pkixalgs as pa
def section(title):
print(f"\n{'─' * 60}\n{title}\n{'─' * 60}")
def _enc(fn):
enc = synta.Encoder(synta.Encoding.DER)
fn(enc)
return enc.finish()
def _seq(*parts):
enc = synta.Encoder(synta.Encoding.DER)
enc.encode_sequence(b"".join(parts))
return enc.finish()
def _int_bytes(b: bytes) -> bytes:
if b[0] & 0x80:
b = b"\x00" + b
return bytes([0x02, len(b)]) + b
def _oid(dotted: str) -> bytes:
return _enc(lambda e: e.encode_oid(synta.ObjectIdentifier(dotted)))
_P = b"\x73\xd0" + b"\xff" * 13 _Q = b"\x25\xf1" * 9 + b"\x25" _G = b"\x01\xaa" * 7 + b"\x01"
DSS_PARMS_DER = _seq(_int_bytes(_P), _int_bytes(_Q), _int_bytes(_G))
_R_DSA = b"\x41" + b"\xbb" * 30
_S_DSA = b"\x42" + b"\xcc" * 30
DSS_SIG_DER = _seq(_int_bytes(_R_DSA), _int_bytes(_S_DSA))
_R_ECDSA = b"\x41" + b"\xbb" * 31
_S_ECDSA = b"\x42" + b"\xcc" * 31
ECDSA_SIG_DER = _seq(_int_bytes(_R_ECDSA), _int_bytes(_S_ECDSA))
PRIME256V1_DOTTED = "1.2.840.10045.3.1.7"
EC_PARAMS_NAMED_CURVE_DER = _oid(PRIME256V1_DOTTED)
def demo_dss_parms():
section("DssParms — DSA domain parameters (RFC 3279 §2.3.2)")
parms = pa.DssParms.from_der(DSS_PARMS_DER)
assert parms.p == _P, f"p mismatch: {parms.p.hex()}"
assert parms.q == _Q, f"q mismatch: {parms.q.hex()}"
assert parms.g == _G, f"g mismatch: {parms.g.hex()}"
print(f" p ({len(parms.p)} bytes): {parms.p.hex()[:20]}…")
print(f" q ({len(parms.q)} bytes): {parms.q.hex()[:20]}…")
print(f" g ({len(parms.g)} bytes): {parms.g.hex()[:20]}…")
print(f" repr: {repr(parms)}")
der2 = parms.to_der()
parms2 = pa.DssParms.from_der(der2)
assert parms2.p == parms.p
assert parms2.q == parms.q
assert parms2.g == parms.g
print(" round-trip: ✓")
def demo_dss_sig_value():
section("DssSigValue — DSA signature (RFC 3279 §2.2.2)")
sig = pa.DssSigValue.from_der(DSS_SIG_DER)
assert sig.r == _R_DSA, f"r mismatch: {sig.r.hex()}"
assert sig.s == _S_DSA, f"s mismatch: {sig.s.hex()}"
print(f" r ({len(sig.r)} bytes): {sig.r.hex()[:16]}…")
print(f" s ({len(sig.s)} bytes): {sig.s.hex()[:16]}…")
print(f" repr: {repr(sig)}")
der2 = sig.to_der()
sig2 = pa.DssSigValue.from_der(der2)
assert sig2.r == sig.r
assert sig2.s == sig.s
print(" round-trip: ✓")
def demo_ecdsa_sig_value():
section("EcdsaSigValue — ECDSA signature (RFC 3279 §2.2.3, X9.62)")
sig = pa.EcdsaSigValue.from_der(ECDSA_SIG_DER)
assert sig.r == _R_ECDSA, f"r mismatch: {sig.r.hex()}"
assert sig.s == _S_ECDSA, f"s mismatch: {sig.s.hex()}"
print(f" r ({len(sig.r)} bytes): {sig.r.hex()[:16]}…")
print(f" s ({len(sig.s)} bytes): {sig.s.hex()[:16]}…")
print(f" repr: {repr(sig)}")
der2 = sig.to_der()
sig2 = pa.EcdsaSigValue.from_der(der2)
assert sig2.r == sig.r
assert sig2.s == sig.s
print(" round-trip: ✓")
def demo_ec_parameters_named_curve():
section("ECParameters namedCurve — P-256 (RFC 3279 §2.3.5, X9.62)")
params = pa.ECParameters.from_der(EC_PARAMS_NAMED_CURVE_DER)
assert params.arm == "namedCurve", f"unexpected arm: {params.arm!r}"
oid = params.named_curve_oid
assert oid is not None
assert str(oid) == PRIME256V1_DOTTED, f"OID mismatch: {oid}"
print(f" arm: {params.arm!r}")
print(f" named_curve_oid: {oid} (P-256 / prime256v1)")
print(f" repr: {repr(params)}")
null_der = b"\x05\x00"
implicit_params = pa.ECParameters.from_der(null_der)
assert implicit_params.arm == "implicitlyCA"
assert implicit_params.named_curve_oid is None
print(f" implicitlyCA arm: named_curve_oid = {implicit_params.named_curve_oid}")
der2 = params.to_der()
params2 = pa.ECParameters.from_der(der2)
assert params2.arm == "namedCurve"
assert str(params2.named_curve_oid) == PRIME256V1_DOTTED
print(" round-trip: ✓")
def demo_oid_constants():
section("OID constants — synta.pkixalgs")
constants = [
("ID_DSA", pa.ID_DSA, "1.2.840.10040.4.1"),
("ID_DSA_WITH_SHA1", pa.ID_DSA_WITH_SHA1, "1.2.840.10040.4.3"),
("DHPUBLICNUMBER", pa.DHPUBLICNUMBER, "1.2.840.10046.2.1"),
("ID_EC_PUBLIC_KEY", pa.ID_EC_PUBLIC_KEY, "1.2.840.10045.2.1"),
("ECDSA_WITH_SHA1", pa.ECDSA_WITH_SHA1, "1.2.840.10045.4.1"),
("ECDSA_WITH_SHA256", pa.ECDSA_WITH_SHA256, "1.2.840.10045.4.3.2"),
("ECDSA_WITH_SHA384", pa.ECDSA_WITH_SHA384, "1.2.840.10045.4.3.3"),
("ECDSA_WITH_SHA512", pa.ECDSA_WITH_SHA512, "1.2.840.10045.4.3.4"),
("PRIME192V1", pa.PRIME192V1, "1.2.840.10045.3.1.1"),
("PRIME256V1", pa.PRIME256V1, "1.2.840.10045.3.1.7"),
("SECP224R1", pa.SECP224R1, "1.3.132.0.33"),
("SECP384R1", pa.SECP384R1, "1.3.132.0.34"),
("SECP521R1", pa.SECP521R1, "1.3.132.0.35"),
]
for name, oid, expected in constants:
dotted = str(oid)
assert dotted == expected, f"{name}: expected {expected!r}, got {dotted!r}"
print(f" pa.{name:<22} = {dotted}")
enc = synta.Encoder(synta.Encoding.DER)
enc.encode_oid(pa.PRIME256V1)
prime256_der = enc.finish()
assert prime256_der == _oid(PRIME256V1_DOTTED)
print()
print(f" PRIME256V1 DER: {prime256_der.hex()}")
assert pa.ID_EC_PUBLIC_KEY == synta.ObjectIdentifier("1.2.840.10045.2.1")
print(" OID equality check: ✓")
def main():
print("=" * 60)
print("Example: RFC 3279 algorithm parameter types (synta.pkixalgs)")
print("=" * 60)
demo_dss_parms()
demo_dss_sig_value()
demo_ecdsa_sig_value()
demo_ec_parameters_named_curve()
demo_oid_constants()
print("\nAll pkixalgs examples completed.")
if __name__ == "__main__":
main()