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_HIGH   0x1f
 ASN.1 high tag number.
#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_SHA512_224WITHRSAENCRYPTION
 ASN.1 OID for sha512-224WithRSAEncryption (1.2.840.113549.1.1.15).
#define ASN1_OID_SHA512_256WITHRSAENCRYPTION
 ASN.1 OID for sha512-256WithRSAEncryption (1.2.840.113549.1.1.16).
#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.
size_t asn1_header_len (size_t len)
 Calculate ASN.1 header length.
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_HIGH

#define ASN1_HIGH   0x1f

ASN.1 high tag number.

Definition at line 90 of file asn1.h.

Referenced by asn1_start().

◆ ASN1_SEQUENCE

◆ ASN1_SET

#define ASN1_SET   0x31

ASN.1 set.

Definition at line 96 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 99 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 105 of file asn1.h.

Referenced by asn1_enter_any(), asn1_header_len(), 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 108 of file asn1.h.

108#define ASN1_SHORT( tag, ... ) \
109 (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 112 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 118 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:118

Double-byte OID value.

Valid for values up to 16383

Definition at line 124 of file asn1.h.

124#define ASN1_OID_DOUBLE( value ) \
125 ( 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:124

Double-byte OID value.

Valid for values up to 2097151

Definition at line 131 of file asn1.h.

131#define ASN1_OID_TRIPLE( value ) \
132 ( 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:112

ASN.1 OID for ecPublicKey (1.2.840.10045.2.1).

Definition at line 135 of file asn1.h.

135#define ASN1_OID_ECPUBLICKEY \
136 ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \
137 ASN1_OID_DOUBLE ( 10045 ), ASN1_OID_SINGLE ( 2 ), \
138 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 141 of file asn1.h.

141#define ASN1_OID_PRIME256V1 \
142 ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \
143 ASN1_OID_DOUBLE ( 10045 ), ASN1_OID_SINGLE ( 3 ), \
144 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 147 of file asn1.h.

147#define ASN1_OID_ECDSA_WITH_SHA224 \
148 ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \
149 ASN1_OID_DOUBLE ( 10045 ), ASN1_OID_SINGLE ( 4 ), \
150 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 153 of file asn1.h.

153#define ASN1_OID_ECDSA_WITH_SHA256 \
154 ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \
155 ASN1_OID_DOUBLE ( 10045 ), ASN1_OID_SINGLE ( 4 ), \
156 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 159 of file asn1.h.

159#define ASN1_OID_ECDSA_WITH_SHA384 \
160 ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \
161 ASN1_OID_DOUBLE ( 10045 ), ASN1_OID_SINGLE ( 4 ), \
162 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 165 of file asn1.h.

165#define ASN1_OID_ECDSA_WITH_SHA512 \
166 ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \
167 ASN1_OID_DOUBLE ( 10045 ), ASN1_OID_SINGLE ( 4 ), \
168 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 171 of file asn1.h.

171#define ASN1_OID_RSAENCRYPTION \
172 ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \
173 ASN1_OID_TRIPLE ( 113549 ), ASN1_OID_SINGLE ( 1 ), \
174 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 177 of file asn1.h.

177#define ASN1_OID_MD5WITHRSAENCRYPTION \
178 ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \
179 ASN1_OID_TRIPLE ( 113549 ), ASN1_OID_SINGLE ( 1 ), \
180 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 183 of file asn1.h.

183#define ASN1_OID_SHA1WITHRSAENCRYPTION \
184 ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \
185 ASN1_OID_TRIPLE ( 113549 ), ASN1_OID_SINGLE ( 1 ), \
186 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 189 of file asn1.h.

189#define ASN1_OID_RSASSA_PSS \
190 ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \
191 ASN1_OID_TRIPLE ( 113549 ), ASN1_OID_SINGLE ( 1 ), \
192 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 195 of file asn1.h.

195#define ASN1_OID_SHA256WITHRSAENCRYPTION \
196 ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \
197 ASN1_OID_TRIPLE ( 113549 ), ASN1_OID_SINGLE ( 1 ), \
198 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 201 of file asn1.h.

201#define ASN1_OID_SHA384WITHRSAENCRYPTION \
202 ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \
203 ASN1_OID_TRIPLE ( 113549 ), ASN1_OID_SINGLE ( 1 ), \
204 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 207 of file asn1.h.

207#define ASN1_OID_SHA512WITHRSAENCRYPTION \
208 ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \
209 ASN1_OID_TRIPLE ( 113549 ), ASN1_OID_SINGLE ( 1 ), \
210 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 213 of file asn1.h.

213#define ASN1_OID_SHA224WITHRSAENCRYPTION \
214 ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \
215 ASN1_OID_TRIPLE ( 113549 ), ASN1_OID_SINGLE ( 1 ), \
216 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 14 )

◆ ASN1_OID_SHA512_224WITHRSAENCRYPTION

#define ASN1_OID_SHA512_224WITHRSAENCRYPTION
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 ( 15 )

ASN.1 OID for sha512-224WithRSAEncryption (1.2.840.113549.1.1.15).

Definition at line 219 of file asn1.h.

219#define ASN1_OID_SHA512_224WITHRSAENCRYPTION \
220 ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \
221 ASN1_OID_TRIPLE ( 113549 ), ASN1_OID_SINGLE ( 1 ), \
222 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 15 )

◆ ASN1_OID_SHA512_256WITHRSAENCRYPTION

#define ASN1_OID_SHA512_256WITHRSAENCRYPTION
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 ( 16 )

ASN.1 OID for sha512-256WithRSAEncryption (1.2.840.113549.1.1.16).

Definition at line 225 of file asn1.h.

225#define ASN1_OID_SHA512_256WITHRSAENCRYPTION \
226 ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \
227 ASN1_OID_TRIPLE ( 113549 ), ASN1_OID_SINGLE ( 1 ), \
228 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 16 )

