#!/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