pdk_jwt_lib/validator/
rsa_validator.rs1use super::signature_validator::SignatureValidation;
11use crate::{
12 error::jwt_error::JWTError,
13 model::{
14 claims::{CustomClaims, JWTClaims, TryFromTrustedJWTCompactClaims},
15 signing_algorithm::SigningKeyLength,
16 untrusted_token::untrusted_jwt_compact::UntrustedJWT,
17 },
18 parser::rsa_pk_parser::parse_rsa_pk,
19};
20use jwt_compact::alg::Rsa;
21use jwt_compact::AlgorithmExt;
22use rsa::errors::Error as RsaError;
23use rsa::RsaPublicKey;
24
25pub struct RsaSignatureValidator {
28 key_length: SigningKeyLength,
29 key: RsaPublicKey,
30}
31
32impl RsaSignatureValidator {
33 pub fn new(key_length: SigningKeyLength, key: String) -> Result<Self, JWTError> {
34 let key = parse_rsa_pk(key)?;
35 Ok(Self { key_length, key })
36 }
37}
38
39impl SignatureValidation for RsaSignatureValidator {
40 fn validate(&self, token: String) -> Result<JWTClaims, JWTError> {
41 UntrustedJWT::new(&token)
42 .and_then(|untrusted_jwt| {
43 as_rsa_algorithm(&self.key_length)
44 .validator::<CustomClaims>(&self.key)
45 .validate(&untrusted_jwt.into())
46 .map_err(JWTError::from)
47 })
48 .and_then(|claims| JWTClaims::try_from_trusted_jwt_compact_claims(claims, token))
49 }
50}
51
52pub fn as_rsa_algorithm(key_length: &SigningKeyLength) -> Rsa {
53 match key_length {
54 SigningKeyLength::Len256 => Rsa::rs256(),
55 SigningKeyLength::Len384 => Rsa::rs384(),
56 SigningKeyLength::Len512 => Rsa::rs512(),
57 }
58}
59
60impl From<rsa::pkcs1::Error> for crate::error::jwt_error::JWTError {
61 fn from(e: rsa::pkcs1::Error) -> Self {
62 JWTError::RsaPublicKeyParseFailed(format!("RSA Public key parsing error: {e}"))
63 }
64}
65
66impl From<RsaError> for crate::error::jwt_error::JWTError {
67 fn from(e: RsaError) -> Self {
68 JWTError::ValidationFailed(format!("Invalid token. JWT Policy validation error: {e}"))
69 }
70}
71
72#[cfg(test)]
73mod tests {
74 use crate::validator::rsa_validator::RsaSignatureValidator;
75
76 const RSA_PUBLIC_KEY_PEM_256: &str = "-----BEGIN PUBLIC KEY-----
77MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnFRZJoSbY3lJmruwlXQM
78wiOlr4EtBJHSj7IrCYqx9rFEW+JUwoe5iMZl33D6tUsr1GsG50R7JL2KvxHrj0u6
79A3A9beI41XdRfJatugaffroLuZCUYla097uVSQacUSBfBVEsT0TU9MrxBW0HGIXz
80dGwuA9GRncgk7kcfPgJLjwzcBBZATVaASO28Rrf6eQ12w0UNJL4XM+/yPyQatbvO
81D5KqX8ue2a0uO+7yE8x0A99UMIHYo1zedp+Qr+p0+/5VTWjEZT5I6JGUIMjSVqn0
82L0z0WMKJtSdG/CQpZyGnWBz6irOd5xJHAyH7mr02dOJVSXMJXvchCEMMlWghqlqQ
83XwIDAQAB
84-----END PUBLIC KEY-----";
85
86 const RSA_PUBLIC_KEY_PEM: &str = "-----BEGIN PUBLIC KEY-----
87MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8+dw6EKuZ9BBi3yuW2EPH1b26QQwG5IT7oe16kV/5bR10IqYXrMfOg9hgeR2hMm4Nx81iXaET2Piiluk+y4AWpppndludQpzl9ngRxZhWsuJP80AelbeJBYCZsncY6pHGsVjNeqGuXyUaZ9JTG9tFkH5sZeIGEMffkpBYlk4TQlKsc11tgG3ThVedJ4GrWZiR365UBr8U4Ddc5e/YrLGQXYTD+rXI50d8WIHiCVYGfs4XCyp+O2pWYfXM02akp95rC28GlOXyn3/58PcLat+uxKGW3VbpcrX/GHvB3mhF7Xg9RY54FdU47CszRNcf8/wPIs48MC7HAf60DH+YAt1tQIDAQAB
88-----END PUBLIC KEY-----";
89
90 fn rs256_validator() -> RsaSignatureValidator {
91 RsaSignatureValidator::new(
92 crate::model::signing_algorithm::SigningKeyLength::Len256,
93 String::from(RSA_PUBLIC_KEY_PEM_256),
94 )
95 .unwrap()
96 }
97
98 fn rs384_validator() -> RsaSignatureValidator {
99 RsaSignatureValidator::new(
100 crate::model::signing_algorithm::SigningKeyLength::Len384,
101 String::from(RSA_PUBLIC_KEY_PEM),
102 )
103 .unwrap()
104 }
105
106 fn rs512_validator() -> RsaSignatureValidator {
107 RsaSignatureValidator::new(
108 crate::model::signing_algorithm::SigningKeyLength::Len512,
109 String::from(RSA_PUBLIC_KEY_PEM),
110 )
111 .unwrap()
112 }
113
114 mod rsa_validator_256 {
115 use crate::error::jwt_error::JWTErrorEnumKind;
116 use crate::validator::rsa_validator::tests::rs256_validator;
117 use crate::validator::rsa_validator::SignatureValidation;
118 use crate::validator::signature_validator::tests::assert_error_kind;
119 use test_case::test_case;
120
121 extern crate test_case;
122
123 #[test]
124 fn validation_fails_when_token_not_sent() {
125 let token = "";
126
127 let validation = rs256_validator().validate(token.to_string());
128
129 assert_error_kind(&validation, JWTErrorEnumKind::TokenParseFailed);
130 }
131
132 #[test]
133 fn unparseable_token_is_rejected() {
134 let token = "WhatAmI?AnInvalidToken!";
135
136 let validation = rs256_validator().validate(token.to_string());
137
138 assert_error_kind(&validation, JWTErrorEnumKind::TokenParseFailed);
139 }
140
141 #[test]
142 fn validation_fails_on_invalid_signature() {
143 let token = "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0.NHVaYe26MbtOYhSKkoKYdFVomg4i8ZJd8_-RU8VNbftc4TSMb4bXP3l3YlNWACwyXPGffz5aXHc6lty1Y2t4SWRqGteragsVdZufDn5BlnJl9pdR_kdVFUsra2rWKEofkZeIC4yWytE58sMIihvo9H1ScmmVwBcQP6XETqYd0aSHp1gOa9RdUPDvoXQ5oqygTqVtxaDr6wUFKrKItgBMzWIdNZ6y7O9E0DhEPTbE9rfBo6KTFsHAZnMg4k68CDp2woYIaXbmYTWcvbzIuHO7_37GT79XdIwkm95QJ7hYC9RiwrV7mesbY4PAahERJawntho0my942XheVLmGwLMBkQ";
144
145 let validation = rs256_validator().validate(token.to_string());
146
147 assert_error_kind(&validation, JWTErrorEnumKind::ValidationFailed);
148 }
149
150 #[test]
151 fn validation_fails_on_missing_signature() {
152 let token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.e30.";
153
154 let validation = rs256_validator().validate(token.to_string());
155
156 assert_error_kind(&validation, JWTErrorEnumKind::ValidationFailed);
157 }
158
159 #[test]
160 fn verify_valid_token_is_correctly_parsed() {
161 let token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJleHAiOjMyODAzOTQwOTh9.Cd806gYUdJ18VPp29PLl1Ky9Cye-dG86bLdsDtYXWXrTTgQhztpRdAA4R1cqVWVn8iHlRxkWdEyqNZ03uMuJ6Cyg_dVARuRqfsRU8WUXKirW5_3pWtqT2V-iC8J0SwEPEtG-nwKafx-akngCh_yeSGTf05bsaQ8loed-ktRbAhrke18VLzuGA2E2mbdo6ZhRmQ47Ei_Clbz5ZGJ4MIBEpeQh6XkgXRwqUABGM2l3Ivw85FHSL1GV9XSNRC4fvXvO2wSN6ohXUM2Z5MX8RY1sRt1bUOU47IpHug-gV1uTC_diEJ_oizWjfRxVSKT-AId0U1-im2Jmrkc4XIGb1AuWXA";
162 let validation = rs256_validator().validate(token.to_string());
163
164 let jwt_claims = validation.unwrap();
165 assert_eq!(jwt_claims.get_header("alg").unwrap(), "RS256");
166 assert_eq!(
167 jwt_claims.expiration().unwrap().to_string(),
168 "2073-12-13 12:34:58 UTC"
169 );
170 }
171
172 #[test_case("eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.e30.AC3VWMTRNDUh2S2MbT3SSzVg4P7BykOCWYSlMRYgh7xUGo4lisfjaTKpqydtoouB-mJaWRtq09rnP1BG1IMLXxPjYNPsVbTvcpktifS_qAnzjLtNpki_a7H1Uxey7mPn6MQf0bzD4inYb_zz7OgPb6U57l8B7kHKhA7vS6-a56zOxDnrZm2pwtNhkoXWBfQ6LiRWjfPOQUED3ep3YZ-BQR5sT3KUNV_nrgi6Qhc1wPOoTbEaLbjCQjnML6jxpJxpXKL2zL8ARHy-avxqtwCiWW3LQ-DQhneEVYzZ79q-8FKD8GcII9g3MCX5MZVmpYS3Z3WPP1Xzb4IVtUUYK6dogg"; "verifyValidToken 256")]
173 #[test_case("eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJleHAiOjgyMDA5ODUyNH0.aioNoIEcHkVcOMErDQjsYEs5BPuXICLkgmU_ABOVIGXJ6sOBWXB1Nx0N_xCC-rytIr-Ldw5sHlm4ThJII00HEg_S2ncsRAvdiRtPsdrfnaFFjRb5J0Azy3IE2Q2zAnEDLli8-Og9e4UMXwweOGvspS399zpgImM1QE394_Q9hi14Ly-ATROdYQCZ1Arl87mHuxqlVyoebmw1mFjPHCaD-gcIuwduMqIKMGjZCwMs2mQFc4ELWq0cp4uT7b9Wwxap20iQnKiTLlhigQT4WIV124Bx0wyCN-QszkAJfUKPb_0I9vZnJ2MxQ8JzBaPPFkwwB9OI42xWCi5ujuQZ2PirIA"; "exceptionNotThrownOnExpiredTokenWithNoClaimValidation 256")]
174 #[test_case("eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.e30.AC3VWMTRNDUh2S2MbT3SSzVg4P7BykOCWYSlMRYgh7xUGo4lisfjaTKpqydtoouB-mJaWRtq09rnP1BG1IMLXxPjYNPsVbTvcpktifS_qAnzjLtNpki_a7H1Uxey7mPn6MQf0bzD4inYb_zz7OgPb6U57l8B7kHKhA7vS6-a56zOxDnrZm2pwtNhkoXWBfQ6LiRWjfPOQUED3ep3YZ-BQR5sT3KUNV_nrgi6Qhc1wPOoTbEaLbjCQjnML6jxpJxpXKL2zL8ARHy-avxqtwCiWW3LQ-DQhneEVYzZ79q-8FKD8GcII9g3MCX5MZVmpYS3Z3WPP1Xzb4IVtUUYK6dogg"; "exceptionNotThrownOnMissingClaim 256")]
175 #[test_case("eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJleHAiOjMyODAzOTQwOTh9.Cd806gYUdJ18VPp29PLl1Ky9Cye-dG86bLdsDtYXWXrTTgQhztpRdAA4R1cqVWVn8iHlRxkWdEyqNZ03uMuJ6Cyg_dVARuRqfsRU8WUXKirW5_3pWtqT2V-iC8J0SwEPEtG-nwKafx-akngCh_yeSGTf05bsaQ8loed-ktRbAhrke18VLzuGA2E2mbdo6ZhRmQ47Ei_Clbz5ZGJ4MIBEpeQh6XkgXRwqUABGM2l3Ivw85FHSL1GV9XSNRC4fvXvO2wSN6ohXUM2Z5MX8RY1sRt1bUOU47IpHug-gV1uTC_diEJ_oizWjfRxVSKT-AId0U1-im2Jmrkc4XIGb1AuWXA"; "verifyNotExpiredToken 256")]
176 #[test_case("eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJleHAiOjgyMDA5ODUyNH0.aioNoIEcHkVcOMErDQjsYEs5BPuXICLkgmU_ABOVIGXJ6sOBWXB1Nx0N_xCC-rytIr-Ldw5sHlm4ThJII00HEg_S2ncsRAvdiRtPsdrfnaFFjRb5J0Azy3IE2Q2zAnEDLli8-Og9e4UMXwweOGvspS399zpgImM1QE394_Q9hi14Ly-ATROdYQCZ1Arl87mHuxqlVyoebmw1mFjPHCaD-gcIuwduMqIKMGjZCwMs2mQFc4ELWq0cp4uT7b9Wwxap20iQnKiTLlhigQT4WIV124Bx0wyCN-QszkAJfUKPb_0I9vZnJ2MxQ8JzBaPPFkwwB9OI42xWCi5ujuQZ2PirIA"; "exceptionNotThrownOnExpiredToken 256")]
177 #[test_case("eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjgyMDA5ODUyNH0.WoSKVr5spQPZU7D-4BjY_mJZlBJVg3GNhZt1qUXqpuEap4j-q4OjieEbKdccmsdFnqicP-GRdP8f0WSyfH2zkKWfxh45MJlg1tu8qXQc7iEjKkqgpL9qTmbhwM17C3KO6uh4sEpXH00KO7jbQcztYejwi4XkxWcrAL4Pcq8kg4j-QF68-kSd4ynqWdIFxToAU2CtYJiSiMrEagqOirah6Lc1Jt4Y6Cq7ZqB0K8RglrrzUTLm7xhUUXUXtX3W_qvcsx3FJKcLHrRGGkk4AHCDKcemv7Q1jmhrrCBAjTLRIMAYIjDBRtFhWICfrLIT1sJkyIEActi414ivM_FChkLWdQ"; "verifyTokenWithNbf 256")]
178 #[test_case("eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjMyODAzOTQwOTh9.gIKqxXHz8trNZxHMVPmgodJzvKvzQnsRrqp9eIJ8ynVfWWU1M2d6EdALlRZMRnIkQqzjk2Rz-9JJWbC7GeqGu9TK16b2JSYxE1Ugc33k9CTGbnZN6xdqnlnjZVWMT_dJjY9yrzedcrPvbiQVhOJnsZp_el_eY5Riq_5vxaPs6xQ7Oy5Fs6M9h5HqTfuz4AemSOXzMzbjL__LI9_vEklng7L2C3TXXlS8uPhzDd_Dw5xT2YKX0hbPCcVHWOrkG0NO5YOoe25p0TpC8zYM1ss565pNXvvcA3wyjUBJbtlY5cLQ_33_Q9G35UHDV-d5zcVngs3rhjobmPldvf7NmRRHXg"; "exceptionNotThrownNotYetActiveToken 256")]
179 #[test_case("eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJhdWQiOiJmb28ifQ.hzHOzr2qZces6LP78PJTX2rm0c0Lpbd9qj6K2fbIQvG4tzVffagrcjXbX_JvUBRS7TYI4A9WwSKb3m28E0GY__EBhWPPGacjdP037zX9qybyLx2pKN4Pbd3J1xgsNH7jrgommqzrx4VXs1jcYTAk-qmZDxrXCDhCspdQ7OJOmB7eCkD0E9i03zAMFyuSs0eGGJkbbVMBXd2f2Pk_WehzNftctCseEgQ-3mFk1T1j2lufDtMkurLOIQcQjuMxbnrp3DT4ancqNcMBXWiPifyU5LOBjame8VTYHZdaloi5693luAhTQTAoDeLqR7AQJomVQ2iGzA-dJElBlt4VYMzy-g"; "verifyTokenWithAud 256")]
180 #[test_case("eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJhdWQiOlsiZXRjIiwiZm9vIiwiYmxhaCJdfQ.BPAHq9NrYKHw7lgg7noqyR4Do01fPctskKxpsoxqPholu2vp1bK-zVG8m6IntOLZ0M9GyDtbsqGG53AceQ5CWkn1k9G59UpeK_U7GBYUdSaB7GGWWIwmpi37ZCb1Q3hiMNSRH9EimlWDokepwVzdX1la5hgZRwHWuwRJd-Ks3a-KIUXy60JiwrtuDUEAOuQgU2gLZNec7hSSV4Rv7B3rYbXNbgp_nk6ypnCxq8s6poczzE-0emHRIQjTvV6KE71fgNwadZGCnZfGt6qsjZjq7ePkyedMMQbjOedbzQYs9tBjfXSm1wXi7oDqUbbUIOuX7XHU-SEdm9Wy636kvuQhVw"; "verifyTokenWithAudArray 256")]
181 #[test_case("eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJhdWQiOlsiZXRjIiwiZm9vIGJhciIsImJsYWgiXX0.gusn77DBrj56nKpdewp_xvJS4ezOWqpnno5LnsjKAROl4-oJdS4fWV8xQ84e335dVdHXR0cwYiBv78Gl03ntTXXa1zt85umklKPH7abzMSeIIjx4-lDgJOcejuYSWPAJoE1Aqgf1uuF4Gi4HoVCiTEPsh7yYF5NoWRedxiBQ-bYHm0nOdFP9QSh1p0mGb9JpFUvV8ZNP_nK61UM9wRR3YGY89W7t0qs0F02L-gcD2-vZVusneWX1xCBZPPuzyxSbHE8v9Q0_M53SS41-CZZA-oiJVZwN0_ZH4MxigqZMNtLSsLbJmZBtfBrhEc8tFnYNefrIbwmI3Ai-yIMpctP1gA"; "verifyTokenWithAudiencesWithSpaces 256")]
182 #[test_case("eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJhdWQiOlsiZXRjIiwiRm9vIiwiYmxhaCJdfQ.b-ZXZQRxonJbZIH-fiMu67L2M5HlpiCN-7wQ44tQgOyoEb3K3ULi5vsMuuflnpHrHefahuCSn_tFMbLviaQ4E_nbZ3FAiXULMTgfP4Ryf-9F592OVAwXj4YYfVKXowIs45_bOmMTt733uTzXDXRj478wnXHzOCzrUYk1F7Wl91BsZG4uY8TKhgbvXrTB1L4PrMJ_bUUi0KX4Y1WC8cTyodOqlbvp-w8T4JEsZxLshJHZhPp5Jnttv4z4PphkT6DeYycH9VA_QkCuOkBJ4nbgzyzDa3WIYOST_NzzWLWbpJNfXgxjLtdxXZuhOctuCwi5Qd4twBJq-g4m4UKV2lqB4Q"; "verifyTokenWithAudiencesCaseSensitive 256")]
183 #[test_case("eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJhdWQiOlsiZXRjIiwiYmxhaCJdfQ.IkV3j7no7odNebVE-bP06wAlsur4y-ZfUqBsk5bBh1ewbm66tIgGHfxfvJoHZvTdil8msrF0dZ5uN6CTa8H_wBIEPlRx1BBaIF6MPXVUyd97lrKa1lE3cV2QFkMkYi1981XpJ5IwzbNshu14ZmoAT5s8R2lrqteFQE3LMG3TExTf_0zQBlsfoTwv4XPX7Dud_SGqqLps15gdjFOVcG6zbGI-DZrrAT6xlDMqkiulvc3DR73Zin9T7nAPlZdKqLSsK1nN_Lw027zcOroLe2vECa0jOL3Y6UNnCyhqY46SpboRB133YhQ1nG80NzffZPdF65DBP2-dfG0aEBgCeEl1Dg"; "exceptionNotThrownWhenInvalidAudToken 256")]
184 #[test_case("eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJhdWQiOiJmb28iLCJuYmYiOjgyMDA5ODUyNCwibmFtZSI6IkpvaG4gRG9lIiwic2NvcGVzIjpbInJlYWQiLCJ3cml0ZSJdLCJleHAiOjMyODAzOTQwOTh9.Dv3e40myu1r-gaLkrUb-CRxnxAeqgvUAp26K9Isqv1mKVk71iCFPtWC-zvSDEoZKrlXXN54fFS8jH8mO9xReKtOXxHH-iFTFQB127cGE8hv801caeuFfnsyt9s1JpoEy9POJAdmGna7kewHzK0v_0u5oNEBGaN_SrqWYUrmrZEbMZd8nI4Y3XGlvZL-GUwD6y_wlu-l9zFQ5Ph16r_gDcxy2IaAB9gyLZMIl0NewzUwcMzuShfTdyhnwYCeFtGxALaWgIAJpqfB9KzZueG10J7CPeukfw06DcvqK_DjQFDEDsljdEOrQ_pALaw9mXlgGUrJVtzsAP00JGHayV4hpEA"; "checkAllValidations 256")]
185 fn verify_valid_token_256(token: &str) {
186 let validation = rs256_validator().validate(token.to_string());
187
188 assert!(validation.is_ok());
189 }
190 }
191
192 mod rsa_validator_384 {
193 use crate::error::jwt_error::JWTErrorEnumKind;
194 use crate::validator::rsa_validator::tests::rs384_validator;
195 use crate::validator::rsa_validator::SignatureValidation;
196 use crate::validator::signature_validator::tests::assert_error_kind;
197 use test_case::test_case;
198
199 extern crate test_case;
200
201 #[test]
202 fn validation_fails_when_token_not_sent() {
203 let token = "";
204
205 let validation = rs384_validator().validate(token.to_string());
206
207 assert_error_kind(&validation, JWTErrorEnumKind::TokenParseFailed);
208 }
209
210 #[test]
211 fn unparseable_token_is_rejected() {
212 let token = "WhatAmI?AnInvalidToken!";
213
214 let validation = rs384_validator().validate(token.to_string());
215
216 assert_error_kind(&validation, JWTErrorEnumKind::TokenParseFailed);
217 }
218
219 #[test]
220 fn validation_fails_on_invalid_signature() {
221 let token = "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0.NHVaYe26MbtOYhSKkoKYdFVomg4i8ZJd8_-RU8VNbftc4TSMb4bXP3l3YlNWACwyXPGffz5aXHc6lty1Y2t4SWRqGteragsVdZufDn5BlnJl9pdR_kdVFUsra2rWKEofkZeIC4yWytE58sMIihvo9H1ScmmVwBcQP6XETqYd0aSHp1gOa9RdUPDvoXQ5oqygTqVtxaDr6wUFKrKItgBMzWIdNZ6y7O9E0DhEPTbE9rfBo6KTFsHAZnMg4k68CDp2woYIaXbmYTWcvbzIuHO7_37GT79XdIwkm95QJ7hYC9RiwrV7mesbY4PAahERJawntho0my942XheVLmGwLMBkQ";
222
223 let validation = rs384_validator().validate(token.to_string());
224
225 assert_error_kind(&validation, JWTErrorEnumKind::ValidationFailed);
226 }
227
228 #[test]
229 fn validation_fails_on_missing_signature() {
230 let token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.e30.";
231
232 let validation = rs384_validator().validate(token.to_string());
233
234 assert_error_kind(&validation, JWTErrorEnumKind::ValidationFailed);
235 }
236
237 #[test_case("eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzM4NCJ9.e30.gaKUA7fJzSjojHhkG1_NlMd7PGs4c8DQsvQAd06RpE1rbUo1w_z1k3WydrZBUqf7NVfmsdGrGG1T3V32sU58dJPzim7-xKk4zyBAj22qkkeTrnu64_TREbFE7agq2VCcjbyF5WWQXgzClbx3_Kcnko8m1UcBL83oC51gLxZzjYykeph3N7DGzrJQ6w0xnxxLslVUUwBJUZGDLzk9muBSp5HOrdseGFsgeK-lNmTY12YRigH7Y6TR9c0Vg6Dpp6r72klEuHdZFv9dqvBSsEzINz4Vffn4g_SPCCG-gyYA7z1kiM_HV4MgmsfO63cTnMeZocGIhd5E1NtRnqmBe9aQEw"; "verifyValidToken 384")]
238 #[test_case("eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzM4NCJ9.eyJleHAiOjgyMDA5ODUyNH0.ZCO2PemCFUI6NGzOz8Rlo_eQ8gKD_9iCV5FCjMjryB1qHpBvMnBAAUkfv8L8lLolGCcbc2sgMVKDHRDdbbvj67Y5ulauiaWIq7T7EoOVcmb4-T2kibcq7w7OYTIOcBAbV43n1tR67Xt6I8bHvStcqxCW3m49NbvbYyLmjCiDhsYr5asT4NawIz9hWfJhKBfUUaMmDgrg4cbQ1yYIOQt_XdYypvp_wStGst8I25_OryjGQcAnEfZLxIt0lx-Ahnw1UofJQMrR2pFrXS4XignLWShKUae5i6AqmcZVeYz6uPV-XRGxS5qlMbH0QnKpTStwsqdZN4SW_Ojr1to907dlpw"; "exceptionNotThrownOnExpiredTokenWithNoClaimValidation 384")]
239 #[test_case("eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzM4NCJ9.e30.gaKUA7fJzSjojHhkG1_NlMd7PGs4c8DQsvQAd06RpE1rbUo1w_z1k3WydrZBUqf7NVfmsdGrGG1T3V32sU58dJPzim7-xKk4zyBAj22qkkeTrnu64_TREbFE7agq2VCcjbyF5WWQXgzClbx3_Kcnko8m1UcBL83oC51gLxZzjYykeph3N7DGzrJQ6w0xnxxLslVUUwBJUZGDLzk9muBSp5HOrdseGFsgeK-lNmTY12YRigH7Y6TR9c0Vg6Dpp6r72klEuHdZFv9dqvBSsEzINz4Vffn4g_SPCCG-gyYA7z1kiM_HV4MgmsfO63cTnMeZocGIhd5E1NtRnqmBe9aQEw"; "exceptionNotThrownOnMissingClaim 384")]
240 #[test_case("eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzM4NCJ9.eyJleHAiOjMyODAzOTQwOTh9.13CsOGbqGad8oS2j1ysra2VJ6Uvi2EEwEQIfOB-zPnou5aW5lO4LIGhNf2nDzvk5_U7um8tdRvNkZfu_pgkzAFDLI-aDh1yoCnPZTHY9Ha7GImXaq45WLurOlX8MUy5Y_gGS3cU8BpyRJAJ9j2zod1ba9hfSMhGxCg60ReG5_ziQnmYcbjxOZx-pXYr0EfusHUJJLL91ZKCvqMbe_D57v35aQIIYWog-YBltA6puD5jRBLDzaXLhRYTmidQDZ_l-7Jyo5I6V95i4buvnh2bUCS44TfJFMFQfzsQO1ULtTRhBt9z2OI9bwkEUdpLliUNVyV8oPquULPFqfJHUd7430A"; "verifyNotExpiredToken 384")]
241 #[test_case("eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzM4NCJ9.eyJleHAiOjgyMDA5ODUyNH0.ZCO2PemCFUI6NGzOz8Rlo_eQ8gKD_9iCV5FCjMjryB1qHpBvMnBAAUkfv8L8lLolGCcbc2sgMVKDHRDdbbvj67Y5ulauiaWIq7T7EoOVcmb4-T2kibcq7w7OYTIOcBAbV43n1tR67Xt6I8bHvStcqxCW3m49NbvbYyLmjCiDhsYr5asT4NawIz9hWfJhKBfUUaMmDgrg4cbQ1yYIOQt_XdYypvp_wStGst8I25_OryjGQcAnEfZLxIt0lx-Ahnw1UofJQMrR2pFrXS4XignLWShKUae5i6AqmcZVeYz6uPV-XRGxS5qlMbH0QnKpTStwsqdZN4SW_Ojr1to907dlpw"; "exceptionNotThrownOnExpiredToken 384")]
242 #[test_case("eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzM4NCJ9.eyJuYmYiOjgyMDA5ODUyNH0.kiB0Tum9dXLGM77i9GKQeURSXvabbkwnLh_HN_b-k4JJxrxSfNUc-Xc6rtLFBA1DGmsVFA7kJbaEAC24vbQ8JXzTmvCfR1KdJfPXiVI2nzpPnPbDmCw5SuOM3oWX1lmugb53YvXPIgqla728xbvzS9cWPzmYeE-eWwUyIhL-i--AtlizAPt6nu9wYp2FT_Nkug63pH0xFzeIbDEfj9UnokrKM3mkCeFmgk11mTeA4XMouLKwzIopfFoh4KDNf55jODoaWSC4P893YBeSFD8_1GeHuGc79S4lXgQToSaTdtOSK-yYwJavYT1ajqtLeLub5eR4_utf7gZf0FKa3pXSGw"; "verifyTokenWithNbf 384")]
243 #[test_case("eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzM4NCJ9.eyJuYmYiOjMyODAzOTQwOTh9.58E3cT7S18G4CRh7ilTwDbMhDG9k9ET41SGnMOZ7YTNKBIk0JOU-ZIC8cIgM5jnjEHiC2vnGjiMlOP-inp1i5US0pF_MQqzwR0nitsprgEPSfncC_r_vNiOEVcZVHp00uFg4EmF9PTi8rGEiZO7pcw3BI8m-yz2_ScYvA5McXpP8eBPfKYVVDR5WUi0QLnGDzzhsxwjj5YE9l4w1OBuRF69m-WfiLUQhcxLl55-2MI8zZvwqo_pxW7mlFg4AHFLw2C2q5aBwr3LkME_LTN9oD5VcLC9BpqUzbKhf291IEI_0sEkim1CQVw7VLeb4ZVXidGo5RZE_vjJ4Xf9atYSmOQ"; "exceptionNotThrownNotYetActiveToken 384")]
244 #[test_case("eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzM4NCJ9.eyJhdWQiOiJmb28ifQ.IN-S5czRL7s723njzLMLnJnJYO_kV3myZmNcsukcAExisirkLiJWRvBedKBRVUigs6uo5yfMeIWiBjg0RopQzsBi-kZ24o29Rr5O8o63G8bWfcgHZr0u4aNXy-z8g9ZEW7SRydnnlWCOSlkXxtyyIVzgUs7i8aWzIzVcNZ0Cs2SgbmSF0tBfFfgde_HctTk7DH3URrk0kBDAIO_4he5c3OmPx73empEM1h-SKXl0V2HIonSnjzTWe5rM_u2YXq8lMQn8P5vRUPulAjQVaTebwQvFKg7p7hv0JT0okUzFMtyyuYBR9DE3srEIrb-R1way77By8SmVqB2H_ritZV4nNA"; "verifyTokenWithAud 384")]
245 #[test_case("eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzM4NCJ9.eyJhdWQiOlsiZXRjIiwiZm9vIiwiYmxhaCJdfQ.J0uzNeQ3aXMs8nX1f_sU5WvB5qmKAiveyJDuntVXRX3QXH0zSqUmMzclxj5yesAEGcS7GF5Ua_-f1HapdzQ8HZcb9acoUXU-LoxMNTQmci3j7H2IHiZUahGMn4R9kY1pY73wdwKdUSsw7jH44qb-xd8TVxY73NeAkp7DqlqUnTswNOy0DkKmUDLMUZ4bsgiCEgOiv90Mx3cxk3K2h3ztNhWfG5J3QqZbRQK9jYjbGD7YQ1aRqhMYdWBNoZb5m87VeqrQv9hvAirJ2_X70RA_0mO_l1B2Tjs3Aip91fhsjTVIaBl_1wblEvt5vOW5NU7fefRz9T42kPyJXt2vYgu8_g"; "verifyTokenWithAudArray 384")]
246 #[test_case("eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzM4NCJ9.eyJhdWQiOlsiZXRjIiwiZm9vIGJhciIsImJsYWgiXX0.XP8SXvyu98gJpvM0SLKqLWRrjFEqlWTVTik_xBGoSEaN3VHiE--FufOzWLhLYBKSnELf0UybK1rCt5638PudeVMpNIKVXP4w_c7L-G99N0Ee2LUnLv7Qab0pHwd_GTFjj0dJ9GtdCU2COriMOwL1QoWueqm25XdXEBzhmVqvhvDcd4GVMAaWsboUhp7gArkJwA9FKyBJnk4cVi7su9SlxyDe05vuoOcEPcB0hIa_PYr0USCRcAZVIv0qGQI_keDMgQNR51esUbZxLLq6x_6qh-L8yajyjiSwu95gAROUizQjQO39L7imBjQWu6XKgbirrYaykKU21hFU3-4ezCQcng"; "verifyTokenWithAudiencesWithSpaces 384")]
247 #[test_case("eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzM4NCJ9.eyJhdWQiOlsiZXRjIiwiRm9vIiwiYmxhaCJdfQ.1kO5Ck-gcdWH2eaHYTU4jXVW3szSkNzTMHwId4Cyw2eKOTtmC77lxU_UEcVSa4PTlGi_sOMAdaDT_XD80q27zNTl3m8-i3Wzap07NZXvFK3ebIxhvWVppPrpYlQl0FHhEAJ1C7n_kUglqiyKphJoRKzB2hC4y0_72uZl1Ww9CzH_zgNqx-AmubIz_dYJMamLK3w9U2nQFQG5FpTlqnbYekeIvq_cGFsNeQLbaFXn4fGZPwLBlU8lA2aIvKfsGmU9PyX_o7fEyoiBPDzxO0epKuaKhPhR2t4PzA7Fg5tGPTL_mdP0dAaZWFBx6czm8m2CQll3NuVXoW9jpk-mlt1pUg"; "verifyTokenWithAudiencesCaseSensitive 384")]
248 #[test_case("eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzM4NCJ9.eyJhdWQiOlsiZXRjIiwiYmxhaCJdfQ.ZnnAslQp5wnBWLJ5c0lbvKm195J4-kN1R_WW80FvYXDDxzMBdzEMRJ8YzN2moUFMg3Qj3HVytJmufAh-GQB-wAv6zgyziV-rLXg6k3-vNlq7zxYv_7mfcYI_YLFXPckV1JZC3Sklfnk_YKiCJAaft8H3YD347aXaZSuOewO3k4QhmQOnNX124FWV7TeO8Cw9xZ7-alfToczyQf0bhx7juoCQAvjpBkOFOx5geaQ6if6XDlHB2WgPoWsAZcmg3Fg3FMcwevCeRLJWRkZD5WtyW5aKqxf-QRUlEfXLuMsS3IqltQgPbwmkndxOgtyZg3502uIYA0Zh1KptRphWvj6Y1w"; "exceptionNotThrownWhenInvalidAudToken 384")]
249 #[test_case("eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzM4NCJ9.eyJhdWQiOiJmb28iLCJuYmYiOjgyMDA5ODUyNCwibmFtZSI6IkpvaG4gRG9lIiwic2NvcGVzIjpbInJlYWQiLCJ3cml0ZSJdLCJleHAiOjMyODAzOTQwOTh9.WXgYhU44AD-daQdhI3lBYTS37jgfxXh0OD83wJFVgTKevMgeC4kbV0X1m73hluesb2zzdyapTKc1Zr70aDn-K46gi7a_nRexOpso143X-XeSasHnhUdZ4vcDN9q1L5VKkzPLVrNtS5yOinrnNcWAwvRg69VRuxpcepm3aerYOL4Zc5nhV8Sb766upaIv7brW-ENPO5lojpjxEJXq2uoimSA5SgJs2jwJThg2NjM0ag9uNIIha396HxRwPhd_yL1k6FkiAr-0kkw9O_IXIT48bTGLCu3wft5yb8ZLiCJn1y5ttZ2YsK8N2L_YjIsCZUjy5iq3OnKckVhljEoP347lcQ"; "checkAllValidations 384")]
250 fn verify_valid_token_384(token: &str) {
251 let validation = rs384_validator().validate(token.to_string());
252
253 assert!(validation.is_ok());
254 }
255 }
256
257 mod rsa_validator_512 {
258 use crate::error::jwt_error::JWTErrorEnumKind;
259 use crate::validator::rsa_validator::tests::rs512_validator;
260 use crate::validator::rsa_validator::SignatureValidation;
261 use crate::validator::signature_validator::tests::assert_error_kind;
262 use test_case::test_case;
263
264 extern crate test_case;
265
266 #[test]
267 fn validation_fails_when_token_not_sent() {
268 let token = "";
269
270 let validation = rs512_validator().validate(token.to_string());
271
272 assert_error_kind(&validation, JWTErrorEnumKind::TokenParseFailed);
273 }
274
275 #[test]
276 fn unparseable_token_is_rejected() {
277 let token = "WhatAmI?AnInvalidToken!";
278
279 let validation = rs512_validator().validate(token.to_string());
280
281 assert_error_kind(&validation, JWTErrorEnumKind::TokenParseFailed);
282 }
283
284 #[test]
285 fn validation_fails_on_invalid_signature() {
286 let token = "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0.NHVaYe26MbtOYhSKkoKYdFVomg4i8ZJd8_-RU8VNbftc4TSMb4bXP3l3YlNWACwyXPGffz5aXHc6lty1Y2t4SWRqGteragsVdZufDn5BlnJl9pdR_kdVFUsra2rWKEofkZeIC4yWytE58sMIihvo9H1ScmmVwBcQP6XETqYd0aSHp1gOa9RdUPDvoXQ5oqygTqVtxaDr6wUFKrKItgBMzWIdNZ6y7O9E0DhEPTbE9rfBo6KTFsHAZnMg4k68CDp2woYIaXbmYTWcvbzIuHO7_37GT79XdIwkm95QJ7hYC9RiwrV7mesbY4PAahERJawntho0my942XheVLmGwLMBkQ";
287
288 let validation = rs512_validator().validate(token.to_string());
289
290 assert_error_kind(&validation, JWTErrorEnumKind::ValidationFailed);
291 }
292
293 #[test]
294 fn validation_fails_on_missing_signature() {
295 let token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.e30.";
296
297 let validation = rs512_validator().validate(token.to_string());
298
299 assert_error_kind(&validation, JWTErrorEnumKind::ValidationFailed);
300 }
301
302 #[test_case("eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzUxMiJ9.e30.sIIsQVsaeVuFdR8oD477Yj7FO-yyyBXmW-ZqbJXt8gmLTF4rhdiPU93BusD2PyBTIBK1b18jdk827gQAYr04-lMOrQR-uvv31HvsENQGr1N5Zatlnj6yoTRU8j5hgIsrxPK7AbfimgT_r2zT6xbNcGc4p1-zpuEnVhxHGGQpk6_5HYD_UJsfVP2vSmnxuIzwxe0Nnu9XGXuwPI0yVcoqyJUG1AO9Atb4PGvycdpLnKHmF2DcLa55fbvShJ6GKQ4XbQve_Dm_m9Qfp7vzVZp1jlEZRn2js4um_oriwzLmx89P5b0ti-npc-4WroC12HbGLCkYl7K1RIcHR-em2KGUiw"; "verifyValidToken 512")]
303 #[test_case("eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzUxMiJ9.eyJleHAiOjgyMDA5ODUyNH0.pk-M00nbxjujJrtHqfkJdckw4UZ13uvEehk-m2mga-i8k807GkY7cVIXnP42z17-0yk-ypy76xdQpuhZumKk0gxW4hevdBzeuo3ijfJ_2Ka-Kr1TowyCWfy3TMDZ8mtykXixj953XSn-AdMsB4p6vJ9iCR4jniwacQWVbspnWYLVEs0c1xjHE2jhSIOEZ6cHYhLGlGd06yPsa1NbwKo2Pd-QZX_N90TvQx4mVsKHcHs8XjugAEoV5kd-jLJpeCPRK_udsrGUTjLJqZtkyqirOQSWBNkbTmfWl6r7MkD4AOt7WvMHMm0jOGBZzSycI5fBdjtndymmwAPull-csw3KKw"; "exceptionNotThrownOnExpiredTokenWithNoClaimValidation 512")]
304 #[test_case("eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzUxMiJ9.e30.sIIsQVsaeVuFdR8oD477Yj7FO-yyyBXmW-ZqbJXt8gmLTF4rhdiPU93BusD2PyBTIBK1b18jdk827gQAYr04-lMOrQR-uvv31HvsENQGr1N5Zatlnj6yoTRU8j5hgIsrxPK7AbfimgT_r2zT6xbNcGc4p1-zpuEnVhxHGGQpk6_5HYD_UJsfVP2vSmnxuIzwxe0Nnu9XGXuwPI0yVcoqyJUG1AO9Atb4PGvycdpLnKHmF2DcLa55fbvShJ6GKQ4XbQve_Dm_m9Qfp7vzVZp1jlEZRn2js4um_oriwzLmx89P5b0ti-npc-4WroC12HbGLCkYl7K1RIcHR-em2KGUiw"; "exceptionNotThrownOnMissingClaim 512")]
305 #[test_case("eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzUxMiJ9.eyJleHAiOjMyODAzOTQwOTh9.YnDBuFTzTkk0MWJghFO6_8MVQBl67MEZHxUjH1IioYDnxh5CWSX03YbZ5AYyvumtivj3qyYH392trMocKApfBIrYzHM69ETyyJ8yyhJrtt9whc6h56FGHtQy8l3HjjTMUHaVlTSySg2XRSrjeXDd_YwG2X-LepQRv_O6DrwcwfmHI_HDD3RY1kv8Jw0804QwFkgbbuVdYekGM4gMBRoTpXpf6HPB99avCD4Hz9SwHkC0FW-eVuosTqZK2fcQ0wi6OI5Ezi0_7dxt9wy2Y-_xvtMxDYA-x76Mtb0WBJn3vwMIobagdvRovIWYsYx2teO7a3QvO9D6I9i2JiJIGc9_eg"; "verifyNotExpiredToken 512")]
306 #[test_case("eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzUxMiJ9.eyJleHAiOjgyMDA5ODUyNH0.pk-M00nbxjujJrtHqfkJdckw4UZ13uvEehk-m2mga-i8k807GkY7cVIXnP42z17-0yk-ypy76xdQpuhZumKk0gxW4hevdBzeuo3ijfJ_2Ka-Kr1TowyCWfy3TMDZ8mtykXixj953XSn-AdMsB4p6vJ9iCR4jniwacQWVbspnWYLVEs0c1xjHE2jhSIOEZ6cHYhLGlGd06yPsa1NbwKo2Pd-QZX_N90TvQx4mVsKHcHs8XjugAEoV5kd-jLJpeCPRK_udsrGUTjLJqZtkyqirOQSWBNkbTmfWl6r7MkD4AOt7WvMHMm0jOGBZzSycI5fBdjtndymmwAPull-csw3KKw"; "exceptionNotThrownOnExpiredToken 512")]
307 #[test_case("eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzUxMiJ9.eyJuYmYiOjgyMDA5ODUyNH0.mDc4U7sTlr9zwG_I3NbAg3NiYKEsiTeZtSoOiU6IlorZZlCKNoSMFp4IcM9Y5qdi5FzrhCRnm6FhapYjUW2O_PCGHZzt7SGSJFZsZVUTFCyk76SkEUo0nKSk08FAXWitB9QQeRBOjvP7jenALouVwOCo8ANCJ-sNswbLEPtUL3wH4MzXsXeseKRG-z9FZ-Hgs-hYkN7l8maIpqQaKfZv_psH-hzqDz-W1IgIst_8AYgQfCJnxOF-2O-dpxZaXDUZyGAHxMXjTIj_VxxLeTvF6UrB7FthnYfGW8vxcJW7NLD2swWPB1F8Cj2bPLytqZhqoNzvh_pPj26NjVzwKt2N3g"; "verifyTokenWithNbf 512")]
308 #[test_case("eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzUxMiJ9.eyJuYmYiOjMyODAzOTQwOTh9.ku1gE9gK421mACW3YoTuGVYxT6keosencfgJU09Gvz1Pfv8jM7-P2rlsWFVWMx0kHggkpOtLQwVuPWm9O6eBtXIp9LSqGLAiFIVuP7ziM5OEOn_mkKtNE6hjknFBpBzSiEOhUgsLojfV2NcdmmJazrMSw6Lhd-F1nrn2tGeenf9o2ZCUl3ap-7Ky7dXgpQAUPgnc0irJt4YOj1ZM2444XBmwnI1DySEYIawCPUkzdMNIKJ8RUWzyRR3ZzyQ7wzLmHtwFEEXVpf1Pz9U2jce4yt2hBJ7z8Wt30CZ1xDQXLhklTzvzUYJH08Nz_9mC0cRVBeRjfIuhnNmg93lQk9-xTg"; "exceptionNotThrownNotYetActiveToken 512")]
309 #[test_case("eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzUxMiJ9.eyJhdWQiOiJmb28ifQ.eC74kkOfsvnU3hxWk6zYLuM0myA7PUzHuqM-xi3LBE3U0MaOeRpUrxh3S1ch4qCvZGvxiwZkLGXC1V297Mqar6UkQmdbsofXIumiJX71vY0K99DXLTRdpJsHL-LZlOymrpvQWEGFq7kPsvmSb32e77fi0OMyRT9HssLZzgt1b0REodqsk-udgBfAcxnVexy_PoJ0dxAiGhTV8LFg48v3BNhNg6z2rvuOA3Ai0D_fxYWpjjEegYj7wNf5DpOVU0KzgnpWEHIPZnmtsrMOKeXCqoNJ9THjvb2E0pAkPe2zUu3YCO5jM5pfFIDWB8UQv6gHJJgVcXLisAUCwJj6XZLx7g"; "verifyTokenWithAud 512")]
310 #[test_case("eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzUxMiJ9.eyJhdWQiOlsiZXRjIiwiZm9vIiwiYmxhaCJdfQ.BXYhmNsjcflTEVEkbL69WdlR4ROGb1SBvtLKxUIJI32YcAsw889uvSx2v4fRie0cO98CHDRP6kiFeXFoyMmMr0_Wh2PrbxFuaVrH6pv-F7SuuTxX_1AB8GaTxw6jB-ketvPDqymX-kQmwnulyD3UZLaGYsCpX5B-upoX1ZAptLsIZ08JHtgxV1zcnIwjedu5tTvYI0arT-2FTkX3OrhqgeQlEuBwtFzFcpzx4rQ_DmQfwR9tUXRsZXRZ8JrA5jl-i5occXFx2BmCkTQnDSFs1KOZn4dbSboYX-cKkpp4ZkrU3NlZmXtURSFprsjHPfMLXBWATJN1TNp6cKAEUEreOg"; "verifyTokenWithAudArray 512")]
311 #[test_case("eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzUxMiJ9.eyJhdWQiOlsiZXRjIiwiZm9vIGJhciIsImJsYWgiXX0.XN5FR87nSejq2UheiPflSVEI10yP3erozct147UvezwI4Pqq3y1Cg-1wIFcFanLVRC2bPjJmVPB3R4jxc2DhaJsMx-HtiRtdR8He9f5_jcvhaHZXcQgHbS4OYvqmgbgDz17yVRunCsWDygE-dqXAM-xUUWSjyi7KPJlolK2S_t-ShTkIDjw3VvSlPsDFoUc_5B4EX7wxrmGw4R_loZlxtbI3QA27QwbS14uOKaL8iaPta59PYtieuqbPuK-fGsn1zr1wJeTpNOJn4Ns_MTu6FBEJBgOkd0luk-M2lY6d-5APTQFbwoRH8g50dM3t8dATq52dwDfM5x58MG8Dfa711Q"; "verifyTokenWithAudiencesWithSpaces 512")]
312 #[test_case("eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzUxMiJ9.eyJhdWQiOlsiZXRjIiwiRm9vIiwiYmxhaCJdfQ.a3YqoKiklMqTXPRHkjWEOemyrrbexWE-GB9xs2hbLMb7AINBwgIyoy0keqJe6JnCay1hORVzYTshBKLwua5O089SrppYByQt1TNx9MrMinSS5trvD0DX8Ny9A8tumWU_FE8lWNfYav1Up_0CztgalDiuhAXEeiyNSho2amf0uYSBzZFoD_RNZZ6HnqHU99fihJKaBuS_nIpT4YcM3x7mYflhXl7cwlnmt5WAszKTKepAsF2sccjE6C3bq4tFfh3qVAZm1GngM8j8f7uyRcckqOOE8lRdiSwGAp-vbab6N-wzF_GjFQEMUP0ae0CaUKL8SkBl9lDUzyXx9GtZgLnD2A"; "verifyTokenWithAudiencesCaseSensitive 512")]
313 #[test_case("eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzUxMiJ9.eyJhdWQiOlsiZXRjIiwiYmxhaCJdfQ.LNhx9QVZx5xT-XUPt4R7-pZlGLqqyk40VRqTv-ZoLWazdIlolA8oMC1AraI_ADUWqrVs0YXspsIPmOsS7zq0uB1HRqTm6smjvCVeBsFBDAgtzA1JnPqxR-muPWYO8Sv_JxDv6ZS_r8D7XvkVRWcAcLi7YuCH_cEuo2SINxJ9omzl0xj4MiLAWxAGbfjAH6Syp3_njyR1JmD5U8Bfluh5EM7N2ncA7s2rZEK8F8pcumY0eQP6UzygyfgG8pjw93NREu9lX-R8YzB_d6hsbhRKBhIkj7nZm7AKmxy1QGQhYmDrl1jW_woOnZ3rwfRHr3zbyG6D5uxkIXafhq5bnNw4Jw"; "exceptionNotThrownWhenInvalidAudToken 512")]
314 #[test_case("eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzUxMiJ9.eyJhdWQiOiJmb28iLCJuYmYiOjgyMDA5ODUyNCwibmFtZSI6IkpvaG4gRG9lIiwic2NvcGVzIjpbInJlYWQiLCJ3cml0ZSJdLCJleHAiOjMyODAzOTQwOTh9.eLLMVnOl2B6jvjUEYRp7OvFY7gXJIFRTT1pxIRlRioaAGcoz111b6QjaCFNxTS1OoLdmwYCG0v1ZeVoPI6q2oGP_93PKaDXw53as2Q7fSESun_yZPfNHMpxaVjfY7h4zn0qGMn_Y-bUBFtrjQz7Fhu5NEWtDC-isCKcPbDWKY2K0sOsGsupSoNiWbCHa-2k8mef4OKAWR1R3dVy-WE6ltnknmacpyNaErMKKOSdfxS0isHtic59tUfVcOHkLgEhBTg6iWrzBJ8Ar1q6v6MOUtnecJ_bFOB0xqJx82PFtq91gkAVSlIzsqL43Dhg-7ycSTyCd27PhUnQ3etfYUZ4gnQ"; "checkAllValidations 512")]
315 fn verify_valid_token_512(token: &str) {
316 let validation = rs512_validator().validate(token.to_string());
317
318 assert!(validation.is_ok());
319 }
320 }
321}