Mercurial > prosody-hg
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 |
