コンテンツにスキップ

quic.h

Functions

Name
int wolfSSL_CTX_set_quic_method(WOLFSSL_CTX * ctx, const WOLFSSL_QUIC_METHOD * quic_method)
必要な4つのコールバックを提供することにより、WOLFSSL_CTXおよびすべての派生WOLFSSLインスタンスに対してQUICプロトコルを有効化します。CTXはTLSv1.3である必要があります。
int wolfSSL_set_quic_method(WOLFSSL * ssl, const WOLFSSL_QUIC_METHOD * quic_method)
必要な4つのコールバックを提供することにより、WOLFSSLインスタンスに対してQUICプロトコルを有効化します。WOLFSSLはTLSv1.3である必要があります。
int wolfSSL_is_quic(WOLFSSL * ssl)
WOLFSSLインスタンスでQUICが有効化されているかどうかを確認します。
WOLFSSL_ENCRYPTION_LEVEL wolfSSL_quic_read_level(const WOLFSSL * ssl)
現在使用中の読み取り用の暗号化レベルを決定します。WOLFSSLインスタンスがQUICを使用している場合にのみ意味があります。
WOLFSSL_ENCRYPTION_LEVEL wolfSSL_quic_write_level(const WOLFSSL * ssl)
現在使用中の書き込み用の暗号化レベルを決定します。WOLFSSLインスタンスがQUICを使用している場合にのみ意味があります。
void wolfSSL_set_quic_use_legacy_codepoint(WOLFSSL * ssl, int use_legacy)
使用するQUICバージョンを設定します。これを呼び出さない場合、WOLFSSLは両方(draft-27とv1)をサーバーに提供し、またはクライアントから両方を受け入れて最新のものをネゴシエートします。
void wolfSSL_set_quic_transport_version(WOLFSSL * ssl, int version)
使用するQUICバージョンを設定します。
int wolfSSL_get_quic_transport_version(const WOLFSSL * ssl)
設定されたQUICバージョンを取得します。
int wolfSSL_set_quic_transport_params(WOLFSSL * ssl, const uint8_t * params, size_t params_len)
使用するQUICトランスポートパラメータを設定します。
int wolfSSL_get_peer_quic_transport_version(const WOLFSSL * ssl)
ネゴシエートされたQUICトランスポートバージョンを取得します。これは、ピアからの該当するTLS拡張が確認された後に呼び出された場合にのみ意味のある結果を提供します。
void wolfSSL_get_peer_quic_transport_params(const WOLFSSL * ssl, const uint8_t ** out_params, size_t * out_params_len)
ネゴシエートされたQUICトランスポートパラメータを取得します。これは、ピアからの該当するTLS拡張が確認された後に呼び出された場合にのみ意味のある結果を提供します。
void wolfSSL_set_quic_early_data_enabled(WOLFSSL * ssl, int enabled)
Early Dataが有効かどうかを設定します。サーバーがクライアントにこれを通知することを目的としています。
size_t wolfSSL_quic_max_handshake_flight_len(const WOLFSSL * ssl, WOLFSSL_ENCRYPTION_LEVEL level)
与えられた暗号化レベルで「インフライト」であるべき、つまり未確認であるべきデータの量についてのアドバイスを取得します。これは、WOLFSSLインスタンスがバッファリングする準備ができているデータの量です。
int wolfSSL_provide_quic_data(WOLFSSL * ssl, WOLFSSL_ENCRYPTION_LEVEL level, const uint8_t * data, size_t len)
復号されたCRYPTOデータをWOLFSSLインスタンスに渡してさらに処理します。 呼び出し間の暗号化レベルは増加することのみが許可され、暗号化レベルの変更が受け入れられる前にデータレコードが完全であることもチェックされます。
WOLFSSL_API int wolfSSL_process_quic_post_handshake(WOLFSSL * ssl)
ハンドシェイクが完了した後に提供されたCRYPTOレコードを処理します。それ以前に呼び出された場合は失敗します。
int wolfSSL_quic_read_write(WOLFSSL * ssl)
ハンドシェイク中またはハンドシェイク後に提供されたCRYPTOレコードを処理します。 ハンドシェイクがまだ完了していない場合はハンドシェイクを進行させ、そうでない場合はwolfSSL_process_quic_post_handshake()のように動作します。
const WOLFSSL_EVP_CIPHER * wolfSSL_quic_get_aead(WOLFSSL * ssl)
TLSハンドシェイクでネゴシエートされたAEAD暗号を取得します。
int wolfSSL_quic_aead_is_gcm(const WOLFSSL_EVP_CIPHER * aead_cipher)
AEAD暗号がGCMであるかどうかを確認します。
int wolfSSL_quic_aead_is_ccm(const WOLFSSL_EVP_CIPHER * aead_cipher)
AEAD暗号がCCMであるかどうかを確認します。
int wolfSSL_quic_aead_is_chacha20(const WOLFSSL_EVP_CIPHER * aead_cipher)
AEAD暗号がCHACHA20であるかどうかを確認します。
WOLFSSL_API size_t wolfSSL_quic_get_aead_tag_len(const WOLFSSL_EVP_CIPHER * aead_cipher)
AEAD暗号のタグ長を決定します。
WOLFSSL_API const WOLFSSL_EVP_MD * wolfSSL_quic_get_md(WOLFSSL * ssl)
TLSハンドシェイクでネゴシエートされたメッセージダイジェストを決定します。
const WOLFSSL_EVP_CIPHER * wolfSSL_quic_get_hp(WOLFSSL * ssl)
TLSハンドシェイクでネゴシエートされたヘッダー保護暗号を決定します。
WOLFSSL_EVP_CIPHER_CTX * wolfSSL_quic_crypt_new(const WOLFSSL_EVP_CIPHER * cipher, const uint8_t * key, const uint8_t * iv, int encrypt)
暗号化/復号用の暗号コンテキストを作成します。
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)
与えられたコンテキストで平文を暗号化します。
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)
与えられたコンテキストで暗号文を復号します。
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)
疑似ランダム鍵を抽出します。
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)
疑似ランダム鍵を新しい鍵に拡張します。
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)
疑似ランダム鍵を拡張および抽出します。

