diff --git a/cmd/clef/main.go b/cmd/clef/main.go index be192090c9..f3464b2ff6 100644 --- a/cmd/clef/main.go +++ b/cmd/clef/main.go @@ -26,8 +26,6 @@ import ( "encoding/hex" "encoding/json" "fmt" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/rlp" "io" "io/ioutil" "math/big" @@ -332,10 +330,9 @@ func initialize(c *cli.Context) error { // If using the stdioui, we can't do the 'confirm'-flow fmt.Fprintf(logOutput, legalWarning) } else { - // Temporarily disabled - //if !confirm(legalWarning) { - // return fmt.Errorf("aborted by user") - //} + if !confirm(legalWarning) { + return fmt.Errorf("aborted by user") + } } log.Root().SetHandler(log.LvlFilterHandler(log.Lvl(c.Int(logLevelFlag.Name)), log.StreamHandler(logOutput, log.TerminalFormat(true)))) @@ -558,15 +555,14 @@ func readMasterKey(ctx *cli.Context, ui core.SignerUI) ([]byte, error) { var password string // If ui is not nil, get the password from ui. if ui != nil { - // Temporarily disabled - //resp, err := ui.OnInputRequired(core.UserInputRequest{ - // Title: "Master Password", - // Prompt: "Please enter the password to decrypt the master seed", - // IsPassword: true}) - //if err != nil { - // return nil, err - //} - //password = resp.Text + resp, err := ui.OnInputRequired(core.UserInputRequest{ + Title: "Master Password", + Prompt: "Please enter the password to decrypt the master seed", + IsPassword: true}) + if err != nil { + return nil, err + } + password = resp.Text } else { password = getPassPhrase("Decrypt master seed of clef", false) } diff --git a/signer/core/api_layout.md b/signer/core/api_layout.md deleted file mode 100644 index 3aae11fd07..0000000000 --- a/signer/core/api_layout.md +++ /dev/null @@ -1,150 +0,0 @@ -# Specs -`encode(domainSeparator : 𝔹²⁵⁶, message : 𝕊) = "\x19\x01EthereumSignedMessage\n" ‖ domainSeparator ‖ hashStruct(message)` -- data adheres to 𝕊, a structure defined in the rigorous eip-712 -- `\x01` is needed to comply with EIP-191 -- `domainSeparator` and `hashStruct` are defined below - -## A) domainSeparator -`domainSeparator = hashStruct(eip712Domain)` -
-
-Struct named `EIP712Domain` with one or more of the below fields: - -- `string name` -- `string version` -- `uint256 chainId`, as per EIP-155 -- `address verifyingContract` -- `bytes32 salt` - -## B) hashStruct -`hashStruct(s : 𝕊) = keccak256(typeHash ‖ encodeData(s))` -
-`typeHash = keccak256(encodeType(typeOf(s)))` - -### i) encodeType -- `name ‖ "(" ‖ member₁ ‖ "," ‖ member₂ ‖ "," ‖ … ‖ memberₙ ")"` -- each member is written as `type ‖ " " ‖ name` -- encodings cascade down and are sorted by name - -Example: `Mail(Person from,Person to,string contents)Person(string name,address wallet)` - -### ii) encodeData -- `enc(value₁) ‖ enc(value₂) ‖ … ‖ enc(valueₙ)` -- each encoded member is 32-byte long - - #### a) atomic - - - `bool` => `uint256` - - `address` => `uint160` - - `int8:int256` and `uint8:uint256` => sign-extended `uint256` in big endian order - - `bytes1:31` => `bytes32` - - #### b) dynamic - - - `bytes` => `keccak256(bytes)` - - `string` => `keccak256(string)` - - #### c) referenced - - - `array` => `keccak256(encodeData(array))` - - `struct` => `rec(keccak256(hashStruct(struct)))` - -## C) Algo -- hashStruct - - encodeType - - encodeData - - if primitive - - encode - - else - - if array - - encodeData - - else if struct - - hashStruct - - else - - break - -## D) Example -### Query -```json -{ - "jsonrpc": "2.0", - "method": "account_signTypedData", - "params": [ - "0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826", - { - "types": { - "EIP712Domain": [ - { - "name": "name", - "type": "string" - }, - { - "name": "version", - "type": "string" - }, - { - "name": "chainId", - "type": "uint256" - }, - { - "name": "verifyingContract", - "type": "address" - } - ], - "Person": [ - { - "name": "name", - "type": "string" - }, - { - "name": "wallet", - "type": "address" - } - ], - "Mail": [ - { - "name": "from", - "type": "Person" - }, - { - "name": "to", - "type": "Person" - }, - { - "name": "contents", - "type": "string" - } - ] - }, - "primaryType": "Mail", - "domain": { - "name": "Ether Mail", - "version": "1", - "chainId": 1, - "verifyingContract": "0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC" - }, - "message": { - "from": { - "name": "Cow", - "wallet": "0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826" - }, - "to": { - "name": "Bob", - "wallet": "0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB" - }, - "contents": "Hello, Bob!" - } - } - ], - "id": 1 -} -``` - -### Response -```json -{ - "id":1, - "jsonrpc": "2.0", - "result": "0x4355c47d63924e8a72e509b65029052eb6c299d53a04e167c5775fd466751c9d07299936d304c153f6443dfa05f40ff007d72911b6f72307f996231605b915621c" -} -```