return 1;
}
-/* Convert byte buffer to bignum, skipping leading zeros*/
-BIGNUM *getbnfrombuf(const unsigned char *buf, size_t len)
-{
- BIGNUM *b;
-
- while (*buf == 0 && len > 0) {
- buf++;
- len--;
- }
- if (len)
- return BN_bin2bn(buf, len, NULL);
- b = BN_new();
- BN_zero(b);
- return b;
-}
-
static int pkey_bits_gost(const EVP_PKEY *pk)
{
if (!pk)
return -1;
}
PKCS7_RECIP_INFO_get0_alg((PKCS7_RECIP_INFO *)arg2, &alg1);
- X509_ALGOR_set0(alg1, OBJ_nid2obj(pkey->type),
+ X509_ALGOR_set0(alg1, OBJ_nid2obj(EVP_PKEY_id(pkey)),
V_ASN1_SEQUENCE, params);
}
return 1;
}
CMS_RecipientInfo_ktri_get0_algs((CMS_RecipientInfo *)arg2, NULL,
NULL, &alg1);
- X509_ALGOR_set0(alg1, OBJ_nid2obj(pkey->type), V_ASN1_SEQUENCE,
- params);
+ X509_ALGOR_set0(alg1, OBJ_nid2obj(EVP_PKEY_id(pkey)),
+ V_ASN1_SEQUENCE, params);
}
return 1;
#endif
/* --------------------- free functions * ------------------------------*/
static void pkey_free_gost_ec(EVP_PKEY *key)
{
- EC_KEY_free(key->pkey.ec);
+ EC_KEY_free(EVP_PKEY_get0_EC_KEY(key));
}
/* ------------------ private key functions -----------------------------*/
return 0;
}
-
static int param_copy_gost_ec(EVP_PKEY *to, const EVP_PKEY *from)
{
EC_KEY *eto = EVP_PKEY_get0(to);
len = octet->length / 2;
ASN1_OCTET_STRING_free(octet);
- Y = getbnfrombuf(databuf, len);
- X = getbnfrombuf(databuf + len, len);
+ Y = BN_bin2bn(databuf, len, NULL);
+ X = BN_bin2bn(databuf + len, len, NULL);
OPENSSL_free(databuf);
pub_key = EC_POINT_new(group);
if (!EC_POINT_set_affine_coordinates_GFp(group, pub_key, X, Y, NULL)) {
int ptype = V_ASN1_UNDEF;
algobj = OBJ_nid2obj(EVP_PKEY_base_id(pk));
- if (pk->save_parameters) {
+ if (EVP_PKEY_save_parameters((EVP_PKEY *)pk, -1)) {
ASN1_STRING *params = encode_gost_algor_params(pk);
pval = params;
ptype = V_ASN1_SEQUENCE;
ret = i2d_ASN1_OCTET_STRING(octet, &buf);
ASN1_BIT_STRING_free(octet);
-err:
+ err:
if (X)
BN_free(X);
if (Y)
/* ---------------------- ASN1 METHOD for GOST MAC -------------------*/
static void mackey_free_gost(EVP_PKEY *pk)
{
- OPENSSL_free(pk->pkey.ptr);
+ OPENSSL_free(EVP_PKEY_get0(pk));
}
static int mac_ctrl_gost(EVP_PKEY *pkey, int op, long arg1, void *arg2)
pkey_size_gost, pkey_bits_gost);
EVP_PKEY_asn1_set_ctrl(*ameth, pkey_ctrl_gost);
+#if OPENSSL_VERSION_NUMBER >= 0x10100000L
+ EVP_PKEY_asn1_set_security_bits(*ameth, pkey_bits_gost);
+#endif
break;
case NID_id_GostR3410_2012_256:
case NID_id_GostR3410_2012_512:
pkey_size_gost, pkey_bits_gost);
EVP_PKEY_asn1_set_ctrl(*ameth, pkey_ctrl_gost);
+#if OPENSSL_VERSION_NUMBER >= 0x10100000L
+ EVP_PKEY_asn1_set_security_bits(*ameth, pkey_bits_gost);
+#endif
break;
case NID_id_Gost28147_89_MAC:
EVP_PKEY_asn1_set_free(*ameth, mackey_free_gost);