aboutsummaryrefslogtreecommitdiff
path: root/src/crypto/rsa/rsa.go
diff options
context:
space:
mode:
authorFilippo Valsorda <filippo@golang.org>2024-11-27 18:17:28 +0100
committerGopher Robot <gobot@golang.org>2024-11-30 01:46:21 +0000
commit22b5c145fb85771cdc5d16cd6aa8294bcf010d46 (patch)
tree18ca7b8002894d3541aacb47c2b54f2a991c7797 /src/crypto/rsa/rsa.go
parentcaee788a48f19814bd778c1bd2422cb6f60ad810 (diff)
downloadgo-22b5c145fb85771cdc5d16cd6aa8294bcf010d46.tar.xz
crypto/internal/fips140/rsa: add Miller-Rabin test
A following CL will move key generation to crypto/internal/fips140/rsa. Updates #69799 For #69536 Change-Id: Icdf9b8424da20453939c6587af7dc922aad9e0ca Reviewed-on: https://go-review.googlesource.com/c/go/+/632215 Auto-Submit: Filippo Valsorda <filippo@golang.org> Reviewed-by: Roland Shoemaker <roland@golang.org> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Russ Cox <rsc@golang.org> Reviewed-by: Daniel McCarney <daniel@binaryparadox.net>
Diffstat (limited to 'src/crypto/rsa/rsa.go')
-rw-r--r--src/crypto/rsa/rsa.go19
1 files changed, 3 insertions, 16 deletions
diff --git a/src/crypto/rsa/rsa.go b/src/crypto/rsa/rsa.go
index eb6ce73e0f..3c9b98eae9 100644
--- a/src/crypto/rsa/rsa.go
+++ b/src/crypto/rsa/rsa.go
@@ -243,10 +243,6 @@ func (priv *PrivateKey) Validate() error {
if err != nil {
return fmt.Errorf("crypto/rsa: invalid private exponent: %v", err)
}
- one, err := bigmod.NewNat().SetUint(1, N)
- if err != nil {
- return fmt.Errorf("crypto/rsa: internal error: %v", err)
- }
Π := bigmod.NewNat().ExpandFor(N)
for _, prime := range priv.Primes {
@@ -254,7 +250,7 @@ func (priv *PrivateKey) Validate() error {
if err != nil {
return fmt.Errorf("crypto/rsa: invalid prime: %v", err)
}
- if p.IsZero() == 1 {
+ if p.IsZero() == 1 || p.IsOne() == 1 {
return errors.New("crypto/rsa: invalid prime")
}
Π.Mul(p, N)
@@ -265,11 +261,7 @@ func (priv *PrivateKey) Validate() error {
// exponent(ℤ/nℤ). It also implies that a^de ≡ a mod p as a^(p-1) ≡ 1
// mod p. Thus a^de ≡ a mod n for all a coprime to n, as required.
- p.Sub(one, N)
- if p.IsZero() == 1 {
- return errors.New("crypto/rsa: invalid prime")
- }
- pMinus1, err := bigmod.NewModulus(p.Bytes(N))
+ pMinus1, err := bigmod.NewModulus(p.SubOne(N).Bytes(N))
if err != nil {
return fmt.Errorf("crypto/rsa: internal error: %v", err)
}
@@ -278,16 +270,11 @@ func (priv *PrivateKey) Validate() error {
if err != nil {
return fmt.Errorf("crypto/rsa: invalid public exponent: %v", err)
}
- one, err := bigmod.NewNat().SetUint(1, pMinus1)
- if err != nil {
- return fmt.Errorf("crypto/rsa: internal error: %v", err)
- }
de := bigmod.NewNat()
de.Mod(d, pMinus1)
de.Mul(e, pMinus1)
- de.Sub(one, pMinus1)
- if de.IsZero() != 1 {
+ if de.IsOne() != 1 {
return errors.New("crypto/rsa: invalid exponents")
}
}