iPXE
asn1.h File Reference

ASN.1 encoding. More...

#include <stddef.h>
#include <stdint.h>
#include <stdarg.h>
#include <assert.h>
#include <time.h>
#include <ipxe/tables.h>

Go to the source code of this file.

Data Structures

struct  asn1_cursor
 An ASN.1 object cursor. More...
struct  asn1_builder
 An ASN.1 object builder. More...
struct  asn1_builder_header
 An ASN.1 header. More...
struct  asn1_algorithm
 An ASN.1 OID-identified algorithm. More...

Macros

#define ASN1_MAX_LEN_LEN   ( 1 + sizeof ( size_t ) )
 Maximum (viable) length of ASN.1 length.
#define ASN1_END   0x00
 ASN.1 end.
#define ASN1_BOOLEAN   0x01
 ASN.1 boolean.
#define ASN1_INTEGER   0x02
 ASN.1 integer.
#define ASN1_BIT_STRING   0x03
 ASN.1 bit string.
#define ASN1_OCTET_STRING   0x04
 ASN.1 octet string.
#define ASN1_NULL   0x05
 ASN.1 null.
#define ASN1_OID   0x06
 ASN.1 object identifier.
#define ASN1_ENUMERATED   0x0a
 ASN.1 enumeration.
#define ASN1_UTF8_STRING   0x0c
 ASN.1 UTF-8 string.
#define ASN1_UTC_TIME   0x17
 ASN.1 UTC time.
#define ASN1_GENERALIZED_TIME   0x18
 ASN.1 generalized time.
#define ASN1_SEQUENCE   0x30
 ASN.1 sequence.
#define ASN1_SET   0x31
 ASN.1 set.
#define ASN1_IMPLICIT_TAG(number)
 ASN.1 implicit tag.
#define ASN1_EXPLICIT_TAG(number)
 ASN.1 explicit tag.
#define ASN1_ANY   -1U
 ASN.1 "any tag" magic value.
#define ASN1_SHORT(tag, ...)
 Construct a short ASN.1 value.
#define ASN1_OID_INITIAL(first, second)
 Initial OID byte.
#define ASN1_OID_SINGLE(value)
 Single-byte OID value.
#define ASN1_OID_DOUBLE(value)
 Double-byte OID value.
#define ASN1_OID_TRIPLE(value)
 Double-byte OID value.
#define ASN1_OID_ECPUBLICKEY
 ASN.1 OID for ecPublicKey (1.2.840.10045.2.1).
#define ASN1_OID_PRIME256V1
 ASN.1 OID for prime256v1 (1.2.840.10045.3.1.7).
#define ASN1_OID_ECDSA_WITH_SHA224
 ASN.1 OID for ecdsa-with-SHA224 (1.2.840.10045.4.3.1).
#define ASN1_OID_ECDSA_WITH_SHA256
 ASN.1 OID for ecdsa-with-SHA256 (1.2.840.10045.4.3.2).
#define ASN1_OID_ECDSA_WITH_SHA384
 ASN.1 OID for ecdsa-with-SHA384 (1.2.840.10045.4.3.3).
#define ASN1_OID_ECDSA_WITH_SHA512
 ASN.1 OID for ecdsa-with-SHA512 (1.2.840.10045.4.3.4).
#define ASN1_OID_RSAENCRYPTION
 ASN.1 OID for rsaEncryption (1.2.840.113549.1.1.1).
#define ASN1_OID_MD5WITHRSAENCRYPTION
 ASN.1 OID for md5WithRSAEncryption (1.2.840.113549.1.1.4).
#define ASN1_OID_SHA1WITHRSAENCRYPTION
 ASN.1 OID for sha1WithRSAEncryption (1.2.840.113549.1.1.5).
#define ASN1_OID_RSASSA_PSS
 ASN.1 OID for rsassa-pss (1.2.840.113549.1.1.10).
#define ASN1_OID_SHA256WITHRSAENCRYPTION
 ASN.1 OID for sha256WithRSAEncryption (1.2.840.113549.1.1.11).
#define ASN1_OID_SHA384WITHRSAENCRYPTION
 ASN.1 OID for sha384WithRSAEncryption (1.2.840.113549.1.1.12).
#define ASN1_OID_SHA512WITHRSAENCRYPTION
 ASN.1 OID for sha512WithRSAEncryption (1.2.840.113549.1.1.13).
#define ASN1_OID_SHA224WITHRSAENCRYPTION
 ASN.1 OID for sha224WithRSAEncryption (1.2.840.113549.1.1.14).
#define ASN1_OID_MD4
 ASN.1 OID for id-md4 (1.2.840.113549.2.4).
#define ASN1_OID_MD5
 ASN.1 OID for id-md5 (1.2.840.113549.2.5).
#define ASN1_OID_SHA1
 ASN.1 OID for id-sha1 (1.3.14.3.2.26).
#define ASN1_OID_X25519
 ASN.1 OID for id-x25519 (1.3.101.110).
#define ASN1_OID_SECP384R1
 ASN.1 OID for secp384r1 (1.3.132.0.34).
#define ASN1_OID_AES128_CBC
 ASN.1 OID for id-aes128-cbc (2.16.840.1.101.3.4.1.2).
#define ASN1_OID_AES128_GCM
 ASN.1 OID for id-aes128-gcm (2.16.840.1.101.3.4.1.6).
#define ASN1_OID_AES192_CBC
 ASN.1 OID for id-aes192-cbc (2.16.840.1.101.3.4.1.22).
#define ASN1_OID_AES192_GCM
 ASN.1 OID for id-aes192-gcm (2.16.840.1.101.3.4.1.26).
#define ASN1_OID_AES256_CBC
 ASN.1 OID for id-aes256-cbc (2.16.840.1.101.3.4.1.42).
#define ASN1_OID_AES256_GCM
 ASN.1 OID for id-aes256-gcm (2.16.840.1.101.3.4.1.46).
#define ASN1_OID_SHA256
 ASN.1 OID for id-sha256 (2.16.840.1.101.3.4.2.1).
#define ASN1_OID_SHA384
 ASN.1 OID for id-sha384 (2.16.840.1.101.3.4.2.2).
#define ASN1_OID_SHA512
 ASN.1 OID for id-sha512 (2.16.840.1.101.3.4.2.3).
#define ASN1_OID_SHA224
 ASN.1 OID for id-sha224 (2.16.840.1.101.3.4.2.4).
#define ASN1_OID_SHA512_224
 ASN.1 OID for id-sha512-224 (2.16.840.1.101.3.4.2.5).
#define ASN1_OID_SHA512_256
 ASN.1 OID for id-sha512-256 (2.16.840.1.101.3.4.2.6).
#define ASN1_OID_COMMON_NAME
 ASN.1 OID for commonName (2.5.4.3).
#define ASN1_OID_KEYUSAGE
 ASN.1 OID for id-ce-keyUsage (2.5.29.15).
#define ASN1_OID_BASICCONSTRAINTS
 ASN.1 OID for id-ce-basicConstraints (2.5.29.19).
#define ASN1_OID_EXTKEYUSAGE
 ASN.1 OID for id-ce-extKeyUsage (2.5.29.37).
#define ASN1_OID_CODESIGNING
 ASN.1 OID for id-kp-codeSigning (1.3.6.1.5.5.7.3.3).
#define ASN1_OID_SIGNEDDATA
 ASN.1 OID for id-signedData (1.2.840.113549.1.7.2).
#define ASN1_OID_ENVELOPEDDATA
 ASN.1 OID for id-envelopedData (1.2.840.113549.1.7.3).
#define ASN1_OID_AUTHENVELOPEDDATA
 ASN.1 OID for id-authEnvelopedData (1.2.840.113549.1.9.16.1.23).
#define ASN1_OID_AUTHORITYINFOACCESS
 ASN.1 OID for id-pe-authorityInfoAccess (1.3.6.1.5.5.7.1.1).
#define ASN1_OID_OCSP
 ASN.1 OID for id-ad-ocsp (1.3.6.1.5.5.7.48.1).
#define ASN1_OID_OCSP_BASIC
 ASN.1 OID for id-pkix-ocsp-basic ( 1.3.6.1.5.5.7.48.1.1).
#define ASN1_OID_OCSPSIGNING
 ASN.1 OID for id-kp-OCSPSigning (1.3.6.1.5.5.7.3.9).
#define ASN1_OID_SUBJECTALTNAME
 ASN.1 OID for id-ce-subjectAltName (2.5.29.17).
#define ASN1_CURSOR(value)
 Define an ASN.1 cursor for a static value.
#define ASN1_ALGORITHMS   __table ( struct asn1_algorithm, "asn1_algorithms" )
 ASN.1 OID-identified algorithms.
#define __asn1_algorithm   __table_entry ( ASN1_ALGORITHMS, 01 )
 Declare an ASN.1 OID-identified algorithm.

Functions

 FILE_LICENCE (GPL2_OR_LATER_OR_UBDL)
 FILE_SECBOOT (PERMITTED)
static void asn1_invalidate_cursor (struct asn1_cursor *cursor)
 Invalidate ASN.1 object cursor.
static unsigned int asn1_type (const struct asn1_cursor *cursor)
 Extract ASN.1 type.
static struct asn1_cursorasn1_built (struct asn1_builder *builder)
 Get cursor for built object.
int asn1_enter (struct asn1_cursor *cursor, unsigned int type)
 Enter ASN.1 object.
int asn1_skip_if_exists (struct asn1_cursor *cursor, unsigned int type)
 Skip ASN.1 object if present.
int asn1_skip (struct asn1_cursor *cursor, unsigned int type)
 Skip ASN.1 object.
int asn1_shrink (struct asn1_cursor *cursor, unsigned int type)
 Shrink ASN.1 cursor to fit object.
int asn1_enter_any (struct asn1_cursor *cursor)
 Enter ASN.1 object of any type.
int asn1_skip_any (struct asn1_cursor *cursor)
 Skip ASN.1 object of any type.
int asn1_shrink_any (struct asn1_cursor *cursor)
 Shrink ASN.1 object of any type.
int asn1_enter_bits (struct asn1_cursor *cursor, unsigned int *unused)
 Enter ASN.1 bit string.
int asn1_enter_unsigned (struct asn1_cursor *cursor)
 Enter ASN.1 unsigned integer.
int asn1_boolean (const struct asn1_cursor *cursor)
 Parse value of ASN.1 boolean.
int asn1_integer (const struct asn1_cursor *cursor, int *value)
 Parse value of ASN.1 integer.
int asn1_compare (const struct asn1_cursor *cursor1, const struct asn1_cursor *cursor2)
 Compare two ASN.1 objects.
int asn1_algorithm (const struct asn1_cursor *cursor, struct asn1_algorithm **algorithm, struct asn1_cursor *params)
 Parse ASN.1 OID-identified algorithm.
int asn1_pubkey_algorithm (const struct asn1_cursor *cursor, struct asn1_algorithm **algorithm)
 Parse ASN.1 OID-identified public-key algorithm.
int asn1_digest_algorithm (const struct asn1_cursor *cursor, struct asn1_algorithm **algorithm)
 Parse ASN.1 OID-identified digest algorithm.
int asn1_cipher_algorithm (const struct asn1_cursor *cursor, struct asn1_algorithm **algorithm, struct asn1_cursor *params)
 Parse ASN.1 OID-identified cipher algorithm.
int asn1_signature_algorithm (const struct asn1_cursor *cursor, struct asn1_algorithm **algorithm)
 Parse ASN.1 OID-identified signature algorithm.
int asn1_curve_algorithm (const struct asn1_cursor *cursor, struct asn1_algorithm *wrapper, struct asn1_algorithm **algorithm)
 Parse ASN.1 OID-identified elliptic curve algorithm.
