feat: jose
This commit is contained in:
@@ -1,41 +1,27 @@
|
||||
mod jose;
|
||||
|
||||
use base64::Engine;
|
||||
use jose_jwk::jose_b64::serde::Bytes;
|
||||
use jose_jwk::Rsa;
|
||||
use rand::random;
|
||||
use rand::rngs::ThreadRng;
|
||||
use rsa::Pkcs1v15Encrypt;
|
||||
use serde_json::Value;
|
||||
use crate::jose::{deserialize_jwe_aes, serialize_jwe_aes_2};
|
||||
|
||||
fn main() {
|
||||
// JWE format:
|
||||
// BASE64URL(UTF8(JWE Protected Header)) || '.' ||
|
||||
// BASE64URL(JWE Encrypted Key) || '.' || BASE64URL(JWE Initialization Vector)
|
||||
// || '.' || BASE64URL(JWE Ciphertext) || '.' || BASE64URL(JWE Authentication Tag).
|
||||
//
|
||||
// RSA JWE Header:
|
||||
// {"enc":"A256GCM","vendor":"local-mini-kms","alg":"RSA-OAEP"}
|
||||
// eyJlbmMiOiJBMjU2R0NNIiwidmVuZG9yIjoibG9jYWwtbWluaS1rbXMiLCJhbGciOiJSU0EtT0FFUCJ9.VQ_R
|
||||
// yGjXqQlUIbRIMgaYRSaX5FMRBzZ6ApfdZ2yAwiG70hjNfR3ss7x4PYqMm6QtITm1O4_fp7I3bY8iUz5Njyth_
|
||||
// Min7Xm2-WsQ6gq9yN58btkUBFm60c7SC5XLaqE1pEtBAz7786bJk6M4NeOtDAOFAmIb2j1EwnS5vweBtmNv7N
|
||||
// UFIgvx806T3WkCFDOkMSJ10_6LSa0z-lIac-s68svsU5WW8CXVKxHAbxaHyX_otu2HxXzDZlF5Goamh5ZJtr0
|
||||
// 0yW_bzDCx3hZ2nMK3Ve7IJ2ZLAMmvhj9LKWkPtoqH0dGHaPHWff5P3rZ4vtKywt_h5b6SYII_mEoJcpByMyGw
|
||||
// TXCtZymDt82Tyv_FesW2721JgyGxnukuOxQRTw4MfGYIO5bldL3uGGI_H4HXlXhM_kp3wuPAZ0vH4Jj2KD6MV
|
||||
// DDTJQaEBQIEF07i7WiNynr57kbahYwextRXYP7LgoUHfFwA5GGGpN-UkuWLlKkYLTmXGrPYnL6Cf9D3euP7nF
|
||||
// ml2oA2hjig-UuYf9A_QSEqNsMxYDuG-rggn3H_iXNl4ooYcxSVOXhTKfoV578MkNwG75BdHN5FeRYIKq0HCTM
|
||||
// lGqqBWmDibPtMd7Uq1JrDd8774lnA8JcZcCMSia4m6WJSbG0kOuJ4NJPOUrYtNEJXgWKU3FQzDB-apLMQdac.
|
||||
// WYJgsdZRLk310KWd.P333-S2VYg.PCfruTdk8vh3a8wcjJCe-g
|
||||
//
|
||||
// RSA-OAEP RSA using Optimal Asymmetric Encryption Padding (OAEP), as defined in RFC 3447 [RFC3447]
|
||||
// A256GCM Advanced Encryption Standard (AES) using 256 bit keys in Galois/Counter Mode, as defined in [FIPS‑197] and [NIST‑800‑38D]
|
||||
//
|
||||
// AES JWE Header:
|
||||
// {"enc":"A256GCM","vendor":"local-mini-kms","version":"5b90f66a1c6a918d","alg":"A256KW"}
|
||||
// eyJlbmMiOiJBMjU2R0NNIiwidmVuZG9yIjoibG9jYWwtbWluaS1rbXMiLCJ2ZXJzaW9uIjoiNWI5MGY2NmExYz
|
||||
// ZhOTE4ZCIsImFsZyI6IkEyNTZLVyJ9.K2_P-b_Gq9wbrssbcS5AmiUwcnNTnnZSe7rBI1SixVrC7TfFK0fruw.
|
||||
// ez3OKjOHAIIYnfM0.wSO3aXo.-vGJwk8JQKhi3voIlAA9gQ
|
||||
//
|
||||
// A256GCM Advanced Encryption Standard (AES) using 256 bit keys in Galois/Counter Mode, as defined in [FIPS‑197] and [NIST‑800‑38D]
|
||||
// A256KW Advanced Encryption Standard (AES) Key Wrap Algorithm using 256 bit keys, as defined in RFC 3394 [RFC3394]
|
||||
let key: [u8; 32] = random();
|
||||
let payload = b"hello world";
|
||||
|
||||
let e = serialize_jwe_aes_2(payload, key).unwrap();
|
||||
println!("{}", e);
|
||||
|
||||
let (d, h) = deserialize_jwe_aes(&e, &key).unwrap();
|
||||
println!("{:?}", d);
|
||||
println!("{:?}", h);
|
||||
}
|
||||
|
||||
fn main2() {
|
||||
let rsa_jwk = r##"{
|
||||
"kty":"RSA",
|
||||
"e":"AQAB",
|
||||
|
||||
Reference in New Issue
Block a user