我正在实施智能卡中间件,我需要为其添加RSA-PSS签名方案。我希望我可以覆盖Crypto ++中的代码,该代码负责私钥操作并免费获得其他所有内容(PSS和PKCS填充)。我想这个代码rsa.cpp
是我想重写不同的智能卡什么:覆盖智能卡的RSA私钥操作?
Integer InvertibleRSAFunction::CalculateInverse(RandomNumberGenerator &rng, const Integer &x) const
{
DoQuickSanityCheck();
ModularArithmetic modn(m_n);
Integer r, rInv;
do { // do this in a loop for people using small numbers for testing
r.Randomize(rng, Integer::One(), m_n - Integer::One());
rInv = modn.MultiplicativeInverse(r);
} while (rInv.IsZero());
...
首先,我认为这可以通过继承RSA::PrivateKey
class MyPrivKey : public RSA::PrivateKey {
public:
template<typename... Args>
MyPrivKey(Args&&... args) : RSA::PrivateKey(std::forward<Args>(args)...) {}
Integer CalculateInverse(RandomNumberGenerator &rng, const Integer &x) const override {
return ... // do some smart card magic
}
};
然后通过这个关键signer
对象来完成
MyPrivateKey privateKey(params);
// Signer object
RSASS<PSS, SHA1>::Signer signer(privateKey);
但很快我发现,privateKey
(模数,私人和公共指数的所有组成部分,等等)只是复制到signer
内部。因此重写RSA::PrivateKey::CalculateInverse
并没有真正的帮助。
然后我迷失在模板里哭了。我想有0.0001%的机会有人可以帮助我。我会尽我的运气。
我的例子https://pastebin.com/Nwk4jX0j
是否'Signer'实际*使用*这些值,或者它调用'PrivateKey :: CalculateInverse()'?如果是后者,你可以给它一些假的价值来复制,并在智能卡上做你的私人魔法。无论如何,智能卡是否不带有合适的库? –