(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