wire_e2e_identity/
utils.rs

1use jwt_simple::prelude::{ES256KeyPair, ES384KeyPair, ES512KeyPair, Ed25519KeyPair, Jwk};
2use rusty_jwt_tools::{
3    jwk::TryIntoJwk as _,
4    prelude::{JwsAlgorithm, Pem},
5};
6
7use crate::error::E2eIdentityResult;
8
9pub fn generate_key(sign_alg: JwsAlgorithm) -> E2eIdentityResult<Pem> {
10    let pem = match sign_alg {
11        JwsAlgorithm::P256 => ES256KeyPair::generate().to_pem()?,
12        JwsAlgorithm::P384 => ES384KeyPair::generate().to_pem()?,
13        JwsAlgorithm::P521 => ES512KeyPair::generate().to_pem()?,
14        JwsAlgorithm::Ed25519 => Ed25519KeyPair::generate().to_pem(),
15    };
16    Ok(pem.into())
17}
18
19pub fn public_jwk_from_pem_keypair(alg: JwsAlgorithm, keypair: &Pem) -> E2eIdentityResult<Jwk> {
20    let jwk = match alg {
21        JwsAlgorithm::P256 => ES256KeyPair::from_pem(keypair)?.public_key().try_into_jwk()?,
22        JwsAlgorithm::P384 => ES384KeyPair::from_pem(keypair)?.public_key().try_into_jwk()?,
23        JwsAlgorithm::P521 => ES512KeyPair::from_pem(keypair)?.public_key().try_into_jwk()?,
24        JwsAlgorithm::Ed25519 => Ed25519KeyPair::from_pem(keypair)?.public_key().try_into_jwk()?,
25    };
26    Ok(jwk)
27}