diff options
author | weidai <weidai11@users.noreply.github.com> | 2004-04-29 14:48:51 +0000 |
---|---|---|
committer | weidai <weidai11@users.noreply.github.com> | 2004-04-29 14:48:51 +0000 |
commit | 5fc752d268152ac25a0cb36517ec960a4fddd61c (patch) | |
tree | ae70583b825bc83dedf5550661fdd3402502a0a7 /rsa.cpp | |
parent | 24caaf9e8e48936d0d08979a0c46f6c361a80c24 (diff) | |
download | cryptopp-git-5fc752d268152ac25a0cb36517ec960a4fddd61c.tar.gz |
add check for invalid RSA private key given n, e, d
Diffstat (limited to 'rsa.cpp')
-rw-r--r-- | rsa.cpp | 10 |
1 files changed, 10 insertions, 0 deletions
@@ -147,13 +147,20 @@ void InvertibleRSAFunction::Initialize(RandomNumberGenerator &rng, unsigned int void InvertibleRSAFunction::Initialize(const Integer &n, const Integer &e, const Integer &d) { + if (n.IsEven() || e.IsEven() | d.IsEven()) + throw InvalidArgument("InvertibleRSAFunction: input is not a valid RSA private key"); + m_n = n; m_e = e; m_d = d; Integer r = --(d*e); + unsigned int s = 0; while (r.IsEven()) + { r >>= 1; + s++; + } ModularArithmetic modn(n); for (Integer i = 2; ; ++i) @@ -162,6 +169,7 @@ void InvertibleRSAFunction::Initialize(const Integer &n, const Integer &e, const if (a == 1) continue; Integer b; + unsigned int j = 0; while (a != -1) { b = modn.Square(a); @@ -174,6 +182,8 @@ void InvertibleRSAFunction::Initialize(const Integer &n, const Integer &e, const m_u = m_q.InverseMod(m_p); return; } + if (++j == s) + throw InvalidArgument("InvertibleRSAFunction: input is not a valid RSA private key"); a = b; } } |