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

Functions

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

Variables

struct asn1_algorithm rsa_encryption_algorithm __asn1_algorithm
 Generic elliptic curve container algorithm. More...
 

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

◆ ASN1_END

#define ASN1_END   0x00

ASN.1 end.

Definition at line 56 of file asn1.h.

◆ ASN1_BOOLEAN

#define ASN1_BOOLEAN   0x01

ASN.1 boolean.

Definition at line 59 of file asn1.h.

◆ ASN1_INTEGER

#define ASN1_INTEGER   0x02

ASN.1 integer.

Definition at line 62 of file asn1.h.

◆ ASN1_BIT_STRING

#define ASN1_BIT_STRING   0x03

ASN.1 bit string.

Definition at line 65 of file asn1.h.

◆ ASN1_OCTET_STRING

#define ASN1_OCTET_STRING   0x04

ASN.1 octet string.

Definition at line 68 of file asn1.h.

◆ ASN1_NULL

#define ASN1_NULL   0x05

ASN.1 null.

Definition at line 71 of file asn1.h.

◆ ASN1_OID

#define ASN1_OID   0x06

ASN.1 object identifier.

Definition at line 74 of file asn1.h.

◆ ASN1_ENUMERATED

#define ASN1_ENUMERATED   0x0a

ASN.1 enumeration.

Definition at line 77 of file asn1.h.

◆ ASN1_UTF8_STRING

#define ASN1_UTF8_STRING   0x0c

ASN.1 UTF-8 string.

Definition at line 80 of file asn1.h.

◆ ASN1_UTC_TIME

#define ASN1_UTC_TIME   0x17

ASN.1 UTC time.

Definition at line 83 of file asn1.h.

◆ ASN1_GENERALIZED_TIME

#define ASN1_GENERALIZED_TIME   0x18

ASN.1 generalized time.

Definition at line 86 of file asn1.h.

◆ ASN1_SEQUENCE

#define ASN1_SEQUENCE   0x30

ASN.1 sequence.

Definition at line 89 of file asn1.h.

◆ ASN1_SET

#define ASN1_SET   0x31

ASN.1 set.

Definition at line 92 of file asn1.h.

◆ ASN1_IMPLICIT_TAG

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

ASN.1 implicit tag.

Definition at line 95 of file asn1.h.

◆ ASN1_EXPLICIT_TAG

#define ASN1_EXPLICIT_TAG (   number)    ( 0xa0 | (number) )

ASN.1 explicit tag.

Definition at line 98 of file asn1.h.

◆ ASN1_ANY

#define ASN1_ANY   -1U

ASN.1 "any tag" magic value.

Definition at line 101 of file asn1.h.

◆ ASN1_SHORT

#define ASN1_SHORT (   tag,
  ... 
)    (tag), VA_ARG_COUNT ( __VA_ARGS__ ), __VA_ARGS__

Construct a short ASN.1 value.

Definition at line 104 of file asn1.h.

◆ ASN1_OID_INITIAL

#define ASN1_OID_INITIAL (   first,
  second 
)    ( ( (first) * 40 ) + (second) )

Initial OID byte.

Definition at line 108 of file asn1.h.

◆ ASN1_OID_SINGLE

#define ASN1_OID_SINGLE (   value)    ( (value) & 0x7f )

Single-byte OID value.

Valid for values up to 127

Definition at line 114 of file asn1.h.

◆ ASN1_OID_DOUBLE

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

Double-byte OID value.

Valid for values up to 16383

Definition at line 120 of file asn1.h.

◆ ASN1_OID_TRIPLE

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

Double-byte OID value.

Valid for values up to 2097151

Definition at line 127 of file asn1.h.

◆ 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_DOUBLE(value)
Double-byte OID value.
Definition: asn1.h:120
#define ASN1_OID_SINGLE(value)
Single-byte OID value.
Definition: asn1.h:114
#define ASN1_OID_INITIAL(first, second)
Initial OID byte.
Definition: asn1.h:108

ASN.1 OID for ecPublicKey (1.2.840.10045.2.1)

Definition at line 131 of file asn1.h.

◆ 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 )
#define ASN1_OID_DOUBLE(value)
Double-byte OID value.
Definition: asn1.h:120
#define ASN1_OID_SINGLE(value)
Single-byte OID value.
Definition: asn1.h:114
#define ASN1_OID_INITIAL(first, second)
Initial OID byte.
Definition: asn1.h:108

ASN.1 OID for prime256v1 (1.2.840.10045.3.1.7)

Definition at line 137 of file asn1.h.

◆ 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 )
#define ASN1_OID_DOUBLE(value)
Double-byte OID value.
Definition: asn1.h:120
#define ASN1_OID_SINGLE(value)
Single-byte OID value.
Definition: asn1.h:114
#define ASN1_OID_INITIAL(first, second)
Initial OID byte.
Definition: asn1.h:108

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

Definition at line 143 of file asn1.h.

◆ 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 )
#define ASN1_OID_DOUBLE(value)
Double-byte OID value.
Definition: asn1.h:120
#define ASN1_OID_SINGLE(value)
Single-byte OID value.
Definition: asn1.h:114
#define ASN1_OID_INITIAL(first, second)
Initial OID byte.
Definition: asn1.h:108

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

Definition at line 149 of file asn1.h.

◆ 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 )
#define ASN1_OID_DOUBLE(value)
Double-byte OID value.
Definition: asn1.h:120
#define ASN1_OID_SINGLE(value)
Single-byte OID value.
Definition: asn1.h:114
#define ASN1_OID_INITIAL(first, second)
Initial OID byte.
Definition: asn1.h:108

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

Definition at line 155 of file asn1.h.

◆ 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 )
#define ASN1_OID_DOUBLE(value)
Double-byte OID value.
Definition: asn1.h:120
#define ASN1_OID_SINGLE(value)
Single-byte OID value.
Definition: asn1.h:114
#define ASN1_OID_INITIAL(first, second)
Initial OID byte.
Definition: asn1.h:108

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

Definition at line 161 of file asn1.h.

◆ 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 )
#define ASN1_OID_DOUBLE(value)
Double-byte OID value.
Definition: asn1.h:120
#define ASN1_OID_SINGLE(value)
Single-byte OID value.
Definition: asn1.h:114
#define ASN1_OID_INITIAL(first, second)
Initial OID byte.
Definition: asn1.h:108

ASN.1 OID for rsaEncryption (1.2.840.113549.1.1.1)

Definition at line 167 of file asn1.h.

◆ 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 )
#define ASN1_OID_DOUBLE(value)
Double-byte OID value.
Definition: asn1.h:120
#define ASN1_OID_SINGLE(value)
Single-byte OID value.
Definition: asn1.h:114
#define ASN1_OID_INITIAL(first, second)
Initial OID byte.
Definition: asn1.h:108

ASN.1 OID for md5WithRSAEncryption (1.2.840.113549.1.1.4)

Definition at line 173 of file asn1.h.

◆ 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 )
#define ASN1_OID_DOUBLE(value)
Double-byte OID value.
Definition: asn1.h:120
#define ASN1_OID_SINGLE(value)
Single-byte OID value.
Definition: asn1.h:114
#define ASN1_OID_INITIAL(first, second)
Initial OID byte.
Definition: asn1.h:108

ASN.1 OID for sha1WithRSAEncryption (1.2.840.113549.1.1.5)

Definition at line 179 of file asn1.h.

◆ 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 )
#define ASN1_OID_DOUBLE(value)
Double-byte OID value.
Definition: asn1.h:120
#define ASN1_OID_SINGLE(value)
Single-byte OID value.
Definition: asn1.h:114
#define ASN1_OID_INITIAL(first, second)
Initial OID byte.
Definition: asn1.h:108

