VERSION | 2 +- gost3410/2012_test.go | 2 ++ gost3410/curve.go | 10 +++++++++- gost3410/params.go | 9 +++++++++ gost3410/vko.go | 1 + install.texi | 2 +- news.texi | 5 +++++ diff --git a/VERSION b/VERSION index 976c3ef46cb8b05ad32a9279ef35015e87cbc2cb2c059307536ff2c458ca7167..34f9ca98f52526a7a6977302541789baab393bcedb5229c7bdac2f6d061109df 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -4.2.4 +4.3.0 diff --git a/gost3410/2012_test.go b/gost3410/2012_test.go index f8e0d8d8ec93d0404ba7d42931537bb3170e88c701f24e059eb2112a1ea48c48..109fa349a7156d924be54c3d159dceef406e6faecf46cd7c113cf17c206a07e0 100644 --- a/gost3410/2012_test.go +++ b/gost3410/2012_test.go @@ -126,6 +126,7 @@ 0x6D, 0xBB, 0x92, 0xCB, 0x1A, 0xDD, 0x37, 0x1E, }), nil, nil, + nil, ) if err != nil { t.FailNow() @@ -320,6 +321,7 @@ bytes2big(a), bytes2big(b), bytes2big(x), bytes2big(y), + nil, nil, nil, ) diff --git a/gost3410/curve.go b/gost3410/curve.go index e6df87b217b068c0b2609ba3b6cf357e83e1ee85889262eeb304082e32a1fca8..bc010b432bf63d8d426a9c7a63b10034273b9bbeede2d82107e21e427ee5bb16 100644 --- a/gost3410/curve.go +++ b/gost3410/curve.go @@ -25,6 +25,7 @@ zero *big.Int = big.NewInt(0) bigInt1 *big.Int = big.NewInt(1) bigInt2 *big.Int = big.NewInt(2) bigInt3 *big.Int = big.NewInt(3) + bigInt4 *big.Int = big.NewInt(4) ) type Curve struct { @@ -32,6 +33,8 @@ Name string // Just simple identifier P *big.Int // Characteristic of the underlying prime field Q *big.Int // Elliptic curve subgroup order + + Co *big.Int // Cofactor // Equation coefficients of the elliptic curve in canonical form A *big.Int @@ -55,7 +58,7 @@ edS *big.Int edT *big.Int } -func NewCurve(p, q, a, b, x, y, e, d *big.Int) (*Curve, error) { +func NewCurve(p, q, a, b, x, y, e, d, co *big.Int) (*Curve, error) { c := Curve{ Name: "unknown", P: p, @@ -84,6 +87,11 @@ } if e != nil && d != nil { c.E = e c.D = d + } + if co == nil { + c.Co = bigInt1 + } else { + c.Co = co } return &c, nil } diff --git a/gost3410/params.go b/gost3410/params.go index 990f2ce5ba894f242bf3b4511365248e8765713f5b05cd77f54512e292c2d25b..3142c34785973c04623a2c950f328194165b107b8cddf3c61a8bfb78b2febba5 100644 --- a/gost3410/params.go +++ b/gost3410/params.go @@ -61,6 +61,7 @@ 0x44, 0x0b, 0xed, 0xc8, 0xcc, 0xb6, 0xb2, 0x2c, }), nil, nil, + nil, ) if err != nil { panic(err) @@ -107,6 +108,7 @@ 0xBD, 0x63, 0x16, 0x03, 0x0E, 0x16, 0xD1, 0x9C, 0x85, 0xC9, 0x7F, 0x0A, 0x9C, 0xA2, 0x67, 0x12, 0x2B, 0x96, 0xAB, 0xBC, 0xEA, 0x7E, 0x8F, 0xC8, }), + nil, nil, nil, ) @@ -155,6 +157,7 @@ 0x27, 0xDF, 0x50, 0x5A, 0x45, 0x3F, 0x2B, 0x76, 0x35, 0x29, 0x4F, 0x2D, 0xDF, 0x23, 0xE3, 0xB1, 0x22, 0xAC, 0xC9, 0x9C, 0x9E, 0x9F, 0x1E, 0x14, }), + nil, nil, nil, ) @@ -205,6 +208,7 @@ 0x74, 0x4B, 0xF8, 0xD7, 0x17, 0x71, 0x7E, 0xFC, }), nil, nil, + nil, ) if err != nil { panic(err) @@ -251,6 +255,7 @@ 0x3C, 0xBF, 0x37, 0x83, 0xCD, 0x08, 0xC0, 0xEE, 0x4D, 0x4D, 0xC4, 0x40, 0xD4, 0x64, 0x1A, 0x8F, 0x36, 0x6E, 0x55, 0x0D, 0xFD, 0xB3, 0xBB, 0x67, }), + nil, nil, nil, ) @@ -318,6 +323,7 @@ 0x57, 0x8B, 0xC3, 0x9C, 0xFA, 0xD5, 0x18, 0x13, 0x2B, 0x9D, 0xF6, 0x28, 0x97, 0x00, 0x9A, 0xF7, 0xE5, 0x22, 0xC3, 0x2D, 0x6D, 0xC7, 0xBF, 0xFB, }), + bigInt4, ) if err != nil { panic(err) @@ -406,6 +412,7 @@ 0x3D, 0x75, 0xE6, 0xA5, 0x0E, 0x3A, 0x41, 0xE9, 0x80, 0x28, 0xFE, 0x5F, 0xC2, 0x35, 0xF5, 0xB8, 0x89, 0xA5, 0x89, 0xCB, 0x52, 0x15, 0xF2, 0xA4, }), + nil, nil, nil, ) @@ -480,6 +487,7 @@ 0x7E, 0x21, 0x34, 0x07, 0x80, 0xFE, 0x41, 0xBD, }), nil, nil, + nil, ) if err != nil { panic(err) @@ -561,6 +569,7 @@ 0x04, 0xE2, 0xCE, 0x43, 0xE7, 0x9E, 0x36, 0x9E, 0x91, 0xA0, 0xCF, 0xC2, 0xBC, 0x2A, 0x22, 0xB4, 0xCA, 0x30, 0x2D, 0xBB, 0x33, 0xEE, 0x75, 0x50, }), + bigInt4, ) if err != nil { panic(err) diff --git a/gost3410/vko.go b/gost3410/vko.go index e3cc02496c02b2a192dc56c918478819a36527bb773b2123df45759ce12a53cd..d06793e4d68938c73dc226eb52cc48a4148bb254d14bf1525341c8b79f2f6934 100644 --- a/gost3410/vko.go +++ b/gost3410/vko.go @@ -24,6 +24,7 @@ keyX, keyY, err := prv.C.Exp(prv.Key, pub.X, pub.Y) if err != nil { return nil, err } + ukm = ukm.Mul(ukm, prv.C.Co) if ukm.Cmp(bigInt1) != 0 { keyX, keyY, err = prv.C.Exp(ukm, keyX, keyY) if err != nil { diff --git a/install.texi b/install.texi index a6f5b4381850f44285b7f473c306670fe0ebc5f2978e8fc0ef84c32f79a29054..490c133aa30e43bf8dca113b9059f1204882dbcde8d3d6997ed575af18f2b04e 100644 --- a/install.texi +++ b/install.texi @@ -1,7 +1,7 @@ @node Download @unnumbered Download -@set VERSION 4.2.4 +@set VERSION 4.3.0 Preferable way is to download tarball with the signature from website and, for example, run tests with benchmarks: diff --git a/news.texi b/news.texi index f748611ab59327628b15d6effef18acd6e8ff62251208c775155f909619ccc30..bf119451e415b33abc849a9462b6265de79c3656abc4dcc5616a822d0049a1e6 100644 --- a/news.texi +++ b/news.texi @@ -3,6 +3,11 @@ @unnumbered News @table @strong +@anchor{Release 4.3.0} +@item 4.3.0 + @strong{Fixed} nasty bug with Edwards curves using in 34.10-VKO + functions: curve's cofactor has not been used. + @anchor{Release 4.2.4} @item 4.2.4 @code{gost3410.PrivateKeyReverseDigest} reversed digests and