age

Simple, secure encryption with UNIX-style composability.
git clone git://git.sgregoratto.me/age
Log | Files | Refs | README | LICENSE

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 }