aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Belyavskiy <beldmit@gmail.com>2018-07-12 21:49:21 +0300
committerDmitry Belyavskiy <beldmit@gmail.com>2018-07-12 21:49:21 +0300
commitbca47af46027b1b84c23af1c84aef1bf901778f8 (patch)
tree8aa9bf5bb49f2891b98e4ff433afe90c9557383b
parentf8071bfb8908b78e57b44c54806d91bfbd80320b (diff)
downloadgost-engine-magma_impl.zip
gost-engine-magma_impl.tar.gz
gost-engine-magma_impl.tar.bz2
Explicitely setting cofactormagma_impl
-rw-r--r--gost_ec_sign.c10
-rw-r--r--gost_lcl.h1
-rw-r--r--gost_params.c28
3 files changed, 25 insertions, 14 deletions
diff --git a/gost_ec_sign.c b/gost_ec_sign.c
index 03a2ba0..2deb093 100644
--- a/gost_ec_sign.c
+++ b/gost_ec_sign.c
@@ -74,7 +74,7 @@ int fill_GOST_EC_params(EC_KEY *eckey, int nid)
R3410_ec_params *params = gost_nid2params(nid);
EC_GROUP *grp = NULL;
EC_POINT *P = NULL;
- BIGNUM *p = NULL, *q = NULL, *a = NULL, *b = NULL, *x = NULL, *y = NULL;
+ BIGNUM *p = NULL, *q = NULL, *a = NULL, *b = NULL, *x = NULL, *y = NULL, *cofactor = NULL;
BN_CTX *ctx;
int ok = 0;
@@ -95,14 +95,16 @@ int fill_GOST_EC_params(EC_KEY *eckey, int nid)
x = BN_CTX_get(ctx);
y = BN_CTX_get(ctx);
q = BN_CTX_get(ctx);
- if (!p || !a || !b || !x || !y || !q) {
+ cofactor = BN_CTX_get(ctx);
+ if (!p || !a || !b || !x || !y || !q || !cofactor) {
GOSTerr(GOST_F_FILL_GOST_EC_PARAMS, ERR_R_MALLOC_FAILURE);
goto end;
}
if (!BN_hex2bn(&p, params->p)
|| !BN_hex2bn(&a, params->a)
- || !BN_hex2bn(&b, params->b)) {
+ || !BN_hex2bn(&b, params->b)
+ || !BN_hex2bn(&cofactor, params->cofactor) ) {
GOSTerr(GOST_F_FILL_GOST_EC_PARAMS, ERR_R_INTERNAL_ERROR);
goto end;
}
@@ -127,7 +129,7 @@ int fill_GOST_EC_params(EC_KEY *eckey, int nid)
goto end;
}
- if (!EC_GROUP_set_generator(grp, P, q, NULL)) {
+ if (!EC_GROUP_set_generator(grp, P, q, cofactor)) {
GOSTerr(GOST_F_FILL_GOST_EC_PARAMS, ERR_R_INTERNAL_ERROR);
goto end;
}
diff --git a/gost_lcl.h b/gost_lcl.h
index 0da46c7..bc378f0 100644
--- a/gost_lcl.h
+++ b/gost_lcl.h
@@ -35,6 +35,7 @@ typedef struct R3410_ec {
char *q;
char *x;
char *y;
+ char *cofactor;
} R3410_ec_params;
extern R3410_ec_params R3410_2001_paramset[],
diff --git a/gost_params.c b/gost_params.c
index 3e70990..0a7557d 100644
--- a/gost_params.c
+++ b/gost_params.c
@@ -19,7 +19,8 @@ R3410_ec_params R3410_2001_paramset[] = {
"8000000000000000000000000000000000000000000000000000000000000431",
"8000000000000000000000000000000150FE8A1892976154C59CFC193ACCF5B3",
"2",
- "08E2A8A0E65147D4BD6316030E16D19C85C97F0A9CA267122B96ABBCEA7E8FC8"}
+ "08E2A8A0E65147D4BD6316030E16D19C85C97F0A9CA267122B96ABBCEA7E8FC8",
+ "1"}
,
/*
* 1.2.643.2.2.35.1
@@ -30,7 +31,8 @@ R3410_ec_params R3410_2001_paramset[] = {
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD97",
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C611070995AD10045841B09B761B893",
"1",
- "8D91E471E0989CDA27DF505A453F2B7635294F2DDF23E3B122ACC99C9E9F1E14"}
+ "8D91E471E0989CDA27DF505A453F2B7635294F2DDF23E3B122ACC99C9E9F1E14",
+ "1"}
,
/*
* 1.2.643.2.2.35.2
@@ -41,7 +43,8 @@ R3410_ec_params R3410_2001_paramset[] = {
"8000000000000000000000000000000000000000000000000000000000000C99",
"800000000000000000000000000000015F700CFFF1A624E5E497161BCC8A198F",
"1",
- "3FA8124359F96680B83D1C3EB2C070E5C545C9858D03ECFB744BF8D717717EFC"}
+ "3FA8124359F96680B83D1C3EB2C070E5C545C9858D03ECFB744BF8D717717EFC",
+ "1"}
,
/*
* 1.2.643.2.2.35.3
@@ -52,7 +55,8 @@ R3410_ec_params R3410_2001_paramset[] = {
"9B9F605F5A858107AB1EC85E6B41C8AACF846E86789051D37998F7B9022D759B",
"9B9F605F5A858107AB1EC85E6B41C8AA582CA3511EDDFB74F02F3A6598980BB9",
"0",
- "41ECE55743711A8C3CBF3783CD08C0EE4D4DC440D4641A8F366E550DFDB3BB67"}
+ "41ECE55743711A8C3CBF3783CD08C0EE4D4DC440D4641A8F366E550DFDB3BB67",
+ "1"}
,
/*
* 1.2.643.2.2.36.0
@@ -63,7 +67,8 @@ R3410_ec_params R3410_2001_paramset[] = {
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD97",
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C611070995AD10045841B09B761B893",
"1",
- "8D91E471E0989CDA27DF505A453F2B7635294F2DDF23E3B122ACC99C9E9F1E14"}
+ "8D91E471E0989CDA27DF505A453F2B7635294F2DDF23E3B122ACC99C9E9F1E14",
+ "1"}
,
/*
* 1.2.643.2.2.36.1
@@ -74,9 +79,10 @@ R3410_ec_params R3410_2001_paramset[] = {
"9B9F605F5A858107AB1EC85E6B41C8AACF846E86789051D37998F7B9022D759B",
"9B9F605F5A858107AB1EC85E6B41C8AA582CA3511EDDFB74F02F3A6598980BB9",
"0",
- "41ECE55743711A8C3CBF3783CD08C0EE4D4DC440D4641A8F366E550DFDB3BB67"}
+ "41ECE55743711A8C3CBF3783CD08C0EE4D4DC440D4641A8F366E550DFDB3BB67",
+ "1"}
,
- {NID_undef, NULL, NULL, NULL, NULL, NULL, NULL}
+ {NID_undef, NULL, NULL, NULL, NULL, NULL, NULL, NULL}
};
/* Parameters of GOST 34.10-2012 */
@@ -101,7 +107,8 @@ R3410_ec_params R3410_2012_512_paramset[] = {
"3",
/* y */
"7503CFE87A836AE3A61B8816E25450E6CE5E1C93ACF1ABC1778064FDCBEFA921DF16"
- "26BE4FD036E93D75E6A50E3A41E98028FE5FC235F5B889A589CB5215F2A4"}
+ "26BE4FD036E93D75E6A50E3A41E98028FE5FC235F5B889A589CB5215F2A4",
+ "1"}
,
{NID_id_tc26_gost_3410_2012_512_paramSetB,
/* a */
@@ -120,7 +127,8 @@ R3410_ec_params R3410_2012_512_paramset[] = {
"2",
/* y */
"1A8F7EDA389B094C2C071E3647A8940F3C123B697578C213BE6DD9E6C8EC7335"
- "DCB228FD1EDF4A39152CBCAAF8C0398828041055F94CEEEC7E21340780FE41BD"}
+ "DCB228FD1EDF4A39152CBCAAF8C0398828041055F94CEEEC7E21340780FE41BD",
+ "1"}
,
- {NID_undef, NULL, NULL, NULL, NULL, NULL, NULL}
+ {NID_undef, NULL, NULL, NULL, NULL, NULL, NULL, NULL}
};