MCPcopy Create free account
hub / github.com/PurpleI2P/i2pd / ReadFromBuffer

Method ReadFromBuffer

libi2pd/RouterInfo.cpp:163–203  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

161 }
162
163 void RouterInfo::ReadFromBuffer (bool verifySignature)
164 {
165 if (!m_Buffer)
166 {
167 m_IsUnreachable = true;
168 return;
169 }
170 size_t bufferLen = m_Buffer->GetBufferLen ();
171 m_RouterIdentity = NewIdentity (m_Buffer->data (), bufferLen);
172 size_t identityLen = m_RouterIdentity->GetFullLen ();
173 if (identityLen >= bufferLen)
174 {
175 LogPrint (eLogError, "RouterInfo: Identity length ", identityLen, " exceeds buffer size ", bufferLen);
176 m_IsUnreachable = true;
177 return;
178 }
179 if (verifySignature)
180 {
181 // reject RSA signatures
182 if (m_RouterIdentity->IsRSA ())
183 {
184 LogPrint (eLogError, "RouterInfo: RSA signature type is not allowed");
185 m_IsUnreachable = true;
186 return;
187 }
188 // verify signature
189 int l = bufferLen - m_RouterIdentity->GetSignatureLen ();
190 if (l < 0 || !m_RouterIdentity->Verify ((uint8_t *)m_Buffer->data (), l, (uint8_t *)m_Buffer->data () + l))
191 {
192 LogPrint (eLogError, "RouterInfo: Signature verification failed");
193 m_IsUnreachable = true;
194 return;
195 }
196 }
197 // parse RI
198 if (!ReadFromBuffer (m_Buffer->data () + identityLen, bufferLen - identityLen))
199 {
200 LogPrint (eLogError, "RouterInfo: Malformed message");
201 m_IsUnreachable = true;
202 }
203 }
204
205 bool RouterInfo::ReadFromBuffer (const uint8_t * buf, size_t len)
206 {

Callers

nothing calls this directly

Calls 15

LogPrintFunction · 0.85
bufbe64tohFunction · 0.85
bufbe16tohFunction · 0.85
IsYggdrasilAddressFunction · 0.85
Base64ToByteStreamFunction · 0.85
GetSecondsSinceEpochFunction · 0.85
IsRSAMethod · 0.80
IsInReservedRangeMethod · 0.80
IsSSU2Method · 0.80
GetNetIDMethod · 0.80
VerifyFamilyMethod · 0.80
GetFamilyIDMethod · 0.80

Tested by

no test coverage detected