mirror of
https://github.com/XTLS/Xray-core.git
synced 2026-10-17 21:14:01 +00:00
https://github.com/XTLS/REALITY/commit/83f621788ca88b83179810b12baa7ae518aacb83 https://github.com/XTLS/REALITY/commit/14cefac9bd7a724a811b02759fa97aa86a1ec894 https://github.com/XTLS/REALITY/commit/3c98159dee388c2914a2b9e73ea57bc10023f9d3
47 lines
1.1 KiB
Go
47 lines
1.1 KiB
Go
package all
|
|
|
|
import (
|
|
"crypto/mldsa"
|
|
"crypto/rand"
|
|
"encoding/base64"
|
|
"fmt"
|
|
|
|
"github.com/xtls/xray-core/main/commands/base"
|
|
)
|
|
|
|
var cmdMLDSA65 = &base.Command{
|
|
UsageLine: `{{.Exec}} mldsa65 [-i "seed (base64.RawURLEncoding)"]`,
|
|
Short: `Generate key pair for ML-DSA-65 post-quantum signature (REALITY)`,
|
|
Long: `
|
|
Generate key pair for ML-DSA-65 post-quantum signature (REALITY).
|
|
|
|
Random: {{.Exec}} mldsa65
|
|
|
|
From seed: {{.Exec}} mldsa65 -i "seed (base64.RawURLEncoding)"
|
|
`,
|
|
}
|
|
|
|
func init() {
|
|
cmdMLDSA65.Run = executeMLDSA65 // break init loop
|
|
}
|
|
|
|
var input_mldsa65 = cmdMLDSA65.Flag.String("i", "", "")
|
|
|
|
func executeMLDSA65(cmd *base.Command, args []string) {
|
|
var seed [32]byte
|
|
if len(*input_mldsa65) > 0 {
|
|
s, _ := base64.RawURLEncoding.DecodeString(*input_mldsa65)
|
|
if len(s) != 32 {
|
|
fmt.Println("Invalid length of ML-DSA-65 seed.")
|
|
return
|
|
}
|
|
seed = [32]byte(s)
|
|
} else {
|
|
rand.Read(seed[:])
|
|
}
|
|
key, _ := mldsa.NewPrivateKey(mldsa.MLDSA65(), seed[:])
|
|
fmt.Printf("Seed: %v\nVerify: %v\n",
|
|
base64.RawURLEncoding.EncodeToString(seed[:]),
|
|
base64.RawURLEncoding.EncodeToString(key.PublicKey().Bytes()))
|
|
}
|