return NULL;
}
+void free_cached_groups()
+{
+ R3410_ec_params *params;
+
+ /* Search nid in 2012 paramset */
+ params = R3410_2012_512_paramset;
+ while (params->nid != NID_undef) {
+ EC_GROUP_free(params->group);
+ params->group = NULL;
+ params++;
+ }
+
+ /* Search nid in 2001 paramset */
+ params = R3410_2001_paramset;
+ while (params->nid != NID_undef) {
+ EC_GROUP_free(params->group);
+ params->group = NULL;
+ params++;
+ }
+}
+
/*
* Fills EC_KEY structure hidden in the app_data field of DSA structure
* with parameter information, extracted from parameter array in
EC_POINT *P = NULL;
BIGNUM *p = NULL, *q = NULL, *a = NULL, *b = NULL, *x = NULL, *y =
NULL, *cofactor = NULL;
- BN_CTX *ctx;
+ BN_CTX *ctx = NULL;
int ok = 0;
if (!eckey || !params) {
return 0;
}
+ if (params->group) {
+ EC_GROUP_set_curve_name(params->group, nid);
+ if (!EC_KEY_set_group(eckey, params->group)) {
+ GOSTerr(GOST_F_FILL_GOST_EC_PARAMS, ERR_R_INTERNAL_ERROR);
+ goto end;
+ }
+ return 1;
+ }
+
if (!(ctx = BN_CTX_new())) {
GOSTerr(GOST_F_FILL_GOST_EC_PARAMS, ERR_R_MALLOC_FAILURE);
return 0;
goto end;
}
EC_GROUP_set_curve_name(grp, nid);
+ params->group = grp;
if (!EC_KEY_set_group(eckey, grp)) {
GOSTerr(GOST_F_FILL_GOST_EC_PARAMS, ERR_R_INTERNAL_ERROR);
goto end;
}
ok = 1;
end:
- if (P)
- EC_POINT_free(P);
- if (grp)
- EC_GROUP_free(grp);
+ EC_POINT_free(P);
BN_CTX_end(ctx);
BN_CTX_free(ctx);
return ok;
"8000000000000000000000000000000150FE8A1892976154C59CFC193ACCF5B3",
"2",
"08E2A8A0E65147D4BD6316030E16D19C85C97F0A9CA267122B96ABBCEA7E8FC8",
- "1"}
+ "1", NULL}
,
/*
* 1.2.643.2.2.35.1
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C611070995AD10045841B09B761B893",
"1",
"8D91E471E0989CDA27DF505A453F2B7635294F2DDF23E3B122ACC99C9E9F1E14",
- "1"}
+ "1", NULL}
,
/*
* 1.2.643.2.2.35.2
"800000000000000000000000000000015F700CFFF1A624E5E497161BCC8A198F",
"1",
"3FA8124359F96680B83D1C3EB2C070E5C545C9858D03ECFB744BF8D717717EFC",
- "1"}
+ "1", NULL}
,
/*
* 1.2.643.2.2.35.3
"9B9F605F5A858107AB1EC85E6B41C8AA582CA3511EDDFB74F02F3A6598980BB9",
"0",
"41ECE55743711A8C3CBF3783CD08C0EE4D4DC440D4641A8F366E550DFDB3BB67",
- "1"}
+ "1", NULL}
,
/*
* 1.2.643.2.2.36.0
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C611070995AD10045841B09B761B893",
"1",
"8D91E471E0989CDA27DF505A453F2B7635294F2DDF23E3B122ACC99C9E9F1E14",
- "1"}
+ "1", NULL}
,
/*
* 1.2.643.2.2.36.1
"9B9F605F5A858107AB1EC85E6B41C8AA582CA3511EDDFB74F02F3A6598980BB9",
"0",
"41ECE55743711A8C3CBF3783CD08C0EE4D4DC440D4641A8F366E550DFDB3BB67",
- "1"}
+ "1", NULL}
,
/*
* 1.2.643.7.1.2.1.1.1 Edvards
/* y */
"32879423AB1A0375895786C4BB46E9565FDE0B5344766740AF268ADB32322E5C",
/* cofactor */
- "4"}
+ "4", NULL}
,
- {NID_undef, NULL, NULL, NULL, NULL, NULL, NULL, NULL}
+ {NID_undef, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}
};
/* Parameters of GOST 34.10-2012 */
/* y */
"2BB312A43BD2CE6E0D020613C857ACDDCFBF061E91E5F2C3F32447C259F39B2C"
"83AB156D77F1496BF7EB3351E1EE4E43DC1A18B91B24640B6DBB92CB1ADD371E",
- "1"}
+ "1", NULL}
,
{NID_id_tc26_gost_3410_2012_512_paramSetA,
/* a */
/* y */
"7503CFE87A836AE3A61B8816E25450E6CE5E1C93ACF1ABC1778064FDCBEFA921DF16"
"26BE4FD036E93D75E6A50E3A41E98028FE5FC235F5B889A589CB5215F2A4",
- "1"}
+ "1", NULL}
,
{NID_id_tc26_gost_3410_2012_512_paramSetB,
/* a */
/* y */
"1A8F7EDA389B094C2C071E3647A8940F3C123B697578C213BE6DD9E6C8EC7335"
"DCB228FD1EDF4A39152CBCAAF8C0398828041055F94CEEEC7E21340780FE41BD",
- "1"}
+ "1", NULL}
,
{NID_id_tc26_gost_3410_2012_512_paramSetC,
/* a */
/* y */
"F5CE40D95B5EB899ABBCCFF5911CB8577939804D6527378B8C108C3D2090FF9B"
"E18E2D33E3021ED2EF32D85822423B6304F726AA854BAE07D0396E9A9ADDC40F",
- "4"}
+ "4", NULL}
,
- {NID_undef, NULL, NULL, NULL, NULL, NULL, NULL, NULL}
+ {NID_undef, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}
};