@@ -2,10 +2,11 @@ REBOL [
2
2
title: "REBOL3 codec for DER/BER structures"
3
3
name: 'codec-der
4
4
author: "Oldes"
5
- version: 0.1 .0
6
- date: 17-Oct-2018
5
+ version: 0.2 .0
6
+ date: 17-Feb-2022
7
7
history: [
8
8
0.1.0 17-Oct-2018 "Oldes" {Initial version with DECODE and IDENTIFY functions.}
9
+ 0.2.0 17-Feb-2022 "Oldes" {Including `form-id`}
9
10
]
10
11
notes: {
11
12
Useful command for cross-testing:
@@ -198,7 +199,33 @@ register-codec [
198
199
BMP_STRING ;= 1e Basic Multilingual Plane/Unicode string
199
200
]
200
201
202
+ form-OID: either find lib 'form-oid [
203
+ ; native version
204
+ : lib/form-oid
205
+ ][
206
+ function[
207
+ "Return the x.y.z.... style numeric string for the given OID"
208
+ oid [binary! ]
209
+ ][
210
+ len: length? oid
211
+ out: make string! 3 * len
212
+ append out ajoin [to integer! oid/1 / 40 #"." oid/1 % 40 ]
213
+ ++ oid
214
+ value: 0
215
+ while [not tail? oid][
216
+ value: (value << 7 )
217
+ value: value + (oid/1 & 127 )
218
+ if oid/1 & 128 = 0 [
219
+ append append out #"." value
220
+ value: 0
221
+ ]
222
+ ++ oid
223
+ ]
224
+ out
225
+ ]
226
+ ]
201
227
decode-OID : function [
228
+ "Convert given OID to its name if recognized or a numeric string"
202
229
oid [binary! ]
203
230
/full "Returns name with group name as a string"
204
231
/local main name warn
@@ -237,10 +264,16 @@ register-codec [
237
264
;| #"^(03)" (name: 'prime192v3)
238
265
| #"^(01)" (name: 'secp192r1)
239
266
]
267
+ | #{ 0403 } [
268
+ #"^(01)" (name: 'ecdsa-with-SHA224)
269
+ | #"^(02)" (name: 'ecdsa-with-SHA256)
270
+ | #"^(03)" (name: 'ecdsa-with-SHA384)
271
+ | #"^(04)" (name: 'ecdsa-with-SHA512)
272
+ ]
240
273
]
241
274
|
242
275
#{ 2A864886F70D01 } [
243
- #{ 01 } (main: "PKCS #1" ) [
276
+ #"^(01)" (main: "PKCS #1" ) [
244
277
#"^(01)" (name: 'rsaEncryption)
245
278
| #"^(02)" (name: 'md2WithRSAEncryption)
246
279
| #"^(03)" (name: 'md4withRSAEncryption)
@@ -252,13 +285,13 @@ register-codec [
252
285
253
286
] end
254
287
|
255
- #{ 07 } (main: "PKCS #7" ) [
288
+ #"^(07)" (main: "PKCS #7" ) [
256
289
#"^(01)" (name: 'data)
257
290
| #"^(02)" (name: 'signedData)
258
291
| #"^(06)" (name: 'encryptedData)
259
292
] end
260
293
|
261
- #{ 09 } (main: "PKCS #9" ) [
294
+ #"^(09)" (main: "PKCS #9" ) [
262
295
;http://oid-info.com/get/1.2.840.113549.1.9
263
296
#"^(01)" (name: 'emailAddress warn: "Deprecated, use an altName extension instead" )
264
297
| #"^(03)" (name: 'contentType)
@@ -270,7 +303,7 @@ register-codec [
270
303
| #"^(34)" (name: 'CMSAlgorithmProtect)
271
304
] end
272
305
|
273
- #{ 0C } (main: "PKCS #12" ) [
306
+ #"^(0C)" (main: "PKCS #12" ) [
274
307
#{ 0106 } (name: 'pbeWithSHAAnd40BitRC2-CBC)
275
308
| #{ 0103 } (name: 'pbeWithSHAAnd3-KeyTripleDES-CBC)
276
309
| #{ 0A0102 } (name: 'pkcs-12 -pkcs-8ShroudedKeyBag)
@@ -312,8 +345,40 @@ register-codec [
312
345
|
313
346
#{ 2B060105050703 } (main: "PKIX key purpose" ) [
314
347
#"^(01)" (name: 'serverAuth)
315
- #"^(02)" (name: 'clientAuth)
348
+ | #"^(02)" (name: 'clientAuth)
316
349
| #"^(03)" (name: 'codeSigning)
350
+ | #"^(04)" (name: 'emailProtection)
351
+ ;| #"^(05)" (name: 'ipsecEndSystem)
352
+ ;| #"^(06)" (name: 'ipsecTunnel)
353
+ ;| #"^(07)" (name: 'ipsecUser)
354
+ | #"^(08)" (name: 'timeStamping)
355
+ ;| #"^(09)" (name: 'OCSPSigning)
356
+ ;| #"^(0A)" (name: 'dvcs)
357
+ ;| #"^(0B)" (name: 'sbgpCertAAServerAuth)
358
+ ;| #"^(0C)" (name: 'scvp)
359
+ ;| #"^(0D)" (name: 'eapOverPPP)
360
+ ;| #"^(0E)" (name: 'eapOverLAN)
361
+ ;| #"^(0F)" (name: 'scvpServer)
362
+ ;| #"^(10)" (name: 'scvpClient)
363
+ ;| #"^(11)" (name: 'ipsecIKE)
364
+ ;| #"^(12)" (name: 'capwapAC)
365
+ ;| #"^(13)" (name: 'capwapWTP)
366
+ ;| #"^(14)" (name: 'sipDomain)
367
+ ;| #"^(15)" (name: 'secureShellClient)
368
+ ;| #"^(16)" (name: 'secureShellServer)
369
+ ;| #"^(17)" (name: 'sendRouter)
370
+ ;| #"^(18)" (name: 'sendProxiedRouter)
371
+ ;| #"^(19)" (name: 'sendOwner)
372
+ ;| #"^(1A)" (name: 'sendProxiedOwner)
373
+ ;| #"^(1B)" (name: 'cmcCA)
374
+ ;| #"^(1C)" (name: 'cmcRA)
375
+ ;| #"^(1D)" (name: 'cmcArchive)
376
+ ;| #"^(1E)" (name: 'bgpsec-router)
377
+ ;| #"^(1F)" (name: 'BrandIndicatorforMessageIdentification)
378
+ ;| #"^(20)" (name: 'cmKGA)
379
+ ;| #"^(21)" (name: 'rpcTLSClient)
380
+ ;| #"^(22)" (name: 'rpcTLSServer)
381
+ ;| #"^(23)" (name: 'bundleSecurity)
317
382
] end
318
383
|
319
384
#{ 2B0601040182370201 } (main: "Microsoft" ) [
@@ -328,7 +393,7 @@ register-codec [
328
393
either full [
329
394
rejoin [ any [name "<?name>" ] " (" any [main "<?main>" ] ")" ]
330
395
][ name ]
331
- ][ oid ]
396
+ ][ form-oid oid ]
332
397
]
333
398
334
399
verbose: 0
0 commit comments