1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2025-02-21 03:52:04 +00:00

refactor(core,crypto): rename schnorr to BIP340

This commit is contained in:
Ondřej Vejpustek 2021-10-19 21:09:59 +02:00
parent 15bb085509
commit 29ce860d46
11 changed files with 79 additions and 79 deletions

View File

@ -144,7 +144,7 @@ if FEATURE_FLAGS["SECP256K1_ZKP"]:
SOURCE_MOD += [ SOURCE_MOD += [
'vendor/trezor-crypto/zkp_context.c', 'vendor/trezor-crypto/zkp_context.c',
'vendor/trezor-crypto/zkp_ecdsa.c', 'vendor/trezor-crypto/zkp_ecdsa.c',
'vendor/trezor-crypto/zkp_schnorr.c', 'vendor/trezor-crypto/zkp_bip340.c',
] ]
# modtrezorio # modtrezorio

View File

@ -139,7 +139,7 @@ if FEATURE_FLAGS["SECP256K1_ZKP"]:
SOURCE_MOD += [ SOURCE_MOD += [
'vendor/trezor-crypto/zkp_context.c', 'vendor/trezor-crypto/zkp_context.c',
'vendor/trezor-crypto/zkp_ecdsa.c', 'vendor/trezor-crypto/zkp_ecdsa.c',
'vendor/trezor-crypto/zkp_schnorr.c', 'vendor/trezor-crypto/zkp_bip340.c',
] ]
# modtrezorio # modtrezorio

View File

