(* This code extends 'word_prelude'. *) Dlet (Pvar "GETKEYS") (Fun "v87" (Mat (Var "v87") [(Pcon "Pair" [Pvar "v86"; Pvar "v85"], Mat (Var "v85") [(Pcon "Pair" [Pvar "v84"; Pvar "v83"], Mat (Var "v83") [(Pcon "Pair" [Pvar "v82"; Pvar "v81"], Mat (Var "v81") [(Pcon "Pair" [Pvar "v80"; Pvar "v79"], Mat (Var "v79") [(Pcon "Pair" [Pvar "v78"; Pvar "v77"], Mat (Var "v77") [(Pcon "Pair" [Pvar "v76"; Pvar "v75"], Mat (Var "v75") [(Pcon "Pair" [Pvar "v74"; Pvar "v73"], Mat (Var "v73") [(Pcon "Pair" [Pvar "v72"; Pvar "v71"], Mat (Var "v71") [(Pcon "Pair" [Pvar "v70"; Pvar "v69"], Mat (Var "v69") [(Pcon "Pair" [Pvar "v68"; Pvar "v67"], Mat (Var "v67") [(Pcon "Pair" [Pvar "v66"; Pvar "v65"], Mat (Var "v65") [(Pcon "Pair" [Pvar "v64"; Pvar "v63"], Mat (Var "v63") [(Pcon "Pair" [Pvar "v62"; Pvar "v61"], Mat (Var "v61") [(Pcon "Pair" [Pvar "v60"; Pvar "v59"], Mat (Var "v59") [(Pcon "Pair" [Pvar "v58"; Pvar "v57"], Mat (Var "v57") [(Pcon "Pair" [Pvar "v56"; Pvar "v55"], Mat (Var "v55") [(Pcon "Pair" [Pvar "v54"; Pvar "v53"], Mat (Var "v53") [(Pcon "Pair" [Pvar "v52"; Pvar "v51"], Mat (Var "v51") [(Pcon "Pair" [Pvar "v50"; Pvar "v49"], Mat (Var "v49") [(Pcon "Pair" [Pvar "v48"; Pvar "v47"], Mat (Var "v47") [(Pcon "Pair" [Pvar "v46"; Pvar "v45"], Mat (Var "v45") [(Pcon "Pair" [Pvar "v44"; Pvar "v43"], Mat (Var "v43") [(Pcon "Pair" [Pvar "v42"; Pvar "v41"], Mat (Var "v41") [(Pcon "Pair" [Pvar "v40"; Pvar "v39"], Mat (Var "v39") [(Pcon "Pair" [Pvar "v38"; Pvar "v37"], Mat (Var "v37") [(Pcon "Pair" [Pvar "v36"; Pvar "v35"], Mat (Var "v35") [(Pcon "Pair" [Pvar "v34"; Pvar "v33"], Mat (Var "v33") [(Pcon "Pair" [Pvar "v32"; Pvar "v31"], Mat (Var "v31") [(Pcon "Pair" [Pvar "v30"; Pvar "v29"], Mat (Var "v29") [(Pcon "Pair" [Pvar "v28"; Pvar "v27"], Mat (Var "v27") [(Pcon "Pair" [Pvar "v26"; Pvar "v25"], Mat (Var "v25") [(Pcon "Pair" [Pvar "v24"; Pvar "v23"], Mat (Var "v23") [(Pcon "Pair" [Pvar "v22"; Pvar "v21"], Mat (Var "v21") [(Pcon "Pair" [Pvar "v20"; Pvar "v19"], Mat (Var "v19") [(Pcon "Pair" [Pvar "v18"; Pvar "v17"], Mat (Var "v17") [(Pcon "Pair" [Pvar "v16"; Pvar "v15"], Mat (Var "v15") [(Pcon "Pair" [Pvar "v14"; Pvar "v13"], Mat (Var "v13") [(Pcon "Pair" [Pvar "v12"; Pvar "v11"], Mat (Var "v11") [(Pcon "Pair" [Pvar "v10"; Pvar "v9"], Mat (Var "v9") [(Pcon "Pair" [Pvar "v8"; Pvar "v7"], Mat (Var "v7") [(Pcon "Pair" [Pvar "v6"; Pvar "v5"], Mat (Var "v5") [(Pcon "Pair" [Pvar "v4"; Pvar "v3"], Mat (Var "v3") [(Pcon "Pair" [Pvar "v2"; Pvar "v1"], Con "Pair" [Var "v86"; Var "v84"])])])])])])])])])])])])])])])])])])])])])])])])])])])])])])])])])])])])])])])])])])])])) Dlet (Pvar "PreWhitening") (Fun "v7" (Fun "v8" (Mat (Var "v8") [(Pcon "Pair" [Pvar "v6"; Pvar "v5"], Mat (Var "v5") [(Pcon "Pair" [Pvar "v4"; Pvar "v3"], Mat (Var "v3") [(Pcon "Pair" [Pvar "v2"; Pvar "v1"], Con "Pair" [Var "v6"; Con "Pair" [App Opapp (App Opapp (Var "word_add") (Var "v4")) (App Opapp (Var "FST") (App Opapp (Var "GETKEYS") (Var "v7"))); Con "Pair" [Var "v2"; App Opapp (App Opapp (Var "word_add") (Var "v1")) (App Opapp (Var "SND") (App Opapp (Var "GETKEYS") (Var "v7")))]]])])])]))) Dlet (Pvar "ROTKEYS") (Fun "v87" (Mat (Var "v87") [(Pcon "Pair" [Pvar "v86"; Pvar "v85"], Mat (Var "v85") [(Pcon "Pair" [Pvar "v84"; Pvar "v83"], Mat (Var "v83") [(Pcon "Pair" [Pvar "v82"; Pvar "v81"], Mat (Var "v81") [(Pcon "Pair" [Pvar "v80"; Pvar "v79"], Mat (Var "v79") [(Pcon "Pair" [Pvar "v78"; Pvar "v77"], Mat (Var "v77") [(Pcon "Pair" [Pvar "v76"; Pvar "v75"], Mat (Var "v75") [(Pcon "Pair" [Pvar "v74"; Pvar "v73"], Mat (Var "v73") [(Pcon "Pair" [Pvar "v72"; Pvar "v71"], Mat (Var "v71") [(Pcon "Pair" [Pvar "v70"; Pvar "v69"], Mat (Var "v69") [(Pcon "Pair" [Pvar "v68"; Pvar "v67"], Mat (Var "v67") [(Pcon "Pair" [Pvar "v66"; Pvar "v65"], Mat (Var "v65") [(Pcon "Pair" [Pvar "v64"; Pvar "v63"], Mat (Var "v63") [(Pcon "Pair" [Pvar "v62"; Pvar "v61"], Mat (Var "v61") [(Pcon "Pair" [Pvar "v60"; Pvar "v59"], Mat (Var "v59") [(Pcon "Pair" [Pvar "v58"; Pvar "v57"], Mat (Var "v57") [(Pcon "Pair" [Pvar "v56"; Pvar "v55"], Mat (Var "v55") [(Pcon "Pair" [Pvar "v54"; Pvar "v53"], Mat (Var "v53") [(Pcon "Pair" [Pvar "v52"; Pvar "v51"], Mat (Var "v51") [(Pcon "Pair" [Pvar "v50"; Pvar "v49"], Mat (Var "v49") [(Pcon "Pair" [Pvar "v48"; Pvar "v47"], Mat (Var "v47") [(Pcon "Pair" [Pvar "v46"; Pvar "v45"], Mat (Var "v45") [(Pcon "Pair" [Pvar "v44"; Pvar "v43"], Mat (Var "v43") [(Pcon "Pair" [Pvar "v42"; Pvar "v41"], Mat (Var "v41") [(Pcon "Pair" [Pvar "v40"; Pvar "v39"], Mat (Var "v39") [(Pcon "Pair" [Pvar "v38"; Pvar "v37"], Mat (Var "v37") [(Pcon "Pair" [Pvar "v36"; Pvar "v35"], Mat (Var "v35") [(Pcon "Pair" [Pvar "v34"; Pvar "v33"], Mat (Var "v33") [(Pcon "Pair" [Pvar "v32"; Pvar "v31"], Mat (Var "v31") [(Pcon "Pair" [Pvar "v30"; Pvar "v29"], Mat (Var "v29") [(Pcon "Pair" [Pvar "v28"; Pvar "v27"], Mat (Var "v27") [(Pcon "Pair" [Pvar "v26"; Pvar "v25"], Mat (Var "v25") [(Pcon "Pair" [Pvar "v24"; Pvar "v23"], Mat (Var "v23") [(Pcon "Pair" [Pvar "v22"; Pvar "v21"], Mat (Var "v21") [(Pcon "Pair" [Pvar "v20"; Pvar "v19"], Mat (Var "v19") [(Pcon "Pair" [Pvar "v18"; Pvar "v17"], Mat (Var "v17") [(Pcon "Pair" [Pvar "v16"; Pvar "v15"], Mat (Var "v15") [(Pcon "Pair" [Pvar "v14"; Pvar "v13"], Mat (Var "v13") [(Pcon "Pair" [Pvar "v12"; Pvar "v11"], Mat (Var "v11") [(Pcon "Pair" [Pvar "v10"; Pvar "v9"], Mat (Var "v9") [(Pcon "Pair" [Pvar "v8"; Pvar "v7"], Mat (Var "v7") [(Pcon "Pair" [Pvar "v6"; Pvar "v5"], Mat (Var "v5") [(Pcon "Pair" [Pvar "v4"; Pvar "v3"], Mat (Var "v3") [(Pcon "Pair" [Pvar "v2"; Pvar "v1"], Con "Pair" [Var "v82"; Con "Pair" [Var "v80"; Con "Pair" [Var "v78"; Con "Pair" [Var "v76"; Con "Pair" [Var "v74"; Con "Pair" [Var "v72"; Con "Pair" [Var "v70"; Con "Pair" [Var "v68"; Con "Pair" [Var "v66"; Con "Pair" [Var "v64"; Con "Pair" [Var "v62"; Con "Pair" [Var "v60"; Con "Pair" [Var "v58"; Con "Pair" [Var "v56"; Con "Pair" [Var "v54"; Con "Pair" [Var "v52"; Con "Pair" [Var "v50"; Con "Pair" [Var "v48"; Con "Pair" [Var "v46"; Con "Pair" [Var "v44"; Con "Pair" [Var "v42"; Con "Pair" [Var "v40"; Con "Pair" [Var "v38"; Con "Pair" [Var "v36"; Con "Pair" [Var "v34"; Con "Pair" [Var "v32"; Con "Pair" [Var "v30"; Con "Pair" [Var "v28"; Con "Pair" [Var "v26"; Con "Pair" [Var "v24"; Con "Pair" [Var "v22"; Con "Pair" [Var "v20"; Con "Pair" [Var "v18"; Con "Pair" [Var "v16"; Con "Pair" [Var "v14"; Con "Pair" [Var "v12"; Con "Pair" [Var "v10"; Con "Pair" [Var "v8"; Con "Pair" [Var "v6"; Con "Pair" [Var "v4"; Con "Pair" [Var "v2"; Con "Pair" [Var "v1"; Con "Pair" [Var "v86"; Var "v84"]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]])])])])])])])])])])])])])])])])])])])])])])])])])])])])])])])])])])])])])])])])])])])])) Dlet (Pvar "InvPostWhitening") (Fun "v7" (Fun "v8" (Mat (Var "v8") [(Pcon "Pair" [Pvar "v6"; Pvar "v5"], Mat (Var "v5") [(Pcon "Pair" [Pvar "v4"; Pvar "v3"], Mat (Var "v3") [(Pcon "Pair" [Pvar "v2"; Pvar "v1"], Con "Pair" [Var "v6"; Con "Pair" [App Opapp (App Opapp (Var "word_sub") (Var "v4")) (App Opapp (Var "FST") (App Opapp (Var "GETKEYS") (Var "v7"))); Con "Pair" [Var "v2"; App Opapp (App Opapp (Var "word_sub") (Var "v1")) (App Opapp (Var "SND") (App Opapp (Var "GETKEYS") (Var "v7")))]]])])])]))) Dlet (Pvar "InvPreWhitening") (Fun "v7" (Fun "v8" (Mat (Var "v8") [(Pcon "Pair" [Pvar "v6"; Pvar "v5"], Mat (Var "v5") [(Pcon "Pair" [Pvar "v4"; Pvar "v3"], Mat (Var "v3") [(Pcon "Pair" [Pvar "v2"; Pvar "v1"], Con "Pair" [App Opapp (App Opapp (Var "word_sub") (Var "v6")) (App Opapp (Var "SND") (App Opapp (Var "GETKEYS") (Var "v7"))); Con "Pair" [Var "v4"; Con "Pair" [App Opapp (App Opapp (Var "word_sub") (Var "v2")) (App Opapp (Var "SND") (App Opapp (Var "GETKEYS") (Var "v7"))); Var "v1"]]])])])]))) Dlet (Pvar "RightShift") (Fun "v2" (Fun "v1" (App Opapp (App Opapp (Var "word_ror") (Var "v2")) (Var "v1")))) Dlet (Pvar "LeftShift") (Fun "v2" (Fun "v1" (App Opapp (App Opapp (Var "word_rol") (Var "v2")) (Var "v1")))) Dlet (Pvar "CompUT") (Fun "v1" (App Opapp (App Opapp (Var "word_rol") (App Opapp (App Opapp (Var "word_mul") (Var "v1")) (App Opapp (App Opapp (Var "word_add") (App Opapp (App Opapp (Var "word_add") (Var "v1")) (Var "v1"))) (Let "x" (Val (Lit (IntLit 1))) (App (Opn Modulo) (Var "x") (Val (Lit (IntLit 4294967296)))))))) (Val (Lit (IntLit 5))))) Dlet (Pvar "FwdRound") (Fun "v10" (Fun "v9" (Mat (Var "v10") [(Pcon "Pair" [Pvar "v8"; Pvar "v7"], Mat (Var "v7") [(Pcon "Pair" [Pvar "v6"; Pvar "v5"], Mat (Var "v5") [(Pcon "Pair" [Pvar "v4"; Pvar "v3"], Mat (Var "v9") [(Pcon "Pair" [Pvar "v2"; Pvar "v1"], Con "Pair" [Var "v6"; Con "Pair" [App Opapp (App Opapp (Var "word_add") (App Opapp (App Opapp (Var "LeftShift") (App Opapp (App Opapp (Var "word_xor") (Var "v4")) (App Opapp (Var "CompUT") (Var "v3")))) (App Opapp (Var "CompUT") (Var "v6")))) (Var "v1"); Con "Pair" [Var "v3"; App Opapp (App Opapp (Var "word_add") (App Opapp (App Opapp (Var "LeftShift") (App Opapp (App Opapp (Var "word_xor") (Var "v8")) (App Opapp (Var "CompUT") (Var "v6")))) (App Opapp (Var "CompUT") (Var "v3")))) (Var "v2")]]])])])])]))) Dlet (Pvar "BwdRound") (Fun "v10" (Fun "v9" (Mat (Var "v10") [(Pcon "Pair" [Pvar "v8"; Pvar "v7"], Mat (Var "v7") [(Pcon "Pair" [Pvar "v6"; Pvar "v5"], Mat (Var "v5") [(Pcon "Pair" [Pvar "v4"; Pvar "v3"], Mat (Var "v9") [(Pcon "Pair" [Pvar "v2"; Pvar "v1"], Con "Pair" [App Opapp (App Opapp (Var "word_xor") (App Opapp (App Opapp (Var "RightShift") (App Opapp (App Opapp (Var "word_sub") (Var "v3")) (Var "v2"))) (App Opapp (Var "CompUT") (Var "v4")))) (App Opapp (Var "CompUT") (Var "v8")); Con "Pair" [Var "v8"; Con "Pair" [App Opapp (App Opapp (Var "word_xor") (App Opapp (App Opapp (Var "RightShift") (App Opapp (App Opapp (Var "word_sub") (Var "v6")) (Var "v1"))) (App Opapp (Var "CompUT") (Var "v8")))) (App Opapp (Var "CompUT") (Var "v4")); Var "v4"]]])])])])]))) Dlet (Pvar "PostWhitening") (Fun "v7" (Fun "v8" (Mat (Var "v8") [(Pcon "Pair" [Pvar "v6"; Pvar "v5"], Mat (Var "v5") [(Pcon "Pair" [Pvar "v4"; Pvar "v3"], Mat (Var "v3") [(Pcon "Pair" [Pvar "v2"; Pvar "v1"], Con "Pair" [App Opapp (App Opapp (Var "word_add") (Var "v6")) (App Opapp (Var "SND") (App Opapp (Var "GETKEYS") (Var "v7"))); Con "Pair" [Var "v4"; Con "Pair" [App Opapp (App Opapp (Var "word_add") (Var "v2")) (App Opapp (Var "SND") (App Opapp (Var "GETKEYS") (Var "v7"))); Var "v1"]]])])])]))) Dletrec [("Round","v3", Fun "v2" (Fun "v1" (If (App (Opb Leq) (Var "v3") (Val (Lit (IntLit 0)))) (App Opapp (App Opapp (Var "PostWhitening") (Var "v2")) (Var "v1")) (App Opapp (App Opapp (App Opapp (Var "Round") (App (Opn Minus) (Var "v3") (Val (Lit (IntLit 1))))) (App Opapp (Var "ROTKEYS") (Var "v2"))) (App Opapp (App Opapp (Var "FwdRound") (Var "v1")) (App Opapp (Var "GETKEYS") (Var "v2")))))))] Dletrec [("InvRound","v3", Fun "v2" (Fun "v1" (If (App (Opb Leq) (Var "v3") (Val (Lit (IntLit 0)))) (App Opapp (App Opapp (Var "InvPreWhitening") (Var "v2")) (Var "v1")) (App Opapp (App Opapp (Var "BwdRound") (App Opapp (App Opapp (App Opapp (Var "InvRound") (App (Opn Minus) (Var "v3") (Val (Lit (IntLit 1))))) (App Opapp (Var "ROTKEYS") (Var "v2"))) (Var "v1"))) (App Opapp (Var "GETKEYS") (Var "v2"))))))] Dlet (Pvar "r") (Val (Lit (IntLit 20))) Dlet (Pvar "RC6_FWD") (Fun "v1" (App Opapp (App Opapp (Var "o") (App Opapp (App Opapp (Var "Round") (Var "r")) (Var "v1"))) (App Opapp (Var "PreWhitening") (Var "v1")))) Dlet (Pvar "RC6_BWD") (Fun "v1" (App Opapp (App Opapp (Var "o") (App Opapp (Var "InvPostWhitening") (Var "v1"))) (App Opapp (App Opapp (Var "InvRound") (Var "r")) (Var "v1"))))