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