Skip to content

Commit

Permalink
refactor: sign only block's header, not the whole payload (#5000)
Browse files Browse the repository at this point in the history
Signed-off-by: Marin Veršić <marin.versic101@gmail.com>
  • Loading branch information
mversic committed Aug 30, 2024
1 parent c2ce434 commit f5a3b0e
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 14 deletions.
18 changes: 12 additions & 6 deletions core/src/block.rs
Original file line number Diff line number Diff line change
Expand Up @@ -304,7 +304,7 @@ mod valid {
};

leader_signature
.verify(topology.leader().public_key(), block.payload())
.verify(topology.leader().public_key(), &block.payload().header)
.map_err(|_err| SignatureVerificationError::LeaderMissing)?;
Ok(())
}
Expand Down Expand Up @@ -341,7 +341,7 @@ mod valid {
.ok_or(SignatureVerificationError::UnknownSignatory)?;

signature
.verify(signatory.public_key(), block.payload())
.verify(signatory.public_key(), &block.payload().header)
.map_err(|_err| SignatureVerificationError::UnknownSignature)?;

Ok(())
Expand Down Expand Up @@ -395,7 +395,7 @@ mod valid {
};

proxy_tail_signature
.verify(topology.proxy_tail().public_key(), block.payload())
.verify(topology.proxy_tail().public_key(), &block.payload().header)
.map_err(|_err| SignatureVerificationError::ProxyTailMissing)?;

Ok(())
Expand Down Expand Up @@ -782,7 +782,7 @@ mod valid {
};
signature
.1
.verify(&genesis_account.signatory, block.payload())
.verify(&genesis_account.signatory, &block.payload().header)
.map_err(|_| InvalidGenesisError::InvalidSignature)?;

let transactions = block.payload().transactions.as_slice();
Expand Down Expand Up @@ -821,7 +821,10 @@ mod valid {
.skip(1)
.filter(|(i, _)| *i != 4) // Skip proxy tail
.map(|(i, key_pair)| {
BlockSignature(i as u64, SignatureOf::new(key_pair.private_key(), &payload))
BlockSignature(
i as u64,
SignatureOf::new(key_pair.private_key(), &payload.header),
)
})
.try_for_each(|signature| block.add_signature(signature, &topology))
.expect("Failed to add signatures");
Expand Down Expand Up @@ -889,7 +892,10 @@ mod valid {
.skip(1)
.filter(|(i, _)| *i != 4) // Skip proxy tail
.map(|(i, key_pair)| {
BlockSignature(i as u64, SignatureOf::new(key_pair.private_key(), &payload))
BlockSignature(
i as u64,
SignatureOf::new(key_pair.private_key(), &payload.header),
)
})
.try_for_each(|signature| block.add_signature(signature, &topology))
.expect("Failed to add signatures");
Expand Down
13 changes: 8 additions & 5 deletions data_model/src/block.rs
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ mod model {
/// Index of the peer in the topology
pub u64,
/// Payload
pub SignatureOf<BlockPayload>,
pub SignatureOf<BlockHeader>,
);

/// Signed block
Expand Down Expand Up @@ -167,7 +167,10 @@ impl BlockPayload {
/// Create new signed block, using `key_pair` to sign `payload`
#[cfg(feature = "transparent_api")]
pub fn sign(self, private_key: &iroha_crypto::PrivateKey) -> SignedBlock {
let signatures = vec![BlockSignature(0, SignatureOf::new(private_key, &self))];
let signatures = vec![BlockSignature(
0,
SignatureOf::new(private_key, &self.header),
)];

SignedBlockV1 {
signatures,
Expand Down Expand Up @@ -238,7 +241,7 @@ impl SignedBlock {
));
}

signature.1.verify(public_key, self.payload())?;
signature.1.verify(public_key, &self.payload().header)?;

let SignedBlock::V1(block) = self;
block.signatures.push(signature);
Expand All @@ -263,7 +266,7 @@ impl SignedBlock {

block.signatures.push(BlockSignature(
signatory as u64,
SignatureOf::new(private_key, &block.payload),
SignatureOf::new(private_key, &block.payload.header),
));
}

Expand Down Expand Up @@ -303,7 +306,7 @@ impl SignedBlock {
event_recommendations: vec![],
};

let signature = BlockSignature(0, SignatureOf::new(genesis_private_key, &payload));
let signature = BlockSignature(0, SignatureOf::new(genesis_private_key, &payload.header));
SignedBlockV1 {
signatures: vec![signature],
payload,
Expand Down
4 changes: 2 additions & 2 deletions docs/source/references/schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -647,7 +647,7 @@
"BlockSignature": {
"Tuple": [
"u64",
"SignatureOf<BlockPayload>"
"SignatureOf<BlockHeader>"
]
},
"BlockStatus": {
Expand Down Expand Up @@ -3673,7 +3673,7 @@
}
]
},
"SignatureOf<BlockPayload>": "Signature",
"SignatureOf<BlockHeader>": "Signature",
"SignatureOf<ClientQueryPayload>": "Signature",
"SignatureOf<TransactionPayload>": "Signature",
"SignedBlock": {
Expand Down
2 changes: 1 addition & 1 deletion schema/gen/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -351,7 +351,7 @@ types!(
SetKeyValueBox,
SetParameter,
Signature,
SignatureOf<BlockPayload>,
SignatureOf<BlockHeader>,
SignatureOf<ClientQueryPayload>,
SignatureOf<TransactionPayload>,
SignedBlock,
Expand Down

0 comments on commit f5a3b0e

Please # to comment.