Attributes

Name
int()(WOLFSSL ssl, WOLFSSL_ENCRYPTION_LEVEL level, const uint8_t read_secret, const uint8_t write_secret, size_t secret_len) set_encryption_secrets
ハンドシェイク中にシークレットが生成されたときに呼び出されるコールバック。 QUICプロトコルハンドラはパケットの暗号化/復号を実行するため、early_data/handshake/applicationレベルのネゴシエートされたシークレットが必要です。
int()(WOLFSSL ssl, WOLFSSL_ENCRYPTION_LEVEL level, const uint8_t *data, size_t len) add_handshake_data
ハンドシェイクCRYPTOデータをピアに転送するために呼び出されるコールバック。 この方法で転送されるデータは暗号化されていません。これを行うのはQUICプロトコル実装の役割です。使用するシークレットは、指定された暗号化レベルによって決定されます。
int()(WOLFSSL ssl) flush_flight
送信するデータのアドバイザリーフラッシュのために呼び出されるコールバック。
int()(WOLFSSL ssl, WOLFSSL_ENCRYPTION_LEVEL level, uint8_t alert) send_alert
処理中にSSLアラートが発生したときに呼び出されるコールバック。

Functions Documentation

function wolfSSL_CTX_set_quic_method

int wolfSSL_CTX_set_quic_method(
    WOLFSSL_CTX * ctx,
    const WOLFSSL_QUIC_METHOD * quic_method
)

必要な4つのコールバックを提供することにより、WOLFSSL_CTXおよびすべての派生WOLFSSLインスタンスに対してQUICプロトコルを有効化します。CTXはTLSv1.3である必要があります。

Parameters:

  • ctx - wolfSSL_CTX_new()を使用して作成されたWOLFSSL_CTX構造体へのポインタ。
  • quic_method - コールバック構造体。

