X-Git-Url: http://wagner.pp.ru/gitweb/?a=blobdiff_plain;f=gost_lcl.h;h=9740994a41c45d2c30e9852a32661437df090e60;hb=3b31dea89630ecd3f741171ed3e1d4259adabf0e;hp=15ff31ead28813bde1ee7ceb4df9ecc0ca2a5aae;hpb=a418dfa28b4c3432a6da7d01adc1038789ce209c;p=openssl-gost%2Fengine.git diff --git a/gost_lcl.h b/gost_lcl.h index 15ff31e..9740994 100644 --- a/gost_lcl.h +++ b/gost_lcl.h @@ -55,6 +55,7 @@ int register_pmeth_gost(int id, EVP_PKEY_METHOD **pmeth, int flags); /* Gost-specific pmeth control-function parameters */ /* For GOST R34.10 parameters */ # define param_ctrl_string "paramset" +# define ukm_ctrl_string "ukmhex" # define EVP_PKEY_CTRL_GOST_PARAMSET (EVP_PKEY_ALG_CTRL+1) /* For GOST 28147 MAC */ # define key_ctrl_string "key" @@ -129,6 +130,7 @@ typedef struct { /* FIXME incomplete */ typedef struct PSKeyTransport_st { ASN1_OCTET_STRING *psexp; X509_PUBKEY *ephem_key; + ASN1_OCTET_STRING *ukm; } PSKeyTransport_gost; DECLARE_ASN1_FUNCTIONS(PSKeyTransport_gost) @@ -239,20 +241,23 @@ const EVP_CIPHER *cipher_gost_cpacnt(); const EVP_CIPHER *cipher_gost_cpcnt_12(); const EVP_CIPHER *cipher_magma_cbc(); const EVP_CIPHER *cipher_magma_ctr(); +const EVP_CIPHER *cipher_magma_wrap(); +const EVP_CIPHER *cipher_kuznyechik_wrap(); void cipher_gost_destroy(); +void wrap_ciphers_destroy(); -void inc_counter(unsigned char *buffer, size_t buf_len); +void inc_counter(unsigned char *counter, size_t counter_bytes); # define EVP_MD_CTRL_KEY_LEN (EVP_MD_CTRL_ALG_CTRL+3) # define EVP_MD_CTRL_SET_KEY (EVP_MD_CTRL_ALG_CTRL+4) /* EVP_PKEY_METHOD key encryption callbacks */ /* From gost_ec_keyx.c */ -int pkey_gost_encrypt(EVP_PKEY_CTX *ctx, unsigned char *out, - size_t *outlen, const unsigned char *key, +int pkey_gost_encrypt(EVP_PKEY_CTX *pctx, unsigned char *out, + size_t *out_len, const unsigned char *key, size_t key_len); -int pkey_gost_decrypt(EVP_PKEY_CTX *ctx, unsigned char *out, - size_t *outlen, const unsigned char *in, +int pkey_gost_decrypt(EVP_PKEY_CTX *pctx, unsigned char *key, + size_t *key_len, const unsigned char *in, size_t in_len); /* derive functions */ /* From gost_ec_keyx.c */ @@ -265,6 +270,12 @@ int gost_ec_verify(const unsigned char *dgst, int dgst_len, ECDSA_SIG *sig, EC_KEY *ec); int gost_ec_compute_public(EC_KEY *ec); +/* VKO */ +int VKO_compute_key(unsigned char *shared_key, + const EC_POINT *pub_key, const EC_KEY *priv_key, + const unsigned char *ukm, const size_t ukm_size, + const int vko_dgst_nid); + /* KDF TREE */ int gost_kdftree2012_256(unsigned char *keyout, size_t keyout_len, const unsigned char *key, size_t keylen, @@ -272,8 +283,8 @@ int gost_kdftree2012_256(unsigned char *keyout, size_t keyout_len, const unsigned char *seed, size_t seed_len, const size_t representation); -int gost_tlstree(int cipher_nid, const unsigned char* inkey, - unsigned char *outkey, const unsigned char *tlsseq); +int gost_tlstree(int cipher_nid, const unsigned char *in, unsigned char *out, + const unsigned char *tlsseq); /* KExp/KImp */ int gost_kexp15(const unsigned char *shared_key, const int shared_len, int cipher_nid, const unsigned char *cipher_key, @@ -286,9 +297,6 @@ int gost_kimp15(const unsigned char *expkey, const size_t expkeylen, const unsigned char *iv, const size_t ivlen, unsigned char *shared_key); /*============== miscellaneous functions============================= */ -/* from gost_sign.c */ -/* Convert GOST R 34.11 hash sum to bignum according to standard */ -BIGNUM *hashsum2bn(const unsigned char *dgst, int len); /* * Store bignum in byte array of given length, prepending by zeros if * nesseccary