1
- // Package hybrid defines several hybrid classical/quantum KEMs.
1
+ // Package hybrid defines several hybrid classical/quantum KEMs for use in TLS .
2
2
//
3
- // KEMs are combined by simple concatenation of shared secrets, cipher texts,
4
- // public keys, etc, see
3
+ // Hybrid KEMs in TLS are created by simple concatenation
4
+ // of shared secrets, cipher texts, public keys, etc.
5
+ // This is safe for TLS, see eg.
5
6
//
6
7
// https://datatracker.ietf.org/doc/draft-ietf-tls-hybrid-design/
7
8
// https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-56Cr2.pdf
8
9
//
9
- // Note that this is only fine if the shared secret is used in its entirety
10
- // in a next step, such as being hashed or used as key.
10
+ // Note that this approach is not proven secure in broader context.
11
11
//
12
12
// For deriving a KEM keypair deterministically and encapsulating
13
13
// deterministically, we expand a single seed to both using SHAKE256,
@@ -38,6 +38,7 @@ import (
38
38
"github.com/cloudflare/circl/kem/kyber/kyber1024"
39
39
"github.com/cloudflare/circl/kem/kyber/kyber512"
40
40
"github.com/cloudflare/circl/kem/kyber/kyber768"
41
+ "github.com/cloudflare/circl/kem/mlkem/mlkem768"
41
42
)
42
43
43
44
var ErrUninitialized = errors .New ("public or private key not initialized" )
@@ -57,6 +58,9 @@ func Kyber1024X448() kem.Scheme { return kyber1024X }
57
58
// Returns the hybrid KEM of Kyber768Draft00 and P-256.
58
59
func P256Kyber768Draft00 () kem.Scheme { return p256Kyber768Draft00 }
59
60
61
+ // Returns the hybrid KEM of ML-KEM-768 and X25519.
62
+ func X25519MLKEM768 () kem.Scheme { return xmlkem768 }
63
+
60
64
var p256Kyber768Draft00 kem.Scheme = & scheme {
61
65
"P256Kyber768Draft00" ,
62
66
p256Kem ,
@@ -87,6 +91,12 @@ var kyber1024X kem.Scheme = &scheme{
87
91
kyber1024 .Scheme (),
88
92
}
89
93
94
+ var xmlkem768 kem.Scheme = & scheme {
95
+ "X25519MLKEM768" ,
96
+ mlkem768 .Scheme (),
97
+ x25519Kem ,
98
+ }
99
+
90
100
// Public key of a hybrid KEM.
91
101
type publicKey struct {
92
102
scheme * scheme
0 commit comments