ASN.1 OID for sha256WithRSAEncryption (1.2.840.113549.1.1.11)

Definition at line 185 of file asn1.h.

◆ 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 )
#define ASN1_OID_DOUBLE(value)
Double-byte OID value.
Definition: asn1.h:120
#define ASN1_OID_SINGLE(value)
Single-byte OID value.
Definition: asn1.h:114
#define ASN1_OID_INITIAL(first, second)
Initial OID byte.
Definition: asn1.h:108

ASN.1 OID for sha384WithRSAEncryption (1.2.840.113549.1.1.12)

Definition at line 191 of file asn1.h.

◆ 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 )
#define ASN1_OID_DOUBLE(value)
Double-byte OID value.
Definition: asn1.h:120
#define ASN1_OID_SINGLE(value)
Single-byte OID value.
Definition: asn1.h:114
#define ASN1_OID_INITIAL(first, second)
Initial OID byte.
Definition: asn1.h:108

ASN.1 OID for sha512WithRSAEncryption (1.2.840.113549.1.1.13)

Definition at line 197 of file asn1.h.

◆ 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 )
#define ASN1_OID_DOUBLE(value)
Double-byte OID value.
Definition: asn1.h:120
#define ASN1_OID_SINGLE(value)
Single-byte OID value.
Definition: asn1.h:114
#define ASN1_OID_INITIAL(first, second)
Initial OID byte.
Definition: asn1.h:108

ASN.1 OID for sha224WithRSAEncryption (1.2.840.113549.1.1.14)

Definition at line 203 of file asn1.h.

◆ 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 )
#define ASN1_OID_DOUBLE(value)
Double-byte OID value.
Definition: asn1.h:120
#define ASN1_OID_SINGLE(value)
Single-byte OID value.
Definition: asn1.h:114
#define ASN1_OID_INITIAL(first, second)
Initial OID byte.
Definition: asn1.h:108

ASN.1 OID for id-md4 (1.2.840.113549.2.4)

Definition at line 209 of file asn1.h.

◆ 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 )
#define ASN1_OID_DOUBLE(value)
Double-byte OID value.
Definition: asn1.h:120
#define ASN1_OID_SINGLE(value)
Single-byte OID value.
Definition: asn1.h:114
#define ASN1_OID_INITIAL(first, second)
Initial OID byte.
Definition: asn1.h:108

ASN.1 OID for id-md5 (1.2.840.113549.2.5)

Definition at line 215 of file asn1.h.

◆ 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 )
#define ASN1_OID_SINGLE(value)
Single-byte OID value.
Definition: asn1.h:114
#define ASN1_OID_INITIAL(first, second)
Initial OID byte.
Definition: asn1.h:108

ASN.1 OID for id-sha1 (1.3.14.3.2.26)

Definition at line 221 of file asn1.h.

◆ ASN1_OID_X25519

#define ASN1_OID_X25519
Value:
ASN1_OID_INITIAL ( 1, 3 ), ASN1_OID_SINGLE ( 101 ), \
ASN1_OID_SINGLE ( 110 )
#define ASN1_OID_SINGLE(value)
Single-byte OID value.
Definition: asn1.h:114
#define ASN1_OID_INITIAL(first, second)
Initial OID byte.
Definition: asn1.h:108

ASN.1 OID for id-x25519 (1.3.101.110)

Definition at line 227 of file asn1.h.

◆ 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 )
#define ASN1_OID_DOUBLE(value)
Double-byte OID value.
Definition: asn1.h:120
#define ASN1_OID_SINGLE(value)
Single-byte OID value.
Definition: asn1.h:114
#define ASN1_OID_INITIAL(first, second)
Initial OID byte.
Definition: asn1.h:108

ASN.1 OID for secp384r1 (1.3.132.0.34)

Definition at line 232 of file asn1.h.

◆ 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 )
#define ASN1_OID_DOUBLE(value)
Double-byte OID value.
Definition: asn1.h:120
#define ASN1_OID_SINGLE(value)
Single-byte OID value.
Definition: asn1.h:114
#define ASN1_OID_INITIAL(first, second)
Initial OID byte.
Definition: asn1.h:108

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

Definition at line 237 of file asn1.h.

◆ 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 )
#define ASN1_OID_DOUBLE(value)
Double-byte OID value.
Definition: asn1.h:120
#define ASN1_OID_SINGLE(value)
Single-byte OID value.
Definition: asn1.h:114
#define ASN1_OID_INITIAL(first, second)
Initial OID byte.
Definition: asn1.h:108

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

Definition at line 244 of file asn1.h.

◆ 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 )
#define ASN1_OID_DOUBLE(value)
Double-byte OID value.
Definition: asn1.h:120
#define ASN1_OID_SINGLE(value)
Single-byte OID value.
Definition: asn1.h:114
#define ASN1_OID_INITIAL(first, second)
Initial OID byte.
Definition: asn1.h:108

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

Definition at line 251 of file asn1.h.

◆ 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 )
#define ASN1_OID_DOUBLE(value)
Double-byte OID value.
Definition: asn1.h:120
#define ASN1_OID_SINGLE(value)
Single-byte OID value.
Definition: asn1.h:114
#define ASN1_OID_INITIAL(first, second)
Initial OID byte.
Definition: asn1.h:108

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

Definition at line 258 of file asn1.h.

◆ 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 )
#define ASN1_OID_DOUBLE(value)
Double-byte OID value.
Definition: asn1.h:120
#define ASN1_OID_SINGLE(value)
Single-byte OID value.
Definition: asn1.h:114
#define ASN1_OID_INITIAL(first, second)
Initial OID byte.
Definition: asn1.h:108

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

Definition at line 265 of file asn1.h.

◆ 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 )
#define ASN1_OID_DOUBLE(value)
Double-byte OID value.
Definition: asn1.h:120
#define ASN1_OID_SINGLE(value)
Single-byte OID value.
Definition: asn1.h:114
#define ASN1_OID_INITIAL(first, second)
Initial OID byte.
Definition: asn1.h:108

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

Definition at line 272 of file asn1.h.

◆ 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 )
#define ASN1_OID_DOUBLE(value)
Double-byte OID value.
Definition: asn1.h:120
#define ASN1_OID_SINGLE(value)
Single-byte OID value.
Definition: asn1.h:114
#define ASN1_OID_INITIAL(first, second)
Initial OID byte.
Definition: asn1.h:108

ASN.1 OID for id-sha256 (2.16.840.1.101.3.4.2.1)

Definition at line 279 of file asn1.h.

◆ 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 )
#define ASN1_OID_DOUBLE(value)
Double-byte OID value.
Definition: asn1.h:120
#define ASN1_OID_SINGLE(value)
Single-byte OID value.
Definition: asn1.h:114
#define ASN1_OID_INITIAL(first, second)
Initial OID byte.
Definition: asn1.h:108

ASN.1 OID for id-sha384 (2.16.840.1.101.3.4.2.2)

Definition at line 286 of file asn1.h.

◆ 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 )
#define ASN1_OID_DOUBLE(value)
Double-byte OID value.
Definition: asn1.h:120
#define ASN1_OID_SINGLE(value)
Single-byte OID value.
Definition: asn1.h:114
#define ASN1_OID_INITIAL(first, second)
Initial OID byte.
Definition: asn1.h:108

ASN.1 OID for id-sha512 (2.16.840.1.101.3.4.2.3)

Definition at line 293 of file asn1.h.

◆ 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 )
#define ASN1_OID_DOUBLE(value)
Double-byte OID value.
Definition: asn1.h:120
#define ASN1_OID_SINGLE(value)
Single-byte OID value.
Definition: asn1.h:114
#define ASN1_OID_INITIAL(first, second)
Initial OID byte.
Definition: asn1.h:108

