1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2025-02-27 06:42:02 +00:00

chore(core): update cpace implementation

[no changelog]
This commit is contained in:
M1nd3r 2025-02-17 17:10:45 +01:00
parent a3dac395bf
commit 0831ebbd8d
2 changed files with 7 additions and 3 deletions

View File

@ -220,7 +220,7 @@ async def _handle_code_entry_is_selected_first_time(ctx: PairingContext) -> None
ctx.channel_ctx.get_handshake_hash(), ctx.channel_ctx.get_handshake_hash(),
) )
assert ctx.code_code_entry is not None assert ctx.code_code_entry is not None
ctx.cpace.generate_keys_and_secret(ctx.code_code_entry.to_bytes(6, "big")) ctx.cpace.generate_keys(ctx.code_code_entry.to_bytes(6, "big"))
await ctx.write_force( await ctx.write_force(
ThpCodeEntryCpaceTrezor(cpace_trezor_public_key=ctx.cpace.trezor_public_key) ThpCodeEntryCpaceTrezor(cpace_trezor_public_key=ctx.cpace.trezor_public_key)
) )

View File

@ -17,9 +17,9 @@ class Cpace:
self.trezor_private_key: bytes self.trezor_private_key: bytes
self.trezor_public_key: bytes self.trezor_public_key: bytes
def generate_keys_and_secret(self, code_code_entry: bytes) -> None: def generate_keys(self, code_code_entry: bytes) -> None:
""" """
Generate ephemeral key pair and a shared secret using Elligator2 with X25519. Generate an ephemeral key pair using Elligator2 with X25519.
""" """
sha_ctx = sha512(_PREFIX) sha_ctx = sha512(_PREFIX)
sha_ctx.update(code_code_entry) sha_ctx.update(code_code_entry)
@ -32,6 +32,10 @@ class Cpace:
self.trezor_public_key = curve25519.multiply(self.trezor_private_key, generator) self.trezor_public_key = curve25519.multiply(self.trezor_private_key, generator)
def compute_shared_secret(self, host_public_key: bytes) -> None: def compute_shared_secret(self, host_public_key: bytes) -> None:
"""
Compute a shared secret using host's public (cpace) key.
Must be called after `generate_keys`.
"""
self.shared_secret = curve25519.multiply( self.shared_secret = curve25519.multiply(
self.trezor_private_key, host_public_key self.trezor_private_key, host_public_key
) )