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  }