@@ -15,7 +15,7 @@ const inputObject = JSON.stringify({
1515} , null , 4 ) ;
1616
1717const hsKey = "secret_cat" ;
18- const rsKey = `-----BEGIN RSA PRIVATE KEY-----
18+ const rsKey1024 = `-----BEGIN RSA PRIVATE KEY-----
1919MIICWwIBAAKBgQDdlatRjRjogo3WojgGHFHYLugdUWAY9iR3fy4arWNA1KoS8kVw
202033cJibXr8bvwUAUparCwlvdbH6dvEOfou0/gCFQsHUfQrSDv+MuSUMAe8jzKE4qW
2121+jK+xQU9a03GUnKHkkle+Q0pX/g6jXZ7r1/xAK5Do2kQ+X5xK9cipRgEKwIDAQAB
@@ -30,11 +30,52 @@ fSSjAkLRi54PKJ8TFUeOP15h9sQzydI8zJU+upvDEKZsZc/UhT/SySDOxQ4G/523
3030Y0sz/OZtSWcol/UMgQJALesy++GdvoIDLfJX5GBQpuFgFenRiRDabxrE9MNUZ2aP
3131FaFp+DyAe+b4nDwuJaW2LURbr8AEZga7oQj0uYxcYw==
3232-----END RSA PRIVATE KEY-----` ;
33- const esKey = `-----BEGIN PRIVATE KEY-----
33+ const rsKey2048 = `-----BEGIN RSA PRIVATE KEY-----
34+ MIIEogIBAAKCAQEAk0VOoksAblwP82DALTG6xGC86Hfho3nChbcPGWyqn+ScfHBF
35+ cg3SeKyy6aWCyLcKfNwE5cPYzuYvVBsZyIrdfFOuV90D/aRYbuw6UkKR3cmmy9qE
36+ qvu05dogvc0BcmkwbC37Q8JnsZBRcosoLGgTFxcK+LXdsG7DukajpsGesxQjOLb2
37+ 1jnx+ypzx74xvj7grqlXkxeDKr22q7QkO3A1ApoOuJRAU+SjEEZmqdXzRery2RWx
38+ hkWbCXuQw4PnW5Lh3Wwabnu7XKVIa6wJa1pqL2IAxmlZ0bvGTfjtO5ggNfgJk5V4
39+ bGSOXnsplpG71AWMrK2q6NqHjFIE1szEycUKrwIDAQABAoIBAAivyt6Zy/G2g8kC
40+ 852hfvcRubLV92eRdAmNGFqTOqaUcS00i3QZyp4MRGqxtOV/88y/nEOtP1RHkZJw
41+ HXTjHq4JsDvwhnQR8JbCX6z1zkLQdS01u3jrwJTaPpooxdATfPlfO6CYjqM+SapB
42+ o7dS1ZAZb4U8vPx+MWoDEVNxvO7/xyqho1Oc4H9MwqQUiyG2WfIoqxLSrBYcambv
43+ RmySwTIpgQZTr61EeWf/0eWpV0iEYbSnkB/VaKW+5tg4gCjPgy5v6/LQ0u/pzlYz
44+ ayCL3xN2rp0tigXsiiWz3cM5gDsnatK4nVNRs9y3JSZpWpI236ZfZjs8Lts+WBUw
45+ hAEoE9kCgYEAyEIGD1A7R/t5EYk5HhHDH5tGdyxejAcQL5AIz0YnTZU8Iixyc7FR
46+ uDmAMiuKIcJY/nUlxZjSxNc3MkOfZNggQvf9ONrt+ftQ1yyTjv+019NfU4w4d0Ep
47+ LNaiAHgaPKimBUZjYXbLgiMXj/1pBaQmgUYTK/VlO3PVdowxxzxMYlMCgYEAvEOG
48+ GrhVaQV1nAYx86BgZ3wn90hBFXZWGaN+eXUmyrast93Ih3TCSgQDKPuN3pdv/TIe
49+ cpQv/BxEMpW+6d5Z1NP3GbrLpaZUiUNk8fqw1S3pmD5aWZrYIUaNukAyOxnZVgjv
50+ EWD9QTpI663gODaeZZTkDYiRNzTzGOg5HtzporUCgYBBOphEtqqImNXnq13qeHip
51+ O+eo+8/UJpzUEUN9WGmG8NxEeVvSaWin7DrgnKQCuQ5J3Biwk0XcDgoRmks6Ctf/
52+ WE2oDk/DxGOhowhxZMMgJd6AFUVzOstRqpvcMULCjWB+iV3nqk1Bl3KeWTmzN7O/
53+ Gfc2s1kFE4btdV7lebObtwKBgE3rkLS8eLVYCh6Cvef9CAms7Im/wRhV+zrvXWh9
54+ 4YljZEdRpy7RV5z03i33N/faLALa3JlF1jp9pIhfTD5Vxk59ULe4hZNRLYoGd+Bj
55+ hw8kyps1q4WMvkm/fueIrIGjqD2gwvopb4iwy/+n3rbFfHfE0UL8tEXqR3eWnhW1
56+ D4pFAoGAccR4eMJD43hJWaUQLtsj0RoW9lFKVXj7aqkIIeupXwt7Ic2z/FhCAJi+
57+ V0MWpd3K6+kPl+ifdt8U4kcYfubPMfJhd7IkMcgQS+yZK1+5xWdRISvI8GpNwIHE
58+ LUkVkCCadXNNZ7b1nmUKjse95u4IaE6hwAqjSTNb05gPmCfoEjg=
59+ -----END RSA PRIVATE KEY-----` ;
60+ const esKeyP256 = `-----BEGIN PRIVATE KEY-----
3461MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgevZzL1gdAFr88hb2
3562OF/2NxApJCzGCEDdfSp6VQO30hyhRANCAAQRWz+jn65BtOMvdyHKcvjBeBSDZH2r
36631RTwjmYSi9R/zpBnuQ4EiMnCqfMPWiZqB4QdbAd0E7oH50VpuZ1P087G
3764-----END PRIVATE KEY-----` ;
65+ const esKeyP384 = `-----BEGIN PRIVATE KEY-----
66+ MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDDpgCvB2frnLKd7TuWe
67+ JM1ejXXmr9y/5gskxKuuylLvpQTiDdtLtuhJnvw1/zWKWO6hZANiAAQ5Crhsi5FD
68+ t55i53dCtdzG9OzCnbDFf/6136ZfEiakDTDeWCdUvNnB3WQEcVBr97BfSWLI9mO+
69+ T5yzm0RfhgvWIq/tBou+sIDeGp6NQfJwhDhf+JsdeF174gtfNMZGj/s=
70+ -----END PRIVATE KEY-----` ;
71+ const esKeyP521 = `-----BEGIN PRIVATE KEY-----
72+ MIHuAgEAMBAGByqGSM49AgEGBSuBBAAjBIHWMIHTAgEBBEIA0dBErrZ5ovKq4Xf/
73+ iTlRkYxuOfgBZ6+tWIfG13YwthB1XrH06YmteZGNjHHLZEeycwUt0jM4kUb+tOsJ
74+ 3ckhj1ihgYkDgYYABACYgsa8JWKH46CQagwNw14v/L+DIs1WAjJdMXZySjKlRkD9
75+ LtLMxkbX2H4H4Zl2KzCMJkwTSETzSKNlXvAUJqKbRwHezCp4y5XZN9MOBYdmyylZ
76+ NOVxwwTouimNkJ0K6A8+/Im5S3PWB8Ra1D6t+bT1WHHhEePZcltSLLFlbIIyot5m
77+ 2w==
78+ -----END PRIVATE KEY-----` ;
3879
3980TestRegister . addTests ( [
4081 {
@@ -88,7 +129,24 @@ TestRegister.addTests([
88129 recipeConfig : [
89130 {
90131 op : "JWT Sign" ,
91- args : [ esKey , "ES256" , "{}" ] ,
132+ args : [ esKeyP256 , "ES256" , "{}" ] ,
133+ } ,
134+ {
135+ op : "JWT Decode" ,
136+ args : [ ]
137+ }
138+ ] ,
139+ } ,
140+ {
141+ name : "JWT Sign: ES384 - P256 key" ,
142+ input : inputObject ,
143+ expectedOutput : `Error: Have you entered the key correctly? The key should be either the secret for HMAC algorithms or the PEM-encoded private key for RSA and ECDSA.
144+
145+ Error: "alg" parameter "ES384" requires curve "secp384r1".` ,
146+ recipeConfig : [
147+ {
148+ op : "JWT Sign" ,
149+ args : [ esKeyP256 , "ES384" , "{}" ] ,
92150 } ,
93151 {
94152 op : "JWT Decode" ,
@@ -103,7 +161,7 @@ TestRegister.addTests([
103161 recipeConfig : [
104162 {
105163 op : "JWT Sign" ,
106- args : [ esKey , "ES384" , "{}" ] ,
164+ args : [ esKeyP384 , "ES384" , "{}" ] ,
107165 } ,
108166 {
109167 op : "JWT Decode" ,
@@ -118,7 +176,24 @@ TestRegister.addTests([
118176 recipeConfig : [
119177 {
120178 op : "JWT Sign" ,
121- args : [ esKey , "ES512" , "{}" ] ,
179+ args : [ esKeyP521 , "ES512" , "{}" ] ,
180+ } ,
181+ {
182+ op : "JWT Decode" ,
183+ args : [ ]
184+ }
185+ ] ,
186+ } ,
187+ {
188+ name : "JWT Sign: RS256, weak key" ,
189+ input : inputObject ,
190+ expectedOutput : `Error: Have you entered the key correctly? The key should be either the secret for HMAC algorithms or the PEM-encoded private key for RSA and ECDSA.
191+
192+ Error: secretOrPrivateKey has a minimum key size of 2048 bits for RS256` ,
193+ recipeConfig : [
194+ {
195+ op : "JWT Sign" ,
196+ args : [ rsKey1024 , "RS256" , "{}" ] ,
122197 } ,
123198 {
124199 op : "JWT Decode" ,
@@ -133,7 +208,7 @@ TestRegister.addTests([
133208 recipeConfig : [
134209 {
135210 op : "JWT Sign" ,
136- args : [ rsKey , "RS256" , "{}" ] ,
211+ args : [ rsKey2048 , "RS256" , "{}" ] ,
137212 } ,
138213 {
139214 op : "JWT Decode" ,
@@ -148,7 +223,7 @@ TestRegister.addTests([
148223 recipeConfig : [
149224 {
150225 op : "JWT Sign" ,
151- args : [ rsKey , "RS384" , "{}" ] ,
226+ args : [ rsKey2048 , "RS384" , "{}" ] ,
152227 } ,
153228 {
154229 op : "JWT Decode" ,
@@ -163,7 +238,7 @@ TestRegister.addTests([
163238 recipeConfig : [
164239 {
165240 op : "JWT Sign" ,
166- args : [ esKey , "RS512" , "{}" ] ,
241+ args : [ rsKey2048 , "RS512" , "{}" ] ,
167242 } ,
168243 {
169244 op : "JWT Decode" ,
0 commit comments