What changed, and why it matters
This commit only adds explanatory comments to Python type-stub files describing what happens when an optional anti-klepto host nonce commitment is left out. It does not change any firmware logic, cryptographic code, or default behavior. The comments document an already-existing fallback mode, making the behavior more transparent rather than introducing a new vulnerability.
No security action required. Treat as a documentation/clarity improvement. If the anti-klepto fallback behavior itself is a concern, review the firmware implementation that enforces or defaults to the fallback, not this stub change.
Security signals we found
Documentation-only change in generated Python stubs
Mentions anti-klepto / S2C nonce commitment fallback behavior
No logic, default, or cryptographic implementation change
No vendor security framing or advisory references present
Evidence from the diff
The diff updates generated .pyi stub files for BTC and ETH protobuf messages. It adds docstring-style comments to the host_nonce_commitment property accessors, noting that omitting the field causes a deterministic zero-contribution S2C fallback (or plain RFC6979 for typed messages) without anti-klepto protection. No executable code, protobuf definitions, or firmware behavior is modified.
Changed components
py/bitbox02/bitbox02/communication/generated/btc_pb2.pyipy/bitbox02/bitbox02/communication/generated/eth_pb2.pyiInspect captured patch +28 / −6
### py/bitbox02/bitbox02/communication/generated/btc_pb2.pyi
@@ -468,7 +468,11 @@ class BTCSignInputRequest(google.protobuf.message.Message):
"""all inputs must be ours."""
@property
- def host_nonce_commitment(self) -> antiklepto_pb2.AntiKleptoHostNonceCommitment: ...
+ def host_nonce_commitment(self) -> antiklepto_pb2.AntiKleptoHostNonceCommitment:
+ """If omitted, the signature uses the historical deterministic zero-contribution S2C fallback.
+ This differs from plain RFC6979 and does not provide anti-klepto protection.
+ """
+
def __init__(
self,
*,
@@ -882,7 +886,11 @@ class BTCSignMessageRequest(google.protobuf.message.Message):
@property
def script_config(self) -> global___BTCScriptConfigWithKeypath: ...
@property
- def host_nonce_commitment(self) -> antiklepto_pb2.AntiKleptoHostNonceCommitment: ...
+ def host_nonce_commitment(self) -> antiklepto_pb2.AntiKleptoHostNonceCommitment:
+ """If omitted, the signature uses the historical deterministic zero-contribution S2C fallback.
+ This differs from plain RFC6979 and does not provide anti-klepto protection.
+ """
+
def __init__(
self,
*,
### py/bitbox02/bitbox02/communication/generated/eth_pb2.pyi
@@ -146,7 +146,11 @@ class ETHSignRequest(google.protobuf.message.Message):
@property
def keypath(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.int]: ...
@property
- def host_nonce_commitment(self) -> antiklepto_pb2.AntiKleptoHostNonceCommitment: ...
+ def host_nonce_commitment(self) -> antiklepto_pb2.AntiKleptoHostNonceCommitment:
+ """If omitted, the signature uses the historical deterministic zero-contribution S2C fallback.
+ This differs from plain RFC6979 and does not provide anti-klepto protection.
+ """
+
def __init__(
self,
*,
@@ -207,7 +211,11 @@ class ETHSignEIP1559Request(google.protobuf.message.Message):
@property
def keypath(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.int]: ...
@property
- def host_nonce_commitment(self) -> antiklepto_pb2.AntiKleptoHostNonceCommitment: ...
+ def host_nonce_commitment(self) -> antiklepto_pb2.AntiKleptoHostNonceCommitment:
+ """If omitted, the signature uses the historical deterministic zero-contribution S2C fallback.
+ This differs from plain RFC6979 and does not provide anti-klepto protection.
+ """
+
@property
def payment_request(self) -> btc_pb2.BTCPaymentRequestRequest: ...
def __init__(
@@ -282,7 +290,11 @@ class ETHSignMessageRequest(google.protobuf.message.Message):
@property
def keypath(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.int]: ...
@property
- def host_nonce_commitment(self) -> antiklepto_pb2.AntiKleptoHostNonceCommitment: ...
+ def host_nonce_commitment(self) -> antiklepto_pb2.AntiKleptoHostNonceCommitment:
+ """If omitted, the signature uses the historical deterministic zero-contribution S2C fallback.
+ This differs from plain RFC6979 and does not provide anti-klepto protection.
+ """
+
def __init__(
self,
*,
@@ -418,7 +430,9 @@ class ETHSignTypedMessageRequest(google.protobuf.message.Message):
@property
def types(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___ETHSignTypedMessageRequest.StructType]: ...
@property
- def host_nonce_commitment(self) -> antiklepto_pb2.AntiKleptoHostNonceCommitment: ...
+ def host_nonce_commitment(self) -> antiklepto_pb2.AntiKleptoHostNonceCommitment:
+ """If omitted, plain RFC6979 signing is used without anti-klepto protection."""
+
def __init__(
self,
*,Why this scored 19/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.