You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

21 lines
617 B
Rust

use openssl::pkey::{Private, Public};
use openssl::rsa::Rsa;
use serde::{Deserialize, Serialize};
use crate::core::*;
#[derive(sqlx::Type, Clone, Serialize, Deserialize)]
#[sqlx(transparent)]
pub struct PublicKeyDer(Vec<u8>);
#[derive(sqlx::Type, Clone, Serialize, Deserialize)]
#[sqlx(transparent)]
pub struct PrivateKeyDer(Vec<u8>);
pub fn generate_keypair() -> Result<(PublicKeyDer, PrivateKeyDer)> {
let private = Rsa::generate(4096)?;
let public_key = PublicKeyDer(private.public_key_to_der()?);
let private_key = PrivateKeyDer(private.private_key_to_der()?);
Ok((public_key, private_key))
}