All of its usages were removed in CL 610596.
Updates #51940
Updates #64751
Change-Id: I72a0ea4bd44a2f671e032bffa1facf84822a90f2
Reviewed-on: https://go-review.googlesource.com/c/go/+/610599
Auto-Submit: Cuong Manh Le <cuong.manhle.vn@gmail.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
Reviewed-by: Keith Randall <khr@golang.org>
Reviewed-by: Keith Randall <khr@google.com>
"cmd/internal/gcprog",
"cmd/internal/goobj",
"cmd/internal/hash",
- "cmd/internal/notsha256",
"cmd/internal/obj/...",
"cmd/internal/objabi",
"cmd/internal/pgo",
// Run Go bootstrap to build binaries.
// Use the math_big_pure_go build tag to disable the assembly in math/big
// which may contain unsupported instructions.
- // Use the purego build tag to disable other assembly code,
- // such as in cmd/internal/notsha256.
+ // Use the purego build tag to disable other assembly code.
cmd := []string{
pathf("%s/bin/go", goroot_bootstrap),
"install",
+++ /dev/null
-// Copyright 2009 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.
-
-// Package notsha256 implements the NOTSHA256 algorithm,
-// a hash defined as bitwise NOT of SHA256.
-// It is used in situations where exact fidelity to SHA256 is unnecessary.
-// In particular, it is used in the compiler toolchain,
-// which cannot depend directly on cgo when GOEXPERIMENT=boringcrypto
-// (and in that mode the real sha256 uses cgo).
-package notsha256
-
-import (
- "encoding/binary"
- "hash"
-)
-
-// The size of a checksum in bytes.
-const Size = 32
-
-// The blocksize in bytes.
-const BlockSize = 64
-
-const (
- chunk = 64
- init0 = 0x6A09E667
- init1 = 0xBB67AE85
- init2 = 0x3C6EF372
- init3 = 0xA54FF53A
- init4 = 0x510E527F
- init5 = 0x9B05688C
- init6 = 0x1F83D9AB
- init7 = 0x5BE0CD19
-)
-
-// digest represents the partial evaluation of a checksum.
-type digest struct {
- h [8]uint32
- x [chunk]byte
- nx int
- len uint64
-}
-
-func (d *digest) Reset() {
- d.h[0] = init0
- d.h[1] = init1
- d.h[2] = init2
- d.h[3] = init3
- d.h[4] = init4
- d.h[5] = init5
- d.h[6] = init6
- d.h[7] = init7
- d.nx = 0
- d.len = 0
-}
-
-// New returns a new hash.Hash computing the NOTSHA256 checksum.
-// state of the hash.
-func New() hash.Hash {
- d := new(digest)
- d.Reset()
- return d
-}
-
-func (d *digest) Size() int {
- return Size
-}
-
-func (d *digest) BlockSize() int { return BlockSize }
-
-func (d *digest) Write(p []byte) (nn int, err error) {
- nn = len(p)
- d.len += uint64(nn)
- if d.nx > 0 {
- n := copy(d.x[d.nx:], p)
- d.nx += n
- if d.nx == chunk {
- block(d, d.x[:])
- d.nx = 0
- }
- p = p[n:]
- }
- if len(p) >= chunk {
- n := len(p) &^ (chunk - 1)
- block(d, p[:n])
- p = p[n:]
- }
- if len(p) > 0 {
- d.nx = copy(d.x[:], p)
- }
- return
-}
-
-func (d *digest) Sum(in []byte) []byte {
- // Make a copy of d so that caller can keep writing and summing.
- d0 := *d
- hash := d0.checkSum()
- return append(in, hash[:]...)
-}
-
-func (d *digest) checkSum() [Size]byte {
- len := d.len
- // Padding. Add a 1 bit and 0 bits until 56 bytes mod 64.
- var tmp [64]byte
- tmp[0] = 0x80
- if len%64 < 56 {
- d.Write(tmp[0 : 56-len%64])
- } else {
- d.Write(tmp[0 : 64+56-len%64])
- }
-
- // Length in bits.
- len <<= 3
- binary.BigEndian.PutUint64(tmp[:], len)
- d.Write(tmp[0:8])
-
- if d.nx != 0 {
- panic("d.nx != 0")
- }
-
- var digest [Size]byte
-
- binary.BigEndian.PutUint32(digest[0:], d.h[0]^0xFFFFFFFF)
- binary.BigEndian.PutUint32(digest[4:], d.h[1]^0xFFFFFFFF)
- binary.BigEndian.PutUint32(digest[8:], d.h[2]^0xFFFFFFFF)
- binary.BigEndian.PutUint32(digest[12:], d.h[3]^0xFFFFFFFF)
- binary.BigEndian.PutUint32(digest[16:], d.h[4]^0xFFFFFFFF)
- binary.BigEndian.PutUint32(digest[20:], d.h[5]^0xFFFFFFFF)
- binary.BigEndian.PutUint32(digest[24:], d.h[6]^0xFFFFFFFF)
- binary.BigEndian.PutUint32(digest[28:], d.h[7]^0xFFFFFFFF)
-
- return digest
-}
-
-// Sum256 returns the SHA256 checksum of the data.
-func Sum256(data []byte) [Size]byte {
- var d digest
- d.Reset()
- d.Write(data)
- return d.checkSum()
-}
+++ /dev/null
-// Copyright 2009 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.
-
-// SHA256 hash algorithm. See FIPS 180-2.
-
-package notsha256
-
-import (
- "crypto/rand"
- "fmt"
- "io"
- "strings"
- "testing"
-)
-
-type sha256Test struct {
- out string
- in string
- unused string // marshal state, to keep table in sync with crypto/sha256
-}
-
-var golden = []sha256Test{
- {"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "", "sha\x03j\t\xe6g\xbbg\xae\x85<n\xf3r\xa5O\xf5:Q\x0eR\u007f\x9b\x05h\x8c\x1f\x83٫[\xe0\xcd\x19\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"},
- {"ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb", "a", "sha\x03j\t\xe6g\xbbg\xae\x85<n\xf3r\xa5O\xf5:Q\x0eR\u007f\x9b\x05h\x8c\x1f\x83٫[\xe0\xcd\x19\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"},
- {"fb8e20fc2e4c3f248c60c39bd652f3c1347298bb977b8b4d5903b85055620603", "ab", "sha\x03j\t\xe6g\xbbg\xae\x85<n\xf3r\xa5O\xf5:Q\x0eR\u007f\x9b\x05h\x8c\x1f\x83٫[\xe0\xcd\x19a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01"},
- {"ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad", "abc", "sha\x03j\t\xe6g\xbbg\xae\x85<n\xf3r\xa5O\xf5:Q\x0eR\u007f\x9b\x05h\x8c\x1f\x83٫[\xe0\xcd\x19a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01"},
- {"88d4266fd4e6338d13b845fcf289579d209c897823b9217da3e161936f031589", "abcd", "sha\x03j\t\xe6g\xbbg\xae\x85<n\xf3r\xa5O\xf5:Q\x0eR\u007f\x9b\x05h\x8c\x1f\x83٫[\xe0\xcd\x19ab\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02"},
- {"36bbe50ed96841d10443bcb670d6554f0a34b761be67ec9c4a8ad2c0c44ca42c", "abcde", "sha\x03j\t\xe6g\xbbg\xae\x85<n\xf3r\xa5O\xf5:Q\x0eR\u007f\x9b\x05h\x8c\x1f\x83٫[\xe0\xcd\x19ab\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02"},
- {"bef57ec7f53a6d40beb640a780a639c83bc29ac8a9816f1fc6c5c6dcd93c4721", "abcdef", "sha\x03j\t\xe6g\xbbg\xae\x85<n\xf3r\xa5O\xf5:Q\x0eR\u007f\x9b\x05h\x8c\x1f\x83٫[\xe0\xcd\x19abc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03"},
- {"7d1a54127b222502f5b79b5fb0803061152a44f92b37e23c6527baf665d4da9a", "abcdefg", "sha\x03j\t\xe6g\xbbg\xae\x85<n\xf3r\xa5O\xf5:Q\x0eR\u007f\x9b\x05h\x8c\x1f\x83٫[\xe0\xcd\x19abc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03"},
- {"9c56cc51b374c3ba189210d5b6d4bf57790d351c96c47c02190ecf1e430635ab", "abcdefgh", "sha\x03j\t\xe6g\xbbg\xae\x85<n\xf3r\xa5O\xf5:Q\x0eR\u007f\x9b\x05h\x8c\x1f\x83٫[\xe0\xcd\x19abcd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04"},
- {"19cc02f26df43cc571bc9ed7b0c4d29224a3ec229529221725ef76d021c8326f", "abcdefghi", "sha\x03j\t\xe6g\xbbg\xae\x85<n\xf3r\xa5O\xf5:Q\x0eR\u007f\x9b\x05h\x8c\x1f\x83٫[\xe0\xcd\x19abcd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04"},
- {"72399361da6a7754fec986dca5b7cbaf1c810a28ded4abaf56b2106d06cb78b0", "abcdefghij", "sha\x03j\t\xe6g\xbbg\xae\x85<n\xf3r\xa5O\xf5:Q\x0eR\u007f\x9b\x05h\x8c\x1f\x83٫[\xe0\xcd\x19abcde\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05"},
- {"a144061c271f152da4d151034508fed1c138b8c976339de229c3bb6d4bbb4fce", "Discard medicine more than two years old.", "sha\x03j\t\xe6g\xbbg\xae\x85<n\xf3r\xa5O\xf5:Q\x0eR\u007f\x9b\x05h\x8c\x1f\x83٫[\xe0\xcd\x19Discard medicine mor\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14"},
- {"6dae5caa713a10ad04b46028bf6dad68837c581616a1589a265a11288d4bb5c4", "He who has a shady past knows that nice guys finish last.", "sha\x03j\t\xe6g\xbbg\xae\x85<n\xf3r\xa5O\xf5:Q\x0eR\u007f\x9b\x05h\x8c\x1f\x83٫[\xe0\xcd\x19He who has a shady past know\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c"},
- {"ae7a702a9509039ddbf29f0765e70d0001177914b86459284dab8b348c2dce3f", "I wouldn't marry him with a ten foot pole.", "sha\x03j\t\xe6g\xbbg\xae\x85<n\xf3r\xa5O\xf5:Q\x0eR\u007f\x9b\x05h\x8c\x1f\x83٫[\xe0\xcd\x19I wouldn't marry him \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15"},
- {"6748450b01c568586715291dfa3ee018da07d36bb7ea6f180c1af6270215c64f", "Free! Free!/A trip/to Mars/for 900/empty jars/Burma Shave", "sha\x03j\t\xe6g\xbbg\xae\x85<n\xf3r\xa5O\xf5:Q\x0eR\u007f\x9b\x05h\x8c\x1f\x83٫[\xe0\xcd\x19Free! Free!/A trip/to Mars/f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c"},
- {"14b82014ad2b11f661b5ae6a99b75105c2ffac278cd071cd6c05832793635774", "The days of the digital watch are numbered. -Tom Stoppard", "sha\x03j\t\xe6g\xbbg\xae\x85<n\xf3r\xa5O\xf5:Q\x0eR\u007f\x9b\x05h\x8c\x1f\x83٫[\xe0\xcd\x19The days of the digital watch\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1d"},
- {"7102cfd76e2e324889eece5d6c41921b1e142a4ac5a2692be78803097f6a48d8", "Nepal premier won't resign.", "sha\x03j\t\xe6g\xbbg\xae\x85<n\xf3r\xa5O\xf5:Q\x0eR\u007f\x9b\x05h\x8c\x1f\x83٫[\xe0\xcd\x19Nepal premier\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\r"},
- {"23b1018cd81db1d67983c5f7417c44da9deb582459e378d7a068552ea649dc9f", "For every action there is an equal and opposite government program.", "sha\x03j\t\xe6g\xbbg\xae\x85<n\xf3r\xa5O\xf5:Q\x0eR\u007f\x9b\x05h\x8c\x1f\x83٫[\xe0\xcd\x19For every action there is an equa\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00!"},
- {"8001f190dfb527261c4cfcab70c98e8097a7a1922129bc4096950e57c7999a5a", "His money is twice tainted: 'taint yours and 'taint mine.", "sha\x03j\t\xe6g\xbbg\xae\x85<n\xf3r\xa5O\xf5:Q\x0eR\u007f\x9b\x05h\x8c\x1f\x83٫[\xe0\xcd\x19His money is twice tainted: \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c"},
- {"8c87deb65505c3993eb24b7a150c4155e82eee6960cf0c3a8114ff736d69cad5", "There is no reason for any individual to have a computer in their home. -Ken Olsen, 1977", "sha\x03j\t\xe6g\xbbg\xae\x85<n\xf3r\xa5O\xf5:Q\x0eR\u007f\x9b\x05h\x8c\x1f\x83٫[\xe0\xcd\x19There is no reason for any individual to hav\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00,"},
- {"bfb0a67a19cdec3646498b2e0f751bddc41bba4b7f30081b0b932aad214d16d7", "It's a tiny change to the code and not completely disgusting. - Bob Manchek", "sha\x03j\t\xe6g\xbbg\xae\x85<n\xf3r\xa5O\xf5:Q\x0eR\u007f\x9b\x05h\x8c\x1f\x83٫[\xe0\xcd\x19It's a tiny change to the code and no\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00%"},
- {"7f9a0b9bf56332e19f5a0ec1ad9c1425a153da1c624868fda44561d6b74daf36", "size: a.out: bad magic", "sha\x03j\t\xe6g\xbbg\xae\x85<n\xf3r\xa5O\xf5:Q\x0eR\u007f\x9b\x05h\x8c\x1f\x83٫[\xe0\xcd\x19size: a.out\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\f"},
- {"b13f81b8aad9e3666879af19886140904f7f429ef083286195982a7588858cfc", "The major problem is with sendmail. -Mark Horton", "sha\x03j\t\xe6g\xbbg\xae\x85<n\xf3r\xa5O\xf5:Q\x0eR\u007f\x9b\x05h\x8c\x1f\x83٫[\xe0\xcd\x19The major problem is wit\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18"},
- {"b26c38d61519e894480c70c8374ea35aa0ad05b2ae3d6674eec5f52a69305ed4", "Give me a rock, paper and scissors and I will move the world. CCFestoon", "sha\x03j\t\xe6g\xbbg\xae\x85<n\xf3r\xa5O\xf5:Q\x0eR\u007f\x9b\x05h\x8c\x1f\x83٫[\xe0\xcd\x19Give me a rock, paper and scissors a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00$"},
- {"049d5e26d4f10222cd841a119e38bd8d2e0d1129728688449575d4ff42b842c1", "If the enemy is within range, then so are you.", "sha\x03j\t\xe6g\xbbg\xae\x85<n\xf3r\xa5O\xf5:Q\x0eR\u007f\x9b\x05h\x8c\x1f\x83٫[\xe0\xcd\x19If the enemy is within \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17"},
- {"0e116838e3cc1c1a14cd045397e29b4d087aa11b0853fc69ec82e90330d60949", "It's well we cannot hear the screams/That we create in others' dreams.", "sha\x03j\t\xe6g\xbbg\xae\x85<n\xf3r\xa5O\xf5:Q\x0eR\u007f\x9b\x05h\x8c\x1f\x83٫[\xe0\xcd\x19It's well we cannot hear the scream\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00#"},
- {"4f7d8eb5bcf11de2a56b971021a444aa4eafd6ecd0f307b5109e4e776cd0fe46", "You remind me of a TV show, but that's all right: I watch it anyway.", "sha\x03j\t\xe6g\xbbg\xae\x85<n\xf3r\xa5O\xf5:Q\x0eR\u007f\x9b\x05h\x8c\x1f\x83٫[\xe0\xcd\x19You remind me of a TV show, but th\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\""},
- {"61c0cc4c4bd8406d5120b3fb4ebc31ce87667c162f29468b3c779675a85aebce", "C is as portable as Stonehedge!!", "sha\x03j\t\xe6g\xbbg\xae\x85<n\xf3r\xa5O\xf5:Q\x0eR\u007f\x9b\x05h\x8c\x1f\x83٫[\xe0\xcd\x19C is as portable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10"},
- {"1fb2eb3688093c4a3f80cd87a5547e2ce940a4f923243a79a2a1e242220693ac", "Even if I could be Shakespeare, I think I should still choose to be Faraday. - A. Huxley", "sha\x03j\t\xe6g\xbbg\xae\x85<n\xf3r\xa5O\xf5:Q\x0eR\u007f\x9b\x05h\x8c\x1f\x83٫[\xe0\xcd\x19Even if I could be Shakespeare, I think I sh\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00,"},
- {"395585ce30617b62c80b93e8208ce866d4edc811a177fdb4b82d3911d8696423", "The fugacity of a constituent in a mixture of gases at a given temperature is proportional to its mole fraction. Lewis-Randall Rule", "sha\x03\x93\x14\xc8z\x87\x0e\vo\xf1E\x0f\xa4V\xb2a\x00\x87\xb5ǔ\xfc\xeaV\u009eg\xbc\x17\xb1\x85њem\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00B"},
- {"4f9b189a13d030838269dce846b16a1ce9ce81fe63e65de2f636863336a98fe6", "How can you write a big system without C++? -Paul Glick", "sha\x03j\t\xe6g\xbbg\xae\x85<n\xf3r\xa5O\xf5:Q\x0eR\u007f\x9b\x05h\x8c\x1f\x83٫[\xe0\xcd\x19How can you write a big syst\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c"},
-}
-
-var not = strings.NewReplacer(
- "0", "f",
- "1", "e",
- "2", "d",
- "3", "c",
- "4", "b",
- "5", "a",
- "6", "9",
- "7", "8",
- "8", "7",
- "9", "6",
- "a", "5",
- "b", "4",
- "c", "3",
- "d", "2",
- "e", "1",
- "f", "0",
-)
-
-func TestGolden(t *testing.T) {
- for i := 0; i < len(golden); i++ {
- g := golden[i]
- gout := not.Replace(g.out)
- s := fmt.Sprintf("%x", Sum256([]byte(g.in)))
- if s != gout {
- t.Fatalf("Sum256 function: sha256(%s) = %s want %s", g.in, s, gout)
- }
- c := New()
- for j := 0; j < 3; j++ {
- if j < 2 {
- io.WriteString(c, g.in)
- } else {
- io.WriteString(c, g.in[:len(g.in)/2])
- c.Sum(nil)
- io.WriteString(c, g.in[len(g.in)/2:])
- }
- s := fmt.Sprintf("%x", c.Sum(nil))
- if s != gout {
- t.Fatalf("sha256[%d](%s) = %s want %s", j, g.in, s, gout)
- }
- c.Reset()
- }
- }
-}
-
-func TestSize(t *testing.T) {
- c := New()
- if got := c.Size(); got != Size {
- t.Errorf("Size = %d; want %d", got, Size)
- }
-}
-
-func TestBlockSize(t *testing.T) {
- c := New()
- if got := c.BlockSize(); got != BlockSize {
- t.Errorf("BlockSize = %d want %d", got, BlockSize)
- }
-}
-
-// Tests that blockGeneric (pure Go) and block (in assembly for some architectures) match.
-func TestBlockGeneric(t *testing.T) {
- gen, asm := New().(*digest), New().(*digest)
- buf := make([]byte, BlockSize*20) // arbitrary factor
- rand.Read(buf)
- blockGeneric(gen, buf)
- block(asm, buf)
- if *gen != *asm {
- t.Error("block and blockGeneric resulted in different states")
- }
-}
-
-func TestAllocations(t *testing.T) {
- in := []byte("hello, world!")
- out := make([]byte, 0, Size)
- h := New()
- n := int(testing.AllocsPerRun(10, func() {
- h.Reset()
- h.Write(in)
- out = h.Sum(out[:0])
- }))
- if n > 0 {
- t.Errorf("allocs = %d, want 0", n)
- }
-}
-
-var bench = New()
-var buf = make([]byte, 8192)
-
-func benchmarkSize(b *testing.B, size int) {
- sum := make([]byte, bench.Size())
- b.Run("New", func(b *testing.B) {
- b.ReportAllocs()
- b.SetBytes(int64(size))
- for i := 0; i < b.N; i++ {
- bench.Reset()
- bench.Write(buf[:size])
- bench.Sum(sum[:0])
- }
- })
- b.Run("Sum256", func(b *testing.B) {
- b.ReportAllocs()
- b.SetBytes(int64(size))
- for i := 0; i < b.N; i++ {
- Sum256(buf[:size])
- }
- })
-}
-
-func BenchmarkHash8Bytes(b *testing.B) {
- benchmarkSize(b, 8)
-}
-
-func BenchmarkHash1K(b *testing.B) {
- benchmarkSize(b, 1024)
-}
-
-func BenchmarkHash8K(b *testing.B) {
- benchmarkSize(b, 8192)
-}
+++ /dev/null
-// Copyright 2009 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.
-
-// SHA256 block step.
-// In its own file so that a faster assembly or C version
-// can be substituted easily.
-
-package notsha256
-
-import "math/bits"
-
-var _K = []uint32{
- 0x428a2f98,
- 0x71374491,
- 0xb5c0fbcf,
- 0xe9b5dba5,
- 0x3956c25b,
- 0x59f111f1,
- 0x923f82a4,
- 0xab1c5ed5,
- 0xd807aa98,
- 0x12835b01,
- 0x243185be,
- 0x550c7dc3,
- 0x72be5d74,
- 0x80deb1fe,
- 0x9bdc06a7,
- 0xc19bf174,
- 0xe49b69c1,
- 0xefbe4786,
- 0x0fc19dc6,
- 0x240ca1cc,
- 0x2de92c6f,
- 0x4a7484aa,
- 0x5cb0a9dc,
- 0x76f988da,
- 0x983e5152,
- 0xa831c66d,
- 0xb00327c8,
- 0xbf597fc7,
- 0xc6e00bf3,
- 0xd5a79147,
- 0x06ca6351,
- 0x14292967,
- 0x27b70a85,
- 0x2e1b2138,
- 0x4d2c6dfc,
- 0x53380d13,
- 0x650a7354,
- 0x766a0abb,
- 0x81c2c92e,
- 0x92722c85,
- 0xa2bfe8a1,
- 0xa81a664b,
- 0xc24b8b70,
- 0xc76c51a3,
- 0xd192e819,
- 0xd6990624,
- 0xf40e3585,
- 0x106aa070,
- 0x19a4c116,
- 0x1e376c08,
- 0x2748774c,
- 0x34b0bcb5,
- 0x391c0cb3,
- 0x4ed8aa4a,
- 0x5b9cca4f,
- 0x682e6ff3,
- 0x748f82ee,
- 0x78a5636f,
- 0x84c87814,
- 0x8cc70208,
- 0x90befffa,
- 0xa4506ceb,
- 0xbef9a3f7,
- 0xc67178f2,
-}
-
-func blockGeneric(dig *digest, p []byte) {
- var w [64]uint32
- h0, h1, h2, h3, h4, h5, h6, h7 := dig.h[0], dig.h[1], dig.h[2], dig.h[3], dig.h[4], dig.h[5], dig.h[6], dig.h[7]
- for len(p) >= chunk {
- // Can interlace the computation of w with the
- // rounds below if needed for speed.
- for i := 0; i < 16; i++ {
- j := i * 4
- w[i] = uint32(p[j])<<24 | uint32(p[j+1])<<16 | uint32(p[j+2])<<8 | uint32(p[j+3])
- }
- for i := 16; i < 64; i++ {
- v1 := w[i-2]
- t1 := (bits.RotateLeft32(v1, -17)) ^ (bits.RotateLeft32(v1, -19)) ^ (v1 >> 10)
- v2 := w[i-15]
- t2 := (bits.RotateLeft32(v2, -7)) ^ (bits.RotateLeft32(v2, -18)) ^ (v2 >> 3)
- w[i] = t1 + w[i-7] + t2 + w[i-16]
- }
-
- a, b, c, d, e, f, g, h := h0, h1, h2, h3, h4, h5, h6, h7
-
- for i := 0; i < 64; i++ {
- t1 := h + ((bits.RotateLeft32(e, -6)) ^ (bits.RotateLeft32(e, -11)) ^ (bits.RotateLeft32(e, -25))) + ((e & f) ^ (^e & g)) + _K[i] + w[i]
-
- t2 := ((bits.RotateLeft32(a, -2)) ^ (bits.RotateLeft32(a, -13)) ^ (bits.RotateLeft32(a, -22))) + ((a & b) ^ (a & c) ^ (b & c))
-
- h = g
- g = f
- f = e
- e = d + t1
- d = c
- c = b
- b = a
- a = t1 + t2
- }
-
- h0 += a
- h1 += b
- h2 += c
- h3 += d
- h4 += e
- h5 += f
- h6 += g
- h7 += h
-
- p = p[chunk:]
- }
-
- dig.h[0], dig.h[1], dig.h[2], dig.h[3], dig.h[4], dig.h[5], dig.h[6], dig.h[7] = h0, h1, h2, h3, h4, h5, h6, h7
-}
+++ /dev/null
-// Copyright 2013 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
-
-// SHA256 block routine. See sha256block.go for Go equivalent.
-//
-// The algorithm is detailed in FIPS 180-4:
-//
-// https://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf
-//
-// Wt = Mt; for 0 <= t <= 15
-// Wt = SIGMA1(Wt-2) + SIGMA0(Wt-15) + Wt-16; for 16 <= t <= 63
-//
-// a = H0
-// b = H1
-// c = H2
-// d = H3
-// e = H4
-// f = H5
-// g = H6
-// h = H7
-//
-// for t = 0 to 63 {
-// T1 = h + BIGSIGMA1(e) + Ch(e,f,g) + Kt + Wt
-// T2 = BIGSIGMA0(a) + Maj(a,b,c)
-// h = g
-// g = f
-// f = e
-// e = d + T1
-// d = c
-// c = b
-// b = a
-// a = T1 + T2
-// }
-//
-// H0 = a + H0
-// H1 = b + H1
-// H2 = c + H2
-// H3 = d + H3
-// H4 = e + H4
-// H5 = f + H5
-// H6 = g + H6
-// H7 = h + H7
-
-// Wt = Mt; for 0 <= t <= 15
-#define MSGSCHEDULE0(index) \
- MOVL (index*4)(SI), AX; \
- BSWAPL AX; \
- MOVL AX, (index*4)(BP)
-
-// Wt = SIGMA1(Wt-2) + Wt-7 + SIGMA0(Wt-15) + Wt-16; for 16 <= t <= 63
-// SIGMA0(x) = ROTR(7,x) XOR ROTR(18,x) XOR SHR(3,x)
-// SIGMA1(x) = ROTR(17,x) XOR ROTR(19,x) XOR SHR(10,x)
-#define MSGSCHEDULE1(index) \
- MOVL ((index-2)*4)(BP), AX; \
- MOVL AX, CX; \
- RORL $17, AX; \
- MOVL CX, DX; \
- RORL $19, CX; \
- SHRL $10, DX; \
- MOVL ((index-15)*4)(BP), BX; \
- XORL CX, AX; \
- MOVL BX, CX; \
- XORL DX, AX; \
- RORL $7, BX; \
- MOVL CX, DX; \
- SHRL $3, DX; \
- RORL $18, CX; \
- ADDL ((index-7)*4)(BP), AX; \
- XORL CX, BX; \
- XORL DX, BX; \
- ADDL ((index-16)*4)(BP), BX; \
- ADDL BX, AX; \
- MOVL AX, ((index)*4)(BP)
-
-// Calculate T1 in AX - uses AX, BX, CX and DX registers.
-// Wt is passed in AX.
-// T1 = h + BIGSIGMA1(e) + Ch(e, f, g) + Kt + Wt
-// BIGSIGMA1(x) = ROTR(6,x) XOR ROTR(11,x) XOR ROTR(25,x)
-// Ch(x, y, z) = (x AND y) XOR (NOT x AND z)
-#define SHA256T1(const, e, f, g, h) \
- MOVL (h*4)(DI), BX; \
- ADDL AX, BX; \
- MOVL (e*4)(DI), AX; \
- ADDL $const, BX; \
- MOVL (e*4)(DI), CX; \
- RORL $6, AX; \
- MOVL (e*4)(DI), DX; \
- RORL $11, CX; \
- XORL CX, AX; \
- MOVL (e*4)(DI), CX; \
- RORL $25, DX; \
- ANDL (f*4)(DI), CX; \
- XORL AX, DX; \
- MOVL (e*4)(DI), AX; \
- NOTL AX; \
- ADDL DX, BX; \
- ANDL (g*4)(DI), AX; \
- XORL CX, AX; \
- ADDL BX, AX
-
-// Calculate T2 in BX - uses AX, BX, CX and DX registers.
-// T2 = BIGSIGMA0(a) + Maj(a, b, c)
-// BIGSIGMA0(x) = ROTR(2,x) XOR ROTR(13,x) XOR ROTR(22,x)
-// Maj(x, y, z) = (x AND y) XOR (x AND z) XOR (y AND z)
-#define SHA256T2(a, b, c) \
- MOVL (a*4)(DI), AX; \
- MOVL (c*4)(DI), BX; \
- RORL $2, AX; \
- MOVL (a*4)(DI), DX; \
- ANDL (b*4)(DI), BX; \
- RORL $13, DX; \
- MOVL (a*4)(DI), CX; \
- ANDL (c*4)(DI), CX; \
- XORL DX, AX; \
- XORL CX, BX; \
- MOVL (a*4)(DI), DX; \
- MOVL (b*4)(DI), CX; \
- RORL $22, DX; \
- ANDL (a*4)(DI), CX; \
- XORL CX, BX; \
- XORL DX, AX; \
- ADDL AX, BX
-
-// Calculate T1 and T2, then e = d + T1 and a = T1 + T2.
-// The values for e and a are stored in d and h, ready for rotation.
-#define SHA256ROUND(index, const, a, b, c, d, e, f, g, h) \
- SHA256T1(const, e, f, g, h); \
- MOVL AX, 292(SP); \
- SHA256T2(a, b, c); \
- MOVL 292(SP), AX; \
- ADDL AX, BX; \
- ADDL AX, (d*4)(DI); \
- MOVL BX, (h*4)(DI)
-
-#define SHA256ROUND0(index, const, a, b, c, d, e, f, g, h) \
- MSGSCHEDULE0(index); \
- SHA256ROUND(index, const, a, b, c, d, e, f, g, h)
-
-#define SHA256ROUND1(index, const, a, b, c, d, e, f, g, h) \
- MSGSCHEDULE1(index); \
- SHA256ROUND(index, const, a, b, c, d, e, f, g, h)
-
-TEXT ·block(SB),0,$296-16
- MOVL p_base+4(FP), SI
- MOVL p_len+8(FP), DX
- SHRL $6, DX
- SHLL $6, DX
-
- LEAL (SI)(DX*1), DI
- MOVL DI, 288(SP)
- CMPL SI, DI
- JEQ end
-
- LEAL 256(SP), DI // variables
-
- MOVL dig+0(FP), BP
- MOVL (0*4)(BP), AX // a = H0
- MOVL AX, (0*4)(DI)
- MOVL (1*4)(BP), BX // b = H1
- MOVL BX, (1*4)(DI)
- MOVL (2*4)(BP), CX // c = H2
- MOVL CX, (2*4)(DI)
- MOVL (3*4)(BP), DX // d = H3
- MOVL DX, (3*4)(DI)
- MOVL (4*4)(BP), AX // e = H4
- MOVL AX, (4*4)(DI)
- MOVL (5*4)(BP), BX // f = H5
- MOVL BX, (5*4)(DI)
- MOVL (6*4)(BP), CX // g = H6
- MOVL CX, (6*4)(DI)
- MOVL (7*4)(BP), DX // h = H7
- MOVL DX, (7*4)(DI)
-
-loop:
- MOVL SP, BP // message schedule
-
- SHA256ROUND0(0, 0x428a2f98, 0, 1, 2, 3, 4, 5, 6, 7)
- SHA256ROUND0(1, 0x71374491, 7, 0, 1, 2, 3, 4, 5, 6)
- SHA256ROUND0(2, 0xb5c0fbcf, 6, 7, 0, 1, 2, 3, 4, 5)
- SHA256ROUND0(3, 0xe9b5dba5, 5, 6, 7, 0, 1, 2, 3, 4)
- SHA256ROUND0(4, 0x3956c25b, 4, 5, 6, 7, 0, 1, 2, 3)
- SHA256ROUND0(5, 0x59f111f1, 3, 4, 5, 6, 7, 0, 1, 2)
- SHA256ROUND0(6, 0x923f82a4, 2, 3, 4, 5, 6, 7, 0, 1)
- SHA256ROUND0(7, 0xab1c5ed5, 1, 2, 3, 4, 5, 6, 7, 0)
- SHA256ROUND0(8, 0xd807aa98, 0, 1, 2, 3, 4, 5, 6, 7)
- SHA256ROUND0(9, 0x12835b01, 7, 0, 1, 2, 3, 4, 5, 6)
- SHA256ROUND0(10, 0x243185be, 6, 7, 0, 1, 2, 3, 4, 5)
- SHA256ROUND0(11, 0x550c7dc3, 5, 6, 7, 0, 1, 2, 3, 4)
- SHA256ROUND0(12, 0x72be5d74, 4, 5, 6, 7, 0, 1, 2, 3)
- SHA256ROUND0(13, 0x80deb1fe, 3, 4, 5, 6, 7, 0, 1, 2)
- SHA256ROUND0(14, 0x9bdc06a7, 2, 3, 4, 5, 6, 7, 0, 1)
- SHA256ROUND0(15, 0xc19bf174, 1, 2, 3, 4, 5, 6, 7, 0)
-
- SHA256ROUND1(16, 0xe49b69c1, 0, 1, 2, 3, 4, 5, 6, 7)
- SHA256ROUND1(17, 0xefbe4786, 7, 0, 1, 2, 3, 4, 5, 6)
- SHA256ROUND1(18, 0x0fc19dc6, 6, 7, 0, 1, 2, 3, 4, 5)
- SHA256ROUND1(19, 0x240ca1cc, 5, 6, 7, 0, 1, 2, 3, 4)
- SHA256ROUND1(20, 0x2de92c6f, 4, 5, 6, 7, 0, 1, 2, 3)
- SHA256ROUND1(21, 0x4a7484aa, 3, 4, 5, 6, 7, 0, 1, 2)
- SHA256ROUND1(22, 0x5cb0a9dc, 2, 3, 4, 5, 6, 7, 0, 1)
- SHA256ROUND1(23, 0x76f988da, 1, 2, 3, 4, 5, 6, 7, 0)
- SHA256ROUND1(24, 0x983e5152, 0, 1, 2, 3, 4, 5, 6, 7)
- SHA256ROUND1(25, 0xa831c66d, 7, 0, 1, 2, 3, 4, 5, 6)
- SHA256ROUND1(26, 0xb00327c8, 6, 7, 0, 1, 2, 3, 4, 5)
- SHA256ROUND1(27, 0xbf597fc7, 5, 6, 7, 0, 1, 2, 3, 4)
- SHA256ROUND1(28, 0xc6e00bf3, 4, 5, 6, 7, 0, 1, 2, 3)
- SHA256ROUND1(29, 0xd5a79147, 3, 4, 5, 6, 7, 0, 1, 2)
- SHA256ROUND1(30, 0x06ca6351, 2, 3, 4, 5, 6, 7, 0, 1)
- SHA256ROUND1(31, 0x14292967, 1, 2, 3, 4, 5, 6, 7, 0)
- SHA256ROUND1(32, 0x27b70a85, 0, 1, 2, 3, 4, 5, 6, 7)
- SHA256ROUND1(33, 0x2e1b2138, 7, 0, 1, 2, 3, 4, 5, 6)
- SHA256ROUND1(34, 0x4d2c6dfc, 6, 7, 0, 1, 2, 3, 4, 5)
- SHA256ROUND1(35, 0x53380d13, 5, 6, 7, 0, 1, 2, 3, 4)
- SHA256ROUND1(36, 0x650a7354, 4, 5, 6, 7, 0, 1, 2, 3)
- SHA256ROUND1(37, 0x766a0abb, 3, 4, 5, 6, 7, 0, 1, 2)
- SHA256ROUND1(38, 0x81c2c92e, 2, 3, 4, 5, 6, 7, 0, 1)
- SHA256ROUND1(39, 0x92722c85, 1, 2, 3, 4, 5, 6, 7, 0)
- SHA256ROUND1(40, 0xa2bfe8a1, 0, 1, 2, 3, 4, 5, 6, 7)
- SHA256ROUND1(41, 0xa81a664b, 7, 0, 1, 2, 3, 4, 5, 6)
- SHA256ROUND1(42, 0xc24b8b70, 6, 7, 0, 1, 2, 3, 4, 5)
- SHA256ROUND1(43, 0xc76c51a3, 5, 6, 7, 0, 1, 2, 3, 4)
- SHA256ROUND1(44, 0xd192e819, 4, 5, 6, 7, 0, 1, 2, 3)
- SHA256ROUND1(45, 0xd6990624, 3, 4, 5, 6, 7, 0, 1, 2)
- SHA256ROUND1(46, 0xf40e3585, 2, 3, 4, 5, 6, 7, 0, 1)
- SHA256ROUND1(47, 0x106aa070, 1, 2, 3, 4, 5, 6, 7, 0)
- SHA256ROUND1(48, 0x19a4c116, 0, 1, 2, 3, 4, 5, 6, 7)
- SHA256ROUND1(49, 0x1e376c08, 7, 0, 1, 2, 3, 4, 5, 6)
- SHA256ROUND1(50, 0x2748774c, 6, 7, 0, 1, 2, 3, 4, 5)
- SHA256ROUND1(51, 0x34b0bcb5, 5, 6, 7, 0, 1, 2, 3, 4)
- SHA256ROUND1(52, 0x391c0cb3, 4, 5, 6, 7, 0, 1, 2, 3)
- SHA256ROUND1(53, 0x4ed8aa4a, 3, 4, 5, 6, 7, 0, 1, 2)
- SHA256ROUND1(54, 0x5b9cca4f, 2, 3, 4, 5, 6, 7, 0, 1)
- SHA256ROUND1(55, 0x682e6ff3, 1, 2, 3, 4, 5, 6, 7, 0)
- SHA256ROUND1(56, 0x748f82ee, 0, 1, 2, 3, 4, 5, 6, 7)
- SHA256ROUND1(57, 0x78a5636f, 7, 0, 1, 2, 3, 4, 5, 6)
- SHA256ROUND1(58, 0x84c87814, 6, 7, 0, 1, 2, 3, 4, 5)
- SHA256ROUND1(59, 0x8cc70208, 5, 6, 7, 0, 1, 2, 3, 4)
- SHA256ROUND1(60, 0x90befffa, 4, 5, 6, 7, 0, 1, 2, 3)
- SHA256ROUND1(61, 0xa4506ceb, 3, 4, 5, 6, 7, 0, 1, 2)
- SHA256ROUND1(62, 0xbef9a3f7, 2, 3, 4, 5, 6, 7, 0, 1)
- SHA256ROUND1(63, 0xc67178f2, 1, 2, 3, 4, 5, 6, 7, 0)
-
- MOVL dig+0(FP), BP
- MOVL (0*4)(BP), AX // H0 = a + H0
- ADDL (0*4)(DI), AX
- MOVL AX, (0*4)(DI)
- MOVL AX, (0*4)(BP)
- MOVL (1*4)(BP), BX // H1 = b + H1
- ADDL (1*4)(DI), BX
- MOVL BX, (1*4)(DI)
- MOVL BX, (1*4)(BP)
- MOVL (2*4)(BP), CX // H2 = c + H2
- ADDL (2*4)(DI), CX
- MOVL CX, (2*4)(DI)
- MOVL CX, (2*4)(BP)
- MOVL (3*4)(BP), DX // H3 = d + H3
- ADDL (3*4)(DI), DX
- MOVL DX, (3*4)(DI)
- MOVL DX, (3*4)(BP)
- MOVL (4*4)(BP), AX // H4 = e + H4
- ADDL (4*4)(DI), AX
- MOVL AX, (4*4)(DI)
- MOVL AX, (4*4)(BP)
- MOVL (5*4)(BP), BX // H5 = f + H5
- ADDL (5*4)(DI), BX
- MOVL BX, (5*4)(DI)
- MOVL BX, (5*4)(BP)
- MOVL (6*4)(BP), CX // H6 = g + H6
- ADDL (6*4)(DI), CX
- MOVL CX, (6*4)(DI)
- MOVL CX, (6*4)(BP)
- MOVL (7*4)(BP), DX // H7 = h + H7
- ADDL (7*4)(DI), DX
- MOVL DX, (7*4)(DI)
- MOVL DX, (7*4)(BP)
-
- ADDL $64, SI
- CMPL SI, 288(SP)
- JB loop
-
-end:
- RET
+++ /dev/null
-// Copyright 2017 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 notsha256
-
-var useAVX2 = false
+++ /dev/null
-// Copyright 2013 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
-
-#include "textflag.h"
-
-// SHA256 block routine. See sha256block.go for Go equivalent.
-//
-// The algorithm is detailed in FIPS 180-4:
-//
-// https://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf
-
-// Wt = Mt; for 0 <= t <= 15
-// Wt = SIGMA1(Wt-2) + SIGMA0(Wt-15) + Wt-16; for 16 <= t <= 63
-//
-// a = H0
-// b = H1
-// c = H2
-// d = H3
-// e = H4
-// f = H5
-// g = H6
-// h = H7
-//
-// for t = 0 to 63 {
-// T1 = h + BIGSIGMA1(e) + Ch(e,f,g) + Kt + Wt
-// T2 = BIGSIGMA0(a) + Maj(a,b,c)
-// h = g
-// g = f
-// f = e
-// e = d + T1
-// d = c
-// c = b
-// b = a
-// a = T1 + T2
-// }
-//
-// H0 = a + H0
-// H1 = b + H1
-// H2 = c + H2
-// H3 = d + H3
-// H4 = e + H4
-// H5 = f + H5
-// H6 = g + H6
-// H7 = h + H7
-
-// Wt = Mt; for 0 <= t <= 15
-#define MSGSCHEDULE0(index) \
- MOVL (index*4)(SI), AX; \
- BSWAPL AX; \
- MOVL AX, (index*4)(BP)
-
-// Wt = SIGMA1(Wt-2) + Wt-7 + SIGMA0(Wt-15) + Wt-16; for 16 <= t <= 63
-// SIGMA0(x) = ROTR(7,x) XOR ROTR(18,x) XOR SHR(3,x)
-// SIGMA1(x) = ROTR(17,x) XOR ROTR(19,x) XOR SHR(10,x)
-#define MSGSCHEDULE1(index) \
- MOVL ((index-2)*4)(BP), AX; \
- MOVL AX, CX; \
- RORL $17, AX; \
- MOVL CX, DX; \
- RORL $19, CX; \
- SHRL $10, DX; \
- MOVL ((index-15)*4)(BP), BX; \
- XORL CX, AX; \
- MOVL BX, CX; \
- XORL DX, AX; \
- RORL $7, BX; \
- MOVL CX, DX; \
- SHRL $3, DX; \
- RORL $18, CX; \
- ADDL ((index-7)*4)(BP), AX; \
- XORL CX, BX; \
- XORL DX, BX; \
- ADDL ((index-16)*4)(BP), BX; \
- ADDL BX, AX; \
- MOVL AX, ((index)*4)(BP)
-
-// Calculate T1 in AX - uses AX, CX and DX registers.
-// h is also used as an accumulator. Wt is passed in AX.
-// T1 = h + BIGSIGMA1(e) + Ch(e, f, g) + Kt + Wt
-// BIGSIGMA1(x) = ROTR(6,x) XOR ROTR(11,x) XOR ROTR(25,x)
-// Ch(x, y, z) = (x AND y) XOR (NOT x AND z)
-#define SHA256T1(const, e, f, g, h) \
- ADDL AX, h; \
- MOVL e, AX; \
- ADDL $const, h; \
- MOVL e, CX; \
- RORL $6, AX; \
- MOVL e, DX; \
- RORL $11, CX; \
- XORL CX, AX; \
- MOVL e, CX; \
- RORL $25, DX; \
- ANDL f, CX; \
- XORL AX, DX; \
- MOVL e, AX; \
- NOTL AX; \
- ADDL DX, h; \
- ANDL g, AX; \
- XORL CX, AX; \
- ADDL h, AX
-
-// Calculate T2 in BX - uses BX, CX, DX and DI registers.
-// T2 = BIGSIGMA0(a) + Maj(a, b, c)
-// BIGSIGMA0(x) = ROTR(2,x) XOR ROTR(13,x) XOR ROTR(22,x)
-// Maj(x, y, z) = (x AND y) XOR (x AND z) XOR (y AND z)
-#define SHA256T2(a, b, c) \
- MOVL a, DI; \
- MOVL c, BX; \
- RORL $2, DI; \
- MOVL a, DX; \
- ANDL b, BX; \
- RORL $13, DX; \
- MOVL a, CX; \
- ANDL c, CX; \
- XORL DX, DI; \
- XORL CX, BX; \
- MOVL a, DX; \
- MOVL b, CX; \
- RORL $22, DX; \
- ANDL a, CX; \
- XORL CX, BX; \
- XORL DX, DI; \
- ADDL DI, BX
-
-// Calculate T1 and T2, then e = d + T1 and a = T1 + T2.
-// The values for e and a are stored in d and h, ready for rotation.
-#define SHA256ROUND(index, const, a, b, c, d, e, f, g, h) \
- SHA256T1(const, e, f, g, h); \
- SHA256T2(a, b, c); \
- MOVL BX, h; \
- ADDL AX, d; \
- ADDL AX, h
-
-#define SHA256ROUND0(index, const, a, b, c, d, e, f, g, h) \
- MSGSCHEDULE0(index); \
- SHA256ROUND(index, const, a, b, c, d, e, f, g, h)
-
-#define SHA256ROUND1(index, const, a, b, c, d, e, f, g, h) \
- MSGSCHEDULE1(index); \
- SHA256ROUND(index, const, a, b, c, d, e, f, g, h)
-
-TEXT ·block(SB), 0, $536-32
- MOVQ p_base+8(FP), SI
- MOVQ p_len+16(FP), DX
- SHRQ $6, DX
- SHLQ $6, DX
-
- LEAQ (SI)(DX*1), DI
- MOVQ DI, 256(SP)
- CMPQ SI, DI
- JEQ end
-
- MOVQ dig+0(FP), BP
- MOVL (0*4)(BP), R8 // a = H0
- MOVL (1*4)(BP), R9 // b = H1
- MOVL (2*4)(BP), R10 // c = H2
- MOVL (3*4)(BP), R11 // d = H3
- MOVL (4*4)(BP), R12 // e = H4
- MOVL (5*4)(BP), R13 // f = H5
- MOVL (6*4)(BP), R14 // g = H6
- MOVL (7*4)(BP), R15 // h = H7
-
-loop:
- MOVQ SP, BP
-
- SHA256ROUND0(0, 0x428a2f98, R8, R9, R10, R11, R12, R13, R14, R15)
- SHA256ROUND0(1, 0x71374491, R15, R8, R9, R10, R11, R12, R13, R14)
- SHA256ROUND0(2, 0xb5c0fbcf, R14, R15, R8, R9, R10, R11, R12, R13)
- SHA256ROUND0(3, 0xe9b5dba5, R13, R14, R15, R8, R9, R10, R11, R12)
- SHA256ROUND0(4, 0x3956c25b, R12, R13, R14, R15, R8, R9, R10, R11)
- SHA256ROUND0(5, 0x59f111f1, R11, R12, R13, R14, R15, R8, R9, R10)
- SHA256ROUND0(6, 0x923f82a4, R10, R11, R12, R13, R14, R15, R8, R9)
- SHA256ROUND0(7, 0xab1c5ed5, R9, R10, R11, R12, R13, R14, R15, R8)
- SHA256ROUND0(8, 0xd807aa98, R8, R9, R10, R11, R12, R13, R14, R15)
- SHA256ROUND0(9, 0x12835b01, R15, R8, R9, R10, R11, R12, R13, R14)
- SHA256ROUND0(10, 0x243185be, R14, R15, R8, R9, R10, R11, R12, R13)
- SHA256ROUND0(11, 0x550c7dc3, R13, R14, R15, R8, R9, R10, R11, R12)
- SHA256ROUND0(12, 0x72be5d74, R12, R13, R14, R15, R8, R9, R10, R11)
- SHA256ROUND0(13, 0x80deb1fe, R11, R12, R13, R14, R15, R8, R9, R10)
- SHA256ROUND0(14, 0x9bdc06a7, R10, R11, R12, R13, R14, R15, R8, R9)
- SHA256ROUND0(15, 0xc19bf174, R9, R10, R11, R12, R13, R14, R15, R8)
-
- SHA256ROUND1(16, 0xe49b69c1, R8, R9, R10, R11, R12, R13, R14, R15)
- SHA256ROUND1(17, 0xefbe4786, R15, R8, R9, R10, R11, R12, R13, R14)
- SHA256ROUND1(18, 0x0fc19dc6, R14, R15, R8, R9, R10, R11, R12, R13)
- SHA256ROUND1(19, 0x240ca1cc, R13, R14, R15, R8, R9, R10, R11, R12)
- SHA256ROUND1(20, 0x2de92c6f, R12, R13, R14, R15, R8, R9, R10, R11)
- SHA256ROUND1(21, 0x4a7484aa, R11, R12, R13, R14, R15, R8, R9, R10)
- SHA256ROUND1(22, 0x5cb0a9dc, R10, R11, R12, R13, R14, R15, R8, R9)
- SHA256ROUND1(23, 0x76f988da, R9, R10, R11, R12, R13, R14, R15, R8)
- SHA256ROUND1(24, 0x983e5152, R8, R9, R10, R11, R12, R13, R14, R15)
- SHA256ROUND1(25, 0xa831c66d, R15, R8, R9, R10, R11, R12, R13, R14)
- SHA256ROUND1(26, 0xb00327c8, R14, R15, R8, R9, R10, R11, R12, R13)
- SHA256ROUND1(27, 0xbf597fc7, R13, R14, R15, R8, R9, R10, R11, R12)
- SHA256ROUND1(28, 0xc6e00bf3, R12, R13, R14, R15, R8, R9, R10, R11)
- SHA256ROUND1(29, 0xd5a79147, R11, R12, R13, R14, R15, R8, R9, R10)
- SHA256ROUND1(30, 0x06ca6351, R10, R11, R12, R13, R14, R15, R8, R9)
- SHA256ROUND1(31, 0x14292967, R9, R10, R11, R12, R13, R14, R15, R8)
- SHA256ROUND1(32, 0x27b70a85, R8, R9, R10, R11, R12, R13, R14, R15)
- SHA256ROUND1(33, 0x2e1b2138, R15, R8, R9, R10, R11, R12, R13, R14)
- SHA256ROUND1(34, 0x4d2c6dfc, R14, R15, R8, R9, R10, R11, R12, R13)
- SHA256ROUND1(35, 0x53380d13, R13, R14, R15, R8, R9, R10, R11, R12)
- SHA256ROUND1(36, 0x650a7354, R12, R13, R14, R15, R8, R9, R10, R11)
- SHA256ROUND1(37, 0x766a0abb, R11, R12, R13, R14, R15, R8, R9, R10)
- SHA256ROUND1(38, 0x81c2c92e, R10, R11, R12, R13, R14, R15, R8, R9)
- SHA256ROUND1(39, 0x92722c85, R9, R10, R11, R12, R13, R14, R15, R8)
- SHA256ROUND1(40, 0xa2bfe8a1, R8, R9, R10, R11, R12, R13, R14, R15)
- SHA256ROUND1(41, 0xa81a664b, R15, R8, R9, R10, R11, R12, R13, R14)
- SHA256ROUND1(42, 0xc24b8b70, R14, R15, R8, R9, R10, R11, R12, R13)
- SHA256ROUND1(43, 0xc76c51a3, R13, R14, R15, R8, R9, R10, R11, R12)
- SHA256ROUND1(44, 0xd192e819, R12, R13, R14, R15, R8, R9, R10, R11)
- SHA256ROUND1(45, 0xd6990624, R11, R12, R13, R14, R15, R8, R9, R10)
- SHA256ROUND1(46, 0xf40e3585, R10, R11, R12, R13, R14, R15, R8, R9)
- SHA256ROUND1(47, 0x106aa070, R9, R10, R11, R12, R13, R14, R15, R8)
- SHA256ROUND1(48, 0x19a4c116, R8, R9, R10, R11, R12, R13, R14, R15)
- SHA256ROUND1(49, 0x1e376c08, R15, R8, R9, R10, R11, R12, R13, R14)
- SHA256ROUND1(50, 0x2748774c, R14, R15, R8, R9, R10, R11, R12, R13)
- SHA256ROUND1(51, 0x34b0bcb5, R13, R14, R15, R8, R9, R10, R11, R12)
- SHA256ROUND1(52, 0x391c0cb3, R12, R13, R14, R15, R8, R9, R10, R11)
- SHA256ROUND1(53, 0x4ed8aa4a, R11, R12, R13, R14, R15, R8, R9, R10)
- SHA256ROUND1(54, 0x5b9cca4f, R10, R11, R12, R13, R14, R15, R8, R9)
- SHA256ROUND1(55, 0x682e6ff3, R9, R10, R11, R12, R13, R14, R15, R8)
- SHA256ROUND1(56, 0x748f82ee, R8, R9, R10, R11, R12, R13, R14, R15)
- SHA256ROUND1(57, 0x78a5636f, R15, R8, R9, R10, R11, R12, R13, R14)
- SHA256ROUND1(58, 0x84c87814, R14, R15, R8, R9, R10, R11, R12, R13)
- SHA256ROUND1(59, 0x8cc70208, R13, R14, R15, R8, R9, R10, R11, R12)
- SHA256ROUND1(60, 0x90befffa, R12, R13, R14, R15, R8, R9, R10, R11)
- SHA256ROUND1(61, 0xa4506ceb, R11, R12, R13, R14, R15, R8, R9, R10)
- SHA256ROUND1(62, 0xbef9a3f7, R10, R11, R12, R13, R14, R15, R8, R9)
- SHA256ROUND1(63, 0xc67178f2, R9, R10, R11, R12, R13, R14, R15, R8)
-
- MOVQ dig+0(FP), BP
- ADDL (0*4)(BP), R8 // H0 = a + H0
- MOVL R8, (0*4)(BP)
- ADDL (1*4)(BP), R9 // H1 = b + H1
- MOVL R9, (1*4)(BP)
- ADDL (2*4)(BP), R10 // H2 = c + H2
- MOVL R10, (2*4)(BP)
- ADDL (3*4)(BP), R11 // H3 = d + H3
- MOVL R11, (3*4)(BP)
- ADDL (4*4)(BP), R12 // H4 = e + H4
- MOVL R12, (4*4)(BP)
- ADDL (5*4)(BP), R13 // H5 = f + H5
- MOVL R13, (5*4)(BP)
- ADDL (6*4)(BP), R14 // H6 = g + H6
- MOVL R14, (6*4)(BP)
- ADDL (7*4)(BP), R15 // H7 = h + H7
- MOVL R15, (7*4)(BP)
-
- ADDQ $64, SI
- CMPQ SI, 256(SP)
- JB loop
-
-end:
- RET
-
-// shuffle byte order from LE to BE
-DATA flip_mask<>+0x00(SB)/8, $0x0405060700010203
-DATA flip_mask<>+0x08(SB)/8, $0x0c0d0e0f08090a0b
-DATA flip_mask<>+0x10(SB)/8, $0x0405060700010203
-DATA flip_mask<>+0x18(SB)/8, $0x0c0d0e0f08090a0b
-GLOBL flip_mask<>(SB), 8, $32
-
-// shuffle xBxA -> 00BA
-DATA shuff_00BA<>+0x00(SB)/8, $0x0b0a090803020100
-DATA shuff_00BA<>+0x08(SB)/8, $0xFFFFFFFFFFFFFFFF
-DATA shuff_00BA<>+0x10(SB)/8, $0x0b0a090803020100
-DATA shuff_00BA<>+0x18(SB)/8, $0xFFFFFFFFFFFFFFFF
-GLOBL shuff_00BA<>(SB), 8, $32
-
-// shuffle xDxC -> DC00
-DATA shuff_DC00<>+0x00(SB)/8, $0xFFFFFFFFFFFFFFFF
-DATA shuff_DC00<>+0x08(SB)/8, $0x0b0a090803020100
-DATA shuff_DC00<>+0x10(SB)/8, $0xFFFFFFFFFFFFFFFF
-DATA shuff_DC00<>+0x18(SB)/8, $0x0b0a090803020100
-GLOBL shuff_DC00<>(SB), 8, $32
-
-// Round specific constants
-DATA K256<>+0x00(SB)/4, $0x428a2f98 // k1
-DATA K256<>+0x04(SB)/4, $0x71374491 // k2
-DATA K256<>+0x08(SB)/4, $0xb5c0fbcf // k3
-DATA K256<>+0x0c(SB)/4, $0xe9b5dba5 // k4
-DATA K256<>+0x10(SB)/4, $0x428a2f98 // k1
-DATA K256<>+0x14(SB)/4, $0x71374491 // k2
-DATA K256<>+0x18(SB)/4, $0xb5c0fbcf // k3
-DATA K256<>+0x1c(SB)/4, $0xe9b5dba5 // k4
-
-DATA K256<>+0x20(SB)/4, $0x3956c25b // k5 - k8
-DATA K256<>+0x24(SB)/4, $0x59f111f1
-DATA K256<>+0x28(SB)/4, $0x923f82a4
-DATA K256<>+0x2c(SB)/4, $0xab1c5ed5
-DATA K256<>+0x30(SB)/4, $0x3956c25b
-DATA K256<>+0x34(SB)/4, $0x59f111f1
-DATA K256<>+0x38(SB)/4, $0x923f82a4
-DATA K256<>+0x3c(SB)/4, $0xab1c5ed5
-
-DATA K256<>+0x40(SB)/4, $0xd807aa98 // k9 - k12
-DATA K256<>+0x44(SB)/4, $0x12835b01
-DATA K256<>+0x48(SB)/4, $0x243185be
-DATA K256<>+0x4c(SB)/4, $0x550c7dc3
-DATA K256<>+0x50(SB)/4, $0xd807aa98
-DATA K256<>+0x54(SB)/4, $0x12835b01
-DATA K256<>+0x58(SB)/4, $0x243185be
-DATA K256<>+0x5c(SB)/4, $0x550c7dc3
-
-DATA K256<>+0x60(SB)/4, $0x72be5d74 // k13 - k16
-DATA K256<>+0x64(SB)/4, $0x80deb1fe
-DATA K256<>+0x68(SB)/4, $0x9bdc06a7
-DATA K256<>+0x6c(SB)/4, $0xc19bf174
-DATA K256<>+0x70(SB)/4, $0x72be5d74
-DATA K256<>+0x74(SB)/4, $0x80deb1fe
-DATA K256<>+0x78(SB)/4, $0x9bdc06a7
-DATA K256<>+0x7c(SB)/4, $0xc19bf174
-
-DATA K256<>+0x80(SB)/4, $0xe49b69c1 // k17 - k20
-DATA K256<>+0x84(SB)/4, $0xefbe4786
-DATA K256<>+0x88(SB)/4, $0x0fc19dc6
-DATA K256<>+0x8c(SB)/4, $0x240ca1cc
-DATA K256<>+0x90(SB)/4, $0xe49b69c1
-DATA K256<>+0x94(SB)/4, $0xefbe4786
-DATA K256<>+0x98(SB)/4, $0x0fc19dc6
-DATA K256<>+0x9c(SB)/4, $0x240ca1cc
-
-DATA K256<>+0xa0(SB)/4, $0x2de92c6f // k21 - k24
-DATA K256<>+0xa4(SB)/4, $0x4a7484aa
-DATA K256<>+0xa8(SB)/4, $0x5cb0a9dc
-DATA K256<>+0xac(SB)/4, $0x76f988da
-DATA K256<>+0xb0(SB)/4, $0x2de92c6f
-DATA K256<>+0xb4(SB)/4, $0x4a7484aa
-DATA K256<>+0xb8(SB)/4, $0x5cb0a9dc
-DATA K256<>+0xbc(SB)/4, $0x76f988da
-
-DATA K256<>+0xc0(SB)/4, $0x983e5152 // k25 - k28
-DATA K256<>+0xc4(SB)/4, $0xa831c66d
-DATA K256<>+0xc8(SB)/4, $0xb00327c8
-DATA K256<>+0xcc(SB)/4, $0xbf597fc7
-DATA K256<>+0xd0(SB)/4, $0x983e5152
-DATA K256<>+0xd4(SB)/4, $0xa831c66d
-DATA K256<>+0xd8(SB)/4, $0xb00327c8
-DATA K256<>+0xdc(SB)/4, $0xbf597fc7
-
-DATA K256<>+0xe0(SB)/4, $0xc6e00bf3 // k29 - k32
-DATA K256<>+0xe4(SB)/4, $0xd5a79147
-DATA K256<>+0xe8(SB)/4, $0x06ca6351
-DATA K256<>+0xec(SB)/4, $0x14292967
-DATA K256<>+0xf0(SB)/4, $0xc6e00bf3
-DATA K256<>+0xf4(SB)/4, $0xd5a79147
-DATA K256<>+0xf8(SB)/4, $0x06ca6351
-DATA K256<>+0xfc(SB)/4, $0x14292967
-
-DATA K256<>+0x100(SB)/4, $0x27b70a85
-DATA K256<>+0x104(SB)/4, $0x2e1b2138
-DATA K256<>+0x108(SB)/4, $0x4d2c6dfc
-DATA K256<>+0x10c(SB)/4, $0x53380d13
-DATA K256<>+0x110(SB)/4, $0x27b70a85
-DATA K256<>+0x114(SB)/4, $0x2e1b2138
-DATA K256<>+0x118(SB)/4, $0x4d2c6dfc
-DATA K256<>+0x11c(SB)/4, $0x53380d13
-
-DATA K256<>+0x120(SB)/4, $0x650a7354
-DATA K256<>+0x124(SB)/4, $0x766a0abb
-DATA K256<>+0x128(SB)/4, $0x81c2c92e
-DATA K256<>+0x12c(SB)/4, $0x92722c85
-DATA K256<>+0x130(SB)/4, $0x650a7354
-DATA K256<>+0x134(SB)/4, $0x766a0abb
-DATA K256<>+0x138(SB)/4, $0x81c2c92e
-DATA K256<>+0x13c(SB)/4, $0x92722c85
-
-DATA K256<>+0x140(SB)/4, $0xa2bfe8a1
-DATA K256<>+0x144(SB)/4, $0xa81a664b
-DATA K256<>+0x148(SB)/4, $0xc24b8b70
-DATA K256<>+0x14c(SB)/4, $0xc76c51a3
-DATA K256<>+0x150(SB)/4, $0xa2bfe8a1
-DATA K256<>+0x154(SB)/4, $0xa81a664b
-DATA K256<>+0x158(SB)/4, $0xc24b8b70
-DATA K256<>+0x15c(SB)/4, $0xc76c51a3
-
-DATA K256<>+0x160(SB)/4, $0xd192e819
-DATA K256<>+0x164(SB)/4, $0xd6990624
-DATA K256<>+0x168(SB)/4, $0xf40e3585
-DATA K256<>+0x16c(SB)/4, $0x106aa070
-DATA K256<>+0x170(SB)/4, $0xd192e819
-DATA K256<>+0x174(SB)/4, $0xd6990624
-DATA K256<>+0x178(SB)/4, $0xf40e3585
-DATA K256<>+0x17c(SB)/4, $0x106aa070
-
-DATA K256<>+0x180(SB)/4, $0x19a4c116
-DATA K256<>+0x184(SB)/4, $0x1e376c08
-DATA K256<>+0x188(SB)/4, $0x2748774c
-DATA K256<>+0x18c(SB)/4, $0x34b0bcb5
-DATA K256<>+0x190(SB)/4, $0x19a4c116
-DATA K256<>+0x194(SB)/4, $0x1e376c08
-DATA K256<>+0x198(SB)/4, $0x2748774c
-DATA K256<>+0x19c(SB)/4, $0x34b0bcb5
-
-DATA K256<>+0x1a0(SB)/4, $0x391c0cb3
-DATA K256<>+0x1a4(SB)/4, $0x4ed8aa4a
-DATA K256<>+0x1a8(SB)/4, $0x5b9cca4f
-DATA K256<>+0x1ac(SB)/4, $0x682e6ff3
-DATA K256<>+0x1b0(SB)/4, $0x391c0cb3
-DATA K256<>+0x1b4(SB)/4, $0x4ed8aa4a
-DATA K256<>+0x1b8(SB)/4, $0x5b9cca4f
-DATA K256<>+0x1bc(SB)/4, $0x682e6ff3
-
-DATA K256<>+0x1c0(SB)/4, $0x748f82ee
-DATA K256<>+0x1c4(SB)/4, $0x78a5636f
-DATA K256<>+0x1c8(SB)/4, $0x84c87814
-DATA K256<>+0x1cc(SB)/4, $0x8cc70208
-DATA K256<>+0x1d0(SB)/4, $0x748f82ee
-DATA K256<>+0x1d4(SB)/4, $0x78a5636f
-DATA K256<>+0x1d8(SB)/4, $0x84c87814
-DATA K256<>+0x1dc(SB)/4, $0x8cc70208
-
-DATA K256<>+0x1e0(SB)/4, $0x90befffa
-DATA K256<>+0x1e4(SB)/4, $0xa4506ceb
-DATA K256<>+0x1e8(SB)/4, $0xbef9a3f7
-DATA K256<>+0x1ec(SB)/4, $0xc67178f2
-DATA K256<>+0x1f0(SB)/4, $0x90befffa
-DATA K256<>+0x1f4(SB)/4, $0xa4506ceb
-DATA K256<>+0x1f8(SB)/4, $0xbef9a3f7
-DATA K256<>+0x1fc(SB)/4, $0xc67178f2
-
-GLOBL K256<>(SB), (NOPTR + RODATA), $512
+++ /dev/null
-// Copyright 2013 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 && (386 || amd64 || ppc64le || ppc64)
-
-package notsha256
-
-//go:noescape
-func block(dig *digest, p []byte)
+++ /dev/null
-// Copyright 2016 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 || (!amd64 && !386 && !ppc64le && !ppc64)
-
-package notsha256
-
-func block(dig *digest, p []byte) {
- blockGeneric(dig, p)
-}
+++ /dev/null
-// Copyright 2016 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.
-
-//
-// WARNING: this file is built by the bootstrap compiler, thus
-// it must maintain compatibility with the oldest supported
-// bootstrap toolchain.
-//
-
-//go:build !purego && (ppc64 || ppc64le)
-
-// Based on CRYPTOGAMS code with the following comment:
-// # ====================================================================
-// # Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
-// # project. The module is, however, dual licensed under OpenSSL and
-// # CRYPTOGAMS licenses depending on where you obtain it. For further
-// # details see http://www.openssl.org/~appro/cryptogams/.
-// # ====================================================================
-
-#include "textflag.h"
-
-// SHA256 block routine. See sha256block.go for Go equivalent.
-//
-// The algorithm is detailed in FIPS 180-4:
-//
-// https://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf
-//
-// Wt = Mt; for 0 <= t <= 15
-// Wt = SIGMA1(Wt-2) + SIGMA0(Wt-15) + Wt-16; for 16 <= t <= 63
-//
-// a = H0
-// b = H1
-// c = H2
-// d = H3
-// e = H4
-// f = H5
-// g = H6
-// h = H7
-//
-// for t = 0 to 63 {
-// T1 = h + BIGSIGMA1(e) + Ch(e,f,g) + Kt + Wt
-// T2 = BIGSIGMA0(a) + Maj(a,b,c)
-// h = g
-// g = f
-// f = e
-// e = d + T1
-// d = c
-// c = b
-// b = a
-// a = T1 + T2
-// }
-//
-// H0 = a + H0
-// H1 = b + H1
-// H2 = c + H2
-// H3 = d + H3
-// H4 = e + H4
-// H5 = f + H5
-// H6 = g + H6
-// H7 = h + H7
-
-#define CTX R3
-#define INP R4
-#define END R5
-#define TBL R6 // Pointer into kcon table
-#define LEN R9
-#define TEMP R12
-
-#define TBL_STRT R7 // Pointer to start of kcon table.
-
-#define R_x000 R0
-#define R_x010 R8
-#define R_x020 R10
-#define R_x030 R11
-#define R_x040 R14
-#define R_x050 R15
-#define R_x060 R16
-#define R_x070 R17
-#define R_x080 R18
-#define R_x090 R19
-#define R_x0a0 R20
-#define R_x0b0 R21
-#define R_x0c0 R22
-#define R_x0d0 R23
-#define R_x0e0 R24
-#define R_x0f0 R25
-#define R_x100 R26
-#define R_x110 R27
-
-
-// V0-V7 are A-H
-// V8-V23 are used for the message schedule
-#define KI V24
-#define FUNC V25
-#define S0 V26
-#define S1 V27
-#define s0 V28
-#define s1 V29
-#define LEMASK V31 // Permutation control register for little endian
-
-// 4 copies of each Kt, to fill all 4 words of a vector register
-DATA ·kcon+0x000(SB)/8, $0x428a2f98428a2f98
-DATA ·kcon+0x008(SB)/8, $0x428a2f98428a2f98
-DATA ·kcon+0x010(SB)/8, $0x7137449171374491
-DATA ·kcon+0x018(SB)/8, $0x7137449171374491
-DATA ·kcon+0x020(SB)/8, $0xb5c0fbcfb5c0fbcf
-DATA ·kcon+0x028(SB)/8, $0xb5c0fbcfb5c0fbcf
-DATA ·kcon+0x030(SB)/8, $0xe9b5dba5e9b5dba5
-DATA ·kcon+0x038(SB)/8, $0xe9b5dba5e9b5dba5
-DATA ·kcon+0x040(SB)/8, $0x3956c25b3956c25b
-DATA ·kcon+0x048(SB)/8, $0x3956c25b3956c25b
-DATA ·kcon+0x050(SB)/8, $0x59f111f159f111f1
-DATA ·kcon+0x058(SB)/8, $0x59f111f159f111f1
-DATA ·kcon+0x060(SB)/8, $0x923f82a4923f82a4
-DATA ·kcon+0x068(SB)/8, $0x923f82a4923f82a4
-DATA ·kcon+0x070(SB)/8, $0xab1c5ed5ab1c5ed5
-DATA ·kcon+0x078(SB)/8, $0xab1c5ed5ab1c5ed5
-DATA ·kcon+0x080(SB)/8, $0xd807aa98d807aa98
-DATA ·kcon+0x088(SB)/8, $0xd807aa98d807aa98
-DATA ·kcon+0x090(SB)/8, $0x12835b0112835b01
-DATA ·kcon+0x098(SB)/8, $0x12835b0112835b01
-DATA ·kcon+0x0A0(SB)/8, $0x243185be243185be
-DATA ·kcon+0x0A8(SB)/8, $0x243185be243185be
-DATA ·kcon+0x0B0(SB)/8, $0x550c7dc3550c7dc3
-DATA ·kcon+0x0B8(SB)/8, $0x550c7dc3550c7dc3
-DATA ·kcon+0x0C0(SB)/8, $0x72be5d7472be5d74
-DATA ·kcon+0x0C8(SB)/8, $0x72be5d7472be5d74
-DATA ·kcon+0x0D0(SB)/8, $0x80deb1fe80deb1fe
-DATA ·kcon+0x0D8(SB)/8, $0x80deb1fe80deb1fe
-DATA ·kcon+0x0E0(SB)/8, $0x9bdc06a79bdc06a7
-DATA ·kcon+0x0E8(SB)/8, $0x9bdc06a79bdc06a7
-DATA ·kcon+0x0F0(SB)/8, $0xc19bf174c19bf174
-DATA ·kcon+0x0F8(SB)/8, $0xc19bf174c19bf174
-DATA ·kcon+0x100(SB)/8, $0xe49b69c1e49b69c1
-DATA ·kcon+0x108(SB)/8, $0xe49b69c1e49b69c1
-DATA ·kcon+0x110(SB)/8, $0xefbe4786efbe4786
-DATA ·kcon+0x118(SB)/8, $0xefbe4786efbe4786
-DATA ·kcon+0x120(SB)/8, $0x0fc19dc60fc19dc6
-DATA ·kcon+0x128(SB)/8, $0x0fc19dc60fc19dc6
-DATA ·kcon+0x130(SB)/8, $0x240ca1cc240ca1cc
-DATA ·kcon+0x138(SB)/8, $0x240ca1cc240ca1cc
-DATA ·kcon+0x140(SB)/8, $0x2de92c6f2de92c6f
-DATA ·kcon+0x148(SB)/8, $0x2de92c6f2de92c6f
-DATA ·kcon+0x150(SB)/8, $0x4a7484aa4a7484aa
-DATA ·kcon+0x158(SB)/8, $0x4a7484aa4a7484aa
-DATA ·kcon+0x160(SB)/8, $0x5cb0a9dc5cb0a9dc
-DATA ·kcon+0x168(SB)/8, $0x5cb0a9dc5cb0a9dc
-DATA ·kcon+0x170(SB)/8, $0x76f988da76f988da
-DATA ·kcon+0x178(SB)/8, $0x76f988da76f988da
-DATA ·kcon+0x180(SB)/8, $0x983e5152983e5152
-DATA ·kcon+0x188(SB)/8, $0x983e5152983e5152
-DATA ·kcon+0x190(SB)/8, $0xa831c66da831c66d
-DATA ·kcon+0x198(SB)/8, $0xa831c66da831c66d
-DATA ·kcon+0x1A0(SB)/8, $0xb00327c8b00327c8
-DATA ·kcon+0x1A8(SB)/8, $0xb00327c8b00327c8
-DATA ·kcon+0x1B0(SB)/8, $0xbf597fc7bf597fc7
-DATA ·kcon+0x1B8(SB)/8, $0xbf597fc7bf597fc7
-DATA ·kcon+0x1C0(SB)/8, $0xc6e00bf3c6e00bf3
-DATA ·kcon+0x1C8(SB)/8, $0xc6e00bf3c6e00bf3
-DATA ·kcon+0x1D0(SB)/8, $0xd5a79147d5a79147
-DATA ·kcon+0x1D8(SB)/8, $0xd5a79147d5a79147
-DATA ·kcon+0x1E0(SB)/8, $0x06ca635106ca6351
-DATA ·kcon+0x1E8(SB)/8, $0x06ca635106ca6351
-DATA ·kcon+0x1F0(SB)/8, $0x1429296714292967
-DATA ·kcon+0x1F8(SB)/8, $0x1429296714292967
-DATA ·kcon+0x200(SB)/8, $0x27b70a8527b70a85
-DATA ·kcon+0x208(SB)/8, $0x27b70a8527b70a85
-DATA ·kcon+0x210(SB)/8, $0x2e1b21382e1b2138
-DATA ·kcon+0x218(SB)/8, $0x2e1b21382e1b2138
-DATA ·kcon+0x220(SB)/8, $0x4d2c6dfc4d2c6dfc
-DATA ·kcon+0x228(SB)/8, $0x4d2c6dfc4d2c6dfc
-DATA ·kcon+0x230(SB)/8, $0x53380d1353380d13
-DATA ·kcon+0x238(SB)/8, $0x53380d1353380d13
-DATA ·kcon+0x240(SB)/8, $0x650a7354650a7354
-DATA ·kcon+0x248(SB)/8, $0x650a7354650a7354
-DATA ·kcon+0x250(SB)/8, $0x766a0abb766a0abb
-DATA ·kcon+0x258(SB)/8, $0x766a0abb766a0abb
-DATA ·kcon+0x260(SB)/8, $0x81c2c92e81c2c92e
-DATA ·kcon+0x268(SB)/8, $0x81c2c92e81c2c92e
-DATA ·kcon+0x270(SB)/8, $0x92722c8592722c85
-DATA ·kcon+0x278(SB)/8, $0x92722c8592722c85
-DATA ·kcon+0x280(SB)/8, $0xa2bfe8a1a2bfe8a1
-DATA ·kcon+0x288(SB)/8, $0xa2bfe8a1a2bfe8a1
-DATA ·kcon+0x290(SB)/8, $0xa81a664ba81a664b
-DATA ·kcon+0x298(SB)/8, $0xa81a664ba81a664b
-DATA ·kcon+0x2A0(SB)/8, $0xc24b8b70c24b8b70
-DATA ·kcon+0x2A8(SB)/8, $0xc24b8b70c24b8b70
-DATA ·kcon+0x2B0(SB)/8, $0xc76c51a3c76c51a3
-DATA ·kcon+0x2B8(SB)/8, $0xc76c51a3c76c51a3
-DATA ·kcon+0x2C0(SB)/8, $0xd192e819d192e819
-DATA ·kcon+0x2C8(SB)/8, $0xd192e819d192e819
-DATA ·kcon+0x2D0(SB)/8, $0xd6990624d6990624
-DATA ·kcon+0x2D8(SB)/8, $0xd6990624d6990624
-DATA ·kcon+0x2E0(SB)/8, $0xf40e3585f40e3585
-DATA ·kcon+0x2E8(SB)/8, $0xf40e3585f40e3585
-DATA ·kcon+0x2F0(SB)/8, $0x106aa070106aa070
-DATA ·kcon+0x2F8(SB)/8, $0x106aa070106aa070
-DATA ·kcon+0x300(SB)/8, $0x19a4c11619a4c116
-DATA ·kcon+0x308(SB)/8, $0x19a4c11619a4c116
-DATA ·kcon+0x310(SB)/8, $0x1e376c081e376c08
-DATA ·kcon+0x318(SB)/8, $0x1e376c081e376c08
-DATA ·kcon+0x320(SB)/8, $0x2748774c2748774c
-DATA ·kcon+0x328(SB)/8, $0x2748774c2748774c
-DATA ·kcon+0x330(SB)/8, $0x34b0bcb534b0bcb5
-DATA ·kcon+0x338(SB)/8, $0x34b0bcb534b0bcb5
-DATA ·kcon+0x340(SB)/8, $0x391c0cb3391c0cb3
-DATA ·kcon+0x348(SB)/8, $0x391c0cb3391c0cb3
-DATA ·kcon+0x350(SB)/8, $0x4ed8aa4a4ed8aa4a
-DATA ·kcon+0x358(SB)/8, $0x4ed8aa4a4ed8aa4a
-DATA ·kcon+0x360(SB)/8, $0x5b9cca4f5b9cca4f
-DATA ·kcon+0x368(SB)/8, $0x5b9cca4f5b9cca4f
-DATA ·kcon+0x370(SB)/8, $0x682e6ff3682e6ff3
-DATA ·kcon+0x378(SB)/8, $0x682e6ff3682e6ff3
-DATA ·kcon+0x380(SB)/8, $0x748f82ee748f82ee
-DATA ·kcon+0x388(SB)/8, $0x748f82ee748f82ee
-DATA ·kcon+0x390(SB)/8, $0x78a5636f78a5636f
-DATA ·kcon+0x398(SB)/8, $0x78a5636f78a5636f
-DATA ·kcon+0x3A0(SB)/8, $0x84c8781484c87814
-DATA ·kcon+0x3A8(SB)/8, $0x84c8781484c87814
-DATA ·kcon+0x3B0(SB)/8, $0x8cc702088cc70208
-DATA ·kcon+0x3B8(SB)/8, $0x8cc702088cc70208
-DATA ·kcon+0x3C0(SB)/8, $0x90befffa90befffa
-DATA ·kcon+0x3C8(SB)/8, $0x90befffa90befffa
-DATA ·kcon+0x3D0(SB)/8, $0xa4506ceba4506ceb
-DATA ·kcon+0x3D8(SB)/8, $0xa4506ceba4506ceb
-DATA ·kcon+0x3E0(SB)/8, $0xbef9a3f7bef9a3f7
-DATA ·kcon+0x3E8(SB)/8, $0xbef9a3f7bef9a3f7
-DATA ·kcon+0x3F0(SB)/8, $0xc67178f2c67178f2
-DATA ·kcon+0x3F8(SB)/8, $0xc67178f2c67178f2
-DATA ·kcon+0x400(SB)/8, $0x0000000000000000
-DATA ·kcon+0x408(SB)/8, $0x0000000000000000
-
-#ifdef GOARCH_ppc64le
-DATA ·kcon+0x410(SB)/8, $0x1011121310111213 // permutation control vectors
-DATA ·kcon+0x418(SB)/8, $0x1011121300010203
-DATA ·kcon+0x420(SB)/8, $0x1011121310111213
-DATA ·kcon+0x428(SB)/8, $0x0405060700010203
-DATA ·kcon+0x430(SB)/8, $0x1011121308090a0b
-DATA ·kcon+0x438(SB)/8, $0x0405060700010203
-#else
-DATA ·kcon+0x410(SB)/8, $0x1011121300010203
-DATA ·kcon+0x418(SB)/8, $0x1011121310111213 // permutation control vectors
-DATA ·kcon+0x420(SB)/8, $0x0405060700010203
-DATA ·kcon+0x428(SB)/8, $0x1011121310111213
-DATA ·kcon+0x430(SB)/8, $0x0001020304050607
-DATA ·kcon+0x438(SB)/8, $0x08090a0b10111213
-#endif
-
-GLOBL ·kcon(SB), RODATA, $1088
-
-#define SHA256ROUND0(a, b, c, d, e, f, g, h, xi, idx) \
- VSEL g, f, e, FUNC; \
- VSHASIGMAW $15, e, $1, S1; \
- VADDUWM xi, h, h; \
- VSHASIGMAW $0, a, $1, S0; \
- VADDUWM FUNC, h, h; \
- VXOR b, a, FUNC; \
- VADDUWM S1, h, h; \
- VSEL b, c, FUNC, FUNC; \
- VADDUWM KI, g, g; \
- VADDUWM h, d, d; \
- VADDUWM FUNC, S0, S0; \
- LVX (TBL)(idx), KI; \
- VADDUWM S0, h, h
-
-#define SHA256ROUND1(a, b, c, d, e, f, g, h, xi, xj, xj_1, xj_9, xj_14, idx) \
- VSHASIGMAW $0, xj_1, $0, s0; \
- VSEL g, f, e, FUNC; \
- VSHASIGMAW $15, e, $1, S1; \
- VADDUWM xi, h, h; \
- VSHASIGMAW $0, a, $1, S0; \
- VSHASIGMAW $15, xj_14, $0, s1; \
- VADDUWM FUNC, h, h; \
- VXOR b, a, FUNC; \
- VADDUWM xj_9, xj, xj; \
- VADDUWM S1, h, h; \
- VSEL b, c, FUNC, FUNC; \
- VADDUWM KI, g, g; \
- VADDUWM h, d, d; \
- VADDUWM FUNC, S0, S0; \
- VADDUWM s0, xj, xj; \
- LVX (TBL)(idx), KI; \
- VADDUWM S0, h, h; \
- VADDUWM s1, xj, xj
-
-#ifdef GOARCH_ppc64le
-#define VPERMLE(va,vb,vc,vt) VPERM va, vb, vc, vt
-#else
-#define VPERMLE(va,vb,vc,vt)
-#endif
-
-// func block(dig *digest, p []byte)
-TEXT ·block(SB),0,$0-32
- MOVD dig+0(FP), CTX
- MOVD p_base+8(FP), INP
- MOVD p_len+16(FP), LEN
-
- SRD $6, LEN
- SLD $6, LEN
- ADD INP, LEN, END
-
- CMP INP, END
- BEQ end
-
- MOVD $·kcon(SB), TBL_STRT
- MOVD $0x10, R_x010
-
-#ifdef GOARCH_ppc64le
- MOVWZ $8, TEMP
- LVSL (TEMP)(R0), LEMASK
- VSPLTISB $0x0F, KI
- VXOR KI, LEMASK, LEMASK
-#endif
-
- LXVW4X (CTX)(R_x000), V0
- LXVW4X (CTX)(R_x010), V4
-
- // unpack the input values into vector registers
- VSLDOI $4, V0, V0, V1
- VSLDOI $8, V0, V0, V2
- VSLDOI $12, V0, V0, V3
- VSLDOI $4, V4, V4, V5
- VSLDOI $8, V4, V4, V6
- VSLDOI $12, V4, V4, V7
-
- MOVD $0x020, R_x020
- MOVD $0x030, R_x030
- MOVD $0x040, R_x040
- MOVD $0x050, R_x050
- MOVD $0x060, R_x060
- MOVD $0x070, R_x070
- MOVD $0x080, R_x080
- MOVD $0x090, R_x090
- MOVD $0x0a0, R_x0a0
- MOVD $0x0b0, R_x0b0
- MOVD $0x0c0, R_x0c0
- MOVD $0x0d0, R_x0d0
- MOVD $0x0e0, R_x0e0
- MOVD $0x0f0, R_x0f0
- MOVD $0x100, R_x100
- MOVD $0x110, R_x110
-
-loop:
- MOVD TBL_STRT, TBL
- LVX (TBL)(R_x000), KI
-
- LXVD2X (INP)(R_x000), V8 // load v8 in advance
-
- // Offload to VSR24-31 (aka FPR24-31)
- XXLOR V0, V0, VS24
- XXLOR V1, V1, VS25
- XXLOR V2, V2, VS26
- XXLOR V3, V3, VS27
- XXLOR V4, V4, VS28
- XXLOR V5, V5, VS29
- XXLOR V6, V6, VS30
- XXLOR V7, V7, VS31
-
- VADDUWM KI, V7, V7 // h+K[i]
- LVX (TBL)(R_x010), KI
-
- VPERMLE(V8, V8, LEMASK, V8)
- SHA256ROUND0(V0, V1, V2, V3, V4, V5, V6, V7, V8, R_x020)
- VSLDOI $4, V8, V8, V9
- SHA256ROUND0(V7, V0, V1, V2, V3, V4, V5, V6, V9, R_x030)
- VSLDOI $4, V9, V9, V10
- SHA256ROUND0(V6, V7, V0, V1, V2, V3, V4, V5, V10, R_x040)
- LXVD2X (INP)(R_x010), V12 // load v12 in advance
- VSLDOI $4, V10, V10, V11
- SHA256ROUND0(V5, V6, V7, V0, V1, V2, V3, V4, V11, R_x050)
- VPERMLE(V12, V12, LEMASK, V12)
- SHA256ROUND0(V4, V5, V6, V7, V0, V1, V2, V3, V12, R_x060)
- VSLDOI $4, V12, V12, V13
- SHA256ROUND0(V3, V4, V5, V6, V7, V0, V1, V2, V13, R_x070)
- VSLDOI $4, V13, V13, V14
- SHA256ROUND0(V2, V3, V4, V5, V6, V7, V0, V1, V14, R_x080)
- LXVD2X (INP)(R_x020), V16 // load v16 in advance
- VSLDOI $4, V14, V14, V15
- SHA256ROUND0(V1, V2, V3, V4, V5, V6, V7, V0, V15, R_x090)
- VPERMLE(V16, V16, LEMASK, V16)
- SHA256ROUND0(V0, V1, V2, V3, V4, V5, V6, V7, V16, R_x0a0)
- VSLDOI $4, V16, V16, V17
- SHA256ROUND0(V7, V0, V1, V2, V3, V4, V5, V6, V17, R_x0b0)
- VSLDOI $4, V17, V17, V18
- SHA256ROUND0(V6, V7, V0, V1, V2, V3, V4, V5, V18, R_x0c0)
- VSLDOI $4, V18, V18, V19
- LXVD2X (INP)(R_x030), V20 // load v20 in advance
- SHA256ROUND0(V5, V6, V7, V0, V1, V2, V3, V4, V19, R_x0d0)
- VPERMLE(V20, V20, LEMASK, V20)
- SHA256ROUND0(V4, V5, V6, V7, V0, V1, V2, V3, V20, R_x0e0)
- VSLDOI $4, V20, V20, V21
- SHA256ROUND0(V3, V4, V5, V6, V7, V0, V1, V2, V21, R_x0f0)
- VSLDOI $4, V21, V21, V22
- SHA256ROUND0(V2, V3, V4, V5, V6, V7, V0, V1, V22, R_x100)
- VSLDOI $4, V22, V22, V23
- SHA256ROUND1(V1, V2, V3, V4, V5, V6, V7, V0, V23, V8, V9, V17, V22, R_x110)
-
- MOVD $3, TEMP
- MOVD TEMP, CTR
- ADD $0x120, TBL
- ADD $0x40, INP
-
-L16_xx:
- SHA256ROUND1(V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V18, V23, R_x000)
- SHA256ROUND1(V7, V0, V1, V2, V3, V4, V5, V6, V9, V10, V11, V19, V8, R_x010)
- SHA256ROUND1(V6, V7, V0, V1, V2, V3, V4, V5, V10, V11, V12, V20, V9, R_x020)
- SHA256ROUND1(V5, V6, V7, V0, V1, V2, V3, V4, V11, V12, V13, V21, V10, R_x030)
- SHA256ROUND1(V4, V5, V6, V7, V0, V1, V2, V3, V12, V13, V14, V22, V11, R_x040)
- SHA256ROUND1(V3, V4, V5, V6, V7, V0, V1, V2, V13, V14, V15, V23, V12, R_x050)
- SHA256ROUND1(V2, V3, V4, V5, V6, V7, V0, V1, V14, V15, V16, V8, V13, R_x060)
- SHA256ROUND1(V1, V2, V3, V4, V5, V6, V7, V0, V15, V16, V17, V9, V14, R_x070)
- SHA256ROUND1(V0, V1, V2, V3, V4, V5, V6, V7, V16, V17, V18, V10, V15, R_x080)
- SHA256ROUND1(V7, V0, V1, V2, V3, V4, V5, V6, V17, V18, V19, V11, V16, R_x090)
- SHA256ROUND1(V6, V7, V0, V1, V2, V3, V4, V5, V18, V19, V20, V12, V17, R_x0a0)
- SHA256ROUND1(V5, V6, V7, V0, V1, V2, V3, V4, V19, V20, V21, V13, V18, R_x0b0)
- SHA256ROUND1(V4, V5, V6, V7, V0, V1, V2, V3, V20, V21, V22, V14, V19, R_x0c0)
- SHA256ROUND1(V3, V4, V5, V6, V7, V0, V1, V2, V21, V22, V23, V15, V20, R_x0d0)
- SHA256ROUND1(V2, V3, V4, V5, V6, V7, V0, V1, V22, V23, V8, V16, V21, R_x0e0)
- SHA256ROUND1(V1, V2, V3, V4, V5, V6, V7, V0, V23, V8, V9, V17, V22, R_x0f0)
- ADD $0x100, TBL
-
- BDNZ L16_xx
-
- XXLOR VS24, VS24, V10
-
- XXLOR VS25, VS25, V11
- VADDUWM V10, V0, V0
- XXLOR VS26, VS26, V12
- VADDUWM V11, V1, V1
- XXLOR VS27, VS27, V13
- VADDUWM V12, V2, V2
- XXLOR VS28, VS28, V14
- VADDUWM V13, V3, V3
- XXLOR VS29, VS29, V15
- VADDUWM V14, V4, V4
- XXLOR VS30, VS30, V16
- VADDUWM V15, V5, V5
- XXLOR VS31, VS31, V17
- VADDUWM V16, V6, V6
- VADDUWM V17, V7, V7
-
- CMPU INP, END
- BLT loop
-
- LVX (TBL)(R_x000), V8
- VPERM V0, V1, KI, V0
- LVX (TBL)(R_x010), V9
- VPERM V4, V5, KI, V4
- VPERM V0, V2, V8, V0
- VPERM V4, V6, V8, V4
- VPERM V0, V3, V9, V0
- VPERM V4, V7, V9, V4
- STXVD2X V0, (CTX+R_x000)
- STXVD2X V4, (CTX+R_x010)
-
-end:
- RET
-