◆ 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 231 of file asn1.h.

231#define ASN1_OID_MD4 \
232 ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \
233 ASN1_OID_TRIPLE ( 113549 ), ASN1_OID_SINGLE ( 2 ), \
234 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 237 of file asn1.h.

237#define ASN1_OID_MD5 \
238 ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \
239 ASN1_OID_TRIPLE ( 113549 ), ASN1_OID_SINGLE ( 2 ), \
240 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 243 of file asn1.h.

243#define ASN1_OID_SHA1 \
244 ASN1_OID_INITIAL ( 1, 3 ), ASN1_OID_SINGLE ( 14 ), \
245 ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 2 ), \
246 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 249 of file asn1.h.

249#define ASN1_OID_X25519 \
250 ASN1_OID_INITIAL ( 1, 3 ), ASN1_OID_SINGLE ( 101 ), \
251 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 254 of file asn1.h.

254#define ASN1_OID_SECP384R1 \
255 ASN1_OID_INITIAL ( 1, 3 ), ASN1_OID_DOUBLE ( 132 ), \
256 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 259 of file asn1.h.

259#define ASN1_OID_AES128_CBC \
260 ASN1_OID_INITIAL ( 2, 16 ), ASN1_OID_DOUBLE ( 840 ), \
261 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 101 ), \
262 ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 4 ), \
263 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 266 of file asn1.h.

266#define ASN1_OID_AES128_GCM \
267 ASN1_OID_INITIAL ( 2, 16 ), ASN1_OID_DOUBLE ( 840 ), \
268 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 101 ), \
269 ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 4 ), \
270 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 273 of file asn1.h.

273#define ASN1_OID_AES192_CBC \
274 ASN1_OID_INITIAL ( 2, 16 ), ASN1_OID_DOUBLE ( 840 ), \
275 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 101 ), \
276 ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 4 ), \
277 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 280 of file asn1.h.

280#define ASN1_OID_AES192_GCM \
281 ASN1_OID_INITIAL ( 2, 16 ), ASN1_OID_DOUBLE ( 840 ), \
282 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 101 ), \
283 ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 4 ), \
284 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 287 of file asn1.h.

287#define ASN1_OID_AES256_CBC \
288 ASN1_OID_INITIAL ( 2, 16 ), ASN1_OID_DOUBLE ( 840 ), \
289 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 101 ), \
290 ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 4 ), \
291 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 294 of file asn1.h.

294#define ASN1_OID_AES256_GCM \
295 ASN1_OID_INITIAL ( 2, 16 ), ASN1_OID_DOUBLE ( 840 ), \
296 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 101 ), \
297 ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 4 ), \
298 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 301 of file asn1.h.

301#define ASN1_OID_SHA256 \
302 ASN1_OID_INITIAL ( 2, 16 ), ASN1_OID_DOUBLE ( 840 ), \
303 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 101 ), \
304 ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 4 ), \
305 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 308 of file asn1.h.

308#define ASN1_OID_SHA384 \
309 ASN1_OID_INITIAL ( 2, 16 ), ASN1_OID_DOUBLE ( 840 ), \
310 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 101 ), \
311 ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 4 ), \
312 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 315 of file asn1.h.

315#define ASN1_OID_SHA512 \
316 ASN1_OID_INITIAL ( 2, 16 ), ASN1_OID_DOUBLE ( 840 ), \
317 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 101 ), \
318 ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 4 ), \
319 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 322 of file asn1.h.

322#define ASN1_OID_SHA224 \
323 ASN1_OID_INITIAL ( 2, 16 ), ASN1_OID_DOUBLE ( 840 ), \
324 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 101 ), \
325 ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 4 ), \
326 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 329 of file asn1.h.

