【发布时间】:2018-09-03 15:20:09
【问题描述】:
我正在尝试将 Go 中的椭圆曲线 secp256k1 与库“crypto/x509”一起使用。生成密钥对后,分别得到公钥pubKey和私钥privKey。之后,我想生成一个包含公钥的证书,但在我想将私钥存储在 .pem 文件之前:
keyDer, err := x509.MarshalECPrivateKey(privKey)
if err != nil {
log.Fatalf("Failed to serialize ECDSA key: %s\n", err)
}
但是当我尝试将 EC 私钥编组为 ASN.1、DER 格式并编译代码时,我收到一条错误消息:
ECDSA 密钥序列化失败:x509:未知椭圆曲线
在这种情况下,我必须使用该特定曲线,因此我无法更改为 prime256v1 或“类似曲线”。是否有解决方案允许在 crypto/x509 库中添加对 secp256k1 的支持,或其他方式/建议?
【问题讨论】:
-
你是如何生成密钥的?
-
@VictorOliveira 我正在使用库:github.com/btcsuite/btcutil/hdkeychain。我将密钥生成为: privKey, err := hdkeychain.NewMaster(seed, &chaincfg.MainNetParams) //EC Private Key sKey, err := privKey.ECPrivKey() 最后作为问题的代码:keyDer, err := x509.MarshalECPrivateKey(privKey.ToECDSA())
-
为什么不直接使用 secp256k1 C 库。您仍然可以使用 cgo 进行编译。
-
我使用了这个github.com/sour-is/koblitz,然后从
x509.ParseCertificate()开始克隆Golang x509包并解析所有依赖项。注意:无论如何我都不隶属于 lib -
@trung 是否有一个公共存储库可以找到您修改后的 x509 包?
标签: go cryptography certificate bitcoin