Re: [PATCH] Use EVP_MAC interface for Poly1305 if supported.

[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

 



On Sat, 22 Oct 2022 at 07:53, Chris Rapier <rapier@xxxxxxx> wrote:
[...]
> I normally wouldn't clutter up the code with library version specific
> ifdefs but it might be worth considering.

Instead of ifdefs, you can check if the MAC init succeeded before
calling the EVP functions, else fall back to the existing code path.

> +       /* fetch the mac and create and initialize the context */
> +       if ((mac = EVP_MAC_fetch(NULL, "POLY1305", NULL)) == NULL ||
> +           (poly_ctx = EVP_MAC_CTX_new(mac)) == NULL ||

You're initializing the MAC context on every call to this function.
If you initialize the context once, cache it (say, as a static) and
reuse it does it go any faster?

[...]
> +#if OPENSSL_VERSION_NUMBER >= 0x30000000UL
> +               /* EVP_MAC_update doesn't put the poly_mac into a buffer
> +                * we need EVP_MAC_final for that */
> +               EVP_MAC_update(poly_ctx, src, aadlen + len);
> +               EVP_MAC_final(poly_ctx, expected_tag, &poly_out_len, (size_t)POLY1305_TAGLEN);
> +#else
>                  poly1305_auth(expected_tag, src, aadlen + len, poly_key);
> +#endif

You'd also want to only try to init the context once instead of every
time in the case where libcrypto did not support it, so something
like:

if (ctx_inited && poly_ctx != NULL) {
    EVP_MAC_update(poly_ctx, src, aadlen + len);
    EVP_MAC_final(poly_ctx, expected_tag, &poly_out_len,
(size_t)POLY1305_TAGLEN);
} else {
    poly1305_auth(expected_tag, src, aadlen + len, poly_key);
}

-- 
Darren Tucker (dtucker at dtucker.net)
GPG key 11EAA6FA / A86E 3E07 5B19 5880 E860  37F4 9357 ECEF 11EA A6FA (new)
    Good judgement comes with experience. Unfortunately, the experience
usually comes from bad judgement.
_______________________________________________
openssh-unix-dev mailing list
openssh-unix-dev@xxxxxxxxxxx
https://lists.mindrot.org/mailman/listinfo/openssh-unix-dev



[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux