use of com.radixdlt.crypto.ECDSASignature in project radixdlt by radixdlt.
the class SafetyRules method timeoutVote.
public Vote timeoutVote(Vote vote) {
if (vote.isTimeout()) {
// vote is already timed out
return vote;
}
final VoteTimeout voteTimeout = VoteTimeout.of(vote);
final HashCode voteTimeoutHash = hasher.hash(voteTimeout);
final ECDSASignature timeoutSignature = this.signer.sign(voteTimeoutHash);
final Vote timeoutVote = vote.withTimeoutSignature(timeoutSignature);
this.state = this.state.toBuilder().lastVote(timeoutVote).build();
this.persistentSafetyStateStore.commitState(this.state);
return timeoutVote;
}
use of com.radixdlt.crypto.ECDSASignature in project radixdlt by radixdlt.
the class DifferentTimestampsCauseTimeoutTest method mutateProposal.
private Proposal mutateProposal(Proposal p, int destination) {
QuorumCertificate committedQC = p.highQC().highestCommittedQC();
UnverifiedVertex vertex = p.getVertex();
ECDSASignature signature = p.getSignature();
return new Proposal(mutateVertex(vertex, destination), committedQC, signature, Optional.empty());
}
use of com.radixdlt.crypto.ECDSASignature in project radixdlt by radixdlt.
the class DifferentTimestampsCauseTimeoutTest method mutateTimestampedSignature.
private TimestampedECDSASignature mutateTimestampedSignature(TimestampedECDSASignature signature, int destination) {
long timestamp = signature.timestamp();
ECDSASignature sig = signature.signature();
return TimestampedECDSASignature.from(timestamp + destination, sig);
}
use of com.radixdlt.crypto.ECDSASignature in project radixdlt by radixdlt.
the class PendingVotes method processVoteForTC.
private Optional<TimeoutCertificate> processVoteForTC(Vote vote, BFTValidatorSet validatorSet) {
if (!vote.isTimeout()) {
// TC can't be formed if vote is not timed out
return Optional.empty();
}
final ECDSASignature timeoutSignature = vote.getTimeoutSignature().orElseThrow();
final VoteTimeout voteTimeout = VoteTimeout.of(vote);
final HashCode voteTimeoutHash = this.hasher.hash(voteTimeout);
final BFTNode node = vote.getAuthor();
final ValidationState validationState = this.timeoutVoteState.computeIfAbsent(voteTimeoutHash, k -> validatorSet.newValidationState());
final boolean signatureAdded = validationState.addSignature(node, vote.getTimestamp(), timeoutSignature);
if (signatureAdded && validationState.complete()) {
return Optional.of(new TimeoutCertificate(voteTimeout.getEpoch(), voteTimeout.getView(), validationState.signatures()));
} else {
return Optional.empty();
}
}
use of com.radixdlt.crypto.ECDSASignature in project radixdlt by radixdlt.
the class SafetyRules method createVote.
public Vote createVote(VerifiedVertex proposedVertex, BFTHeader proposedHeader, long timestamp, HighQC highQC) {
final VoteData voteData = constructVoteData(proposedVertex, proposedHeader);
final var voteHash = Vote.getHashOfData(hasher, voteData, timestamp);
// TODO make signing more robust by including author in signed hash
final ECDSASignature signature = this.signer.sign(voteHash);
return new Vote(this.self, voteData, timestamp, signature, highQC, Optional.empty());
}
Aggregations