[
[
['6','add','hl'],
['7','add','hl'],
['85','add','hl'],
['14','remove','slide-up'],
['2','add','slide-down']
],
[
['86','add','hl'],
['86','remove','slide-left'],
['87-slide','remove','slide-left'],
['4','add','hidden'],
['6','remove','hl'],
['6','add','hidden'],
['7','remove','hl'],
['7','add','hidden'],
['85','remove','hl'],
['85','add','slide-right']
],
[
['86','remove','hl']
],
[
['87-flip','add','flipped'],
['14','add','slide-down']
],
[
['88','add','hl']
],
[
['89','add','hl'],
['89','remove','slide-right'],
['88','remove','hl'],
['88','add','slide-left'],
['87-slide','add','slide-left']
],
[
['89','remove','hl'],
['8','add','hl'],
['91','add','hl'],
['50','remove','slide-up']
],
[
['92','add','hl'],
['92','remove','slide-left'],
['93-slide','remove','slide-left'],
['8','remove','hl'],
['8','add','hidden'],
['91','remove','hl'],
['91','add','slide-right']
],
[
['92','remove','hl']
],
[
['93-flip','add','flipped'],
['50','add','slide-down']
],
[
['94','add','hl']
],
[
['77','remove','hidden'],
['79','add','hl'],
['79','remove','hidden'],
['95','add','hl'],
['95','remove','slide-right'],
['94','remove','hl'],
['94','add','slide-left'],
['93-slide','add','slide-left']
],
[
['79','remove','hl'],
['95','remove','hl']
]
]
The starting point is $\lib{ots-real}^{\Sigma^*}$, and our goal is to make a sequence of interchangeable modifications until we eventually arrive at $\lib{ots-rand}^{\Sigma^*}$.
We can first apply the security of $\Sigma_1$ with a three-hop maneuver. The three hops are: (1) factor out the operations involving $\Sigma_1$, so that an instance of its library $\lib{ots-real}^{\Sigma_1}$ appears; (2) replace $\lib{ots-real}^{\Sigma_1}$ with $\lib{ots-rand}^{\Sigma_1}$; (3) inline $\lib{ots-rand}^{\Sigma_1}$. These changes have no effect on the calling program.
We can now apply the security property of $\Sigma_2$ in a similar three-step maneuver. The final result is $\lib{ots-rand}^{\Sigma^*}$, which completes the proof.
$\lib{ots-real}^{\Sigma^*}$
$\lib{ots-rand}^{\Sigma^*}$
$\key \gets \Sigma_1.\K$
$\key' \gets \Sigma_2.\K$
$\ctxt_1 $
${}:= {}$
$\Sigma_1.\Enc(\key, \key')$
$\otsenc_1(\key')$
${}\gets \Sigma_1.\C$
$\ctxt_2 $
${}:= {}$
$\Sigma_2.\Enc(\key', \ptxt)$
$\otsenc_2(\ptxt)$
${}\gets \Sigma_2.\C$
return $(\ctxt_1, \ctxt_2)$
$\link$
$\lib{ots-real}^{\Sigma_1}$
$\key \gets \Sigma_1.\K$
$\ctxt := \Sigma_1.\Enc(\key, \ptxt)$
return $\ctxt$
$\lib{ots-rand}^{\Sigma_1}$
$\ctxt \gets \Sigma_1.\C$
return $\ctxt$
$\link$
$\lib{ots-real}^{\Sigma_2}$
$\key \gets \Sigma_2.\K$
$\ctxt := \Sigma_2.\Enc(\key, \ptxt)$
return $\ctxt$
$\lib{ots-rand}^{\Sigma_2}$
$\ctxt \gets \Sigma_2.\C$
return $\ctxt$