summaryrefslogtreecommitdiff
path: root/src/pkg/crypto/des
diff options
context:
space:
mode:
Diffstat (limited to 'src/pkg/crypto/des')
-rw-r--r--src/pkg/crypto/des/block.go223
-rw-r--r--src/pkg/crypto/des/cipher.go73
-rw-r--r--src/pkg/crypto/des/const.go139
-rw-r--r--src/pkg/crypto/des/des_test.go1566
-rw-r--r--src/pkg/crypto/des/example_test.go25
5 files changed, 0 insertions, 2026 deletions
diff --git a/src/pkg/crypto/des/block.go b/src/pkg/crypto/des/block.go
deleted file mode 100644
index 26355a22e..000000000
--- a/src/pkg/crypto/des/block.go
+++ /dev/null
@@ -1,223 +0,0 @@
-// Copyright 2011 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 des
-
-import (
- "encoding/binary"
-)
-
-func cryptBlock(subkeys []uint64, dst, src []byte, decrypt bool) {
- b := binary.BigEndian.Uint64(src)
- b = permuteInitialBlock(b)
- left, right := uint32(b>>32), uint32(b)
-
- var subkey uint64
- for i := 0; i < 16; i++ {
- if decrypt {
- subkey = subkeys[15-i]
- } else {
- subkey = subkeys[i]
- }
-
- left, right = right, left^feistel(right, subkey)
- }
- // switch left & right and perform final permutation
- preOutput := (uint64(right) << 32) | uint64(left)
- binary.BigEndian.PutUint64(dst, permuteFinalBlock(preOutput))
-}
-
-// Encrypt one block from src into dst, using the subkeys.
-func encryptBlock(subkeys []uint64, dst, src []byte) {
- cryptBlock(subkeys, dst, src, false)
-}
-
-// Decrypt one block from src into dst, using the subkeys.
-func decryptBlock(subkeys []uint64, dst, src []byte) {
- cryptBlock(subkeys, dst, src, true)
-}
-
-// DES Feistel function
-func feistel(right uint32, key uint64) (result uint32) {
- sBoxLocations := key ^ expandBlock(right)
- var sBoxResult uint32
- for i := uint8(0); i < 8; i++ {
- sBoxLocation := uint8(sBoxLocations>>42) & 0x3f
- sBoxLocations <<= 6
- // row determined by 1st and 6th bit
- // column is middle four bits
- row := (sBoxLocation & 0x1) | ((sBoxLocation & 0x20) >> 4)
- column := (sBoxLocation >> 1) & 0xf
- sBoxResult ^= feistelBox[i][16*row+column]
- }
- return sBoxResult
-}
-
-// feistelBox[s][16*i+j] contains the output of permutationFunction
-// for sBoxes[s][i][j] << 4*(7-s)
-var feistelBox [8][64]uint32
-
-// general purpose function to perform DES block permutations
-func permuteBlock(src uint64, permutation []uint8) (block uint64) {
- for position, n := range permutation {
- bit := (src >> n) & 1
- block |= bit << uint((len(permutation)-1)-position)
- }
- return
-}
-
-func init() {
- for s := range sBoxes {
- for i := 0; i < 4; i++ {
- for j := 0; j < 16; j++ {
- f := uint64(sBoxes[s][i][j]) << (4 * (7 - uint(s)))
- f = permuteBlock(uint64(f), permutationFunction[:])
- feistelBox[s][16*i+j] = uint32(f)
- }
- }
- }
-}
-
-// expandBlock expands an input block of 32 bits,
-// producing an output block of 48 bits.
-func expandBlock(src uint32) (block uint64) {
- // rotate the 5 highest bits to the right.
- src = (src << 5) | (src >> 27)
- for i := 0; i < 8; i++ {
- block <<= 6
- // take the 6 bits on the right
- block |= uint64(src) & (1<<6 - 1)
- // advance by 4 bits.
- src = (src << 4) | (src >> 28)
- }
- return
-}
-
-// permuteInitialBlock is equivalent to the permutation defined
-// by initialPermutation.
-func permuteInitialBlock(block uint64) uint64 {
- // block = b7 b6 b5 b4 b3 b2 b1 b0 (8 bytes)
- b1 := block >> 48
- b2 := block << 48
- block ^= b1 ^ b2 ^ b1<<48 ^ b2>>48
-
- // block = b1 b0 b5 b4 b3 b2 b7 b6
- b1 = block >> 32 & 0xff00ff
- b2 = (block & 0xff00ff00)
- block ^= b1<<32 ^ b2 ^ b1<<8 ^ b2<<24 // exchange b0 b4 with b3 b7
-
- // block is now b1 b3 b5 b7 b0 b2 b4 b7, the permutation:
- // ... 8
- // ... 24
- // ... 40
- // ... 56
- // 7 6 5 4 3 2 1 0
- // 23 22 21 20 19 18 17 16
- // ... 32
- // ... 48
-
- // exchange 4,5,6,7 with 32,33,34,35 etc.
- b1 = block & 0x0f0f00000f0f0000
- b2 = block & 0x0000f0f00000f0f0
- block ^= b1 ^ b2 ^ b1>>12 ^ b2<<12
-
- // block is the permutation:
- //
- // [+8] [+40]
- //
- // 7 6 5 4
- // 23 22 21 20
- // 3 2 1 0
- // 19 18 17 16 [+32]
-
- // exchange 0,1,4,5 with 18,19,22,23
- b1 = block & 0x3300330033003300
- b2 = block & 0x00cc00cc00cc00cc
- block ^= b1 ^ b2 ^ b1>>6 ^ b2<<6
-
- // block is the permutation:
- // 15 14
- // 13 12
- // 11 10
- // 9 8
- // 7 6
- // 5 4
- // 3 2
- // 1 0 [+16] [+32] [+64]
-
- // exchange 0,2,4,6 with 9,11,13,15:
- b1 = block & 0xaaaaaaaa55555555
- block ^= b1 ^ b1>>33 ^ b1<<33
-
- // block is the permutation:
- // 6 14 22 30 38 46 54 62
- // 4 12 20 28 36 44 52 60
- // 2 10 18 26 34 42 50 58
- // 0 8 16 24 32 40 48 56
- // 7 15 23 31 39 47 55 63
- // 5 13 21 29 37 45 53 61
- // 3 11 19 27 35 43 51 59
- // 1 9 17 25 33 41 49 57
- return block
-}
-
-// permuteInitialBlock is equivalent to the permutation defined
-// by finalPermutation.
-func permuteFinalBlock(block uint64) uint64 {
- // Perform the same bit exchanges as permuteInitialBlock
- // but in reverse order.
- b1 := block & 0xaaaaaaaa55555555
- block ^= b1 ^ b1>>33 ^ b1<<33
-
- b1 = block & 0x3300330033003300
- b2 := block & 0x00cc00cc00cc00cc
- block ^= b1 ^ b2 ^ b1>>6 ^ b2<<6
-
- b1 = block & 0x0f0f00000f0f0000
- b2 = block & 0x0000f0f00000f0f0
- block ^= b1 ^ b2 ^ b1>>12 ^ b2<<12
-
- b1 = block >> 32 & 0xff00ff
- b2 = (block & 0xff00ff00)
- block ^= b1<<32 ^ b2 ^ b1<<8 ^ b2<<24
-
- b1 = block >> 48
- b2 = block << 48
- block ^= b1 ^ b2 ^ b1<<48 ^ b2>>48
- return block
-}
-
-// creates 16 28-bit blocks rotated according
-// to the rotation schedule
-func ksRotate(in uint32) (out []uint32) {
- out = make([]uint32, 16)
- last := in
- for i := 0; i < 16; i++ {
- // 28-bit circular left shift
- left := (last << (4 + ksRotations[i])) >> 4
- right := (last << 4) >> (32 - ksRotations[i])
- out[i] = left | right
- last = out[i]
- }
- return
-}
-
-// creates 16 56-bit subkeys from the original key
-func (c *desCipher) generateSubkeys(keyBytes []byte) {
- // apply PC1 permutation to key
- key := binary.BigEndian.Uint64(keyBytes)
- permutedKey := permuteBlock(key, permutedChoice1[:])
-
- // rotate halves of permuted key according to the rotation schedule
- leftRotations := ksRotate(uint32(permutedKey >> 28))
- rightRotations := ksRotate(uint32(permutedKey<<4) >> 4)
-
- // generate subkeys
- for i := 0; i < 16; i++ {
- // combine halves to form 56-bit input to PC2
- pc2Input := uint64(leftRotations[i])<<28 | uint64(rightRotations[i])
- // apply PC2 permutation to 7 byte input
- c.subkeys[i] = permuteBlock(pc2Input, permutedChoice2[:])
- }
-}
diff --git a/src/pkg/crypto/des/cipher.go b/src/pkg/crypto/des/cipher.go
deleted file mode 100644
index 2f929ca7b..000000000
--- a/src/pkg/crypto/des/cipher.go
+++ /dev/null
@@ -1,73 +0,0 @@
-// Copyright 2011 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 des
-
-import (
- "crypto/cipher"
- "strconv"
-)
-
-// The DES block size in bytes.
-const BlockSize = 8
-
-type KeySizeError int
-
-func (k KeySizeError) Error() string {
- return "crypto/des: invalid key size " + strconv.Itoa(int(k))
-}
-
-// desCipher is an instance of DES encryption.
-type desCipher struct {
- subkeys [16]uint64
-}
-
-// NewCipher creates and returns a new cipher.Block.
-func NewCipher(key []byte) (cipher.Block, error) {
- if len(key) != 8 {
- return nil, KeySizeError(len(key))
- }
-
- c := new(desCipher)
- c.generateSubkeys(key)
- return c, nil
-}
-
-func (c *desCipher) BlockSize() int { return BlockSize }
-
-func (c *desCipher) Encrypt(dst, src []byte) { encryptBlock(c.subkeys[:], dst, src) }
-
-func (c *desCipher) Decrypt(dst, src []byte) { decryptBlock(c.subkeys[:], dst, src) }
-
-// A tripleDESCipher is an instance of TripleDES encryption.
-type tripleDESCipher struct {
- cipher1, cipher2, cipher3 desCipher
-}
-
-// NewTripleDESCipher creates and returns a new cipher.Block.
-func NewTripleDESCipher(key []byte) (cipher.Block, error) {
- if len(key) != 24 {
- return nil, KeySizeError(len(key))
- }
-
- c := new(tripleDESCipher)
- c.cipher1.generateSubkeys(key[:8])
- c.cipher2.generateSubkeys(key[8:16])
- c.cipher3.generateSubkeys(key[16:])
- return c, nil
-}
-
-func (c *tripleDESCipher) BlockSize() int { return BlockSize }
-
-func (c *tripleDESCipher) Encrypt(dst, src []byte) {
- c.cipher1.Encrypt(dst, src)
- c.cipher2.Decrypt(dst, dst)
- c.cipher3.Encrypt(dst, dst)
-}
-
-func (c *tripleDESCipher) Decrypt(dst, src []byte) {
- c.cipher3.Decrypt(dst, src)
- c.cipher2.Encrypt(dst, dst)
- c.cipher1.Decrypt(dst, dst)
-}
diff --git a/src/pkg/crypto/des/const.go b/src/pkg/crypto/des/const.go
deleted file mode 100644
index 2bd485ee8..000000000
--- a/src/pkg/crypto/des/const.go
+++ /dev/null
@@ -1,139 +0,0 @@
-// Copyright 2010 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 des implements the Data Encryption Standard (DES) and the
-// Triple Data Encryption Algorithm (TDEA) as defined
-// in U.S. Federal Information Processing Standards Publication 46-3.
-package des
-
-// Used to perform an initial permutation of a 64-bit input block.
-var initialPermutation = [64]byte{
- 6, 14, 22, 30, 38, 46, 54, 62,
- 4, 12, 20, 28, 36, 44, 52, 60,
- 2, 10, 18, 26, 34, 42, 50, 58,
- 0, 8, 16, 24, 32, 40, 48, 56,
- 7, 15, 23, 31, 39, 47, 55, 63,
- 5, 13, 21, 29, 37, 45, 53, 61,
- 3, 11, 19, 27, 35, 43, 51, 59,
- 1, 9, 17, 25, 33, 41, 49, 57,
-}
-
-// Used to perform a final permutation of a 4-bit preoutput block. This is the
-// inverse of initialPermutation
-var finalPermutation = [64]byte{
- 24, 56, 16, 48, 8, 40, 0, 32,
- 25, 57, 17, 49, 9, 41, 1, 33,
- 26, 58, 18, 50, 10, 42, 2, 34,
- 27, 59, 19, 51, 11, 43, 3, 35,
- 28, 60, 20, 52, 12, 44, 4, 36,
- 29, 61, 21, 53, 13, 45, 5, 37,
- 30, 62, 22, 54, 14, 46, 6, 38,
- 31, 63, 23, 55, 15, 47, 7, 39,
-}
-
-// Used to expand an input block of 32 bits, producing an output block of 48
-// bits.
-var expansionFunction = [48]byte{
- 0, 31, 30, 29, 28, 27, 28, 27,
- 26, 25, 24, 23, 24, 23, 22, 21,
- 20, 19, 20, 19, 18, 17, 16, 15,
- 16, 15, 14, 13, 12, 11, 12, 11,
- 10, 9, 8, 7, 8, 7, 6, 5,
- 4, 3, 4, 3, 2, 1, 0, 31,
-}
-
-// Yields a 32-bit output from a 32-bit input
-var permutationFunction = [32]byte{
- 16, 25, 12, 11, 3, 20, 4, 15,
- 31, 17, 9, 6, 27, 14, 1, 22,
- 30, 24, 8, 18, 0, 5, 29, 23,
- 13, 19, 2, 26, 10, 21, 28, 7,
-}
-
-// Used in the key schedule to select 56 bits
-// from a 64-bit input.
-var permutedChoice1 = [56]byte{
- 7, 15, 23, 31, 39, 47, 55, 63,
- 6, 14, 22, 30, 38, 46, 54, 62,
- 5, 13, 21, 29, 37, 45, 53, 61,
- 4, 12, 20, 28, 1, 9, 17, 25,
- 33, 41, 49, 57, 2, 10, 18, 26,
- 34, 42, 50, 58, 3, 11, 19, 27,
- 35, 43, 51, 59, 36, 44, 52, 60,
-}
-
-// Used in the key schedule to produce each subkey by selecting 48 bits from
-// the 56-bit input
-var permutedChoice2 = [48]byte{
- 42, 39, 45, 32, 55, 51, 53, 28,
- 41, 50, 35, 46, 33, 37, 44, 52,
- 30, 48, 40, 49, 29, 36, 43, 54,
- 15, 4, 25, 19, 9, 1, 26, 16,
- 5, 11, 23, 8, 12, 7, 17, 0,
- 22, 3, 10, 14, 6, 20, 27, 24,
-}
-
-// 8 S-boxes composed of 4 rows and 16 columns
-// Used in the DES cipher function
-var sBoxes = [8][4][16]uint8{
- // S-box 1
- {
- {14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7},
- {0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8},
- {4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0},
- {15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13},
- },
- // S-box 2
- {
- {15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10},
- {3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5},
- {0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15},
- {13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9},
- },
- // S-box 3
- {
- {10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8},
- {13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1},
- {13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7},
- {1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12},
- },
- // S-box 4
- {
- {7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15},
- {13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9},
- {10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4},
- {3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14},
- },
- // S-box 5
- {
- {2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9},
- {14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6},
- {4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14},
- {11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3},
- },
- // S-box 6
- {
- {12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11},
- {10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8},
- {9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6},
- {4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13},
- },
- // S-box 7
- {
- {4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1},
- {13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6},
- {1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2},
- {6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12},
- },
- // S-box 8
- {
- {13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7},
- {1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2},
- {7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8},
- {2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11},
- },
-}
-
-// Size of left rotation per round in each half of the key schedule
-var ksRotations = [16]uint8{1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1}
diff --git a/src/pkg/crypto/des/des_test.go b/src/pkg/crypto/des/des_test.go
deleted file mode 100644
index 2bd525afe..000000000
--- a/src/pkg/crypto/des/des_test.go
+++ /dev/null
@@ -1,1566 +0,0 @@
-// Copyright 2011 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 des
-
-import (
- "bytes"
- "testing"
-)
-
-type CryptTest struct {
- key []byte
- in []byte
- out []byte
-}
-
-// some custom tests for DES
-var encryptDESTests = []CryptTest{
- {
- []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
- []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
- []byte{0x8c, 0xa6, 0x4d, 0xe9, 0xc1, 0xb1, 0x23, 0xa7}},
- {
- []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
- []byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
- []byte{0x35, 0x55, 0x50, 0xb2, 0x15, 0x0e, 0x24, 0x51}},
- {
- []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
- []byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef},
- []byte{0x61, 0x7b, 0x3a, 0x0c, 0xe8, 0xf0, 0x71, 0x00}},
- {
- []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
- []byte{0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10},
- []byte{0x92, 0x31, 0xf2, 0x36, 0xff, 0x9a, 0xa9, 0x5c}},
- {
- []byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
- []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
- []byte{0xca, 0xaa, 0xaf, 0x4d, 0xea, 0xf1, 0xdb, 0xae}},
- {
- []byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
- []byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
- []byte{0x73, 0x59, 0xb2, 0x16, 0x3e, 0x4e, 0xdc, 0x58}},
- {
- []byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
- []byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef},
- []byte{0x6d, 0xce, 0x0d, 0xc9, 0x00, 0x65, 0x56, 0xa3}},
- {
- []byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
- []byte{0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10},
- []byte{0x9e, 0x84, 0xc5, 0xf3, 0x17, 0x0f, 0x8e, 0xff}},
- {
- []byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef},
- []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
- []byte{0xd5, 0xd4, 0x4f, 0xf7, 0x20, 0x68, 0x3d, 0x0d}},
- {
- []byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef},
- []byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
- []byte{0x59, 0x73, 0x23, 0x56, 0xf3, 0x6f, 0xde, 0x06}},
- {
- []byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef},
- []byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef},
- []byte{0x56, 0xcc, 0x09, 0xe7, 0xcf, 0xdc, 0x4c, 0xef}},
- {
- []byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef},
- []byte{0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10},
- []byte{0x12, 0xc6, 0x26, 0xaf, 0x05, 0x8b, 0x43, 0x3b}},
- {
- []byte{0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10},
- []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
- []byte{0xa6, 0x8c, 0xdc, 0xa9, 0x0c, 0x90, 0x21, 0xf9}},
- {
- []byte{0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10},
- []byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
- []byte{0x2a, 0x2b, 0xb0, 0x08, 0xdf, 0x97, 0xc2, 0xf2}},
- {
- []byte{0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10},
- []byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef},
- []byte{0xed, 0x39, 0xd9, 0x50, 0xfa, 0x74, 0xbc, 0xc4}},
- {
- []byte{0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10},
- []byte{0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10},
- []byte{0xa9, 0x33, 0xf6, 0x18, 0x30, 0x23, 0xb3, 0x10}},
- {
- []byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef},
- []byte{0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11},
- []byte{0x17, 0x66, 0x8d, 0xfc, 0x72, 0x92, 0x53, 0x2d}},
- {
- []byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef},
- []byte{0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
- []byte{0xb4, 0xfd, 0x23, 0x16, 0x47, 0xa5, 0xbe, 0xc0}},
- {
- []byte{0x0e, 0x32, 0x92, 0x32, 0xea, 0x6d, 0x0d, 0x73},
- []byte{0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87},
- []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}},
- {
- []byte{0x73, 0x65, 0x63, 0x52, 0x33, 0x74, 0x24, 0x3b}, // "secR3t$;"
- []byte{0x61, 0x20, 0x74, 0x65, 0x73, 0x74, 0x31, 0x32}, // "a test12"
- []byte{0x37, 0x0d, 0xee, 0x2c, 0x1f, 0xb4, 0xf7, 0xa5}},
- {
- []byte{0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68}, // "abcdefgh"
- []byte{0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68}, // "abcdefgh"
- []byte{0x2a, 0x8d, 0x69, 0xde, 0x9d, 0x5f, 0xdf, 0xf9}},
- {
- []byte{0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68}, // "abcdefgh"
- []byte{0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38}, // "12345678"
- []byte{0x21, 0xc6, 0x0d, 0xa5, 0x34, 0x24, 0x8b, 0xce}},
- {
- []byte{0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38}, // "12345678"
- []byte{0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68}, // "abcdefgh"
- []byte{0x94, 0xd4, 0x43, 0x6b, 0xc3, 0xb5, 0xb6, 0x93}},
- {
- []byte{0x1f, 0x79, 0x90, 0x5f, 0x88, 0x01, 0xc8, 0x88}, // random
- []byte{0xc7, 0x46, 0x18, 0x73, 0xaf, 0x48, 0x5f, 0xb3}, // random
- []byte{0xb0, 0x93, 0x50, 0x88, 0xf9, 0x92, 0x44, 0x6a}},
- {
- []byte{0xe6, 0xf4, 0xf2, 0xdb, 0x31, 0x42, 0x53, 0x01}, // random
- []byte{0xff, 0x3d, 0x25, 0x50, 0x12, 0xe3, 0x4a, 0xc5}, // random
- []byte{0x86, 0x08, 0xd3, 0xd1, 0x6c, 0x2f, 0xd2, 0x55}},
- {
- []byte{0x69, 0xc1, 0x9d, 0xc1, 0x15, 0xc5, 0xfb, 0x2b}, // random
- []byte{0x1a, 0x22, 0x5c, 0xaf, 0x1f, 0x1d, 0xa3, 0xf9}, // random
- []byte{0x64, 0xba, 0x31, 0x67, 0x56, 0x91, 0x1e, 0xa7}},
- {
- []byte{0x6e, 0x5e, 0xe2, 0x47, 0xc4, 0xbf, 0xf6, 0x51}, // random
- []byte{0x11, 0xc9, 0x57, 0xff, 0x66, 0x89, 0x0e, 0xf0}, // random
- []byte{0x94, 0xc5, 0x35, 0xb2, 0xc5, 0x8b, 0x39, 0x72}},
-}
-
-var weakKeyTests = []CryptTest{
- {
- []byte{0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
- []byte{0x55, 0x74, 0xc0, 0xbd, 0x7c, 0xdf, 0xf7, 0x39}, // random
- nil},
- {
- []byte{0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe},
- []byte{0xe8, 0xe1, 0xa7, 0xc1, 0xde, 0x11, 0x89, 0xaa}, // random
- nil},
- {
- []byte{0xe0, 0xe0, 0xe0, 0xe0, 0xf1, 0xf1, 0xf1, 0xf1},
- []byte{0x50, 0x6a, 0x4b, 0x94, 0x3b, 0xed, 0x7d, 0xdc}, // random
- nil},
- {
- []byte{0x1f, 0x1f, 0x1f, 0x1f, 0x0e, 0x0e, 0x0e, 0x0e},
- []byte{0x88, 0x81, 0x56, 0x38, 0xec, 0x3b, 0x1c, 0x97}, // random
- nil},
- {
- []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
- []byte{0x17, 0xa0, 0x83, 0x62, 0x32, 0xfe, 0x9a, 0x0b}, // random
- nil},
- {
- []byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
- []byte{0xca, 0x8f, 0xca, 0x1f, 0x50, 0xc5, 0x7b, 0x49}, // random
- nil},
- {
- []byte{0xe1, 0xe1, 0xe1, 0xe1, 0xf0, 0xf0, 0xf0, 0xf0},
- []byte{0xb1, 0xea, 0xad, 0x7d, 0xe7, 0xc3, 0x7a, 0x43}, // random
- nil},
- {
- []byte{0x1e, 0x1e, 0x1e, 0x1e, 0x0f, 0x0f, 0x0f, 0x0f},
- []byte{0xae, 0x74, 0x7d, 0x6f, 0xef, 0x16, 0xbb, 0x81}, // random
- nil},
-}
-
-var semiWeakKeyTests = []CryptTest{
- // key and out contain the semi-weak key pair
- {
- []byte{0x01, 0x1f, 0x01, 0x1f, 0x01, 0x0e, 0x01, 0x0e},
- []byte{0x12, 0xfa, 0x31, 0x16, 0xf9, 0xc5, 0x0a, 0xe4}, // random
- []byte{0x1f, 0x01, 0x1f, 0x01, 0x0e, 0x01, 0x0e, 0x01}},
- {
- []byte{0x01, 0xe0, 0x01, 0xe0, 0x01, 0xf1, 0x01, 0xf1},
- []byte{0xb0, 0x4c, 0x7a, 0xee, 0xd2, 0xe5, 0x4d, 0xb7}, // random
- []byte{0xe0, 0x01, 0xe0, 0x01, 0xf1, 0x01, 0xf1, 0x01}},
- {
- []byte{0x01, 0xfe, 0x01, 0xfe, 0x01, 0xfe, 0x01, 0xfe},
- []byte{0xa4, 0x81, 0xcd, 0xb1, 0x64, 0x6f, 0xd3, 0xbc}, // random
- []byte{0xfe, 0x01, 0xfe, 0x01, 0xfe, 0x01, 0xfe, 0x01}},
- {
- []byte{0x1f, 0xe0, 0x1f, 0xe0, 0x0e, 0xf1, 0x0e, 0xf1},
- []byte{0xee, 0x27, 0xdd, 0x88, 0x4c, 0x22, 0xcd, 0xce}, // random
- []byte{0xe0, 0x1f, 0xe0, 0x1f, 0xf1, 0x0e, 0xf1, 0x0e}},
- {
- []byte{0x1f, 0xfe, 0x1f, 0xfe, 0x0e, 0xfe, 0x0e, 0xfe},
- []byte{0x19, 0x3d, 0xcf, 0x97, 0x70, 0xfb, 0xab, 0xe1}, // random
- []byte{0xfe, 0x1f, 0xfe, 0x1f, 0xfe, 0x0e, 0xfe, 0x0e}},
- {
- []byte{0xe0, 0xfe, 0xe0, 0xfe, 0xf1, 0xfe, 0xf1, 0xfe},
- []byte{0x7c, 0x82, 0x69, 0xe4, 0x1e, 0x86, 0x99, 0xd7}, // random
- []byte{0xfe, 0xe0, 0xfe, 0xe0, 0xfe, 0xf1, 0xfe, 0xf1}},
-}
-
-// some custom tests for TripleDES
-var encryptTripleDESTests = []CryptTest{
- {
- []byte{
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
- []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
- []byte{0x92, 0x95, 0xb5, 0x9b, 0xb3, 0x84, 0x73, 0x6e}},
- {
- []byte{
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
- []byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
- []byte{0xc1, 0x97, 0xf5, 0x58, 0x74, 0x8a, 0x20, 0xe7}},
- {
- []byte{
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
- []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
- []byte{0x3e, 0x68, 0x0a, 0xa7, 0x8b, 0x75, 0xdf, 0x18}},
- {
- []byte{
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
- []byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
- []byte{0x6d, 0x6a, 0x4a, 0x64, 0x4c, 0x7b, 0x8c, 0x91}},
- {
- []byte{ // "abcdefgh12345678ABCDEFGH"
- 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
- 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38,
- 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48},
- []byte{0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30}, // "00000000"
- []byte{0xe4, 0x61, 0xb7, 0x59, 0x68, 0x8b, 0xff, 0x66}},
- {
- []byte{ // "abcdefgh12345678ABCDEFGH"
- 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
- 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38,
- 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48},
- []byte{0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38}, // "12345678"
- []byte{0xdb, 0xd0, 0x92, 0xde, 0xf8, 0x34, 0xff, 0x58}},
- {
- []byte{ // "abcdefgh12345678ABCDEFGH"
- 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
- 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38,
- 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48},
- []byte{0xf0, 0xc5, 0x82, 0x22, 0xd3, 0xe6, 0x12, 0xd2}, // random
- []byte{0xba, 0xe4, 0x41, 0xb1, 0x3c, 0x37, 0x4d, 0xf4}},
- {
- []byte{ // random
- 0xd3, 0x7d, 0x45, 0xee, 0x22, 0xe9, 0xcf, 0x52,
- 0xf4, 0x65, 0xa2, 0x4f, 0x70, 0xd1, 0x81, 0x8a,
- 0x3d, 0xbe, 0x2f, 0x39, 0xc7, 0x71, 0xd2, 0xe9},
- []byte{0x49, 0x53, 0xc3, 0xe9, 0x78, 0xdf, 0x9f, 0xaf}, // random
- []byte{0x53, 0x40, 0x51, 0x24, 0xd8, 0x3c, 0xf9, 0x88}},
- {
- []byte{ // random
- 0xcb, 0x10, 0x7d, 0xda, 0x7e, 0x96, 0x57, 0x0a,
- 0xe8, 0xeb, 0xe8, 0x07, 0x8e, 0x87, 0xd3, 0x57,
- 0xb2, 0x61, 0x12, 0xb8, 0x2a, 0x90, 0xb7, 0x2f},
- []byte{0xa3, 0xc2, 0x60, 0xb1, 0x0b, 0xb7, 0x28, 0x6e}, // random
- []byte{0x56, 0x73, 0x7d, 0xfb, 0xb5, 0xa1, 0xc3, 0xde}},
-}
-
-// NIST Special Publication 800-20, Appendix A
-// Key for use with Table A.1 tests
-var tableA1Key = []byte{
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-}
-
-// Table A.1 Resulting Ciphertext from the Variable Plaintext Known Answer Test
-var tableA1Tests = []CryptTest{
- {nil, // 0
- []byte{0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
- []byte{0x95, 0xf8, 0xa5, 0xe5, 0xdd, 0x31, 0xd9, 0x00}},
- {nil, // 1
- []byte{0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
- []byte{0xdd, 0x7f, 0x12, 0x1c, 0xa5, 0x01, 0x56, 0x19}},
- {nil, // 2
- []byte{0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
- []byte{0x2e, 0x86, 0x53, 0x10, 0x4f, 0x38, 0x34, 0xea}},
- {nil, // 3
- []byte{0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
- []byte{0x4b, 0xd3, 0x88, 0xff, 0x6c, 0xd8, 0x1d, 0x4f}},
- {nil, // 4
- []byte{0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
- []byte{0x20, 0xb9, 0xe7, 0x67, 0xb2, 0xfb, 0x14, 0x56}},
- {nil, // 5
- []byte{0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
- []byte{0x55, 0x57, 0x93, 0x80, 0xd7, 0x71, 0x38, 0xef}},
- {nil, // 6
- []byte{0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
- []byte{0x6c, 0xc5, 0xde, 0xfa, 0xaf, 0x04, 0x51, 0x2f}},
- {nil, // 7
- []byte{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
- []byte{0x0d, 0x9f, 0x27, 0x9b, 0xa5, 0xd8, 0x72, 0x60}},
- {nil, // 8
- []byte{0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
- []byte{0xd9, 0x03, 0x1b, 0x02, 0x71, 0xbd, 0x5a, 0x0a}},
- {nil, // 9
- []byte{0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
- []byte{0x42, 0x42, 0x50, 0xb3, 0x7c, 0x3d, 0xd9, 0x51}},
- {nil, // 10
- []byte{0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
- []byte{0xb8, 0x06, 0x1b, 0x7e, 0xcd, 0x9a, 0x21, 0xe5}},
- {nil, // 11
- []byte{0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
- []byte{0xf1, 0x5d, 0x0f, 0x28, 0x6b, 0x65, 0xbd, 0x28}},
- {nil, // 12
- []byte{0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
- []byte{0xad, 0xd0, 0xcc, 0x8d, 0x6e, 0x5d, 0xeb, 0xa1}},
- {nil, // 13
- []byte{0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
- []byte{0xe6, 0xd5, 0xf8, 0x27, 0x52, 0xad, 0x63, 0xd1}},
- {nil, // 14
- []byte{0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
- []byte{0xec, 0xbf, 0xe3, 0xbd, 0x3f, 0x59, 0x1a, 0x5e}},
- {nil, // 15
- []byte{0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
- []byte{0xf3, 0x56, 0x83, 0x43, 0x79, 0xd1, 0x65, 0xcd}},
- {nil, // 16
- []byte{0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00},
- []byte{0x2b, 0x9f, 0x98, 0x2f, 0x20, 0x03, 0x7f, 0xa9}},
- {nil, // 17
- []byte{0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00},
- []byte{0x88, 0x9d, 0xe0, 0x68, 0xa1, 0x6f, 0x0b, 0xe6}},
- {nil, // 18
- []byte{0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00},
- []byte{0xe1, 0x9e, 0x27, 0x5d, 0x84, 0x6a, 0x12, 0x98}},
- {nil, // 19
- []byte{0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00},
- []byte{0x32, 0x9a, 0x8e, 0xd5, 0x23, 0xd7, 0x1a, 0xec}},
- {nil, // 20
- []byte{0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00},
- []byte{0xe7, 0xfc, 0xe2, 0x25, 0x57, 0xd2, 0x3c, 0x97}},
- {nil, // 21
- []byte{0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00},
- []byte{0x12, 0xa9, 0xf5, 0x81, 0x7f, 0xf2, 0xd6, 0x5d}},
- {nil, // 22
- []byte{0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00},
- []byte{0xa4, 0x84, 0xc3, 0xad, 0x38, 0xdc, 0x9c, 0x19}},
- {nil, // 23
- []byte{0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00},
- []byte{0xfb, 0xe0, 0x0a, 0x8a, 0x1e, 0xf8, 0xad, 0x72}},
- {nil, // 24
- []byte{0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00},
- []byte{0x75, 0x0d, 0x07, 0x94, 0x07, 0x52, 0x13, 0x63}},
- {nil, // 25
- []byte{0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00},
- []byte{0x64, 0xfe, 0xed, 0x9c, 0x72, 0x4c, 0x2f, 0xaf}},
- {nil, // 26
- []byte{0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00},
- []byte{0xf0, 0x2b, 0x26, 0x3b, 0x32, 0x8e, 0x2b, 0x60}},
- {nil, // 27
- []byte{0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00},
- []byte{0x9d, 0x64, 0x55, 0x5a, 0x9a, 0x10, 0xb8, 0x52}},
- {nil, // 28
- []byte{0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00},
- []byte{0xd1, 0x06, 0xff, 0x0b, 0xed, 0x52, 0x55, 0xd7}},
- {nil, // 29
- []byte{0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00},
- []byte{0xe1, 0x65, 0x2c, 0x6b, 0x13, 0x8c, 0x64, 0xa5}},
- {nil, // 30
- []byte{0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00},
- []byte{0xe4, 0x28, 0x58, 0x11, 0x86, 0xec, 0x8f, 0x46}},
- {nil, // 31
- []byte{0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00},
- []byte{0xae, 0xb5, 0xf5, 0xed, 0xe2, 0x2d, 0x1a, 0x36}},
- {nil, // 32
- []byte{0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00},
- []byte{0xe9, 0x43, 0xd7, 0x56, 0x8a, 0xec, 0x0c, 0x5c}},
- {nil, // 33
- []byte{0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00},
- []byte{0xdf, 0x98, 0xc8, 0x27, 0x6f, 0x54, 0xb0, 0x4b}},
- {nil, // 34
- []byte{0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00},
- []byte{0xb1, 0x60, 0xe4, 0x68, 0x0f, 0x6c, 0x69, 0x6f}},
- {nil, // 35
- []byte{0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00},
- []byte{0xfa, 0x07, 0x52, 0xb0, 0x7d, 0x9c, 0x4a, 0xb8}},
- {nil, // 36
- []byte{0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00},
- []byte{0xca, 0x3a, 0x2b, 0x03, 0x6d, 0xbc, 0x85, 0x02}},
- {nil, // 37
- []byte{0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00},
- []byte{0x5e, 0x09, 0x05, 0x51, 0x7b, 0xb5, 0x9b, 0xcf}},
- {nil, // 38
- []byte{0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00},
- []byte{0x81, 0x4e, 0xeb, 0x3b, 0x91, 0xd9, 0x07, 0x26}},
- {nil, // 39
- []byte{0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00},
- []byte{0x4d, 0x49, 0xdb, 0x15, 0x32, 0x91, 0x9c, 0x9f}},
- {nil, // 40
- []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00},
- []byte{0x25, 0xeb, 0x5f, 0xc3, 0xf8, 0xcf, 0x06, 0x21}},
- {nil, // 41
- []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00},
- []byte{0xab, 0x6a, 0x20, 0xc0, 0x62, 0x0d, 0x1c, 0x6f}},
- {nil, // 42
- []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00},
- []byte{0x79, 0xe9, 0x0d, 0xbc, 0x98, 0xf9, 0x2c, 0xca}},
- {nil, // 43
- []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00},
- []byte{0x86, 0x6e, 0xce, 0xdd, 0x80, 0x72, 0xbb, 0x0e}},
- {nil, // 44
- []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00},
- []byte{0x8b, 0x54, 0x53, 0x6f, 0x2f, 0x3e, 0x64, 0xa8}},
- {nil, // 45
- []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00},
- []byte{0xea, 0x51, 0xd3, 0x97, 0x55, 0x95, 0xb8, 0x6b}},
- {nil, // 46
- []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00},
- []byte{0xca, 0xff, 0xc6, 0xac, 0x45, 0x42, 0xde, 0x31}},
- {nil, // 47
- []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00},
- []byte{0x8d, 0xd4, 0x5a, 0x2d, 0xdf, 0x90, 0x79, 0x6c}},
- {nil, // 48
- []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00},
- []byte{0x10, 0x29, 0xd5, 0x5e, 0x88, 0x0e, 0xc2, 0xd0}},
- {nil, // 49
- []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00},
- []byte{0x5d, 0x86, 0xcb, 0x23, 0x63, 0x9d, 0xbe, 0xa9}},
- {nil, // 50
- []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00},
- []byte{0x1d, 0x1c, 0xa8, 0x53, 0xae, 0x7c, 0x0c, 0x5f}},
- {nil, // 51
- []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00},
- []byte{0xce, 0x33, 0x23, 0x29, 0x24, 0x8f, 0x32, 0x28}},
- {nil, // 52
- []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00},
- []byte{0x84, 0x05, 0xd1, 0xab, 0xe2, 0x4f, 0xb9, 0x42}},
- {nil, // 53
- []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00},
- []byte{0xe6, 0x43, 0xd7, 0x80, 0x90, 0xca, 0x42, 0x07}},
- {nil, // 54
- []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00},
- []byte{0x48, 0x22, 0x1b, 0x99, 0x37, 0x74, 0x8a, 0x23}},
- {nil, // 55
- []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00},
- []byte{0xdd, 0x7c, 0x0b, 0xbd, 0x61, 0xfa, 0xfd, 0x54}},
- {nil, // 56
- []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80},
- []byte{0x2f, 0xbc, 0x29, 0x1a, 0x57, 0x0d, 0xb5, 0xc4}},
- {nil, // 57
- []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40},
- []byte{0xe0, 0x7c, 0x30, 0xd7, 0xe4, 0xe2, 0x6e, 0x12}},
- {nil, // 58
- []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20},
- []byte{0x09, 0x53, 0xe2, 0x25, 0x8e, 0x8e, 0x90, 0xa1}},
- {nil, // 59
- []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10},
- []byte{0x5b, 0x71, 0x1b, 0xc4, 0xce, 0xeb, 0xf2, 0xee}},
- {nil, // 60
- []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08},
- []byte{0xcc, 0x08, 0x3f, 0x1e, 0x6d, 0x9e, 0x85, 0xf6}},
- {nil, // 61
- []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04},
- []byte{0xd2, 0xfd, 0x88, 0x67, 0xd5, 0x0d, 0x2d, 0xfe}},
- {nil, // 62
- []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02},
- []byte{0x06, 0xe7, 0xea, 0x22, 0xce, 0x92, 0x70, 0x8f}},
- {nil, // 63
- []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01},
- []byte{0x16, 0x6b, 0x40, 0xb4, 0x4a, 0xba, 0x4b, 0xd6}},
-}
-
-// Plaintext for use with Table A.2 tests
-var tableA2Plaintext = []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
-
-// Table A.2 Resulting Ciphertext from the Variable Key Known Answer Test
-var tableA2Tests = []CryptTest{
- { // 0
- []byte{
- 0x80, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x80, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x80, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
- nil,
- []byte{0x95, 0xa8, 0xd7, 0x28, 0x13, 0xda, 0xa9, 0x4d}},
- { // 1
- []byte{
- 0x40, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x40, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x40, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
- nil,
- []byte{0x0e, 0xec, 0x14, 0x87, 0xdd, 0x8c, 0x26, 0xd5}},
- { // 2
- []byte{
- 0x20, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x20, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x20, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
- nil,
- []byte{0x7a, 0xd1, 0x6f, 0xfb, 0x79, 0xc4, 0x59, 0x26}},
- { // 3
- []byte{
- 0x10, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x10, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x10, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
- nil,
- []byte{0xd3, 0x74, 0x62, 0x94, 0xca, 0x6a, 0x6c, 0xf3}},
- { // 4
- []byte{
- 0x08, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x08, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x08, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
- nil,
- []byte{0x80, 0x9f, 0x5f, 0x87, 0x3c, 0x1f, 0xd7, 0x61}},
- { // 5
- []byte{
- 0x04, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x04, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x04, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
- nil,
- []byte{0xc0, 0x2f, 0xaf, 0xfe, 0xc9, 0x89, 0xd1, 0xfc}},
- { // 6
- []byte{
- 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
- nil,
- []byte{0x46, 0x15, 0xaa, 0x1d, 0x33, 0xe7, 0x2f, 0x10}},
- { // 7
- []byte{
- 0x01, 0x80, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x80, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x80, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
- nil,
- []byte{0x20, 0x55, 0x12, 0x33, 0x50, 0xc0, 0x08, 0x58}},
- { // 8
- []byte{
- 0x01, 0x40, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x40, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x40, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
- nil,
- []byte{0xdf, 0x3b, 0x99, 0xd6, 0x57, 0x73, 0x97, 0xc8}},
- { // 9
- []byte{
- 0x01, 0x20, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x20, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x20, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
- nil,
- []byte{0x31, 0xfe, 0x17, 0x36, 0x9b, 0x52, 0x88, 0xc9}},
- { // 10
- []byte{
- 0x01, 0x10, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x10, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x10, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
- nil,
- []byte{0xdf, 0xdd, 0x3c, 0xc6, 0x4d, 0xae, 0x16, 0x42}},
- { // 11
- []byte{
- 0x01, 0x08, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x08, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x08, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
- nil,
- []byte{0x17, 0x8c, 0x83, 0xce, 0x2b, 0x39, 0x9d, 0x94}},
- { // 12
- []byte{
- 0x01, 0x04, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x04, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x04, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
- nil,
- []byte{0x50, 0xf6, 0x36, 0x32, 0x4a, 0x9b, 0x7f, 0x80}},
- { // 13
- []byte{
- 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
- nil,
- []byte{0xa8, 0x46, 0x8e, 0xe3, 0xbc, 0x18, 0xf0, 0x6d}},
- { // 14
- []byte{
- 0x01, 0x01, 0x80, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x80, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x80, 0x01, 0x01, 0x01, 0x01, 0x01},
- nil,
- []byte{0xa2, 0xdc, 0x9e, 0x92, 0xfd, 0x3c, 0xde, 0x92}},
- { // 15
- []byte{
- 0x01, 0x01, 0x40, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x40, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x40, 0x01, 0x01, 0x01, 0x01, 0x01},
- nil,
- []byte{0xca, 0xc0, 0x9f, 0x79, 0x7d, 0x03, 0x12, 0x87}},
- { // 16
- []byte{
- 0x01, 0x01, 0x20, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x20, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x20, 0x01, 0x01, 0x01, 0x01, 0x01},
- nil,
- []byte{0x90, 0xba, 0x68, 0x0b, 0x22, 0xae, 0xb5, 0x25}},
- { // 17
- []byte{
- 0x01, 0x01, 0x10, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x10, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x10, 0x01, 0x01, 0x01, 0x01, 0x01},
- nil,
- []byte{0xce, 0x7a, 0x24, 0xf3, 0x50, 0xe2, 0x80, 0xb6}},
- { // 18
- []byte{
- 0x01, 0x01, 0x08, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x08, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x08, 0x01, 0x01, 0x01, 0x01, 0x01},
- nil,
- []byte{0x88, 0x2b, 0xff, 0x0a, 0xa0, 0x1a, 0x0b, 0x87}},
- { // 19
- []byte{
- 0x01, 0x01, 0x04, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x04, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x04, 0x01, 0x01, 0x01, 0x01, 0x01},
- nil,
- []byte{0x25, 0x61, 0x02, 0x88, 0x92, 0x45, 0x11, 0xc2}},
- { // 20
- []byte{
- 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01},
- nil,
- []byte{0xc7, 0x15, 0x16, 0xc2, 0x9c, 0x75, 0xd1, 0x70}},
- { // 21
- []byte{
- 0x01, 0x01, 0x01, 0x80, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x80, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x80, 0x01, 0x01, 0x01, 0x01},
- nil,
- []byte{0x51, 0x99, 0xc2, 0x9a, 0x52, 0xc9, 0xf0, 0x59}},
- { // 22
- []byte{
- 0x01, 0x01, 0x01, 0x40, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x40, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x40, 0x01, 0x01, 0x01, 0x01},
- nil,
- []byte{0xc2, 0x2f, 0x0a, 0x29, 0x4a, 0x71, 0xf2, 0x9f}},
- { // 23
- []byte{
- 0x01, 0x01, 0x01, 0x20, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x20, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x20, 0x01, 0x01, 0x01, 0x01},
- nil,
- []byte{0xee, 0x37, 0x14, 0x83, 0x71, 0x4c, 0x02, 0xea}},
- { // 24
- []byte{
- 0x01, 0x01, 0x01, 0x10, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x10, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x10, 0x01, 0x01, 0x01, 0x01},
- nil,
- []byte{0xa8, 0x1f, 0xbd, 0x44, 0x8f, 0x9e, 0x52, 0x2f}},
- { // 25
- []byte{
- 0x01, 0x01, 0x01, 0x08, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x08, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x08, 0x01, 0x01, 0x01, 0x01},
- nil,
- []byte{0x4f, 0x64, 0x4c, 0x92, 0xe1, 0x92, 0xdf, 0xed}},
- { // 26
- []byte{
- 0x01, 0x01, 0x01, 0x04, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x04, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x04, 0x01, 0x01, 0x01, 0x01},
- nil,
- []byte{0x1a, 0xfa, 0x9a, 0x66, 0xa6, 0xdf, 0x92, 0xae}},
- { // 27
- []byte{
- 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01},
- nil,
- []byte{0xb3, 0xc1, 0xcc, 0x71, 0x5c, 0xb8, 0x79, 0xd8}},
- { // 28
- []byte{
- 0x01, 0x01, 0x01, 0x01, 0x80, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x80, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x80, 0x01, 0x01, 0x01},
- nil,
- []byte{0x19, 0xd0, 0x32, 0xe6, 0x4a, 0xb0, 0xbd, 0x8b}},
- { // 29
- []byte{
- 0x01, 0x01, 0x01, 0x01, 0x40, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x40, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x40, 0x01, 0x01, 0x01},
- nil,
- []byte{0x3c, 0xfa, 0xa7, 0xa7, 0xdc, 0x87, 0x20, 0xdc}},
- { // 30
- []byte{
- 0x01, 0x01, 0x01, 0x01, 0x20, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x20, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x20, 0x01, 0x01, 0x01},
- nil,
- []byte{0xb7, 0x26, 0x5f, 0x7f, 0x44, 0x7a, 0xc6, 0xf3}},
- { // 31
- []byte{
- 0x01, 0x01, 0x01, 0x01, 0x10, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x10, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x10, 0x01, 0x01, 0x01},
- nil,
- []byte{0x9d, 0xb7, 0x3b, 0x3c, 0x0d, 0x16, 0x3f, 0x54}},
- { // 32
- []byte{
- 0x01, 0x01, 0x01, 0x01, 0x08, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x08, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x08, 0x01, 0x01, 0x01},
- nil,
- []byte{0x81, 0x81, 0xb6, 0x5b, 0xab, 0xf4, 0xa9, 0x75}},
- { // 33
- []byte{
- 0x01, 0x01, 0x01, 0x01, 0x04, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x04, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x04, 0x01, 0x01, 0x01},
- nil,
- []byte{0x93, 0xc9, 0xb6, 0x40, 0x42, 0xea, 0xa2, 0x40}},
- { // 34
- []byte{
- 0x01, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01},
- nil,
- []byte{0x55, 0x70, 0x53, 0x08, 0x29, 0x70, 0x55, 0x92}},
- { // 35
- []byte{
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x80, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x80, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x80, 0x01, 0x01},
- nil,
- []byte{0x86, 0x38, 0x80, 0x9e, 0x87, 0x87, 0x87, 0xa0}},
- { // 36
- []byte{
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x40, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x40, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x40, 0x01, 0x01},
- nil,
- []byte{0x41, 0xb9, 0xa7, 0x9a, 0xf7, 0x9a, 0xc2, 0x08}},
- { // 37
- []byte{
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x20, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x20, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x20, 0x01, 0x01},
- nil,
- []byte{0x7a, 0x9b, 0xe4, 0x2f, 0x20, 0x09, 0xa8, 0x92}},
- { // 38
- []byte{
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x10, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x10, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x10, 0x01, 0x01},
- nil,
- []byte{0x29, 0x03, 0x8d, 0x56, 0xba, 0x6d, 0x27, 0x45}},
- { // 39
- []byte{
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x08, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x08, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x08, 0x01, 0x01},
- nil,
- []byte{0x54, 0x95, 0xc6, 0xab, 0xf1, 0xe5, 0xdf, 0x51}},
- { // 40
- []byte{
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x01, 0x01},
- nil,
- []byte{0xae, 0x13, 0xdb, 0xd5, 0x61, 0x48, 0x89, 0x33}},
- { // 41
- []byte{
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01},
- nil,
- []byte{0x02, 0x4d, 0x1f, 0xfa, 0x89, 0x04, 0xe3, 0x89}},
- { // 42
- []byte{
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x80, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x80, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x80, 0x01},
- nil,
- []byte{0xd1, 0x39, 0x97, 0x12, 0xf9, 0x9b, 0xf0, 0x2e}},
- { // 43
- []byte{
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x40, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x40, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x40, 0x01},
- nil,
- []byte{0x14, 0xc1, 0xd7, 0xc1, 0xcf, 0xfe, 0xc7, 0x9e}},
- { // 44
- []byte{
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x20, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x20, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x20, 0x01},
- nil,
- []byte{0x1d, 0xe5, 0x27, 0x9d, 0xae, 0x3b, 0xed, 0x6f}},
- { // 45
- []byte{
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x10, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x10, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x10, 0x01},
- nil,
- []byte{0xe9, 0x41, 0xa3, 0x3f, 0x85, 0x50, 0x13, 0x03}},
- { // 46
- []byte{
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x08, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x08, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x08, 0x01},
- nil,
- []byte{0xda, 0x99, 0xdb, 0xbc, 0x9a, 0x03, 0xf3, 0x79}},
- { // 47
- []byte{
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x01},
- nil,
- []byte{0xb7, 0xfc, 0x92, 0xf9, 0x1d, 0x8e, 0x92, 0xe9}},
- { // 48
- []byte{
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x01},
- nil,
- []byte{0xae, 0x8e, 0x5c, 0xaa, 0x3c, 0xa0, 0x4e, 0x85}},
- { // 49
- []byte{
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x80,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x80,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x80},
- nil,
- []byte{0x9c, 0xc6, 0x2d, 0xf4, 0x3b, 0x6e, 0xed, 0x74}},
- { // 50
- []byte{
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x40,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x40,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x40},
- nil,
- []byte{0xd8, 0x63, 0xdb, 0xb5, 0xc5, 0x9a, 0x91, 0xa0}},
- { // 50
- []byte{
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x20,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x20,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x20},
- nil,
- []byte{0xa1, 0xab, 0x21, 0x90, 0x54, 0x5b, 0x91, 0xd7}},
- { // 52
- []byte{
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x10,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x10,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x10},
- nil,
- []byte{0x08, 0x75, 0x04, 0x1e, 0x64, 0xc5, 0x70, 0xf7}},
- { // 53
- []byte{
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x08,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x08,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x08},
- nil,
- []byte{0x5a, 0x59, 0x45, 0x28, 0xbe, 0xbe, 0xf1, 0xcc}},
- { // 54
- []byte{
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04},
- nil,
- []byte{0xfc, 0xdb, 0x32, 0x91, 0xde, 0x21, 0xf0, 0xc0}},
- { // 55
- []byte{
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02},
- nil,
- []byte{0x86, 0x9e, 0xfd, 0x7f, 0x9f, 0x26, 0x5a, 0x09}},
-}
-
-// Plaintext for use with Table A.3 tests
-var tableA3Plaintext = []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
-
-// Table A.3 Values To Be Used for the Permutation Operation Known Answer Test
-var tableA3Tests = []CryptTest{
- { // 0
- []byte{
- 0x10, 0x46, 0x91, 0x34, 0x89, 0x98, 0x01, 0x31,
- 0x10, 0x46, 0x91, 0x34, 0x89, 0x98, 0x01, 0x31,
- 0x10, 0x46, 0x91, 0x34, 0x89, 0x98, 0x01, 0x31,
- },
- nil,
- []byte{0x88, 0xd5, 0x5e, 0x54, 0xf5, 0x4c, 0x97, 0xb4}},
- { // 1
- []byte{
- 0x10, 0x07, 0x10, 0x34, 0x89, 0x98, 0x80, 0x20,
- 0x10, 0x07, 0x10, 0x34, 0x89, 0x98, 0x80, 0x20,
- 0x10, 0x07, 0x10, 0x34, 0x89, 0x98, 0x80, 0x20,
- },
- nil,
- []byte{0x0c, 0x0c, 0xc0, 0x0c, 0x83, 0xea, 0x48, 0xfd}},
- { // 2
- []byte{
- 0x10, 0x07, 0x10, 0x34, 0xc8, 0x98, 0x01, 0x20,
- 0x10, 0x07, 0x10, 0x34, 0xc8, 0x98, 0x01, 0x20,
- 0x10, 0x07, 0x10, 0x34, 0xc8, 0x98, 0x01, 0x20,
- },
- nil,
- []byte{0x83, 0xbc, 0x8e, 0xf3, 0xa6, 0x57, 0x01, 0x83}},
- { // 3
- []byte{
- 0x10, 0x46, 0x10, 0x34, 0x89, 0x98, 0x80, 0x20,
- 0x10, 0x46, 0x10, 0x34, 0x89, 0x98, 0x80, 0x20,
- 0x10, 0x46, 0x10, 0x34, 0x89, 0x98, 0x80, 0x20,
- },
- nil,
- []byte{0xdf, 0x72, 0x5d, 0xca, 0xd9, 0x4e, 0xa2, 0xe9}},
- { // 4
- []byte{
- 0x10, 0x86, 0x91, 0x15, 0x19, 0x19, 0x01, 0x01,
- 0x10, 0x86, 0x91, 0x15, 0x19, 0x19, 0x01, 0x01,
- 0x10, 0x86, 0x91, 0x15, 0x19, 0x19, 0x01, 0x01,
- },
- nil,
- []byte{0xe6, 0x52, 0xb5, 0x3b, 0x55, 0x0b, 0xe8, 0xb0}},
- { // 5
- []byte{
- 0x10, 0x86, 0x91, 0x15, 0x19, 0x58, 0x01, 0x01,
- 0x10, 0x86, 0x91, 0x15, 0x19, 0x58, 0x01, 0x01,
- 0x10, 0x86, 0x91, 0x15, 0x19, 0x58, 0x01, 0x01,
- },
- nil,
- []byte{0xaf, 0x52, 0x71, 0x20, 0xc4, 0x85, 0xcb, 0xb0}},
- { // 6
- []byte{
- 0x51, 0x07, 0xb0, 0x15, 0x19, 0x58, 0x01, 0x01,
- 0x51, 0x07, 0xb0, 0x15, 0x19, 0x58, 0x01, 0x01,
- 0x51, 0x07, 0xb0, 0x15, 0x19, 0x58, 0x01, 0x01,
- },
- nil,
- []byte{0x0f, 0x04, 0xce, 0x39, 0x3d, 0xb9, 0x26, 0xd5}},
- { // 7
- []byte{
- 0x10, 0x07, 0xb0, 0x15, 0x19, 0x19, 0x01, 0x01,
- 0x10, 0x07, 0xb0, 0x15, 0x19, 0x19, 0x01, 0x01,
- 0x10, 0x07, 0xb0, 0x15, 0x19, 0x19, 0x01, 0x01,
- },
- nil,
- []byte{0xc9, 0xf0, 0x0f, 0xfc, 0x74, 0x07, 0x90, 0x67}},
- { // 8
- []byte{
- 0x31, 0x07, 0x91, 0x54, 0x98, 0x08, 0x01, 0x01,
- 0x31, 0x07, 0x91, 0x54, 0x98, 0x08, 0x01, 0x01,
- 0x31, 0x07, 0x91, 0x54, 0x98, 0x08, 0x01, 0x01,
- },
- nil,
- []byte{0x7c, 0xfd, 0x82, 0xa5, 0x93, 0x25, 0x2b, 0x4e}},
- { // 9
- []byte{
- 0x31, 0x07, 0x91, 0x94, 0x98, 0x08, 0x01, 0x01,
- 0x31, 0x07, 0x91, 0x94, 0x98, 0x08, 0x01, 0x01,
- 0x31, 0x07, 0x91, 0x94, 0x98, 0x08, 0x01, 0x01,
- },
- nil,
- []byte{0xcb, 0x49, 0xa2, 0xf9, 0xe9, 0x13, 0x63, 0xe3}},
- { // 10
- []byte{
- 0x10, 0x07, 0x91, 0x15, 0xb9, 0x08, 0x01, 0x40,
- 0x10, 0x07, 0x91, 0x15, 0xb9, 0x08, 0x01, 0x40,
- 0x10, 0x07, 0x91, 0x15, 0xb9, 0x08, 0x01, 0x40,
- },
- nil,
- []byte{0x00, 0xb5, 0x88, 0xbe, 0x70, 0xd2, 0x3f, 0x56}},
- { // 11
- []byte{
- 0x31, 0x07, 0x91, 0x15, 0x98, 0x08, 0x01, 0x40,
- 0x31, 0x07, 0x91, 0x15, 0x98, 0x08, 0x01, 0x40,
- 0x31, 0x07, 0x91, 0x15, 0x98, 0x08, 0x01, 0x40,
- },
- nil,
- []byte{0x40, 0x6a, 0x9a, 0x6a, 0xb4, 0x33, 0x99, 0xae}},
- { // 12
- []byte{
- 0x10, 0x07, 0xd0, 0x15, 0x89, 0x98, 0x01, 0x01,
- 0x10, 0x07, 0xd0, 0x15, 0x89, 0x98, 0x01, 0x01,
- 0x10, 0x07, 0xd0, 0x15, 0x89, 0x98, 0x01, 0x01,
- },
- nil,
- []byte{0x6c, 0xb7, 0x73, 0x61, 0x1d, 0xca, 0x9a, 0xda}},
- { // 13
- []byte{
- 0x91, 0x07, 0x91, 0x15, 0x89, 0x98, 0x01, 0x01,
- 0x91, 0x07, 0x91, 0x15, 0x89, 0x98, 0x01, 0x01,
- 0x91, 0x07, 0x91, 0x15, 0x89, 0x98, 0x01, 0x01,
- },
- nil,
- []byte{0x67, 0xfd, 0x21, 0xc1, 0x7d, 0xbb, 0x5d, 0x70}},
- { // 14
- []byte{
- 0x91, 0x07, 0xd0, 0x15, 0x89, 0x19, 0x01, 0x01,
- 0x91, 0x07, 0xd0, 0x15, 0x89, 0x19, 0x01, 0x01,
- 0x91, 0x07, 0xd0, 0x15, 0x89, 0x19, 0x01, 0x01,
- },
- nil,
- []byte{0x95, 0x92, 0xcb, 0x41, 0x10, 0x43, 0x07, 0x87}},
- { // 15
- []byte{
- 0x10, 0x07, 0xd0, 0x15, 0x98, 0x98, 0x01, 0x20,
- 0x10, 0x07, 0xd0, 0x15, 0x98, 0x98, 0x01, 0x20,
- 0x10, 0x07, 0xd0, 0x15, 0x98, 0x98, 0x01, 0x20,
- },
- nil,
- []byte{0xa6, 0xb7, 0xff, 0x68, 0xa3, 0x18, 0xdd, 0xd3}},
- { // 16
- []byte{
- 0x10, 0x07, 0x94, 0x04, 0x98, 0x19, 0x01, 0x01,
- 0x10, 0x07, 0x94, 0x04, 0x98, 0x19, 0x01, 0x01,
- 0x10, 0x07, 0x94, 0x04, 0x98, 0x19, 0x01, 0x01,
- },
- nil,
- []byte{0x4d, 0x10, 0x21, 0x96, 0xc9, 0x14, 0xca, 0x16}},
- { // 17
- []byte{
- 0x01, 0x07, 0x91, 0x04, 0x91, 0x19, 0x04, 0x01,
- 0x01, 0x07, 0x91, 0x04, 0x91, 0x19, 0x04, 0x01,
- 0x01, 0x07, 0x91, 0x04, 0x91, 0x19, 0x04, 0x01,
- },
- nil,
- []byte{0x2d, 0xfa, 0x9f, 0x45, 0x73, 0x59, 0x49, 0x65}},
- { // 18
- []byte{
- 0x01, 0x07, 0x91, 0x04, 0x91, 0x19, 0x01, 0x01,
- 0x01, 0x07, 0x91, 0x04, 0x91, 0x19, 0x01, 0x01,
- 0x01, 0x07, 0x91, 0x04, 0x91, 0x19, 0x01, 0x01,
- },
- nil,
- []byte{0xb4, 0x66, 0x04, 0x81, 0x6c, 0x0e, 0x07, 0x74}},
- { // 19
- []byte{
- 0x01, 0x07, 0x94, 0x04, 0x91, 0x19, 0x04, 0x01,
- 0x01, 0x07, 0x94, 0x04, 0x91, 0x19, 0x04, 0x01,
- 0x01, 0x07, 0x94, 0x04, 0x91, 0x19, 0x04, 0x01,
- },
- nil,
- []byte{0x6e, 0x7e, 0x62, 0x21, 0xa4, 0xf3, 0x4e, 0x87}},
- { // 20
- []byte{
- 0x19, 0x07, 0x92, 0x10, 0x98, 0x1a, 0x01, 0x01,
- 0x19, 0x07, 0x92, 0x10, 0x98, 0x1a, 0x01, 0x01,
- 0x19, 0x07, 0x92, 0x10, 0x98, 0x1a, 0x01, 0x01,
- },
- nil,
- []byte{0xaa, 0x85, 0xe7, 0x46, 0x43, 0x23, 0x31, 0x99}},
- { // 21
- []byte{
- 0x10, 0x07, 0x91, 0x19, 0x98, 0x19, 0x08, 0x01,
- 0x10, 0x07, 0x91, 0x19, 0x98, 0x19, 0x08, 0x01,
- 0x10, 0x07, 0x91, 0x19, 0x98, 0x19, 0x08, 0x01,
- },
- nil,
- []byte{0x2e, 0x5a, 0x19, 0xdb, 0x4d, 0x19, 0x62, 0xd6}},
- { // 22
- []byte{
- 0x10, 0x07, 0x91, 0x19, 0x98, 0x1a, 0x08, 0x01,
- 0x10, 0x07, 0x91, 0x19, 0x98, 0x1a, 0x08, 0x01,
- 0x10, 0x07, 0x91, 0x19, 0x98, 0x1a, 0x08, 0x01,
- },
- nil,
- []byte{0x23, 0xa8, 0x66, 0xa8, 0x09, 0xd3, 0x08, 0x94}},
- { // 23
- []byte{
- 0x10, 0x07, 0x92, 0x10, 0x98, 0x19, 0x01, 0x01,
- 0x10, 0x07, 0x92, 0x10, 0x98, 0x19, 0x01, 0x01,
- 0x10, 0x07, 0x92, 0x10, 0x98, 0x19, 0x01, 0x01,
- },
- nil,
- []byte{0xd8, 0x12, 0xd9, 0x61, 0xf0, 0x17, 0xd3, 0x20}},
- { // 24
- []byte{
- 0x10, 0x07, 0x91, 0x15, 0x98, 0x19, 0x01, 0x0b,
- 0x10, 0x07, 0x91, 0x15, 0x98, 0x19, 0x01, 0x0b,
- 0x10, 0x07, 0x91, 0x15, 0x98, 0x19, 0x01, 0x0b,
- },
- nil,
- []byte{0x05, 0x56, 0x05, 0x81, 0x6e, 0x58, 0x60, 0x8f}},
- { // 25
- []byte{
- 0x10, 0x04, 0x80, 0x15, 0x98, 0x19, 0x01, 0x01,
- 0x10, 0x04, 0x80, 0x15, 0x98, 0x19, 0x01, 0x01,
- 0x10, 0x04, 0x80, 0x15, 0x98, 0x19, 0x01, 0x01,
- },
- nil,
- []byte{0xab, 0xd8, 0x8e, 0x8b, 0x1b, 0x77, 0x16, 0xf1}},
- { // 26
- []byte{
- 0x10, 0x04, 0x80, 0x15, 0x98, 0x19, 0x01, 0x02,
- 0x10, 0x04, 0x80, 0x15, 0x98, 0x19, 0x01, 0x02,
- 0x10, 0x04, 0x80, 0x15, 0x98, 0x19, 0x01, 0x02,
- },
- nil,
- []byte{0x53, 0x7a, 0xc9, 0x5b, 0xe6, 0x9d, 0xa1, 0xe1}},
- { // 27
- []byte{
- 0x10, 0x04, 0x80, 0x15, 0x98, 0x19, 0x01, 0x08,
- 0x10, 0x04, 0x80, 0x15, 0x98, 0x19, 0x01, 0x08,
- 0x10, 0x04, 0x80, 0x15, 0x98, 0x19, 0x01, 0x08,
- },
- nil,
- []byte{0xae, 0xd0, 0xf6, 0xae, 0x3c, 0x25, 0xcd, 0xd8}},
- { // 28
- []byte{
- 0x10, 0x02, 0x91, 0x15, 0x98, 0x10, 0x01, 0x04,
- 0x10, 0x02, 0x91, 0x15, 0x98, 0x10, 0x01, 0x04,
- 0x10, 0x02, 0x91, 0x15, 0x98, 0x10, 0x01, 0x04,
- },
- nil,
- []byte{0xb3, 0xe3, 0x5a, 0x5e, 0xe5, 0x3e, 0x7b, 0x8d}},
- { // 29
- []byte{
- 0x10, 0x02, 0x91, 0x15, 0x98, 0x19, 0x01, 0x04,
- 0x10, 0x02, 0x91, 0x15, 0x98, 0x19, 0x01, 0x04,
- 0x10, 0x02, 0x91, 0x15, 0x98, 0x19, 0x01, 0x04,
- },
- nil,
- []byte{0x61, 0xc7, 0x9c, 0x71, 0x92, 0x1a, 0x2e, 0xf8}},
- { // 30
- []byte{
- 0x10, 0x02, 0x91, 0x15, 0x98, 0x10, 0x02, 0x01,
- 0x10, 0x02, 0x91, 0x15, 0x98, 0x10, 0x02, 0x01,
- 0x10, 0x02, 0x91, 0x15, 0x98, 0x10, 0x02, 0x01,
- },
- nil,
- []byte{0xe2, 0xf5, 0x72, 0x8f, 0x09, 0x95, 0x01, 0x3c}},
- { // 31
- []byte{
- 0x10, 0x02, 0x91, 0x16, 0x98, 0x10, 0x01, 0x01,
- 0x10, 0x02, 0x91, 0x16, 0x98, 0x10, 0x01, 0x01,
- 0x10, 0x02, 0x91, 0x16, 0x98, 0x10, 0x01, 0x01,
- },
- nil,
- []byte{0x1a, 0xea, 0xc3, 0x9a, 0x61, 0xf0, 0xa4, 0x64}},
-}
-
-// Table A.4 Values To Be Used for the Substitution Table Known Answer Test
-var tableA4Tests = []CryptTest{
- { // 0
- []byte{
- 0x7c, 0xa1, 0x10, 0x45, 0x4a, 0x1a, 0x6e, 0x57,
- 0x7c, 0xa1, 0x10, 0x45, 0x4a, 0x1a, 0x6e, 0x57,
- 0x7c, 0xa1, 0x10, 0x45, 0x4a, 0x1a, 0x6e, 0x57},
- []byte{0x01, 0xa1, 0xd6, 0xd0, 0x39, 0x77, 0x67, 0x42},
- []byte{0x69, 0x0f, 0x5b, 0x0d, 0x9a, 0x26, 0x93, 0x9b}},
- { // 1
- []byte{
- 0x01, 0x31, 0xd9, 0x61, 0x9d, 0xc1, 0x37, 0x6e,
- 0x01, 0x31, 0xd9, 0x61, 0x9d, 0xc1, 0x37, 0x6e,
- 0x01, 0x31, 0xd9, 0x61, 0x9d, 0xc1, 0x37, 0x6e},
- []byte{0x5c, 0xd5, 0x4c, 0xa8, 0x3d, 0xef, 0x57, 0xda},
- []byte{0x7a, 0x38, 0x9d, 0x10, 0x35, 0x4b, 0xd2, 0x71}},
- { // 2
- []byte{
- 0x07, 0xa1, 0x13, 0x3e, 0x4a, 0x0b, 0x26, 0x86,
- 0x07, 0xa1, 0x13, 0x3e, 0x4a, 0x0b, 0x26, 0x86,
- 0x07, 0xa1, 0x13, 0x3e, 0x4a, 0x0b, 0x26, 0x86},
- []byte{0x02, 0x48, 0xd4, 0x38, 0x06, 0xf6, 0x71, 0x72},
- []byte{0x86, 0x8e, 0xbb, 0x51, 0xca, 0xb4, 0x59, 0x9a}},
- { // 3
- []byte{
- 0x38, 0x49, 0x67, 0x4c, 0x26, 0x02, 0x31, 0x9e,
- 0x38, 0x49, 0x67, 0x4c, 0x26, 0x02, 0x31, 0x9e,
- 0x38, 0x49, 0x67, 0x4c, 0x26, 0x02, 0x31, 0x9e},
- []byte{0x51, 0x45, 0x4b, 0x58, 0x2d, 0xdf, 0x44, 0x0a},
- []byte{0x71, 0x78, 0x87, 0x6e, 0x01, 0xf1, 0x9b, 0x2a}},
- { // 4
- []byte{
- 0x04, 0xb9, 0x15, 0xba, 0x43, 0xfe, 0xb5, 0xb6,
- 0x04, 0xb9, 0x15, 0xba, 0x43, 0xfe, 0xb5, 0xb6,
- 0x04, 0xb9, 0x15, 0xba, 0x43, 0xfe, 0xb5, 0xb6},
- []byte{0x42, 0xfd, 0x44, 0x30, 0x59, 0x57, 0x7f, 0xa2},
- []byte{0xaf, 0x37, 0xfb, 0x42, 0x1f, 0x8c, 0x40, 0x95}},
- { // 5
- []byte{
- 0x01, 0x13, 0xb9, 0x70, 0xfd, 0x34, 0xf2, 0xce,
- 0x01, 0x13, 0xb9, 0x70, 0xfd, 0x34, 0xf2, 0xce,
- 0x01, 0x13, 0xb9, 0x70, 0xfd, 0x34, 0xf2, 0xce},
- []byte{0x05, 0x9b, 0x5e, 0x08, 0x51, 0xcf, 0x14, 0x3a},
- []byte{0x86, 0xa5, 0x60, 0xf1, 0x0e, 0xc6, 0xd8, 0x5b}},
- { // 6
- []byte{
- 0x01, 0x70, 0xf1, 0x75, 0x46, 0x8f, 0xb5, 0xe6,
- 0x01, 0x70, 0xf1, 0x75, 0x46, 0x8f, 0xb5, 0xe6,
- 0x01, 0x70, 0xf1, 0x75, 0x46, 0x8f, 0xb5, 0xe6},
- []byte{0x07, 0x56, 0xd8, 0xe0, 0x77, 0x47, 0x61, 0xd2},
- []byte{0x0c, 0xd3, 0xda, 0x02, 0x00, 0x21, 0xdc, 0x09}},
- { // 7
- []byte{
- 0x43, 0x29, 0x7f, 0xad, 0x38, 0xe3, 0x73, 0xfe,
- 0x43, 0x29, 0x7f, 0xad, 0x38, 0xe3, 0x73, 0xfe,
- 0x43, 0x29, 0x7f, 0xad, 0x38, 0xe3, 0x73, 0xfe},
- []byte{0x76, 0x25, 0x14, 0xb8, 0x29, 0xbf, 0x48, 0x6a},
- []byte{0xea, 0x67, 0x6b, 0x2c, 0xb7, 0xdb, 0x2b, 0x7a}},
- { // 8
- []byte{
- 0x07, 0xa7, 0x13, 0x70, 0x45, 0xda, 0x2a, 0x16,
- 0x07, 0xa7, 0x13, 0x70, 0x45, 0xda, 0x2a, 0x16,
- 0x07, 0xa7, 0x13, 0x70, 0x45, 0xda, 0x2a, 0x16},
- []byte{0x3b, 0xdd, 0x11, 0x90, 0x49, 0x37, 0x28, 0x02},
- []byte{0xdf, 0xd6, 0x4a, 0x81, 0x5c, 0xaf, 0x1a, 0x0f}},
- { // 9
- []byte{
- 0x04, 0x68, 0x91, 0x04, 0xc2, 0xfd, 0x3b, 0x2f,
- 0x04, 0x68, 0x91, 0x04, 0xc2, 0xfd, 0x3b, 0x2f,
- 0x04, 0x68, 0x91, 0x04, 0xc2, 0xfd, 0x3b, 0x2f},
- []byte{0x26, 0x95, 0x5f, 0x68, 0x35, 0xaf, 0x60, 0x9a},
- []byte{0x5c, 0x51, 0x3c, 0x9c, 0x48, 0x86, 0xc0, 0x88}},
- { // 10
- []byte{
- 0x37, 0xd0, 0x6b, 0xb5, 0x16, 0xcb, 0x75, 0x46,
- 0x37, 0xd0, 0x6b, 0xb5, 0x16, 0xcb, 0x75, 0x46,
- 0x37, 0xd0, 0x6b, 0xb5, 0x16, 0xcb, 0x75, 0x46},
- []byte{0x16, 0x4d, 0x5e, 0x40, 0x4f, 0x27, 0x52, 0x32},
- []byte{0x0a, 0x2a, 0xee, 0xae, 0x3f, 0xf4, 0xab, 0x77}},
- { // 11
- []byte{
- 0x1f, 0x08, 0x26, 0x0d, 0x1a, 0xc2, 0x46, 0x5e,
- 0x1f, 0x08, 0x26, 0x0d, 0x1a, 0xc2, 0x46, 0x5e,
- 0x1f, 0x08, 0x26, 0x0d, 0x1a, 0xc2, 0x46, 0x5e},
- []byte{0x6b, 0x05, 0x6e, 0x18, 0x75, 0x9f, 0x5c, 0xca},
- []byte{0xef, 0x1b, 0xf0, 0x3e, 0x5d, 0xfa, 0x57, 0x5a}},
- { // 12
- []byte{
- 0x58, 0x40, 0x23, 0x64, 0x1a, 0xba, 0x61, 0x76,
- 0x58, 0x40, 0x23, 0x64, 0x1a, 0xba, 0x61, 0x76,
- 0x58, 0x40, 0x23, 0x64, 0x1a, 0xba, 0x61, 0x76},
- []byte{0x00, 0x4b, 0xd6, 0xef, 0x09, 0x17, 0x60, 0x62},
- []byte{0x88, 0xbf, 0x0d, 0xb6, 0xd7, 0x0d, 0xee, 0x56}},
- { // 13
- []byte{
- 0x02, 0x58, 0x16, 0x16, 0x46, 0x29, 0xb0, 0x07,
- 0x02, 0x58, 0x16, 0x16, 0x46, 0x29, 0xb0, 0x07,
- 0x02, 0x58, 0x16, 0x16, 0x46, 0x29, 0xb0, 0x07},
- []byte{0x48, 0x0d, 0x39, 0x00, 0x6e, 0xe7, 0x62, 0xf2},
- []byte{0xa1, 0xf9, 0x91, 0x55, 0x41, 0x02, 0x0b, 0x56}},
- { // 14
- []byte{
- 0x49, 0x79, 0x3e, 0xbc, 0x79, 0xb3, 0x25, 0x8f,
- 0x49, 0x79, 0x3e, 0xbc, 0x79, 0xb3, 0x25, 0x8f,
- 0x49, 0x79, 0x3e, 0xbc, 0x79, 0xb3, 0x25, 0x8f},
- []byte{0x43, 0x75, 0x40, 0xc8, 0x69, 0x8f, 0x3c, 0xfa},
- []byte{0x6f, 0xbf, 0x1c, 0xaf, 0xcf, 0xfd, 0x05, 0x56}},
- { // 15
- []byte{
- 0x4f, 0xb0, 0x5e, 0x15, 0x15, 0xab, 0x73, 0xa7,
- 0x4f, 0xb0, 0x5e, 0x15, 0x15, 0xab, 0x73, 0xa7,
- 0x4f, 0xb0, 0x5e, 0x15, 0x15, 0xab, 0x73, 0xa7},
- []byte{0x07, 0x2d, 0x43, 0xa0, 0x77, 0x07, 0x52, 0x92},
- []byte{0x2f, 0x22, 0xe4, 0x9b, 0xab, 0x7c, 0xa1, 0xac}},
- { // 16
- []byte{
- 0x49, 0xe9, 0x5d, 0x6d, 0x4c, 0xa2, 0x29, 0xbf,
- 0x49, 0xe9, 0x5d, 0x6d, 0x4c, 0xa2, 0x29, 0xbf,
- 0x49, 0xe9, 0x5d, 0x6d, 0x4c, 0xa2, 0x29, 0xbf},
- []byte{0x02, 0xfe, 0x55, 0x77, 0x81, 0x17, 0xf1, 0x2a},
- []byte{0x5a, 0x6b, 0x61, 0x2c, 0xc2, 0x6c, 0xce, 0x4a}},
- { // 17
- []byte{
- 0x01, 0x83, 0x10, 0xdc, 0x40, 0x9b, 0x26, 0xd6,
- 0x01, 0x83, 0x10, 0xdc, 0x40, 0x9b, 0x26, 0xd6,
- 0x01, 0x83, 0x10, 0xdc, 0x40, 0x9b, 0x26, 0xd6},
- []byte{0x1d, 0x9d, 0x5c, 0x50, 0x18, 0xf7, 0x28, 0xc2},
- []byte{0x5f, 0x4c, 0x03, 0x8e, 0xd1, 0x2b, 0x2e, 0x41}},
- { // 18
- []byte{
- 0x1c, 0x58, 0x7f, 0x1c, 0x13, 0x92, 0x4f, 0xef,
- 0x1c, 0x58, 0x7f, 0x1c, 0x13, 0x92, 0x4f, 0xef,
- 0x1c, 0x58, 0x7f, 0x1c, 0x13, 0x92, 0x4f, 0xef},
- []byte{0x30, 0x55, 0x32, 0x28, 0x6d, 0x6f, 0x29, 0x5a},
- []byte{0x63, 0xfa, 0xc0, 0xd0, 0x34, 0xd9, 0xf7, 0x93}},
-}
-
-func newCipher(key []byte) *desCipher {
- c, err := NewCipher(key)
- if err != nil {
- panic("NewCipher failed: " + err.Error())
- }
- return c.(*desCipher)
-}
-
-// Use the known weak keys to test DES implementation
-func TestWeakKeys(t *testing.T) {
- for i, tt := range weakKeyTests {
- var encrypt = func(in []byte) (out []byte) {
- c := newCipher(tt.key)
- out = make([]byte, len(in))
- encryptBlock(c.subkeys[:], out, in)
- return
- }
-
- // Encrypting twice with a DES weak
- // key should reproduce the original input
- result := encrypt(tt.in)
- result = encrypt(result)
-
- if !bytes.Equal(result, tt.in) {
- t.Errorf("#%d: result: %x want: %x", i, result, tt.in)
- }
- }
-}
-
-// Use the known semi-weak key pairs to test DES implementation
-func TestSemiWeakKeyPairs(t *testing.T) {
- for i, tt := range semiWeakKeyTests {
- var encrypt = func(key, in []byte) (out []byte) {
- c := newCipher(key)
- out = make([]byte, len(in))
- encryptBlock(c.subkeys[:], out, in)
- return
- }
-
- // Encrypting with one member of the semi-weak pair
- // and then encrypting the result with the other member
- // should reproduce the original input.
- result := encrypt(tt.key, tt.in)
- result = encrypt(tt.out, result)
-
- if !bytes.Equal(result, tt.in) {
- t.Errorf("#%d: result: %x want: %x", i, result, tt.in)
- }
- }
-}
-
-func TestDESEncryptBlock(t *testing.T) {
- for i, tt := range encryptDESTests {
- c := newCipher(tt.key)
- out := make([]byte, len(tt.in))
- encryptBlock(c.subkeys[:], out, tt.in)
-
- if !bytes.Equal(out, tt.out) {
- t.Errorf("#%d: result: %x want: %x", i, out, tt.out)
- }
- }
-}
-
-func TestDESDecryptBlock(t *testing.T) {
- for i, tt := range encryptDESTests {
- c := newCipher(tt.key)
- plain := make([]byte, len(tt.in))
- decryptBlock(c.subkeys[:], plain, tt.out)
-
- if !bytes.Equal(plain, tt.in) {
- t.Errorf("#%d: result: %x want: %x", i, plain, tt.in)
- }
- }
-}
-
-func TestEncryptTripleDES(t *testing.T) {
- for i, tt := range encryptTripleDESTests {
- c, _ := NewTripleDESCipher(tt.key)
- out := make([]byte, len(tt.in))
- c.Encrypt(out, tt.in)
-
- if !bytes.Equal(out, tt.out) {
- t.Errorf("#%d: result: %x want: %x", i, out, tt.out)
- }
- }
-}
-
-func TestDecryptTripleDES(t *testing.T) {
- for i, tt := range encryptTripleDESTests {
- c, _ := NewTripleDESCipher(tt.key)
-
- plain := make([]byte, len(tt.in))
- c.Decrypt(plain, tt.out)
-
- if !bytes.Equal(plain, tt.in) {
- t.Errorf("#%d: result: %x want: %x", i, plain, tt.in)
- }
- }
-}
-
-// Defined in Pub 800-20
-func TestVariablePlaintextKnownAnswer(t *testing.T) {
- for i, tt := range tableA1Tests {
- c, _ := NewTripleDESCipher(tableA1Key)
-
- out := make([]byte, len(tt.in))
- c.Encrypt(out, tt.in)
-
- if !bytes.Equal(out, tt.out) {
- t.Errorf("#%d: result: %x want: %x", i, out, tt.out)
- }
- }
-}
-
-// Defined in Pub 800-20
-func TestVariableCiphertextKnownAnswer(t *testing.T) {
- for i, tt := range tableA1Tests {
- c, _ := NewTripleDESCipher(tableA1Key)
-
- plain := make([]byte, len(tt.out))
- c.Decrypt(plain, tt.out)
-
- if !bytes.Equal(plain, tt.in) {
- t.Errorf("#%d: result: %x want: %x", i, plain, tt.in)
- }
- }
-}
-
-// Defined in Pub 800-20
-// Encrypting the Table A.1 ciphertext with the
-// 0x01... key produces the original plaintext
-func TestInversePermutationKnownAnswer(t *testing.T) {
- for i, tt := range tableA1Tests {
- c, _ := NewTripleDESCipher(tableA1Key)
-
- plain := make([]byte, len(tt.in))
- c.Encrypt(plain, tt.out)
-
- if !bytes.Equal(plain, tt.in) {
- t.Errorf("#%d: result: %x want: %x", i, plain, tt.in)
- }
- }
-}
-
-// Defined in Pub 800-20
-// Decrypting the Table A.1 plaintext with the
-// 0x01... key produces the corresponding ciphertext
-func TestInitialPermutationKnownAnswer(t *testing.T) {
- for i, tt := range tableA1Tests {
- c, _ := NewTripleDESCipher(tableA1Key)
-
- out := make([]byte, len(tt.in))
- c.Decrypt(out, tt.in)
-
- if !bytes.Equal(out, tt.out) {
- t.Errorf("#%d: result: %x want: %x", i, out, tt.out)
- }
- }
-}
-
-// Defined in Pub 800-20
-func TestVariableKeyKnownAnswerEncrypt(t *testing.T) {
- for i, tt := range tableA2Tests {
- c, _ := NewTripleDESCipher(tt.key)
-
- out := make([]byte, len(tableA2Plaintext))
- c.Encrypt(out, tableA2Plaintext)
-
- if !bytes.Equal(out, tt.out) {
- t.Errorf("#%d: result: %x want: %x", i, out, tt.out)
- }
- }
-}
-
-// Defined in Pub 800-20
-func TestVariableKeyKnownAnswerDecrypt(t *testing.T) {
- for i, tt := range tableA2Tests {
- c, _ := NewTripleDESCipher(tt.key)
-
- out := make([]byte, len(tt.out))
- c.Decrypt(out, tt.out)
-
- if !bytes.Equal(out, tableA2Plaintext) {
- t.Errorf("#%d: result: %x want: %x", i, out, tableA2Plaintext)
- }
- }
-}
-
-// Defined in Pub 800-20
-func TestPermutationOperationKnownAnswerEncrypt(t *testing.T) {
- for i, tt := range tableA3Tests {
- c, _ := NewTripleDESCipher(tt.key)
-
- out := make([]byte, len(tableA3Plaintext))
- c.Encrypt(out, tableA3Plaintext)
-
- if !bytes.Equal(out, tt.out) {
- t.Errorf("#%d: result: %x want: %x", i, out, tt.out)
- }
- }
-}
-
-// Defined in Pub 800-20
-func TestPermutationOperationKnownAnswerDecrypt(t *testing.T) {
- for i, tt := range tableA3Tests {
- c, _ := NewTripleDESCipher(tt.key)
-
- out := make([]byte, len(tt.out))
- c.Decrypt(out, tt.out)
-
- if !bytes.Equal(out, tableA3Plaintext) {
- t.Errorf("#%d: result: %x want: %x", i, out, tableA3Plaintext)
- }
- }
-}
-
-// Defined in Pub 800-20
-func TestSubstitutionTableKnownAnswerEncrypt(t *testing.T) {
- for i, tt := range tableA4Tests {
- c, _ := NewTripleDESCipher(tt.key)
-
- out := make([]byte, len(tt.in))
- c.Encrypt(out, tt.in)
-
- if !bytes.Equal(out, tt.out) {
- t.Errorf("#%d: result: %x want: %x", i, out, tt.out)
- }
- }
-}
-
-// Defined in Pub 800-20
-func TestSubstitutionTableKnownAnswerDecrypt(t *testing.T) {
- for i, tt := range tableA4Tests {
- c, _ := NewTripleDESCipher(tt.key)
-
- out := make([]byte, len(tt.out))
- c.Decrypt(out, tt.out)
-
- if !bytes.Equal(out, tt.in) {
- t.Errorf("#%d: result: %x want: %x", i, out, tt.in)
- }
- }
-}
-
-func TestInitialPermute(t *testing.T) {
- for i := uint(0); i < 64; i++ {
- bit := uint64(1) << i
- got := permuteInitialBlock(bit)
- want := uint64(1) << finalPermutation[63-i]
- if got != want {
- t.Errorf("permute(%x) = %x, want %x", bit, got, want)
- }
- }
-}
-
-func TestFinalPermute(t *testing.T) {
- for i := uint(0); i < 64; i++ {
- bit := uint64(1) << i
- got := permuteFinalBlock(bit)
- want := uint64(1) << initialPermutation[63-i]
- if got != want {
- t.Errorf("permute(%x) = %x, want %x", bit, got, want)
- }
- }
-}
-
-func TestExpandBlock(t *testing.T) {
- for i := uint(0); i < 32; i++ {
- bit := uint32(1) << i
- got := expandBlock(bit)
- want := permuteBlock(uint64(bit), expansionFunction[:])
- if got != want {
- t.Errorf("expand(%x) = %x, want %x", bit, got, want)
- }
- }
-}
-
-func BenchmarkEncrypt(b *testing.B) {
- tt := encryptDESTests[0]
- c, err := NewCipher(tt.key)
- if err != nil {
- b.Fatal("NewCipher:", err)
- }
- out := make([]byte, len(tt.in))
- b.SetBytes(int64(len(out)))
- b.ResetTimer()
- for i := 0; i < b.N; i++ {
- c.Encrypt(out, tt.in)
- }
-}
-
-func BenchmarkDecrypt(b *testing.B) {
- tt := encryptDESTests[0]
- c, err := NewCipher(tt.key)
- if err != nil {
- b.Fatal("NewCipher:", err)
- }
- out := make([]byte, len(tt.out))
- b.SetBytes(int64(len(out)))
- b.ResetTimer()
- for i := 0; i < b.N; i++ {
- c.Decrypt(out, tt.out)
- }
-}
diff --git a/src/pkg/crypto/des/example_test.go b/src/pkg/crypto/des/example_test.go
deleted file mode 100644
index 336b59375..000000000
--- a/src/pkg/crypto/des/example_test.go
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright 2013 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package des_test
-
-import "crypto/des"
-
-func ExampleNewTripleDESCipher() {
- // NewTripleDESCipher can also be used when EDE2 is required by
- // duplicating the first 8 bytes of the 16-byte key.
- ede2Key := []byte("example key 1234")
-
- var tripleDESKey []byte
- tripleDESKey = append(tripleDESKey, ede2Key[:16]...)
- tripleDESKey = append(tripleDESKey, ede2Key[:8]...)
-
- _, err := des.NewTripleDESCipher(tripleDESKey)
- if err != nil {
- panic(err)
- }
-
- // See crypto/cipher for how to use a cipher.Block for encryption and
- // decryption.
-}