prople_crypto/eddsa/
privkey.rs1use rst_common::with_cryptography::ed25519_dalek::pkcs8::EncodePrivateKey;
3use rst_common::with_cryptography::ed25519_dalek::{self, SigningKey};
4
5use crate::keysecure::builder::Builder;
6use crate::keysecure::types::errors::KeySecureError;
7use crate::keysecure::types::ContextOptions;
8use crate::keysecure::types::{Password, ToKeySecure};
9use crate::keysecure::KeySecure;
10
11use crate::eddsa::types::errors::EddsaError;
12use crate::eddsa::types::PrivateKeyBytes;
13
14#[derive(Debug, Clone)]
20pub struct PrivKey {
21 key: SigningKey,
22}
23
24impl PrivKey {
25 pub fn new(key: SigningKey) -> Self {
26 Self { key }
27 }
28
29 pub fn serialize(&self) -> PrivateKeyBytes {
30 PrivateKeyBytes::from(self.key.to_bytes())
31 }
32
33 pub fn to_pem(&self) -> Result<String, EddsaError> {
34 self.key
35 .to_pkcs8_pem(ed25519_dalek::pkcs8::spki::der::pem::LineEnding::default())
36 .map(|val| val.to_string())
37 .map_err(|err| EddsaError::EncodePemError(err.to_string()))
38 }
39}
40
41impl ToKeySecure for PrivKey {
42 fn to_keysecure(&self, password: Password) -> Result<KeySecure, KeySecureError> {
43 let pem = self
44 .to_pem()
45 .map_err(|err| KeySecureError::BuildKeySecureError(err.to_string()))?;
46
47 let keysecure_builder = Builder::new(ContextOptions::ED25519, password);
48 let keysecure = keysecure_builder.secure(pem)?;
49
50 Ok(keysecure)
51 }
52}