[
[
['9','add','hl'],
['155','add','hl'],
['160','add','hl'],
['166','add','hl'],
['151','add','hl'],
['13','remove','slide-up'],
['2','add','slide-down']
],
[
['18','add','hl'],
['18','remove','hidden'],
['8','remove','indent-1'],
['20','add','hl'],
['20','remove','hidden'],
['152','add','hl'],
['152','remove','slide-left'],
['4','add','hidden'],
['8','add','indent-2'],
['9','remove','hl'],
['9','add','hidden'],
['155','remove','hl'],
['155','add','slide-left'],
['160','remove','hl'],
['160','add','slide-right'],
['166','remove','hl'],
['166','add','slide-left'],
['151','remove','hl'],
['151','add','slide-right']
],
[
['18','remove','hl'],
['20','remove','hl'],
['152','remove','hl'],
['5','add','hl'],
['6','add','hl'],
['157','add','hl'],
['154','add','hl'],
['24','remove','slide-up'],
['13','add','slide-down']
],
[
['158','add','hl'],
['158','remove','slide-left'],
['155','add','hl'],
['155','remove','slide-left'],
['159-slide','remove','slide-left'],
['5','remove','hl'],
['5','add','hidden'],
['6','remove','hl'],
['6','add','hidden'],
['157','remove','hl'],
['157','add','slide-right'],
['154','remove','hl'],
['154','add','slide-right']
],
[
['158','remove','hl'],
['155','remove','hl']
],
[
['159-flip','add','flipped'],
['24','add','slide-down']
],
[
['158','add','hl'],
['164','add','hl'],
['155','add','hl']
],
[
['56','add','hl'],
['56','remove','hidden'],
['161','add','hl'],
['161','remove','slide-right'],
['58','add','hl'],
['58','remove','hidden'],
['59','remove','indent-2'],
['59','add','hl'],
['59','remove','hidden'],
['160','add','hl'],
['160','remove','slide-right'],
['158','remove','hl'],
['158','add','slide-left'],
['164','remove','hl'],
['164','add','slide-left'],
['59','add','indent-3'],
['155','remove','hl'],
['155','add','slide-left'],
['159-slide','add','slide-left']
],
[
['56','remove','hl'],
['161','remove','hl'],
['58','remove','hl'],
['59','remove','hl'],
['160','remove','hl'],
['163','add','hl'],
['64','remove','slide-up']
],
[
['164','add','hl'],
['164','remove','slide-left'],
['71','add','hl'],
['71','remove','hidden'],
['72','add','hl'],
['72','remove','hidden'],
['163','remove','hl'],
['163','add','slide-right']
],
[
['164','remove','hl'],
['71','remove','hl'],
['72','remove','hl']
],
[
['86','add','hl'],
['86','remove','hidden'],
['78','remove','slide-up'],
['64','add','slide-down']
],
[
['86','remove','hl'],
['86','add','hl'],
['72','add','hl'],
['93','remove','slide-up'],
['78','add','slide-down']
],
[
['59','remove','indent-3'],
['86','remove','hl'],
['86','add','hidden'],
['72','remove','hl'],
['72','add','hidden'],
['59','add','indent-2']
],
[
['59','add','hl'],
['165','add','hl'],
['106','remove','slide-up'],
['93','add','slide-down']
],
[
['166','add','hl'],
['166','remove','slide-left'],
['115','add','hl'],
['115','remove','hidden'],
['59','remove','hl'],
['59','add','hidden'],
['165','remove','hl'],
['165','add','slide-right']
],
[
['166','remove','hl'],
['115','remove','hl'],
['20','add','hl'],
['119','remove','slide-up'],
['106','add','slide-down']
],
[
['123','add','hl'],
['123','remove','hidden'],
['124','add','hl'],
['124','remove','hidden'],
['165','add','hl'],
['165','remove','slide-right'],
['154','add','hl'],
['154','remove','slide-right'],
['155','add','hl'],
['155','remove','slide-left'],
['20','remove','hl'],
['20','add','hidden']
],
[
['123','remove','hl'],
['124','remove','hl'],
['165','remove','hl'],
['154','remove','hl'],
['155','remove','hl'],
['10','add','hl'],
['133','remove','slide-up'],
['119','add','slide-down']
],
[
['135','remove','hidden'],
['139','add','hl'],
['139','remove','hidden'],
['140','add','hl'],
['140','remove','hidden'],
['142','add','hl'],
['142','remove','hidden'],
['143','add','hl'],
['143','remove','hidden'],
['151','add','hl'],
['151','remove','slide-right'],
['10','remove','hl'],
['10','add','hidden']
],
[
['139','remove','hl'],
['140','remove','hl'],
['142','remove','hl'],
['143','remove','hl'],
['151','remove','hl']
]
]
The starting point is $\lib{prf-real}$.
We can add a cache $\prftable[\cdot]$ so that each output is computed only once.
Apply the PRF-security of $F$ in a 3-hop maneuver.
Our intuition says that $Y_1 \oplus X_2$ never repeats; in other words, $R[Y_1 \oplus X_2]$ is always undefined. To argue this formally, let's trigger a bad event if this is not the case.
If we can show that the bad event has negligible probability, then we can arbitrarily change the library's behavior after the bad event is triggered.
Clean up the redundant logic.
We can swap the assignment order of $\prftable[X_1 \| X_2]$ and $R[Y_1 \oplus X_2]$.
We can move $\prftable[X_1\|X_2] \gets \bits^\secpar$ earlier. After doing so, it is clear that $R[\cdot]$ does not affect the output of $\prfquery$: It is used only to determine whether to trigger the bad event.
Instead of triggering the bad event as $\prfquery$ is called, we can do so at the end of time. This will not change the bad event's probability.
$\lib{prf-real}$
$\key \gets \bits^\secpar$
$\lib{prf-rand}$
if $\prftable[X_1\|X_2]$ undefined:
$\prftable[X_1\|X_2] \gets \bits^\secpar$
$\mathcal{X} := \mathcal{X} \cup \{ X_1 \| X_2 \}$
return $\prftable[X_1\|X_2]$
for $X_1 \| X_2 \in \mathcal{X}$:
if $R[X_1]$ undefined: $R[X_1] \gets \bits^\secpar$
$Y_1 := {}$
$F(\key,X_1)$
$\prfquery_F(X_1)$
$R[X_1]$
$Y_2 := F(\key,Y_1 \oplus X_2)$
$\badvar := \mytrue$
$R[ Y_1 \oplus X_2 ] \gets \bits^\secpar$
else:
$R[ Y_1 \oplus X_2 ] \gets \bits^\secpar$
$\prftable[X_1\|X_2] $
${}:= {}$
$F(\key,Y_1 \oplus X_2)$
$\prfquery_F(Y_1 \oplus X_2)$
$R[ Y_1 \oplus X_2 ]$
${}\gets \bits^\secpar$
$R[ Y_1 \oplus X_2 ] := \prftable[X_1\|X_2]$
return
$Y_2$
$\prftable[X_1\|X_2]$
$\link$
$\lib{prf-real}^F$
$\key \gets \bits^\secpar$
return $F(\key,X)$
$\lib{prf-rand}^F$
if $\prftable[X]$ undefined:
$\prftable[X] \gets \bits^n$
return $\prftable[X]$