@@ -183,7 +183,8 @@ ngx_http_lua_ffi_get_ssl_ctx_list(SSL_CTX **buf)
183183
184184int
185185ngx_http_lua_ffi_update_ticket_encryption_key (SSL_CTX * ctx ,
186- const unsigned char * key , const ngx_uint_t nkeys , char * * err )
186+ const unsigned char * key , const ngx_uint_t nkeys ,
187+ const unsigned int key_length , char * * err )
187188{
188189#ifdef SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB
189190
@@ -226,12 +227,25 @@ ngx_http_lua_ffi_update_ticket_encryption_key(SSL_CTX *ctx,
226227 * key. */
227228 if (keys -> nelts > 0 ) {
228229 pkey = keys -> elts ;
229- if (ngx_memcmp (pkey -> name , key , 16 ) == 0
230- && ngx_memcmp (pkey -> aes_key , key + 16 , 16 ) == 0
231- && ngx_memcmp (pkey -> hmac_key , key + 32 , 16 ) == 0 )
232- {
233- dd ("duplicate ticket key" );
234- return NGX_OK ;
230+ if (key_length == 48 ) {
231+ dd ("key size is 48" );
232+ if (ngx_memcmp (pkey -> name , key , 16 ) == 0
233+ && ngx_memcmp (pkey -> aes_key , key + 16 , 16 ) == 0
234+ && ngx_memcmp (pkey -> hmac_key , key + 32 , 16 ) == 0 )
235+ {
236+ dd ("duplicate ticket key" );
237+ return NGX_OK ;
238+ }
239+
240+ } else if (key_length == 80 ) {
241+ dd ("key size is 80" );
242+ if (ngx_memcmp (pkey -> name , key , 16 ) == 0
243+ && ngx_memcmp (pkey -> aes_key , key + 16 , 32 ) == 0
244+ && ngx_memcmp (pkey -> hmac_key , key + 48 , 32 ) == 0 )
245+ {
246+ dd ("duplicate ticket key" );
247+ return NGX_OK ;
248+ }
235249 }
236250 }
237251
@@ -255,13 +269,23 @@ ngx_http_lua_ffi_update_ticket_encryption_key(SSL_CTX *ctx,
255269 }
256270
257271 /* copy the new key */
258- ngx_memcpy (pkey -> name , key , 16 );
259- ngx_memcpy (pkey -> aes_key , key + 16 , 16 );
260- ngx_memcpy (pkey -> hmac_key , key + 32 , 16 );
272+ if (key_length == 48 ) {
273+ ngx_memcpy (pkey -> name , key , 16 );
274+ ngx_memcpy (pkey -> aes_key , key + 16 , 16 );
275+ ngx_memcpy (pkey -> hmac_key , key + 32 , 16 );
261276#if (nginx_version >= 1011008 )
262277 pkey -> size = 48 ;
263278#endif
264279
280+ } else if (key_length == 80 ) {
281+ ngx_memcpy (pkey -> name , key , 16 );
282+ ngx_memcpy (pkey -> aes_key , key + 16 , 32 );
283+ ngx_memcpy (pkey -> hmac_key , key + 48 , 32 );
284+ #if (nginx_version >= 1011008 )
285+ pkey -> size = 80 ;
286+ #endif
287+ }
288+
265289 return NGX_OK ;
266290
267291#else
@@ -275,7 +299,7 @@ ngx_http_lua_ffi_update_ticket_encryption_key(SSL_CTX *ctx,
275299
276300int
277301ngx_http_lua_ffi_update_last_ticket_decryption_key (SSL_CTX * ctx ,
278- const unsigned char * key , char * * err )
302+ const unsigned char * key , const unsigned int key_length , char * * err )
279303{
280304 ngx_array_t * keys ;
281305 ngx_ssl_session_ticket_key_t * pkey ;
@@ -306,13 +330,23 @@ ngx_http_lua_ffi_update_last_ticket_decryption_key(SSL_CTX *ctx,
306330 pkey = & pkey [keys -> nelts - 1 ];
307331
308332 dd ("replace the last key" );
309- ngx_memcpy (pkey -> name , key , 16 );
310- ngx_memcpy (pkey -> aes_key , key + 16 , 16 );
311- ngx_memcpy (pkey -> hmac_key , key + 32 , 16 );
333+ if (key_length == 48 ) {
334+ ngx_memcpy (pkey -> name , key , 16 );
335+ ngx_memcpy (pkey -> aes_key , key + 16 , 16 );
336+ ngx_memcpy (pkey -> hmac_key , key + 32 , 16 );
312337#if (nginx_version >= 1011008 )
313338 pkey -> size = 48 ;
314339#endif
315340
341+ } else if (key_length == 80 ) {
342+ ngx_memcpy (pkey -> name , key , 16 );
343+ ngx_memcpy (pkey -> aes_key , key + 16 , 32 );
344+ ngx_memcpy (pkey -> hmac_key , key + 48 , 32 );
345+ #if (nginx_version >= 1011008 )
346+ pkey -> size = 80 ;
347+ #endif
348+ }
349+
316350 return NGX_OK ;
317351
318352#else
0 commit comments