Don't use rejected auth events
@@ -285,8 +285,8 @@ First we define:
events, the auth check algorithm is applied to each event in turn. The state
events used to auth are built up from previous events that passed the auth
checks, starting from a base set of state. If a required auth key doesn't
- exist in the state, then the one in the event's auth_events is used. (See
- _Variations_ and _Attack Vectors_ below).
+ exist in the state, then the one in the event's auth_events is used if the
+ auth event is not rejected. (See _Variations_ and _Attack Vectors_ below).
The algorithm proceeds as follows:
@@ -446,7 +446,7 @@ reapply the unconflicted state at the end).
Events that have been rejected due to failing auth based on the state at the
event (rather than based on their auth chain) are handled as usual by the
-algorithm.
+algorithm, unless otherwise specified.
Note that no events rejected due to failure to auth against their auth chain
should appear in the process, as they should not appear in state (and the
@@ -473,6 +473,10 @@ Intuitively using rejected events feels dangerous, however:
duplicated event will pass auth. Therefore ignoring rejected events wouldn't
reduce any potential attack vectors
+We specifically don't use rejected auth events in the iterative auth checks, as
+in that case the auth events aren't re-authed like the rest of the events in the
+list.
+
### Attack Vectors
