// 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 }