Deps update, gopkg.lock fix, flagger initialization fix.
This commit is contained in:
45
vendor/golang.org/x/crypto/xts/xts.go
generated
vendored
45
vendor/golang.org/x/crypto/xts/xts.go
generated
vendored
@@ -15,20 +15,25 @@
|
||||
// effectively create a unique key for each sector.
|
||||
//
|
||||
// XTS does not provide any authentication. An attacker can manipulate the
|
||||
// ciphertext and randomise a block (16 bytes) of the plaintext.
|
||||
// ciphertext and randomise a block (16 bytes) of the plaintext. This package
|
||||
// does not implement ciphertext-stealing so sectors must be a multiple of 16
|
||||
// bytes.
|
||||
//
|
||||
// (Note: this package does not implement ciphertext-stealing so sectors must
|
||||
// be a multiple of 16 bytes.)
|
||||
// Note that XTS is usually not appropriate for any use besides disk encryption.
|
||||
// Most users should use an AEAD mode like GCM (from crypto/cipher.NewGCM) instead.
|
||||
package xts // import "golang.org/x/crypto/xts"
|
||||
|
||||
import (
|
||||
"crypto/cipher"
|
||||
"encoding/binary"
|
||||
"errors"
|
||||
"sync"
|
||||
|
||||
"golang.org/x/crypto/internal/subtle"
|
||||
)
|
||||
|
||||
// Cipher contains an expanded key structure. It doesn't contain mutable state
|
||||
// and therefore can be used concurrently.
|
||||
// Cipher contains an expanded key structure. It is safe for concurrent use if
|
||||
// the underlying block cipher is safe for concurrent use.
|
||||
type Cipher struct {
|
||||
k1, k2 cipher.Block
|
||||
}
|
||||
@@ -37,6 +42,12 @@ type Cipher struct {
|
||||
// only defined for 16-byte ciphers.
|
||||
const blockSize = 16
|
||||
|
||||
var tweakPool = sync.Pool{
|
||||
New: func() interface{} {
|
||||
return new([blockSize]byte)
|
||||
},
|
||||
}
|
||||
|
||||
// NewCipher creates a Cipher given a function for creating the underlying
|
||||
// block cipher (which must have a block size of 16 bytes). The key must be
|
||||
// twice the length of the underlying cipher's key.
|
||||
@@ -64,8 +75,14 @@ func (c *Cipher) Encrypt(ciphertext, plaintext []byte, sectorNum uint64) {
|
||||
if len(plaintext)%blockSize != 0 {
|
||||
panic("xts: plaintext is not a multiple of the block size")
|
||||
}
|
||||
if subtle.InexactOverlap(ciphertext[:len(plaintext)], plaintext) {
|
||||
panic("xts: invalid buffer overlap")
|
||||
}
|
||||
|
||||
var tweak [blockSize]byte
|
||||
tweak := tweakPool.Get().(*[blockSize]byte)
|
||||
for i := range tweak {
|
||||
tweak[i] = 0
|
||||
}
|
||||
binary.LittleEndian.PutUint64(tweak[:8], sectorNum)
|
||||
|
||||
c.k2.Encrypt(tweak[:], tweak[:])
|
||||
@@ -81,8 +98,10 @@ func (c *Cipher) Encrypt(ciphertext, plaintext []byte, sectorNum uint64) {
|
||||
plaintext = plaintext[blockSize:]
|
||||
ciphertext = ciphertext[blockSize:]
|
||||
|
||||
mul2(&tweak)
|
||||
mul2(tweak)
|
||||
}
|
||||
|
||||
tweakPool.Put(tweak)
|
||||
}
|
||||
|
||||
// Decrypt decrypts a sector of ciphertext and puts the result into plaintext.
|
||||
@@ -95,8 +114,14 @@ func (c *Cipher) Decrypt(plaintext, ciphertext []byte, sectorNum uint64) {
|
||||
if len(ciphertext)%blockSize != 0 {
|
||||
panic("xts: ciphertext is not a multiple of the block size")
|
||||
}
|
||||
if subtle.InexactOverlap(plaintext[:len(ciphertext)], ciphertext) {
|
||||
panic("xts: invalid buffer overlap")
|
||||
}
|
||||
|
||||
var tweak [blockSize]byte
|
||||
tweak := tweakPool.Get().(*[blockSize]byte)
|
||||
for i := range tweak {
|
||||
tweak[i] = 0
|
||||
}
|
||||
binary.LittleEndian.PutUint64(tweak[:8], sectorNum)
|
||||
|
||||
c.k2.Encrypt(tweak[:], tweak[:])
|
||||
@@ -112,8 +137,10 @@ func (c *Cipher) Decrypt(plaintext, ciphertext []byte, sectorNum uint64) {
|
||||
plaintext = plaintext[blockSize:]
|
||||
ciphertext = ciphertext[blockSize:]
|
||||
|
||||
mul2(&tweak)
|
||||
mul2(tweak)
|
||||
}
|
||||
|
||||
tweakPool.Put(tweak)
|
||||
}
|
||||
|
||||
// mul2 multiplies tweak by 2 in GF(2¹²⁸) with an irreducible polynomial of
|
||||
|
16
vendor/golang.org/x/crypto/xts/xts_test.go
generated
vendored
16
vendor/golang.org/x/crypto/xts/xts_test.go
generated
vendored
@@ -103,3 +103,19 @@ func TestShorterCiphertext(t *testing.T) {
|
||||
t.Errorf("En/Decryption is not inverse")
|
||||
}
|
||||
}
|
||||
|
||||
func BenchmarkXTS(b *testing.B) {
|
||||
b.ReportAllocs()
|
||||
c, err := NewCipher(aes.NewCipher, make([]byte, 32))
|
||||
if err != nil {
|
||||
b.Fatalf("NewCipher failed: %s", err)
|
||||
}
|
||||
plaintext := make([]byte, 32)
|
||||
encrypted := make([]byte, 48)
|
||||
decrypted := make([]byte, 48)
|
||||
|
||||
for i := 0; i < b.N; i++ {
|
||||
c.Encrypt(encrypted, plaintext, 0)
|
||||
c.Decrypt(decrypted, encrypted[:len(plaintext)], 0)
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user