• Brian Kessler's avatar
    math/big: return nil for nonexistent ModInverse · 4d44a872
    Brian Kessler authored
    Currently, the behavior of z.ModInverse(g, n) is undefined
    when g and n are not relatively prime.  In that case, no
    ModInverse exists which can be easily checked during the
    computation of the ModInverse.  Because the ModInverse does
    not indicate whether the inverse exists, there are reimplementations
    of a "checked" ModInverse in crypto/rsa.  This change removes the
    undefined behavior.  If the ModInverse does not exist, the receiver z
    is unchanged and the return value is nil. This matches the behavior of
    ModSqrt for the case where the square root does not exist.
    
    name          old time/op    new time/op    delta
    ModInverse-4    2.40µs ± 4%    2.22µs ± 0%   -7.74%  (p=0.016 n=5+4)
    
    name          old alloc/op   new alloc/op   delta
    ModInverse-4    1.36kB ± 0%    1.17kB ± 0%  -14.12%  (p=0.008 n=5+5)
    
    name          old allocs/op  new allocs/op  delta
    ModInverse-4      10.0 ± 0%       9.0 ± 0%  -10.00%  (p=0.008 n=5+5)
    
    Fixes #24922
    
    Change-Id: If7f9d491858450bdb00f1e317152f02493c9c8a8
    Reviewed-on: https://go-review.googlesource.com/108996
    Run-TryBot: Robert Griesemer <gri@golang.org>
    Reviewed-by: 's avatarRobert Griesemer <gri@golang.org>
    4d44a872
Name
Last commit
Last update
..
aes Loading commit data...
cipher Loading commit data...
des Loading commit data...
dsa Loading commit data...
ecdsa Loading commit data...
elliptic Loading commit data...
hmac Loading commit data...
internal/cipherhw Loading commit data...
md5 Loading commit data...
rand Loading commit data...
rc4 Loading commit data...
rsa Loading commit data...
sha1 Loading commit data...
sha256 Loading commit data...
sha512 Loading commit data...
subtle Loading commit data...
tls Loading commit data...
x509 Loading commit data...
crypto.go Loading commit data...
issue21104_test.go Loading commit data...