Skip to content

Commit 81d8488

Browse files
committed
Add func to generate new MLDSA skey/vkey pairs
1 parent 8446089 commit 81d8488

1 file changed

Lines changed: 21 additions & 0 deletions

File tree

note/note_cosigv1.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,27 @@ const (
3737
timestampSize = 8
3838
)
3939

40+
41+
// GenerateMLDSASignerKey generates a named signer and verifier key pair. The signer key skey is private and must be kept secret.
42+
func GenerateMLDSASignerKey(name string) (skey string, vkey string, err error) {
43+
if !isValidName(name) {
44+
return "", "", errSignerID
45+
}
46+
secK, err := mldsa.GenerateKey(mldsa.MLDSA44())
47+
if err != nil {
48+
return "", "", err
49+
}
50+
secKBytes := append([]byte{algMLDSA44}, secK.Bytes()...)
51+
pubKBytes := append([]byte{algMLDSA44}, secK.PublicKey().Bytes()...)
52+
53+
h := keyHashMLDSA(name, pubKBytes)
54+
55+
skey = fmt.Sprintf("PRIVATE+KEY+%s+%08x+%s", name, h, base64.StdEncoding.EncodeToString(secKBytes))
56+
vkey = fmt.Sprintf("%s+%08x+%s", name, h, base64.StdEncoding.EncodeToString(pubKBytes))
57+
58+
return skey, vkey, nil
59+
}
60+
4061
// NewMLDSASigner returns a signer for MLDSA cosignature v1.
4162
func NewMLDSASigner(skey string) (*SubtreeSigner, error) {
4263
priv1, skey, _ := strings.Cut(skey, "+")

0 commit comments

Comments
 (0)