]>
Commit | Line | Data |
---|---|---|
1d39620b | 1 | /* |
fecb3aae | 2 | * Copyright 2020-2022 The OpenSSL Project Authors. All Rights Reserved. |
1d39620b RL |
3 | * |
4 | * Licensed under the Apache License 2.0 (the "License"). You may not use | |
5 | * this file except in compliance with the License. You can obtain a copy | |
6 | * in the file LICENSE in the source distribution or at | |
7 | * https://www.openssl.org/source/license.html | |
8 | */ | |
9 | ||
3d27ac8d WL |
10 | #ifndef OSSL_INTERNAL_DER_H |
11 | # define OSSL_INTERNAL_DER_H | |
12 | # pragma once | |
13 | ||
14 | # include <openssl/bn.h> | |
15 | # include "internal/packet.h" | |
1d39620b RL |
16 | |
17 | /* | |
18 | * NOTE: X.690 numbers the identifier octet bits 1 to 8. | |
19 | * We use the same numbering in comments here. | |
20 | */ | |
21 | ||
22 | /* Well known primitive tags */ | |
23 | ||
24 | /* | |
25 | * DER UNIVERSAL tags, occupying bits 1-5 in the DER identifier byte | |
26 | * These are only valid for the UNIVERSAL class. With the other classes, | |
27 | * these bits have a different meaning. | |
28 | */ | |
3d27ac8d WL |
29 | # define DER_P_EOC 0 /* BER End Of Contents tag */ |
30 | # define DER_P_BOOLEAN 1 | |
31 | # define DER_P_INTEGER 2 | |
32 | # define DER_P_BIT_STRING 3 | |
33 | # define DER_P_OCTET_STRING 4 | |
34 | # define DER_P_NULL 5 | |
35 | # define DER_P_OBJECT 6 | |
36 | # define DER_P_OBJECT_DESCRIPTOR 7 | |
37 | # define DER_P_EXTERNAL 8 | |
38 | # define DER_P_REAL 9 | |
39 | # define DER_P_ENUMERATED 10 | |
40 | # define DER_P_UTF8STRING 12 | |
41 | # define DER_P_SEQUENCE 16 | |
42 | # define DER_P_SET 17 | |
43 | # define DER_P_NUMERICSTRING 18 | |
44 | # define DER_P_PRINTABLESTRING 19 | |
45 | # define DER_P_T61STRING 20 | |
46 | # define DER_P_VIDEOTEXSTRING 21 | |
47 | # define DER_P_IA5STRING 22 | |
48 | # define DER_P_UTCTIME 23 | |
49 | # define DER_P_GENERALIZEDTIME 24 | |
50 | # define DER_P_GRAPHICSTRING 25 | |
51 | # define DER_P_ISO64STRING 26 | |
52 | # define DER_P_GENERALSTRING 27 | |
53 | # define DER_P_UNIVERSALSTRING 28 | |
54 | # define DER_P_BMPSTRING 30 | |
1d39620b RL |
55 | |
56 | /* DER Flags, occupying bit 6 in the DER identifier byte */ | |
3d27ac8d WL |
57 | # define DER_F_PRIMITIVE 0x00 |
58 | # define DER_F_CONSTRUCTED 0x20 | |
1d39620b RL |
59 | |
60 | /* DER classes tags, occupying bits 7-8 in the DER identifier byte */ | |
3d27ac8d WL |
61 | # define DER_C_UNIVERSAL 0x00 |
62 | # define DER_C_APPLICATION 0x40 | |
63 | # define DER_C_CONTEXT 0x80 | |
64 | # define DER_C_PRIVATE 0xC0 | |
1d39620b RL |
65 | |
66 | /* | |
67 | * Run-time constructors. | |
68 | * | |
69 | * They all construct DER backwards, so care should be taken to use them | |
70 | * that way. | |
71 | */ | |
72 | ||
73 | /* This can be used for all items that don't have a context */ | |
3d27ac8d | 74 | # define DER_NO_CONTEXT -1 |
1d39620b | 75 | |
a55b00bd P |
76 | int ossl_DER_w_precompiled(WPACKET *pkt, int tag, |
77 | const unsigned char *precompiled, | |
78 | size_t precompiled_n); | |
1d39620b | 79 | |
a55b00bd P |
80 | int ossl_DER_w_boolean(WPACKET *pkt, int tag, int b); |
81 | int ossl_DER_w_ulong(WPACKET *pkt, int tag, unsigned long v); | |
82 | int ossl_DER_w_bn(WPACKET *pkt, int tag, const BIGNUM *v); | |
83 | int ossl_DER_w_null(WPACKET *pkt, int tag); | |
84 | int ossl_DER_w_octet_string(WPACKET *pkt, int tag, | |
85 | const unsigned char *data, size_t data_n); | |
86 | int ossl_DER_w_octet_string_uint32(WPACKET *pkt, int tag, uint32_t value); | |
1d39620b RL |
87 | |
88 | /* | |
89 | * All constructors for constructed elements have a begin and a end function | |
90 | */ | |
a55b00bd P |
91 | int ossl_DER_w_begin_sequence(WPACKET *pkt, int tag); |
92 | int ossl_DER_w_end_sequence(WPACKET *pkt, int tag); | |
3d27ac8d WL |
93 | |
94 | #endif |