1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
/* v3_asid.c */
/* $Id$ */
/*
* Initial attempt to implement RFC 3779 section 3.
* I'd be very surprised if this even compiled yet,
* as I'm still figuring out OpenSSL's ASN.1 template goop.
*/
#include <stdio.h>
#include "cryptlib.h"
#include <openssl/conf.h>
#include <openssl/asn1.h>
#include <openssl/asn1t.h>
#include <openssl/x509v3.h>
/* RFC 3779 AS ID */
static int i2r_asid(X509V3_EXT_METHOD *method, ASIDENTIFERS *asid, BIO *out, int indent);
static ASIDENTIFERS *r2i_asid(X509V3_EXT_METHOD *method, X509V3_CTX *ctx, char *value);
X509V3_EXT_METHOD v3_asid = {
NID_rfc3779_asidentifer_extension,
0,
ASN1_ITEM_ref(ASIDENTIFER_EXTENSION),
0, 0, 0, 0, 0, 0, 0, 0, 0,
(X509V3_EXT_I2R) i2r_asid,
(X509V3_EXT_R2I) r2i_asid,
NULL
};
ASN1_ITEM_TEMPLATE(ASIDENTIFER_EXTENSION) =
ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE, 0,
ASIDENTIFER_EXTENSION, ASIDENTIFERS)
ASN1_ITEM_TEMPLATE_END(ASIDENTIFER_EXTENSION)
IMPLEMENT_ASN1_FUNCTIONS(ASIDENTIFER_EXTENSION)
ASN1_SEQUENCE(ASIDENTIFERS) = {
ASN1_EXP_OPT(ASIDENTIFERS, asnum, ASIDENTIFERCHOICE, 0),
ASN1_EXP_OPT(ASIDENTIFERS, rdi, ASIDENTIFERCHOICE, 1)
} ASN1_SEQUENCE_END(ASIDENTIFERS)
IMPLEMENT_ASN1_FUNCTIONS(ASIDENTIFERS)
ASN1_CHOICE(ASIDENTIFERCHOICE) = {
ASN1_IMP(ASIDENTIFERCHOICE, inherit, ASN1_NULL, 0),
ASN1_IMP_SEQUENCE_OF(ASIDENTIFERCHOICE, asIdsOrRanges, ASIDORRANGE, 1)
} ASN1_CHOICE_END(ASIDENTIFERCHOICE)
IMPLEMENT_ASN1_FUNCTIONS(ASIDENTIFERCHOICE)
ASN1_CHOICE(ASIDORRANGE) = {
ASN1_IMP(ASIDORRANGE, id, ASN1_INTEGER, 0),
ASN1_IMP(ASIDORRANGE, range, ASRANGE, 1)
} ASN1_CHOICE_END(ASIDORRANGE)
IMPLEMENT_ASN1_FUNCTIONS(ASIDORRANGE)
ASN1_SEQUENCE(ASRANGE) = {
ASN1_SIMPLE(ASRANGE, min, ASN1_INTEGER),
ASN1_SIMPLE(ASRANGE, max, ASN1_INTEGER)
} ASN1_SEQUENCE_END(ASRANGE)
IMPLEMENT_ASN1_FUNCTIONS(ASRANGE)
|