[pulseaudio-discuss] [PATCH v3 1/2] raop: add compatibility with openssl 1.1.0

Felipe Sateler fsateler at debian.org
Fri Nov 4 14:04:27 UTC 2016


This preserves the logic as it was prior to openssl 1.1, so lgtm.

On 4 November 2016 at 09:43, Tanu Kaskinen <tanuk at iki.fi> wrote:
> Openssl 1.1.0 made all structs opaque, which caused a build failure in
> raop_client.c. The struct member assignments are now replaced with a
> call to RSA_set0_key().
>
> BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=96726
> ---
>
> Changes in v3:
>  * Removed the assertion around RSA_set0_key(). The following patch will do
>    proper error handling.
>
>  src/modules/raop/raop_client.c | 22 ++++++++++++++++++++--
>  1 file changed, 20 insertions(+), 2 deletions(-)
>
> diff --git a/src/modules/raop/raop_client.c b/src/modules/raop/raop_client.c
> index 3b6c36e..864c558 100644
> --- a/src/modules/raop/raop_client.c
> +++ b/src/modules/raop/raop_client.c
> @@ -68,6 +68,21 @@
>
>  #define RAOP_PORT 5000
>
> +/* Openssl 1.1.0 broke compatibility. Before 1.1.0 we had to set RSA->n and
> + * RSA->e manually, but after 1.1.0 the RSA struct is opaque and we have to use
> + * RSA_set0_key(). RSA_set0_key() is a new function added in 1.1.0. We could
> + * depend on openssl 1.1.0, but it may take some time before distributions will
> + * be able to upgrade to the new openssl version. To insulate ourselves from
> + * such transition problems, let's implement RSA_set0_key() ourselves if it's
> + * not available. */
> +#if OPENSSL_VERSION_NUMBER < 0x10100000L
> +static int RSA_set0_key(RSA *r, BIGNUM *n, BIGNUM *e, BIGNUM *d) {
> +    r->n = n;
> +    r->e = e;
> +    return 1;
> +}
> +#endif
> +
>  struct pa_raop_client {
>      pa_core *core;
>      char *host;
> @@ -161,12 +176,15 @@ static int rsa_encrypt(uint8_t *text, int len, uint8_t *res) {
>      uint8_t exponent[8];
>      int size;
>      RSA *rsa;
> +    BIGNUM *n_bn;
> +    BIGNUM *e_bn;
>
>      rsa = RSA_new();
>      size = pa_base64_decode(n, modules);
> -    rsa->n = BN_bin2bn(modules, size, NULL);
> +    n_bn = BN_bin2bn(modules, size, NULL);
>      size = pa_base64_decode(e, exponent);
> -    rsa->e = BN_bin2bn(exponent, size, NULL);
> +    e_bn = BN_bin2bn(exponent, size, NULL);
> +    RSA_set0_key(rsa, n_bn, e_bn, NULL);
>
>      size = RSA_public_encrypt(len, text, res, rsa, RSA_PKCS1_OAEP_PADDING);
>      RSA_free(rsa);
> --
> 2.10.1
>
> _______________________________________________
> pulseaudio-discuss mailing list
> pulseaudio-discuss at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss



-- 

Saludos,
Felipe Sateler


More information about the pulseaudio-discuss mailing list