ASN.1 OID for id-sha224 (2.16.840.1.101.3.4.2.4)

Definition at line 300 of file asn1.h.

◆ 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 )
#define ASN1_OID_DOUBLE(value)
Double-byte OID value.
Definition: asn1.h:120
#define ASN1_OID_SINGLE(value)
Single-byte OID value.
Definition: asn1.h:114
#define ASN1_OID_INITIAL(first, second)
Initial OID byte.
Definition: asn1.h:108

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

Definition at line 307 of file asn1.h.

◆ 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 )
#define ASN1_OID_DOUBLE(value)
Double-byte OID value.
Definition: asn1.h:120
#define ASN1_OID_SINGLE(value)
Single-byte OID value.
Definition: asn1.h:114
#define ASN1_OID_INITIAL(first, second)
Initial OID byte.
Definition: asn1.h:108

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

Definition at line 314 of file asn1.h.

◆ ASN1_OID_COMMON_NAME

#define ASN1_OID_COMMON_NAME
Value:
ASN1_OID_SINGLE ( 3 )
#define ASN1_OID_SINGLE(value)
Single-byte OID value.
Definition: asn1.h:114
#define ASN1_OID_INITIAL(first, second)
Initial OID byte.
Definition: asn1.h:108

ASN.1 OID for commonName (2.5.4.3)

Definition at line 321 of file asn1.h.

◆ ASN1_OID_KEYUSAGE

#define ASN1_OID_KEYUSAGE
Value:
ASN1_OID_INITIAL ( 2, 5 ), ASN1_OID_SINGLE ( 29 ), \
ASN1_OID_SINGLE ( 15 )
#define ASN1_OID_SINGLE(value)
Single-byte OID value.
Definition: asn1.h:114
#define ASN1_OID_INITIAL(first, second)
Initial OID byte.
Definition: asn1.h:108

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

Definition at line 326 of file asn1.h.

◆ ASN1_OID_BASICCONSTRAINTS

#define ASN1_OID_BASICCONSTRAINTS
Value:
ASN1_OID_INITIAL ( 2, 5 ), ASN1_OID_SINGLE ( 29 ), \
ASN1_OID_SINGLE ( 19 )
#define ASN1_OID_SINGLE(value)
Single-byte OID value.
Definition: asn1.h:114
#define ASN1_OID_INITIAL(first, second)
Initial OID byte.
Definition: asn1.h:108

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

Definition at line 331 of file asn1.h.

◆ ASN1_OID_EXTKEYUSAGE

#define ASN1_OID_EXTKEYUSAGE
Value:
ASN1_OID_INITIAL ( 2, 5 ), ASN1_OID_SINGLE ( 29 ), \
ASN1_OID_SINGLE ( 37 )
#define ASN1_OID_SINGLE(value)
Single-byte OID value.
Definition: asn1.h:114
#define ASN1_OID_INITIAL(first, second)
Initial OID byte.
Definition: asn1.h:108

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

Definition at line 336 of file asn1.h.

◆ 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 )
#define ASN1_OID_SINGLE(value)
Single-byte OID value.
Definition: asn1.h:114
#define ASN1_OID_INITIAL(first, second)
Initial OID byte.
Definition: asn1.h:108

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

Definition at line 341 of file asn1.h.

◆ 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 )
#define ASN1_OID_DOUBLE(value)
Double-byte OID value.
Definition: asn1.h:120
#define ASN1_OID_SINGLE(value)
Single-byte OID value.
Definition: asn1.h:114
#define ASN1_OID_INITIAL(first, second)
Initial OID byte.
Definition: asn1.h:108

ASN.1 OID for id-signedData (1.2.840.113549.1.7.2)

Definition at line 348 of file asn1.h.

◆ 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 )
#define ASN1_OID_DOUBLE(value)
Double-byte OID value.
Definition: asn1.h:120
#define ASN1_OID_SINGLE(value)
Single-byte OID value.
Definition: asn1.h:114
#define ASN1_OID_INITIAL(first, second)
Initial OID byte.
Definition: asn1.h:108

ASN.1 OID for id-envelopedData (1.2.840.113549.1.7.3)

Definition at line 354 of file asn1.h.

◆ 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 )
#define ASN1_OID_DOUBLE(value)
Double-byte OID value.
Definition: asn1.h:120
#define ASN1_OID_SINGLE(value)
Single-byte OID value.
Definition: asn1.h:114
#define ASN1_OID_INITIAL(first, second)
Initial OID byte.
Definition: asn1.h:108

ASN.1 OID for id-authEnvelopedData (1.2.840.113549.1.9.16.1.23)

Definition at line 360 of file asn1.h.

◆ 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 )
#define ASN1_OID_SINGLE(value)
Single-byte OID value.
Definition: asn1.h:114
#define ASN1_OID_INITIAL(first, second)
Initial OID byte.
Definition: asn1.h:108

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

Definition at line 367 of file asn1.h.

◆ 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 )
#define ASN1_OID_SINGLE(value)
Single-byte OID value.
Definition: asn1.h:114
#define ASN1_OID_INITIAL(first, second)
Initial OID byte.
Definition: asn1.h:108

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

Definition at line 374 of file asn1.h.

◆ 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 )
#define ASN1_OID_SINGLE(value)
Single-byte OID value.
Definition: asn1.h:114
#define ASN1_OID_INITIAL(first, second)
Initial OID byte.
Definition: asn1.h:108

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

Definition at line 381 of file asn1.h.

◆ 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 )
#define ASN1_OID_SINGLE(value)
Single-byte OID value.
Definition: asn1.h:114
#define ASN1_OID_INITIAL(first, second)
Initial OID byte.
Definition: asn1.h:108

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

Definition at line 389 of file asn1.h.

◆ ASN1_OID_SUBJECTALTNAME

#define ASN1_OID_SUBJECTALTNAME
Value:
ASN1_OID_INITIAL ( 2, 5 ), ASN1_OID_SINGLE ( 29 ), \
ASN1_OID_SINGLE ( 17 )
#define ASN1_OID_SINGLE(value)
Single-byte OID value.
Definition: asn1.h:114
#define ASN1_OID_INITIAL(first, second)
Initial OID byte.
Definition: asn1.h:108

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

Definition at line 396 of file asn1.h.

◆ ASN1_CURSOR

#define ASN1_CURSOR (   value)
Value:
{ \
.data = value, \
.len = sizeof ( value ), \
}
pseudo_bit_t value[0x00020]
Definition: arbel.h:13

Define an ASN.1 cursor for a static value.

Definition at line 401 of file asn1.h.

◆ ASN1_ALGORITHMS

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

ASN.1 OID-identified algorithms.

Definition at line 432 of file asn1.h.

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

Function Documentation

◆ FILE_LICENCE()

FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL  )

◆ asn1_invalidate_cursor()

static void asn1_invalidate_cursor ( struct asn1_cursor cursor)
inlinestatic

Invalidate ASN.1 object cursor.

Parameters
cursorASN.1 object cursor

Definition at line 467 of file asn1.h.

467  {
468  cursor->len = 0;
469 }
size_t len
Length of data.
Definition: asn1.h:24

References asn1_cursor::len.

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

◆ asn1_type()

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

478  {
479  const uint8_t *type = cursor->data;
480 
481  return ( ( cursor->len >= sizeof ( *type ) ) ? *type : ASN1_END );
482 }
#define ASN1_END
ASN.1 end.
Definition: asn1.h:56
uint32_t type
Operating system type.
Definition: ena.h:12
const void * data
Start of data.
Definition: asn1.h:22
size_t len
Length of data.
Definition: asn1.h:24
unsigned char uint8_t
Definition: stdint.h:10

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

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

