Changeset View
Changeset View
Standalone View
Standalone View
src/avalanche/processor.cpp
Show First 20 Lines • Show All 184 Lines • ▼ Show 20 Lines | if (argsman.IsArgSet("-avaproof")) { | ||||
} | } | ||||
} | } | ||||
peerData.proof = proof; | peerData.proof = proof; | ||||
} | } | ||||
// Generate the delegation to the session key. | // Generate the delegation to the session key. | ||||
DelegationBuilder dgb(peerData.proof.value()); | DelegationBuilder dgb(peerData.proof.value()); | ||||
if (peerData.sessionKey.GetPubKey() != peerData.proof->getMaster()) { | CPubKey master = peerData.proof->getMaster(); | ||||
if (argsman.IsArgSet("-avadelegation")) { | |||||
Delegation dg; | |||||
CDataStream stream(ParseHex(argsman.GetArg("-avadelegation", "")), | |||||
SER_NETWORK, 0); | |||||
stream >> dg; | |||||
DelegationState dg_state; | |||||
if (!dg.verify(dg_state, peerData.proof.value(), master)) { | |||||
switch (dg_state.GetResult()) { | |||||
case avalanche::DelegationResult::INCORRECT_PROOF: | |||||
error = _("the avalanche delegation does not match the " | |||||
"proof\n"); | |||||
return false; | |||||
case avalanche::DelegationResult::INVALID_SIGNATURE: | |||||
error = _("the avalanche delegation has invalid " | |||||
"signatures\n"); | |||||
return false; | |||||
default: | |||||
error = _("the avalanche delegation is invalid\n"); | |||||
return false; | |||||
} | |||||
} | |||||
dgb.importDelegation(dg); | |||||
} | |||||
if (peerData.sessionKey.GetPubKey() != master) { | |||||
if (!argsman.IsArgSet("-avamasterkey")) { | |||||
error = _("An avalanche proof is set but no master key " | |||||
"provided\n"); | |||||
return false; | |||||
} | |||||
dgb.addLevel(DecodeSecret(argsman.GetArg("-avamasterkey", "")), | dgb.addLevel(DecodeSecret(argsman.GetArg("-avamasterkey", "")), | ||||
deadalnix: You might have built an invalid delegation here, no? What if the provided delegation doesn't… | |||||
peerData.sessionKey.GetPubKey()); | peerData.sessionKey.GetPubKey()); | ||||
} | } | ||||
peerData.delegation = dgb.build(); | peerData.delegation = dgb.build(); | ||||
} | } | ||||
return true; | return true; | ||||
} | } | ||||
▲ Show 20 Lines • Show All 468 Lines • Show Last 20 Lines |
You might have built an invalid delegation here, no? What if the provided delegation doesn't match the master key provided?
Most likely, you should check correctness at the end, not in the middle of things.