我正在實施智能卡中間件,我需要爲其添加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()'?如果是後者,你可以給它一些假的價值來複制,並在智能卡上做你的私人魔法。無論如何,智能卡是否不帶有合適的庫? –