feat: add tests
This commit is contained in:
134
src/jose.rs
134
src/jose.rs
@@ -207,3 +207,137 @@ fn get_jwe(jwe: &str) -> String {
|
||||
jwe.to_string()
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_jwe_rsa_01() {
|
||||
let rsa_private_key = RsaPrivateKey::new(&mut thread_rng(), 2048).unwrap();
|
||||
let jwe = serialize_jwe_rsa(b"hello world", &rsa_private_key.to_public_key()).unwrap();
|
||||
let plaintext = deserialize_jwe_rsa(&jwe, &rsa_private_key).unwrap();
|
||||
assert_eq!("hello world", String::from_utf8(plaintext.0).unwrap());
|
||||
assert_eq!("A256GCM", plaintext.1.enc);
|
||||
assert_eq!("RSA-OAEP", plaintext.1.alg);
|
||||
assert_eq!("local-mini-kms", plaintext.1.vendor);
|
||||
assert!(plaintext.1.version.is_none());
|
||||
assert!(plaintext.1.data_type.is_none());
|
||||
assert!(plaintext.1.exportable.is_none());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_jwe_rsa_02() {
|
||||
let test_private_key_pem = "-----BEGIN PRIVATE KEY-----
|
||||
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCxytLReN50hqYH
|
||||
a5Db87E9QEIg52Q+H0PGSC7ZLmBSeITLUX3fm5QOtUNzGR2cNYiS9XM4G0vjvE6u
|
||||
d3k4xd/YU43fuD+bLGIxXItm0uXF7hDkdgX/bGrbuuyf1aD6I8RI/vb+n3pB0TL6
|
||||
q1aUlxj7lHeUdYYgAl7qsbPvfXkSEWZ712/D6oQzvEZHq7sEtPiHcqckkqlwyP5X
|
||||
0Uu7INm5c9BzYNF7Ni0+xHLMGmoKh3cWrM5FI90fXpY5A/3ylVGaW6DYBh8/Fc5e
|
||||
1gGpUW+LSHufAuIn6YBiPcayGIlcjYkJ6lskNvt94G2ArZq0E5ZiPM8oLSnXJTKs
|
||||
kjHWJxZVAgMBAAECggEAO6cmxvu7//LxoAm6R+Ji9H8r8OhSXPmWft/XQC1sSh9/
|
||||
xswn5K/JpImzANpLcg8QLObH6upVsyqKZ8VUWfUiXu3h609hoAnrRE6dwzk9uQRg
|
||||
jJcA+iuBSwpTvGksIuF/SVKqwtH1bkHnze1RFnf//OFaoegwwWqqOCq5icBar/Gx
|
||||
PJ6rMvPhnwpHcJENUIBOUJ22GyOBm++NeAT/Ad1eWJUJATO+wv/cp/WAV6sER32r
|
||||
HXoep0GLEqD3fE9Gg1+af3u+klli6fffd0p6Whd5f4qRIUDMSn1Pid2Rm+iZMrfa
|
||||
sZ2d341WRuauyT+fltIWOMdORQnoIEVkWkSOwVZo3QKBgQDJIh0wjuBikZj6yvr3
|
||||
xUV7LVXtttdyll5y+HWcfWZkIHdHM1YdgmSs43Xt3H2x3TIthoGd5+lQyBCT7HAD
|
||||
noHnQasdOr3XgKrU8aWRZfmJoqZud2JaGcgSoIJYYm4Dg/cJZZs1khYpAfAy2m2G
|
||||
90A4dPS2m7yR9qIKU0Qzfi0jvwKBgQDiSrjLMn0vNYR3cyNepyMJnjIFaEOVBYxx
|
||||
FuRLKqF8A1VY955icdffqWOWj26SCAg+dG8tgekzT626zR9HVXuyKoOHL/xqrYoH
|
||||
1m9qTqlc/BwQuCpnTWkWB+X6QZ+LAvEI+q3NvX4u0MaEz5k8HoHh/FokBhZCd8Xx
|
||||
CnEJRuI66wKBgQC5iJRwhHuLsU7ymWbkQ78SHwHS5ATdmMPLPlIPZsWauzAMJ9ja
|
||||
I7wGl1PjdK8l8SsmP5s1NAZPFB3mtgWl8QNXdYYI0nToY7Ix+C6Ibw6+3aC06b95
|
||||
6apbNGDIcxOUfpjUvDtuMTHr5fPSlRbPlyhQa+KIyCQsaNuUtraE4XF2NQKBgAjr
|
||||
NwNTNxngOxtWH2PApKHhaUlLRbae5F0ksNTBlmHD495AzC5HHGIFVBaACrSYunJz
|
||||
tloNz7ok/szo/r2aAekQweRXINS3iEQs0HFZLlWq3hROneU6aNTkdMz7PyWEdSmM
|
||||
b8M3H70Kn3hmkjyLW0Uj5A2da80s2VFZvwDFmW8HAoGAQWxSgNONrWfhgiACpE4P
|
||||
SdpE/AHD77rMkahIxb5m1KcRk4Zsk31+XZ2QtmkoYsYuH+D0z09KCia0vNUk/Pkd
|
||||
8OLAbOHe+WdXxdtVq+xWUyNGmiV4ChFTmSUgYB16dLHS771pgtr97DvbZx0QC+4o
|
||||
Ay9yo20HQ4fizpfOIkoW96Q=
|
||||
-----END PRIVATE KEY-----";
|
||||
let jwe = "LKMS:eyJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiUlNBLU9BRVAiLCJ2ZW5kb3IiOiJsb2NhbC1taW5p\
|
||||
LWttcyJ9.rei0aIWvri7nsy-UHJ163r1REqK897DHNVev6OCdQK7h0mH3dmHzaXJZ_CXiF3muylv8WU7nmhHLZsMD_z63rLrmH\
|
||||
_pqH7grS2jTHEfHWgzkjSevFCOQxzSDtFiWJAlXQ_lA2N7y7FvJPM_W_OMZe9dFC2xDlgqXobgDHtrXrUVcjpd2wr2jCqP7RbE\
|
||||
P8fnpIHRbBasC6kZggKRuyfd-YAbCNEjjaMgsZt-v2ridJVEccKFH37fu26m-5zWUbLHnl6afLf105Tkc47BbsLZXuz9gKomBa\
|
||||
8cj6g6XjuZx8p8cOmlr5wnQElvFr_9prNFGFhB9c5mEsnGYbDrkM8ghCg.QmDRJCCzghCQlM7s.UF9RqEH9ULMb2is.wPGBxLP\
|
||||
WkEcrkjsepiZPDA";
|
||||
use rsa::pkcs8::DecodePrivateKey;
|
||||
use serde_json::Value;
|
||||
let rsa_private_key = RsaPrivateKey::from_pkcs8_pem(test_private_key_pem).unwrap();
|
||||
let plaintext = deserialize_jwe_rsa(&jwe, &rsa_private_key).unwrap();
|
||||
assert_eq!("hello world", String::from_utf8(plaintext.0).unwrap());
|
||||
assert_eq!("A256GCM", plaintext.1.enc);
|
||||
assert_eq!("RSA-OAEP", plaintext.1.alg);
|
||||
assert_eq!("local-mini-kms", plaintext.1.vendor);
|
||||
assert!(plaintext.1.version.is_none());
|
||||
assert!(plaintext.1.data_type.is_none());
|
||||
assert!(plaintext.1.exportable.is_none());
|
||||
|
||||
let public_key_pem = rsa_key_to_pem(&rsa_private_key).unwrap();
|
||||
assert_eq!("-----BEGIN PUBLIC KEY-----
|
||||
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAscrS0XjedIamB2uQ2/Ox
|
||||
PUBCIOdkPh9Dxkgu2S5gUniEy1F935uUDrVDcxkdnDWIkvVzOBtL47xOrnd5OMXf
|
||||
2FON37g/myxiMVyLZtLlxe4Q5HYF/2xq27rsn9Wg+iPESP72/p96QdEy+qtWlJcY
|
||||
+5R3lHWGIAJe6rGz7315EhFme9dvw+qEM7xGR6u7BLT4h3KnJJKpcMj+V9FLuyDZ
|
||||
uXPQc2DRezYtPsRyzBpqCod3FqzORSPdH16WOQP98pVRmlug2AYfPxXOXtYBqVFv
|
||||
i0h7nwLiJ+mAYj3GshiJXI2JCepbJDb7feBtgK2atBOWYjzPKC0p1yUyrJIx1icW
|
||||
VQIDAQAB
|
||||
-----END PUBLIC KEY-----
|
||||
", public_key_pem);
|
||||
let jwk = rsa_key_to_jwk(&rsa_private_key).unwrap();
|
||||
let jwk_value: Value = serde_json::from_str(&serde_json::to_string(&jwk.key).unwrap()).unwrap();
|
||||
assert_eq!("AQAB", jwk_value.get("e").unwrap().as_str().unwrap());
|
||||
assert_eq!("RSA", jwk_value.get("kty").unwrap().as_str().unwrap());
|
||||
assert_eq!("scrS0XjedIamB2uQ2_OxPUBCIOdkPh9Dxkgu2S5gUniEy1F935uUDrVDcxkdnDWIkvVzOBtL47xOrnd5O\
|
||||
MXf2FON37g_myxiMVyLZtLlxe4Q5HYF_2xq27rsn9Wg-iPESP72_p96QdEy-qtWlJcY-5R3lHWGIAJe6rGz7315EhFme9dvw-\
|
||||
qEM7xGR6u7BLT4h3KnJJKpcMj-V9FLuyDZuXPQc2DRezYtPsRyzBpqCod3FqzORSPdH16WOQP98pVRmlug2AYfPxXOXtYBqVF\
|
||||
vi0h7nwLiJ-mAYj3GshiJXI2JCepbJDb7feBtgK2atBOWYjzPKC0p1yUyrJIx1icWVQ",
|
||||
jwk_value.get("n").unwrap().as_str().unwrap());
|
||||
|
||||
let rsa_public_key_2 = jwk_to_rsa_pubic_key(&serde_json::to_string(&jwk.key).unwrap()).unwrap();
|
||||
let jwe = serialize_jwe_rsa(b"hello world 2", &rsa_public_key_2).unwrap();
|
||||
let plaintext = deserialize_jwe_rsa(&jwe, &rsa_private_key).unwrap();
|
||||
assert_eq!("hello world 2", String::from_utf8(plaintext.0).unwrap());
|
||||
assert_eq!("A256GCM", plaintext.1.enc);
|
||||
assert_eq!("RSA-OAEP", plaintext.1.alg);
|
||||
assert_eq!("local-mini-kms", plaintext.1.vendor);
|
||||
assert!(plaintext.1.version.is_none());
|
||||
assert!(plaintext.1.data_type.is_none());
|
||||
assert!(plaintext.1.exportable.is_none());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_jwe_aes() {
|
||||
let jwe = serialize_jwe_aes(b"hello world", b"01234567890123456789012345678901").unwrap();
|
||||
let plaintext = deserialize_jwe_aes(&jwe, b"01234567890123456789012345678901").unwrap();
|
||||
assert_eq!("hello world", String::from_utf8(plaintext.0).unwrap());
|
||||
assert_eq!("A256GCM", plaintext.1.enc);
|
||||
assert_eq!("A256KW", plaintext.1.alg);
|
||||
assert_eq!("local-mini-kms", plaintext.1.vendor);
|
||||
assert_eq!("a15a8f066b1af95d", plaintext.1.version.unwrap());
|
||||
assert!(plaintext.1.data_type.is_none());
|
||||
assert!(plaintext.1.exportable.is_none());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_decode_url_safe_no_pad() {
|
||||
assert_eq!("68656c6c6f20776f726c64",
|
||||
hex::encode(decode_url_safe_no_pad(&URL_SAFE_NO_PAD.encode("hello world")).unwrap()));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_to_bytes32() {
|
||||
assert!(to_bytes32(b"").is_err());
|
||||
assert!(to_bytes32(b"01234567890123456789012345678901").is_ok());
|
||||
assert_eq!("3031323334353637383930313233343536373839303132333435363738393031",
|
||||
hex::encode(to_bytes32(b"01234567890123456789012345678901").unwrap()));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_get_master_key_checksum() {
|
||||
assert_eq!("685fb69d15d5efe9", get_master_key_checksum(b"test"));
|
||||
assert_eq!("80c5603e00ca3e80", get_master_key_checksum(b"hello_world"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_get_jwe() {
|
||||
assert_eq!("test", get_jwe("test"));
|
||||
assert_eq!("test", get_jwe("LKMS:test"));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user