diff options
author | Filippo Valsorda <filippo@golang.org> | 2020-04-30 23:52:48 -0400 |
---|---|---|
committer | Filippo Valsorda <filippo@golang.org> | 2020-05-05 18:05:10 +0000 |
commit | a8e83d51a0cc709c836fe8836b10155342aa2ac4 (patch) | |
tree | 576d47ca61f6a69a85f6a27fcb5d3ff425f0893e /src/crypto/rsa/rsa.go | |
parent | a6c6e59655e2599bd6dabce51a3a68accff433f8 (diff) | |
download | go-a8e83d51a0cc709c836fe8836b10155342aa2ac4.tar.gz go-a8e83d51a0cc709c836fe8836b10155342aa2ac4.zip |
crypto/rsa,crypto/ecdsa,crypto/ed25519: implement PrivateKey.Equal
Fixes #38190
Change-Id: I10766068ee18974e81b3bd78ee0b4d83cc9d1a8c
Reviewed-on: https://go-review.googlesource.com/c/go/+/231417
Run-TryBot: Filippo Valsorda <filippo@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Katie Hockman <katie@golang.org>
Diffstat (limited to 'src/crypto/rsa/rsa.go')
-rw-r--r-- | src/crypto/rsa/rsa.go | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/crypto/rsa/rsa.go b/src/crypto/rsa/rsa.go index 28eb5926c1..b414b44148 100644 --- a/src/crypto/rsa/rsa.go +++ b/src/crypto/rsa/rsa.go @@ -44,6 +44,9 @@ type PublicKey struct { E int // public exponent } +// Any methods implemented on PublicKey might need to also be implemented on +// PrivateKey, as the latter embeds the former and will expose its methods. + // Size returns the modulus size in bytes. Raw signatures and ciphertexts // for or by this public key will have the same size. func (pub *PublicKey) Size() int { @@ -109,6 +112,27 @@ func (priv *PrivateKey) Public() crypto.PublicKey { return &priv.PublicKey } +// Equal reports whether priv and x have equivalent values. It ignores +// Precomputed values. +func (priv *PrivateKey) Equal(x crypto.PrivateKey) bool { + xx, ok := x.(*PrivateKey) + if !ok { + return false + } + if !priv.PublicKey.Equal(&xx.PublicKey) || priv.D.Cmp(xx.D) != 0 { + return false + } + if len(priv.Primes) != len(xx.Primes) { + return false + } + for i := range priv.Primes { + if priv.Primes[i].Cmp(xx.Primes[i]) != 0 { + return false + } + } + return true +} + // Sign signs digest with priv, reading randomness from rand. If opts is a // *PSSOptions then the PSS algorithm will be used, otherwise PKCS#1 v1.5 will // be used. digest must be the result of hashing the input message using |