Skip to content

Commit 81328c1

Browse files
committed
add tests for DER and JOSE signatures
1 parent 2adaaa4 commit 81328c1

5 files changed

Lines changed: 52 additions & 7 deletions

File tree

lib/src/main/java/com/auth0/jwtdecodejava/algorithms/ECDSAAlgorithm.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public void verify(String[] jwtParts) throws SignatureVerificationException {
4646
private boolean isDERSignature(byte[] signature) {
4747
// DER Structure: http://crypto.stackexchange.com/a/1797
4848
// Should begin with 0x30 and have exactly the expected length
49-
return signature[0] == 0x30 && signature.length == ecNumberSize * 2;
49+
return signature[0] == 0x30 && signature.length != ecNumberSize * 2;
5050
}
5151

5252
private byte[] JOSEToDER(byte[] joseSignature) throws SignatureException {

lib/src/test/java/com/auth0/jwtdecodejava/algorithms/ECDSAAlgorithmTest.java

Lines changed: 33 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,20 @@ public class ECDSAAlgorithmTest {
2323
@Rule
2424
public ExpectedException exception = ExpectedException.none();
2525

26+
//JOSE Signatures obtained using Node 'jwa' lib: https://github.com/brianloveswords/node-jwa
27+
//DER Signatures obtained from source JOSE signature using 'ecdsa-sig-formatter' lib: https://github.com/Brightspace/node-ecdsa-sig-formatter
28+
2629
@Test
27-
public void shouldPassECDSA256Verification() throws Exception {
28-
String jwt = "eyJhbGciOiJFUzI1NiJ9.eyJpc3MiOiJhdXRoMCJ9.W9qfN1b80B9hnMo49WL8THrOsf1vEjOhapeFemPMGySzxTcgfyudS5esgeBTO908X5SLdAr5jMwPUPBs9b6nNg";
30+
public void shouldPassECDSA256VerificationWithJOSESignature() throws Exception {
31+
String jwt = "eyJhbGciOiJFUzI1NiJ9.eyJpc3MiOiJhdXRoMCJ9.4iVk3-Y0v4RT4_9IaQlp-8dZ_4fsTzIylgrPTDLrEvTHBTyVS3tgPbr2_IZfLETtiKRqCg0aQ5sh9eIsTTwB1g";
32+
PublicKey key = readPublicKeyFromFile(PUBLIC_KEY_FILE_256, "EC");
33+
Algorithm algorithm = Algorithm.ECDSA256(key);
34+
algorithm.verify(jwt.split("\\."));
35+
}
36+
37+
@Test
38+
public void shouldPassECDSA256VerificationWithDERSignature() throws Exception {
39+
String jwt = "eyJhbGciOiJFUzI1NiJ9.eyJpc3MiOiJhdXRoMCJ9.MEYCIQDiJWTf5jS/hFPj/0hpCWn7x1n/h+xPMjKWCs9MMusS9AIhAMcFPJVLe2A9uvb8hl8sRO2IpGoKDRpDmyH14ixNPAHW";
2940
PublicKey key = readPublicKeyFromFile(PUBLIC_KEY_FILE_256, "EC");
3041
Algorithm algorithm = Algorithm.ECDSA256(key);
3142
algorithm.verify(jwt.split("\\."));
@@ -41,8 +52,16 @@ public void shouldFailECDSA256VerificationWithInvalidPublicKey() throws Exceptio
4152
}
4253

4354
@Test
44-
public void shouldPassECDSA384Verification() throws Exception {
45-
String jwt = "eyJhbGciOiJFUzM4NCJ9.eyJpc3MiOiJhdXRoMCJ9._k5h1KyO-NE0R2_HAw0-XEc0bGT5atv29SxHhOGC9JDqUHeUdptfCK_ljQ01nLVt2OQWT2SwGs-TuyHDFmhPmPGFZ9wboxvq_ieopmYqhQilNAu-WF-frioiRz9733fU";
55+
public void shouldPassECDSA384VerificationWithJOSESignature() throws Exception {
56+
String jwt = "eyJhbGciOiJFUzM4NCJ9.eyJpc3MiOiJhdXRoMCJ9.50UU5VKNdF1wfykY8jQBKpvuHZoe6IZBJm5NvoB8bR-hnRg6ti-CHbmvoRtlLfnHfwITa_8cJMy6TenMC2g63GQHytc8rYoXqbwtS4R0Ko_AXbLFUmfxnGnMC6v4MS_z";
57+
PublicKey key = readPublicKeyFromFile(PUBLIC_KEY_FILE_384, "EC");
58+
Algorithm algorithm = Algorithm.ECDSA384(key);
59+
algorithm.verify(jwt.split("\\."));
60+
}
61+
62+
@Test
63+
public void shouldPassECDSA384VerificationWithDERSignature() throws Exception {
64+
String jwt = "eyJhbGciOiJFUzM4NCJ9.eyJpc3MiOiJhdXRoMCJ9.MGUCMQDnRRTlUo10XXB/KRjyNAEqm+4dmh7ohkEmbk2+gHxtH6GdGDq2L4Idua+hG2Ut+ccCMH8CE2v/HCTMuk3pzAtoOtxkB8rXPK2KF6m8LUuEdCqPwF2yxVJn8ZxpzAur+DEv8w==";
4665
PublicKey key = readPublicKeyFromFile(PUBLIC_KEY_FILE_384, "EC");
4766
Algorithm algorithm = Algorithm.ECDSA384(key);
4867
algorithm.verify(jwt.split("\\."));
@@ -58,8 +77,16 @@ public void shouldFailECDSA384VerificationWithInvalidPublicKey() throws Exceptio
5877
}
5978

6079
@Test
61-
public void shouldPassECDSA512Verification() throws Exception {
62-
String jwt = "eyJhbGciOiJFUzUxMiJ9.eyJpc3MiOiJhdXRoMCJ9.AZgdopFFsN0amCSs2kOucXdpylD31DEm5ChK1PG0_gq5Mf47MrvVph8zHSVuvcrXzcE1U3VxeCg89mYW1H33Y-8iAF0QFkdfTUQIWKNObH543WNMYYssv3OtOj0znPv8atDbaF8DMYAtcT1qdmaSJRhx-egRE9HGZkinPh9CfLLLt58X";
80+
public void shouldPassECDSA512VerificationWithJOSESignature() throws Exception {
81+
String jwt = "eyJhbGciOiJFUzUxMiJ9.eyJpc3MiOiJhdXRoMCJ9.AeCJPDIsSHhwRSGZCY6rspi8zekOw0K9qYMNridP1Fu9uhrA1QrG-EUxXlE06yvmh2R7Rz0aE7kxBwrnq8L8aOBCAYAsqhzPeUvyp8fXjjgs0Eto5I0mndE2QHlgcMSFASyjHbU8wD2Rq7ZNzGQ5b2MZfpv030WGUajT-aZYWFUJHVg2";
82+
PublicKey key = readPublicKeyFromFile(PUBLIC_KEY_FILE_512, "EC");
83+
Algorithm algorithm = Algorithm.ECDSA512(key);
84+
algorithm.verify(jwt.split("\\."));
85+
}
86+
87+
@Test
88+
public void shouldPassECDSA512VerificationWithDERSignature() throws Exception {
89+
String jwt = "eyJhbGciOiJFUzUxMiJ9.eyJpc3MiOiJhdXRoMCJ9.MIGIAkIB4Ik8MixIeHBFIZkJjquymLzN6Q7DQr2pgw2uJ0/UW726GsDVCsb4RTFeUTTrK+aHZHtHPRoTuTEHCuerwvxo4EICQgGALKocz3lL8qfH1444LNBLaOSNJp3RNkB5YHDEhQEsox21PMA9kau2TcxkOW9jGX6b9N9FhlGo0/mmWFhVCR1YNg==";
6390
PublicKey key = readPublicKeyFromFile(PUBLIC_KEY_FILE_512, "EC");
6491
Algorithm algorithm = Algorithm.ECDSA512(key);
6592
algorithm.verify(jwt.split("\\."));
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
-----BEGIN PRIVATE KEY-----
2+
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgPGJGAm4X1fvBuC1z
3+
SpO/4Izx6PXfNMaiKaS5RUkFqEGhRANCAARCBvmeksd3QGTrVs2eMrrfa7CYF+sX
4+
sjyGg+Bo5mPKGH4Gs8M7oIvoP9pb/I85tdebtKlmiCZHAZE5w4DfJSV6
5+
-----END PRIVATE KEY-----
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
-----BEGIN PRIVATE KEY-----
2+
MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDCVWQsOJHjKD0I4cXOY
3+
Jm4G8i5c7IMhFbxFq57OUlrTVmND43dvvNW1oQ6i6NiXEQWhZANiAASezSGlAu4w
4+
AaJe4676mQM0F/5slI+EkdptRJdfsQP9mNxe7RdzHgcSw7j/Wxa45nlnFnFrPPL4
5+
viJKOBRxMB1jjVA9my9PixxJGoB22qDQwFbP8ldmEp6abwdBsXNaePM=
6+
-----END PRIVATE KEY-----
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
-----BEGIN PRIVATE KEY-----
2+
MIHtAgEAMBAGByqGSM49AgEGBSuBBAAjBIHVMIHSAgEBBEHzl1DpZSQJ8YhCbN/u
3+
vo5SOu0BjDDX9Gub6zsBW6B2TxRzb5sBeQaWVscDUZha4Xr1HEWpVtua9+nEQU/9
4+
Aq9Pl6GBiQOBhgAEAJhvCa6S89ePqlLO6MRV9KQqHvdAITDAf/WRDcvCmfrrNuov
5+
+j4gQXO12ohIukPCHM9rYms8Eqciz3gaxVTxZD4CAA8i2k9H6ew9iSh1qXa1kLxi
6+
yzMBqmAmmg4u/SroD6OleG56SwZVbWx+KIINB6r/PQVciGX8FjwgR/mbLHotVZYD
7+
-----END PRIVATE KEY-----

0 commit comments

Comments
 (0)