@@ -4,14 +4,16 @@ use rand_chacha_dalek_compat::ChaCha20Rng;
4
4
use serde:: { Deserialize , Serialize } ;
5
5
use thiserror:: Error ;
6
6
7
+ use super :: ProtocolKey ;
8
+
7
9
/// Alias of [Ed25519:PublicKey](https://docs.rs/ed25519-dalek/latest/ed25519_dalek/struct.PublicKey.html).
8
- pub type EraMarkersVerifierVerificationKey = ed25519_dalek:: PublicKey ;
10
+ pub type EraMarkersVerifierVerificationKey = ProtocolKey < ed25519_dalek:: PublicKey > ;
9
11
10
12
/// Alias of [Ed25519:SecretKey](https://docs.rs/ed25519-dalek/latest/ed25519_dalek/struct.SecretKey.html).
11
- pub type EraMarkersVerifierSecretKey = ed25519_dalek:: SecretKey ;
13
+ pub type EraMarkersVerifierSecretKey = ProtocolKey < ed25519_dalek:: SecretKey > ;
12
14
13
15
/// Alias of [Ed25519:Signature](https://docs.rs/ed25519-dalek/latest/ed25519_dalek/struct.Signature.html).
14
- pub type EraMarkersVerifierSignature = ed25519_dalek:: Signature ;
16
+ pub type EraMarkersVerifierSignature = ProtocolKey < ed25519_dalek:: Signature > ;
15
17
16
18
#[ derive( Error , Debug ) ]
17
19
/// [EraMarkersSigner] and [EraMarkersVerifier] related errors.
@@ -21,7 +23,7 @@ pub enum EraMarkersVerifierError {
21
23
SignatureVerification ( #[ from] SignatureError ) ,
22
24
}
23
25
24
- /// A cryptographic signer that is responsible for signing the EreMarkers
26
+ /// A cryptographic signer that is responsible for signing the EraMarkers
25
27
#[ derive( Debug , Serialize , Deserialize ) ]
26
28
pub struct EraMarkersSigner {
27
29
pub ( crate ) secret_key : EraMarkersVerifierSecretKey ,
@@ -33,8 +35,8 @@ impl EraMarkersSigner {
33
35
where
34
36
R : CryptoRng + RngCore ,
35
37
{
36
- let secret_key = EraMarkersVerifierSecretKey :: generate ( & mut rng) ;
37
- Self :: from_secret_key ( secret_key)
38
+ let secret_key = ed25519_dalek :: SecretKey :: generate ( & mut rng) ;
39
+ Self :: from_secret_key ( secret_key. into ( ) )
38
40
}
39
41
40
42
/// EraMarkersSigner deterministic
@@ -56,16 +58,15 @@ impl EraMarkersSigner {
56
58
57
59
/// Create a an expanded secret key
58
60
fn create_expanded_secret_key ( & self ) -> ExpandedSecretKey {
59
- ExpandedSecretKey :: from ( & self . secret_key )
61
+ ExpandedSecretKey :: from ( & * self . secret_key )
60
62
}
61
63
62
64
/// Create a EraMarkersVerifierVerificationKey
63
65
fn create_verification_key (
64
66
& self ,
65
67
expanded_secret_key : & ExpandedSecretKey ,
66
68
) -> EraMarkersVerifierVerificationKey {
67
- let verification_key: EraMarkersVerifierVerificationKey = expanded_secret_key. into ( ) ;
68
- verification_key
69
+ EraMarkersVerifierVerificationKey :: new ( expanded_secret_key. into ( ) )
69
70
}
70
71
71
72
/// Create a EraMarkersVerifier
@@ -79,7 +80,7 @@ impl EraMarkersSigner {
79
80
pub fn sign ( & self , message : & [ u8 ] ) -> EraMarkersVerifierSignature {
80
81
let expanded_secret_key = self . create_expanded_secret_key ( ) ;
81
82
let verification_key = self . create_verification_key ( & expanded_secret_key) ;
82
- expanded_secret_key. sign ( message, & verification_key)
83
+ expanded_secret_key. sign ( message, & verification_key) . into ( )
83
84
}
84
85
}
85
86
@@ -112,9 +113,26 @@ impl EraMarkersVerifier {
112
113
113
114
#[ cfg( test) ]
114
115
mod tests {
115
- use super :: super :: codec:: { key_decode_hex, key_encode_hex} ;
116
116
use super :: * ;
117
117
118
+ const GOLDEN_ERA_MARKERS_VERIFICATION_KEY : & str =
119
+ "5b32332c32372c3131322c362c35372c38342c3138302c342c3135302c3233322c3233372c3132362c3131392c\
120
+ 3231342c33352c35342c38312c3230382c3231372c39392c3137302c3233312c3133392c362c3132322c39342c3\
121
+ 9322c3137322c32332c3130322c3135372c3136375d";
122
+ const GOLDEN_ERA_MARKERS_SECRET_KEY : & str =
123
+ "5b34332c3133322c3232312c3138382c3235332c3132372c3235352c38362c3136322c3133312c3233332c3131\
124
+ 362c3134322c3233352c3131312c3133332c3134312c3138332c302c33392c3132302c3139372c39322c3133302\
125
+ c3233342c34362c3135372c32352c3133322c31352c3234312c3235345d";
126
+
127
+ #[ test]
128
+ fn golden_master ( ) {
129
+ EraMarkersVerifierVerificationKey :: from_json_hex ( GOLDEN_ERA_MARKERS_VERIFICATION_KEY )
130
+ . expect ( "Decoding golden verification key should not fail" ) ;
131
+
132
+ EraMarkersVerifierSecretKey :: from_json_hex ( GOLDEN_ERA_MARKERS_SECRET_KEY )
133
+ . expect ( "Decoding golden secret key should not fail" ) ;
134
+ }
135
+
118
136
#[ test]
119
137
fn test_generate_test_deterministic_keypair ( ) {
120
138
let signer = EraMarkersSigner :: create_deterministic_signer ( ) ;
@@ -129,11 +147,11 @@ mod tests {
129
147
130
148
println ! (
131
149
"Deterministic Verification Key={}" ,
132
- key_encode_hex ( verifier. verification_key. as_bytes ( ) ) . unwrap( )
150
+ verifier. verification_key. to_json_hex ( ) . unwrap( )
133
151
) ;
134
152
println ! (
135
153
"Deterministic Secret Key=={}" ,
136
- key_encode_hex ( signer. secret_key. as_bytes ( ) ) . unwrap( )
154
+ signer. secret_key. to_json_hex ( ) . unwrap( )
137
155
) ;
138
156
}
139
157
@@ -144,25 +162,24 @@ mod tests {
144
162
145
163
println ! (
146
164
"Non Deterministic Verification Key={}" ,
147
- key_encode_hex ( verifier. verification_key. as_bytes ( ) ) . unwrap( )
165
+ verifier. verification_key. to_json_hex ( ) . unwrap( )
148
166
) ;
149
167
println ! (
150
168
"Non Deterministic Secret Key=={}" ,
151
- key_encode_hex ( signer. secret_key. as_bytes ( ) ) . unwrap( )
169
+ signer. secret_key. to_json_hex ( ) . unwrap( )
152
170
) ;
153
171
}
154
172
155
173
#[ test]
156
174
fn test_codec_keypair ( ) {
157
175
let signer = EraMarkersSigner :: create_deterministic_signer ( ) ;
158
176
let verifier = signer. create_verifier ( ) ;
159
- let secret_key_encoded = key_encode_hex ( signer. secret_key . as_bytes ( ) ) . unwrap ( ) ;
160
- let verification_key_encoded =
161
- key_encode_hex ( verifier. verification_key . as_bytes ( ) ) . unwrap ( ) ;
177
+ let secret_key_encoded = signer. secret_key . to_json_hex ( ) . unwrap ( ) ;
178
+ let verification_key_encoded = verifier. verification_key . to_json_hex ( ) . unwrap ( ) ;
162
179
let secret_key_decoded: EraMarkersVerifierSecretKey =
163
- key_decode_hex ( & secret_key_encoded) . unwrap ( ) ;
180
+ secret_key_encoded. try_into ( ) . unwrap ( ) ;
164
181
let verification_key_decoded: EraMarkersVerifierVerificationKey =
165
- key_decode_hex ( & verification_key_encoded) . unwrap ( ) ;
182
+ verification_key_encoded. try_into ( ) . unwrap ( ) ;
166
183
let signer_decoded = EraMarkersSigner :: from_secret_key ( secret_key_decoded) ;
167
184
let verifier_decoded = EraMarkersVerifier :: from_verification_key ( verification_key_decoded) ;
168
185
0 commit comments