See:

Return: WOLFSSL_SUCCESS 成功した場合。

渡されたquic_methodは、SSLインスタンスよりも長い寿命を持つ必要があります。コピーされません。すべてのコールバックを提供する必要があります。

function wolfSSL_set_quic_method

int wolfSSL_set_quic_method(
    WOLFSSL * ssl,
    const WOLFSSL_QUIC_METHOD * quic_method
)

必要な4つのコールバックを提供することにより、WOLFSSLインスタンスに対してQUICプロトコルを有効化します。WOLFSSLはTLSv1.3である必要があります。

Parameters:

  • ssl - wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ。
  • quic_method - コールバック構造体。

See:

Return: WOLFSSL_SUCCESS 成功した場合。

渡されたquic_methodは、SSLインスタンスよりも長い寿命を持つ必要があります。コピーされません。すべてのコールバックを提供する必要があります。

function wolfSSL_is_quic

int wolfSSL_is_quic(
    WOLFSSL * ssl
)

WOLFSSLインスタンスでQUICが有効化されているかどうかを確認します。

Parameters:

  • ssl - wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ。

See:

Return: 1 WOLFSSLがQUICを使用している場合。

function wolfSSL_quic_read_level

WOLFSSL_ENCRYPTION_LEVEL wolfSSL_quic_read_level(
    const WOLFSSL * ssl
)

現在使用中の読み取り用の暗号化レベルを決定します。WOLFSSLインスタンスがQUICを使用している場合にのみ意味があります。

Parameters:

  • ssl - wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ。

See: wolfSSL_quic_write_level

Return: 暗号化レベル。

有効なレベルは、データをやり取りする際に常にパラメータです。ピアからのデータは、この関数で報告されるレベル以外のレベルで到着する可能性があります。

function wolfSSL_quic_write_level

WOLFSSL_ENCRYPTION_LEVEL wolfSSL_quic_write_level(
    const WOLFSSL * ssl
)

現在使用中の書き込み用の暗号化レベルを決定します。WOLFSSLインスタンスがQUICを使用している場合にのみ意味があります。

Parameters:

  • ssl - wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ。

See: wolfSSL_quic_read_level

Return: 暗号化レベル。

有効なレベルは、データをやり取りする際に常にパラメータです。ピアからのデータは、この関数で報告されるレベル以外のレベルで到着する可能性があります。

function wolfSSL_set_quic_use_legacy_codepoint

void wolfSSL_set_quic_use_legacy_codepoint(
    WOLFSSL * ssl,
    int use_legacy
)

使用するQUICバージョンを設定します。これを呼び出さない場合、WOLFSSLは両方(draft-27とv1)をサーバーに提供し、またはクライアントから両方を受け入れて最新のものをネゴシエートします。

Parameters:

  • ssl - wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ。
  • use_legacy - draft-27を使用する場合はtrue、QUICv1のみを使用する場合は0。

See: wolfSSL_set_quic_transport_version

Return: WOLFSSL_SUCCESS 成功した場合。

function wolfSSL_set_quic_transport_version

void wolfSSL_set_quic_transport_version(
    WOLFSSL * ssl,
    int version
)

使用するQUICバージョンを設定します。

Parameters:

  • ssl - wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ。
  • version - QUICバージョンに定義されたTLS拡張。

See: wolfSSL_set_quic_use_legacy_codepoint

Return: WOLFSSL_SUCCESS 成功した場合。

function wolfSSL_get_quic_transport_version

int wolfSSL_get_quic_transport_version(
    const WOLFSSL * ssl
)

設定されたQUICバージョンを取得します。

Parameters:

  • ssl - wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ。

See:

Return: 設定されたバージョンのTLS拡張。

function wolfSSL_set_quic_transport_params

int wolfSSL_set_quic_transport_params(
    WOLFSSL * ssl,
    const uint8_t * params,
    size_t params_len
)

使用するQUICトランスポートパラメータを設定します。

Parameters:

  • ssl - wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ。
  • params - 使用するパラメータバイト。
  • params_len - パラメータの長さ。

