type Chaocipher:Mode enum int ENCRYPT, DECRYPT end type Chaocipher text L_ALPHABET ← "HXUCZVAMDSLKPEFJRIGTWOBNYQ" text R_ALPHABET ← "PTLNBQDEOYSFAVZKGJRIHWXUMC" fun exec ← text by text value, Chaocipher:Mode mode, logic showSteps ^|since texts are mutable, we can operate directly on them without the need of Lists|^ text left ← *L_ALPHABET # by using the valueOf operator we are sure that the string is copied text right ← *R_ALPHABET text eText ← text(" ", value.length) text temp ← text(" ", 26) for int i ← 0; i < value.length; ++i if showSteps do writeLine(left + " " + right) end int index ← 0 if mode æ Chaocipher:Mode.ENCRYPT index ← right.find(value[i]) eText[i] ← left[index] else index ← left.find(value[i]) eText[i] ← right[index] end if i æ value.length - 1 do break end # permute left for int j ← index; j < 26; ++j do temp[j - index] ← left[j] end for int j ← 0; j < index; ++j do temp[26 - index + j] ← left[j] end var store ← temp[1] for int j ← 2; j < 14; ++j do temp[j - 1] ← temp[j] end temp[13] ← store left ← *temp # permute right for int j ← index; j < 26; ++j do temp[j - index] ← right[j] end for int j ← 0; j < index; ++j do temp[26 - index + j] ← right[j] end store ← temp[0] for int j ← 1; j < 26; ++j do temp[j - 1] ← temp[j] end temp[25] ← store store ← temp[2] for int j ← 3; j < 14; ++j do temp[j - 1] ← temp[j] end temp[13] ← store right ← *temp end return eText end var plainText ← "WELLDONEISBETTERTHANWELLSAID" writeLine("The original plaintext is : ", plainText) writeLine(EOL, "The left and right alphabets after each permutation during encryption are :", EOL) var cipherText ← exec(plainText, Chaocipher:Mode.ENCRYPT, true) writeLine(EOL, "The ciphertext is : ", cipherText) var plainText2 ← exec(cipherText, Chaocipher:Mode.DECRYPT, false) writeLine(EOL, "The recovered plaintext is : ", plainText2)