[vlc-devel] [PATCH v2 3/4] access: srt: add support stream encryption
Jean-Baptiste Kempf
jb at videolan.org
Wed Dec 6 01:35:35 CET 2017
Thanks.
On Tue, 5 Dec 2017, at 14:46, Justin Kim wrote:
>
>
> On 05/12/2017 9:57 PM, Jean-Baptiste Kempf wrote:
> > Why can't you infer the length from the passphrase?
> >
>
> "key-length" is not the length of "passphrase", but it seems to mean
> cipher block length.
>
> I added name "key-length" by removing prefix and using full syllable
> from "pbkeylen" which SRT uses.
>
> > 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