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