feat: rsa jwk

This commit is contained in:
2024-11-13 01:14:34 +08:00
parent 2a9d6dfaac
commit ae8747de70

View File

@@ -1,13 +1,13 @@
mod jose; mod jose;
use crate::jose::{deserialize_jwe_aes, serialize_jwe_aes_2};
use base64::engine::general_purpose::STANDARD;
use base64::Engine; use base64::Engine;
use jose_jwk::jose_b64::serde::Bytes; use jose_jwk::{Jwk, Key, Rsa};
use jose_jwk::Rsa;
use rand::random; use rand::random;
use rand::rngs::ThreadRng; use rand::rngs::ThreadRng;
use rsa::traits::{PrivateKeyParts, PublicKeyParts};
use rsa::Pkcs1v15Encrypt; use rsa::Pkcs1v15Encrypt;
use serde_json::Value;
use crate::jose::{deserialize_jwe_aes, serialize_jwe_aes_2};
fn main() { fn main() {
let key: [u8; 32] = random(); let key: [u8; 32] = random();
@@ -19,6 +19,24 @@ fn main() {
let (d, h) = deserialize_jwe_aes(&e, &key).unwrap(); let (d, h) = deserialize_jwe_aes(&e, &key).unwrap();
println!("{:?}", d); println!("{:?}", d);
println!("{:?}", h); 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() { fn main2() {
@@ -39,27 +57,12 @@ fn main2() {
let rsa_jwk = rsa_jwk.replace("\n", ""); let rsa_jwk = rsa_jwk.replace("\n", "");
println!("{}", rsa_jwk); println!("{}", rsa_jwk);
let val: Value = serde_json::from_str(&rsa_jwk).unwrap(); let rsa: Rsa = 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_public_key = rsa::RsaPublicKey::try_from(rsa).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 mut r = ThreadRng::default();
let enc = rsa_public_key.encrypt(&mut r, Pkcs1v15Encrypt, b"").unwrap(); let enc = rsa_public_key.encrypt(&mut r, Pkcs1v15Encrypt, b"aaaaaaaa").unwrap();
println!("{}", base64::engine::general_purpose::STANDARD.encode(&enc)); println!("{}", STANDARD.encode(&enc));
} }