package tool import ( "crypto/ed25519" "crypto/rand" "fmt" ) // GeneratePrivateKey 生成一个新的 Ed25519 私钥 // // 返回值: // - privateKey: 生成的 Ed25519 私钥指针 // - err: 错误信息,如果生成失败则返回错误 // // 示例: // // privateKey, err := GeneratePrivateKey() // if err != nil { // // 处理错误 // } // // 使用私钥生成 JWT token // token, err := GenerateToken(privateKey, claims) func GeneratePrivateKey() (privateKey *ed25519.PrivateKey, err error) { // 使用 crypto/rand 生成安全的随机数作为种子 // Ed25519 私钥实际上是 32 字节的种子,公钥由种子推导而来 var seed [32]byte // 从加密安全的随机数生成器读取种子 _, err = rand.Read(seed[:]) if err != nil { return nil, fmt.Errorf("生成随机种子失败: %w", err) } // 使用种子生成 Ed25519 密钥对 // ed25519.NewKeyFromSeed 返回的是 ed25519.PrivateKey 类型(实际上是 []byte) privKey := ed25519.NewKeyFromSeed(seed[:]) // 验证生成的私钥长度是否正确 if len(privKey) != ed25519.PrivateKeySize { return nil, fmt.Errorf("生成的私钥长度无效: 期望 %d 字节,实际 %d 字节", ed25519.PrivateKeySize, len(privKey)) } // 返回私钥的指针 return &privKey, nil }