59 lines
1.2 KiB
Go
59 lines
1.2 KiB
Go
package secrets
|
|
|
|
import (
|
|
"encoding/json"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestEncryptedRoundTrip(t *testing.T) {
|
|
dir := t.TempDir()
|
|
s := New(dir)
|
|
if err := s.Init(); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := s.Put("repo", "restic-password", "correct horse battery staple"); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
plain, err := s.Get("repo")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if plain != "correct horse battery staple" {
|
|
t.Fatalf("unexpected plaintext %q", plain)
|
|
}
|
|
raw, err := os.ReadFile(filepath.Join(dir, "repo.json"))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if strings.Contains(string(raw), plain) {
|
|
t.Fatal("plaintext stored on disk")
|
|
}
|
|
}
|
|
|
|
func TestCiphertextBoundToIdentity(t *testing.T) {
|
|
dir := t.TempDir()
|
|
s := New(dir)
|
|
if err := s.Init(); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := s.Put("one", "password", "secret"); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
b, _ := os.ReadFile(filepath.Join(dir, "one.json"))
|
|
var record Record
|
|
if err := json.Unmarshal(b, &record); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
record.ID = "two"
|
|
b, _ = json.Marshal(record)
|
|
if err := os.WriteFile(filepath.Join(dir, "two.json"), b, 0600); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if _, err := s.Get("two"); err == nil {
|
|
t.Fatal("renamed secret record decrypted")
|
|
}
|
|
}
|