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  }