Skip to content

Commit 15eaec4

Browse files
committed
FEAT: allow to decode *.crt files stored in PKIX format
1 parent 88086a5 commit 15eaec4

File tree

3 files changed

+37
-1
lines changed

3 files changed

+37
-1
lines changed

src/mezz/codec-crt.reb

+8-1
Original file line numberDiff line numberDiff line change
@@ -98,8 +98,15 @@ register-codec [
9898

9999
func [
100100
data [binary! block!]
101-
/local version serialNumber issuer subject validity
101+
/local pkix version serialNumber issuer subject validity
102102
][
103+
try [all [
104+
; as there seems to be no standard, the *.crt file
105+
; may be actually in pkix format, so try it first...
106+
pkix: codecs/pkix/decode data
107+
pkix/label = "CERTIFICATE"
108+
data: pkix/binary
109+
]]
103110
if binary? data [ data: der-codec/decode data ]
104111
if all [
105112
2 = length? data

src/tests/units/codecs-test.r3

+6
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,12 @@ if find codecs 'crt [
180180
--assert "Google Internet Authority G3" = try [cert/issuer/commonName]
181181
--assert block? try [key: cert/public-key/rsaEncryption]
182182
--assert #{010001} = try [key/2]
183+
184+
--test-- "Load Docker's CRT file"
185+
--assert object? cert: load %units/files/apiserver.crt
186+
--assert "kubernetes" = try [cert/issuer/commonName]
187+
--assert block? try [key: cert/public-key/rsaEncryption]
188+
--assert #{010001} = try [key/2]
183189
===end-group===
184190
codecs/crt/verbose: 0
185191
]

src/tests/units/files/apiserver.crt

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIDzzCCAregAwIBAgIIRrdJEntqhjYwDQYJKoZIhvcNAQELBQAwFTETMBEGA1UE
3+
AxMKa3ViZXJuZXRlczAeFw0yMTAxMjEwODU5MTRaFw0yMjAxMjEwODU5MTRaMBkx
4+
FzAVBgNVBAMTDmt1YmUtYXBpc2VydmVyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
5+
MIIBCgKCAQEAsl/YxFG8JcMAamzTvzucpnejXJw/LYLsAj3hCcoJ8Jr++F/d6/za
6+
4fBL4cbaNEx4fbaoqNWnZ0211/tsWo2gmL8chtAVGRtkol7gPK9uL+EdluAkFqbK
7+
5TyYIDKNtWpOj2DzULWFRVU4WDcmPTm1J49PEJlriWjYJy2nQeGCVdVt6qz0Hbos
8+
ieCfzsZ5F1IzSnf6VDVp4nhzIVQ2u36CPC1QgunxI45izWEATSeEdDBkT32dA7MP
9+
BGiJ2lxARg1DS+1CjhoSJcu5Ahp97j9zg85rhLEJNP+7vJvJIR6cGsg/jP9SR3Q5
10+
hTpqPU0uA9CLoyZk8oWK58+NNmrk8x/ClwIDAQABo4IBHTCCARkwDgYDVR0PAQH/
11+
BAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMBMB8GA1UdIwQYMBaAFBOHp2Zb0I+p
12+
KFF8AXLTEc7Wb5x1MIHQBgNVHREEgcgwgcWCEmRvY2tlci1mb3ItZGVza3RvcIIK
13+
a3ViZXJuZXRlc4ISa3ViZXJuZXRlcy5kZWZhdWx0ghZrdWJlcm5ldGVzLmRlZmF1
14+
bHQuc3ZjgiRrdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWyCGmt1
15+
YmVybmV0ZXMuZG9ja2VyLmludGVybmFsghJ2bS5kb2NrZXIuaW50ZXJuYWyCCWxv
16+
Y2FsaG9zdIcECmAAAYcEAAAAAIcEwKhBA4cEfwAAATANBgkqhkiG9w0BAQsFAAOC
17+
AQEAmnfvEfya9O6zJrabXigYilh7bbzEoUWaziqvHYIHJwWT5OtxfiNfDZoRDS18
18+
8UZhe4ENiejF+K6eCkdR9FocnGv4p7ntJg99EeZ+mqPHvSsT8Ot5woo66dAzkdXP
19+
rJntdqUjTKs3xILeMhetScGaBHjkfH0dBUIVppN+a63v03+QIGEsscrQn4tvFjsN
20+
4px9bu7Its6H/NtRnJS0Y5QzabNliSUiwwUpYy/b55pMcPcWOOsT34h8L+CT4gBM
21+
M0PaAOaKpXNbfMXv0oEdsapSwvJKDBpz4NRIRDUQIJ18KD8eOR+q8z/itFzV5yEW
22+
UFiJwX8MYwKFlFj+B5IW9FPYLQ==
23+
-----END CERTIFICATE-----

0 commit comments

Comments
 (0)