int asn1_check_algorithm (const struct asn1_cursor *cursor, struct asn1_algorithm *expected, struct asn1_cursor *params)
 Check ASN.1 OID-identified algorithm.
int asn1_parse_cbc (struct asn1_algorithm *algorithm, struct asn1_cursor *params)
 Parse ASN.1 CBC cipher parameters.
int asn1_parse_gcm (struct asn1_algorithm *algorithm, struct asn1_cursor *params)
int asn1_generalized_time (const struct asn1_cursor *cursor, time_t *time)
 Parse ASN.1 GeneralizedTime.
int asn1_grow (struct asn1_builder *builder, size_t extra)
 Grow ASN.1 builder.
int asn1_prepend_raw (struct asn1_builder *builder, const void *data, size_t len)
 Prepend raw data to ASN.1 builder.
int asn1_prepend (struct asn1_builder *builder, unsigned int type, const void *data, size_t len)
 Prepend data to ASN.1 builder.
int asn1_wrap (struct asn1_builder *builder, unsigned int type)
 Wrap ASN.1 builder.

Variables

struct asn1_algorithm rsa_encryption_algorithm __asn1_algorithm
 Generic elliptic curve container algorithm.

Detailed Description

ASN.1 encoding.

Definition in file asn1.h.

Macro Definition Documentation

◆ ASN1_MAX_LEN_LEN

#define ASN1_MAX_LEN_LEN   ( 1 + sizeof ( size_t ) )

Maximum (viable) length of ASN.1 length.

While in theory unlimited, this length is sufficient to contain a size_t.

Definition at line 46 of file asn1.h.

◆ ASN1_END

#define ASN1_END   0x00

ASN.1 end.

Definition at line 57 of file asn1.h.

Referenced by asn1_type().

◆ ASN1_BOOLEAN

#define ASN1_BOOLEAN   0x01

ASN.1 boolean.

Definition at line 60 of file asn1.h.

Referenced by asn1_boolean(), x509_parse_basic_constraints(), and x509_parse_extension().

◆ ASN1_INTEGER

◆ ASN1_BIT_STRING

#define ASN1_BIT_STRING   0x03

ASN.1 bit string.

Definition at line 66 of file asn1.h.

Referenced by asn1_enter_bits(), and icert_cert().

◆ ASN1_OCTET_STRING

◆ ASN1_NULL

#define ASN1_NULL   0x05

ASN.1 null.

Definition at line 72 of file asn1.h.

◆ ASN1_OID

◆ ASN1_ENUMERATED

#define ASN1_ENUMERATED   0x0a

ASN.1 enumeration.

Definition at line 78 of file asn1.h.

Referenced by ocsp_parse_response_status().

◆ ASN1_UTF8_STRING

#define ASN1_UTF8_STRING   0x0c

ASN.1 UTF-8 string.

Definition at line 81 of file asn1.h.

◆ ASN1_UTC_TIME

#define ASN1_UTC_TIME   0x17

ASN.1 UTC time.

Definition at line 84 of file asn1.h.

Referenced by asn1_generalized_time().

◆ ASN1_GENERALIZED_TIME

#define ASN1_GENERALIZED_TIME   0x18

ASN.1 generalized time.

Definition at line 87 of file asn1.h.

Referenced by asn1_generalized_time().

◆ ASN1_SEQUENCE

◆ ASN1_SET

#define ASN1_SET   0x31

ASN.1 set.

Definition at line 93 of file asn1.h.

Referenced by cms_parse_participants(), cms_parse_signed(), validator_append(), and x509_parse_common_name().

◆ ASN1_IMPLICIT_TAG

#define ASN1_IMPLICIT_TAG ( number)
Value:
( 0x80 | (number) )

ASN.1 implicit tag.

Definition at line 96 of file asn1.h.

Referenced by cms_parse_enveloped(), and ocsp_parse_responses().

◆ ASN1_EXPLICIT_TAG

◆ ASN1_ANY

#define ASN1_ANY   -1U

ASN.1 "any tag" magic value.

Definition at line 102 of file asn1.h.

Referenced by asn1_enter_any(), asn1_shrink_any(), asn1_skip_any(), and asn1_start().

◆ ASN1_SHORT

#define ASN1_SHORT ( tag,
... )
Value:
(tag), VA_ARG_COUNT ( __VA_ARGS__ ), __VA_ARGS__
uint64_t tag
Identity tag.
Definition edd.h:1
#define VA_ARG_COUNT(...)
Definition stdarg.h:28

Construct a short ASN.1 value.

Definition at line 105 of file asn1.h.

105#define ASN1_SHORT( tag, ... ) \
106 (tag), VA_ARG_COUNT ( __VA_ARGS__ ), __VA_ARGS__

◆ ASN1_OID_INITIAL

#define ASN1_OID_INITIAL ( first,
second )
Value:
( ( (first) * 40 ) + (second) )
uint32_t first
First block in range.
Definition pccrr.h:1

Initial OID byte.

Definition at line 109 of file asn1.h.

◆ ASN1_OID_SINGLE

#define ASN1_OID_SINGLE ( value)
Value:
( (value) & 0x7f )
pseudo_bit_t value[0x00020]
Definition arbel.h:2

Single-byte OID value.

Valid for values up to 127

Definition at line 115 of file asn1.h.

◆ ASN1_OID_DOUBLE

#define ASN1_OID_DOUBLE ( value)
Value:
( 0x80 | ( ( (value) >> 7 ) & 0x7f ) ), ASN1_OID_SINGLE ( (value) )
#define ASN1_OID_SINGLE(value)
Single-byte OID value.
Definition asn1.h:115

Double-byte OID value.

Valid for values up to 16383

Definition at line 121 of file asn1.h.

121#define ASN1_OID_DOUBLE( value ) \
122 ( 0x80 | ( ( (value) >> 7 ) & 0x7f ) ), ASN1_OID_SINGLE ( (value) )

◆ ASN1_OID_TRIPLE

#define ASN1_OID_TRIPLE ( value)
Value:
( 0x80 | ( ( (value) >> 14 ) & 0x7f ) ), ASN1_OID_DOUBLE ( (value) )
#define ASN1_OID_DOUBLE(value)
Double-byte OID value.
Definition asn1.h:121

Double-byte OID value.

Valid for values up to 2097151

Definition at line 128 of file asn1.h.

128#define ASN1_OID_TRIPLE( value ) \
129 ( 0x80 | ( ( (value) >> 14 ) & 0x7f ) ), ASN1_OID_DOUBLE ( (value) )

◆ ASN1_OID_ECPUBLICKEY

#define ASN1_OID_ECPUBLICKEY
Value:
ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \
ASN1_OID_DOUBLE ( 10045 ), ASN1_OID_SINGLE ( 2 ), \
ASN1_OID_SINGLE ( 1 )
#define ASN1_OID_INITIAL(first, second)
Initial OID byte.
Definition asn1.h:109

ASN.1 OID for ecPublicKey (1.2.840.10045.2.1).

Definition at line 132 of file asn1.h.

132#define ASN1_OID_ECPUBLICKEY \
133 ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \
134 ASN1_OID_DOUBLE ( 10045 ), ASN1_OID_SINGLE ( 2 ), \
135 ASN1_OID_SINGLE ( 1 )

◆ ASN1_OID_PRIME256V1

#define ASN1_OID_PRIME256V1
Value:
ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \
ASN1_OID_DOUBLE ( 10045 ), ASN1_OID_SINGLE ( 3 ), \
ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 7 )

ASN.1 OID for prime256v1 (1.2.840.10045.3.1.7).

Definition at line 138 of file asn1.h.

138#define ASN1_OID_PRIME256V1 \
139 ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \
140 ASN1_OID_DOUBLE ( 10045 ), ASN1_OID_SINGLE ( 3 ), \
141 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 7 )

◆ ASN1_OID_ECDSA_WITH_SHA224

#define ASN1_OID_ECDSA_WITH_SHA224
Value:
ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \
ASN1_OID_DOUBLE ( 10045 ), ASN1_OID_SINGLE ( 4 ), \
ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 1 )

ASN.1 OID for ecdsa-with-SHA224 (1.2.840.10045.4.3.1).

Definition at line 144 of file asn1.h.

144#define ASN1_OID_ECDSA_WITH_SHA224 \
145 ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \
146 ASN1_OID_DOUBLE ( 10045 ), ASN1_OID_SINGLE ( 4 ), \
147 ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 1 )

◆ ASN1_OID_ECDSA_WITH_SHA256

#define ASN1_OID_ECDSA_WITH_SHA256
Value:
ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \
ASN1_OID_DOUBLE ( 10045 ), ASN1_OID_SINGLE ( 4 ), \
ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 2 )

ASN.1 OID for ecdsa-with-SHA256 (1.2.840.10045.4.3.2).

Definition at line 150 of file asn1.h.

150#define ASN1_OID_ECDSA_WITH_SHA256 \
151 ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \
152 ASN1_OID_DOUBLE ( 10045 ), ASN1_OID_SINGLE ( 4 ), \
153 ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 2 )

◆ ASN1_OID_ECDSA_WITH_SHA384

#define ASN1_OID_ECDSA_WITH_SHA384
Value:
ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \
ASN1_OID_DOUBLE ( 10045 ), ASN1_OID_SINGLE ( 4 ), \
ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 3 )

ASN.1 OID for ecdsa-with-SHA384 (1.2.840.10045.4.3.3).

Definition at line 156 of file asn1.h.

156#define ASN1_OID_ECDSA_WITH_SHA384 \
157 ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \
158 ASN1_OID_DOUBLE ( 10045 ), ASN1_OID_SINGLE ( 4 ), \
159 ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 3 )

◆ ASN1_OID_ECDSA_WITH_SHA512

#define ASN1_OID_ECDSA_WITH_SHA512
Value:
ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \
ASN1_OID_DOUBLE ( 10045 ), ASN1_OID_SINGLE ( 4 ), \
ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 4 )

ASN.1 OID for ecdsa-with-SHA512 (1.2.840.10045.4.3.4).

Definition at line 162 of file asn1.h.

162#define ASN1_OID_ECDSA_WITH_SHA512 \
163 ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \
164 ASN1_OID_DOUBLE ( 10045 ), ASN1_OID_SINGLE ( 4 ), \
165 ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 4 )

◆ ASN1_OID_RSAENCRYPTION

#define ASN1_OID_RSAENCRYPTION
Value:
ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \
ASN1_OID_TRIPLE ( 113549 ), ASN1_OID_SINGLE ( 1 ), \
ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 1 )

ASN.1 OID for rsaEncryption (1.2.840.113549.1.1.1).

Definition at line 168 of file asn1.h.

168#define ASN1_OID_RSAENCRYPTION \
169 ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \
170 ASN1_OID_TRIPLE ( 113549 ), ASN1_OID_SINGLE ( 1 ), \
171 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 1 )

◆ ASN1_OID_MD5WITHRSAENCRYPTION

#define ASN1_OID_MD5WITHRSAENCRYPTION
Value:
ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \
ASN1_OID_TRIPLE ( 113549 ), ASN1_OID_SINGLE ( 1 ), \
ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 4 )

ASN.1 OID for md5WithRSAEncryption (1.2.840.113549.1.1.4).

Definition at line 174 of file asn1.h.

174#define ASN1_OID_MD5WITHRSAENCRYPTION \
175 ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \
176 ASN1_OID_TRIPLE ( 113549 ), ASN1_OID_SINGLE ( 1 ), \
177 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 4 )

◆ ASN1_OID_SHA1WITHRSAENCRYPTION

#define ASN1_OID_SHA1WITHRSAENCRYPTION
Value:
ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \
ASN1_OID_TRIPLE ( 113549 ), ASN1_OID_SINGLE ( 1 ), \
ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 5 )

ASN.1 OID for sha1WithRSAEncryption (1.2.840.113549.1.1.5).

