feat: update local-mini-kms
This commit is contained in:
57
src/jose.rs
Normal file
57
src/jose.rs
Normal 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);
|
||||
}
|
||||
Reference in New Issue
Block a user