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