Definition at line 180 of file asn1.h.

180#define ASN1_OID_SHA1WITHRSAENCRYPTION \
181 ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \
182 ASN1_OID_TRIPLE ( 113549 ), ASN1_OID_SINGLE ( 1 ), \
183 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 5 )

◆ ASN1_OID_RSASSA_PSS

#define ASN1_OID_RSASSA_PSS
Value:
ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \
ASN1_OID_TRIPLE ( 113549 ), ASN1_OID_SINGLE ( 1 ), \
ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 10 )

ASN.1 OID for rsassa-pss (1.2.840.113549.1.1.10).

Definition at line 186 of file asn1.h.

186#define ASN1_OID_RSASSA_PSS \
187 ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \
188 ASN1_OID_TRIPLE ( 113549 ), ASN1_OID_SINGLE ( 1 ), \
189 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 10 )

◆ ASN1_OID_SHA256WITHRSAENCRYPTION

#define ASN1_OID_SHA256WITHRSAENCRYPTION
Value:
ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \
ASN1_OID_TRIPLE ( 113549 ), ASN1_OID_SINGLE ( 1 ), \
ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 11 )

ASN.1 OID for sha256WithRSAEncryption (1.2.840.113549.1.1.11).

Definition at line 192 of file asn1.h.

192#define ASN1_OID_SHA256WITHRSAENCRYPTION \
193 ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \
194 ASN1_OID_TRIPLE ( 113549 ), ASN1_OID_SINGLE ( 1 ), \
195 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 11 )

◆ ASN1_OID_SHA384WITHRSAENCRYPTION

#define ASN1_OID_SHA384WITHRSAENCRYPTION
Value:
ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \
ASN1_OID_TRIPLE ( 113549 ), ASN1_OID_SINGLE ( 1 ), \
ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 12 )

ASN.1 OID for sha384WithRSAEncryption (1.2.840.113549.1.1.12).

Definition at line 198 of file asn1.h.

198#define ASN1_OID_SHA384WITHRSAENCRYPTION \
199 ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \
200 ASN1_OID_TRIPLE ( 113549 ), ASN1_OID_SINGLE ( 1 ), \
201 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 12 )

◆ ASN1_OID_SHA512WITHRSAENCRYPTION

#define ASN1_OID_SHA512WITHRSAENCRYPTION
Value:
ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \
ASN1_OID_TRIPLE ( 113549 ), ASN1_OID_SINGLE ( 1 ), \
ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 13 )

ASN.1 OID for sha512WithRSAEncryption (1.2.840.113549.1.1.13).

Definition at line 204 of file asn1.h.

204#define ASN1_OID_SHA512WITHRSAENCRYPTION \
205 ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \
206 ASN1_OID_TRIPLE ( 113549 ), ASN1_OID_SINGLE ( 1 ), \
207 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 13 )

◆ ASN1_OID_SHA224WITHRSAENCRYPTION

#define ASN1_OID_SHA224WITHRSAENCRYPTION
Value:
ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \
ASN1_OID_TRIPLE ( 113549 ), ASN1_OID_SINGLE ( 1 ), \
ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 14 )

ASN.1 OID for sha224WithRSAEncryption (1.2.840.113549.1.1.14).

Definition at line 210 of file asn1.h.

210#define ASN1_OID_SHA224WITHRSAENCRYPTION \
211 ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \
212 ASN1_OID_TRIPLE ( 113549 ), ASN1_OID_SINGLE ( 1 ), \
213 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 14 )

◆ ASN1_OID_MD4

#define ASN1_OID_MD4
Value:
ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \
ASN1_OID_TRIPLE ( 113549 ), ASN1_OID_SINGLE ( 2 ), \
ASN1_OID_SINGLE ( 4 )

ASN.1 OID for id-md4 (1.2.840.113549.2.4).

Definition at line 216 of file asn1.h.

216#define ASN1_OID_MD4 \
217 ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \
218 ASN1_OID_TRIPLE ( 113549 ), ASN1_OID_SINGLE ( 2 ), \
219 ASN1_OID_SINGLE ( 4 )

◆ ASN1_OID_MD5

#define ASN1_OID_MD5
Value:
ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \
ASN1_OID_TRIPLE ( 113549 ), ASN1_OID_SINGLE ( 2 ), \
ASN1_OID_SINGLE ( 5 )

ASN.1 OID for id-md5 (1.2.840.113549.2.5).

Definition at line 222 of file asn1.h.

222#define ASN1_OID_MD5 \
223 ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \
224 ASN1_OID_TRIPLE ( 113549 ), ASN1_OID_SINGLE ( 2 ), \
225 ASN1_OID_SINGLE ( 5 )

◆ ASN1_OID_SHA1

#define ASN1_OID_SHA1
Value:
ASN1_OID_INITIAL ( 1, 3 ), ASN1_OID_SINGLE ( 14 ), \
ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 2 ), \
ASN1_OID_SINGLE ( 26 )

ASN.1 OID for id-sha1 (1.3.14.3.2.26).

Definition at line 228 of file asn1.h.

228#define ASN1_OID_SHA1 \
229 ASN1_OID_INITIAL ( 1, 3 ), ASN1_OID_SINGLE ( 14 ), \
230 ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 2 ), \
231 ASN1_OID_SINGLE ( 26 )

◆ ASN1_OID_X25519

#define ASN1_OID_X25519
Value:
ASN1_OID_INITIAL ( 1, 3 ), ASN1_OID_SINGLE ( 101 ), \
ASN1_OID_SINGLE ( 110 )

ASN.1 OID for id-x25519 (1.3.101.110).

Definition at line 234 of file asn1.h.

234#define ASN1_OID_X25519 \
235 ASN1_OID_INITIAL ( 1, 3 ), ASN1_OID_SINGLE ( 101 ), \
236 ASN1_OID_SINGLE ( 110 )

◆ ASN1_OID_SECP384R1

#define ASN1_OID_SECP384R1
Value:
ASN1_OID_INITIAL ( 1, 3 ), ASN1_OID_DOUBLE ( 132 ), \
ASN1_OID_SINGLE ( 0 ), ASN1_OID_SINGLE ( 34 )

ASN.1 OID for secp384r1 (1.3.132.0.34).

Definition at line 239 of file asn1.h.

239#define ASN1_OID_SECP384R1 \
240 ASN1_OID_INITIAL ( 1, 3 ), ASN1_OID_DOUBLE ( 132 ), \
241 ASN1_OID_SINGLE ( 0 ), ASN1_OID_SINGLE ( 34 )

◆ ASN1_OID_AES128_CBC

#define ASN1_OID_AES128_CBC
Value:
ASN1_OID_INITIAL ( 2, 16 ), ASN1_OID_DOUBLE ( 840 ), \
ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 101 ), \
ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 4 ), \
ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 2 )

ASN.1 OID for id-aes128-cbc (2.16.840.1.101.3.4.1.2).

Definition at line 244 of file asn1.h.

244#define ASN1_OID_AES128_CBC \
245 ASN1_OID_INITIAL ( 2, 16 ), ASN1_OID_DOUBLE ( 840 ), \
246 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 101 ), \
247 ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 4 ), \
248 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 2 )

◆ ASN1_OID_AES128_GCM

#define ASN1_OID_AES128_GCM
Value:
ASN1_OID_INITIAL ( 2, 16 ), ASN1_OID_DOUBLE ( 840 ), \
ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 101 ), \
ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 4 ), \
ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 6 )

ASN.1 OID for id-aes128-gcm (2.16.840.1.101.3.4.1.6).

Definition at line 251 of file asn1.h.

251#define ASN1_OID_AES128_GCM \
252 ASN1_OID_INITIAL ( 2, 16 ), ASN1_OID_DOUBLE ( 840 ), \
253 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 101 ), \
254 ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 4 ), \
255 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 6 )

◆ ASN1_OID_AES192_CBC

#define ASN1_OID_AES192_CBC
Value:
ASN1_OID_INITIAL ( 2, 16 ), ASN1_OID_DOUBLE ( 840 ), \
ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 101 ), \
ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 4 ), \
ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 22 )

ASN.1 OID for id-aes192-cbc (2.16.840.1.101.3.4.1.22).

Definition at line 258 of file asn1.h.

258#define ASN1_OID_AES192_CBC \
259 ASN1_OID_INITIAL ( 2, 16 ), ASN1_OID_DOUBLE ( 840 ), \
260 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 101 ), \
261 ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 4 ), \
262 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 22 )

◆ ASN1_OID_AES192_GCM

#define ASN1_OID_AES192_GCM
Value:
ASN1_OID_INITIAL ( 2, 16 ), ASN1_OID_DOUBLE ( 840 ), \
ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 101 ), \
ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 4 ), \
ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 26 )

ASN.1 OID for id-aes192-gcm (2.16.840.1.101.3.4.1.26).

Definition at line 265 of file asn1.h.

265#define ASN1_OID_AES192_GCM \
266 ASN1_OID_INITIAL ( 2, 16 ), ASN1_OID_DOUBLE ( 840 ), \
267 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 101 ), \
268 ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 4 ), \
269 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 26 )

◆ ASN1_OID_AES256_CBC

#define ASN1_OID_AES256_CBC
Value:
ASN1_OID_INITIAL ( 2, 16 ), ASN1_OID_DOUBLE ( 840 ), \
ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 101 ), \
ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 4 ), \
ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 42 )

ASN.1 OID for id-aes256-cbc (2.16.840.1.101.3.4.1.42).

Definition at line 272 of file asn1.h.

272#define ASN1_OID_AES256_CBC \
273 ASN1_OID_INITIAL ( 2, 16 ), ASN1_OID_DOUBLE ( 840 ), \
274 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 101 ), \
275 ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 4 ), \
276 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 42 )

◆ ASN1_OID_AES256_GCM

#define ASN1_OID_AES256_GCM
Value:
ASN1_OID_INITIAL ( 2, 16 ), ASN1_OID_DOUBLE ( 840 ), \
ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 101 ), \
ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 4 ), \
ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 46 )

ASN.1 OID for id-aes256-gcm (2.16.840.1.101.3.4.1.46).

Definition at line 279 of file asn1.h.

279#define ASN1_OID_AES256_GCM \
280 ASN1_OID_INITIAL ( 2, 16 ), ASN1_OID_DOUBLE ( 840 ), \
281 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 101 ), \
282 ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 4 ), \
283 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 46 )

◆ ASN1_OID_SHA256

#define ASN1_OID_SHA256
Value:
ASN1_OID_INITIAL ( 2, 16 ), ASN1_OID_DOUBLE ( 840 ), \
ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 101 ), \
ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 4 ), \
ASN1_OID_SINGLE ( 2 ), ASN1_OID_SINGLE ( 1 )

ASN.1 OID for id-sha256 (2.16.840.1.101.3.4.2.1).

Definition at line 286 of file asn1.h.

286#define ASN1_OID_SHA256 \
287 ASN1_OID_INITIAL ( 2, 16 ), ASN1_OID_DOUBLE ( 840 ), \
288 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 101 ), \
289 ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 4 ), \
290 ASN1_OID_SINGLE ( 2 ), ASN1_OID_SINGLE ( 1 )

◆ ASN1_OID_SHA384

#define ASN1_OID_SHA384
Value:
ASN1_OID_INITIAL ( 2, 16 ), ASN1_OID_DOUBLE ( 840 ), \
ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 101 ), \
ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 4 ), \
ASN1_OID_SINGLE ( 2 ), ASN1_OID_SINGLE ( 2 )

ASN.1 OID for id-sha384 (2.16.840.1.101.3.4.2.2).

Definition at line 293 of file asn1.h.

293#define ASN1_OID_SHA384 \
294 ASN1_OID_INITIAL ( 2, 16 ), ASN1_OID_DOUBLE ( 840 ), \
295 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 101 ), \
296 ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 4 ), \
297 ASN1_OID_SINGLE ( 2 ), ASN1_OID_SINGLE ( 2 )