See:

Return: WOLFSSL_SUCCESS 成功した場合。

function wolfSSL_get_peer_quic_transport_version

int wolfSSL_get_peer_quic_transport_version(
    const WOLFSSL * ssl
)

ネゴシエートされたQUICトランスポートバージョンを取得します。これは、ピアからの該当するTLS拡張が確認された後に呼び出された場合にのみ意味のある結果を提供します。

Parameters:

  • ssl - wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ。

See:

Return: ネゴシエートされたバージョンまたは-1。

function wolfSSL_get_peer_quic_transport_params

void wolfSSL_get_peer_quic_transport_params(
    const WOLFSSL * ssl,
    const uint8_t ** out_params,
    size_t * out_params_len
)

ネゴシエートされたQUICトランスポートパラメータを取得します。これは、ピアからの該当するTLS拡張が確認された後に呼び出された場合にのみ意味のある結果を提供します。

Parameters:

  • ssl - wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ。
  • out_params - ピアによって送信されたパラメータ、利用できない場合はNULLに設定されます。
  • out_params_len - ピアによって送信されたパラメータの長さ、利用できない場合は0に設定されます。

See: wolfSSL_get_peer_quic_transport_version

function wolfSSL_set_quic_early_data_enabled

void wolfSSL_set_quic_early_data_enabled(
    WOLFSSL * ssl,
    int enabled
)

Early Dataが有効かどうかを設定します。サーバーがクライアントにこれを通知することを目的としています。

Parameters:

  • ssl - wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ。
  • enabled - early dataが有効な場合は!= 0。

function wolfSSL_quic_max_handshake_flight_len

size_t wolfSSL_quic_max_handshake_flight_len(
    const WOLFSSL * ssl,
    WOLFSSL_ENCRYPTION_LEVEL level
)

与えられた暗号化レベルで「インフライト」であるべき、つまり未確認であるべきデータの量についてのアドバイスを取得します。これは、WOLFSSLインスタンスがバッファリングする準備ができているデータの量です。

Parameters:

  • ssl - wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ。
  • level - 問い合わせる暗号化レベル。

Return: 推奨される最大インフライトデータ。

function wolfSSL_provide_quic_data

int wolfSSL_provide_quic_data(
    WOLFSSL * ssl,
    WOLFSSL_ENCRYPTION_LEVEL level,
    const uint8_t * data,
    size_t len
)

復号されたCRYPTOデータをWOLFSSLインスタンスに渡してさらに処理します。 呼び出し間の暗号化レベルは増加することのみが許可され、暗号化レベルの変更が受け入れられる前にデータレコードが完全であることもチェックされます。

Parameters:

  • ssl - wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ。
  • level - データが暗号化されていたレベル。
  • data - データ自体。
  • len - データの長さ。

See:

Return: WOLFSSL_SUCCESS 成功した場合。

function wolfSSL_process_quic_post_handshake

WOLFSSL_API int wolfSSL_process_quic_post_handshake(
    WOLFSSL * ssl
)

ハンドシェイクが完了した後に提供されたCRYPTOレコードを処理します。それ以前に呼び出された場合は失敗します。

Parameters:

  • ssl - wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ。

See:

Return: WOLFSSL_SUCCESS 成功した場合。

function wolfSSL_quic_read_write

int wolfSSL_quic_read_write(
    WOLFSSL * ssl
)

ハンドシェイク中またはハンドシェイク後に提供されたCRYPTOレコードを処理します。 ハンドシェイクがまだ完了していない場合はハンドシェイクを進行させ、そうでない場合はwolfSSL_process_quic_post_handshake()のように動作します。

Parameters:

  • ssl - wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ。

See:

Return: WOLFSSL_SUCCESS 成功した場合。

function wolfSSL_quic_get_aead

const WOLFSSL_EVP_CIPHER * wolfSSL_quic_get_aead(
    WOLFSSL * ssl
)

TLSハンドシェイクでネゴシエートされたAEAD暗号を取得します。

