@@ -689,7 +689,7 @@ elliptic_curves(Version) when ?TLS_LT(Version, ?TLS_1_3) ->
689689
690690% % RFC 8446 (TLS 1.3) renamed the "elliptic_curve" extension.
691691supported_groups (Version ) when ? TLS_GTE (Version , ? TLS_1_3 ) ->
692- SupportedGroups = tls_v1 :groups (),
692+ SupportedGroups = tls_v1 :groups (),
693693 # supported_groups {supported_groups = SupportedGroups }.
694694
695695
@@ -773,11 +773,30 @@ generate_public_key(Group) when
773773 Group =:= mlkem1024 ->
774774 {PublicKey , _ } = crypto :generate_key (Group , []),
775775 PublicKey ;
776+ generate_public_key (x25519mlkem768 = Group ) ->
777+ {Curve , MLKem } = hybrid_algs (Group ),
778+ P2 = generate_public_key (Curve ),
779+ {P1 ,_ } = crypto :generate_key (MLKem , []),
780+ <<P1 /binary , P2 /binary >>;
781+ generate_public_key (Group ) when
782+ Group =:= secp256r1mlkem768 orelse
783+ Group =:= secp384r1mlkem1024 ->
784+ {Curve , MLKem } = hybrid_algs (Group ),
785+ P1 = generate_public_key (Curve ),
786+ {P2 , _ } = crypto :generate_key (MLKem , []),
787+ <<P1 /binary , P2 /binary >>;
776788generate_public_key (Group ) ->
777789 {PublicKey , _ } =
778790 public_key :generate_key (ssl_dh_groups :dh_params (Group )),
779791 PublicKey .
780792
793+ hybrid_algs (x25519mlkem768 )->
794+ {x25519 , mlkem768 };
795+ hybrid_algs (secp256r1mlkem768 ) ->
796+ {secp256r1 , mlkem768 };
797+ hybrid_algs (secp384r1mlkem1024 ) ->
798+ {secp384r1 , mlkem1024 }.
799+
781800groups () ->
782801 Max = length (ssl :groups ()),
783802 ? LET (Size , choose (1 ,Max ), group_list (Size )).
0 commit comments