Packages
hackney
2.0.1
4.7.2
4.7.1
4.7.0
4.6.1
4.6.0
4.5.2
4.5.1
4.5.0
4.4.5
4.4.3
4.4.2
4.4.1
4.4.0
4.3.0
4.2.3
4.2.2
4.2.1
4.2.0
4.1.0
4.0.3
4.0.2
4.0.1
4.0.0
3.2.1
3.2.0
3.1.2
3.1.1
3.1.0
3.0.3
3.0.2
3.0.1
3.0.0
retired
2.0.1
2.0.0
2.0.0-beta.1
1.25.0
1.24.1
1.24.0
1.23.0
1.22.0
1.21.0
1.20.1
1.20.0
1.19.1
1.19.0
1.18.2
1.18.1
1.18.0
1.17.4
1.17.3
1.17.2
1.17.1
1.17.0
1.16.0
1.15.2
1.15.1
1.15.0
1.14.3
1.14.2
1.14.0
1.13.0
1.12.1
1.12.0
1.11.0
1.10.1
1.10.0
1.9.0
1.8.6
1.8.5
1.8.4
1.8.3
1.8.2
1.8.0
1.7.1
1.7.0
1.6.6
retired
1.6.5
1.6.4
retired
1.6.3
1.6.2
1.6.1
1.6.0
1.5.7
1.5.6
1.5.5
1.5.4
1.5.3
1.5.2
1.5.1
1.5.0
1.4.10
1.4.8
1.4.7
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.2
1.3.1
1.3.0
1.2.0
1.1.0
1.0.6
1.0.5
1.0.2
1.0.1
0.15.2
0.15.0
0.14.3
0.14.2
0.14.1
0.14.0
0.13.1
Simple HTTP client with HTTP/1.1, HTTP/2, and HTTP/3 support
Security advisory:
This version has known vulnerabilities.
View advisories
Current section
Files
Jump to
Current section
Files
c_src/lsquic/src/liblsquic/lsquic_crand.c
/* Copyright (c) 2017 - 2022 LiteSpeed Technologies Inc. See LICENSE. */
#include <openssl/rand.h>
#include <stdint.h>
#include "lsquic_crand.h"
#define OFF_MASK(crand_) ((sizeof((crand_)->rand_buf) * 2) - 1)
uint8_t
lsquic_crand_get_nybble (struct crand *crand)
{
uint8_t byte;
if (crand->nybble_off == 0)
RAND_bytes(crand->rand_buf, sizeof(crand->rand_buf));
byte = crand->rand_buf[crand->nybble_off / 2];
if (crand->nybble_off & 1)
byte >>= 4;
else
byte &= 0xF;
crand->nybble_off += 1;
crand->nybble_off &= OFF_MASK(crand);
return byte;
}
uint8_t
lsquic_crand_get_byte (struct crand *crand)
{
uint8_t byte;
if (crand->nybble_off & 1)
return (lsquic_crand_get_nybble(crand) << 4)
| lsquic_crand_get_nybble(crand);
else
{
if (crand->nybble_off == 0)
RAND_bytes(crand->rand_buf, sizeof(crand->rand_buf));
byte = crand->rand_buf[crand->nybble_off / 2];
crand->nybble_off += 2;
crand->nybble_off &= OFF_MASK(crand);
return byte;
}
}