vendor, crypto, swarm: switch over to upstream sha3 package
This commit is contained in:
parent
49975264a8
commit
33d233d3e1
@ -33,11 +33,11 @@ import (
|
|||||||
|
|
||||||
"github.com/ethereum/go-ethereum/crypto"
|
"github.com/ethereum/go-ethereum/crypto"
|
||||||
"github.com/ethereum/go-ethereum/crypto/ecies"
|
"github.com/ethereum/go-ethereum/crypto/ecies"
|
||||||
"github.com/ethereum/go-ethereum/crypto/sha3"
|
|
||||||
"github.com/ethereum/go-ethereum/log"
|
"github.com/ethereum/go-ethereum/log"
|
||||||
"github.com/ethereum/go-ethereum/swarm/api"
|
"github.com/ethereum/go-ethereum/swarm/api"
|
||||||
swarmapi "github.com/ethereum/go-ethereum/swarm/api/client"
|
swarmapi "github.com/ethereum/go-ethereum/swarm/api/client"
|
||||||
"github.com/ethereum/go-ethereum/swarm/testutil"
|
"github.com/ethereum/go-ethereum/swarm/testutil"
|
||||||
|
"golang.org/x/crypto/sha3"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -598,7 +598,7 @@ func TestKeypairSanity(t *testing.T) {
|
|||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
hasher := sha3.NewKeccak256()
|
hasher := sha3.NewLegacyKeccak256()
|
||||||
hasher.Write(salt)
|
hasher.Write(salt)
|
||||||
shared, err := hex.DecodeString(sharedSecret)
|
shared, err := hex.DecodeString(sharedSecret)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -27,7 +27,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/common/hexutil"
|
"github.com/ethereum/go-ethereum/common/hexutil"
|
||||||
"github.com/ethereum/go-ethereum/crypto/sha3"
|
"golang.org/x/crypto/sha3"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Lengths of hashes and addresses in bytes.
|
// Lengths of hashes and addresses in bytes.
|
||||||
@ -196,7 +196,7 @@ func (a Address) Hash() Hash { return BytesToHash(a[:]) }
|
|||||||
// Hex returns an EIP55-compliant hex string representation of the address.
|
// Hex returns an EIP55-compliant hex string representation of the address.
|
||||||
func (a Address) Hex() string {
|
func (a Address) Hex() string {
|
||||||
unchecksummed := hex.EncodeToString(a[:])
|
unchecksummed := hex.EncodeToString(a[:])
|
||||||
sha := sha3.NewKeccak256()
|
sha := sha3.NewLegacyKeccak256()
|
||||||
sha.Write([]byte(unchecksummed))
|
sha.Write([]byte(unchecksummed))
|
||||||
hash := sha.Sum(nil)
|
hash := sha.Sum(nil)
|
||||||
|
|
||||||
|
@ -33,13 +33,13 @@ import (
|
|||||||
"github.com/ethereum/go-ethereum/core/state"
|
"github.com/ethereum/go-ethereum/core/state"
|
||||||
"github.com/ethereum/go-ethereum/core/types"
|
"github.com/ethereum/go-ethereum/core/types"
|
||||||
"github.com/ethereum/go-ethereum/crypto"
|
"github.com/ethereum/go-ethereum/crypto"
|
||||||
"github.com/ethereum/go-ethereum/crypto/sha3"
|
|
||||||
"github.com/ethereum/go-ethereum/ethdb"
|
"github.com/ethereum/go-ethereum/ethdb"
|
||||||
"github.com/ethereum/go-ethereum/log"
|
"github.com/ethereum/go-ethereum/log"
|
||||||
"github.com/ethereum/go-ethereum/params"
|
"github.com/ethereum/go-ethereum/params"
|
||||||
"github.com/ethereum/go-ethereum/rlp"
|
"github.com/ethereum/go-ethereum/rlp"
|
||||||
"github.com/ethereum/go-ethereum/rpc"
|
"github.com/ethereum/go-ethereum/rpc"
|
||||||
lru "github.com/hashicorp/golang-lru"
|
lru "github.com/hashicorp/golang-lru"
|
||||||
|
"golang.org/x/crypto/sha3"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -148,7 +148,7 @@ type SignerFn func(accounts.Account, []byte) ([]byte, error)
|
|||||||
// panics. This is done to avoid accidentally using both forms (signature present
|
// panics. This is done to avoid accidentally using both forms (signature present
|
||||||
// or not), which could be abused to produce different hashes for the same header.
|
// or not), which could be abused to produce different hashes for the same header.
|
||||||
func sigHash(header *types.Header) (hash common.Hash) {
|
func sigHash(header *types.Header) (hash common.Hash) {
|
||||||
hasher := sha3.NewKeccak256()
|
hasher := sha3.NewLegacyKeccak256()
|
||||||
|
|
||||||
rlp.Encode(hasher, []interface{}{
|
rlp.Encode(hasher, []interface{}{
|
||||||
header.ParentHash,
|
header.ParentHash,
|
||||||
|
@ -30,8 +30,8 @@ import (
|
|||||||
"github.com/ethereum/go-ethereum/common"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
"github.com/ethereum/go-ethereum/common/bitutil"
|
"github.com/ethereum/go-ethereum/common/bitutil"
|
||||||
"github.com/ethereum/go-ethereum/crypto"
|
"github.com/ethereum/go-ethereum/crypto"
|
||||||
"github.com/ethereum/go-ethereum/crypto/sha3"
|
|
||||||
"github.com/ethereum/go-ethereum/log"
|
"github.com/ethereum/go-ethereum/log"
|
||||||
|
"golang.org/x/crypto/sha3"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -123,7 +123,7 @@ func seedHash(block uint64) []byte {
|
|||||||
if block < epochLength {
|
if block < epochLength {
|
||||||
return seed
|
return seed
|
||||||
}
|
}
|
||||||
keccak256 := makeHasher(sha3.NewKeccak256())
|
keccak256 := makeHasher(sha3.NewLegacyKeccak256())
|
||||||
for i := 0; i < int(block/epochLength); i++ {
|
for i := 0; i < int(block/epochLength); i++ {
|
||||||
keccak256(seed, seed)
|
keccak256(seed, seed)
|
||||||
}
|
}
|
||||||
@ -177,7 +177,7 @@ func generateCache(dest []uint32, epoch uint64, seed []byte) {
|
|||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
// Create a hasher to reuse between invocations
|
// Create a hasher to reuse between invocations
|
||||||
keccak512 := makeHasher(sha3.NewKeccak512())
|
keccak512 := makeHasher(sha3.NewLegacyKeccak512())
|
||||||
|
|
||||||
// Sequentially produce the initial dataset
|
// Sequentially produce the initial dataset
|
||||||
keccak512(cache, seed)
|
keccak512(cache, seed)
|
||||||
@ -301,7 +301,7 @@ func generateDataset(dest []uint32, epoch uint64, cache []uint32) {
|
|||||||
defer pend.Done()
|
defer pend.Done()
|
||||||
|
|
||||||
// Create a hasher to reuse between invocations
|
// Create a hasher to reuse between invocations
|
||||||
keccak512 := makeHasher(sha3.NewKeccak512())
|
keccak512 := makeHasher(sha3.NewLegacyKeccak512())
|
||||||
|
|
||||||
// Calculate the data segment this thread should generate
|
// Calculate the data segment this thread should generate
|
||||||
batch := uint32((size + hashBytes*uint64(threads) - 1) / (hashBytes * uint64(threads)))
|
batch := uint32((size + hashBytes*uint64(threads) - 1) / (hashBytes * uint64(threads)))
|
||||||
@ -375,7 +375,7 @@ func hashimoto(hash []byte, nonce uint64, size uint64, lookup func(index uint32)
|
|||||||
// in-memory cache) in order to produce our final value for a particular header
|
// in-memory cache) in order to produce our final value for a particular header
|
||||||
// hash and nonce.
|
// hash and nonce.
|
||||||
func hashimotoLight(size uint64, cache []uint32, hash []byte, nonce uint64) ([]byte, []byte) {
|
func hashimotoLight(size uint64, cache []uint32, hash []byte, nonce uint64) ([]byte, []byte) {
|
||||||
keccak512 := makeHasher(sha3.NewKeccak512())
|
keccak512 := makeHasher(sha3.NewLegacyKeccak512())
|
||||||
|
|
||||||
lookup := func(index uint32) []uint32 {
|
lookup := func(index uint32) []uint32 {
|
||||||
rawData := generateDatasetItem(cache, index, keccak512)
|
rawData := generateDatasetItem(cache, index, keccak512)
|
||||||
|
@ -31,9 +31,9 @@ import (
|
|||||||
"github.com/ethereum/go-ethereum/consensus/misc"
|
"github.com/ethereum/go-ethereum/consensus/misc"
|
||||||
"github.com/ethereum/go-ethereum/core/state"
|
"github.com/ethereum/go-ethereum/core/state"
|
||||||
"github.com/ethereum/go-ethereum/core/types"
|
"github.com/ethereum/go-ethereum/core/types"
|
||||||
"github.com/ethereum/go-ethereum/crypto/sha3"
|
|
||||||
"github.com/ethereum/go-ethereum/params"
|
"github.com/ethereum/go-ethereum/params"
|
||||||
"github.com/ethereum/go-ethereum/rlp"
|
"github.com/ethereum/go-ethereum/rlp"
|
||||||
|
"golang.org/x/crypto/sha3"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Ethash proof-of-work protocol constants.
|
// Ethash proof-of-work protocol constants.
|
||||||
@ -575,7 +575,7 @@ func (ethash *Ethash) Finalize(chain consensus.ChainReader, header *types.Header
|
|||||||
|
|
||||||
// SealHash returns the hash of a block prior to it being sealed.
|
// SealHash returns the hash of a block prior to it being sealed.
|
||||||
func (ethash *Ethash) SealHash(header *types.Header) (hash common.Hash) {
|
func (ethash *Ethash) SealHash(header *types.Header) (hash common.Hash) {
|
||||||
hasher := sha3.NewKeccak256()
|
hasher := sha3.NewLegacyKeccak256()
|
||||||
|
|
||||||
rlp.Encode(hasher, []interface{}{
|
rlp.Encode(hasher, []interface{}{
|
||||||
header.ParentHash,
|
header.ParentHash,
|
||||||
|
@ -23,9 +23,9 @@ import (
|
|||||||
|
|
||||||
"github.com/ethereum/go-ethereum/common"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
"github.com/ethereum/go-ethereum/core/types"
|
"github.com/ethereum/go-ethereum/core/types"
|
||||||
"github.com/ethereum/go-ethereum/crypto/sha3"
|
|
||||||
"github.com/ethereum/go-ethereum/ethdb"
|
"github.com/ethereum/go-ethereum/ethdb"
|
||||||
"github.com/ethereum/go-ethereum/rlp"
|
"github.com/ethereum/go-ethereum/rlp"
|
||||||
|
"golang.org/x/crypto/sha3"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Tests block header storage and retrieval operations.
|
// Tests block header storage and retrieval operations.
|
||||||
@ -47,7 +47,7 @@ func TestHeaderStorage(t *testing.T) {
|
|||||||
if entry := ReadHeaderRLP(db, header.Hash(), header.Number.Uint64()); entry == nil {
|
if entry := ReadHeaderRLP(db, header.Hash(), header.Number.Uint64()); entry == nil {
|
||||||
t.Fatalf("Stored header RLP not found")
|
t.Fatalf("Stored header RLP not found")
|
||||||
} else {
|
} else {
|
||||||
hasher := sha3.NewKeccak256()
|
hasher := sha3.NewLegacyKeccak256()
|
||||||
hasher.Write(entry)
|
hasher.Write(entry)
|
||||||
|
|
||||||
if hash := common.BytesToHash(hasher.Sum(nil)); hash != header.Hash() {
|
if hash := common.BytesToHash(hasher.Sum(nil)); hash != header.Hash() {
|
||||||
@ -68,7 +68,7 @@ func TestBodyStorage(t *testing.T) {
|
|||||||
// Create a test body to move around the database and make sure it's really new
|
// Create a test body to move around the database and make sure it's really new
|
||||||
body := &types.Body{Uncles: []*types.Header{{Extra: []byte("test header")}}}
|
body := &types.Body{Uncles: []*types.Header{{Extra: []byte("test header")}}}
|
||||||
|
|
||||||
hasher := sha3.NewKeccak256()
|
hasher := sha3.NewLegacyKeccak256()
|
||||||
rlp.Encode(hasher, body)
|
rlp.Encode(hasher, body)
|
||||||
hash := common.BytesToHash(hasher.Sum(nil))
|
hash := common.BytesToHash(hasher.Sum(nil))
|
||||||
|
|
||||||
@ -85,7 +85,7 @@ func TestBodyStorage(t *testing.T) {
|
|||||||
if entry := ReadBodyRLP(db, hash, 0); entry == nil {
|
if entry := ReadBodyRLP(db, hash, 0); entry == nil {
|
||||||
t.Fatalf("Stored body RLP not found")
|
t.Fatalf("Stored body RLP not found")
|
||||||
} else {
|
} else {
|
||||||
hasher := sha3.NewKeccak256()
|
hasher := sha3.NewLegacyKeccak256()
|
||||||
hasher.Write(entry)
|
hasher.Write(entry)
|
||||||
|
|
||||||
if calc := common.BytesToHash(hasher.Sum(nil)); calc != hash {
|
if calc := common.BytesToHash(hasher.Sum(nil)); calc != hash {
|
||||||
|
@ -28,8 +28,8 @@ import (
|
|||||||
|
|
||||||
"github.com/ethereum/go-ethereum/common"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
"github.com/ethereum/go-ethereum/common/hexutil"
|
"github.com/ethereum/go-ethereum/common/hexutil"
|
||||||
"github.com/ethereum/go-ethereum/crypto/sha3"
|
|
||||||
"github.com/ethereum/go-ethereum/rlp"
|
"github.com/ethereum/go-ethereum/rlp"
|
||||||
|
"golang.org/x/crypto/sha3"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -109,7 +109,7 @@ func (h *Header) Size() common.StorageSize {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func rlpHash(x interface{}) (h common.Hash) {
|
func rlpHash(x interface{}) (h common.Hash) {
|
||||||
hw := sha3.NewKeccak256()
|
hw := sha3.NewLegacyKeccak256()
|
||||||
rlp.Encode(hw, x)
|
rlp.Encode(hw, x)
|
||||||
hw.Sum(h[:0])
|
hw.Sum(h[:0])
|
||||||
return h
|
return h
|
||||||
|
@ -24,8 +24,8 @@ import (
|
|||||||
"github.com/ethereum/go-ethereum/common"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
"github.com/ethereum/go-ethereum/common/math"
|
"github.com/ethereum/go-ethereum/common/math"
|
||||||
"github.com/ethereum/go-ethereum/core/types"
|
"github.com/ethereum/go-ethereum/core/types"
|
||||||
"github.com/ethereum/go-ethereum/crypto/sha3"
|
|
||||||
"github.com/ethereum/go-ethereum/params"
|
"github.com/ethereum/go-ethereum/params"
|
||||||
|
"golang.org/x/crypto/sha3"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -387,7 +387,7 @@ func opSha3(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory
|
|||||||
data := memory.Get(offset.Int64(), size.Int64())
|
data := memory.Get(offset.Int64(), size.Int64())
|
||||||
|
|
||||||
if interpreter.hasher == nil {
|
if interpreter.hasher == nil {
|
||||||
interpreter.hasher = sha3.NewKeccak256().(keccakState)
|
interpreter.hasher = sha3.NewLegacyKeccak256().(keccakState)
|
||||||
} else {
|
} else {
|
||||||
interpreter.hasher.Reset()
|
interpreter.hasher.Reset()
|
||||||
}
|
}
|
||||||
|
@ -30,8 +30,8 @@ import (
|
|||||||
|
|
||||||
"github.com/ethereum/go-ethereum/common"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
"github.com/ethereum/go-ethereum/common/math"
|
"github.com/ethereum/go-ethereum/common/math"
|
||||||
"github.com/ethereum/go-ethereum/crypto/sha3"
|
|
||||||
"github.com/ethereum/go-ethereum/rlp"
|
"github.com/ethereum/go-ethereum/rlp"
|
||||||
|
"golang.org/x/crypto/sha3"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -43,7 +43,7 @@ var errInvalidPubkey = errors.New("invalid secp256k1 public key")
|
|||||||
|
|
||||||
// Keccak256 calculates and returns the Keccak256 hash of the input data.
|
// Keccak256 calculates and returns the Keccak256 hash of the input data.
|
||||||
func Keccak256(data ...[]byte) []byte {
|
func Keccak256(data ...[]byte) []byte {
|
||||||
d := sha3.NewKeccak256()
|
d := sha3.NewLegacyKeccak256()
|
||||||
for _, b := range data {
|
for _, b := range data {
|
||||||
d.Write(b)
|
d.Write(b)
|
||||||
}
|
}
|
||||||
@ -53,7 +53,7 @@ func Keccak256(data ...[]byte) []byte {
|
|||||||
// Keccak256Hash calculates and returns the Keccak256 hash of the input data,
|
// Keccak256Hash calculates and returns the Keccak256 hash of the input data,
|
||||||
// converting it to an internal Hash data structure.
|
// converting it to an internal Hash data structure.
|
||||||
func Keccak256Hash(data ...[]byte) (h common.Hash) {
|
func Keccak256Hash(data ...[]byte) (h common.Hash) {
|
||||||
d := sha3.NewKeccak256()
|
d := sha3.NewLegacyKeccak256()
|
||||||
for _, b := range data {
|
for _, b := range data {
|
||||||
d.Write(b)
|
d.Write(b)
|
||||||
}
|
}
|
||||||
@ -63,7 +63,7 @@ func Keccak256Hash(data ...[]byte) (h common.Hash) {
|
|||||||
|
|
||||||
// Keccak512 calculates and returns the Keccak512 hash of the input data.
|
// Keccak512 calculates and returns the Keccak512 hash of the input data.
|
||||||
func Keccak512(data ...[]byte) []byte {
|
func Keccak512(data ...[]byte) []byte {
|
||||||
d := sha3.NewKeccak512()
|
d := sha3.NewLegacyKeccak512()
|
||||||
for _, b := range data {
|
for _, b := range data {
|
||||||
d.Write(b)
|
d.Write(b)
|
||||||
}
|
}
|
||||||
|
@ -1,27 +0,0 @@
|
|||||||
Copyright (c) 2009 The Go Authors. All rights reserved.
|
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
|
||||||
modification, are permitted provided that the following conditions are
|
|
||||||
met:
|
|
||||||
|
|
||||||
* Redistributions of source code must retain the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer.
|
|
||||||
* Redistributions in binary form must reproduce the above
|
|
||||||
copyright notice, this list of conditions and the following disclaimer
|
|
||||||
in the documentation and/or other materials provided with the
|
|
||||||
distribution.
|
|
||||||
* Neither the name of Google Inc. nor the names of its
|
|
||||||
contributors may be used to endorse or promote products derived from
|
|
||||||
this software without specific prior written permission.
|
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
@ -1,22 +0,0 @@
|
|||||||
Additional IP Rights Grant (Patents)
|
|
||||||
|
|
||||||
"This implementation" means the copyrightable works distributed by
|
|
||||||
Google as part of the Go project.
|
|
||||||
|
|
||||||
Google hereby grants to You a perpetual, worldwide, non-exclusive,
|
|
||||||
no-charge, royalty-free, irrevocable (except as stated in this section)
|
|
||||||
patent license to make, have made, use, offer to sell, sell, import,
|
|
||||||
transfer and otherwise run, modify and propagate the contents of this
|
|
||||||
implementation of Go, where such license applies only to those patent
|
|
||||||
claims, both currently owned or controlled by Google and acquired in
|
|
||||||
the future, licensable by Google that are necessarily infringed by this
|
|
||||||
implementation of Go. This grant does not include claims that would be
|
|
||||||
infringed only as a consequence of further modification of this
|
|
||||||
implementation. If you or your agent or exclusive licensee institute or
|
|
||||||
order or agree to the institution of patent litigation against any
|
|
||||||
entity (including a cross-claim or counterclaim in a lawsuit) alleging
|
|
||||||
that this implementation of Go or any code incorporated within this
|
|
||||||
implementation of Go constitutes direct or contributory patent
|
|
||||||
infringement, or inducement of patent infringement, then any patent
|
|
||||||
rights granted to you under this License for this implementation of Go
|
|
||||||
shall terminate as of the date such litigation is filed.
|
|
@ -1,297 +0,0 @@
|
|||||||
// Copyright 2014 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 sha3
|
|
||||||
|
|
||||||
// Tests include all the ShortMsgKATs provided by the Keccak team at
|
|
||||||
// https://github.com/gvanas/KeccakCodePackage
|
|
||||||
//
|
|
||||||
// They only include the zero-bit case of the bitwise testvectors
|
|
||||||
// published by NIST in the draft of FIPS-202.
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bytes"
|
|
||||||
"compress/flate"
|
|
||||||
"encoding/hex"
|
|
||||||
"encoding/json"
|
|
||||||
"hash"
|
|
||||||
"os"
|
|
||||||
"strings"
|
|
||||||
"testing"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
testString = "brekeccakkeccak koax koax"
|
|
||||||
katFilename = "testdata/keccakKats.json.deflate"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Internal-use instances of SHAKE used to test against KATs.
|
|
||||||
func newHashShake128() hash.Hash {
|
|
||||||
return &state{rate: 168, dsbyte: 0x1f, outputLen: 512}
|
|
||||||
}
|
|
||||||
func newHashShake256() hash.Hash {
|
|
||||||
return &state{rate: 136, dsbyte: 0x1f, outputLen: 512}
|
|
||||||
}
|
|
||||||
|
|
||||||
// testDigests contains functions returning hash.Hash instances
|
|
||||||
// with output-length equal to the KAT length for both SHA-3 and
|
|
||||||
// SHAKE instances.
|
|
||||||
var testDigests = map[string]func() hash.Hash{
|
|
||||||
"SHA3-224": New224,
|
|
||||||
"SHA3-256": New256,
|
|
||||||
"SHA3-384": New384,
|
|
||||||
"SHA3-512": New512,
|
|
||||||
"SHAKE128": newHashShake128,
|
|
||||||
"SHAKE256": newHashShake256,
|
|
||||||
}
|
|
||||||
|
|
||||||
// testShakes contains functions that return ShakeHash instances for
|
|
||||||
// testing the ShakeHash-specific interface.
|
|
||||||
var testShakes = map[string]func() ShakeHash{
|
|
||||||
"SHAKE128": NewShake128,
|
|
||||||
"SHAKE256": NewShake256,
|
|
||||||
}
|
|
||||||
|
|
||||||
// structs used to marshal JSON test-cases.
|
|
||||||
type KeccakKats struct {
|
|
||||||
Kats map[string][]struct {
|
|
||||||
Digest string `json:"digest"`
|
|
||||||
Length int64 `json:"length"`
|
|
||||||
Message string `json:"message"`
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func testUnalignedAndGeneric(t *testing.T, testf func(impl string)) {
|
|
||||||
xorInOrig, copyOutOrig := xorIn, copyOut
|
|
||||||
xorIn, copyOut = xorInGeneric, copyOutGeneric
|
|
||||||
testf("generic")
|
|
||||||
if xorImplementationUnaligned != "generic" {
|
|
||||||
xorIn, copyOut = xorInUnaligned, copyOutUnaligned
|
|
||||||
testf("unaligned")
|
|
||||||
}
|
|
||||||
xorIn, copyOut = xorInOrig, copyOutOrig
|
|
||||||
}
|
|
||||||
|
|
||||||
// TestKeccakKats tests the SHA-3 and Shake implementations against all the
|
|
||||||
// ShortMsgKATs from https://github.com/gvanas/KeccakCodePackage
|
|
||||||
// (The testvectors are stored in keccakKats.json.deflate due to their length.)
|
|
||||||
func TestKeccakKats(t *testing.T) {
|
|
||||||
testUnalignedAndGeneric(t, func(impl string) {
|
|
||||||
// Read the KATs.
|
|
||||||
deflated, err := os.Open(katFilename)
|
|
||||||
if err != nil {
|
|
||||||
t.Errorf("error opening %s: %s", katFilename, err)
|
|
||||||
}
|
|
||||||
file := flate.NewReader(deflated)
|
|
||||||
dec := json.NewDecoder(file)
|
|
||||||
var katSet KeccakKats
|
|
||||||
err = dec.Decode(&katSet)
|
|
||||||
if err != nil {
|
|
||||||
t.Errorf("error decoding KATs: %s", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Do the KATs.
|
|
||||||
for functionName, kats := range katSet.Kats {
|
|
||||||
d := testDigests[functionName]()
|
|
||||||
for _, kat := range kats {
|
|
||||||
d.Reset()
|
|
||||||
in, err := hex.DecodeString(kat.Message)
|
|
||||||
if err != nil {
|
|
||||||
t.Errorf("error decoding KAT: %s", err)
|
|
||||||
}
|
|
||||||
d.Write(in[:kat.Length/8])
|
|
||||||
got := strings.ToUpper(hex.EncodeToString(d.Sum(nil)))
|
|
||||||
if got != kat.Digest {
|
|
||||||
t.Errorf("function=%s, implementation=%s, length=%d\nmessage:\n %s\ngot:\n %s\nwanted:\n %s",
|
|
||||||
functionName, impl, kat.Length, kat.Message, got, kat.Digest)
|
|
||||||
t.Logf("wanted %+v", kat)
|
|
||||||
t.FailNow()
|
|
||||||
}
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// TestUnalignedWrite tests that writing data in an arbitrary pattern with
|
|
||||||
// small input buffers.
|
|
||||||
func TestUnalignedWrite(t *testing.T) {
|
|
||||||
testUnalignedAndGeneric(t, func(impl string) {
|
|
||||||
buf := sequentialBytes(0x10000)
|
|
||||||
for alg, df := range testDigests {
|
|
||||||
d := df()
|
|
||||||
d.Reset()
|
|
||||||
d.Write(buf)
|
|
||||||
want := d.Sum(nil)
|
|
||||||
d.Reset()
|
|
||||||
for i := 0; i < len(buf); {
|
|
||||||
// Cycle through offsets which make a 137 byte sequence.
|
|
||||||
// Because 137 is prime this sequence should exercise all corner cases.
|
|
||||||
offsets := [17]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 1}
|
|
||||||
for _, j := range offsets {
|
|
||||||
if v := len(buf) - i; v < j {
|
|
||||||
j = v
|
|
||||||
}
|
|
||||||
d.Write(buf[i : i+j])
|
|
||||||
i += j
|
|
||||||
}
|
|
||||||
}
|
|
||||||
got := d.Sum(nil)
|
|
||||||
if !bytes.Equal(got, want) {
|
|
||||||
t.Errorf("Unaligned writes, implementation=%s, alg=%s\ngot %q, want %q", impl, alg, got, want)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// TestAppend checks that appending works when reallocation is necessary.
|
|
||||||
func TestAppend(t *testing.T) {
|
|
||||||
testUnalignedAndGeneric(t, func(impl string) {
|
|
||||||
d := New224()
|
|
||||||
|
|
||||||
for capacity := 2; capacity <= 66; capacity += 64 {
|
|
||||||
// The first time around the loop, Sum will have to reallocate.
|
|
||||||
// The second time, it will not.
|
|
||||||
buf := make([]byte, 2, capacity)
|
|
||||||
d.Reset()
|
|
||||||
d.Write([]byte{0xcc})
|
|
||||||
buf = d.Sum(buf)
|
|
||||||
expected := "0000DF70ADC49B2E76EEE3A6931B93FA41841C3AF2CDF5B32A18B5478C39"
|
|
||||||
if got := strings.ToUpper(hex.EncodeToString(buf)); got != expected {
|
|
||||||
t.Errorf("got %s, want %s", got, expected)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// TestAppendNoRealloc tests that appending works when no reallocation is necessary.
|
|
||||||
func TestAppendNoRealloc(t *testing.T) {
|
|
||||||
testUnalignedAndGeneric(t, func(impl string) {
|
|
||||||
buf := make([]byte, 1, 200)
|
|
||||||
d := New224()
|
|
||||||
d.Write([]byte{0xcc})
|
|
||||||
buf = d.Sum(buf)
|
|
||||||
expected := "00DF70ADC49B2E76EEE3A6931B93FA41841C3AF2CDF5B32A18B5478C39"
|
|
||||||
if got := strings.ToUpper(hex.EncodeToString(buf)); got != expected {
|
|
||||||
t.Errorf("%s: got %s, want %s", impl, got, expected)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// TestSqueezing checks that squeezing the full output a single time produces
|
|
||||||
// the same output as repeatedly squeezing the instance.
|
|
||||||
func TestSqueezing(t *testing.T) {
|
|
||||||
testUnalignedAndGeneric(t, func(impl string) {
|
|
||||||
for functionName, newShakeHash := range testShakes {
|
|
||||||
d0 := newShakeHash()
|
|
||||||
d0.Write([]byte(testString))
|
|
||||||
ref := make([]byte, 32)
|
|
||||||
d0.Read(ref)
|
|
||||||
|
|
||||||
d1 := newShakeHash()
|
|
||||||
d1.Write([]byte(testString))
|
|
||||||
var multiple []byte
|
|
||||||
for range ref {
|
|
||||||
one := make([]byte, 1)
|
|
||||||
d1.Read(one)
|
|
||||||
multiple = append(multiple, one...)
|
|
||||||
}
|
|
||||||
if !bytes.Equal(ref, multiple) {
|
|
||||||
t.Errorf("%s (%s): squeezing %d bytes one at a time failed", functionName, impl, len(ref))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// sequentialBytes produces a buffer of size consecutive bytes 0x00, 0x01, ..., used for testing.
|
|
||||||
func sequentialBytes(size int) []byte {
|
|
||||||
result := make([]byte, size)
|
|
||||||
for i := range result {
|
|
||||||
result[i] = byte(i)
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
|
|
||||||
// BenchmarkPermutationFunction measures the speed of the permutation function
|
|
||||||
// with no input data.
|
|
||||||
func BenchmarkPermutationFunction(b *testing.B) {
|
|
||||||
b.SetBytes(int64(200))
|
|
||||||
var lanes [25]uint64
|
|
||||||
for i := 0; i < b.N; i++ {
|
|
||||||
keccakF1600(&lanes)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// benchmarkHash tests the speed to hash num buffers of buflen each.
|
|
||||||
func benchmarkHash(b *testing.B, h hash.Hash, size, num int) {
|
|
||||||
b.StopTimer()
|
|
||||||
h.Reset()
|
|
||||||
data := sequentialBytes(size)
|
|
||||||
b.SetBytes(int64(size * num))
|
|
||||||
b.StartTimer()
|
|
||||||
|
|
||||||
var state []byte
|
|
||||||
for i := 0; i < b.N; i++ {
|
|
||||||
for j := 0; j < num; j++ {
|
|
||||||
h.Write(data)
|
|
||||||
}
|
|
||||||
state = h.Sum(state[:0])
|
|
||||||
}
|
|
||||||
b.StopTimer()
|
|
||||||
h.Reset()
|
|
||||||
}
|
|
||||||
|
|
||||||
// benchmarkShake is specialized to the Shake instances, which don't
|
|
||||||
// require a copy on reading output.
|
|
||||||
func benchmarkShake(b *testing.B, h ShakeHash, size, num int) {
|
|
||||||
b.StopTimer()
|
|
||||||
h.Reset()
|
|
||||||
data := sequentialBytes(size)
|
|
||||||
d := make([]byte, 32)
|
|
||||||
|
|
||||||
b.SetBytes(int64(size * num))
|
|
||||||
b.StartTimer()
|
|
||||||
|
|
||||||
for i := 0; i < b.N; i++ {
|
|
||||||
h.Reset()
|
|
||||||
for j := 0; j < num; j++ {
|
|
||||||
h.Write(data)
|
|
||||||
}
|
|
||||||
h.Read(d)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func BenchmarkSha3_512_MTU(b *testing.B) { benchmarkHash(b, New512(), 1350, 1) }
|
|
||||||
func BenchmarkSha3_384_MTU(b *testing.B) { benchmarkHash(b, New384(), 1350, 1) }
|
|
||||||
func BenchmarkSha3_256_MTU(b *testing.B) { benchmarkHash(b, New256(), 1350, 1) }
|
|
||||||
func BenchmarkSha3_224_MTU(b *testing.B) { benchmarkHash(b, New224(), 1350, 1) }
|
|
||||||
|
|
||||||
func BenchmarkShake128_MTU(b *testing.B) { benchmarkShake(b, NewShake128(), 1350, 1) }
|
|
||||||
func BenchmarkShake256_MTU(b *testing.B) { benchmarkShake(b, NewShake256(), 1350, 1) }
|
|
||||||
func BenchmarkShake256_16x(b *testing.B) { benchmarkShake(b, NewShake256(), 16, 1024) }
|
|
||||||
func BenchmarkShake256_1MiB(b *testing.B) { benchmarkShake(b, NewShake256(), 1024, 1024) }
|
|
||||||
|
|
||||||
func BenchmarkSha3_512_1MiB(b *testing.B) { benchmarkHash(b, New512(), 1024, 1024) }
|
|
||||||
|
|
||||||
func Example_sum() {
|
|
||||||
buf := []byte("some data to hash")
|
|
||||||
// A hash needs to be 64 bytes long to have 256-bit collision resistance.
|
|
||||||
h := make([]byte, 64)
|
|
||||||
// Compute a 64-byte hash of buf and put it in h.
|
|
||||||
ShakeSum256(h, buf)
|
|
||||||
}
|
|
||||||
|
|
||||||
func Example_mac() {
|
|
||||||
k := []byte("this is a secret key; you should generate a strong random key that's at least 32 bytes long")
|
|
||||||
buf := []byte("and this is some data to authenticate")
|
|
||||||
// A MAC with 32 bytes of output has 256-bit security strength -- if you use at least a 32-byte-long key.
|
|
||||||
h := make([]byte, 32)
|
|
||||||
d := NewShake256()
|
|
||||||
// Write the key into the hash.
|
|
||||||
d.Write(k)
|
|
||||||
// Now write the data.
|
|
||||||
d.Write(buf)
|
|
||||||
// Read 32 bytes of output from the hash into h.
|
|
||||||
d.Read(h)
|
|
||||||
}
|
|
BIN
crypto/sha3/testdata/keccakKats.json.deflate
vendored
BIN
crypto/sha3/testdata/keccakKats.json.deflate
vendored
Binary file not shown.
@ -25,10 +25,10 @@ import (
|
|||||||
"github.com/ethereum/go-ethereum/common"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
"github.com/ethereum/go-ethereum/core/rawdb"
|
"github.com/ethereum/go-ethereum/core/rawdb"
|
||||||
"github.com/ethereum/go-ethereum/core/state"
|
"github.com/ethereum/go-ethereum/core/state"
|
||||||
"github.com/ethereum/go-ethereum/crypto/sha3"
|
|
||||||
"github.com/ethereum/go-ethereum/ethdb"
|
"github.com/ethereum/go-ethereum/ethdb"
|
||||||
"github.com/ethereum/go-ethereum/log"
|
"github.com/ethereum/go-ethereum/log"
|
||||||
"github.com/ethereum/go-ethereum/trie"
|
"github.com/ethereum/go-ethereum/trie"
|
||||||
|
"golang.org/x/crypto/sha3"
|
||||||
)
|
)
|
||||||
|
|
||||||
// stateReq represents a batch of state fetch requests grouped together into
|
// stateReq represents a batch of state fetch requests grouped together into
|
||||||
@ -240,7 +240,7 @@ func newStateSync(d *Downloader, root common.Hash) *stateSync {
|
|||||||
return &stateSync{
|
return &stateSync{
|
||||||
d: d,
|
d: d,
|
||||||
sched: state.NewStateSync(root, d.stateDB),
|
sched: state.NewStateSync(root, d.stateDB),
|
||||||
keccak: sha3.NewKeccak256(),
|
keccak: sha3.NewLegacyKeccak256(),
|
||||||
tasks: make(map[common.Hash]*stateTask),
|
tasks: make(map[common.Hash]*stateTask),
|
||||||
deliver: make(chan *stateReq),
|
deliver: make(chan *stateReq),
|
||||||
cancel: make(chan struct{}),
|
cancel: make(chan struct{}),
|
||||||
|
@ -27,10 +27,10 @@ import (
|
|||||||
"github.com/ethereum/go-ethereum/common"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
"github.com/ethereum/go-ethereum/common/mclock"
|
"github.com/ethereum/go-ethereum/common/mclock"
|
||||||
"github.com/ethereum/go-ethereum/crypto"
|
"github.com/ethereum/go-ethereum/crypto"
|
||||||
"github.com/ethereum/go-ethereum/crypto/sha3"
|
|
||||||
"github.com/ethereum/go-ethereum/log"
|
"github.com/ethereum/go-ethereum/log"
|
||||||
"github.com/ethereum/go-ethereum/p2p/netutil"
|
"github.com/ethereum/go-ethereum/p2p/netutil"
|
||||||
"github.com/ethereum/go-ethereum/rlp"
|
"github.com/ethereum/go-ethereum/rlp"
|
||||||
|
"golang.org/x/crypto/sha3"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -1234,7 +1234,7 @@ func (net *Network) checkTopicRegister(data *topicRegister) (*pong, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func rlpHash(x interface{}) (h common.Hash) {
|
func rlpHash(x interface{}) (h common.Hash) {
|
||||||
hw := sha3.NewKeccak256()
|
hw := sha3.NewLegacyKeccak256()
|
||||||
rlp.Encode(hw, x)
|
rlp.Encode(hw, x)
|
||||||
hw.Sum(h[:0])
|
hw.Sum(h[:0])
|
||||||
return h
|
return h
|
||||||
|
@ -23,9 +23,9 @@ import (
|
|||||||
|
|
||||||
"github.com/ethereum/go-ethereum/common/math"
|
"github.com/ethereum/go-ethereum/common/math"
|
||||||
"github.com/ethereum/go-ethereum/crypto"
|
"github.com/ethereum/go-ethereum/crypto"
|
||||||
"github.com/ethereum/go-ethereum/crypto/sha3"
|
|
||||||
"github.com/ethereum/go-ethereum/p2p/enr"
|
"github.com/ethereum/go-ethereum/p2p/enr"
|
||||||
"github.com/ethereum/go-ethereum/rlp"
|
"github.com/ethereum/go-ethereum/rlp"
|
||||||
|
"golang.org/x/crypto/sha3"
|
||||||
)
|
)
|
||||||
|
|
||||||
// List of known secure identity schemes.
|
// List of known secure identity schemes.
|
||||||
@ -48,7 +48,7 @@ func SignV4(r *enr.Record, privkey *ecdsa.PrivateKey) error {
|
|||||||
cpy.Set(enr.ID("v4"))
|
cpy.Set(enr.ID("v4"))
|
||||||
cpy.Set(Secp256k1(privkey.PublicKey))
|
cpy.Set(Secp256k1(privkey.PublicKey))
|
||||||
|
|
||||||
h := sha3.NewKeccak256()
|
h := sha3.NewLegacyKeccak256()
|
||||||
rlp.Encode(h, cpy.AppendElements(nil))
|
rlp.Encode(h, cpy.AppendElements(nil))
|
||||||
sig, err := crypto.Sign(h.Sum(nil), privkey)
|
sig, err := crypto.Sign(h.Sum(nil), privkey)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -69,7 +69,7 @@ func (V4ID) Verify(r *enr.Record, sig []byte) error {
|
|||||||
return fmt.Errorf("invalid public key")
|
return fmt.Errorf("invalid public key")
|
||||||
}
|
}
|
||||||
|
|
||||||
h := sha3.NewKeccak256()
|
h := sha3.NewLegacyKeccak256()
|
||||||
rlp.Encode(h, r.AppendElements(nil))
|
rlp.Encode(h, r.AppendElements(nil))
|
||||||
if !crypto.VerifySignature(entry, h.Sum(nil), sig) {
|
if !crypto.VerifySignature(entry, h.Sum(nil), sig) {
|
||||||
return enr.ErrInvalidSig
|
return enr.ErrInvalidSig
|
||||||
|
@ -39,9 +39,9 @@ import (
|
|||||||
"github.com/ethereum/go-ethereum/crypto"
|
"github.com/ethereum/go-ethereum/crypto"
|
||||||
"github.com/ethereum/go-ethereum/crypto/ecies"
|
"github.com/ethereum/go-ethereum/crypto/ecies"
|
||||||
"github.com/ethereum/go-ethereum/crypto/secp256k1"
|
"github.com/ethereum/go-ethereum/crypto/secp256k1"
|
||||||
"github.com/ethereum/go-ethereum/crypto/sha3"
|
|
||||||
"github.com/ethereum/go-ethereum/rlp"
|
"github.com/ethereum/go-ethereum/rlp"
|
||||||
"github.com/golang/snappy"
|
"github.com/golang/snappy"
|
||||||
|
"golang.org/x/crypto/sha3"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -253,10 +253,10 @@ func (h *encHandshake) secrets(auth, authResp []byte) (secrets, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// setup sha3 instances for the MACs
|
// setup sha3 instances for the MACs
|
||||||
mac1 := sha3.NewKeccak256()
|
mac1 := sha3.NewLegacyKeccak256()
|
||||||
mac1.Write(xor(s.MAC, h.respNonce))
|
mac1.Write(xor(s.MAC, h.respNonce))
|
||||||
mac1.Write(auth)
|
mac1.Write(auth)
|
||||||
mac2 := sha3.NewKeccak256()
|
mac2 := sha3.NewLegacyKeccak256()
|
||||||
mac2.Write(xor(s.MAC, h.initNonce))
|
mac2.Write(xor(s.MAC, h.initNonce))
|
||||||
mac2.Write(authResp)
|
mac2.Write(authResp)
|
||||||
if h.initiator {
|
if h.initiator {
|
||||||
|
@ -34,9 +34,9 @@ import (
|
|||||||
"github.com/davecgh/go-spew/spew"
|
"github.com/davecgh/go-spew/spew"
|
||||||
"github.com/ethereum/go-ethereum/crypto"
|
"github.com/ethereum/go-ethereum/crypto"
|
||||||
"github.com/ethereum/go-ethereum/crypto/ecies"
|
"github.com/ethereum/go-ethereum/crypto/ecies"
|
||||||
"github.com/ethereum/go-ethereum/crypto/sha3"
|
|
||||||
"github.com/ethereum/go-ethereum/p2p/simulations/pipes"
|
"github.com/ethereum/go-ethereum/p2p/simulations/pipes"
|
||||||
"github.com/ethereum/go-ethereum/rlp"
|
"github.com/ethereum/go-ethereum/rlp"
|
||||||
|
"golang.org/x/crypto/sha3"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestSharedSecret(t *testing.T) {
|
func TestSharedSecret(t *testing.T) {
|
||||||
@ -334,8 +334,8 @@ func TestRLPXFrameRW(t *testing.T) {
|
|||||||
s1 := secrets{
|
s1 := secrets{
|
||||||
AES: aesSecret,
|
AES: aesSecret,
|
||||||
MAC: macSecret,
|
MAC: macSecret,
|
||||||
EgressMAC: sha3.NewKeccak256(),
|
EgressMAC: sha3.NewLegacyKeccak256(),
|
||||||
IngressMAC: sha3.NewKeccak256(),
|
IngressMAC: sha3.NewLegacyKeccak256(),
|
||||||
}
|
}
|
||||||
s1.EgressMAC.Write(egressMACinit)
|
s1.EgressMAC.Write(egressMACinit)
|
||||||
s1.IngressMAC.Write(ingressMACinit)
|
s1.IngressMAC.Write(ingressMACinit)
|
||||||
@ -344,8 +344,8 @@ func TestRLPXFrameRW(t *testing.T) {
|
|||||||
s2 := secrets{
|
s2 := secrets{
|
||||||
AES: aesSecret,
|
AES: aesSecret,
|
||||||
MAC: macSecret,
|
MAC: macSecret,
|
||||||
EgressMAC: sha3.NewKeccak256(),
|
EgressMAC: sha3.NewLegacyKeccak256(),
|
||||||
IngressMAC: sha3.NewKeccak256(),
|
IngressMAC: sha3.NewLegacyKeccak256(),
|
||||||
}
|
}
|
||||||
s2.EgressMAC.Write(ingressMACinit)
|
s2.EgressMAC.Write(ingressMACinit)
|
||||||
s2.IngressMAC.Write(egressMACinit)
|
s2.IngressMAC.Write(egressMACinit)
|
||||||
|
@ -26,10 +26,10 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/crypto"
|
"github.com/ethereum/go-ethereum/crypto"
|
||||||
"github.com/ethereum/go-ethereum/crypto/sha3"
|
|
||||||
"github.com/ethereum/go-ethereum/log"
|
"github.com/ethereum/go-ethereum/log"
|
||||||
"github.com/ethereum/go-ethereum/p2p/enode"
|
"github.com/ethereum/go-ethereum/p2p/enode"
|
||||||
"github.com/ethereum/go-ethereum/p2p/enr"
|
"github.com/ethereum/go-ethereum/p2p/enr"
|
||||||
|
"golang.org/x/crypto/sha3"
|
||||||
)
|
)
|
||||||
|
|
||||||
// func init() {
|
// func init() {
|
||||||
@ -48,8 +48,8 @@ func newTestTransport(rpub *ecdsa.PublicKey, fd net.Conn) transport {
|
|||||||
wrapped.rw = newRLPXFrameRW(fd, secrets{
|
wrapped.rw = newRLPXFrameRW(fd, secrets{
|
||||||
MAC: zero16,
|
MAC: zero16,
|
||||||
AES: zero16,
|
AES: zero16,
|
||||||
IngressMAC: sha3.NewKeccak256(),
|
IngressMAC: sha3.NewLegacyKeccak256(),
|
||||||
EgressMAC: sha3.NewKeccak256(),
|
EgressMAC: sha3.NewLegacyKeccak256(),
|
||||||
})
|
})
|
||||||
return &testTransport{rpub: rpub, rlpx: wrapped}
|
return &testTransport{rpub: rpub, rlpx: wrapped}
|
||||||
}
|
}
|
||||||
|
@ -15,11 +15,11 @@ import (
|
|||||||
"github.com/ethereum/go-ethereum/common"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
"github.com/ethereum/go-ethereum/crypto"
|
"github.com/ethereum/go-ethereum/crypto"
|
||||||
"github.com/ethereum/go-ethereum/crypto/ecies"
|
"github.com/ethereum/go-ethereum/crypto/ecies"
|
||||||
"github.com/ethereum/go-ethereum/crypto/sha3"
|
|
||||||
"github.com/ethereum/go-ethereum/swarm/log"
|
"github.com/ethereum/go-ethereum/swarm/log"
|
||||||
"github.com/ethereum/go-ethereum/swarm/sctx"
|
"github.com/ethereum/go-ethereum/swarm/sctx"
|
||||||
"github.com/ethereum/go-ethereum/swarm/storage"
|
"github.com/ethereum/go-ethereum/swarm/storage"
|
||||||
"golang.org/x/crypto/scrypt"
|
"golang.org/x/crypto/scrypt"
|
||||||
|
"golang.org/x/crypto/sha3"
|
||||||
cli "gopkg.in/urfave/cli.v1"
|
cli "gopkg.in/urfave/cli.v1"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -336,7 +336,7 @@ func (a *API) doDecrypt(ctx context.Context, credentials string, pk *ecdsa.Priva
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (a *API) getACTDecryptionKey(ctx context.Context, actManifestAddress storage.Address, sessionKey []byte) (found bool, ciphertext, decryptionKey []byte, err error) {
|
func (a *API) getACTDecryptionKey(ctx context.Context, actManifestAddress storage.Address, sessionKey []byte) (found bool, ciphertext, decryptionKey []byte, err error) {
|
||||||
hasher := sha3.NewKeccak256()
|
hasher := sha3.NewLegacyKeccak256()
|
||||||
hasher.Write(append(sessionKey, 0))
|
hasher.Write(append(sessionKey, 0))
|
||||||
lookupKey := hasher.Sum(nil)
|
lookupKey := hasher.Sum(nil)
|
||||||
hasher.Reset()
|
hasher.Reset()
|
||||||
@ -462,7 +462,7 @@ func DoACT(ctx *cli.Context, privateKey *ecdsa.PrivateKey, salt []byte, grantees
|
|||||||
return nil, nil, nil, err
|
return nil, nil, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
hasher := sha3.NewKeccak256()
|
hasher := sha3.NewLegacyKeccak256()
|
||||||
hasher.Write(append(sessionKey, 0))
|
hasher.Write(append(sessionKey, 0))
|
||||||
lookupKey := hasher.Sum(nil)
|
lookupKey := hasher.Sum(nil)
|
||||||
|
|
||||||
@ -484,7 +484,7 @@ func DoACT(ctx *cli.Context, privateKey *ecdsa.PrivateKey, salt []byte, grantees
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, nil, err
|
return nil, nil, nil, err
|
||||||
}
|
}
|
||||||
hasher := sha3.NewKeccak256()
|
hasher := sha3.NewLegacyKeccak256()
|
||||||
hasher.Write(append(sessionKey, 0))
|
hasher.Write(append(sessionKey, 0))
|
||||||
lookupKey := hasher.Sum(nil)
|
lookupKey := hasher.Sum(nil)
|
||||||
|
|
||||||
|
@ -20,8 +20,8 @@ import (
|
|||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
"errors"
|
"errors"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/crypto/sha3"
|
|
||||||
"github.com/ethereum/go-ethereum/swarm/storage/encryption"
|
"github.com/ethereum/go-ethereum/swarm/storage/encryption"
|
||||||
|
"golang.org/x/crypto/sha3"
|
||||||
)
|
)
|
||||||
|
|
||||||
type RefEncryption struct {
|
type RefEncryption struct {
|
||||||
@ -39,12 +39,12 @@ func NewRefEncryption(refSize int) *RefEncryption {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (re *RefEncryption) Encrypt(ref []byte, key []byte) ([]byte, error) {
|
func (re *RefEncryption) Encrypt(ref []byte, key []byte) ([]byte, error) {
|
||||||
spanEncryption := encryption.New(key, 0, uint32(re.refSize/32), sha3.NewKeccak256)
|
spanEncryption := encryption.New(key, 0, uint32(re.refSize/32), sha3.NewLegacyKeccak256)
|
||||||
encryptedSpan, err := spanEncryption.Encrypt(re.span)
|
encryptedSpan, err := spanEncryption.Encrypt(re.span)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
dataEncryption := encryption.New(key, re.refSize, 0, sha3.NewKeccak256)
|
dataEncryption := encryption.New(key, re.refSize, 0, sha3.NewLegacyKeccak256)
|
||||||
encryptedData, err := dataEncryption.Encrypt(ref)
|
encryptedData, err := dataEncryption.Encrypt(ref)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -57,7 +57,7 @@ func (re *RefEncryption) Encrypt(ref []byte, key []byte) ([]byte, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (re *RefEncryption) Decrypt(ref []byte, key []byte) ([]byte, error) {
|
func (re *RefEncryption) Decrypt(ref []byte, key []byte) ([]byte, error) {
|
||||||
spanEncryption := encryption.New(key, 0, uint32(re.refSize/32), sha3.NewKeccak256)
|
spanEncryption := encryption.New(key, 0, uint32(re.refSize/32), sha3.NewLegacyKeccak256)
|
||||||
decryptedSpan, err := spanEncryption.Decrypt(ref[:8])
|
decryptedSpan, err := spanEncryption.Decrypt(ref[:8])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -68,7 +68,7 @@ func (re *RefEncryption) Decrypt(ref []byte, key []byte) ([]byte, error) {
|
|||||||
return nil, errors.New("invalid span in encrypted reference")
|
return nil, errors.New("invalid span in encrypted reference")
|
||||||
}
|
}
|
||||||
|
|
||||||
dataEncryption := encryption.New(key, re.refSize, 0, sha3.NewKeccak256)
|
dataEncryption := encryption.New(key, re.refSize, 0, sha3.NewLegacyKeccak256)
|
||||||
decryptedRef, err := dataEncryption.Decrypt(ref[8:])
|
decryptedRef, err := dataEncryption.Decrypt(ref[8:])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -61,7 +61,7 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// BaseHasherFunc is a hash.Hash constructor function used for the base hash of the BMT.
|
// BaseHasherFunc is a hash.Hash constructor function used for the base hash of the BMT.
|
||||||
// implemented by Keccak256 SHA3 sha3.NewKeccak256
|
// implemented by Keccak256 SHA3 sha3.NewLegacyKeccak256
|
||||||
type BaseHasherFunc func() hash.Hash
|
type BaseHasherFunc func() hash.Hash
|
||||||
|
|
||||||
// Hasher a reusable hasher for fixed maximum size chunks representing a BMT
|
// Hasher a reusable hasher for fixed maximum size chunks representing a BMT
|
||||||
|
@ -26,8 +26,8 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/crypto/sha3"
|
|
||||||
"github.com/ethereum/go-ethereum/swarm/testutil"
|
"github.com/ethereum/go-ethereum/swarm/testutil"
|
||||||
|
"golang.org/x/crypto/sha3"
|
||||||
)
|
)
|
||||||
|
|
||||||
// the actual data length generated (could be longer than max datalength of the BMT)
|
// the actual data length generated (could be longer than max datalength of the BMT)
|
||||||
@ -44,7 +44,7 @@ var counts = []int{1, 2, 3, 4, 5, 8, 9, 15, 16, 17, 32, 37, 42, 53, 63, 64, 65,
|
|||||||
|
|
||||||
// calculates the Keccak256 SHA3 hash of the data
|
// calculates the Keccak256 SHA3 hash of the data
|
||||||
func sha3hash(data ...[]byte) []byte {
|
func sha3hash(data ...[]byte) []byte {
|
||||||
h := sha3.NewKeccak256()
|
h := sha3.NewLegacyKeccak256()
|
||||||
return doSum(h, nil, data...)
|
return doSum(h, nil, data...)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -121,7 +121,7 @@ func TestRefHasher(t *testing.T) {
|
|||||||
t.Run(fmt.Sprintf("%d_segments_%d_bytes", segmentCount, length), func(t *testing.T) {
|
t.Run(fmt.Sprintf("%d_segments_%d_bytes", segmentCount, length), func(t *testing.T) {
|
||||||
data := testutil.RandomBytes(i, length)
|
data := testutil.RandomBytes(i, length)
|
||||||
expected := x.expected(data)
|
expected := x.expected(data)
|
||||||
actual := NewRefHasher(sha3.NewKeccak256, segmentCount).Hash(data)
|
actual := NewRefHasher(sha3.NewLegacyKeccak256, segmentCount).Hash(data)
|
||||||
if !bytes.Equal(actual, expected) {
|
if !bytes.Equal(actual, expected) {
|
||||||
t.Fatalf("expected %x, got %x", expected, actual)
|
t.Fatalf("expected %x, got %x", expected, actual)
|
||||||
}
|
}
|
||||||
@ -133,7 +133,7 @@ func TestRefHasher(t *testing.T) {
|
|||||||
|
|
||||||
// tests if hasher responds with correct hash comparing the reference implementation return value
|
// tests if hasher responds with correct hash comparing the reference implementation return value
|
||||||
func TestHasherEmptyData(t *testing.T) {
|
func TestHasherEmptyData(t *testing.T) {
|
||||||
hasher := sha3.NewKeccak256
|
hasher := sha3.NewLegacyKeccak256
|
||||||
var data []byte
|
var data []byte
|
||||||
for _, count := range counts {
|
for _, count := range counts {
|
||||||
t.Run(fmt.Sprintf("%d_segments", count), func(t *testing.T) {
|
t.Run(fmt.Sprintf("%d_segments", count), func(t *testing.T) {
|
||||||
@ -153,7 +153,7 @@ func TestHasherEmptyData(t *testing.T) {
|
|||||||
// tests sequential write with entire max size written in one go
|
// tests sequential write with entire max size written in one go
|
||||||
func TestSyncHasherCorrectness(t *testing.T) {
|
func TestSyncHasherCorrectness(t *testing.T) {
|
||||||
data := testutil.RandomBytes(1, BufferSize)
|
data := testutil.RandomBytes(1, BufferSize)
|
||||||
hasher := sha3.NewKeccak256
|
hasher := sha3.NewLegacyKeccak256
|
||||||
size := hasher().Size()
|
size := hasher().Size()
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
@ -179,7 +179,7 @@ func TestSyncHasherCorrectness(t *testing.T) {
|
|||||||
// tests order-neutral concurrent writes with entire max size written in one go
|
// tests order-neutral concurrent writes with entire max size written in one go
|
||||||
func TestAsyncCorrectness(t *testing.T) {
|
func TestAsyncCorrectness(t *testing.T) {
|
||||||
data := testutil.RandomBytes(1, BufferSize)
|
data := testutil.RandomBytes(1, BufferSize)
|
||||||
hasher := sha3.NewKeccak256
|
hasher := sha3.NewLegacyKeccak256
|
||||||
size := hasher().Size()
|
size := hasher().Size()
|
||||||
whs := []whenHash{first, last, random}
|
whs := []whenHash{first, last, random}
|
||||||
|
|
||||||
@ -226,7 +226,7 @@ func TestHasherReuse(t *testing.T) {
|
|||||||
|
|
||||||
// tests if bmt reuse is not corrupting result
|
// tests if bmt reuse is not corrupting result
|
||||||
func testHasherReuse(poolsize int, t *testing.T) {
|
func testHasherReuse(poolsize int, t *testing.T) {
|
||||||
hasher := sha3.NewKeccak256
|
hasher := sha3.NewLegacyKeccak256
|
||||||
pool := NewTreePool(hasher, segmentCount, poolsize)
|
pool := NewTreePool(hasher, segmentCount, poolsize)
|
||||||
defer pool.Drain(0)
|
defer pool.Drain(0)
|
||||||
bmt := New(pool)
|
bmt := New(pool)
|
||||||
@ -243,7 +243,7 @@ func testHasherReuse(poolsize int, t *testing.T) {
|
|||||||
|
|
||||||
// Tests if pool can be cleanly reused even in concurrent use by several hasher
|
// Tests if pool can be cleanly reused even in concurrent use by several hasher
|
||||||
func TestBMTConcurrentUse(t *testing.T) {
|
func TestBMTConcurrentUse(t *testing.T) {
|
||||||
hasher := sha3.NewKeccak256
|
hasher := sha3.NewLegacyKeccak256
|
||||||
pool := NewTreePool(hasher, segmentCount, PoolSize)
|
pool := NewTreePool(hasher, segmentCount, PoolSize)
|
||||||
defer pool.Drain(0)
|
defer pool.Drain(0)
|
||||||
cycles := 100
|
cycles := 100
|
||||||
@ -277,7 +277,7 @@ LOOP:
|
|||||||
// Tests BMT Hasher io.Writer interface is working correctly
|
// Tests BMT Hasher io.Writer interface is working correctly
|
||||||
// even multiple short random write buffers
|
// even multiple short random write buffers
|
||||||
func TestBMTWriterBuffers(t *testing.T) {
|
func TestBMTWriterBuffers(t *testing.T) {
|
||||||
hasher := sha3.NewKeccak256
|
hasher := sha3.NewLegacyKeccak256
|
||||||
|
|
||||||
for _, count := range counts {
|
for _, count := range counts {
|
||||||
t.Run(fmt.Sprintf("%d_segments", count), func(t *testing.T) {
|
t.Run(fmt.Sprintf("%d_segments", count), func(t *testing.T) {
|
||||||
@ -410,7 +410,7 @@ func BenchmarkPool(t *testing.B) {
|
|||||||
// benchmarks simple sha3 hash on chunks
|
// benchmarks simple sha3 hash on chunks
|
||||||
func benchmarkSHA3(t *testing.B, n int) {
|
func benchmarkSHA3(t *testing.B, n int) {
|
||||||
data := testutil.RandomBytes(1, n)
|
data := testutil.RandomBytes(1, n)
|
||||||
hasher := sha3.NewKeccak256
|
hasher := sha3.NewLegacyKeccak256
|
||||||
h := hasher()
|
h := hasher()
|
||||||
|
|
||||||
t.ReportAllocs()
|
t.ReportAllocs()
|
||||||
@ -426,7 +426,7 @@ func benchmarkSHA3(t *testing.B, n int) {
|
|||||||
// the premise is that this is the minimum computation needed for a BMT
|
// the premise is that this is the minimum computation needed for a BMT
|
||||||
// therefore this serves as a theoretical optimum for concurrent implementations
|
// therefore this serves as a theoretical optimum for concurrent implementations
|
||||||
func benchmarkBMTBaseline(t *testing.B, n int) {
|
func benchmarkBMTBaseline(t *testing.B, n int) {
|
||||||
hasher := sha3.NewKeccak256
|
hasher := sha3.NewLegacyKeccak256
|
||||||
hashSize := hasher().Size()
|
hashSize := hasher().Size()
|
||||||
data := testutil.RandomBytes(1, hashSize)
|
data := testutil.RandomBytes(1, hashSize)
|
||||||
|
|
||||||
@ -453,7 +453,7 @@ func benchmarkBMTBaseline(t *testing.B, n int) {
|
|||||||
// benchmarks BMT Hasher
|
// benchmarks BMT Hasher
|
||||||
func benchmarkBMT(t *testing.B, n int) {
|
func benchmarkBMT(t *testing.B, n int) {
|
||||||
data := testutil.RandomBytes(1, n)
|
data := testutil.RandomBytes(1, n)
|
||||||
hasher := sha3.NewKeccak256
|
hasher := sha3.NewLegacyKeccak256
|
||||||
pool := NewTreePool(hasher, segmentCount, PoolSize)
|
pool := NewTreePool(hasher, segmentCount, PoolSize)
|
||||||
bmt := New(pool)
|
bmt := New(pool)
|
||||||
|
|
||||||
@ -467,7 +467,7 @@ func benchmarkBMT(t *testing.B, n int) {
|
|||||||
// benchmarks BMT hasher with asynchronous concurrent segment/section writes
|
// benchmarks BMT hasher with asynchronous concurrent segment/section writes
|
||||||
func benchmarkBMTAsync(t *testing.B, n int, wh whenHash, double bool) {
|
func benchmarkBMTAsync(t *testing.B, n int, wh whenHash, double bool) {
|
||||||
data := testutil.RandomBytes(1, n)
|
data := testutil.RandomBytes(1, n)
|
||||||
hasher := sha3.NewKeccak256
|
hasher := sha3.NewLegacyKeccak256
|
||||||
pool := NewTreePool(hasher, segmentCount, PoolSize)
|
pool := NewTreePool(hasher, segmentCount, PoolSize)
|
||||||
bmt := New(pool).NewAsyncWriter(double)
|
bmt := New(pool).NewAsyncWriter(double)
|
||||||
idxs, segments := splitAndShuffle(bmt.SectionSize(), data)
|
idxs, segments := splitAndShuffle(bmt.SectionSize(), data)
|
||||||
@ -485,7 +485,7 @@ func benchmarkBMTAsync(t *testing.B, n int, wh whenHash, double bool) {
|
|||||||
// benchmarks 100 concurrent bmt hashes with pool capacity
|
// benchmarks 100 concurrent bmt hashes with pool capacity
|
||||||
func benchmarkPool(t *testing.B, poolsize, n int) {
|
func benchmarkPool(t *testing.B, poolsize, n int) {
|
||||||
data := testutil.RandomBytes(1, n)
|
data := testutil.RandomBytes(1, n)
|
||||||
hasher := sha3.NewKeccak256
|
hasher := sha3.NewLegacyKeccak256
|
||||||
pool := NewTreePool(hasher, segmentCount, poolsize)
|
pool := NewTreePool(hasher, segmentCount, poolsize)
|
||||||
cycles := 100
|
cycles := 100
|
||||||
|
|
||||||
@ -508,7 +508,7 @@ func benchmarkPool(t *testing.B, poolsize, n int) {
|
|||||||
// benchmarks the reference hasher
|
// benchmarks the reference hasher
|
||||||
func benchmarkRefHasher(t *testing.B, n int) {
|
func benchmarkRefHasher(t *testing.B, n int) {
|
||||||
data := testutil.RandomBytes(1, n)
|
data := testutil.RandomBytes(1, n)
|
||||||
hasher := sha3.NewKeccak256
|
hasher := sha3.NewLegacyKeccak256
|
||||||
rbmt := NewRefHasher(hasher, 128)
|
rbmt := NewRefHasher(hasher, 128)
|
||||||
|
|
||||||
t.ReportAllocs()
|
t.ReportAllocs()
|
||||||
|
@ -24,8 +24,8 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/crypto/sha3"
|
|
||||||
p2ptest "github.com/ethereum/go-ethereum/p2p/testing"
|
p2ptest "github.com/ethereum/go-ethereum/p2p/testing"
|
||||||
|
"golang.org/x/crypto/sha3"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestStreamerSubscribe(t *testing.T) {
|
func TestStreamerSubscribe(t *testing.T) {
|
||||||
|
@ -29,7 +29,6 @@ import (
|
|||||||
|
|
||||||
"github.com/ethereum/go-ethereum/common"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
"github.com/ethereum/go-ethereum/crypto"
|
"github.com/ethereum/go-ethereum/crypto"
|
||||||
"github.com/ethereum/go-ethereum/crypto/sha3"
|
|
||||||
"github.com/ethereum/go-ethereum/metrics"
|
"github.com/ethereum/go-ethereum/metrics"
|
||||||
"github.com/ethereum/go-ethereum/p2p"
|
"github.com/ethereum/go-ethereum/p2p"
|
||||||
"github.com/ethereum/go-ethereum/p2p/enode"
|
"github.com/ethereum/go-ethereum/p2p/enode"
|
||||||
@ -40,6 +39,7 @@ import (
|
|||||||
"github.com/ethereum/go-ethereum/swarm/pot"
|
"github.com/ethereum/go-ethereum/swarm/pot"
|
||||||
"github.com/ethereum/go-ethereum/swarm/storage"
|
"github.com/ethereum/go-ethereum/swarm/storage"
|
||||||
whisper "github.com/ethereum/go-ethereum/whisper/whisperv5"
|
whisper "github.com/ethereum/go-ethereum/whisper/whisperv5"
|
||||||
|
"golang.org/x/crypto/sha3"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -187,7 +187,7 @@ func NewPss(k *network.Kademlia, params *PssParams) (*Pss, error) {
|
|||||||
|
|
||||||
hashPool: sync.Pool{
|
hashPool: sync.Pool{
|
||||||
New: func() interface{} {
|
New: func() interface{} {
|
||||||
return sha3.NewKeccak256()
|
return sha3.NewLegacyKeccak256()
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@ -24,8 +24,8 @@ import (
|
|||||||
"io"
|
"io"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/crypto/sha3"
|
|
||||||
"github.com/ethereum/go-ethereum/swarm/testutil"
|
"github.com/ethereum/go-ethereum/swarm/testutil"
|
||||||
|
"golang.org/x/crypto/sha3"
|
||||||
)
|
)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -142,7 +142,7 @@ func TestSha3ForCorrectness(t *testing.T) {
|
|||||||
|
|
||||||
io.LimitReader(bytes.NewReader(input[8:]), int64(size))
|
io.LimitReader(bytes.NewReader(input[8:]), int64(size))
|
||||||
|
|
||||||
rawSha3 := sha3.NewKeccak256()
|
rawSha3 := sha3.NewLegacyKeccak256()
|
||||||
rawSha3.Reset()
|
rawSha3.Reset()
|
||||||
rawSha3.Write(input)
|
rawSha3.Write(input)
|
||||||
rawSha3Output := rawSha3.Sum(nil)
|
rawSha3Output := rawSha3.Sum(nil)
|
||||||
|
File diff suppressed because one or more lines are too long
@ -21,9 +21,9 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/crypto/sha3"
|
|
||||||
ch "github.com/ethereum/go-ethereum/swarm/chunk"
|
ch "github.com/ethereum/go-ethereum/swarm/chunk"
|
||||||
"github.com/ethereum/go-ethereum/swarm/storage/encryption"
|
"github.com/ethereum/go-ethereum/swarm/storage/encryption"
|
||||||
|
"golang.org/x/crypto/sha3"
|
||||||
)
|
)
|
||||||
|
|
||||||
type hasherStore struct {
|
type hasherStore struct {
|
||||||
@ -232,11 +232,11 @@ func (h *hasherStore) decrypt(chunkData ChunkData, key encryption.Key) ([]byte,
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (h *hasherStore) newSpanEncryption(key encryption.Key) encryption.Encryption {
|
func (h *hasherStore) newSpanEncryption(key encryption.Key) encryption.Encryption {
|
||||||
return encryption.New(key, 0, uint32(ch.DefaultSize/h.refSize), sha3.NewKeccak256)
|
return encryption.New(key, 0, uint32(ch.DefaultSize/h.refSize), sha3.NewLegacyKeccak256)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *hasherStore) newDataEncryption(key encryption.Key) encryption.Encryption {
|
func (h *hasherStore) newDataEncryption(key encryption.Key) encryption.Encryption {
|
||||||
return encryption.New(key, int(ch.DefaultSize), 0, sha3.NewKeccak256)
|
return encryption.New(key, int(ch.DefaultSize), 0, sha3.NewLegacyKeccak256)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *hasherStore) storeChunk(ctx context.Context, chunk *chunk) {
|
func (h *hasherStore) storeChunk(ctx context.Context, chunk *chunk) {
|
||||||
|
@ -26,9 +26,9 @@ import (
|
|||||||
"io"
|
"io"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/common"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
"github.com/ethereum/go-ethereum/crypto/sha3"
|
|
||||||
"github.com/ethereum/go-ethereum/swarm/bmt"
|
"github.com/ethereum/go-ethereum/swarm/bmt"
|
||||||
ch "github.com/ethereum/go-ethereum/swarm/chunk"
|
ch "github.com/ethereum/go-ethereum/swarm/chunk"
|
||||||
|
"golang.org/x/crypto/sha3"
|
||||||
)
|
)
|
||||||
|
|
||||||
const MaxPO = 16
|
const MaxPO = 16
|
||||||
@ -75,10 +75,10 @@ func MakeHashFunc(hash string) SwarmHasher {
|
|||||||
case "SHA256":
|
case "SHA256":
|
||||||
return func() SwarmHash { return &HashWithLength{crypto.SHA256.New()} }
|
return func() SwarmHash { return &HashWithLength{crypto.SHA256.New()} }
|
||||||
case "SHA3":
|
case "SHA3":
|
||||||
return func() SwarmHash { return &HashWithLength{sha3.NewKeccak256()} }
|
return func() SwarmHash { return &HashWithLength{sha3.NewLegacyKeccak256()} }
|
||||||
case "BMT":
|
case "BMT":
|
||||||
return func() SwarmHash {
|
return func() SwarmHash {
|
||||||
hasher := sha3.NewKeccak256
|
hasher := sha3.NewLegacyKeccak256
|
||||||
hasherSize := hasher().Size()
|
hasherSize := hasher().Size()
|
||||||
segmentCount := ch.DefaultSize / hasherSize
|
segmentCount := ch.DefaultSize / hasherSize
|
||||||
pool := bmt.NewTreePool(hasher, segmentCount, bmt.PoolSize)
|
pool := bmt.NewTreePool(hasher, segmentCount, bmt.PoolSize)
|
||||||
|
@ -31,10 +31,10 @@ import (
|
|||||||
"github.com/ethereum/go-ethereum/core/types"
|
"github.com/ethereum/go-ethereum/core/types"
|
||||||
"github.com/ethereum/go-ethereum/core/vm"
|
"github.com/ethereum/go-ethereum/core/vm"
|
||||||
"github.com/ethereum/go-ethereum/crypto"
|
"github.com/ethereum/go-ethereum/crypto"
|
||||||
"github.com/ethereum/go-ethereum/crypto/sha3"
|
|
||||||
"github.com/ethereum/go-ethereum/ethdb"
|
"github.com/ethereum/go-ethereum/ethdb"
|
||||||
"github.com/ethereum/go-ethereum/params"
|
"github.com/ethereum/go-ethereum/params"
|
||||||
"github.com/ethereum/go-ethereum/rlp"
|
"github.com/ethereum/go-ethereum/rlp"
|
||||||
|
"golang.org/x/crypto/sha3"
|
||||||
)
|
)
|
||||||
|
|
||||||
// StateTest checks transaction processing without block context.
|
// StateTest checks transaction processing without block context.
|
||||||
@ -248,7 +248,7 @@ func (tx *stTransaction) toMessage(ps stPostState) (core.Message, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func rlpHash(x interface{}) (h common.Hash) {
|
func rlpHash(x interface{}) (h common.Hash) {
|
||||||
hw := sha3.NewKeccak256()
|
hw := sha3.NewLegacyKeccak256()
|
||||||
rlp.Encode(hw, x)
|
rlp.Encode(hw, x)
|
||||||
hw.Sum(h[:0])
|
hw.Sum(h[:0])
|
||||||
return h
|
return h
|
||||||
|
@ -21,8 +21,8 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/common"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
"github.com/ethereum/go-ethereum/crypto/sha3"
|
|
||||||
"github.com/ethereum/go-ethereum/rlp"
|
"github.com/ethereum/go-ethereum/rlp"
|
||||||
|
"golang.org/x/crypto/sha3"
|
||||||
)
|
)
|
||||||
|
|
||||||
type hasher struct {
|
type hasher struct {
|
||||||
@ -57,7 +57,7 @@ var hasherPool = sync.Pool{
|
|||||||
New: func() interface{} {
|
New: func() interface{} {
|
||||||
return &hasher{
|
return &hasher{
|
||||||
tmp: make(sliceBuffer, 0, 550), // cap is as large as a full fullNode.
|
tmp: make(sliceBuffer, 0, 550), // cap is as large as a full fullNode.
|
||||||
sha: sha3.NewKeccak256().(keccakState),
|
sha: sha3.NewLegacyKeccak256().(keccakState),
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
4
crypto/sha3/doc.go → vendor/golang.org/x/crypto/sha3/doc.go
generated
vendored
4
crypto/sha3/doc.go → vendor/golang.org/x/crypto/sha3/doc.go
generated
vendored
@ -43,7 +43,7 @@
|
|||||||
// is then "full" and the permutation is applied to "empty" it. This process is
|
// is then "full" and the permutation is applied to "empty" it. This process is
|
||||||
// repeated until all the input has been "absorbed". The input is then padded.
|
// repeated until all the input has been "absorbed". The input is then padded.
|
||||||
// The digest is "squeezed" from the sponge in the same way, except that output
|
// The digest is "squeezed" from the sponge in the same way, except that output
|
||||||
// output is copied out instead of input being XORed in.
|
// is copied out instead of input being XORed in.
|
||||||
//
|
//
|
||||||
// A sponge is parameterized by its generic security strength, which is equal
|
// A sponge is parameterized by its generic security strength, which is equal
|
||||||
// to half its capacity; capacity + rate is equal to the permutation's width.
|
// to half its capacity; capacity + rate is equal to the permutation's width.
|
||||||
@ -63,4 +63,4 @@
|
|||||||
// They produce output of the same length, with the same security strengths
|
// They produce output of the same length, with the same security strengths
|
||||||
// against all attacks. This means, in particular, that SHA3-256 only has
|
// against all attacks. This means, in particular, that SHA3-256 only has
|
||||||
// 128-bit collision resistance, because its output length is 32 bytes.
|
// 128-bit collision resistance, because its output length is 32 bytes.
|
||||||
package sha3
|
package sha3 // import "golang.org/x/crypto/sha3"
|
46
crypto/sha3/hashes.go → vendor/golang.org/x/crypto/sha3/hashes.go
generated
vendored
46
crypto/sha3/hashes.go → vendor/golang.org/x/crypto/sha3/hashes.go
generated
vendored
@ -12,31 +12,57 @@ import (
|
|||||||
"hash"
|
"hash"
|
||||||
)
|
)
|
||||||
|
|
||||||
// NewKeccak256 creates a new Keccak-256 hash.
|
|
||||||
func NewKeccak256() hash.Hash { return &state{rate: 136, outputLen: 32, dsbyte: 0x01} }
|
|
||||||
|
|
||||||
// NewKeccak512 creates a new Keccak-512 hash.
|
|
||||||
func NewKeccak512() hash.Hash { return &state{rate: 72, outputLen: 64, dsbyte: 0x01} }
|
|
||||||
|
|
||||||
// New224 creates a new SHA3-224 hash.
|
// New224 creates a new SHA3-224 hash.
|
||||||
// Its generic security strength is 224 bits against preimage attacks,
|
// Its generic security strength is 224 bits against preimage attacks,
|
||||||
// and 112 bits against collision attacks.
|
// and 112 bits against collision attacks.
|
||||||
func New224() hash.Hash { return &state{rate: 144, outputLen: 28, dsbyte: 0x06} }
|
func New224() hash.Hash {
|
||||||
|
if h := new224Asm(); h != nil {
|
||||||
|
return h
|
||||||
|
}
|
||||||
|
return &state{rate: 144, outputLen: 28, dsbyte: 0x06}
|
||||||
|
}
|
||||||
|
|
||||||
// New256 creates a new SHA3-256 hash.
|
// New256 creates a new SHA3-256 hash.
|
||||||
// Its generic security strength is 256 bits against preimage attacks,
|
// Its generic security strength is 256 bits against preimage attacks,
|
||||||
// and 128 bits against collision attacks.
|
// and 128 bits against collision attacks.
|
||||||
func New256() hash.Hash { return &state{rate: 136, outputLen: 32, dsbyte: 0x06} }
|
func New256() hash.Hash {
|
||||||
|
if h := new256Asm(); h != nil {
|
||||||
|
return h
|
||||||
|
}
|
||||||
|
return &state{rate: 136, outputLen: 32, dsbyte: 0x06}
|
||||||
|
}
|
||||||
|
|
||||||
// New384 creates a new SHA3-384 hash.
|
// New384 creates a new SHA3-384 hash.
|
||||||
// Its generic security strength is 384 bits against preimage attacks,
|
// Its generic security strength is 384 bits against preimage attacks,
|
||||||
// and 192 bits against collision attacks.
|
// and 192 bits against collision attacks.
|
||||||
func New384() hash.Hash { return &state{rate: 104, outputLen: 48, dsbyte: 0x06} }
|
func New384() hash.Hash {
|
||||||
|
if h := new384Asm(); h != nil {
|
||||||
|
return h
|
||||||
|
}
|
||||||
|
return &state{rate: 104, outputLen: 48, dsbyte: 0x06}
|
||||||
|
}
|
||||||
|
|
||||||
// New512 creates a new SHA3-512 hash.
|
// New512 creates a new SHA3-512 hash.
|
||||||
// Its generic security strength is 512 bits against preimage attacks,
|
// Its generic security strength is 512 bits against preimage attacks,
|
||||||
// and 256 bits against collision attacks.
|
// and 256 bits against collision attacks.
|
||||||
func New512() hash.Hash { return &state{rate: 72, outputLen: 64, dsbyte: 0x06} }
|
func New512() hash.Hash {
|
||||||
|
if h := new512Asm(); h != nil {
|
||||||
|
return h
|
||||||
|
}
|
||||||
|
return &state{rate: 72, outputLen: 64, dsbyte: 0x06}
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewLegacyKeccak256 creates a new Keccak-256 hash.
|
||||||
|
//
|
||||||
|
// Only use this function if you require compatibility with an existing cryptosystem
|
||||||
|
// that uses non-standard padding. All other users should use New256 instead.
|
||||||
|
func NewLegacyKeccak256() hash.Hash { return &state{rate: 136, outputLen: 32, dsbyte: 0x01} }
|
||||||
|
|
||||||
|
// NewLegacyKeccak512 creates a new Keccak-512 hash.
|
||||||
|
//
|
||||||
|
// Only use this function if you require compatibility with an existing cryptosystem
|
||||||
|
// that uses non-standard padding. All other users should use New512 instead.
|
||||||
|
func NewLegacyKeccak512() hash.Hash { return &state{rate: 72, outputLen: 64, dsbyte: 0x01} }
|
||||||
|
|
||||||
// Sum224 returns the SHA3-224 digest of the data.
|
// Sum224 returns the SHA3-224 digest of the data.
|
||||||
func Sum224(data []byte) (digest [28]byte) {
|
func Sum224(data []byte) (digest [28]byte) {
|
27
vendor/golang.org/x/crypto/sha3/hashes_generic.go
generated
vendored
Normal file
27
vendor/golang.org/x/crypto/sha3/hashes_generic.go
generated
vendored
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
// 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.
|
||||||
|
|
||||||
|
//+build gccgo appengine !s390x
|
||||||
|
|
||||||
|
package sha3
|
||||||
|
|
||||||
|
import (
|
||||||
|
"hash"
|
||||||
|
)
|
||||||
|
|
||||||
|
// new224Asm returns an assembly implementation of SHA3-224 if available,
|
||||||
|
// otherwise it returns nil.
|
||||||
|
func new224Asm() hash.Hash { return nil }
|
||||||
|
|
||||||
|
// new256Asm returns an assembly implementation of SHA3-256 if available,
|
||||||
|
// otherwise it returns nil.
|
||||||
|
func new256Asm() hash.Hash { return nil }
|
||||||
|
|
||||||
|
// new384Asm returns an assembly implementation of SHA3-384 if available,
|
||||||
|
// otherwise it returns nil.
|
||||||
|
func new384Asm() hash.Hash { return nil }
|
||||||
|
|
||||||
|
// new512Asm returns an assembly implementation of SHA3-512 if available,
|
||||||
|
// otherwise it returns nil.
|
||||||
|
func new512Asm() hash.Hash { return nil }
|
0
crypto/sha3/keccakf.go → vendor/golang.org/x/crypto/sha3/keccakf.go
generated
vendored
0
crypto/sha3/keccakf.go → vendor/golang.org/x/crypto/sha3/keccakf.go
generated
vendored
2
crypto/sha3/keccakf_amd64.go → vendor/golang.org/x/crypto/sha3/keccakf_amd64.go
generated
vendored
2
crypto/sha3/keccakf_amd64.go → vendor/golang.org/x/crypto/sha3/keccakf_amd64.go
generated
vendored
@ -10,4 +10,4 @@ package sha3
|
|||||||
|
|
||||||
//go:noescape
|
//go:noescape
|
||||||
|
|
||||||
func keccakF1600(state *[25]uint64)
|
func keccakF1600(a *[25]uint64)
|
0
crypto/sha3/keccakf_amd64.s → vendor/golang.org/x/crypto/sha3/keccakf_amd64.s
generated
vendored
0
crypto/sha3/keccakf_amd64.s → vendor/golang.org/x/crypto/sha3/keccakf_amd64.s
generated
vendored
0
crypto/sha3/register.go → vendor/golang.org/x/crypto/sha3/register.go
generated
vendored
0
crypto/sha3/register.go → vendor/golang.org/x/crypto/sha3/register.go
generated
vendored
0
crypto/sha3/sha3.go → vendor/golang.org/x/crypto/sha3/sha3.go
generated
vendored
0
crypto/sha3/sha3.go → vendor/golang.org/x/crypto/sha3/sha3.go
generated
vendored
289
vendor/golang.org/x/crypto/sha3/sha3_s390x.go
generated
vendored
Normal file
289
vendor/golang.org/x/crypto/sha3/sha3_s390x.go
generated
vendored
Normal file
@ -0,0 +1,289 @@
|
|||||||
|
// 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.
|
||||||
|
|
||||||
|
//+build !gccgo,!appengine
|
||||||
|
|
||||||
|
package sha3
|
||||||
|
|
||||||
|
// This file contains code for using the 'compute intermediate
|
||||||
|
// message digest' (KIMD) and 'compute last message digest' (KLMD)
|
||||||
|
// instructions to compute SHA-3 and SHAKE hashes on IBM Z.
|
||||||
|
|
||||||
|
import (
|
||||||
|
"hash"
|
||||||
|
)
|
||||||
|
|
||||||
|
// codes represent 7-bit KIMD/KLMD function codes as defined in
|
||||||
|
// the Principles of Operation.
|
||||||
|
type code uint64
|
||||||
|
|
||||||
|
const (
|
||||||
|
// function codes for KIMD/KLMD
|
||||||
|
sha3_224 code = 32
|
||||||
|
sha3_256 = 33
|
||||||
|
sha3_384 = 34
|
||||||
|
sha3_512 = 35
|
||||||
|
shake_128 = 36
|
||||||
|
shake_256 = 37
|
||||||
|
nopad = 0x100
|
||||||
|
)
|
||||||
|
|
||||||
|
// hasMSA6 reports whether the machine supports the SHA-3 and SHAKE function
|
||||||
|
// codes, as defined in message-security-assist extension 6.
|
||||||
|
func hasMSA6() bool
|
||||||
|
|
||||||
|
// hasAsm caches the result of hasMSA6 (which might be expensive to call).
|
||||||
|
var hasAsm = hasMSA6()
|
||||||
|
|
||||||
|
// kimd is a wrapper for the 'compute intermediate message digest' instruction.
|
||||||
|
// src must be a multiple of the rate for the given function code.
|
||||||
|
//go:noescape
|
||||||
|
func kimd(function code, chain *[200]byte, src []byte)
|
||||||
|
|
||||||
|
// klmd is a wrapper for the 'compute last message digest' instruction.
|
||||||
|
// src padding is handled by the instruction.
|
||||||
|
//go:noescape
|
||||||
|
func klmd(function code, chain *[200]byte, dst, src []byte)
|
||||||
|
|
||||||
|
type asmState struct {
|
||||||
|
a [200]byte // 1600 bit state
|
||||||
|
buf []byte // care must be taken to ensure cap(buf) is a multiple of rate
|
||||||
|
rate int // equivalent to block size
|
||||||
|
storage [3072]byte // underlying storage for buf
|
||||||
|
outputLen int // output length if fixed, 0 if not
|
||||||
|
function code // KIMD/KLMD function code
|
||||||
|
state spongeDirection // whether the sponge is absorbing or squeezing
|
||||||
|
}
|
||||||
|
|
||||||
|
func newAsmState(function code) *asmState {
|
||||||
|
var s asmState
|
||||||
|
s.function = function
|
||||||
|
switch function {
|
||||||
|
case sha3_224:
|
||||||
|
s.rate = 144
|
||||||
|
s.outputLen = 28
|
||||||
|
case sha3_256:
|
||||||
|
s.rate = 136
|
||||||
|
s.outputLen = 32
|
||||||
|
case sha3_384:
|
||||||
|
s.rate = 104
|
||||||
|
s.outputLen = 48
|
||||||
|
case sha3_512:
|
||||||
|
s.rate = 72
|
||||||
|
s.outputLen = 64
|
||||||
|
case shake_128:
|
||||||
|
s.rate = 168
|
||||||
|
case shake_256:
|
||||||
|
s.rate = 136
|
||||||
|
default:
|
||||||
|
panic("sha3: unrecognized function code")
|
||||||
|
}
|
||||||
|
|
||||||
|
// limit s.buf size to a multiple of s.rate
|
||||||
|
s.resetBuf()
|
||||||
|
return &s
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *asmState) clone() *asmState {
|
||||||
|
c := *s
|
||||||
|
c.buf = c.storage[:len(s.buf):cap(s.buf)]
|
||||||
|
return &c
|
||||||
|
}
|
||||||
|
|
||||||
|
// copyIntoBuf copies b into buf. It will panic if there is not enough space to
|
||||||
|
// store all of b.
|
||||||
|
func (s *asmState) copyIntoBuf(b []byte) {
|
||||||
|
bufLen := len(s.buf)
|
||||||
|
s.buf = s.buf[:len(s.buf)+len(b)]
|
||||||
|
copy(s.buf[bufLen:], b)
|
||||||
|
}
|
||||||
|
|
||||||
|
// resetBuf points buf at storage, sets the length to 0 and sets cap to be a
|
||||||
|
// multiple of the rate.
|
||||||
|
func (s *asmState) resetBuf() {
|
||||||
|
max := (cap(s.storage) / s.rate) * s.rate
|
||||||
|
s.buf = s.storage[:0:max]
|
||||||
|
}
|
||||||
|
|
||||||
|
// Write (via the embedded io.Writer interface) adds more data to the running hash.
|
||||||
|
// It never returns an error.
|
||||||
|
func (s *asmState) Write(b []byte) (int, error) {
|
||||||
|
if s.state != spongeAbsorbing {
|
||||||
|
panic("sha3: write to sponge after read")
|
||||||
|
}
|
||||||
|
length := len(b)
|
||||||
|
for len(b) > 0 {
|
||||||
|
if len(s.buf) == 0 && len(b) >= cap(s.buf) {
|
||||||
|
// Hash the data directly and push any remaining bytes
|
||||||
|
// into the buffer.
|
||||||
|
remainder := len(s.buf) % s.rate
|
||||||
|
kimd(s.function, &s.a, b[:len(b)-remainder])
|
||||||
|
if remainder != 0 {
|
||||||
|
s.copyIntoBuf(b[len(b)-remainder:])
|
||||||
|
}
|
||||||
|
return length, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(s.buf) == cap(s.buf) {
|
||||||
|
// flush the buffer
|
||||||
|
kimd(s.function, &s.a, s.buf)
|
||||||
|
s.buf = s.buf[:0]
|
||||||
|
}
|
||||||
|
|
||||||
|
// copy as much as we can into the buffer
|
||||||
|
n := len(b)
|
||||||
|
if len(b) > cap(s.buf)-len(s.buf) {
|
||||||
|
n = cap(s.buf) - len(s.buf)
|
||||||
|
}
|
||||||
|
s.copyIntoBuf(b[:n])
|
||||||
|
b = b[n:]
|
||||||
|
}
|
||||||
|
return length, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Read squeezes an arbitrary number of bytes from the sponge.
|
||||||
|
func (s *asmState) Read(out []byte) (n int, err error) {
|
||||||
|
n = len(out)
|
||||||
|
|
||||||
|
// need to pad if we were absorbing
|
||||||
|
if s.state == spongeAbsorbing {
|
||||||
|
s.state = spongeSqueezing
|
||||||
|
|
||||||
|
// write hash directly into out if possible
|
||||||
|
if len(out)%s.rate == 0 {
|
||||||
|
klmd(s.function, &s.a, out, s.buf) // len(out) may be 0
|
||||||
|
s.buf = s.buf[:0]
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// write hash into buffer
|
||||||
|
max := cap(s.buf)
|
||||||
|
if max > len(out) {
|
||||||
|
max = (len(out)/s.rate)*s.rate + s.rate
|
||||||
|
}
|
||||||
|
klmd(s.function, &s.a, s.buf[:max], s.buf)
|
||||||
|
s.buf = s.buf[:max]
|
||||||
|
}
|
||||||
|
|
||||||
|
for len(out) > 0 {
|
||||||
|
// flush the buffer
|
||||||
|
if len(s.buf) != 0 {
|
||||||
|
c := copy(out, s.buf)
|
||||||
|
out = out[c:]
|
||||||
|
s.buf = s.buf[c:]
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// write hash directly into out if possible
|
||||||
|
if len(out)%s.rate == 0 {
|
||||||
|
klmd(s.function|nopad, &s.a, out, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// write hash into buffer
|
||||||
|
s.resetBuf()
|
||||||
|
if cap(s.buf) > len(out) {
|
||||||
|
s.buf = s.buf[:(len(out)/s.rate)*s.rate+s.rate]
|
||||||
|
}
|
||||||
|
klmd(s.function|nopad, &s.a, s.buf, nil)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sum appends the current hash to b and returns the resulting slice.
|
||||||
|
// It does not change the underlying hash state.
|
||||||
|
func (s *asmState) Sum(b []byte) []byte {
|
||||||
|
if s.outputLen == 0 {
|
||||||
|
panic("sha3: cannot call Sum on SHAKE functions")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Copy the state to preserve the original.
|
||||||
|
a := s.a
|
||||||
|
|
||||||
|
// Hash the buffer. Note that we don't clear it because we
|
||||||
|
// aren't updating the state.
|
||||||
|
klmd(s.function, &a, nil, s.buf)
|
||||||
|
return append(b, a[:s.outputLen]...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Reset resets the Hash to its initial state.
|
||||||
|
func (s *asmState) Reset() {
|
||||||
|
for i := range s.a {
|
||||||
|
s.a[i] = 0
|
||||||
|
}
|
||||||
|
s.resetBuf()
|
||||||
|
s.state = spongeAbsorbing
|
||||||
|
}
|
||||||
|
|
||||||
|
// Size returns the number of bytes Sum will return.
|
||||||
|
func (s *asmState) Size() int {
|
||||||
|
return s.outputLen
|
||||||
|
}
|
||||||
|
|
||||||
|
// BlockSize returns the hash's underlying block size.
|
||||||
|
// The Write method must be able to accept any amount
|
||||||
|
// of data, but it may operate more efficiently if all writes
|
||||||
|
// are a multiple of the block size.
|
||||||
|
func (s *asmState) BlockSize() int {
|
||||||
|
return s.rate
|
||||||
|
}
|
||||||
|
|
||||||
|
// Clone returns a copy of the ShakeHash in its current state.
|
||||||
|
func (s *asmState) Clone() ShakeHash {
|
||||||
|
return s.clone()
|
||||||
|
}
|
||||||
|
|
||||||
|
// new224Asm returns an assembly implementation of SHA3-224 if available,
|
||||||
|
// otherwise it returns nil.
|
||||||
|
func new224Asm() hash.Hash {
|
||||||
|
if hasAsm {
|
||||||
|
return newAsmState(sha3_224)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// new256Asm returns an assembly implementation of SHA3-256 if available,
|
||||||
|
// otherwise it returns nil.
|
||||||
|
func new256Asm() hash.Hash {
|
||||||
|
if hasAsm {
|
||||||
|
return newAsmState(sha3_256)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// new384Asm returns an assembly implementation of SHA3-384 if available,
|
||||||
|
// otherwise it returns nil.
|
||||||
|
func new384Asm() hash.Hash {
|
||||||
|
if hasAsm {
|
||||||
|
return newAsmState(sha3_384)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// new512Asm returns an assembly implementation of SHA3-512 if available,
|
||||||
|
// otherwise it returns nil.
|
||||||
|
func new512Asm() hash.Hash {
|
||||||
|
if hasAsm {
|
||||||
|
return newAsmState(sha3_512)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// newShake128Asm returns an assembly implementation of SHAKE-128 if available,
|
||||||
|
// otherwise it returns nil.
|
||||||
|
func newShake128Asm() ShakeHash {
|
||||||
|
if hasAsm {
|
||||||
|
return newAsmState(shake_128)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// newShake256Asm returns an assembly implementation of SHAKE-256 if available,
|
||||||
|
// otherwise it returns nil.
|
||||||
|
func newShake256Asm() ShakeHash {
|
||||||
|
if hasAsm {
|
||||||
|
return newAsmState(shake_256)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
49
vendor/golang.org/x/crypto/sha3/sha3_s390x.s
generated
vendored
Normal file
49
vendor/golang.org/x/crypto/sha3/sha3_s390x.s
generated
vendored
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
// 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.
|
||||||
|
|
||||||
|
//+build !gccgo,!appengine
|
||||||
|
|
||||||
|
#include "textflag.h"
|
||||||
|
|
||||||
|
TEXT ·hasMSA6(SB), NOSPLIT, $16-1
|
||||||
|
MOVD $0, R0 // KIMD-Query function code
|
||||||
|
MOVD $tmp-16(SP), R1 // parameter block
|
||||||
|
XC $16, (R1), (R1) // clear the parameter block
|
||||||
|
WORD $0xB93E0002 // KIMD --, --
|
||||||
|
WORD $0x91FC1004 // TM 4(R1), 0xFC (test bits [32-37])
|
||||||
|
BVS yes
|
||||||
|
|
||||||
|
no:
|
||||||
|
MOVB $0, ret+0(FP)
|
||||||
|
RET
|
||||||
|
|
||||||
|
yes:
|
||||||
|
MOVB $1, ret+0(FP)
|
||||||
|
RET
|
||||||
|
|
||||||
|
// func kimd(function code, params *[200]byte, src []byte)
|
||||||
|
TEXT ·kimd(SB), NOFRAME|NOSPLIT, $0-40
|
||||||
|
MOVD function+0(FP), R0
|
||||||
|
MOVD params+8(FP), R1
|
||||||
|
LMG src+16(FP), R2, R3 // R2=base, R3=len
|
||||||
|
|
||||||
|
continue:
|
||||||
|
WORD $0xB93E0002 // KIMD --, R2
|
||||||
|
BVS continue // continue if interrupted
|
||||||
|
MOVD $0, R0 // reset R0 for pre-go1.8 compilers
|
||||||
|
RET
|
||||||
|
|
||||||
|
// func klmd(function code, params *[200]byte, dst, src []byte)
|
||||||
|
TEXT ·klmd(SB), NOFRAME|NOSPLIT, $0-64
|
||||||
|
// TODO: SHAKE support
|
||||||
|
MOVD function+0(FP), R0
|
||||||
|
MOVD params+8(FP), R1
|
||||||
|
LMG dst+16(FP), R2, R3 // R2=base, R3=len
|
||||||
|
LMG src+40(FP), R4, R5 // R4=base, R5=len
|
||||||
|
|
||||||
|
continue:
|
||||||
|
WORD $0xB93F0024 // KLMD R2, R4
|
||||||
|
BVS continue // continue if interrupted
|
||||||
|
MOVD $0, R0 // reset R0 for pre-go1.8 compilers
|
||||||
|
RET
|
16
crypto/sha3/shake.go → vendor/golang.org/x/crypto/sha3/shake.go
generated
vendored
16
crypto/sha3/shake.go → vendor/golang.org/x/crypto/sha3/shake.go
generated
vendored
@ -38,12 +38,22 @@ func (d *state) Clone() ShakeHash {
|
|||||||
// NewShake128 creates a new SHAKE128 variable-output-length ShakeHash.
|
// NewShake128 creates a new SHAKE128 variable-output-length ShakeHash.
|
||||||
// Its generic security strength is 128 bits against all attacks if at
|
// Its generic security strength is 128 bits against all attacks if at
|
||||||
// least 32 bytes of its output are used.
|
// least 32 bytes of its output are used.
|
||||||
func NewShake128() ShakeHash { return &state{rate: 168, dsbyte: 0x1f} }
|
func NewShake128() ShakeHash {
|
||||||
|
if h := newShake128Asm(); h != nil {
|
||||||
|
return h
|
||||||
|
}
|
||||||
|
return &state{rate: 168, dsbyte: 0x1f}
|
||||||
|
}
|
||||||
|
|
||||||
// NewShake256 creates a new SHAKE128 variable-output-length ShakeHash.
|
// NewShake256 creates a new SHAKE256 variable-output-length ShakeHash.
|
||||||
// Its generic security strength is 256 bits against all attacks if
|
// Its generic security strength is 256 bits against all attacks if
|
||||||
// at least 64 bytes of its output are used.
|
// at least 64 bytes of its output are used.
|
||||||
func NewShake256() ShakeHash { return &state{rate: 136, dsbyte: 0x1f} }
|
func NewShake256() ShakeHash {
|
||||||
|
if h := newShake256Asm(); h != nil {
|
||||||
|
return h
|
||||||
|
}
|
||||||
|
return &state{rate: 136, dsbyte: 0x1f}
|
||||||
|
}
|
||||||
|
|
||||||
// ShakeSum128 writes an arbitrary-length digest of data into hash.
|
// ShakeSum128 writes an arbitrary-length digest of data into hash.
|
||||||
func ShakeSum128(hash, data []byte) {
|
func ShakeSum128(hash, data []byte) {
|
19
vendor/golang.org/x/crypto/sha3/shake_generic.go
generated
vendored
Normal file
19
vendor/golang.org/x/crypto/sha3/shake_generic.go
generated
vendored
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
// 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.
|
||||||
|
|
||||||
|
//+build gccgo appengine !s390x
|
||||||
|
|
||||||
|
package sha3
|
||||||
|
|
||||||
|
// newShake128Asm returns an assembly implementation of SHAKE-128 if available,
|
||||||
|
// otherwise it returns nil.
|
||||||
|
func newShake128Asm() ShakeHash {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// newShake256Asm returns an assembly implementation of SHAKE-256 if available,
|
||||||
|
// otherwise it returns nil.
|
||||||
|
func newShake256Asm() ShakeHash {
|
||||||
|
return nil
|
||||||
|
}
|
0
crypto/sha3/xor.go → vendor/golang.org/x/crypto/sha3/xor.go
generated
vendored
0
crypto/sha3/xor.go → vendor/golang.org/x/crypto/sha3/xor.go
generated
vendored
0
crypto/sha3/xor_generic.go → vendor/golang.org/x/crypto/sha3/xor_generic.go
generated
vendored
0
crypto/sha3/xor_generic.go → vendor/golang.org/x/crypto/sha3/xor_generic.go
generated
vendored
0
crypto/sha3/xor_unaligned.go → vendor/golang.org/x/crypto/sha3/xor_unaligned.go
generated
vendored
0
crypto/sha3/xor_unaligned.go → vendor/golang.org/x/crypto/sha3/xor_unaligned.go
generated
vendored
6
vendor/vendor.json
vendored
6
vendor/vendor.json
vendored
@ -706,6 +706,12 @@
|
|||||||
"revision": "6a293f2d4b14b8e6d3f0539e383f6d0d30fce3fd",
|
"revision": "6a293f2d4b14b8e6d3f0539e383f6d0d30fce3fd",
|
||||||
"revisionTime": "2017-09-25T11:22:06Z"
|
"revisionTime": "2017-09-25T11:22:06Z"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"checksumSHA1": "hUsBzxJ8KTL4v0vpPT/mqvdJ46s=",
|
||||||
|
"path": "golang.org/x/crypto/sha3",
|
||||||
|
"revision": "ff983b9c42bc9fbf91556e191cc8efb585c16908",
|
||||||
|
"revisionTime": "2018-07-25T11:53:45Z"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"checksumSHA1": "Wi44TcpIOXdojyVWkvyOBnBKIS4=",
|
"checksumSHA1": "Wi44TcpIOXdojyVWkvyOBnBKIS4=",
|
||||||
"path": "golang.org/x/crypto/ssh",
|
"path": "golang.org/x/crypto/ssh",
|
||||||
|
Loading…
Reference in New Issue
Block a user