@@ -5,11 +5,13 @@ use blastkids::kdf;
5
5
6
6
use bls12_381_plus:: elliptic_curve:: hash2curve:: ExpandMsgXmd ;
7
7
// re-exports
8
+ pub use bls12_381_plus:: group:: Curve ;
8
9
pub use bls12_381_plus:: group:: { Group , GroupEncoding } ;
10
+ use bls12_381_plus:: G1Affine ;
9
11
pub use bls12_381_plus:: G1Projective ;
12
+ use bls12_381_plus:: G2Affine ;
10
13
pub use bls12_381_plus:: G2Projective ;
11
14
pub use bls12_381_plus:: Scalar ;
12
- use bls12_381_plus:: { group:: Curve , G2Affine } ;
13
15
pub use secrecy:: zeroize:: { Zeroize , ZeroizeOnDrop , Zeroizing } ;
14
16
pub use secrecy:: { ExposeSecret , Secret } ;
15
17
@@ -132,6 +134,16 @@ impl Account {
132
134
}
133
135
}
134
136
137
+ /// Getter for [G1Affine] public key
138
+ pub fn pk_g1 ( & self ) -> G1Affine {
139
+ self . pk_g1 . to_affine ( )
140
+ }
141
+
142
+ /// Getter for [G2Affine] public key
143
+ pub fn pk_g2 ( & self ) -> G2Affine {
144
+ self . pk_g2 . to_affine ( )
145
+ }
146
+
135
147
/// Expand an Account given a length, using the Account's secret key to derive the additional keys.
136
148
///
137
149
/// Function is deterministic, and always exapands to the same keys at each index.
@@ -158,7 +170,7 @@ impl Account {
158
170
/// let message = b"hello world";
159
171
/// let signature = account.sign(message);
160
172
/// // verify the signature
161
- /// let verified = verify(&account.pk_g1, message, &signature).unwrap();
173
+ /// let verified = verify(&account.pk_g1() , message, &signature).unwrap();
162
174
/// assert!(verified);
163
175
/// ```
164
176
pub fn sign ( & self , message : & [ u8 ] ) -> [ u8 ; G2Affine :: COMPRESSED_BYTES ] {
@@ -177,17 +189,16 @@ impl Account {
177
189
}
178
190
179
191
/// Verify a signed message ([G2Compressed]) against a [G1] public key.
180
- pub fn verify ( pk : & G1Projective , message : & [ u8 ] , signature : & [ u8 ] ) -> Result < bool , Error > {
192
+ pub fn verify ( pk : & G1Affine , message : & [ u8 ] , signature : & [ u8 ] ) -> Result < bool , Error > {
181
193
// let err msg say that signature was not a valid G2 point
182
194
let sig_g2 = try_decompress_g2 ( signature. to_vec ( ) ) ?;
183
- let pk_affine = pk. to_affine ( ) ;
184
195
185
196
// Hash the msg to G2Affine
186
197
let hashed_msg_g2 = G2Projective :: hash :: < ExpandMsgXmd < sha2:: Sha256 > > ( message, DST ) . to_affine ( ) ;
187
198
let g1_generator = G1Projective :: generator ( ) . to_affine ( ) ;
188
199
189
200
// Verify the signature by checking the pairing(G1_pubkey, G2_hashed_msg) == pairing(G1_generator, G2_signature)
190
- let result = bls12_381_plus:: pairing ( & pk_affine , & hashed_msg_g2)
201
+ let result = bls12_381_plus:: pairing ( & pk , & hashed_msg_g2)
191
202
== bls12_381_plus:: pairing ( & g1_generator, & sig_g2) ;
192
203
193
204
Ok ( result)
@@ -288,7 +299,7 @@ mod basic_test {
288
299
let message = b"hello world" ;
289
300
let signature = account. sign ( message) ;
290
301
291
- let verified = verify ( & account. pk_g1 , message, & signature) . unwrap ( ) ;
302
+ let verified = verify ( & account. pk_g1 . to_affine ( ) , message, & signature) . unwrap ( ) ;
292
303
assert ! ( verified) ;
293
304
}
294
305
}
@@ -304,7 +315,7 @@ mod basic_test {
304
315
let message = b"hello world" ;
305
316
let signature = account. sign ( message) ;
306
317
307
- let verified = verify ( & account. pk_g1 , b"hello world!" , & signature) . unwrap ( ) ;
318
+ let verified = verify ( & account. pk_g1 . to_affine ( ) , b"hello world!" , & signature) . unwrap ( ) ;
308
319
assert ! ( !verified) ;
309
320
}
310
321
}
0 commit comments