{VERSION 5 0 "IBM INTEL NT" "5.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 1 1 1 }1 1 0 0 0 0 1 0 1 0 2 2 0 1 }{PSTYLE "Warning" -1 7 1 {CSTYLE "" -1 -1 "Courier" 1 10 0 0 255 1 2 2 2 2 2 1 1 1 3 1 }1 1 0 0 0 0 1 0 1 0 2 2 0 1 }{PSTYLE "Error" -1 8 1 {CSTYLE "" -1 -1 "Courie r" 1 10 255 0 255 1 2 2 2 2 2 1 1 1 3 1 }1 1 0 0 0 0 1 0 1 0 2 2 0 1 } {PSTYLE "Maple Output" -1 11 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 1 1 1 }3 3 0 0 0 0 1 0 1 0 2 2 0 1 }{PSTYLE "Maple Outpu t" -1 12 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 1 1 1 } 1 3 0 0 0 0 1 0 1 0 2 2 0 1 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 8 "restart;" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 13 "with(linalg):" }}{PARA 7 "" 1 "" {TEXT -1 80 "Warning, the protected names norm and trace have been red efined and unprotected\n" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 34 "p := x -> x^8 + x^5 + x^3 + x + 1;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6 #>%\"pGf*6#%\"xG6\"6$%)operatorG%&arrowGF(,,*$)9$\"\")\"\"\"F1*$)F/\" \"&F1F1*$)F/\"\"$F1F1F/F1F1F1F(F(F(" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 20 "Irreduc(p(x)) mod 2;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%%trueG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 22 "Primitive(p(x )) mod 2;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%%trueG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 21 "fs := 2^degree(p(x));" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#>%#fsG\"$c#" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 20 "field := vector(fs);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&field G-%&arrayG6$;\"\"\"\"$c#7\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 23 "for i from 1 to fs-1 do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 43 " f ield[i] := Powmod(x, i, p(x), x) mod 2;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 3 "od:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 15 "field[fs] := \+ 0:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 18 "ftable := table():" } }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 23 "for i from 1 to fs-1 do" } }{PARA 0 "> " 0 "" {MPLTEXT 1 0 29 " ftable[ field[i] ] := x^i;" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 3 "od:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 23 "sbox := proc(ffe, f, x)" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 30 " local i, u, \+ v, S, zv, z, t;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 33 " v := [1, 0, 0 , 0, 1, 1, 1, 1];" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 42 " S := linalg [stackmatrix](op([]), v); " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 23 " \+ for i from 2 to 8 do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 35 " v := \+ ListTools[Rotate](v,-1);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 41 " S := linalg[stackmatrix](op(S), v);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 7 " od: " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 37 " Gcdex(ffe, f, x, ' u', 'v') mod 2; " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 12 " v := []; " } }{PARA 0 "> " 0 "" {MPLTEXT 1 0 35 " for i from 0 to degree(f,x)-1 d o" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 35 " v := [op(v), coeff(u, x, i)];" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 7 " od: " }}{PARA 0 "> " 0 " " {MPLTEXT 1 0 27 " v := convert(v, vector);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 50 " zv := evalm(S &* v + [1, 1, 0, 0, 0, 1, 1, 0]);" } }{PARA 0 "> " 0 "" {MPLTEXT 1 0 54 " z := sum('zv[i+1]*x^i','i'=0..d egree(f,x)-1) mod 2;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 13 " RETURN(z );" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "end:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 26 "mixcolumn := proc(M, f, x)" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 24 " local L, Rf, p, res; " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 75 " L := linalg[matrix]([[x,1+x,1,1],[1,x,1+x,1],[1,1, x,1+x],[1+x,1,1,x] ]);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 39 " res := map(mp, evalm(L &* M), f, x);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 22 " \+ RETURN(evalm(res));" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "end:" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 29 "keysched := proc(pk, i, f, x )" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 28 " local r, j, v, w, nk, m; " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 12 " nk := [];" }}{PARA 0 "> " 0 " " {MPLTEXT 1 0 27 " v := linalg[col](pk,1); " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 71 " w := convert(ListTools[Rotate](convert(col(pk,4), \+ list),1),vector); " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 27 " w := map(s box, w, f, x);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 37 " r := Rem(x^((i -4)/4), f, x) mod 2;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 28 " w[1] := \+ (w[1] + r) mod 2;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 65 " nk := linal g[augment](op(nk), map(m -> m mod 2, evalm(v+w))); " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 23 " for j from 2 to 4 do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 30 " v := linalg[col](pk, j);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 32 " w := linalg[col](nk, j-1);" }}{PARA 0 "> " 0 " " {MPLTEXT 1 0 67 " nk := linalg[augment](op(nk), map(m -> m mod \+ 2, evalm(v+w)));" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 6 " od:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 21 " RETURN(evalm(nk));" }}{PARA 0 "> " 0 " " {MPLTEXT 1 0 4 "end:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 32 "i nvkeysched := proc(nk, i, f, x)" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 27 " local r, j, v, w, pk, m;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 13 " p k := []; " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 29 " for j from 4 to 2 b y -1 do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 30 " v := linalg[col](n k, j);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 32 " w := linalg[col](nk , j-1);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 67 " pk := linalg[augme nt](map(m -> m mod 2, evalm(v+w)), op(pk));" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 7 " od: " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 26 " v := \+ linalg[col](nk,1);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 70 " w := conve rt(ListTools[Rotate](convert(col(pk,3), list),1),vector);" }}{PARA 0 " > " 0 "" {MPLTEXT 1 0 27 " w := map(sbox, w, f, x);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 33 " r := Rem(x^(i/4), f, x) mod 2;" }}{PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 28 " w[1] := (w[1] + r) mod 2;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 65 " pk := linalg[augment](map(m -> m mod 2, evalm (v+w)), op(pk)); " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 21 " RETURN(eval m(pk));" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "end:" }}}{EXCHG {PARA 0 " > " 0 "" {MPLTEXT 1 0 51 "addrkey := (M, K) -> map(m -> m mod 2, evalm (M+K));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%(addrkeyGf*6$%\"MG%\"KG6 \"6$%)operatorG%&arrowGF)-%$mapG6$f*6#%\"mGF)F*F)-%$modG6$9$\"\"#F)F)F )-%&evalmG6#,&F6\"\"\"9%F " 0 "" {MPLTEXT 1 0 50 "bytesub := (M, f, x) -> map(sbox, evalm(M), f, x);" } }{PARA 11 "" 1 "" {XPPMATH 20 "6#>%(bytesubGf*6%%\"MG%\"fG%\"xG6\"6$%) operatorG%&arrowGF*-%$mapG6&%%sboxG-%&evalmG6#9$9%9&F*F*F*" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 19 "shiftrow := proc(M)" }}{PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 19 " local res, v, i;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 13 " res := [];" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 43 " \+ for i from 0 to linalg[rowdim](M) - 1 do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 61 " v := ListTools[Rotate](convert(row(M, i+1), lis t), -i);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 45 " res := linalg[sta ckmatrix](op(res), v);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 6 " od:" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "end:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 50 "mp := (f, ipoly, var) -> Rem(f, ipoly, var) mod 2;" } }{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#mpGf*6%%\"fG%&ipolyG%$varG6\"6$%)o peratorG%&arrowGF*-%$modG6$-%$RemG6%9$9%9&\"\"#F*F*F*" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 51 "addrkey := (M, K) -> map(m -> m mod 2, evalm(M+K));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%(addrkeyGf*6$%\" MG%\"KG6\"6$%)operatorG%&arrowGF)-%$mapG6$f*6#%\"mGF)F*F)-%$modG6$9$\" \"#F)F)F)-%&evalmG6#,&F6\"\"\"9%F " 0 "" {MPLTEXT 1 0 24 "isbox := proc(ffe, f, x)" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 31 " local i, u, v, iS, zv, z, t;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 33 " v := [0, 0, 1, 0, 0, 1, 0, 1];" }}{PARA 0 "> " 0 " " {MPLTEXT 1 0 43 " iS := linalg[stackmatrix](op([]), v); " }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 23 " for i from 2 to 8 do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 35 " v := ListTools[Rotate](v,-1);" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 43 " iS := linalg[stackmatrix](op( iS), v);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 8 " od: " }}{PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 12 " v := []; " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 35 " for i from 0 to degree(f,x)-1 do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 37 " v := [op(v), coeff(ffe, x, i)];" }}{PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 7 " od: " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 27 " \+ v := convert(v, vector);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 53 " zv := evalm(iS &* (v + [1, 1, 0, 0, 0, 1, 1, 0]));" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 54 " z := sum('zv[i+1]*x^i','i'=0..degree(f,x)-1) mod 2 ;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 34 " Gcdex(z, f, x, 'u', 'v') mo d 2;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 19 " RETURN(u mod 2);" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "end:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 54 "invbytesub := (M, f, x) -> map(isbox, evalm(M), f, x) ;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%+invbytesubGf*6%%\"MG%\"fG%\"xG 6\"6$%)operatorG%&arrowGF*-%$mapG6&%&isboxG-%&evalmG6#9$9%9&F*F*F*" }} }{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 0 "> " 0 " " {MPLTEXT 1 0 22 "invshiftrow := proc(M)" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 19 " local res, v, i;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 13 " res := [];" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 43 " for i fro m 0 to linalg[rowdim](M) - 1 do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 60 " v := ListTools[Rotate](convert(row(M, i+1), list), i);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 45 " res := linalg[stackmatrix](op(res), v);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 6 " od:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "end:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 29 "inv mixcolumn := proc(M, f, x)" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 18 " lo cal iL, res; " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 172 " iL := linalg[m atrix]([[x+x^2+x^3,1+x+x^3,1+x^2+x^3,1+x^3],[1+x^3,x+x^2+x^3,1+x+x^3,1 +x^2+x^3],[1+x^2+x^3,1+x^3,x+x^2+x^3,1+x+x^3],[1+x+x^3,1+x^2+x^3,1+x^3 ,x+x^2+x^3] ]);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 40 " res := map(mp , evalm(iL &* M), f, x);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 22 " RETU RN(evalm(res));" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "end:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 31 "invaddrkey := proc(M, K, f, x) " }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 20 " local iL, res; " }}{PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 172 " iL := linalg[matrix]([[x+x^2+x^3,1+x+x^3,1 +x^2+x^3,1+x^3],[1+x^3,x+x^2+x^3,1+x+x^3,1+x^2+x^3],[1+x^2+x^3,1+x^3,x +x^2+x^3,1+x+x^3],[1+x+x^3,1+x^2+x^3,1+x^3,x+x^2+x^3] ]);" }}{PARA 0 " > " 0 "" {MPLTEXT 1 0 44 " res := map(mp, evalm(M + iL &* K), f, x); " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 22 " RETURN(evalm(res));" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "end:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 39 "aesencipher := proc(message, key, f, x)" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 54 " local j, cm, ok, pk, nk, sk, keyct, nckey, v, w, m;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 97 " pk := linalg[augmen t](linalg[col](key, 1..4)); ok := linalg[augment](linalg[col](key, 1.. 4)); " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 29 " cm := addrkey(message,p k);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 15 " keyct := 1; " }}{PARA 0 " > " 0 "" {MPLTEXT 1 0 32 " nckey := linalg[coldim](key);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 12 " nk := [];" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 33 " if nckey = 6 or nckey = 8 then" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 30 " cm := bytesub(cm, f, x);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 25 " cm := shiftrow(cm);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 32 " cm := mixcolumn(cm, f, x);" }}{PARA 0 "> " 0 " " {MPLTEXT 1 0 23 " if nckey = 6 then" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 62 " nk := linalg[augment](op(nk), linalg[col](ke y,5..6));" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 35 " v := linalg[c ol](pk, 3); " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 33 " w := lina lg[col](nk, 2);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 70 " nk := l inalg[augment](op(nk), map(m -> m mod 2, evalm(v+w)));" }}{PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 33 " v := linalg[col](pk, 4);" }}{PARA 0 " > " 0 "" {MPLTEXT 1 0 33 " w := linalg[col](nk, 3);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 70 " nk := linalg[augment](op(nk), ma p(m -> m mod 2, evalm(v+w)));" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 10 " \+ else" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 62 " nk := linalg[a ugment](op(nk), linalg[col](key,5..8));" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 9 " fi:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 28 " cm := add rkey(cm, nk);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 15 " pk := nk;" } }{PARA 0 "> " 0 "" {MPLTEXT 1 0 17 " keyct := 2;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 7 " fi: " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 27 " \+ for j from keyct to 9 do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 31 " c m := bytesub(cm, f, x); " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 25 " c m := shiftrow(cm);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 33 " cm := m ixcolumn(cm, f, x); " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 36 " nk := keysched(pk,4*j, f, x); " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 29 " \+ cm := addrkey(cm, nk); " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 22 " pk := evalm(nk);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 6 " od:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 27 " cm := bytesub(cm, f, x);" }}{PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 22 " cm := shiftrow(cm);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 32 " nk := keysched(pk, 40, f, x);" }}{PARA 0 "> " 0 " " {MPLTEXT 1 0 25 " cm := addrkey(cm, nk);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 20 " if nckey = 6 then" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 47 " sk := linalg[augment](col(ok, 1..2), nk);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 23 " elif nckey = 8 then " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 36 " sk := linalg[augment](ok,nk); " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 7 " else" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 22 " \+ sk := evalm(nk);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 6 " fi:" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 32 " RETURN(evalm(cm), evalm(sk));" } }{PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "end:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 39 "aesdeci pher := proc(message, key, f, x)" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 57 " local j, pm, ok, pk, nk, sk, keyct, nckey, v, w, m, r;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 33 " nckey := linalg[coldim](key); " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 60 " nk := linalg[augment](linalg[col](key, nckey-3..nckey)); " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 30 " pm := add rkey(message, nk);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 17 " keyct := 9 ; " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 12 " pk := [];" }}{PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 33 " for j from keyct to 1 by -1 do" }}{PARA 0 " > " 0 "" {MPLTEXT 1 0 34 " pm := invbytesub(pm, f, x); " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 29 " pm := invshiftrow(pm); " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 36 " pm := invmixcolumn(pm, f, x); " }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 39 " pk := invkeysched(nk,4*j, f, \+ x); " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 38 " pm := invaddrkey(pm, \+ pk, f, x); " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 22 " nk := evalm(pk );" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 7 " od: " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 30 " pm := invbytesub(pm, f, x);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 25 " pm := invshiftrow(pm);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 20 " if nckey = 4 then" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 37 " pk := invkeysched(nk, 0, f, x);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 15 " sk := pk;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 22 " elif nckey = 6 then" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 52 " pk := linalg[augment](linalg[col](key, 1..2));" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 31 " v := linalg[col](nk, 2); " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 31 " w := linalg[col](nk, 3); " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 67 " pk := linalg[augment](op(pk), map(m -> m mod 2, evalm(v+w)));" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 31 " v := linalg [col](nk, 3); " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 31 " w := linalg [col](nk, 4); " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 67 " pk := linal g[augment](op(pk), map(m -> m mod 2, evalm(v+w)));" }}{PARA 0 "> " 0 " " {MPLTEXT 1 0 46 " sk := linalg[augment](pk, col(nk,1..2));" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 7 " else" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 52 " pk := linalg[augment](linalg[col](key, 1..4)); " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 35 " sk := linalg[augment](pk, nk);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 6 " fi:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 25 " pm := addrkey(pm, pk);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 32 " RETURN(evalm(pm), evalm(sk));" }}{PARA 0 "> " 0 " " {MPLTEXT 1 0 4 "end:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 13 "? linalg[col]" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 28 "mblocks := \+ proc(message, bl)" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 24 " local messb l, ml, mb;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 25 " ml := length(messa ge);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 18 " if ml < bl then" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 58 " messbl := cat(message, cat(se q(\"x\", i = 1..bl-ml)));" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 7 " else " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 26 " mb := iquo(ml,bl)+1;" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 67 " messbl := [seq(substring(mess age,(i-1)*bl+1..i*bl),i=1..mb)];" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 31 " ml := length(messbl[mb]);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 21 " if ml < bl then" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 68 " \+ messbl[mb] := cat(messbl[mb], cat(seq(\"x\", i = 1..bl-ml)));" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 9 " fi:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 6 " fi:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 18 " RETURN (messbl);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "end:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 42 "message := \"Hi there! This is my message \";" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%(messageGQ=Hi~there!~This~is~ my~message6\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 32 "message := mblocks(message, 16);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%(messageG7 $Q1Hi~there!~This~i6\"Q1s~my~messagexxxxF'" }}}{EXCHG {PARA 0 "> " 0 " " {MPLTEXT 1 0 25 "key := \"This is my key!\";" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$keyGQ0This~is~my~key!6\"" }}}{EXCHG {PARA 0 "> " 0 " " {MPLTEXT 1 0 24 "key := mblocks(key, 24);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$keyGQ9This~is~my~key!xxxxxxxxx6\"" }}}{EXCHG {PARA 11 "" 1 "" {TEXT -1 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 " " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 29 "ffieldtoletter := proc( ml, x)" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 27 " local vl, let, ii, mes s;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 31 " vl := nops(ml); mess := \" \"; " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 25 " for ii from 1 to vl do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 49 " let := StringTools[Char](de gree(ml[ii],x)):" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 29 " mess := c at(mess, let);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 6 " od:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 16 " RETURN(mess);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "end:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 24 "tof ield := proc(mess, x)" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 24 " local s l, fm, sn, ii:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 22 " sl := length(m ess);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 12 " fm := [];" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 25 " for ii from 1 to sl do" }}{PARA 0 "> " 0 " " {MPLTEXT 1 0 54 " sn := StringTools[Ord](substring(mess, ii..ii )):" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 27 " fm := [op(fm), x^sn]; " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 6 " od:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 14 " RETURN(fm);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "e nd:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 31 "mf := map(tofield, m essage, x);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%#mfG7$72*$)%\"xG\"#s \"\"\"*$)F)\"$0\"F+*$)F)\"#KF+*$)F)\"$;\"F+*$)F)\"$/\"F+*$)F)\"$,\"F+* $)F)\"$9\"F+F8*$)F)\"#LF+F/*$)F)\"#%)F+F5F,*$)F)\"$:\"F+F/F,72FDF/*$)F )\"$4\"F+*$)F)\"$@\"F+F/FHF8FDFD*$)F)\"#(*F+*$)F)\"$.\"F+F8*$)F)\"$?\" F+FTFTFT" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 55 "mf := map(m -> \+ linalg[transpose](matrix(4, 4, m)), mf);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#mfG7$-%'matrixG6#7&7&*$)%\"xG\"#s\"\"\"*$)F-\"$/\"F/*$)F-\"#L F/*$)F-\"$0\"F/7&F6*$)F-\"$,\"F/*$)F-\"#KF/*$)F-\"$:\"F/7&F=*$)F-\"$9 \"F/*$)F-\"#%)F/F=7&*$)F-\"$;\"F/F:F0F6-F'6#7&7&F@F=F@*$)F-\"$?\"F/7&F =*$)F-\"$4\"F/*$)F-\"#(*F/FR7&FVF:*$)F-\"$.\"F/FR7&*$)F-\"$@\"F/F@F:FR " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 27 "for i from 1 to nops(mf ) do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 72 " messm[i] := map(mp, lina lg[transpose](matrix(4, 4, mf[i])), p(x), x);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 3 "od:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 6 "messm ;" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#7$-%'matrixG6#7&7&,(*$)%\"xG\"\"$ \"\"\"F.F,F.F.F.,**$)F,\"\"(F.F.*$)F,\"\"&F.F.*$)F,\"\"%F.F.F*F.,0F0F. *$)F,\"\"'F.F.F3F.F6F.*$)F,\"\"#F.F.F,F.F.F.,,F:F.F6F.F*F.F,F.F.F.7&F@ ,*F6F.F=F.F,F.F.F.,.F0F.F:F.F3F.F*F.F=F.F,F.,(F3F.F6F.F=F.7&FC,(F6F.F* F.F,F.,(F0F.F:F.F3F.FC7&,(F:F.F3F.F*F.FBF/F@-F%6#7&7&FDFCFD,,F:F.F3F.F 6F.F*F.F,F.7&FC,,F3F.F6F.F=F.F,F.F.F.,*F:F.F6F.F*F.F.F.FN7&FPFB,*F:F.F 6F.F*F.F=F.FN7&,,F0F.F:F.F3F.F6F.F=F.FDFBFN" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 9 "nops(mf);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"# " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 43 "messm := map(m -> map(m p, m, p(x), x), mf);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%&messmG7$-%' matrixG6#7&7&,(*$)%\"xG\"\"$\"\"\"F0F.F0F0F0,**$)F.\"\"(F0F0*$)F.\"\"& F0F0*$)F.\"\"%F0F0F,F0,0F2F0*$)F.\"\"'F0F0F5F0F8F0*$)F.\"\"#F0F0F.F0F0 F0,,F " 0 "" {MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 22 "mk := tofield(key, x);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%#mkG7:*$)%\"xG\"#%)\"\"\"*$)F(\"$/\"F**$)F(\"$0\"F**$ )F(\"$:\"F**$)F(\"#KF*F.F1F4*$)F(\"$4\"F**$)F(\"$@\"F*F4*$)F(\"$2\"F** $)F(\"$,\"F*F:*$)F(\"#LF**$)F(\"$?\"F*FFFFFFFFFFFFFFFF" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 54 "keym := map(mp, transpose(matrix(6, 4, mk)), p(x), x);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%%keymG-%'matr ixG6#7&7(,(*$)%\"xG\"\"(\"\"\"F/*$)F-\"\"'F/F/*$)F-\"\"&F/F/,.F+F/F0F/ F3F/*$)F-\"\"$F/F/*$)F-\"\"#F/F/F-F/,,F3F/*$)F-\"\"%F/F/F:F/F-F/F/F/,* F>F/F:F/F-F/F/F/,,F0F/F3F/F>F/F7F/F-F/FB7(,*F+F/F3F/F>F/F7F/,,F0F/F>F/ F7F/F-F/F/F/,,F+F/F0F/F3F/F>F/F:F/FFFBFB7(FE,(F3F/F>F/F:F/F6,0F+F/F0F/ F3F/F>F/F:F/F-F/F/F/FBFB7(FHF6,*F0F/F:F/F-F/F/F/FBFBFB" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 34 "f := x -> x^8 + x^4 + x^3 + x + 1; " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"fGf*6#%\"xG6\"6$%)operatorG%&a rrowGF(,,*$)9$\"\")\"\"\"F1*$)F/\"\"%F1F1*$)F/\"\"$F1F1F/F1F1F1F(F(F( " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 45 "ct := map(aesencipher, \+ messm, keym, f(x), x);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%#ctG7&-%'m atrixG6#7&7&,&*$)%\"xG\"\"&\"\"\"F0*$)F.\"\"$F0F0,(*$)F.\"\"(F0F0*$)F. \"\"'F0F0F,F0,*F,F0F1F0*$)F.\"\"#F0F0F.F0,0F5F0F,F0*$)F.\"\"%F0F0F1F0F " 0 "" {MPLTEXT 1 0 6 "ct[3];" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%'matrixG6#7&7&,**$) %\"xG\"\"'\"\"\"F-*$)F+\"\"%F-F-*$)F+\"\"#F-F-F-F-,,F.F-*$)F+\"\"$F-F- F1F-F+F-F-F-,&F)F-F5F-,,*$)F+\"\"(F-F-F)F-*$)F+\"\"&F-F-F1F-F+F-7&,,F: F-F=F-F5F-F1F-F+F-,.F:F-F=F-F.F-F5F-F1F-F+F-,(F:F-F=F-F.F-,&F+F-F-F-7& ,*F:F-F)F-F1F-F+F-,*F:F-F)F-F=F-F.F-F8,0F:F-F)F-F=F-F.F-F5F-F+F-F-F-7& ,,F:F-F.F-F5F-F+F-F-F-,*F:F-F)F-F=F-F5F-,(F:F-F)F-F1F-,,F:F-F)F-F=F-F5 F-F-F-" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 6 "ct[3];" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%'matrixG6#7&7&,**$)%\"xG\"\"'\"\"\"F-*$)F+ \"\"%F-F-*$)F+\"\"#F-F-F-F-,,F.F-*$)F+\"\"$F-F-F1F-F+F-F-F-,&F)F-F5F-, ,*$)F+\"\"(F-F-F)F-*$)F+\"\"&F-F-F1F-F+F-7&,,F:F-F=F-F5F-F1F-F+F-,.F:F -F=F-F.F-F5F-F1F-F+F-,(F:F-F=F-F.F-,&F+F-F-F-7&,*F:F-F)F-F1F-F+F-,*F:F -F)F-F=F-F.F-F8,0F:F-F)F-F=F-F.F-F5F-F+F-F-F-7&,,F:F-F.F-F5F-F+F-F-F-, *F:F-F)F-F=F-F5F-,(F:F-F)F-F1F-,,F:F-F)F-F=F-F5F-F-F-" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 21 "evalm(ct[2] - ct[4]);" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#-%'matrixG6#7&7(\"\"!F(F(F(F(F(F'F'F'" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 6 "ct[1];" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%'matrixG6#7&7&,&*$)%\"xG\"\"&\"\"\"F-*$)F+\"\"$F-F-,( *$)F+\"\"(F-F-*$)F+\"\"'F-F-F)F-,*F)F-F.F-*$)F+\"\"#F-F-F+F-,0F2F-F)F- *$)F+\"\"%F-F-F.F-F9F-F+F-F-F-7&,0F2F-F5F-F)F-F=F-F9F-F+F-F-F-,*F5F-F= F-F9F-F-F-,*F5F-F=F-F.F-F-F-,,F2F-F5F-F=F-F.F-F-F-7&,(F2F-F=F-F.F-,0F2 F-F5F-F)F-F=F-F.F-F+F-F-F-,(F2F-F5F-F9F-,.F)F-F=F-F.F-F9F-F+F-F-F-7&,( F5F-F9F-F+F-,,F)F-F.F-F9F-F+F-F-F-,*F2F-F5F-F9F-F-F-,*F.F-F9F-F+F-F-F- " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 59 "cipher := [convert(ct[1], vector), convert(ct[ 3], vector)];" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%'cipherG7$-%'vector G6#72,&*$)%\"xG\"\"&\"\"\"F/*$)F-\"\"$F/F/,(*$)F-\"\"(F/F/*$)F-\"\"'F/ F/F+F/,*F+F/F0F/*$)F-\"\"#F/F/F-F/,0F4F/F+F/*$)F-\"\"%F/F/F0F/F;F/F-F/ F/F/,0F4F/F7F/F+F/F?F/F;F/F-F/F/F/,*F7F/F?F/F;F/F/F/,*F7F/F?F/F0F/F/F/ ,,F4F/F7F/F?F/F0F/F/F/,(F4F/F?F/F0F/,0F4F/F7F/F+F/F?F/F0F/F-F/F/F/,(F4 F/F7F/F;F/,.F+F/F?F/F0F/F;F/F-F/F/F/,(F7F/F;F/F-F/,,F+F/F0F/F;F/F-F/F/ F/,*F4F/F7F/F;F/F/F/,*F0F/F;F/F-F/F/F/-F'6#72FC,,F?F/F0F/F;F/F-F/F/F/, &F7F/F0F/,,F4F/F7F/F+F/F;F/F-F/,,F4F/F+F/F0F/F;F/F-F/,.F4F/F+F/F?F/F0F /F;F/F-F/,(F4F/F+F/F?F/,&F-F/F/F/,*F4F/F7F/F;F/F-F/,*F4F/F7F/F+F/F?F/F RFG,,F4F/F?F/F0F/F-F/F/F/,*F4F/F7F/F+F/F0F/FH,,F4F/F7F/F+F/F0F/F/F/" } }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 31 "for i from 1 to nops(ciphe r) do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 64 " cipher[i] := [seq(ftabl e[cipher[i]], i = 1..vectcipher[i]))];" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 3 "od:" }}{PARA 8 "" 1 "" {TEXT -1 34 "Error, invalid subscript se lector\n" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 27 "linalg[vectdim] (cipher[1]);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"#;" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 67 "cipher := [seq(ftable[cipher[i]], i = 1.. linalg[vectdim](cipher))];" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%'ciphe rG7$&%'ftableG6#-%'vectorG6#72,&*$)%\"xG\"\"&\"\"\"F2*$)F0\"\"$F2F2,(* $)F0\"\"(F2F2*$)F0\"\"'F2F2F.F2,*F.F2F3F2*$)F0\"\"#F2F2F0F2,0F7F2F.F2* $)F0\"\"%F2F2F3F2F>F2F0F2F2F2,0F7F2F:F2F.F2FBF2F>F2F0F2F2F2,*F:F2FBF2F >F2F2F2,*F:F2FBF2F3F2F2F2,,F7F2F:F2FBF2F3F2F2F2,(F7F2FBF2F3F2,0F7F2F:F 2F.F2FBF2F3F2F0F2F2F2,(F7F2F:F2F>F2,.F.F2FBF2F3F2F>F2F0F2F2F2,(F:F2F>F 2F0F2,,F.F2F3F2F>F2F0F2F2F2,*F7F2F:F2F>F2F2F2,*F3F2F>F2F0F2F2F2&F'6#-F *6#72FF,,FBF2F3F2F>F2F0F2F2F2,&F:F2F3F2,,F7F2F:F2F.F2F>F2F0F2,,F7F2F.F 2F3F2F>F2F0F2,.F7F2F.F2FBF2F3F2F>F2F0F2,(F7F2F.F2FBF2,&F0F2F2F2,*F7F2F :F2F>F2F0F2,*F7F2F:F2F.F2FBF2FWFJ,,F7F2FBF2F3F2F0F2F2F2,*F7F2F:F2F.F2F 3F2FK,,F7F2F:F2F.F2F3F2F2F2" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 26 "ffieldtoletter(cipher, x);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q1|] v~c|`z|ax|cy|gx|gw=|\\w|ct?eFu|]t6\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 31 "keyc := convert(ct[2], matrix);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%%keycG-%'matrixG6#7&7(,(*$)%\"xG\"\"(\"\"\"F/*$)F-\" \"'F/F/*$)F-\"\"&F/F/,.F+F/F0F/F3F/*$)F-\"\"$F/F/*$)F-\"\"#F/F/F-F/,,F +F/F0F/F:F/F-F/F/F/,,F0F/F3F/*$)F-\"\"%F/F/F:F/F/F/,.F+F/F0F/F?F/F7F/F :F/F/F/,,F+F/F3F/F?F/F:F/F-F/7(,*F+F/F3F/F?F/F7F/,,F0F/F?F/F7F/F-F/F/F /,.F0F/F3F/F?F/F:F/F-F/F/F/,,F+F/F?F/F7F/F:F/F-F/,*F3F/F7F/F-F/F/F/,.F 0F/F3F/F?F/F7F/F:F/F-F/7(FF,(F3F/F?F/F:F/,0F+F/F0F/F3F/F7F/F:F/F-F/F/F /,,F+F/F3F/F?F/F7F/F/F/,(F+F/F:F/F-F/,.F+F/F3F/F?F/F7F/F-F/F/F/7(FLF6, (F0F/F7F/F:F/F>,(F+F/F3F/F:F/,*F3F/F?F/F7F/F-F/" }}}{EXCHG {PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 40 "pt := aesdecipher(ct[1], keyc, f(x), x);" }} {PARA 12 "" 1 "" {XPPMATH 20 "6#>%#ptG6$-%'matrixG6#7&7&,(*$)%\"xG\"\" $\"\"\"F0F.F0F0F0,**$)F.\"\"(F0F0*$)F.\"\"&F0F0*$)F.\"\"%F0F0F,F0,0F2F 0*$)F.\"\"'F0F0F5F0F8F0*$)F.\"\"#F0F0F.F0F0F0,,F " 0 "" {MPLTEXT 1 0 43 "plain := convert(transpose(pt[1]), vector);" }} {PARA 12 "" 1 "" {XPPMATH 20 "6#>%&plainG-%'vectorG6#72,(*$)%\"xG\"\"$ \"\"\"F.F,F.F.F.,,*$)F,\"\"'F.F.*$)F,\"\"%F.F.F*F.F,F.F.F.,.*$)F,\"\"( F.F.F0F.*$)F,\"\"&F.F.F*F.*$)F,\"\"#F.F.F,F.,(F0F.F:F.F*F.,*F7F.F:F.F3 F.F*F.,*F3F.F=F.F,F.F.F.,(F3F.F*F.F,F.FB,0F7F.F0F.F:F.F3F.F=F.F,F.F.F. ,,F0F.F:F.F3F.F*F.F,F.FEFEFEFEFEFE" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 64 "plain := [seq(ftable[plain[i]], i = 1..linalg[vectdim ](plain))];" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&plainG72*$)%\"xG\"#s \"\"\"*$)F(\"$0\"F**$)F(\"#KF**$)F(\"$;\"F**$)F(\"$/\"F**$)F(\"$,\"F** $)F(\"$9\"F*F7*$)F(\"#LF**$)F(\"$?\"F*F@F@F@F@F@F@" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 25 "ffieldtoletter(plain, x);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q1Hi~there!xxxxxxx6\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 21 "evalm(pt[1] - messm);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%'matrixG6#7&7&\"\"!F(F(F(F'F'F'" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 20 "evalm(pt[2] - keym);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%'matrixG6#7&7(\"\"!F(F(F(F(F(F'F'F'" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 26 "evalm(pt[2]); evalm(keym);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#-%'matrixG6#7&7*,(*$)%\"xG\"\"(\"\"\"F-*$)F+\"\"'F-F-*$ )F+\"\"&F-F-,.F)F-F.F-F1F-*$)F+\"\"$F-F-*$)F+\"\"#F-F-F+F-,,F1F-*$)F+ \"\"%F-F-F8F-F+F-F-F-,*F " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "57 1 0" 11 } {VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 }