goos: linux
goarch: riscv64
pkg: golang.org/x/crypto/internal/poly1305
│ sum1305-old │ sum1305-new │
│ sec/op │ sec/op vs base │
64-4 195.9n ± 1% 144.8n ± 0% -26.07% (p=0.000 n=10)
1K-4 1.853µ ± 0% 1.012µ ± 0% -45.39% (p=0.000 n=10)
2M-4 3.627m ± 0% 1.880m ± 0% -48.17% (p=0.000 n=10)
64Unaligned-4 196.4n ± 1% 174.7n ± 0% -11.05% (p=0.000 n=10)
1KUnaligned-4 1.853µ ± 0% 1.491µ ± 0% -19.54% (p=0.000 n=10)
2MUnaligned-4 3.643m ± 0% 2.850m ± 0% -21.78% (p=0.000 n=10)
Write64-4 126.85n ± 0% 77.40n ± 0% -38.98% (p=0.000 n=10)
Write1K-4 1784.5n ± 1% 937.2n ± 0% -47.48% (p=0.000 n=10)
Write2M-4 3.654m ± 2% 1.880m ± 0% -48.55% (p=0.000 n=10)
Write64Unaligned-4 125.7n ± 0% 107.5n ± 0% -14.48% (p=0.000 n=10)
Write1KUnaligned-4 1.782µ ± 0% 1.424µ ± 0% -20.09% (p=0.000 n=10)
Write2MUnaligned-4 3.637m ± 0% 2.850m ± 0% -21.64% (p=0.000 n=10)
geomean 10.14µ 6.925µ -31.68%
│ sum1305-old │ sum1305-new-3 │
│ B/s │ B/s vs base │
64-4 311.7Mi ± 1% 421.5Mi ± 0% +35.25% (p=0.000 n=10)
1K-4 527.0Mi ± 0% 965.0Mi ± 0% +83.10% (p=0.000 n=10)
2M-4 551.4Mi ± 0% 1063.8Mi ± 0% +92.94% (p=0.000 n=10)
64Unaligned-4 310.8Mi ± 1% 349.3Mi ± 0% +12.38% (p=0.000 n=10)
1KUnaligned-4 526.9Mi ± 0% 654.9Mi ± 0% +24.30% (p=0.000 n=10)
2MUnaligned-4 548.9Mi ± 0% 701.8Mi ± 0% +27.85% (p=0.000 n=10)
Write64-4 481.2Mi ± 0% 788.6Mi ± 0% +63.89% (p=0.000 n=10)
Write1K-4 547.2Mi ± 1% 1042.0Mi ± 0% +90.42% (p=0.000 n=10)
Write2M-4 547.4Mi ± 2% 1064.0Mi ± 0% +94.38% (p=0.000 n=10)
Write64Unaligned-4 485.5Mi ± 0% 567.7Mi ± 0% +16.94% (p=0.000 n=10)
Write1KUnaligned-4 547.9Mi ± 0% 685.8Mi ± 0% +25.17% (p=0.000 n=10)
Write2MUnaligned-4 550.0Mi ± 0% 701.9Mi ± 0% +27.62% (p=0.000 n=10)
geomean 485.5Mi 710.7Mi +46.37%
Change-Id: I33a3df03382eb42ef062b0366521f02559290482
Reviewed-on: https://go-review.googlesource.com/c/crypto/+/738760
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
LUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Meng Zhuo <mengzhuo1203@gmail.com>
Reviewed-by: Mark Freeman <markfreeman@google.com>
48 lines
1.1 KiB
Go
48 lines
1.1 KiB
Go
// Copyright 2012 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
//go:build gc && !purego && (amd64 || loong64 || ppc64 || ppc64le || riscv64)
|
|
|
|
package poly1305
|
|
|
|
//go:noescape
|
|
func update(state *macState, msg []byte)
|
|
|
|
// mac is a wrapper for macGeneric that redirects calls that would have gone to
|
|
// updateGeneric to update.
|
|
//
|
|
// Its Write and Sum methods are otherwise identical to the macGeneric ones, but
|
|
// using function pointers would carry a major performance cost.
|
|
type mac struct{ macGeneric }
|
|
|
|
func (h *mac) Write(p []byte) (int, error) {
|
|
nn := len(p)
|
|
if h.offset > 0 {
|
|
n := copy(h.buffer[h.offset:], p)
|
|
if h.offset+n < TagSize {
|
|
h.offset += n
|
|
return nn, nil
|
|
}
|
|
p = p[n:]
|
|
h.offset = 0
|
|
update(&h.macState, h.buffer[:])
|
|
}
|
|
if n := len(p) - (len(p) % TagSize); n > 0 {
|
|
update(&h.macState, p[:n])
|
|
p = p[n:]
|
|
}
|
|
if len(p) > 0 {
|
|
h.offset += copy(h.buffer[h.offset:], p)
|
|
}
|
|
return nn, nil
|
|
}
|
|
|
|
func (h *mac) Sum(out *[16]byte) {
|
|
state := h.macState
|
|
if h.offset > 0 {
|
|
update(&state, h.buffer[:h.offset])
|
|
}
|
|
finalize(out, &state.h, &state.s)
|
|
}
|