491  {
492  union {
493  struct asn1_builder builder;
494  struct asn1_cursor cursor;
495  } *u = container_of ( builder, typeof ( *u ), builder );
496 
497  /* Sanity check */
498  build_assert ( ( ( const void * ) &u->builder.data ) ==
499  &u->cursor.data );
500  build_assert ( &u->builder.len == &u->cursor.len );
501 
502  return &u->cursor;
503 }
union @18 u
#define container_of(ptr, type, field)
Get containing structure.
Definition: stddef.h:35
#define build_assert(condition)
Assert a condition at build time (after dead code elimination)
Definition: assert.h:76
An ASN.1 object builder.
Definition: asn1.h:28
typeof(acpi_finder=acpi_find)
ACPI table finder.
Definition: acpi.c:47
An ASN.1 object cursor.
Definition: asn1.h:20

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 
)

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

168  {
169  int len;
170 
171  /* Parse current object */
172  len = asn1_start ( cursor, type );
173  if ( len < 0 ) {
174  asn1_invalidate_cursor ( cursor );
175  return len;
176  }
177 
178  /* Update cursor */
179  if ( ( ( size_t ) len ) <= cursor->len )
180  cursor->len = len;
181 
182  DBGC ( cursor, "ASN1 %p entered object type %02x (len %x)\n",
183  cursor, type, len );
184  return 0;
185 }
uint32_t type
Operating system type.
Definition: ena.h:12
#define DBGC(...)
Definition: compiler.h:505
static int asn1_start(struct asn1_cursor *cursor, unsigned int type)
Start parsing ASN.1 object.
Definition: asn1.c:102
size_t len
Length of data.
Definition: asn1.h:24
ring len
Length.
Definition: dwmac.h:231
static void asn1_invalidate_cursor(struct asn1_cursor *cursor)
Invalidate ASN.1 object cursor.
Definition: asn1.h:467

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 
)

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

201  {
202  int len;
203 
204  /* Parse current object */
205  len = asn1_start ( cursor, type );
206  if ( len < 0 )
207  return len;
208 
209  /* Update cursor */
210  cursor->data += len;
211  cursor->len -= len;
212 
213  DBGC ( cursor, "ASN1 %p skipped object type %02x (len %x)\n",
214  cursor, type, len );
215  return 0;
216 }
uint32_t type
Operating system type.
Definition: ena.h:12
const void * data
Start of data.
Definition: asn1.h:22
#define DBGC(...)
Definition: compiler.h:505
static int asn1_start(struct asn1_cursor *cursor, unsigned int type)
Start parsing ASN.1 object.
Definition: asn1.c:102
size_t len
Length of data.
Definition: asn1.h:24
ring len
Length.
Definition: dwmac.h:231

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 
)

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

230  {
231  int rc;
232 
233  if ( ( rc = asn1_skip_if_exists ( cursor, type ) ) != 0 ) {
234  asn1_invalidate_cursor ( cursor );
235  return rc;
236  }
237 
238  return 0;
239 }
struct arbelprm_rc_send_wqe rc
Definition: arbel.h:14
uint32_t type
Operating system type.
Definition: ena.h:12
static void asn1_invalidate_cursor(struct asn1_cursor *cursor)
Invalidate ASN.1 object cursor.
Definition: asn1.h:467
int asn1_skip_if_exists(struct asn1_cursor *cursor, unsigned int type)
Skip ASN.1 object if present.
Definition: asn1.c:201

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 
)

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

253  {
254  struct asn1_cursor temp;
255  const void *end;
256  int len;
257 
258  /* Find end of object */
259  memcpy ( &temp, cursor, sizeof ( temp ) );
260  len = asn1_start ( &temp, type );
261  if ( len < 0 ) {
262  asn1_invalidate_cursor ( cursor );
263  return len;
264  }
265  end = ( temp.data + len );
266 
267  /* Shrink original cursor to contain only its first object */
268  cursor->len = ( end - cursor->data );
269 
270  return 0;
271 }
uint32_t type
Operating system type.
Definition: ena.h:12
const void * data
Start of data.
Definition: asn1.h:22
static int asn1_start(struct asn1_cursor *cursor, unsigned int type)
Start parsing ASN.1 object.
Definition: asn1.c:102
size_t len
Length of data.
Definition: asn1.h:24
void * memcpy(void *dest, const void *src, size_t len) __nonnull
ring len
Length.
Definition: dwmac.h:231
static void asn1_invalidate_cursor(struct asn1_cursor *cursor)
Invalidate ASN.1 object cursor.
Definition: asn1.h:467
uint32_t end
Ending offset.
Definition: netvsc.h:18
An ASN.1 object cursor.
Definition: asn1.h:20

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)

Enter ASN.1 object of any type.

Parameters
cursorASN.1 object cursor
Return values
rcReturn status code

Definition at line 279 of file asn1.c.

279  {
280  return asn1_enter ( cursor, ASN1_ANY );
281 }
int asn1_enter(struct asn1_cursor *cursor, unsigned int type)
Enter ASN.1 object.
Definition: asn1.c:168
#define ASN1_ANY
ASN.1 "any tag" magic value.
Definition: asn1.h:101

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

int asn1_skip_any ( struct asn1_cursor cursor)

◆ asn1_shrink_any()

int asn1_shrink_any ( struct asn1_cursor cursor)

Shrink ASN.1 object of any type.

Parameters
cursorASN.1 object cursor
Return values
rcReturn status code

Definition at line 299 of file asn1.c.

299  {
300  return asn1_shrink ( cursor, ASN1_ANY );
301 }
#define ASN1_ANY
ASN.1 "any tag" magic value.
Definition: asn1.h:101
int asn1_shrink(struct asn1_cursor *cursor, unsigned int type)
Shrink ASN.1 cursor to fit object.
Definition: asn1.c:253

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 
)

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

310  {
311  const struct {
312  uint8_t unused;
313  uint8_t data[0];
314  } __attribute__ (( packed )) *bit_string;
315  const uint8_t *last;
316  unsigned int unused_bits;
317  uint8_t unused_mask;
318  int rc;
319 
320  /* Enter bit string */
321  if ( ( rc = asn1_enter ( cursor, ASN1_BIT_STRING ) ) != 0 )
322  return rc;
323 
324  /* Check that bit string header exists */
325  if ( cursor->len < sizeof ( *bit_string ) ) {
326  DBGC ( cursor, "ASN1 %p invalid bit string:\n", cursor );
327  DBGC_HDA ( cursor, 0, cursor->data, cursor->len );
328  asn1_invalidate_cursor ( cursor );
329  return -EINVAL_BIT_STRING;
330  }
331  bit_string = cursor->data;
332  cursor->data = &bit_string->data;
333  cursor->len -= offsetof ( typeof ( *bit_string ), data );
334  unused_bits = bit_string->unused;
335 
336  /* Check validity of unused bits */
337  unused_mask = ( 0xff >> ( 8 - unused_bits ) );
338  last = ( cursor->data + cursor->len - 1 );
339  if ( ( unused_bits >= 8 ) ||
340  ( ( unused_bits > 0 ) && ( cursor->len == 0 ) ) ||
341  ( ( *last & unused_mask ) != 0 ) ) {
342  DBGC ( cursor, "ASN1 %p invalid bit string:\n", cursor );
343  DBGC_HDA ( cursor, 0, cursor->data, cursor->len );
344  asn1_invalidate_cursor ( cursor );
345  return -EINVAL_BIT_STRING;
346  }
347 
348  /* Record or check number of unused bits, as applicable */
349  if ( unused ) {
350  *unused = unused_bits;
351  } else if ( unused_bits ) {
352  DBGC ( cursor, "ASN1 %p invalid integral bit string:\n",
353  cursor );
354  DBGC_HDA ( cursor, 0, cursor->data, cursor->len );
355  asn1_invalidate_cursor ( cursor );
356  return -EINVAL_BIT_STRING;
357  }
358 
359  return 0;
360 }
#define __attribute__(x)
Definition: compiler.h:10
struct arbelprm_rc_send_wqe rc
Definition: arbel.h:14
#define EINVAL_BIT_STRING
Definition: asn1.c:73
int asn1_enter(struct asn1_cursor *cursor, unsigned int type)
Enter ASN.1 object.
Definition: asn1.c:168
const void * data
Start of data.
Definition: asn1.h:22
#define DBGC(...)
Definition: compiler.h:505
#define offsetof(type, field)
Get offset of a field within a structure.
Definition: stddef.h:24
size_t len
Length of data.
Definition: asn1.h:24
#define DBGC_HDA(...)
Definition: compiler.h:506
static void asn1_invalidate_cursor(struct asn1_cursor *cursor)
Invalidate ASN.1 object cursor.
Definition: asn1.h:467
unsigned char uint8_t
Definition: stdint.h:10
uint8_t unused
Unused.
Definition: librm.h:140
uint8_t data[48]
Additional event data.
Definition: ena.h:22
typeof(acpi_finder=acpi_find)
ACPI table finder.
Definition: acpi.c:47
#define ASN1_BIT_STRING
ASN.1 bit string.
Definition: asn1.h:65

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)

