wisp
 
(Arne Babenhauserheide)
2013-12-26: first blind try at implementing tiny encryption scheme

first blind try at implementing tiny encryption scheme

diff --git a/examples/tinyenc.w b/examples/tinyenc.w
new file mode 100755
--- /dev/null
+++ b/examples/tinyenc.w
@@ -0,0 +1,48 @@
+#!/home/arne/wisp/wisp-multiline.sh 
+; !#
+
+define-module : examples tinyenc
+   . #:export : encrypt decrypt
+
+use-modules : 
+
+; http://en.wikipedia.org/wiki/Tiny_Encryption_Algorithm#toctitle
+
+logxor 1 3
+
+define delta #x9e3779b9
+
+define : encrypt v k
+  . "Encrypt the 64bit (8 byte, big endian) value V with the 128bit key K (16 byte)."
+  let
+    : k0 : ash k -96
+      k1 : modulo (ash k -64) : integer-expt 2 32
+      k2 : modulo (ash k -32) : integer-expt 2 64
+      k3 : modulo k : integer-expt 2 96
+    let loop 
+      : sum delta
+        cycle 0
+        v0 : ash v -32
+        v1 : modulo v : integer-expt 2 32
+      if : > cycle 31
+         + v1 : * v0 : integer-expt 2 32
+         let 
+           :
+             v0tmp 
+               + v0 
+                 logxor
+                   + k0 : ash v1 -4
+                   + v1 sum
+                   + k1 : ash v1 5
+         loop
+           + sum delta
+           + cycle 1
+           . v0tmp
+           + v1
+             logxor
+               + k2 : ash v0tmp -4
+               + v0tmp sum
+               + k3 : ash v0tmp 5
+
+
+display : encrypt : + : integer-expt 2 33