ECDSA: Use unchecked arithmetic for the tryRecover function (#4301)
Signed-off-by: Pascal Marco Caversaccio <pascal.caversaccio@hotmail.ch>
This commit is contained in:
committed by
GitHub
parent
d9474327a4
commit
1d5bcd04e7
5
.changeset/four-adults-knock.md
Normal file
5
.changeset/four-adults-knock.md
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
'openzeppelin-solidity': patch
|
||||||
|
---
|
||||||
|
|
||||||
|
`ECDSA`: Use unchecked arithmetic for the `tryRecover` function that receives the `r` and `vs` short-signature fields separately.
|
||||||
@ -98,9 +98,12 @@ library ECDSA {
|
|||||||
* _Available since v4.3._
|
* _Available since v4.3._
|
||||||
*/
|
*/
|
||||||
function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError) {
|
function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError) {
|
||||||
bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);
|
unchecked {
|
||||||
uint8 v = uint8((uint256(vs) >> 255) + 27);
|
bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);
|
||||||
return tryRecover(hash, v, r, s);
|
// We do not check for an overflow here since the shift operation results in 0 or 1.
|
||||||
|
uint8 v = uint8((uint256(vs) >> 255) + 27);
|
||||||
|
return tryRecover(hash, v, r, s);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user