329#define ASN1_OID_SHA512_224 \
330 ASN1_OID_INITIAL ( 2, 16 ), ASN1_OID_DOUBLE ( 840 ), \
331 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 101 ), \
332 ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 4 ), \
333 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 336 of file asn1.h.

336#define ASN1_OID_SHA512_256 \
337 ASN1_OID_INITIAL ( 2, 16 ), ASN1_OID_DOUBLE ( 840 ), \
338 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 101 ), \
339 ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 4 ), \
340 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 343 of file asn1.h.

343#define ASN1_OID_COMMON_NAME \
344 ASN1_OID_INITIAL ( 2, 5 ), ASN1_OID_SINGLE ( 4 ), \
345 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 348 of file asn1.h.

348#define ASN1_OID_KEYUSAGE \
349 ASN1_OID_INITIAL ( 2, 5 ), ASN1_OID_SINGLE ( 29 ), \
350 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 353 of file asn1.h.

353#define ASN1_OID_BASICCONSTRAINTS \
354 ASN1_OID_INITIAL ( 2, 5 ), ASN1_OID_SINGLE ( 29 ), \
355 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 358 of file asn1.h.

358#define ASN1_OID_EXTKEYUSAGE \
359 ASN1_OID_INITIAL ( 2, 5 ), ASN1_OID_SINGLE ( 29 ), \
360 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 363 of file asn1.h.

363#define ASN1_OID_CODESIGNING \
364 ASN1_OID_INITIAL ( 1, 3 ), ASN1_OID_SINGLE ( 6 ), \
365 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 5 ), \
366 ASN1_OID_SINGLE ( 5 ), ASN1_OID_SINGLE ( 7 ), \
367 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 370 of file asn1.h.

370#define ASN1_OID_SIGNEDDATA \
371 ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \
372 ASN1_OID_TRIPLE ( 113549 ), ASN1_OID_SINGLE ( 1 ), \
373 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 376 of file asn1.h.

376#define ASN1_OID_ENVELOPEDDATA \
377 ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \
378 ASN1_OID_TRIPLE ( 113549 ), ASN1_OID_SINGLE ( 1 ), \
379 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 382 of file asn1.h.

382#define ASN1_OID_AUTHENVELOPEDDATA \
383 ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \
384 ASN1_OID_TRIPLE ( 113549 ), ASN1_OID_SINGLE ( 1 ), \
385 ASN1_OID_SINGLE ( 9 ), ASN1_OID_SINGLE ( 16 ), \
386 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 389 of file asn1.h.

389#define ASN1_OID_AUTHORITYINFOACCESS \
390 ASN1_OID_INITIAL ( 1, 3 ), ASN1_OID_SINGLE ( 6 ), \
391 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 5 ), \
392 ASN1_OID_SINGLE ( 5 ), ASN1_OID_SINGLE ( 7 ), \
393 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 396 of file asn1.h.

396#define ASN1_OID_OCSP \
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 ( 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 403 of file asn1.h.

403#define ASN1_OID_OCSP_BASIC \
404 ASN1_OID_INITIAL ( 1, 3 ), ASN1_OID_SINGLE ( 6 ), \
405 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 5 ), \
406 ASN1_OID_SINGLE ( 5 ), ASN1_OID_SINGLE ( 7 ), \
407 ASN1_OID_SINGLE ( 48 ), ASN1_OID_SINGLE ( 1 ), \
408 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 411 of file asn1.h.

411#define ASN1_OID_OCSPSIGNING \
412 ASN1_OID_INITIAL ( 1, 3 ), ASN1_OID_SINGLE ( 6 ), \
413 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 5 ), \
414 ASN1_OID_SINGLE ( 5 ), ASN1_OID_SINGLE ( 7 ), \
415 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 418 of file asn1.h.

418#define ASN1_OID_SUBJECTALTNAME \
419 ASN1_OID_INITIAL ( 2, 5 ), ASN1_OID_SINGLE ( 29 ), \
420 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 423 of file asn1.h.

423#define ASN1_CURSOR( value ) { \
424 .data = value, \
425 .len = sizeof ( value ), \
426 }

◆ ASN1_ALGORITHMS

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

ASN.1 OID-identified algorithms.

Definition at line 454 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 457 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 494 of file asn1.h.

494 {
495 cursor->len = 0;
496}
size_t len
Length of data.
Definition asn1.h:25

References asn1_cursor::len.

Referenced by asn1_enter(), asn1_enter_bits(), asn1_enter_unsigned(), 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 505 of file asn1.h.

505 {
506 const uint8_t *type = cursor->data;
507
508 return ( ( cursor->len >= sizeof ( *type ) ) ? *type : ASN1_END );
509}
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 518 of file asn1.h.

518 {
519 union {
520 struct asn1_builder builder;
521 struct asn1_cursor cursor;
522 } *u = container_of ( builder, typeof ( *u ), builder );
523
524 /* Sanity check */
525 build_assert ( ( ( const void * ) &u->builder.data ) ==
526 &u->cursor.data );
527 build_assert ( &u->builder.len == &u->cursor.len );
528
529 return &u->cursor;
530}
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_decrypt_okx(), pubkey_encrypt_decrypt_okx(), pubkey_encrypt_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 261 of file asn1.c.

261 {
262 int len;
263
264 /* Parse current object */
265 len = asn1_start ( cursor, type );
266 if ( len < 0 ) {
267 asn1_invalidate_cursor ( cursor );
268 return len;
269 }
270
271 /* Update cursor */
272 if ( ( ( size_t ) len ) <= cursor->len )
273 cursor->len = len;
274
275 DBGC ( cursor, "ASN1 %p entered object type %02x (len %x)\n",
276 cursor, type, len );
277 return 0;
278}
static int asn1_start(struct asn1_cursor *cursor, unsigned int type)
Start parsing ASN.1 object.
Definition asn1.c:179
static void asn1_invalidate_cursor(struct asn1_cursor *cursor)
Invalidate ASN.1 object cursor.
Definition asn1.h:494
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 294 of file asn1.c.

294 {
295 int len;
296
297 /* Parse current object */
298 len = asn1_start ( cursor, type );
299 if ( len < 0 )
300 return len;
301
302 /* Update cursor */
303 cursor->data += len;
304 cursor->len -= len;
305
306 DBGC ( cursor, "ASN1 %p skipped object type %02x (len %x)\n",
307 cursor, type, len );
308 return 0;
309}

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 323 of file asn1.c.

323 {
324 int rc;
325
326 if ( ( rc = asn1_skip_if_exists ( cursor, type ) ) != 0 ) {
327 asn1_invalidate_cursor ( cursor );
328 return rc;
329 }
330
331 return 0;
332}
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:294

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 346 of file asn1.c.

346 {
347 struct asn1_cursor temp;
348 const void *end;
349 int len;
350
351 /* Find end of object */
352 memcpy ( &temp, cursor, sizeof ( temp ) );
353 len = asn1_start ( &temp, type );
354 if ( len < 0 ) {
355 asn1_invalidate_cursor ( cursor );
356 return len;
357 }
358 end = ( temp.data + len );
359
360 /* Shrink original cursor to contain only its first object */
361 cursor->len = ( end - cursor->data );
362
363 return 0;
364}
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 372 of file asn1.c.

372 {
373 return asn1_enter ( cursor, ASN1_ANY );
374}
int asn1_enter(struct asn1_cursor *cursor, unsigned int type)
Enter ASN.1 object.
Definition asn1.c:261
#define ASN1_ANY
ASN.1 "any tag" magic value.
Definition asn1.h:105

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 392 of file asn1.c.

392 {
393 return asn1_shrink ( cursor, ASN1_ANY );
394}
int asn1_shrink(struct asn1_cursor *cursor, unsigned int type)
Shrink ASN.1 cursor to fit object.
Definition asn1.c:346

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 403 of file asn1.c.

403 {
404 const struct {
406 uint8_t data[0];
407 } __attribute__ (( packed )) *bit_string;
408 const uint8_t *last;
409 unsigned int unused_bits;
410 int rc;
411
412 /* Enter bit string */
413 if ( ( rc = asn1_enter ( cursor, ASN1_BIT_STRING ) ) != 0 )
414 return rc;
415
416 /* Check that bit string header exists */
417 if ( cursor->len < sizeof ( *bit_string ) ) {
418 DBGC ( cursor, "ASN1 %p invalid bit string:\n", cursor );
419 DBGC_HDA ( cursor, 0, cursor->data, cursor->len );
420 asn1_invalidate_cursor ( cursor );
421 return -EINVAL_BIT_STRING;
422 }
423 bit_string = cursor->data;
424 last = ( cursor->data + cursor->len - 1 );
425 cursor->data = &bit_string->data;
426 cursor->len -= offsetof ( typeof ( *bit_string ), data );
427 unused_bits = bit_string->unused;
428
429 /* Check validity of unused bits */
430 if ( ( unused_bits >= 8 ) ||
431 ( ( unused_bits > 0 ) && ( cursor->len == 0 ) ) ||
432 ( ( *last & ( 0xffU >> ( 8 - unused_bits ) ) ) != 0 ) ) {
433 DBGC ( cursor, "ASN1 %p invalid bit string:\n", cursor );
434 DBGC_HDA ( cursor, 0, cursor->data, cursor->len );
435 asn1_invalidate_cursor ( cursor );
436 return -EINVAL_BIT_STRING;
437 }
438
439 /* Record or check number of unused bits, as applicable */
440 if ( unused ) {
441 *unused = unused_bits;
442 } else if ( unused_bits ) {
443 DBGC ( cursor, "ASN1 %p invalid integral bit string:\n",
444 cursor );
445 DBGC_HDA ( cursor, 0, cursor->data, cursor->len );
446 asn1_invalidate_cursor ( cursor );
447 return -EINVAL_BIT_STRING;
448 }
449
450 return 0;
451}
#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 459 of file asn1.c.

