mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-02-02 23:34:14 +00:00
fixed #1424. Check if .b32.i2p address string is valid
This commit is contained in:
parent
d6b1d0d4fb
commit
c2f47119ce
@ -141,7 +141,8 @@ namespace data
|
|||||||
m_BlindedSigType = m_SigType;
|
m_BlindedSigType = m_SigType;
|
||||||
}
|
}
|
||||||
|
|
||||||
BlindedPublicKey::BlindedPublicKey (const std::string& b33)
|
BlindedPublicKey::BlindedPublicKey (const std::string& b33):
|
||||||
|
m_SigType (0) // 0 means invalid, we can't blind DSA, set it later
|
||||||
{
|
{
|
||||||
uint8_t addr[40]; // TODO: define length from b33
|
uint8_t addr[40]; // TODO: define length from b33
|
||||||
size_t l = i2p::data::Base32ToByteStream (b33.c_str (), b33.length (), addr, 40);
|
size_t l = i2p::data::Base32ToByteStream (b33.c_str (), b33.length (), addr, 40);
|
||||||
|
@ -22,6 +22,7 @@ namespace data
|
|||||||
size_t GetPublicKeyLen () const { return m_PublicKey.size (); };
|
size_t GetPublicKeyLen () const { return m_PublicKey.size (); };
|
||||||
SigningKeyType GetSigType () const { return m_SigType; };
|
SigningKeyType GetSigType () const { return m_SigType; };
|
||||||
SigningKeyType GetBlindedSigType () const { return m_BlindedSigType; };
|
SigningKeyType GetBlindedSigType () const { return m_BlindedSigType; };
|
||||||
|
bool IsValid () const { return GetSigType (); }; // signature type 0 means invalid
|
||||||
|
|
||||||
void GetSubcredential (const uint8_t * blinded, size_t len, uint8_t * subcredential) const; // 32 bytes
|
void GetSubcredential (const uint8_t * blinded, size_t len, uint8_t * subcredential) const; // 32 bytes
|
||||||
size_t GetBlindedKey (const char * date, uint8_t * blindedKey) const; // date is 8 chars "YYYYMMDD", return public key length
|
size_t GetBlindedKey (const char * date, uint8_t * blindedKey) const; // date is 8 chars "YYYYMMDD", return public key length
|
||||||
|
@ -237,17 +237,19 @@ namespace client
|
|||||||
|
|
||||||
//---------------------------------------------------------------------
|
//---------------------------------------------------------------------
|
||||||
|
|
||||||
Address::Address (const std::string& b32)
|
Address::Address (const std::string& b32):
|
||||||
|
addressType (eAddressInvalid)
|
||||||
{
|
{
|
||||||
if (b32.length () <= B33_ADDRESS_THRESHOLD)
|
if (b32.length () <= B33_ADDRESS_THRESHOLD)
|
||||||
{
|
{
|
||||||
addressType = eAddressIndentHash;
|
if (identHash.FromBase32 (b32) > 0)
|
||||||
identHash.FromBase32 (b32);
|
addressType = eAddressIndentHash;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
addressType = eAddressBlindedPublicKey;
|
|
||||||
blindedPublicKey = std::make_shared<i2p::data::BlindedPublicKey>(b32);
|
blindedPublicKey = std::make_shared<i2p::data::BlindedPublicKey>(b32);
|
||||||
|
if (blindedPublicKey->IsValid ())
|
||||||
|
addressType = eAddressBlindedPublicKey;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -320,7 +322,10 @@ namespace client
|
|||||||
{
|
{
|
||||||
auto pos = address.find(".b32.i2p");
|
auto pos = address.find(".b32.i2p");
|
||||||
if (pos != std::string::npos)
|
if (pos != std::string::npos)
|
||||||
return std::make_shared<const Address>(address.substr (0, pos));
|
{
|
||||||
|
auto addr = std::make_shared<const Address>(address.substr (0, pos));
|
||||||
|
return addr->IsValid () ? addr : nullptr;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
pos = address.find (".i2p");
|
pos = address.find (".i2p");
|
||||||
|
@ -33,13 +33,14 @@ namespace client
|
|||||||
|
|
||||||
struct Address
|
struct Address
|
||||||
{
|
{
|
||||||
enum { eAddressIndentHash, eAddressBlindedPublicKey } addressType;
|
enum { eAddressIndentHash, eAddressBlindedPublicKey, eAddressInvalid } addressType;
|
||||||
i2p::data::IdentHash identHash;
|
i2p::data::IdentHash identHash;
|
||||||
std::shared_ptr<i2p::data::BlindedPublicKey> blindedPublicKey;
|
std::shared_ptr<i2p::data::BlindedPublicKey> blindedPublicKey;
|
||||||
|
|
||||||
Address (const std::string& b32);
|
Address (const std::string& b32);
|
||||||
Address (const i2p::data::IdentHash& hash);
|
Address (const i2p::data::IdentHash& hash);
|
||||||
bool IsIdentHash () const { return addressType == eAddressIndentHash; };
|
bool IsIdentHash () const { return addressType == eAddressIndentHash; };
|
||||||
|
bool IsValid () const { return addressType != eAddressInvalid; };
|
||||||
};
|
};
|
||||||
|
|
||||||
inline std::string GetB32Address(const i2p::data::IdentHash& ident) { return ident.ToBase32().append(".b32.i2p"); }
|
inline std::string GetB32Address(const i2p::data::IdentHash& ident) { return ident.ToBase32().append(".b32.i2p"); }
|
||||||
|
Loading…
x
Reference in New Issue
Block a user