comparison spec/util_jwt_spec.lua @ 12700:899c057781cd

spec: Move test crypto keys to a shared file for clarity and easy maintenance
author Matthew Wild <mwild1@gmail.com>
date Sat, 02 Jul 2022 12:36:52 +0100
parents b3d0c1457584
children 8e402a2ae1b8
comparison
equal deleted inserted replaced
12699:b3d0c1457584 12700:899c057781cd
1 local jwt = require "util.jwt"; 1 local jwt = require "util.jwt";
2 local test_keys = require "spec.inputs.test_keys";
2 3
3 describe("util.jwt", function () 4 describe("util.jwt", function ()
4 it("validates", function () 5 it("validates", function ()
5 local key = "secret"; 6 local key = "secret";
6 local token = jwt.sign(key, { payload = "this" }); 7 local token = jwt.sign(key, { payload = "this" });
34 }, result); 35 }, result);
35 36
36 end); 37 end);
37 38
38 it("validates ES256", function () 39 it("validates ES256", function ()
39 local private_key = [[ 40 local private_key = test_keys.ecdsa_private_pem;
40 -----BEGIN PRIVATE KEY-----
41 MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgevZzL1gdAFr88hb2
42 OF/2NxApJCzGCEDdfSp6VQO30hyhRANCAAQRWz+jn65BtOMvdyHKcvjBeBSDZH2r
43 1RTwjmYSi9R/zpBnuQ4EiMnCqfMPWiZqB4QdbAd0E7oH50VpuZ1P087G
44 -----END PRIVATE KEY-----
45 ]];
46
47 local sign = jwt.new_signer("ES256", private_key); 41 local sign = jwt.new_signer("ES256", private_key);
48 42
49 local token = sign({ 43 local token = sign({
50 sub = "1234567890"; 44 sub = "1234567890";
51 name = "John Doe"; 45 name = "John Doe";
52 admin = true; 46 admin = true;
53 iat = 1516239022; 47 iat = 1516239022;
54 }); 48 });
55 49
56 local public_key = [[ 50 local public_key = test_keys.ecdsa_public_pem;
57 -----BEGIN PUBLIC KEY-----
58 MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEEVs/o5+uQbTjL3chynL4wXgUg2R9
59 q9UU8I5mEovUf86QZ7kOBIjJwqnzD1omageEHWwHdBO6B+dFabmdT9POxg==
60 -----END PUBLIC KEY-----
61 ]];
62 local verify = jwt.new_verifier("ES256", public_key); 51 local verify = jwt.new_verifier("ES256", public_key);
63 52
64 local result = {verify(token)}; 53 local result = {verify(token)};
65 assert.same({ 54 assert.same({
66 true; -- success 55 true; -- success
83 }; 72 };
84 }, result); 73 }, result);
85 end); 74 end);
86 75
87 it("validates RS256", function () 76 it("validates RS256", function ()
88 local private_key = [[ 77 local private_key = test_keys.rsa_private_pem;
89 -----BEGIN PRIVATE KEY-----
90 MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC7VJTUt9Us8cKj
91 MzEfYyjiWA4R4/M2bS1GB4t7NXp98C3SC6dVMvDuictGeurT8jNbvJZHtCSuYEvu
92 NMoSfm76oqFvAp8Gy0iz5sxjZmSnXyCdPEovGhLa0VzMaQ8s+CLOyS56YyCFGeJZ
93 qgtzJ6GR3eqoYSW9b9UMvkBpZODSctWSNGj3P7jRFDO5VoTwCQAWbFnOjDfH5Ulg
94 p2PKSQnSJP3AJLQNFNe7br1XbrhV//eO+t51mIpGSDCUv3E0DDFcWDTH9cXDTTlR
95 ZVEiR2BwpZOOkE/Z0/BVnhZYL71oZV34bKfWjQIt6V/isSMahdsAASACp4ZTGtwi
96 VuNd9tybAgMBAAECggEBAKTmjaS6tkK8BlPXClTQ2vpz/N6uxDeS35mXpqasqskV
97 laAidgg/sWqpjXDbXr93otIMLlWsM+X0CqMDgSXKejLS2jx4GDjI1ZTXg++0AMJ8
98 sJ74pWzVDOfmCEQ/7wXs3+cbnXhKriO8Z036q92Qc1+N87SI38nkGa0ABH9CN83H
99 mQqt4fB7UdHzuIRe/me2PGhIq5ZBzj6h3BpoPGzEP+x3l9YmK8t/1cN0pqI+dQwY
100 dgfGjackLu/2qH80MCF7IyQaseZUOJyKrCLtSD/Iixv/hzDEUPfOCjFDgTpzf3cw
101 ta8+oE4wHCo1iI1/4TlPkwmXx4qSXtmw4aQPz7IDQvECgYEA8KNThCO2gsC2I9PQ
102 DM/8Cw0O983WCDY+oi+7JPiNAJwv5DYBqEZB1QYdj06YD16XlC/HAZMsMku1na2T
103 N0driwenQQWzoev3g2S7gRDoS/FCJSI3jJ+kjgtaA7Qmzlgk1TxODN+G1H91HW7t
104 0l7VnL27IWyYo2qRRK3jzxqUiPUCgYEAx0oQs2reBQGMVZnApD1jeq7n4MvNLcPv
105 t8b/eU9iUv6Y4Mj0Suo/AU8lYZXm8ubbqAlwz2VSVunD2tOplHyMUrtCtObAfVDU
106 AhCndKaA9gApgfb3xw1IKbuQ1u4IF1FJl3VtumfQn//LiH1B3rXhcdyo3/vIttEk
107 48RakUKClU8CgYEAzV7W3COOlDDcQd935DdtKBFRAPRPAlspQUnzMi5eSHMD/ISL
108 DY5IiQHbIH83D4bvXq0X7qQoSBSNP7Dvv3HYuqMhf0DaegrlBuJllFVVq9qPVRnK
109 xt1Il2HgxOBvbhOT+9in1BzA+YJ99UzC85O0Qz06A+CmtHEy4aZ2kj5hHjECgYEA
110 mNS4+A8Fkss8Js1RieK2LniBxMgmYml3pfVLKGnzmng7H2+cwPLhPIzIuwytXywh
111 2bzbsYEfYx3EoEVgMEpPhoarQnYPukrJO4gwE2o5Te6T5mJSZGlQJQj9q4ZB2Dfz
112 et6INsK0oG8XVGXSpQvQh3RUYekCZQkBBFcpqWpbIEsCgYAnM3DQf3FJoSnXaMhr
113 VBIovic5l0xFkEHskAjFTevO86Fsz1C2aSeRKSqGFoOQ0tmJzBEs1R6KqnHInicD
114 TQrKhArgLXX4v3CddjfTRJkFWDbE/CkvKZNOrcf1nhaGCPspRJj2KUkj1Fhl9Cnc
115 dn/RsYEONbwQSjIfMPkvxF+8HQ==
116 -----END PRIVATE KEY-----
117 ]];
118 local sign = jwt.new_signer("RS256", private_key); 78 local sign = jwt.new_signer("RS256", private_key);
119 79
120 local token = sign({ 80 local token = sign({
121 sub = "1234567890"; 81 sub = "1234567890";
122 name = "John Doe"; 82 name = "John Doe";
123 admin = true; 83 admin = true;
124 iat = 1516239022; 84 iat = 1516239022;
125 }); 85 });
126 86
127 local public_key = [[ 87 local public_key = test_keys.rsa_public_pem;
128 -----BEGIN PUBLIC KEY-----
129 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu1SU1LfVLPHCozMxH2Mo
130 4lgOEePzNm0tRgeLezV6ffAt0gunVTLw7onLRnrq0/IzW7yWR7QkrmBL7jTKEn5u
131 +qKhbwKfBstIs+bMY2Zkp18gnTxKLxoS2tFczGkPLPgizskuemMghRniWaoLcyeh
132 kd3qqGElvW/VDL5AaWTg0nLVkjRo9z+40RQzuVaE8AkAFmxZzow3x+VJYKdjykkJ
133 0iT9wCS0DRTXu269V264Vf/3jvredZiKRkgwlL9xNAwxXFg0x/XFw005UWVRIkdg
134 cKWTjpBP2dPwVZ4WWC+9aGVd+Gyn1o0CLelf4rEjGoXbAAEgAqeGUxrcIlbjXfbc
135 mwIDAQAB
136 -----END PUBLIC KEY-----
137 ]];
138 local verify = jwt.new_verifier("RS256", public_key); 88 local verify = jwt.new_verifier("RS256", public_key);
139 89
140 local result = {verify(token)}; 90 local result = {verify(token)};
141 assert.same({ 91 assert.same({
142 true; -- success 92 true; -- success
159 }; 109 };
160 }, result); 110 }, result);
161 end); 111 end);
162 112
163 it("validates PS256", function () 113 it("validates PS256", function ()
164 local private_key = [[ 114 local private_key = test_keys.rsa_private_pem;
165 -----BEGIN PRIVATE KEY-----
166 MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC7VJTUt9Us8cKj
167 MzEfYyjiWA4R4/M2bS1GB4t7NXp98C3SC6dVMvDuictGeurT8jNbvJZHtCSuYEvu
168 NMoSfm76oqFvAp8Gy0iz5sxjZmSnXyCdPEovGhLa0VzMaQ8s+CLOyS56YyCFGeJZ
169 qgtzJ6GR3eqoYSW9b9UMvkBpZODSctWSNGj3P7jRFDO5VoTwCQAWbFnOjDfH5Ulg
170 p2PKSQnSJP3AJLQNFNe7br1XbrhV//eO+t51mIpGSDCUv3E0DDFcWDTH9cXDTTlR
171 ZVEiR2BwpZOOkE/Z0/BVnhZYL71oZV34bKfWjQIt6V/isSMahdsAASACp4ZTGtwi
172 VuNd9tybAgMBAAECggEBAKTmjaS6tkK8BlPXClTQ2vpz/N6uxDeS35mXpqasqskV
173 laAidgg/sWqpjXDbXr93otIMLlWsM+X0CqMDgSXKejLS2jx4GDjI1ZTXg++0AMJ8
174 sJ74pWzVDOfmCEQ/7wXs3+cbnXhKriO8Z036q92Qc1+N87SI38nkGa0ABH9CN83H
175 mQqt4fB7UdHzuIRe/me2PGhIq5ZBzj6h3BpoPGzEP+x3l9YmK8t/1cN0pqI+dQwY
176 dgfGjackLu/2qH80MCF7IyQaseZUOJyKrCLtSD/Iixv/hzDEUPfOCjFDgTpzf3cw
177 ta8+oE4wHCo1iI1/4TlPkwmXx4qSXtmw4aQPz7IDQvECgYEA8KNThCO2gsC2I9PQ
178 DM/8Cw0O983WCDY+oi+7JPiNAJwv5DYBqEZB1QYdj06YD16XlC/HAZMsMku1na2T
179 N0driwenQQWzoev3g2S7gRDoS/FCJSI3jJ+kjgtaA7Qmzlgk1TxODN+G1H91HW7t
180 0l7VnL27IWyYo2qRRK3jzxqUiPUCgYEAx0oQs2reBQGMVZnApD1jeq7n4MvNLcPv
181 t8b/eU9iUv6Y4Mj0Suo/AU8lYZXm8ubbqAlwz2VSVunD2tOplHyMUrtCtObAfVDU
182 AhCndKaA9gApgfb3xw1IKbuQ1u4IF1FJl3VtumfQn//LiH1B3rXhcdyo3/vIttEk
183 48RakUKClU8CgYEAzV7W3COOlDDcQd935DdtKBFRAPRPAlspQUnzMi5eSHMD/ISL
184 DY5IiQHbIH83D4bvXq0X7qQoSBSNP7Dvv3HYuqMhf0DaegrlBuJllFVVq9qPVRnK
185 xt1Il2HgxOBvbhOT+9in1BzA+YJ99UzC85O0Qz06A+CmtHEy4aZ2kj5hHjECgYEA
186 mNS4+A8Fkss8Js1RieK2LniBxMgmYml3pfVLKGnzmng7H2+cwPLhPIzIuwytXywh
187 2bzbsYEfYx3EoEVgMEpPhoarQnYPukrJO4gwE2o5Te6T5mJSZGlQJQj9q4ZB2Dfz
188 et6INsK0oG8XVGXSpQvQh3RUYekCZQkBBFcpqWpbIEsCgYAnM3DQf3FJoSnXaMhr
189 VBIovic5l0xFkEHskAjFTevO86Fsz1C2aSeRKSqGFoOQ0tmJzBEs1R6KqnHInicD
190 TQrKhArgLXX4v3CddjfTRJkFWDbE/CkvKZNOrcf1nhaGCPspRJj2KUkj1Fhl9Cnc
191 dn/RsYEONbwQSjIfMPkvxF+8HQ==
192 -----END PRIVATE KEY-----
193 ]];
194 local sign = jwt.new_signer("PS256", private_key); 115 local sign = jwt.new_signer("PS256", private_key);
195 116
196 local token = sign({ 117 local token = sign({
197 sub = "1234567890"; 118 sub = "1234567890";
198 name = "John Doe"; 119 name = "John Doe";
199 admin = true; 120 admin = true;
200 iat = 1516239022; 121 iat = 1516239022;
201 }); 122 });
202 123
203 local public_key = [[ 124 local public_key = test_keys.rsa_public_pem;
204 -----BEGIN PUBLIC KEY-----
205 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu1SU1LfVLPHCozMxH2Mo
206 4lgOEePzNm0tRgeLezV6ffAt0gunVTLw7onLRnrq0/IzW7yWR7QkrmBL7jTKEn5u
207 +qKhbwKfBstIs+bMY2Zkp18gnTxKLxoS2tFczGkPLPgizskuemMghRniWaoLcyeh
208 kd3qqGElvW/VDL5AaWTg0nLVkjRo9z+40RQzuVaE8AkAFmxZzow3x+VJYKdjykkJ
209 0iT9wCS0DRTXu269V264Vf/3jvredZiKRkgwlL9xNAwxXFg0x/XFw005UWVRIkdg
210 cKWTjpBP2dPwVZ4WWC+9aGVd+Gyn1o0CLelf4rEjGoXbAAEgAqeGUxrcIlbjXfbc
211 mwIDAQAB
212 -----END PUBLIC KEY-----
213 ]];
214 local verify = jwt.new_verifier("PS256", public_key); 125 local verify = jwt.new_verifier("PS256", public_key);
215 126
216 local result = {verify(token)}; 127 local result = {verify(token)};
217 assert.same({ 128 assert.same({
218 true; -- success 129 true; -- success