package sso import ( "testing" "time" "golang.org/x/crypto/ed25519" ) func TestEd25519(t *testing.T) { pub, priv, err := ed25519.GenerateKey(nil) if err != nil { t.Fatal(err) } signer := &ssoSigner{key: priv} validator := &ssoValidator{ publicKey: pub, domain: "domain", } tkt := NewTicket("user", "service", "domain", "nonce", nil, 300*time.Second) signed, err := signer.Sign(tkt) if err != nil { t.Fatal("Sign():", err) } if signed == "" { t.Fatal("signed is nil") } tkt2, err := validator.Validate(signed, "nonce", "service", nil) if err != nil { t.Fatal("Validate():", err) } if tkt.User != tkt2.User || tkt.Service != tkt2.Service || tkt.Domain != tkt2.Domain || tkt.Nonce != tkt2.Nonce || tkt.Expires != tkt2.Expires { t.Fatalf("decoded ticket differs: orig=%v, decoded=%v", tkt, tkt2) } } var ( legacyTicket = "yIo0k9TRhTT9F1C89nMbTDqJH905aMbN_O72ke2mWlss3vQAWffQWMRHoc0auYBGEex01fNFVRREEJALcZ15BzR8dXNlcnxzZXJ2aWNlfGRvbWFpbnx8MTUwODA3MjQyNXw" legacyPublicKey = []byte{47, 234, 144, 101, 76, 245, 1, 73, 155, 115, 89, 105, 165, 252, 49, 114, 48, 166, 231, 130, 82, 123, 147, 179, 50, 50, 34, 198, 219, 251, 151, 17} ) func TestLegacy(t *testing.T) { validator := &ssoValidator{publicKey: legacyPublicKey} tkt, err := validator.parse(legacyTicket) if err != nil { t.Fatal("Parse():", err) } if tkt.User != "user" || tkt.Service != "service" || tkt.Domain != "domain" { t.Fatalf("decoded bad values: %+v", tkt) } }