44
55
66class AuthMessage :
7- """Represents a message exchanged during the auth protocol."""
7+ """
8+ Represents a message exchanged during the auth protocol (BRC-103).
9+
10+ Required Fields (always):
11+ version: Protocol version (e.g., "1.0")
12+ message_type: Message type ('initialRequest', 'initialResponse', 'general', etc.)
13+ identity_key: Sender's public key for identity verification
14+
15+ Conditional Fields (depends on message_type):
16+ nonce: Required for 'initialRequest' and 'initialResponse'
17+ initial_nonce: Required for 'initialResponse'
18+ your_nonce: Required for 'general' messages
19+
20+ Optional Fields:
21+ certificates: List of verifiable certificates
22+ requested_certificates: Set of requested certificate types
23+ payload: Message payload data
24+ signature: Digital signature of the message
25+
26+ Example:
27+ >>> # Initial request
28+ >>> msg = AuthMessage(
29+ ... version="1.0",
30+ ... message_type="initialRequest",
31+ ... identity_key=public_key,
32+ ... nonce="abc123..."
33+ ... )
34+
35+ >>> # General message
36+ >>> msg = AuthMessage(
37+ ... version="1.0",
38+ ... message_type="general",
39+ ... identity_key=public_key,
40+ ... your_nonce="def456...",
41+ ... payload=b"Hello"
42+ ... )
43+ """
844
945 def __init__ (
1046 self ,
11- version : str = "" ,
12- message_type : str = "" ,
13- identity_key : Optional [ PublicKey ] = None ,
47+ version : str ,
48+ message_type : str ,
49+ identity_key : PublicKey ,
1450 nonce : str = "" ,
1551 initial_nonce : str = "" ,
1652 your_nonce : str = "" ,
@@ -19,6 +55,39 @@ def __init__(
1955 payload : Optional [bytes ] = None ,
2056 signature : Optional [bytes ] = None ,
2157 ):
58+ """
59+ Initialize an AuthMessage.
60+
61+ Args:
62+ version: Protocol version (e.g., "1.0") - REQUIRED
63+ message_type: Message type - REQUIRED
64+ ('initialRequest', 'initialResponse', 'certificateRequest',
65+ 'certificateResponse', 'general')
66+ identity_key: Sender's public key - REQUIRED
67+ nonce: Sender's nonce (required for initial messages)
68+ initial_nonce: Original nonce from initial request (required for response)
69+ your_nonce: Recipient's nonce from previous message (required for general)
70+ certificates: List of verifiable certificates
71+ requested_certificates: Set of requested certificates
72+ payload: Message payload data
73+ signature: Digital signature of the message
74+
75+ Raises:
76+ ValueError: If required fields are empty or None
77+
78+ Note:
79+ This constructor now enforces required fields at instantiation time.
80+ If upgrading from previous versions, ensure all required parameters
81+ are provided when creating AuthMessage instances.
82+ """
83+ # Validate required fields
84+ if not version :
85+ raise ValueError ("version is required and cannot be empty" )
86+ if not message_type :
87+ raise ValueError ("message_type is required and cannot be empty" )
88+ if identity_key is None :
89+ raise ValueError ("identity_key is required and cannot be None" )
90+
2291 self .version = version
2392 self .message_type = message_type
2493 self .identity_key = identity_key
@@ -28,4 +97,4 @@ def __init__(
2897 self .certificates = certificates if certificates is not None else []
2998 self .requested_certificates = requested_certificates
3099 self .payload = payload
31- self .signature = signature
100+ self .signature = signature
0 commit comments