Skip to content

Commit ac659a5

Browse files
committed
优化
1 parent a9e6500 commit ac659a5

File tree

19 files changed

+740
-612
lines changed

19 files changed

+740
-612
lines changed

elliptic/base_elliptic/elliptic.go

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
1-
package base_elliptic
2-
31
// Package `base_elliptic` implements Elliptic curves over binary fields
4-
5-
// from github.com/RyuaNerin/elliptic2
2+
package base_elliptic
63

74
// Create new elliptic curves over binary fields
85
// warning: params dose not validated.

elliptic/bign/bign.go

Lines changed: 0 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package bign
22

33
import (
4-
"sync"
5-
"math/big"
64
"encoding/asn1"
75
"crypto/elliptic"
86
)
@@ -13,50 +11,6 @@ var (
1311
OIDNamedCurveP512v1 = asn1.ObjectIdentifier{1, 2, 112, 0, 2, 0, 34, 101, 45, 3, 3}
1412
)
1513

16-
var (
17-
once sync.Once
18-
p256v1, p384v1, p512v1 *elliptic.CurveParams
19-
)
20-
21-
func initAll() {
22-
initP256v1()
23-
initP384v1()
24-
initP512v1()
25-
}
26-
27-
func initP256v1() {
28-
p256v1 = new(elliptic.CurveParams)
29-
p256v1.P = bigFromHex("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff43")
30-
p256v1.N = bigFromHex("ffffffffffffffffffffffffffffffffd95c8ed60dfb4dfc7e5abf99263d6607")
31-
p256v1.B = bigFromHex("77ce6c1515f3a8edd2c13aabe4d8fbbe4cf55069978b9253b22e7d6bd69c03f1")
32-
p256v1.Gx = bigFromHex("0000000000000000000000000000000000000000000000000000000000000000")
33-
p256v1.Gy = bigFromHex("6bf7fc3cfb16d69f5ce4c9a351d6835d78913966c408f6521e29cf1804516a93")
34-
p256v1.BitSize = 256
35-
p256v1.Name = "BIGN256V1"
36-
}
37-
38-
func initP384v1() {
39-
p384v1 = new(elliptic.CurveParams)
40-
p384v1.P = bigFromHex("fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec3")
41-
p384v1.N = bigFromHex("fffffffffffffffffffffffffffffffffffffffffffffffe6cccc40373af7bbb8046dae7a6a4ff0a3db7dc3ff30ca7b7")
42-
p384v1.B = bigFromHex("3c75dfe1959cef2033075aab655d34d2712748bb0ffbb196a6216af9e9712e3a14bde2f0f3cebd7cbca7fc236873bf64")
43-
p384v1.Gx = bigFromHex("000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")
44-
p384v1.Gy = bigFromHex("5d438224a82e9e9e6330117e432dbf893a729a11dc86ffa00549e79e66b1d35584403e276b2a42f9ea5ecb31f733c451")
45-
p384v1.BitSize = 384
46-
p384v1.Name = "BIGN384V1"
47-
}
48-
49-
func initP512v1() {
50-
p512v1 = new(elliptic.CurveParams)
51-
p512v1.P = bigFromHex("fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc7")
52-
p512v1.N = bigFromHex("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb2c0092c0198004ef26bebb02e2113f4361bcae59556df32dcffad490d068ef1")
53-
p512v1.B = bigFromHex("6cb45944933b8c43d88c5d6a60fd58895bc6a9eedd5d255117ce13e3daadb0882711dcb5c4245e952933008c87aca243ea8622273a49a27a09346998d6139c90")
54-
p512v1.Gx = bigFromHex("00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")
55-
p512v1.Gy = bigFromHex("a826ff7ae4037681b182e6f7a0d18fabb0ab41b3b361bce2d2edf81b00cccada6973dde20efa6fd2ff777395eee8226167aa83b9c94c0d04b792ae6fceefedbd")
56-
p512v1.BitSize = 512
57-
p512v1.Name = "BIGN512V1"
58-
}
59-
6014
func P256v1() elliptic.Curve {
6115
once.Do(initAll)
6216
return p256v1
@@ -71,12 +25,3 @@ func P512v1() elliptic.Curve {
7125
once.Do(initAll)
7226
return p512v1
7327
}
74-
75-
func bigFromHex(s string) *big.Int {
76-
b, ok := new(big.Int).SetString(s, 16)
77-
if !ok {
78-
panic("go-cryptobin/bign: invalid encoding")
79-
}
80-
81-
return b
82-
}

elliptic/bign/bign_curves.go

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package bign
2+
3+
import (
4+
"sync"
5+
"math/big"
6+
"crypto/elliptic"
7+
)
8+
9+
var (
10+
once sync.Once
11+
p256v1, p384v1, p512v1 *elliptic.CurveParams
12+
)
13+
14+
func initAll() {
15+
initP256v1()
16+
initP384v1()
17+
initP512v1()
18+
}
19+
20+
func initP256v1() {
21+
p256v1 = new(elliptic.CurveParams)
22+
p256v1.P = bigFromHex("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff43")
23+
p256v1.N = bigFromHex("ffffffffffffffffffffffffffffffffd95c8ed60dfb4dfc7e5abf99263d6607")
24+
p256v1.B = bigFromHex("77ce6c1515f3a8edd2c13aabe4d8fbbe4cf55069978b9253b22e7d6bd69c03f1")
25+
p256v1.Gx = bigFromHex("0000000000000000000000000000000000000000000000000000000000000000")
26+
p256v1.Gy = bigFromHex("6bf7fc3cfb16d69f5ce4c9a351d6835d78913966c408f6521e29cf1804516a93")
27+
p256v1.BitSize = 256
28+
p256v1.Name = "BIGN256V1"
29+
}
30+
31+
func initP384v1() {
32+
p384v1 = new(elliptic.CurveParams)
33+
p384v1.P = bigFromHex("fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec3")
34+
p384v1.N = bigFromHex("fffffffffffffffffffffffffffffffffffffffffffffffe6cccc40373af7bbb8046dae7a6a4ff0a3db7dc3ff30ca7b7")
35+
p384v1.B = bigFromHex("3c75dfe1959cef2033075aab655d34d2712748bb0ffbb196a6216af9e9712e3a14bde2f0f3cebd7cbca7fc236873bf64")
36+
p384v1.Gx = bigFromHex("000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")
37+
p384v1.Gy = bigFromHex("5d438224a82e9e9e6330117e432dbf893a729a11dc86ffa00549e79e66b1d35584403e276b2a42f9ea5ecb31f733c451")
38+
p384v1.BitSize = 384
39+
p384v1.Name = "BIGN384V1"
40+
}
41+
42+
func initP512v1() {
43+
p512v1 = new(elliptic.CurveParams)
44+
p512v1.P = bigFromHex("fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc7")
45+
p512v1.N = bigFromHex("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb2c0092c0198004ef26bebb02e2113f4361bcae59556df32dcffad490d068ef1")
46+
p512v1.B = bigFromHex("6cb45944933b8c43d88c5d6a60fd58895bc6a9eedd5d255117ce13e3daadb0882711dcb5c4245e952933008c87aca243ea8622273a49a27a09346998d6139c90")
47+
p512v1.Gx = bigFromHex("00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")
48+
p512v1.Gy = bigFromHex("a826ff7ae4037681b182e6f7a0d18fabb0ab41b3b361bce2d2edf81b00cccada6973dde20efa6fd2ff777395eee8226167aa83b9c94c0d04b792ae6fceefedbd")
49+
p512v1.BitSize = 512
50+
p512v1.Name = "BIGN512V1"
51+
}
52+
53+
func bigFromHex(s string) *big.Int {
54+
b, ok := new(big.Int).SetString(s, 16)
55+
if !ok {
56+
panic("go-cryptobin/bign: invalid encoding")
57+
}
58+
59+
return b
60+
}

elliptic/bitcurves/bitcurve.go

Lines changed: 10 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -1,88 +1,19 @@
1+
// Package bitelliptic implements several Koblitz elliptic curves over prime fields.
12
package bitcurves
23

3-
// Copyright 2010 The Go Authors. All rights reserved.
4-
// Copyright 2011 ThePiachu. All rights reserved.
5-
// Use of this source code is governed by a BSD-style
6-
// license that can be found in the LICENSE file.
7-
8-
// Package bitelliptic implements several Koblitz elliptic curves over prime
9-
// fields.
10-
11-
// This package operates, internally, on Jacobian coordinates. For a given
12-
// (x, y) position on the curve, the Jacobian coordinates are (x1, y1, z1)
13-
// where x = x1/z1² and y = y1/z1³. The greatest speedups come when the whole
14-
// calculation can be performed within the transform (as in ScalarMult and
15-
// ScalarBaseMult). But even for Add and Double, it's faster to apply and
16-
// reverse the transform than to operate in affine coordinates.
17-
184
import (
19-
"sync"
20-
"math/big"
5+
"encoding/asn1"
216
)
227

23-
//curve parameters taken from:
24-
//http://www.secg.org/collateral/sec2_final.pdf
25-
26-
var initonce sync.Once
27-
var secp160k1 *BitCurve
28-
var secp192k1 *BitCurve
29-
var secp224k1 *BitCurve
30-
var secp256k1 *BitCurve
31-
32-
func initAll() {
33-
initS160()
34-
initS192()
35-
initS224()
36-
initS256()
37-
}
38-
39-
func initS160() {
40-
// See SEC 2 section 2.4.1
41-
secp160k1 = new(BitCurve)
42-
secp160k1.Name = "secp160k1"
43-
secp160k1.P, _ = new(big.Int).SetString("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC73", 16)
44-
secp160k1.N, _ = new(big.Int).SetString("0100000000000000000001B8FA16DFAB9ACA16B6B3", 16)
45-
secp160k1.B, _ = new(big.Int).SetString("0000000000000000000000000000000000000007", 16)
46-
secp160k1.Gx, _ = new(big.Int).SetString("3B4C382CE37AA192A4019E763036F4F5DD4D7EBB", 16)
47-
secp160k1.Gy, _ = new(big.Int).SetString("938CF935318FDCED6BC28286531733C3F03C4FEE", 16)
48-
secp160k1.BitSize = 160
49-
}
50-
51-
func initS192() {
52-
// See SEC 2 section 2.5.1
53-
secp192k1 = new(BitCurve)
54-
secp192k1.Name = "secp192k1"
55-
secp192k1.P, _ = new(big.Int).SetString("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFEE37", 16)
56-
secp192k1.N, _ = new(big.Int).SetString("FFFFFFFFFFFFFFFFFFFFFFFE26F2FC170F69466A74DEFD8D", 16)
57-
secp192k1.B, _ = new(big.Int).SetString("000000000000000000000000000000000000000000000003", 16)
58-
secp192k1.Gx, _ = new(big.Int).SetString("DB4FF10EC057E9AE26B07D0280B7F4341DA5D1B1EAE06C7D", 16)
59-
secp192k1.Gy, _ = new(big.Int).SetString("9B2F2F6D9C5628A7844163D015BE86344082AA88D95E2F9D", 16)
60-
secp192k1.BitSize = 192
61-
}
8+
// curve parameters taken from:
9+
// http://www.secg.org/collateral/sec2_final.pdf
6210

63-
func initS224() {
64-
// See SEC 2 section 2.6.1
65-
secp224k1 = new(BitCurve)
66-
secp224k1.Name = "secp224k1"
67-
secp224k1.P, _ = new(big.Int).SetString("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFE56D", 16)
68-
secp224k1.N, _ = new(big.Int).SetString("010000000000000000000000000001DCE8D2EC6184CAF0A971769FB1F7", 16)
69-
secp224k1.B, _ = new(big.Int).SetString("00000000000000000000000000000000000000000000000000000005", 16)
70-
secp224k1.Gx, _ = new(big.Int).SetString("A1455B334DF099DF30FC28A169A467E9E47075A90F7E650EB6B7A45C", 16)
71-
secp224k1.Gy, _ = new(big.Int).SetString("7E089FED7FBA344282CAFBD6F7E319F7C0B0BD59E2CA4BDB556D61A5", 16)
72-
secp224k1.BitSize = 224
73-
}
74-
75-
func initS256() {
76-
// See SEC 2 section 2.7.1
77-
secp256k1 = new(BitCurve)
78-
secp256k1.Name = "secp256k1"
79-
secp256k1.P, _ = new(big.Int).SetString("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F", 16)
80-
secp256k1.N, _ = new(big.Int).SetString("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141", 16)
81-
secp256k1.B, _ = new(big.Int).SetString("0000000000000000000000000000000000000000000000000000000000000007", 16)
82-
secp256k1.Gx, _ = new(big.Int).SetString("79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798", 16)
83-
secp256k1.Gy, _ = new(big.Int).SetString("483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8", 16)
84-
secp256k1.BitSize = 256
85-
}
11+
var (
12+
OIDNamedCurveSecp160k1 = asn1.ObjectIdentifier{1, 3, 132, 0, 9}
13+
OIDNamedCurveSecp192k1 = asn1.ObjectIdentifier{1, 3, 132, 0, 31}
14+
OIDNamedCurveSecp224k1 = asn1.ObjectIdentifier{1, 3, 132, 0, 32}
15+
OIDNamedCurveSecp256k1 = asn1.ObjectIdentifier{1, 3, 132, 0, 10}
16+
)
8617

8718
// S160 returns a BitCurve which implements secp160k1 (see SEC 2 section 2.4.1)
8819
func S160() *BitCurve {

elliptic/bitcurves/bitcurve_curves.go

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
// Package bitelliptic implements several Koblitz elliptic curves over prime fields.
2+
package bitcurves
3+
4+
import (
5+
"sync"
6+
"math/big"
7+
)
8+
9+
// curve parameters taken from:
10+
// http://www.secg.org/collateral/sec2_final.pdf
11+
12+
var (
13+
initonce sync.Once
14+
secp160k1, secp192k1, secp224k1, secp256k1 *BitCurve
15+
)
16+
17+
func initAll() {
18+
initS160()
19+
initS192()
20+
initS224()
21+
initS256()
22+
}
23+
24+
func initS160() {
25+
// See SEC 2 section 2.4.1
26+
secp160k1 = new(BitCurve)
27+
secp160k1.Name = "secp160k1"
28+
secp160k1.P, _ = new(big.Int).SetString("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC73", 16)
29+
secp160k1.N, _ = new(big.Int).SetString("0100000000000000000001B8FA16DFAB9ACA16B6B3", 16)
30+
secp160k1.B, _ = new(big.Int).SetString("0000000000000000000000000000000000000007", 16)
31+
secp160k1.Gx, _ = new(big.Int).SetString("3B4C382CE37AA192A4019E763036F4F5DD4D7EBB", 16)
32+
secp160k1.Gy, _ = new(big.Int).SetString("938CF935318FDCED6BC28286531733C3F03C4FEE", 16)
33+
secp160k1.BitSize = 160
34+
}
35+
36+
func initS192() {
37+
// See SEC 2 section 2.5.1
38+
secp192k1 = new(BitCurve)
39+
secp192k1.Name = "secp192k1"
40+
secp192k1.P, _ = new(big.Int).SetString("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFEE37", 16)
41+
secp192k1.N, _ = new(big.Int).SetString("FFFFFFFFFFFFFFFFFFFFFFFE26F2FC170F69466A74DEFD8D", 16)
42+
secp192k1.B, _ = new(big.Int).SetString("000000000000000000000000000000000000000000000003", 16)
43+
secp192k1.Gx, _ = new(big.Int).SetString("DB4FF10EC057E9AE26B07D0280B7F4341DA5D1B1EAE06C7D", 16)
44+
secp192k1.Gy, _ = new(big.Int).SetString("9B2F2F6D9C5628A7844163D015BE86344082AA88D95E2F9D", 16)
45+
secp192k1.BitSize = 192
46+
}
47+
48+
func initS224() {
49+
// See SEC 2 section 2.6.1
50+
secp224k1 = new(BitCurve)
51+
secp224k1.Name = "secp224k1"
52+
secp224k1.P, _ = new(big.Int).SetString("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFE56D", 16)
53+
secp224k1.N, _ = new(big.Int).SetString("010000000000000000000000000001DCE8D2EC6184CAF0A971769FB1F7", 16)
54+
secp224k1.B, _ = new(big.Int).SetString("00000000000000000000000000000000000000000000000000000005", 16)
55+
secp224k1.Gx, _ = new(big.Int).SetString("A1455B334DF099DF30FC28A169A467E9E47075A90F7E650EB6B7A45C", 16)
56+
secp224k1.Gy, _ = new(big.Int).SetString("7E089FED7FBA344282CAFBD6F7E319F7C0B0BD59E2CA4BDB556D61A5", 16)
57+
secp224k1.BitSize = 224
58+
}
59+
60+
func initS256() {
61+
// See SEC 2 section 2.7.1
62+
secp256k1 = new(BitCurve)
63+
secp256k1.Name = "secp256k1"
64+
secp256k1.P, _ = new(big.Int).SetString("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F", 16)
65+
secp256k1.N, _ = new(big.Int).SetString("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141", 16)
66+
secp256k1.B, _ = new(big.Int).SetString("0000000000000000000000000000000000000000000000000000000000000007", 16)
67+
secp256k1.Gx, _ = new(big.Int).SetString("79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798", 16)
68+
secp256k1.Gy, _ = new(big.Int).SetString("483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8", 16)
69+
secp256k1.BitSize = 256
70+
}

elliptic/koblitz/koblitz.go

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,22 @@
11
package koblitz
22

3-
// Support for Koblitz elliptic curves
4-
// http://www.secg.org/SEC2-Ver-1.0.pdf
5-
63
import (
4+
"encoding/asn1"
75
"crypto/elliptic"
8-
6+
97
"github.com/deatil/go-cryptobin/elliptic/bitcurves"
108
)
119

10+
// Support for Koblitz elliptic curves
11+
// http://www.secg.org/SEC2-Ver-1.0.pdf
12+
13+
var (
14+
OIDNamedCurveSecp160k1 = asn1.ObjectIdentifier{1, 3, 132, 0, 9}
15+
OIDNamedCurveSecp192k1 = asn1.ObjectIdentifier{1, 3, 132, 0, 31}
16+
OIDNamedCurveSecp224k1 = asn1.ObjectIdentifier{1, 3, 132, 0, 32}
17+
OIDNamedCurveSecp256k1 = asn1.ObjectIdentifier{1, 3, 132, 0, 10}
18+
)
19+
1220
func P160k1() elliptic.Curve {
1321
return bitcurves.S160()
1422
}

elliptic/nist/nist_curves.go

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,11 @@ import (
99
var initonce sync.Once
1010

1111
var (
12-
k163 base_elliptic.Curve
13-
b163 base_elliptic.Curve
14-
k233 base_elliptic.Curve
15-
b233 base_elliptic.Curve
16-
k283 base_elliptic.Curve
17-
b283 base_elliptic.Curve
18-
k409 base_elliptic.Curve
19-
b409 base_elliptic.Curve
20-
k571 base_elliptic.Curve
21-
b571 base_elliptic.Curve
12+
k163, b163 base_elliptic.Curve
13+
k233, b233 base_elliptic.Curve
14+
k283, b283 base_elliptic.Curve
15+
k409, b409 base_elliptic.Curve
16+
k571, b571 base_elliptic.Curve
2217
)
2318

2419
func initAll() {

0 commit comments

Comments
 (0)