X-Git-Url: https://wagner.pp.ru/gitweb/?a=blobdiff_plain;f=gost_lcl.h;h=a9cb8b0032b0159517cc9ea1b5129644401ba4a4;hb=a00d42f4dfec8dff2f290cf3074dc25fb6b2e985;hp=08120b574b20b4380d1e1d66a22b2487fdb3e1a1;hpb=d1cf560c742d85ab1986fb0cabe0f9e3a1f0eb23;p=openssl-gost%2Fengine.git diff --git a/gost_lcl.h b/gost_lcl.h index 08120b5..a9cb8b0 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" @@ -67,8 +68,8 @@ struct gost_pmeth_data { int sign_param_nid; /* Should be set whenever parameters are * filled */ EVP_MD *md; - unsigned char *shared_ukm; - size_t shared_ukm_size; /* XXX temporary use shared_ukm and hash for 2018 CKE */ + unsigned char shared_ukm[32]; + size_t shared_ukm_size; int peer_key_used; int cipher_nid; /* KExp15/KImp15 algs */ }; @@ -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) @@ -165,6 +167,12 @@ typedef struct { DECLARE_ASN1_FUNCTIONS(GOST_CIPHER_PARAMS) +typedef struct { + ASN1_OCTET_STRING *ukm; + } GOST2015_CIPHER_PARAMS; + +DECLARE_ASN1_FUNCTIONS(GOST2015_CIPHER_PARAMS) + typedef struct { ASN1_OCTET_STRING *masked_priv_key; ASN1_OCTET_STRING *public_key; @@ -209,7 +217,10 @@ struct ossl_gost_cipher_ctx { int paramNID; unsigned int count; int key_meshing; + unsigned char kdf_seed[8]; + unsigned char tag[8]; gost_ctx cctx; + EVP_MD_CTX *omac_ctx; }; /* Structure to map parameter NID to S-block */ struct gost_cipher_info { @@ -233,13 +244,16 @@ extern struct gost_cipher_info gost_cipher_list[]; /* Find encryption params from ASN1_OBJECT */ const struct gost_cipher_info *get_encryption_params(ASN1_OBJECT *obj); /* Implementation of GOST 28147-89 cipher in CFB and CNT modes */ -const EVP_CIPHER *cipher_gost(); -const EVP_CIPHER *cipher_gost_cbc(); 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_ctr_acpkm(); +const EVP_CIPHER *cipher_magma_ctr_acpkm_omac(); +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 *counter, size_t counter_bytes); @@ -303,4 +317,38 @@ int pack_sign_cp(ECDSA_SIG *s, int order, unsigned char *sig, size_t *siglen); /* Get private key as BIGNUM from both 34.10-2001 keys*/ /* Returns pointer into EVP_PKEY structure */ BIGNUM *gost_get0_priv_key(const EVP_PKEY *pkey); + +/* Struct describing cipher and used for init/deinit.*/ +struct gost_cipher_st { + struct gost_cipher_st *template; /* template struct */ + int nid; + EVP_CIPHER *cipher; + int block_size; /* (bytes) */ + int key_len; /* (bytes) */ + int iv_len; + int flags; + int (*init) (EVP_CIPHER_CTX *ctx, const unsigned char *key, + const unsigned char *iv, int enc); + int (*do_cipher)(EVP_CIPHER_CTX *ctx, unsigned char *out, + const unsigned char *in, size_t inl); + int (*cleanup)(EVP_CIPHER_CTX *); + int ctx_size; + int (*set_asn1_parameters)(EVP_CIPHER_CTX *, ASN1_TYPE *); + int (*get_asn1_parameters)(EVP_CIPHER_CTX *, ASN1_TYPE *); + int (*ctrl)(EVP_CIPHER_CTX *, int type, int arg, void *ptr); +}; +typedef struct gost_cipher_st GOST_cipher; + +EVP_CIPHER *GOST_init_cipher(GOST_cipher *c); +void GOST_deinit_cipher(GOST_cipher *c); + +extern GOST_cipher Gost28147_89_cipher; +extern GOST_cipher Gost28147_89_cbc_cipher; +extern GOST_cipher Gost28147_89_cnt_cipher; +extern GOST_cipher Gost28147_89_cnt_12_cipher; +extern GOST_cipher magma_ctr_cipher; +extern GOST_cipher magma_ctr_acpkm_cipher; +extern GOST_cipher magma_ctr_acpkm_omac_cipher; +extern GOST_cipher magma_cbc_cipher; #endif +/* vim: set expandtab cinoptions=\:0,l1,t0,g0,(0 sw=4 : */