@ -488,9 +488,9 @@ static int reality_parse_client_hello(const uint8_t *ch, size_t ch_len,
return REALITY_OK ;
}
int reality_server_hello_build ( const struct reality_server_config * cfg ,
const uint8_t * ch , size_t ch_len ,
uint8_t * out , size_t out_cap , size_t * out_len ) {
int reality_server_hello_build_at ( const struct reality_server_config * cfg , uint32_t now_sec ,
const uint8_t * ch , size_t ch_len ,
uint8_t * out , size_t out_cap , size_t * out_len ) {
if ( ! cfg | | ! ch | | ! out | | ! out_len | | out_cap < REALITY_MAX_SH_SIZE ) {
DEBUG_ERROR ( DEBUG_CATEGORY_REALITY , " reality_server_hello_build: invalid args " ) ;
return REALITY_ERR_ARG ;
@ -546,7 +546,7 @@ int reality_server_hello_build(const struct reality_server_config *cfg,
// сверка timestamp
uint32_t ts = ( ( uint32_t ) plain [ 4 ] < < 24 ) | ( ( uint32_t ) plain [ 5 ] < < 16 ) |
( ( uint32_t ) plain [ 6 ] < < 8 ) | plain [ 7 ] ;
int64_t now = ( int64_t ) time ( NULL ) ;
int64_t now = ( int64_t ) now_sec ;
int64_t diff = now - ( int64_t ) ts ;
if ( diff < - ( int64_t ) cfg - > time_window_sec | | diff > ( int64_t ) cfg - > time_window_sec ) {
DEBUG_WARN ( DEBUG_CATEGORY_REALITY , " reality_server_hello_build: timestamp out of window ts=%u now=%lld diff=%lld " ,
@ -623,3 +623,9 @@ int reality_server_hello_build(const struct reality_server_config *cfg,
DEBUG_INFO ( DEBUG_CATEGORY_REALITY , " server hello built: total=%zu " , * out_len ) ;
return REALITY_OK ;
}
int reality_server_hello_build ( const struct reality_server_config * cfg ,
const uint8_t * ch , size_t ch_len ,
uint8_t * out , size_t out_cap , size_t * out_len ) {
return reality_server_hello_build_at ( cfg , ( uint32_t ) time ( NULL ) , ch , ch_len , out , out_cap , out_len ) ;
}