【发布时间】:2021-04-03 18:48:12
【问题描述】:
最近我在阅读bouncycastle(java)的代码,我注意到在使用EdDSA时,我们使用org.bouncycastle.asn1.x509.SubjectPublicKeyInfo#getPublicKeyData来获取org.bouncycastle.jcajce.provider.asymmetric.edec.BCEdDSAPublicKey#populateFromPubKeyInfo中的publicKey。但是在使用 RSA 时,我们在 org.bouncycastle.jcajce.provider.asymmetric.rsa.BCRSAPublicKey#populateFromPublicKeyInfo 中使用 org.bouncycastle.asn1.x509.SubjectPublicKeyInfo#parsePublicKey。
parsePublicKey的评论是for when the public key is an encoded object - if the bitstring can't be decoded this routine throws an IOException.,getPublicKeyData的评论是for when the public key is raw bits.。
我很困惑我们如何决定使用哪种方法?这是写在EdDSA 规范还是其他地方?我四处搜寻,一无所获。
编辑:
以下是我收集的信息,如果我错了,请纠正我。
EdRsa publicKey 和 RSA publicKey 都是 ASN.1 编码,org.bouncycastle.asn1.x509.SubjectPublicKeyInfo#getPublicKeyData 的使用只是因为 EdRsa publicKey 只包含一个组件(一个简单的字节数组),而 rsa key 包含两个组件(模块和 publicExp)。
几乎所有的私钥都是 pkcs#8 编码的,毕竟它被命名为“私钥信息语法标准”。但是rsa privateKey也可以在pkc#8之前的pkcs#1中编码,这两种格式可以转换回来强制。
【问题讨论】:
标签: bouncycastle private-key eddsa