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") } }