ate_crypto/crypto/
encrypted_private_key.rs1use crate::utils::vec_deserialize;
2use crate::utils::vec_serialize;
3use serde::{Deserialize, Serialize};
4#[allow(unused_imports)]
5use tracing::{debug, error, info, instrument, span, trace, warn, Level};
6
7use super::*;
8
9#[derive(Serialize, Deserialize, Debug, Clone, Hash, Eq, PartialEq)]
10pub struct EncryptedPrivateKey {
11 pk: PublicSignKey,
12 ek_hash: AteHash,
13 sk_iv: InitializationVector,
14 #[serde(serialize_with = "vec_serialize", deserialize_with = "vec_deserialize")]
15 sk_encrypted: Vec<u8>,
16}
17
18impl EncryptedPrivateKey {
19 #[allow(dead_code)]
20 pub fn generate(encrypt_key: &EncryptKey) -> EncryptedPrivateKey {
21 let pair = PrivateSignKey::generate(encrypt_key.size());
22 EncryptedPrivateKey::from_pair(&pair, encrypt_key)
23 }
24
25 #[allow(dead_code)]
26 pub fn from_pair(pair: &PrivateSignKey, encrypt_key: &EncryptKey) -> EncryptedPrivateKey {
27 let sk = pair.sk();
28 let sk = encrypt_key.encrypt(&sk[..]);
29
30 EncryptedPrivateKey {
31 pk: pair.as_public_key().clone(),
32 ek_hash: encrypt_key.hash(),
33 sk_iv: sk.iv,
34 sk_encrypted: sk.data,
35 }
36 }
37
38 #[allow(dead_code)]
39 pub fn as_private_key(&self, key: &EncryptKey) -> PrivateSignKey {
40 let data = key.decrypt(&self.sk_iv, &self.sk_encrypted[..]);
41 match &self.pk {
42 PublicSignKey::Falcon512 { pk } => PrivateSignKey::Falcon512 {
43 pk: PublicSignKey::Falcon512 { pk: pk.clone() },
44 sk: data,
45 },
46 PublicSignKey::Falcon1024 { pk } => PrivateSignKey::Falcon1024 {
47 pk: PublicSignKey::Falcon1024 { pk: pk.clone() },
48 sk: data,
49 },
50 }
51 }
52
53 #[allow(dead_code)]
54 pub fn as_public_key<'a>(&'a self) -> &'a PublicSignKey {
55 &self.pk
56 }
57
58 #[allow(dead_code)]
59 pub fn pk_hash(&self) -> AteHash {
60 self.pk.hash()
61 }
62
63 #[allow(dead_code)]
64 pub(crate) fn double_hash(&self) -> DoubleHash {
65 DoubleHash::from_hashes(&self.pk_hash(), &self.ek_hash)
66 }
67}