Parameters:

  • ssl - wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ。

See:

Return: ネゴシエートされた暗号、または決定されていない場合はNULL。

function wolfSSL_quic_aead_is_gcm

int wolfSSL_quic_aead_is_gcm(
    const WOLFSSL_EVP_CIPHER * aead_cipher
)

AEAD暗号がGCMであるかどうかを確認します。

Parameters:

  • cipher - 暗号。

See:

Return: AEAD暗号がGCMの場合は!= 0。

function wolfSSL_quic_aead_is_ccm

int wolfSSL_quic_aead_is_ccm(
    const WOLFSSL_EVP_CIPHER * aead_cipher
)

AEAD暗号がCCMであるかどうかを確認します。

Parameters:

  • cipher - 暗号。

See:

Return: AEAD暗号がCCMの場合は!= 0。

function wolfSSL_quic_aead_is_chacha20

int wolfSSL_quic_aead_is_chacha20(
    const WOLFSSL_EVP_CIPHER * aead_cipher
)

AEAD暗号がCHACHA20であるかどうかを確認します。

Parameters:

  • cipher - 暗号。

See:

Return: AEAD暗号がCHACHA20の場合は!= 0。

function wolfSSL_quic_get_aead_tag_len

WOLFSSL_API size_t wolfSSL_quic_get_aead_tag_len(
    const WOLFSSL_EVP_CIPHER * aead_cipher
)

AEAD暗号のタグ長を決定します。

Parameters:

  • cipher - 暗号。

See: wolfSSL_quic_get_aead

Return: AEAD暗号のタグ長。

function wolfSSL_quic_get_md

WOLFSSL_API const WOLFSSL_EVP_MD * wolfSSL_quic_get_md(
    WOLFSSL * ssl
)

TLSハンドシェイクでネゴシエートされたメッセージダイジェストを決定します。

Parameters:

  • ssl - wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ。

See:

Return: TLSハンドシェイクでネゴシエートされたメッセージダイジェスト。

function wolfSSL_quic_get_hp

const WOLFSSL_EVP_CIPHER * wolfSSL_quic_get_hp(
    WOLFSSL * ssl
)

TLSハンドシェイクでネゴシエートされたヘッダー保護暗号を決定します。

Parameters:

  • ssl - wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ。

See:

Return: TLSハンドシェイクでネゴシエートされたヘッダー保護暗号。

function wolfSSL_quic_crypt_new

WOLFSSL_EVP_CIPHER_CTX * wolfSSL_quic_crypt_new(
    const WOLFSSL_EVP_CIPHER * cipher,
    const uint8_t * key,
    const uint8_t * iv,
    int encrypt
)

暗号化/復号用の暗号コンテキストを作成します。

Parameters:

  • cipher - コンテキストで使用する暗号。
  • key - コンテキストで使用する鍵。
  • iv - コンテキストで使用するiv。
  • encrypt - 暗号化の場合は!= 0、そうでない場合は復号。

See:

Return: 作成されたコンテキスト、またはエラーの場合はNULL。

function wolfSSL_quic_aead_encrypt

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
)

与えられたコンテキストで平文を暗号化します。

Parameters:

  • dest - 暗号化されたデータを書き込む宛先。
  • aead_ctx - 使用する暗号コンテキスト。
  • plain - 暗号化する平文データ。
  • plainlen - 平文データの長さ。
  • iv - 使用するiv。
  • aad - 使用するaad。
  • aadlen - aadの長さ。

See:

Return: WOLFSSL_SUCCESS 成功した場合。

function wolfSSL_quic_aead_decrypt

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
)

与えられたコンテキストで暗号文を復号します。

Parameters:

  • dest - 平文を書き込む宛先。
  • ctx - 使用する暗号コンテキスト。
  • enc - 復号する暗号化データ。
  • envlen - 暗号化データの長さ。
  • iv - 使用するiv。
  • aad - 使用するaad。
  • aadlen - aadの長さ。

See:

Return: WOLFSSL_SUCCESS 成功した場合。