Enter ASN.1 unsigned integer.

Parameters
cursorASN.1 object cursor
Return values
rcReturn status code

Definition at line 368 of file asn1.c.

368  {
369  int rc;
370 
371  /* Enter integer */
372  if ( ( rc = asn1_enter ( cursor, ASN1_INTEGER ) ) != 0 )
373  return rc;
374 
375  /* Skip initial positive sign byte if applicable */
376  if ( ( cursor->len > 1 ) &&
377  ( *( ( uint8_t * ) cursor->data ) == 0x00 ) ) {
378  cursor->data++;
379  cursor->len--;
380  }
381 
382  return 0;
383 }
struct arbelprm_rc_send_wqe rc
Definition: arbel.h:14
int asn1_enter(struct asn1_cursor *cursor, unsigned int type)
Enter ASN.1 object.
Definition: asn1.c:168
const void * data
Start of data.
Definition: asn1.h:22
size_t len
Length of data.
Definition: asn1.h:24
unsigned char uint8_t
Definition: stdint.h:10
#define ASN1_INTEGER
ASN.1 integer.
Definition: asn1.h:62

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)

Parse value of ASN.1 boolean.

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

Definition at line 391 of file asn1.c.

391  {
392  struct asn1_cursor contents;
393  const struct {
394  uint8_t value;
395  } __attribute__ (( packed )) *boolean;
396 
397  /* Enter boolean */
398  memcpy ( &contents, cursor, sizeof ( contents ) );
399  asn1_enter ( &contents, ASN1_BOOLEAN );
400  if ( contents.len != sizeof ( *boolean ) )
401  return -EINVAL_ASN1_BOOLEAN;
402 
403  /* Extract value */
404  boolean = contents.data;
405  return boolean->value;
406 }
#define __attribute__(x)
Definition: compiler.h:10
int asn1_enter(struct asn1_cursor *cursor, unsigned int type)
Enter ASN.1 object.
Definition: asn1.c:168
#define ASN1_BOOLEAN
ASN.1 boolean.
Definition: asn1.h:59
void * memcpy(void *dest, const void *src, size_t len) __nonnull
pseudo_bit_t value[0x00020]
Definition: arbel.h:13
unsigned char uint8_t
Definition: stdint.h:10
#define EINVAL_ASN1_BOOLEAN
Definition: asn1.c:57
An ASN.1 object cursor.
Definition: asn1.h:20

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 
)

Parse value of ASN.1 integer.

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

Definition at line 415 of file asn1.c.

415  {
416  struct asn1_cursor contents;
417  uint8_t high_byte;
418  int rc;
419 
420  /* Enter integer */
421  memcpy ( &contents, cursor, sizeof ( contents ) );
422  if ( ( rc = asn1_enter ( &contents, ASN1_INTEGER ) ) != 0 )
423  return rc;
424  if ( contents.len < 1 )
425  return -EINVAL_ASN1_INTEGER;
426 
427  /* Initialise value according to sign byte */
428  *value = *( ( int8_t * ) contents.data );
429  contents.data++;
430  contents.len--;
431 
432  /* Process value */
433  while ( contents.len ) {
434  high_byte = ( (*value) >> ( 8 * ( sizeof ( *value ) - 1 ) ) );
435  if ( ( high_byte != 0x00 ) && ( high_byte != 0xff ) ) {
436  DBGC ( cursor, "ASN1 %p integer overflow\n", cursor );
437  return -EINVAL_ASN1_INTEGER;
438  }
439  *value = ( ( *value << 8 ) | *( ( uint8_t * ) contents.data ) );
440  contents.data++;
441  contents.len--;
442  }
443 
444  return 0;
445 }
struct arbelprm_rc_send_wqe rc
Definition: arbel.h:14
int asn1_enter(struct asn1_cursor *cursor, unsigned int type)
Enter ASN.1 object.
Definition: asn1.c:168
#define DBGC(...)
Definition: compiler.h:505
void * memcpy(void *dest, const void *src, size_t len) __nonnull
pseudo_bit_t value[0x00020]
Definition: arbel.h:13
#define EINVAL_ASN1_INTEGER
Definition: asn1.c:61
signed char int8_t
Definition: stdint.h:15
unsigned char uint8_t
Definition: stdint.h:10
#define ASN1_INTEGER
ASN.1 integer.
Definition: asn1.h:62
An ASN.1 object cursor.
Definition: asn1.h:20

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 
)

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

458  {
459  int difference;
460 
461  difference = ( cursor2->len - cursor1->len );
462  return ( difference ? difference :
463  memcmp ( cursor1->data, cursor2->data, cursor1->len ) );
464 }
const void * data
Start of data.
Definition: asn1.h:22
size_t len
Length of data.
Definition: asn1.h:24
int memcmp(const void *first, const void *second, size_t len)
Compare memory regions.
Definition: string.c:114

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 
)

Parse ASN.1 OID-identified algorithm.

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

Definition at line 493 of file asn1.c.

