Skip to content

Commit

Permalink
#4 Added a few extra states to assist identification of existing pass…
Browse files Browse the repository at this point in the history
…phrase protected wallets
  • Loading branch information
gary-rowe committed Apr 6, 2015
1 parent c2f999f commit 2995a95
Show file tree
Hide file tree
Showing 13 changed files with 81 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -280,6 +280,20 @@ Optional<MessageEvent> recoverDevice(
*/
Optional<MessageEvent> pinMatrixAck(String pin);

/**
* <p>Send the PASSPHRASE_ACK message to the device in response to a PASSPHRASE_REQUEST.</p>
* <p>Implementers are expected to show a passphrase dialog on the UI.</p>
* <p>Expected response events are:</p>
* <ul>
* <li>FAILURE if the operation was unsuccessful</li>
* </ul>
*
* @param passphrase The passphrase as entered by the user (not obfuscated)
*
* @return The response event if implementation is blocking. Absent if non-blocking or device failure.
*/
Optional<MessageEvent> passphraseAck(String passphrase);

/**
* <p>Send the CANCEL message to the device in response to a BUTTON_REQUEST, PIN_MATRIX_REQUEST or PASSPHRASE_REQUEST. </p>
* <p>Expected response events are:</p>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,11 @@ public enum HardwareWalletEventType {
*/
SHOW_PIN_ENTRY,

/**
* The UI should show a dialog asking the user to enter their passphrase.
*/
SHOW_PASSPHRASE_ENTRY,

/**
* The UI should show a message telling the user that the operation completed successfully.
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,11 @@ protected void internalTransition(HardwareWalletClient client, HardwareWalletCon
HardwareWalletEvents.fireHardwareWalletEvent(HardwareWalletEventType.SHOW_PIN_ENTRY, event.getMessage().get());
// Further state transitions will occur after the user has provided the PIN via the service
break;
case PASSPHRASE_REQUEST:
// Device is asking for a passphrase screen to be displayed (not support)
HardwareWalletEvents.fireHardwareWalletEvent(HardwareWalletEventType.SHOW_PASSPHRASE_ENTRY, event.getMessage().get());
// Further state transitions will occur after the user has provided the passphrase via the service
break;
case BUTTON_REQUEST:
// Device is requesting a button press
HardwareWalletEvents.fireHardwareWalletEvent(HardwareWalletEventType.SHOW_BUTTON_PRESS, event.getMessage().get());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,11 @@ protected void internalTransition(HardwareWalletClient client, HardwareWalletCon
HardwareWalletEvents.fireHardwareWalletEvent(HardwareWalletEventType.SHOW_PIN_ENTRY, event.getMessage().get());
// Further state transitions will occur after the user has provided the PIN via the service
break;
case PASSPHRASE_REQUEST:
// Device is asking for a passphrase screen to be displayed (not support)
HardwareWalletEvents.fireHardwareWalletEvent(HardwareWalletEventType.SHOW_PASSPHRASE_ENTRY, event.getMessage().get());
// Further state transitions will occur after the user has provided the passphrase via the service
break;
case BUTTON_REQUEST:
// Device is requesting a button press
HardwareWalletEvents.fireHardwareWalletEvent(HardwareWalletEventType.SHOW_BUTTON_PRESS, event.getMessage().get());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,11 @@ protected void internalTransition(HardwareWalletClient client, HardwareWalletCon
HardwareWalletEvents.fireHardwareWalletEvent(HardwareWalletEventType.SHOW_PIN_ENTRY, event.getMessage().get());
// Further state transitions will occur after the user has provided the PIN via the service
break;
case PASSPHRASE_REQUEST:
// Device is asking for a passphrase screen to be displayed (not support)
HardwareWalletEvents.fireHardwareWalletEvent(HardwareWalletEventType.SHOW_PASSPHRASE_ENTRY, event.getMessage().get());
// Further state transitions will occur after the user has provided the passphrase via the service
break;
case ADDRESS:
// Device has completed the operation and provided an address
HardwareWalletEvents.fireHardwareWalletEvent(HardwareWalletEventType.ADDRESS, event.getMessage().get());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,11 @@ protected void internalTransition(HardwareWalletClient client, HardwareWalletCon
HardwareWalletEvents.fireHardwareWalletEvent(HardwareWalletEventType.SHOW_PIN_ENTRY, event.getMessage().get());
// Further state transitions will occur after the user has provided the PIN via the service
break;
case PASSPHRASE_REQUEST:
// Device is asking for a passphrase screen to be displayed (not support)
HardwareWalletEvents.fireHardwareWalletEvent(HardwareWalletEventType.SHOW_PASSPHRASE_ENTRY, event.getMessage().get());
// Further state transitions will occur after the user has provided the passphrase via the service
break;
case PUBLIC_KEY:
// Device has completed the operation and provided a public key
PublicKey publicKey = (PublicKey) event.getMessage().get();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,11 @@ protected void internalTransition(HardwareWalletClient client, HardwareWalletCon
HardwareWalletEvents.fireHardwareWalletEvent(HardwareWalletEventType.SHOW_PIN_ENTRY, event.getMessage().get());
// Further state transitions will occur after the user has provided the PIN via the service
break;
case PASSPHRASE_REQUEST:
// Device is asking for a passphrase screen to be displayed (not support)
HardwareWalletEvents.fireHardwareWalletEvent(HardwareWalletEventType.SHOW_PASSPHRASE_ENTRY, event.getMessage().get());
// Further state transitions will occur after the user has provided the passphrase via the service
break;
case PUBLIC_KEY:
// Device has completed the operation and provided a public key
HardwareWalletEvents.fireHardwareWalletEvent(HardwareWalletEventType.PUBLIC_KEY, event.getMessage().get());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,11 @@ protected void internalTransition(HardwareWalletClient client, HardwareWalletCon
HardwareWalletEvents.fireHardwareWalletEvent(HardwareWalletEventType.SHOW_PIN_ENTRY, event.getMessage().get());
// Further state transitions will occur after the user has provided the PIN via the service
break;
case PASSPHRASE_REQUEST:
// Device is asking for a passphrase screen to be displayed (not support)
HardwareWalletEvents.fireHardwareWalletEvent(HardwareWalletEventType.SHOW_PASSPHRASE_ENTRY, event.getMessage().get());
// Further state transitions will occur after the user has provided the passphrase via the service
break;
case SUCCESS:
// Device has completed the operation and is loaded with the given seed
HardwareWalletEvents.fireHardwareWalletEvent(HardwareWalletEventType.SHOW_OPERATION_SUCCEEDED, event.getMessage().get());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,11 @@ protected void internalTransition(HardwareWalletClient client, HardwareWalletCon
HardwareWalletEvents.fireHardwareWalletEvent(HardwareWalletEventType.SHOW_PIN_ENTRY, event.getMessage().get());
// Further state transitions will occur after the user has provided the PIN via the service
break;
case PASSPHRASE_REQUEST:
// Device is asking for a passphrase screen to be displayed (not support)
HardwareWalletEvents.fireHardwareWalletEvent(HardwareWalletEventType.SHOW_PASSPHRASE_ENTRY, event.getMessage().get());
// Further state transitions will occur after the user has provided the passphrase via the service
break;
case ENTROPY_REQUEST:
// Device is asking for additional entropy from the user
HardwareWalletEvents.fireHardwareWalletEvent(HardwareWalletEventType.PROVIDE_ENTROPY);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,11 @@ protected void internalTransition(HardwareWalletClient client, HardwareWalletCon
HardwareWalletEvents.fireHardwareWalletEvent(HardwareWalletEventType.SHOW_PIN_ENTRY, event.getMessage().get());
// Further state transitions will occur after the user has provided the PIN via the service
break;
case PASSPHRASE_REQUEST:
// Device is asking for a passphrase screen to be displayed (not support)
HardwareWalletEvents.fireHardwareWalletEvent(HardwareWalletEventType.SHOW_PASSPHRASE_ENTRY, event.getMessage().get());
// Further state transitions will occur after the user has provided the passphrase via the service
break;
case FAILURE:
// User has cancelled or operation failed
HardwareWalletEvents.fireHardwareWalletEvent(HardwareWalletEventType.SHOW_OPERATION_FAILED, event.getMessage().get());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,11 @@ protected void internalTransition(HardwareWalletClient client, HardwareWalletCon
HardwareWalletEvents.fireHardwareWalletEvent(HardwareWalletEventType.SHOW_PIN_ENTRY, event.getMessage().get());
// Further state transitions will occur after the user has provided the PIN via the service
break;
case PASSPHRASE_REQUEST:
// Device is asking for a passphrase screen to be displayed (not support)
HardwareWalletEvents.fireHardwareWalletEvent(HardwareWalletEventType.SHOW_PASSPHRASE_ENTRY, event.getMessage().get());
// Further state transitions will occur after the user has provided the passphrase via the service
break;
case BUTTON_REQUEST:
// Device is requesting a button press
HardwareWalletEvents.fireHardwareWalletEvent(HardwareWalletEventType.SHOW_BUTTON_PRESS, event.getMessage().get());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,11 @@ protected void internalTransition(HardwareWalletClient client, HardwareWalletCon
HardwareWalletEvents.fireHardwareWalletEvent(HardwareWalletEventType.SHOW_PIN_ENTRY, event.getMessage().get());
// Further state transitions will occur after the user has provided the PIN via the service
break;
case PASSPHRASE_REQUEST:
// Device is asking for a passphrase screen to be displayed (not support)
HardwareWalletEvents.fireHardwareWalletEvent(HardwareWalletEventType.SHOW_PASSPHRASE_ENTRY, event.getMessage().get());
// Further state transitions will occur after the user has provided the passphrase via the service
break;
case TX_REQUEST:
// Device is requesting a transaction input or output
Transaction transaction = context.getTransaction().get();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -381,6 +381,18 @@ public Optional<MessageEvent> pinMatrixAck(String pin) {
);
}

@Override
public Optional<MessageEvent> passphraseAck(String passphrase) {
return sendMessage(
TrezorMessage.PassphraseAck
.newBuilder()
.setPassphrase(passphrase)
.build(),
// No immediate response expected
2, TimeUnit.SECONDS
);
}

@Override
public Optional<MessageEvent> buttonAck() {
return sendMessage(
Expand Down

0 comments on commit 2995a95

Please sign in to comment.