function wolfSSL_quic_hkdf_extract

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
)

疑似ランダム鍵を抽出します。

Parameters:

  • dest - 鍵を書き込む宛先。
  • md - 使用するメッセージダイジェスト。
  • secret - 使用するシークレット。
  • secretlen - シークレットの長さ。
  • salt - 使用するソルト。
  • saltlen - ソルトの長さ。

See:

Return: WOLFSSL_SUCCESS 成功した場合。

function wolfSSL_quic_hkdf_expand

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
)

疑似ランダム鍵を新しい鍵に拡張します。

Parameters:

  • dest - 鍵を書き込む宛先。
  • destlen - 拡張する鍵の長さ。
  • md - 使用するメッセージダイジェスト。
  • secret - 使用するシークレット。
  • secretlen - シークレットの長さ。
  • info - 使用する情報。
  • infolen - 情報の長さ。

See:

Return: WOLFSSL_SUCCESS 成功した場合。

function wolfSSL_quic_hkdf

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
)

疑似ランダム鍵を拡張および抽出します。

Parameters:

  • dest - 鍵を書き込む宛先。
  • destlen - 鍵の長さ。
  • md - 使用するメッセージダイジェスト。
  • secret - 使用するシークレット。
  • secretlen - シークレットの長さ。
  • salt - 使用するソルト。
  • saltlen - ソルトの長さ。
  • info - 使用する情報。
  • infolen - 情報の長さ。

See:

Return: WOLFSSL_SUCCESS 成功した場合。

Attributes Documentation

variable set_encryption_secrets

int(*)(WOLFSSL *ssl, WOLFSSL_ENCRYPTION_LEVEL level, const uint8_t *read_secret, const uint8_t *write_secret, size_t secret_len) set_encryption_secrets;

ハンドシェイク中にシークレットが生成されたときに呼び出されるコールバック。 QUICプロトコルハンドラはパケットの暗号化/復号を実行するため、early_data/handshake/applicationレベルのネゴシエートされたシークレットが必要です。

Parameters:

  • ssl - wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ。
  • level - シークレットが対応する暗号化レベル。
  • read_secret - 与えられたレベルでの復号に使用されるシークレット、NULLの場合があります。
  • write_secret - 与えられたレベルでの暗号化に使用されるシークレット、NULLの場合があります。
  • secret_len - シークレットの長さ。

See: wolfSSL_set_quic_method

Return: 1 成功時、0 失敗時。

このコールバックはハンドシェイク中に数回呼び出されます。読み取りまたは書き込みシークレットの両方、または一方のみが提供される場合があります。これは、与えられた暗号化レベルがすでに有効になっていることを意味するものではありません。

variable add_handshake_data

int(*)(WOLFSSL *ssl, WOLFSSL_ENCRYPTION_LEVEL level, const uint8_t *data, size_t len) add_handshake_data;

ハンドシェイクCRYPTOデータをピアに転送するために呼び出されるコールバック。 この方法で転送されるデータは暗号化されていません。これを行うのはQUICプロトコル実装の役割です。使用するシークレットは、指定された暗号化レベルによって決定されます。

Parameters:

  • ssl - wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ。
  • level - データの暗号化に使用する暗号化レベル。
  • data - データ自体。
  • len - データの長さ。

See: wolfSSL_set_quic_method

Return: 1 成功時、0 失敗時。

このコールバックは、ハンドシェイクまたはポストハンドシェイク処理中に数回呼び出される場合があります。データは完全なCRYPTOレコードをカバーする場合もありますが、部分的な場合もあります。ただし、別の暗号化レベルを使用する前に、コールバックはすべてのレコードデータを受信します。

variable flush_flight

int(*)(WOLFSSL *ssl) flush_flight;

送信するデータのアドバイザリーフラッシュのために呼び出されるコールバック。

Parameters:

  • ssl - wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ。

See: wolfSSL_set_quic_method

Return: 1 成功時、0 失敗時。

variable send_alert

