From ae8747de70e9e8a8441884bf919b279ef3d764b1 Mon Sep 17 00:00:00 2001 From: Hatter Jiang Date: Wed, 13 Nov 2024 01:14:34 +0800 Subject: [PATCH] feat: rsa jwk --- __crypto/jose-test/src/main.rs | 49 ++++++++++++++++++---------------- 1 file changed, 26 insertions(+), 23 deletions(-) diff --git a/__crypto/jose-test/src/main.rs b/__crypto/jose-test/src/main.rs index d283015..565fb8d 100644 --- a/__crypto/jose-test/src/main.rs +++ b/__crypto/jose-test/src/main.rs @@ -1,13 +1,13 @@ mod jose; +use crate::jose::{deserialize_jwe_aes, serialize_jwe_aes_2}; +use base64::engine::general_purpose::STANDARD; use base64::Engine; -use jose_jwk::jose_b64::serde::Bytes; -use jose_jwk::Rsa; +use jose_jwk::{Jwk, Key, Rsa}; use rand::random; use rand::rngs::ThreadRng; +use rsa::traits::{PrivateKeyParts, PublicKeyParts}; use rsa::Pkcs1v15Encrypt; -use serde_json::Value; -use crate::jose::{deserialize_jwe_aes, serialize_jwe_aes_2}; fn main() { let key: [u8; 32] = random(); @@ -19,6 +19,24 @@ fn main() { let (d, h) = deserialize_jwe_aes(&e, &key).unwrap(); println!("{:?}", d); println!("{:?}", h); + + let rsa_key = jose::generate_rsa_key_2(2048).unwrap(); + let rsa_public_key = rsa_key.as_ref(); + let public_rsa: Rsa = rsa_public_key.into(); + // let rsa: Rsa = rsa_key.into(); + // println!("{:?}", public_rsa); + // println!("{:?}", rsa); + + let jwk = Jwk { + key: Key::Rsa(public_rsa), + prm: Default::default(), + }; + println!("{}", serde_json::to_string(&jwk).unwrap()); + + // let rsa_key_2: RsaPrivateKey = rsa.try_into().unwrap(); + // println!("{:?}", rsa_key_2); + + main2(); } fn main2() { @@ -39,27 +57,12 @@ fn main2() { let rsa_jwk = rsa_jwk.replace("\n", ""); println!("{}", rsa_jwk); - let val: Value = serde_json::from_str(&rsa_jwk).unwrap(); - - let rsa = match val { - Value::Object(rsa_pub_key) => { - let e = rsa_pub_key.get("e").unwrap().as_str().unwrap(); - let n = rsa_pub_key.get("n").unwrap().as_str().unwrap(); - println!("{}", e); - println!("{}", n); - Rsa { - n: Bytes::from(base64::engine::general_purpose::URL_SAFE_NO_PAD.decode(n).unwrap()), - e: Bytes::from(base64::engine::general_purpose::URL_SAFE_NO_PAD.decode(e).unwrap()), - prv: None, - } - } - _ => panic!("Unknown value"), - }; + let rsa: Rsa = serde_json::from_str(&rsa_jwk).unwrap(); let rsa_public_key = rsa::RsaPublicKey::try_from(rsa).unwrap(); - println!("{:?}", rsa_public_key); + // println!("{:?}", rsa_public_key); let mut r = ThreadRng::default(); - let enc = rsa_public_key.encrypt(&mut r, Pkcs1v15Encrypt, b"").unwrap(); - println!("{}", base64::engine::general_purpose::STANDARD.encode(&enc)); + let enc = rsa_public_key.encrypt(&mut r, Pkcs1v15Encrypt, b"aaaaaaaa").unwrap(); + println!("{}", STANDARD.encode(&enc)); }