1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
use paillier::*;
pub use paillier::MinimalEncryptionKey;
use serde::{Deserialize, Serialize};
use serde_json;

#[derive(Debug, Deserialize, Serialize, Clone)]
pub struct UserEncryptionKey {
    pub user_id: String,
    pub decryption_key: EncryptionKey,
}

#[derive(Debug, Deserialize, Serialize, Clone)]
pub struct KeyPair {
    pub ek: EncryptionKey,
    pub dk: DecryptionKey,
}

impl KeyPair {
    pub fn new() -> Self {
        let (ek, dk) = Paillier::keypair().keys();
        KeyPair { ek, dk }
    }

    pub fn decryption_key_json(&self) -> String {
        serde_json::to_string(&self.dk).unwrap()
    }
}

impl Default for KeyPair {
    fn default() -> Self {
        KeyPair::new()
    }
}

#[cfg(test)]
mod tests {
    #[test]
    fn new() {
        let key_pair = super::KeyPair::new();
        println!("{:?}", key_pair.ek);
        println!("{:?}", key_pair.dk);
        println!("{}", serde_json::to_string_pretty(&key_pair.ek).unwrap());
        println!("{}", serde_json::to_string_pretty(&key_pair).unwrap());
    }

    #[test]
    fn decryption_key_string() {
        let key_pair = super::KeyPair::new();
        let dk = key_pair.decryption_key_json();
        println!("{}", dk);
    }

    #[test]
    fn serialize() {
        let key_pair = super::KeyPair::new();
        let json = serde_json::to_string(&key_pair).unwrap();
        println!("{}", json);

        let json_string = r#"
        {
            "ek": {
                "n": "18316356530802270868597125126584027114538635007091336571307097048001374334546359767026990171838736786030015500561673293061910747171189548154451794055910096738248464803942158187525599117983095877199615049507683349232319267436471245312899600456912199242319356274382128987298915911903675705364875067572490500358071000763364531740751743813425528436389606184774440631654601835928253705018648484270497224341474039781926254277355160985454809729053601809768728943911255786241347234098406346415245127820068161445975580243992008258832082738229211922479726733190594848509249808820418844044325133001976449187496445656991277029629"
            },
            "dk": {
                "p": "154759743866776248724882635716439025143166826391330822412057810626200572029381153550911287972151524763481007692243073188254156317835057142019935907674250280763179950303592327203210143308948066758516873538039081185972844819822315777562706594850453333318430594764162018001472374655638142250898159531604651584829",
                "q": "151261188036913803234213422098362920421438396753709636863886525143406372619961882944798909281736537591573419840492216749317333719708074682098515275700554764297703668561436456258662156122880199352802129776572451001025865006105240629173136392843016941189901778754984582601377112236507790339002922744597448451731"
            }
        }
        "#;
        let key_pair_de: super::KeyPair = serde_json::from_str(json_string).unwrap();
    }
}