nitrokey.nk3.secrets_app

Oath Authenticator client

通过 CTAPHID 传输,通过自定义供应商命令使用。也可通过 CCID 直接使用。

exception nitrokey.nk3.secrets_app.SecretsAppException

基类:Exception

SecretsAppException(代码:str,上下文:str)

__init__(code, context)
参数:
  • code (str)

  • context (str)

返回类型:

None

to_id()
返回类型:

SecretsAppExceptionID

to_string()
返回类型:

str

code: str
context: str
exception nitrokey.nk3.secrets_app.SecretsAppHealthCheckException

基类:Exception

class nitrokey.nk3.secrets_app.Algorithm

基类:Enum

Sha1 = 1
Sha256 = 2
Sha512 = 3
class nitrokey.nk3.secrets_app.CCIDInstruction

基类:Enum

Select = 164
class nitrokey.nk3.secrets_app.Instruction

基类:Enum

Calculate = 162
CalculateAll = 164
ChangePIN = 179
Delete = 2
GetCredential = 181
List = 161
Put = 1
Reset = 4
SendRemaining = 165
SetCode = 3
SetPIN = 180
UpdateCredential = 183
Validate = 163
VerifyCode = 177
VerifyPIN = 178
class nitrokey.nk3.secrets_app.Kind

基类:Enum

classmethod from_attribute_byte(attribute_byte)
参数:

attribute_byte (bytes)

返回类型:

str

classmethod from_attribute_byte_type(a)
参数:

a (int)

返回类型:

Kind

Hmac = 64
Hotp = 16
HotpReverse = 48
NotSet = 240
Totp = 32
class nitrokey.nk3.secrets_app.ListItem

基类:object

ListItem(kind: 'Kind', algorithm: 'Algorithm', label: bytes, properties: nitrokey.nk3.secrets_app.ListItemProperties)

__init__(kind, algorithm, label, properties)
参数:
返回类型:

None

classmethod get_type_name(x)
参数:

x (Any)

返回类型:

str

algorithm: Algorithm
kind: Kind
label: bytes
properties: ListItemProperties
class nitrokey.nk3.secrets_app.ListItemProperties

基类:object

ListItemProperties(touch_required: bool, secret_encryption: bool, pws_data_exist: bool)

__init__(touch_required, secret_encryption, pws_data_exist)
参数:
  • touch_required (bool)

  • secret_encryption (bool)

  • pws_data_exist (bool)

返回类型:

None

classmethod from_byte(b)
参数:

b (int)

返回类型:

ListItemProperties

pws_data_exist: bool
secret_encryption: bool
touch_required: bool
class nitrokey.nk3.secrets_app.PasswordSafeEntry

基类:object

PasswordSafeEntry(login:可选[字节], password:可选[字节], 元数据:可选[字节], 属性可选[字节] = None, 名称:可选[字节] = None)

__init__(login, password, metadata, properties=None, name=None)
参数:
  • login (bytes | None)

  • password (bytes | None)

  • metadata (bytes | None)

  • properties (bytes | None)

  • name (bytes | None)

返回类型:

None

tlv_encode()
返回类型:

list[Entry]

login: bytes | None
metadata: bytes | None
name: bytes | None = None
password: bytes | None
properties: bytes | None = None
class nitrokey.nk3.secrets_app.RawBytes

基类:object

RawBytes(data: list[int])

__init__(data)
参数:

data (list[int])

返回类型:

None

data: list[int]
class nitrokey.nk3.secrets_app.SecretsApp

基类:object

这是一个 Secrets App 客户端 https://github.com/Nitrokey/trussed-secrets-app

__init__(dev, logfn=None)
参数:
  • dev (NK3)

  • logfn (Callable[[str], Any] | None)

calculate(cred_id, challenge=None)

为名为`cred_id`的证书计算OTP代码,并使用挑战`challenge`。

参数:
  • cred_id (bytes) -- The name of the credential

  • challenge (int | None) -- 计算挑战(仅限 TOTP)。应等于:时间戳/周期。常用的周期值为 30。

返回:

作为字节字符串的 OTP 代码

返回类型:

bytes

change_pin_raw(password, new_password)
参数:
  • password (str)

  • new_password (str)

返回类型:

None

clear_code()

清除用于验证其他命令的口令。

返回类型:

None

delete(cred_id)

删除指定 id 的证书。如果给定的证书不存在,删除不会失败:证书 ID

参数:

cred_id (bytes)

返回类型:

None

classmethod encode_properties_to_send(touch_button_required, pin_based_encryption, tlv=False)

将属性结构编码为单字节 @param touch_button_required:是否要求使用触摸按钮 @param pin_based_encryption:是否要求使用 PIN 加密(仅在注册时) @param tlv:如果应编码为 TLV,而不是默认的 "TV",则设置为 "True"。

参数:
  • touch_button_required (bool)

  • pin_based_encryption (bool)

  • tlv (bool)

返回类型:

RawBytes

feature_active_PIN_authentication()
返回类型:

bool

feature_challenge_response_support()
返回类型:

bool

feature_extended_list()
返回类型:

bool

feature_old_application_version()
返回类型:

bool

feature_pws_support()
返回类型:

bool

get_credential(cred_id)
参数:

cred_id (bytes)

返回类型:

PasswordSafeEntry

get_feature_status_cached()
返回类型:

SelectResponse

get_response_for_secret(challenge, secret)
参数:
  • challenge (bytes)

  • secret (bytes)

返回类型:

bytes

get_secret_for_passphrase(passphrase)
参数:

passphrase (str)

返回类型:

bytes

is_pin_healthy()
返回类型:

bool

list(extended=False)

返回已注册证书的列表 :return:字节字符串列表,或字节字符串元组(如果提供了 "扩展 "开关) @deprecated

参数:

extended (bool)

返回类型:

list[Tuple[bytes, bytes] | bytes]

list_with_properties(version=1)

返回带属性的已注册凭证列表 :return:ListItems 列表

参数:

version (int)

返回类型:

List[ListItem]

protocol_v2_confirm_all_requests_with_pin()
返回类型:

bool

protocol_v3_separate_pin_and_no_pin_space()
返回类型:

bool

register(credid, secret=b'00000000000000000000', digits=6, kind=Kind.NotSet, algo=Algorithm.Sha1, initial_counter_value=0, touch_button_required=False, pin_based_encryption=False, login=None, password=None, metadata=None)

注册新的 OTP 凭据 :param credid:凭证 ID :param secret:共享密钥 :param digits:生成代码的位数 :param kind:OTP变体--HOTP或TOTP :param algo:哈希算法--SHA1、SHA256或SHA512 :param initial_counter_value:HOTP证书的计数器初始值(仅限HOTP) :param touch_button_required:使用此凭据需要用户确认是否在场 :param pin_based_encryption:用户对基于密码的额外加密的偏好 :param login:密码保险箱的登录字段 :param password: 密码保险箱的密码字段 :param metadata:用于密码保险箱的元数据字段 :return:无

参数:
  • credid (bytes)

  • secret (bytes)

  • digits (int)

  • kind (Kind)

  • algo (Algorithm)

  • initial_counter_value (int)

  • touch_button_required (bool)

  • pin_based_encryption (bool)

  • login (bytes | None)

  • password (bytes | None)

  • metadata (bytes | None)

返回类型:

None

register_yk_hmac(slot, secret)

注册一个与 Yubikey 兼容的挑战-响应槽。@param slot:挑战-响应槽 @param secret:秘密

参数:
  • slot (int)

  • secret (bytes)

返回类型:

None

rename_credential(cred_id, new_name)

重命名凭据。update_credential() 调用的别名。@param cred_id:要修改的凭据 ID @param new_name:凭据的新 ID

参数:
  • cred_id (bytes)

  • new_name (bytes)

返回类型:

None

reset()

从数据库中删除所有证书

返回类型:

None

select()

执行 SELECT 命令,返回设备的详细信息,包括身份验证所需的密码。 :return SelectResponse Status 结构。如果未设置口令,Challenge 和 Algorithm 字段为 None。

返回类型:

SelectResponse

set_code(passphrase)

根据协议规范建议的默认值设置代码: - https://developers.yubico.com/OATH/YKOATH_Protocol.html

参数:

passphrase (str)

返回类型:

None

set_code_raw(key, challenge, response)

