[FFmpeg-devel] [PATCH] libavformat/tls_mbedtls.c: Accommodating to mbedtls v3.0.0 API changes

James Almer jamrial at gmail.com
Mon Nov 1 20:15:23 EET 2021


On 11/1/2021 2:42 PM, meryacine wrote:
> 
> There were breaking API changes in mbedtls from v2.27.0 to v3.0.0.
> This patch accounts for these changes.
> 
> Changes:
> - mbedtls/certs.h is no longer imported. See https://github.com/ARMmbed/mbedtls/pull/4119.
> - mbedtls/config.h is replaced with mbedtls/build_info.h. See https://github.com/ARMmbed/mbedtls/blob/v3.0.0/docs/3.0-migration-guide.md#introduce-a-level-of-indirection-and-versioning-in-the-config-files.
> - MBEDTLS_ERR_SSL_NO_USABLE_CIPHERSUITE is replaced with MBEDTLS_ERR_SSL_HANDSHAKE_FAILURE. See https://github.com/ARMmbed/mbedtls/blob/v3.0.0/docs/3.0-migration-guide.md#changes-in-the-ssl-error-code-space.
> - The function mbedtls_pk_parse_keyfile should now be given 2 more arguments. See https://github.com/ARMmbed/mbedtls/blob/v3.0.0/docs/3.0-migration-guide.md#some-functions-gained-an-rng-parameter.
> 
> Signed-off-by: meryacine <omar.groza at gmail.com>
> ---
>   libavformat/tls_mbedtls.c | 9 +++++----
>   1 file changed, 5 insertions(+), 4 deletions(-)

> diff --git a/libavformat/tls_mbedtls.c b/libavformat/tls_mbedtls.c
> index aadf17760d..0730c2dacb 100644
> --- a/libavformat/tls_mbedtls.c
> +++ b/libavformat/tls_mbedtls.c
> @@ -19,8 +19,7 @@
>   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
>   */
>  
> -#include <mbedtls/certs.h>
> -#include <mbedtls/config.h>
> +#include <mbedtls/build_info.h>
>  #include <mbedtls/ctr_drbg.h>
>  #include <mbedtls/entropy.h>
>  #include <mbedtls/net_sockets.h>
> @@ -130,7 +129,7 @@ static void handle_pk_parse_error(URLContext *h, int ret)
>  static void handle_handshake_error(URLContext *h, int ret)
>  {
>      switch (ret) {
> -    case MBEDTLS_ERR_SSL_NO_USABLE_CIPHERSUITE:
> +    case MBEDTLS_ERR_SSL_HANDSHAKE_FAILURE:
>          av_log(h, AV_LOG_ERROR, "None of the common ciphersuites is usable. Was the local certificate correctly set?\n");
>          break;
>      case MBEDTLS_ERR_SSL_FATAL_ALERT_MESSAGE:
> @@ -199,7 +198,9 @@ static int tls_open(URLContext *h, const char *uri, int flags, AVDictionary **op
>      if (shr->key_file) {
>          if ((ret = mbedtls_pk_parse_keyfile(&tls_ctx->priv_key,
>                                              shr->key_file,
> -                                            tls_ctx->priv_key_pw)) != 0) {
> +                                            tls_ctx->priv_key_pw,
> +                                            mbedtls_ctr_drbg_random,
> +                                            &tls_ctx->ctr_drbg_context)) != 0) {

You need to keep supporting mbedtls <= 2.27 for a while. All distros 
still ship it.

Is there a compile time define that can be used to detect this, and wrap 
either version of the code in pre-processor checks?

>              handle_pk_parse_error(h, ret);
>              goto fail;
>          }


More information about the ffmpeg-devel mailing list