@@ -15,3 +15,84 @@ enum.LAPolicy.use-value = true
1515enum.LACredentialType.use-value = true
1616enum.LAError.use-value = true
1717enum.LAAccessControlOperation.use-value = true
18+
19+ unsafe-default-safety.documentation-is-reviewed = true
20+ unsafe-default-safety.bounds-checked-internally = true
21+
22+ # Construction increments process-wide `+newInstanceId` and `+newCommandId`
23+ # counters without atomics or a lock (observed on macOS 26.6.2).
24+ class.LAContext.methods.init.unsafe = true
25+ class.LAContext.methods.new.unsafe = true
26+ class.LARight.methods.init.unsafe = true
27+ class.LARight.methods."initWithRequirement:".unsafe = true
28+ class.LARight.methods.new.unsafe = true
29+
30+ # Increments the process-wide command counter, and its error path replaces the
31+ # process-wide cached biometry type.
32+ class.LAContext.methods."canEvaluatePolicy:error:".unsafe = true
33+
34+ # Each call takes an ID from the process-wide command counter.
35+ class.LAContext.methods.invalidate.unsafe = true
36+ class.LAContext.methods."isCredentialSet:".unsafe = true
37+ class.LAContext.methods."setCredential:type:".unsafe = true
38+ class.LAContext.methods.localizedFallbackTitle.unsafe = true
39+ class.LAContext.methods."setLocalizedFallbackTitle:".unsafe = true
40+ class.LAContext.methods.localizedCancelTitle.unsafe = true
41+ class.LAContext.methods."setLocalizedCancelTitle:".unsafe = true
42+ class.LAContext.methods.touchIDAuthenticationAllowableReuseDuration.unsafe = true
43+ class.LAContext.methods."setTouchIDAuthenticationAllowableReuseDuration:".unsafe = true
44+ class.LAContext.methods.localizedReason.unsafe = true
45+ class.LAContext.methods."setLocalizedReason:".unsafe = true
46+ class.LAContext.methods.interactionNotAllowed.unsafe = true
47+ class.LAContext.methods."setInteractionNotAllowed:".unsafe = true
48+
49+ # Reads the process-wide cached biometry type without retaining it, while
50+ # other contexts and evaluation completions replace and release it unguarded.
51+ class.LAContext.methods.biometryType.unsafe = true
52+ class.LAContext.methods.domainState.unsafe = true
53+ class.LAContext.methods.evaluatedPolicyDomainState.unsafe = true
54+
55+ # Deprecated and not reviewed.
56+ class.LAContext.methods.maxBiometryFailures.unsafe = true
57+ class.LAContext.methods."setMaxBiometryFailures:".unsafe = true
58+
59+ # The reply runs on a framework queue and updates process-wide state shared
60+ # with construction.
61+ class.LAContext.methods."evaluatePolicy:localizedReason:reply:".unsafe = true
62+ class.LAContext.methods."evaluateAccessControl:operation:localizedReason:reply:".unsafe = true
63+
64+ # The completion runs on a framework queue and writes the right's `state`.
65+ class.LARight.methods."authorizeWithLocalizedReason:completion:".unsafe = true
66+ class.LARight.methods."checkCanAuthorizeWithCompletion:".unsafe = true
67+ class.LARight.methods."deauthorizeWithCompletion:".unsafe = true
68+
69+ # Reads `_state` directly while authorization completions write it from a
70+ # framework queue.
71+ class.LARight.methods.state.unsafe = true
72+
73+ # The observer is held weakly and called on a framework queue.
74+ class.LAEnvironment.methods."addObserver:".unsafe = true
75+ class.LAEnvironment.methods."removeObserver:".unsafe = true
76+ protocol.LAEnvironmentObserver.methods."environment:stateDidChangeFromOldState:".unsafe = true
77+
78+ # Inherited from `NSObject` with unspecified behaviour, instances come from the
79+ # class factory methods.
80+ class.LAAuthenticationRequirement.methods.init.unsafe = true
81+ class.LAAuthenticationRequirement.methods.new.unsafe = true
82+ class.LABiometryFallbackRequirement.methods.init.unsafe = true
83+ class.LABiometryFallbackRequirement.methods.new.unsafe = true
84+
85+ # Instances are only obtained through `LARightStore`.
86+ class.LAPersistedRight.methods."initWithRequirement:".unsafe = true
87+
88+ # Creates or uses an `LAContext` internally, which increments the counters above.
89+ class.LARightStore.methods."rightForIdentifier:completion:".unsafe = true
90+ class.LARightStore.methods."saveRight:identifier:completion:".unsafe = true
91+ class.LARightStore.methods."saveRight:identifier:secret:completion:".unsafe = true
92+ class.LAPrivateKey.methods."signData:secKeyAlgorithm:completion:".unsafe = true
93+ class.LAPrivateKey.methods."decryptData:secKeyAlgorithm:completion:".unsafe = true
94+ class.LAPrivateKey.methods."exchangeKeysWithPublicKey:secKeyAlgorithm:secKeyParameters:completion:".unsafe = true
95+ class.LAPublicKey.methods."exportBytesWithCompletion:".unsafe = true
96+ class.LAPublicKey.methods."encryptData:secKeyAlgorithm:completion:".unsafe = true
97+ class.LAPublicKey.methods."verifyData:signature:secKeyAlgorithm:completion:".unsafe = true
98+ class.LASecret.methods."loadDataWithCompletion:".unsafe = true
0 commit comments