- if (v[0].len != sizeof(k)) { fprintf(stderr, "AES key len\n"); exit(2); }
- if (v[1].len != sizeof(r)) { fprintf(stderr, "poly key len\n"); exit(2); }
- if (v[2].len != sizeof(n)) { fprintf(stderr, "nonce len\n"); exit(2); }
- if (v[4].len != sizeof(n)) { fprintf(stderr, "result len\n"); exit(2); }
- memcpy(k, v[0].buf, sizeof(k));
- memcpy(r, v[1].buf, sizeof(k));
- memcpy(n, v[2].buf, sizeof(k));
- niter = *(unsigned long *)v[3].buf;
- dstr_ensure(&d, 16); d.len = 16; t = (octet *)d.buf;
-
- rijndael_ecbinit(&rij, k, sizeof(k), 0);
- poly1305_keyinit(&key, r, sizeof(r));
- for (i = 0; i < niter; i++) {
+ DENSURE(&dk, 16); k = (octet *)dk.buf; dk.len = 16;
+ DENSURE(&dr, 16); r = (octet *)dr.buf; dr.len = 16;
+ DENSURE(&dn, 16); n = (octet *)dn.buf; dn.len = 16;
+ DENSURE(&dt, 16); t = (octet *)dt.buf; dt.len = 16;
+ DENSURE(&dm, MSZMAX); m = (octet *)dm.buf; dm.len = MSZMAX;
+ memset(m, 0, MSZMAX);
+
+ if (v[0].len != 16) { fprintf(stderr, "AES key len\n"); exit(2); }
+ if (v[1].len != 16) { fprintf(stderr, "poly key len\n"); exit(2); }
+ if (v[2].len != 16) { fprintf(stderr, "nonce len\n"); exit(2); }
+ if (v[3].len != MSZMAX) { fprintf(stderr, "msgbuf len\n"); exit(2); }
+ if (v[6].len != 16) { fprintf(stderr, "result len\n"); exit(2); }
+ memcpy(k, v[0].buf, 16);
+ memcpy(r, v[1].buf, 16);
+ memcpy(n, v[2].buf, 16);
+ memcpy(m, v[3].buf, MSZMAX);
+ start_iter = *(unsigned long *)v[4].buf;
+ end_iter = *(unsigned long *)v[5].buf;
+ if (end_iter < start_iter) { fprintf(stderr, "iter bounds\n"); exit(2); }
+
+ rijndael_ecbinit(&rij, k, 16, 0);
+ poly1305_keyinit(&key, r, 16);
+ for (i = start_iter; i < end_iter; i++) {