From d1e4806e064972b856613676900455a63acf9ee1 Mon Sep 17 00:00:00 2001 From: Sun Yimin Date: Thu, 25 Aug 2022 16:54:30 +0800 Subject: [PATCH] sm2: refactoring, reduce duplicated codes --- sm2/sm2ec/sm2ec.go | 18 ------------------ sm2/sm2ec/sm2ec_asm.go | 28 ++++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 18 deletions(-) create mode 100644 sm2/sm2ec/sm2ec_asm.go diff --git a/sm2/sm2ec/sm2ec.go b/sm2/sm2ec/sm2ec.go index dd99624..560d41e 100644 --- a/sm2/sm2ec/sm2ec.go +++ b/sm2/sm2ec/sm2ec.go @@ -175,21 +175,3 @@ func (curve *sm2Curve) UnmarshalCompressed(data []byte) (x, y *big.Int) { } return curve.pointToAffine(p) } - -// Inverse, implements invertible interface, used by Sign() -func (curve *sm2Curve) Inverse(k *big.Int) *big.Int { - if k.Sign() < 0 { - // This should never happen. - k = new(big.Int).Neg(k) - } - if k.Cmp(curve.params.N) >= 0 { - // This should never happen. - k = new(big.Int).Mod(k, curve.params.N) - } - scalar := k.FillBytes(make([]byte, 32)) - inverse, err := _sm2ec.P256OrdInverse(scalar) - if err != nil { - panic("sm2/elliptic: sm2 rejected normalized scalar") - } - return new(big.Int).SetBytes(inverse) -} diff --git a/sm2/sm2ec/sm2ec_asm.go b/sm2/sm2ec/sm2ec_asm.go new file mode 100644 index 0000000..a6859fe --- /dev/null +++ b/sm2/sm2ec/sm2ec_asm.go @@ -0,0 +1,28 @@ +//go:build (amd64 && !generic) || (arm64 && !generic) +// +build amd64,!generic arm64,!generic + +package sm2ec + +import ( + "math/big" + + _sm2ec "github.com/emmansun/gmsm/internal/sm2ec" +) + +// Inverse, implements invertible interface, used by Sign() +func (curve *sm2Curve) Inverse(k *big.Int) *big.Int { + if k.Sign() < 0 { + // This should never happen. + k = new(big.Int).Neg(k) + } + if k.Cmp(curve.params.N) >= 0 { + // This should never happen. + k = new(big.Int).Mod(k, curve.params.N) + } + scalar := k.FillBytes(make([]byte, 32)) + inverse, err := _sm2ec.P256OrdInverse(scalar) + if err != nil { + panic("sm2/elliptic: sm2 rejected normalized scalar") + } + return new(big.Int).SetBytes(inverse) +}