1use super::primitives::{
23 group::{self, Element, Scalar},
24 ops,
25};
26use crate::{Array, Error, Scheme};
27use commonware_utils::{hex, SizedSerialize};
28use rand::{CryptoRng, Rng};
29use std::{
30 fmt::{Debug, Display},
31 hash::{Hash, Hasher},
32 ops::Deref,
33};
34
35#[derive(Clone)]
42pub struct Bls12381 {
43 private: group::Private,
44 public: group::Public,
45}
46
47impl Scheme for Bls12381 {
48 type PrivateKey = PrivateKey;
49 type PublicKey = PublicKey;
50 type Signature = Signature;
51
52 fn new<R: CryptoRng + Rng>(r: &mut R) -> Self {
53 let (private, public) = ops::keypair(r);
54 Self { private, public }
55 }
56
57 fn from(private_key: PrivateKey) -> Option<Self> {
58 let private = private_key.key;
59 let mut public = group::Public::one();
60 public.mul(&private);
61 Some(Self { private, public })
62 }
63
64 fn private_key(&self) -> PrivateKey {
65 PrivateKey::from(self.private)
66 }
67
68 fn public_key(&self) -> PublicKey {
69 PublicKey::from(self.public)
70 }
71
72 fn sign(&mut self, namespace: Option<&[u8]>, message: &[u8]) -> Signature {
73 let signature = ops::sign_message(&self.private, namespace, message);
74 Signature::from(signature)
75 }
76
77 fn verify(
78 namespace: Option<&[u8]>,
79 message: &[u8],
80 public_key: &PublicKey,
81 signature: &Signature,
82 ) -> bool {
83 ops::verify_message(&public_key.key, namespace, message, &signature.signature).is_ok()
84 }
85}
86
87#[derive(Clone, Eq, PartialEq)]
89pub struct PrivateKey {
90 raw: [u8; group::PRIVATE_KEY_LENGTH],
91 key: group::Private,
92}
93
94impl Array for PrivateKey {}
95
96impl SizedSerialize for PrivateKey {
97 const SERIALIZED_LEN: usize = group::PRIVATE_KEY_LENGTH;
98}
99
100impl Hash for PrivateKey {
101 fn hash<H: Hasher>(&self, state: &mut H) {
102 self.raw.hash(state);
103 }
104}
105
106impl Ord for PrivateKey {
107 fn cmp(&self, other: &Self) -> std::cmp::Ordering {
108 self.raw.cmp(&other.raw)
109 }
110}
111
112impl PartialOrd for PrivateKey {
113 fn partial_cmp(&self, other: &Self) -> Option<std::cmp::Ordering> {
114 Some(self.cmp(other))
115 }
116}
117
118impl AsRef<[u8]> for PrivateKey {
119 fn as_ref(&self) -> &[u8] {
120 &self.raw
121 }
122}
123
124impl Deref for PrivateKey {
125 type Target = [u8];
126 fn deref(&self) -> &[u8] {
127 &self.raw
128 }
129}
130
131impl From<Scalar> for PrivateKey {
132 fn from(key: Scalar) -> Self {
133 let raw: [u8; group::PRIVATE_KEY_LENGTH] = key.serialize().try_into().unwrap();
134 Self { raw, key }
135 }
136}
137
138impl TryFrom<&[u8]> for PrivateKey {
139 type Error = Error;
140 fn try_from(value: &[u8]) -> Result<Self, Self::Error> {
141 let raw: [u8; group::PRIVATE_KEY_LENGTH] = value
142 .try_into()
143 .map_err(|_| Error::InvalidPrivateKeyLength)?;
144 let key = Scalar::deserialize(value).ok_or(Error::InvalidPrivateKey)?;
145 Ok(Self { raw, key })
146 }
147}
148
149impl TryFrom<&Vec<u8>> for PrivateKey {
150 type Error = Error;
151 fn try_from(value: &Vec<u8>) -> Result<Self, Self::Error> {
152 Self::try_from(value.as_slice())
153 }
154}
155
156impl TryFrom<Vec<u8>> for PrivateKey {
157 type Error = Error;
158 fn try_from(value: Vec<u8>) -> Result<Self, Self::Error> {
159 Self::try_from(value.as_slice())
160 }
161}
162
163impl Debug for PrivateKey {
164 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
165 write!(f, "{}", hex(&self.raw))
166 }
167}
168
169impl Display for PrivateKey {
170 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
171 write!(f, "{}", hex(&self.raw))
172 }
173}
174
175#[derive(Clone, Eq, PartialEq)]
177pub struct PublicKey {
178 raw: [u8; group::PUBLIC_KEY_LENGTH],
179 key: group::Public,
180}
181
182impl Array for PublicKey {}
183
184impl SizedSerialize for PublicKey {
185 const SERIALIZED_LEN: usize = group::PUBLIC_KEY_LENGTH;
186}
187
188impl Hash for PublicKey {
189 fn hash<H: Hasher>(&self, state: &mut H) {
190 self.raw.hash(state);
191 }
192}
193
194impl Ord for PublicKey {
195 fn cmp(&self, other: &Self) -> std::cmp::Ordering {
196 self.raw.cmp(&other.raw)
197 }
198}
199
200impl PartialOrd for PublicKey {
201 fn partial_cmp(&self, other: &Self) -> Option<std::cmp::Ordering> {
202 Some(self.cmp(other))
203 }
204}
205
206impl AsRef<[u8]> for PublicKey {
207 fn as_ref(&self) -> &[u8] {
208 &self.raw
209 }
210}
211
212impl Deref for PublicKey {
213 type Target = [u8];
214 fn deref(&self) -> &[u8] {
215 &self.raw
216 }
217}
218
219impl From<group::Public> for PublicKey {
220 fn from(key: group::Public) -> Self {
221 let raw = key.serialize().try_into().unwrap();
222 Self { raw, key }
223 }
224}
225
226impl TryFrom<&[u8]> for PublicKey {
227 type Error = Error;
228 fn try_from(value: &[u8]) -> Result<Self, Self::Error> {
229 let raw: [u8; group::PUBLIC_KEY_LENGTH] = value
230 .try_into()
231 .map_err(|_| Error::InvalidPublicKeyLength)?;
232 let key = group::Public::deserialize(value).ok_or(Error::InvalidPublicKey)?;
233 Ok(Self { raw, key })
234 }
235}
236
237impl TryFrom<&Vec<u8>> for PublicKey {
238 type Error = Error;
239 fn try_from(value: &Vec<u8>) -> Result<Self, Self::Error> {
240 Self::try_from(value.as_slice())
241 }
242}
243
244impl TryFrom<Vec<u8>> for PublicKey {
245 type Error = Error;
246 fn try_from(value: Vec<u8>) -> Result<Self, Self::Error> {
247 Self::try_from(value.as_slice())
248 }
249}
250
251impl Debug for PublicKey {
252 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
253 write!(f, "{}", hex(&self.raw))
254 }
255}
256
257impl Display for PublicKey {
258 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
259 write!(f, "{}", hex(&self.raw))
260 }
261}
262
263#[derive(Clone, Eq, PartialEq)]
265pub struct Signature {
266 raw: [u8; group::SIGNATURE_LENGTH],
267 signature: group::Signature,
268}
269
270impl Array for Signature {}
271
272impl SizedSerialize for Signature {
273 const SERIALIZED_LEN: usize = group::SIGNATURE_LENGTH;
274}
275
276impl Hash for Signature {
277 fn hash<H: Hasher>(&self, state: &mut H) {
278 self.raw.hash(state);
279 }
280}
281
282impl Ord for Signature {
283 fn cmp(&self, other: &Self) -> std::cmp::Ordering {
284 self.raw.cmp(&other.raw)
285 }
286}
287
288impl PartialOrd for Signature {
289 fn partial_cmp(&self, other: &Self) -> Option<std::cmp::Ordering> {
290 Some(self.cmp(other))
291 }
292}
293
294impl AsRef<[u8]> for Signature {
295 fn as_ref(&self) -> &[u8] {
296 &self.raw
297 }
298}
299
300impl Deref for Signature {
301 type Target = [u8];
302 fn deref(&self) -> &[u8] {
303 &self.raw
304 }
305}
306
307impl From<group::Signature> for Signature {
308 fn from(signature: group::Signature) -> Self {
309 let raw = signature.serialize().try_into().unwrap();
310 Self { raw, signature }
311 }
312}
313
314impl TryFrom<&[u8]> for Signature {
315 type Error = Error;
316 fn try_from(value: &[u8]) -> Result<Self, Self::Error> {
317 let raw: [u8; group::SIGNATURE_LENGTH] = value
318 .try_into()
319 .map_err(|_| Error::InvalidSignatureLength)?;
320 let signature = group::Signature::deserialize(value).ok_or(Error::InvalidSignature)?;
321 Ok(Self { raw, signature })
322 }
323}
324
325impl TryFrom<&Vec<u8>> for Signature {
326 type Error = Error;
327 fn try_from(value: &Vec<u8>) -> Result<Self, Self::Error> {
328 Self::try_from(value.as_slice())
329 }
330}
331
332impl TryFrom<Vec<u8>> for Signature {
333 type Error = Error;
334 fn try_from(value: Vec<u8>) -> Result<Self, Self::Error> {
335 Self::try_from(value.as_slice())
336 }
337}
338
339impl Debug for Signature {
340 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
341 write!(f, "{}", hex(&self.raw))
342 }
343}
344
345impl Display for Signature {
346 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
347 write!(f, "{}", hex(&self.raw))
348 }
349}
350
351#[cfg(test)]
353mod tests {
354 use super::*;
355
356 #[test]
357 fn test_sign() {
358 let cases = [
359 vector_sign_1(),
360 vector_sign_2(),
361 vector_sign_3(),
362 vector_sign_4(),
363 vector_sign_5(),
364 vector_sign_6(),
365 vector_sign_7(),
366 vector_sign_8(),
367 vector_sign_9(),
368 ];
369 for (index, test) in cases.into_iter().enumerate() {
370 let (private_key, message, expected) = test;
371 let mut signer =
372 <Bls12381 as Scheme>::from(private_key).expect("unable to deserialize private key");
373 let signature = signer.sign(None, &message);
374 assert_eq!(signature, expected, "vector_sign_{}", index + 1);
375 }
376 }
377
378 #[test]
379 fn test_sign_10() {
380 let result =
381 parse_private_key("0x0000000000000000000000000000000000000000000000000000000000000000");
382 assert!(result.is_err());
383 }
384
385 #[test]
386 fn test_verify() {
387 let cases = [
388 vector_verify_1(),
389 vector_verify_2(),
390 vector_verify_3(),
391 vector_verify_4(),
392 vector_verify_5(),
393 vector_verify_6(),
394 vector_verify_7(),
395 vector_verify_8(),
396 vector_verify_9(),
397 vector_verify_10(),
398 vector_verify_11(),
399 vector_verify_12(),
400 vector_verify_13(),
401 vector_verify_14(),
402 vector_verify_15(),
403 vector_verify_16(),
404 vector_verify_17(),
405 vector_verify_18(),
406 vector_verify_19(),
407 vector_verify_20(),
408 vector_verify_21(),
409 vector_verify_22(),
410 vector_verify_23(),
411 vector_verify_24(),
412 vector_verify_25(),
413 vector_verify_26(),
414 vector_verify_27(),
415 vector_verify_28(),
416 vector_verify_29(),
417 ];
418
419 for (index, test) in cases.into_iter().enumerate() {
420 let (public_key, message, signature, expected) = test;
421 let expected = if !expected {
422 public_key.is_err()
423 || signature.is_err()
424 || !Bls12381::verify(None, &message, &public_key.unwrap(), &signature.unwrap())
425 } else {
426 Bls12381::verify(None, &message, &public_key.unwrap(), &signature.unwrap())
427 };
428 assert!(expected, "vector_verify_{}", index + 1);
429 }
430 }
431
432 fn parse_sign_vector(
434 private_key: &str,
435 msg: &str,
436 signature: &str,
437 ) -> (PrivateKey, Vec<u8>, Signature) {
438 (
439 parse_private_key(private_key).unwrap(),
440 commonware_utils::from_hex_formatted(msg).unwrap(),
441 parse_signature(signature).unwrap(),
442 )
443 }
444
445 fn parse_private_key(private_key: &str) -> Result<PrivateKey, Error> {
446 PrivateKey::try_from(commonware_utils::from_hex_formatted(private_key).unwrap())
447 }
448 fn parse_public_key(public_key: &str) -> Result<PublicKey, Error> {
449 PublicKey::try_from(commonware_utils::from_hex_formatted(public_key).unwrap())
450 }
451 fn parse_signature(signature: &str) -> Result<Signature, Error> {
452 Signature::try_from(commonware_utils::from_hex_formatted(signature).unwrap())
453 }
454
455 fn vector_sign_1() -> (PrivateKey, Vec<u8>, Signature) {
457 parse_sign_vector(
458 "0x263dbd792f5b1be47ed85f8938c0f29586af0d3ac7b977f21c278fe1462040e3",
459 "0x5656565656565656565656565656565656565656565656565656565656565656",
460 "0x882730e5d03f6b42c3abc26d3372625034e1d871b65a8a6b900a56dae22da98abbe1b68f85e49fe7652a55ec3d0591c20767677e33e5cbb1207315c41a9ac03be39c2e7668edc043d6cb1d9fd93033caa8a1c5b0e84bedaeb6c64972503a43eb"
461 )
462 }
463
464 fn vector_sign_2() -> (PrivateKey, Vec<u8>, Signature) {
466 parse_sign_vector(
467 "0x47b8192d77bf871b62e87859d653922725724a5c031afeabc60bcef5ff665138",
468 "0x0000000000000000000000000000000000000000000000000000000000000000",
469 "0xb23c46be3a001c63ca711f87a005c200cc550b9429d5f4eb38d74322144f1b63926da3388979e5321012fb1a0526bcd100b5ef5fe72628ce4cd5e904aeaa3279527843fae5ca9ca675f4f51ed8f83bbf7155da9ecc9663100a885d5dc6df96d9"
470 )
471 }
472
473 fn vector_sign_3() -> (PrivateKey, Vec<u8>, Signature) {
475 parse_sign_vector(
476 "0x328388aff0d4a5b7dc9205abd374e7e98f3cd9f3418edb4eafda5fb16473d216",
477 "0xabababababababababababababababababababababababababababababababab",
478 "0xae82747ddeefe4fd64cf9cedb9b04ae3e8a43420cd255e3c7cd06a8d88b7c7f8638543719981c5d16fa3527c468c25f0026704a6951bde891360c7e8d12ddee0559004ccdbe6046b55bae1b257ee97f7cdb955773d7cf29adf3ccbb9975e4eb9"
479 )
480 }
481
482 fn vector_sign_4() -> (PrivateKey, Vec<u8>, Signature) {
484 parse_sign_vector(
485 "0x47b8192d77bf871b62e87859d653922725724a5c031afeabc60bcef5ff665138",
486 "0x5656565656565656565656565656565656565656565656565656565656565656",
487 "0xaf1390c3c47acdb37131a51216da683c509fce0e954328a59f93aebda7e4ff974ba208d9a4a2a2389f892a9d418d618418dd7f7a6bc7aa0da999a9d3a5b815bc085e14fd001f6a1948768a3f4afefc8b8240dda329f984cb345c6363272ba4fe"
488 )
489 }
490
491 fn vector_sign_5() -> (PrivateKey, Vec<u8>, Signature) {
493 parse_sign_vector(
494 "0x47b8192d77bf871b62e87859d653922725724a5c031afeabc60bcef5ff665138",
495 "0xabababababababababababababababababababababababababababababababab",
496 "0x9674e2228034527f4c083206032b020310face156d4a4685e2fcaec2f6f3665aa635d90347b6ce124eb879266b1e801d185de36a0a289b85e9039662634f2eea1e02e670bc7ab849d006a70b2f93b84597558a05b879c8d445f387a5d5b653df"
497 )
498 }
499
500 fn vector_sign_6() -> (PrivateKey, Vec<u8>, Signature) {
502 parse_sign_vector(
503 "0x328388aff0d4a5b7dc9205abd374e7e98f3cd9f3418edb4eafda5fb16473d216",
504 "0x0000000000000000000000000000000000000000000000000000000000000000",
505 "0x948a7cb99f76d616c2c564ce9bf4a519f1bea6b0a624a02276443c245854219fabb8d4ce061d255af5330b078d5380681751aa7053da2c98bae898edc218c75f07e24d8802a17cd1f6833b71e58f5eb5b94208b4d0bb3848cecb075ea21be115"
506 )
507 }
508
509 fn vector_sign_7() -> (PrivateKey, Vec<u8>, Signature) {
511 parse_sign_vector(
512 "0x263dbd792f5b1be47ed85f8938c0f29586af0d3ac7b977f21c278fe1462040e3",
513 "0x0000000000000000000000000000000000000000000000000000000000000000",
514 "0xb6ed936746e01f8ecf281f020953fbf1f01debd5657c4a383940b020b26507f6076334f91e2366c96e9ab279fb5158090352ea1c5b0c9274504f4f0e7053af24802e51e4568d164fe986834f41e55c8e850ce1f98458c0cfc9ab380b55285a55"
515 )
516 }
517
518 fn vector_sign_8() -> (PrivateKey, Vec<u8>, Signature) {
520 parse_sign_vector(
521 "0x263dbd792f5b1be47ed85f8938c0f29586af0d3ac7b977f21c278fe1462040e3",
522 "0x5656565656565656565656565656565656565656565656565656565656565656",
523 "0x882730e5d03f6b42c3abc26d3372625034e1d871b65a8a6b900a56dae22da98abbe1b68f85e49fe7652a55ec3d0591c20767677e33e5cbb1207315c41a9ac03be39c2e7668edc043d6cb1d9fd93033caa8a1c5b0e84bedaeb6c64972503a43eb"
524 )
525 }
526
527 fn vector_sign_9() -> (PrivateKey, Vec<u8>, Signature) {
529 parse_sign_vector(
530 "0x263dbd792f5b1be47ed85f8938c0f29586af0d3ac7b977f21c278fe1462040e3",
531 "0xabababababababababababababababababababababababababababababababab",
532 "0x91347bccf740d859038fcdcaf233eeceb2a436bcaaee9b2aa3bfb70efe29dfb2677562ccbea1c8e061fb9971b0753c240622fab78489ce96768259fc01360346da5b9f579e5da0d941e4c6ba18a0e64906082375394f337fa1af2b7127b0d121"
533 )
534 }
535
536 fn parse_verify_vector(
538 public_key: &str,
539 msg: &str,
540 signature: &str,
541 ) -> (Result<PublicKey, Error>, Vec<u8>, Result<Signature, Error>) {
542 (
543 parse_public_key(public_key),
544 commonware_utils::from_hex_formatted(msg).unwrap(),
545 parse_signature(signature),
546 )
547 }
548
549 fn vector_verify_1() -> (
551 Result<PublicKey, Error>,
552 Vec<u8>,
553 Result<Signature, Error>,
554 bool,
555 ) {
556 let v = parse_verify_vector(
557 "0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
558 "0x1212121212121212121212121212121212121212121212121212121212121212",
559 "0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
560 );
561 (v.0, v.1, v.2, false)
562 }
563
564 fn vector_verify_2() -> (
566 Result<PublicKey, Error>,
567 Vec<u8>,
568 Result<Signature, Error>,
569 bool,
570 ) {
571 let v = parse_verify_vector(
572 "0xa491d1b0ecd9bb917989f0e74f0dea0422eac4a873e5e2644f368dffb9a6e20fd6e10c1b77654d067c0618f6e5a7f79a",
573 "0x5656565656565656565656565656565656565656565656565656565656565656",
574 "0x882730e5d03f6b42c3abc26d3372625034e1d871b65a8a6b900a56dae22da98abbe1b68f85e49fe7652a55ec3d0591c20767677e33e5cbb1207315c41a9ac03be39c2e7668edc043d6cb1d9fd93033caa8a1c5b0e84bedaeb6c64972ffffffff",
575 );
576 (v.0, v.1, v.2, false)
577 }
578
579 fn vector_verify_3() -> (
581 Result<PublicKey, Error>,
582 Vec<u8>,
583 Result<Signature, Error>,
584 bool,
585 ) {
586 let v = parse_verify_vector(
587 "0xb301803f8b5ac4a1133581fc676dfedc60d891dd5fa99028805e5ea5b08d3491af75d0707adab3b70c6a6a580217bf81",
588 "0x0000000000000000000000000000000000000000000000000000000000000000",
589 "0xb23c46be3a001c63ca711f87a005c200cc550b9429d5f4eb38d74322144f1b63926da3388979e5321012fb1a0526bcd100b5ef5fe72628ce4cd5e904aeaa3279527843fae5ca9ca675f4f51ed8f83bbf7155da9ecc9663100a885d5dffffffff",
590 );
591 (v.0, v.1, v.2, false)
592 }
593
594 fn vector_verify_4() -> (
596 Result<PublicKey, Error>,
597 Vec<u8>,
598 Result<Signature, Error>,
599 bool,
600 ) {
601 let v = parse_verify_vector(
602 "0xb53d21a4cfd562c469cc81514d4ce5a6b577d8403d32a394dc265dd190b47fa9f829fdd7963afdf972e5e77854051f6f",
603 "0x5656565656565656565656565656565656565656565656565656565656565656",
604 "0xa4efa926610b8bd1c8330c918b7a5e9bf374e53435ef8b7ec186abf62e1b1f65aeaaeb365677ac1d1172a1f5b44b4e6d022c252c58486c0a759fbdc7de15a756acc4d343064035667a594b4c2a6f0b0b421975977f297dba63ee2f63ffffffff",
605 );
606 (v.0, v.1, v.2, false)
607 }
608
609 fn vector_verify_5() -> (
611 Result<PublicKey, Error>,
612 Vec<u8>,
613 Result<Signature, Error>,
614 bool,
615 ) {
616 let v = parse_verify_vector(
617 "0xb301803f8b5ac4a1133581fc676dfedc60d891dd5fa99028805e5ea5b08d3491af75d0707adab3b70c6a6a580217bf81",
618 "0xabababababababababababababababababababababababababababababababab",
619 "0x9674e2228034527f4c083206032b020310face156d4a4685e2fcaec2f6f3665aa635d90347b6ce124eb879266b1e801d185de36a0a289b85e9039662634f2eea1e02e670bc7ab849d006a70b2f93b84597558a05b879c8d445f387a5ffffffff",
620 );
621 (v.0, v.1, v.2, false)
622 }
623
624 fn vector_verify_6() -> (
626 Result<PublicKey, Error>,
627 Vec<u8>,
628 Result<Signature, Error>,
629 bool,
630 ) {
631 let v = parse_verify_vector(
632 "0xa491d1b0ecd9bb917989f0e74f0dea0422eac4a873e5e2644f368dffb9a6e20fd6e10c1b77654d067c0618f6e5a7f79a",
633 "0xabababababababababababababababababababababababababababababababab",
634 "0x91347bccf740d859038fcdcaf233eeceb2a436bcaaee9b2aa3bfb70efe29dfb2677562ccbea1c8e061fb9971b0753c240622fab78489ce96768259fc01360346da5b9f579e5da0d941e4c6ba18a0e64906082375394f337fa1af2b71ffffffff",
635 );
636 (v.0, v.1, v.2, false)
637 }
638
639 fn vector_verify_7() -> (
641 Result<PublicKey, Error>,
642 Vec<u8>,
643 Result<Signature, Error>,
644 bool,
645 ) {
646 let v = parse_verify_vector(
647 "0xb53d21a4cfd562c469cc81514d4ce5a6b577d8403d32a394dc265dd190b47fa9f829fdd7963afdf972e5e77854051f6f",
648 "0xabababababababababababababababababababababababababababababababab",
649 "0xae82747ddeefe4fd64cf9cedb9b04ae3e8a43420cd255e3c7cd06a8d88b7c7f8638543719981c5d16fa3527c468c25f0026704a6951bde891360c7e8d12ddee0559004ccdbe6046b55bae1b257ee97f7cdb955773d7cf29adf3ccbb9ffffffff",
650 );
651 (v.0, v.1, v.2, false)
652 }
653
654 fn vector_verify_8() -> (
656 Result<PublicKey, Error>,
657 Vec<u8>,
658 Result<Signature, Error>,
659 bool,
660 ) {
661 let v = parse_verify_vector(
662 "0xb301803f8b5ac4a1133581fc676dfedc60d891dd5fa99028805e5ea5b08d3491af75d0707adab3b70c6a6a580217bf81",
663 "0x5656565656565656565656565656565656565656565656565656565656565656",
664 "0xaf1390c3c47acdb37131a51216da683c509fce0e954328a59f93aebda7e4ff974ba208d9a4a2a2389f892a9d418d618418dd7f7a6bc7aa0da999a9d3a5b815bc085e14fd001f6a1948768a3f4afefc8b8240dda329f984cb345c6363ffffffff",
665 );
666 (v.0, v.1, v.2, false)
667 }
668
669 fn vector_verify_9() -> (
671 Result<PublicKey, Error>,
672 Vec<u8>,
673 Result<Signature, Error>,
674 bool,
675 ) {
676 let v = parse_verify_vector(
677 "0xb53d21a4cfd562c469cc81514d4ce5a6b577d8403d32a394dc265dd190b47fa9f829fdd7963afdf972e5e77854051f6f",
678 "0x0000000000000000000000000000000000000000000000000000000000000000",
679 "0x948a7cb99f76d616c2c564ce9bf4a519f1bea6b0a624a02276443c245854219fabb8d4ce061d255af5330b078d5380681751aa7053da2c98bae898edc218c75f07e24d8802a17cd1f6833b71e58f5eb5b94208b4d0bb3848cecb075effffffff",
680 );
681 (v.0, v.1, v.2, false)
682 }
683
684 fn vector_verify_10() -> (
686 Result<PublicKey, Error>,
687 Vec<u8>,
688 Result<Signature, Error>,
689 bool,
690 ) {
691 let v= parse_verify_vector(
692 "0xa491d1b0ecd9bb917989f0e74f0dea0422eac4a873e5e2644f368dffb9a6e20fd6e10c1b77654d067c0618f6e5a7f79a",
693 "0x0000000000000000000000000000000000000000000000000000000000000000",
694 "0xb6ed936746e01f8ecf281f020953fbf1f01debd5657c4a383940b020b26507f6076334f91e2366c96e9ab279fb5158090352ea1c5b0c9274504f4f0e7053af24802e51e4568d164fe986834f41e55c8e850ce1f98458c0cfc9ab380bffffffff",
695 );
696 (v.0, v.1, v.2, false)
697 }
698
699 fn vector_verify_11() -> (
701 Result<PublicKey, Error>,
702 Vec<u8>,
703 Result<Signature, Error>,
704 bool,
705 ) {
706 let v= parse_verify_vector(
707 "0xa491d1b0ecd9bb917989f0e74f0dea0422eac4a873e5e2644f368dffb9a6e20fd6e10c1b77654d067c0618f6e5a7f79a",
708 "0x5656565656565656565656565656565656565656565656565656565656565656",
709 "0x882730e5d03f6b42c3abc26d3372625034e1d871b65a8a6b900a56dae22da98abbe1b68f85e49fe7652a55ec3d0591c20767677e33e5cbb1207315c41a9ac03be39c2e7668edc043d6cb1d9fd93033caa8a1c5b0e84bedaeb6c64972503a43eb",
710 );
711 (v.0, v.1, v.2, true)
712 }
713
714 fn vector_verify_12() -> (
716 Result<PublicKey, Error>,
717 Vec<u8>,
718 Result<Signature, Error>,
719 bool,
720 ) {
721 let v = parse_verify_vector(
722 "0xb301803f8b5ac4a1133581fc676dfedc60d891dd5fa99028805e5ea5b08d3491af75d0707adab3b70c6a6a580217bf81",
723 "0x0000000000000000000000000000000000000000000000000000000000000000",
724 "0xb23c46be3a001c63ca711f87a005c200cc550b9429d5f4eb38d74322144f1b63926da3388979e5321012fb1a0526bcd100b5ef5fe72628ce4cd5e904aeaa3279527843fae5ca9ca675f4f51ed8f83bbf7155da9ecc9663100a885d5dc6df96d9",
725 );
726 (v.0, v.1, v.2, true)
727 }
728
729 fn vector_verify_13() -> (
731 Result<PublicKey, Error>,
732 Vec<u8>,
733 Result<Signature, Error>,
734 bool,
735 ) {
736 let v = parse_verify_vector(
737 "0xb53d21a4cfd562c469cc81514d4ce5a6b577d8403d32a394dc265dd190b47fa9f829fdd7963afdf972e5e77854051f6f",
738 "0x5656565656565656565656565656565656565656565656565656565656565656",
739 "0xa4efa926610b8bd1c8330c918b7a5e9bf374e53435ef8b7ec186abf62e1b1f65aeaaeb365677ac1d1172a1f5b44b4e6d022c252c58486c0a759fbdc7de15a756acc4d343064035667a594b4c2a6f0b0b421975977f297dba63ee2f63ffe47bb6",
740 );
741 (v.0, v.1, v.2, true)
742 }
743
744 fn vector_verify_14() -> (
746 Result<PublicKey, Error>,
747 Vec<u8>,
748 Result<Signature, Error>,
749 bool,
750 ) {
751 let v = parse_verify_vector(
752 "0xb301803f8b5ac4a1133581fc676dfedc60d891dd5fa99028805e5ea5b08d3491af75d0707adab3b70c6a6a580217bf81",
753 "0xabababababababababababababababababababababababababababababababab",
754 "0x9674e2228034527f4c083206032b020310face156d4a4685e2fcaec2f6f3665aa635d90347b6ce124eb879266b1e801d185de36a0a289b85e9039662634f2eea1e02e670bc7ab849d006a70b2f93b84597558a05b879c8d445f387a5d5b653df",
755 );
756 (v.0, v.1, v.2, true)
757 }
758
759 fn vector_verify_15() -> (
761 Result<PublicKey, Error>,
762 Vec<u8>,
763 Result<Signature, Error>,
764 bool,
765 ) {
766 let v = parse_verify_vector(
767 "0xa491d1b0ecd9bb917989f0e74f0dea0422eac4a873e5e2644f368dffb9a6e20fd6e10c1b77654d067c0618f6e5a7f79a",
768 "0xabababababababababababababababababababababababababababababababab",
769 "0x91347bccf740d859038fcdcaf233eeceb2a436bcaaee9b2aa3bfb70efe29dfb2677562ccbea1c8e061fb9971b0753c240622fab78489ce96768259fc01360346da5b9f579e5da0d941e4c6ba18a0e64906082375394f337fa1af2b7127b0d121",
770 );
771 (v.0, v.1, v.2, true)
772 }
773
774 fn vector_verify_16() -> (
776 Result<PublicKey, Error>,
777 Vec<u8>,
778 Result<Signature, Error>,
779 bool,
780 ) {
781 let v = parse_verify_vector(
782 "0xb53d21a4cfd562c469cc81514d4ce5a6b577d8403d32a394dc265dd190b47fa9f829fdd7963afdf972e5e77854051f6f",
783 "0xabababababababababababababababababababababababababababababababab",
784 "0xae82747ddeefe4fd64cf9cedb9b04ae3e8a43420cd255e3c7cd06a8d88b7c7f8638543719981c5d16fa3527c468c25f0026704a6951bde891360c7e8d12ddee0559004ccdbe6046b55bae1b257ee97f7cdb955773d7cf29adf3ccbb9975e4eb9",
785 );
786 (v.0, v.1, v.2, true)
787 }
788
789 fn vector_verify_17() -> (
791 Result<PublicKey, Error>,
792 Vec<u8>,
793 Result<Signature, Error>,
794 bool,
795 ) {
796 let v = parse_verify_vector(
797 "0xb301803f8b5ac4a1133581fc676dfedc60d891dd5fa99028805e5ea5b08d3491af75d0707adab3b70c6a6a580217bf81",
798 "0x5656565656565656565656565656565656565656565656565656565656565656",
799 "0xaf1390c3c47acdb37131a51216da683c509fce0e954328a59f93aebda7e4ff974ba208d9a4a2a2389f892a9d418d618418dd7f7a6bc7aa0da999a9d3a5b815bc085e14fd001f6a1948768a3f4afefc8b8240dda329f984cb345c6363272ba4fe",
800 );
801 (v.0, v.1, v.2, true)
802 }
803
804 fn vector_verify_18() -> (
806 Result<PublicKey, Error>,
807 Vec<u8>,
808 Result<Signature, Error>,
809 bool,
810 ) {
811 let v = parse_verify_vector(
812 "0xb53d21a4cfd562c469cc81514d4ce5a6b577d8403d32a394dc265dd190b47fa9f829fdd7963afdf972e5e77854051f6f",
813 "0x0000000000000000000000000000000000000000000000000000000000000000",
814 "0x948a7cb99f76d616c2c564ce9bf4a519f1bea6b0a624a02276443c245854219fabb8d4ce061d255af5330b078d5380681751aa7053da2c98bae898edc218c75f07e24d8802a17cd1f6833b71e58f5eb5b94208b4d0bb3848cecb075ea21be115",
815 );
816 (v.0, v.1, v.2, true)
817 }
818
819 fn vector_verify_19() -> (
821 Result<PublicKey, Error>,
822 Vec<u8>,
823 Result<Signature, Error>,
824 bool,
825 ) {
826 let v = parse_verify_vector(
827 "0xa491d1b0ecd9bb917989f0e74f0dea0422eac4a873e5e2644f368dffb9a6e20fd6e10c1b77654d067c0618f6e5a7f79a",
828 "0x0000000000000000000000000000000000000000000000000000000000000000",
829 "0xb6ed936746e01f8ecf281f020953fbf1f01debd5657c4a383940b020b26507f6076334f91e2366c96e9ab279fb5158090352ea1c5b0c9274504f4f0e7053af24802e51e4568d164fe986834f41e55c8e850ce1f98458c0cfc9ab380b55285a55",
830 );
831 (v.0, v.1, v.2, true)
832 }
833
834 fn vector_verify_20() -> (
836 Result<PublicKey, Error>,
837 Vec<u8>,
838 Result<Signature, Error>,
839 bool,
840 ) {
841 let v = parse_verify_vector(
842 "0xa491d1b0ecd9bb917989f0e74f0dea0422eac4a873e5e2644f368dffb9a6e20fd6e10c1b77654d067c0618f6e5a7f79a",
843 "0x5656565656565656565656565656565656565656565656565656565656565656",
844 "0xa4efa926610b8bd1c8330c918b7a5e9bf374e53435ef8b7ec186abf62e1b1f65aeaaeb365677ac1d1172a1f5b44b4e6d022c252c58486c0a759fbdc7de15a756acc4d343064035667a594b4c2a6f0b0b421975977f297dba63ee2f63ffe47bb6",
845 );
846 (v.0, v.1, v.2, false)
847 }
848
849 fn vector_verify_21() -> (
851 Result<PublicKey, Error>,
852 Vec<u8>,
853 Result<Signature, Error>,
854 bool,
855 ) {
856 let v = parse_verify_vector(
857 "0xb301803f8b5ac4a1133581fc676dfedc60d891dd5fa99028805e5ea5b08d3491af75d0707adab3b70c6a6a580217bf81",
858 "0x0000000000000000000000000000000000000000000000000000000000000000",
859 "0xb6ed936746e01f8ecf281f020953fbf1f01debd5657c4a383940b020b26507f6076334f91e2366c96e9ab279fb5158090352ea1c5b0c9274504f4f0e7053af24802e51e4568d164fe986834f41e55c8e850ce1f98458c0cfc9ab380b55285a55",
860 );
861 (v.0, v.1, v.2, false)
862 }
863
864 fn vector_verify_22() -> (
866 Result<PublicKey, Error>,
867 Vec<u8>,
868 Result<Signature, Error>,
869 bool,
870 ) {
871 let v = parse_verify_vector(
872 "0xb53d21a4cfd562c469cc81514d4ce5a6b577d8403d32a394dc265dd190b47fa9f829fdd7963afdf972e5e77854051f6f",
873 "0x5656565656565656565656565656565656565656565656565656565656565656",
874 "0xaf1390c3c47acdb37131a51216da683c509fce0e954328a59f93aebda7e4ff974ba208d9a4a2a2389f892a9d418d618418dd7f7a6bc7aa0da999a9d3a5b815bc085e14fd001f6a1948768a3f4afefc8b8240dda329f984cb345c6363272ba4fe",
875 );
876 (v.0, v.1, v.2, false)
877 }
878
879 fn vector_verify_23() -> (
881 Result<PublicKey, Error>,
882 Vec<u8>,
883 Result<Signature, Error>,
884 bool,
885 ) {
886 let v = parse_verify_vector(
887 "0xb301803f8b5ac4a1133581fc676dfedc60d891dd5fa99028805e5ea5b08d3491af75d0707adab3b70c6a6a580217bf81",
888 "0xabababababababababababababababababababababababababababababababab",
889 "0x91347bccf740d859038fcdcaf233eeceb2a436bcaaee9b2aa3bfb70efe29dfb2677562ccbea1c8e061fb9971b0753c240622fab78489ce96768259fc01360346da5b9f579e5da0d941e4c6ba18a0e64906082375394f337fa1af2b7127b0d121",
890 );
891 (v.0, v.1, v.2, false)
892 }
893
894 fn vector_verify_24() -> (
896 Result<PublicKey, Error>,
897 Vec<u8>,
898 Result<Signature, Error>,
899 bool,
900 ) {
901 let v = parse_verify_vector(
902 "0xa491d1b0ecd9bb917989f0e74f0dea0422eac4a873e5e2644f368dffb9a6e20fd6e10c1b77654d067c0618f6e5a7f79a",
903 "0xabababababababababababababababababababababababababababababababab",
904 "0xae82747ddeefe4fd64cf9cedb9b04ae3e8a43420cd255e3c7cd06a8d88b7c7f8638543719981c5d16fa3527c468c25f0026704a6951bde891360c7e8d12ddee0559004ccdbe6046b55bae1b257ee97f7cdb955773d7cf29adf3ccbb9975e4eb9",
905 );
906 (v.0, v.1, v.2, false)
907 }
908
909 fn vector_verify_25() -> (
911 Result<PublicKey, Error>,
912 Vec<u8>,
913 Result<Signature, Error>,
914 bool,
915 ) {
916 let v = parse_verify_vector(
917 "0xb53d21a4cfd562c469cc81514d4ce5a6b577d8403d32a394dc265dd190b47fa9f829fdd7963afdf972e5e77854051f6f",
918 "0xabababababababababababababababababababababababababababababababab",
919 "0x9674e2228034527f4c083206032b020310face156d4a4685e2fcaec2f6f3665aa635d90347b6ce124eb879266b1e801d185de36a0a289b85e9039662634f2eea1e02e670bc7ab849d006a70b2f93b84597558a05b879c8d445f387a5d5b653df",
920 );
921 (v.0, v.1, v.2, false)
922 }
923
924 fn vector_verify_26() -> (
926 Result<PublicKey, Error>,
927 Vec<u8>,
928 Result<Signature, Error>,
929 bool,
930 ) {
931 let v = parse_verify_vector(
932 "0xb301803f8b5ac4a1133581fc676dfedc60d891dd5fa99028805e5ea5b08d3491af75d0707adab3b70c6a6a580217bf81",
933 "0x5656565656565656565656565656565656565656565656565656565656565656",
934 "0x882730e5d03f6b42c3abc26d3372625034e1d871b65a8a6b900a56dae22da98abbe1b68f85e49fe7652a55ec3d0591c20767677e33e5cbb1207315c41a9ac03be39c2e7668edc043d6cb1d9fd93033caa8a1c5b0e84bedaeb6c64972503a43eb",
935 );
936 (v.0, v.1, v.2, false)
937 }
938
939 fn vector_verify_27() -> (
941 Result<PublicKey, Error>,
942 Vec<u8>,
943 Result<Signature, Error>,
944 bool,
945 ) {
946 let v = parse_verify_vector(
947 "0xb53d21a4cfd562c469cc81514d4ce5a6b577d8403d32a394dc265dd190b47fa9f829fdd7963afdf972e5e77854051f6f",
948 "0x0000000000000000000000000000000000000000000000000000000000000000",
949 "0xb23c46be3a001c63ca711f87a005c200cc550b9429d5f4eb38d74322144f1b63926da3388979e5321012fb1a0526bcd100b5ef5fe72628ce4cd5e904aeaa3279527843fae5ca9ca675f4f51ed8f83bbf7155da9ecc9663100a885d5dc6df96d9",
950 );
951 (v.0, v.1, v.2, false)
952 }
953
954 fn vector_verify_28() -> (
956 Result<PublicKey, Error>,
957 Vec<u8>,
958 Result<Signature, Error>,
959 bool,
960 ) {
961 let v = parse_verify_vector(
962 "0xa491d1b0ecd9bb917989f0e74f0dea0422eac4a873e5e2644f368dffb9a6e20fd6e10c1b77654d067c0618f6e5a7f79a",
963 "0x0000000000000000000000000000000000000000000000000000000000000000",
964 "0x948a7cb99f76d616c2c564ce9bf4a519f1bea6b0a624a02276443c245854219fabb8d4ce061d255af5330b078d5380681751aa7053da2c98bae898edc218c75f07e24d8802a17cd1f6833b71e58f5eb5b94208b4d0bb3848cecb075ea21be115",
965 );
966 (v.0, v.1, v.2, false)
967 }
968
969 fn vector_verify_29() -> (
971 Result<PublicKey, Error>,
972 Vec<u8>,
973 Result<Signature, Error>,
974 bool,
975 ) {
976 let v= parse_verify_vector(
977 "0x97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb",
978 "0x1212121212121212121212121212121212121212121212121212121212121212",
979 "0xa42ae16f1c2a5fa69c04cb5998d2add790764ce8dd45bf25b29b4700829232052b52352dcff1cf255b3a7810ad7269601810f03b2bc8b68cf289cf295b206770605a190b6842583e47c3d1c0f73c54907bfb2a602157d46a4353a20283018763",
980 );
981 (v.0, v.1, v.2, true)
982 }
983}