diff options
-rw-r--r-- | openssl/trunk/crypto/x509v3/v3_asid.c | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/openssl/trunk/crypto/x509v3/v3_asid.c b/openssl/trunk/crypto/x509v3/v3_asid.c new file mode 100644 index 00000000..a6a6619c --- /dev/null +++ b/openssl/trunk/crypto/x509v3/v3_asid.c @@ -0,0 +1,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) |