@@ -77,17 +77,17 @@ func SupportsMLKEM() bool {
7777}
7878
7979// generateMLKEMKey generates a new ML-KEM key pair with the specified parameter set
80- // and returns the raw key bytes (not the blob).
81- func generateMLKEMKey (paramSet string , expectedSize int ) ( []byte , error ) {
80+ // and writes the raw key bytes (not the blob) into dst .
81+ func generateMLKEMKey (paramSet string , dst []byte ) error {
8282 alg , err := loadMLKEM ()
8383 if err != nil {
84- return nil , errors .New ("mlkem: failed to open algorithm provider" )
84+ return errors .New ("mlkem: failed to open algorithm provider" )
8585 }
8686
8787 var hKey bcrypt.KEY_HANDLE
8888 err = bcrypt .GenerateKeyPair (alg .handle , & hKey , 0 , 0 )
8989 if err != nil {
90- return nil , errors .New ("mlkem: key generation failed" )
90+ return errors .New ("mlkem: key generation failed" )
9191 }
9292 defer bcrypt .DestroyKey (hKey )
9393
@@ -99,33 +99,29 @@ func generateMLKEMKey(paramSet string, expectedSize int) ([]byte, error) {
9999 }
100100 err = bcrypt .SetProperty (bcrypt .HANDLE (hKey ), utf16PtrFromString (bcrypt .PARAMETER_SET_NAME ), paramSetBytes , 0 )
101101 if err != nil {
102- return nil , errors .New ("mlkem: failed to set parameter set" )
102+ return errors .New ("mlkem: failed to set parameter set" )
103103 }
104104
105105 err = bcrypt .FinalizeKeyPair (hKey , 0 )
106106 if err != nil {
107- return nil , errors .New ("mlkem: key finalization failed" )
107+ return errors .New ("mlkem: key finalization failed" )
108108 }
109109
110110 // Export the private key blob
111111 var size uint32
112112 err = bcrypt .ExportKey (hKey , 0 , utf16PtrFromString (bcrypt .MLKEM_PRIVATE_BLOB ), nil , & size , 0 )
113113 if err != nil {
114- return nil , errors .New ("mlkem: failed to get key blob size" )
114+ return errors .New ("mlkem: failed to get key blob size" )
115115 }
116116
117117 blob := make ([]byte , size )
118118 err = bcrypt .ExportKey (hKey , 0 , utf16PtrFromString (bcrypt .MLKEM_PRIVATE_BLOB ), blob , & size , 0 )
119119 if err != nil {
120- return nil , errors .New ("mlkem: failed to export key" )
120+ return errors .New ("mlkem: failed to export key" )
121121 }
122122
123- // Extract and return raw key bytes
124- keyBytes := make ([]byte , expectedSize )
125- if err := extractMLKEMKeyBytes (blob , keyBytes ); err != nil {
126- return nil , err
127- }
128- return keyBytes , nil
123+ // Extract raw key bytes into destination
124+ return extractMLKEMKeyBytes (blob , dst )
129125}
130126
131127// newMLKEMDecapsulationKeyFromBytes creates a decapsulation key blob from raw key bytes.
@@ -295,12 +291,10 @@ type DecapsulationKeyMLKEM768 [decapsulationKeySizeMLKEM768]byte
295291// GenerateKeyMLKEM768 generates a new decapsulation key, drawing random bytes from
296292// the default crypto/rand source. The decapsulation key must be kept secret.
297293func GenerateKeyMLKEM768 () (DecapsulationKeyMLKEM768 , error ) {
298- keyBytes , err := generateMLKEMKey ( bcrypt . MLKEM_PARAMETER_SET_768 , decapsulationKeySizeMLKEM768 )
299- if err != nil {
294+ var dk DecapsulationKeyMLKEM768
295+ if err := generateMLKEMKey ( bcrypt . MLKEM_PARAMETER_SET_768 , dk [:]); err != nil {
300296 return DecapsulationKeyMLKEM768 {}, err
301297 }
302- var dk DecapsulationKeyMLKEM768
303- copy (dk [:], keyBytes )
304298 return dk , nil
305299}
306300
@@ -391,12 +385,10 @@ type DecapsulationKeyMLKEM1024 [decapsulationKeySizeMLKEM1024]byte
391385// GenerateKeyMLKEM1024 generates a new decapsulation key, drawing random bytes from
392386// the default crypto/rand source. The decapsulation key must be kept secret.
393387func GenerateKeyMLKEM1024 () (DecapsulationKeyMLKEM1024 , error ) {
394- keyBytes , err := generateMLKEMKey ( bcrypt . MLKEM_PARAMETER_SET_1024 , decapsulationKeySizeMLKEM1024 )
395- if err != nil {
388+ var dk DecapsulationKeyMLKEM1024
389+ if err := generateMLKEMKey ( bcrypt . MLKEM_PARAMETER_SET_1024 , dk [:]); err != nil {
396390 return DecapsulationKeyMLKEM1024 {}, err
397391 }
398- var dk DecapsulationKeyMLKEM1024
399- copy (dk [:], keyBytes )
400392 return dk , nil
401393}
402394
0 commit comments