MCPcopy Create free account
hub / github.com/amule-project/amule / VerifyHashTree

Method VerifyHashTree

src/SHAHashSet.cpp:184–252  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

182}
183
184bool CAICHHashTree::VerifyHashTree(CAICHHashAlgo* hashalg, bool bDeleteBadTrees)
185{
186 if (!m_bHashValid) {
187 wxFAIL;
188 if (bDeleteBadTrees) {
189 if (m_pLeftTree) {
190 delete m_pLeftTree;
191 m_pLeftTree = NULL;
192 }
193 if (m_pRightTree) {
194 delete m_pRightTree;
195 m_pRightTree = NULL;
196 }
197 }
198 AddDebugLogLineN(logSHAHashSet, "VerifyHashTree - No masterhash available");
199 return false;
200 }
201
202 // calculated missing hashs without overwriting anything
203 if (m_pLeftTree && !m_pLeftTree->m_bHashValid) {
204 m_pLeftTree->ReCalculateHash(hashalg, true);
205 }
206 if (m_pRightTree && !m_pRightTree->m_bHashValid) {
207 m_pRightTree->ReCalculateHash(hashalg, true);
208 }
209
210 if ((m_pRightTree && m_pRightTree->m_bHashValid) ^ (m_pLeftTree && m_pLeftTree->m_bHashValid)) {
211 // one branch can never be verified
212 if (bDeleteBadTrees) {
213 if (m_pLeftTree) {
214 delete m_pLeftTree;
215 m_pLeftTree = NULL;
216 }
217 if (m_pRightTree) {
218 delete m_pRightTree;
219 m_pRightTree = NULL;
220 }
221 }
222 AddDebugLogLineN(logSHAHashSet, "VerifyHashSet failed - Hashtree incomplete");
223 return false;
224 }
225 if ((m_pRightTree && m_pRightTree->m_bHashValid) && (m_pLeftTree && m_pLeftTree->m_bHashValid)) {
226 // check verify the hashs of both child nodes against my hash
227
228 CAICHHash CmpHash;
229 hashalg->Reset();
230 hashalg->Add(m_pLeftTree->m_Hash.GetRawHash(), HASHSIZE);
231 hashalg->Add(m_pRightTree->m_Hash.GetRawHash(), HASHSIZE);
232 hashalg->Finish(CmpHash);
233
234 if (m_Hash != CmpHash) {
235 if (bDeleteBadTrees) {
236 if (m_pLeftTree) {
237 delete m_pLeftTree;
238 m_pLeftTree = NULL;
239 }
240 if (m_pRightTree) {
241 delete m_pRightTree;

Callers 1

EntryMethod · 0.80

Calls 5

ReCalculateHashMethod · 0.80
ResetMethod · 0.45
AddMethod · 0.45
GetRawHashMethod · 0.45
FinishMethod · 0.45

Tested by

no test coverage detected