}
if (!hash_stream(ctx, fd, sum, hashsize)) {
perror(filename);
+ close(fd);
return 0;
}
close(fd);
const X509_ALGOR *palg = NULL;
const ASN1_OBJECT *palg_obj = NULL;
ASN1_INTEGER *priv_key = NULL;
- int expected_key_len = 32;
+ int expected_key_len;
if (!PKCS8_pkey_get0(&palg_obj, &pkey_buf, &priv_len, &palg, p8inf))
return 0;
const EC_POINT *pub_key;
BIGNUM *X = NULL, *Y = NULL, *order = NULL;
const EC_KEY *ec = EVP_PKEY_get0((EVP_PKEY *)pk);
- int ptype = V_ASN1_UNDEF;
+ int ptype = V_ASN1_SEQUENCE;
ASN1_STRING *params;
algobj = OBJ_nid2obj(EVP_PKEY_base_id(pk));
params = encode_gost_algor_params(pk);
pval = params;
- ptype = V_ASN1_SEQUENCE;
order = BN_new();
if (!order) {
const char *get_gost_engine_param(int param)
{
char *tmp;
- if (param < 0 || param > GOST_PARAM_MAX)
+ if (param < 0 || param >= GOST_PARAM_MAX)
return NULL;
if (gost_params[param] != NULL) {
return gost_params[param];
int gost_set_default_param(int param, const char *value)
{
const char *tmp;
- if (param < 0 || param > GOST_PARAM_MAX)
+ if (param < 0 || param >= GOST_PARAM_MAX)
return 0;
tmp = getenv(gost_envnames[param]);
GOSTerr(GOST_F_VKO_COMPUTE_KEY, GOST_R_ERROR_POINT_MUL);
goto err;
}
- EC_POINT_get_affine_coordinates(EC_KEY_get0_group(priv_key),
- pnt, X, Y, ctx);
+ if (!EC_POINT_get_affine_coordinates(EC_KEY_get0_group(priv_key),
+ pnt, X, Y, ctx)) {
+ GOSTerr(GOST_F_VKO_COMPUTE_KEY, ERR_R_EC_LIB);
+ goto err;
+ }
half_len = BN_num_bytes(order);
buf_len = 2 * half_len;
R3410_ec_params *R3410_2012_256_paramset = R3410_2001_paramset;
R3410_ec_params R3410_2012_512_paramset[] = {
+ {NID_id_tc26_gost_3410_2012_512_paramSetTest,
+ /* a */
+ "7",
+ /* b */
+ "1CFF0806A31116DA29D8CFA54E57EB748BC5F377E49400FDD788B649ECA1AC43"
+ "61834013B2AD7322480A89CA58E0CF74BC9E540C2ADD6897FAD0A3084F302ADC",
+ /* p */
+ "4531ACD1FE0023C7550D267B6B2FEE80922B14B2FFB90F04D4EB7C09B5D2D15D"
+ "F1D852741AF4704A0458047E80E4546D35B8336FAC224DD81664BBF528BE6373",
+ /* q */
+ "4531ACD1FE0023C7550D267B6B2FEE80922B14B2FFB90F04D4EB7C09B5D2D15D"
+ "A82F2D7ECB1DBAC719905C5EECC423F1D86E25EDBE23C595D644AAF187E6E6DF",
+ /* x */
+ "24D19CC64572EE30F396BF6EBBFD7A6C5213B3B3D7057CC825F91093A68CD762"
+ "FD60611262CD838DC6B60AA7EEE804E28BC849977FAC33B4B530F1B120248A9A",
+ /* y */
+ "2BB312A43BD2CE6E0D020613C857ACDDCFBF061E91E5F2C3F32447C259F39B2C"
+ "83AB156D77F1496BF7EB3351E1EE4E43DC1A18B91B24640B6DBB92CB1ADD371E",
+ "1"}
+ ,
{NID_id_tc26_gost_3410_2012_512_paramSetA,
/* a */
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
case NID_id_tc26_gost_3410_2012_512_paramSetA:
case NID_id_tc26_gost_3410_2012_512_paramSetB:
case NID_id_tc26_gost_3410_2012_512_paramSetC:
+ case NID_id_tc26_gost_3410_2012_512_paramSetTest:
result =
(EVP_PKEY_assign(pkey, NID_id_GostR3410_2012_512, ec)) ? 1 : 0;
break;
}
if (!hash_stream(ctx, fd, sum)) {
perror(filename);
+ close(fd);
return 0;
}
close(fd);
int i;
EVP_CIPHER_CTX_init(ctx);
- EVP_CipherInit_ex(ctx, type, NULL, K, iv, 1);
- EVP_CIPHER_CTX_set_padding(ctx, 0);
+ T(EVP_CipherInit_ex(ctx, type, NULL, K, iv, 1));
+ T(EVP_CIPHER_CTX_set_padding(ctx, 0));
memset(c, 0xff, sizeof(c));
if (acpkm)
T(EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_KEY_MESH, acpkm, NULL));
sz = size - i;
else
sz = z;
- EVP_CipherUpdate(ctx, c + i, &outlen, pt + i, sz);
+ T(EVP_CipherUpdate(ctx, c + i, &outlen, pt + i, sz));
OPENSSL_assert(outlen == sz);
}
outlen = i - z + sz;
- EVP_CipherFinal_ex(ctx, c + outlen, &tmplen);
+ T(EVP_CipherFinal_ex(ctx, c + outlen, &tmplen));
EVP_CIPHER_CTX_cleanup(ctx);
test = outlen != size || memcmp(c, exp, size);