{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 "Geneva" 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 "Heading 2" -1 4 1 {CSTYLE "" -1 -1 "Geneva" 1 14 0 0 0 1 2 1 2 2 2 2 1 1 1 1 }1 1 0 0 8 2 1 0 1 0 2 2 0 1 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 11 12 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Title" -1 18 1 {CSTYLE " " -1 -1 "Geneva" 1 18 0 0 0 1 2 1 1 2 2 2 1 1 1 1 }3 1 0 0 12 12 1 0 1 0 2 2 19 1 }{PSTYLE "Author" -1 19 1 {CSTYLE "" -1 -1 "Geneva" 1 12 0 0 0 1 2 2 2 2 2 2 1 1 1 1 }3 1 0 0 8 8 1 0 1 0 2 2 0 1 }} {SECT 0 {EXCHG {PARA 18 "" 0 "" {TEXT -1 13 "DES constants" }}{PARA 19 "" 0 "" {TEXT -1 22 "\251 Mike May, S.J., 2002" }}{PARA 19 "" 0 "" {TEXT -1 13 "maymk@slu.edu" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 8 "restart;" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 203 "The encryption sy stem of DES uses a lot of constants. This worksheet defines them. Be fore attempting to run the other worksheets on DES you should run this worksheet to load the constant into memory. " }}}{SECT 0 {PARA 4 "" 0 "" {TEXT -1 7 "S boxes" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 70 "We wil l load the S boxes in as matrices, then convert them to a table." }}} {SECT 0 {PARA 4 "" 0 "" {TEXT -1 19 "S boxes as matrices" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 1417 "S1 := [\n[14,4,13,1,2,15,11,8,3,1 0,6,12,5,9,0,7],\n[0,15,7,4,14,2,13,1,10,6,12,11,9,5,3,8],\n[4,1,14,8, 13,6,2,11,15,12,9,7,3,10,5,0],\n[15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13 ]]:\nS2 := [\n[15,1,8,14,6,11,3,4,9,7,2,13,12,0,5,10],\n[3,13,4,7,15,2 ,8,14,12,0,1,10,6,9,11,5],\n[0,14,7,11,10,4,13,1,5,8,12,6,9,3,2,15],\n [13,8,10,1,3,15,4,2,11,6,7,12,0,5,14,9]]:\nS3 := [\n[10,0,9,14,6,3,15, 5,1,13,12,7,11,4,2,8],\n[13,7,0,9,3,4,6,10,2,8,5,14,12,11,15,1],\n[13, 6,4,9,8,15,3,0,11,1,2,12,5,10,14,7],\n[1,10,13,0,6,9,8,7,4,15,14,3,11, 5,2,12]]:\nS4 := [\n[7,13,14,3,0,6,9,10,1,2,8,5,11,12,4,15],\n[13,8,11 ,5,6,15,0,3,4,7,2,12,1,10,14,9],\n[10,6,9,0,12,11,7,13,15,1,3,14,5,2,8 ,4],\n[3,15,0,6,10,1,13,8,9,4,5,11,12,7,2,14]]:\nS5 := [\n[2,12,4,1,7, 10,11,6,8,5,3,15,13,0,14,9],\n[14,11,2,12,4,7,13,1,5,0,15,10,3,9,8,6], \n[4,2,1,11,10,13,7,8,15,9,12,5,6,3,0,14],\n[11,8,12,7,1,14,2,13,6,15, 0,9,10,4,5,3]]:\nS6 := [\n[12,1,10,15,9,2,6,8,0,13,3,4,14,7,5,11],\n[1 0,15,4,2,7,12,9,5,6,1,13,14,0,11,3,8],\n[9,14,15,5,2,8,12,3,7,0,4,10,1 ,13,11,6],\n[4,3,2,12,9,5,15,10,11,14,1,7,6,0,8,13]]:\nS7 := [\n[4,11, 2,14,15,0,8,13,3,12,9,7,5,10,6,1],\n[13,0,11,7,4,9,1,10,14,3,5,12,2,15 ,8,6],\n[1,4,11,13,12,3,7,14,10,15,6,8,0,5,9,2],\n[6,11,13,8,1,4,10,7, 9,5,0,15,14,2,3,12]]:\nS8 := [\n[13,2,8,4,6,15,11,1,10,9,3,14,5,0,12,7 ],\n[1,15,13,8,10,3,7,4,12,5,6,11,0,14,9,2],\n[7,11,4,1,9,12,14,2,0,6, 10,13,15,3,5,8],\n[2,1,14,7,4,10,8,13,15,12,9,0,3,5,6,11]]:\nsbox :=[S 1,S2,S3,S4,S5,S6,S7,S8]:" }}}}{SECT 0 {PARA 4 "" 0 "" {TEXT -1 17 "S b oxes as tables" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 304 "We would like t he sbox in a different form for ease of use later. We want it to be a list of tables, with each table representing one of the boxes. The i ndexing set should be 6 bit binary strings and the stored value should be a 4 bit binary string. We need two conversion functions before co nverting." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 191 "indexer := (i ,j,k) ->\n substring(convert(convert(\n (i-1)*32+(j-1)*2+(k-1)+64, binary),string),2..7):\nfourbitbin := decnum ->\n substring(conver t(convert(decnum+16,binary),string),2..5):" }}}{EXCHG {PARA 0 "> " 0 " " {MPLTEXT 1 0 119 "SBox := [seq(table(\n[seq(seq(seq(\nindexer(i,j,k) =fourbitbin(sbox[m][2*(i-1)+k,j]),j=1..16),k=1..2),i=1..2)]),\nm=1..8) ]:" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 72 "It is useful to look at the last of these converted S boxes as a matrix." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 148 "showAsMatrix := Table ->\n matrix(4,16,[seq( seq(\n [seq(\nTable[indexer(i,j,k)],j=1..16)],\n k=1..2 ),i=1..2)]):\nshowAsMatrix(SBox[8]);" }}{PARA 11 "" 1 "" {XPPMATH 20 " 6#-%'matrixG6#7&72Q%11016\"Q%0010F)Q%1000F)Q%0100F)Q%0110F)Q%1111F)Q%1 011F)Q%0001F)Q%1010F)Q%1001F)Q%0011F)Q%1110F)Q%0101F)Q%0000F)Q%1100F)Q %0111F)72F0F.F(F+F1F3F8F,F7F5F-F/F6F4F2F*72F8F/F,F0F2F7F4F*F6F-F1F(F.F 3F5F+72F*F0F4F8F,F1F+F(F.F7F2F6F3F5F-F/" }}}}}{SECT 0 {PARA 4 "" 0 "" {TEXT -1 21 "Permutation constants" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 41 "Now we look at the permutation constants." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 1036 "PC1 :=[\n57,49,41,33,25,17,9,\n1,58,50,42,34,2 6,18,\n10,2,59,51,43,35,27,\n19,11,3,60,52,44,36,\n63,55,47,39,31,23,1 5,\n7,62,54,46,38,30,22,\n14,6,61,53,45,37,29,\n21,13,5,28,20,12,4]:\n PC2 :=[\n14,17,11,24,1,5,\n3,28,15,6,21,10,\n23,19,12,4,26,8,\n16,7,27 ,20,13,2,\n41,52,31,37,47,55,\n30,40,51,45,33,48,\n44,49,39,56,34,53, \n46,42,50,36,29,32]:\nkeyshifts := [1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1]: \nIP := [\n58,50,42,34,26,18,10,2,\n60,52,44,36,28,20,12,4,\n62,54,46, 38,30,22,14,6,\n64,56,48,40,32,24,16,8,\n57,49,41,33,25,17,9,1,\n59,51 ,43,35,27,19,11,3,\n61,53,45,37,29,21,13,5,\n63,55,47,39,31,23,15,7]: \nE := [\n32, 1, 2, 3, 4, 5,\n 4, 5, 6, 7, 8, 9,\n 8, 9,10,11,12,13,\n 12,13,14,15,16,17,\n16,17,18,19,20,21,\n20,21,22,23,24,25,\n24,25,26,2 7,28,29,\n28,29,30,31,32, 1]:\nP := [\n16,7,20,21,29,12,28,17,1,15,23, 26,5,18,31,10,\n2,8,24,14,32,27,3,9,19,13,30,6,22,11,4,25]:\nIPI := [ \n40,8,48,16,56,24,64,32,\n39,7,47,15,55,23,63,31,\n38,6,46,14,54,22,6 2,30,\n37,5,45,13,53,21,61,29,\n36,4,44,12,52,20,60,28,\n35,3,43,11,51 ,19,59,27,\n34,2,42,10,50,18,58,26,\n33,1,41, 9,49,17,57,25]:" }}} {EXCHG {PARA 0 "" 0 "" {TEXT -1 76 "It is worthwhile to see that IP an d IPI are actually inverses of each other." }}}{EXCHG {PARA 0 "> " 0 " " {MPLTEXT 1 0 24 "seq(IP[IPI[i]],i=1..64);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6\\o\"\"\"\"\"#\"\"$\"\"%\"\"&\"\"'\"\"(\"\")\"\"*\"#5\"# 6\"#7\"#8\"#9\"#:\"#;\"#<\"#=\"#>\"#?\"#@\"#A\"#B\"#C\"#D\"#E\"#F\"#G \"#H\"#I\"#J\"#K\"#L\"#M\"#N\"#O\"#P\"#Q\"#R\"#S\"#T\"#U\"#V\"#W\"#X\" #Y\"#Z\"#[\"#\\\"#]\"#^\"#_\"#`\"#a\"#b\"#c\"#d\"#e\"#f\"#g\"#h\"#i\"# j\"#k" }}}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 89 "When you have executed \+ this worksheet, you should execute the worksheet on DES functions." }} }{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "0 0 0" 0 } {VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 }