◆ ASN1_OID_SHA512

#define ASN1_OID_SHA512
Value:
ASN1_OID_INITIAL ( 2, 16 ), ASN1_OID_DOUBLE ( 840 ), \
ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 101 ), \
ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 4 ), \
ASN1_OID_SINGLE ( 2 ), ASN1_OID_SINGLE ( 3 )

ASN.1 OID for id-sha512 (2.16.840.1.101.3.4.2.3).

Definition at line 300 of file asn1.h.

300#define ASN1_OID_SHA512 \
301 ASN1_OID_INITIAL ( 2, 16 ), ASN1_OID_DOUBLE ( 840 ), \
302 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 101 ), \
303 ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 4 ), \
304 ASN1_OID_SINGLE ( 2 ), ASN1_OID_SINGLE ( 3 )

◆ ASN1_OID_SHA224

#define ASN1_OID_SHA224
Value:
ASN1_OID_INITIAL ( 2, 16 ), ASN1_OID_DOUBLE ( 840 ), \
ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 101 ), \
ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 4 ), \
ASN1_OID_SINGLE ( 2 ), ASN1_OID_SINGLE ( 4 )

ASN.1 OID for id-sha224 (2.16.840.1.101.3.4.2.4).

Definition at line 307 of file asn1.h.

307#define ASN1_OID_SHA224 \
308 ASN1_OID_INITIAL ( 2, 16 ), ASN1_OID_DOUBLE ( 840 ), \
309 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 101 ), \
310 ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 4 ), \
311 ASN1_OID_SINGLE ( 2 ), ASN1_OID_SINGLE ( 4 )

◆ ASN1_OID_SHA512_224

#define ASN1_OID_SHA512_224
Value:
ASN1_OID_INITIAL ( 2, 16 ), ASN1_OID_DOUBLE ( 840 ), \
ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 101 ), \
ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 4 ), \
ASN1_OID_SINGLE ( 2 ), ASN1_OID_SINGLE ( 5 )

ASN.1 OID for id-sha512-224 (2.16.840.1.101.3.4.2.5).

Definition at line 314 of file asn1.h.

314#define ASN1_OID_SHA512_224 \
315 ASN1_OID_INITIAL ( 2, 16 ), ASN1_OID_DOUBLE ( 840 ), \
316 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 101 ), \
317 ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 4 ), \
318 ASN1_OID_SINGLE ( 2 ), ASN1_OID_SINGLE ( 5 )

◆ ASN1_OID_SHA512_256

#define ASN1_OID_SHA512_256
Value:
ASN1_OID_INITIAL ( 2, 16 ), ASN1_OID_DOUBLE ( 840 ), \
ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 101 ), \
ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 4 ), \
ASN1_OID_SINGLE ( 2 ), ASN1_OID_SINGLE ( 6 )

ASN.1 OID for id-sha512-256 (2.16.840.1.101.3.4.2.6).

Definition at line 321 of file asn1.h.

321#define ASN1_OID_SHA512_256 \
322 ASN1_OID_INITIAL ( 2, 16 ), ASN1_OID_DOUBLE ( 840 ), \
323 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 101 ), \
324 ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 4 ), \
325 ASN1_OID_SINGLE ( 2 ), ASN1_OID_SINGLE ( 6 )

◆ ASN1_OID_COMMON_NAME

#define ASN1_OID_COMMON_NAME
Value:
ASN1_OID_SINGLE ( 3 )

ASN.1 OID for commonName (2.5.4.3).

Definition at line 328 of file asn1.h.

328#define ASN1_OID_COMMON_NAME \
329 ASN1_OID_INITIAL ( 2, 5 ), ASN1_OID_SINGLE ( 4 ), \
330 ASN1_OID_SINGLE ( 3 )

◆ ASN1_OID_KEYUSAGE

#define ASN1_OID_KEYUSAGE
Value:
ASN1_OID_INITIAL ( 2, 5 ), ASN1_OID_SINGLE ( 29 ), \
ASN1_OID_SINGLE ( 15 )

ASN.1 OID for id-ce-keyUsage (2.5.29.15).

Definition at line 333 of file asn1.h.

333#define ASN1_OID_KEYUSAGE \
334 ASN1_OID_INITIAL ( 2, 5 ), ASN1_OID_SINGLE ( 29 ), \
335 ASN1_OID_SINGLE ( 15 )

◆ ASN1_OID_BASICCONSTRAINTS

#define ASN1_OID_BASICCONSTRAINTS
Value:
ASN1_OID_INITIAL ( 2, 5 ), ASN1_OID_SINGLE ( 29 ), \
ASN1_OID_SINGLE ( 19 )

ASN.1 OID for id-ce-basicConstraints (2.5.29.19).

Definition at line 338 of file asn1.h.

338#define ASN1_OID_BASICCONSTRAINTS \
339 ASN1_OID_INITIAL ( 2, 5 ), ASN1_OID_SINGLE ( 29 ), \
340 ASN1_OID_SINGLE ( 19 )

◆ ASN1_OID_EXTKEYUSAGE

#define ASN1_OID_EXTKEYUSAGE
Value:
ASN1_OID_INITIAL ( 2, 5 ), ASN1_OID_SINGLE ( 29 ), \
ASN1_OID_SINGLE ( 37 )

ASN.1 OID for id-ce-extKeyUsage (2.5.29.37).

Definition at line 343 of file asn1.h.

343#define ASN1_OID_EXTKEYUSAGE \
344 ASN1_OID_INITIAL ( 2, 5 ), ASN1_OID_SINGLE ( 29 ), \
345 ASN1_OID_SINGLE ( 37 )

◆ ASN1_OID_CODESIGNING

#define ASN1_OID_CODESIGNING
Value:
ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 5 ), \
ASN1_OID_SINGLE ( 5 ), ASN1_OID_SINGLE ( 7 ), \
ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 3 )

ASN.1 OID for id-kp-codeSigning (1.3.6.1.5.5.7.3.3).

Definition at line 348 of file asn1.h.

348#define ASN1_OID_CODESIGNING \
349 ASN1_OID_INITIAL ( 1, 3 ), ASN1_OID_SINGLE ( 6 ), \
350 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 5 ), \
351 ASN1_OID_SINGLE ( 5 ), ASN1_OID_SINGLE ( 7 ), \
352 ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 3 )

◆ ASN1_OID_SIGNEDDATA

#define ASN1_OID_SIGNEDDATA
Value:
ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \
ASN1_OID_TRIPLE ( 113549 ), ASN1_OID_SINGLE ( 1 ), \
ASN1_OID_SINGLE ( 7 ), ASN1_OID_SINGLE ( 2 )

ASN.1 OID for id-signedData (1.2.840.113549.1.7.2).

Definition at line 355 of file asn1.h.

355#define ASN1_OID_SIGNEDDATA \
356 ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \
357 ASN1_OID_TRIPLE ( 113549 ), ASN1_OID_SINGLE ( 1 ), \
358 ASN1_OID_SINGLE ( 7 ), ASN1_OID_SINGLE ( 2 )

◆ ASN1_OID_ENVELOPEDDATA

#define ASN1_OID_ENVELOPEDDATA
Value:
ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \
ASN1_OID_TRIPLE ( 113549 ), ASN1_OID_SINGLE ( 1 ), \
ASN1_OID_SINGLE ( 7 ), ASN1_OID_SINGLE ( 3 )

ASN.1 OID for id-envelopedData (1.2.840.113549.1.7.3).

Definition at line 361 of file asn1.h.

361#define ASN1_OID_ENVELOPEDDATA \
362 ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \
363 ASN1_OID_TRIPLE ( 113549 ), ASN1_OID_SINGLE ( 1 ), \
364 ASN1_OID_SINGLE ( 7 ), ASN1_OID_SINGLE ( 3 )

◆ ASN1_OID_AUTHENVELOPEDDATA

#define ASN1_OID_AUTHENVELOPEDDATA
Value:
ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \
ASN1_OID_TRIPLE ( 113549 ), ASN1_OID_SINGLE ( 1 ), \
ASN1_OID_SINGLE ( 9 ), ASN1_OID_SINGLE ( 16 ), \
ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 23 )

ASN.1 OID for id-authEnvelopedData (1.2.840.113549.1.9.16.1.23).

Definition at line 367 of file asn1.h.

367#define ASN1_OID_AUTHENVELOPEDDATA \
368 ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \
369 ASN1_OID_TRIPLE ( 113549 ), ASN1_OID_SINGLE ( 1 ), \
370 ASN1_OID_SINGLE ( 9 ), ASN1_OID_SINGLE ( 16 ), \
371 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 23 )

◆ ASN1_OID_AUTHORITYINFOACCESS

#define ASN1_OID_AUTHORITYINFOACCESS
Value:
ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 5 ), \
ASN1_OID_SINGLE ( 5 ), ASN1_OID_SINGLE ( 7 ), \
ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 1 )

ASN.1 OID for id-pe-authorityInfoAccess (1.3.6.1.5.5.7.1.1).

Definition at line 374 of file asn1.h.

374#define ASN1_OID_AUTHORITYINFOACCESS \
375 ASN1_OID_INITIAL ( 1, 3 ), ASN1_OID_SINGLE ( 6 ), \
376 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 5 ), \
377 ASN1_OID_SINGLE ( 5 ), ASN1_OID_SINGLE ( 7 ), \
378 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 1 )

◆ ASN1_OID_OCSP

#define ASN1_OID_OCSP
Value:
ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 5 ), \
ASN1_OID_SINGLE ( 5 ), ASN1_OID_SINGLE ( 7 ), \
ASN1_OID_SINGLE ( 48 ), ASN1_OID_SINGLE ( 1 )

ASN.1 OID for id-ad-ocsp (1.3.6.1.5.5.7.48.1).

Definition at line 381 of file asn1.h.

381#define ASN1_OID_OCSP \
382 ASN1_OID_INITIAL ( 1, 3 ), ASN1_OID_SINGLE ( 6 ), \
383 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 5 ), \
384 ASN1_OID_SINGLE ( 5 ), ASN1_OID_SINGLE ( 7 ), \
385 ASN1_OID_SINGLE ( 48 ), ASN1_OID_SINGLE ( 1 )

◆ ASN1_OID_OCSP_BASIC

#define ASN1_OID_OCSP_BASIC
Value:
ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 5 ), \
ASN1_OID_SINGLE ( 5 ), ASN1_OID_SINGLE ( 7 ), \
ASN1_OID_SINGLE ( 48 ), ASN1_OID_SINGLE ( 1 ), \
ASN1_OID_SINGLE ( 1 )

ASN.1 OID for id-pkix-ocsp-basic ( 1.3.6.1.5.5.7.48.1.1).

Definition at line 388 of file asn1.h.

388#define ASN1_OID_OCSP_BASIC \
389 ASN1_OID_INITIAL ( 1, 3 ), ASN1_OID_SINGLE ( 6 ), \
390 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 5 ), \
391 ASN1_OID_SINGLE ( 5 ), ASN1_OID_SINGLE ( 7 ), \
392 ASN1_OID_SINGLE ( 48 ), ASN1_OID_SINGLE ( 1 ), \
393 ASN1_OID_SINGLE ( 1 )

◆ ASN1_OID_OCSPSIGNING

#define ASN1_OID_OCSPSIGNING
Value:
ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 5 ), \
ASN1_OID_SINGLE ( 5 ), ASN1_OID_SINGLE ( 7 ), \
ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 9 )

ASN.1 OID for id-kp-OCSPSigning (1.3.6.1.5.5.7.3.9).

Definition at line 396 of file asn1.h.

