decred.org/dcrwallet/v3@v3.1.0/wallet/internal/snacl/snacl_test.go (about) 1 // Copyright (c) 2014 The btcsuite developers 2 // Use of this source code is governed by an ISC 3 // license that can be found in the LICENSE file. 4 5 package snacl 6 7 import ( 8 "bytes" 9 "testing" 10 11 "decred.org/dcrwallet/v3/errors" 12 ) 13 14 var ( 15 password = []byte("sikrit") 16 message = []byte("this is a secret message of sorts") 17 key *SecretKey 18 params []byte 19 blob []byte 20 ) 21 22 func TestNewSecretKey(t *testing.T) { 23 var err error 24 key, err = NewSecretKey(&password, DefaultN, DefaultR, DefaultP) 25 if err != nil { 26 t.Error(err) 27 return 28 } 29 } 30 31 func TestMarshalSecretKey(t *testing.T) { 32 params = key.Marshal() 33 } 34 35 func TestUnmarshalSecretKey(t *testing.T) { 36 var sk SecretKey 37 if err := sk.Unmarshal(params); err != nil { 38 t.Errorf("unexpected unmarshal error: %v", err) 39 return 40 } 41 42 if err := sk.DeriveKey(&password); err != nil { 43 t.Errorf("unexpected DeriveKey error: %v", err) 44 return 45 } 46 47 if !bytes.Equal(sk.Key[:], key.Key[:]) { 48 t.Errorf("keys not equal") 49 } 50 } 51 52 func TestUnmarshalSecretKeyInvalid(t *testing.T) { 53 var sk SecretKey 54 if err := sk.Unmarshal(params); err != nil { 55 t.Errorf("unexpected unmarshal error: %v", err) 56 return 57 } 58 59 p := []byte("wrong password") 60 if err := sk.DeriveKey(&p); !errors.Is(err, errors.Passphrase) { 61 t.Errorf("wrong password didn't fail") 62 return 63 } 64 } 65 66 func TestEncrypt(t *testing.T) { 67 var err error 68 69 blob, err = key.Encrypt(message) 70 if err != nil { 71 t.Error(err) 72 return 73 } 74 } 75 76 func TestDecrypt(t *testing.T) { 77 decryptedMessage, err := key.Decrypt(blob) 78 if err != nil { 79 t.Error(err) 80 return 81 } 82 83 if !bytes.Equal(decryptedMessage, message) { 84 t.Errorf("decryption failed") 85 return 86 } 87 } 88 89 func TestDecryptCorrupt(t *testing.T) { 90 blob[len(blob)-15] = blob[len(blob)-15] + 1 91 _, err := key.Decrypt(blob) 92 if err == nil { 93 t.Errorf("corrupt message decrypted") 94 return 95 } 96 } 97 98 func TestZero(t *testing.T) { 99 var zeroKey [32]byte 100 101 key.Zero() 102 if !bytes.Equal(key.Key[:], zeroKey[:]) { 103 t.Errorf("zero key failed") 104 } 105 } 106 107 func TestDeriveKey(t *testing.T) { 108 if err := key.DeriveKey(&password); err != nil { 109 t.Errorf("unexpected DeriveKey key failure: %v", err) 110 } 111 } 112 113 func TestDeriveKeyInvalid(t *testing.T) { 114 bogusPass := []byte("bogus") 115 if err := key.DeriveKey(&bogusPass); !errors.Is(err, errors.Passphrase) { 116 t.Errorf("unexpected DeriveKey key failure: %v", err) 117 } 118 }