Skip to content

Commit c6a4259

Browse files
Merge pull request #103 from bsv-blockchain/feature/middleware_feedback
Feature/middleware feedback
2 parents eb0f066 + 883b368 commit c6a4259

File tree

13 files changed

+4623
-417
lines changed

13 files changed

+4623
-417
lines changed

bsv/auth/__init__.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
"""
2+
BSV Authentication Module
3+
4+
This module provides BSV authentication protocol implementation including:
5+
- Peer: Central authentication protocol implementation
6+
- SessionManager: Session management
7+
- Certificate: Certificate handling
8+
- Transport: Communication layer
9+
"""
10+
11+
# Export main authentication classes
12+
from .peer import Peer, PeerOptions, PeerSession
13+
from .session_manager import SessionManager
14+
15+
# Certificate imports with fallbacks
16+
try:
17+
from .certificate import Certificate
18+
except (ImportError, AttributeError):
19+
Certificate = None # type: ignore
20+
21+
try:
22+
from .verifiable_certificate import VerifiableCertificate
23+
except (ImportError, AttributeError):
24+
# VerifiableCertificate might have different structure
25+
VerifiableCertificate = None # type: ignore
26+
27+
from .requested_certificate_set import RequestedCertificateSet
28+
from .auth_message import AuthMessage
29+
from .transports.transport import Transport
30+
31+
__all__ = [
32+
'Peer',
33+
'PeerOptions',
34+
'PeerSession',
35+
'SessionManager',
36+
'Certificate',
37+
'VerifiableCertificate',
38+
'RequestedCertificateSet',
39+
'AuthMessage',
40+
'Transport',
41+
]
42+

bsv/auth/auth_message.py

Lines changed: 74 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,49 @@
44

55

66
class 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

Comments
 (0)