{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 13 "with(linalg):" }} {PARA 7 "" 1 "" {TEXT -1 80 "Warning, the protected names norm and tra ce have been redefined 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 "P rimitive(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#>%&fieldG-%&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 " field[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;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%&fieldG6 #\"$c#\"\"!" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 13 "evalm(field) :" }}}{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 25 "ftable[ field[fs] ] := 0:" }}}{EXCHG {PARA 0 "> " 0 " " {MPLTEXT 1 0 24 "cat(seq(\"x\", i = 1..5));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q&xxxxx6\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 22 "mess := \"Hello there\";" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%mes sGQ,Hello~there6\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 28 "mbloc ks := proc(message, bl)" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 16 " local messbl;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 31 " if length(message) < bl then" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 71 " messbl := cat(mes sage, cat(seq(\"x\", i = 1..bl-length(message))));" }}{PARA 0 "> " 0 " " {MPLTEXT 1 0 7 " else" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 91 " \+ messbl := [seq(substring(message,(i-1)*bl+1..i*bl),i=1..iquo(length(me ssage),bl)+1)];" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 6 " fi:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "end:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 28 "mblocks := proc(message, bl)" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 24 " local messbl, ml, mb;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 25 " ml := length(message);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 18 " if ml < bl then" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 58 " messbl := cat(message, cat(seq(\"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(message,(i-1)*bl+1..i* bl),i=1..mb)];" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 31 " ml := lengt h(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 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 26 "mess := mblocks(mess, 16);" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#>%%messGQ1Hello~therexxxxx6\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 26 "keyw := \"This is the key\";" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%keywGQ0This~is~the~key6\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 26 "keyw := mblocks(keyw, 32);" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#>%%keywGQAThis~is~the~keyxxxxxxxxxxxxxxxxx6\"" } }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 23 "tole tter := proc(ml, x)" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 27 " local vl, let, ii, mess;" }}{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 := StringT ools[Char](degree(ml[ii],x)):" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 29 " \+ mess := cat(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 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 24 "tofield := proc(me ss, x)" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 24 " local sl, fm, sn, ii: " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 22 " sl := length(mess);" }} {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 23 "mf := tofield(mess, \+ x);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#mfG72*$)%\"xG\"#s\"\"\"*$)F( \"$,\"F**$)F(\"$3\"F*F.*$)F(\"$6\"F**$)F(\"#KF**$)F(\"$;\"F**$)F(\"$/ \"F*F+*$)F(\"$9\"F*F+*$)F(\"$?\"F*F@F@F@F@" }}}{EXCHG {PARA 0 "> " 0 " " {MPLTEXT 1 0 34 "im := transpose(matrix(4, 4, mf));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#imG-%'matrixG6#7&7&*$)%\"xG\"#s\"\"\"*$)F,\"$6 \"F.*$)F,\"$,\"F.*$)F,\"$?\"F.7&F2*$)F,\"#KF.*$)F,\"$9\"F.F57&*$)F,\"$ 3\"F.*$)F,\"$;\"F.F2F57&F@*$)F,\"$/\"F.F5F5" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 51 "mp := (f, ipoly, var) -> Rem(f, ipoly, var) mod 2; " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#mpGf*6%%\"fG%&ipolyG%$varG6\"6 $%)operatorG%&arrowGF*-%$modG6$-%$RemG6%9$9%9&\"\"#F*F*F*" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 27 "im := map(mp, im, p(x), x);" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%#imG-%'matrixG6#7&7&,(*$)%\"xG\"\"$ \"\"\"F/F-F/F/F/,,*$)F-\"\"(F/F/*$)F-\"\"'F/F/*$)F-\"\"%F/F/F+F/*$)F- \"\"#F/F/,*F7F/F:F/F-F/F/F/,,F4F/*$)F-\"\"&F/F/F7F/F+F/F-F/7&F=,.F1F/F 4F/F?F/F+F/F:F/F-F/,(F7F/F+F/F-F/F>7&,*F1F/F+F/F:F/F-F/,(F4F/F?F/F+F/F =F>7&FF,*F1F/F?F/F7F/F+F/F>F>" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 25 "keym := tofield(keyw, x);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%% keymG7B*$)%\"xG\"#%)\"\"\"*$)F(\"$/\"F**$)F(\"$0\"F**$)F(\"$:\"F**$)F( \"#KF*F.F1F4*$)F(\"$;\"F*F+*$)F(\"$,\"F*F4*$)F(\"$2\"F*F:*$)F(\"$@\"F* *$)F(\"$?\"F*FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 38 "keym := transpose(matrix(8, 4, keym));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%keymG-%'matrixG6#7&7**$)%\"xG\"#%)\"\"\"* $)F,\"$/\"F.*$)F,\"$0\"F.*$)F,\"$:\"F.*$)F,\"#KF.F2F5F87**$)F,\"$;\"F. F/*$)F,\"$,\"F.F8*$)F,\"$2\"F.F?*$)F,\"$@\"F.*$)F,\"$?\"F.7*FHFHFHFHFH FHFHFHFK" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 31 "keym := map(mp, keym, p(x), x);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%%keymG-%'matrixG 6#7&7*,(*$)%\"xG\"\"(\"\"\"F/*$)F-\"\"'F/F/*$)F-\"\"&F/F/,*F+F/F3F/*$) F-\"\"%F/F/*$)F-\"\"$F/F/,,F0F/F7F/F:F/F-F/F/F/,(F3F/F7F/*$)F-\"\"#F/F /,.F+F/F0F/F3F/F:F/F?F/F-F/F=F>FB7*,(F0F/F3F/F:F/F6,*F7F/F?F/F-F/F/F/F B,*F0F/F?F/F-F/F/F/FE,,F+F/F0F/F3F/F7F/F?F/,,F0F/F3F/F7F/F:F/F-F/7*FHF HFHFHFHFHFHFHFI" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 35 "ffp := ( ftable, i, x) -> ftable[i];" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$ffpG f*6%%'ftableG%\"iG%\"xG6\"6$%)operatorG%&arrowGF*&9$6#9%F*F*F*" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 9 "ftable[];" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#&%'ftableG6\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 17 "ftable[ffm[1,1]];" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#&%'ftable G6#&%$ffmG6$\"\"\"F)" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 9 "fiel d[9];" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,**$)%\"xG\"\"'\"\"\"F(*$)F& \"\"%F(F(*$)F&\"\"#F(F(F&F(" }}}{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%&arrowGF(,,*$)9$\"\")\"\"\"F1*$) F/\"\"%F1F1*$)F/\"\"$F1F1F/F1F1F1F(F(F(" }}}{EXCHG {PARA 11 "" 1 "" {TEXT -1 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 18 "rcshift := \+ proc(v)" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 19 " local i, nv, dim;" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 28 " dim := linalg[vectdim](v);" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 22 " nv := vector(dim,0);" }}{PARA 0 " > " 0 "" {MPLTEXT 1 0 18 " nv[1] := v[dim];" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 42 " for i from 1 to linalg[vectdim](nv)-1 do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 21 " nv[i+1] := v[i];" }}{PARA 0 "> " 0 " " {MPLTEXT 1 0 5 " od:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 20 " RETURN (evalm(nv));" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "end:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 5 "p(x);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,,*$)%\"xG\" \")\"\"\"F(*$)F&\"\"&F(F(*$)F&\"\"$F(F(F&F(F(F(" }}}{EXCHG {PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 34 "Gcdex(0, p(x), x, 'u', 'v') mod 2;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,,*$)%\"xG\"\")\"\"\"F(*$)F&\"\"&F(F(*$)F&\" \"$F(F(F&F(F(F(" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 2 "u;" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"!" }}}{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 do" }}{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..degree(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 34 "f := x -> x^8 + x^4 + x^3 + x + 1;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"fGf*6#%\"xG6\"6$%)operatorG%&arrowGF(,,*$)9$\"\")\"\"\"F1*$) F/\"\"%F1F1*$)F/\"\"$F1F1F/F1F1F1F(F(F(" }}}{EXCHG {PARA 0 "> " 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 27 "im := bytesub(im, f(x), x);" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%#imG-%'matrixG6#7&7&,**$)%\"xG\"\"& \"\"\"F/*$)F-\"\"$F/F/F-F/F/F/,(*$)F-\"\"(F/F/*$)F-\"\"#F/F/F-F/,*F4F/ *$)F-\"\"'F/F/F+F/*$)F-\"\"%F/F/,,F4F/F;F/F>F/F0F/F-F/7&F:,&F+F/F0F/,( F4F/F+F/F-F/FA7&,(F>F/F0F/F/F/,(F;F/F7F/F/F/F:FA7&FF,*F;F/F+F/F0F/F7F/ FAFA" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 23 "map(sbox, im, f(x), x);" }}{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-F-F8F-,,F.F-F4F-F8F-F+F-F-F-7&F;,(F1F-F4F-F8F-, *F1F-F4F-F " 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](conver t(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 19 "im := shiftrow(im);" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%#imG-%'matrixG6#7&7&,**$)%\"xG\"\"& \"\"\"F/*$)F-\"\"$F/F/F-F/F/F/,(*$)F-\"\"(F/F/*$)F-\"\"#F/F/F-F/,*F4F/ *$)F-\"\"'F/F/F+F/*$)F-\"\"%F/F/,,F4F/F;F/F>F/F0F/F-F/7&FAF:,&F+F/F0F/ ,(F4F/F+F/F-F/7&F:FA,(F>F/F0F/F/F/,(F;F/F7F/F/F/7&,*F;F/F+F/F0F/F7F/FA FAFF" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 10 "evalm(im);" }} {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-,*F2F-*$)F+\" \"'F-F-F)F-*$)F+\"\"%F-F-,,F2F-F9F-F " 0 "" {MPLTEXT 1 0 50 "mp := (f, ipoly, var) -> R em(f, ipoly, var) mod 2;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#mpGf*6% %\"fG%&ipolyG%$varG6\"6$%)operatorG%&arrowGF*-%$modG6$-%$RemG6%9$9%9& \"\"#F*F*F*" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 21 "map(mp, im, \+ f(x), x);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%'matrixG6#7&7&,**$)%\"x G\"\"&\"\"\"F-*$)F+\"\"$F-F-F+F-F-F-,(*$)F+\"\"(F-F-*$)F+\"\"#F-F-F+F- ,*F2F-*$)F+\"\"'F-F-F)F-*$)F+\"\"%F-F-,,F2F-F9F-F " 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 23 "m ixcolumn(im, f(x), x);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%'matrixG6# 7&7&,0*$)%\"xG\"\"(\"\"\"F-*$)F+\"\"&F-F-*$)F+\"\"%F-F-*$)F+\"\"$F-F-* $)F+\"\"#F-F-F+F-F-F-,(F1F-F4F-F7F-*$)F+\"\"'F-,(F4F-F7F-F+F-7&,,F)F-F ;F-F.F-F+F-F-F-,*F)F-F;F-F1F-F+F-,(F;F-F1F-F-F-,*F;F-F1F-F+F-F-F-7&,.F )F-F.F-F1F-F4F-F7F-F+F-,*F)F-F.F-F4F-F7F-,.F)F-F1F-F4F-F7F-F+F-F-F-,,F )F-F;F-F1F-F4F-F-F-7&,,F)F-F4F-F7F-F+F-F-F-,&F1F-F7F-,*F)F-F1F-F7F-F-F -,&F)F-F.F-" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{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 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 40 "ct := aesencipher(messm, \+ keym, f(x), x):" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 32 "invkeysched := 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 " pk := []; " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 29 " for j from 4 to 2 by -1 do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 30 " v := linalg[col](nk, j);" }}{PARA 0 "> " 0 " " {MPLTEXT 1 0 32 " w := linalg[col](nk, j-1);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 67 " pk := linalg[augment](map(m -> m mod 2, eval m(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 := convert(ListTools[Rotate](c onvert(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(evalm(pk));" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "end:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 18 "evalm(keym); f(x); " }}{PARA 12 "" 1 "" {XPPMATH 20 "6#-%'matrixG6#7&7*,(*$)%\"xG\"\"(\" \"\"F-*$)F+\"\"'F-F-*$)F+\"\"&F-F-,*F)F-F1F-*$)F+\"\"%F-F-*$)F+\"\"$F- F-,,F.F-F5F-F8F-F+F-F-F-,(F1F-F5F-*$)F+\"\"#F-F-,.F)F-F.F-F1F-F8F-F=F- F+F-F;F " 0 "" {MPLTEXT 1 0 36 "te st1 := keysched(keym, 4, f(x), x);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6# >%&test1G-%'matrixG6#7&7&,**$)%\"xG\"\"(\"\"\"F/*$)F-\"\"'F/F/*$)F-\" \"$F/F/F/F/,*F0F/*$)F-\"\"&F/F/*$)F-\"\"%F/F/F/F/,(F7F/F3F/F-F/,*F:F/F 3F/*$)F-\"\"#F/F/F-F/7&,*F+F/F7F/F:F/F-F/,&F3F/F-F/,*F:F/F3F/F?F/F/F/, .F+F/F0F/F7F/F:F/F-F/F/F/7&,&F+F/F7F/,,F+F/F0F/F:F/F3F/F-F/FHFI7&,(F0F /F7F/F-F/,&F:F/F3F/FKFL" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 40 " test2 := invkeysched(test1, 0, f(x), x);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&test2G-%'matrixG6#7&7&,(*$)%\"xG\"\"(\"\"\"F/*$)F-\"\"'F/F/*$ )F-\"\"&F/F/,*F+F/F3F/*$)F-\"\"%F/F/*$)F-\"\"$F/F/,,F0F/F7F/F:F/F-F/F/ F/,(F3F/F7F/*$)F-\"\"#F/F/7&,(F0F/F3F/F:F/F6,*F7F/F?F/F-F/F/F/,.F+F/F0 F/F3F/F:F/F?F/F-F/7&,,F0F/F3F/F7F/F:F/F-F/FGFGFGFF" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 18 "evalm(test2-keym);" }}{PARA 8 "" 1 "" {TEXT -1 58 "Error, (in lina lg[matadd]) matrix dimensions incompatible\n" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 51 "ad drkey := (M, K) -> map(m -> m mod 2, evalm(M+K));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%(addrkeyGf*6$%\"MG%\"KG6\"6$%)operatorG%&arrowGF)-%$m apG6$f*6#%\"mGF)F*F)-%$modG6$9$\"\"#F)F)F)-%&evalmG6#,&F6\"\"\"9%F " 0 "" {MPLTEXT 1 0 18 "addrkey(im, keym);" }}{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-F1F-,(F)F- *$)F+\"\"%F-F-F1F-,,F)F-F9F-F1F-*$)F+\"\"#F-F-F-F-7&,(F.F-F5F-F+F-,,F) F-F5F-F1F-F+F-F-F-,&F)F-F9F-,,F)F-F5F-F9F-F=F-F-F-7&FB,.F)F-F.F-F5F-F1 F-F=F-F+F-,(F1F-F=F-F+F-,*F)F-F5F-F9F-F-F-7&,(F.F-F9F-F1F-,(F5F-F9F-F= F-FK,*F.F-F5F-F+F-F-F-" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 24 "i sbox := 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), coe ff(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') mod 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 31 "sbox(1+x+x^3+x^6+x^7, f(x), \+ x);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,,*$)%\"xG\"\"%\"\"\"F(*$)F&\" \"$F(F(*$)F&\"\"#F(F(F&F(F(F(" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 18 "isbox(%, f(x), x);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,,*$)%\"xG \"\"(\"\"\"F(*$)F&\"\"'F(F(*$)F&\"\"$F(F(F&F(F(F(" }}}{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%\"xG6\"6$%)operatorG%&arrowGF*-%$mapG6&%&isboxG-%&evalmG6#9$9%9&F *F*F*" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 22 "invshiftrow := pro c(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 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 "invmixcolumn := proc(M, f, x)" }}{PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 18 " 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 40 " res := map(mp, evalm(iL &* M), f, x);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 22 " RETURN(evalm(res));" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "end:" }}}{EXCHG {PARA 11 "" 1 "" {TEXT -1 0 "" }}} {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 6 "192/8;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"#C" } }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 23 "message := \"Hi there!\"; " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%(messageGQ*Hi~there!6\"" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 32 "message := mblocks(message, \+ 16);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%(messageGQ1Hi~there!xxxxxxx6 \"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 25 "key := \"This is my k ey!\";" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$keyGQ0This~is~my~key!6\" " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 24 "key := mblocks(key, 32) ;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$keyGQAThis~is~my~key!xxxxxxxxx xxxxxxxx6\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 26 "mf := tofiel d(message, x);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#mfG72*$)%\"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 55 "messm := map(mp, transpose(matrix(4, 4, mf) ), p(x), x);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%&messmG-%'matrixG6#7 &7&,(*$)%\"xG\"\"$\"\"\"F/F-F/F/F/,**$)F-\"\"(F/F/*$)F-\"\"&F/F/*$)F- \"\"%F/F/F+F/,0F1F/*$)F-\"\"'F/F/F4F/F7F/*$)F-\"\"#F/F/F-F/F/F/,,F;F/F 4F/F7F/F+F/F-F/7&,,F;F/F7F/F+F/F-F/F/F/,*F7F/F>F/F-F/F/F/FAFA7&,.F1F/F ;F/F4F/F+F/F>F/F-F/,(F7F/F+F/F-F/FAFA7&,(F;F/F4F/F+F/FDFAFA" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 22 "mk := tofield(key, x);" }} {PARA 12 "" 1 "" {XPPMATH 20 "6#>%#mkG7B*$)%\"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*FFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFF" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 43 "keym : = map(mp, matrix(4, 8, mk), p(x), x);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%%keymG-%'matrixG6#7&7*,(*$)%\"xG\"\"(\"\"\"F/*$)F-\"\"'F/F/*$)F- \"\"&F/F/,*F+F/F3F/*$)F-\"\"%F/F/*$)F-\"\"$F/F/,,F0F/F7F/F:F/F-F/F/F/, (F3F/F7F/*$)F-\"\"#F/F/,.F+F/F0F/F3F/F:F/F?F/F-F/F=F>FB7*,,F3F/F7F/F?F /F-F/F/F/,,F+F/F0F/F3F/F7F/F?F/FB,*F0F/F?F/F-F/F/F/,*F7F/F?F/F-F/F/F/F E,0F+F/F0F/F3F/F7F/F?F/F-F/F/F/,,F0F/F3F/F7F/F:F/F-F/7*FIFIFIFIFIFIFIF IFJ" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 40 "ct := aesencipher(me ssm, keym, f(x), x);" }}{PARA 8 "" 1 "" {TEXT -1 45 "Error, (in linalg [rowdim]) invalid arguments\n" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 13 "evalm(messm);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%&messmG" }}} {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-F1F-*$)F+\"\"$F-F-*$)F+\"\"#F-F-,*F1F-F8F-F+ F-F-F-,.*$)F+\"\"(F-F-F)F-F1F-F8F-F+F-F-F-7&,,F)F-F.F-F1F-F5F-F-F-,&F1 F-F-F-,.F)F-F.F-F1F-F5F-F8F-F-F-,(F=F-F.F-F1F-7&,,F=F-F)F-F.F-F+F-F-F- F-,(F)F-F5F-F8F-,*F)F-F.F-F5F-F8F-7&F),,F)F-F.F-F1F-F8F-F-F-,*F=F-F1F- F5F-F-F-,,F=F-F)F-F1F-F+F-F-F-" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 33 "cipher := convert(ct[1], vector);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%'cipherG-%'vectorG6#72,**$)%\"xG\"\"'\"\"\"F.*$)F,\" \"&F.F.*$)F,\"\"%F.F.F.F.,,F*F.F/F.F2F.*$)F,\"\"$F.F.*$)F,\"\"#F.F.,*F 2F.F9F.F,F.F.F.,.*$)F,\"\"(F.F.F*F.F2F.F9F.F,F.F.F.,,F*F.F/F.F2F.F6F.F .F.,&F2F.F.F.,.F*F.F/F.F2F.F6F.F9F.F.F.,(F>F.F/F.F2F.,,F>F.F*F.F/F.F,F .F.F.F.,(F*F.F6F.F9F.,*F*F.F/F.F6F.F9F.F*,,F*F.F/F.F2F.F9F.F.F.,*F>F.F 2F.F6F.F.F.,,F>F.F*F.F2F.F,F.F.F." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 67 "cipher := [seq(ftable[cipher[i]], i = 1..linalg[vectd im](cipher))];" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%'cipherG72*$)%\"xG \"$C\"\"\"\"*$)F(\"$.#F**$)F(\"$,\"F**$)F(\"$(=F**$)F(\"$I\"F**$)F(\"$ 2#F**$)F(\"$^#F**$)F(\"#wF**$)F(\"##*F**$)F(\"$b#F**$)F(\"#`F**$)F(\"# dF**$)F(\"\"'F**$)F(\"$p\"F**$)F(\"#>F**$)F(\"$\\\"F*" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 20 "toletter(cipher, x);" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#Q1|gr|fwe|fv|]s|jw|fzL\\|jz59|'|du|4|`t6\"" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 31 "keyc := convert(ct[2], matri x);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%%keycG-%'matrixG6#7&7&,**$)% \"xG\"\"(\"\"\"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/,0F+F/*$)F-\"\"'F/F/F8F/F3F/F;F/F-F /F/F/7&,(F0F/F;F/F/F/,,F8F/F0F/F3F/F-F/F/F/,*F0F/F3F/F;F/F/F/,.F+F/F8F /F0F/F3F/F-F/F/F/7&,&F0F/F;F/,*F+F/F8F/F0F/F3F/,(F+F/F8F/F0F/,,F+F/F?F /F0F/F3F/F;F/7&,0F+F/F?F/F8F/F0F/F3F/F;F/F-F/,.F+F/F8F/F3F/F;F/F-F/F/F /,.F+F/F?F/F8F/F0F/F;F/F/F/,,F+F/F3F/F;F/F-F/F/F/" }}}{EXCHG {PARA 0 " > " 0 "" {MPLTEXT 1 0 40 "pt := aesdecipher(ct[1], keyc, f(x), x);" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#Q'here~16\"" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%#ptG6$-%'matrixG6#7&7&,(*$)%\"xG\"\"$\"\"\"F0F.F0F0F0 ,**$)F.\"\"(F0F0*$)F.\"\"&F0F0*$)F.\"\"%F0F0F,F0,0F2F0*$)F.\"\"'F0F0F5 F0F8F0*$)F.\"\"#F0F0F.F0F0F0,,F " 0 "" {MPLTEXT 1 0 43 "plain := con vert(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.F3F.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[pl ain[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 19 "tolet ter(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 0 "" }}}{EXCHG {PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 30 "t1 := bytesub(messm, f(x), x);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#t1G-%'matrixG6#7&7&,**$)%\"xG\"\"&\"\"\"F/*$)F- \"\"$F/F/F-F/F/F/,**$)F-\"\"'F/F/F+F/F0F/*$)F-\"\"#F/F/,(F4F/F+F/F0F/, ,*$)F-\"\"(F/F/F4F/*$)F-\"\"%F/F/F0F/F-F/7&,*F+F/F?F/F0F/F/F/,*F " 0 "" {MPLTEXT 1 0 19 "t2 := shiftrow(t1);" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%#t2G-%'matrixG6#7&7&,**$)%\"xG\"\"& \"\"\"F/*$)F-\"\"$F/F/F-F/F/F/,**$)F-\"\"'F/F/F+F/F0F/*$)F-\"\"#F/F/,( F4F/F+F/F0F/,,*$)F-\"\"(F/F/F4F/*$)F-\"\"%F/F/F0F/F-F/7&F;,*F+F/F?F/F0 F/F/F/,*F " 0 "" {MPLTEXT 1 0 29 "t3 := mixcolumn (t2, f(x), x);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#t3G-%'matrixG6#7& 7&,&*$)%\"xG\"\"$\"\"\"F/F/F/,**$)F-\"\"(F/F/*$)F-\"\"%F/F/F-F/F/F/,(* $)F-\"\"&F/F/F+F/F/F/,,F8F/F4F/F+F/*$)F-\"\"#F/F/F/F/7&F/,*F1F/F8F/F4F /F/F/,(F8F/F4F/F/F/,,F1F/*$)F-\"\"'F/F/F+F/F " 0 "" {MPLTEXT 1 0 24 "t4 := addrkey(t3, keym );" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#t4G-%'matrixG6#7&7&,,*$)%\"xG \"\"(\"\"\"F/*$)F-\"\"'F/F/*$)F-\"\"&F/F/*$)F-\"\"$F/F/F/F/,.F0F/F3F/* $)F-\"\"%F/F/F6F/*$)F-\"\"#F/F/F/F/,*F:F/F6F/F=F/F-F/,(F3F/F6F/F-F/7&, ,F+F/F3F/F:F/F6F/F/F/,,F+F/F0F/F3F/F6F/F-F/,*F+F/F0F/F=F/F/F/,*F3F/F:F /F6F/F/F/7&,(F6F/F=F/F-F/,.F+F/F3F/F:F/F6F/F-F/F/F/,*F0F/F:F/F-F/F/F/, ,F0F/F3F/F=F/F-F/F/F/7&,*F+F/F3F/F:F/F-F/,(F:F/F=F/F-F/,&F+F/F6F/,0F+F /F0F/F3F/F:F/F6F/F=F/F/F/" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 25 "s3 := addrkey(t4, keym);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#s3 G-%'matrixG6#7&7&,&*$)%\"xG\"\"$\"\"\"F/F/F/,**$)F-\"\"(F/F/*$)F-\"\"% F/F/F-F/F/F/,(*$)F-\"\"&F/F/F+F/F/F/,,F8F/F4F/F+F/*$)F-\"\"#F/F/F/F/7& F/,*F1F/F8F/F4F/F/F/,(F8F/F4F/F/F/,,F1F/*$)F-\"\"'F/F/F+F/F " 0 "" {MPLTEXT 1 0 13 "evalm(t 3-s3);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%'matrixG6#7&7&\"\"!F(F(F(F 'F'F'" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 32 "s2 := invmixcolumn (s3, f(x), x);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#s2G-%'matrixG6#7& 7&,**$)%\"xG\"\"&\"\"\"F/*$)F-\"\"$F/F/F-F/F/F/,**$)F-\"\"'F/F/F+F/F0F /*$)F-\"\"#F/F/,(F4F/F+F/F0F/,,*$)F-\"\"(F/F/F4F/*$)F-\"\"%F/F/F0F/F-F /7&F;,*F+F/F?F/F0F/F/F/,*F " 0 "" {MPLTEXT 1 0 13 "evalm(t2-s2);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%'matrixG6#7&7& \"\"!F(F(F(F'F'F'" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 22 "s1 := \+ invshiftrow(s2);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#s1G-%'matrixG6# 7&7&,**$)%\"xG\"\"&\"\"\"F/*$)F-\"\"$F/F/F-F/F/F/,**$)F-\"\"'F/F/F+F/F 0F/*$)F-\"\"#F/F/,(F4F/F+F/F0F/,,*$)F-\"\"(F/F/F4F/*$)F-\"\"%F/F/F0F/F -F/7&,*F+F/F?F/F0F/F/F/,*F " 0 "" {MPLTEXT 1 0 13 "evalm(t1-s1);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%'matrixG6#7&7& \"\"!F(F(F(F'F'F'" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 30 "t0 := \+ invbytesub(s1, f(x), x);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#t0G-%'m atrixG6#7&7&,(*$)%\"xG\"\"$\"\"\"F/F-F/F/F/,**$)F-\"\"(F/F/*$)F-\"\"&F /F/*$)F-\"\"%F/F/F+F/,0F1F/*$)F-\"\"'F/F/F4F/F7F/*$)F-\"\"#F/F/F-F/F/F /,,F;F/F4F/F7F/F+F/F-F/7&,,F;F/F7F/F+F/F-F/F/F/,*F7F/F>F/F-F/F/F/FAFA7 &,.F1F/F;F/F4F/F+F/F>F/F-F/,(F7F/F+F/F-F/FAFA7&,(F;F/F4F/F+F/FDFAFA" } }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 16 "evalm(messm-t0);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%'matrixG6#7&7&\"\"!F(F(F(F'F'F'" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 39 "aesencipher := proc(message, key, f, x)" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 50 " local j, cm, pk, \+ nk, sk, keyct, nckey, v, w, m;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 49 " \+ pk := linalg[augment](linalg[col](key, 1..4));" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 29 " cm := addrkey(message,pk);" }}{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 := b ytesub(cm, f, x);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 25 " cm := sh iftrow(cm);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 32 " cm := mixcolum n(cm, f, x);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 23 " if nckey = 6 \+ then" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 62 " nk := linalg[augme nt](op(nk), linalg[col](key,5..6));" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 35 " v := linalg[col](pk, 3); " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 33 " w := linalg[col](nk, 2);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 70 " nk := linalg[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 " n k := linalg[augment](op(nk), map(m -> m mod 2, evalm(v+w)));" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 10 " else" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 38 " nk := linalg[col](key, 5..8);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 9 " fi:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 28 " \+ cm := addrkey(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 " cm := bytesub(cm, f, x); " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 25 " cm := shiftrow(cm);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 33 " cm := mixcolumn(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 15 " pk := 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 46 " sk := linalg[augment](col(pk,3..4), nk); " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 22 " elif nckey = 8 then" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 35 " sk := linalg[augment](pk,nk); " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 7 " else" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 15 " sk := nk;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 6 " fi:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 32 " RETURN(evalm(cm), eval m(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 "aesdecipher := proc(message, key, f, x)" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 53 " local j, pm, pk, nk, sk, keyct, nckey, v, w, m, r; " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 98 " nckey := linalg[coldim](key) ; pm := message; nk := linalg[augment](linalg[col](key, 1..nckey));" } }{PARA 0 "> " 0 "" {MPLTEXT 1 0 20 " if nckey = 4 then" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 52 " nk := linalg[augment](linalg[col](key, \+ 1..4));" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 33 " pm := addrkey(mess age, nk);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 17 " keyct := 9;" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 23 " fi: print(\"here 1\");" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 12 " pk := [];" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 33 " if nckey = 6 or nckey = 8 then" }}{PARA 0 "> " 0 " " {MPLTEXT 1 0 33 " pm := invbytesub(pm, f, x);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 28 " pm := invshiftrow(pm);" }}{PARA 0 "> " 0 " " {MPLTEXT 1 0 52 " pm := invmixcolumn(pm, f, x); print(\"here 2 \");" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 23 " if nckey = 6 then" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 63 " pk := linalg[augment](lina lg[col](key, 1..2), op(pk));" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 33 " \+ v := linalg[col](nk, 1);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 33 " \+ w := linalg[col](nk, 2);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 70 " pk := linalg[augment](map(m -> m mod 2, evalm(v+w)), op(pk)) ;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 33 " v := linalg[col](nk, \+ 1);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 85 " w := conve rt(ListTools[Rotate](convert(col(pk,3),list),1),vector); " }}{PARA 0 " > " 0 "" {MPLTEXT 1 0 33 " w := map(sbox, w, f, x);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 35 " r := Rem(x^9, f, x) mod 2;" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 34 " w[1] := (w[1] + r) mod 2; " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 70 " pk := linalg[augment]( map(m -> m mod 2, evalm(v+w)), op(pk));" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 10 " else" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 38 " pk : = linalg[col](key, 1..4);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 26 " \+ fi: print(\"here 3\");" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 37 " pm \+ := invaddrkey(pm, pk, f, x);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 15 " \+ nk := pk;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 17 " keyct := 8;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 7 " fi: " }}{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 15 " nk := 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 34 " pk \+ := invkeysched(nk, 0, f, x);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 25 " \+ pm := addrkey(pm, pk);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 20 " if nck ey = 6 then" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 46 " sk := linalg[a ugment](pk, col(nk,1..2));" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 22 " el if nckey = 8 then" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 35 " sk := li nalg[augment](pk,nk);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 7 " else" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 15 " sk := pk;" }}{PARA 0 "> " 0 " " {MPLTEXT 1 0 6 " fi:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 32 " RETU RN(evalm(pm), evalm(sk));" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "end:" } }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 26 "evalm(messm); evalm(keym); " }}{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-,0F/F-*$ )F+\"\"'F-F-F2F-F5F-*$)F+\"\"#F-F-F+F-F-F-,,F9F-F2F-F5F-F)F-F+F-7&,,F9 F-F5F-F)F-F+F-F-F-,*F5F-F " 0 "" {MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 40 "ct := aesencipher( messm, keym, f(x), x);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%#ctG6$-%'m atrixG6#7&7&,&*$)%\"xG\"\"&\"\"\"F0F.F0,.*$)F.\"\"(F0F0*$)F.\"\"'F0F0F ,F0*$)F.\"\"%F0F0F.F0F0F0,,F2F0F5F0F,F0F8F0*$)F.\"\"$F0F0,(F8F0F.F0F0F 07&,*F,F0*$)F.\"\"#F0F0F.F0F0F0,*F,F0F8F0F " 0 "" {MPLTEXT 1 0 1 ";" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 41 "tc := aesdecipher(ct[1], ct[2], f(x ), x);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%#tcG6$-%'matrixG6#7&7&,(*$ )%\"xG\"\"$\"\"\"F0F.F0F0F0,**$)F.\"\"(F0F0*$)F.\"\"&F0F0*$)F.\"\"%F0F 0F,F0,0F2F0*$)F.\"\"'F0F0F5F0F8F0*$)F.\"\"#F0F0F.F0F0F0,,F " 0 "" {MPLTEXT 1 0 19 "evalm(tc[1]-messm);" }}{PARA 11 "" 1 "" {XPPMATH 20 " 6#-%'matrixG6#7&7&\"\"!F(F(F(F'F'F'" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 18 "evalm(tc[2]-keym);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6 #-%'matrixG6#7&7&\"\"!F(F(F(F'F'F'" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 13 "ct[1]; ct[2];" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%'m atrixG6#7&7&,**$)%\"xG\"\"(\"\"\"F-*$)F+\"\"$F-F-*$)F+\"\"#F-F-F+F-,.* $)F+\"\"&F-F-*$)F+\"\"%F-F-F.F-F1F-F+F-F-F-,(F)F-F.F-F+F-,,F5F-F8F-F.F -F+F-F-F-7&,,F)F-*$)F+\"\"'F-F-F8F-F.F-F-F-,,F)F-F5F-F.F-F1F-F+F-,&F?F -F.F-,&F)F-F1F-7&,(F?F-F8F-F1F-,*F?F-F5F-F.F-F-F-,,F?F-F5F-F.F-F1F-F-F -,*F)F-F?F-F8F-F+F-7&,,F)F-F5F-F8F-F+F-F-F-,,F)F-F5F-F8F-F.F-F+F-,*F)F -F.F-F1F-F-F-,.F)F-F?F-F5F-F8F-F1F-F-F-" }}{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)F-F+F-F-F-7&,(F2F-F 9F-F)F-,(F/F-F2F-F9F-,,*$)F+\"\"(F-F-F/F-F9F-F)F-F5F-,(F/F-F)F-F+F-7&, &F@F-F/F-,,F/F-F2F-F9F-F5F-F+F-,*F/F-F5F-F+F-F-F-,.F@F-F2F-F9F-F)F-F5F -F+F-7&,*F@F-F2F-F)F-F-F-,2F@F-F/F-F2F-F9F-F)F-F5F-F+F-F-F-,0F@F-F/F-F 2F-F9F-F5F-F+F-F-F-,*F/F-F2F-F)F-F-F-" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 0 "> " 0 " " {MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 12 "evalm (keym);" }}{PARA 11 "" 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 "" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 0 "> " 0 " " {MPLTEXT 1 0 40 "map(m -> m mod 2, ([1,2,3] + [4,5, 6]));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7%\"\"\"F$F$" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 30 "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 11 "" 1 "" {XPPMATH 20 "6#>%\"vG7*\"\"\"\"\"!F'F'F&F&F&F&" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"SG-%'matrixG6#7#7*\"\"\"\"\"!F+F+F*F*F*F*" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 33 "map(m -> m mod 2, evalm(S^(- 1)));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%'matrixG6#7*7*\"\"!F(\"\"\" F(F(F)F(F)7*F)F(F(F)F(F(F)F(7*F(F)F(F(F)F(F(F)7*F)F(F)F(F(F)F(F(7*F(F) F(F)F(F(F)F(7*F(F(F)F(F)F(F(F)7*F)F(F(F)F(F)F(F(7*F(F)F(F(F)F(F)F(" }} }{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 29 "with(LinearAlgebra:-Modular ):" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 34 "tst := matrix([ [1, 3 ], [2, 5] ]);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$tstG-%'matrixG6#7$ 7$\"\"\"\"\"$7$\"\"#\"\"&" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 21 "Inverse(2, evalm(S));" }}{PARA 8 "" 1 "" {TEXT -1 435 "Error, inva lid input: LinearAlgebra:-Modular:-Inverse expects its 2nd argument, M , to be of type Matrix, but received array(1 .. 8, 1 .. 8,[(3, 8)=1,(4 , 8)=1,(4, 1)=1,(2, 2)=1,(5, 8)=0,(5, 2)=1,(4, 7)=0,(7, 7)=1,(6, 4)=1, (8, 1)=0,(5, 7)=0,(7, 1)=0,(8, 6)=1,(2, 6)=1,(1, 5)=1,(6, 1)=0,(3, 1)= 1,(6, 8)=0,(4, 2)=1,(8, 7)=1,(3, 7)=1,(2, 1)=1,(7, 8)=0,(4, 4)=1,(8, 3 )=0,(7, 5)=1,(5, 3)=1,(1, 3)=0,(6, 3)=1,(1, 6)=1,(3, 2)=1,(5, 1)=1,(5, ...\n" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 15 "? LinearAlgebra" } }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 72 "for i from 1 to 51 do if d egree(Powmod(x, i, p(x), x) mod 2, x) = 7 then" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 53 " print(\"i = \", i, Powmod(x, i, p(x), x) mod 2); f i:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 3 "od:" }}{PARA 11 "" 1 "" {XPPMATH 20 "6%Q%i~=~6\"\"\"(*$)%\"xGF%\"\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6%Q%i~=~6\"\"#6,**$)%\"xG\"\"(\"\"\"F+*$)F)\"\"'F+F+*$)F) \"\"%F+F+*$)F)\"\"$F+F+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6%Q%i~=~6\"\" #7,,*$)%\"xG\"\"(\"\"\"F+*$)F)\"\"&F+F+*$)F)\"\"$F+F+F)F+F+F+" }} {PARA 11 "" 1 "" {XPPMATH 20 "6%Q%i~=~6\"\"#9,**$)%\"xG\"\"(\"\"\"F+*$ )F)\"\"%F+F+*$)F)\"\"$F+F+F)F+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6%Q%i~ =~6\"\"#<,,*$)%\"xG\"\"(\"\"\"F+*$)F)\"\"&F+F+*$)F)\"\"%F+F+*$)F)\"\"$ F+F+*$)F)\"\"#F+F+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6%Q%i~=~6\"\"#>,** $)%\"xG\"\"(\"\"\"F+*$)F)\"\"'F+F+*$)F)\"\"#F+F+F)F+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6%Q%i~=~6\"\"#?,,*$)%\"xG\"\"(\"\"\"F+*$)F)\"\"%F+F+*$ )F)\"\"#F+F+F)F+F+F+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6%Q%i~=~6\"\"#B, **$)%\"xG\"\"(\"\"\"F+*$)F)\"\"'F+F+*$)F)\"\"%F+F+*$)F)\"\"#F+F+" }} {PARA 11 "" 1 "" {XPPMATH 20 "6%Q%i~=~6\"\"#C,,*$)%\"xG\"\"(\"\"\"F+*$ )F)\"\"&F+F+*$)F)\"\"%F+F+F)F+F+F+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6% Q%i~=~6\"\"#E,.*$)%\"xG\"\"(\"\"\"F+*$)F)\"\"'F+F+*$)F)\"\"&F+F+*$)F) \"\"%F+F+*$)F)\"\"$F+F+F)F+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6%Q%i~=~6 \"\"#F,0*$)%\"xG\"\"(\"\"\"F+*$)F)\"\"'F+F+*$)F)\"\"&F+F+*$)F)\"\"$F+F +*$)F)\"\"#F+F+F)F+F+F+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6%Q%i~=~6\"\" #G,**$)%\"xG\"\"(\"\"\"F+*$)F)\"\"'F+F+*$)F)\"\"#F+F+F+F+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6%Q%i~=~6\"\"#H,(*$)%\"xG\"\"(\"\"\"F+*$)F)\"\"%F +F+F+F+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6%Q%i~=~6\"\"#K,**$)%\"xG\"\" (\"\"\"F+*$)F)\"\"'F+F+*$)F)\"\"&F+F+*$)F)\"\"#F+F+" }}{PARA 11 "" 1 " " {XPPMATH 20 "6%Q%i~=~6\"\"#L,,*$)%\"xG\"\"(\"\"\"F+*$)F)\"\"'F+F+*$) F)\"\"%F+F+F)F+F+F+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6%Q%i~=~6\"\"#M,. *$)%\"xG\"\"(\"\"\"F+*$)F)\"\"&F+F+*$)F)\"\"%F+F+*$)F)\"\"$F+F+*$)F)\" \"#F+F+F+F+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6%Q%i~=~6\"\"#O,(*$)%\"xG \"\"(\"\"\"F+*$)F)\"\"'F+F+F)F+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6%Q%i ~=~6\"\"#P,.*$)%\"xG\"\"(\"\"\"F+*$)F)\"\"%F+F+*$)F)\"\"$F+F+*$)F)\"\" #F+F+F)F+F+F+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6%Q%i~=~6\"\"#S,(*$)%\" xG\"\"(\"\"\"F+*$)F)\"\"%F+F+*$)F)\"\"#F+F+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6%Q%i~=~6\"\"#V,**$)%\"xG\"\"(\"\"\"F+*$)F)\"\"'F+F+*$)F) \"\"$F+F+*$)F)\"\"#F+F+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6%Q%i~=~6\"\" #W,(*$)%\"xG\"\"(\"\"\"F+F)F+F+F+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6%Q %i~=~6\"\"#[,**$)%\"xG\"\"(\"\"\"F+*$)F)\"\"'F+F+*$)F)\"\"&F+F+*$)F)\" \"$F+F+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6%Q%i~=~6\"\"#\\,,*$)%\"xG\" \"(\"\"\"F+*$)F)\"\"'F+F+*$)F)\"\"$F+F+F)F+F+F+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6%Q%i~=~6\"\"#],**$)%\"xG\"\"(\"\"\"F+*$)F)\"\"$F+F+*$)F) \"\"#F+F+F+F+" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}} {MARK "99 0 0" 21 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 }