396#define ASN1_OID_OCSPSIGNING \
397 ASN1_OID_INITIAL ( 1, 3 ), ASN1_OID_SINGLE ( 6 ), \
398 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 5 ), \
399 ASN1_OID_SINGLE ( 5 ), ASN1_OID_SINGLE ( 7 ), \
400 ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 9 )

◆ ASN1_OID_SUBJECTALTNAME

#define ASN1_OID_SUBJECTALTNAME
Value:
ASN1_OID_INITIAL ( 2, 5 ), ASN1_OID_SINGLE ( 29 ), \
ASN1_OID_SINGLE ( 17 )

ASN.1 OID for id-ce-subjectAltName (2.5.29.17).

Definition at line 403 of file asn1.h.

403#define ASN1_OID_SUBJECTALTNAME \
404 ASN1_OID_INITIAL ( 2, 5 ), ASN1_OID_SINGLE ( 29 ), \
405 ASN1_OID_SINGLE ( 17 )

◆ ASN1_CURSOR

#define ASN1_CURSOR ( value)
Value:
{ \
.data = value, \
.len = sizeof ( value ), \
}

Define an ASN.1 cursor for a static value.

Definition at line 408 of file asn1.h.

408#define ASN1_CURSOR( value ) { \
409 .data = value, \
410 .len = sizeof ( value ), \
411 }

◆ ASN1_ALGORITHMS

#define ASN1_ALGORITHMS   __table ( struct asn1_algorithm, "asn1_algorithms" )

ASN.1 OID-identified algorithms.

Definition at line 439 of file asn1.h.

Referenced by asn1_find_algorithm().

◆ __asn1_algorithm

struct asn1_algorithm ecpubkey_algorithm __asn1_algorithm   __table_entry ( ASN1_ALGORITHMS, 01 )

Declare an ASN.1 OID-identified algorithm.

"aes256-gcm" OID-identified algorithm

"aes192-gcm" OID-identified algorithm

"aes256-cbc" OID-identified algorithm

"aes192-cbc" OID-identified algorithm

Definition at line 442 of file asn1.h.

Function Documentation

◆ FILE_LICENCE()

FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL )

◆ FILE_SECBOOT()

FILE_SECBOOT ( PERMITTED )

◆ asn1_invalidate_cursor()

void asn1_invalidate_cursor ( struct asn1_cursor * cursor)
inlinestatic

Invalidate ASN.1 object cursor.

Parameters
cursorASN.1 object cursor

Definition at line 475 of file asn1.h.

475 {
476 cursor->len = 0;
477}
size_t len
Length of data.
Definition asn1.h:25

References asn1_cursor::len.

Referenced by asn1_enter(), asn1_enter_bits(), asn1_shrink(), asn1_skip(), asn1_start(), and ecdsa_parse_key().

◆ asn1_type()

unsigned int asn1_type ( const struct asn1_cursor * cursor)
inlinestatic

Extract ASN.1 type.

Parameters
cursorASN.1 object cursor
Return values
typeType, or ASN1_END if cursor is invalid

Definition at line 486 of file asn1.h.

486 {
487 const uint8_t *type = cursor->data;
488
489 return ( ( cursor->len >= sizeof ( *type ) ) ? *type : ASN1_END );
490}
unsigned char uint8_t
Definition stdint.h:10
#define ASN1_END
ASN.1 end.
Definition asn1.h:57
uint32_t type
Operating system type.
Definition ena.h:1
const void * data
Start of data.
Definition asn1.h:23

References ASN1_END, asn1_cursor::data, asn1_cursor::len, and type.

Referenced by asn1_generalized_time(), asn1_start(), ecdsa_parse_key(), ocsp_parse_basic_response(), ocsp_parse_responder_id(), ocsp_parse_responses(), rsa_parse_mod_exp(), x509_check_alt_name(), x509_parse_basic_constraints(), x509_parse_extension(), and x509_parse_tbscertificate().

◆ asn1_built()

struct asn1_cursor * asn1_built ( struct asn1_builder * builder)
inlinestatic

Get cursor for built object.

Parameters
builderASN.1 object builder
Return values
cursorASN.1 object cursor

Definition at line 499 of file asn1.h.

499 {
500 union {
501 struct asn1_builder builder;
502 struct asn1_cursor cursor;
503 } *u = container_of ( builder, typeof ( *u ), builder );
504
505 /* Sanity check */
506 build_assert ( ( ( const void * ) &u->builder.data ) ==
507 &u->cursor.data );
508 build_assert ( &u->builder.len == &u->cursor.len );
509
510 return &u->cursor;
511}
typeof(acpi_finder=acpi_find)
ACPI table finder.
Definition acpi.c:48
#define build_assert(condition)
Assert a condition at build time (after dead code elimination).
Definition assert.h:88
union @104331263140136355135267063077374276003064103115 u
#define container_of(ptr, type, field)
Get containing structure.
Definition stddef.h:36
An ASN.1 object builder.
Definition asn1.h:29
An ASN.1 object cursor.
Definition asn1.h:21

References build_assert, container_of, typeof(), and u.

Referenced by icert_certs(), privkey_cursor(), pubkey_okx(), and pubkey_sign_okx().

◆ asn1_enter()

int asn1_enter ( struct asn1_cursor * cursor,
unsigned int type )
extern

Enter ASN.1 object.

Parameters
cursorASN.1 object cursor
typeExpected type, or ASN1_ANY
Return values
rcReturn status code

The object cursor will be updated to point to the body of the current ASN.1 object.

If any error occurs, the object cursor will be invalidated.

Definition at line 241 of file asn1.c.

241 {
242 int len;
243
244 /* Parse current object */
245 len = asn1_start ( cursor, type );
246 if ( len < 0 ) {
247 asn1_invalidate_cursor ( cursor );
248 return len;
249 }
250
251 /* Update cursor */
252 if ( ( ( size_t ) len ) <= cursor->len )
253 cursor->len = len;
254
255 DBGC ( cursor, "ASN1 %p entered object type %02x (len %x)\n",
256 cursor, type, len );
257 return 0;
258}
static int asn1_start(struct asn1_cursor *cursor, unsigned int type)
Start parsing ASN.1 object.
Definition asn1.c:175
static void asn1_invalidate_cursor(struct asn1_cursor *cursor)
Invalidate ASN.1 object cursor.
Definition asn1.h:475
ring len
Length.
Definition dwmac.h:226
#define DBGC(...)
Definition compiler.h:530

References asn1_invalidate_cursor(), asn1_start(), DBGC, asn1_cursor::len, len, and type.

Referenced by asn1_algorithm(), asn1_boolean(), asn1_curve_algorithm(), asn1_enter_any(), asn1_enter_bits(), asn1_enter_unsigned(), asn1_generalized_time(), asn1_integer(), asn1_parse_cbc(), asn1_parse_gcm(), cms_parse(), cms_parse_certificates(), cms_parse_content_type(), cms_parse_encrypted(), cms_parse_enveloped(), cms_parse_identifier(), cms_parse_mac(), cms_parse_participant(), cms_parse_participants(), cms_parse_signed(), cms_parse_value(), ecdsa_parse_key(), ecdsa_verify(), ocsp_compare_responder_key_hash(), ocsp_parse_basic_response(), ocsp_parse_cert_id(), ocsp_parse_certs(), ocsp_parse_response(), ocsp_parse_response_bytes(), ocsp_parse_response_status(), ocsp_parse_response_type(), ocsp_parse_responses(), ocsp_parse_tbs_response_data(), ocsp_request(), rsa_parse_mod_exp(), validator_append(), x509_parse(), x509_parse_access_description(), x509_parse_authority_info_access(), x509_parse_basic_constraints(), x509_parse_common_name(), x509_parse_extended_key_usage(), x509_parse_extension(), x509_parse_extensions(), x509_parse_key_purpose(), x509_parse_ocsp(), x509_parse_public_key(), x509_parse_subject_alt_name(), x509_parse_tbscertificate(), x509_parse_validity(), and x509_parse_version().

◆ asn1_skip_if_exists()

int asn1_skip_if_exists ( struct asn1_cursor * cursor,
unsigned int type )
extern

Skip ASN.1 object if present.

Parameters
cursorASN.1 object cursor
typeExpected type, or ASN1_ANY
Return values
rcReturn status code

The object cursor will be updated to point to the next ASN.1 object.

If the expected type is not found, the object cursor will not be modified. If any other error occurs, the object cursor will be invalidated.

Definition at line 274 of file asn1.c.

274 {
275 int len;
276
277 /* Parse current object */
278 len = asn1_start ( cursor, type );
279 if ( len < 0 )
280 return len;
281
282 /* Update cursor */
283 cursor->data += len;
284 cursor->len -= len;
285
286 DBGC ( cursor, "ASN1 %p skipped object type %02x (len %x)\n",
287 cursor, type, len );
288 return 0;
289}

References asn1_start(), asn1_cursor::data, DBGC, asn1_cursor::len, len, and type.

Referenced by asn1_skip(), cms_parse_enveloped(), cms_parse_participant(), cms_parse_signed(), and ocsp_parse_tbs_response_data().

◆ asn1_skip()

int asn1_skip ( struct asn1_cursor * cursor,
unsigned int type )
extern

Skip ASN.1 object.

Parameters
cursorASN.1 object cursor
typeExpected type, or ASN1_ANY
Return values
rcReturn status code

The object cursor will be updated to point to the next ASN.1 object.

If any error occurs, the object cursor will be invalidated.

Definition at line 303 of file asn1.c.

303 {
304 int rc;
305
306 if ( ( rc = asn1_skip_if_exists ( cursor, type ) ) != 0 ) {
307 asn1_invalidate_cursor ( cursor );
308 return rc;
309 }
310
311 return 0;
312}
struct arbelprm_rc_send_wqe rc
Definition arbel.h:3
int asn1_skip_if_exists(struct asn1_cursor *cursor, unsigned int type)
Skip ASN.1 object if present.
Definition asn1.c:274

References asn1_invalidate_cursor(), asn1_skip_if_exists(), rc, and type.

Referenced by asn1_skip_any(), cms_parse_encrypted(), cms_parse_enveloped(), cms_parse_participant(), cms_parse_signed(), der_image_probe(), ecdsa_parse_key(), ocsp_parse_cert_id(), ocsp_request(), and rsa_parse_mod_exp().

◆ asn1_shrink()

int asn1_shrink ( struct asn1_cursor * cursor,
unsigned int type )
extern

Shrink ASN.1 cursor to fit object.

Parameters
cursorASN.1 object cursor
typeExpected type, or ASN1_ANY
Return values
rcReturn status code

The object cursor will be shrunk to contain only the current ASN.1 object.

If any error occurs, the object cursor will be invalidated.

Definition at line 326 of file asn1.c.

326 {
327 struct asn1_cursor temp;
328 const void *end;
329 int len;
330
331 /* Find end of object */
332 memcpy ( &temp, cursor, sizeof ( temp ) );
333 len = asn1_start ( &temp, type );
334 if ( len < 0 ) {
335 asn1_invalidate_cursor ( cursor );
336 return len;
337 }
338 end = ( temp.data + len );
339
340 /* Shrink original cursor to contain only its first object */
341 cursor->len = ( end - cursor->data );
342
343 return 0;
344}
void * memcpy(void *dest, const void *src, size_t len) __nonnull
uint32_t end
Ending offset.
Definition netvsc.h:7

References asn1_invalidate_cursor(), asn1_start(), asn1_cursor::data, end, asn1_cursor::len, len, memcpy(), and type.

Referenced by asn1_shrink_any(), cms_parse_identifier(), ocsp_parse_cert_id(), x509_parse_issuer(), and x509_parse_serial().

◆ asn1_enter_any()

int asn1_enter_any ( struct asn1_cursor * cursor)
extern

Enter ASN.1 object of any type.

Parameters
cursorASN.1 object cursor
Return values
rcReturn status code

