mirror of
https://github.com/trezor/trezor-firmware.git
synced 2025-02-16 17:42:02 +00:00
legacy: support Signify Ed25519 signatures + add device test
This commit is contained in:
parent
588998cb85
commit
c6b9fa4873
@ -110,6 +110,17 @@ int gpgMessageSign(HDNode *node, const uint8_t *message, size_t message_len,
|
||||
}
|
||||
}
|
||||
|
||||
int signifyMessageSign(HDNode *node, const uint8_t *message, size_t message_len,
|
||||
uint8_t *signature) {
|
||||
signature[0] = 0; // prefix: pad with zero, so all signatures are 65 bytes
|
||||
const curve_info *ed25519_curve_info = get_curve_by_name(ED25519_NAME);
|
||||
// only ed25519 is supported
|
||||
if (!ed25519_curve_info || node->curve != ed25519_curve_info) {
|
||||
return 1;
|
||||
}
|
||||
return hdnode_sign(node, message, message_len, 0, signature + 1, NULL, NULL);
|
||||
}
|
||||
|
||||
static void cryptoMessageHash(const CoinInfo *coin, const uint8_t *message,
|
||||
size_t message_len,
|
||||
uint8_t hash[HASHER_DIGEST_LENGTH]) {
|
||||
|
@ -44,6 +44,9 @@ int sshMessageSign(HDNode *node, const uint8_t *message, size_t message_len,
|
||||
int gpgMessageSign(HDNode *node, const uint8_t *message, size_t message_len,
|
||||
uint8_t *signature);
|
||||
|
||||
int signifyMessageSign(HDNode *node, const uint8_t *message, size_t message_len,
|
||||
uint8_t *signature);
|
||||
|
||||
int cryptoMessageSign(const CoinInfo *coin, HDNode *node,
|
||||
InputScriptType script_type, const uint8_t *message,
|
||||
size_t message_len, uint8_t *signature);
|
||||
|
@ -118,6 +118,8 @@ void fsm_msgSignIdentity(const SignIdentity *msg) {
|
||||
msg->identity.has_proto && (strcmp(msg->identity.proto, "ssh") == 0);
|
||||
bool sign_gpg =
|
||||
msg->identity.has_proto && (strcmp(msg->identity.proto, "gpg") == 0);
|
||||
bool sign_signify =
|
||||
msg->identity.has_proto && (strcmp(msg->identity.proto, "signify") == 0);
|
||||
|
||||
int result = 0;
|
||||
layoutProgressSwipe(_("Signing"), 0);
|
||||
@ -127,6 +129,10 @@ void fsm_msgSignIdentity(const SignIdentity *msg) {
|
||||
} else if (sign_gpg) { // GPG should sign a message digest
|
||||
result = gpgMessageSign(node, msg->challenge_hidden.bytes,
|
||||
msg->challenge_hidden.size, resp->signature.bytes);
|
||||
} else if (sign_signify) { // Signify should sign a message digest
|
||||
result =
|
||||
signifyMessageSign(node, msg->challenge_hidden.bytes,
|
||||
msg->challenge_hidden.size, resp->signature.bytes);
|
||||
} else {
|
||||
uint8_t digest[64];
|
||||
sha256_Raw(msg->challenge_hidden.bytes, msg->challenge_hidden.size, digest);
|
||||
|
@ -135,3 +135,37 @@ class TestMsgSignidentity(TrezorTest):
|
||||
sig.signature.hex()
|
||||
== "00f05e5085e666429de397c70a081932654369619c0bd2a6579ea6c1ef2af112ef79998d6c862a16b932d44b1ac1b83c8cbcd0fbda228274fde9e0d0ca6e9cb709"
|
||||
)
|
||||
|
||||
# URI : gpg://satoshi@bitcoin.org
|
||||
identity = proto.IdentityType(
|
||||
proto="gpg", user="satoshi", host="bitcoin.org", port="", path=""
|
||||
)
|
||||
sig = misc.sign_identity(
|
||||
self.client, identity, hidden, visual, ecdsa_curve_name="ed25519"
|
||||
)
|
||||
assert sig.address is None
|
||||
assert (
|
||||
sig.public_key.hex()
|
||||
== "00d18cdf4dbdbb50ef1fdba1ae0539451f3354a366d6a35313712ab82f16d4cd9e"
|
||||
)
|
||||
assert (
|
||||
sig.signature.hex()
|
||||
== "00f47f1a09a2875b971811ebbece19c3004c3ecbe84e65666dc8c36cc2fc002544af8a3f545375ebe53d73b41c700df2f9020256c31bb774a7eb03ed9819226407"
|
||||
)
|
||||
|
||||
# URI : signify://satoshi@bitcoin.org
|
||||
identity = proto.IdentityType(
|
||||
proto="signify", user="satoshi", host="bitcoin.org", port="", path=""
|
||||
)
|
||||
sig = misc.sign_identity(
|
||||
self.client, identity, hidden, visual, ecdsa_curve_name="ed25519"
|
||||
)
|
||||
assert sig.address is None
|
||||
assert (
|
||||
sig.public_key.hex()
|
||||
== "0038c0f42c0e47b233e837763098f029fd01009b74fdf4b0d60db114fb0f4f8b17"
|
||||
)
|
||||
assert (
|
||||
sig.signature.hex()
|
||||
== "009bb30a7a894e6cdd86e2b75803745e93bd5294b979f9e00ce9dc870642c7f6ad7322af4c54d401ea793494e8a5fdf2bf8b88c6e875094512bd67b94f9188000d"
|
||||
)
|
||||
|
Loading…
Reference in New Issue
Block a user