feat: update local-mini-kms

This commit is contained in:
2022-07-24 15:57:53 +08:00
parent 038d5546e0
commit 0b97850f65
6 changed files with 381 additions and 17 deletions

57
src/jose.rs Normal file
View File

@@ -0,0 +1,57 @@
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 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 deserialize_jwe_rsa(jwe: &str, jwk: &Jwk) -> XResult<(Vec<u8>, JweHeader)> {
let decrypter = RsaesJweAlgorithm::RsaOaep.decrypter_from_jwk(jwk)?;
Ok(jwe::deserialize_json(jwe, &decrypter)?)
}
pub fn serialize_jwe_aes(payload: &[u8], key: &[u8]) -> XResult<String> {
let mut header = JweHeader::new();
header.set_content_encryption("A256GCM");
let encrypter = AeskwJweAlgorithm::A256kw.encrypter_from_bytes(key)?;
Ok(jwe::serialize_compact(payload, &header, &encrypter)?)
}
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);
}