Use asm for hashEIP712Message, increment free memory pointer after asm hashing functions
This commit is contained in:
		@@ -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)
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -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;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user