Application Center - Maplesoft

# Investigating the DES Properties Using the GenDES Package

You can switch back to the summary page by clicking here.

Academy of Management in Legnica, Poland,
Faculty of Computer Science,
Wroclaw University of Applied Informatics, Poland

e mail: c.koscielny@wsm.edu.pl

Overview of the GenDES Package

Calling Sequence

GenDES[command](arguments

command(arguments

Description

The GenDES package is a collection of routines for exploring DES, for computer-aided design  related to DES secure symmetric-key block ciphers which allow to encrypt 64-bit block of data with the key of maximal length from 768 to 2359 bits, and for encrypting files by means of the old and generalized form of this algorithm, using Maple. The package is a noteworthy  tool suitable for engineers, teachers and students who deal with symmetric-key iterative block ciphers design.

Each command in the GenDES package can be accessed by using either the long form or the short form of the command name in the command calling sequence.It is possible to use the form GenDES:-command to access a command from the package, because  the implementation of the GenDES package is a module.

To be self-sufficient,  the main topics concerning  DES are now reminded. However, it is recommended to the reader the study of [1] and [2], where full details of this algorithm  are given. An interesting approach to cryptography can also be found in [3].

Fig. 1. Key schedule generation

Fig. 2. Permuted choice PC-1 (first 4 rows above C0, rows below D0

Fig. 3. Permuted choice PC-2

Fig. 4 Number of left shifts versus the iteration number.

Fig. 5. Enciphering computation

Fig. 6. Initial permutation IP

Fig. 7. Inverse of the initial permutation IP-1

Fig. 8.Calculation of f(R, K)

Fig. 9. E bit-selection table

Fig. 10. Permutation P

S1

S2

S3

S4

S5

S6

S7

S8

Fig. 11. Primitive functions S1 -  S8 (S-boxes)

Fig. 12.Determining the value of S4(r1 ,c3 ,c2 , c1, c0, r0),

row no. = 2r1+r0, column no. = 8c3+4c2+2c1+c0,

(e.g. if r1 r0 = 01, c3 c2 c1 c0 = 1101 then the output equals to convert(10, binary) = 1010

The key schedule generation algorithm (Fig. 1) uses two permuted choice functions PC-1 and PC-2, shown in Fig. 2 and 3, and left circular shifts, depending on the number of round, according to  Fig. 4.

The enciphering algorithm in Fig. 5 is presented. The 64 bits of the input block of message for the encryption transformation are first subjected to the initial permutation IP. The key-dependent computation that uses the permuted input block as its input to produce the preoutput block consists, except for a final interchange of blocks, of 16 rounds of a computation using the function f. This function operates on two blocks, one of 32 bits and one of 48 bits, to produce a  32-bit block. The preoutput block, i.e. R16L16, after inverse initial permutation, forms a block of 64-bit cryptogram. DES decryption consists of the encryption algorithm with the same key but reversed key schedule, using in order K16, K15, ..., K1, and, of course, with the 64-bit cryptogram on the input.

DES, similarly as IDEA and AES, belongs to a class of iterated block ciphers involving the sequential repetition of a round function and a particular subkey for each round. For any iterated block cipher encryption procedure is described by means of the equation

C = E(ks(K), M)                                             (1)

where E denotes two-variable encrypting function, K - a secret key chosen by the user, and M - a message to be encrypted. The secret key K is not directly used for encryption but it serves as input data for the function ks, generating a key schedule, i.e. subkeys for each iteration. A number of cryptologists suspect that the function ks intends to "inject" into the cryptogram as much additional information about bits of the secret key as possible, during the encryption process, instead of maximizing the diffusion and confusion. This additional information may  deliver - to the privileged circle of the initiated - a manner of deciphering cryptograms without the knowledge of the secret key. To verify the justness of this suspicion one ought to find and analyze an explicit  function F, which, taking into account both the encryption and key schedule generation algorithm, will allow to express symbolically the cryptogram

C = F(K, M)                                             (2)

and to compute it in one step, using the secret key K and the message M. But, in the case of the iterated block ciphers this task is almost unfeasible.

May be, because of this suspicion, it has been announced  in [2] that  "The DES has now been withdrawn. The use of DES is permitted only as a component function of TDEA" and that "with the withdrawal of the FIPS 46-3 standard:

1. Triple DES (i.e., TDEA), as specified in ANSI X9.52, Keying Options 1 and 2, is recognized as the only FIPS approved DES algorithm.

2. Other implementations of the DES function are no longer authorized for protection of Federal government information.

Note: Through the year 2030, Triple DES (TDEA) and the FIPS 197 Advanced Encryption Standard (AES) will coexist as FIPS approved algorithms – thus, allowing for a gradual transition to AES. (The AES is a new symmetric based encryption standard approved by NIST)".

However, the triple DES, and even AES, are much more weaker and more complicated than the standard DES, but  used according to the method discussed below.

To transform DES into a secure cipher it simply suffices to eliminate the key expansion algorithm, i.e. to generate arbitrarily the set of subkeys Ks for all iterations and to use it as a secret key. Then, applying the same encrypting algorithm E as in (1) we now compute the cryptogram of the message M according to

C = E(Ks, M)                                             (3)

and we are sure that all bits  of our modified secret key Ks participate in the encryption process.  Thus, since DES needs sixteen 48-bit subkeys, we will obtain in this way the 768-bit secret key to protect a 64-bit block of data.

Introducing small changes into the DES implementation we can further strengthen its protecting power. Namely, we can treat the initial permutation IP, primitive functions S1 - S8 (S-boxes), permutation P and 16 elements of the selection table E (with indices 1, 6, 7, 12, 13, 18, 19, 24, 25, 30, 31, 36, 37, 42, 43, 48) as components of the secret key and in this way enlarge additionally the key space. Since there are

permutations IP

sets of S-boxes,

permutations P

selection functions E

then the increase of a secret key length will be

? =                                      (4)

that is 1591 bits. Therefore, we can easily construct a generalized DES-based symmetric-key block cipher accepting the secret key of length up to 2359 bits, or to design 0.868406571810479 related to DES ciphers which use 768-bit key. There are also many other possibilities of designing DES-based secure ciphers, taking into account the secret key length, the secret sharing, data base encrypting, etc.

List of GenDES Package Commands

• The bl2hex(l) command displays a hexadecimal value of a 64-bit list l.

• The hexstr2bl(s) command converts a string s in the hexadecimal notation into an equivalent list of bits and returns the computed list.

• The sboxcr() command creates the global array  SBox of all eight S-boxes for DES.

• The rndsboxcr([s1, s2, s3, s4, s5, s6, s7, s8]) command  concern a secure DES encryption. This routine accepts a formal parameter in the form of  the list of seed values of nonnegint type, which set the initial state of the  random number generator for each S-box, and returns the set of 8 random S-boxes in the form of the global array  SBox.

• The dispsboxes() command displays the primitive functions for all 8 S-boxes for the standard DES.

• The dispsboxes([s1, s2, s3, s4, s5, s6, s7, s8]) command plays the same role as the previous command, displaying the primitive functions for all 8 randomly generated S-boxes.

• The sbtruthtbls() command called without the argument displays the truth tables of all 8 S-boxes  for standard DES, while  the command  sbtruthtbls([s1, s2, s3, s4, s5, s6, s7, s8]) accepting the list of nonnegint values (see the previous command) displays the truth tables of randomly generated DES S-boxes

• The DESkeysch(key)  command takes the 64-bit secret key contained in the list key and returns the list containing sixteen 48-bit subkeys for all iterations. The set of 16 subkeys should be stored in the global variable named K.

• The DESkeyschv(key) command does the same task as the previous command, but it is implemented as 16 assignment statements.

• The DESkeyschS(s) command accepts the string s containing 8 ASCII characters and returns the list containing sixteen 48-bit subkeys.

• The DESkeyschB(Bl) command acts similarly as the previous one, but it converts a list Bl of 8 non-negative numbers  from the set {0,1, ..., 255}  into a set of sixteen 48-bit subkeys.

• The DESksnbr(K) command returns the number of different 48-bit subkeys contained in the list K.

• The DES768bkey(kb) command  together with the  next four commands, concern  DES-768 encryption. This command forms from the list kb of the 768-bit secret key for secure DES encryption the list of sixteen 48-bit subkeys for each iteration and returns it.

• The DES768Skey(ks) command acts similarly as the previous one, but in this case creates  sixteen 48-bit subkeys using the string of 96 characters.

• The DES768Bkey(kn) command accepts the list of 96 nonnegint numbers forming a list of sixteen 48-bit subkeys needed for secure encrypting or decrypting, and returns this list.

• The EPIP() command returns the list E containing the E bit selection table (see Fig. 9)  together with the permutations P, IP, IPI (inverse of IP) for the standard DES. All the returned variables are global.

• The EPIP(sec, sp, sip)  command returns the same variables as the previous one, but generated at random for secure DES encryption. The parameters sec, sp, sip of type nonnegint allow to control the returned values. The only 16 elements of the E bit selection table with indices 1, 6, 7, 12, 13, 18, 19, 24, 25, 30, 31, 36, 37, 42, 43, 48  may be random.

• The f(R, K) command calculates the value of the function  f for  R equal to  32-bit list and  K equal to 48-bit list, returning the 32-bit list of the result.

• The DES(mc, ed) command encrypts/decrypts 64 bit list of a plaintext/cryptogram  mc and returns 64-bit list of cryptogram/retrieved plaintext. The choice of the cryptographic operations depends on the formal parameter ed (of type symbol). If the value of ed  equals to e then the command performs encryption, if it is equal to d, the decryption is carrying out.

• The ByteDES(mcl, ed) command encrypts/decrypts 8-byte list of a plaintext/cryptogram  mcl and returns the 8-byte  list of cryptogram/retrieved plaintext. The parameter ed  has the same meaning as in the command  DES(mc, ed).

• The ByteXor(x, y) command performs XOR-ing on bytes x and y, returning the result.

• The ECBDESe(ptf, cfn) command accepts two parameters of type string. It executes the ECB-mode encryption of the plaintext file named  ptf,  creates the cryptogram file having the name  cfn, and returns the variable  lb, determining the length of the last block of the plaintext (in the range 1..8). Before invoking this routine all the global constants, i.e. E, P, IP , IPI, SBox and the key schedule should be calculated.

• The ECBDESd(cfn, rptfn, lb)  command accepts two parameters of type string and third parameter of type posint in the range 1..8. It performs the ECB-mode decryption of the cryptogram file named  cfn,  creates the retrieved plaintext file having the name  rpfn. and uses the parameter  lb, determining the length of the last block of the plaintext, which allow to recover exactly the plaintext from the cryptogram. In order to decipher correctly,  all the global constants, i.e. E, P, IP, IPI, SBox and the key schedule should be calculated before invoking this routine in the same manner as during encryption.

• The CBCDESe(ptfn, cfn, iv) command accepts two parameters of type string and the third parameter, iv,  in  form of the list containing 8  integers in the range 0..255, representing the initial vector. It executes the CBC-mode encryption of the plaintext file named  ptf,  creates the cryptogram file having the name  cfn, and returns the variable  lb, determining the length of the last block of the plaintext (in the range 1..8). Before invoking this routine all the global constants, i.e. E, P, IP , IPI, SBox and the key schedule should be calculated.

• The CBCDESd(cfn, rptfn, iv, lb)  command accepts two parameters of type string, the third parameter iv, in form of the list containing 8  integers in the range 0..255, representing the initial vector, and the fourth parameter lb, returned by the previous procedure. It performs the CBC-mode decryption of the cryptogram file named  cfn,  creates the retrieved plaintext file having the name rpfn, and uses the parameter  lb, determining the length of the last block of the plaintext, which allow to recover exactly the plaintext from the cryptogram. In order to decipher correctly,  all the global constants, i.e. E, P, IP, IPI, SBox and the key schedule should be calculated before invoking this routine in the same manner as during encryption.

• The principal task of the  sbdbarr(ifn) command is to compute the global arrays  sbfa and dbfa for storing the frequency of occurrence of bytes and dibytes in the examined file having the name ifn.

• After calling the routine sbhist (bmn, bmx:, color) a suitably colored histogram  displaying the frequency of occurrence of  bytes in the file having the the same name as the  value of the actual parameter corresponding to the formal parameter ifn, applied in the invocation statement  of the procedure sbdbarr, will be produced. The histogram shows the frequency of occurrence of bytes in the examined file versus the value of occurring byte in the range bmn..bmx. In other words, the histogram illustrates the contents of the array  sbfa versus the chosen range of its indices. The actual parameter which is substituted for  formal parameter color may have a name: aquamarine, black, blue, navy, coral, cyan, brown, gold, green, gray, grey, khaki, magenta, maroon, orange, pink, plum, red, sienna, tan, turquoise, violet, wheat or yellow.

• The command dbhist(bmn, bmx, crbv, cr, color) acts similarly as the procedure sbhist and the formal parameters  bmn,  bmx, and  color have here the same sense.  The value of actual parameter replacing the formal parameter  cr may be r or c, whereas the value of actual parameter replacing the formal parameter crbv must belong to the set  . Avoiding talkativeness we may say that the execution of the statement

dbhist(10, 100, 13, r, tan);

will produce light brown histogram  showing the frequency of occurrence of such dibits in the examined file,  which  are composed of the first byte of  value 13, while the value of the second byte changes from 10 to 100.  Thus, this histogram shows  the following elements of the array dbfa:  dbfa[13, 10],  dbfa[13, 11], ..., dbfa[13, 100], namely, a portion of 13th row of the array dbfa, representing 91 consecutive elements of this array. Similarly,  the statement

dbhist(0, 255, 135, c, khaki);

will create  yellowish brown histogram, exemplifying the whole 135th column of the array dbfa, that is the elements dbfa[0, 135],  dbfa[1, 135] , ...,  dbfa[255, 135]. The details concerning the applications of the above three commands can be found in [4] and [5].

Examples

 > restart: #archive_path is a full path of the GenDES.mla file archive_path := "f:/GenDES/wrk/GenDES.mla": march('open', archive_path); with(GenDES):

 > randomize(13): bl := [seq(rand(2)(), i = 1 .. 64)]; bl2hex(bl); s := "01206c7b881e9bf4": lb := hexstr2bl(s);

01206C7B881E9BF4

Creating S-boxes for DES and verifying  the primitive function S8

 > sboxcr(): SBox[8];

Creating random S-boxes for strong DES implementations and verifying the primitive function S8

 > rndsboxcr([1, 2, 4, 8, 16, 32, 64, 128]): SBox[8];

Displaying truth tables of S-boxes for the DES

 > sbtruthtbls();

Standard DES S boxes

Truth table for S1
-----------------------------------
input             output
-----------------------------------
r1 c3 c2 c1 c0 r0    s3 s2 s1 s0
===================================
0  0  0  0  0  0     1  1  1  0
0  0  0  0  0  1     0  0  0  0
0  0  0  0  1  0     0  1  0  0
0  0  0  0  1  1     1  1  1  1
0  0  0  1  0  0     1  1  0  1
0  0  0  1  0  1     0  1  1  1
0  0  0  1  1  0     0  0  0  1
0  0  0  1  1  1     0  1  0  0
0  0  1  0  0  0     0  0  1  0
0  0  1  0  0  1     1  1  1  0
0  0  1  0  1  0     1  1  1  1
0  0  1  0  1  1     0  0  1  0
0  0  1  1  0  0     1  0  1  1
0  0  1  1  0  1     1  1  0  1
0  0  1  1  1  0     1  0  0  0
0  0  1  1  1  1     0  0  0  1
0  1  0  0  0  0     0  0  1  1
0  1  0  0  0  1     1  0  1  0
0  1  0  0  1  0     1  0  1  0
0  1  0  0  1  1     0  1  1  0
0  1  0  1  0  0     0  1  1  0
0  1  0  1  0  1     1  1  0  0
0  1  0  1  1  0     1  1  0  0
0  1  0  1  1  1     1  0  1  1
0  1  1  0  0  0     0  1  0  1
0  1  1  0  0  1     1  0  0  1
0  1  1  0  1  0     1  0  0  1
0  1  1  0  1  1     0  1  0  1
0  1  1  1  0  0     0  0  0  0
0  1  1  1  0  1     0  0  1  1
0  1  1  1  1  0     0  1  1  1
0  1  1  1  1  1     1  0  0  0
1  0  0  0  0  0     0  1  0  0
1  0  0  0  0  1     1  1  1  1
1  0  0  0  1  0     0  0  0  1
1  0  0  0  1  1     1  1  0  0
1  0  0  1  0  0     1  1  1  0
1  0  0  1  0  1     1  0  0  0
1  0  0  1  1  0     1  0  0  0
1  0  0  1  1  1     0  0  1  0
1  0  1  0  0  0     1  1  0  1
1  0  1  0  0  1     0  1  0  0
1  0  1  0  1  0     0  1  1  0
1  0  1  0  1  1     1  0  0  1
1  0  1  1  0  0     0  0  1  0
1  0  1  1  0  1     0  0  0  1
1  0  1  1  1  0     1  0  1  1
1  0  1  1  1  1     0  1  1  1
1  1  0  0  0  0     1  1  1  1
1  1  0  0  0  1     0  1  0  1
1  1  0  0  1  0     1  1  0  0
1  1  0  0  1  1     1  0  1  1
1  1  0  1  0  0     1  0  0  1
1  1  0  1  0  1     0  0  1  1
1  1  0  1  1  0     0  1  1  1
1  1  0  1  1  1     1  1  1  0
1  1  1  0  0  0     0  0  1  1
1  1  1  0  0  1     1  0  1  0
1  1  1  0  1  0     1  0  1  0
1  1  1  0  1  1     0  0  0  0
1  1  1  1  0  0     0  1  0  1
1  1  1  1  0  1     0  1  1  0
1  1  1  1  1  0     0  0  0  0
1  1  1  1  1  1     1  1  0  1

Truth table for S2
-----------------------------------
input             output
-----------------------------------
r1 c3 c2 c1 c0 r0    s3 s2 s1 s0
===================================
0  0  0  0  0  0     1  1  1  1
0  0  0  0  0  1     0  0  1  1
0  0  0  0  1  0     0  0  0  1
0  0  0  0  1  1     1  1  0  1
0  0  0  1  0  0     1  0  0  0
0  0  0  1  0  1     0  1  0  0
0  0  0  1  1  0     1  1  1  0
0  0  0  1  1  1     0  1  1  1
0  0  1  0  0  0     0  1  1  0
0  0  1  0  0  1     1  1  1  1
0  0  1  0  1  0     1  0  1  1
0  0  1  0  1  1     0  0  1  0
0  0  1  1  0  0     0  0  1  1
0  0  1  1  0  1     1  0  0  0
0  0  1  1  1  0     0  1  0  0
0  0  1  1  1  1     1  1  1  0
0  1  0  0  0  0     1  0  0  1
0  1  0  0  0  1     1  1  0  0
0  1  0  0  1  0     0  1  1  1
0  1  0  0  1  1     0  0  0  0
0  1  0  1  0  0     0  0  1  0
0  1  0  1  0  1     0  0  0  1
0  1  0  1  1  0     1  1  0  1
0  1  0  1  1  1     1  0  1  0
0  1  1  0  0  0     1  1  0  0
0  1  1  0  0  1     0  1  1  0
0  1  1  0  1  0     0  0  0  0
0  1  1  0  1  1     1  0  0  1
0  1  1  1  0  0     0  1  0  1
0  1  1  1  0  1     1  0  1  1
0  1  1  1  1  0     1  0  1  0
0  1  1  1  1  1     0  1  0  1
1  0  0  0  0  0     0  0  0  0
1  0  0  0  0  1     1  1  0  1
1  0  0  0  1  0     1  1  1  0
1  0  0  0  1  1     1  0  0  0
1  0  0  1  0  0     0  1  1  1
1  0  0  1  0  1     1  0  1  0
1  0  0  1  1  0     1  0  1  1
1  0  0  1  1  1     0  0  0  1
1  0  1  0  0  0     1  0  1  0
1  0  1  0  0  1     0  0  1  1
1  0  1  0  1  0     0  1  0  0
1  0  1  0  1  1     1  1  1  1
1  0  1  1  0  0     1  1  0  1
1  0  1  1  0  1     0  1  0  0
1  0  1  1  1  0     0  0  0  1
1  0  1  1  1  1     0  0  1  0
1  1  0  0  0  0     0  1  0  1
1  1  0  0  0  1     1  0  1  1
1  1  0  0  1  0     1  0  0  0
1  1  0  0  1  1     0  1  1  0
1  1  0  1  0  0     1  1  0  0
1  1  0  1  0  1     0  1  1  1
1  1  0  1  1  0     0  1  1  0
1  1  0  1  1  1     1  1  0  0
1  1  1  0  0  0     1  0  0  1
1  1  1  0  0  1     0  0  0  0
1  1  1  0  1  0     0  0  1  1
1  1  1  0  1  1     0  1  0  1
1  1  1  1  0  0     0  0  1  0
1  1  1  1  0  1     1  1  1  0
1  1  1  1  1  0     1  1  1  1
1  1  1  1  1  1     1  0  0  1

Truth table for S3
-----------------------------------
input             output
-----------------------------------
r1 c3 c2 c1 c0 r0    s3 s2 s1 s0
===================================
0  0  0  0  0  0     1  0  1  0
0  0  0  0  0  1     1  1  0  1
0  0  0  0  1  0     0  0  0  0
0  0  0  0  1  1     0  1  1  1
0  0  0  1  0  0     1  0  0  1
0  0  0  1  0  1     0  0  0  0
0  0  0  1  1  0     1  1  1  0
0  0  0  1  1  1     1  0  0  1
0  0  1  0  0  0     0  1  1  0
0  0  1  0  0  1     0  0  1  1
0  0  1  0  1  0     0  0  1  1
0  0  1  0  1  1     0  1  0  0
0  0  1  1  0  0     1  1  1  1
0  0  1  1  0  1     0  1  1  0
0  0  1  1  1  0     0  1  0  1
0  0  1  1  1  1     1  0  1  0
0  1  0  0  0  0     0  0  0  1
0  1  0  0  0  1     0  0  1  0
0  1  0  0  1  0     1  1  0  1
0  1  0  0  1  1     1  0  0  0
0  1  0  1  0  0     1  1  0  0
0  1  0  1  0  1     0  1  0  1
0  1  0  1  1  0     0  1  1  1
0  1  0  1  1  1     1  1  1  0
0  1  1  0  0  0     1  0  1  1
0  1  1  0  0  1     1  1  0  0
0  1  1  0  1  0     0  1  0  0
0  1  1  0  1  1     1  0  1  1
0  1  1  1  0  0     0  0  1  0
0  1  1  1  0  1     1  1  1  1
0  1  1  1  1  0     1  0  0  0
0  1  1  1  1  1     0  0  0  1
1  0  0  0  0  0     1  1  0  1
1  0  0  0  0  1     0  0  0  1
1  0  0  0  1  0     0  1  1  0
1  0  0  0  1  1     1  0  1  0
1  0  0  1  0  0     0  1  0  0
1  0  0  1  0  1     1  1  0  1
1  0  0  1  1  0     1  0  0  1
1  0  0  1  1  1     0  0  0  0
1  0  1  0  0  0     1  0  0  0
1  0  1  0  0  1     0  1  1  0
1  0  1  0  1  0     1  1  1  1
1  0  1  0  1  1     1  0  0  1
1  0  1  1  0  0     0  0  1  1
1  0  1  1  0  1     1  0  0  0
1  0  1  1  1  0     0  0  0  0
1  0  1  1  1  1     0  1  1  1
1  1  0  0  0  0     1  0  1  1
1  1  0  0  0  1     0  1  0  0
1  1  0  0  1  0     0  0  0  1
1  1  0  0  1  1     1  1  1  1
1  1  0  1  0  0     0  0  1  0
1  1  0  1  0  1     1  1  1  0
1  1  0  1  1  0     1  1  0  0
1  1  0  1  1  1     0  0  1  1
1  1  1  0  0  0     0  1  0  1
1  1  1  0  0  1     1  0  1  1
1  1  1  0  1  0     1  0  1  0
1  1  1  0  1  1     0  1  0  1
1  1  1  1  0  0     1  1  1  0
1  1  1  1  0  1     0  0  1  0
1  1  1  1  1  0     0  1  1  1
1  1  1  1  1  1     1  1  0  0

Truth table for S4
-----------------------------------
input             output
-----------------------------------
r1 c3 c2 c1 c0 r0    s3 s2 s1 s0
===================================
0  0  0  0  0  0     0  1  1  1
0  0  0  0  0  1     1  1  0  1
0  0  0  0  1  0     1  1  0  1
0  0  0  0  1  1     1  0  0  0
0  0  0  1  0  0     1  1  1  0
0  0  0  1  0  1     1  0  1  1
0  0  0  1  1  0     0  0  1  1
0  0  0  1  1  1     0  1  0  1
0  0  1  0  0  0     0  0  0  0
0  0  1  0  0  1     0  1  1  0
0  0  1  0  1  0     0  1  1  0
0  0  1  0  1  1     1  1  1  1
0  0  1  1  0  0     1  0  0  1
0  0  1  1  0  1     0  0  0  0
0  0  1  1  1  0     1  0  1  0
0  0  1  1  1  1     0  0  1  1
0  1  0  0  0  0     0  0  0  1
0  1  0  0  0  1     0  1  0  0
0  1  0  0  1  0     0  0  1  0
0  1  0  0  1  1     0  1  1  1
0  1  0  1  0  0     1  0  0  0
0  1  0  1  0  1     0  0  1  0
0  1  0  1  1  0     0  1  0  1
0  1  0  1  1  1     1  1  0  0
0  1  1  0  0  0     1  0  1  1
0  1  1  0  0  1     0  0  0  1
0  1  1  0  1  0     1  1  0  0
0  1  1  0  1  1     1  0  1  0
0  1  1  1  0  0     0  1  0  0
0  1  1  1  0  1     1  1  1  0
0  1  1  1  1  0     1  1  1  1
0  1  1  1  1  1     1  0  0  1
1  0  0  0  0  0     1  0  1  0
1  0  0  0  0  1     0  0  1  1
1  0  0  0  1  0     0  1  1  0
1  0  0  0  1  1     1  1  1  1
1  0  0  1  0  0     1  0  0  1
1  0  0  1  0  1     0  0  0  0
1  0  0  1  1  0     0  0  0  0
1  0  0  1  1  1     0  1  1  0
1  0  1  0  0  0     1  1  0  0
1  0  1  0  0  1     1  0  1  0
1  0  1  0  1  0     1  0  1  1
1  0  1  0  1  1     0  0  0  1
1  0  1  1  0  0     0  1  1  1
1  0  1  1  0  1     1  1  0  1
1  0  1  1  1  0     1  1  0  1
1  0  1  1  1  1     1  0  0  0
1  1  0  0  0  0     1  1  1  1
1  1  0  0  0  1     1  0  0  1
1  1  0  0  1  0     0  0  0  1
1  1  0  0  1  1     0  1  0  0
1  1  0  1  0  0     0  0  1  1
1  1  0  1  0  1     0  1  0  1
1  1  0  1  1  0     1  1  1  0
1  1  0  1  1  1     1  0  1  1
1  1  1  0  0  0     0  1  0  1
1  1  1  0  0  1     1  1  0  0
1  1  1  0  1  0     0  0  1  0
1  1  1  0  1  1     0  1  1  1
1  1  1  1  0  0     1  0  0  0
1  1  1  1  0  1     0  0  1  0
1  1  1  1  1  0     0  1  0  0
1  1  1  1  1  1     1  1  1  0

Truth table for S5
-----------------------------------
input             output
-----------------------------------
r1 c3 c2 c1 c0 r0    s3 s2 s1 s0
===================================
0  0  0  0  0  0     0  0  1  0
0  0  0  0  0  1     1  1  1  0
0  0  0  0  1  0     1  1  0  0
0  0  0  0  1  1     1  0  1  1
0  0  0  1  0  0     0  1  0  0
0  0  0  1  0  1     0  0  1  0
0  0  0  1  1  0     0  0  0  1
0  0  0  1  1  1     1  1  0  0
0  0  1  0  0  0     0  1  1  1
0  0  1  0  0  1     0  1  0  0
0  0  1  0  1  0     1  0  1  0
0  0  1  0  1  1     0  1  1  1
0  0  1  1  0  0     1  0  1  1
0  0  1  1  0  1     1  1  0  1
0  0  1  1  1  0     0  1  1  0
0  0  1  1  1  1     0  0  0  1
0  1  0  0  0  0     1  0  0  0
0  1  0  0  0  1     0  1  0  1
0  1  0  0  1  0     0  1  0  1
0  1  0  0  1  1     0  0  0  0
0  1  0  1  0  0     0  0  1  1
0  1  0  1  0  1     1  1  1  1
0  1  0  1  1  0     1  1  1  1
0  1  0  1  1  1     1  0  1  0
0  1  1  0  0  0     1  1  0  1
0  1  1  0  0  1     0  0  1  1
0  1  1  0  1  0     0  0  0  0
0  1  1  0  1  1     1  0  0  1
0  1  1  1  0  0     1  1  1  0
0  1  1  1  0  1     1  0  0  0
0  1  1  1  1  0     1  0  0  1
0  1  1  1  1  1     0  1  1  0
1  0  0  0  0  0     0  1  0  0
1  0  0  0  0  1     1  0  1  1
1  0  0  0  1  0     0  0  1  0
1  0  0  0  1  1     1  0  0  0
1  0  0  1  0  0     0  0  0  1
1  0  0  1  0  1     1  1  0  0
1  0  0  1  1  0     1  0  1  1
1  0  0  1  1  1     0  1  1  1
1  0  1  0  0  0     1  0  1  0
1  0  1  0  0  1     0  0  0  1
1  0  1  0  1  0     1  1  0  1
1  0  1  0  1  1     1  1  1  0
1  0  1  1  0  0     0  1  1  1
1  0  1  1  0  1     0  0  1  0
1  0  1  1  1  0     1  0  0  0
1  0  1  1  1  1     1  1  0  1
1  1  0  0  0  0     1  1  1  1
1  1  0  0  0  1     0  1  1  0
1  1  0  0  1  0     1  0  0  1
1  1  0  0  1  1     1  1  1  1
1  1  0  1  0  0     1  1  0  0
1  1  0  1  0  1     0  0  0  0
1  1  0  1  1  0     0  1  0  1
1  1  0  1  1  1     1  0  0  1
1  1  1  0  0  0     0  1  1  0
1  1  1  0  0  1     1  0  1  0
1  1  1  0  1  0     0  0  1  1
1  1  1  0  1  1     0  1  0  0
1  1  1  1  0  0     0  0  0  0
1  1  1  1  0  1     0  1  0  1
1  1  1  1  1  0     1  1  1  0
1  1  1  1  1  1     0  0  1  1

Truth table for S6
-----------------------------------
input             output
-----------------------------------
r1 c3 c2 c1 c0 r0    s3 s2 s1 s0
===================================
0  0  0  0  0  0     1  1  0  0
0  0  0  0  0  1     1  0  1  0
0  0  0  0  1  0     0  0  0  1
0  0  0  0  1  1     1  1  1  1
0  0  0  1  0  0     1  0  1  0
0  0  0  1  0  1     0  1  0  0
0  0  0  1  1  0     1  1  1  1
0  0  0  1  1  1     0  0  1  0
0  0  1  0  0  0     1  0  0  1
0  0  1  0  0  1     0  1  1  1
0  0  1  0  1  0     0  0  1  0
0  0  1  0  1  1     1  1  0  0
0  0  1  1  0  0     0  1  1  0
0  0  1  1  0  1     1  0  0  1
0  0  1  1  1  0     1  0  0  0
0  0  1  1  1  1     0  1  0  1
0  1  0  0  0  0     0  0  0  0
0  1  0  0  0  1     0  1  1  0
0  1  0  0  1  0     1  1  0  1
0  1  0  0  1  1     0  0  0  1
0  1  0  1  0  0     0  0  1  1
0  1  0  1  0  1     1  1  0  1
0  1  0  1  1  0     0  1  0  0
0  1  0  1  1  1     1  1  1  0
0  1  1  0  0  0     1  1  1  0
0  1  1  0  0  1     0  0  0  0
0  1  1  0  1  0     0  1  1  1
0  1  1  0  1  1     1  0  1  1
0  1  1  1  0  0     0  1  0  1
0  1  1  1  0  1     0  0  1  1
0  1  1  1  1  0     1  0  1  1
0  1  1  1  1  1     1  0  0  0
1  0  0  0  0  0     1  0  0  1
1  0  0  0  0  1     0  1  0  0
1  0  0  0  1  0     1  1  1  0
1  0  0  0  1  1     0  0  1  1
1  0  0  1  0  0     1  1  1  1
1  0  0  1  0  1     0  0  1  0
1  0  0  1  1  0     0  1  0  1
1  0  0  1  1  1     1  1  0  0
1  0  1  0  0  0     0  0  1  0
1  0  1  0  0  1     1  0  0  1
1  0  1  0  1  0     1  0  0  0
1  0  1  0  1  1     0  1  0  1
1  0  1  1  0  0     1  1  0  0
1  0  1  1  0  1     1  1  1  1
1  0  1  1  1  0     0  0  1  1
1  0  1  1  1  1     1  0  1  0
1  1  0  0  0  0     0  1  1  1
1  1  0  0  0  1     1  0  1  1
1  1  0  0  1  0     0  0  0  0
1  1  0  0  1  1     1  1  1  0
1  1  0  1  0  0     0  1  0  0
1  1  0  1  0  1     0  0  0  1
1  1  0  1  1  0     1  0  1  0
1  1  0  1  1  1     0  1  1  1
1  1  1  0  0  0     0  0  0  1
1  1  1  0  0  1     0  1  1  0
1  1  1  0  1  0     1  1  0  1
1  1  1  0  1  1     0  0  0  0
1  1  1  1  0  0     1  0  1  1
1  1  1  1  0  1     1  0  0  0
1  1  1  1  1  0     0  1  1  0
1  1  1  1  1  1     1  1  0  1

Truth table for S7
-----------------------------------
input             output
-----------------------------------
r1 c3 c2 c1 c0 r0    s3 s2 s1 s0
===================================
0  0  0  0  0  0     0  1  0  0
0  0  0  0  0  1     1  1  0  1
0  0  0  0  1  0     1  0  1  1
0  0  0  0  1  1     0  0  0  0
0  0  0  1  0  0     0  0  1  0
0  0  0  1  0  1     1  0  1  1
0  0  0  1  1  0     1  1  1  0
0  0  0  1  1  1     0  1  1  1
0  0  1  0  0  0     1  1  1  1
0  0  1  0  0  1     0  1  0  0
0  0  1  0  1  0     0  0  0  0
0  0  1  0  1  1     1  0  0  1
0  0  1  1  0  0     1  0  0  0
0  0  1  1  0  1     0  0  0  1
0  0  1  1  1  0     1  1  0  1
0  0  1  1  1  1     1  0  1  0
0  1  0  0  0  0     0  0  1  1
0  1  0  0  0  1     1  1  1  0
0  1  0  0  1  0     1  1  0  0
0  1  0  0  1  1     0  0  1  1
0  1  0  1  0  0     1  0  0  1
0  1  0  1  0  1     0  1  0  1
0  1  0  1  1  0     0  1  1  1
0  1  0  1  1  1     1  1  0  0
0  1  1  0  0  0     0  1  0  1
0  1  1  0  0  1     0  0  1  0
0  1  1  0  1  0     1  0  1  0
0  1  1  0  1  1     1  1  1  1
0  1  1  1  0  0     0  1  1  0
0  1  1  1  0  1     1  0  0  0
0  1  1  1  1  0     0  0  0  1
0  1  1  1  1  1     0  1  1  0
1  0  0  0  0  0     0  0  0  1
1  0  0  0  0  1     0  1  1  0
1  0  0  0  1  0     0  1  0  0
1  0  0  0  1  1     1  0  1  1
1  0  0  1  0  0     1  0  1  1
1  0  0  1  0  1     1  1  0  1
1  0  0  1  1  0     1  1  0  1
1  0  0  1  1  1     1  0  0  0
1  0  1  0  0  0     1  1  0  0
1  0  1  0  0  1     0  0  0  1
1  0  1  0  1  0     0  0  1  1
1  0  1  0  1  1     0  1  0  0
1  0  1  1  0  0     0  1  1  1
1  0  1  1  0  1     1  0  1  0
1  0  1  1  1  0     1  1  1  0
1  0  1  1  1  1     0  1  1  1
1  1  0  0  0  0     1  0  1  0
1  1  0  0  0  1     1  0  0  1
1  1  0  0  1  0     1  1  1  1
1  1  0  0  1  1     0  1  0  1
1  1  0  1  0  0     0  1  1  0
1  1  0  1  0  1     0  0  0  0
1  1  0  1  1  0     1  0  0  0
1  1  0  1  1  1     1  1  1  1
1  1  1  0  0  0     0  0  0  0
1  1  1  0  0  1     1  1  1  0
1  1  1  0  1  0     0  1  0  1
1  1  1  0  1  1     0  0  1  0
1  1  1  1  0  0     1  0  0  1
1  1  1  1  0  1     0  0  1  1
1  1  1  1  1  0     0  0  1  0
1  1  1  1  1  1     1  1  0  0

Truth table for S8
-----------------------------------
input             output
-----------------------------------
r1 c3 c2 c1 c0 r0    s3 s2 s1 s0
===================================
0  0  0  0  0  0     1  1  0  1
0  0  0  0  0  1     0  0  0  1
0  0  0  0  1  0     0  0  1  0
0  0  0  0  1  1     1  1  1  1
0  0  0  1  0  0     1  0  0  0
0  0  0  1  0  1     1  1  0  1
0  0  0  1  1  0     0  1  0  0
0  0  0  1  1  1     1  0  0  0
0  0  1  0  0  0     0  1  1  0
0  0  1  0  0  1     1  0  1  0
0  0  1  0  1  0     1  1  1  1
0  0  1  0  1  1     0  0  1  1
0  0  1  1  0  0     1  0  1  1
0  0  1  1  0  1     0  1  1  1
0  0  1  1  1  0     0  0  0  1
0  0  1  1  1  1     0  1  0  0
0  1  0  0  0  0     1  0  1  0
0  1  0  0  0  1     1  1  0  0
0  1  0  0  1  0     1  0  0  1
0  1  0  0  1  1     0  1  0  1
0  1  0  1  0  0     0  0  1  1
0  1  0  1  0  1     0  1  1  0
0  1  0  1  1  0     1  1  1  0
0  1  0  1  1  1     1  0  1  1
0  1  1  0  0  0     0  1  0  1
0  1  1  0  0  1     0  0  0  0
0  1  1  0  1  0     0  0  0  0
0  1  1  0  1  1     1  1  1  0
0  1  1  1  0  0     1  1  0  0
0  1  1  1  0  1     1  0  0  1
0  1  1  1  1  0     0  1  1  1
0  1  1  1  1  1     0  0  1  0
1  0  0  0  0  0     0  1  1  1
1  0  0  0  0  1     0  0  1  0
1  0  0  0  1  0     1  0  1  1
1  0  0  0  1  1     0  0  0  1
1  0  0  1  0  0     0  1  0  0
1  0  0  1  0  1     1  1  1  0
1  0  0  1  1  0     0  0  0  1
1  0  0  1  1  1     0  1  1  1
1  0  1  0  0  0     1  0  0  1
1  0  1  0  0  1     0  1  0  0
1  0  1  0  1  0     1  1  0  0
1  0  1  0  1  1     1  0  1  0
1  0  1  1  0  0     1  1  1  0
1  0  1  1  0  1     1  0  0  0
1  0  1  1  1  0     0  0  1  0
1  0  1  1  1  1     1  1  0  1
1  1  0  0  0  0     0  0  0  0
1  1  0  0  0  1     1  1  1  1
1  1  0  0  1  0     0  1  1  0
1  1  0  0  1  1     1  1  0  0
1  1  0  1  0  0     1  0  1  0
1  1  0  1  0  1     1  0  0  1
1  1  0  1  1  0     1  1  0  1
1  1  0  1  1  1     0  0  0  0
1  1  1  0  0  0     1  1  1  1
1  1  1  0  0  1     0  0  1  1
1  1  1  0  1  0     0  0  1  1
1  1  1  0  1  1     0  1  0  1
1  1  1  1  0  0     0  1  0  1
1  1  1  1  0  1     0  1  1  0
1  1  1  1  1  0     1  0  0  0
1  1  1  1  1  1     1  0  1  1

Displaying truth tables of random S-boxes for strong DES encryption

 > sbtruthtbls([1, 2, 4, 8, 16, 32, 64, 128]);

DES Random S boxes

Truth table for S1
-----------------------------------
input             output
-----------------------------------
r1 c3 c2 c1 c0 r0    s3 s2 s1 s0
===================================
0  0  0  0  0  0     1  0  1  1
0  0  0  0  0  1     1  1  0  1
0  0  0  0  1  0     1  1  1  0
0  0  0  0  1  1     0  0  1  0
0  0  0  1  0  0     0  1  1  1
0  0  0  1  0  1     1  0  0  0
0  0  0  1  1  0     1  0  0  0
0  0  0  1  1  1     1  1  1  0
0  0  1  0  0  0     1  1  0  1
0  0  1  0  0  1     1  1  0  0
0  0  1  0  1  0     1  1  0  0
0  0  1  0  1  1     0  0  0  1
0  0  1  1  0  0     0  0  0  0
0  0  1  1  0  1     1  0  1  0
0  0  1  1  1  0     1  1  1  1
0  0  1  1  1  1     0  1  0  1
0  1  0  0  0  0     0  1  0  1
0  1  0  0  0  1     1  1  1  1
0  1  0  0  1  0     1  0  1  0
0  1  0  0  1  1     0  1  0  0
0  1  0  1  0  0     0  0  1  1
0  1  0  1  0  1     0  1  1  1
0  1  0  1  1  0     1  0  0  1
0  1  0  1  1  1     0  1  1  0
0  1  1  0  0  0     0  0  1  0
0  1  1  0  0  1     1  0  0  1
0  1  1  0  1  0     0  1  1  0
0  1  1  0  1  1     0  0  0  0
0  1  1  1  0  0     0  1  0  0
0  1  1  1  0  1     0  0  1  1
0  1  1  1  1  0     0  0  0  1
0  1  1  1  1  1     1  0  1  1
1  0  0  0  0  0     0  0  1  0
1  0  0  0  0  1     0  1  1  1
1  0  0  0  1  0     1  1  0  1
1  0  0  0  1  1     1  0  1  0
1  0  0  1  0  0     0  0  1  1
1  0  0  1  0  1     0  0  0  1
1  0  0  1  1  0     1  1  1  1
1  0  0  1  1  1     1  1  0  0
1  0  1  0  0  0     0  1  1  1
1  0  1  0  0  1     1  0  0  1
1  0  1  0  1  0     1  1  0  0
1  0  1  0  1  1     0  0  1  1
1  0  1  1  0  0     1  0  0  0
1  0  1  1  0  1     1  0  0  0
1  0  1  1  1  0     0  0  0  1
1  0  1  1  1  1     0  0  0  0
1  1  0  0  0  0     1  1  1  0
1  1  0  0  0  1     1  1  0  1
1  1  0  0  1  0     0  1  0  0
1  1  0  0  1  1     0  0  1  0
1  1  0  1  0  0     0  0  0  0
1  1  0  1  0  1     1  0  1  1
1  1  0  1  1  0     0  1  1  0
1  1  0  1  1  1     1  1  1  0
1  1  1  0  0  0     1  0  1  1
1  1  1  0  0  1     0  1  1  0
1  1  1  0  1  0     0  1  0  1
1  1  1  0  1  1     0  1  0  0
1  1  1  1  0  0     1  0  0  1
1  1  1  1  0  1     1  1  1  1
1  1  1  1  1  0     1  0  1  0
1  1  1  1  1  1     0  1  0  1

Truth table for S2
-----------------------------------
input             output
-----------------------------------
r1 c3 c2 c1 c0 r0    s3 s2 s1 s0
===================================
0  0  0  0  0  0     1  1  1  1
0  0  0  0  0  1     1  0  0  0
0  0  0  0  1  0     0  0  1  0
0  0  0  0  1  1     1  0  0  1
0  0  0  1  0  0     0  1  1  1
0  0  0  1  0  1     1  0  1  1
0  0  0  1  1  0     1  1  1  0
0  0  0  1  1  1     0  0  1  1
0  0  1  0  0  0     0  1  0  1
0  0  1  0  0  1     1  0  1  0
0  0  1  0  1  0     1  0  1  0
0  0  1  0  1  1     0  1  1  1
0  0  1  1  0  0     0  0  0  1
0  0  1  1  0  1     1  1  1  0
0  0  1  1  1  0     1  0  0  1
0  0  1  1  1  1     0  1  1  0
0  1  0  0  0  0     1  1  0  0
0  1  0  0  0  1     0  0  0  1
0  1  0  0  1  0     0  0  0  0
0  1  0  0  1  1     0  0  0  0
0  1  0  1  0  0     1  1  0  1
0  1  0  1  0  1     0  1  0  0
0  1  0  1  1  0     1  0  1  1
0  1  0  1  1  1     1  1  0  1
0  1  1  0  0  0     0  0  1  1
0  1  1  0  0  1     1  1  1  1
0  1  1  0  1  0     0  1  0  0
0  1  1  0  1  1     1  1  0  0
0  1  1  1  0  0     1  0  0  0
0  1  1  1  0  1     0  0  1  0
0  1  1  1  1  0     0  1  1  0
0  1  1  1  1  1     0  1  0  1
1  0  0  0  0  0     1  1  0  0
1  0  0  0  0  1     0  1  1  1
1  0  0  0  1  0     0  1  0  0
1  0  0  0  1  1     1  0  0  1
1  0  0  1  0  0     0  0  0  0
1  0  0  1  0  1     1  0  1  1
1  0  0  1  1  0     1  1  1  0
1  0  0  1  1  1     0  0  1  1
1  0  1  0  0  0     0  0  1  1
1  0  1  0  0  1     1  1  1  1
1  0  1  0  1  0     1  1  1  1
1  0  1  0  1  1     1  0  1  0
1  0  1  1  0  0     1  0  0  0
1  0  1  1  0  1     1  1  0  1
1  0  1  1  1  0     0  1  1  0
1  0  1  1  1  1     1  1  0  0
1  1  0  0  0  0     0  0  0  1
1  1  0  0  0  1     0  0  1  0
1  1  0  0  1  0     1  0  0  1
1  1  0  0  1  1     0  0  0  0
1  1  0  1  0  0     0  1  1  1
1  1  0  1  0  1     1  1  1  0
1  1  0  1  1  0     1  0  1  1
1  1  0  1  1  1     0  1  0  0
1  1  1  0  0  0     1  1  0  1
1  1  1  0  0  1     0  1  1  0
1  1  1  0  1  0     1  0  1  0
1  1  1  0  1  1     0  0  0  1
1  1  1  1  0  0     0  1  0  1
1  1  1  1  0  1     0  1  0  1
1  1  1  1  1  0     0  0  1  0
1  1  1  1  1  1     1  0  0  0

Truth table for S3
-----------------------------------
input             output
-----------------------------------
r1 c3 c2 c1 c0 r0    s3 s2 s1 s0
===================================
0  0  0  0  0  0     1  1  1  0
0  0  0  0  0  1     1  0  0  0
0  0  0  0  1  0     1  1  0  0
0  0  0  0  1  1     0  1  1  1
0  0  0  1  0  0     0  0  0  0
0  0  0  1  0  1     1  1  1  0
0  0  0  1  1  0     1  1  1  1
0  0  0  1  1  1     0  1  0  0
0  0  1  0  0  0     1  0  0  1
0  0  1  0  0  1     0  1  1  0
0  0  1  0  1  0     0  0  1  0
0  0  1  0  1  1     1  1  0  1
0  0  1  1  0  0     0  1  1  1
0  0  1  1  0  1     0  1  0  1
0  0  1  1  1  0     0  0  0  1
0  0  1  1  1  1     0  0  1  1
0  1  0  0  0  0     0  1  0  0
0  1  0  0  0  1     0  0  0  0
0  1  0  0  1  0     0  1  1  0
0  1  0  0  1  1     0  0  0  1
0  1  0  1  0  0     1  0  1  0
0  1  0  1  0  1     1  0  1  1
0  1  0  1  1  0     1  1  0  1
0  1  0  1  1  1     1  0  0  1
0  1  1  0  0  0     1  0  0  0
0  1  1  0  0  1     0  0  1  0
0  1  1  0  1  0     0  1  0  1
0  1  1  0  1  1     1  1  1  1
0  1  1  1  0  0     0  0  1  1
0  1  1  1  0  1     1  1  0  0
0  1  1  1  1  0     1  0  1  1
0  1  1  1  1  1     1  0  1  0
1  0  0  0  0  0     1  0  1  1
1  0  0  0  0  1     1  0  0  0
1  0  0  0  1  0     1  1  0  0
1  0  0  0  1  1     1  1  1  0
1  0  0  1  0  0     1  0  1  0
1  0  0  1  0  1     0  1  1  0
1  0  0  1  1  0     1  1  1  0
1  0  0  1  1  1     0  1  0  0
1  0  1  0  0  0     0  1  1  0
1  0  1  0  0  1     0  0  0  0
1  0  1  0  1  0     1  0  0  0
1  0  1  0  1  1     1  0  0  1
1  0  1  1  0  0     0  0  1  0
1  0  1  1  0  1     1  1  0  0
1  0  1  1  1  0     0  1  0  0
1  0  1  1  1  1     0  1  0  1
1  1  0  0  0  0     1  1  0  1
1  1  0  0  0  1     0  0  0  1
1  1  0  0  1  0     0  0  0  1
1  1  0  0  1  1     1  0  1  0
1  1  0  1  0  0     1  1  1  1
1  1  0  1  0  1     0  1  1  1
1  1  0  1  1  0     0  1  0  1
1  1  0  1  1  1     0  0  1  0
1  1  1  0  0  0     1  0  0  1
1  1  1  0  0  1     1  1  1  1
1  1  1  0  1  0     0  0  1  1
1  1  1  0  1  1     1  1  0  1
1  1  1  1  0  0     0  1  1  1
1  1  1  1  0  1     0  0  1  1
1  1  1  1  1  0     0  0  0  0
1  1  1  1  1  1     1  0  1  1

Truth table for S4
-----------------------------------
input             output
-----------------------------------
r1 c3 c2 c1 c0 r0    s3 s2 s1 s0
===================================
0  0  0  0  0  0     0  1  0  0
0  0  0  0  0  1     0  1  0  1
0  0  0  0  1  0     1  1  1  1
0  0  0  0  1  1     0  0  0  1
0  0  0  1  0  0     0  0  0  1
0  0  0  1  0  1     1  0  1  1
0  0  0  1  1  0     0  0  1  1
0  0  0  1  1  1     0  0  1  1
0  0  1  0  0  0     1  0  0  1
0  0  1  0  0  1     1  0  0  1
0  0  1  0  1  0     0  1  1  1
0  0  1  0  1  1     1  1  0  0
0  0  1  1  0  0     0  1  0  1
0  0  1  1  0  1     1  1  1  1
0  0  1  1  1  0     1  1  0  0
0  0  1  1  1  1     1  0  0  0
0  1  0  0  0  0     1  1  0  1
0  1  0  0  0  1     0  1  1  0
0  1  0  0  1  0     1  0  1  0
0  1  0  0  1  1     0  0  0  0
0  1  0  1  0  0     1  0  0  0
0  1  0  1  0  1     0  1  0  0
0  1  0  1  1  0     0  0  0  0
0  1  0  1  1  1     1  1  0  1
0  1  1  0  0  0     1  1  1  0
0  1  1  0  0  1     0  1  1  1
0  1  1  0  1  0     0  0  1  0
0  1  1  0  1  1     0  0  1  0
0  1  1  1  0  0     1  0  1  1
0  1  1  1  0  1     1  0  1  0
0  1  1  1  1  0     0  1  1  0
0  1  1  1  1  1     1  1  1  0
1  0  0  0  0  0     1  1  1  1
1  0  0  0  0  1     1  0  1  1
1  0  0  0  1  0     0  1  0  1
1  0  0  0  1  1     0  0  1  1
1  0  0  1  0  0     0  1  1  1
1  0  0  1  0  1     0  1  0  0
1  0  0  1  1  0     0  1  0  0
1  0  0  1  1  1     1  1  1  0
1  0  1  0  0  0     1  0  0  0
1  0  1  0  0  1     1  1  0  0
1  0  1  0  1  0     0  0  0  0
1  0  1  0  1  1     0  0  0  1
1  0  1  1  0  0     0  0  1  1
1  0  1  1  0  1     0  0  1  0
1  0  1  1  1  0     1  0  1  1
1  0  1  1  1  1     0  1  0  1
1  1  0  0  0  0     0  0  0  1
1  1  0  0  0  1     0  0  0  0
1  1  0  0  1  0     0  0  1  0
1  1  0  0  1  1     0  1  1  0
1  1  0  1  0  0     1  1  1  0
1  1  0  1  0  1     1  0  1  0
1  1  0  1  1  0     1  1  0  1
1  1  0  1  1  1     1  1  1  1
1  1  1  0  0  0     1  0  1  0
1  1  1  0  0  1     0  1  1  1
1  1  1  0  1  0     1  1  0  0
1  1  1  0  1  1     1  0  0  1
1  1  1  1  0  0     1  0  0  1
1  1  1  1  0  1     1  1  0  1
1  1  1  1  1  0     0  1  1  0
1  1  1  1  1  1     1  0  0  0

Truth table for S5
-----------------------------------
input             output
-----------------------------------
r1 c3 c2 c1 c0 r0    s3 s2 s1 s0
===================================
0  0  0  0  0  0     1  1  1  0
0  0  0  0  0  1     0  0  1  0
0  0  0  0  1  0     1  0  1  0
0  0  0  0  1  1     0  1  1  1
0  0  0  1  0  0     1  1  0  1
0  0  0  1  0  1     0  1  0  1
0  0  0  1  1  0     1  0  0  0
0  0  0  1  1  1     0  0  0  0
0  0  1  0  0  0     0  0  1  1
0  0  1  0  0  1     1  0  0  0
0  0  1  0  1  0     1  1  0  0
0  0  1  0  1  1     1  1  1  0
0  0  1  1  0  0     0  0  0  0
0  0  1  1  0  1     0  1  1  0
0  0  1  1  1  0     0  0  1  0
0  0  1  1  1  1     1  0  1  0
0  1  0  0  0  0     0  0  0  1
0  1  0  0  0  1     1  1  0  1
0  1  0  0  1  0     0  1  0  1
0  1  0  0  1  1     0  1  0  0
0  1  0  1  0  0     1  0  1  1
0  1  0  1  0  1     0  0  0  1
0  1  0  1  1  0     1  0  0  1
0  1  0  1  1  1     1  1  1  1
0  1  1  0  0  0     0  1  1  1
0  1  1  0  0  1     1  1  0  0
0  1  1  0  1  0     0  1  1  0
0  1  1  0  1  1     0  0  1  1
0  1  1  1  0  0     0  1  0  0
0  1  1  1  0  1     1  0  1  1
0  1  1  1  1  0     1  1  1  1
0  1  1  1  1  1     1  0  0  1
1  0  0  0  0  0     1  0  0  0
1  0  0  0  0  1     1  1  1  1
1  0  0  0  1  0     1  1  0  1
1  0  0  0  1  1     1  1  0  1
1  0  0  1  0  0     1  0  0  1
1  0  0  1  0  1     0  0  1  0
1  0  0  1  1  0     0  0  1  1
1  0  0  1  1  1     0  1  0  1
1  0  1  0  0  0     0  1  1  0
1  0  1  0  0  1     1  1  0  0
1  0  1  0  1  0     1  1  1  0
1  0  1  0  1  1     0  0  0  0
1  0  1  1  0  0     0  0  1  0
1  0  1  1  0  1     1  1  1  0
1  0  1  1  1  0     0  0  0  1
1  0  1  1  1  1     1  0  0  0
1  1  0  0  0  0     0  1  0  0
1  1  0  0  0  1     0  1  0  0
1  1  0  0  1  0     0  0  0  0
1  1  0  0  1  1     0  0  1  1
1  1  0  1  0  0     1  1  1  1
1  1  0  1  0  1     0  0  0  1
1  1  0  1  1  0     1  1  0  0
1  1  0  1  1  1     1  0  1  0
1  1  1  0  0  0     1  0  1  0
1  1  1  0  0  1     0  1  1  1
1  1  1  0  1  0     0  1  1  1
1  1  1  0  1  1     1  0  1  1
1  1  1  1  0  0     0  1  0  1
1  1  1  1  0  1     1  0  0  1
1  1  1  1  1  0     1  0  1  1
1  1  1  1  1  1     0  1  1  0

Truth table for S6
-----------------------------------
input             output
-----------------------------------
r1 c3 c2 c1 c0 r0    s3 s2 s1 s0
===================================
0  0  0  0  0  0     1  0  1  1
0  0  0  0  0  1     1  0  0  0
0  0  0  0  1  0     1  0  0  0
0  0  0  0  1  1     0  0  1  0
0  0  0  1  0  0     1  1  0  0
0  0  0  1  0  1     0  0  1  1
0  0  0  1  1  0     0  1  1  0
0  0  0  1  1  1     0  1  1  0
0  0  1  0  0  0     0  1  0  1
0  0  1  0  0  1     1  1  1  1
0  0  1  0  1  0     0  0  1  0
0  0  1  0  1  1     0  0  0  0
0  0  1  1  0  0     0  1  1  1
0  0  1  1  0  1     1  1  1  0
0  0  1  1  1  0     1  1  0  1
0  0  1  1  1  1     0  1  0  0
0  1  0  0  0  0     0  0  0  1
0  1  0  0  0  1     0  1  0  1
0  1  0  0  1  0     0  1  0  0
0  1  0  0  1  1     1  0  1  1
0  1  0  1  0  0     1  0  0  1
0  1  0  1  0  1     1  0  1  0
0  1  0  1  1  0     1  0  1  0
0  1  0  1  1  1     0  1  1  1
0  1  1  0  0  0     0  0  1  1
0  1  1  0  0  1     1  1  0  1
0  1  1  0  1  0     1  1  1  1
0  1  1  0  1  1     0  0  0  1
0  1  1  1  0  0     0  0  0  0
0  1  1  1  0  1     1  0  0  1
0  1  1  1  1  0     1  1  1  0
0  1  1  1  1  1     1  1  0  0
1  0  0  0  0  0     1  0  1  1
1  0  0  0  0  1     1  1  0  0
1  0  0  0  1  0     0  0  0  0
1  0  0  0  1  1     0  0  1  0
1  0  0  1  0  0     0  0  0  1
1  0  0  1  0  1     1  0  1  0
1  0  0  1  1  0     1  1  0  1
1  0  0  1  1  1     0  0  0  1
1  0  1  0  0  0     0  1  1  0
1  0  1  0  0  1     0  0  1  1
1  0  1  0  1  0     0  0  1  1
1  0  1  0  1  1     1  0  0  1
1  0  1  1  0  0     1  1  0  0
1  0  1  1  0  1     1  1  1  0
1  0  1  1  1  0     0  0  1  0
1  0  1  1  1  1     0  1  0  1
1  1  0  0  0  0     1  1  1  0
1  1  0  0  0  1     0  1  1  1
1  1  0  0  1  0     1  0  0  0
1  1  0  0  1  1     1  0  1  1
1  1  0  1  0  0     1  0  0  1
1  1  0  1  0  1     0  0  0  0
1  1  0  1  1  0     0  1  1  1
1  1  0  1  1  1     0  1  1  0
1  1  1  0  0  0     0  1  0  1
1  1  1  0  0  1     1  1  1  1
1  1  1  0  1  0     1  0  1  0
1  1  1  0  1  1     1  1  0  1
1  1  1  1  0  0     0  1  0  0
1  1  1  1  0  1     1  0  0  0
1  1  1  1  1  0     1  1  1  1
1  1  1  1  1  1     0  1  0  0

Truth table for S7
-----------------------------------
input             output
-----------------------------------
r1 c3 c2 c1 c0 r0    s3 s2 s1 s0
===================================
0  0  0  0  0  0     0  1  1  0
0  0  0  0  0  1     1  1  0  0
0  0  0  0  1  0     0  1  0  0
0  0  0  0  1  1     0  0  0  0
0  0  0  1  0  0     1  0  0  1
0  0  0  1  0  1     1  0  0  1
0  0  0  1  1  0     0  1  0  1
0  0  0  1  1  1     1  0  1  1
0  0  1  0  0  0     1  0  0  0
0  0  1  0  0  1     0  1  1  0
0  0  1  0  1  0     0  0  0  0
0  0  1  0  1  1     0  0  0  1
0  0  1  1  0  0     0  0  0  1
0  0  1  1  0  1     0  0  1  1
0  0  1  1  1  0     1  1  1  0
0  0  1  1  1  1     0  1  1  1
0  1  0  0  0  0     0  1  1  1
0  1  0  0  0  1     0  1  0  0
0  1  0  0  1  0     1  0  1  1
0  1  0  0  1  1     1  1  1  1
0  1  0  1  0  0     1  1  0  0
0  1  0  1  0  1     0  1  0  1
0  1  0  1  1  0     0  0  1  1
0  1  0  1  1  1     1  0  0  0
0  1  1  0  0  0     0  0  1  0
0  1  1  0  0  1     1  1  0  1
0  1  1  0  1  0     1  0  1  0
0  1  1  0  1  1     0  0  1  0
0  1  1  1  0  0     1  1  1  1
0  1  1  1  0  1     1  0  1  0
0  1  1  1  1  0     1  1  0  1
0  1  1  1  1  1     1  1  1  0
1  0  0  0  0  0     0  1  0  1
1  0  0  0  0  1     1  1  0  1
1  0  0  0  1  0     1  0  1  0
1  0  0  0  1  1     0  1  1  0
1  0  0  1  0  0     1  0  0  1
1  0  0  1  0  1     0  0  0  1
1  0  0  1  1  0     0  0  0  1
1  0  0  1  1  1     1  0  0  1
1  0  1  0  0  0     0  1  1  0
1  0  1  0  0  1     0  1  0  1
1  0  1  0  1  0     1  1  1  0
1  0  1  0  1  1     0  1  1  1
1  0  1  1  0  0     1  1  0  0
1  0  1  1  0  1     1  1  0  0
1  0  1  1  1  0     0  0  1  1
1  0  1  1  1  1     0  1  0  0
1  1  0  0  0  0     1  0  0  0
1  1  0  0  0  1     0  0  0  0
1  1  0  0  1  0     0  0  0  0
1  1  0  0  1  1     1  0  1  1
1  1  0  1  0  0     0  1  1  1
1  1  0  1  0  1     0  0  1  1
1  1  0  1  1  0     1  1  0  1
1  1  0  1  1  1     1  1  1  1
1  1  1  0  0  0     1  1  1  1
1  1  1  0  0  1     0  0  1  0
1  1  1  0  1  0     1  0  1  1
1  1  1  0  1  1     1  1  1  0
1  1  1  1  0  0     0  1  0  0
1  1  1  1  0  1     1  0  0  0
1  1  1  1  1  0     0  0  1  0
1  1  1  1  1  1     1  0  1  0

Truth table for S8
-----------------------------------
input             output
-----------------------------------
r1 c3 c2 c1 c0 r0    s3 s2 s1 s0
===================================
0  0  0  0  0  0     0  0  1  1
0  0  0  0  0  1     1  1  1  1
0  0  0  0  1  0     1  0  0  0
0  0  0  0  1  1     0  0  1  0
0  0  0  1  0  0     0  0  1  0
0  0  0  1  0  1     0  1  1  0
0  0  0  1  1  0     1  1  1  1
0  0  0  1  1  1     1  0  1  1
0  0  1  0  0  0     1  1  0  1
0  0  1  0  0  1     0  0  0  1
0  0  1  0  1  0     1  1  1  0
0  0  1  0  1  1     1  1  1  0
0  0  1  1  0  0     1  1  0  0
0  0  1  1  0  1     0  0  0  0
0  0  1  1  1  0     0  1  1  1
0  0  1  1  1  1     0  1  0  0
0  1  0  0  0  0     1  0  1  0
0  1  0  0  0  1     1  1  0  1
0  1  0  0  1  0     0  1  0  1
0  1  0  0  1  1     0  0  1  1
0  1  0  1  0  0     1  0  1  1
0  1  0  1  0  1     1  0  0  0
0  1  0  1  1  0     0  0  0  0
0  1  0  1  1  1     1  0  0  1
0  1  1  0  0  0     0  1  0  0
0  1  1  0  0  1     0  1  0  1
0  1  1  0  1  0     0  1  1  0
0  1  1  0  1  1     1  0  1  0
0  1  1  1  0  0     1  0  0  1
0  1  1  1  0  1     1  1  0  0
0  1  1  1  1  0     0  0  0  1
0  1  1  1  1  1     0  1  1  1
1  0  0  0  0  0     1  0  0  1
1  0  0  0  0  1     0  1  1  1
1  0  0  0  1  0     0  1  1  1
1  0  0  0  1  1     0  0  0  1
1  0  0  1  0  0     0  0  1  0
1  0  0  1  0  1     0  1  1  0
1  0  0  1  1  0     0  0  1  1
1  0  0  1  1  1     0  1  0  1
1  0  1  0  0  0     0  0  0  1
1  0  1  0  0  1     0  0  0  0
1  0  1  0  1  0     0  1  1  0
1  0  1  0  1  1     1  1  0  0
1  0  1  1  0  0     1  1  0  0
1  0  1  1  0  1     1  1  0  1
1  0  1  1  1  0     1  1  1  0
1  0  1  1  1  1     1  0  1  0
1  1  0  0  0  0     1  0  1  1
1  1  0  0  0  1     1  1  1  1
1  1  0  0  1  0     1  1  1  1
1  1  0  0  1  1     0  0  1  1
1  1  0  1  0  0     0  1  0  0
1  1  0  1  0  1     1  0  0  0
1  1  0  1  1  0     1  0  0  0
1  1  0  1  1  1     1  0  0  1
1  1  1  0  0  0     0  0  0  0
1  1  1  0  0  1     1  0  1  1
1  1  1  0  1  0     1  0  1  0
1  1  1  0  1  1     1  1  1  0
1  1  1  1  0  0     0  1  0  1
1  1  1  1  0  1     0  1  0  0
1  1  1  1  1  0     1  1  0  1
1  1  1  1  1  1     0  0  1  0

Displaying primitive functions   S1 - S8

 > dispsboxes(); dispsboxes([1, 2, 4, 8, 16, 32, 64, 128]);

Computing the 16 subkeys if the secret key Key is given as a list of 64 bits

 > Key := [seq(rand(2)(), i = 1 .. 64)]: ks1 := DESkeysch(Key); printf("The number of different subkeys equals to %d", DESksnbr(ks1));

The number of different subkeys equals to 16

Computing the 16 subkeys if the secret key Key is given as a list of 64 bits using an equivalent command

 > ks2 := DESkeyschv(Key);

Computing the key schedule if the secret key Key is given in the  symbolic form

 > Key := [seq(k[i], i = 1 .. 64)];

 > ksv := DESkeysch(Key); printf("The number of different subkeys equals to %d", DESksnbr(ks1));

The number of different subkeys equals to 16

General form of  subkeys for each iteration

 > for i to 16 do ks[i] := ksv[i] end do;

Computing the subkeys for encryption with the 768-bit secret key given as a list of 768 bits

 > DES768bkey([seq(rand(2)(), i = 1 .. 768)]); printf("The number of different subkeys equals to %d", DESksnbr(ks1));

The number of different subkeys equals to 16

Computing the subkeys for encryption with the 768-bit secret key, which is  given as a list of 96 characters

 > DES768Skey(convert([seq(rand(1..255)(), i = 1 .. 96)], bytes)); printf("The number of different subkeys equals to %d", DESksnbr(ks1));

The number of different subkeys equals to 16

Computing the subkeys for encryption with the 768-bit secret key, which is  given as a list of 96 numbers of type nonnegint

 > DES768Bkey([seq(rand(100 .. 1000)(), i = 1 .. 96)]); printf("The number of different subkeys equals to %d", DESksnbr(ks1));

The number of different subkeys equals to 16

Computing the constants for the DES

 > EPIP();

Computing the constants for strong DES encryption

 > EPIP(123,345,789);

Printing the body of the procedure which implements a command of the package:

 > interface(verboseproc=2): comm_name := DESkeysch: print(comm_name); showstat(comm_name); #alternatively

GenDES:-DESkeysch := proc(Key::list)
local i, k, PC1, PC2, ks, C, D, CD, KPC1, KI;
1   ks := [1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1];
2   PC1 := [57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36, 63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4];
3   PC2 := [14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10, 23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2, 41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48, 44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32];
4   CD := array(1 .. 16);
5   KI := array(1 .. 16);
6   KPC1 := [];
7   for i to 56 do
8     KPC1 := [op(KPC1), Key[PC1[i]]]
end do;
9   C := array(0 .. 16);
10   D := array(0 .. 16);
11   C[0] := [seq(KPC1[i],i = 1 .. 28)];
12   D[0] := [seq(KPC1[i],i = 29 .. 56)];
13   for i to 16 do
14     if ks[i] = 1 then
15       C[i] := [seq(C[i-1][k],k = 2 .. 28), C[i-1][1]];
16       D[i] := [seq(D[i-1][k],k = 2 .. 28), D[i-1][1]]
elif ks[i] = 2 then
17       C[i] := [seq(C[i-1][k],k = 3 .. 28), C[i-1][1], C[i-1][2]];
18       D[i] := [seq(D[i-1][k],k = 3 .. 28), D[i-1][1], D[i-1][2]]
end if;
19     CD[i] := [op(C[i]), op(D[i])];
20     KI[i] := [];
21     for k to 48 do
22       KI[i] := [op(KI[i]), CD[i][PC2[k]]]
end do
end do;
23   convert(KI,list)
end proc

The above procedure, a little intricated, may be simply implemented by means of 16 assignmet statements:

 > showstat(DESkeyschv);

GenDES:-DESkeyschv := proc(k::list)
local KS;
1   KS := [seq([],GenDES:-i = 1 .. 16)];
2   KS[1] := [k[10], k[51], k[34], k[60], k[49], k[17], k[33], k[57], k[2], k[9], k[19], k[42], k[3], k[35], k[26], k[25], k[44], k[58], k[59], k[1], k[36], k[27], k[18], k[41], k[22], k[28], k[39], k[54], k[37], k[4], k[47], k[30], k[5], k[53], k[23], k[29], k[61], k[21], k[38], k[63], k[15], k[20], k[45], k[14], k[13], k[62], k[55], k[31]];
3   KS[2] := [k[2], k[43], k[26], k[52], k[41], k[9], k[25], k[49], k[59], k[1], k[11], k[34], k[60], k[27], k[18], k[17], k[36], k[50], k[51], k[58], k[57], k[19], k[10], k[33], k[14], k[20], k[31], k[46], k[29], k[63], k[39], k[22], k[28], k[45], k[15], k[21], k[53], k[13], k[30], k[55], k[7], k[12], k[37], k[6], k[5], k[54], k[47], k[23]];
4   KS[3] := [k[51], k[27], k[10], k[36], k[25], k[58], k[9], k[33], k[43], k[50], k[60], k[18], k[44], k[11], k[2], k[1], k[49], k[34], k[35], k[42], k[41], k[3], k[59], k[17], k[61], k[4], k[15], k[30], k[13], k[47], k[23], k[6], k[12], k[29], k[62], k[5], k[37], k[28], k[14], k[39], k[54], k[63], k[21], k[53], k[20], k[38], k[31], k[7]];
5   KS[4] := [k[35], k[11], k[59], k[49], k[9], k[42], k[58], k[17], k[27], k[34], k[44], k[2], k[57], k[60], k[51], k[50], k[33], k[18], k[19], k[26], k[25], k[52], k[43], k[1], k[45], k[55], k[62], k[14], k[28], k[31], k[7], k[53], k[63], k[13], k[46], k[20], k[21], k[12], k[61], k[23], k[38], k[47], k[5], k[37], k[4], k[22], k[15], k[54]];
6   KS[5] := [k[19], k[60], k[43], k[33], k[58], k[26], k[42], k[1], k[11], k[18], k[57], k[51], k[41], k[44], k[35], k[34], k[17], k[2], k[3], k[10], k[9], k[36], k[27], k[50], k[29], k[39], k[46], k[61], k[12], k[15], k[54], k[37], k[47], k[28], k[30], k[4], k[5], k[63], k[45], k[7], k[22], k[31], k[20], k[21], k[55], k[6], k[62], k[38]];
7   KS[6] := [k[3], k[44], k[27], k[17], k[42], k[10], k[26], k[50], k[60], k[2], k[41], k[35], k[25], k[57], k[19], k[18], k[1], k[51], k[52], k[59], k[58], k[49], k[11], k[34], k[13], k[23], k[30], k[45], k[63], k[62], k[38], k[21], k[31], k[12], k[14], k[55], k[20], k[47], k[29], k[54], k[6], k[15], k[4], k[5], k[39], k[53], k[46], k[22]];
8   KS[7] := [k[52], k[57], k[11], k[1], k[26], k[59], k[10], k[34], k[44], k[51], k[25], k[19], k[9], k[41], k[3], k[2], k[50], k[35], k[36], k[43], k[42], k[33], k[60], k[18], k[28], k[7], k[14], k[29], k[47], k[46], k[22], k[5], k[15], k[63], k[61], k[39], k[4], k[31], k[13], k[38], k[53], k[62], k[55], k[20], k[23], k[37], k[30], k[6]];
9   KS[8] := [k[36], k[41], k[60], k[50], k[10], k[43], k[59], k[18], k[57], k[35], k[9], k[3], k[58], k[25], k[52], k[51], k[34], k[19], k[49], k[27], k[26], k[17], k[44], k[2], k[12], k[54], k[61], k[13], k[31], k[30], k[6], k[20], k[62], k[47], k[45], k[23], k[55], k[15], k[28], k[22], k[37], k[46], k[39], k[4], k[7], k[21], k[14], k[53]];
10   KS[9] := [k[57], k[33], k[52], k[42], k[2], k[35], k[51], k[10], k[49], k[27], k[1], k[60], k[50], k[17], k[44], k[43], k[26], k[11], k[41], k[19], k[18], k[9], k[36], k[59], k[4], k[46], k[53], k[5], k[23], k[22], k[61], k[12], k[54], k[39], k[37], k[15], k[47], k[7], k[20], k[14], k[29], k[38], k[31], k[63], k[62], k[13], k[6], k[45]];
11   KS[10] := [k[41], k[17], k[36], k[26], k[51], k[19], k[35], k[59], k[33], k[11], k[50], k[44], k[34], k[1], k[57], k[27], k[10], k[60], k[25], k[3], k[2], k[58], k[49], k[43], k[55], k[30], k[37], k[20], k[7], k[6], k[45], k[63], k[38], k[23], k[21], k[62], k[31], k[54], k[4], k[61], k[13], k[22], k[15], k[47], k[46], k[28], k[53], k[29]];
12   KS[11] := [k[25], k[1], k[49], k[10], k[35], k[3], k[19], k[43], k[17], k[60], k[34], k[57], k[18], k[50], k[41], k[11], k[59], k[44], k[9], k[52], k[51], k[42], k[33], k[27], k[39], k[14], k[21], k[4], k[54], k[53], k[29], k[47], k[22], k[7], k[5], k[46], k[15], k[38], k[55], k[45], k[28], k[6], k[62], k[31], k[30], k[12], k[37], k[13]];
13   KS[12] := [k[9], k[50], k[33], k[59], k[19], k[52], k[3], k[27], k[1], k[44], k[18], k[41], k[2], k[34], k[25], k[60], k[43], k[57], k[58], k[36], k[35], k[26], k[17], k[11], k[23], k[61], k[5], k[55], k[38], k[37], k[13], k[31], k[6], k[54], k[20], k[30], k[62], k[22], k[39], k[29], k[12], k[53], k[46], k[15], k[14], k[63], k[21], k[28]];
14   KS[13] := [k[58], k[34], k[17], k[43], k[3], k[36], k[52], k[11], k[50], k[57], k[2], k[25], k[51], k[18], k[9], k[44], k[27], k[41], k[42], k[49], k[19], k[10], k[1], k[60], k[7], k[45], k[20], k[39], k[22], k[21], k[28], k[15], k[53], k[38], k[4], k[14], k[46], k[6], k[23], k[13], k[63], k[37], k[30], k[62], k[61], k[47], k[5], k[12]];
15   KS[14] := [k[42], k[18], k[1], k[27], k[52], k[49], k[36], k[60], k[34], k[41], k[51], k[9], k[35], k[2], k[58], k[57], k[11], k[25], k[26], k[33], k[3], k[59], k[50], k[44], k[54], k[29], k[4], k[23], k[6], k[5], k[12], k[62], k[37], k[22], k[55], k[61], k[30], k[53], k[7], k[28], k[47], k[21], k[14], k[46], k[45], k[31], k[20], k[63]];
16   KS[15] := [k[26], k[2], k[50], k[11], k[36], k[33], k[49], k[44], k[18], k[25], k[35], k[58], k[19], k[51], k[42], k[41], k[60], k[9], k[10], k[17], k[52], k[43], k[34], k[57], k[38], k[13], k[55], k[7], k[53], k[20], k[63], k[46], k[21], k[6], k[39], k[45], k[14], k[37], k[54], k[12], k[31], k[5], k[61], k[30], k[29], k[15], k[4], k[47]];
17   KS[16] := [k[18], k[59], k[42], k[3], k[57], k[25], k[41], k[36], k[10], k[17], k[27], k[50], k[11], k[43], k[34], k[33], k[52], k[1], k[2], k[9], k[44], k[35], k[26], k[49], k[30], k[5], k[47], k[62], k[45], k[12], k[55], k[38], k[13], k[61], k[31], k[37], k[6], k[29], k[46], k[4], k[23], k[28], k[53], k[22], k[21], k[7], k[63], k[39]];
18   KS
end proc

 >

Details

• examination of  the DES algorithm: see the worksheet GenDES1.mw,

• using the DES algorithm for encryption 64-bit data with the 768-bit key: see the worksheet  GenDES2.mw,

• related to DES strong symmetric-key block ciphers: see the worksheet  GenDES3.mw,

• encrypting files using conventional and "rejuvenated" DES in the Maple environment: see the worksheet  GenDES4.mw.

References

[1] NIST:  DATA ENCRYPTION STANDARD (DES), FIPS PUB 46-3, October 1999

[2] William C. Barker: Recommendation for the Triple Data Encryption Algorithm (TDEA) Block Cipher,  NIST Special Publication 800-67, May 2004

[3] Michael May: Cryptography: Complete Set of Lessons,

http://www.maplesoft.com/applications/app_center_browse.aspx?CID=5&SCID=6,  October 2003

[4] Czeslaw Koscielny: Maple Tools for Preliminary Cryptanalysis,

http://www.maplesoft.com/applications/app_center_browse.aspx?CID=5&SCID=6, April 2004

[5] Czeslaw Koscielny: Secure Symmetric-Key Block Cipher Based on Generalized Finite Fields,

http://www.maplesoft.com/applications/app_center_browse.aspx?CID=5&SCID=6, November 2005