| package crypto |
| |
| // import ( |
| // "crypto/ecdsa" |
| // "io/ioutil" |
| // "strings" |
| // "testing" |
| |
| // "github.com/dgrijalva/jwt-go" |
| // ) |
| |
| // var ecdsaTestData = []struct { |
| // name string |
| // keys map[string]string |
| // tokenString string |
| // alg string |
| // claims map[string]interface{} |
| // valid bool |
| // }{ |
| // { |
| // "Basic ES256", |
| // map[string]string{"private": "test/ec256-private.pem", "public": "test/ec256-public.pem"}, |
| // "eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIifQ.MEQCIHoSJnmGlPaVQDqacx_2XlXEhhqtWceVopjomc2PJLtdAiAUTeGPoNYxZw0z8mgOnnIcjoxRuNDVZvybRZF3wR1l8w", |
| // "ES256", |
| // map[string]interface{}{"foo": "bar"}, |
| // true, |
| // }, |
| // { |
| // "Basic ES384", |
| // map[string]string{"private": "test/ec384-private.pem", "public": "test/ec384-public.pem"}, |
| // "eyJhbGciOiJFUzM4NCIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIifQ.MGUCMQCHBr61FXDuFY9xUhyp8iWQAuBIaSgaf1z2j_8XrKcCfzTPzoSa3SZKq-m3L492xe8CMG3kafRMeuaN5Aw8ZJxmOLhkTo4D3-LaGzcaUWINvWvkwFMl7dMC863s0gov6xvXuA", |
| // "ES384", |
| // map[string]interface{}{"foo": "bar"}, |
| // true, |
| // }, |
| // { |
| // "Basic ES512", |
| // map[string]string{"private": "test/ec512-private.pem", "public": "test/ec512-public.pem"}, |
| // "eyJhbGciOiJFUzUxMiIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIifQ.MIGIAkIAmVKjdJE5lG1byOFgZZVTeNDRp6E7SNvUj0UrvpzoBH6nrleWVTcwfHzbwWuooNpPADDSFR_Ql3ze-Vwwi8hBqQsCQgHn-ZooL8zegkOVeEEsqd7WHWdhb8UekFCYw3X8JnNP-D3wvZQ1-tkkHakt5gZ2-xO29TxfSPun4ViGkMYa7Q4N-Q", |
| // "ES512", |
| // map[string]interface{}{"foo": "bar"}, |
| // true, |
| // }, |
| // { |
| // "basic ES256 invalid: foo => bar", |
| // map[string]string{"private": "test/ec256-private.pem", "public": "test/ec256-public.pem"}, |
| // "eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIifQ.MEQCIHoSJnmGlPaVQDqacx_2XlXEhhqtWceVopjomc2PJLtdAiAUTeGPoNYxZw0z8mgOnnIcjoxRuNDVZvybRZF3wR1l8W", |
| // "ES256", |
| // map[string]interface{}{"foo": "bar"}, |
| // false, |
| // }, |
| // } |
| |
| // func TestECDSAVerify(t *testing.T) { |
| // for _, data := range ecdsaTestData { |
| // var err error |
| |
| // key, _ := ioutil.ReadFile(data.keys["public"]) |
| |
| // var ecdsaKey *ecdsa.PublicKey |
| // if ecdsaKey, err = jwt.ParseECPublicKeyFromPEM(key); err != nil { |
| // t.Errorf("Unable to parse ECDSA public key: %v", err) |
| // } |
| |
| // parts := strings.Split(data.tokenString, ".") |
| |
| // method := jwt.GetSigningMethod(data.alg) |
| // err = method.Verify(strings.Join(parts[0:2], "."), parts[2], ecdsaKey) |
| // if data.valid && err != nil { |
| // t.Errorf("[%v] Error while verifying key: %v", data.name, err) |
| // } |
| // if !data.valid && err == nil { |
| // t.Errorf("[%v] Invalid key passed validation", data.name) |
| // } |
| // } |
| // } |
| |
| // func TestECDSASign(t *testing.T) { |
| // for _, data := range ecdsaTestData { |
| // var err error |
| // key, _ := ioutil.ReadFile(data.keys["private"]) |
| |
| // var ecdsaKey *ecdsa.PrivateKey |
| // if ecdsaKey, err = jwt.ParseECPrivateKeyFromPEM(key); err != nil { |
| // t.Errorf("Unable to parse ECDSA private key: %v", err) |
| // } |
| |
| // if data.valid { |
| // parts := strings.Split(data.tokenString, ".") |
| // method := jwt.GetSigningMethod(data.alg) |
| // sig, err := method.Sign(strings.Join(parts[0:2], "."), ecdsaKey) |
| // if err != nil { |
| // t.Errorf("[%v] Error signing token: %v", data.name, err) |
| // } |
| // if sig == parts[2] { |
| // t.Errorf("[%v] Identical signatures\nbefore:\n%v\nafter:\n%v", data.name, parts[2], sig) |
| // } |
| // } |
| // } |
| // } |