Definition at line 352 of file asn1.c.

352 {
353 return asn1_enter ( cursor, ASN1_ANY );
354}
int asn1_enter(struct asn1_cursor *cursor, unsigned int type)
Enter ASN.1 object.
Definition asn1.c:241
#define ASN1_ANY
ASN.1 "any tag" magic value.
Definition asn1.h:102

References ASN1_ANY, and asn1_enter().

Referenced by ecdsa_parse_key(), ocsp_parse_responder_id(), x509_check_alt_name(), and x509_parse_common_name().

◆ asn1_skip_any()

◆ asn1_shrink_any()

int asn1_shrink_any ( struct asn1_cursor * cursor)
extern

Shrink ASN.1 object of any type.

Parameters
cursorASN.1 object cursor
Return values
rcReturn status code

Definition at line 372 of file asn1.c.

372 {
373 return asn1_shrink ( cursor, ASN1_ANY );
374}
int asn1_shrink(struct asn1_cursor *cursor, unsigned int type)
Shrink ASN.1 cursor to fit object.
Definition asn1.c:326

References ASN1_ANY, and asn1_shrink().

Referenced by cms_message(), der_asn1(), ocsp_parse_tbs_response_data(), x509_certificate(), x509_parse_public_key(), x509_parse_subject(), and x509_parse_tbscertificate().

◆ asn1_enter_bits()

int asn1_enter_bits ( struct asn1_cursor * cursor,
unsigned int * unused )
extern

Enter ASN.1 bit string.

Parameters
cursorASN.1 cursor
unusedUnused bits to fill in (or NULL to require all used)
Return values
rcReturn status code

Definition at line 383 of file asn1.c.

383 {
384 const struct {
386 uint8_t data[0];
387 } __attribute__ (( packed )) *bit_string;
388 const uint8_t *last;
389 unsigned int unused_bits;
390 int rc;
391
392 /* Enter bit string */
393 if ( ( rc = asn1_enter ( cursor, ASN1_BIT_STRING ) ) != 0 )
394 return rc;
395
396 /* Check that bit string header exists */
397 if ( cursor->len < sizeof ( *bit_string ) ) {
398 DBGC ( cursor, "ASN1 %p invalid bit string:\n", cursor );
399 DBGC_HDA ( cursor, 0, cursor->data, cursor->len );
400 asn1_invalidate_cursor ( cursor );
401 return -EINVAL_BIT_STRING;
402 }
403 bit_string = cursor->data;
404 last = ( cursor->data + cursor->len - 1 );
405 cursor->data = &bit_string->data;
406 cursor->len -= offsetof ( typeof ( *bit_string ), data );
407 unused_bits = bit_string->unused;
408
409 /* Check validity of unused bits */
410 if ( ( unused_bits >= 8 ) ||
411 ( ( unused_bits > 0 ) && ( cursor->len == 0 ) ) ||
412 ( ( *last & ( 0xffU >> ( 8 - unused_bits ) ) ) != 0 ) ) {
413 DBGC ( cursor, "ASN1 %p invalid bit string:\n", cursor );
414 DBGC_HDA ( cursor, 0, cursor->data, cursor->len );
415 asn1_invalidate_cursor ( cursor );
416 return -EINVAL_BIT_STRING;
417 }
418
419 /* Record or check number of unused bits, as applicable */
420 if ( unused ) {
421 *unused = unused_bits;
422 } else if ( unused_bits ) {
423 DBGC ( cursor, "ASN1 %p invalid integral bit string:\n",
424 cursor );
425 DBGC_HDA ( cursor, 0, cursor->data, cursor->len );
426 asn1_invalidate_cursor ( cursor );
427 return -EINVAL_BIT_STRING;
428 }
429
430 return 0;
431}
#define EINVAL_BIT_STRING
Definition asn1.c:146
#define ASN1_BIT_STRING
ASN.1 bit string.
Definition asn1.h:66
uint8_t data[48]
Additional event data.
Definition ena.h:11
#define DBGC_HDA(...)
Definition compiler.h:531
#define __attribute__(x)
Definition compiler.h:10
uint8_t unused
Unused.
Definition librm.h:5
#define offsetof(type, field)
Get offset of a field within a structure.
Definition stddef.h:25

References __attribute__, ASN1_BIT_STRING, asn1_enter(), asn1_invalidate_cursor(), asn1_cursor::data, data, DBGC, DBGC_HDA, EINVAL_BIT_STRING, asn1_cursor::len, offsetof, rc, typeof(), and unused.

Referenced by ecdsa_parse_key(), ocsp_parse_basic_response(), rsa_parse_mod_exp(), x509_parse(), x509_parse_key_usage(), and x509_parse_public_key().

◆ asn1_enter_unsigned()

int asn1_enter_unsigned ( struct asn1_cursor * cursor)
extern

Enter ASN.1 unsigned integer.

Parameters
cursorASN.1 object cursor
Return values
rcReturn status code

Definition at line 439 of file asn1.c.

439 {
440 int rc;
441
442 /* Enter integer */
443 if ( ( rc = asn1_enter ( cursor, ASN1_INTEGER ) ) != 0 )
444 return rc;
445
446 /* Skip initial positive sign byte if applicable */
447 if ( ( cursor->len > 1 ) &&
448 ( *( ( uint8_t * ) cursor->data ) == 0x00 ) ) {
449 cursor->data++;
450 cursor->len--;
451 }
452
453 return 0;
454}
#define ASN1_INTEGER
ASN.1 integer.
Definition asn1.h:63

References asn1_enter(), ASN1_INTEGER, asn1_cursor::data, asn1_cursor::len, and rc.

Referenced by ecdsa_parse_signature(), and rsa_parse_mod_exp().

◆ asn1_boolean()

int asn1_boolean ( const struct asn1_cursor * cursor)
extern

Parse value of ASN.1 boolean.

Parameters
cursorASN.1 object cursor
Return values
valueValue, or negative error

Definition at line 462 of file asn1.c.

462 {
463 struct asn1_cursor contents;
464 const struct {
466 } __attribute__ (( packed )) *boolean;
467
468 /* Enter boolean */
469 memcpy ( &contents, cursor, sizeof ( contents ) );
470 asn1_enter ( &contents, ASN1_BOOLEAN );
471 if ( contents.len != sizeof ( *boolean ) )
472 return -EINVAL_ASN1_BOOLEAN;
473
474 /* Extract value */
475 boolean = contents.data;
476 return boolean->value;
477}
#define EINVAL_ASN1_BOOLEAN
Definition asn1.c:130
#define ASN1_BOOLEAN
ASN.1 boolean.
Definition asn1.h:60

References __attribute__, ASN1_BOOLEAN, asn1_enter(), asn1_cursor::data, EINVAL_ASN1_BOOLEAN, asn1_cursor::len, memcpy(), and value.

Referenced by x509_parse_basic_constraints(), and x509_parse_extension().

◆ asn1_integer()

int asn1_integer ( const struct asn1_cursor * cursor,
int * value )
extern

Parse value of ASN.1 integer.

Parameters
cursorASN.1 object cursor
valueValue to fill in
Return values
rcReturn status code

Definition at line 486 of file asn1.c.

486 {
487 struct asn1_cursor contents;
488 uint8_t high_byte;
489 int rc;
490
491 /* Enter integer */
492 memcpy ( &contents, cursor, sizeof ( contents ) );
493 if ( ( rc = asn1_enter ( &contents, ASN1_INTEGER ) ) != 0 )
494 return rc;
495 if ( contents.len < 1 )
496 return -EINVAL_ASN1_INTEGER;
497
498 /* Initialise value according to sign byte */
499 *value = *( ( int8_t * ) contents.data );
500 contents.data++;
501 contents.len--;
502
503 /* Process value */
504 while ( contents.len ) {
505 high_byte = ( (*value) >> ( 8 * ( sizeof ( *value ) - 1 ) ) );
506 if ( ( high_byte != 0x00 ) && ( high_byte != 0xff ) ) {
507 DBGC ( cursor, "ASN1 %p integer overflow\n", cursor );
508 return -EINVAL_ASN1_INTEGER;
509 }
510 *value = ( ( *value << 8 ) | *( ( uint8_t * ) contents.data ) );
511 contents.data++;
512 contents.len--;
513 }
514
515 return 0;
516}
signed char int8_t
Definition stdint.h:15
#define EINVAL_ASN1_INTEGER
Definition asn1.c:134

References asn1_enter(), ASN1_INTEGER, asn1_cursor::data, DBGC, EINVAL_ASN1_INTEGER, asn1_cursor::len, memcpy(), rc, and value.

Referenced by x509_parse_basic_constraints(), and x509_parse_version().

◆ asn1_compare()

int asn1_compare ( const struct asn1_cursor * cursor1,
const struct asn1_cursor * cursor2 )
extern

Compare two ASN.1 objects.

Parameters
cursor1ASN.1 object cursor
cursor2ASN.1 object cursor
Return values
differenceDifference as returned by memcmp()

Note that invalid and empty cursors will compare as equal with each other.

Definition at line 528 of file asn1.c.

529 {
530 int difference;
531
532 difference = ( cursor2->len - cursor1->len );
533 return ( difference ? difference :
534 memcmp ( cursor1->data, cursor2->data, cursor1->len ) );
535}
int memcmp(const void *first, const void *second, size_t len)
Compare memory regions.
Definition string.c:115

References asn1_cursor::data, asn1_cursor::len, and memcmp().

Referenced by asn1_find_algorithm(), cms_parse_content_type(), ocsp_compare_responder_name(), ocsp_parse_cert_id(), ocsp_parse_response_type(), pubkey_okx(), pubkey_sign_okx(), rsa_match(), x509_check_issuer(), x509_find(), x509_find_access_method(), x509_find_extension(), x509_find_issuer_serial(), x509_find_subject(), x509_is_self_signed(), x509_parse_common_name(), and x509_parse_key_purpose().

◆ asn1_algorithm()

int asn1_algorithm ( const struct asn1_cursor * cursor,
struct asn1_algorithm ** algorithm,
struct asn1_cursor * params )
extern

Parse ASN.1 OID-identified algorithm.

Parameters
cursorASN.1 object cursor
Return values
algorithmAlgorithm
paramsAlgorithm parameters, or NULL
rcReturn status code

Definition at line 564 of file asn1.c.

566 {
567 struct asn1_cursor contents;
568 int rc;
569
570 /* Enter algorithm */
571 memcpy ( &contents, cursor, sizeof ( contents ) );
572 asn1_enter ( &contents, ASN1_SEQUENCE );
573
574 /* Get raw parameters, if applicable */
575 if ( params ) {
576 memcpy ( params, &contents, sizeof ( *params ) );
577 asn1_skip_any ( params );
578 }
579
580 /* Enter algorithm identifier */
581 if ( ( rc = asn1_enter ( &contents, ASN1_OID ) ) != 0 ) {
582 DBGC ( cursor, "ASN1 %p cannot locate algorithm OID:\n",
583 cursor );
584 DBGC_HDA ( cursor, 0, cursor->data, cursor->len );
585 return -EINVAL_ASN1_ALGORITHM;
586 }
587
588 /* Identify algorithm */
589 *algorithm = asn1_find_algorithm ( &contents );
590 if ( ! *algorithm ) {
591 DBGC ( cursor, "ASN1 %p unrecognised algorithm:\n", cursor );
592 DBGC_HDA ( cursor, 0, cursor->data, cursor->len );
593 return -ENOTSUP_ALGORITHM;
594 }
595
596 /* Parse parameters, if applicable */
597 if ( params && (*algorithm)->parse &&
598 ( ( rc = (*algorithm)->parse ( *algorithm, params ) ) != 0 ) ) {
599 DBGC ( cursor, "ASN1 %p cannot parse %s parameters: %s\n",
600 cursor, (*algorithm)->name, strerror ( rc ) );
601 return rc;
602 }
603
604 return 0;
605}
int asn1_skip_any(struct asn1_cursor *cursor)
Skip ASN.1 object of any type.
Definition asn1.c:362
#define ENOTSUP_ALGORITHM
Definition asn1.c:150
#define EINVAL_ASN1_ALGORITHM
Definition asn1.c:142
static struct asn1_algorithm * asn1_find_algorithm(const struct asn1_cursor *cursor)
Identify ASN.1 algorithm by OID.
Definition asn1.c:545
#define ASN1_OID
ASN.1 object identifier.
Definition asn1.h:75
#define ASN1_SEQUENCE
ASN.1 sequence.
Definition asn1.h:90
u16 algorithm
Authentication algorithm (Open System or Shared Key).
Definition ieee80211.h:1
char * strerror(int errno)
Retrieve string representation of error number.
Definition strerror.c:79

