(Arne Babenhauserheide)
2013-12-27: tinyenc: fix output (uint: %u) and fix algorithm: v1<<4) == ash v1 4 tinyenc: fix output (uint: %u) and fix algorithm: v1<<4) == ash v1 4
diff --git a/examples/tinyenc.c b/examples/tinyenc.c --- a/examples/tinyenc.c +++ b/examples/tinyenc.c @@ -7,12 +7,13 @@ void encrypt (uint32_t* v, uint32_t* k) uint32_t k0=k[0], k1=k[1], k2=k[2], k3=k[3]; /* cache key */ for (i=0; i < 32; i++) { /* basic cycle start */ sum += delta; - printf("v0: %d, v1: %d\n", v0, v1); + printf("v0: %u, v1: %u\n", v0, v1); + printf("sum: %u, (v1<<4) + k0: %u, (v1 + sum): %u, (v1>>5) + k1: %u\n", sum, ((v1<<4) + k0), (v1 + sum), ((v1>>5) + k1)); v0 += ((v1<<4) + k0) ^ (v1 + sum) ^ ((v1>>5) + k1); v1 += ((v0<<4) + k2) ^ (v0 + sum) ^ ((v0>>5) + k3); } /* end cycle */ - printf("v0: %d, v1: %d\n", v0, v1); - printf("k0: %d, k1: %d, k2: %d, k3: %d\n", k0, k1, k2, k3); + printf("v0: %u, v1: %u\n", v0, v1); + printf("k0: %u, k1: %u, k2: %u, k3: %u\n", k0, k1, k2, k3); v[0]=v0; v[1]=v1; } diff --git a/examples/tinyenc.w b/examples/tinyenc.w --- a/examples/tinyenc.w +++ b/examples/tinyenc.w @@ -13,16 +13,21 @@ define : uint32 number modulo number : integer-expt 2 32 define : v0change k0 v1 sum k1 + format #t "sum: ~A, + k0 : ash v1 4: ~A, + v1 sum: ~A, + k1 : ash v1 -5: ~A\n" + . sum + uint32 : + k0 : ash v1 4 + uint32 : + v1 sum + uint32 : + k1 : uint32 : ash v1 -5 logxor - uint32 : + k0 : ash v1 -4 + uint32 : + k0 : ash v1 4 uint32 : + v1 sum - uint32 : + k1 : uint32 : ash v1 5 + uint32 : + k1 : uint32 : ash v1 -5 define : v1change k2 v0 sum k3 logxor - uint32 : + k2 : ash v0 -4 + uint32 : + k2 : ash v0 4 uint32 : + v0 sum - uint32 : + k3 : uint32 : ash v0 5 + uint32 : + k3 : uint32 : ash v0 -5 ; TODO: Define a macro with-split-kv which executes its body with let bindings to k0 k1 k2 k3 v0 and v1 define-syntax with-split-vk