459 {
460 uint8_t msb;
461 int rc;
462
463 /* Enter integer */
464 if ( ( rc = asn1_enter ( cursor, ASN1_INTEGER ) ) != 0 )
465 return rc;
466
467 /* Reject empty integers */
468 if ( ! cursor->len ) {
469 DBGC ( cursor, "ASN1 %p empty unsigned integer\n", cursor );
470 /* Cursor is already invalid */
471 return -EINVAL;
472 }
473
474 /* Reject negative values */
475 msb = *( ( uint8_t * ) cursor->data );
476 if ( msb & 0x80 ) {
477 DBGC ( cursor, "ASN1 %p negative unsigned integer:\n",
478 cursor );
479 DBGC_HDA ( cursor, 0, cursor->data, cursor->len );
480 asn1_invalidate_cursor ( cursor );
481 return -EINVAL;
482 }
483
484 /* Skip any initial positive sign byte(s) */
485 while ( ( cursor->len > 1 ) && ( msb == 0x00 ) ) {
486 cursor->data++;
487 cursor->len--;
488 msb = *( ( uint8_t * ) cursor->data );
489 }
490
491 return 0;
492}
#define ASN1_INTEGER
ASN.1 integer.
Definition asn1.h:63
#define EINVAL
Invalid argument.
Definition errno.h:472

References asn1_enter(), ASN1_INTEGER, asn1_invalidate_cursor(), asn1_cursor::data, DBGC, DBGC_HDA, EINVAL, 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 500 of file asn1.c.

500 {
501 struct asn1_cursor contents;
502 const struct {
504 } __attribute__ (( packed )) *boolean;
505
506 /* Enter boolean */
507 memcpy ( &contents, cursor, sizeof ( contents ) );
508 asn1_enter ( &contents, ASN1_BOOLEAN );
509 if ( contents.len != sizeof ( *boolean ) )
510 return -EINVAL_ASN1_BOOLEAN;
511
512 /* Extract value */
513 boolean = contents.data;
514 return boolean->value;
515}
#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 524 of file asn1.c.

524 {
525 struct asn1_cursor contents;
526 uint8_t high_byte;
527 int rc;
528
529 /* Enter integer */
530 memcpy ( &contents, cursor, sizeof ( contents ) );
531 if ( ( rc = asn1_enter ( &contents, ASN1_INTEGER ) ) != 0 )
532 return rc;
533 if ( contents.len < 1 )
534 return -EINVAL_ASN1_INTEGER;
535
536 /* Initialise value according to sign byte */
537 *value = *( ( int8_t * ) contents.data );
538 contents.data++;
539 contents.len--;
540
541 /* Process value */
542 while ( contents.len ) {
543 high_byte = ( (*value) >> ( 8 * ( sizeof ( *value ) - 1 ) ) );
544 if ( ( high_byte != 0x00 ) && ( high_byte != 0xff ) ) {
545 DBGC ( cursor, "ASN1 %p integer overflow\n", cursor );
546 return -EINVAL_ASN1_INTEGER;
547 }
548 *value = ( ( *value << 8 ) | *( ( uint8_t * ) contents.data ) );
549 contents.data++;
550 contents.len--;
551 }
552
553 return 0;
554}
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 566 of file asn1.c.

567 {
568 int difference;
569
570 difference = ( cursor2->len - cursor1->len );
571 return ( difference ? difference :
572 memcmp ( cursor1->data, cursor2->data, cursor1->len ) );
573}
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_decrypt_okx(), pubkey_encrypt_decrypt_okx(), pubkey_encrypt_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 602 of file asn1.c.

