// Copyright 2025 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 !purego package sha3 import ( "crypto/internal/fips140deps/cpu" "crypto/internal/impl" "runtime" ) // On non-Apple ARM64, the SHA-3 instructions are apparently slower than the // pure Go implementation. Checking GOOS is a bit blunt, as it also excludes // Asahi Linux; we might consider checking the MIDR model in the future. var useSHA3 = cpu.ARM64HasSHA3 && runtime.GOOS == "darwin" func init() { impl.Register("sha3", "Armv8.2", &useSHA3) } //go:noescape func keccakF1600NEON(a *[200]byte) func keccakF1600(a *[200]byte) { if useSHA3 { keccakF1600NEON(a) } else { keccakF1600Generic(a) } } func (d *Digest) write(p []byte) (n int, err error) { return d.writeGeneric(p) } func (d *Digest) read(out []byte) (n int, err error) { return d.readGeneric(out) } func (d *Digest) sum(b []byte) []byte { return d.sumGeneric(b) }