My Project
quic.h
Go to the documentation of this file.
1 
22 int (*set_encryption_secrets)(WOLFSSL *ssl, WOLFSSL_ENCRYPTION_LEVEL level,
23  const uint8_t *read_secret,
24  const uint8_t *write_secret, size_t secret_len);
25 
48 int (*add_handshake_data)(WOLFSSL *ssl, WOLFSSL_ENCRYPTION_LEVEL level,
49  const uint8_t *data, size_t len);
50 
62 int (*flush_flight)(WOLFSSL *ssl);
63 
77 int (*send_alert)(WOLFSSL *ssl, WOLFSSL_ENCRYPTION_LEVEL level, uint8_t alert);
78 
96 int wolfSSL_CTX_set_quic_method(WOLFSSL_CTX *ctx, const WOLFSSL_QUIC_METHOD *quic_method);
97 
115 int wolfSSL_set_quic_method(WOLFSSL *ssl, const WOLFSSL_QUIC_METHOD *quic_method);
116 
129 int wolfSSL_is_quic(WOLFSSL *ssl);
130 
147 WOLFSSL_ENCRYPTION_LEVEL wolfSSL_quic_read_level(const WOLFSSL *ssl);
148 
165 WOLFSSL_ENCRYPTION_LEVEL wolfSSL_quic_write_level(const WOLFSSL *ssl);
166 
167 
182 void wolfSSL_set_quic_use_legacy_codepoint(WOLFSSL *ssl, int use_legacy);
183 
196 void wolfSSL_set_quic_transport_version(WOLFSSL *ssl, int version);
197 
210 int wolfSSL_get_quic_transport_version(const WOLFSSL *ssl);
211 
226 int wolfSSL_set_quic_transport_params(WOLFSSL *ssl, const uint8_t *params, size_t params_len);
227 
243 
257 void wolfSSL_get_peer_quic_transport_params(const WOLFSSL *ssl, const uint8_t **out_params, size_t *out_params_len);
258 
259 
270 void wolfSSL_set_quic_early_data_enabled(WOLFSSL *ssl, int enabled);
271 
285 size_t wolfSSL_quic_max_handshake_flight_len(const WOLFSSL *ssl, WOLFSSL_ENCRYPTION_LEVEL level);
286 
287 
308 int wolfSSL_provide_quic_data(WOLFSSL *ssl, WOLFSSL_ENCRYPTION_LEVEL level, const uint8_t *data, size_t len);
309 
325 WOLFSSL_API int wolfSSL_process_quic_post_handshake(WOLFSSL *ssl);
326 
343 int wolfSSL_quic_read_write(WOLFSSL *ssl);
344 
364 const WOLFSSL_EVP_CIPHER *wolfSSL_quic_get_aead(WOLFSSL *ssl);
365 
385 int wolfSSL_quic_aead_is_gcm(const WOLFSSL_EVP_CIPHER *aead_cipher);
386 
406 int wolfSSL_quic_aead_is_ccm(const WOLFSSL_EVP_CIPHER *aead_cipher);
407 
427 int wolfSSL_quic_aead_is_chacha20(const WOLFSSL_EVP_CIPHER *aead_cipher);
428 
440 WOLFSSL_API size_t wolfSSL_quic_get_aead_tag_len(const WOLFSSL_EVP_CIPHER *aead_cipher);
441 
454 WOLFSSL_API const WOLFSSL_EVP_MD *wolfSSL_quic_get_md(WOLFSSL *ssl);
455 
468 const WOLFSSL_EVP_CIPHER *wolfSSL_quic_get_hp(WOLFSSL *ssl);
469 
487 WOLFSSL_EVP_CIPHER_CTX *wolfSSL_quic_crypt_new(const WOLFSSL_EVP_CIPHER *cipher,
488  const uint8_t *key, const uint8_t *iv, int encrypt);
489 
510 int wolfSSL_quic_aead_encrypt(uint8_t *dest, WOLFSSL_EVP_CIPHER_CTX *aead_ctx,
511  const uint8_t *plain, size_t plainlen,
512  const uint8_t *iv, const uint8_t *aad, size_t aadlen);
513 
534 int wolfSSL_quic_aead_decrypt(uint8_t *dest, WOLFSSL_EVP_CIPHER_CTX *ctx,
535  const uint8_t *enc, size_t enclen,
536  const uint8_t *iv, const uint8_t *aad, size_t aadlen);
537 
555 int wolfSSL_quic_hkdf_extract(uint8_t *dest, const WOLFSSL_EVP_MD *md,
556  const uint8_t *secret, size_t secretlen,
557  const uint8_t *salt, size_t saltlen);
558 
577 int wolfSSL_quic_hkdf_expand(uint8_t *dest, size_t destlen,
578  const WOLFSSL_EVP_MD *md,
579  const uint8_t *secret, size_t secretlen,
580  const uint8_t *info, size_t infolen);
581 
602 int wolfSSL_quic_hkdf(uint8_t *dest, size_t destlen,
603  const WOLFSSL_EVP_MD *md,
604  const uint8_t *secret, size_t secretlen,
605  const uint8_t *salt, size_t saltlen,
606  const uint8_t *info, size_t infolen);
void wolfSSL_get_peer_quic_transport_params(const WOLFSSL *ssl, const uint8_t **out_params, size_t *out_params_len)
Get the negotiated QUIC transport parameters. This will only give meaningful results when called afte...
WOLFSSL_ENCRYPTION_LEVEL wolfSSL_quic_write_level(const WOLFSSL *ssl)
Determine the encryption level for writes currently in use. Meaningful only when the WOLFSSL instance...
WOLFSSL_API int wolfSSL_process_quic_post_handshake(WOLFSSL *ssl)
Process any CRYPTO records that have been provided after the handshake has completed....
int wolfSSL_quic_read_write(WOLFSSL *ssl)
Process any CRYPTO records that have been provided during or after the handshake. Will progress the h...
const WOLFSSL_EVP_CIPHER * wolfSSL_quic_get_hp(WOLFSSL *ssl)
Determine the header protection cipher negotiated in the TLS handshake.
int wolfSSL_quic_aead_is_chacha20(const WOLFSSL_EVP_CIPHER *aead_cipher)
Check if the AEAD cipher is CHACHA20.
int wolfSSL_quic_aead_is_gcm(const WOLFSSL_EVP_CIPHER *aead_cipher)
Check if the AEAD cipher is GCM.
const WOLFSSL_EVP_CIPHER * wolfSSL_quic_get_aead(WOLFSSL *ssl)
Get the AEAD cipher negotiated in the TLS handshake.
void wolfSSL_set_quic_transport_version(WOLFSSL *ssl, int version)
Configure which QUIC version shall be used.
size_t wolfSSL_quic_max_handshake_flight_len(const WOLFSSL *ssl, WOLFSSL_ENCRYPTION_LEVEL level)
Get advice on the amount of data that shall be "in flight", e.g. unacknowledged at the given encrypti...
int wolfSSL_quic_aead_decrypt(uint8_t *dest, WOLFSSL_EVP_CIPHER_CTX *ctx, const uint8_t *enc, size_t enclen, const uint8_t *iv, const uint8_t *aad, size_t aadlen)
Decrypt the cipher text in the given context.
int(* send_alert)(WOLFSSL *ssl, WOLFSSL_ENCRYPTION_LEVEL level, uint8_t alert)
Callback invoked when an SSL alert happened during processing.
Definition: quic.h:77
int wolfSSL_quic_aead_encrypt(uint8_t *dest, WOLFSSL_EVP_CIPHER_CTX *aead_ctx, const uint8_t *plain, size_t plainlen, const uint8_t *iv, const uint8_t *aad, size_t aadlen)
Encrypt the plain text in the given context.
int wolfSSL_quic_aead_is_ccm(const WOLFSSL_EVP_CIPHER *aead_cipher)
Check if the AEAD cipher is CCM.
int wolfSSL_quic_hkdf_extract(uint8_t *dest, const WOLFSSL_EVP_MD *md, const uint8_t *secret, size_t secretlen, const uint8_t *salt, size_t saltlen)
Extract a pseudo random key.
int wolfSSL_set_quic_transport_params(WOLFSSL *ssl, const uint8_t *params, size_t params_len)
Set the QUIC transport parameters to use.
WOLFSSL_API size_t wolfSSL_quic_get_aead_tag_len(const WOLFSSL_EVP_CIPHER *aead_cipher)
Determine the tag length for the AEAD cipher.
void wolfSSL_set_quic_early_data_enabled(WOLFSSL *ssl, int enabled)
Configure if Early Data is enabled. Intended for servers to signal this to clients.
int wolfSSL_quic_hkdf_expand(uint8_t *dest, size_t destlen, const WOLFSSL_EVP_MD *md, const uint8_t *secret, size_t secretlen, const uint8_t *info, size_t infolen)
Expand a pseudo random key into a new key.
int wolfSSL_is_quic(WOLFSSL *ssl)
Check if QUIC has been activated in a WOLFSSL instance.
int wolfSSL_CTX_set_quic_method(WOLFSSL_CTX *ctx, const WOLFSSL_QUIC_METHOD *quic_method)
Activate QUIC protocol for a WOLFSSL_CTX and all derived WOLFSSL instances by providing the four call...
int(* add_handshake_data)(WOLFSSL *ssl, WOLFSSL_ENCRYPTION_LEVEL level, const uint8_t *data, size_t len)
Callback invoked for forwarding handshake CRYPTO data to peer. The data forwarded this way is not enc...
Definition: quic.h:48
int wolfSSL_quic_hkdf(uint8_t *dest, size_t destlen, const WOLFSSL_EVP_MD *md, const uint8_t *secret, size_t secretlen, const uint8_t *salt, size_t saltlen, const uint8_t *info, size_t infolen)
Expand and Extract a pseudo random key.
int wolfSSL_get_quic_transport_version(const WOLFSSL *ssl)
Get the configured QUIC version.
WOLFSSL_ENCRYPTION_LEVEL wolfSSL_quic_read_level(const WOLFSSL *ssl)
Determine the encryption level for reads currently in use. Meaningful only when the WOLFSSL instance ...
void wolfSSL_set_quic_use_legacy_codepoint(WOLFSSL *ssl, int use_legacy)
Configure which QUIC version shall be used. Without calling this, the WOLFSSL will offer both (draft-...
int wolfSSL_get_peer_quic_transport_version(const WOLFSSL *ssl)
Get the negotiated QUIC transport version. This will only give meaningful results when called after t...
WOLFSSL_API const WOLFSSL_EVP_MD * wolfSSL_quic_get_md(WOLFSSL *ssl)
Determine the message digest negotiated in the TLS handshake.
WOLFSSL_EVP_CIPHER_CTX * wolfSSL_quic_crypt_new(const WOLFSSL_EVP_CIPHER *cipher, const uint8_t *key, const uint8_t *iv, int encrypt)
Create a cipher context for en-/decryption.
int(* set_encryption_secrets)(WOLFSSL *ssl, WOLFSSL_ENCRYPTION_LEVEL level, const uint8_t *read_secret, const uint8_t *write_secret, size_t secret_len)
Callback invoked when secrets are generated during a handshake. Since QUIC protocol handlers perform ...
Definition: quic.h:22
int wolfSSL_provide_quic_data(WOLFSSL *ssl, WOLFSSL_ENCRYPTION_LEVEL level, const uint8_t *data, size_t len)
Pass decrypted CRYPTO data to the WOLFSSL instance for further processing. The encryption level betwe...
int(* flush_flight)(WOLFSSL *ssl)
Callback invoked for advisory flushing of the data to send.
Definition: quic.h:62
int wolfSSL_set_quic_method(WOLFSSL *ssl, const WOLFSSL_QUIC_METHOD *quic_method)
Activate QUIC protocol for a WOLFSSL instance by providing the four callbacks required....