604 {
605 struct asn1_cursor contents;
606 int rc;
607
608 /* Enter algorithm */
609 memcpy ( &contents, cursor, sizeof ( contents ) );
610 asn1_enter ( &contents, ASN1_SEQUENCE );
611
612 /* Get raw parameters, if applicable */
613 if ( params ) {
614 memcpy ( params, &contents, sizeof ( *params ) );
615 asn1_skip_any ( params );
616 }
617
618 /* Enter algorithm identifier */
619 if ( ( rc = asn1_enter ( &contents, ASN1_OID ) ) != 0 ) {
620 DBGC ( cursor, "ASN1 %p cannot locate algorithm OID:\n",
621 cursor );
622 DBGC_HDA ( cursor, 0, cursor->data, cursor->len );
623 return -EINVAL_ASN1_ALGORITHM;
624 }
625
626 /* Identify algorithm */
627 *algorithm = asn1_find_algorithm ( &contents );
628 if ( ! *algorithm ) {
629 DBGC ( cursor, "ASN1 %p unrecognised algorithm:\n", cursor );
630 DBGC_HDA ( cursor, 0, cursor->data, cursor->len );
631 return -ENOTSUP_ALGORITHM;
632 }
633
634 /* Parse parameters, if applicable */
635 if ( params && (*algorithm)->parse &&
636 ( ( rc = (*algorithm)->parse ( *algorithm, params ) ) != 0 ) ) {
637 DBGC ( cursor, "ASN1 %p cannot parse %s parameters: %s\n",
638 cursor, (*algorithm)->name, strerror ( rc ) );
639 return rc;
640 }
641
642 return 0;
643}
int asn1_skip_any(struct asn1_cursor *cursor)
Skip ASN.1 object of any type.
Definition asn1.c:382
#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:583
#define ASN1_OID
ASN.1 object identifier.
Definition asn1.h:75
#define ASN1_SEQUENCE
ASN.1 sequence.
Definition asn1.h:93
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 652 of file asn1.c.

653 {
654 int rc;
655
656 /* Parse algorithm */
657 if ( ( rc = asn1_algorithm ( cursor, algorithm, NULL ) ) != 0 )
658 return rc;
659
660 /* Check algorithm has a public key */
661 if ( ! (*algorithm)->pubkey ) {
662 DBGC ( cursor, "ASN1 %p algorithm %s is not a public-key "
663 "algorithm:\n", cursor, (*algorithm)->name );
664 DBGC_HDA ( cursor, 0, cursor->data, cursor->len );
665 return -ENOTTY_ALGORITHM;
666 }
667
668 return 0;
669}
#define NULL
NULL pointer (VOID *).
Definition Base.h:321
#define ENOTTY_ALGORITHM
Definition asn1.c:158
An ASN.1 OID-identified algorithm.
Definition asn1.h:429

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 678 of file asn1.c.

679 {
680 int rc;
681
682 /* Parse algorithm */
683 if ( ( rc = asn1_algorithm ( cursor, algorithm, NULL ) ) != 0 )
684 return rc;
685
686 /* Check algorithm has a digest */
687 if ( ! (*algorithm)->digest ) {
688 DBGC ( cursor, "ASN1 %p algorithm %s is not a digest "
689 "algorithm:\n", cursor, (*algorithm)->name );
690 DBGC_HDA ( cursor, 0, cursor->data, cursor->len );
691 return -ENOTTY_ALGORITHM;
692 }
693
694 return 0;
695}

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 705 of file asn1.c.

707 {
708 int rc;
709
710 /* Parse algorithm */
711 if ( ( rc = asn1_algorithm ( cursor, algorithm, params ) ) != 0 )
712 return rc;
713
714 /* Check algorithm has a cipher */
715 if ( ! (*algorithm)->cipher ) {
716 DBGC ( cursor, "ASN1 %p algorithm %s is not a cipher "
717 "algorithm:\n", cursor, (*algorithm)->name );
718 DBGC_HDA ( cursor, 0, cursor->data, cursor->len );
719 return -ENOTTY_ALGORITHM;
720 }
721
722 return 0;
723}

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 732 of file asn1.c.

733 {
734 int rc;
735
736 /* Parse algorithm */
737 if ( ( rc = asn1_algorithm ( cursor, algorithm, NULL ) ) != 0 )
738 return rc;
739
740 /* Check algorithm has a public key */
741 if ( ! (*algorithm)->pubkey ) {
742 DBGC ( cursor, "ASN1 %p algorithm %s is not a signature "
743 "algorithm:\n", cursor, (*algorithm)->name );
744 DBGC_HDA ( cursor, 0, cursor->data, cursor->len );
745 return -ENOTTY_ALGORITHM;
746 }
747
748 /* Check algorithm has a digest */
749 if ( ! (*algorithm)->digest ) {
750 DBGC ( cursor, "ASN1 %p algorithm %s is not a signature "
751 "algorithm:\n", cursor, (*algorithm)->name );
752 DBGC_HDA ( cursor, 0, cursor->data, cursor->len );
753 return -ENOTTY_ALGORITHM;
754 }
755
756 return 0;
757}

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 767 of file asn1.c.