@ -19,15 +19,15 @@
#include "py/objstr.h" #include "py/objstr.h"
#include "zkp_schnorr.h" #include "zkp_bip340.h"
/// package: trezorcrypto.schnorr /// package: trezorcrypto.bip340
/// def generate_secret() -> bytes: /// def generate_secret() -> bytes:
/// """ /// """
/// Generate secret key. /// Generate secret key.
/// """ /// """
STATIC mp_obj_t mod_trezorcrypto_schnorr_generate_secret() { STATIC mp_obj_t mod_trezorcrypt_bip340_generate_secret() {
vstr_t sk = {0}; vstr_t sk = {0};
vstr_init_len(&sk, 32); vstr_init_len(&sk, 32);
for (;;) { for (;;) {
@ -51,14 +51,14 @@ STATIC mp_obj_t mod_trezorcrypto_schnorr_generate_secret() {
} }
return mp_obj_new_str_from_vstr(&mp_type_bytes, &sk); return mp_obj_new_str_from_vstr(&mp_type_bytes, &sk);
} }
STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorcrypto_schnorr_generate_secret_obj, STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorcrypt_bip340_generate_secret_obj,
mod_trezorcrypto_schnorr_generate_secret); mod_trezorcrypt_bip340_generate_secret);
/// def publickey(secret_key: bytes) -> bytes: /// def publickey(secret_key: bytes) -> bytes:
/// """ /// """
/// Computes public key from secret key. /// Computes public key from secret key.
/// """ /// """
STATIC mp_obj_t mod_trezorcrypto_schnorr_publickey(mp_obj_t secret_key) { STATIC mp_obj_t mod_trezorcrypt_bip340_publickey(mp_obj_t secret_key) {
mp_buffer_info_t sk = {0}; mp_buffer_info_t sk = {0};
mp_get_buffer_raise(secret_key, &sk, MP_BUFFER_READ); mp_get_buffer_raise(secret_key, &sk, MP_BUFFER_READ);
if (sk.len != 32) { if (sk.len != 32) {
@ -67,7 +67,7 @@ STATIC mp_obj_t mod_trezorcrypto_schnorr_publickey(mp_obj_t secret_key) {
vstr_t pk = {0}; vstr_t pk = {0};
vstr_init_len(&pk, 32); vstr_init_len(&pk, 32);
int ret = int ret =
zkp_schnorr_get_public_key((const uint8_t *)sk.buf, (uint8_t *)pk.buf); zkp_bip340_get_public_key((const uint8_t *)sk.buf, (uint8_t *)pk.buf);
if (0 != ret) { if (0 != ret) {
vstr_clear(&pk); vstr_clear(&pk);
mp_raise_ValueError("Invalid secret key"); mp_raise_ValueError("Invalid secret key");
@ -75,8 +75,8 @@ STATIC mp_obj_t mod_trezorcrypto_schnorr_publickey(mp_obj_t secret_key) {
return mp_obj_new_str_from_vstr(&mp_type_bytes, &pk); return mp_obj_new_str_from_vstr(&mp_type_bytes, &pk);
} }
STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_schnorr_publickey_obj, STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypt_bip340_publickey_obj,
mod_trezorcrypto_schnorr_publickey); mod_trezorcrypt_bip340_publickey);
/// def sign( /// def sign(
/// secret_key: bytes, /// secret_key: bytes,
@ -85,7 +85,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_schnorr_publickey_obj,
/// """ /// """
/// Uses secret key to produce the signature of the digest. /// Uses secret key to produce the signature of the digest.
/// """ /// """
STATIC mp_obj_t mod_trezorcrypto_schnorr_sign(mp_obj_t secret_key, STATIC mp_obj_t mod_trezorcrypt_bip340_sign(mp_obj_t secret_key,
mp_obj_t digest) { mp_obj_t digest) {
mp_buffer_info_t sk = {0}, dig = {0}; mp_buffer_info_t sk = {0}, dig = {0};
mp_get_buffer_raise(secret_key, &sk, MP_BUFFER_READ); mp_get_buffer_raise(secret_key, &sk, MP_BUFFER_READ);
@ -100,7 +100,7 @@ STATIC mp_obj_t mod_trezorcrypto_schnorr_sign(mp_obj_t secret_key,
vstr_t sig = {0}; vstr_t sig = {0};
vstr_init_len(&sig, 64); vstr_init_len(&sig, 64);
int ret = int ret =
zkp_schnorr_sign_digest((const uint8_t *)sk.buf, (const uint8_t *)dig.buf, zkp_bip340_sign_digest((const uint8_t *)sk.buf, (const uint8_t *)dig.buf,
(uint8_t *)sig.buf, NULL); (uint8_t *)sig.buf, NULL);
if (0 != ret) { if (0 != ret) {
vstr_clear(&sig); vstr_clear(&sig);
@ -109,15 +109,15 @@ STATIC mp_obj_t mod_trezorcrypto_schnorr_sign(mp_obj_t secret_key,
return mp_obj_new_str_from_vstr(&mp_type_bytes, &sig); return mp_obj_new_str_from_vstr(&mp_type_bytes, &sig);
} }
STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_schnorr_sign_obj, STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypt_bip340_sign_obj,
mod_trezorcrypto_schnorr_sign); mod_trezorcrypt_bip340_sign);
/// def verify(public_key: bytes, signature: bytes, digest: bytes) -> bool: /// def verify(public_key: bytes, signature: bytes, digest: bytes) -> bool:
/// """ /// """
/// Uses public key to verify the signature of the digest. /// Uses public key to verify the signature of the digest.
/// Returns True on success. /// Returns True on success.
/// """ /// """
STATIC mp_obj_t mod_trezorcrypto_schnorr_verify(mp_obj_t public_key, STATIC mp_obj_t mod_trezorcrypt_bip340_verify(mp_obj_t public_key,
mp_obj_t signature, mp_obj_t signature,
mp_obj_t digest) { mp_obj_t digest) {
mp_buffer_info_t pk = {0}, sig = {0}, dig = {0}; mp_buffer_info_t pk = {0}, sig = {0}, dig = {0};
@ -133,27 +133,27 @@ STATIC mp_obj_t mod_trezorcrypto_schnorr_verify(mp_obj_t public_key,
if (dig.len != 32) { if (dig.len != 32) {
return mp_const_false; return mp_const_false;
} }
int ret = zkp_schnorr_verify_digest((const uint8_t *)pk.buf, int ret = zkp_bip340_verify_digest((const uint8_t *)pk.buf,
(const uint8_t *)sig.buf, (const uint8_t *)sig.buf,
(const uint8_t *)dig.buf); (const uint8_t *)dig.buf);
return mp_obj_new_bool(ret == 0); return mp_obj_new_bool(ret == 0);
} }
STATIC MP_DEFINE_CONST_FUN_OBJ_3(mod_trezorcrypto_schnorr_verify_obj, STATIC MP_DEFINE_CONST_FUN_OBJ_3(mod_trezorcrypt_bip340_verify_obj,
mod_trezorcrypto_schnorr_verify); mod_trezorcrypt_bip340_verify);
STATIC const mp_rom_map_elem_t mod_trezorcrypto_schnorr_globals_table[] = { STATIC const mp_rom_map_elem_t mod_trezorcrypt_bip340_globals_table[] = {
{MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_schnorr)}, {MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_bip340)},
{MP_ROM_QSTR(MP_QSTR_generate_secret), {MP_ROM_QSTR(MP_QSTR_generate_secret),
MP_ROM_PTR(&mod_trezorcrypto_schnorr_generate_secret_obj)}, MP_ROM_PTR(&mod_trezorcrypt_bip340_generate_secret_obj)},
{MP_ROM_QSTR(MP_QSTR_publickey), {MP_ROM_QSTR(MP_QSTR_publickey),
MP_ROM_PTR(&mod_trezorcrypto_schnorr_publickey_obj)}, MP_ROM_PTR(&mod_trezorcrypt_bip340_publickey_obj)},
{MP_ROM_QSTR(MP_QSTR_sign), MP_ROM_PTR(&mod_trezorcrypto_schnorr_sign_obj)}, {MP_ROM_QSTR(MP_QSTR_sign), MP_ROM_PTR(&mod_trezorcrypt_bip340_sign_obj)},
{MP_ROM_QSTR(MP_QSTR_verify), {MP_ROM_QSTR(MP_QSTR_verify),
MP_ROM_PTR(&mod_trezorcrypto_schnorr_verify_obj)}}; MP_ROM_PTR(&mod_trezorcrypt_bip340_verify_obj)}};
STATIC MP_DEFINE_CONST_DICT(mod_trezorcrypto_schnorr_globals, STATIC MP_DEFINE_CONST_DICT(mod_trezorcrypt_bip340_globals,
mod_trezorcrypto_schnorr_globals_table); mod_trezorcrypt_bip340_globals_table);
STATIC const mp_obj_module_t mod_trezorcrypto_schnorr_module = { STATIC const mp_obj_module_t mod_trezorcrypt_bip340_module = {
.base = {&mp_type_module}, .base = {&mp_type_module},
.globals = (mp_obj_dict_t *)&mod_trezorcrypto_schnorr_globals, .globals = (mp_obj_dict_t *)&mod_trezorcrypt_bip340_globals,
}; };

View File

@ -43,8 +43,8 @@
#include "modtrezorcrypto-pbkdf2.h" #include "modtrezorcrypto-pbkdf2.h"
#include "modtrezorcrypto-random.h" #include "modtrezorcrypto-random.h"
#include "modtrezorcrypto-ripemd160.h" #include "modtrezorcrypto-ripemd160.h"
#ifdef USE_SECP256K1_ZKP_SCHNORR #ifdef USE_SECP256K1_ZKP_BIP340
#include "modtrezorcrypto-schnorr.h" #include "modtrezorcrypto-bip340.h"
#endif #endif
#include "modtrezorcrypto-secp256k1.h" #include "modtrezorcrypto-secp256k1.h"
#include "modtrezorcrypto-sha1.h" #include "modtrezorcrypto-sha1.h"
@ -92,9 +92,8 @@ STATIC const mp_rom_map_elem_t mp_module_trezorcrypto_globals_table[] = {
MP_ROM_PTR(&mod_trezorcrypto_Ripemd160_type)}, MP_ROM_PTR(&mod_trezorcrypto_Ripemd160_type)},
{MP_ROM_QSTR(MP_QSTR_secp256k1), {MP_ROM_QSTR(MP_QSTR_secp256k1),
MP_ROM_PTR(&mod_trezorcrypto_secp256k1_module)}, MP_ROM_PTR(&mod_trezorcrypto_secp256k1_module)},
#ifdef USE_SECP256K1_ZKP_SCHNORR #ifdef USE_SECP256K1_ZKP_BIP340
{MP_ROM_QSTR(MP_QSTR_schnorr), {MP_ROM_QSTR(MP_QSTR_bip340), MP_ROM_PTR(&mod_trezorcrypto_bip340_module)},
MP_ROM_PTR(&mod_trezorcrypto_schnorr_module)},
#endif #endif
{MP_ROM_QSTR(MP_QSTR_sha1), MP_ROM_PTR(&mod_trezorcrypto_Sha1_type)}, {MP_ROM_QSTR(MP_QSTR_sha1), MP_ROM_PTR(&mod_trezorcrypto_Sha1_type)},
{MP_ROM_QSTR(MP_QSTR_sha256), MP_ROM_PTR(&mod_trezorcrypto_Sha256_type)}, {MP_ROM_QSTR(MP_QSTR_sha256), MP_ROM_PTR(&mod_trezorcrypto_Sha256_type)},

View File

@ -1,21 +1,21 @@
from typing import * from typing import *
# extmod/modtrezorcrypto/modtrezorcrypto-schnorr.h # extmod/modtrezorcrypto/modtrezorcrypto-bip340.h
def generate_secret() -> bytes: def generate_secret() -> bytes:
""" """
Generate secret key. Generate secret key.
""" """
# extmod/modtrezorcrypto/modtrezorcrypto-schnorr.h # extmod/modtrezorcrypto/modtrezorcrypto-bip340.h
def publickey(secret_key: bytes) -> bytes: def publickey(secret_key: bytes) -> bytes:
""" """
Computes public key from secret key. Computes public key from secret key.
""" """
# extmod/modtrezorcrypto/modtrezorcrypto-schnorr.h # extmod/modtrezorcrypto/modtrezorcrypto-bip340.h
def sign( def sign(
secret_key: bytes, secret_key: bytes,
digest: bytes, digest: bytes,
@ -25,7 +25,7 @@ def sign(
""" """
# extmod/modtrezorcrypto/modtrezorcrypto-schnorr.h # extmod/modtrezorcrypto/modtrezorcrypto-bip340.h
def verify(public_key: bytes, signature: bytes, digest: bytes) -> bool: def verify(public_key: bytes, signature: bytes, digest: bytes) -> bool:
""" """
Uses public key to verify the signature of the digest. Uses public key to verify the signature of the digest.

View File

@ -1,6 +1,6 @@
from trezorcrypto import curve25519, ed25519, nist256p1, secp256k1 # noqa: F401 from trezorcrypto import curve25519, ed25519, nist256p1, secp256k1 # noqa: F401
try: try:
from trezorcrypto import schnorr # noqa: F401 from trezorcrypto import bip340 # noqa: F401
except ImportError: except ImportError:
pass pass

View File

@ -99,7 +99,7 @@ SRCS += slip39.c
SRCS += schnorr.c SRCS += schnorr.c
SRCS += zkp_context.c SRCS += zkp_context.c
SRCS += zkp_ecdsa.c SRCS += zkp_ecdsa.c
SRCS += zkp_schnorr.c SRCS += zkp_bip340.c
OBJS = $(SRCS:.c=.o) OBJS = $(SRCS:.c=.o)
OBJS += secp256k1-zkp.o OBJS += secp256k1-zkp.o

View File

@ -71,9 +71,9 @@
#include "shamir.h" #include "shamir.h"
#include "slip39.h" #include "slip39.h"
#include "slip39_wordlist.h" #include "slip39_wordlist.h"
#include "zkp_bip340.h"
#include "zkp_context.h" #include "zkp_context.h"
#include "zkp_ecdsa.h" #include "zkp_ecdsa.h"
#include "zkp_schnorr.h"
#if VALGRIND #if VALGRIND
/* /*
@ -9156,7 +9156,7 @@ START_TEST(test_schnorr_verify_digest) {
} }
END_TEST END_TEST
START_TEST(test_zkp_schnorr_sign) { START_TEST(test_zkp_bip340_sign) {
static struct { static struct {
const char *priv_key; const char *priv_key;
const char *pub_key; const char *pub_key;
@ -9207,17 +9207,17 @@ START_TEST(test_zkp_schnorr_sign) {
memcpy(digest, fromhex(tests[i].digest), 32); memcpy(digest, fromhex(tests[i].digest), 32);
memcpy(expected_sig, fromhex(tests[i].sig), 32); memcpy(expected_sig, fromhex(tests[i].sig), 32);
zkp_schnorr_get_public_key(priv_key, pub_key); zkp_bip340_get_public_key(priv_key, pub_key);
ck_assert_mem_eq(expected_pub_key, pub_key, 32); ck_assert_mem_eq(expected_pub_key, pub_key, 32);
res = zkp_schnorr_sign_digest(priv_key, digest, sig, aux_input); res = zkp_bip340_sign_digest(priv_key, digest, sig, aux_input);
ck_assert_mem_eq(expected_sig, sig, 32); ck_assert_mem_eq(expected_sig, sig, 32);
ck_assert_int_eq(res, 0); ck_assert_int_eq(res, 0);
} }
} }
END_TEST END_TEST
START_TEST(test_zkp_schnorr_verify) { START_TEST(test_zkp_bip340_verify) {
static struct { static struct {
const char *pub_key; const char *pub_key;
const char *digest; const char *digest;
@ -9294,7 +9294,7 @@ START_TEST(test_zkp_schnorr_verify) {
memcpy(digest, fromhex(tests[i].digest), 32); memcpy(digest, fromhex(tests[i].digest), 32);
memcpy(sig, fromhex(tests[i].sig), 64); memcpy(sig, fromhex(tests[i].sig), 64);
res = zkp_schnorr_verify_digest(pub_key, sig, digest); res = zkp_bip340_verify_digest(pub_key, sig, digest);
ck_assert_int_eq(res, tests[i].res); ck_assert_int_eq(res, tests[i].res);
} }
} }
@ -9612,9 +9612,9 @@ Suite *test_suite(void) {
tcase_add_test(tc, test_schnorr_verify_digest); tcase_add_test(tc, test_schnorr_verify_digest);
suite_add_tcase(s, tc); suite_add_tcase(s, tc);
tc = tcase_create("zkp_schnorr"); tc = tcase_create("zkp_bip340");
tcase_add_test(tc, test_zkp_schnorr_sign); tcase_add_test(tc, test_zkp_bip340_sign);
tcase_add_test(tc, test_zkp_schnorr_verify); tcase_add_test(tc, test_zkp_bip340_verify);
suite_add_tcase(s, tc); suite_add_tcase(s, tc);
#if USE_CARDANO #if USE_CARDANO

View File

@ -30,12 +30,13 @@
#include "vendor/secp256k1-zkp/include/secp256k1_extrakeys.h" #include "vendor/secp256k1-zkp/include/secp256k1_extrakeys.h"
#include "vendor/secp256k1-zkp/include/secp256k1_schnorrsig.h" #include "vendor/secp256k1-zkp/include/secp256k1_schnorrsig.h"
#include "zkp_schnorr.h" #include "zkp_bip340.h"
// BIP340 Schnorr public key derivation // BIP340 Schnorr public key derivation
// private_key_bytes has 32 bytes // private_key_bytes has 32 bytes
// public_key_bytes has 32 bytes // public_key_bytes has 32 bytes
int zkp_schnorr_get_public_key(const uint8_t *private_key_bytes, // returns 0 on success
int zkp_bip340_get_public_key(const uint8_t *private_key_bytes,
uint8_t *public_key_bytes) { uint8_t *public_key_bytes) {
int result = 0; int result = 0;
@ -81,7 +82,7 @@ int zkp_schnorr_get_public_key(const uint8_t *private_key_bytes,
// signature_bytes has 64 bytes // signature_bytes has 64 bytes
// auxiliary_data has 32 bytes or is NULL // auxiliary_data has 32 bytes or is NULL
// returns 0 on success // returns 0 on success
int zkp_schnorr_sign_digest(const uint8_t *private_key_bytes, int zkp_bip340_sign_digest(const uint8_t *private_key_bytes,
const uint8_t *digest, uint8_t *signature_bytes, const uint8_t *digest, uint8_t *signature_bytes,
uint8_t *auxiliary_data) { uint8_t *auxiliary_data) {
int result = 0; int result = 0;
@ -118,7 +119,7 @@ int zkp_schnorr_sign_digest(const uint8_t *private_key_bytes,
// signature_bytes has 64 bytes // signature_bytes has 64 bytes
// digest has 32 bytes // digest has 32 bytes
// returns 0 if verification succeeded // returns 0 if verification succeeded
int zkp_schnorr_verify_digest(const uint8_t *public_key_bytes, int zkp_bip340_verify_digest(const uint8_t *public_key_bytes,
const uint8_t *signature_bytes, const uint8_t *signature_bytes,
const uint8_t *digest) { const uint8_t *digest) {
int result = 0; int result = 0;

15
crypto/zkp_bip340.h Normal file
View File

@ -0,0 +1,15 @@
#ifndef __ZKP_BIP340_H__
#define __ZKP_BIP340_H__
#include <stdint.h>
int zkp_bip340_get_public_key(const uint8_t *private_key_bytes,
uint8_t *public_key_bytes);
int zkp_bip340_sign_digest(const uint8_t *private_key_bytes,
const uint8_t *digest, uint8_t *signature_bytes,
uint8_t *auxiliary_data);
int zkp_bip340_verify_digest(const uint8_t *public_key_bytes,
const uint8_t *signature_bytes,
const uint8_t *digest);
#endif

View File

@ -1,15 +0,0 @@
#ifndef __ZKP_SCHNORR_H__
#define __ZKP_SCHNORR_H__
#include <stdint.h>
int zkp_schnorr_get_public_key(const uint8_t *private_key_bytes,
uint8_t *public_key_bytes);
int zkp_schnorr_sign_digest(const uint8_t *private_key_bytes,
const uint8_t *digest, uint8_t *signature_bytes,
uint8_t *auxiliary_data);
int zkp_schnorr_verify_digest(const uint8_t *public_key_bytes,
const uint8_t *signature_bytes,
const uint8_t *digest);
#endif