-#define CHACHA_INIT(r, ctx, k, ksz, n) chacha_init(ctx, k, ksz, n)
-#define CHACHA_SEEKU64(r, ctx, i) chacha_seeku64(ctx, i)
-#define XCHACHA_SEEKU64(r, ctx, i) xchacha##r##_seeku64(ctx, i)
+
+#define CHACHA_TESTSETUP(r, ctx, k, ksz, n, nsz, p, psz) do { \
+ kludge64 pos64; \
+ chacha_init(ctx, k, ksz, 0); \
+ if (nsz == 8) chacha_setnonce(ctx, n); \
+ else if (nsz == 12) chacha_setnonce_ietf(ctx, n); \
+ if (psz == 8) { LOAD64_(pos64, p); chacha_seeku64(ctx, pos64); } \
+ else if (psz == 4) chacha_seek_ietf(ctx, LOAD32(p)); \
+} while (0)
+
+#define XCHACHA_TESTSETUP(r, ctx, k, ksz, n, nsz, p, psz) do { \
+ kludge64 pos64; \
+ XCHACHA_INIT(r, ctx, k, ksz, 0); \
+ if (nsz == 24) XCHACHA_SETNONCE(r, ctx, n); \
+ if (psz == 8) { LOAD64_(pos64, p); xchacha##r##_seeku64(ctx, pos64); } \
+} while (0)