mirror of
				https://github.com/libp2p/go-libp2p.git
				synced 2025-10-31 03:46:35 +08:00 
			
		
		
		
	fixes for sha3
This commit is contained in:
		| @@ -9,8 +9,8 @@ import ( | ||||
| 	"sync" | ||||
| 	"time" | ||||
|  | ||||
| 	ma "QmaA6aDzeHjZiuqBtgYRz8ZXb1qMCoyMHgyDjBEYQniUKF/go-multiaddr" | ||||
| 	manet "QmanZCL6SXRfafiUEMCBLq2QR171uQSdXQ8YAdHXLd8Cwr/go-multiaddr-net" | ||||
| 	manet "QmU5s159q8cZuM1f9Vqti4LHu6y8zyVc5dxv2py81sdp6Q/go-multiaddr-net" | ||||
| 	ma "QmbWxL1aXQhBjc1XGjGF1f2KGBMCBYSuT2ThA8YXnXJK83/go-multiaddr" | ||||
| 	"github.com/cryptix/mdns" | ||||
|  | ||||
| 	logging "QmWRypnfEwrgH4k93KEHN5hng7VjKYkWmzDYRuTZeh2Mgh/go-log" | ||||
|   | ||||
| @@ -4,7 +4,7 @@ import ( | ||||
| 	"io" | ||||
|  | ||||
| 	logging "QmWRypnfEwrgH4k93KEHN5hng7VjKYkWmzDYRuTZeh2Mgh/go-log" | ||||
| 	ma "QmaA6aDzeHjZiuqBtgYRz8ZXb1qMCoyMHgyDjBEYQniUKF/go-multiaddr" | ||||
| 	ma "QmbWxL1aXQhBjc1XGjGF1f2KGBMCBYSuT2ThA8YXnXJK83/go-multiaddr" | ||||
| 	metrics "github.com/ipfs/go-libp2p/p2p/metrics" | ||||
| 	mstream "github.com/ipfs/go-libp2p/p2p/metrics/stream" | ||||
| 	goprocess "github.com/jbenet/goprocess" | ||||
|   | ||||
| @@ -3,7 +3,7 @@ package basichost | ||||
| import ( | ||||
| 	"sync" | ||||
|  | ||||
| 	ma "QmaA6aDzeHjZiuqBtgYRz8ZXb1qMCoyMHgyDjBEYQniUKF/go-multiaddr" | ||||
| 	ma "QmbWxL1aXQhBjc1XGjGF1f2KGBMCBYSuT2ThA8YXnXJK83/go-multiaddr" | ||||
| 	goprocess "github.com/jbenet/goprocess" | ||||
| 	context "golang.org/x/net/context" | ||||
|  | ||||
|   | ||||
| @@ -2,7 +2,7 @@ package host | ||||
|  | ||||
| import ( | ||||
| 	logging "QmWRypnfEwrgH4k93KEHN5hng7VjKYkWmzDYRuTZeh2Mgh/go-log" | ||||
| 	ma "QmaA6aDzeHjZiuqBtgYRz8ZXb1qMCoyMHgyDjBEYQniUKF/go-multiaddr" | ||||
| 	ma "QmbWxL1aXQhBjc1XGjGF1f2KGBMCBYSuT2ThA8YXnXJK83/go-multiaddr" | ||||
| 	metrics "github.com/ipfs/go-libp2p/p2p/metrics" | ||||
| 	inet "github.com/ipfs/go-libp2p/p2p/net" | ||||
| 	peer "github.com/ipfs/go-libp2p/p2p/peer" | ||||
|   | ||||
| @@ -5,7 +5,7 @@ import ( | ||||
| 	"time" | ||||
|  | ||||
| 	logging "QmWRypnfEwrgH4k93KEHN5hng7VjKYkWmzDYRuTZeh2Mgh/go-log" | ||||
| 	ma "QmaA6aDzeHjZiuqBtgYRz8ZXb1qMCoyMHgyDjBEYQniUKF/go-multiaddr" | ||||
| 	ma "QmbWxL1aXQhBjc1XGjGF1f2KGBMCBYSuT2ThA8YXnXJK83/go-multiaddr" | ||||
| 	context "golang.org/x/net/context" | ||||
| 	lgbl "util/eventlog/loggables" | ||||
|  | ||||
|   | ||||
| @@ -8,8 +8,8 @@ import ( | ||||
| 	"sync" | ||||
| 	"time" | ||||
|  | ||||
| 	ma "QmaA6aDzeHjZiuqBtgYRz8ZXb1qMCoyMHgyDjBEYQniUKF/go-multiaddr" | ||||
| 	manet "QmanZCL6SXRfafiUEMCBLq2QR171uQSdXQ8YAdHXLd8Cwr/go-multiaddr-net" | ||||
| 	manet "QmU5s159q8cZuM1f9Vqti4LHu6y8zyVc5dxv2py81sdp6Q/go-multiaddr-net" | ||||
| 	ma "QmbWxL1aXQhBjc1XGjGF1f2KGBMCBYSuT2ThA8YXnXJK83/go-multiaddr" | ||||
|  | ||||
| 	logging "QmWRypnfEwrgH4k93KEHN5hng7VjKYkWmzDYRuTZeh2Mgh/go-log" | ||||
| 	nat "github.com/fd/go-nat" | ||||
|   | ||||
| @@ -6,9 +6,9 @@ import ( | ||||
| 	"net" | ||||
| 	"time" | ||||
|  | ||||
| 	manet "QmU5s159q8cZuM1f9Vqti4LHu6y8zyVc5dxv2py81sdp6Q/go-multiaddr-net" | ||||
| 	logging "QmWRypnfEwrgH4k93KEHN5hng7VjKYkWmzDYRuTZeh2Mgh/go-log" | ||||
| 	ma "QmaA6aDzeHjZiuqBtgYRz8ZXb1qMCoyMHgyDjBEYQniUKF/go-multiaddr" | ||||
| 	manet "QmanZCL6SXRfafiUEMCBLq2QR171uQSdXQ8YAdHXLd8Cwr/go-multiaddr-net" | ||||
| 	ma "QmbWxL1aXQhBjc1XGjGF1f2KGBMCBYSuT2ThA8YXnXJK83/go-multiaddr" | ||||
| 	ic "github.com/ipfs/go-libp2p/p2p/crypto" | ||||
| 	peer "github.com/ipfs/go-libp2p/p2p/peer" | ||||
| 	mpool "github.com/jbenet/go-msgio/mpool" | ||||
|   | ||||
| @@ -5,8 +5,8 @@ import ( | ||||
| 	"math/rand" | ||||
| 	"strings" | ||||
|  | ||||
| 	ma "QmaA6aDzeHjZiuqBtgYRz8ZXb1qMCoyMHgyDjBEYQniUKF/go-multiaddr" | ||||
| 	manet "QmanZCL6SXRfafiUEMCBLq2QR171uQSdXQ8YAdHXLd8Cwr/go-multiaddr-net" | ||||
| 	manet "QmU5s159q8cZuM1f9Vqti4LHu6y8zyVc5dxv2py81sdp6Q/go-multiaddr-net" | ||||
| 	ma "QmbWxL1aXQhBjc1XGjGF1f2KGBMCBYSuT2ThA8YXnXJK83/go-multiaddr" | ||||
| 	context "golang.org/x/net/context" | ||||
| 	lgbl "util/eventlog/loggables" | ||||
|  | ||||
|   | ||||
| @@ -13,7 +13,7 @@ import ( | ||||
| 	peer "github.com/ipfs/go-libp2p/p2p/peer" | ||||
| 	tu "util/testutil" | ||||
|  | ||||
| 	ma "QmaA6aDzeHjZiuqBtgYRz8ZXb1qMCoyMHgyDjBEYQniUKF/go-multiaddr" | ||||
| 	ma "QmbWxL1aXQhBjc1XGjGF1f2KGBMCBYSuT2ThA8YXnXJK83/go-multiaddr" | ||||
| 	context "golang.org/x/net/context" | ||||
| ) | ||||
|  | ||||
|   | ||||
| @@ -10,7 +10,7 @@ import ( | ||||
| 	transport "github.com/ipfs/go-libp2p/p2p/net/transport" | ||||
| 	peer "github.com/ipfs/go-libp2p/p2p/peer" | ||||
|  | ||||
| 	ma "QmaA6aDzeHjZiuqBtgYRz8ZXb1qMCoyMHgyDjBEYQniUKF/go-multiaddr" | ||||
| 	ma "QmbWxL1aXQhBjc1XGjGF1f2KGBMCBYSuT2ThA8YXnXJK83/go-multiaddr" | ||||
| ) | ||||
|  | ||||
| type PeerConn interface { | ||||
|   | ||||
| @@ -5,7 +5,7 @@ import ( | ||||
| 	"io" | ||||
| 	"net" | ||||
|  | ||||
| 	ma "QmaA6aDzeHjZiuqBtgYRz8ZXb1qMCoyMHgyDjBEYQniUKF/go-multiaddr" | ||||
| 	ma "QmbWxL1aXQhBjc1XGjGF1f2KGBMCBYSuT2ThA8YXnXJK83/go-multiaddr" | ||||
| 	tec "github.com/jbenet/go-temp-err-catcher" | ||||
| 	"github.com/jbenet/goprocess" | ||||
| 	goprocessctx "github.com/jbenet/goprocess/context" | ||||
|   | ||||
| @@ -5,7 +5,7 @@ import ( | ||||
| 	"net" | ||||
| 	"time" | ||||
|  | ||||
| 	ma "QmaA6aDzeHjZiuqBtgYRz8ZXb1qMCoyMHgyDjBEYQniUKF/go-multiaddr" | ||||
| 	ma "QmbWxL1aXQhBjc1XGjGF1f2KGBMCBYSuT2ThA8YXnXJK83/go-multiaddr" | ||||
| 	context "golang.org/x/net/context" | ||||
|  | ||||
| 	ic "github.com/ipfs/go-libp2p/p2p/crypto" | ||||
|   | ||||
| @@ -5,8 +5,8 @@ import ( | ||||
| 	"strings" | ||||
| 	"sync" | ||||
|  | ||||
| 	ma "QmaA6aDzeHjZiuqBtgYRz8ZXb1qMCoyMHgyDjBEYQniUKF/go-multiaddr" | ||||
| 	manet "QmanZCL6SXRfafiUEMCBLq2QR171uQSdXQ8YAdHXLd8Cwr/go-multiaddr-net" | ||||
| 	manet "QmU5s159q8cZuM1f9Vqti4LHu6y8zyVc5dxv2py81sdp6Q/go-multiaddr-net" | ||||
| 	ma "QmbWxL1aXQhBjc1XGjGF1f2KGBMCBYSuT2ThA8YXnXJK83/go-multiaddr" | ||||
| ) | ||||
|  | ||||
| type Filters struct { | ||||
|   | ||||
| @@ -6,7 +6,7 @@ import ( | ||||
| 	conn "github.com/ipfs/go-libp2p/p2p/net/conn" | ||||
| 	peer "github.com/ipfs/go-libp2p/p2p/peer" | ||||
|  | ||||
| 	ma "QmaA6aDzeHjZiuqBtgYRz8ZXb1qMCoyMHgyDjBEYQniUKF/go-multiaddr" | ||||
| 	ma "QmbWxL1aXQhBjc1XGjGF1f2KGBMCBYSuT2ThA8YXnXJK83/go-multiaddr" | ||||
| 	"github.com/jbenet/goprocess" | ||||
| 	context "golang.org/x/net/context" | ||||
| ) | ||||
|   | ||||
| @@ -14,7 +14,7 @@ import ( | ||||
| 	"io" | ||||
| 	"time" | ||||
|  | ||||
| 	ma "QmaA6aDzeHjZiuqBtgYRz8ZXb1qMCoyMHgyDjBEYQniUKF/go-multiaddr" | ||||
| 	ma "QmbWxL1aXQhBjc1XGjGF1f2KGBMCBYSuT2ThA8YXnXJK83/go-multiaddr" | ||||
| ) | ||||
|  | ||||
| type Mocknet interface { | ||||
|   | ||||
| @@ -8,7 +8,7 @@ import ( | ||||
| 	inet "github.com/ipfs/go-libp2p/p2p/net" | ||||
| 	peer "github.com/ipfs/go-libp2p/p2p/peer" | ||||
|  | ||||
| 	ma "QmaA6aDzeHjZiuqBtgYRz8ZXb1qMCoyMHgyDjBEYQniUKF/go-multiaddr" | ||||
| 	ma "QmbWxL1aXQhBjc1XGjGF1f2KGBMCBYSuT2ThA8YXnXJK83/go-multiaddr" | ||||
| 	process "github.com/jbenet/goprocess" | ||||
| ) | ||||
|  | ||||
|   | ||||
| @@ -13,7 +13,7 @@ import ( | ||||
| 	p2putil "github.com/ipfs/go-libp2p/p2p/test/util" | ||||
| 	testutil "util/testutil" | ||||
|  | ||||
| 	ma "QmaA6aDzeHjZiuqBtgYRz8ZXb1qMCoyMHgyDjBEYQniUKF/go-multiaddr" | ||||
| 	ma "QmbWxL1aXQhBjc1XGjGF1f2KGBMCBYSuT2ThA8YXnXJK83/go-multiaddr" | ||||
| 	"github.com/jbenet/goprocess" | ||||
| 	goprocessctx "github.com/jbenet/goprocess/context" | ||||
| 	context "golang.org/x/net/context" | ||||
|   | ||||
| @@ -4,7 +4,7 @@ import ( | ||||
| 	"testing" | ||||
| 	"time" | ||||
|  | ||||
| 	ma "QmaA6aDzeHjZiuqBtgYRz8ZXb1qMCoyMHgyDjBEYQniUKF/go-multiaddr" | ||||
| 	ma "QmbWxL1aXQhBjc1XGjGF1f2KGBMCBYSuT2ThA8YXnXJK83/go-multiaddr" | ||||
| 	inet "github.com/ipfs/go-libp2p/p2p/net" | ||||
| 	peer "github.com/ipfs/go-libp2p/p2p/peer" | ||||
| 	context "golang.org/x/net/context" | ||||
|   | ||||
| @@ -8,7 +8,7 @@ import ( | ||||
| 	inet "github.com/ipfs/go-libp2p/p2p/net" | ||||
| 	peer "github.com/ipfs/go-libp2p/p2p/peer" | ||||
|  | ||||
| 	ma "QmaA6aDzeHjZiuqBtgYRz8ZXb1qMCoyMHgyDjBEYQniUKF/go-multiaddr" | ||||
| 	ma "QmbWxL1aXQhBjc1XGjGF1f2KGBMCBYSuT2ThA8YXnXJK83/go-multiaddr" | ||||
| 	"github.com/jbenet/goprocess" | ||||
| 	goprocessctx "github.com/jbenet/goprocess/context" | ||||
| 	context "golang.org/x/net/context" | ||||
|   | ||||
| @@ -5,8 +5,8 @@ import ( | ||||
|  | ||||
| 	logging "QmWRypnfEwrgH4k93KEHN5hng7VjKYkWmzDYRuTZeh2Mgh/go-log" | ||||
|  | ||||
| 	ma "QmaA6aDzeHjZiuqBtgYRz8ZXb1qMCoyMHgyDjBEYQniUKF/go-multiaddr" | ||||
| 	manet "QmanZCL6SXRfafiUEMCBLq2QR171uQSdXQ8YAdHXLd8Cwr/go-multiaddr-net" | ||||
| 	manet "QmU5s159q8cZuM1f9Vqti4LHu6y8zyVc5dxv2py81sdp6Q/go-multiaddr-net" | ||||
| 	ma "QmbWxL1aXQhBjc1XGjGF1f2KGBMCBYSuT2ThA8YXnXJK83/go-multiaddr" | ||||
| 	context "golang.org/x/net/context" | ||||
| ) | ||||
|  | ||||
|   | ||||
| @@ -3,8 +3,8 @@ package addrutil | ||||
| import ( | ||||
| 	"testing" | ||||
|  | ||||
| 	ma "QmaA6aDzeHjZiuqBtgYRz8ZXb1qMCoyMHgyDjBEYQniUKF/go-multiaddr" | ||||
| 	manet "QmanZCL6SXRfafiUEMCBLq2QR171uQSdXQ8YAdHXLd8Cwr/go-multiaddr-net" | ||||
| 	manet "QmU5s159q8cZuM1f9Vqti4LHu6y8zyVc5dxv2py81sdp6Q/go-multiaddr-net" | ||||
| 	ma "QmbWxL1aXQhBjc1XGjGF1f2KGBMCBYSuT2ThA8YXnXJK83/go-multiaddr" | ||||
| ) | ||||
|  | ||||
| func newMultiaddr(t *testing.T, s string) ma.Multiaddr { | ||||
|   | ||||
| @@ -13,8 +13,8 @@ import ( | ||||
| 	testutil "util/testutil" | ||||
| 	ci "util/testutil/ci" | ||||
|  | ||||
| 	ma "QmaA6aDzeHjZiuqBtgYRz8ZXb1qMCoyMHgyDjBEYQniUKF/go-multiaddr" | ||||
| 	manet "QmanZCL6SXRfafiUEMCBLq2QR171uQSdXQ8YAdHXLd8Cwr/go-multiaddr-net" | ||||
| 	manet "QmU5s159q8cZuM1f9Vqti4LHu6y8zyVc5dxv2py81sdp6Q/go-multiaddr-net" | ||||
| 	ma "QmbWxL1aXQhBjc1XGjGF1f2KGBMCBYSuT2ThA8YXnXJK83/go-multiaddr" | ||||
| 	context "golang.org/x/net/context" | ||||
| ) | ||||
|  | ||||
|   | ||||
| @@ -5,7 +5,7 @@ import ( | ||||
|  | ||||
| 	peer "github.com/ipfs/go-libp2p/p2p/peer" | ||||
|  | ||||
| 	ma "QmaA6aDzeHjZiuqBtgYRz8ZXb1qMCoyMHgyDjBEYQniUKF/go-multiaddr" | ||||
| 	ma "QmbWxL1aXQhBjc1XGjGF1f2KGBMCBYSuT2ThA8YXnXJK83/go-multiaddr" | ||||
| 	context "golang.org/x/net/context" | ||||
| ) | ||||
|  | ||||
|   | ||||
| @@ -9,7 +9,7 @@ import ( | ||||
| 	peer "github.com/ipfs/go-libp2p/p2p/peer" | ||||
| 	ci "util/testutil/ci" | ||||
|  | ||||
| 	ma "QmaA6aDzeHjZiuqBtgYRz8ZXb1qMCoyMHgyDjBEYQniUKF/go-multiaddr" | ||||
| 	ma "QmbWxL1aXQhBjc1XGjGF1f2KGBMCBYSuT2ThA8YXnXJK83/go-multiaddr" | ||||
| 	context "golang.org/x/net/context" | ||||
| ) | ||||
|  | ||||
|   | ||||
| @@ -16,8 +16,8 @@ import ( | ||||
| 	transport "github.com/ipfs/go-libp2p/p2p/net/transport" | ||||
| 	peer "github.com/ipfs/go-libp2p/p2p/peer" | ||||
|  | ||||
| 	mafilter "QmVdADza4QFVAR9xqAxRQjt9vTZJ6UrVLgBstKua1Xg7he/multiaddr-filter" | ||||
| 	ma "QmaA6aDzeHjZiuqBtgYRz8ZXb1qMCoyMHgyDjBEYQniUKF/go-multiaddr" | ||||
| 	mafilter "QmYWqTn1i8yv9QRDzGPJ2yRudKzYCaC5Aqasbm8vwaG92E/multiaddr-filter" | ||||
| 	ma "QmbWxL1aXQhBjc1XGjGF1f2KGBMCBYSuT2ThA8YXnXJK83/go-multiaddr" | ||||
| 	ps "github.com/jbenet/go-peerstream" | ||||
| 	pst "github.com/jbenet/go-stream-muxer" | ||||
| 	psmss "github.com/jbenet/go-stream-muxer/multistream" | ||||
|   | ||||
| @@ -4,7 +4,7 @@ import ( | ||||
| 	conn "github.com/ipfs/go-libp2p/p2p/net/conn" | ||||
| 	addrutil "github.com/ipfs/go-libp2p/p2p/net/swarm/addr" | ||||
|  | ||||
| 	ma "QmaA6aDzeHjZiuqBtgYRz8ZXb1qMCoyMHgyDjBEYQniUKF/go-multiaddr" | ||||
| 	ma "QmbWxL1aXQhBjc1XGjGF1f2KGBMCBYSuT2ThA8YXnXJK83/go-multiaddr" | ||||
| ) | ||||
|  | ||||
| // ListenAddresses returns a list of addresses at which this swarm listens. | ||||
|   | ||||
| @@ -8,7 +8,7 @@ import ( | ||||
| 	peer "github.com/ipfs/go-libp2p/p2p/peer" | ||||
| 	testutil "util/testutil" | ||||
|  | ||||
| 	ma "QmaA6aDzeHjZiuqBtgYRz8ZXb1qMCoyMHgyDjBEYQniUKF/go-multiaddr" | ||||
| 	ma "QmbWxL1aXQhBjc1XGjGF1f2KGBMCBYSuT2ThA8YXnXJK83/go-multiaddr" | ||||
| 	context "golang.org/x/net/context" | ||||
| ) | ||||
|  | ||||
|   | ||||
| @@ -8,7 +8,7 @@ import ( | ||||
| 	conn "github.com/ipfs/go-libp2p/p2p/net/conn" | ||||
| 	peer "github.com/ipfs/go-libp2p/p2p/peer" | ||||
|  | ||||
| 	ma "QmaA6aDzeHjZiuqBtgYRz8ZXb1qMCoyMHgyDjBEYQniUKF/go-multiaddr" | ||||
| 	ma "QmbWxL1aXQhBjc1XGjGF1f2KGBMCBYSuT2ThA8YXnXJK83/go-multiaddr" | ||||
| 	ps "github.com/jbenet/go-peerstream" | ||||
| 	context "golang.org/x/net/context" | ||||
| ) | ||||
|   | ||||
| @@ -8,13 +8,13 @@ import ( | ||||
| 	"sync" | ||||
| 	"time" | ||||
|  | ||||
| 	"QmanZCL6SXRfafiUEMCBLq2QR171uQSdXQ8YAdHXLd8Cwr/go-multiaddr-net" | ||||
| 	"QmU5s159q8cZuM1f9Vqti4LHu6y8zyVc5dxv2py81sdp6Q/go-multiaddr-net" | ||||
| 	conn "github.com/ipfs/go-libp2p/p2p/net/conn" | ||||
| 	addrutil "github.com/ipfs/go-libp2p/p2p/net/swarm/addr" | ||||
| 	peer "github.com/ipfs/go-libp2p/p2p/peer" | ||||
| 	lgbl "util/eventlog/loggables" | ||||
|  | ||||
| 	ma "QmaA6aDzeHjZiuqBtgYRz8ZXb1qMCoyMHgyDjBEYQniUKF/go-multiaddr" | ||||
| 	ma "QmbWxL1aXQhBjc1XGjGF1f2KGBMCBYSuT2ThA8YXnXJK83/go-multiaddr" | ||||
| 	context "golang.org/x/net/context" | ||||
| ) | ||||
|  | ||||
|   | ||||
| @@ -9,7 +9,7 @@ import ( | ||||
| 	transport "github.com/ipfs/go-libp2p/p2p/net/transport" | ||||
| 	lgbl "util/eventlog/loggables" | ||||
|  | ||||
| 	ma "QmaA6aDzeHjZiuqBtgYRz8ZXb1qMCoyMHgyDjBEYQniUKF/go-multiaddr" | ||||
| 	ma "QmbWxL1aXQhBjc1XGjGF1f2KGBMCBYSuT2ThA8YXnXJK83/go-multiaddr" | ||||
| 	ps "github.com/jbenet/go-peerstream" | ||||
| 	context "golang.org/x/net/context" | ||||
| ) | ||||
|   | ||||
| @@ -8,7 +8,7 @@ import ( | ||||
| 	metrics "github.com/ipfs/go-libp2p/p2p/metrics" | ||||
| 	inet "github.com/ipfs/go-libp2p/p2p/net" | ||||
|  | ||||
| 	ma "QmaA6aDzeHjZiuqBtgYRz8ZXb1qMCoyMHgyDjBEYQniUKF/go-multiaddr" | ||||
| 	ma "QmbWxL1aXQhBjc1XGjGF1f2KGBMCBYSuT2ThA8YXnXJK83/go-multiaddr" | ||||
| 	"github.com/jbenet/goprocess" | ||||
| 	context "golang.org/x/net/context" | ||||
| ) | ||||
|   | ||||
| @@ -4,7 +4,7 @@ import ( | ||||
| 	"testing" | ||||
| 	"time" | ||||
|  | ||||
| 	ma "QmaA6aDzeHjZiuqBtgYRz8ZXb1qMCoyMHgyDjBEYQniUKF/go-multiaddr" | ||||
| 	ma "QmbWxL1aXQhBjc1XGjGF1f2KGBMCBYSuT2ThA8YXnXJK83/go-multiaddr" | ||||
| 	context "golang.org/x/net/context" | ||||
|  | ||||
| 	inet "github.com/ipfs/go-libp2p/p2p/net" | ||||
|   | ||||
| @@ -14,7 +14,7 @@ import ( | ||||
| 	peer "github.com/ipfs/go-libp2p/p2p/peer" | ||||
| 	testutil "util/testutil" | ||||
|  | ||||
| 	ma "QmaA6aDzeHjZiuqBtgYRz8ZXb1qMCoyMHgyDjBEYQniUKF/go-multiaddr" | ||||
| 	ma "QmbWxL1aXQhBjc1XGjGF1f2KGBMCBYSuT2ThA8YXnXJK83/go-multiaddr" | ||||
| 	context "golang.org/x/net/context" | ||||
| ) | ||||
|  | ||||
|   | ||||
| @@ -6,8 +6,8 @@ import ( | ||||
| 	"sync" | ||||
| 	"time" | ||||
|  | ||||
| 	ma "QmaA6aDzeHjZiuqBtgYRz8ZXb1qMCoyMHgyDjBEYQniUKF/go-multiaddr" | ||||
| 	manet "QmanZCL6SXRfafiUEMCBLq2QR171uQSdXQ8YAdHXLd8Cwr/go-multiaddr-net" | ||||
| 	manet "QmU5s159q8cZuM1f9Vqti4LHu6y8zyVc5dxv2py81sdp6Q/go-multiaddr-net" | ||||
| 	ma "QmbWxL1aXQhBjc1XGjGF1f2KGBMCBYSuT2ThA8YXnXJK83/go-multiaddr" | ||||
| 	reuseport "github.com/jbenet/go-reuseport" | ||||
| 	context "golang.org/x/net/context" | ||||
| 	lgbl "util/eventlog/loggables" | ||||
|   | ||||
| @@ -4,9 +4,9 @@ import ( | ||||
| 	"net" | ||||
| 	"time" | ||||
|  | ||||
| 	manet "QmU5s159q8cZuM1f9Vqti4LHu6y8zyVc5dxv2py81sdp6Q/go-multiaddr-net" | ||||
| 	logging "QmWRypnfEwrgH4k93KEHN5hng7VjKYkWmzDYRuTZeh2Mgh/go-log" | ||||
| 	ma "QmaA6aDzeHjZiuqBtgYRz8ZXb1qMCoyMHgyDjBEYQniUKF/go-multiaddr" | ||||
| 	manet "QmanZCL6SXRfafiUEMCBLq2QR171uQSdXQ8YAdHXLd8Cwr/go-multiaddr-net" | ||||
| 	ma "QmbWxL1aXQhBjc1XGjGF1f2KGBMCBYSuT2ThA8YXnXJK83/go-multiaddr" | ||||
| ) | ||||
|  | ||||
| var log = logging.Logger("transport") | ||||
|   | ||||
| @@ -2,7 +2,7 @@ | ||||
| package addr | ||||
|  | ||||
| import ( | ||||
| 	ma "QmaA6aDzeHjZiuqBtgYRz8ZXb1qMCoyMHgyDjBEYQniUKF/go-multiaddr" | ||||
| 	ma "QmbWxL1aXQhBjc1XGjGF1f2KGBMCBYSuT2ThA8YXnXJK83/go-multiaddr" | ||||
| ) | ||||
|  | ||||
| // AddrSource is a source of addresses. It allows clients to retrieve | ||||
|   | ||||
| @@ -4,7 +4,7 @@ import ( | ||||
| 	"fmt" | ||||
| 	"testing" | ||||
|  | ||||
| 	ma "QmaA6aDzeHjZiuqBtgYRz8ZXb1qMCoyMHgyDjBEYQniUKF/go-multiaddr" | ||||
| 	ma "QmbWxL1aXQhBjc1XGjGF1f2KGBMCBYSuT2ThA8YXnXJK83/go-multiaddr" | ||||
| ) | ||||
|  | ||||
| func newAddrOrFatal(t *testing.T, s string) ma.Multiaddr { | ||||
|   | ||||
| @@ -4,7 +4,7 @@ import ( | ||||
| 	"sync" | ||||
| 	"time" | ||||
|  | ||||
| 	ma "QmaA6aDzeHjZiuqBtgYRz8ZXb1qMCoyMHgyDjBEYQniUKF/go-multiaddr" | ||||
| 	ma "QmbWxL1aXQhBjc1XGjGF1f2KGBMCBYSuT2ThA8YXnXJK83/go-multiaddr" | ||||
| ) | ||||
|  | ||||
| const ( | ||||
|   | ||||
| @@ -4,7 +4,7 @@ import ( | ||||
| 	"testing" | ||||
| 	"time" | ||||
|  | ||||
| 	ma "QmaA6aDzeHjZiuqBtgYRz8ZXb1qMCoyMHgyDjBEYQniUKF/go-multiaddr" | ||||
| 	ma "QmbWxL1aXQhBjc1XGjGF1f2KGBMCBYSuT2ThA8YXnXJK83/go-multiaddr" | ||||
| ) | ||||
|  | ||||
| func IDS(t *testing.T, ids string) ID { | ||||
|   | ||||
| @@ -8,7 +8,7 @@ import ( | ||||
| 	"strings" | ||||
|  | ||||
| 	b58 "QmNsoHoCVhgXcv1Yg45jtkMgimxorTAN36fV9AQMFXHHAQ/go-base58" | ||||
| 	ma "QmaA6aDzeHjZiuqBtgYRz8ZXb1qMCoyMHgyDjBEYQniUKF/go-multiaddr" | ||||
| 	ma "QmbWxL1aXQhBjc1XGjGF1f2KGBMCBYSuT2ThA8YXnXJK83/go-multiaddr" | ||||
| 	mh "QmdeauTdyf38KDQB4Cc4CurPWRRb5pej27NCXPA7kbPTJy/go-multihash" | ||||
|  | ||||
| 	logging "QmWRypnfEwrgH4k93KEHN5hng7VjKYkWmzDYRuTZeh2Mgh/go-log" | ||||
|   | ||||
| @@ -7,7 +7,7 @@ import ( | ||||
|  | ||||
| 	ic "github.com/ipfs/go-libp2p/p2p/crypto" | ||||
|  | ||||
| 	ma "QmaA6aDzeHjZiuqBtgYRz8ZXb1qMCoyMHgyDjBEYQniUKF/go-multiaddr" | ||||
| 	ma "QmbWxL1aXQhBjc1XGjGF1f2KGBMCBYSuT2ThA8YXnXJK83/go-multiaddr" | ||||
| 	ds "github.com/jbenet/go-datastore" | ||||
| 	dssync "github.com/jbenet/go-datastore/sync" | ||||
| ) | ||||
|   | ||||
| @@ -4,7 +4,7 @@ import ( | ||||
| 	"strings" | ||||
| 	"sync" | ||||
|  | ||||
| 	ma "QmaA6aDzeHjZiuqBtgYRz8ZXb1qMCoyMHgyDjBEYQniUKF/go-multiaddr" | ||||
| 	ma "QmbWxL1aXQhBjc1XGjGF1f2KGBMCBYSuT2ThA8YXnXJK83/go-multiaddr" | ||||
| 	ggio "QmfH4HuZyN1p2wQLWWkXC91Z76435xKrBVfLQ2MY8ayG5R/gogo-protobuf/io" | ||||
| 	semver "github.com/coreos/go-semver/semver" | ||||
| 	msmux "github.com/whyrusleeping/go-multistream" | ||||
|   | ||||
| @@ -9,7 +9,7 @@ import ( | ||||
| 	identify "github.com/ipfs/go-libp2p/p2p/protocol/identify" | ||||
| 	testutil "github.com/ipfs/go-libp2p/p2p/test/util" | ||||
|  | ||||
| 	ma "QmaA6aDzeHjZiuqBtgYRz8ZXb1qMCoyMHgyDjBEYQniUKF/go-multiaddr" | ||||
| 	ma "QmbWxL1aXQhBjc1XGjGF1f2KGBMCBYSuT2ThA8YXnXJK83/go-multiaddr" | ||||
| 	context "golang.org/x/net/context" | ||||
| ) | ||||
|  | ||||
|   | ||||
| @@ -6,7 +6,7 @@ import ( | ||||
|  | ||||
| 	peer "github.com/ipfs/go-libp2p/p2p/peer" | ||||
|  | ||||
| 	ma "QmaA6aDzeHjZiuqBtgYRz8ZXb1qMCoyMHgyDjBEYQniUKF/go-multiaddr" | ||||
| 	ma "QmbWxL1aXQhBjc1XGjGF1f2KGBMCBYSuT2ThA8YXnXJK83/go-multiaddr" | ||||
| ) | ||||
|  | ||||
| // ObservedAddr is an entry for an address reported by our peers. | ||||
|   | ||||
| @@ -4,7 +4,7 @@ import ( | ||||
| 	"testing" | ||||
| 	"time" | ||||
|  | ||||
| 	ma "QmaA6aDzeHjZiuqBtgYRz8ZXb1qMCoyMHgyDjBEYQniUKF/go-multiaddr" | ||||
| 	ma "QmbWxL1aXQhBjc1XGjGF1f2KGBMCBYSuT2ThA8YXnXJK83/go-multiaddr" | ||||
| ) | ||||
|  | ||||
| // TestObsAddrSet | ||||
|   | ||||
| @@ -12,7 +12,7 @@ import ( | ||||
| 	ic "github.com/ipfs/go-libp2p/p2p/crypto" | ||||
| 	peer "github.com/ipfs/go-libp2p/p2p/peer" | ||||
|  | ||||
| 	ma "QmaA6aDzeHjZiuqBtgYRz8ZXb1qMCoyMHgyDjBEYQniUKF/go-multiaddr" | ||||
| 	ma "QmbWxL1aXQhBjc1XGjGF1f2KGBMCBYSuT2ThA8YXnXJK83/go-multiaddr" | ||||
| ) | ||||
|  | ||||
| var log = logging.Logger("boguskey") | ||||
|   | ||||
| @@ -10,7 +10,7 @@ import ( | ||||
| 	peer "github.com/ipfs/go-libp2p/p2p/peer" | ||||
| 	tu "util/testutil" | ||||
|  | ||||
| 	ma "QmaA6aDzeHjZiuqBtgYRz8ZXb1qMCoyMHgyDjBEYQniUKF/go-multiaddr" | ||||
| 	ma "QmbWxL1aXQhBjc1XGjGF1f2KGBMCBYSuT2ThA8YXnXJK83/go-multiaddr" | ||||
| 	context "golang.org/x/net/context" | ||||
| ) | ||||
|  | ||||
|   | ||||
| @@ -15,12 +15,12 @@ | ||||
|     }, | ||||
|     { | ||||
|       "name": "go-multiaddr-net", | ||||
|       "hash": "QmanZCL6SXRfafiUEMCBLq2QR171uQSdXQ8YAdHXLd8Cwr", | ||||
|       "hash": "QmU5s159q8cZuM1f9Vqti4LHu6y8zyVc5dxv2py81sdp6Q", | ||||
|       "version": "1.0.0" | ||||
|     }, | ||||
|     { | ||||
|       "name": "multiaddr-filter", | ||||
|       "hash": "QmVdADza4QFVAR9xqAxRQjt9vTZJ6UrVLgBstKua1Xg7he", | ||||
|       "hash": "QmYWqTn1i8yv9QRDzGPJ2yRudKzYCaC5Aqasbm8vwaG92E", | ||||
|       "version": "1.0.0" | ||||
|     }, | ||||
|     { | ||||
|   | ||||
							
								
								
									
										66
									
								
								vendor/QmSQRViqskLPYFbjKhWE5EaW8eou9SD2j52QaBkQdigMsG/crypto-sha3/doc.go
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								vendor/QmSQRViqskLPYFbjKhWE5EaW8eou9SD2j52QaBkQdigMsG/crypto-sha3/doc.go
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,66 @@ | ||||
| // 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 implements the SHA-3 fixed-output-length hash functions and | ||||
| // the SHAKE variable-output-length hash functions defined by FIPS-202. | ||||
| // | ||||
| // Both types of hash function use the "sponge" construction and the Keccak | ||||
| // permutation. For a detailed specification see http://keccak.noekeon.org/ | ||||
| // | ||||
| // | ||||
| // Guidance | ||||
| // | ||||
| // If you aren't sure what function you need, use SHAKE256 with at least 64 | ||||
| // bytes of output. The SHAKE instances are faster than the SHA3 instances; | ||||
| // the latter have to allocate memory to conform to the hash.Hash interface. | ||||
| // | ||||
| // If you need a secret-key MAC (message authentication code), prepend the | ||||
| // secret key to the input, hash with SHAKE256 and read at least 32 bytes of | ||||
| // output. | ||||
| // | ||||
| // | ||||
| // Security strengths | ||||
| // | ||||
| // The SHA3-x (x equals 224, 256, 384, or 512) functions have a security | ||||
| // strength against preimage attacks of x bits. Since they only produce "x" | ||||
| // bits of output, their collision-resistance is only "x/2" bits. | ||||
| // | ||||
| // The SHAKE-256 and -128 functions have a generic security strength of 256 and | ||||
| // 128 bits against all attacks, provided that at least 2x bits of their output | ||||
| // is used.  Requesting more than 64 or 32 bytes of output, respectively, does | ||||
| // not increase the collision-resistance of the SHAKE functions. | ||||
| // | ||||
| // | ||||
| // The sponge construction | ||||
| // | ||||
| // A sponge builds a pseudo-random function from a public pseudo-random | ||||
| // permutation, by applying the permutation to a state of "rate + capacity" | ||||
| // bytes, but hiding "capacity" of the bytes. | ||||
| // | ||||
| // A sponge starts out with a zero state. To hash an input using a sponge, up | ||||
| // to "rate" bytes of the input are XORed into the sponge's state. The sponge | ||||
| // 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. | ||||
| // The digest is "squeezed" from the sponge in the same way, except that output | ||||
| // output is copied out instead of input being XORed in. | ||||
| // | ||||
| // 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. | ||||
| // Since the KeccakF-1600 permutation is 1600 bits (200 bytes) wide, this means | ||||
| // that the security strength of a sponge instance is equal to (1600 - bitrate) / 2. | ||||
| // | ||||
| // | ||||
| // Recommendations | ||||
| // | ||||
| // The SHAKE functions are recommended for most new uses. They can produce | ||||
| // output of arbitrary length. SHAKE256, with an output length of at least | ||||
| // 64 bytes, provides 256-bit security against all attacks.  The Keccak team | ||||
| // recommends it for most applications upgrading from SHA2-512. (NIST chose a | ||||
| // much stronger, but much slower, sponge instance for SHA3-512.) | ||||
| // | ||||
| // The SHA-3 functions are "drop-in" replacements for the SHA-2 functions. | ||||
| // They produce output of the same length, with the same security strengths | ||||
| // against all attacks. This means, in particular, that SHA3-256 only has | ||||
| // 128-bit collision resistance, because its output length is 32 bytes. | ||||
| package sha3 | ||||
							
								
								
									
										65
									
								
								vendor/QmSQRViqskLPYFbjKhWE5EaW8eou9SD2j52QaBkQdigMsG/crypto-sha3/hashes.go
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								vendor/QmSQRViqskLPYFbjKhWE5EaW8eou9SD2j52QaBkQdigMsG/crypto-sha3/hashes.go
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,65 @@ | ||||
| // 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 | ||||
|  | ||||
| // This file provides functions for creating instances of the SHA-3 | ||||
| // and SHAKE hash functions, as well as utility functions for hashing | ||||
| // bytes. | ||||
|  | ||||
| import ( | ||||
| 	"hash" | ||||
| ) | ||||
|  | ||||
| // New224 creates a new SHA3-224 hash. | ||||
| // Its generic security strength is 224 bits against preimage attacks, | ||||
| // and 112 bits against collision attacks. | ||||
| func New224() hash.Hash { return &state{rate: 144, outputLen: 28, dsbyte: 0x06} } | ||||
|  | ||||
| // New256 creates a new SHA3-256 hash. | ||||
| // Its generic security strength is 256 bits against preimage attacks, | ||||
| // and 128 bits against collision attacks. | ||||
| func New256() hash.Hash { return &state{rate: 136, outputLen: 32, dsbyte: 0x06} } | ||||
|  | ||||
| // New384 creates a new SHA3-384 hash. | ||||
| // Its generic security strength is 384 bits against preimage attacks, | ||||
| // and 192 bits against collision attacks. | ||||
| func New384() hash.Hash { return &state{rate: 104, outputLen: 48, dsbyte: 0x06} } | ||||
|  | ||||
| // New512 creates a new SHA3-512 hash. | ||||
| // Its generic security strength is 512 bits against preimage attacks, | ||||
| // and 256 bits against collision attacks. | ||||
| func New512() hash.Hash { return &state{rate: 72, outputLen: 64, dsbyte: 0x06} } | ||||
|  | ||||
| // Sum224 returns the SHA3-224 digest of the data. | ||||
| func Sum224(data []byte) (digest [28]byte) { | ||||
| 	h := New224() | ||||
| 	h.Write(data) | ||||
| 	h.Sum(digest[:0]) | ||||
| 	return | ||||
| } | ||||
|  | ||||
| // Sum256 returns the SHA3-256 digest of the data. | ||||
| func Sum256(data []byte) (digest [32]byte) { | ||||
| 	h := New256() | ||||
| 	h.Write(data) | ||||
| 	h.Sum(digest[:0]) | ||||
| 	return | ||||
| } | ||||
|  | ||||
| // Sum384 returns the SHA3-384 digest of the data. | ||||
| func Sum384(data []byte) (digest [48]byte) { | ||||
| 	h := New384() | ||||
| 	h.Write(data) | ||||
| 	h.Sum(digest[:0]) | ||||
| 	return | ||||
| } | ||||
|  | ||||
| // Sum512 returns the SHA3-512 digest of the data. | ||||
| func Sum512(data []byte) (digest [64]byte) { | ||||
| 	h := New512() | ||||
| 	h.Write(data) | ||||
| 	h.Sum(digest[:0]) | ||||
| 	return | ||||
| } | ||||
							
								
								
									
										410
									
								
								vendor/QmSQRViqskLPYFbjKhWE5EaW8eou9SD2j52QaBkQdigMsG/crypto-sha3/keccakf.go
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										410
									
								
								vendor/QmSQRViqskLPYFbjKhWE5EaW8eou9SD2j52QaBkQdigMsG/crypto-sha3/keccakf.go
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,410 @@ | ||||
| // 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 | ||||
|  | ||||
| // rc stores the round constants for use in the ι step. | ||||
| var rc = [24]uint64{ | ||||
| 	0x0000000000000001, | ||||
| 	0x0000000000008082, | ||||
| 	0x800000000000808A, | ||||
| 	0x8000000080008000, | ||||
| 	0x000000000000808B, | ||||
| 	0x0000000080000001, | ||||
| 	0x8000000080008081, | ||||
| 	0x8000000000008009, | ||||
| 	0x000000000000008A, | ||||
| 	0x0000000000000088, | ||||
| 	0x0000000080008009, | ||||
| 	0x000000008000000A, | ||||
| 	0x000000008000808B, | ||||
| 	0x800000000000008B, | ||||
| 	0x8000000000008089, | ||||
| 	0x8000000000008003, | ||||
| 	0x8000000000008002, | ||||
| 	0x8000000000000080, | ||||
| 	0x000000000000800A, | ||||
| 	0x800000008000000A, | ||||
| 	0x8000000080008081, | ||||
| 	0x8000000000008080, | ||||
| 	0x0000000080000001, | ||||
| 	0x8000000080008008, | ||||
| } | ||||
|  | ||||
| // keccakF1600 applies the Keccak permutation to a 1600b-wide | ||||
| // state represented as a slice of 25 uint64s. | ||||
| func keccakF1600(a *[25]uint64) { | ||||
| 	// Implementation translated from Keccak-inplace.c | ||||
| 	// in the keccak reference code. | ||||
| 	var t, bc0, bc1, bc2, bc3, bc4, d0, d1, d2, d3, d4 uint64 | ||||
|  | ||||
| 	for i := 0; i < 24; i += 4 { | ||||
| 		// Combines the 5 steps in each round into 2 steps. | ||||
| 		// Unrolls 4 rounds per loop and spreads some steps across rounds. | ||||
|  | ||||
| 		// Round 1 | ||||
| 		bc0 = a[0] ^ a[5] ^ a[10] ^ a[15] ^ a[20] | ||||
| 		bc1 = a[1] ^ a[6] ^ a[11] ^ a[16] ^ a[21] | ||||
| 		bc2 = a[2] ^ a[7] ^ a[12] ^ a[17] ^ a[22] | ||||
| 		bc3 = a[3] ^ a[8] ^ a[13] ^ a[18] ^ a[23] | ||||
| 		bc4 = a[4] ^ a[9] ^ a[14] ^ a[19] ^ a[24] | ||||
| 		d0 = bc4 ^ (bc1<<1 | bc1>>63) | ||||
| 		d1 = bc0 ^ (bc2<<1 | bc2>>63) | ||||
| 		d2 = bc1 ^ (bc3<<1 | bc3>>63) | ||||
| 		d3 = bc2 ^ (bc4<<1 | bc4>>63) | ||||
| 		d4 = bc3 ^ (bc0<<1 | bc0>>63) | ||||
|  | ||||
| 		bc0 = a[0] ^ d0 | ||||
| 		t = a[6] ^ d1 | ||||
| 		bc1 = t<<44 | t>>(64-44) | ||||
| 		t = a[12] ^ d2 | ||||
| 		bc2 = t<<43 | t>>(64-43) | ||||
| 		t = a[18] ^ d3 | ||||
| 		bc3 = t<<21 | t>>(64-21) | ||||
| 		t = a[24] ^ d4 | ||||
| 		bc4 = t<<14 | t>>(64-14) | ||||
| 		a[0] = bc0 ^ (bc2 &^ bc1) ^ rc[i] | ||||
| 		a[6] = bc1 ^ (bc3 &^ bc2) | ||||
| 		a[12] = bc2 ^ (bc4 &^ bc3) | ||||
| 		a[18] = bc3 ^ (bc0 &^ bc4) | ||||
| 		a[24] = bc4 ^ (bc1 &^ bc0) | ||||
|  | ||||
| 		t = a[10] ^ d0 | ||||
| 		bc2 = t<<3 | t>>(64-3) | ||||
| 		t = a[16] ^ d1 | ||||
| 		bc3 = t<<45 | t>>(64-45) | ||||
| 		t = a[22] ^ d2 | ||||
| 		bc4 = t<<61 | t>>(64-61) | ||||
| 		t = a[3] ^ d3 | ||||
| 		bc0 = t<<28 | t>>(64-28) | ||||
| 		t = a[9] ^ d4 | ||||
| 		bc1 = t<<20 | t>>(64-20) | ||||
| 		a[10] = bc0 ^ (bc2 &^ bc1) | ||||
| 		a[16] = bc1 ^ (bc3 &^ bc2) | ||||
| 		a[22] = bc2 ^ (bc4 &^ bc3) | ||||
| 		a[3] = bc3 ^ (bc0 &^ bc4) | ||||
| 		a[9] = bc4 ^ (bc1 &^ bc0) | ||||
|  | ||||
| 		t = a[20] ^ d0 | ||||
| 		bc4 = t<<18 | t>>(64-18) | ||||
| 		t = a[1] ^ d1 | ||||
| 		bc0 = t<<1 | t>>(64-1) | ||||
| 		t = a[7] ^ d2 | ||||
| 		bc1 = t<<6 | t>>(64-6) | ||||
| 		t = a[13] ^ d3 | ||||
| 		bc2 = t<<25 | t>>(64-25) | ||||
| 		t = a[19] ^ d4 | ||||
| 		bc3 = t<<8 | t>>(64-8) | ||||
| 		a[20] = bc0 ^ (bc2 &^ bc1) | ||||
| 		a[1] = bc1 ^ (bc3 &^ bc2) | ||||
| 		a[7] = bc2 ^ (bc4 &^ bc3) | ||||
| 		a[13] = bc3 ^ (bc0 &^ bc4) | ||||
| 		a[19] = bc4 ^ (bc1 &^ bc0) | ||||
|  | ||||
| 		t = a[5] ^ d0 | ||||
| 		bc1 = t<<36 | t>>(64-36) | ||||
| 		t = a[11] ^ d1 | ||||
| 		bc2 = t<<10 | t>>(64-10) | ||||
| 		t = a[17] ^ d2 | ||||
| 		bc3 = t<<15 | t>>(64-15) | ||||
| 		t = a[23] ^ d3 | ||||
| 		bc4 = t<<56 | t>>(64-56) | ||||
| 		t = a[4] ^ d4 | ||||
| 		bc0 = t<<27 | t>>(64-27) | ||||
| 		a[5] = bc0 ^ (bc2 &^ bc1) | ||||
| 		a[11] = bc1 ^ (bc3 &^ bc2) | ||||
| 		a[17] = bc2 ^ (bc4 &^ bc3) | ||||
| 		a[23] = bc3 ^ (bc0 &^ bc4) | ||||
| 		a[4] = bc4 ^ (bc1 &^ bc0) | ||||
|  | ||||
| 		t = a[15] ^ d0 | ||||
| 		bc3 = t<<41 | t>>(64-41) | ||||
| 		t = a[21] ^ d1 | ||||
| 		bc4 = t<<2 | t>>(64-2) | ||||
| 		t = a[2] ^ d2 | ||||
| 		bc0 = t<<62 | t>>(64-62) | ||||
| 		t = a[8] ^ d3 | ||||
| 		bc1 = t<<55 | t>>(64-55) | ||||
| 		t = a[14] ^ d4 | ||||
| 		bc2 = t<<39 | t>>(64-39) | ||||
| 		a[15] = bc0 ^ (bc2 &^ bc1) | ||||
| 		a[21] = bc1 ^ (bc3 &^ bc2) | ||||
| 		a[2] = bc2 ^ (bc4 &^ bc3) | ||||
| 		a[8] = bc3 ^ (bc0 &^ bc4) | ||||
| 		a[14] = bc4 ^ (bc1 &^ bc0) | ||||
|  | ||||
| 		// Round 2 | ||||
| 		bc0 = a[0] ^ a[5] ^ a[10] ^ a[15] ^ a[20] | ||||
| 		bc1 = a[1] ^ a[6] ^ a[11] ^ a[16] ^ a[21] | ||||
| 		bc2 = a[2] ^ a[7] ^ a[12] ^ a[17] ^ a[22] | ||||
| 		bc3 = a[3] ^ a[8] ^ a[13] ^ a[18] ^ a[23] | ||||
| 		bc4 = a[4] ^ a[9] ^ a[14] ^ a[19] ^ a[24] | ||||
| 		d0 = bc4 ^ (bc1<<1 | bc1>>63) | ||||
| 		d1 = bc0 ^ (bc2<<1 | bc2>>63) | ||||
| 		d2 = bc1 ^ (bc3<<1 | bc3>>63) | ||||
| 		d3 = bc2 ^ (bc4<<1 | bc4>>63) | ||||
| 		d4 = bc3 ^ (bc0<<1 | bc0>>63) | ||||
|  | ||||
| 		bc0 = a[0] ^ d0 | ||||
| 		t = a[16] ^ d1 | ||||
| 		bc1 = t<<44 | t>>(64-44) | ||||
| 		t = a[7] ^ d2 | ||||
| 		bc2 = t<<43 | t>>(64-43) | ||||
| 		t = a[23] ^ d3 | ||||
| 		bc3 = t<<21 | t>>(64-21) | ||||
| 		t = a[14] ^ d4 | ||||
| 		bc4 = t<<14 | t>>(64-14) | ||||
| 		a[0] = bc0 ^ (bc2 &^ bc1) ^ rc[i+1] | ||||
| 		a[16] = bc1 ^ (bc3 &^ bc2) | ||||
| 		a[7] = bc2 ^ (bc4 &^ bc3) | ||||
| 		a[23] = bc3 ^ (bc0 &^ bc4) | ||||
| 		a[14] = bc4 ^ (bc1 &^ bc0) | ||||
|  | ||||
| 		t = a[20] ^ d0 | ||||
| 		bc2 = t<<3 | t>>(64-3) | ||||
| 		t = a[11] ^ d1 | ||||
| 		bc3 = t<<45 | t>>(64-45) | ||||
| 		t = a[2] ^ d2 | ||||
| 		bc4 = t<<61 | t>>(64-61) | ||||
| 		t = a[18] ^ d3 | ||||
| 		bc0 = t<<28 | t>>(64-28) | ||||
| 		t = a[9] ^ d4 | ||||
| 		bc1 = t<<20 | t>>(64-20) | ||||
| 		a[20] = bc0 ^ (bc2 &^ bc1) | ||||
| 		a[11] = bc1 ^ (bc3 &^ bc2) | ||||
| 		a[2] = bc2 ^ (bc4 &^ bc3) | ||||
| 		a[18] = bc3 ^ (bc0 &^ bc4) | ||||
| 		a[9] = bc4 ^ (bc1 &^ bc0) | ||||
|  | ||||
| 		t = a[15] ^ d0 | ||||
| 		bc4 = t<<18 | t>>(64-18) | ||||
| 		t = a[6] ^ d1 | ||||
| 		bc0 = t<<1 | t>>(64-1) | ||||
| 		t = a[22] ^ d2 | ||||
| 		bc1 = t<<6 | t>>(64-6) | ||||
| 		t = a[13] ^ d3 | ||||
| 		bc2 = t<<25 | t>>(64-25) | ||||
| 		t = a[4] ^ d4 | ||||
| 		bc3 = t<<8 | t>>(64-8) | ||||
| 		a[15] = bc0 ^ (bc2 &^ bc1) | ||||
| 		a[6] = bc1 ^ (bc3 &^ bc2) | ||||
| 		a[22] = bc2 ^ (bc4 &^ bc3) | ||||
| 		a[13] = bc3 ^ (bc0 &^ bc4) | ||||
| 		a[4] = bc4 ^ (bc1 &^ bc0) | ||||
|  | ||||
| 		t = a[10] ^ d0 | ||||
| 		bc1 = t<<36 | t>>(64-36) | ||||
| 		t = a[1] ^ d1 | ||||
| 		bc2 = t<<10 | t>>(64-10) | ||||
| 		t = a[17] ^ d2 | ||||
| 		bc3 = t<<15 | t>>(64-15) | ||||
| 		t = a[8] ^ d3 | ||||
| 		bc4 = t<<56 | t>>(64-56) | ||||
| 		t = a[24] ^ d4 | ||||
| 		bc0 = t<<27 | t>>(64-27) | ||||
| 		a[10] = bc0 ^ (bc2 &^ bc1) | ||||
| 		a[1] = bc1 ^ (bc3 &^ bc2) | ||||
| 		a[17] = bc2 ^ (bc4 &^ bc3) | ||||
| 		a[8] = bc3 ^ (bc0 &^ bc4) | ||||
| 		a[24] = bc4 ^ (bc1 &^ bc0) | ||||
|  | ||||
| 		t = a[5] ^ d0 | ||||
| 		bc3 = t<<41 | t>>(64-41) | ||||
| 		t = a[21] ^ d1 | ||||
| 		bc4 = t<<2 | t>>(64-2) | ||||
| 		t = a[12] ^ d2 | ||||
| 		bc0 = t<<62 | t>>(64-62) | ||||
| 		t = a[3] ^ d3 | ||||
| 		bc1 = t<<55 | t>>(64-55) | ||||
| 		t = a[19] ^ d4 | ||||
| 		bc2 = t<<39 | t>>(64-39) | ||||
| 		a[5] = bc0 ^ (bc2 &^ bc1) | ||||
| 		a[21] = bc1 ^ (bc3 &^ bc2) | ||||
| 		a[12] = bc2 ^ (bc4 &^ bc3) | ||||
| 		a[3] = bc3 ^ (bc0 &^ bc4) | ||||
| 		a[19] = bc4 ^ (bc1 &^ bc0) | ||||
|  | ||||
| 		// Round 3 | ||||
| 		bc0 = a[0] ^ a[5] ^ a[10] ^ a[15] ^ a[20] | ||||
| 		bc1 = a[1] ^ a[6] ^ a[11] ^ a[16] ^ a[21] | ||||
| 		bc2 = a[2] ^ a[7] ^ a[12] ^ a[17] ^ a[22] | ||||
| 		bc3 = a[3] ^ a[8] ^ a[13] ^ a[18] ^ a[23] | ||||
| 		bc4 = a[4] ^ a[9] ^ a[14] ^ a[19] ^ a[24] | ||||
| 		d0 = bc4 ^ (bc1<<1 | bc1>>63) | ||||
| 		d1 = bc0 ^ (bc2<<1 | bc2>>63) | ||||
| 		d2 = bc1 ^ (bc3<<1 | bc3>>63) | ||||
| 		d3 = bc2 ^ (bc4<<1 | bc4>>63) | ||||
| 		d4 = bc3 ^ (bc0<<1 | bc0>>63) | ||||
|  | ||||
| 		bc0 = a[0] ^ d0 | ||||
| 		t = a[11] ^ d1 | ||||
| 		bc1 = t<<44 | t>>(64-44) | ||||
| 		t = a[22] ^ d2 | ||||
| 		bc2 = t<<43 | t>>(64-43) | ||||
| 		t = a[8] ^ d3 | ||||
| 		bc3 = t<<21 | t>>(64-21) | ||||
| 		t = a[19] ^ d4 | ||||
| 		bc4 = t<<14 | t>>(64-14) | ||||
| 		a[0] = bc0 ^ (bc2 &^ bc1) ^ rc[i+2] | ||||
| 		a[11] = bc1 ^ (bc3 &^ bc2) | ||||
| 		a[22] = bc2 ^ (bc4 &^ bc3) | ||||
| 		a[8] = bc3 ^ (bc0 &^ bc4) | ||||
| 		a[19] = bc4 ^ (bc1 &^ bc0) | ||||
|  | ||||
| 		t = a[15] ^ d0 | ||||
| 		bc2 = t<<3 | t>>(64-3) | ||||
| 		t = a[1] ^ d1 | ||||
| 		bc3 = t<<45 | t>>(64-45) | ||||
| 		t = a[12] ^ d2 | ||||
| 		bc4 = t<<61 | t>>(64-61) | ||||
| 		t = a[23] ^ d3 | ||||
| 		bc0 = t<<28 | t>>(64-28) | ||||
| 		t = a[9] ^ d4 | ||||
| 		bc1 = t<<20 | t>>(64-20) | ||||
| 		a[15] = bc0 ^ (bc2 &^ bc1) | ||||
| 		a[1] = bc1 ^ (bc3 &^ bc2) | ||||
| 		a[12] = bc2 ^ (bc4 &^ bc3) | ||||
| 		a[23] = bc3 ^ (bc0 &^ bc4) | ||||
| 		a[9] = bc4 ^ (bc1 &^ bc0) | ||||
|  | ||||
| 		t = a[5] ^ d0 | ||||
| 		bc4 = t<<18 | t>>(64-18) | ||||
| 		t = a[16] ^ d1 | ||||
| 		bc0 = t<<1 | t>>(64-1) | ||||
| 		t = a[2] ^ d2 | ||||
| 		bc1 = t<<6 | t>>(64-6) | ||||
| 		t = a[13] ^ d3 | ||||
| 		bc2 = t<<25 | t>>(64-25) | ||||
| 		t = a[24] ^ d4 | ||||
| 		bc3 = t<<8 | t>>(64-8) | ||||
| 		a[5] = bc0 ^ (bc2 &^ bc1) | ||||
| 		a[16] = bc1 ^ (bc3 &^ bc2) | ||||
| 		a[2] = bc2 ^ (bc4 &^ bc3) | ||||
| 		a[13] = bc3 ^ (bc0 &^ bc4) | ||||
| 		a[24] = bc4 ^ (bc1 &^ bc0) | ||||
|  | ||||
| 		t = a[20] ^ d0 | ||||
| 		bc1 = t<<36 | t>>(64-36) | ||||
| 		t = a[6] ^ d1 | ||||
| 		bc2 = t<<10 | t>>(64-10) | ||||
| 		t = a[17] ^ d2 | ||||
| 		bc3 = t<<15 | t>>(64-15) | ||||
| 		t = a[3] ^ d3 | ||||
| 		bc4 = t<<56 | t>>(64-56) | ||||
| 		t = a[14] ^ d4 | ||||
| 		bc0 = t<<27 | t>>(64-27) | ||||
| 		a[20] = bc0 ^ (bc2 &^ bc1) | ||||
| 		a[6] = bc1 ^ (bc3 &^ bc2) | ||||
| 		a[17] = bc2 ^ (bc4 &^ bc3) | ||||
| 		a[3] = bc3 ^ (bc0 &^ bc4) | ||||
| 		a[14] = bc4 ^ (bc1 &^ bc0) | ||||
|  | ||||
| 		t = a[10] ^ d0 | ||||
| 		bc3 = t<<41 | t>>(64-41) | ||||
| 		t = a[21] ^ d1 | ||||
| 		bc4 = t<<2 | t>>(64-2) | ||||
| 		t = a[7] ^ d2 | ||||
| 		bc0 = t<<62 | t>>(64-62) | ||||
| 		t = a[18] ^ d3 | ||||
| 		bc1 = t<<55 | t>>(64-55) | ||||
| 		t = a[4] ^ d4 | ||||
| 		bc2 = t<<39 | t>>(64-39) | ||||
| 		a[10] = bc0 ^ (bc2 &^ bc1) | ||||
| 		a[21] = bc1 ^ (bc3 &^ bc2) | ||||
| 		a[7] = bc2 ^ (bc4 &^ bc3) | ||||
| 		a[18] = bc3 ^ (bc0 &^ bc4) | ||||
| 		a[4] = bc4 ^ (bc1 &^ bc0) | ||||
|  | ||||
| 		// Round 4 | ||||
| 		bc0 = a[0] ^ a[5] ^ a[10] ^ a[15] ^ a[20] | ||||
| 		bc1 = a[1] ^ a[6] ^ a[11] ^ a[16] ^ a[21] | ||||
| 		bc2 = a[2] ^ a[7] ^ a[12] ^ a[17] ^ a[22] | ||||
| 		bc3 = a[3] ^ a[8] ^ a[13] ^ a[18] ^ a[23] | ||||
| 		bc4 = a[4] ^ a[9] ^ a[14] ^ a[19] ^ a[24] | ||||
| 		d0 = bc4 ^ (bc1<<1 | bc1>>63) | ||||
| 		d1 = bc0 ^ (bc2<<1 | bc2>>63) | ||||
| 		d2 = bc1 ^ (bc3<<1 | bc3>>63) | ||||
| 		d3 = bc2 ^ (bc4<<1 | bc4>>63) | ||||
| 		d4 = bc3 ^ (bc0<<1 | bc0>>63) | ||||
|  | ||||
| 		bc0 = a[0] ^ d0 | ||||
| 		t = a[1] ^ d1 | ||||
| 		bc1 = t<<44 | t>>(64-44) | ||||
| 		t = a[2] ^ d2 | ||||
| 		bc2 = t<<43 | t>>(64-43) | ||||
| 		t = a[3] ^ d3 | ||||
| 		bc3 = t<<21 | t>>(64-21) | ||||
| 		t = a[4] ^ d4 | ||||
| 		bc4 = t<<14 | t>>(64-14) | ||||
| 		a[0] = bc0 ^ (bc2 &^ bc1) ^ rc[i+3] | ||||
| 		a[1] = bc1 ^ (bc3 &^ bc2) | ||||
| 		a[2] = bc2 ^ (bc4 &^ bc3) | ||||
| 		a[3] = bc3 ^ (bc0 &^ bc4) | ||||
| 		a[4] = bc4 ^ (bc1 &^ bc0) | ||||
|  | ||||
| 		t = a[5] ^ d0 | ||||
| 		bc2 = t<<3 | t>>(64-3) | ||||
| 		t = a[6] ^ d1 | ||||
| 		bc3 = t<<45 | t>>(64-45) | ||||
| 		t = a[7] ^ d2 | ||||
| 		bc4 = t<<61 | t>>(64-61) | ||||
| 		t = a[8] ^ d3 | ||||
| 		bc0 = t<<28 | t>>(64-28) | ||||
| 		t = a[9] ^ d4 | ||||
| 		bc1 = t<<20 | t>>(64-20) | ||||
| 		a[5] = bc0 ^ (bc2 &^ bc1) | ||||
| 		a[6] = bc1 ^ (bc3 &^ bc2) | ||||
| 		a[7] = bc2 ^ (bc4 &^ bc3) | ||||
| 		a[8] = bc3 ^ (bc0 &^ bc4) | ||||
| 		a[9] = bc4 ^ (bc1 &^ bc0) | ||||
|  | ||||
| 		t = a[10] ^ d0 | ||||
| 		bc4 = t<<18 | t>>(64-18) | ||||
| 		t = a[11] ^ d1 | ||||
| 		bc0 = t<<1 | t>>(64-1) | ||||
| 		t = a[12] ^ d2 | ||||
| 		bc1 = t<<6 | t>>(64-6) | ||||
| 		t = a[13] ^ d3 | ||||
| 		bc2 = t<<25 | t>>(64-25) | ||||
| 		t = a[14] ^ d4 | ||||
| 		bc3 = t<<8 | t>>(64-8) | ||||
| 		a[10] = bc0 ^ (bc2 &^ bc1) | ||||
| 		a[11] = bc1 ^ (bc3 &^ bc2) | ||||
| 		a[12] = bc2 ^ (bc4 &^ bc3) | ||||
| 		a[13] = bc3 ^ (bc0 &^ bc4) | ||||
| 		a[14] = bc4 ^ (bc1 &^ bc0) | ||||
|  | ||||
| 		t = a[15] ^ d0 | ||||
| 		bc1 = t<<36 | t>>(64-36) | ||||
| 		t = a[16] ^ d1 | ||||
| 		bc2 = t<<10 | t>>(64-10) | ||||
| 		t = a[17] ^ d2 | ||||
| 		bc3 = t<<15 | t>>(64-15) | ||||
| 		t = a[18] ^ d3 | ||||
| 		bc4 = t<<56 | t>>(64-56) | ||||
| 		t = a[19] ^ d4 | ||||
| 		bc0 = t<<27 | t>>(64-27) | ||||
| 		a[15] = bc0 ^ (bc2 &^ bc1) | ||||
| 		a[16] = bc1 ^ (bc3 &^ bc2) | ||||
| 		a[17] = bc2 ^ (bc4 &^ bc3) | ||||
| 		a[18] = bc3 ^ (bc0 &^ bc4) | ||||
| 		a[19] = bc4 ^ (bc1 &^ bc0) | ||||
|  | ||||
| 		t = a[20] ^ d0 | ||||
| 		bc3 = t<<41 | t>>(64-41) | ||||
| 		t = a[21] ^ d1 | ||||
| 		bc4 = t<<2 | t>>(64-2) | ||||
| 		t = a[22] ^ d2 | ||||
| 		bc0 = t<<62 | t>>(64-62) | ||||
| 		t = a[23] ^ d3 | ||||
| 		bc1 = t<<55 | t>>(64-55) | ||||
| 		t = a[24] ^ d4 | ||||
| 		bc2 = t<<39 | t>>(64-39) | ||||
| 		a[20] = bc0 ^ (bc2 &^ bc1) | ||||
| 		a[21] = bc1 ^ (bc3 &^ bc2) | ||||
| 		a[22] = bc2 ^ (bc4 &^ bc3) | ||||
| 		a[23] = bc3 ^ (bc0 &^ bc4) | ||||
| 		a[24] = bc4 ^ (bc1 &^ bc0) | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										9
									
								
								vendor/QmSQRViqskLPYFbjKhWE5EaW8eou9SD2j52QaBkQdigMsG/crypto-sha3/package.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								vendor/QmSQRViqskLPYFbjKhWE5EaW8eou9SD2j52QaBkQdigMsG/crypto-sha3/package.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | ||||
| { | ||||
|   "name": "crypto-sha3", | ||||
|   "author": "whyrusleeping", | ||||
|   "version": "1.0.0", | ||||
|   "language": "go", | ||||
|   "gx": { | ||||
|     "dvcsimport": "golang.org/x/crypto/sha3" | ||||
|   } | ||||
| } | ||||
							
								
								
									
										18
									
								
								vendor/QmSQRViqskLPYFbjKhWE5EaW8eou9SD2j52QaBkQdigMsG/crypto-sha3/register.go
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								vendor/QmSQRViqskLPYFbjKhWE5EaW8eou9SD2j52QaBkQdigMsG/crypto-sha3/register.go
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,18 @@ | ||||
| // 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. | ||||
|  | ||||
| // +build go1.4 | ||||
|  | ||||
| package sha3 | ||||
|  | ||||
| import ( | ||||
| 	"crypto" | ||||
| ) | ||||
|  | ||||
| func init() { | ||||
| 	crypto.RegisterHash(crypto.SHA3_224, New224) | ||||
| 	crypto.RegisterHash(crypto.SHA3_256, New256) | ||||
| 	crypto.RegisterHash(crypto.SHA3_384, New384) | ||||
| 	crypto.RegisterHash(crypto.SHA3_512, New512) | ||||
| } | ||||
							
								
								
									
										193
									
								
								vendor/QmSQRViqskLPYFbjKhWE5EaW8eou9SD2j52QaBkQdigMsG/crypto-sha3/sha3.go
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										193
									
								
								vendor/QmSQRViqskLPYFbjKhWE5EaW8eou9SD2j52QaBkQdigMsG/crypto-sha3/sha3.go
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,193 @@ | ||||
| // 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 | ||||
|  | ||||
| // spongeDirection indicates the direction bytes are flowing through the sponge. | ||||
| type spongeDirection int | ||||
|  | ||||
| const ( | ||||
| 	// spongeAbsorbing indicates that the sponge is absorbing input. | ||||
| 	spongeAbsorbing spongeDirection = iota | ||||
| 	// spongeSqueezing indicates that the sponge is being squeezed. | ||||
| 	spongeSqueezing | ||||
| ) | ||||
|  | ||||
| const ( | ||||
| 	// maxRate is the maximum size of the internal buffer. SHAKE-256 | ||||
| 	// currently needs the largest buffer. | ||||
| 	maxRate = 168 | ||||
| ) | ||||
|  | ||||
| type state struct { | ||||
| 	// Generic sponge components. | ||||
| 	a    [25]uint64 // main state of the hash | ||||
| 	buf  []byte     // points into storage | ||||
| 	rate int        // the number of bytes of state to use | ||||
|  | ||||
| 	// dsbyte contains the "domain separation" bits and the first bit of | ||||
| 	// the padding. Sections 6.1 and 6.2 of [1] separate the outputs of the | ||||
| 	// SHA-3 and SHAKE functions by appending bitstrings to the message. | ||||
| 	// Using a little-endian bit-ordering convention, these are "01" for SHA-3 | ||||
| 	// and "1111" for SHAKE, or 00000010b and 00001111b, respectively. Then the | ||||
| 	// padding rule from section 5.1 is applied to pad the message to a multiple | ||||
| 	// of the rate, which involves adding a "1" bit, zero or more "0" bits, and | ||||
| 	// a final "1" bit. We merge the first "1" bit from the padding into dsbyte, | ||||
| 	// giving 00000110b (0x06) and 00011111b (0x1f). | ||||
| 	// [1] http://csrc.nist.gov/publications/drafts/fips-202/fips_202_draft.pdf | ||||
| 	//     "Draft FIPS 202: SHA-3 Standard: Permutation-Based Hash and | ||||
| 	//      Extendable-Output Functions (May 2014)" | ||||
| 	dsbyte  byte | ||||
| 	storage [maxRate]byte | ||||
|  | ||||
| 	// Specific to SHA-3 and SHAKE. | ||||
| 	fixedOutput bool            // whether this is a fixed-ouput-length instance | ||||
| 	outputLen   int             // the default output size in bytes | ||||
| 	state       spongeDirection // whether the sponge is absorbing or squeezing | ||||
| } | ||||
|  | ||||
| // BlockSize returns the rate of sponge underlying this hash function. | ||||
| func (d *state) BlockSize() int { return d.rate } | ||||
|  | ||||
| // Size returns the output size of the hash function in bytes. | ||||
| func (d *state) Size() int { return d.outputLen } | ||||
|  | ||||
| // Reset clears the internal state by zeroing the sponge state and | ||||
| // the byte buffer, and setting Sponge.state to absorbing. | ||||
| func (d *state) Reset() { | ||||
| 	// Zero the permutation's state. | ||||
| 	for i := range d.a { | ||||
| 		d.a[i] = 0 | ||||
| 	} | ||||
| 	d.state = spongeAbsorbing | ||||
| 	d.buf = d.storage[:0] | ||||
| } | ||||
|  | ||||
| func (d *state) clone() *state { | ||||
| 	ret := *d | ||||
| 	if ret.state == spongeAbsorbing { | ||||
| 		ret.buf = ret.storage[:len(ret.buf)] | ||||
| 	} else { | ||||
| 		ret.buf = ret.storage[d.rate-cap(d.buf) : d.rate] | ||||
| 	} | ||||
|  | ||||
| 	return &ret | ||||
| } | ||||
|  | ||||
| // permute applies the KeccakF-1600 permutation. It handles | ||||
| // any input-output buffering. | ||||
| func (d *state) permute() { | ||||
| 	switch d.state { | ||||
| 	case spongeAbsorbing: | ||||
| 		// If we're absorbing, we need to xor the input into the state | ||||
| 		// before applying the permutation. | ||||
| 		xorIn(d, d.buf) | ||||
| 		d.buf = d.storage[:0] | ||||
| 		keccakF1600(&d.a) | ||||
| 	case spongeSqueezing: | ||||
| 		// If we're squeezing, we need to apply the permutatin before | ||||
| 		// copying more output. | ||||
| 		keccakF1600(&d.a) | ||||
| 		d.buf = d.storage[:d.rate] | ||||
| 		copyOut(d, d.buf) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // pads appends the domain separation bits in dsbyte, applies | ||||
| // the multi-bitrate 10..1 padding rule, and permutes the state. | ||||
| func (d *state) padAndPermute(dsbyte byte) { | ||||
| 	if d.buf == nil { | ||||
| 		d.buf = d.storage[:0] | ||||
| 	} | ||||
| 	// Pad with this instance's domain-separator bits. We know that there's | ||||
| 	// at least one byte of space in d.buf because, if it were full, | ||||
| 	// permute would have been called to empty it. dsbyte also contains the | ||||
| 	// first one bit for the padding. See the comment in the state struct. | ||||
| 	d.buf = append(d.buf, dsbyte) | ||||
| 	zerosStart := len(d.buf) | ||||
| 	d.buf = d.storage[:d.rate] | ||||
| 	for i := zerosStart; i < d.rate; i++ { | ||||
| 		d.buf[i] = 0 | ||||
| 	} | ||||
| 	// This adds the final one bit for the padding. Because of the way that | ||||
| 	// bits are numbered from the LSB upwards, the final bit is the MSB of | ||||
| 	// the last byte. | ||||
| 	d.buf[d.rate-1] ^= 0x80 | ||||
| 	// Apply the permutation | ||||
| 	d.permute() | ||||
| 	d.state = spongeSqueezing | ||||
| 	d.buf = d.storage[:d.rate] | ||||
| 	copyOut(d, d.buf) | ||||
| } | ||||
|  | ||||
| // Write absorbs more data into the hash's state. It produces an error | ||||
| // if more data is written to the ShakeHash after writing | ||||
| func (d *state) Write(p []byte) (written int, err error) { | ||||
| 	if d.state != spongeAbsorbing { | ||||
| 		panic("sha3: write to sponge after read") | ||||
| 	} | ||||
| 	if d.buf == nil { | ||||
| 		d.buf = d.storage[:0] | ||||
| 	} | ||||
| 	written = len(p) | ||||
|  | ||||
| 	for len(p) > 0 { | ||||
| 		if len(d.buf) == 0 && len(p) >= d.rate { | ||||
| 			// The fast path; absorb a full "rate" bytes of input and apply the permutation. | ||||
| 			xorIn(d, p[:d.rate]) | ||||
| 			p = p[d.rate:] | ||||
| 			keccakF1600(&d.a) | ||||
| 		} else { | ||||
| 			// The slow path; buffer the input until we can fill the sponge, and then xor it in. | ||||
| 			todo := d.rate - len(d.buf) | ||||
| 			if todo > len(p) { | ||||
| 				todo = len(p) | ||||
| 			} | ||||
| 			d.buf = append(d.buf, p[:todo]...) | ||||
| 			p = p[todo:] | ||||
|  | ||||
| 			// If the sponge is full, apply the permutation. | ||||
| 			if len(d.buf) == d.rate { | ||||
| 				d.permute() | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	return | ||||
| } | ||||
|  | ||||
| // Read squeezes an arbitrary number of bytes from the sponge. | ||||
| func (d *state) Read(out []byte) (n int, err error) { | ||||
| 	// If we're still absorbing, pad and apply the permutation. | ||||
| 	if d.state == spongeAbsorbing { | ||||
| 		d.padAndPermute(d.dsbyte) | ||||
| 	} | ||||
|  | ||||
| 	n = len(out) | ||||
|  | ||||
| 	// Now, do the squeezing. | ||||
| 	for len(out) > 0 { | ||||
| 		n := copy(out, d.buf) | ||||
| 		d.buf = d.buf[n:] | ||||
| 		out = out[n:] | ||||
|  | ||||
| 		// Apply the permutation if we've squeezed the sponge dry. | ||||
| 		if len(d.buf) == 0 { | ||||
| 			d.permute() | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	return | ||||
| } | ||||
|  | ||||
| // Sum applies padding to the hash state and then squeezes out the desired | ||||
| // number of output bytes. | ||||
| func (d *state) Sum(in []byte) []byte { | ||||
| 	// Make a copy of the original hash so that caller can keep writing | ||||
| 	// and summing. | ||||
| 	dup := d.clone() | ||||
| 	hash := make([]byte, dup.outputLen) | ||||
| 	dup.Read(hash) | ||||
| 	return append(in, hash...) | ||||
| } | ||||
							
								
								
									
										306
									
								
								vendor/QmSQRViqskLPYFbjKhWE5EaW8eou9SD2j52QaBkQdigMsG/crypto-sha3/sha3_test.go
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										306
									
								
								vendor/QmSQRViqskLPYFbjKhWE5EaW8eou9SD2j52QaBkQdigMsG/crypto-sha3/sha3_test.go
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,306 @@ | ||||
| // 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, | ||||
| } | ||||
|  | ||||
| // decodeHex converts a hex-encoded string into a raw byte string. | ||||
| func decodeHex(s string) []byte { | ||||
| 	b, err := hex.DecodeString(s) | ||||
| 	if err != nil { | ||||
| 		panic(err) | ||||
| 	} | ||||
| 	return b | ||||
| } | ||||
|  | ||||
| // 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) | ||||
| } | ||||
							
								
								
									
										60
									
								
								vendor/QmSQRViqskLPYFbjKhWE5EaW8eou9SD2j52QaBkQdigMsG/crypto-sha3/shake.go
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								vendor/QmSQRViqskLPYFbjKhWE5EaW8eou9SD2j52QaBkQdigMsG/crypto-sha3/shake.go
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,60 @@ | ||||
| // 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 | ||||
|  | ||||
| // This file defines the ShakeHash interface, and provides | ||||
| // functions for creating SHAKE instances, as well as utility | ||||
| // functions for hashing bytes to arbitrary-length output. | ||||
|  | ||||
| import ( | ||||
| 	"io" | ||||
| ) | ||||
|  | ||||
| // ShakeHash defines the interface to hash functions that | ||||
| // support arbitrary-length output. | ||||
| type ShakeHash interface { | ||||
| 	// Write absorbs more data into the hash's state. It panics if input is | ||||
| 	// written to it after output has been read from it. | ||||
| 	io.Writer | ||||
|  | ||||
| 	// Read reads more output from the hash; reading affects the hash's | ||||
| 	// state. (ShakeHash.Read is thus very different from Hash.Sum) | ||||
| 	// It never returns an error. | ||||
| 	io.Reader | ||||
|  | ||||
| 	// Clone returns a copy of the ShakeHash in its current state. | ||||
| 	Clone() ShakeHash | ||||
|  | ||||
| 	// Reset resets the ShakeHash to its initial state. | ||||
| 	Reset() | ||||
| } | ||||
|  | ||||
| func (d *state) Clone() ShakeHash { | ||||
| 	return d.clone() | ||||
| } | ||||
|  | ||||
| // NewShake128 creates a new SHAKE128 variable-output-length ShakeHash. | ||||
| // Its generic security strength is 128 bits against all attacks if at | ||||
| // least 32 bytes of its output are used. | ||||
| func NewShake128() ShakeHash { return &state{rate: 168, dsbyte: 0x1f} } | ||||
|  | ||||
| // NewShake256 creates a new SHAKE128 variable-output-length ShakeHash. | ||||
| // Its generic security strength is 256 bits against all attacks if | ||||
| // at least 64 bytes of its output are used. | ||||
| func NewShake256() ShakeHash { return &state{rate: 136, dsbyte: 0x1f} } | ||||
|  | ||||
| // ShakeSum128 writes an arbitrary-length digest of data into hash. | ||||
| func ShakeSum128(hash, data []byte) { | ||||
| 	h := NewShake128() | ||||
| 	h.Write(data) | ||||
| 	h.Read(hash) | ||||
| } | ||||
|  | ||||
| // ShakeSum256 writes an arbitrary-length digest of data into hash. | ||||
| func ShakeSum256(hash, data []byte) { | ||||
| 	h := NewShake256() | ||||
| 	h.Write(data) | ||||
| 	h.Read(hash) | ||||
| } | ||||
							
								
								
									
										
											BIN
										
									
								
								vendor/QmSQRViqskLPYFbjKhWE5EaW8eou9SD2j52QaBkQdigMsG/crypto-sha3/testdata/keccakKats.json.deflate
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								vendor/QmSQRViqskLPYFbjKhWE5EaW8eou9SD2j52QaBkQdigMsG/crypto-sha3/testdata/keccakKats.json.deflate
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										16
									
								
								vendor/QmSQRViqskLPYFbjKhWE5EaW8eou9SD2j52QaBkQdigMsG/crypto-sha3/xor.go
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								vendor/QmSQRViqskLPYFbjKhWE5EaW8eou9SD2j52QaBkQdigMsG/crypto-sha3/xor.go
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | ||||
| // Copyright 2015 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 !amd64,!386 appengine | ||||
|  | ||||
| package sha3 | ||||
|  | ||||
| var ( | ||||
| 	xorIn            = xorInGeneric | ||||
| 	copyOut          = copyOutGeneric | ||||
| 	xorInUnaligned   = xorInGeneric | ||||
| 	copyOutUnaligned = copyOutGeneric | ||||
| ) | ||||
|  | ||||
| const xorImplementationUnaligned = "generic" | ||||
							
								
								
									
										28
									
								
								vendor/QmSQRViqskLPYFbjKhWE5EaW8eou9SD2j52QaBkQdigMsG/crypto-sha3/xor_generic.go
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								vendor/QmSQRViqskLPYFbjKhWE5EaW8eou9SD2j52QaBkQdigMsG/crypto-sha3/xor_generic.go
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,28 @@ | ||||
| // Copyright 2015 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 | ||||
|  | ||||
| import "encoding/binary" | ||||
|  | ||||
| // xorInGeneric xors the bytes in buf into the state; it | ||||
| // makes no non-portable assumptions about memory layout | ||||
| // or alignment. | ||||
| func xorInGeneric(d *state, buf []byte) { | ||||
| 	n := len(buf) / 8 | ||||
|  | ||||
| 	for i := 0; i < n; i++ { | ||||
| 		a := binary.LittleEndian.Uint64(buf) | ||||
| 		d.a[i] ^= a | ||||
| 		buf = buf[8:] | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // copyOutGeneric copies ulint64s to a byte buffer. | ||||
| func copyOutGeneric(d *state, b []byte) { | ||||
| 	for i := 0; len(b) >= 8; i++ { | ||||
| 		binary.LittleEndian.PutUint64(b, d.a[i]) | ||||
| 		b = b[8:] | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										58
									
								
								vendor/QmSQRViqskLPYFbjKhWE5EaW8eou9SD2j52QaBkQdigMsG/crypto-sha3/xor_unaligned.go
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								vendor/QmSQRViqskLPYFbjKhWE5EaW8eou9SD2j52QaBkQdigMsG/crypto-sha3/xor_unaligned.go
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,58 @@ | ||||
| // Copyright 2015 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 amd64 386 | ||||
| // +build !appengine | ||||
|  | ||||
| package sha3 | ||||
|  | ||||
| import "unsafe" | ||||
|  | ||||
| func xorInUnaligned(d *state, buf []byte) { | ||||
| 	bw := (*[maxRate / 8]uint64)(unsafe.Pointer(&buf[0])) | ||||
| 	n := len(buf) | ||||
| 	if n >= 72 { | ||||
| 		d.a[0] ^= bw[0] | ||||
| 		d.a[1] ^= bw[1] | ||||
| 		d.a[2] ^= bw[2] | ||||
| 		d.a[3] ^= bw[3] | ||||
| 		d.a[4] ^= bw[4] | ||||
| 		d.a[5] ^= bw[5] | ||||
| 		d.a[6] ^= bw[6] | ||||
| 		d.a[7] ^= bw[7] | ||||
| 		d.a[8] ^= bw[8] | ||||
| 	} | ||||
| 	if n >= 104 { | ||||
| 		d.a[9] ^= bw[9] | ||||
| 		d.a[10] ^= bw[10] | ||||
| 		d.a[11] ^= bw[11] | ||||
| 		d.a[12] ^= bw[12] | ||||
| 	} | ||||
| 	if n >= 136 { | ||||
| 		d.a[13] ^= bw[13] | ||||
| 		d.a[14] ^= bw[14] | ||||
| 		d.a[15] ^= bw[15] | ||||
| 		d.a[16] ^= bw[16] | ||||
| 	} | ||||
| 	if n >= 144 { | ||||
| 		d.a[17] ^= bw[17] | ||||
| 	} | ||||
| 	if n >= 168 { | ||||
| 		d.a[18] ^= bw[18] | ||||
| 		d.a[19] ^= bw[19] | ||||
| 		d.a[20] ^= bw[20] | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func copyOutUnaligned(d *state, buf []byte) { | ||||
| 	ab := (*[maxRate]uint8)(unsafe.Pointer(&d.a[0])) | ||||
| 	copy(buf, ab[:]) | ||||
| } | ||||
|  | ||||
| var ( | ||||
| 	xorIn   = xorInUnaligned | ||||
| 	copyOut = copyOutUnaligned | ||||
| ) | ||||
|  | ||||
| const xorImplementationUnaligned = "unaligned" | ||||
							
								
								
									
										1
									
								
								vendor/QmU5s159q8cZuM1f9Vqti4LHu6y8zyVc5dxv2py81sdp6Q/go-multiaddr-net/.gxlastpubver
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								vendor/QmU5s159q8cZuM1f9Vqti4LHu6y8zyVc5dxv2py81sdp6Q/go-multiaddr-net/.gxlastpubver
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| 1.0.0: QmanZCL6SXRfafiUEMCBLq2QR171uQSdXQ8YAdHXLd8Cwr | ||||
| @@ -5,8 +5,8 @@ import ( | ||||
| 	"net" | ||||
| 	"strings" | ||||
| 
 | ||||
| 	ma "QmaA6aDzeHjZiuqBtgYRz8ZXb1qMCoyMHgyDjBEYQniUKF/go-multiaddr" | ||||
| 	utp "QmanZCL6SXRfafiUEMCBLq2QR171uQSdXQ8YAdHXLd8Cwr/go-multiaddr-net/utp" | ||||
| 	utp "QmU5s159q8cZuM1f9Vqti4LHu6y8zyVc5dxv2py81sdp6Q/go-multiaddr-net/utp" | ||||
| 	ma "QmbWxL1aXQhBjc1XGjGF1f2KGBMCBYSuT2ThA8YXnXJK83/go-multiaddr" | ||||
| ) | ||||
| 
 | ||||
| var errIncorrectNetAddr = fmt.Errorf("incorrect network addr conversion") | ||||
| @@ -4,8 +4,8 @@ import ( | ||||
| 	"net" | ||||
| 	"testing" | ||||
| 
 | ||||
| 	ma "QmaA6aDzeHjZiuqBtgYRz8ZXb1qMCoyMHgyDjBEYQniUKF/go-multiaddr" | ||||
| 	mautp "QmanZCL6SXRfafiUEMCBLq2QR171uQSdXQ8YAdHXLd8Cwr/go-multiaddr-net/utp" | ||||
| 	mautp "QmU5s159q8cZuM1f9Vqti4LHu6y8zyVc5dxv2py81sdp6Q/go-multiaddr-net/utp" | ||||
| 	ma "QmbWxL1aXQhBjc1XGjGF1f2KGBMCBYSuT2ThA8YXnXJK83/go-multiaddr" | ||||
| ) | ||||
| 
 | ||||
| type GenFunc func() (ma.Multiaddr, error) | ||||
| @@ -3,7 +3,7 @@ package manet | ||||
| import ( | ||||
| 	"bytes" | ||||
| 
 | ||||
| 	ma "QmaA6aDzeHjZiuqBtgYRz8ZXb1qMCoyMHgyDjBEYQniUKF/go-multiaddr" | ||||
| 	ma "QmbWxL1aXQhBjc1XGjGF1f2KGBMCBYSuT2ThA8YXnXJK83/go-multiaddr" | ||||
| ) | ||||
| 
 | ||||
| // Loopback Addresses | ||||
| @@ -6,8 +6,8 @@ import ( | ||||
| 	"fmt" | ||||
| 	"os" | ||||
| 
 | ||||
| 	ma "QmaA6aDzeHjZiuqBtgYRz8ZXb1qMCoyMHgyDjBEYQniUKF/go-multiaddr" | ||||
| 	manet "QmanZCL6SXRfafiUEMCBLq2QR171uQSdXQ8YAdHXLd8Cwr/go-multiaddr-net" | ||||
| 	manet "QmU5s159q8cZuM1f9Vqti4LHu6y8zyVc5dxv2py81sdp6Q/go-multiaddr-net" | ||||
| 	ma "QmbWxL1aXQhBjc1XGjGF1f2KGBMCBYSuT2ThA8YXnXJK83/go-multiaddr" | ||||
| ) | ||||
| 
 | ||||
| // flags | ||||
| @@ -4,8 +4,8 @@ import ( | ||||
| 	"fmt" | ||||
| 	"net" | ||||
| 
 | ||||
| 	ma "QmaA6aDzeHjZiuqBtgYRz8ZXb1qMCoyMHgyDjBEYQniUKF/go-multiaddr" | ||||
| 	mautp "QmanZCL6SXRfafiUEMCBLq2QR171uQSdXQ8YAdHXLd8Cwr/go-multiaddr-net/utp" | ||||
| 	mautp "QmU5s159q8cZuM1f9Vqti4LHu6y8zyVc5dxv2py81sdp6Q/go-multiaddr-net/utp" | ||||
| 	ma "QmbWxL1aXQhBjc1XGjGF1f2KGBMCBYSuT2ThA8YXnXJK83/go-multiaddr" | ||||
| ) | ||||
| 
 | ||||
| // Conn is the equivalent of a net.Conn object. It is the | ||||
| @@ -7,7 +7,7 @@ import ( | ||||
| 	"sync" | ||||
| 	"testing" | ||||
| 
 | ||||
| 	ma "QmaA6aDzeHjZiuqBtgYRz8ZXb1qMCoyMHgyDjBEYQniUKF/go-multiaddr" | ||||
| 	ma "QmbWxL1aXQhBjc1XGjGF1f2KGBMCBYSuT2ThA8YXnXJK83/go-multiaddr" | ||||
| ) | ||||
| 
 | ||||
| func newMultiaddr(t *testing.T, m string) ma.Multiaddr { | ||||
| @@ -10,7 +10,7 @@ | ||||
|     }, | ||||
|     { | ||||
|       "name": "go-multiaddr", | ||||
|       "hash": "QmaA6aDzeHjZiuqBtgYRz8ZXb1qMCoyMHgyDjBEYQniUKF", | ||||
|       "hash": "QmbWxL1aXQhBjc1XGjGF1f2KGBMCBYSuT2ThA8YXnXJK83", | ||||
|       "version": "1.0.0" | ||||
|     }, | ||||
|     { | ||||
| @@ -63,4 +63,4 @@ | ||||
| // They produce output of the same length, with the same security strengths | ||||
| // against all attacks. This means, in particular, that SHA3-256 only has | ||||
| // 128-bit collision resistance, because its output length is 32 bytes. | ||||
| package sha3 // import "golang.org/x/crypto/sha3" | ||||
| package sha3 | ||||
|   | ||||
							
								
								
									
										1
									
								
								vendor/QmYWqTn1i8yv9QRDzGPJ2yRudKzYCaC5Aqasbm8vwaG92E/multiaddr-filter/.gxlastpubver
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								vendor/QmYWqTn1i8yv9QRDzGPJ2yRudKzYCaC5Aqasbm8vwaG92E/multiaddr-filter/.gxlastpubver
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| 1.0.0: QmVdADza4QFVAR9xqAxRQjt9vTZJ6UrVLgBstKua1Xg7he | ||||
| @@ -6,7 +6,7 @@ import ( | ||||
| 	"net" | ||||
| 	"strings" | ||||
| 
 | ||||
| 	manet "QmanZCL6SXRfafiUEMCBLq2QR171uQSdXQ8YAdHXLd8Cwr/go-multiaddr-net" | ||||
| 	manet "QmU5s159q8cZuM1f9Vqti4LHu6y8zyVc5dxv2py81sdp6Q/go-multiaddr-net" | ||||
| ) | ||||
| 
 | ||||
| var ErrInvalidFormat = errors.New("invalid multiaddr-filter format") | ||||
| @@ -5,7 +5,7 @@ | ||||
|   "gxDependencies": [ | ||||
|     { | ||||
|       "name": "go-multiaddr-net", | ||||
|       "hash": "QmanZCL6SXRfafiUEMCBLq2QR171uQSdXQ8YAdHXLd8Cwr", | ||||
|       "hash": "QmU5s159q8cZuM1f9Vqti4LHu6y8zyVc5dxv2py81sdp6Q", | ||||
|       "version": "1.0.0" | ||||
|     } | ||||
|   ], | ||||
| @@ -9,7 +9,7 @@ import ( | ||||
| 	"strconv" | ||||
| 	"strings" | ||||
| 
 | ||||
| 	mh "QmdeauTdyf38KDQB4Cc4CurPWRRb5pej27NCXPA7kbPTJy/go-multihash" | ||||
| 	mh "QmdsKjp5fcCT8PZ8JBMcdFsCbbmKwSLCU5xXbsnwb5DMxy/go-multihash" | ||||
| ) | ||||
| 
 | ||||
| func stringToBytes(s string) ([]byte, error) { | ||||
| @@ -5,7 +5,7 @@ | ||||
|   "gxDependencies": [ | ||||
|     { | ||||
|       "name": "go-multihash", | ||||
|       "hash": "QmdeauTdyf38KDQB4Cc4CurPWRRb5pej27NCXPA7kbPTJy", | ||||
|       "hash": "QmdsKjp5fcCT8PZ8JBMcdFsCbbmKwSLCU5xXbsnwb5DMxy", | ||||
|       "version": "1.0.0" | ||||
|     } | ||||
|   ], | ||||
							
								
								
									
										11
									
								
								vendor/QmdsKjp5fcCT8PZ8JBMcdFsCbbmKwSLCU5xXbsnwb5DMxy/go-multihash/.travis.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								vendor/QmdsKjp5fcCT8PZ8JBMcdFsCbbmKwSLCU5xXbsnwb5DMxy/go-multihash/.travis.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | ||||
| language: go | ||||
|  | ||||
| go: | ||||
|   - 1.3 | ||||
|   - release | ||||
|   - tip | ||||
|  | ||||
| script: | ||||
|   - make test | ||||
|  | ||||
| env: TEST_VERBOSE=1 | ||||
							
								
								
									
										21
									
								
								vendor/QmdsKjp5fcCT8PZ8JBMcdFsCbbmKwSLCU5xXbsnwb5DMxy/go-multihash/LICENSE
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								vendor/QmdsKjp5fcCT8PZ8JBMcdFsCbbmKwSLCU5xXbsnwb5DMxy/go-multihash/LICENSE
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,21 @@ | ||||
| The MIT License (MIT) | ||||
|  | ||||
| Copyright (c) 2014 Juan Batiz-Benet | ||||
|  | ||||
| Permission is hereby granted, free of charge, to any person obtaining a copy | ||||
| of this software and associated documentation files (the "Software"), to deal | ||||
| in the Software without restriction, including without limitation the rights | ||||
| to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||||
| copies of the Software, and to permit persons to whom the Software is | ||||
| furnished to do so, subject to the following conditions: | ||||
|  | ||||
| The above copyright notice and this permission notice shall be included in | ||||
| all copies or substantial portions of the Software. | ||||
|  | ||||
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||
| IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||
| FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||||
| AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||||
| LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||||
| OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||||
| THE SOFTWARE. | ||||
							
								
								
									
										11
									
								
								vendor/QmdsKjp5fcCT8PZ8JBMcdFsCbbmKwSLCU5xXbsnwb5DMxy/go-multihash/Makefile
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								vendor/QmdsKjp5fcCT8PZ8JBMcdFsCbbmKwSLCU5xXbsnwb5DMxy/go-multihash/Makefile
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | ||||
| test: go_test other_tests | ||||
|  | ||||
| other_tests: | ||||
| 	cd test && make test | ||||
|  | ||||
| go_test: go_deps | ||||
| 	go test -race -cpu=5 -v ./... | ||||
|  | ||||
| go_deps: | ||||
| 	go get golang.org/x/crypto/sha3 | ||||
| 	go get github.com/jbenet/go-base58 | ||||
							
								
								
									
										45
									
								
								vendor/QmdsKjp5fcCT8PZ8JBMcdFsCbbmKwSLCU5xXbsnwb5DMxy/go-multihash/README.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								vendor/QmdsKjp5fcCT8PZ8JBMcdFsCbbmKwSLCU5xXbsnwb5DMxy/go-multihash/README.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,45 @@ | ||||
| # go-multihash | ||||
|  | ||||
|  | ||||
|  | ||||
| [multihash](//github.com/jbenet/multihash) implementation in Go. | ||||
|  | ||||
| ## Example | ||||
|  | ||||
| ```go | ||||
| package main | ||||
|  | ||||
| import ( | ||||
|   "encoding/hex" | ||||
|   "fmt" | ||||
|   "github.com/jbenet/go-multihash" | ||||
| ) | ||||
|  | ||||
| func main() { | ||||
|   // ignores errors for simplicity. | ||||
|   // don't do that at home. | ||||
|  | ||||
|   buf, _ := hex.DecodeString("0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33") | ||||
|   mhbuf, _ := multihash.EncodeName(buf, "sha1"); | ||||
|   mhhex := hex.EncodeToString(mhbuf) | ||||
|   fmt.Printf("hex: %v\n", mhhex); | ||||
|  | ||||
|   o, _ := multihash.Decode(mhbuf); | ||||
|   mhhex = hex.EncodeToString(o.Digest); | ||||
|   fmt.Printf("obj: %v 0x%x %d %s\n", o.Name, o.Code, o.Length, mhhex); | ||||
| } | ||||
| ``` | ||||
|  | ||||
| Run [test/foo.go](test/foo.go) | ||||
|  | ||||
| ``` | ||||
| > cd test/ | ||||
| > go build | ||||
| > ./test | ||||
| hex: 11140beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33 | ||||
| obj: sha1 0x11 20 0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33 | ||||
| ``` | ||||
|  | ||||
| ## License | ||||
|  | ||||
| MIT | ||||
							
								
								
									
										79
									
								
								vendor/QmdsKjp5fcCT8PZ8JBMcdFsCbbmKwSLCU5xXbsnwb5DMxy/go-multihash/io.go
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								vendor/QmdsKjp5fcCT8PZ8JBMcdFsCbbmKwSLCU5xXbsnwb5DMxy/go-multihash/io.go
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,79 @@ | ||||
| package multihash | ||||
|  | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"io" | ||||
| ) | ||||
|  | ||||
| // Reader is an io.Reader wrapper that exposes a function | ||||
| // to read a whole multihash, parse it, and return it. | ||||
| type Reader interface { | ||||
| 	io.Reader | ||||
|  | ||||
| 	ReadMultihash() (Multihash, error) | ||||
| } | ||||
|  | ||||
| // Writer is an io.Writer wrapper that exposes a function | ||||
| // to write a whole multihash. | ||||
| type Writer interface { | ||||
| 	io.Writer | ||||
|  | ||||
| 	WriteMultihash(Multihash) error | ||||
| } | ||||
|  | ||||
| // NewReader wraps an io.Reader with a multihash.Reader | ||||
| func NewReader(r io.Reader) Reader { | ||||
| 	return &mhReader{r} | ||||
| } | ||||
|  | ||||
| // NewWriter wraps an io.Writer with a multihash.Writer | ||||
| func NewWriter(w io.Writer) Writer { | ||||
| 	return &mhWriter{w} | ||||
| } | ||||
|  | ||||
| type mhReader struct { | ||||
| 	r io.Reader | ||||
| } | ||||
|  | ||||
| func (r *mhReader) Read(buf []byte) (n int, err error) { | ||||
| 	return r.r.Read(buf) | ||||
| } | ||||
|  | ||||
| func (r *mhReader) ReadMultihash() (Multihash, error) { | ||||
| 	mhhdr := make([]byte, 2) | ||||
| 	if _, err := io.ReadFull(r.r, mhhdr); err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
|  | ||||
| 	// first byte is the algo, the second is the length. | ||||
|  | ||||
| 	// (varints someday...) | ||||
| 	length := uint(mhhdr[1]) | ||||
|  | ||||
| 	if length > 127 { | ||||
| 		return nil, fmt.Errorf("varints not yet supported (length is %d)", length) | ||||
| 	} | ||||
|  | ||||
| 	buf := make([]byte, length+2) | ||||
| 	buf[0] = mhhdr[0] | ||||
| 	buf[1] = mhhdr[1] | ||||
|  | ||||
| 	if _, err := io.ReadFull(r.r, buf[2:]); err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
|  | ||||
| 	return Cast(buf) | ||||
| } | ||||
|  | ||||
| type mhWriter struct { | ||||
| 	w io.Writer | ||||
| } | ||||
|  | ||||
| func (w *mhWriter) Write(buf []byte) (n int, err error) { | ||||
| 	return w.w.Write(buf) | ||||
| } | ||||
|  | ||||
| func (w *mhWriter) WriteMultihash(m Multihash) error { | ||||
| 	_, err := w.w.Write([]byte(m)) | ||||
| 	return err | ||||
| } | ||||
							
								
								
									
										69
									
								
								vendor/QmdsKjp5fcCT8PZ8JBMcdFsCbbmKwSLCU5xXbsnwb5DMxy/go-multihash/io_test.go
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								vendor/QmdsKjp5fcCT8PZ8JBMcdFsCbbmKwSLCU5xXbsnwb5DMxy/go-multihash/io_test.go
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,69 @@ | ||||
| package multihash | ||||
|  | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"io" | ||||
| 	"testing" | ||||
| ) | ||||
|  | ||||
| func TestReader(t *testing.T) { | ||||
|  | ||||
| 	var buf bytes.Buffer | ||||
|  | ||||
| 	for _, tc := range testCases { | ||||
| 		m, err := tc.Multihash() | ||||
| 		if err != nil { | ||||
| 			t.Fatal(err) | ||||
| 		} | ||||
|  | ||||
| 		buf.Write([]byte(m)) | ||||
| 	} | ||||
|  | ||||
| 	r := NewReader(&buf) | ||||
|  | ||||
| 	for _, tc := range testCases { | ||||
| 		h, err := tc.Multihash() | ||||
| 		if err != nil { | ||||
| 			t.Fatal(err) | ||||
| 		} | ||||
|  | ||||
| 		h2, err := r.ReadMultihash() | ||||
| 		if err != nil { | ||||
| 			t.Error(err) | ||||
| 			continue | ||||
| 		} | ||||
|  | ||||
| 		if !bytes.Equal(h, h2) { | ||||
| 			t.Error("h and h2 should be equal") | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func TestWriter(t *testing.T) { | ||||
|  | ||||
| 	var buf bytes.Buffer | ||||
| 	w := NewWriter(&buf) | ||||
|  | ||||
| 	for _, tc := range testCases { | ||||
| 		m, err := tc.Multihash() | ||||
| 		if err != nil { | ||||
| 			t.Error(err) | ||||
| 			continue | ||||
| 		} | ||||
|  | ||||
| 		if err := w.WriteMultihash(m); err != nil { | ||||
| 			t.Error(err) | ||||
| 			continue | ||||
| 		} | ||||
|  | ||||
| 		buf2 := make([]byte, len(m)) | ||||
| 		if _, err := io.ReadFull(&buf, buf2); err != nil { | ||||
| 			t.Error(err) | ||||
| 			continue | ||||
| 		} | ||||
|  | ||||
| 		if !bytes.Equal(m, buf2) { | ||||
| 			t.Error("m and buf2 should be equal") | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user
	 Jeromy
					Jeromy