设置或清除用于验证其他命令的口令。原始接口:通过 PBKDF2(ID,1000)处理的用户密码,仅限于前 16 个字节。 :param challenge:从 SELECT 命令中获取的当前密码。 :param response:响应:客户端计算的数据,证明设置正确。

参数:
  • key (bytes)

  • challenge (bytes)

  • response (bytes)

返回类型:

None

set_pin_raw(password)
参数:

password (str)

返回类型:

None

update_credential(cred_id, new_name=None, login=None, password=None, metadata=None, touch_button=None)

更新凭证字段--名称、属性和 PWS 字段。在更新过程中,未填充的字段不会被编码和使用(不会改变当前值)。@param cred_id:要修改的证书 ID @param new_name:证书的新 ID @param login:新的登录字段内容 @param password:密码:新的登录字段内容 @param password: 新的密码字段内容 @param metadata:新元数据字段内容 @param touch_button:设置是否需要使用触摸按钮

参数:
  • cred_id (bytes)

  • new_name (bytes | None)

  • login (bytes | None)

  • password (bytes | None)

  • metadata (bytes | None)

  • touch_button (bool | None)

返回类型:

None

validate(passphrase)

Authenticate using a passphrase

参数:

passphrase (str)

返回类型:

None

validate_raw(challenge, response)

使用口令进行身份验证。:param challenge:从 SELECT 命令中获取的当前挑战。 :param response:响应:根据挑战和密码计算得出的响应。

参数:
  • challenge (bytes)

  • response (bytes)

返回类型:

bytes

verify_code(cred_id, code)

进行输入的 OTP 代码验证(又称反向 HOTP):凭证名称 :param code:要验证的 HOTP 代码。u32 表示。 :return: 验证失败,会出现 OTPAppException 错误;如果代码与内部计算值一致,则返回 True。

参数:
  • cred_id (bytes)

  • code (int)

返回类型:

bool

verify_pin_raw(password)
参数:

password (str)

返回类型:

None

dev: NK3
log: Logger
logfn: Callable[[str], Any]
write_corpus_fn: Callable[[Instruction | CCIDInstruction, bytes], Any] | None
class nitrokey.nk3.secrets_app.SecretsAppExceptionID

基类:IntEnum

__new__(value)
ClassNotSupported = 28160
CommandChainingNotSupported = 26756
ConditionsOfUseNotSatisfied = 27013
FunctionNotSupported = 27265
IncorrectDataParameter = 27264
IncorrectP1OrP2Parameter = 27270
InstructionNotSupportedOrInvalid = 27904
KeyReferenceNotFound = 27272
LogicalChannelNotSupported = 26753
MoreDataAvailable = 25087
NotEnoughMemory = 27268
NotFound = 27266
OperationBlocked = 27011
SecureMessagingNotSupported = 26754
SecurityStatusNotSatisfied = 27010
Success = 36864
UnspecifiedCheckingError = 28416
UnspecifiedNonpersistentExecutionError = 25600
UnspecifiedPersistentExecutionError = 25856
VerificationFailed = 25344
WrongLength = 26368
class nitrokey.nk3.secrets_app.SelectResponse

基类:object

SelectResponse(version:可选[字节], pin_attempt_counter:可选[int], salt:可选[字节], challenge:可选[字节], 算法:可选[字节], serial_number:可选[字节])

__init__(version, pin_attempt_counter, salt, challenge, algorithm, serial_number)
参数:
  • version (bytes | None)

  • pin_attempt_counter (int | None)

  • salt (bytes | None)

  • challenge (bytes | None)

  • algorithm (bytes | None)

  • serial_number (bytes | None)

返回类型:

None

version_str()
返回类型:

str

algorithm: bytes | None
challenge: bytes | None
pin_attempt_counter: int | None
salt: bytes | None
serial_number: bytes | None
version: bytes | None
class nitrokey.nk3.secrets_app.Tag

基类:Enum

Algorithm = 123
Challenge = 116
CredentialId = 113
InitialCounter = 122
Key = 115
NameList = 114
NewPassword = 129
PINCounter = 130
Password = 128
Properties = 120
PwsLogin = 131
PwsMetadata = 133
PwsPassword = 132
Response = 117
SerialNumber = 143
Version = 121