• Vlad Krasnov's avatar
    crypto/elliptic: improve P256 implementation on amd64 a bit · c4a3a9c7
    Vlad Krasnov authored
    Minor modifications to the optimized amd64 implememntation.
    
    * Reduce window size: reduces size of the lookup tables by 40%
    * Revised scalar inversion formula, with less operations
    * Field square function now uses intental loop, saving call overhead
    
    This change will serve as a basis for an arm64 implementation.
    
    Performance results on Skylake MacBook Pro:
    
    pkg:crypto/elliptic goos:darwin goarch:amd64
    BaseMultP256      17.8µs ± 1%    17.5µs ± 1%  -1.41%  (p=0.003 n=10+10)
    ScalarMultP256    70.7µs ± 1%    68.9µs ± 2%  -2.57%  (p=0.000 n=9+9)
    pkg:crypto/ecdsa goos:darwin goarch:amd64
    SignP256          32.7µs ± 1%    31.4µs ± 1%  -3.96%  (p=0.000 n=10+8)
    VerifyP256        95.1µs ± 1%    93.5µs ± 2%  -1.73%  (p=0.001 n=10+9)
    
    name            old alloc/op   new alloc/op   delta
    pkg:crypto/elliptic goos:darwin goarch:amd64
    BaseMultP256        288B ± 0%      288B ± 0%    ~     (all equal)
    ScalarMultP256      256B ± 0%      256B ± 0%    ~     (all equal)
    pkg:crypto/ecdsa goos:darwin goarch:amd64
    SignP256          2.90kB ± 0%    2.90kB ± 0%    ~     (all equal)
    VerifyP256          976B ± 0%      976B ± 0%    ~     (all equal)
    
    name            old allocs/op  new allocs/op  delta
    pkg:crypto/elliptic goos:darwin goarch:amd64
    BaseMultP256        6.00 ± 0%      6.00 ± 0%    ~     (all equal)
    ScalarMultP256      5.00 ± 0%      5.00 ± 0%    ~     (all equal)
    pkg:crypto/ecdsa goos:darwin goarch:amd64
    SignP256            34.0 ± 0%      34.0 ± 0%    ~     (all equal)
    VerifyP256          17.0 ± 0%      17.0 ± 0%    ~     (all equal)
    
    Change-Id: I3f0e2e197a54e7bc7916dedc5dbf085e2c4aea24
    Reviewed-on: https://go-review.googlesource.com/99622Reviewed-by: 's avatarVlad Krasnov <vlad@cloudflare.com>
    Reviewed-by: 's avatarFilippo Valsorda <filippo@golang.org>
    Run-TryBot: Vlad Krasnov <vlad@cloudflare.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    c4a3a9c7
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...