snacl_test.go raw

   1  package snacl
   2  
   3  import (
   4  	"bytes"
   5  	"testing"
   6  )
   7  
   8  var (
   9  	password = []byte("sikrit")
  10  	message  = []byte("this is a secret message of sorts")
  11  	key      *SecretKey
  12  	params   []byte
  13  	blob     []byte
  14  )
  15  
  16  func TestNewSecretKey(t *testing.T) {
  17  	var e error
  18  	key, e = NewSecretKey(&password, DefaultN, DefaultR, DefaultP)
  19  	if e != nil {
  20  		return
  21  	}
  22  }
  23  func TestMarshalSecretKey(t *testing.T) {
  24  	params = key.Marshal()
  25  }
  26  func TestUnmarshalSecretKey(t *testing.T) {
  27  	var sk SecretKey
  28  	if e := sk.Unmarshal(params); E.Chk(e) {
  29  		t.Errorf("unexpected unmarshal error: %v", e)
  30  		return
  31  	}
  32  	if e := sk.DeriveKey(&password); E.Chk(e) {
  33  		t.Errorf("unexpected DeriveKey error: %v", e)
  34  		return
  35  	}
  36  	if !bytes.Equal(sk.Key[:], key.Key[:]) {
  37  		t.Errorf("keys not equal")
  38  	}
  39  }
  40  func TestUnmarshalSecretKeyInvalid(t *testing.T) {
  41  	var sk SecretKey
  42  	if e := sk.Unmarshal(params); E.Chk(e) {
  43  		t.Errorf("unexpected unmarshal error: %v", e)
  44  		return
  45  	}
  46  	p := []byte("wrong password")
  47  	if e := sk.DeriveKey(&p); e != ErrInvalidPassword {
  48  		t.Errorf("wrong password didn't fail")
  49  		return
  50  	}
  51  }
  52  func TestEncrypt(t *testing.T) {
  53  	var e error
  54  	blob, e = key.Encrypt(message)
  55  	if e != nil {
  56  		return
  57  	}
  58  }
  59  func TestDecrypt(t *testing.T) {
  60  	decryptedMessage, e := key.Decrypt(blob)
  61  	if e != nil {
  62  		return
  63  	}
  64  	if !bytes.Equal(decryptedMessage, message) {
  65  		t.Errorf("decryption failed")
  66  		return
  67  	}
  68  }
  69  func TestDecryptCorrupt(t *testing.T) {
  70  	blob[len(blob)-15] = blob[len(blob)-15] + 1
  71  	_, e := key.Decrypt(blob)
  72  	if e == nil {
  73  		t.Errorf("corrupt message decrypted")
  74  		return
  75  	}
  76  }
  77  func TestZero(t *testing.T) {
  78  	var zeroKey [32]byte
  79  	key.Zero()
  80  	if !bytes.Equal(key.Key[:], zeroKey[:]) {
  81  		t.Errorf("zero key failed")
  82  	}
  83  }
  84  func TestDeriveKey(t *testing.T) {
  85  	if e := key.DeriveKey(&password); E.Chk(e) {
  86  		t.Errorf("unexpected DeriveKey key failure: %v", e)
  87  	}
  88  }
  89  func TestDeriveKeyInvalid(t *testing.T) {
  90  	bogusPass := []byte("bogus")
  91  	if e := key.DeriveKey(&bogusPass); e != ErrInvalidPassword {
  92  		t.Errorf("unexpected DeriveKey key failure: %v", e)
  93  	}
  94  }
  95