You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: SPECIFICATION.md
+7-4Lines changed: 7 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -120,6 +120,8 @@ Reminder: This matrix validates only the end‑entity subset requirement. The is
120
120
Notes
121
121
- A certificate with `ROOT_CA` must be self‑signed, but it may also carry `INTERMEDIATE_CA` or `CA` (or both).
122
122
- The presence of CA‑level flags does not prevent a certificate from also carrying end‑entity flags; those end‑entity bits govern what end‑entity flags it may delegate to subjects, not necessarily whether it acts as an end‑entity itself.
123
+
-**Certificate uniqueness**: Each certificate in a chain must have a unique `KeyId`. Self‑signed `ROOT_CA` certificates can only appear as the final (root) certificate in a chain, never in the middle.
124
+
-**End‑entity inheritance**: The subset rule (`Child.EndEntity ⊆ Issuer.EndEntity`) applies to all certificate pairs in a chain without exception, including self‑signed certificates.
123
125
124
126
---
125
127
@@ -128,12 +130,13 @@ Notes
128
130
1. Verify structure and lengths.
129
131
2. Ensure each certificate has at least one signature.
130
132
3. Compute `KeyId` as `SHA-256(PubKey)[0..15]` and verify it matches the embedded value.
131
-
4. Build a path from leaf to a trusted root by matching `SignKeyId` to parent `KeyId`.
132
-
5. For each child/parent pair (issuer = parent):
133
+
4. Verify that all certificates in the chain have unique `KeyId` values. No two certificates in the same chain may share the same `KeyId`.
134
+
5. Build a path from leaf to a trusted root by matching `SignKeyId` to parent `KeyId`.
135
+
6. For each child/parent pair (issuer = parent):
133
136
- For non-CA children: Issuer must have `CA`.
134
137
- For CA-level children (has any of `ROOT_CA`, `INTERMEDIATE_CA`, `CA`): issuer must have `INTERMEDIATE_CA`.
135
-
- End‑entity inheritance: For each end‑entity bit (0x0100 through 0x8000), if child has it, issuer must also have it (`Child.EndEntity ⊆ Issuer.EndEntity`).
136
-
6. A certificate with `ROOT_CA` must be self‑signed and present in the trust store.
138
+
- End‑entity inheritance: For each end‑entity bit (0x0100 through 0x8000), if child has it, issuer must also have it (`Child.EndEntity ⊆ Issuer.EndEntity`). This validation applies to **all** certificate pairs without exception.
139
+
7. A certificate with `ROOT_CA` must be self‑signed and present in the trust store.
0 commit comments