diff --git a/Reseed.cpp b/Reseed.cpp index 3798a565..8be15b0a 100644 --- a/Reseed.cpp +++ b/Reseed.cpp @@ -375,6 +375,7 @@ namespace data signature.SkipAll(); // issuer + std::string name; CryptoPP::BERSequenceDecoder issuer (tbsCert); { CryptoPP::BERSetDecoder c (issuer); c.SkipAll(); @@ -388,9 +389,7 @@ namespace data { CryptoPP::BERGeneralDecoder ident(attributes, CryptoPP::OBJECT_IDENTIFIER); ident.SkipAll (); - std::string name; CryptoPP::BERDecodeTextString (attributes, name, CryptoPP::UTF8_STRING); - LogPrint (eLogInfo, "Issuer name: ", name); } } } @@ -403,6 +402,23 @@ namespace data subject.SkipAll(); // public key CryptoPP::BERSequenceDecoder publicKey (tbsCert); + { + CryptoPP::BERSequenceDecoder ident (publicKey); + ident.SkipAll (); + CryptoPP::BERGeneralDecoder key (publicKey, CryptoPP::BIT_STRING); + key.Skip (1); // FIXME: probably bug in crypto++ + CryptoPP::BERSequenceDecoder keyPair (key); + CryptoPP::Integer n; + n.BERDecode (keyPair); + if (name.length () > 0) + { + PublicKey value; + n.Encode (value, 512); + m_SigningKeys[name] = value; + } + else + LogPrint (eLogWarning, "Unknown issuer. Skipped"); + } publicKey.SkipAll(); tbsCert.SkipAll(); diff --git a/Reseed.h b/Reseed.h index ac49d9f7..8c33b836 100644 --- a/Reseed.h +++ b/Reseed.h @@ -4,6 +4,8 @@ #include #include #include +#include +#include "Identity.h" namespace i2p { @@ -12,6 +14,8 @@ namespace data class Reseeder { + typedef Tag<512> PublicKey; + public: Reseeder(); @@ -28,7 +32,10 @@ namespace data int ProcessSU3Stream (std::istream& s); bool FindZipDataDescriptor (std::istream& s); - + + private: + + std::map m_SigningKeys; }; } } diff --git a/Signature.h b/Signature.h index dd45f0be..90eb06d9 100644 --- a/Signature.h +++ b/Signature.h @@ -244,10 +244,6 @@ namespace crypto m_PublicKey.Initialize (CryptoPP::Integer (signingKey, keyLen), CryptoPP::Integer (rsae)); } - RSAVerifier (const CryptoPP::RSA::PublicKey& publicKey): m_PublicKey (publicKey) - { - } - bool Verify (const uint8_t * buf, size_t len, const uint8_t * signature) const { typename CryptoPP::RSASS::Verifier verifier (m_PublicKey); @@ -306,10 +302,6 @@ namespace crypto RSASHA2562048Verifier (const uint8_t * signingKey): RSAVerifier (signingKey) { } - - RSASHA2562048Verifier (const CryptoPP::RSA::PublicKey& publicKey): RSAVerifier (publicKey) - { - } }; class RSASHA2562048Signer: public RSASigner @@ -331,10 +323,6 @@ namespace crypto RSASHA3843072Verifier (const uint8_t * signingKey): RSAVerifier (signingKey) { } - - RSASHA3843072Verifier (const CryptoPP::RSA::PublicKey& publicKey): RSAVerifier (publicKey) - { - } }; class RSASHA3843072Signer: public RSASigner @@ -356,10 +344,6 @@ namespace crypto RSASHA5124096Verifier (const uint8_t * signingKey): RSAVerifier (signingKey) { } - - RSASHA5124096Verifier (const CryptoPP::RSA::PublicKey& publicKey): RSAVerifier (publicKey) - { - } }; class RSASHA5124096Signer: public RSASigner