| // +build go1.4 |
| |
| package crypto_test |
| |
| // import ( |
| // "crypto/rsa" |
| // "io/ioutil" |
| // "strings" |
| // "testing" |
| |
| // "github.com/dgrijalva/jwt-go" |
| // ) |
| |
| // var rsaPSSTestData = []struct { |
| // name string |
| // tokenString string |
| // alg string |
| // claims map[string]interface{} |
| // valid bool |
| // }{ |
| // { |
| // "Basic PS256", |
| // "eyJhbGciOiJQUzI1NiIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIifQ.PPG4xyDVY8ffp4CcxofNmsTDXsrVG2npdQuibLhJbv4ClyPTUtR5giNSvuxo03kB6I8VXVr0Y9X7UxhJVEoJOmULAwRWaUsDnIewQa101cVhMa6iR8X37kfFoiZ6NkS-c7henVkkQWu2HtotkEtQvN5hFlk8IevXXPmvZlhQhwzB1sGzGYnoi1zOfuL98d3BIjUjtlwii5w6gYG2AEEzp7HnHCsb3jIwUPdq86Oe6hIFjtBwduIK90ca4UqzARpcfwxHwVLMpatKask00AgGVI0ysdk0BLMjmLutquD03XbThHScC2C2_Pp4cHWgMzvbgLU2RYYZcZRKr46QeNgz9w", |
| // "PS256", |
| // map[string]interface{}{"foo": "bar"}, |
| // true, |
| // }, |
| // { |
| // "Basic PS384", |
| // "eyJhbGciOiJQUzM4NCIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIifQ.w7-qqgj97gK4fJsq_DCqdYQiylJjzWONvD0qWWWhqEOFk2P1eDULPnqHRnjgTXoO4HAw4YIWCsZPet7nR3Xxq4ZhMqvKW8b7KlfRTb9cH8zqFvzMmybQ4jv2hKc3bXYqVow3AoR7hN_CWXI3Dv6Kd2X5xhtxRHI6IL39oTVDUQ74LACe-9t4c3QRPuj6Pq1H4FAT2E2kW_0KOc6EQhCLWEhm2Z2__OZskDC8AiPpP8Kv4k2vB7l0IKQu8Pr4RcNBlqJdq8dA5D3hk5TLxP8V5nG1Ib80MOMMqoS3FQvSLyolFX-R_jZ3-zfq6Ebsqr0yEb0AH2CfsECF7935Pa0FKQ", |
| // "PS384", |
| // map[string]interface{}{"foo": "bar"}, |
| // true, |
| // }, |
| // { |
| // "Basic PS512", |
| // "eyJhbGciOiJQUzUxMiIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIifQ.GX1HWGzFaJevuSLavqqFYaW8_TpvcjQ8KfC5fXiSDzSiT9UD9nB_ikSmDNyDILNdtjZLSvVKfXxZJqCfefxAtiozEDDdJthZ-F0uO4SPFHlGiXszvKeodh7BuTWRI2wL9-ZO4mFa8nq3GMeQAfo9cx11i7nfN8n2YNQ9SHGovG7_T_AvaMZB_jT6jkDHpwGR9mz7x1sycckEo6teLdHRnH_ZdlHlxqknmyTu8Odr5Xh0sJFOL8BepWbbvIIn-P161rRHHiDWFv6nhlHwZnVzjx7HQrWSGb6-s2cdLie9QL_8XaMcUpjLkfOMKkDOfHo6AvpL7Jbwi83Z2ZTHjJWB-A", |
| // "PS512", |
| // map[string]interface{}{"foo": "bar"}, |
| // true, |
| // }, |
| // { |
| // "basic PS256 invalid: foo => bar", |
| // "eyJhbGciOiJQUzI1NiIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIifQ.PPG4xyDVY8ffp4CcxofNmsTDXsrVG2npdQuibLhJbv4ClyPTUtR5giNSvuxo03kB6I8VXVr0Y9X7UxhJVEoJOmULAwRWaUsDnIewQa101cVhMa6iR8X37kfFoiZ6NkS-c7henVkkQWu2HtotkEtQvN5hFlk8IevXXPmvZlhQhwzB1sGzGYnoi1zOfuL98d3BIjUjtlwii5w6gYG2AEEzp7HnHCsb3jIwUPdq86Oe6hIFjtBwduIK90ca4UqzARpcfwxHwVLMpatKask00AgGVI0ysdk0BLMjmLutquD03XbThHScC2C2_Pp4cHWgMzvbgLU2RYYZcZRKr46QeNgz9W", |
| // "PS256", |
| // map[string]interface{}{"foo": "bar"}, |
| // false, |
| // }, |
| // } |
| |
| // func TestRSAPSSVerify(t *testing.T) { |
| // var err error |
| |
| // key, _ := ioutil.ReadFile("test/sample_key.pub") |
| // var rsaPSSKey *rsa.PublicKey |
| // if rsaPSSKey, err = jwt.ParseRSAPublicKeyFromPEM(key); err != nil { |
| // t.Errorf("Unable to parse RSA public key: %v", err) |
| // } |
| |
| // for _, data := range rsaPSSTestData { |
| // parts := strings.Split(data.tokenString, ".") |
| |
| // method := jwt.GetSigningMethod(data.alg) |
| // err := method.Verify(strings.Join(parts[0:2], "."), parts[2], rsaPSSKey) |
| // 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 TestRSAPSSSign(t *testing.T) { |
| // var err error |
| |
| // key, _ := ioutil.ReadFile("test/sample_key") |
| // var rsaPSSKey *rsa.PrivateKey |
| // if rsaPSSKey, err = jwt.ParseRSAPrivateKeyFromPEM(key); err != nil { |
| // t.Errorf("Unable to parse RSA private key: %v", err) |
| // } |
| |
| // for _, data := range rsaPSSTestData { |
| // if data.valid { |
| // parts := strings.Split(data.tokenString, ".") |
| // method := jwt.GetSigningMethod(data.alg) |
| // sig, err := method.Sign(strings.Join(parts[0:2], "."), rsaPSSKey) |
| // if err != nil { |
| // t.Errorf("[%v] Error signing token: %v", data.name, err) |
| // } |
| // if sig == parts[2] { |
| // t.Errorf("[%v] Signatures shouldn't match\nnew:\n%v\noriginal:\n%v", data.name, sig, parts[2]) |
| // } |
| // } |
| // } |
| // } |