aboutsummaryrefslogtreecommitdiff
path: root/gost_pmeth.c
diff options
context:
space:
mode:
authorDmitry Belyavskiy <beldmit@gmail.com>2016-11-19 22:04:55 +0300
committerDmitry Belyavskiy <beldmit@gmail.com>2016-11-19 22:04:55 +0300
commit868ae7a730a86f9c1021ea766cd714f817cb934d (patch)
tree7489fec7e9da2b29ea9c8dcd3f15d51a8bc09468 /gost_pmeth.c
parent4ec805f3a4452452d292618bd79be1c8a748dc66 (diff)
parenta72a02c4dd5778eea83db6e9e17d89f0d2b278dd (diff)
downloadgost-engine-868ae7a730a86f9c1021ea766cd714f817cb934d.zip
gost-engine-868ae7a730a86f9c1021ea766cd714f817cb934d.tar.gz
gost-engine-868ae7a730a86f9c1021ea766cd714f817cb934d.tar.bz2
Merge remote-tracking branch 'origin/openssl_1_1_0'
Conflicts: gost_asn1.c gost_crypt.c
Diffstat (limited to 'gost_pmeth.c')
-rw-r--r--gost_pmeth.c38
1 files changed, 22 insertions, 16 deletions
diff --git a/gost_pmeth.c b/gost_pmeth.c
index ca824ff..9a01822 100644
--- a/gost_pmeth.c
+++ b/gost_pmeth.c
@@ -146,8 +146,10 @@ static int pkey_gost_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2)
case EVP_PKEY_CTRL_SET_IV:
OPENSSL_assert(p2 != NULL);
pctx->shared_ukm = OPENSSL_malloc((int)p1);
- if (!pctx->shared_ukm)
+ if (pctx->shared_ukm == NULL) {
+ GOSTerr(GOST_F_PKEY_GOST_CTRL, ERR_R_MALLOC_FAILURE);
return 0;
+ }
memcpy(pctx->shared_ukm, p2, (int)p1);
return 1;
case EVP_PKEY_CTRL_PEER_KEY:
@@ -367,10 +369,12 @@ static int pkey_gost2012cp_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey)
*/
int pack_sign_cp(DSA_SIG *s, int order, unsigned char *sig, size_t *siglen)
{
+ const BIGNUM *sig_r = NULL, *sig_s = NULL;
+ DSA_SIG_get0(s, &sig_r, &sig_s);
*siglen = 2 * order;
memset(sig, 0, *siglen);
- store_bignum(s->s, sig, order);
- store_bignum(s->r, sig + order, order);
+ store_bignum(sig_s, sig, order);
+ store_bignum(sig_r, sig + order, order);
DSA_SIG_free(s);
return 1;
}
@@ -416,14 +420,16 @@ static int pkey_gost_ec_cp_sign(EVP_PKEY_CTX *ctx, unsigned char *sig,
DSA_SIG *unpack_cp_signature(const unsigned char *sig, size_t siglen)
{
DSA_SIG *s;
+ const BIGNUM *sig_r = NULL, *sig_s = NULL;
s = DSA_SIG_new();
if (s == NULL) {
GOSTerr(GOST_F_UNPACK_CP_SIGNATURE, ERR_R_MALLOC_FAILURE);
return NULL;
}
- s->s = BN_bin2bn(sig, siglen / 2, NULL);
- s->r = BN_bin2bn(sig + siglen / 2, siglen / 2, NULL);
+ DSA_SIG_get0(s, &sig_r, &sig_s);
+ sig_s = BN_bin2bn(sig, siglen / 2, NULL);
+ sig_r = BN_bin2bn(sig + siglen / 2, siglen / 2, NULL);
return s;
}
@@ -478,7 +484,7 @@ static int pkey_gost_mac_init(EVP_PKEY_CTX *ctx)
struct gost_mac_key *key = EVP_PKEY_get0(pkey);
if (key) {
data->mac_param_nid = key->mac_param_nid;
- data->mac_size = key->mac_size;
+ data->mac_size = key->mac_size;
}
}
@@ -566,13 +572,12 @@ static int pkey_gost_mac_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2)
GOST_R_MAC_KEY_NOT_SET);
return 0;
}
- return mctx->digest->md_ctrl(mctx, EVP_MD_CTRL_SET_KEY, 0,
- key);
+ return EVP_MD_meth_get_ctrl(EVP_MD_CTX_md(mctx))
+ (mctx, EVP_MD_CTRL_SET_KEY, 0, key);
} else {
- return mctx->digest->md_ctrl(mctx, EVP_MD_CTRL_SET_KEY, 32,
- &(data->key));
+ return EVP_MD_meth_get_ctrl(EVP_MD_CTX_md(mctx))
+ (mctx, EVP_MD_CTRL_SET_KEY, 32, &(data->key));
}
- return mctx->digest->md_ctrl(mctx, EVP_MD_CTRL_SET_KEY, 32, key);
}
case EVP_PKEY_CTRL_MAC_LEN:
{
@@ -660,7 +665,7 @@ static int pkey_gost_mac_keygen_base(EVP_PKEY_CTX *ctx,
return 0;
memcpy(keydata->key, data->key, 32);
keydata->mac_param_nid = data->mac_param_nid;
- keydata->mac_size = data->mac_size;
+ keydata->mac_size = data->mac_size;
EVP_PKEY_assign(pkey, mac_nid, keydata);
return 1;
}
@@ -679,9 +684,9 @@ static int pkey_gost_mac_signctx_init(EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx)
{
struct gost_mac_pmeth_data *data = EVP_PKEY_CTX_get_data(ctx);
- if (data == NULL) {
- pkey_gost_mac_init(ctx);
- }
+ if (data == NULL) {
+ pkey_gost_mac_init(ctx);
+ }
data = EVP_PKEY_CTX_get_data(ctx);
if (!data) {
@@ -709,7 +714,8 @@ static int pkey_gost_mac_signctx(EVP_PKEY_CTX *ctx, unsigned char *sig,
return 1;
}
- mctx->digest->md_ctrl(mctx, EVP_MD_CTRL_MAC_LEN, data->mac_size, NULL);
+ EVP_MD_meth_get_ctrl(EVP_MD_CTX_md(mctx))
+ (mctx, EVP_MD_CTRL_MAC_LEN, data->mac_size, NULL);
ret = EVP_DigestFinal_ex(mctx, sig, &tmpsiglen);
*siglen = data->mac_size;
return ret;