|  | package crypto_test | 
|  |  | 
|  | // import ( | 
|  | // 	"github.com/dgrijalva/jwt-go" | 
|  | // 	"io/ioutil" | 
|  | // 	"strings" | 
|  | // 	"testing" | 
|  | // ) | 
|  |  | 
|  | // var rsaTestData = []struct { | 
|  | // 	name        string | 
|  | // 	tokenString string | 
|  | // 	alg         string | 
|  | // 	claims      map[string]interface{} | 
|  | // 	valid       bool | 
|  | // }{ | 
|  | // 	{ | 
|  | // 		"Basic RS256", | 
|  | // 		"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJmb28iOiJiYXIifQ.FhkiHkoESI_cG3NPigFrxEk9Z60_oXrOT2vGm9Pn6RDgYNovYORQmmA0zs1AoAOf09ly2Nx2YAg6ABqAYga1AcMFkJljwxTT5fYphTuqpWdy4BELeSYJx5Ty2gmr8e7RonuUztrdD5WfPqLKMm1Ozp_T6zALpRmwTIW0QPnaBXaQD90FplAg46Iy1UlDKr-Eupy0i5SLch5Q-p2ZpaL_5fnTIUDlxC3pWhJTyx_71qDI-mAA_5lE_VdroOeflG56sSmDxopPEG3bFlSu1eowyBfxtu0_CuVd-M42RU75Zc4Gsj6uV77MBtbMrf4_7M_NUTSgoIF3fRqxrj0NzihIBg", | 
|  | // 		"RS256", | 
|  | // 		map[string]interface{}{"foo": "bar"}, | 
|  | // 		true, | 
|  | // 	}, | 
|  | // 	{ | 
|  | // 		"Basic RS384", | 
|  | // 		"eyJhbGciOiJSUzM4NCIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIifQ.W-jEzRfBigtCWsinvVVuldiuilzVdU5ty0MvpLaSaqK9PlAWWlDQ1VIQ_qSKzwL5IXaZkvZFJXT3yL3n7OUVu7zCNJzdwznbC8Z-b0z2lYvcklJYi2VOFRcGbJtXUqgjk2oGsiqUMUMOLP70TTefkpsgqDxbRh9CDUfpOJgW-dU7cmgaoswe3wjUAUi6B6G2YEaiuXC0XScQYSYVKIzgKXJV8Zw-7AN_DBUI4GkTpsvQ9fVVjZM9csQiEXhYekyrKu1nu_POpQonGd8yqkIyXPECNmmqH5jH4sFiF67XhD7_JpkvLziBpI-uh86evBUadmHhb9Otqw3uV3NTaXLzJw", | 
|  | // 		"RS384", | 
|  | // 		map[string]interface{}{"foo": "bar"}, | 
|  | // 		true, | 
|  | // 	}, | 
|  | // 	{ | 
|  | // 		"Basic RS512", | 
|  | // 		"eyJhbGciOiJSUzUxMiIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIifQ.zBlLlmRrUxx4SJPUbV37Q1joRcI9EW13grnKduK3wtYKmDXbgDpF1cZ6B-2Jsm5RB8REmMiLpGms-EjXhgnyh2TSHE-9W2gA_jvshegLWtwRVDX40ODSkTb7OVuaWgiy9y7llvcknFBTIg-FnVPVpXMmeV_pvwQyhaz1SSwSPrDyxEmksz1hq7YONXhXPpGaNbMMeDTNP_1oj8DZaqTIL9TwV8_1wb2Odt_Fy58Ke2RVFijsOLdnyEAjt2n9Mxihu9i3PhNBkkxa2GbnXBfq3kzvZ_xxGGopLdHhJjcGWXO-NiwI9_tiu14NRv4L2xC0ItD9Yz68v2ZIZEp_DuzwRQ", | 
|  | // 		"RS512", | 
|  | // 		map[string]interface{}{"foo": "bar"}, | 
|  | // 		true, | 
|  | // 	}, | 
|  | // 	{ | 
|  | // 		"basic invalid: foo => bar", | 
|  | // 		"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJmb28iOiJiYXIifQ.EhkiHkoESI_cG3NPigFrxEk9Z60_oXrOT2vGm9Pn6RDgYNovYORQmmA0zs1AoAOf09ly2Nx2YAg6ABqAYga1AcMFkJljwxTT5fYphTuqpWdy4BELeSYJx5Ty2gmr8e7RonuUztrdD5WfPqLKMm1Ozp_T6zALpRmwTIW0QPnaBXaQD90FplAg46Iy1UlDKr-Eupy0i5SLch5Q-p2ZpaL_5fnTIUDlxC3pWhJTyx_71qDI-mAA_5lE_VdroOeflG56sSmDxopPEG3bFlSu1eowyBfxtu0_CuVd-M42RU75Zc4Gsj6uV77MBtbMrf4_7M_NUTSgoIF3fRqxrj0NzihIBg", | 
|  | // 		"RS256", | 
|  | // 		map[string]interface{}{"foo": "bar"}, | 
|  | // 		false, | 
|  | // 	}, | 
|  | // } | 
|  |  | 
|  | // func TestRSAVerify(t *testing.T) { | 
|  | // 	keyData, _ := ioutil.ReadFile("test/sample_key.pub") | 
|  | // 	key, _ := jwt.ParseRSAPublicKeyFromPEM(keyData) | 
|  |  | 
|  | // 	for _, data := range rsaTestData { | 
|  | // 		parts := strings.Split(data.tokenString, ".") | 
|  |  | 
|  | // 		method := jwt.GetSigningMethod(data.alg) | 
|  | // 		err := method.Verify(strings.Join(parts[0:2], "."), parts[2], key) | 
|  | // 		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 TestRSASign(t *testing.T) { | 
|  | // 	keyData, _ := ioutil.ReadFile("test/sample_key") | 
|  | // 	key, _ := jwt.ParseRSAPrivateKeyFromPEM(keyData) | 
|  |  | 
|  | // 	for _, data := range rsaTestData { | 
|  | // 		if data.valid { | 
|  | // 			parts := strings.Split(data.tokenString, ".") | 
|  | // 			method := jwt.GetSigningMethod(data.alg) | 
|  | // 			sig, err := method.Sign(strings.Join(parts[0:2], "."), key) | 
|  | // 			if err != nil { | 
|  | // 				t.Errorf("[%v] Error signing token: %v", data.name, err) | 
|  | // 			} | 
|  | // 			if sig != parts[2] { | 
|  | // 				t.Errorf("[%v] Incorrect signature.\nwas:\n%v\nexpecting:\n%v", data.name, sig, parts[2]) | 
|  | // 			} | 
|  | // 		} | 
|  | // 	} | 
|  | // } | 
|  |  | 
|  | // func TestRSAVerifyWithPreParsedPrivateKey(t *testing.T) { | 
|  | // 	key, _ := ioutil.ReadFile("test/sample_key.pub") | 
|  | // 	parsedKey, err := jwt.ParseRSAPublicKeyFromPEM(key) | 
|  | // 	if err != nil { | 
|  | // 		t.Fatal(err) | 
|  | // 	} | 
|  | // 	testData := rsaTestData[0] | 
|  | // 	parts := strings.Split(testData.tokenString, ".") | 
|  | // 	err = jwt.SigningMethodRS256.Verify(strings.Join(parts[0:2], "."), parts[2], parsedKey) | 
|  | // 	if err != nil { | 
|  | // 		t.Errorf("[%v] Error while verifying key: %v", testData.name, err) | 
|  | // 	} | 
|  | // } | 
|  |  | 
|  | // func TestRSAWithPreParsedPrivateKey(t *testing.T) { | 
|  | // 	key, _ := ioutil.ReadFile("test/sample_key") | 
|  | // 	parsedKey, err := jwt.ParseRSAPrivateKeyFromPEM(key) | 
|  | // 	if err != nil { | 
|  | // 		t.Fatal(err) | 
|  | // 	} | 
|  | // 	testData := rsaTestData[0] | 
|  | // 	parts := strings.Split(testData.tokenString, ".") | 
|  | // 	sig, err := jwt.SigningMethodRS256.Sign(strings.Join(parts[0:2], "."), parsedKey) | 
|  | // 	if err != nil { | 
|  | // 		t.Errorf("[%v] Error signing token: %v", testData.name, err) | 
|  | // 	} | 
|  | // 	if sig != parts[2] { | 
|  | // 		t.Errorf("[%v] Incorrect signature.\nwas:\n%v\nexpecting:\n%v", testData.name, sig, parts[2]) | 
|  | // 	} | 
|  | // } | 
|  |  | 
|  | // func TestRSAKeyParsing(t *testing.T) { | 
|  | // 	key, _ := ioutil.ReadFile("test/sample_key") | 
|  | // 	pubKey, _ := ioutil.ReadFile("test/sample_key.pub") | 
|  | // 	badKey := []byte("All your base are belong to key") | 
|  |  | 
|  | // 	// Test parsePrivateKey | 
|  | // 	if _, e := jwt.ParseRSAPrivateKeyFromPEM(key); e != nil { | 
|  | // 		t.Errorf("Failed to parse valid private key: %v", e) | 
|  | // 	} | 
|  |  | 
|  | // 	if k, e := jwt.ParseRSAPrivateKeyFromPEM(pubKey); e == nil { | 
|  | // 		t.Errorf("Parsed public key as valid private key: %v", k) | 
|  | // 	} | 
|  |  | 
|  | // 	if k, e := jwt.ParseRSAPrivateKeyFromPEM(badKey); e == nil { | 
|  | // 		t.Errorf("Parsed invalid key as valid private key: %v", k) | 
|  | // 	} | 
|  |  | 
|  | // 	// Test parsePublicKey | 
|  | // 	if _, e := jwt.ParseRSAPublicKeyFromPEM(pubKey); e != nil { | 
|  | // 		t.Errorf("Failed to parse valid public key: %v", e) | 
|  | // 	} | 
|  |  | 
|  | // 	if k, e := jwt.ParseRSAPublicKeyFromPEM(key); e == nil { | 
|  | // 		t.Errorf("Parsed private key as valid public key: %v", k) | 
|  | // 	} | 
|  |  | 
|  | // 	if k, e := jwt.ParseRSAPublicKeyFromPEM(badKey); e == nil { | 
|  | // 		t.Errorf("Parsed invalid key as valid private key: %v", k) | 
|  | // 	} | 
|  |  | 
|  | // } | 
|  |  | 
|  | // func BenchmarkRS256Signing(b *testing.B) { | 
|  | // 	key, _ := ioutil.ReadFile("test/sample_key") | 
|  | // 	parsedKey, err := jwt.ParseRSAPrivateKeyFromPEM(key) | 
|  | // 	if err != nil { | 
|  | // 		b.Fatal(err) | 
|  | // 	} | 
|  |  | 
|  | // 	benchmarkSigning(b, jwt.SigningMethodRS256, parsedKey) | 
|  | // } | 
|  |  | 
|  | // func BenchmarkRS384Signing(b *testing.B) { | 
|  | // 	key, _ := ioutil.ReadFile("test/sample_key") | 
|  | // 	parsedKey, err := jwt.ParseRSAPrivateKeyFromPEM(key) | 
|  | // 	if err != nil { | 
|  | // 		b.Fatal(err) | 
|  | // 	} | 
|  |  | 
|  | // 	benchmarkSigning(b, jwt.SigningMethodRS384, parsedKey) | 
|  | // } | 
|  |  | 
|  | // func BenchmarkRS512Signing(b *testing.B) { | 
|  | // 	key, _ := ioutil.ReadFile("test/sample_key") | 
|  | // 	parsedKey, err := jwt.ParseRSAPrivateKeyFromPEM(key) | 
|  | // 	if err != nil { | 
|  | // 		b.Fatal(err) | 
|  | // 	} | 
|  |  | 
|  | // 	benchmarkSigning(b, jwt.SigningMethodRS512, parsedKey) | 
|  | // } |