wisp
 
(Arne Babenhauserheide)
2013-12-26: still wrong results.

still wrong results.

diff --git a/examples/tinyenc.w b/examples/tinyenc.w
--- a/examples/tinyenc.w
+++ b/examples/tinyenc.w
@@ -4,14 +4,16 @@
 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 : uint32! number
+  . "ensure that the number fits a uint32"
+  modulo number : integer-expt 2 32
+
 define : encrypt v k
   . "Encrypt the 64bit (8 byte, big endian) value V with the 128bit key K (16 byte)."
   let
@@ -24,29 +26,72 @@ define : encrypt v k
         cycle 0
         v0 : ash v -32
         v1 : modulo v : integer-expt 2 32
-      if : > cycle 31
+      if : = cycle 32
          + v1 : * v0 : integer-expt 2 32
          let 
            :
              v0tmp 
-               + v0 
+              uint32!
+               + v0
                  logxor
                    + k0 : ash v1 -4
                    + v1 sum
                    + k1 : ash v1 5
            loop
-             + sum delta
+             modulo (+ sum delta) : integer-expt 2 32
              + cycle 1
              . v0tmp
-             + v1
+             uint32!
+              + v1
                logxor
                  + k2 : ash v0tmp -4
                  + v0tmp sum
                  + k3 : ash v0tmp 5
 
+define : decrypt v k
+  . "Decrypt 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 #xc6ef3720
+        cycle 0
+        v0 : ash v -32
+        v1 : modulo v : integer-expt 2 32
+      if : = cycle 32
+         + v1 : * v0 : integer-expt 2 32
+         let 
+           :
+             v1tmp 
+              uint32!
+               - v1 
+                 logxor
+                   + k2 : ash v0 -4
+                   + v0 sum
+                   + k3 : ash v0 5
+           loop
+             modulo (+ sum delta) : integer-expt 2 32
+             + cycle 1
+             uint32!
+              - v0
+               logxor
+                 + k0 : ash v1tmp -4
+                 + v1tmp sum
+                 + k1 : ash v1tmp 5
+             . v1tmp
+
 
 display 
+    decrypt
         encrypt 
-          + 1 : integer-expt 2 33
+          . 5
+          + 7 : integer-expt 2 96 
+        + 7 : integer-expt 2 96 
+newline
+display
+        encrypt 
+          . 5
           + 7 : integer-expt 2 96 
 newline