769 {
770 struct asn1_cursor curve;
771
772 /* Elliptic curves are identified as either:
773 *
774 * - a wrapper algorithm "id-ecPublicKey" with the actual
775 * curve specified in the algorithm parameters, or
776 *
777 * - a standalone object identifier for the curve
778 */
779 if ( ( wrapper == NULL ) ||
780 ( asn1_check_algorithm ( cursor, wrapper, &curve ) != 0 ) ) {
781 memcpy ( &curve, cursor, sizeof ( curve ) );
782 }
783
784 /* Identify curve */
785 asn1_enter ( &curve, ASN1_OID );
786 *algorithm = asn1_find_algorithm ( &curve );
787 if ( ! *algorithm ) {
788 DBGC ( cursor, "ASN1 %p unrecognised EC algorithm:\n",
789 cursor );
790 DBGC_HDA ( cursor, 0, cursor->data, cursor->len );
791 return -ENOTSUP_ALGORITHM;
792 }
793
794 /* Check algorithm has an elliptic curve */
795 if ( ! (*algorithm)->curve ) {
796 DBGC ( cursor, "ASN1 %p algorithm %s is not an elliptic curve "
797 "algorithm:\n", cursor, (*algorithm)->name );
798 DBGC_HDA ( cursor, 0, cursor->data, cursor->len );
799 return -ENOTTY_ALGORITHM;
800 }
801
802 return 0;
803}
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:813

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 813 of file asn1.c.

815 {
816 struct asn1_algorithm *actual;
817 int rc;
818
819 /* Parse algorithm */
820 if ( ( rc = asn1_algorithm ( cursor, &actual, params ) ) != 0 )
821 return rc;
822
823 /* Check algorithm matches */
824 if ( actual != expected ) {
825 DBGC ( cursor, "ASN1 %p algorithm %s does not match %s\n",
826 cursor, actual->name, expected->name );
827 return -ENOTTY_ALGORITHM;
828 }
829
830 return 0;
831}
const char * name
Name.
Definition asn1.h:431

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 840 of file asn1.c.

841 {
842 struct cipher_algorithm *cipher = algorithm->cipher;
843
844 /* Sanity check */
845 assert ( cipher != NULL );
846
847 /* Enter parameters */
848 asn1_enter ( params, ASN1_OCTET_STRING );
849
850 /* Check length */
851 if ( params->len != cipher->blocksize )
852 return -EINVAL;
853
854 return 0;
855}
#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
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 885 of file asn1.c.

885 {
886 struct asn1_cursor contents;
887 unsigned int have_century;
888 unsigned int type;
889 union {
890 struct {
894 uint8_t day;
895 uint8_t hour;
896 uint8_t minute;
897 uint8_t second;
898 } __attribute__ (( packed )) named;
899 uint8_t raw[7];
900 } pairs;
901 struct tm tm;
902 const uint8_t *data;
903 size_t remaining;
904 unsigned int tens;
905 unsigned int units;
906 unsigned int i;
907 int rc;
908
909 /* Determine time format utcTime/generalizedTime */
910 memcpy ( &contents, cursor, sizeof ( contents ) );
911 type = asn1_type ( &contents );
912 switch ( type ) {
913 case ASN1_UTC_TIME:
914 have_century = 0;
915 break;
917 have_century = 1;
918 break;
919 default:
920 DBGC ( cursor, "ASN1 %p invalid time type %02x\n",
921 cursor, type );
922 DBGC_HDA ( cursor, 0, cursor->data, cursor->len );
923 return -EINVAL_ASN1_TIME;
924 }
925
926 /* Enter utcTime/generalizedTime */
927 if ( ( rc = asn1_enter ( &contents, type ) ) != 0 ) {
928 DBGC ( cursor, "ASN1 %p cannot locate %s time:\n", cursor,
929 ( ( type == ASN1_UTC_TIME ) ? "UTC" : "generalized" ) );
930 DBGC_HDA ( cursor, 0, cursor->data, cursor->len );
931 return rc;
932 }
933
934 /* Parse digit string a pair at a time */
935 memset ( &pairs, 0, sizeof ( pairs ) );
936 data = contents.data;
937 remaining = contents.len;
938 for ( i = ( have_century ? 0 : 1 ) ; i < sizeof ( pairs.raw ) ; i++ ) {
939 if ( remaining < 2 ) {
940 /* Some certificates violate the X.509 RFC by
941 * omitting the "seconds" value.
942 */
943 if ( i == ( sizeof ( pairs.raw ) - 1 ) )
944 break;
945 DBGC ( cursor, "ASN1 %p invalid time:\n", cursor );
946 DBGC_HDA ( cursor, 0, cursor->data, cursor->len );
947 return -EINVAL_ASN1_TIME;
948 }
949 tens = data[0];
950 units = data[1];
951 if ( ! ( isdigit ( tens ) && isdigit ( units ) ) ) {
952 DBGC ( cursor, "ASN1 %p invalid time:\n", cursor );
953 DBGC_HDA ( cursor, 0, cursor->data, cursor->len );
954 return -EINVAL_ASN1_TIME;
955 }
956 pairs.raw[i] = ( ( 10 * ( tens - '0' ) ) + ( units - '0' ) );
957 data += 2;
958 remaining -= 2;
959 }
960
961 /* Determine century if applicable */
962 if ( ! have_century )
963 pairs.named.century = ( ( pairs.named.year >= 50 ) ? 19 : 20 );
964
965 /* Check for trailing "Z" */
966 if ( ( remaining != 1 ) || ( data[0] != 'Z' ) ) {
967 DBGC ( cursor, "ASN1 %p invalid time:\n", cursor );
968 DBGC_HDA ( cursor, 0, cursor->data, cursor->len );
969 return -EINVAL_ASN1_TIME;
970 }
971
972 /* Fill in time */
973 tm.tm_year = ( ( ( pairs.named.century - 19 ) * 100 ) +
974 pairs.named.year );
975 tm.tm_mon = ( pairs.named.month - 1 );
976 tm.tm_mday = pairs.named.day;
977 tm.tm_hour = pairs.named.hour;
978 tm.tm_min = pairs.named.minute;
979 tm.tm_sec = pairs.named.second;
980
981 /* Convert to seconds since the Epoch */
982 *time = mktime ( &tm );
983
984 return 0;
985}
__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:505
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_header_len()

