blob: 28bf3f29e711edd6264bcc60b659352f82efe25b [file] [log] [blame] [edit]
// Copyright 2024 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package mlkem_test
import (
"crypto/mlkem"
"log"
)
func Example() {
// Alice generates a new key pair and sends the encapsulation key to Bob.
dk, err := mlkem.GenerateKey768()
if err != nil {
log.Fatal(err)
}
encapsulationKey := dk.EncapsulationKey().Bytes()
// Bob uses the encapsulation key to encapsulate a shared secret, and sends
// back the ciphertext to Alice.
ciphertext := Bob(encapsulationKey)
// Alice decapsulates the shared secret from the ciphertext.
sharedSecret, err := dk.Decapsulate(ciphertext)
if err != nil {
log.Fatal(err)
}
// Alice and Bob now share a secret.
_ = sharedSecret
}
func Bob(encapsulationKey []byte) (ciphertext []byte) {
// Bob encapsulates a shared secret using the encapsulation key.
ek, err := mlkem.NewEncapsulationKey768(encapsulationKey)
if err != nil {
log.Fatal(err)
}
sharedSecret, ciphertext := ek.Encapsulate()
// Alice and Bob now share a secret.
_ = sharedSecret
// Bob sends the ciphertext to Alice.
return ciphertext
}