| // Copyright 2026 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. | |
| //go:build !fips140v1.0 | |
| package mldsa_test | |
| import ( | |
| "crypto/mldsa" | |
| "fmt" | |
| "log" | |
| ) | |
| func Example() { | |
| // The signer generates a new ML-DSA-44 key pair. | |
| sk, err := mldsa.GenerateKey(mldsa.MLDSA44()) | |
| if err != nil { | |
| log.Fatal(err) | |
| } | |
| // The signer publishes the public key encoding. | |
| publicKey := sk.PublicKey().Bytes() | |
| fmt.Printf("public key: %d bytes\n", len(publicKey)) | |
| // The signer signs a message and publishes the signature. | |
| msg := []byte("hello, world") | |
| sig, err := sk.Sign(nil, msg, &mldsa.Options{Context: "example"}) | |
| if err != nil { | |
| log.Fatal(err) | |
| } | |
| fmt.Printf("signature: %d bytes\n", len(sig)) | |
| // The verifier reconstructs the public key and checks the signature. | |
| // The context string must match the one used by the signer. | |
| pk, err := mldsa.NewPublicKey(mldsa.MLDSA44(), publicKey) | |
| if err != nil { | |
| log.Fatal(err) | |
| } | |
| if err := mldsa.Verify(pk, msg, sig, &mldsa.Options{Context: "example"}); err != nil { | |
| log.Fatal("invalid signature: ", err) | |
| } | |
| // Output: | |
| // public key: 1312 bytes | |
| // signature: 2420 bytes | |
| } |