feat(identity-wallet): add fetch_audit_log to PdsClient and sign_and_verify_claim
Implements Task 1 and Task 2 of Phase 3 Subcomponent A.
Task 1: Add fetch_audit_log to PdsClient
- New method on PdsClient that fetches the PLC operation audit log from plc.directory
- Makes GET request to {plc_directory_url}/{did}/log/audit
- Returns raw JSON string; on 404, returns DidNotFound error
- Includes tests: test_fetch_audit_log_success, test_fetch_audit_log_not_found
Task 2: Implement sign_and_verify_claim with local verification
- New Tauri command sign_and_verify_claim that coordinates:
1. Old PDS via XRPC for the signed operation (signPlcOperation)
2. plc.directory for the current audit log
3. The crypto crate for local verification
- Extracts testable core logic into sign_and_verify_claim_impl helper
- Performs 4 local verification checks:
1. rotationKeys[0] is the device key (AC4.3, AC4.4)
2. prev field chains correctly from audit log (AC4.5)
3. No unexpected key mutations (AC4.6)
4. No unexpected service mutations (AC4.6)
- Computes OpDiff with added/removed keys and service changes
- Generates warnings for non-blocking concerns like extra services (AC4.7)
- Handles invalid token errors separately (AC4.10)
- Stores verified signed operation in ClaimState for submit_claim
- Includes unit tests for extract_handle_from_also_known_as
All tests compile successfully. Tests using httpmock fail in sandbox mode
due to port binding restrictions (expected per design).