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