Use asm for hashEIP712Message, increment free memory pointer after asm hashing functions

This commit is contained in:
Amir Bandeali
2018-08-07 16:27:02 -07:00
parent 3d6cf50364
commit 149c07dfd2
2 changed files with 28 additions and 9 deletions

View File

@@ -131,11 +131,15 @@ contract MixinTransactions is
// ));
assembly {
// Load free memory pointer
let memPtr := mload(64)
mstore(memPtr, schemaHash)
mstore(add(memPtr, 32), salt)
mstore(add(memPtr, 64), and(signerAddress, 0xffffffffffffffffffffffffffffffffffffffff))
mstore(add(memPtr, 96), dataHash)
mstore(memPtr, schemaHash) // hash of schema
mstore(add(memPtr, 32), salt) // salt
mstore(add(memPtr, 64), and(signerAddress, 0xffffffffffffffffffffffffffffffffffffffff)) // signerAddress
mstore(add(memPtr, 96), dataHash) // hash of data
// Compute hash
result := keccak256(memPtr, 128)
}

View File

@@ -61,11 +61,26 @@ contract LibEIP712 {
view
returns (bytes32 result)
{
result = keccak256(abi.encodePacked(
EIP191_HEADER,
EIP712_DOMAIN_HASH,
hashStruct
));
bytes32 eip712DomainHash = EIP712_DOMAIN_HASH;
// Assembly for more efficient computing:
// keccak256(abi.encodePacked(
// EIP191_HEADER,
// EIP712_DOMAIN_HASH,
// hashStruct
// ));
assembly {
// Load free memory pointer
let memPtr := mload(64)
mstore(memPtr, 0x1901000000000000000000000000000000000000000000000000000000000000) // EIP191 header
mstore(add(memPtr, 2), eip712DomainHash) // EIP712 domain hash
mstore(add(memPtr, 34), hashStruct) // Hash of struct
// Compute hash
result := keccak256(memPtr, 66)
}
return result;
}
}