1 /**********************************************************************
3 * Copyright (c) 2005-2006 Cryptocom LTD *
4 * This file is distributed under the same license as OpenSSL *
6 * ASN1 structure definition for GOST key transport *
7 * Requires OpenSSL 0.9.9 for compilation *
8 **********************************************************************/
10 #include <openssl/asn1t.h>
11 #include <openssl/x509.h>
14 ASN1_NDEF_SEQUENCE(GOST_KEY_TRANSPORT
) = {
15 ASN1_SIMPLE(GOST_KEY_TRANSPORT
, key_info
, GOST_KEY_INFO
),
16 ASN1_IMP(GOST_KEY_TRANSPORT
, key_agreement_info
, GOST_KEY_AGREEMENT_INFO
, 0)
17 } ASN1_NDEF_SEQUENCE_END(GOST_KEY_TRANSPORT
)
19 IMPLEMENT_ASN1_FUNCTIONS(GOST_KEY_TRANSPORT
)
21 ASN1_NDEF_SEQUENCE(GOST_KEY_INFO
) = {
22 ASN1_SIMPLE(GOST_KEY_INFO
, encrypted_key
, ASN1_OCTET_STRING
),
23 ASN1_SIMPLE(GOST_KEY_INFO
, imit
, ASN1_OCTET_STRING
)
24 } ASN1_NDEF_SEQUENCE_END(GOST_KEY_INFO
)
26 IMPLEMENT_ASN1_FUNCTIONS(GOST_KEY_INFO
)
28 ASN1_NDEF_SEQUENCE(GOST_KEY_AGREEMENT_INFO
) = {
29 ASN1_SIMPLE(GOST_KEY_AGREEMENT_INFO
, cipher
, ASN1_OBJECT
),
30 ASN1_IMP_OPT(GOST_KEY_AGREEMENT_INFO
, ephem_key
, X509_PUBKEY
, 0),
31 ASN1_SIMPLE(GOST_KEY_AGREEMENT_INFO
, eph_iv
, ASN1_OCTET_STRING
)
32 } ASN1_NDEF_SEQUENCE_END(GOST_KEY_AGREEMENT_INFO
)
34 IMPLEMENT_ASN1_FUNCTIONS(GOST_KEY_AGREEMENT_INFO
)
36 ASN1_NDEF_SEQUENCE(GOST_KEY_PARAMS
) = {
37 ASN1_SIMPLE(GOST_KEY_PARAMS
, key_params
, ASN1_OBJECT
),
38 ASN1_SIMPLE(GOST_KEY_PARAMS
, hash_params
, ASN1_OBJECT
),
39 ASN1_OPT(GOST_KEY_PARAMS
, cipher_params
, ASN1_OBJECT
),
40 } ASN1_NDEF_SEQUENCE_END(GOST_KEY_PARAMS
)
42 IMPLEMENT_ASN1_FUNCTIONS(GOST_KEY_PARAMS
)
44 ASN1_NDEF_SEQUENCE(GOST_CIPHER_PARAMS
) = {
45 ASN1_SIMPLE(GOST_CIPHER_PARAMS
, iv
, ASN1_OCTET_STRING
),
46 ASN1_SIMPLE(GOST_CIPHER_PARAMS
, enc_param_set
, ASN1_OBJECT
),
47 } ASN1_NDEF_SEQUENCE_END(GOST_CIPHER_PARAMS
)
49 IMPLEMENT_ASN1_FUNCTIONS(GOST_CIPHER_PARAMS
)
51 ASN1_NDEF_SEQUENCE(GOST_CLIENT_KEY_EXCHANGE_PARAMS
) = { /* FIXME incomplete */
52 ASN1_SIMPLE(GOST_CLIENT_KEY_EXCHANGE_PARAMS
, gkt
, GOST_KEY_TRANSPORT
)
55 ASN1_NDEF_SEQUENCE_END(GOST_CLIENT_KEY_EXCHANGE_PARAMS
)
56 IMPLEMENT_ASN1_FUNCTIONS(GOST_CLIENT_KEY_EXCHANGE_PARAMS
)
58 /* Convert byte buffer to bignum, skipping leading zeros*/
59 BIGNUM
*getbnfrombuf(const unsigned char *buf
, size_t len
)
63 while (*buf
== 0 && len
> 0) {
68 return BN_bin2bn(buf
, len
, NULL
);