int(*)(WOLFSSL *ssl, WOLFSSL_ENCRYPTION_LEVEL level, uint8_t alert) send_alert;

処理中にSSLアラートが発生したときに呼び出されるコールバック。

Parameters:

  • ssl - wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ。
  • level - アラートが発生したときに有効だった暗号化レベル。
  • alert - エラー。

See: wolfSSL_set_quic_method

Return: 1 成功時、0 失敗時。

Source code


int (*set_encryption_secrets)(WOLFSSL *ssl, WOLFSSL_ENCRYPTION_LEVEL level,
                              const uint8_t *read_secret,
                              const uint8_t *write_secret, size_t secret_len);

int (*add_handshake_data)(WOLFSSL *ssl, WOLFSSL_ENCRYPTION_LEVEL level,
                          const uint8_t *data, size_t len);

int (*flush_flight)(WOLFSSL *ssl);

int (*send_alert)(WOLFSSL *ssl, WOLFSSL_ENCRYPTION_LEVEL level, uint8_t alert);

int wolfSSL_CTX_set_quic_method(WOLFSSL_CTX *ctx, const WOLFSSL_QUIC_METHOD *quic_method);

int wolfSSL_set_quic_method(WOLFSSL *ssl, const WOLFSSL_QUIC_METHOD *quic_method);

int wolfSSL_is_quic(WOLFSSL *ssl);

WOLFSSL_ENCRYPTION_LEVEL wolfSSL_quic_read_level(const WOLFSSL *ssl);

WOLFSSL_ENCRYPTION_LEVEL wolfSSL_quic_write_level(const WOLFSSL *ssl);


void wolfSSL_set_quic_use_legacy_codepoint(WOLFSSL *ssl, int use_legacy);

void wolfSSL_set_quic_transport_version(WOLFSSL *ssl, int version);

int wolfSSL_get_quic_transport_version(const WOLFSSL *ssl);

int wolfSSL_set_quic_transport_params(WOLFSSL *ssl, const uint8_t *params, size_t params_len);

int wolfSSL_get_peer_quic_transport_version(const WOLFSSL *ssl);

void wolfSSL_get_peer_quic_transport_params(const WOLFSSL *ssl, const uint8_t **out_params, size_t *out_params_len);


void wolfSSL_set_quic_early_data_enabled(WOLFSSL *ssl, int enabled);

size_t wolfSSL_quic_max_handshake_flight_len(const WOLFSSL *ssl, WOLFSSL_ENCRYPTION_LEVEL level);


int wolfSSL_provide_quic_data(WOLFSSL *ssl, WOLFSSL_ENCRYPTION_LEVEL level, const uint8_t *data, size_t len);

WOLFSSL_API int wolfSSL_process_quic_post_handshake(WOLFSSL *ssl);

int wolfSSL_quic_read_write(WOLFSSL *ssl);

const WOLFSSL_EVP_CIPHER *wolfSSL_quic_get_aead(WOLFSSL *ssl);

int wolfSSL_quic_aead_is_gcm(const WOLFSSL_EVP_CIPHER *aead_cipher);

int wolfSSL_quic_aead_is_ccm(const WOLFSSL_EVP_CIPHER *aead_cipher);

int wolfSSL_quic_aead_is_chacha20(const WOLFSSL_EVP_CIPHER *aead_cipher);

WOLFSSL_API size_t wolfSSL_quic_get_aead_tag_len(const WOLFSSL_EVP_CIPHER *aead_cipher);

WOLFSSL_API const WOLFSSL_EVP_MD *wolfSSL_quic_get_md(WOLFSSL *ssl);

const WOLFSSL_EVP_CIPHER *wolfSSL_quic_get_hp(WOLFSSL *ssl);

WOLFSSL_EVP_CIPHER_CTX *wolfSSL_quic_crypt_new(const WOLFSSL_EVP_CIPHER *cipher,
                                               const uint8_t *key, const uint8_t *iv, int encrypt);

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);

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);

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);

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);

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);

Updated on 2025-12-12 at 03:08:17 +0000