1
1
use core:: { fmt, hash} ;
2
- use { types:: * , Context , NonceFn , PublicKey , Signature } ;
2
+ use { types:: * , Context , KeyPair , NonceFn , PublicKey , Signature , XOnlyPublicKey } ;
3
3
4
4
/// Rangeproof maximum length
5
5
pub const RANGEPROOF_MAX_LENGTH : size_t = 5134 ;
@@ -349,6 +349,19 @@ extern "C" {
349
349
input_len : size_t ,
350
350
) -> c_int ;
351
351
352
+ #[ cfg_attr(
353
+ not( feature = "external-symbols" ) ,
354
+ link_name = "rustsecp256k1zkp_v0_6_0_musig_pubkey_agg"
355
+ ) ]
356
+ pub fn secp256k1_musig_pubkey_agg (
357
+ cx : * const Context ,
358
+ scratch : * mut ScratchSpace ,
359
+ combined_pk : * mut XOnlyPublicKey ,
360
+ pre_session : * mut MusigKeyaggCache ,
361
+ pubkeys : * const * const XOnlyPublicKey ,
362
+ n_pubkeys : size_t ,
363
+ ) -> c_int ;
364
+
352
365
#[ cfg_attr(
353
366
not( feature = "external-symbols" ) ,
354
367
link_name = "rustsecp256k1zkp_v0_6_0_whitelist_signature_serialize"
@@ -360,6 +373,29 @@ extern "C" {
360
373
sig : * const WhitelistSignature ,
361
374
) -> c_int ;
362
375
376
+ #[ cfg_attr(
377
+ not( feature = "external-symbols" ) ,
378
+ link_name = "rustsecp256k1zkp_v0_6_0_musig_pubkey_ec_tweak_add"
379
+ ) ]
380
+ pub fn secp256k1_musig_pubkey_ec_tweak_add (
381
+ cx : * const Context ,
382
+ output_pubkey : * mut PublicKey ,
383
+ keyagg_cache : * mut MusigKeyaggCache ,
384
+ tweak32 : * const c_uchar ,
385
+ ) -> c_int ;
386
+
387
+ #[ cfg_attr(
388
+ not( feature = "external-symbols" ) ,
389
+ link_name = "rustsecp256k1zkp_v0_6_0_musig_pubkey_xonly_tweak_add"
390
+ ) ]
391
+ pub fn secp256k1_musig_pubkey_xonly_tweak_add (
392
+ cx : * const Context ,
393
+ output_pubkey : * mut XOnlyPublicKey ,
394
+ keyagg_cache : * mut MusigKeyaggCache ,
395
+ tweak32 : * const c_uchar ,
396
+ ) -> c_int ;
397
+
398
+
363
399
#[ cfg_attr(
364
400
not( feature = "external-symbols" ) ,
365
401
link_name = "rustsecp256k1zkp_v0_6_0_whitelist_sign"
@@ -378,6 +414,21 @@ extern "C" {
378
414
noncedata : * mut c_void ,
379
415
) -> c_int ;
380
416
417
+ #[ cfg_attr(
418
+ not( feature = "external-symbols" ) ,
419
+ link_name = "rustsecp256k1zkp_v0_6_0_musig_nonce_gen"
420
+ ) ]
421
+ pub fn secp256k1_musig_nonce_gen (
422
+ cx : * const Context ,
423
+ secnonce : * mut MusigSecNonce ,
424
+ pubnonce : * mut MusigPubNonce ,
425
+ session_id32 : * const c_uchar ,
426
+ seckey : * const c_uchar ,
427
+ msg32 : * const c_uchar ,
428
+ keyagg_cache : * const MusigKeyaggCache ,
429
+ extra_input32 : * const c_uchar ,
430
+ ) -> c_int ;
431
+
381
432
#[ cfg_attr(
382
433
not( feature = "external-symbols" ) ,
383
434
link_name = "rustsecp256k1zkp_v0_6_0_whitelist_verify"
@@ -390,6 +441,162 @@ extern "C" {
390
441
n_keys : size_t ,
391
442
sub_pubkey : * const PublicKey ,
392
443
) -> c_int ;
444
+
445
+ #[ cfg_attr(
446
+ not( feature = "external-symbols" ) ,
447
+ link_name = "rustsecp256k1zkp_v0_6_0_musig_nonce_agg"
448
+ ) ]
449
+ pub fn secp256k1_musig_nonce_agg (
450
+ cx : * const Context ,
451
+ aggnonce : * const MusigAggNonce ,
452
+ pubnonces : * const * const MusigPubNonce ,
453
+ n_pubnonces : size_t ,
454
+ ) -> c_int ;
455
+
456
+ #[ cfg_attr(
457
+ not( feature = "external-symbols" ) ,
458
+ link_name = "rustsecp256k1zkp_v0_6_0_musig_nonce_process"
459
+ ) ]
460
+ pub fn secp256k1_musig_nonce_process (
461
+ cx : * const Context ,
462
+ session : * mut MusigSession ,
463
+ aggnonce : * const MusigAggNonce ,
464
+ msg32 : * const c_uchar ,
465
+ keyagg_cache : * const MusigKeyaggCache ,
466
+ adaptor : * const PublicKey ,
467
+ ) -> c_int ;
468
+
469
+ #[ cfg_attr(
470
+ not( feature = "external-symbols" ) ,
471
+ link_name = "rustsecp256k1zkp_v0_6_0_musig_pubnonce_serialize"
472
+ ) ]
473
+ pub fn secp256k1_musig_pubnonce_serialize (
474
+ cx : * const Context ,
475
+ out32 : * mut c_uchar ,
476
+ nonce : * const MusigPubNonce ,
477
+ ) -> c_int ;
478
+
479
+ #[ cfg_attr(
480
+ not( feature = "external-symbols" ) ,
481
+ link_name = "rustsecp256k1zkp_v0_6_0_musig_pubnonce_parse"
482
+ ) ]
483
+ pub fn secp256k1_musig_pubnonce_parse (
484
+ cx : * const Context ,
485
+ nonce : * mut MusigPubNonce ,
486
+ in32 : * const c_uchar ,
487
+ ) -> c_int ;
488
+
489
+ #[ cfg_attr(
490
+ not( feature = "external-symbols" ) ,
491
+ link_name = "rustsecp256k1zkp_v0_6_0_musig_aggnonce_serialize"
492
+ ) ]
493
+ pub fn secp256k1_musig_aggnonce_serialize (
494
+ cx : * const Context ,
495
+ out32 : * mut c_uchar ,
496
+ nonce : * const MusigAggNonce ,
497
+ ) -> c_int ;
498
+
499
+ #[ cfg_attr(
500
+ not( feature = "external-symbols" ) ,
501
+ link_name = "rustsecp256k1zkp_v0_6_0_musig_aggnonce_parse"
502
+ ) ]
503
+ pub fn secp256k1_musig_aggnonce_parse (
504
+ cx : * const Context ,
505
+ nonce : * mut MusigAggNonce ,
506
+ in32 : * const c_uchar ,
507
+ ) -> c_int ;
508
+
509
+ #[ cfg_attr(
510
+ not( feature = "external-symbols" ) ,
511
+ link_name = "rustsecp256k1zkp_v0_6_0_musig_partial_sig_serialize"
512
+ ) ]
513
+ pub fn secp256k1_musig_partial_sig_serialize (
514
+ cx : * const Context ,
515
+ out32 : * mut c_uchar ,
516
+ sig : * const MusigPartialSignature ,
517
+ ) -> c_int ;
518
+
519
+ #[ cfg_attr(
520
+ not( feature = "external-symbols" ) ,
521
+ link_name = "rustsecp256k1zkp_v0_6_0_musig_partial_sig_parse"
522
+ ) ]
523
+ pub fn secp256k1_musig_partial_sig_parse (
524
+ cx : * const Context ,
525
+ sig : * mut MusigPartialSignature ,
526
+ in32 : * const c_uchar ,
527
+ ) -> c_int ;
528
+
529
+ #[ cfg_attr(
530
+ not( feature = "external-symbols" ) ,
531
+ link_name = "rustsecp256k1zkp_v0_6_0_musig_partial_sign"
532
+ ) ]
533
+ pub fn secp256k1_musig_partial_sign (
534
+ cx : * const Context ,
535
+ partial_sig : * mut MusigPartialSignature ,
536
+ secnonce : * mut MusigSecNonce ,
537
+ keypair : * const KeyPair ,
538
+ keyagg_cache : * const MusigKeyaggCache ,
539
+ session : * const MusigSession ,
540
+ ) -> c_int ;
541
+
542
+ #[ cfg_attr(
543
+ not( feature = "external-symbols" ) ,
544
+ link_name = "rustsecp256k1zkp_v0_6_0_musig_partial_sig_verify"
545
+ ) ]
546
+ pub fn secp256k1_musig_partial_sig_verify (
547
+ cx : * const Context ,
548
+ partial_sig : * const MusigPartialSignature ,
549
+ pubnonce : * const MusigPubNonce ,
550
+ pubkey : * const XOnlyPublicKey ,
551
+ keyagg_cache : * const MusigKeyaggCache ,
552
+ session : * const MusigSession ,
553
+ ) -> c_int ;
554
+
555
+ #[ cfg_attr(
556
+ not( feature = "external-symbols" ) ,
557
+ link_name = "rustsecp256k1zkp_v0_6_0_musig_partial_sig_agg"
558
+ ) ]
559
+ pub fn secp256k1_musig_partial_sig_agg (
560
+ cx : * const Context ,
561
+ sig64 : * mut c_uchar ,
562
+ session : * const MusigSession ,
563
+ partial_sigs : * const * const MusigPartialSignature ,
564
+ n_sigs : size_t ,
565
+ ) -> c_int ;
566
+
567
+ #[ cfg_attr(
568
+ not( feature = "external-symbols" ) ,
569
+ link_name = "rustsecp256k1zkp_v0_6_0_musig_nonce_parity"
570
+ ) ]
571
+ pub fn secp256k1_musig_nonce_parity (
572
+ cx : * const Context ,
573
+ nonce_parity : * mut c_int ,
574
+ session : * mut MusigSession ,
575
+ ) -> c_int ;
576
+
577
+ #[ cfg_attr(
578
+ not( feature = "external-symbols" ) ,
579
+ link_name = "rustsecp256k1zkp_v0_6_0_musig_adapt"
580
+ ) ]
581
+ pub fn secp256k1_musig_adapt (
582
+ cx : * const Context ,
583
+ sig64 : * mut c_uchar ,
584
+ pre_sig64 : * const c_uchar ,
585
+ sec_adaptor32 : * const c_uchar ,
586
+ nonce_parity : c_int ,
587
+ ) -> c_int ;
588
+
589
+ #[ cfg_attr(
590
+ not( feature = "external-symbols" ) ,
591
+ link_name = "rustsecp256k1zkp_v0_6_0_musig_extract_adaptor"
592
+ ) ]
593
+ pub fn secp256k1_musig_extract_adaptor (
594
+ cx : * const Context ,
595
+ sec_adaptor32 : * mut c_uchar ,
596
+ sig64 : * const c_uchar ,
597
+ pre_sig64 : * const c_uchar ,
598
+ nonce_parity : c_int ,
599
+ ) -> c_int ;
393
600
}
394
601
395
602
#[ repr( C ) ]
@@ -587,3 +794,85 @@ impl EcdsaAdaptorSignature {
587
794
& self . 0
588
795
}
589
796
}
797
+
798
+ #[ repr( C ) ]
799
+ pub struct ScratchSpace ( c_int ) ;
800
+
801
+ pub const MUSIG_KEYAGG_LEN : usize = 165 ;
802
+ pub const MUSIG_SECNONCE_LEN : usize = 68 ;
803
+ pub const MUSIG_PUBNONCE_LEN : usize = 132 ;
804
+ pub const MUSIG_AGGNONCE_LEN : usize = 132 ;
805
+ pub const MUSIG_SESSION_LEN : usize = 133 ;
806
+ pub const MUSIG_PART_SIG_LEN : usize = 36 ;
807
+
808
+ #[ repr( C ) ]
809
+ #[ derive( Debug , Copy , Clone , Eq , PartialEq ) ]
810
+ pub struct MusigKeyaggCache {
811
+ pub data : [ c_uchar ; MUSIG_KEYAGG_LEN ] ,
812
+ }
813
+
814
+ impl MusigKeyaggCache {
815
+ pub fn new ( ) -> Self {
816
+ Self { data : [ 0 ; MUSIG_KEYAGG_LEN ] }
817
+ }
818
+ }
819
+
820
+ #[ repr( C ) ]
821
+ #[ derive( Debug , Copy , Clone , Eq , PartialEq ) ]
822
+ pub struct MusigSecNonce {
823
+ pub data : [ c_uchar ; MUSIG_SECNONCE_LEN ] ,
824
+ }
825
+
826
+ impl MusigSecNonce {
827
+ pub fn new ( ) -> Self {
828
+ Self { data : [ 0 ; MUSIG_SECNONCE_LEN ] }
829
+ }
830
+ }
831
+
832
+ #[ repr( C ) ]
833
+ #[ derive( Debug , Copy , Clone , Eq , PartialEq ) ]
834
+ pub struct MusigPubNonce {
835
+ pub data : [ c_uchar ; MUSIG_PUBNONCE_LEN ] ,
836
+ }
837
+
838
+ impl MusigPubNonce {
839
+ pub fn new ( ) -> Self {
840
+ Self { data : [ 0 ; MUSIG_PUBNONCE_LEN ] }
841
+ }
842
+ }
843
+
844
+ #[ repr( C ) ]
845
+ #[ derive( Debug , Copy , Clone , Eq , PartialEq ) ]
846
+ pub struct MusigAggNonce {
847
+ pub data : [ c_uchar ; MUSIG_AGGNONCE_LEN ] ,
848
+ }
849
+
850
+ impl MusigAggNonce {
851
+ pub fn new ( ) -> Self {
852
+ Self { data : [ 0 ; MUSIG_AGGNONCE_LEN ] }
853
+ }
854
+ }
855
+
856
+ #[ repr( C ) ]
857
+ #[ derive( Debug , Copy , Clone , Eq , PartialEq ) ]
858
+ pub struct MusigSession {
859
+ pub data : [ c_uchar ; MUSIG_SESSION_LEN ] ,
860
+ }
861
+
862
+ impl MusigSession {
863
+ pub fn new ( ) -> Self {
864
+ Self { data : [ 0 ; MUSIG_SESSION_LEN ] }
865
+ }
866
+ }
867
+
868
+ #[ repr( C ) ]
869
+ #[ derive( Debug , Copy , Clone , Eq , PartialEq ) ]
870
+ pub struct MusigPartialSignature {
871
+ pub data : [ c_uchar ; MUSIG_PART_SIG_LEN ] ,
872
+ }
873
+
874
+ impl MusigPartialSignature {
875
+ pub fn new ( ) -> Self {
876
+ Self { data : [ 0 ; MUSIG_PART_SIG_LEN ] }
877
+ }
878
+ }
0 commit comments