Skip to content

Commit

Permalink
[#10277] [keycard] Fix tx signing for derived accounts
Browse files Browse the repository at this point in the history
  • Loading branch information
rasom committed Apr 17, 2020
1 parent 4f120d9 commit c9308af
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 13 deletions.
1 change: 1 addition & 0 deletions externs.js
Original file line number Diff line number Diff line change
Expand Up @@ -490,6 +490,7 @@ var TopLevel = {
"showActionSheetWithOptions" : function () {},
"showPicker" : function () {},
"sign" : function () {},
"signWithPath" : function () {},
"signGroupMembership" : function () {},
"signMessage" : function () {},
"signPinless" : function () {},
Expand Down
15 changes: 10 additions & 5 deletions src/status_im/hardwallet/real_keycard.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -177,12 +177,17 @@
(catch on-failure))))

(defn sign
[{:keys [pairing pin hash on-success on-failure]}]
[{:keys [pairing pin path hash on-success on-failure]}]
(when (and pairing pin hash)
(.. status-keycard
(sign pairing pin hash)
(then on-success)
(catch on-failure))))
(if path
(.. status-keycard
(signWithPath pairing pin path hash)
(then on-success)
(catch on-failure))
(.. status-keycard
(sign pairing pin hash)
(then on-success)
(catch on-failure)))))

(defn sign-typed-data
[{:keys [hash on-success on-failure]}]
Expand Down
25 changes: 17 additions & 8 deletions src/status_im/hardwallet/sign.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -13,21 +13,30 @@
(fx/defn sign
{:events [:hardwallet/sign]}
[{:keys [db] :as cofx}]
(let [card-connected? (get-in db [:hardwallet :card-connected?])
pairing (common/get-pairing db)
multiaccount-keycard-instance-uid (get-in db [:multiaccount :keycard-instance-uid])
instance-uid (get-in db [:hardwallet :application-info :instance-uid])
keycard-match? (= multiaccount-keycard-instance-uid instance-uid)
hash (get-in db [:hardwallet :hash])
pin (common/vector->string (get-in db [:hardwallet :pin :sign]))]
(log/debug "FOOOOO sign keke" (:signing/tx db))
(let [card-connected? (get-in db [:hardwallet :card-connected?])
pairing (common/get-pairing db)
keycard-instance-uid (get-in db [:multiaccount :keycard-instance-uid])
instance-uid (get-in db [:hardwallet :application-info :instance-uid])
keycard-match? (= keycard-instance-uid instance-uid)
hash (get-in db [:hardwallet :hash])
pin (common/vector->string (get-in db [:hardwallet :pin :sign]))
from (get-in db [:signing/tx :from :address])
path (reduce
(fn [_ {:keys [address path]}]
(when (= from address)
(reduced path)))
nil
(:multiaccount/accounts db))]
(if (and card-connected?
keycard-match?)
{:db (-> db
(assoc-in [:hardwallet :card-read-in-progress?] true)
(assoc-in [:hardwallet :pin :status] :verifying))
:hardwallet/sign {:hash (ethereum/naked-address hash)
:pairing pairing
:pin pin}}
:pin pin
:path path}}
(fx/merge cofx
{:db (assoc-in db [:signing/sign :keycard-step] :signing)}
(common/set-on-card-connected :hardwallet/sign)
Expand Down

0 comments on commit c9308af

Please sign in to comment.