code wiki / (root) / nx_twin_key_test.nx

nx_twin_key_test.nx source

↩ module page · 62 lines · 2429 B

1// nx_twin_key_test.nx -- smoke for nx_twin_key. 2 3import "nx_syscalls.nx" 4import "nx_twin_key.nx" 5 6func main() -> i64 { 7 if NX_TKP_N_PURPOSES != 6 { return 1 } 8 if NX_TKS_N_STATES != 5 { return 2 } 9 if nx_tkp_is_valid(NX_TKP_EMERGENCY_CELLULAR) != 1 { return 3 } 10 if nx_tkp_is_valid(6) != 0 { return 4 } 11 12 let l: *NxTwinKeyLedger = nx_twin_key_ledger_new(8) 13 if l.count != 0 { return 5 } 14 15 // Propose: parents 1 + 2 are key-holders 16 if nx_twin_key_propose(l, 1, NX_TKP_EMERGENCY_CELLULAR, 1, 2, 1000, 60000) != NX_TK_OK { return 6 } 17 if l.count != 1 { return 7 } 18 19 // Same key-holder for A and B rejected 20 if nx_twin_key_propose(l, 2, NX_TKP_DRONE_DEPLOYMENT, 1, 1, 1000, 60000) != NX_TK_ERR_BAD_HOLDERS { return 8 } 21 22 // Bad purpose rejected 23 if nx_twin_key_propose(l, 3, 99, 1, 2, 1000, 60000) != NX_TK_ERR_BAD_PURPOSE { return 9 } 24 25 // Initial check: not yet authorized 26 if nx_twin_key_check(l, 1, 2000) != NX_TK_ERR_NOT_PENDING { return 10 } 27 28 // First signer (A) signs 29 let v1: nx_int = nx_twin_key_sign(l, 1, 1, 2000) 30 if v1 != NX_TK_OK { return 11 } 31 if nx_twin_key_check(l, 1, 2500) != NX_TK_ERR_NOT_PENDING { return 12 } 32 if nx_twin_key_count_by_state(l, NX_TKS_PARTIAL) != 1 { return 13 } 33 34 // Wrong signer (not in key-holder set) refused 35 if nx_twin_key_sign(l, 1, 999, 2500) != NX_TK_ERR_NOT_PENDING { return 14 } 36 37 // Second signer (B) signs -> AUTHORIZED 38 let v2: nx_int = nx_twin_key_sign(l, 1, 2, 3000) 39 if v2 != NX_TK_GRANTED { return 15 } 40 if nx_twin_key_check(l, 1, 3500) != NX_TK_GRANTED { return 16 } 41 if nx_twin_key_count_by_state(l, NX_TKS_AUTHORIZED) != 1 { return 17 } 42 43 // Re-sign after authorized: idempotent OK 44 if nx_twin_key_sign(l, 1, 1, 4000) != NX_TK_OK { return 18 } 45 46 // Past expiry -> EXPIRED 47 if nx_twin_key_check(l, 1, 99999) != NX_TK_ERR_EXPIRED { return 19 } 48 49 // Revoke 50 nx_twin_key_propose(l, 5, NX_TKP_CAP_GRANT_OVERRIDE, 1, 2, 5000, 60000) 51 nx_twin_key_sign(l, 5, 1, 5100) 52 nx_twin_key_sign(l, 5, 2, 5200) 53 if nx_twin_key_check(l, 5, 5300) != NX_TK_GRANTED { return 20 } 54 nx_twin_key_revoke(l, 5) 55 if nx_twin_key_check(l, 5, 5400) != NX_TK_ERR_NOT_PENDING { return 21 } 56 57 // Unknown request rejected 58 if nx_twin_key_sign(l, 99, 1, 6000) != NX_TK_ERR_NOT_FOUND { return 22 } 59 if nx_twin_key_check(l, 99, 6000) != NX_TK_ERR_NOT_FOUND { return 23 } 60 61 return 0 62}