[vlc-devel] [PATCH v2 3/4] access: srt: add support stream encryption

Jean-Baptiste Kempf jb at videolan.org
Tue Dec 5 13:57:48 CET 2017


Why can't you infer the length from the passphrase?

On Sat, 25 Nov 2017, at 16:27, Justin Kim wrote:
> For encrypted transmitting, `passphrase` and `key-length`
> properties are added.
> 
> Signed-off-by: Justin Kim <justin.kim at collabora.com>
> ---
>  modules/access/srt.c | 31 +++++++++++++++++++++++++++++++
>  1 file changed, 31 insertions(+)
> 
> diff --git a/modules/access/srt.c b/modules/access/srt.c
> index 485c206902..019d30bad3 100644
> --- a/modules/access/srt.c
> +++ b/modules/access/srt.c
> @@ -46,6 +46,16 @@
>  /* The default latency is 125
>   * which uses srt library internally */
>  #define SRT_DEFAULT_LATENCY 125
> +/* Crypto key length in bytes. */
> +#define SRT_KEY_LENGTH_TEXT N_("Crypto key length in bytes")
> +#define SRT_DEFAULT_KEY_LENGTH 16
> +static const int srt_key_lengths[] = {
> +    16, 24, 32,
> +};
> +
> +static const char *const srt_key_length_names[] = {
> +    N_("16 bytes"), N_("24 bytes"), N_("32 bytes"),
> +};
>  
>  struct stream_sys_t
>  {
> @@ -172,6 +182,8 @@ static int Open(vlc_object_t *p_this)
>      }, *res = NULL;
>      int stat;
>  
> +    char         *psz_passphrase = NULL;
> +
>      p_sys = vlc_obj_alloc( p_this, 1, sizeof( *p_sys ) );
>      if( unlikely( p_sys == NULL ) )
>          return VLC_ENOMEM;
> @@ -191,6 +203,8 @@ static int Open(vlc_object_t *p_this)
>      p_stream->pf_block = BlockSRT;
>      p_stream->pf_control = Control;
>  
> +    psz_passphrase = var_InheritString( p_stream, "passphrase" );
> +
>      stat = vlc_getaddrinfo( parsed_url.psz_host, parsed_url.i_port,
>      &hints, &res );
>      if ( stat )
>      {
> @@ -218,6 +232,16 @@ static int Open(vlc_object_t *p_this)
>      /* Set latency */
>      srt_setsockopt( p_sys->sock, 0, SRTO_TSBPDDELAY, &p_sys->i_latency,
>      sizeof( int ) );
>  
> +    if ( psz_passphrase != NULL && psz_passphrase[0] != '\0')
> +    {
> +        int i_key_length = var_InheritInteger( p_stream, "key-length" );
> +
> +        srt_setsockopt( p_sys->sock, 0, SRTO_PASSPHRASE,
> +            psz_passphrase, strlen( psz_passphrase ) );
> +        srt_setsockopt( p_sys->sock, 0, SRTO_PBKEYLEN,
> +            &i_key_length, sizeof( int ) );
> +    }
> +
>      p_sys->i_poll_id = srt_epoll_create();
>      if ( p_sys->i_poll_id == -1 )
>      {
> @@ -239,6 +263,7 @@ static int Open(vlc_object_t *p_this)
>  
>      vlc_UrlClean( &parsed_url );
>      freeaddrinfo( res );
> +    free (psz_passphrase);
>  
>      return VLC_SUCCESS;
>  
> @@ -268,6 +293,8 @@ failed:
>      }
>      srt_close( p_sys->sock );
>  
> +    free (psz_passphrase);
> +
>      return VLC_EGENERIC;
>  }
>  
> @@ -303,6 +330,10 @@ vlc_module_begin ()
>      add_integer( "poll-timeout", SRT_DEFAULT_POLL_TIMEOUT,
>              N_("Return poll wait after timeout miliseconds (-1 =
>              infinite)"), NULL, true )
>      add_integer( "latency", SRT_DEFAULT_LATENCY, N_("SRT latency (ms)"),
>      NULL, true )
> +    add_password( "passphrase", "", N_("Password for stream
> encryption"), NULL, false )
> +    add_integer( "key-length", SRT_DEFAULT_KEY_LENGTH,
> +            SRT_KEY_LENGTH_TEXT, SRT_KEY_LENGTH_TEXT, false )
> +        change_integer_list( srt_key_lengths, srt_key_length_names )
>  
>      set_capability( "access", 0 )
>      add_shortcut( "srt" )
> -- 
> 2.15.0
> 
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel


-- 
Jean-Baptiste Kempf -  President
+33 672 704 734


More information about the vlc-devel mailing list