From 82aa6bf66c75dde9769f9c2eea0a9e7a9502d70c Mon Sep 17 00:00:00 2001 From: jsing <> Date: Fri, 24 Jul 2015 15:51:49 +0000 Subject: Expand ASN.1 template macros - no change in generated assembly. --- src/lib/libcrypto/ecdsa/ecs_asn1.c | 32 +++++- src/lib/libcrypto/gost/gost_asn1.c | 166 +++++++++++++++++++++++++---- src/lib/libssl/src/crypto/ecdsa/ecs_asn1.c | 32 +++++- src/lib/libssl/src/crypto/gost/gost_asn1.c | 166 +++++++++++++++++++++++++---- 4 files changed, 342 insertions(+), 54 deletions(-) (limited to 'src/lib') diff --git a/src/lib/libcrypto/ecdsa/ecs_asn1.c b/src/lib/libcrypto/ecdsa/ecs_asn1.c index 4cd5c1bd21..34c3ce0497 100644 --- a/src/lib/libcrypto/ecdsa/ecs_asn1.c +++ b/src/lib/libcrypto/ecdsa/ecs_asn1.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ecs_asn1.c,v 1.4 2015/02/10 04:01:26 jsing Exp $ */ +/* $OpenBSD: ecs_asn1.c,v 1.5 2015/07/24 15:51:49 jsing Exp $ */ /* ==================================================================== * Copyright (c) 2000-2002 The OpenSSL Project. All rights reserved. * @@ -57,10 +57,32 @@ #include #include -ASN1_SEQUENCE(ECDSA_SIG) = { - ASN1_SIMPLE(ECDSA_SIG, r, CBIGNUM), - ASN1_SIMPLE(ECDSA_SIG, s, CBIGNUM) -} ASN1_SEQUENCE_END(ECDSA_SIG) +static const ASN1_TEMPLATE ECDSA_SIG_seq_tt[] = { + { + .flags = 0, + .tag = 0, + .offset = offsetof(ECDSA_SIG, r), + .field_name = "r", + .item = &CBIGNUM_it, + }, + { + .flags = 0, + .tag = 0, + .offset = offsetof(ECDSA_SIG, s), + .field_name = "s", + .item = &CBIGNUM_it, + }, +}; + +const ASN1_ITEM ECDSA_SIG_it = { + .itype = ASN1_ITYPE_SEQUENCE, + .utype = V_ASN1_SEQUENCE, + .templates = ECDSA_SIG_seq_tt, + .tcount = sizeof(ECDSA_SIG_seq_tt) / sizeof(ASN1_TEMPLATE), + .funcs = NULL, + .size = sizeof(ECDSA_SIG), + .sname = "ECDSA_SIG", +}; DECLARE_ASN1_FUNCTIONS_const(ECDSA_SIG) DECLARE_ASN1_ENCODE_FUNCTIONS_const(ECDSA_SIG, ECDSA_SIG) 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 @@ #include "gost_locl.h" #include "gost_asn1.h" -ASN1_NDEF_SEQUENCE(GOST_KEY_TRANSPORT) = { - ASN1_SIMPLE(GOST_KEY_TRANSPORT, key_info, GOST_KEY_INFO), - ASN1_IMP(GOST_KEY_TRANSPORT, key_agreement_info, GOST_KEY_AGREEMENT_INFO, 0) -} ASN1_NDEF_SEQUENCE_END(GOST_KEY_TRANSPORT) +static const ASN1_TEMPLATE GOST_KEY_TRANSPORT_seq_tt[] = { + { + .flags = 0, + .tag = 0, + .offset = offsetof(GOST_KEY_TRANSPORT, key_info), + .field_name = "key_info", + .item = &GOST_KEY_INFO_it, + }, + { + .flags = ASN1_TFLG_IMPLICIT, + .tag = 0, + .offset = offsetof(GOST_KEY_TRANSPORT, key_agreement_info), + .field_name = "key_agreement_info", + .item = &GOST_KEY_AGREEMENT_INFO_it, + }, +}; + +const ASN1_ITEM GOST_KEY_TRANSPORT_it = { + .itype = ASN1_ITYPE_NDEF_SEQUENCE, + .utype = V_ASN1_SEQUENCE, + .templates = GOST_KEY_TRANSPORT_seq_tt, + .tcount = sizeof(GOST_KEY_TRANSPORT_seq_tt) / sizeof(ASN1_TEMPLATE), + .funcs = NULL, + .size = sizeof(GOST_KEY_TRANSPORT), + .sname = "GOST_KEY_TRANSPORT", +}; GOST_KEY_TRANSPORT * d2i_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) ASN1_item_free((ASN1_VALUE *)a, &GOST_KEY_TRANSPORT_it); } -ASN1_NDEF_SEQUENCE(GOST_KEY_INFO) = { - ASN1_SIMPLE(GOST_KEY_INFO, encrypted_key, ASN1_OCTET_STRING), - ASN1_SIMPLE(GOST_KEY_INFO, imit, ASN1_OCTET_STRING) -} ASN1_NDEF_SEQUENCE_END(GOST_KEY_INFO) +static const ASN1_TEMPLATE GOST_KEY_INFO_seq_tt[] = { + { + .flags = 0, + .tag = 0, + .offset = offsetof(GOST_KEY_INFO, encrypted_key), + .field_name = "encrypted_key", + .item = &ASN1_OCTET_STRING_it, + }, + { + .flags = 0, + .tag = 0, + .offset = offsetof(GOST_KEY_INFO, imit), + .field_name = "imit", + .item = &ASN1_OCTET_STRING_it, + }, +}; + +const ASN1_ITEM GOST_KEY_INFO_it = { + .itype = ASN1_ITYPE_NDEF_SEQUENCE, + .utype = V_ASN1_SEQUENCE, + .templates = GOST_KEY_INFO_seq_tt, + .tcount = sizeof(GOST_KEY_INFO_seq_tt) / sizeof(ASN1_TEMPLATE), + .funcs = NULL, + .size = sizeof(GOST_KEY_INFO), + .sname = "GOST_KEY_INFO", +}; GOST_KEY_INFO * d2i_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) ASN1_item_free((ASN1_VALUE *)a, &GOST_KEY_INFO_it); } -ASN1_NDEF_SEQUENCE(GOST_KEY_AGREEMENT_INFO) = { - ASN1_SIMPLE(GOST_KEY_AGREEMENT_INFO, cipher, ASN1_OBJECT), - ASN1_IMP_OPT(GOST_KEY_AGREEMENT_INFO, ephem_key, X509_PUBKEY, 0), - ASN1_SIMPLE(GOST_KEY_AGREEMENT_INFO, eph_iv, ASN1_OCTET_STRING) -} ASN1_NDEF_SEQUENCE_END(GOST_KEY_AGREEMENT_INFO) +static const ASN1_TEMPLATE GOST_KEY_AGREEMENT_INFO_seq_tt[] = { + { + .flags = 0, + .tag = 0, + .offset = offsetof(GOST_KEY_AGREEMENT_INFO, cipher), + .field_name = "cipher", + .item = &ASN1_OBJECT_it, + }, + { + .flags = ASN1_TFLG_IMPLICIT | ASN1_TFLG_OPTIONAL, + .tag = 0, + .offset = offsetof(GOST_KEY_AGREEMENT_INFO, ephem_key), + .field_name = "ephem_key", + .item = &X509_PUBKEY_it, + }, + { + .flags = 0, + .tag = 0, + .offset = offsetof(GOST_KEY_AGREEMENT_INFO, eph_iv), + .field_name = "eph_iv", + .item = &ASN1_OCTET_STRING_it, + }, +}; + +const ASN1_ITEM GOST_KEY_AGREEMENT_INFO_it = { + .itype = ASN1_ITYPE_NDEF_SEQUENCE, + .utype = V_ASN1_SEQUENCE, + .templates = GOST_KEY_AGREEMENT_INFO_seq_tt, + .tcount = sizeof(GOST_KEY_AGREEMENT_INFO_seq_tt) / sizeof(ASN1_TEMPLATE), + .funcs = NULL, + .size = sizeof(GOST_KEY_AGREEMENT_INFO), + .sname = "GOST_KEY_AGREEMENT_INFO", +}; GOST_KEY_AGREEMENT_INFO * d2i_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) } -ASN1_NDEF_SEQUENCE(GOST_KEY_PARAMS) = { - ASN1_SIMPLE(GOST_KEY_PARAMS, key_params, ASN1_OBJECT), - ASN1_SIMPLE(GOST_KEY_PARAMS, hash_params, ASN1_OBJECT), - ASN1_OPT(GOST_KEY_PARAMS, cipher_params, ASN1_OBJECT), -} ASN1_NDEF_SEQUENCE_END(GOST_KEY_PARAMS) +static const ASN1_TEMPLATE GOST_KEY_PARAMS_seq_tt[] = { + { + .flags = 0, + .tag = 0, + .offset = offsetof(GOST_KEY_PARAMS, key_params), + .field_name = "key_params", + .item = &ASN1_OBJECT_it, + }, + { + .flags = 0, + .tag = 0, + .offset = offsetof(GOST_KEY_PARAMS, hash_params), + .field_name = "hash_params", + .item = &ASN1_OBJECT_it, + }, + { + .flags = ASN1_TFLG_OPTIONAL, + .tag = 0, + .offset = offsetof(GOST_KEY_PARAMS, cipher_params), + .field_name = "cipher_params", + .item = &ASN1_OBJECT_it, + }, +}; + +const ASN1_ITEM GOST_KEY_PARAMS_it = { + .itype = ASN1_ITYPE_NDEF_SEQUENCE, + .utype = V_ASN1_SEQUENCE, + .templates = GOST_KEY_PARAMS_seq_tt, + .tcount = sizeof(GOST_KEY_PARAMS_seq_tt) / sizeof(ASN1_TEMPLATE), + .funcs = NULL, + .size = sizeof(GOST_KEY_PARAMS), + .sname = "GOST_KEY_PARAMS", +}; GOST_KEY_PARAMS * d2i_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) ASN1_item_free((ASN1_VALUE *)a, &GOST_KEY_PARAMS_it); } -ASN1_NDEF_SEQUENCE(GOST_CIPHER_PARAMS) = { - ASN1_SIMPLE(GOST_CIPHER_PARAMS, iv, ASN1_OCTET_STRING), - ASN1_SIMPLE(GOST_CIPHER_PARAMS, enc_param_set, ASN1_OBJECT), -} ASN1_NDEF_SEQUENCE_END(GOST_CIPHER_PARAMS) +static const ASN1_TEMPLATE GOST_CIPHER_PARAMS_seq_tt[] = { + { + .flags = 0, + .tag = 0, + .offset = offsetof(GOST_CIPHER_PARAMS, iv), + .field_name = "iv", + .item = &ASN1_OCTET_STRING_it, + }, + { + .flags = 0, + .tag = 0, + .offset = offsetof(GOST_CIPHER_PARAMS, enc_param_set), + .field_name = "enc_param_set", + .item = &ASN1_OBJECT_it, + }, +}; + +const ASN1_ITEM GOST_CIPHER_PARAMS_it = { + .itype = ASN1_ITYPE_NDEF_SEQUENCE, + .utype = V_ASN1_SEQUENCE, + .templates = GOST_CIPHER_PARAMS_seq_tt, + .tcount = sizeof(GOST_CIPHER_PARAMS_seq_tt) / sizeof(ASN1_TEMPLATE), + .funcs = NULL, + .size = sizeof(GOST_CIPHER_PARAMS), + .sname = "GOST_CIPHER_PARAMS", +}; GOST_CIPHER_PARAMS * d2i_GOST_CIPHER_PARAMS(GOST_CIPHER_PARAMS **a, const unsigned char **in, long len) diff --git a/src/lib/libssl/src/crypto/ecdsa/ecs_asn1.c b/src/lib/libssl/src/crypto/ecdsa/ecs_asn1.c index 4cd5c1bd21..34c3ce0497 100644 --- a/src/lib/libssl/src/crypto/ecdsa/ecs_asn1.c +++ b/src/lib/libssl/src/crypto/ecdsa/ecs_asn1.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ecs_asn1.c,v 1.4 2015/02/10 04:01:26 jsing Exp $ */ +/* $OpenBSD: ecs_asn1.c,v 1.5 2015/07/24 15:51:49 jsing Exp $ */ /* ==================================================================== * Copyright (c) 2000-2002 The OpenSSL Project. All rights reserved. * @@ -57,10 +57,32 @@ #include #include -ASN1_SEQUENCE(ECDSA_SIG) = { - ASN1_SIMPLE(ECDSA_SIG, r, CBIGNUM), - ASN1_SIMPLE(ECDSA_SIG, s, CBIGNUM) -} ASN1_SEQUENCE_END(ECDSA_SIG) +static const ASN1_TEMPLATE ECDSA_SIG_seq_tt[] = { + { + .flags = 0, + .tag = 0, + .offset = offsetof(ECDSA_SIG, r), + .field_name = "r", + .item = &CBIGNUM_it, + }, + { + .flags = 0, + .tag = 0, + .offset = offsetof(ECDSA_SIG, s), + .field_name = "s", + .item = &CBIGNUM_it, + }, +}; + +const ASN1_ITEM ECDSA_SIG_it = { + .itype = ASN1_ITYPE_SEQUENCE, + .utype = V_ASN1_SEQUENCE, + .templates = ECDSA_SIG_seq_tt, + .tcount = sizeof(ECDSA_SIG_seq_tt) / sizeof(ASN1_TEMPLATE), + .funcs = NULL, + .size = sizeof(ECDSA_SIG), + .sname = "ECDSA_SIG", +}; DECLARE_ASN1_FUNCTIONS_const(ECDSA_SIG) DECLARE_ASN1_ENCODE_FUNCTIONS_const(ECDSA_SIG, ECDSA_SIG) diff --git a/src/lib/libssl/src/crypto/gost/gost_asn1.c b/src/lib/libssl/src/crypto/gost/gost_asn1.c index 5d7fb51177..2652162777 100644 --- a/src/lib/libssl/src/crypto/gost/gost_asn1.c +++ b/src/lib/libssl/src/crypto/gost/gost_asn1.c @@ -17,10 +17,32 @@ #include "gost_locl.h" #include "gost_asn1.h" -ASN1_NDEF_SEQUENCE(GOST_KEY_TRANSPORT) = { - ASN1_SIMPLE(GOST_KEY_TRANSPORT, key_info, GOST_KEY_INFO), - ASN1_IMP(GOST_KEY_TRANSPORT, key_agreement_info, GOST_KEY_AGREEMENT_INFO, 0) -} ASN1_NDEF_SEQUENCE_END(GOST_KEY_TRANSPORT) +static const ASN1_TEMPLATE GOST_KEY_TRANSPORT_seq_tt[] = { + { + .flags = 0, + .tag = 0, + .offset = offsetof(GOST_KEY_TRANSPORT, key_info), + .field_name = "key_info", + .item = &GOST_KEY_INFO_it, + }, + { + .flags = ASN1_TFLG_IMPLICIT, + .tag = 0, + .offset = offsetof(GOST_KEY_TRANSPORT, key_agreement_info), + .field_name = "key_agreement_info", + .item = &GOST_KEY_AGREEMENT_INFO_it, + }, +}; + +const ASN1_ITEM GOST_KEY_TRANSPORT_it = { + .itype = ASN1_ITYPE_NDEF_SEQUENCE, + .utype = V_ASN1_SEQUENCE, + .templates = GOST_KEY_TRANSPORT_seq_tt, + .tcount = sizeof(GOST_KEY_TRANSPORT_seq_tt) / sizeof(ASN1_TEMPLATE), + .funcs = NULL, + .size = sizeof(GOST_KEY_TRANSPORT), + .sname = "GOST_KEY_TRANSPORT", +}; GOST_KEY_TRANSPORT * d2i_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) ASN1_item_free((ASN1_VALUE *)a, &GOST_KEY_TRANSPORT_it); } -ASN1_NDEF_SEQUENCE(GOST_KEY_INFO) = { - ASN1_SIMPLE(GOST_KEY_INFO, encrypted_key, ASN1_OCTET_STRING), - ASN1_SIMPLE(GOST_KEY_INFO, imit, ASN1_OCTET_STRING) -} ASN1_NDEF_SEQUENCE_END(GOST_KEY_INFO) +static const ASN1_TEMPLATE GOST_KEY_INFO_seq_tt[] = { + { + .flags = 0, + .tag = 0, + .offset = offsetof(GOST_KEY_INFO, encrypted_key), + .field_name = "encrypted_key", + .item = &ASN1_OCTET_STRING_it, + }, + { + .flags = 0, + .tag = 0, + .offset = offsetof(GOST_KEY_INFO, imit), + .field_name = "imit", + .item = &ASN1_OCTET_STRING_it, + }, +}; + +const ASN1_ITEM GOST_KEY_INFO_it = { + .itype = ASN1_ITYPE_NDEF_SEQUENCE, + .utype = V_ASN1_SEQUENCE, + .templates = GOST_KEY_INFO_seq_tt, + .tcount = sizeof(GOST_KEY_INFO_seq_tt) / sizeof(ASN1_TEMPLATE), + .funcs = NULL, + .size = sizeof(GOST_KEY_INFO), + .sname = "GOST_KEY_INFO", +}; GOST_KEY_INFO * d2i_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) ASN1_item_free((ASN1_VALUE *)a, &GOST_KEY_INFO_it); } -ASN1_NDEF_SEQUENCE(GOST_KEY_AGREEMENT_INFO) = { - ASN1_SIMPLE(GOST_KEY_AGREEMENT_INFO, cipher, ASN1_OBJECT), - ASN1_IMP_OPT(GOST_KEY_AGREEMENT_INFO, ephem_key, X509_PUBKEY, 0), - ASN1_SIMPLE(GOST_KEY_AGREEMENT_INFO, eph_iv, ASN1_OCTET_STRING) -} ASN1_NDEF_SEQUENCE_END(GOST_KEY_AGREEMENT_INFO) +static const ASN1_TEMPLATE GOST_KEY_AGREEMENT_INFO_seq_tt[] = { + { + .flags = 0, + .tag = 0, + .offset = offsetof(GOST_KEY_AGREEMENT_INFO, cipher), + .field_name = "cipher", + .item = &ASN1_OBJECT_it, + }, + { + .flags = ASN1_TFLG_IMPLICIT | ASN1_TFLG_OPTIONAL, + .tag = 0, + .offset = offsetof(GOST_KEY_AGREEMENT_INFO, ephem_key), + .field_name = "ephem_key", + .item = &X509_PUBKEY_it, + }, + { + .flags = 0, + .tag = 0, + .offset = offsetof(GOST_KEY_AGREEMENT_INFO, eph_iv), + .field_name = "eph_iv", + .item = &ASN1_OCTET_STRING_it, + }, +}; + +const ASN1_ITEM GOST_KEY_AGREEMENT_INFO_it = { + .itype = ASN1_ITYPE_NDEF_SEQUENCE, + .utype = V_ASN1_SEQUENCE, + .templates = GOST_KEY_AGREEMENT_INFO_seq_tt, + .tcount = sizeof(GOST_KEY_AGREEMENT_INFO_seq_tt) / sizeof(ASN1_TEMPLATE), + .funcs = NULL, + .size = sizeof(GOST_KEY_AGREEMENT_INFO), + .sname = "GOST_KEY_AGREEMENT_INFO", +}; GOST_KEY_AGREEMENT_INFO * d2i_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) } -ASN1_NDEF_SEQUENCE(GOST_KEY_PARAMS) = { - ASN1_SIMPLE(GOST_KEY_PARAMS, key_params, ASN1_OBJECT), - ASN1_SIMPLE(GOST_KEY_PARAMS, hash_params, ASN1_OBJECT), - ASN1_OPT(GOST_KEY_PARAMS, cipher_params, ASN1_OBJECT), -} ASN1_NDEF_SEQUENCE_END(GOST_KEY_PARAMS) +static const ASN1_TEMPLATE GOST_KEY_PARAMS_seq_tt[] = { + { + .flags = 0, + .tag = 0, + .offset = offsetof(GOST_KEY_PARAMS, key_params), + .field_name = "key_params", + .item = &ASN1_OBJECT_it, + }, + { + .flags = 0, + .tag = 0, + .offset = offsetof(GOST_KEY_PARAMS, hash_params), + .field_name = "hash_params", + .item = &ASN1_OBJECT_it, + }, + { + .flags = ASN1_TFLG_OPTIONAL, + .tag = 0, + .offset = offsetof(GOST_KEY_PARAMS, cipher_params), + .field_name = "cipher_params", + .item = &ASN1_OBJECT_it, + }, +}; + +const ASN1_ITEM GOST_KEY_PARAMS_it = { + .itype = ASN1_ITYPE_NDEF_SEQUENCE, + .utype = V_ASN1_SEQUENCE, + .templates = GOST_KEY_PARAMS_seq_tt, + .tcount = sizeof(GOST_KEY_PARAMS_seq_tt) / sizeof(ASN1_TEMPLATE), + .funcs = NULL, + .size = sizeof(GOST_KEY_PARAMS), + .sname = "GOST_KEY_PARAMS", +}; GOST_KEY_PARAMS * d2i_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) ASN1_item_free((ASN1_VALUE *)a, &GOST_KEY_PARAMS_it); } -ASN1_NDEF_SEQUENCE(GOST_CIPHER_PARAMS) = { - ASN1_SIMPLE(GOST_CIPHER_PARAMS, iv, ASN1_OCTET_STRING), - ASN1_SIMPLE(GOST_CIPHER_PARAMS, enc_param_set, ASN1_OBJECT), -} ASN1_NDEF_SEQUENCE_END(GOST_CIPHER_PARAMS) +static const ASN1_TEMPLATE GOST_CIPHER_PARAMS_seq_tt[] = { + { + .flags = 0, + .tag = 0, + .offset = offsetof(GOST_CIPHER_PARAMS, iv), + .field_name = "iv", + .item = &ASN1_OCTET_STRING_it, + }, + { + .flags = 0, + .tag = 0, + .offset = offsetof(GOST_CIPHER_PARAMS, enc_param_set), + .field_name = "enc_param_set", + .item = &ASN1_OBJECT_it, + }, +}; + +const ASN1_ITEM GOST_CIPHER_PARAMS_it = { + .itype = ASN1_ITYPE_NDEF_SEQUENCE, + .utype = V_ASN1_SEQUENCE, + .templates = GOST_CIPHER_PARAMS_seq_tt, + .tcount = sizeof(GOST_CIPHER_PARAMS_seq_tt) / sizeof(ASN1_TEMPLATE), + .funcs = NULL, + .size = sizeof(GOST_CIPHER_PARAMS), + .sname = "GOST_CIPHER_PARAMS", +}; GOST_CIPHER_PARAMS * d2i_GOST_CIPHER_PARAMS(GOST_CIPHER_PARAMS **a, const unsigned char **in, long len) -- cgit v1.2.3-55-g6feb