diff --git a/libi2pd/CryptoKey.h b/libi2pd/CryptoKey.h index 0dff7584..5584b687 100644 --- a/libi2pd/CryptoKey.h +++ b/libi2pd/CryptoKey.h @@ -22,6 +22,7 @@ namespace crypto virtual ~CryptoKeyDecryptor () {}; virtual bool Decrypt (const uint8_t * encrypted, uint8_t * data, BN_CTX * ctx, bool zeroPadding) = 0; // 512/514 bytes encrypted, 222 bytes data + virtual size_t GetPublicKeyLen () const = 0; // we need it to set key in LS2 }; // ElGamal @@ -43,7 +44,8 @@ namespace crypto ElGamalDecryptor (const uint8_t * priv); bool Decrypt (const uint8_t * encrypted, uint8_t * data, BN_CTX * ctx, bool zeroPadding); - + size_t GetPublicKeyLen () const { return 256; }; + private: uint8_t m_PrivateKey[256]; @@ -73,7 +75,8 @@ namespace crypto ECIESP256Decryptor (const uint8_t * priv); ~ECIESP256Decryptor (); bool Decrypt (const uint8_t * encrypted, uint8_t * data, BN_CTX * ctx, bool zeroPadding); - + size_t GetPublicKeyLen () const { return 64; }; + private: EC_GROUP * m_Curve; @@ -105,7 +108,8 @@ namespace crypto ECIESGOSTR3410Decryptor (const uint8_t * priv); ~ECIESGOSTR3410Decryptor (); bool Decrypt (const uint8_t * encrypted, uint8_t * data, BN_CTX * ctx, bool zeroPadding); - + size_t GetPublicKeyLen () const { return 64; }; + private: BIGNUM * m_PrivateKey; diff --git a/libi2pd/Destination.cpp b/libi2pd/Destination.cpp index 1f188fce..318e7cbc 100644 --- a/libi2pd/Destination.cpp +++ b/libi2pd/Destination.cpp @@ -1037,8 +1037,9 @@ namespace client else { // standard LS2 (type 3) assumed for now. TODO: implement others + auto keyLen = m_Decryptor ? m_Decryptor->GetPublicKeyLen () : 256; leaseSet = new i2p::data::LocalLeaseSet2 (i2p::data::NETDB_STORE_TYPE_STANDARD_LEASESET2, - GetIdentity (), GetIdentity ()->GetCryptoKeyType (), 256, m_EncryptionPublicKey, tunnels); + GetIdentity (), GetIdentity ()->GetCryptoKeyType (), keyLen, m_EncryptionPublicKey, tunnels); // sign Sign (leaseSet->GetBuffer () - 1, leaseSet->GetBufferLen () - leaseSet->GetSignatureLen () + 1, leaseSet->GetSignature ()); // + leading store type }