495  {
496  struct asn1_cursor contents;
497  int rc;
498 
499  /* Enter algorithm */
500  memcpy ( &contents, cursor, sizeof ( contents ) );
501  asn1_enter ( &contents, ASN1_SEQUENCE );
502 
503  /* Get raw parameters, if applicable */
504  if ( params ) {
505  memcpy ( params, &contents, sizeof ( *params ) );
506  asn1_skip_any ( params );
507  }
508 
509  /* Enter algorithm identifier */
510  if ( ( rc = asn1_enter ( &contents, ASN1_OID ) ) != 0 ) {
511  DBGC ( cursor, "ASN1 %p cannot locate algorithm OID:\n",
512  cursor );
513  DBGC_HDA ( cursor, 0, cursor->data, cursor->len );
514  return -EINVAL_ASN1_ALGORITHM;
515  }
516 
517  /* Identify algorithm */
518  *algorithm = asn1_find_algorithm ( &contents );
519  if ( ! *algorithm ) {
520  DBGC ( cursor, "ASN1 %p unrecognised algorithm:\n", cursor );
521  DBGC_HDA ( cursor, 0, cursor->data, cursor->len );
522  return -ENOTSUP_ALGORITHM;
523  }
524 
525  /* Parse parameters, if applicable */
526  if ( params && (*algorithm)->parse &&
527  ( ( rc = (*algorithm)->parse ( *algorithm, params ) ) != 0 ) ) {
528  DBGC ( cursor, "ASN1 %p cannot parse %s parameters: %s\n",
529  cursor, (*algorithm)->name, strerror ( rc ) );
530  return rc;
531  }
532 
533  return 0;
534 }
#define EINVAL_ASN1_ALGORITHM
Definition: asn1.c:69
struct arbelprm_rc_send_wqe rc
Definition: arbel.h:14
int asn1_enter(struct asn1_cursor *cursor, unsigned int type)
Enter ASN.1 object.
Definition: asn1.c:168
const void * data
Start of data.
Definition: asn1.h:22
#define DBGC(...)
Definition: compiler.h:505
int asn1_skip_any(struct asn1_cursor *cursor)
Skip ASN.1 object of any type.
Definition: asn1.c:289
size_t len
Length of data.
Definition: asn1.h:24
void * memcpy(void *dest, const void *src, size_t len) __nonnull
#define DBGC_HDA(...)
Definition: compiler.h:506
char * strerror(int errno)
Retrieve string representation of error number.
Definition: strerror.c:78
#define ASN1_SEQUENCE
ASN.1 sequence.
Definition: asn1.h:89
u16 algorithm
Authentication algorithm (Open System or Shared Key)
Definition: ieee80211.h:1030
static struct asn1_algorithm * asn1_find_algorithm(const struct asn1_cursor *cursor)
Identify ASN.1 algorithm by OID.
Definition: asn1.c:474
#define ASN1_OID
ASN.1 object identifier.
Definition: asn1.h:74
#define ENOTSUP_ALGORITHM
Definition: asn1.c:77
An ASN.1 object cursor.
Definition: asn1.h:20

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 
)

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

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

Definition at line 543 of file asn1.c.

544  {
545  int rc;
546 
547  /* Parse algorithm */
548  if ( ( rc = asn1_algorithm ( cursor, algorithm, NULL ) ) != 0 )
549  return rc;
550 
551  /* Check algorithm has a public key */
552  if ( ! (*algorithm)->pubkey ) {
553  DBGC ( cursor, "ASN1 %p algorithm %s is not a public-key "
554  "algorithm:\n", cursor, (*algorithm)->name );
555  DBGC_HDA ( cursor, 0, cursor->data, cursor->len );
556  return -ENOTTY_ALGORITHM;
557  }
558 
559  return 0;
560 }
An ASN.1 OID-identified algorithm.
Definition: asn1.h:407
struct arbelprm_rc_send_wqe rc
Definition: arbel.h:14
#define ENOTTY_ALGORITHM
Definition: asn1.c:81
const void * data
Start of data.
Definition: asn1.h:22
#define DBGC(...)
Definition: compiler.h:505
size_t len
Length of data.
Definition: asn1.h:24
#define DBGC_HDA(...)
Definition: compiler.h:506
u16 algorithm
Authentication algorithm (Open System or Shared Key)
Definition: ieee80211.h:1030
#define NULL
NULL pointer (VOID *)
Definition: Base.h:321

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 
)

Parse ASN.1 OID-identified digest algorithm.

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

Definition at line 569 of file asn1.c.

570  {
571  int rc;
572 
573  /* Parse algorithm */
574  if ( ( rc = asn1_algorithm ( cursor, algorithm, NULL ) ) != 0 )
575  return rc;
576 
577  /* Check algorithm has a digest */
578  if ( ! (*algorithm)->digest ) {
579  DBGC ( cursor, "ASN1 %p algorithm %s is not a digest "
580  "algorithm:\n", cursor, (*algorithm)->name );
581  DBGC_HDA ( cursor, 0, cursor->data, cursor->len );
582  return -ENOTTY_ALGORITHM;
583  }
584 
585  return 0;
586 }
An ASN.1 OID-identified algorithm.
Definition: asn1.h:407
struct arbelprm_rc_send_wqe rc
Definition: arbel.h:14
#define ENOTTY_ALGORITHM
Definition: asn1.c:81
const void * data
Start of data.
Definition: asn1.h:22
#define DBGC(...)
Definition: compiler.h:505
size_t len
Length of data.
Definition: asn1.h:24
#define DBGC_HDA(...)
Definition: compiler.h:506
u16 algorithm
Authentication algorithm (Open System or Shared Key)
Definition: ieee80211.h:1030
#define NULL
NULL pointer (VOID *)
Definition: Base.h:321

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 
)

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

598  {
599  int rc;
600 
601  /* Parse algorithm */
602  if ( ( rc = asn1_algorithm ( cursor, algorithm, params ) ) != 0 )
603  return rc;
604 
605  /* Check algorithm has a cipher */
606  if ( ! (*algorithm)->cipher ) {
607  DBGC ( cursor, "ASN1 %p algorithm %s is not a cipher "
608  "algorithm:\n", cursor, (*algorithm)->name );
609  DBGC_HDA ( cursor, 0, cursor->data, cursor->len );
610  return -ENOTTY_ALGORITHM;
611  }
612 
613  return 0;
614 }
An ASN.1 OID-identified algorithm.
Definition: asn1.h:407
struct arbelprm_rc_send_wqe rc
Definition: arbel.h:14
#define ENOTTY_ALGORITHM
Definition: asn1.c:81
const void * data
Start of data.
Definition: asn1.h:22
#define DBGC(...)
Definition: compiler.h:505
size_t len
Length of data.
Definition: asn1.h:24
#define DBGC_HDA(...)
Definition: compiler.h:506
u16 algorithm
Authentication algorithm (Open System or Shared Key)
Definition: ieee80211.h:1030

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 
)

Parse ASN.1 OID-identified signature algorithm.

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

Definition at line 623 of file asn1.c.

624  {
625  int rc;
626 
627  /* Parse algorithm */
628  if ( ( rc = asn1_algorithm ( cursor, algorithm, NULL ) ) != 0 )
629  return rc;
630 
631  /* Check algorithm has a public key */
632  if ( ! (*algorithm)->pubkey ) {
633  DBGC ( cursor, "ASN1 %p algorithm %s is not a signature "
634  "algorithm:\n", cursor, (*algorithm)->name );
635  DBGC_HDA ( cursor, 0, cursor->data, cursor->len );
636  return -ENOTTY_ALGORITHM;
637  }
638 
639  /* Check algorithm has a digest */
640  if ( ! (*algorithm)->digest ) {
641  DBGC ( cursor, "ASN1 %p algorithm %s is not a signature "
642  "algorithm:\n", cursor, (*algorithm)->name );
643  DBGC_HDA ( cursor, 0, cursor->data, cursor->len );
644  return -ENOTTY_ALGORITHM;
645  }
646 
647  return 0;
648 }
An ASN.1 OID-identified algorithm.
Definition: asn1.h:407
struct arbelprm_rc_send_wqe rc
Definition: arbel.h:14
#define ENOTTY_ALGORITHM
Definition: asn1.c:81
const void * data
Start of data.
Definition: asn1.h:22
#define DBGC(...)
Definition: compiler.h:505
size_t len
Length of data.
Definition: asn1.h:24
#define DBGC_HDA(...)
Definition: compiler.h:506
u16 algorithm
Authentication algorithm (Open System or Shared Key)
Definition: ieee80211.h:1030
#define NULL
NULL pointer (VOID *)
Definition: Base.h:321

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 
)

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

