X-Git-Url: https://git.distorted.org.uk/~mdw/catacomb/blobdiff_plain/6a0eb24483f0e24865f9c93bb1690cdf3f54ead4..416b88692ad45dca8b3ae4800916dd8b3e9c2551:/symm/chacha.c diff --git a/symm/chacha.c b/symm/chacha.c index 37c6cfbb..8cc16b8d 100644 --- a/symm/chacha.c +++ b/symm/chacha.c @@ -97,7 +97,8 @@ static core__functype *pick_core(void) cpu_feature_p(CPUFEAT_ARM_NEON)); #endif #if CPUFAM_ARM64 - DISPATCH_PICK_COND(chacha_core, chacha_core_arm64, 1); + DISPATCH_PICK_COND(chacha_core, chacha_core_arm64, + cpu_feature_p(CPUFEAT_ARM_NEON)); #endif DISPATCH_PICK_FALLBACK(chacha_core, simple_core); } @@ -153,6 +154,8 @@ static void populate(chacha_matrix a, const void *key, size_t ksz) /*----- ChaCha implementation ---------------------------------------------*/ +static const octet zerononce[XCHACHA_NONCESZ]; + /* --- @chacha_init@ --- * * * Arguments: @chacha_ctx *ctx@ = context to fill in @@ -168,8 +171,6 @@ static void populate(chacha_matrix a, const void *key, size_t ksz) void chacha_init(chacha_ctx *ctx, const void *key, size_t ksz, const void *nonce) { - static const octet zerononce[CHACHA_NONCESZ]; - populate(ctx->a, key, ksz); chacha_setnonce(ctx, nonce ? nonce : zerononce); } @@ -405,8 +406,6 @@ CHACHA_VARS(DEFHCHACHA) void XCHACHA_INIT(r, XCHACHA_CTX(r) *ctx, \ const void *key, size_t ksz, const void *nonce) \ { \ - static const octet zerononce[XCHACHA_NONCESZ]; \ - \ populate(ctx->k, key, ksz); \ ctx->s.a[ 0] = CHACHA_A256; \ ctx->s.a[ 1] = CHACHA_B256; \ @@ -595,7 +594,7 @@ CHACHA_VARS(DEFGCIPHER) \ const gccipher xchacha##r = { \ "xchacha" #r, chacha_keysz, \ - CHACHA_NONCESZ, gxinit_##r \ + XCHACHA_NONCESZ, gxinit_##r \ }; CHACHA_VARS(DEFGXCIPHER) @@ -850,9 +849,14 @@ CHACHA_VARS(DEFXGRAND) #include #include +#include #include #include +#ifdef ENABLE_ASM_DEBUG +# include "regdump.h" +#endif + #define DEFVCORE(r) \ static int v_core_##r(dstr *v) \ { \ @@ -871,7 +875,7 @@ CHACHA_VARS(DEFXGRAND) } \ for (i = 0; i < CHACHA_OUTSZ/4; i++) STORE32_L(d.buf + 4*i, a[i]); \ \ - if (d.len != v[2].len || memcmp(d.buf, v[2].buf, v[2].len) != 0) { \ + if (d.len != v[2].len || MEMCMP(d.buf, !=, v[2].buf, v[2].len)) { \ ok = 0; \ printf("\nfail core:" \ "\n\titerations = %d" \ @@ -941,7 +945,7 @@ CHACHA_VARS(DEFVCORE) } \ if (sz) BASE##_ENCRYPT(r, &ctx, p, q, sz); \ \ - if (d.len != v[5].len || memcmp(d.buf, v[5].buf, v[5].len) != 0) { \ + if (d.len != v[5].len || MEMCMP(d.buf, !=, v[5].buf, v[5].len)) { \ ok = 0; \ printf("\nfail encrypt:" \ "\n\tstep = %lu" \ @@ -987,6 +991,9 @@ CHACHA_VARS(DEFXTAB) int main(int argc, char *argv[]) { +#ifdef ENABLE_ASM_DEBUG + regdump_init(); +#endif test_run(argc, argv, defs, SRCDIR"/t/chacha"); return (0); }