46 #define ASN1_MAX_LEN_LEN ( 1 + sizeof ( size_t ) ) 60 #define ASN1_BOOLEAN 0x01 63 #define ASN1_INTEGER 0x02 66 #define ASN1_BIT_STRING 0x03 69 #define ASN1_OCTET_STRING 0x04 72 #define ASN1_NULL 0x05 78 #define ASN1_ENUMERATED 0x0a 81 #define ASN1_UTF8_STRING 0x0c 84 #define ASN1_UTC_TIME 0x17 87 #define ASN1_GENERALIZED_TIME 0x18 90 #define ASN1_SEQUENCE 0x30 96 #define ASN1_IMPLICIT_TAG( number) ( 0x80 | (number) ) 99 #define ASN1_EXPLICIT_TAG( number) ( 0xa0 | (number) ) 105 #define ASN1_SHORT( tag, ... ) \ 106 (tag), VA_ARG_COUNT ( __VA_ARGS__ ), __VA_ARGS__ 109 #define ASN1_OID_INITIAL( first, second ) ( ( (first) * 40 ) + (second) ) 115 #define ASN1_OID_SINGLE( value ) ( (value) & 0x7f ) 121 #define ASN1_OID_DOUBLE( value ) \ 122 ( 0x80 | ( ( (value) >> 7 ) & 0x7f ) ), ASN1_OID_SINGLE ( (value) ) 128 #define ASN1_OID_TRIPLE( value ) \ 129 ( 0x80 | ( ( (value) >> 14 ) & 0x7f ) ), ASN1_OID_DOUBLE ( (value) ) 132 #define ASN1_OID_ECPUBLICKEY \ 133 ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \ 134 ASN1_OID_DOUBLE ( 10045 ), ASN1_OID_SINGLE ( 2 ), \ 135 ASN1_OID_SINGLE ( 1 ) 138 #define ASN1_OID_PRIME256V1 \ 139 ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \ 140 ASN1_OID_DOUBLE ( 10045 ), ASN1_OID_SINGLE ( 3 ), \ 141 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 7 ) 144 #define ASN1_OID_ECDSA_WITH_SHA224 \ 145 ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \ 146 ASN1_OID_DOUBLE ( 10045 ), ASN1_OID_SINGLE ( 4 ), \ 147 ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 1 ) 150 #define ASN1_OID_ECDSA_WITH_SHA256 \ 151 ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \ 152 ASN1_OID_DOUBLE ( 10045 ), ASN1_OID_SINGLE ( 4 ), \ 153 ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 2 ) 156 #define ASN1_OID_ECDSA_WITH_SHA384 \ 157 ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \ 158 ASN1_OID_DOUBLE ( 10045 ), ASN1_OID_SINGLE ( 4 ), \ 159 ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 3 ) 162 #define ASN1_OID_ECDSA_WITH_SHA512 \ 163 ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \ 164 ASN1_OID_DOUBLE ( 10045 ), ASN1_OID_SINGLE ( 4 ), \ 165 ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 4 ) 168 #define ASN1_OID_RSAENCRYPTION \ 169 ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \ 170 ASN1_OID_TRIPLE ( 113549 ), ASN1_OID_SINGLE ( 1 ), \ 171 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 1 ) 174 #define ASN1_OID_MD5WITHRSAENCRYPTION \ 175 ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \ 176 ASN1_OID_TRIPLE ( 113549 ), ASN1_OID_SINGLE ( 1 ), \ 177 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 4 ) 180 #define ASN1_OID_SHA1WITHRSAENCRYPTION \ 181 ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \ 182 ASN1_OID_TRIPLE ( 113549 ), ASN1_OID_SINGLE ( 1 ), \ 183 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 5 ) 186 #define ASN1_OID_SHA256WITHRSAENCRYPTION \ 187 ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \ 188 ASN1_OID_TRIPLE ( 113549 ), ASN1_OID_SINGLE ( 1 ), \ 189 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 11 ) 192 #define ASN1_OID_SHA384WITHRSAENCRYPTION \ 193 ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \ 194 ASN1_OID_TRIPLE ( 113549 ), ASN1_OID_SINGLE ( 1 ), \ 195 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 12 ) 198 #define ASN1_OID_SHA512WITHRSAENCRYPTION \ 199 ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \ 200 ASN1_OID_TRIPLE ( 113549 ), ASN1_OID_SINGLE ( 1 ), \ 201 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 13 ) 204 #define ASN1_OID_SHA224WITHRSAENCRYPTION \ 205 ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \ 206 ASN1_OID_TRIPLE ( 113549 ), ASN1_OID_SINGLE ( 1 ), \ 207 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 14 ) 210 #define ASN1_OID_MD4 \ 211 ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \ 212 ASN1_OID_TRIPLE ( 113549 ), ASN1_OID_SINGLE ( 2 ), \ 213 ASN1_OID_SINGLE ( 4 ) 216 #define ASN1_OID_MD5 \ 217 ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \ 218 ASN1_OID_TRIPLE ( 113549 ), ASN1_OID_SINGLE ( 2 ), \ 219 ASN1_OID_SINGLE ( 5 ) 222 #define ASN1_OID_SHA1 \ 223 ASN1_OID_INITIAL ( 1, 3 ), ASN1_OID_SINGLE ( 14 ), \ 224 ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 2 ), \ 225 ASN1_OID_SINGLE ( 26 ) 228 #define ASN1_OID_X25519 \ 229 ASN1_OID_INITIAL ( 1, 3 ), ASN1_OID_SINGLE ( 101 ), \ 230 ASN1_OID_SINGLE ( 110 ) 233 #define ASN1_OID_SECP384R1 \ 234 ASN1_OID_INITIAL ( 1, 3 ), ASN1_OID_DOUBLE ( 132 ), \ 235 ASN1_OID_SINGLE ( 0 ), ASN1_OID_SINGLE ( 34 ) 238 #define ASN1_OID_AES128_CBC \ 239 ASN1_OID_INITIAL ( 2, 16 ), ASN1_OID_DOUBLE ( 840 ), \ 240 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 101 ), \ 241 ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 4 ), \ 242 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 2 ) 245 #define ASN1_OID_AES128_GCM \ 246 ASN1_OID_INITIAL ( 2, 16 ), ASN1_OID_DOUBLE ( 840 ), \ 247 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 101 ), \ 248 ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 4 ), \ 249 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 6 ) 252 #define ASN1_OID_AES192_CBC \ 253 ASN1_OID_INITIAL ( 2, 16 ), ASN1_OID_DOUBLE ( 840 ), \ 254 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 101 ), \ 255 ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 4 ), \ 256 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 22 ) 259 #define ASN1_OID_AES192_GCM \ 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 ( 26 ) 266 #define ASN1_OID_AES256_CBC \ 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 ( 42 ) 273 #define ASN1_OID_AES256_GCM \ 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 ( 46 ) 280 #define ASN1_OID_SHA256 \ 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 ( 2 ), ASN1_OID_SINGLE ( 1 ) 287 #define ASN1_OID_SHA384 \ 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 ( 2 ), ASN1_OID_SINGLE ( 2 ) 294 #define ASN1_OID_SHA512 \ 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 ( 2 ), ASN1_OID_SINGLE ( 3 ) 301 #define ASN1_OID_SHA224 \ 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 ( 4 ) 308 #define ASN1_OID_SHA512_224 \ 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 ( 5 ) 315 #define ASN1_OID_SHA512_256 \ 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 ( 6 ) 322 #define ASN1_OID_COMMON_NAME \ 323 ASN1_OID_INITIAL ( 2, 5 ), ASN1_OID_SINGLE ( 4 ), \ 324 ASN1_OID_SINGLE ( 3 ) 327 #define ASN1_OID_KEYUSAGE \ 328 ASN1_OID_INITIAL ( 2, 5 ), ASN1_OID_SINGLE ( 29 ), \ 329 ASN1_OID_SINGLE ( 15 ) 332 #define ASN1_OID_BASICCONSTRAINTS \ 333 ASN1_OID_INITIAL ( 2, 5 ), ASN1_OID_SINGLE ( 29 ), \ 334 ASN1_OID_SINGLE ( 19 ) 337 #define ASN1_OID_EXTKEYUSAGE \ 338 ASN1_OID_INITIAL ( 2, 5 ), ASN1_OID_SINGLE ( 29 ), \ 339 ASN1_OID_SINGLE ( 37 ) 342 #define ASN1_OID_CODESIGNING \ 343 ASN1_OID_INITIAL ( 1, 3 ), ASN1_OID_SINGLE ( 6 ), \ 344 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 5 ), \ 345 ASN1_OID_SINGLE ( 5 ), ASN1_OID_SINGLE ( 7 ), \ 346 ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 3 ) 349 #define ASN1_OID_SIGNEDDATA \ 350 ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \ 351 ASN1_OID_TRIPLE ( 113549 ), ASN1_OID_SINGLE ( 1 ), \ 352 ASN1_OID_SINGLE ( 7 ), ASN1_OID_SINGLE ( 2 ) 355 #define ASN1_OID_ENVELOPEDDATA \ 356 ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \ 357 ASN1_OID_TRIPLE ( 113549 ), ASN1_OID_SINGLE ( 1 ), \ 358 ASN1_OID_SINGLE ( 7 ), ASN1_OID_SINGLE ( 3 ) 361 #define ASN1_OID_AUTHENVELOPEDDATA \ 362 ASN1_OID_INITIAL ( 1, 2 ), ASN1_OID_DOUBLE ( 840 ), \ 363 ASN1_OID_TRIPLE ( 113549 ), ASN1_OID_SINGLE ( 1 ), \ 364 ASN1_OID_SINGLE ( 9 ), ASN1_OID_SINGLE ( 16 ), \ 365 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 23 ) 368 #define ASN1_OID_AUTHORITYINFOACCESS \ 369 ASN1_OID_INITIAL ( 1, 3 ), ASN1_OID_SINGLE ( 6 ), \ 370 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 5 ), \ 371 ASN1_OID_SINGLE ( 5 ), ASN1_OID_SINGLE ( 7 ), \ 372 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 1 ) 375 #define ASN1_OID_OCSP \ 376 ASN1_OID_INITIAL ( 1, 3 ), ASN1_OID_SINGLE ( 6 ), \ 377 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 5 ), \ 378 ASN1_OID_SINGLE ( 5 ), ASN1_OID_SINGLE ( 7 ), \ 379 ASN1_OID_SINGLE ( 48 ), ASN1_OID_SINGLE ( 1 ) 382 #define ASN1_OID_OCSP_BASIC \ 383 ASN1_OID_INITIAL ( 1, 3 ), ASN1_OID_SINGLE ( 6 ), \ 384 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 5 ), \ 385 ASN1_OID_SINGLE ( 5 ), ASN1_OID_SINGLE ( 7 ), \ 386 ASN1_OID_SINGLE ( 48 ), ASN1_OID_SINGLE ( 1 ), \ 387 ASN1_OID_SINGLE ( 1 ) 390 #define ASN1_OID_OCSPSIGNING \ 391 ASN1_OID_INITIAL ( 1, 3 ), ASN1_OID_SINGLE ( 6 ), \ 392 ASN1_OID_SINGLE ( 1 ), ASN1_OID_SINGLE ( 5 ), \ 393 ASN1_OID_SINGLE ( 5 ), ASN1_OID_SINGLE ( 7 ), \ 394 ASN1_OID_SINGLE ( 3 ), ASN1_OID_SINGLE ( 9 ) 397 #define ASN1_OID_SUBJECTALTNAME \ 398 ASN1_OID_INITIAL ( 2, 5 ), ASN1_OID_SINGLE ( 29 ), \ 399 ASN1_OID_SINGLE ( 17 ) 402 #define ASN1_CURSOR( value ) { \ 404 .len = sizeof ( value ), \ 433 #define ASN1_ALGORITHMS __table ( struct asn1_algorithm, "asn1_algorithms" ) 436 #define __asn1_algorithm __table_entry ( ASN1_ALGORITHMS, 01 ) 549 const void *
data,
size_t len );
int asn1_algorithm(const struct asn1_cursor *cursor, struct asn1_algorithm **algorithm, struct asn1_cursor *params)
Parse ASN.1 OID-identified algorithm.
An ASN.1 OID-identified algorithm.
struct cipher_algorithm * cipher
Cipher algorithm (if applicable)
uint8_t extra
Signature extra byte.
int asn1_digest_algorithm(const struct asn1_cursor *cursor, struct asn1_algorithm **algorithm)
Parse ASN.1 OID-identified digest algorithm.
int asn1_generalized_time(const struct asn1_cursor *cursor, time_t *time)
Parse ASN.1 GeneralizedTime.
#define ASN1_END
ASN.1 end.
int asn1_boolean(const struct asn1_cursor *cursor)
Parse value of ASN.1 boolean.
int asn1_cipher_algorithm(const struct asn1_cursor *cursor, struct asn1_algorithm **algorithm, struct asn1_cursor *params)
Parse ASN.1 OID-identified cipher algorithm.
uint32_t type
Operating system type.
const void * data
Start of data.
int asn1_skip(struct asn1_cursor *cursor, unsigned int type)
Skip ASN.1 object.
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_prepend_raw(struct asn1_builder *builder, const void *data, size_t len)
Prepend raw data to ASN.1 builder.
int asn1_enter(struct asn1_cursor *cursor, unsigned int type)
Enter ASN.1 object.
static unsigned int asn1_type(const struct asn1_cursor *cursor)
Extract ASN.1 type.
int asn1_shrink(struct asn1_cursor *cursor, unsigned int type)
Shrink ASN.1 cursor to fit object.
size_t len
Length of data.
int asn1_skip_if_exists(struct asn1_cursor *cursor, unsigned int type)
Skip ASN.1 object if present.
struct pubkey_algorithm * pubkey
Public-key algorithm (if applicable)
int asn1_shrink_any(struct asn1_cursor *cursor)
Shrink ASN.1 object of any type.
int asn1_prepend(struct asn1_builder *builder, unsigned int type, const void *data, size_t len)
Prepend data to ASN.1 builder.
#define container_of(ptr, type, field)
Get containing structure.
int asn1_pubkey_algorithm(const struct asn1_cursor *cursor, struct asn1_algorithm **algorithm)
Parse ASN.1 OID-identified public-key algorithm.
pseudo_bit_t value[0x00020]
#define build_assert(condition)
Assert a condition at build time (after dead code elimination)
int asn1_parse_gcm(struct asn1_algorithm *algorithm, struct asn1_cursor *params)
#define ASN1_MAX_LEN_LEN
Maximum (viable) length of ASN.1 length.
int asn1_compare(const struct asn1_cursor *cursor1, const struct asn1_cursor *cursor2)
Compare two ASN.1 objects.
int asn1_wrap(struct asn1_builder *builder, unsigned int type)
Wrap ASN.1 builder.
int asn1_signature_algorithm(const struct asn1_cursor *cursor, struct asn1_algorithm **algorithm)
Parse ASN.1 OID-identified signature algorithm.
static void asn1_invalidate_cursor(struct asn1_cursor *cursor)
Invalidate ASN.1 object cursor.
FILE_LICENCE(GPL2_OR_LATER_OR_UBDL)
int asn1_enter_bits(struct asn1_cursor *cursor, unsigned int *unused)
Enter ASN.1 bit string.
struct elliptic_curve * curve
Elliptic curve (if applicable)
struct asn1_cursor oid
Object identifier.
int asn1_enter_unsigned(struct asn1_cursor *cursor)
Enter ASN.1 unsigned integer.
int asn1_integer(const struct asn1_cursor *cursor, int *value)
Parse value of ASN.1 integer.
#define __asn1_algorithm
Declare an ASN.1 OID-identified 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_skip_any(struct asn1_cursor *cursor)
Skip ASN.1 object of any type.
u16 algorithm
Authentication algorithm (Open System or Shared Key)
struct digest_algorithm * digest
Digest algorithm (if applicable)
int asn1_grow(struct asn1_builder *builder, size_t extra)
Grow ASN.1 builder.
A message digest algorithm.
uint8_t data[48]
Additional event data.
static struct asn1_cursor * asn1_built(struct asn1_builder *builder)
Get cursor for built object.
typeof(acpi_finder=acpi_find)
ACPI table finder.
int(* parse)(struct asn1_algorithm *algorithm, struct asn1_cursor *params)
Parse algorithm parameters (optional)
int asn1_parse_cbc(struct asn1_algorithm *algorithm, struct asn1_cursor *params)
Parse ASN.1 CBC cipher parameters.
int64_t time_t
Seconds since the Epoch.
size_t len
Length of data.
int asn1_enter_any(struct asn1_cursor *cursor)
Enter ASN.1 object of any type.