summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/x509/x509v3.h
diff options
context:
space:
mode:
authorjob <>2021-09-02 12:41:44 +0000
committerjob <>2021-09-02 12:41:44 +0000
commit3ed206d7bde4191b37ba53a167ddc2090f5e4860 (patch)
tree68881b07659cc9e2b17902a5156f430f2154ecf8 /src/lib/libcrypto/x509/x509v3.h
parente62cf7c0e3daad29f81cae909a92d8769558bd57 (diff)
downloadopenbsd-3ed206d7bde4191b37ba53a167ddc2090f5e4860.tar.gz
openbsd-3ed206d7bde4191b37ba53a167ddc2090f5e4860.tar.bz2
openbsd-3ed206d7bde4191b37ba53a167ddc2090f5e4860.zip
Lay groundwork to support X.509 v3 extensions for IP Addresses and AS Identifiers
These extensions are defined in RFC 3779 and used in the RPKI (RFC 6482, RFC 8360). Imported from OpenSSL 1.1.1j (aaf2fcb575cdf6491b98ab4829abf78a3dec8402b8b81efc8f23c00d443981bf) This changeset is a no-op, as there are 10+ issues and at least 2 security issues. Work will continue in-tree. OK tb@, discussed with beck@
Diffstat (limited to 'src/lib/libcrypto/x509/x509v3.h')
-rw-r--r--src/lib/libcrypto/x509/x509v3.h145
1 files changed, 144 insertions, 1 deletions
diff --git a/src/lib/libcrypto/x509/x509v3.h b/src/lib/libcrypto/x509/x509v3.h
index d2754fa624..3cccf86242 100644
--- a/src/lib/libcrypto/x509/x509v3.h
+++ b/src/lib/libcrypto/x509/x509v3.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: x509v3.h,v 1.2 2020/09/13 15:06:17 beck Exp $ */ 1/* $OpenBSD: x509v3.h,v 1.3 2021/09/02 12:41:44 job Exp $ */
2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL 2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
3 * project 1999. 3 * project 1999.
4 */ 4 */
@@ -842,6 +842,149 @@ int X509V3_NAME_from_section(X509_NAME *nm, STACK_OF(CONF_VALUE)*dn_sk,
842void X509_POLICY_NODE_print(BIO *out, X509_POLICY_NODE *node, int indent); 842void X509_POLICY_NODE_print(BIO *out, X509_POLICY_NODE *node, int indent);
843DECLARE_STACK_OF(X509_POLICY_NODE) 843DECLARE_STACK_OF(X509_POLICY_NODE)
844 844
845#if defined(LIBRESSL_INTERNAL)
846#ifndef OPENSSL_NO_RFC3779
847typedef struct ASRange_st {
848 ASN1_INTEGER *min, *max;
849} ASRange;
850
851# define ASIdOrRange_id 0
852# define ASIdOrRange_range 1
853
854typedef struct ASIdOrRange_st {
855 int type;
856 union {
857 ASN1_INTEGER *id;
858 ASRange *range;
859 } u;
860} ASIdOrRange;
861
862typedef STACK_OF(ASIdOrRange) ASIdOrRanges;
863DEFINE_STACK_OF(ASIdOrRange)
864
865# define ASIdentifierChoice_inherit 0
866# define ASIdentifierChoice_asIdsOrRanges 1
867
868typedef struct ASIdentifierChoice_st {
869 int type;
870 union {
871 ASN1_NULL *inherit;
872 ASIdOrRanges *asIdsOrRanges;
873 } u;
874} ASIdentifierChoice;
875
876typedef struct ASIdentifiers_st {
877 ASIdentifierChoice *asnum, *rdi;
878} ASIdentifiers;
879
880DECLARE_ASN1_FUNCTIONS(ASRange)
881DECLARE_ASN1_FUNCTIONS(ASIdOrRange)
882DECLARE_ASN1_FUNCTIONS(ASIdentifierChoice)
883DECLARE_ASN1_FUNCTIONS(ASIdentifiers)
884typedef struct IPAddressRange_st {
885 ASN1_BIT_STRING *min, *max;
886} IPAddressRange;
887
888# define IPAddressOrRange_addressPrefix 0
889# define IPAddressOrRange_addressRange 1
890
891typedef struct IPAddressOrRange_st {
892 int type;
893 union {
894 ASN1_BIT_STRING *addressPrefix;
895 IPAddressRange *addressRange;
896 } u;
897} IPAddressOrRange;
898
899typedef STACK_OF(IPAddressOrRange) IPAddressOrRanges;
900DEFINE_STACK_OF(IPAddressOrRange)
901
902# define IPAddressChoice_inherit 0
903# define IPAddressChoice_addressesOrRanges 1
904
905typedef struct IPAddressChoice_st {
906 int type;
907 union {
908 ASN1_NULL *inherit;
909 IPAddressOrRanges *addressesOrRanges;
910 } u;
911} IPAddressChoice;
912
913typedef struct IPAddressFamily_st {
914 ASN1_OCTET_STRING *addressFamily;
915 IPAddressChoice *ipAddressChoice;
916} IPAddressFamily;
917
918typedef STACK_OF(IPAddressFamily) IPAddrBlocks;
919DEFINE_STACK_OF(IPAddressFamily)
920DECLARE_ASN1_FUNCTIONS(IPAddressRange)
921DECLARE_ASN1_FUNCTIONS(IPAddressOrRange)
922DECLARE_ASN1_FUNCTIONS(IPAddressChoice)
923DECLARE_ASN1_FUNCTIONS(IPAddressFamily)
924
925/*
926 * API tag for elements of the ASIdentifer SEQUENCE.
927 */
928# define V3_ASID_ASNUM 0
929# define V3_ASID_RDI 1
930
931/*
932 * AFI values, assigned by IANA. It'd be nice to make the AFI
933 * handling code totally generic, but there are too many little things
934 * that would need to be defined for other address families for it to
935 * be worth the trouble.
936 */
937# define IANA_AFI_IPV4 1
938# define IANA_AFI_IPV6 2
939/*
940 * Utilities to construct and extract values from RFC3779 extensions,
941 * since some of the encodings (particularly for IP address prefixes
942 * and ranges) are a bit tedious to work with directly.
943 */
944int X509v3_asid_add_inherit(ASIdentifiers *asid, int which);
945int X509v3_asid_add_id_or_range(ASIdentifiers *asid, int which,
946 ASN1_INTEGER *min, ASN1_INTEGER *max);
947int X509v3_addr_add_inherit(IPAddrBlocks *addr,
948 const unsigned afi, const unsigned *safi);
949int X509v3_addr_add_prefix(IPAddrBlocks *addr,
950 const unsigned afi, const unsigned *safi,
951 unsigned char *a, const int prefixlen);
952int X509v3_addr_add_range(IPAddrBlocks *addr,
953 const unsigned afi, const unsigned *safi,
954 unsigned char *min, unsigned char *max);
955unsigned X509v3_addr_get_afi(const IPAddressFamily *f);
956int X509v3_addr_get_range(IPAddressOrRange *aor, const unsigned afi,
957 unsigned char *min, unsigned char *max,
958 const int length);
959/*
960 * Canonical forms.
961 */
962int X509v3_asid_is_canonical(ASIdentifiers *asid);
963int X509v3_addr_is_canonical(IPAddrBlocks *addr);
964int X509v3_asid_canonize(ASIdentifiers *asid);
965int X509v3_addr_canonize(IPAddrBlocks *addr);
966
967/*
968 * Tests for inheritance and containment.
969 */
970int X509v3_asid_inherits(ASIdentifiers *asid);
971int X509v3_addr_inherits(IPAddrBlocks *addr);
972int X509v3_asid_subset(ASIdentifiers *a, ASIdentifiers *b);
973int X509v3_addr_subset(IPAddrBlocks *a, IPAddrBlocks *b);
974
975/*
976 * Check whether RFC 3779 extensions nest properly in chains.
977 */
978int X509v3_asid_validate_path(X509_STORE_CTX *);
979int X509v3_addr_validate_path(X509_STORE_CTX *);
980int X509v3_asid_validate_resource_set(STACK_OF(X509) *chain,
981 ASIdentifiers *ext,
982 int allow_inheritance);
983int X509v3_addr_validate_resource_set(STACK_OF(X509) *chain,
984 IPAddrBlocks *ext, int allow_inheritance);
985
986#endif /* OPENSSL_NO_RFC3779 */
987#endif
845 988
846/* BEGIN ERROR CODES */ 989/* BEGIN ERROR CODES */
847/* The following lines are auto generated by the script mkerr.pl. Any changes 990/* The following lines are auto generated by the script mkerr.pl. Any changes