size_t asn1_header_len ( size_t len)
extern

Calculate ASN.1 header length.

Parameters
lenContent length
Return values
header_lenHeader length

Definition at line 1023 of file asn1.c.

1023 {
1025
1026 return asn1_header ( &header, ASN1_ANY, len );
1027}
static size_t asn1_header(struct asn1_builder_header *header, unsigned int type, size_t len)
Construct ASN.1 header.
Definition asn1.c:995
struct ena_llq_option header
Header locations.
Definition ena.h:5
An ASN.1 header.
Definition asn1.h:49

References ASN1_ANY, asn1_header(), header, and len.

Referenced by ecdsa_parse_signature(), and ecdsa_verify().

◆ 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 1036 of file asn1.c.

1036 {
1037 size_t new_len;
1038 void *new;
1039
1040 /* As with the ASN1 parsing functions, make errors permanent */
1041 if ( builder->len && ! builder->data )
1042 return -ENOMEM;
1043
1044 /* Reallocate data buffer */
1045 new_len = ( builder->len + extra );
1046 new = realloc ( builder->data, new_len );
1047 if ( ! new ) {
1048 zfree ( builder->data );
1049 builder->data = NULL;
1050 return -ENOMEM;
1051 }
1052 builder->data = new;
1053
1054 /* Move existing data to end of buffer */
1055 memmove ( ( builder->data + extra ), builder->data, builder->len );
1056 builder->len = new_len;
1057
1058 return 0;
1059}
#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(), rsa_sign(), and tls_key_build().

◆ 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 1069 of file asn1.c.

1070 {
1071 int rc;
1072
1073 /* Grow buffer */
1074 if ( ( rc = asn1_grow ( builder, len ) ) != 0 )
1075 return rc;
1076
1077 /* Populate data buffer */
1078 memcpy ( builder->data, data, len );
1079
1080 return 0;
1081}
int asn1_grow(struct asn1_builder *builder, size_t extra)
Grow ASN.1 builder.
Definition asn1.c:1036

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().

◆ 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 1092 of file asn1.c.

1093 {
1095 size_t header_len;
1096 int rc;
1097
1098 /* Construct header */
1099 header_len = asn1_header ( &header, type, len );
1100
1101 /* Grow buffer */
1102 if ( ( rc = asn1_grow ( builder, header_len + len ) ) != 0 )
1103 return rc;
1104
1105 /* Populate data buffer */
1106 memcpy ( builder->data, &header, header_len );
1107 memcpy ( ( builder->data + header_len ), data, len );
1108
1109 return 0;
1110}

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 1119 of file asn1.c.

1119 {
1121 size_t header_len;
1122 int rc;
1123
1124 /* Construct header */
1125 header_len = asn1_header ( &header, type, builder->len );
1126
1127 /* Grow buffer */
1128 if ( ( rc = asn1_grow ( builder, header_len ) ) != 0 )
1129 return rc;
1130
1131 /* Populate data buffer */
1132 memcpy ( builder->data, &header, header_len );
1133
1134 return 0;
1135}

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 461 of file asn1.h.