(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