References algorithm, asn1_enter(), asn1_find_algorithm(), ASN1_OID, ASN1_SEQUENCE, asn1_skip_any(), asn1_cursor::data, DBGC, DBGC_HDA, EINVAL_ASN1_ALGORITHM, ENOTSUP_ALGORITHM, asn1_cursor::len, memcpy(), rc, and strerror().

◆ asn1_pubkey_algorithm()

int asn1_pubkey_algorithm ( const struct asn1_cursor * cursor,
struct asn1_algorithm ** algorithm )
extern

Parse ASN.1 OID-identified public-key algorithm.

Parameters
cursorASN.1 object cursor
Return values
algorithmAlgorithm
rcReturn status code

Definition at line 614 of file asn1.c.

615 {
616 int rc;
617
618 /* Parse algorithm */
619 if ( ( rc = asn1_algorithm ( cursor, algorithm, NULL ) ) != 0 )
620 return rc;
621
622 /* Check algorithm has a public key */
623 if ( ! (*algorithm)->pubkey ) {
624 DBGC ( cursor, "ASN1 %p algorithm %s is not a public-key "
625 "algorithm:\n", cursor, (*algorithm)->name );
626 DBGC_HDA ( cursor, 0, cursor->data, cursor->len );
627 return -ENOTTY_ALGORITHM;
628 }
629
630 return 0;
631}
#define NULL
NULL pointer (VOID *).
Definition Base.h:321
#define ENOTTY_ALGORITHM
Definition asn1.c:154
An ASN.1 OID-identified algorithm.
Definition asn1.h:414

References algorithm, asn1_cursor::data, DBGC, DBGC_HDA, ENOTTY_ALGORITHM, asn1_cursor::len, NULL, and rc.

Referenced by cms_parse_pubkey_algorithm(), and x509_parse_public_key().

◆ asn1_digest_algorithm()

int asn1_digest_algorithm ( const struct asn1_cursor * cursor,
struct asn1_algorithm ** algorithm )
extern

Parse ASN.1 OID-identified digest algorithm.

Parameters
cursorASN.1 object cursor
Return values
algorithmAlgorithm
rcReturn status code

Definition at line 640 of file asn1.c.

641 {
642 int rc;
643
644 /* Parse algorithm */
645 if ( ( rc = asn1_algorithm ( cursor, algorithm, NULL ) ) != 0 )
646 return rc;
647
648 /* Check algorithm has a digest */
649 if ( ! (*algorithm)->digest ) {
650 DBGC ( cursor, "ASN1 %p algorithm %s is not a digest "
651 "algorithm:\n", cursor, (*algorithm)->name );
652 DBGC_HDA ( cursor, 0, cursor->data, cursor->len );
653 return -ENOTTY_ALGORITHM;
654 }
655
656 return 0;
657}

References algorithm, asn1_cursor::data, DBGC, DBGC_HDA, ENOTTY_ALGORITHM, asn1_cursor::len, NULL, and rc.

Referenced by cms_parse_digest_algorithm().

◆ asn1_cipher_algorithm()

int asn1_cipher_algorithm ( const struct asn1_cursor * cursor,
struct asn1_algorithm ** algorithm,
struct asn1_cursor * params )
extern

Parse ASN.1 OID-identified cipher algorithm.

Parameters
cursorASN.1 object cursor
Return values
algorithmAlgorithm
paramsAlgorithm parameters, or NULL
rcReturn status code

Definition at line 667 of file asn1.c.

669 {
670 int rc;
671
672 /* Parse algorithm */
673 if ( ( rc = asn1_algorithm ( cursor, algorithm, params ) ) != 0 )
674 return rc;
675
676 /* Check algorithm has a cipher */
677 if ( ! (*algorithm)->cipher ) {
678 DBGC ( cursor, "ASN1 %p algorithm %s is not a cipher "
679 "algorithm:\n", cursor, (*algorithm)->name );
680 DBGC_HDA ( cursor, 0, cursor->data, cursor->len );
681 return -ENOTTY_ALGORITHM;
682 }
683
684 return 0;
685}

References algorithm, asn1_cursor::data, DBGC, DBGC_HDA, ENOTTY_ALGORITHM, asn1_cursor::len, and rc.

Referenced by cms_parse_cipher_algorithm().

◆ asn1_signature_algorithm()

int asn1_signature_algorithm ( const struct asn1_cursor * cursor,
struct asn1_algorithm ** algorithm )
extern

Parse ASN.1 OID-identified signature algorithm.

Parameters
cursorASN.1 object cursor
Return values
algorithmAlgorithm
rcReturn status code

Definition at line 694 of file asn1.c.

695 {
696 int rc;
697
698 /* Parse algorithm */
699 if ( ( rc = asn1_algorithm ( cursor, algorithm, NULL ) ) != 0 )
700 return rc;
701
702 /* Check algorithm has a public key */
703 if ( ! (*algorithm)->pubkey ) {
704 DBGC ( cursor, "ASN1 %p algorithm %s is not a signature "
705 "algorithm:\n", cursor, (*algorithm)->name );
706 DBGC_HDA ( cursor, 0, cursor->data, cursor->len );
707 return -ENOTTY_ALGORITHM;
708 }
709
710 /* Check algorithm has a digest */
711 if ( ! (*algorithm)->digest ) {
712 DBGC ( cursor, "ASN1 %p algorithm %s is not a signature "
713 "algorithm:\n", cursor, (*algorithm)->name );
714 DBGC_HDA ( cursor, 0, cursor->data, cursor->len );
715 return -ENOTTY_ALGORITHM;
716 }
717
718 return 0;
719}

References algorithm, asn1_cursor::data, DBGC, DBGC_HDA, ENOTTY_ALGORITHM, asn1_cursor::len, NULL, and rc.

Referenced by ocsp_parse_basic_response(), x509_parse(), and x509_parse_tbscertificate().

◆ asn1_curve_algorithm()

int asn1_curve_algorithm ( const struct asn1_cursor * cursor,
struct asn1_algorithm * wrapper,
struct asn1_algorithm ** algorithm )
extern

Parse ASN.1 OID-identified elliptic curve algorithm.

Parameters
cursorASN.1 object cursor
wrapperOptional wrapper algorithm, or NULL
Return values
algorithmAlgorithm
rcReturn status code

Definition at line 729 of file asn1.c.

731 {
732 struct asn1_cursor curve;
733
734 /* Elliptic curves are identified as either:
735 *
736 * - a wrapper algorithm "id-ecPublicKey" with the actual
737 * curve specified in the algorithm parameters, or
738 *
739 * - a standalone object identifier for the curve
740 */
741 if ( ( wrapper == NULL ) ||
742 ( asn1_check_algorithm ( cursor, wrapper, &curve ) != 0 ) ) {
743 memcpy ( &curve, cursor, sizeof ( curve ) );
744 }
745
746 /* Identify curve */
747 asn1_enter ( &curve, ASN1_OID );
748 *algorithm = asn1_find_algorithm ( &curve );
749 if ( ! *algorithm ) {
750 DBGC ( cursor, "ASN1 %p unrecognised EC algorithm:\n",
751 cursor );
752 DBGC_HDA ( cursor, 0, cursor->data, cursor->len );
753 return -ENOTSUP_ALGORITHM;
754 }
755
756 /* Check algorithm has an elliptic curve */
757 if ( ! (*algorithm)->curve ) {
758 DBGC ( cursor, "ASN1 %p algorithm %s is not an elliptic curve "
759 "algorithm:\n", cursor, (*algorithm)->name );
760 DBGC_HDA ( cursor, 0, cursor->data, cursor->len );
761 return -ENOTTY_ALGORITHM;
762 }
763
764 return 0;
765}
int asn1_check_algorithm(const struct asn1_cursor *cursor, struct asn1_algorithm *expected, struct asn1_cursor *params)
Check ASN.1 OID-identified algorithm.
Definition asn1.c:775

References algorithm, asn1_check_algorithm(), asn1_enter(), asn1_find_algorithm(), ASN1_OID, asn1_cursor::data, DBGC, DBGC_HDA, ENOTSUP_ALGORITHM, ENOTTY_ALGORITHM, asn1_cursor::len, memcpy(), and NULL.

Referenced by ecdsa_parse_key().

◆ asn1_check_algorithm()

int asn1_check_algorithm ( const struct asn1_cursor * cursor,
struct asn1_algorithm * expected,
struct asn1_cursor * params )
extern

Check ASN.1 OID-identified algorithm.

Parameters
cursorASN.1 object cursor
expectedExpected algorithm
Return values
paramsAlgorithm parameters, or NULL
rcReturn status code

Definition at line 775 of file asn1.c.

777 {
778 struct asn1_algorithm *actual;
779 int rc;
780
781 /* Parse algorithm */
782 if ( ( rc = asn1_algorithm ( cursor, &actual, params ) ) != 0 )
783 return rc;
784
785 /* Check algorithm matches */
786 if ( actual != expected ) {
787 DBGC ( cursor, "ASN1 %p algorithm %s does not match %s\n",
788 cursor, actual->name, expected->name );
789 return -ENOTTY_ALGORITHM;
790 }
791
792 return 0;
793}
const char * name
Name.
Definition asn1.h:416

References DBGC, ENOTTY_ALGORITHM, asn1_algorithm::name, and rc.

Referenced by asn1_curve_algorithm(), and rsa_parse_mod_exp().

◆ asn1_parse_cbc()

int asn1_parse_cbc ( struct asn1_algorithm * algorithm,
struct asn1_cursor * params )
extern

Parse ASN.1 CBC cipher parameters.

Parameters
algorithmAlgorithm
paramParameters to parse
Return values
rcReturn status code

Definition at line 802 of file asn1.c.

803 {
804 struct cipher_algorithm *cipher = algorithm->cipher;
805
806 /* Sanity check */
807 assert ( cipher != NULL );
808
809 /* Enter parameters */
810 asn1_enter ( params, ASN1_OCTET_STRING );
811
812 /* Check length */
813 if ( params->len != cipher->blocksize )
814 return -EINVAL;
815
816 return 0;
817}
#define ASN1_OCTET_STRING
ASN.1 octet string.
Definition asn1.h:69
#define assert(condition)
Assert a condition at run-time.
Definition assert.h:61
#define EINVAL
Invalid argument.
Definition errno.h:472
A cipher algorithm.
Definition crypto.h:58
size_t blocksize
Block size.
Definition crypto.h:68

References algorithm, asn1_enter(), ASN1_OCTET_STRING, assert, cipher_algorithm::blocksize, EINVAL, asn1_cursor::len, and NULL.

◆ asn1_parse_gcm()

int asn1_parse_gcm ( struct asn1_algorithm * algorithm,
struct asn1_cursor * params )
extern

References algorithm, data, extra, len, and type.

