1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
|
package dnsstamps
import (
"encoding/hex"
"strings"
"testing"
)
var (
pk1 []byte
)
func init() {
var err error
// generated with:
// openssl x509 -noout -fingerprint -sha256 -inform pem -in /etc/ssl/certs/Go_Daddy_Class_2_CA.pem
pkStr := "C3:84:6B:F2:4B:9E:93:CA:64:27:4C:0E:C6:7C:1E:CC:5E:02:4F:FC:AC:D2:D7:40:19:35:0E:81:FE:54:6A:E4"
pk1, err = hex.DecodeString(strings.Replace(pkStr, ":", "", -1))
if err != nil {
panic(err)
}
if len(pk1) != 32 {
panic("invalid public key fingerprint")
}
}
func TestDnscryptStamp(t *testing.T) {
// same as exampleStamp in dnscrypt-stamper
const expected = `sdns://AQcAAAAAAAAACTEyNy4wLjAuMSDDhGvyS56TymQnTA7GfB7MXgJP_KzS10AZNQ6B_lRq5BkyLmRuc2NyeXB0LWNlcnQubG9jYWxob3N0`
var stamp ServerStamp
stamp.Props |= ServerInformalPropertyDNSSEC
stamp.Props |= ServerInformalPropertyNoLog
stamp.Props |= ServerInformalPropertyNoFilter
stamp.Proto = StampProtoTypeDNSCrypt
stamp.ServerAddrStr = "127.0.0.1"
stamp.ProviderName = "2.dnscrypt-cert.localhost"
stamp.ServerPk = pk1
stampStr := stamp.String()
if stampStr != expected {
t.Errorf("expected stamp %q but got instead %q", expected, stampStr)
}
parsedStamp, err := NewServerStampFromString(stampStr)
if err != nil {
t.Fatal(err)
}
ps := parsedStamp.String()
if ps != stampStr {
t.Errorf("re-parsed stamp string is %q, but %q expected", ps, stampStr)
}
}
func TestDNSOverHTTP_NoHashes(t *testing.T) {
const expected = `sdns://AgcAAAAAAAAACTEyNy4wLjAuMSDDhGvyS56TymQnTA7GfB7MXgJP_KzS10AZNQ6B_lRq5AtleGFtcGxlLmNvbQovZG5zLXF1ZXJ5`
var stamp ServerStamp
stamp.Props |= ServerInformalPropertyDNSSEC
stamp.Props |= ServerInformalPropertyNoLog
stamp.Props |= ServerInformalPropertyNoFilter
stamp.ServerAddrStr = "127.0.0.1"
stamp.Proto = StampProtoTypeDoH
stamp.ProviderName = "example.com"
stamp.Hashes = [][]uint8{pk1}
stamp.Path = "/dns-query"
stampStr := stamp.String()
if stampStr != expected {
t.Errorf("expected stamp %q but got instead %q", expected, stampStr)
}
parsedStamp, err := NewServerStampFromString(stampStr)
if err != nil {
t.Fatal(err)
}
ps := parsedStamp.String()
if ps != stampStr {
t.Errorf("re-parsed stamp string is %q, but %q expected", ps, stampStr)
}
}
func TestDNSOverHTTP2_2(t *testing.T) {
const q9 = `sdns://AgYAAAAAAAAACDkuOS45LjEwABJkbnM5LnF1YWQ5Lm5ldDo0NDMKL2Rucy1xdWVyeQ`
parsedStamp, err := NewServerStampFromString(q9)
if err != nil {
t.Fatal(err)
}
ps := parsedStamp.String()
if ps != q9 {
t.Errorf("re-parsed stamp string is %q, but %q expected", ps, q9)
}
}
func TestODoHTarget(t *testing.T) {
const stamp = `sdns://BQcAAAAAAAAAEG9kb2guZXhhbXBsZS5jb20HL3RhcmdldA`
parsedStamp, err := NewServerStampFromString(stamp)
if err != nil {
t.Fatal(err)
}
ps := parsedStamp.String()
if ps != stamp {
t.Errorf("re-parsed stamp string is %q, but %q expected", ps, stamp)
}
}
func TestODoHRelay(t *testing.T) {
const stamp = `sdns://hQcAAAAAAAAAB1s6OjFdOjGCq80CASMPZG9oLmV4YW1wbGUuY29tBi9yZWxheQ`
parsedStamp, err := NewServerStampFromString(stamp)
if err != nil {
t.Fatal(err)
}
ps := parsedStamp.String()
if ps != stamp {
t.Errorf("re-parsed stamp string is %q, but %q expected", ps, stamp)
}
}
func TestRelayServerPair(t *testing.T) {
const stamp = `sdns://hQcAAAAAAAAAB1s6OjFdOjGCq80CASMPZG9oLmV4YW1wbGUuY29tBi9yZWxheQ/BQcAAAAAAAAAEG9kb2guZXhhbXBsZS5jb20HL3RhcmdldA`
_, _, err := NewRelayAndServerStampFromString(stamp)
if err != nil {
t.Fatal(err)
}
}
|