660  {
661  struct asn1_cursor curve;
662 
663  /* Elliptic curves are identified as either:
664  *
665  * - a wrapper algorithm "id-ecPublicKey" with the actual
666  * curve specified in the algorithm parameters, or
667  *
668  * - a standalone object identifier for the curve
669  */
670  if ( ( wrapper == NULL ) ||
671  ( asn1_check_algorithm ( cursor, wrapper, &curve ) != 0 ) ) {
672  memcpy ( &curve, cursor, sizeof ( curve ) );
673  }
674 
675  /* Identify curve */
676  asn1_enter ( &curve, ASN1_OID );
677  *algorithm = asn1_find_algorithm ( &curve );
678  if ( ! *algorithm ) {
679  DBGC ( cursor, "ASN1 %p unrecognised EC algorithm:\n",
680  cursor );
681  DBGC_HDA ( cursor, 0, cursor->data, cursor->len );
682  return -ENOTSUP_ALGORITHM;
683  }
684 
685  /* Check algorithm has an elliptic curve */
686  if ( ! (*algorithm)->curve ) {
687  DBGC ( cursor, "ASN1 %p algorithm %s is not an elliptic curve "
688  "algorithm:\n", cursor, (*algorithm)->name );
689  DBGC_HDA ( cursor, 0, cursor->data, cursor->len );
690  return -ENOTTY_ALGORITHM;
691  }
692 
693  return 0;
694 }
#define ENOTTY_ALGORITHM
Definition: asn1.c:81
int asn1_enter(struct asn1_cursor *cursor, unsigned int type)
Enter ASN.1 object.
Definition: asn1.c:168
const void * data
Start of data.
Definition: asn1.h:22
#define DBGC(...)
Definition: compiler.h:505
size_t len
Length of data.
Definition: asn1.h:24
void * memcpy(void *dest, const void *src, size_t len) __nonnull
#define DBGC_HDA(...)
Definition: compiler.h:506
u16 algorithm
Authentication algorithm (Open System or Shared Key)
Definition: ieee80211.h:1030
static struct asn1_algorithm * asn1_find_algorithm(const struct asn1_cursor *cursor)
Identify ASN.1 algorithm by OID.
Definition: asn1.c:474
#define ASN1_OID
ASN.1 object identifier.
Definition: asn1.h:74
#define ENOTSUP_ALGORITHM
Definition: asn1.c:77
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:704
#define NULL
NULL pointer (VOID *)
Definition: Base.h:321
An ASN.1 object cursor.
Definition: asn1.h:20

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 
)

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

706  {
707  struct asn1_algorithm *actual;
708  int rc;
709 
710  /* Parse algorithm */
711  if ( ( rc = asn1_algorithm ( cursor, &actual, params ) ) != 0 )
712  return rc;
713 
714  /* Check algorithm matches */
715  if ( actual != expected ) {
716  DBGC ( cursor, "ASN1 %p algorithm %s does not match %s\n",
717  cursor, actual->name, expected->name );
718  return -ENOTTY_ALGORITHM;
719  }
720 
721  return 0;
722 }
An ASN.1 OID-identified algorithm.
Definition: asn1.h:407
struct arbelprm_rc_send_wqe rc
Definition: arbel.h:14
#define ENOTTY_ALGORITHM
Definition: asn1.c:81
#define DBGC(...)
Definition: compiler.h:505
const char * name
Name.
Definition: asn1.h:409

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 
)

Parse ASN.1 CBC cipher parameters.

Parameters
algorithmAlgorithm
paramParameters to parse
Return values
rcReturn status code

Definition at line 731 of file asn1.c.

732  {
733  struct cipher_algorithm *cipher = algorithm->cipher;
734 
735  /* Sanity check */
736  assert ( cipher != NULL );
737 
738  /* Enter parameters */
739  asn1_enter ( params, ASN1_OCTET_STRING );
740 
741  /* Check length */
742  if ( params->len != cipher->blocksize )
743  return -EINVAL;
744 
745  return 0;
746 }
#define EINVAL
Invalid argument.
Definition: errno.h:428
size_t blocksize
Block size.
Definition: crypto.h:60
int asn1_enter(struct asn1_cursor *cursor, unsigned int type)
Enter ASN.1 object.
Definition: asn1.c:168
size_t len
Length of data.
Definition: asn1.h:24
assert((readw(&hdr->flags) &(GTF_reading|GTF_writing))==0)
u16 algorithm
Authentication algorithm (Open System or Shared Key)
Definition: ieee80211.h:1030
A cipher algorithm.
Definition: crypto.h:50
#define ASN1_OCTET_STRING
ASN.1 octet string.
Definition: asn1.h:68
#define NULL
NULL pointer (VOID *)
Definition: Base.h:321

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 
)

◆ asn1_generalized_time()

int asn1_generalized_time ( const struct asn1_cursor cursor,
time_t time 
)

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

776  {
777  struct asn1_cursor contents;
778  unsigned int have_century;
779  unsigned int type;
780  union {
781  struct {
783  uint8_t year;
784  uint8_t month;
785  uint8_t day;
786  uint8_t hour;
787  uint8_t minute;
788  uint8_t second;
789  } __attribute__ (( packed )) named;
790  uint8_t raw[7];
791  } pairs;
792  struct tm tm;
793  const uint8_t *data;
794  size_t remaining;
795  unsigned int tens;
796  unsigned int units;
797  unsigned int i;
798  int rc;
799 
800  /* Determine time format utcTime/generalizedTime */
801  memcpy ( &contents, cursor, sizeof ( contents ) );
802  type = asn1_type ( &contents );
803  switch ( type ) {
804  case ASN1_UTC_TIME:
805  have_century = 0;
806  break;
808  have_century = 1;
809  break;
810  default:
811  DBGC ( cursor, "ASN1 %p invalid time type %02x\n",
812  cursor, type );
813  DBGC_HDA ( cursor, 0, cursor->data, cursor->len );
814  return -EINVAL_ASN1_TIME;
815  }
816 
817  /* Enter utcTime/generalizedTime */
818  if ( ( rc = asn1_enter ( &contents, type ) ) != 0 ) {
819  DBGC ( cursor, "ASN1 %p cannot locate %s time:\n", cursor,
820  ( ( type == ASN1_UTC_TIME ) ? "UTC" : "generalized" ) );
821  DBGC_HDA ( cursor, 0, cursor->data, cursor->len );
822  return rc;
823  }
824 
825  /* Parse digit string a pair at a time */
826  memset ( &pairs, 0, sizeof ( pairs ) );
827  data = contents.data;
828  remaining = contents.len;
829  for ( i = ( have_century ? 0 : 1 ) ; i < sizeof ( pairs.raw ) ; i++ ) {
830  if ( remaining < 2 ) {
831  /* Some certificates violate the X.509 RFC by
832  * omitting the "seconds" value.
833  */
834  if ( i == ( sizeof ( pairs.raw ) - 1 ) )
835  break;
836  DBGC ( cursor, "ASN1 %p invalid time:\n", cursor );
837  DBGC_HDA ( cursor, 0, cursor->data, cursor->len );
838  return -EINVAL_ASN1_TIME;
839  }
840  tens = data[0];
841  units = data[1];
842  if ( ! ( isdigit ( tens ) && isdigit ( units ) ) ) {
843  DBGC ( cursor, "ASN1 %p invalid time:\n", cursor );
844  DBGC_HDA ( cursor, 0, cursor->data, cursor->len );
845  return -EINVAL_ASN1_TIME;
846  }
847  pairs.raw[i] = ( ( 10 * ( tens - '0' ) ) + ( units - '0' ) );
848  data += 2;
849  remaining -= 2;
850  }
851 
852  /* Determine century if applicable */
853  if ( ! have_century )
854  pairs.named.century = ( ( pairs.named.year >= 50 ) ? 19 : 20 );
855 
856  /* Check for trailing "Z" */
857  if ( ( remaining != 1 ) || ( data[0] != 'Z' ) ) {
858  DBGC ( cursor, "ASN1 %p invalid time:\n", cursor );
859  DBGC_HDA ( cursor, 0, cursor->data, cursor->len );
860  return -EINVAL_ASN1_TIME;
861  }
862 
863  /* Fill in time */
864  tm.tm_year = ( ( ( pairs.named.century - 19 ) * 100 ) +
865  pairs.named.year );
866  tm.tm_mon = ( pairs.named.month - 1 );
867  tm.tm_mday = pairs.named.day;
868  tm.tm_hour = pairs.named.hour;
869  tm.tm_min = pairs.named.minute;
870  tm.tm_sec = pairs.named.second;
871 
872  /* Convert to seconds since the Epoch */
873  *time = mktime ( &tm );
874 
875  return 0;
876 }
#define __attribute__(x)
Definition: compiler.h:10
struct arbelprm_rc_send_wqe rc
Definition: arbel.h:14
int tm_min
Minutes [0,59].
Definition: time.h:19
#define EINVAL_ASN1_TIME
Definition: asn1.c:65
int asn1_enter(struct asn1_cursor *cursor, unsigned int type)
Enter ASN.1 object.
Definition: asn1.c:168
uint32_t type
Operating system type.
Definition: ena.h:12
int tm_mday
Day of month [1,31].
Definition: time.h:23
const void * data
Start of data.
Definition: asn1.h:22
#define DBGC(...)
Definition: compiler.h:505
uint8_t year
Year (BCD)
Definition: ucode.h:12
int tm_year
Years since 1900.
Definition: time.h:27
static unsigned int asn1_type(const struct asn1_cursor *cursor)
Extract ASN.1 type.
Definition: asn1.h:478
size_t len
Length of data.
Definition: asn1.h:24
static int isdigit(int character)
Check if character is a decimal digit.
Definition: ctype.h:29
void * memcpy(void *dest, const void *src, size_t len) __nonnull
#define DBGC_HDA(...)
Definition: compiler.h:506
int tm_mon
Month of year [0,11].
Definition: time.h:25
time_t mktime(struct tm *tm)
Calculate seconds since the Epoch.
Definition: time.c:117
#define ASN1_GENERALIZED_TIME
ASN.1 generalized time.
Definition: asn1.h:86
unsigned char uint8_t
Definition: stdint.h:10
Broken-down time.
Definition: time.h:15
uint8_t century
Century (BCD)
Definition: ucode.h:14
uint8_t data[48]
Additional event data.
Definition: ena.h:22
uint8_t day
Day (BCD)
Definition: ucode.h:16
int tm_sec
Seconds [0,60].
Definition: time.h:17
__be32 raw[7]
Definition: CIB_PRM.h:28
#define ASN1_UTC_TIME
ASN.1 UTC time.
Definition: asn1.h:83
int tm_hour
Hour [0,23].
Definition: time.h:21
uint8_t month
Month (BCD)
Definition: ucode.h:18
An ASN.1 object cursor.
Definition: asn1.h:20
void * memset(void *dest, int character, size_t len) __nonnull

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 
)

