@@ -979,23 +979,24 @@ class V2MessageMap
979
979
980
980
const V2MessageMap V2_MESSAGE_MAP;
981
981
982
- } // namespace
982
+ CKey GenerateRandomKey () noexcept
983
+ {
984
+ CKey key;
985
+ key.MakeNewKey (/* fCompressed=*/ true );
986
+ return key;
987
+ }
983
988
984
- V2Transport::V2Transport (NodeId nodeid, bool initiating, int type_in, int version_in) noexcept :
985
- m_cipher{}, m_initiating{initiating}, m_nodeid{nodeid},
986
- m_v1_fallback{nodeid, type_in, version_in}, m_recv_type{type_in}, m_recv_version{version_in},
987
- m_recv_state{initiating ? RecvState::KEY : RecvState::KEY_MAYBE_V1},
988
- m_send_state{initiating ? SendState::AWAITING_KEY : SendState::MAYBE_V1}
989
+ std::vector<uint8_t > GenerateRandomGarbage () noexcept
989
990
{
990
- // Construct garbage (including its length) using a FastRandomContext.
991
+ std::vector< uint8_t > ret;
991
992
FastRandomContext rng;
992
- size_t garbage_len = rng.randrange (MAX_GARBAGE_LEN + 1 );
993
- // Initialize the send buffer with ellswift pubkey + garbage.
994
- m_send_buffer.resize (EllSwiftPubKey::size () + garbage_len);
995
- std::copy (std::begin (m_cipher.GetOurPubKey ()), std::end (m_cipher.GetOurPubKey ()), MakeWritableByteSpan (m_send_buffer).begin ());
996
- rng.fillrand (MakeWritableByteSpan (m_send_buffer).subspan (EllSwiftPubKey::size ()));
993
+ ret.resize (rng.randrange (V2Transport::MAX_GARBAGE_LEN + 1 ));
994
+ rng.fillrand (MakeWritableByteSpan (ret));
995
+ return ret;
997
996
}
998
997
998
+ } // namespace
999
+
999
1000
V2Transport::V2Transport (NodeId nodeid, bool initiating, int type_in, int version_in, const CKey& key, Span<const std::byte> ent32, Span<const uint8_t > garbage) noexcept :
1000
1001
m_cipher{key, ent32}, m_initiating{initiating}, m_nodeid{nodeid},
1001
1002
m_v1_fallback{nodeid, type_in, version_in}, m_recv_type{type_in}, m_recv_version{version_in},
@@ -1009,6 +1010,10 @@ V2Transport::V2Transport(NodeId nodeid, bool initiating, int type_in, int versio
1009
1010
std::copy (garbage.begin (), garbage.end (), m_send_buffer.begin () + EllSwiftPubKey::size ());
1010
1011
}
1011
1012
1013
+ V2Transport::V2Transport (NodeId nodeid, bool initiating, int type_in, int version_in) noexcept :
1014
+ V2Transport{nodeid, initiating, type_in, version_in, GenerateRandomKey (),
1015
+ MakeByteSpan (GetRandHash ()), GenerateRandomGarbage ()} { }
1016
+
1012
1017
void V2Transport::SetReceiveState (RecvState recv_state) noexcept
1013
1018
{
1014
1019
AssertLockHeld (m_recv_mutex);
0 commit comments