mirror of
https://github.com/PurpleI2P/i2pd
synced 2024-11-10 00:00:29 +03:00
calculate store hash for encrypted LeaseSet2
This commit is contained in:
parent
32e55ebd0c
commit
24c5ed1cff
@ -495,7 +495,7 @@ namespace crypto
|
|||||||
{
|
{
|
||||||
BN_CTX * ctx = BN_CTX_new ();
|
BN_CTX * ctx = BN_CTX_new ();
|
||||||
// calculate alpha = seed mod l
|
// calculate alpha = seed mod l
|
||||||
BIGNUM * alpha = DecodeBN<64> (seed); // pub is in Little Endian
|
BIGNUM * alpha = DecodeBN<64> (seed); // seed is in Little Endian
|
||||||
BN_mod (alpha, alpha, l, ctx); // % l
|
BN_mod (alpha, alpha, l, ctx); // % l
|
||||||
uint8_t priv[32];
|
uint8_t priv[32];
|
||||||
EncodeBN (alpha, priv, 32); // back to Little Endian
|
EncodeBN (alpha, priv, 32); // back to Little Endian
|
||||||
|
@ -530,7 +530,7 @@ namespace data
|
|||||||
memcpy (out, info.c_str (), l); out[l] = 0x01;
|
memcpy (out, info.c_str (), l); out[l] = 0x01;
|
||||||
HMAC(EVP_sha256(), prk, 32, out, l + 1, out, &len);
|
HMAC(EVP_sha256(), prk, 32, out, l + 1, out, &len);
|
||||||
memcpy (out + 32, info.c_str (), l); out[l + 32] = 0x02;
|
memcpy (out + 32, info.c_str (), l); out[l + 32] = 0x02;
|
||||||
HMAC(EVP_sha256(), prk, 32, out, 41, out + 32, &len);
|
HMAC(EVP_sha256(), prk, 32, out, l + 33, out + 32, &len);
|
||||||
}
|
}
|
||||||
|
|
||||||
void LeaseSet2::BlindPublicKey (std::shared_ptr<const IdentityEx> identity, const char * date, SigningKeyType blindedKeyType, uint8_t * blindedKey)
|
void LeaseSet2::BlindPublicKey (std::shared_ptr<const IdentityEx> identity, const char * date, SigningKeyType blindedKeyType, uint8_t * blindedKey)
|
||||||
@ -543,6 +543,18 @@ namespace data
|
|||||||
i2p::crypto::GetEd25519 ()->BlindPublicKey (identity->GetSigningPublicKeyBuffer (), seed, blindedKey);
|
i2p::crypto::GetEd25519 ()->BlindPublicKey (identity->GetSigningPublicKeyBuffer (), seed, blindedKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LeaseSet2::CalculateStoreHash (std::shared_ptr<const IdentityEx> identity, const char * date, SigningKeyType blindedKeyType, i2p::data::IdentHash& hash)
|
||||||
|
{
|
||||||
|
uint8_t blinded[32];
|
||||||
|
BlindPublicKey (identity, date, blindedKeyType, blinded);
|
||||||
|
auto stA1 = htobe16 (blindedKeyType);
|
||||||
|
SHA256_CTX ctx;
|
||||||
|
SHA256_Init (&ctx);
|
||||||
|
SHA256_Update (&ctx, (const uint8_t *)&stA1, 2);
|
||||||
|
SHA256_Update (&ctx, blinded, 32);
|
||||||
|
SHA256_Final ((uint8_t *)hash, &ctx);
|
||||||
|
}
|
||||||
|
|
||||||
void LeaseSet2::Encrypt (const uint8_t * data, uint8_t * encrypted, BN_CTX * ctx) const
|
void LeaseSet2::Encrypt (const uint8_t * data, uint8_t * encrypted, BN_CTX * ctx) const
|
||||||
{
|
{
|
||||||
auto encryptor = m_Encryptor; // TODO: atomic
|
auto encryptor = m_Encryptor; // TODO: atomic
|
||||||
|
@ -139,6 +139,8 @@ namespace data
|
|||||||
std::shared_ptr<const i2p::crypto::Verifier> GetTransientVerifier () const { return m_TransientVerifier; };
|
std::shared_ptr<const i2p::crypto::Verifier> GetTransientVerifier () const { return m_TransientVerifier; };
|
||||||
void Update (const uint8_t * buf, size_t len, bool verifySignature);
|
void Update (const uint8_t * buf, size_t len, bool verifySignature);
|
||||||
|
|
||||||
|
static void CalculateStoreHash (std::shared_ptr<const IdentityEx> identity, const char * date, SigningKeyType blindedKeyType, i2p::data::IdentHash& hash);
|
||||||
|
|
||||||
// implements RoutingDestination
|
// implements RoutingDestination
|
||||||
void Encrypt (const uint8_t * data, uint8_t * encrypted, BN_CTX * ctx) const;
|
void Encrypt (const uint8_t * data, uint8_t * encrypted, BN_CTX * ctx) const;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user