◆ asn1_generalized_time()

int asn1_generalized_time ( const struct asn1_cursor * cursor,
time_t * time )
extern

Parse ASN.1 GeneralizedTime.

Parameters
cursorASN.1 cursor
timeTime to fill in
Return values
rcReturn status code

RFC 5280 section 4.1.2.5 places several restrictions on the allowed formats for UTCTime and GeneralizedTime, and mandates the interpretation of centuryless year values.

Definition at line 847 of file asn1.c.

847 {
848 struct asn1_cursor contents;
849 unsigned int have_century;
850 unsigned int type;
851 union {
852 struct {
856 uint8_t day;
857 uint8_t hour;
858 uint8_t minute;
859 uint8_t second;
860 } __attribute__ (( packed )) named;
861 uint8_t raw[7];
862 } pairs;
863 struct tm tm;
864 const uint8_t *data;
865 size_t remaining;
866 unsigned int tens;
867 unsigned int units;
868 unsigned int i;
869 int rc;
870
871 /* Determine time format utcTime/generalizedTime */
872 memcpy ( &contents, cursor, sizeof ( contents ) );
873 type = asn1_type ( &contents );
874 switch ( type ) {
875 case ASN1_UTC_TIME:
876 have_century = 0;
877 break;
879 have_century = 1;
880 break;
881 default:
882 DBGC ( cursor, "ASN1 %p invalid time type %02x\n",
883 cursor, type );
884 DBGC_HDA ( cursor, 0, cursor->data, cursor->len );
885 return -EINVAL_ASN1_TIME;
886 }
887
888 /* Enter utcTime/generalizedTime */
889 if ( ( rc = asn1_enter ( &contents, type ) ) != 0 ) {
890 DBGC ( cursor, "ASN1 %p cannot locate %s time:\n", cursor,
891 ( ( type == ASN1_UTC_TIME ) ? "UTC" : "generalized" ) );
892 DBGC_HDA ( cursor, 0, cursor->data, cursor->len );
893 return rc;
894 }
895
896 /* Parse digit string a pair at a time */
897 memset ( &pairs, 0, sizeof ( pairs ) );
898 data = contents.data;
899 remaining = contents.len;
900 for ( i = ( have_century ? 0 : 1 ) ; i < sizeof ( pairs.raw ) ; i++ ) {
901 if ( remaining < 2 ) {
902 /* Some certificates violate the X.509 RFC by
903 * omitting the "seconds" value.
904 */
905 if ( i == ( sizeof ( pairs.raw ) - 1 ) )
906 break;
907 DBGC ( cursor, "ASN1 %p invalid time:\n", cursor );
908 DBGC_HDA ( cursor, 0, cursor->data, cursor->len );
909 return -EINVAL_ASN1_TIME;
910 }
911 tens = data[0];
912 units = data[1];
913 if ( ! ( isdigit ( tens ) && isdigit ( units ) ) ) {
914 DBGC ( cursor, "ASN1 %p invalid time:\n", cursor );
915 DBGC_HDA ( cursor, 0, cursor->data, cursor->len );
916 return -EINVAL_ASN1_TIME;
917 }
918 pairs.raw[i] = ( ( 10 * ( tens - '0' ) ) + ( units - '0' ) );
919 data += 2;
920 remaining -= 2;
921 }
922
923 /* Determine century if applicable */
924 if ( ! have_century )
925 pairs.named.century = ( ( pairs.named.year >= 50 ) ? 19 : 20 );
926
927 /* Check for trailing "Z" */
928 if ( ( remaining != 1 ) || ( data[0] != 'Z' ) ) {
929 DBGC ( cursor, "ASN1 %p invalid time:\n", cursor );
930 DBGC_HDA ( cursor, 0, cursor->data, cursor->len );
931 return -EINVAL_ASN1_TIME;
932 }
933
934 /* Fill in time */
935 tm.tm_year = ( ( ( pairs.named.century - 19 ) * 100 ) +
936 pairs.named.year );
937 tm.tm_mon = ( pairs.named.month - 1 );
938 tm.tm_mday = pairs.named.day;
939 tm.tm_hour = pairs.named.hour;
940 tm.tm_min = pairs.named.minute;
941 tm.tm_sec = pairs.named.second;
942
943 /* Convert to seconds since the Epoch */
944 *time = mktime ( &tm );
945
946 return 0;
947}
__be32 raw[7]
Definition CIB_PRM.h:0
#define EINVAL_ASN1_TIME
Definition asn1.c:138
#define ASN1_UTC_TIME
ASN.1 UTC time.
Definition asn1.h:84
#define ASN1_GENERALIZED_TIME
ASN.1 generalized time.
Definition asn1.h:87
static unsigned int asn1_type(const struct asn1_cursor *cursor)
Extract ASN.1 type.
Definition asn1.h:486
static int isdigit(int character)
Check if character is a decimal digit.
Definition ctype.h:30
void * memset(void *dest, int character, size_t len) __nonnull
Broken-down time.
Definition time.h:16
int tm_mon
Month of year [0,11].
Definition time.h:26
int tm_year
Years since 1900.
Definition time.h:28
int tm_hour
Hour [0,23].
Definition time.h:22
int tm_sec
Seconds [0,60].
Definition time.h:18
int tm_mday
Day of month [1,31].
Definition time.h:24
int tm_min
Minutes [0,59].
Definition time.h:20
time_t mktime(struct tm *tm)
Calculate seconds since the Epoch.
Definition time.c:119
uint8_t month
Month (BCD).
Definition ucode.h:7
uint8_t day
Day (BCD).
Definition ucode.h:5
uint8_t year
Year (BCD).
Definition ucode.h:1
uint8_t century
Century (BCD).
Definition ucode.h:3

References __attribute__, asn1_enter(), ASN1_GENERALIZED_TIME, asn1_type(), ASN1_UTC_TIME, century, asn1_cursor::data, data, day, DBGC, DBGC_HDA, EINVAL_ASN1_TIME, isdigit(), asn1_cursor::len, memcpy(), memset(), mktime(), month, raw, rc, tm::tm_hour, tm::tm_mday, tm::tm_min, tm::tm_mon, tm::tm_sec, tm::tm_year, type, and year.

Referenced by ocsp_parse_responses(), and x509_parse_validity().

◆ asn1_grow()

int asn1_grow ( struct asn1_builder * builder,
size_t extra )
extern

Grow ASN.1 builder.

Parameters
builderASN.1 builder
extraExtra space to prepend
Return values
rcReturn status code

Definition at line 986 of file asn1.c.

986 {
987 size_t new_len;
988 void *new;
989
990 /* As with the ASN1 parsing functions, make errors permanent */
991 if ( builder->len && ! builder->data )
992 return -ENOMEM;
993
994 /* Reallocate data buffer */
995 new_len = ( builder->len + extra );
996 new = realloc ( builder->data, new_len );
997 if ( ! new ) {
998 zfree ( builder->data );
999 builder->data = NULL;
1000 return -ENOMEM;
1001 }
1002 builder->data = new;
1003
1004 /* Move existing data to end of buffer */
1005 memmove ( ( builder->data + extra ), builder->data, builder->len );
1006 builder->len = new_len;
1007
1008 return 0;
1009}
#define ENOMEM
Not enough space.
Definition errno.h:578
uint8_t extra
Signature extra byte.
Definition smbios.h:6
void * memmove(void *dest, const void *src, size_t len) __nonnull
void * realloc(void *old_ptr, size_t new_size)
Reallocate memory.
Definition malloc.c:663
void zfree(void *ptr)
Clear and free memory.
Definition malloc.c:738
void * data
Data.
Definition asn1.h:36
size_t len
Length of data.
Definition asn1.h:38

References asn1_builder::data, ENOMEM, extra, asn1_builder::len, memmove(), NULL, realloc(), and zfree().

Referenced by asn1_prepend(), asn1_prepend_raw(), asn1_wrap(), rsa_pkcs1_decrypt(), rsa_pkcs1_encrypt(), and rsa_sign().

◆ asn1_prepend_raw()

int asn1_prepend_raw ( struct asn1_builder * builder,
const void * data,
size_t len )
extern

Prepend raw data to ASN.1 builder.

Parameters
builderASN.1 builder
dataData to prepend
lenLength of data to prepend
Return values
rcReturn status code

Definition at line 1019 of file asn1.c.

1020 {
1021 int rc;
1022
1023 /* Grow buffer */
1024 if ( ( rc = asn1_grow ( builder, len ) ) != 0 )
1025 return rc;
1026
1027 /* Populate data buffer */
1028 memcpy ( builder->data, data, len );
1029
1030 return 0;
1031}
int asn1_grow(struct asn1_builder *builder, size_t extra)
Grow ASN.1 builder.
Definition asn1.c:986

References asn1_grow(), asn1_builder::data, data, len, memcpy(), and rc.

Referenced by icert_cert(), icert_certs(), ocsp_request(), tls_send_certificate_verify(), and tls_send_client_key_exchange_pubkey().

◆ asn1_prepend()

int asn1_prepend ( struct asn1_builder * builder,
unsigned int type,
const void * data,
size_t len )
extern

Prepend data to ASN.1 builder.

Parameters
builderASN.1 builder
typeType
dataData to prepend
lenLength of data to prepend
Return values
rcReturn status code

Definition at line 1042 of file asn1.c.

1043 {
1045 size_t header_len;
1046 int rc;
1047
1048 /* Construct header */
1049 header_len = asn1_header ( &header, type, len );
1050
1051 /* Grow buffer */
1052 if ( ( rc = asn1_grow ( builder, header_len + len ) ) != 0 )
1053 return rc;
1054
1055 /* Populate data buffer */
1056 memcpy ( builder->data, &header, header_len );
1057 memcpy ( ( builder->data + header_len ), data, len );
1058
1059 return 0;
1060}
static size_t asn1_header(struct asn1_builder_header *header, unsigned int type, size_t len)
Construct ASN.1 header.
Definition asn1.c:957
struct ena_llq_option header
Header locations.
Definition ena.h:5
An ASN.1 header.
Definition asn1.h:49

References asn1_grow(), asn1_header(), asn1_builder::data, data, header, len, memcpy(), rc, and type.

Referenced by ecdsa_prepend_signature(), icert_certs(), and ocsp_request().

◆ asn1_wrap()

int asn1_wrap ( struct asn1_builder * builder,
unsigned int type )
extern

Wrap ASN.1 builder.

Parameters
builderASN.1 builder
typeType
Return values
rcReturn status code

Definition at line 1069 of file asn1.c.

1069 {
1071 size_t header_len;
1072 int rc;
1073
1074 /* Construct header */
1075 header_len = asn1_header ( &header, type, builder->len );
1076
1077 /* Grow buffer */
1078 if ( ( rc = asn1_grow ( builder, header_len ) ) != 0 )
1079 return rc;
1080
1081 /* Populate data buffer */
1082 memcpy ( builder->data, &header, header_len );
1083
1084 return 0;
1085}

References asn1_grow(), asn1_header(), asn1_builder::data, header, asn1_builder::len, memcpy(), rc, and type.

Referenced by ecdsa_sign(), icert_cert(), icert_certs(), and ocsp_request().

Variable Documentation

◆ __asn1_algorithm

struct asn1_algorithm ecpubkey_algorithm __asn1_algorithm
extern

Generic elliptic curve container algorithm.

The actual curve to be used is identified via the algorithm parameters, rather than the top-level OID.

Generic elliptic curve container algorithm.

Generic elliptic curve container algorithm.

"aes256-cbc" OID-identified algorithm

"aes192-cbc" OID-identified algorithm

Generic elliptic curve container algorithm.

"aes256-gcm" OID-identified algorithm

"aes192-gcm" OID-identified algorithm

Definition at line 446 of file asn1.h.