@@ -429,12 +429,23 @@ where
429
429
///
430
430
/// A key package message may only be used once.
431
431
#[ cfg_attr( not( mls_build_async) , maybe_async:: must_be_sync) ]
432
- pub async fn generate_key_package_message ( & self ) -> Result < MlsMessage , MlsError > {
433
- Ok ( self . generate_key_package ( ) . await ?. key_package_message ( ) )
432
+ pub async fn generate_key_package_message (
433
+ & self ,
434
+ key_package_extensions : ExtensionList ,
435
+ leaf_node_extensions : ExtensionList ,
436
+ ) -> Result < MlsMessage , MlsError > {
437
+ Ok ( self
438
+ . generate_key_package ( key_package_extensions, leaf_node_extensions)
439
+ . await ?
440
+ . key_package_message ( ) )
434
441
}
435
442
436
443
#[ cfg_attr( not( mls_build_async) , maybe_async:: must_be_sync) ]
437
- async fn generate_key_package ( & self ) -> Result < KeyPackageGeneration , MlsError > {
444
+ async fn generate_key_package (
445
+ & self ,
446
+ key_package_extensions : ExtensionList ,
447
+ leaf_node_extensions : ExtensionList ,
448
+ ) -> Result < KeyPackageGeneration , MlsError > {
438
449
let ( signing_identity, cipher_suite) = self . signing_identity ( ) ?;
439
450
440
451
let cipher_suite_provider = self
@@ -454,8 +465,8 @@ where
454
465
. generate (
455
466
self . config . lifetime ( ) ,
456
467
self . config . capabilities ( ) ,
457
- self . config . key_package_extensions ( ) ,
458
- self . config . leaf_node_extensions ( ) ,
468
+ key_package_extensions,
469
+ leaf_node_extensions,
459
470
)
460
471
. await ?;
461
472
@@ -486,6 +497,7 @@ where
486
497
& self ,
487
498
group_id : Vec < u8 > ,
488
499
group_context_extensions : ExtensionList ,
500
+ leaf_node_extensions : ExtensionList ,
489
501
) -> Result < Group < C > , MlsError > {
490
502
let ( signing_identity, cipher_suite) = self . signing_identity ( ) ?;
491
503
@@ -496,6 +508,7 @@ where
496
508
self . version ,
497
509
signing_identity. clone ( ) ,
498
510
group_context_extensions,
511
+ leaf_node_extensions,
499
512
self . signer ( ) ?. clone ( ) ,
500
513
)
501
514
. await
@@ -510,6 +523,7 @@ where
510
523
pub async fn create_group (
511
524
& self ,
512
525
group_context_extensions : ExtensionList ,
526
+ leaf_node_extensions : ExtensionList ,
513
527
) -> Result < Group < C > , MlsError > {
514
528
let ( signing_identity, cipher_suite) = self . signing_identity ( ) ?;
515
529
@@ -520,6 +534,7 @@ where
520
534
self . version ,
521
535
signing_identity. clone ( ) ,
522
536
group_context_extensions,
537
+ leaf_node_extensions,
523
538
self . signer ( ) ?. clone ( ) ,
524
539
)
525
540
. await
@@ -674,6 +689,8 @@ where
674
689
group_info : & MlsMessage ,
675
690
tree_data : Option < crate :: group:: ExportedTree < ' _ > > ,
676
691
authenticated_data : Vec < u8 > ,
692
+ key_package_extensions : ExtensionList ,
693
+ leaf_node_extensions : ExtensionList ,
677
694
) -> Result < MlsMessage , MlsError > {
678
695
let protocol_version = group_info. version ;
679
696
@@ -702,7 +719,10 @@ where
702
719
)
703
720
. await ?;
704
721
705
- let key_package = self . generate_key_package ( ) . await ?. key_package ;
722
+ let key_package = self
723
+ . generate_key_package ( key_package_extensions, leaf_node_extensions)
724
+ . await ?
725
+ . key_package ;
706
726
707
727
( key_package. cipher_suite == cipher_suite)
708
728
. then_some ( ( ) )
@@ -745,11 +765,6 @@ where
745
765
. ok_or ( MlsError :: SignerNotFound )
746
766
}
747
767
748
- /// Returns key package extensions used by this client
749
- pub fn key_package_extensions ( & self ) -> ExtensionList {
750
- self . config . key_package_extensions ( )
751
- }
752
-
753
768
/// The [KeyPackageStorage] that this client was configured to use.
754
769
#[ cfg_attr( all( feature = "ffi" , not( test) ) , safer_ffi_gen:: safer_ffi_gen_ignore) ]
755
770
pub fn key_package_store ( & self ) -> <C as ClientConfig >:: KeyPackageRepository {
@@ -793,14 +808,24 @@ pub(crate) mod test_utils {
793
808
cipher_suite : CipherSuite ,
794
809
identity : & str ,
795
810
) -> ( Client < TestClientConfig > , MlsMessage ) {
796
- test_client_with_key_pkg_custom ( protocol_version, cipher_suite, identity, |_| { } ) . await
811
+ test_client_with_key_pkg_custom (
812
+ protocol_version,
813
+ cipher_suite,
814
+ identity,
815
+ Default :: default ( ) ,
816
+ Default :: default ( ) ,
817
+ |_| { } ,
818
+ )
819
+ . await
797
820
}
798
821
799
822
#[ cfg_attr( not( mls_build_async) , maybe_async:: must_be_sync) ]
800
823
pub async fn test_client_with_key_pkg_custom < F > (
801
824
protocol_version : ProtocolVersion ,
802
825
cipher_suite : CipherSuite ,
803
826
identity : & str ,
827
+ key_package_extensions : ExtensionList ,
828
+ leaf_node_extensions : ExtensionList ,
804
829
mut config : F ,
805
830
) -> ( Client < TestClientConfig > , MlsMessage )
806
831
where
@@ -816,7 +841,10 @@ pub(crate) mod test_utils {
816
841
817
842
config ( & mut client. config ) ;
818
843
819
- let key_package = client. generate_key_package_message ( ) . await . unwrap ( ) ;
844
+ let key_package = client
845
+ . generate_key_package_message ( key_package_extensions, leaf_node_extensions)
846
+ . await
847
+ . unwrap ( ) ;
820
848
821
849
( client, key_package)
822
850
}
@@ -863,7 +891,10 @@ mod tests {
863
891
. build ( ) ;
864
892
865
893
// TODO: Tests around extensions
866
- let key_package = client. generate_key_package_message ( ) . await . unwrap ( ) ;
894
+ let key_package = client
895
+ . generate_key_package_message ( Default :: default ( ) , Default :: default ( ) )
896
+ . await
897
+ . unwrap ( ) ;
867
898
868
899
assert_eq ! ( key_package. version, protocol_version) ;
869
900
@@ -902,6 +933,8 @@ mod tests {
902
933
& alice_group. group_info_message ( true ) . await . unwrap ( ) ,
903
934
None ,
904
935
vec ! [ ] ,
936
+ Default :: default ( ) ,
937
+ Default :: default ( ) ,
905
938
)
906
939
. await
907
940
. unwrap ( ) ;
@@ -1047,7 +1080,10 @@ mod tests {
1047
1080
. signing_identity ( alice_identity. clone ( ) , secret_key, TEST_CIPHER_SUITE )
1048
1081
. build ( ) ;
1049
1082
1050
- let msg = alice. generate_key_package_message ( ) . await . unwrap ( ) ;
1083
+ let msg = alice
1084
+ . generate_key_package_message ( Default :: default ( ) , Default :: default ( ) )
1085
+ . await
1086
+ . unwrap ( ) ;
1051
1087
let res = alice. commit_external ( msg) . await . map ( |_| ( ) ) ;
1052
1088
1053
1089
assert_matches ! ( res, Err ( MlsError :: UnexpectedMessageType ) ) ;
0 commit comments