@@ -5,7 +5,7 @@ use crate::internal::arithmetic::GroupElement;
5
5
use crate :: low_level:: elgamal:: { ElGamal , ELGAMAL_LENGTH } ;
6
6
use derive_more:: { Deref , From } ;
7
7
use rand_core:: { CryptoRng , RngCore } ;
8
- use serde:: { Deserialize , Serialize } ;
8
+ use serde:: { Deserialize , Deserializer , Serialize , Serializer } ;
9
9
10
10
/// A pseudonym (in the background, this is a [`GroupElement`]) that can be used to identify a user
11
11
/// within a specific context, which can be encrypted, rekeyed and reshuffled.
@@ -20,15 +20,54 @@ pub struct DataPoint {
20
20
pub ( crate ) value : GroupElement ,
21
21
}
22
22
/// An encrypted pseudonym, which is an [`ElGamal`] encryption of a [`Pseudonym`].
23
- #[ derive( Copy , Clone , Eq , PartialEq , Debug , Deref , From , Serialize , Deserialize ) ]
23
+ #[ derive( Copy , Clone , Eq , PartialEq , Debug , Deref , From ) ]
24
24
pub struct EncryptedPseudonym {
25
25
pub value : ElGamal ,
26
26
}
27
27
/// An encrypted data point, which is an [`ElGamal`] encryption of a [`DataPoint`].
28
- #[ derive( Copy , Clone , Eq , PartialEq , Debug , Deref , From , Serialize , Deserialize ) ]
28
+ #[ derive( Copy , Clone , Eq , PartialEq , Debug , Deref , From ) ]
29
29
pub struct EncryptedDataPoint {
30
30
pub value : ElGamal ,
31
31
}
32
+
33
+ impl Serialize for EncryptedDataPoint {
34
+ fn serialize < S > ( & self , serializer : S ) -> Result < S :: Ok , S :: Error >
35
+ where
36
+ S : Serializer ,
37
+ {
38
+ self . value . serialize ( serializer)
39
+ }
40
+ }
41
+
42
+ impl < ' de > Deserialize < ' de > for EncryptedDataPoint {
43
+ fn deserialize < D > ( deserializer : D ) -> Result < Self , D :: Error >
44
+ where
45
+ D : Deserializer < ' de > ,
46
+ {
47
+ let value = ElGamal :: deserialize ( deserializer) ?;
48
+ Ok ( Self { value } )
49
+ }
50
+ }
51
+
52
+ impl Serialize for EncryptedPseudonym {
53
+ fn serialize < S > ( & self , serializer : S ) -> Result < S :: Ok , S :: Error >
54
+ where
55
+ S : Serializer ,
56
+ {
57
+ self . value . serialize ( serializer)
58
+ }
59
+ }
60
+
61
+ impl < ' de > Deserialize < ' de > for EncryptedPseudonym {
62
+ fn deserialize < D > ( deserializer : D ) -> Result < Self , D :: Error >
63
+ where
64
+ D : Deserializer < ' de > ,
65
+ {
66
+ let value = ElGamal :: deserialize ( deserializer) ?;
67
+ Ok ( Self { value } )
68
+ }
69
+ }
70
+
32
71
/// A trait for encrypted data types, that can be encrypted and decrypted from and into [`Encryptable`] types.
33
72
pub trait Encrypted {
34
73
type UnencryptedType : Encryptable ;
0 commit comments