@@ -180,7 +180,8 @@ ngx_ssl_ja3_detail_print(ngx_pool_t *pool, ngx_ssl_ja3_t *ja3)
180
180
void
181
181
ngx_ssl_ja3_fp (ngx_pool_t * pool , ngx_ssl_ja3_t * ja3 , ngx_str_t * out )
182
182
{
183
- size_t len = 0 , cur = 0 ;
183
+ size_t len = 0 , cur = 0 , added = 0 ;
184
+ unsigned short us = 0 ;
184
185
185
186
if (pool == NULL || ja3 == NULL || out == NULL ) {
186
187
return ;
@@ -229,12 +230,18 @@ ngx_ssl_ja3_fp(ngx_pool_t *pool, ngx_ssl_ja3_t *ja3, ngx_str_t *out)
229
230
230
231
if (ja3 -> ciphers_sz ) {
231
232
for (size_t i = 0 ; i < ja3 -> ciphers_sz ; ++ i ) {
232
- if (i > 0 ) {
233
- ngx_snprintf (out -> data + (cur ++ ), 1 , "-" );
233
+ us = ntohs (ja3 -> ciphers [i ]);
234
+ if (!ngx_ssl_ja3_is_ext_greased (us )) {
235
+ if (added > 0 ) {
236
+ ngx_snprintf (out -> data + (cur ++ ), 1 , "-" );
237
+ }
238
+ len = ngx_ssj_ja3_num_digits (us );
239
+ ngx_snprintf (out -> data + cur , len , "%d" , us );
240
+ cur += len ;
241
+ if (added == 0 ) {
242
+ added = 1 ;
243
+ }
234
244
}
235
- len = ngx_ssj_ja3_num_digits (ja3 -> ciphers [i ]);
236
- ngx_snprintf (out -> data + cur , len , "%d" , ja3 -> ciphers [i ]);
237
- cur += len ;
238
245
}
239
246
}
240
247
ngx_snprintf (out -> data + (cur ++ ), 1 , "," );
@@ -297,6 +304,7 @@ ngx_ssl_ja3(ngx_connection_t *c, ngx_pool_t *pool, ngx_ssl_ja3_t *ja3) {
297
304
int * curves_out = NULL ;
298
305
int * point_formats_out = NULL ;
299
306
size_t len = 0 ;
307
+ unsigned short us = 0 ;
300
308
301
309
if (! c -> ssl ) {
302
310
return NGX_DECLINED ;
@@ -330,13 +338,7 @@ ngx_ssl_ja3(ngx_connection_t *c, ngx_pool_t *pool, ngx_ssl_ja3_t *ja3) {
330
338
if (ja3 -> ciphers == NULL ) {
331
339
return NGX_DECLINED ;
332
340
}
333
-
334
341
ngx_memcpy (ja3 -> ciphers , ciphers_out , len );
335
- #if NGX_HAVE_LITTLE_ENDIAN
336
- for (size_t i = 0 ; i < ja3 -> ciphers_sz ; ++ i ) {
337
- ja3 -> ciphers [i ] = (ja3 -> ciphers [i ] >> 8 ) | (ja3 -> ciphers [i ] << 8 );
338
- }
339
- #endif
340
342
}
341
343
342
344
/* Extensions */
@@ -349,7 +351,8 @@ ngx_ssl_ja3(ngx_connection_t *c, ngx_pool_t *pool, ngx_ssl_ja3_t *ja3) {
349
351
return NGX_DECLINED ;
350
352
}
351
353
for (size_t i = 0 ; i < c -> ssl -> client_extensions_size ; ++ i ) {
352
- if (! ngx_ssl_ja3_is_ext_greased (c -> ssl -> client_extensions [i ])) {
354
+ us = ntohs (c -> ssl -> client_extensions [i ]);
355
+ if (! ngx_ssl_ja3_is_ext_greased (us )) {
353
356
ja3 -> extensions [ja3 -> extensions_sz ++ ] =
354
357
c -> ssl -> client_extensions [i ];
355
358
}
0 commit comments