// Tiny Encryption Algorithm. // This code is placed into the public domain. #light open UInt32 let encode (v : uint32[]) (k : uint32[]) = let y = ref v.[0] let z = ref v.[1] let a = k.[0] let b = k.[1] let c = k.[2] let d = k.[3] let sum = ref 0u let delta = 0x9e3779b9u for i = 0 to 31 do sum := !sum + delta y := !y + ((!z <<< 4) + a ^^^ !z + !sum ^^^ (!z >>> 5) + b) z := !z + ((!y <<< 4) + c ^^^ !y + !sum ^^^ (!y >>> 5) + d) v.[0] <- !y v.[1] <- !z Printf.printf "v.[0] = %x; v.[1] = %x;\n" v.[0] v.[1] let decode (v: uint32[]) (k : uint32[]) = let y = ref v.[0] let z = ref v.[1] let a = k.[0] let b = k.[1] let c = k.[2] let d = k.[3] let sum = ref 0xC6EF3720u let delta = 0x9E3779B9u for i = 0 to 31 do z := !z - ((!y <<< 4) + c ^^^ !y + !sum ^^^ (!y >>> 5) + d) y := !y - ((!z <<< 4) + a ^^^ !z + !sum ^^^ (!z >>> 5) + b) sum := !sum - delta v.[0] <- !y v.[1] <- !z Printf.printf "v.[0] = %x; v.[1] = %x;\n" v.[0] v.[1]