1use crate::json;
18
19#[derive(Debug, PartialEq, Clone)]
20pub enum Prf {
21 HmacSha256,
22}
23
24#[derive(Debug, PartialEq, Clone)]
25pub struct Pbkdf2 {
26 pub c: u32,
27 pub dklen: u32,
28 pub prf: Prf,
29 pub salt: Vec<u8>,
30}
31
32#[derive(Debug, PartialEq, Clone)]
33pub struct Scrypt {
34 pub dklen: u32,
35 pub p: u32,
36 pub n: u32,
37 pub r: u32,
38 pub salt: Vec<u8>,
39}
40
41#[derive(Debug, PartialEq, Clone)]
42pub enum Kdf {
43 Pbkdf2(Pbkdf2),
44 Scrypt(Scrypt),
45}
46
47impl From<json::Prf> for Prf {
48 fn from(json: json::Prf) -> Self {
49 match json {
50 json::Prf::HmacSha256 => Prf::HmacSha256,
51 }
52 }
53}
54
55impl From<Prf> for json::Prf {
56 fn from(val: Prf) -> Self {
57 match val {
58 Prf::HmacSha256 => json::Prf::HmacSha256,
59 }
60 }
61}
62
63impl From<json::Pbkdf2> for Pbkdf2 {
64 fn from(json: json::Pbkdf2) -> Self {
65 Pbkdf2 {
66 c: json.c,
67 dklen: json.dklen,
68 prf: From::from(json.prf),
69 salt: json.salt.into(),
70 }
71 }
72}
73
74impl From<Pbkdf2> for json::Pbkdf2 {
75 fn from(val: Pbkdf2) -> Self {
76 json::Pbkdf2 {
77 c: val.c,
78 dklen: val.dklen,
79 prf: val.prf.into(),
80 salt: From::from(val.salt),
81 }
82 }
83}
84
85impl From<json::Scrypt> for Scrypt {
86 fn from(json: json::Scrypt) -> Self {
87 Scrypt {
88 dklen: json.dklen,
89 p: json.p,
90 n: json.n,
91 r: json.r,
92 salt: json.salt.into(),
93 }
94 }
95}
96
97impl From<Scrypt> for json::Scrypt {
98 fn from(val: Scrypt) -> Self {
99 json::Scrypt {
100 dklen: val.dklen,
101 p: val.p,
102 n: val.n,
103 r: val.r,
104 salt: From::from(val.salt),
105 }
106 }
107}
108
109impl From<json::Kdf> for Kdf {
110 fn from(json: json::Kdf) -> Self {
111 match json {
112 json::Kdf::Pbkdf2(params) => Kdf::Pbkdf2(From::from(params)),
113 json::Kdf::Scrypt(params) => Kdf::Scrypt(From::from(params)),
114 }
115 }
116}
117
118impl From<Kdf> for json::Kdf {
119 fn from(val: Kdf) -> Self {
120 match val {
121 Kdf::Pbkdf2(params) => json::Kdf::Pbkdf2(params.into()),
122 Kdf::Scrypt(params) => json::Kdf::Scrypt(params.into()),
123 }
124 }
125}