mirror of
https://github.com/XTLS/Xray-core.git
synced 2025-08-22 09:36:49 +08:00
47 lines
1.1 KiB
Go
47 lines
1.1 KiB
Go
package all
|
|
|
|
import (
|
|
"crypto/rand"
|
|
"encoding/base64"
|
|
"fmt"
|
|
|
|
"github.com/cloudflare/circl/sign/mldsa/mldsa65"
|
|
"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[:])
|
|
}
|
|
pub, _ := mldsa65.NewKeyFromSeed(&seed)
|
|
fmt.Printf("Seed: %v\nVerify: %v",
|
|
base64.RawURLEncoding.EncodeToString(seed[:]),
|
|
base64.RawURLEncoding.EncodeToString(pub.Bytes()))
|
|
}
|