age_test.go (2266B)
1 // Copyright 2019 Google LLC 2 // 3 // Use of this source code is governed by a BSD-style 4 // license that can be found in the LICENSE file or at 5 // https://developers.google.com/open-source/licenses/bsd 6 7 package age_test 8 9 import ( 10 "bytes" 11 "crypto/rand" 12 "io" 13 "io/ioutil" 14 "testing" 15 16 "github.com/FiloSottile/age/internal/age" 17 "golang.org/x/crypto/curve25519" 18 ) 19 20 const helloWorld = "Hello, Twitch!" 21 22 func TestEncryptDecryptX25519(t *testing.T) { 23 var secretKeyA, publicKeyA, secretKeyB, publicKeyB [32]byte 24 if _, err := rand.Read(secretKeyA[:]); err != nil { 25 t.Fatal(err) 26 } 27 if _, err := rand.Read(secretKeyB[:]); err != nil { 28 t.Fatal(err) 29 } 30 curve25519.ScalarBaseMult(&publicKeyA, &secretKeyA) 31 curve25519.ScalarBaseMult(&publicKeyB, &secretKeyB) 32 33 rA, err := age.NewX25519Recipient(publicKeyA[:]) 34 if err != nil { 35 t.Fatal(err) 36 } 37 rB, err := age.NewX25519Recipient(publicKeyB[:]) 38 if err != nil { 39 t.Fatal(err) 40 } 41 buf := &bytes.Buffer{} 42 w, err := age.Encrypt(buf, rA, rB) 43 if err != nil { 44 t.Fatal(err) 45 } 46 if _, err := io.WriteString(w, helloWorld); err != nil { 47 t.Fatal(err) 48 } 49 if err := w.Close(); err != nil { 50 t.Fatal(err) 51 } 52 53 t.Logf("%s", buf.Bytes()) 54 55 i, err := age.NewX25519Identity(secretKeyB[:]) 56 if err != nil { 57 t.Fatal(err) 58 } 59 out, err := age.Decrypt(buf, i) 60 if err != nil { 61 t.Fatal(err) 62 } 63 outBytes, err := ioutil.ReadAll(out) 64 if err != nil { 65 t.Fatal(err) 66 } 67 if string(outBytes) != helloWorld { 68 t.Errorf("wrong data: %q, excepted %q", outBytes, helloWorld) 69 } 70 } 71 72 func TestEncryptDecryptScrypt(t *testing.T) { 73 password := "twitch.tv/filosottile" 74 75 r, err := age.NewScryptRecipient(password) 76 if err != nil { 77 t.Fatal(err) 78 } 79 r.SetWorkFactor(15) 80 buf := &bytes.Buffer{} 81 w, err := age.Encrypt(buf, r) 82 if err != nil { 83 t.Fatal(err) 84 } 85 if _, err := io.WriteString(w, helloWorld); err != nil { 86 t.Fatal(err) 87 } 88 if err := w.Close(); err != nil { 89 t.Fatal(err) 90 } 91 92 t.Logf("%s", buf.Bytes()) 93 94 i, err := age.NewScryptIdentity(password) 95 if err != nil { 96 t.Fatal(err) 97 } 98 out, err := age.Decrypt(buf, i) 99 if err != nil { 100 t.Fatal(err) 101 } 102 outBytes, err := ioutil.ReadAll(out) 103 if err != nil { 104 t.Fatal(err) 105 } 106 if string(outBytes) != helloWorld { 107 t.Errorf("wrong data: %q, excepted %q", outBytes, helloWorld) 108 } 109 }