package key import ( "bytes" "encoding" "encoding/base64" "testing" ) type testInterface interface { encoding.BinaryUnmarshaler encoding.BinaryMarshaler Validate() error } func TestKeys(t *testing.T) { var testCases = []struct { caption string key testInterface rawValue string }{ { caption: "sig", key: new(Sig), rawValue: "RWRbOC0bBf7abaGwGtq45KLDK63tgcF7CO4qTZSlTKCSbZTYlDfFm/DISQ60u+/jEzrk22suvXXAEsxQTe2xUOfV90get1YRGQo=", }, { caption: "pub", key: new(Pub), rawValue: "RWRbOC0bBf7abfanaXuTYfCa6+YO69Kxyz8RD5nL/3Ta7umY6iOwnBrG", }, { caption: "sec", key: new(Sec), rawValue: "RWRCSwAAAACzJBN2gC5//jVvDiV76rs4m2aKXkljqDpbOC0bBf7abZhV/Zygr6b0KIbSI56JQutwzsQeouxnnHuVTZp3IW4M9qdpe5Nh8Jrr5g7r0rHLPxEPmcv/dNru6ZjqI7CcGsY=", }, } for _, tc := range testCases { t.Run(tc.caption, func(t *testing.T) { raw, err := base64.StdEncoding.DecodeString(tc.rawValue) if err != nil { t.Fatal(err) } if err := tc.key.UnmarshalBinary(raw); err != nil { t.Fatal(err) } if err := tc.key.Validate(); err != nil { t.Fatal(err) } out, err := tc.key.MarshalBinary() if err != nil { t.Fatal(err) } if !bytes.Equal(raw, out) { t.Errorf("want %v, got %v", raw, out) } }) } } type mocDeriver struct{} func (mocDeriver) Derive(_ []byte, _, length int) ([]byte, error) { return make([]byte, length), nil } func TestPublic(t *testing.T) { pub, sec, err := Generate(mocDeriver{}) if err != nil { t.Fatal(err) } p := sec.Public() if *p != *pub { t.Errorf("got %v, want %v", p, pub) } } func TestSign(t *testing.T) { pub, sec, err := Generate(mocDeriver{}) if err != nil { t.Fatal(err) } msg := []byte{} sig := sec.Sign(msg) if err := sig.Verify(msg, pub); err != nil { t.Error(err) } }