mirror of
https://github.com/logos-blockchain/logos-execution-zone.git
synced 2026-05-14 20:19:51 +00:00
35 lines
973 B
Python
35 lines
973 B
Python
import os
|
|
from typing import Optional
|
|
|
|
from .. import constants
|
|
from ..card_interface import CardInterface
|
|
from ..parsing.identity import parse
|
|
from ..preconditions import require_selected
|
|
|
|
|
|
@require_selected
|
|
def ident(card: CardInterface, challenge: Optional[bytes]) -> bytes:
|
|
'''
|
|
Sends a challenge to the card to receive a signed identity response.
|
|
|
|
Args:
|
|
transport: An instance of the Transport class to communicate with
|
|
the card.
|
|
challenge (bytes): A challenge (nonce or data) to send to the card.
|
|
If None, a random 32-byte challenge is generated.
|
|
|
|
Returns:
|
|
bytes: The public key extracted from the card's identity response.
|
|
|
|
Raises:
|
|
APDUError: If the response status word is not successful (0x9000).
|
|
'''
|
|
challenge = challenge or os.urandom(32)
|
|
|
|
response: bytes = card.send_apdu(
|
|
ins=constants.INS_IDENT,
|
|
data=challenge
|
|
)
|
|
|
|
return parse(challenge, response)
|