84 lines
2.1 KiB
Go
84 lines
2.1 KiB
Go
package crypto
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
const (
|
|
keyA = "chave-de-teste-numero-um-com-32-caracteres!"
|
|
keyB = "chave-de-teste-numero-dois-com-32-caracteres"
|
|
)
|
|
|
|
func TestKeyringRoundTrip(t *testing.T) {
|
|
k, err := NewKeyring(keyA, 1, "", 0)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
data, version, err := k.Encrypt("senha-pontomais")
|
|
if err != nil || version != 1 {
|
|
t.Fatalf("Encrypt: version=%d err=%v", version, err)
|
|
}
|
|
if strings.Contains(string(data), "senha-pontomais") {
|
|
t.Fatal("texto cifrado contém a senha em claro")
|
|
}
|
|
plain, err := k.Decrypt(data, version)
|
|
if err != nil || plain != "senha-pontomais" {
|
|
t.Fatalf("Decrypt = %q, %v", plain, err)
|
|
}
|
|
}
|
|
|
|
func TestKeyringRotation(t *testing.T) {
|
|
old, _ := NewKeyring(keyA, 1, "", 0)
|
|
data, version, _ := old.Encrypt("segredo")
|
|
|
|
rotated, err := NewKeyring(keyB, 2, keyA, 1)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if plain, err := rotated.Decrypt(data, version); err != nil || plain != "segredo" {
|
|
t.Fatalf("chave anterior deveria decifrar: %q, %v", plain, err)
|
|
}
|
|
if _, v, _ := rotated.Encrypt("novo"); v != 2 {
|
|
t.Fatalf("novas cifras deveriam usar a versão 2, usaram %d", v)
|
|
}
|
|
if _, err := rotated.Decrypt(data, 9); err == nil {
|
|
t.Fatal("versão desconhecida deveria falhar")
|
|
}
|
|
}
|
|
|
|
func TestKeyringRejectsShortKey(t *testing.T) {
|
|
if _, err := NewKeyring("curta", 1, "", 0); err == nil {
|
|
t.Fatal("chave curta deveria ser recusada")
|
|
}
|
|
}
|
|
|
|
func TestPasswordHash(t *testing.T) {
|
|
hash, err := HashPassword("senha-forte-do-painel")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if !VerifyPassword(hash, "senha-forte-do-painel") {
|
|
t.Fatal("senha correta deveria conferir")
|
|
}
|
|
if VerifyPassword(hash, "senha-errada-do-painel") {
|
|
t.Fatal("senha errada não deveria conferir")
|
|
}
|
|
if _, err := HashPassword("curta"); err == nil {
|
|
t.Fatal("senha curta deveria ser recusada")
|
|
}
|
|
}
|
|
|
|
func TestToken(t *testing.T) {
|
|
token, hash, err := NewToken()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if !ValidTokenFormat(token) || !TokenMatches(token, hash) {
|
|
t.Fatal("token gerado deveria ser válido e conferir com o hash")
|
|
}
|
|
if TokenMatches(token+"x", hash) {
|
|
t.Fatal("token alterado não deveria conferir")
|
|
}
|
|
}
|