wire_e2e_identity/
utils.rs1use 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}