From 3abf9ec7db99de3aa85222e7630e4e714cd08ea3 Mon Sep 17 00:00:00 2001
From: brunobar79 <brunobar79@gmail.com>
Date: Tue, 20 Nov 2018 12:48:43 -0500
Subject: consider hw wallets

---
 app/scripts/metamask-controller.js | 25 ++++++++++++++++---------
 1 file changed, 16 insertions(+), 9 deletions(-)

(limited to 'app/scripts/metamask-controller.js')

diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js
index f3cd078b8..51114b5d2 100644
--- a/app/scripts/metamask-controller.js
+++ b/app/scripts/metamask-controller.js
@@ -1021,20 +1021,27 @@ module.exports = class MetamaskController extends EventEmitter {
     log.info('MetaMaskController - eth_signTypedData')
     const msgId = msgParams.metamaskId
     const version = msgParams.version
+    const HW_WALLETS_KEYRINGS = [TrezorKeyring.type, LedgerBridgeKeyring.type]
     try {
       const cleanMsgParams = await this.typedMessageManager.approveMessage(msgParams)
       const address = sigUtil.normalize(cleanMsgParams.from)
       const keyring = await this.keyringController.getKeyringForAccount(address)
-      const wallet = keyring._getWalletForAccount(address)
-      const privKey = ethUtil.toBuffer(wallet.getPrivateKey())
       let signature
-      switch (version) {
-        case 'V1':
-          signature = sigUtil.signTypedDataLegacy(privKey, { data: cleanMsgParams.data })
-          break
-        case 'V3':
-          signature = sigUtil.signTypedData(privKey, { data: JSON.parse(cleanMsgParams.data) })
-          break
+      // HW Wallet keyrings don't expose private keys so
+      // we need to handle it separately
+      if (HW_WALLETS_KEYRINGS.indexOf(keyring.type) === -1) {
+        const wallet = keyring._getWalletForAccount(address)
+        const privKey = ethUtil.toBuffer(wallet.getPrivateKey())
+        switch (version) {
+          case 'V1':
+            signature = sigUtil.signTypedDataLegacy(privKey, { data: cleanMsgParams.data })
+            break
+          case 'V3':
+            signature = sigUtil.signTypedData(privKey, { data: JSON.parse(cleanMsgParams.data) })
+            break
+        }
+      } else {
+        signature = await keyring.signTypedData(address, cleanMsgParams.data);
       }
       this.typedMessageManager.setMsgStatusSigned(msgId, signature)
       return this.getState()
-- 
cgit