aboutsummaryrefslogtreecommitdiff
path: root/openssl/trunk/crypto/x509v3/v3_asid.c
blob: a6a6619c9a245cf68d1f843f8abc11460b3015ea (plain) (blame)
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
/* 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 */

X509V3_EXT_METHOD v3_asid = {
  NID_rfc3779_asidentifiers,
  0,
  ASN1_ITEM_ref(ASIDENTIFIERS),
  0, 0, 0, 0, 0, 0, 0, 0, 0,
  (X509V3_EXT_I2R) i2r_asid,
  (X509V3_EXT_R2I) r2i_asid,
  NULL
};

ASN1_ITEM_TEMPLATE(ASIDENTIFIERS) =
  ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE, 0,
			ASIDENTIFIERS, ASIDENTIFERS_SEQUENCE)
ASN1_ITEM_TEMPLATE_END(ASIDENTIFIERS)

IMPLEMENT_ASN1_FUNCTIONS(ASIDENTIFIERS)

ASN1_SEQUENCE(ASIDENTIFERS_SEQUENCE) = {
  ASN1_EXP_OPT(ASIDENTIFERS_SEQUENCE, asnum, ASIDENTIFERCHOICE, 0),
  ASN1_EXP_OPT(ASIDENTIFERS_SEQUENCE, rdi, ASIDENTIFERCHOICE, 1)
} ASN1_SEQUENCE_END(ASIDENTIFERS_SEQUENCE)

IMPLEMENT_ASN1_FUNCTIONS(ASIDENTIFERS_SEQUENCE)

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)