- Generated attributes are now explicitly tagged as UTF8String via CertificateSigningRequestBuilder.add_attribute(_tag=_ASN1Type.UTF8String), so values include proper DER TLV instead of raw bytes. - The attribute decoder first attempts DER string parsing (UTF8String, PrintableString, IA5String, BMPString, long-form lengths), falling back to legacy raw UTF-8 decode for previously generated nonconformant CSRs. - Regression tests verify DER encoding, Unicode round-tripping, supported string types, long values (>127 bytes), and legacy raw UTF-8 attributes. - Mypy passes cleanly (no issues in 42 source files).
kca-core
Pure, I/O-free PKI domain logic for KCA. It knows how to generate and parse keys, build distinguished names, encode X.509 extensions, issue certificates, create CSRs and CRLs, apply templates, and convert every supported import and export format. It has no kaya, database or filesystem dependencies and is unit-tested in isolation.