Grow ASN.1 builder.

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

Definition at line 915 of file asn1.c.

915  {
916  size_t new_len;
917  void *new;
918 
919  /* As with the ASN1 parsing functions, make errors permanent */
920  if ( builder->len && ! builder->data )
921  return -ENOMEM;
922 
923  /* Reallocate data buffer */
924  new_len = ( builder->len + extra );
925  new = realloc ( builder->data, new_len );
926  if ( ! new ) {
927  free ( builder->data );
928  builder->data = NULL;
929  return -ENOMEM;
930  }
931  builder->data = new;
932 
933  /* Move existing data to end of buffer */
934  memmove ( ( builder->data + extra ), builder->data, builder->len );
935  builder->len = new_len;
936 
937  return 0;
938 }
void * data
Data.
Definition: asn1.h:35
uint8_t extra
Signature extra byte.
Definition: smbios.h:17
#define ENOMEM
Not enough space.
Definition: errno.h:534
static void(* free)(struct refcnt *refcnt))
Definition: refcnt.h:54
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:606
#define NULL
NULL pointer (VOID *)
Definition: Base.h:321
size_t len
Length of data.
Definition: asn1.h:37

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

Referenced by asn1_prepend(), asn1_prepend_raw(), asn1_wrap(), rsa_decrypt(), rsa_encrypt(), and rsa_sign().

◆ asn1_prepend_raw()

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

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

949  {
950  int rc;
951 
952  /* Grow buffer */
953  if ( ( rc = asn1_grow ( builder, len ) ) != 0 )
954  return rc;
955 
956  /* Populate data buffer */
957  memcpy ( builder->data, data, len );
958 
959  return 0;
960 }
struct arbelprm_rc_send_wqe rc
Definition: arbel.h:14
void * data
Data.
Definition: asn1.h:35
void * memcpy(void *dest, const void *src, size_t len) __nonnull
ring len
Length.
Definition: dwmac.h:231
int asn1_grow(struct asn1_builder *builder, size_t extra)
Grow ASN.1 builder.
Definition: asn1.c:915
uint8_t data[48]
Additional event data.
Definition: ena.h:22

References asn1_grow(), data, asn1_builder::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 
)

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

972  {
974  size_t header_len;
975  int rc;
976 
977  /* Construct header */
978  header_len = asn1_header ( &header, type, len );
979 
980  /* Grow buffer */
981  if ( ( rc = asn1_grow ( builder, header_len + len ) ) != 0 )
982  return rc;
983 
984  /* Populate data buffer */
985  memcpy ( builder->data, &header, header_len );
986  memcpy ( ( builder->data + header_len ), data, len );
987 
988  return 0;
989 }
struct arbelprm_rc_send_wqe rc
Definition: arbel.h:14
void * data
Data.
Definition: asn1.h:35
uint32_t type
Operating system type.
Definition: ena.h:12
void * memcpy(void *dest, const void *src, size_t len) __nonnull
ring len
Length.
Definition: dwmac.h:231
int asn1_grow(struct asn1_builder *builder, size_t extra)
Grow ASN.1 builder.
Definition: asn1.c:915
static size_t asn1_header(struct asn1_builder_header *header, unsigned int type, size_t len)
Construct ASN.1 header.
Definition: asn1.c:886
An ASN.1 header.
Definition: asn1.h:48
struct ena_llq_option header
Header locations.
Definition: ena.h:16
uint8_t data[48]
Additional event data.
Definition: ena.h:22

References asn1_grow(), asn1_header(), data, asn1_builder::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 
)

Wrap ASN.1 builder.

Parameters
builderASN.1 builder
typeType
Return values
rcReturn status code

Definition at line 998 of file asn1.c.

998  {
1000  size_t header_len;
1001  int rc;
1002 
1003  /* Construct header */
1004  header_len = asn1_header ( &header, type, builder->len );
1005 
1006  /* Grow buffer */
1007  if ( ( rc = asn1_grow ( builder, header_len ) ) != 0 )
1008  return rc;
1009 
1010  /* Populate data buffer */
1011  memcpy ( builder->data, &header, header_len );
1012 
1013  return 0;
1014 }
struct arbelprm_rc_send_wqe rc
Definition: arbel.h:14
void * data
Data.
Definition: asn1.h:35
uint32_t type
Operating system type.
Definition: ena.h:12
void * memcpy(void *dest, const void *src, size_t len) __nonnull
int asn1_grow(struct asn1_builder *builder, size_t extra)
Grow ASN.1 builder.
Definition: asn1.c:915
static size_t asn1_header(struct asn1_builder_header *header, unsigned int type, size_t len)
Construct ASN.1 header.
Definition: asn1.c:886
An ASN.1 header.
Definition: asn1.h:48
struct ena_llq_option header
Header locations.
Definition: ena.h:16
size_t len
Length of data.
Definition: asn1.h:37

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

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