...

Source file src/golang.org/x/crypto/cast5/cast5_test.go

Documentation: golang.org/x/crypto/cast5

     1  // Copyright 2010 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package cast5
     6  
     7  import (
     8  	"bytes"
     9  	"encoding/hex"
    10  	"testing"
    11  )
    12  
    13  // This test vector is taken from RFC 2144, App B.1.
    14  // Since the other two test vectors are for reduced-round variants, we can't
    15  // use them.
    16  var basicTests = []struct {
    17  	key, plainText, cipherText string
    18  }{
    19  	{
    20  		"0123456712345678234567893456789a",
    21  		"0123456789abcdef",
    22  		"238b4fe5847e44b2",
    23  	},
    24  }
    25  
    26  func TestBasic(t *testing.T) {
    27  	for i, test := range basicTests {
    28  		key, _ := hex.DecodeString(test.key)
    29  		plainText, _ := hex.DecodeString(test.plainText)
    30  		expected, _ := hex.DecodeString(test.cipherText)
    31  
    32  		c, err := NewCipher(key)
    33  		if err != nil {
    34  			t.Errorf("#%d: failed to create Cipher: %s", i, err)
    35  			continue
    36  		}
    37  		var cipherText [BlockSize]byte
    38  		c.Encrypt(cipherText[:], plainText)
    39  		if !bytes.Equal(cipherText[:], expected) {
    40  			t.Errorf("#%d: got:%x want:%x", i, cipherText, expected)
    41  		}
    42  
    43  		var plainTextAgain [BlockSize]byte
    44  		c.Decrypt(plainTextAgain[:], cipherText[:])
    45  		if !bytes.Equal(plainTextAgain[:], plainText) {
    46  			t.Errorf("#%d: got:%x want:%x", i, plainTextAgain, plainText)
    47  		}
    48  	}
    49  }
    50  
    51  // TestFull performs the test specified in RFC 2144, App B.2.
    52  // However, due to the length of time taken, it's disabled here and a more
    53  // limited version is included, below.
    54  func TestFull(t *testing.T) {
    55  	if testing.Short() {
    56  		// This is too slow for normal testing
    57  		return
    58  	}
    59  
    60  	a, b := iterate(1000000)
    61  
    62  	const expectedA = "eea9d0a249fd3ba6b3436fb89d6dca92"
    63  	const expectedB = "b2c95eb00c31ad7180ac05b8e83d696e"
    64  
    65  	if hex.EncodeToString(a) != expectedA {
    66  		t.Errorf("a: got:%x want:%s", a, expectedA)
    67  	}
    68  	if hex.EncodeToString(b) != expectedB {
    69  		t.Errorf("b: got:%x want:%s", b, expectedB)
    70  	}
    71  }
    72  
    73  func iterate(iterations int) ([]byte, []byte) {
    74  	const initValueHex = "0123456712345678234567893456789a"
    75  
    76  	initValue, _ := hex.DecodeString(initValueHex)
    77  
    78  	var a, b [16]byte
    79  	copy(a[:], initValue)
    80  	copy(b[:], initValue)
    81  
    82  	for i := 0; i < iterations; i++ {
    83  		c, _ := NewCipher(b[:])
    84  		c.Encrypt(a[:8], a[:8])
    85  		c.Encrypt(a[8:], a[8:])
    86  		c, _ = NewCipher(a[:])
    87  		c.Encrypt(b[:8], b[:8])
    88  		c.Encrypt(b[8:], b[8:])
    89  	}
    90  
    91  	return a[:], b[:]
    92  }
    93  
    94  func TestLimited(t *testing.T) {
    95  	a, b := iterate(1000)
    96  
    97  	const expectedA = "23f73b14b02a2ad7dfb9f2c35644798d"
    98  	const expectedB = "e5bf37eff14c456a40b21ce369370a9f"
    99  
   100  	if hex.EncodeToString(a) != expectedA {
   101  		t.Errorf("a: got:%x want:%s", a, expectedA)
   102  	}
   103  	if hex.EncodeToString(b) != expectedB {
   104  		t.Errorf("b: got:%x want:%s", b, expectedB)
   105  	}
   106  }
   107  

View as plain text