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 { assembly {
// Load free memory pointer
let memPtr := mload(64) let memPtr := mload(64)
mstore(memPtr, schemaHash)
mstore(add(memPtr, 32), salt) mstore(memPtr, schemaHash) // hash of schema
mstore(add(memPtr, 64), and(signerAddress, 0xffffffffffffffffffffffffffffffffffffffff)) mstore(add(memPtr, 32), salt) // salt
mstore(add(memPtr, 96), dataHash) mstore(add(memPtr, 64), and(signerAddress, 0xffffffffffffffffffffffffffffffffffffffff)) // signerAddress
mstore(add(memPtr, 96), dataHash) // hash of data
// Compute hash
result := keccak256(memPtr, 128) result := keccak256(memPtr, 128)
} }

View File

@@ -61,11 +61,26 @@ contract LibEIP712 {
view view
returns (bytes32 result) returns (bytes32 result)
{ {
result = keccak256(abi.encodePacked( bytes32 eip712DomainHash = EIP712_DOMAIN_HASH;
EIP191_HEADER,
EIP712_DOMAIN_HASH, // Assembly for more efficient computing:
hashStruct // 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; return result;
} }
} }