summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/gost/gost_asn1.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/gost/gost_asn1.c')
-rw-r--r--src/lib/libcrypto/gost/gost_asn1.c166
1 files changed, 144 insertions, 22 deletions
diff --git a/src/lib/libcrypto/gost/gost_asn1.c b/src/lib/libcrypto/gost/gost_asn1.c
index 5d7fb51177..2652162777 100644
--- a/src/lib/libcrypto/gost/gost_asn1.c
+++ b/src/lib/libcrypto/gost/gost_asn1.c
@@ -17,10 +17,32 @@
17#include "gost_locl.h" 17#include "gost_locl.h"
18#include "gost_asn1.h" 18#include "gost_asn1.h"
19 19
20ASN1_NDEF_SEQUENCE(GOST_KEY_TRANSPORT) = { 20static const ASN1_TEMPLATE GOST_KEY_TRANSPORT_seq_tt[] = {
21 ASN1_SIMPLE(GOST_KEY_TRANSPORT, key_info, GOST_KEY_INFO), 21 {
22 ASN1_IMP(GOST_KEY_TRANSPORT, key_agreement_info, GOST_KEY_AGREEMENT_INFO, 0) 22 .flags = 0,
23} ASN1_NDEF_SEQUENCE_END(GOST_KEY_TRANSPORT) 23 .tag = 0,
24 .offset = offsetof(GOST_KEY_TRANSPORT, key_info),
25 .field_name = "key_info",
26 .item = &GOST_KEY_INFO_it,
27 },
28 {
29 .flags = ASN1_TFLG_IMPLICIT,
30 .tag = 0,
31 .offset = offsetof(GOST_KEY_TRANSPORT, key_agreement_info),
32 .field_name = "key_agreement_info",
33 .item = &GOST_KEY_AGREEMENT_INFO_it,
34 },
35};
36
37const ASN1_ITEM GOST_KEY_TRANSPORT_it = {
38 .itype = ASN1_ITYPE_NDEF_SEQUENCE,
39 .utype = V_ASN1_SEQUENCE,
40 .templates = GOST_KEY_TRANSPORT_seq_tt,
41 .tcount = sizeof(GOST_KEY_TRANSPORT_seq_tt) / sizeof(ASN1_TEMPLATE),
42 .funcs = NULL,
43 .size = sizeof(GOST_KEY_TRANSPORT),
44 .sname = "GOST_KEY_TRANSPORT",
45};
24 46
25GOST_KEY_TRANSPORT * 47GOST_KEY_TRANSPORT *
26d2i_GOST_KEY_TRANSPORT(GOST_KEY_TRANSPORT **a, const unsigned char **in, long len) 48d2i_GOST_KEY_TRANSPORT(GOST_KEY_TRANSPORT **a, const unsigned char **in, long len)
@@ -47,10 +69,32 @@ GOST_KEY_TRANSPORT_free(GOST_KEY_TRANSPORT *a)
47 ASN1_item_free((ASN1_VALUE *)a, &GOST_KEY_TRANSPORT_it); 69 ASN1_item_free((ASN1_VALUE *)a, &GOST_KEY_TRANSPORT_it);
48} 70}
49 71
50ASN1_NDEF_SEQUENCE(GOST_KEY_INFO) = { 72static const ASN1_TEMPLATE GOST_KEY_INFO_seq_tt[] = {
51 ASN1_SIMPLE(GOST_KEY_INFO, encrypted_key, ASN1_OCTET_STRING), 73 {
52 ASN1_SIMPLE(GOST_KEY_INFO, imit, ASN1_OCTET_STRING) 74 .flags = 0,
53} ASN1_NDEF_SEQUENCE_END(GOST_KEY_INFO) 75 .tag = 0,
76 .offset = offsetof(GOST_KEY_INFO, encrypted_key),
77 .field_name = "encrypted_key",
78 .item = &ASN1_OCTET_STRING_it,
79 },
80 {
81 .flags = 0,
82 .tag = 0,
83 .offset = offsetof(GOST_KEY_INFO, imit),
84 .field_name = "imit",
85 .item = &ASN1_OCTET_STRING_it,
86 },
87};
88
89const ASN1_ITEM GOST_KEY_INFO_it = {
90 .itype = ASN1_ITYPE_NDEF_SEQUENCE,
91 .utype = V_ASN1_SEQUENCE,
92 .templates = GOST_KEY_INFO_seq_tt,
93 .tcount = sizeof(GOST_KEY_INFO_seq_tt) / sizeof(ASN1_TEMPLATE),
94 .funcs = NULL,
95 .size = sizeof(GOST_KEY_INFO),
96 .sname = "GOST_KEY_INFO",
97};
54 98
55GOST_KEY_INFO * 99GOST_KEY_INFO *
56d2i_GOST_KEY_INFO(GOST_KEY_INFO **a, const unsigned char **in, long len) 100d2i_GOST_KEY_INFO(GOST_KEY_INFO **a, const unsigned char **in, long len)
@@ -77,11 +121,39 @@ GOST_KEY_INFO_free(GOST_KEY_INFO *a)
77 ASN1_item_free((ASN1_VALUE *)a, &GOST_KEY_INFO_it); 121 ASN1_item_free((ASN1_VALUE *)a, &GOST_KEY_INFO_it);
78} 122}
79 123
80ASN1_NDEF_SEQUENCE(GOST_KEY_AGREEMENT_INFO) = { 124static const ASN1_TEMPLATE GOST_KEY_AGREEMENT_INFO_seq_tt[] = {
81 ASN1_SIMPLE(GOST_KEY_AGREEMENT_INFO, cipher, ASN1_OBJECT), 125 {
82 ASN1_IMP_OPT(GOST_KEY_AGREEMENT_INFO, ephem_key, X509_PUBKEY, 0), 126 .flags = 0,
83 ASN1_SIMPLE(GOST_KEY_AGREEMENT_INFO, eph_iv, ASN1_OCTET_STRING) 127 .tag = 0,
84} ASN1_NDEF_SEQUENCE_END(GOST_KEY_AGREEMENT_INFO) 128 .offset = offsetof(GOST_KEY_AGREEMENT_INFO, cipher),
129 .field_name = "cipher",
130 .item = &ASN1_OBJECT_it,
131 },
132 {
133 .flags = ASN1_TFLG_IMPLICIT | ASN1_TFLG_OPTIONAL,
134 .tag = 0,
135 .offset = offsetof(GOST_KEY_AGREEMENT_INFO, ephem_key),
136 .field_name = "ephem_key",
137 .item = &X509_PUBKEY_it,
138 },
139 {
140 .flags = 0,
141 .tag = 0,
142 .offset = offsetof(GOST_KEY_AGREEMENT_INFO, eph_iv),
143 .field_name = "eph_iv",
144 .item = &ASN1_OCTET_STRING_it,
145 },
146};
147
148const ASN1_ITEM GOST_KEY_AGREEMENT_INFO_it = {
149 .itype = ASN1_ITYPE_NDEF_SEQUENCE,
150 .utype = V_ASN1_SEQUENCE,
151 .templates = GOST_KEY_AGREEMENT_INFO_seq_tt,
152 .tcount = sizeof(GOST_KEY_AGREEMENT_INFO_seq_tt) / sizeof(ASN1_TEMPLATE),
153 .funcs = NULL,
154 .size = sizeof(GOST_KEY_AGREEMENT_INFO),
155 .sname = "GOST_KEY_AGREEMENT_INFO",
156};
85 157
86GOST_KEY_AGREEMENT_INFO * 158GOST_KEY_AGREEMENT_INFO *
87d2i_GOST_KEY_AGREEMENT_INFO(GOST_KEY_AGREEMENT_INFO **a, const unsigned char **in, long len) 159d2i_GOST_KEY_AGREEMENT_INFO(GOST_KEY_AGREEMENT_INFO **a, const unsigned char **in, long len)
@@ -109,11 +181,39 @@ GOST_KEY_AGREEMENT_INFO_free(GOST_KEY_AGREEMENT_INFO *a)
109} 181}
110 182
111 183
112ASN1_NDEF_SEQUENCE(GOST_KEY_PARAMS) = { 184static const ASN1_TEMPLATE GOST_KEY_PARAMS_seq_tt[] = {
113 ASN1_SIMPLE(GOST_KEY_PARAMS, key_params, ASN1_OBJECT), 185 {
114 ASN1_SIMPLE(GOST_KEY_PARAMS, hash_params, ASN1_OBJECT), 186 .flags = 0,
115 ASN1_OPT(GOST_KEY_PARAMS, cipher_params, ASN1_OBJECT), 187 .tag = 0,
116} ASN1_NDEF_SEQUENCE_END(GOST_KEY_PARAMS) 188 .offset = offsetof(GOST_KEY_PARAMS, key_params),
189 .field_name = "key_params",
190 .item = &ASN1_OBJECT_it,
191 },
192 {
193 .flags = 0,
194 .tag = 0,
195 .offset = offsetof(GOST_KEY_PARAMS, hash_params),
196 .field_name = "hash_params",
197 .item = &ASN1_OBJECT_it,
198 },
199 {
200 .flags = ASN1_TFLG_OPTIONAL,
201 .tag = 0,
202 .offset = offsetof(GOST_KEY_PARAMS, cipher_params),
203 .field_name = "cipher_params",
204 .item = &ASN1_OBJECT_it,
205 },
206};
207
208const ASN1_ITEM GOST_KEY_PARAMS_it = {
209 .itype = ASN1_ITYPE_NDEF_SEQUENCE,
210 .utype = V_ASN1_SEQUENCE,
211 .templates = GOST_KEY_PARAMS_seq_tt,
212 .tcount = sizeof(GOST_KEY_PARAMS_seq_tt) / sizeof(ASN1_TEMPLATE),
213 .funcs = NULL,
214 .size = sizeof(GOST_KEY_PARAMS),
215 .sname = "GOST_KEY_PARAMS",
216};
117 217
118GOST_KEY_PARAMS * 218GOST_KEY_PARAMS *
119d2i_GOST_KEY_PARAMS(GOST_KEY_PARAMS **a, const unsigned char **in, long len) 219d2i_GOST_KEY_PARAMS(GOST_KEY_PARAMS **a, const unsigned char **in, long len)
@@ -140,10 +240,32 @@ GOST_KEY_PARAMS_free(GOST_KEY_PARAMS *a)
140 ASN1_item_free((ASN1_VALUE *)a, &GOST_KEY_PARAMS_it); 240 ASN1_item_free((ASN1_VALUE *)a, &GOST_KEY_PARAMS_it);
141} 241}
142 242
143ASN1_NDEF_SEQUENCE(GOST_CIPHER_PARAMS) = { 243static const ASN1_TEMPLATE GOST_CIPHER_PARAMS_seq_tt[] = {
144 ASN1_SIMPLE(GOST_CIPHER_PARAMS, iv, ASN1_OCTET_STRING), 244 {
145 ASN1_SIMPLE(GOST_CIPHER_PARAMS, enc_param_set, ASN1_OBJECT), 245 .flags = 0,
146} ASN1_NDEF_SEQUENCE_END(GOST_CIPHER_PARAMS) 246 .tag = 0,
247 .offset = offsetof(GOST_CIPHER_PARAMS, iv),
248 .field_name = "iv",
249 .item = &ASN1_OCTET_STRING_it,
250 },
251 {
252 .flags = 0,
253 .tag = 0,
254 .offset = offsetof(GOST_CIPHER_PARAMS, enc_param_set),
255 .field_name = "enc_param_set",
256 .item = &ASN1_OBJECT_it,
257 },
258};
259
260const ASN1_ITEM GOST_CIPHER_PARAMS_it = {
261 .itype = ASN1_ITYPE_NDEF_SEQUENCE,
262 .utype = V_ASN1_SEQUENCE,
263 .templates = GOST_CIPHER_PARAMS_seq_tt,
264 .tcount = sizeof(GOST_CIPHER_PARAMS_seq_tt) / sizeof(ASN1_TEMPLATE),
265 .funcs = NULL,
266 .size = sizeof(GOST_CIPHER_PARAMS),
267 .sname = "GOST_CIPHER_PARAMS",
268};
147 269
148GOST_CIPHER_PARAMS * 270GOST_CIPHER_PARAMS *
149d2i_GOST_CIPHER_PARAMS(GOST_CIPHER_PARAMS **a, const unsigned char **in, long len) 271d2i_GOST_CIPHER_PARAMS(GOST_CIPHER_PARAMS **a, const unsigned char **in, long len)