aboutsummaryrefslogtreecommitdiff
path: root/vendor/golang.org/x/crypto/internal/poly1305/sum_ppc64le.go
diff options
context:
space:
mode:
authorJordan <me@jordan.im>2022-03-17 09:43:29 -0700
committerJordan <me@jordan.im>2022-03-17 09:43:29 -0700
commit66bfe530b4fd5cb9755337ce718df26ee81f1b77 (patch)
tree9dfc8a79183b8bffc12db5a92f957e3bfd37d4f2 /vendor/golang.org/x/crypto/internal/poly1305/sum_ppc64le.go
parent2f0b35e3c25bc4394f3288e1baa77d250cb510ed (diff)
downloadkeep-66bfe530b4fd5cb9755337ce718df26ee81f1b77.tar.gz
keep-66bfe530b4fd5cb9755337ce718df26ee81f1b77.zip
misc: go get -u ./... ; go mod vendor
Diffstat (limited to 'vendor/golang.org/x/crypto/internal/poly1305/sum_ppc64le.go')
-rw-r--r--vendor/golang.org/x/crypto/internal/poly1305/sum_ppc64le.go48
1 files changed, 48 insertions, 0 deletions
diff --git a/vendor/golang.org/x/crypto/internal/poly1305/sum_ppc64le.go b/vendor/golang.org/x/crypto/internal/poly1305/sum_ppc64le.go
new file mode 100644
index 0000000..4a06994
--- /dev/null
+++ b/vendor/golang.org/x/crypto/internal/poly1305/sum_ppc64le.go
@@ -0,0 +1,48 @@
+// Copyright 2019 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
+// +build gc,!purego
+
+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)
+}