feat: encrypt works

This commit is contained in:
2022-07-24 17:55:08 +08:00
parent 0b97850f65
commit ee0c59bbcf
6 changed files with 151 additions and 74 deletions

View File

@@ -2,20 +2,20 @@ use josekit::jwe;
use josekit::jwe::alg::aeskw::AeskwJweAlgorithm;
use josekit::jwe::alg::rsaes::RsaesJweAlgorithm;
use josekit::jwe::JweHeader;
use josekit::jwk::{Jwk, KeyPair};
use josekit::jwk::alg::rsa::RsaKeyPair;
use josekit::jwk::Jwk;
use rust_util::XResult;
pub fn generate_rsa_key(bits: u32) -> XResult<RsaKeyPair> {
Ok(RsaKeyPair::generate(bits)?)
}
pub fn serialize_jwe_rsa(payload: &[u8], jwk: &Jwk) -> XResult<String> {
let mut header = JweHeader::new();
header.set_content_encryption("A256GCM");
let encrypter = RsaesJweAlgorithm::RsaOaep.encrypter_from_jwk(&jwk)?;
Ok(jwe::serialize_compact(payload, &header, &encrypter)?)
}
// pub fn serialize_jwe_rsa(payload: &[u8], jwk: &Jwk) -> XResult<String> {
// let mut header = JweHeader::new();
// header.set_content_encryption("A256GCM");
// let encrypter = RsaesJweAlgorithm::RsaOaep.encrypter_from_jwk(&jwk)?;
// Ok(jwe::serialize_compact(payload, &header, &encrypter)?)
// }
pub fn deserialize_jwe_rsa(jwe: &str, jwk: &Jwk) -> XResult<(Vec<u8>, JweHeader)> {
let decrypter = RsaesJweAlgorithm::RsaOaep.decrypter_from_jwk(jwk)?;
@@ -30,28 +30,6 @@ pub fn serialize_jwe_aes(payload: &[u8], key: &[u8]) -> XResult<String> {
}
pub fn deserialize_jwe_aes(jwe: &str, key: &[u8]) -> XResult<(Vec<u8>, JweHeader)> {
let decrypter = AeskwJweAlgorithm::A192kw.decrypter_from_bytes(key)?;
Ok(jwe::deserialize_json(jwe, &decrypter)?)
}
#[test]
fn a() {
let k = generate_rsa_key(4096).unwrap();
let k = k.to_jwk_key_pair();
let kk = k.to_public_key().unwrap();
println!("{:?}", k);
println!("{:?}", kk);
let mut header = JweHeader::new();
header.set_content_encryption("A256GCM");
let encrypter = RsaesJweAlgorithm::RsaOaep.encrypter_from_jwk(&kk).unwrap();
let payload = "helloworld";
let r = jwe::serialize_compact(payload.as_bytes(), &header, &encrypter);
println!("{:?}", r);
let k = "abcdefghijklmnopqrstuvwxyz123456";
let t = serialize_jwe_aes(payload.as_bytes(), k.as_bytes());
println!("{:?}", t);
let decrypter = AeskwJweAlgorithm::A256kw.decrypter_from_bytes(key)?;
Ok(jwe::deserialize_compact(jwe, &decrypter)?)
}