我试图使用ED25519和Go从私钥中提取公钥。
我将私钥字节值传递到我的方法中,从它创建一个新的ed25519私钥结构,然后使用.Public()方法检索公钥。
pk := ed25519.PrivateKey(privateKey).Public()
cpk, ok := pk.(ed25519.PublicKey)
if !ok {
return nil, errors.New("problem casting public key to ed25519 public key")
}它不是错误的,但是产生的公钥字节总是空的,我在创建私钥结构时是否做错了什么?
发布于 2020-05-13 15:43:52
ed25519包在概述中有以下重要评论:
..。与RFC 8032的格式不同,该包的私钥表示包括一个公钥后缀,以使具有相同密钥的多个签名操作更有效。此包将RFC 8032私钥称为“种子”。
这意味着它使用了以下对等词和术语:
如果您已经有一个由RFC 8032 <private key><public key>组成的64字节片,您可以在您的问题中使用代码。
如果只有由RFC 8032 <private key>组成的32字节片,则需要按以下方式计算公钥:
// Compute the full 64 byte <private key><public key> from the private key
priv := ed25519.NewKeyFromSeed(32bytePrivateKey)
// Print out the public key (the last 32 bytes)
fmt.Println(priv.Public())请注意:ed25519.PrivateKey和ed25519.PublicKey都是type []byte。
https://stackoverflow.com/questions/61778516
复制相似问题