Skip to content
Merged
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 4 additions & 7 deletions src/contracts/multichain/ECDSACertificateVerifier.sol
Original file line number Diff line number Diff line change
Expand Up @@ -182,17 +182,17 @@ contract ECDSACertificateVerifier is Initializable, ECDSACertificateVerifierStor

/**
* @notice Parse signatures from the concatenated signature bytes
* @param messageHash The message hash that was signed
* @param signableDigest The signable digest that was signed
* @param signatures The concatenated signatures
* @return signers Array of addresses that signed the message
* @return valid Whether all signatures are valid
* @dev Signatures must be ordered by signer address (ascending)
* @dev This does not support smart contract based signatures for multichain
*/
function _parseSignatures(
bytes32 messageHash,
bytes32 signableDigest,
bytes memory signatures
) internal view returns (address[] memory signers, bool valid) {
) internal pure returns (address[] memory signers, bool valid) {
// Each ECDSA signature is 65 bytes: r (32 bytes) + s (32 bytes) + v (1 byte)
require(signatures.length > 0 && signatures.length % 65 == 0, InvalidSignatureLength());

Expand All @@ -206,7 +206,7 @@ contract ECDSACertificateVerifier is Initializable, ECDSACertificateVerifierStor
}

// Recover the signer
(address recovered, ECDSA.RecoverError error) = ECDSA.tryRecover(messageHash, signature);
(address recovered, ECDSA.RecoverError error) = ECDSA.tryRecover(signableDigest, signature);
if (error != ECDSA.RecoverError.NoError || recovered == address(0)) {
return (signers, false);
}
Expand All @@ -216,9 +216,6 @@ contract ECDSACertificateVerifier is Initializable, ECDSACertificateVerifierStor
return (signers, false);
}

// Verify that the recovered address actually signed the message
_checkIsValidSignatureNow(recovered, messageHash, signature, type(uint256).max);

signers[i] = recovered;
}

Expand Down
Loading