コンテンツにスキップ

アルゴリズム - Diffie-Hellman

Functions

Name
int wc_InitDhKey(DhKey * key)
この関数は、Diffie-Hellman鍵交換プロトコルで安全な秘密鍵をネゴシエートするために使用するDiffie-Hellman鍵を初期化します。
void wc_FreeDhKey(DhKey * key)
この関数は、Diffie-Hellman鍵交換プロトコルで安全な秘密鍵をネゴシエートするために使用された後、Diffie-Hellman鍵を解放します。
int wc_DhGenerateKeyPair(DhKey * key, WC_RNG * rng, byte * priv, word32 * privSz, byte * pub, word32 * pubSz)
この関数は、Diffie-Hellman公開パラメータに基づいて公開/秘密鍵ペアを生成し、秘密鍵をprivに、公開鍵をpubに格納します。初期化されたDiffie-Hellman鍵と初期化されたrng構造体を受け取ります。
int wc_DhAgree(DhKey * key, byte * agree, word32 * agreeSz, const byte * priv, word32 privSz, const byte * otherPub, word32 pubSz)
この関数は、ローカル秘密鍵と受信した公開鍵に基づいて合意された秘密鍵を生成します。交換の両側で完了すると、この関数は対称通信用の合意された秘密鍵を生成します。共有秘密鍵の生成に成功すると、書き込まれた秘密鍵のサイズがagreeSzに格納されます。
int wc_DhKeyDecode(const byte * input, word32 * inOutIdx, DhKey * key, word32 )
この関数は、DERフォーマットの鍵を含む指定された入力バッファからDiffie-Hellman鍵をデコードします。結果をDhKey構造体に格納します。
int wc_DhSetKey(DhKey * key, const byte * p, word32 pSz, const byte * g, word32 gSz)
この関数は、入力秘密鍵パラメータを使用してDhKey構造体の鍵を設定します。wc_DhKeyDecodeとは異なり、この関数は入力鍵がDERフォーマットでフォーマットされている必要はなく、代わりに単純に解析された入力パラメータp(素数)とg(ベース)を受け入れます。
int wc_DhParamsLoad(const byte * input, word32 inSz, byte * p, word32 * pInOutSz, byte * g, word32 * gInOutSz)
この関数は、指定された入力バッファからDERフォーマットのDiffie_Hellmanパラメータp(素数)とg(ベース)をロードします。
const DhParams * wc_Dh_ffdhe2048_Get(void )
この関数は...を返し、HAVE_FFDHE_2048が定義されている必要があります。
const DhParams * wc_Dh_ffdhe3072_Get(void )
この関数は...を返し、HAVE_FFDHE_3072が定義されている必要があります。
const DhParams * wc_Dh_ffdhe4096_Get(void )
この関数は...を返し、HAVE_FFDHE_4096が定義されている必要があります。
const DhParams * wc_Dh_ffdhe6144_Get(void )
この関数は...を返し、HAVE_FFDHE_6144が定義されている必要があります。
const DhParams * wc_Dh_ffdhe8192_Get(void )
この関数は...を返し、HAVE_FFDHE_8192が定義されている必要があります。
int wc_DhCheckKeyPair(DhKey * key, const byte * pub, word32 pubSz, const byte * priv, word32 privSz)
FFCのSP 800_56Ar3、セクション5.6.2.1.4、メソッド(b)のプロセスに従って、DH鍵のペアワイズ整合性をチェックします。
int wc_DhCheckPrivKey(DhKey * key, const byte * priv, word32 pubSz)
無効な数値についてDH秘密鍵をチェックします
int wc_DhCheckPrivKey_ex(DhKey * key, const byte * priv, word32 pubSz, const byte * prime, word32 primeSz)
int wc_DhCheckPubKey(DhKey * key, const byte * pub, word32 pubSz)
int wc_DhCheckPubKey_ex(DhKey * key, const byte * pub, word32 pubSz, const byte * prime, word32 primeSz)
int wc_DhExportParamsRaw(DhKey * dh, byte * p, word32 * pSz, byte * q, word32 * qSz, byte * g, word32 * gSz)
int wc_DhGenerateParams(WC_RNG * rng, int modSz, DhKey * dh)
int wc_DhSetCheckKey(DhKey * key, const byte * p, word32 pSz, const byte * g, word32 gSz, const byte * q, word32 qSz, int trusted, WC_RNG * rng)
int wc_DhSetKey_ex(DhKey * key, const byte * p, word32 pSz, const byte * g, word32 gSz, const byte * q, word32 qSz)

Functions Documentation

function wc_InitDhKey

int wc_InitDhKey(
    DhKey * key
)

この関数は、Diffie-Hellman鍵交換プロトコルで安全な秘密鍵をネゴシエートするために使用するDiffie-Hellman鍵を初期化します。

Parameters:

  • key 安全な鍵交換で使用するために初期化するDhKey構造体へのポインタ

See:

Return: none 戻り値なし。

Example

DhKey key;
wc_InitDhKey(&key); // DH鍵を初期化

function wc_FreeDhKey

void wc_FreeDhKey(
    DhKey * key
)

この関数は、Diffie-Hellman鍵交換プロトコルで安全な秘密鍵をネゴシエートするために使用された後、Diffie-Hellman鍵を解放します。

Parameters:

  • key 解放するDhKey構造体へのポインタ

See: wc_InitDhKey

Return: none 戻り値なし。

Example

DhKey key;
// 鍵を初期化、鍵交換を実行

wc_FreeDhKey(&key); // メモリリークを避けるためにDH鍵を解放

function wc_DhGenerateKeyPair

int wc_DhGenerateKeyPair(
    DhKey * key,
    WC_RNG * rng,
    byte * priv,
    word32 * privSz,
    byte * pub,
    word32 * pubSz
)

この関数は、Diffie-Hellman公開パラメータに基づいて公開/秘密鍵ペアを生成し、秘密鍵をprivに、公開鍵をpubに格納します。初期化されたDiffie-Hellman鍵と初期化されたrng構造体を受け取ります。

Parameters:

  • key 鍵ペアを生成するDhKey構造体へのポインタ
  • rng 鍵を生成するために使用する初期化された乱数生成器(rng)へのポインタ
  • priv 秘密鍵を格納するバッファへのポインタ
  • privSz privに書き込まれた秘密鍵のサイズを格納します
  • pub 公開鍵を格納するバッファへのポインタ
  • pubSz pubに書き込まれた秘密鍵のサイズを格納します

See:

Return:

  • BAD_FUNC_ARG この関数への入力の1つを解析する際にエラーがある場合に返されます
  • RNG_FAILURE_E rngを使用して乱数を生成する際にエラーがある場合に返されます
  • MP_INIT_E 公開鍵を生成する際に数学ライブラリでエラーがある場合に返される可能性があります
  • MP_READ_E 公開鍵を生成する際に数学ライブラリでエラーがある場合に返される可能性があります
  • MP_EXPTMOD_E 公開鍵を生成する際に数学ライブラリでエラーがある場合に返される可能性があります
  • MP_TO_E 公開鍵を生成する際に数学ライブラリでエラーがある場合に返される可能性があります

Example

DhKey key;
int ret;
byte priv[256];
byte pub[256];
word32 privSz, pubSz;

wc_InitDhKey(&key); // 鍵を初期化
// wc_DhSetKeyまたはwc_DhKeyDecodeを使用してDHパラメータを設定
WC_RNG rng;
wc_InitRng(&rng); // rngを初期化
ret = wc_DhGenerateKeyPair(&key, &rng, priv, &privSz, pub, &pubSz);

function wc_DhAgree

int wc_DhAgree(
    DhKey * key,
    byte * agree,
    word32 * agreeSz,
    const byte * priv,
    word32 privSz,
    const byte * otherPub,
    word32 pubSz
)

この関数は、ローカル秘密鍵と受信した公開鍵に基づいて合意された秘密鍵を生成します。交換の両側で完了すると、この関数は対称通信用の合意された秘密鍵を生成します。共有秘密鍵の生成に成功すると、書き込まれた秘密鍵のサイズがagreeSzに格納されます。

Parameters:

  • key 共有鍵を計算するために使用するDhKey構造体へのポインタ
  • agree 秘密鍵を格納するバッファへのポインタ
  • agreeSz 生成成功後に秘密鍵のサイズを保持します
  • priv ローカル秘密鍵を含むバッファへのポインタ
  • privSz ローカル秘密鍵のサイズ
  • otherPub 受信した公開鍵を含むバッファへのポインタ
  • pubSz 受信した公開鍵のサイズ

See: wc_DhGenerateKeyPair

Return:

  • 0 合意された秘密鍵の生成に成功した場合に返されます
  • MP_INIT_E 共有秘密鍵の生成中にエラーがある場合に返される可能性があります
  • MP_READ_E 共有秘密鍵の生成中にエラーがある場合に返される可能性があります
  • MP_EXPTMOD_E 共有秘密鍵の生成中にエラーがある場合に返される可能性があります
  • MP_TO_E 共有秘密鍵の生成中にエラーがある場合に返される可能性があります

Example

DhKey key;
int ret;
byte priv[256];
byte agree[256];
word32 agreeSz;

// 鍵を初期化、鍵素数とベースを設定
// wc_DhGenerateKeyPair -- 秘密鍵をprivに格納
byte pub[] = { // 受信した公開鍵で初期化 };
ret = wc_DhAgree(&key, agree, &agreeSz, priv, sizeof(priv), pub,
sizeof(pub));
if ( ret != 0 ) {
    // 共有鍵生成エラー
}

function wc_DhKeyDecode

int wc_DhKeyDecode(
    const byte * input,
    word32 * inOutIdx,
    DhKey * key,
    word32 
)

この関数は、DERフォーマットの鍵を含む指定された入力バッファからDiffie-Hellman鍵をデコードします。結果をDhKey構造体に格納します。

Parameters:

  • input DERフォーマットのDiffie-Hellman鍵を含むバッファへのポインタ
  • inOutIdx 鍵をデコードする際に解析されたインデックスを格納する整数へのポインタ
  • key 入力鍵で初期化するDhKey構造体へのポインタ
  • inSz 入力バッファの長さ。読み取り可能な最大長を示します

See: wc_DhSetKey

Return:

  • 0 入力鍵のデコードに成功した場合に返されます
  • ASN_PARSE_E 入力のシーケンスを解析する際にエラーがある場合に返されます
  • ASN_DH_KEY_E 解析された入力から秘密鍵パラメータを読み取る際にエラーがある場合に返されます

Example

DhKey key;
word32 idx = 0;

byte keyBuff[1024];
// DERフォーマットの鍵で初期化
wc_DhKeyInit(&key);
ret = wc_DhKeyDecode(keyBuff, &idx, &key, sizeof(keyBuff));

if ( ret != 0 ) {
    // 鍵のデコードエラー
}

function wc_DhSetKey

int wc_DhSetKey(
    DhKey * key,
    const byte * p,
    word32 pSz,
    const byte * g,
    word32 gSz
)

この関数は、入力秘密鍵パラメータを使用してDhKey構造体の鍵を設定します。wc_DhKeyDecodeとは異なり、この関数は入力鍵がDERフォーマットでフォーマットされている必要はなく、代わりに単純に解析された入力パラメータp(素数)とg(ベース)を受け入れます。

Parameters:

  • key 鍵を設定するDhKey構造体へのポインタ
  • p 鍵で使用する素数を含むバッファへのポインタ
  • pSz 入力素数の長さ
  • g 鍵で使用するベースを含むバッファへのポインタ
  • gSz 入力ベースの長さ

See: wc_DhKeyDecode

Return:

  • 0 鍵の設定に成功した場合に返されます
  • BAD_FUNC_ARG 入力パラメータのいずれかがNULLと評価される場合に返されます
  • MP_INIT_E 格納用の鍵パラメータを初期化する際にエラーがある場合に返されます
  • ASN_DH_KEY_E DH鍵パラメータpとgを読み取る際にエラーがある場合に返されます

Example

DhKey key;

byte p[] = { // 素数で初期化 };
byte g[] = { // ベースで初期化 };
wc_DhKeyInit(&key);
ret = wc_DhSetKey(key, p, sizeof(p), g, sizeof(g));

if ( ret != 0 ) {
    // 鍵設定エラー
}

function wc_DhParamsLoad

int wc_DhParamsLoad(
    const byte * input,
    word32 inSz,
    byte * p,
    word32 * pInOutSz,
    byte * g,
    word32 * gInOutSz
)

この関数は、指定された入力バッファからDERフォーマットのDiffie-Hellmanパラメータp(素数)とg(ベース)をロードします。

Parameters:

  • input 解析するDERフォーマットのDiffie-Hellman証明書を含むバッファへのポインタ
  • inSz 入力バッファのサイズ
  • p 解析された素数を格納するバッファへのポインタ
  • pInOutSz pバッファで利用可能なサイズを含むword32オブジェクトへのポインタ。関数呼び出しの完了後、バッファに書き込まれたバイト数で上書きされます
  • g 解析されたベースを格納するバッファへのポインタ
  • gInOutSz gバッファで利用可能なサイズを含むword32オブジェクトへのポインタ。関数呼び出しの完了後、バッファに書き込まれたバイト数で上書きされます

See:

Return:

  • 0 DHパラメータの抽出に成功した場合に返されます
  • ASN_PARSE_E DERフォーマットのDH証明書を解析する際にエラーが発生した場合に返されます
  • BUFFER_E pまたはgに解析されたパラメータを格納する十分なスペースがない場合に返されます

Example

byte dhCert[] = { DERフォーマットの証明書で初期化 };
byte p[MAX_DH_SIZE];
byte g[MAX_DH_SIZE];
word32 pSz = MAX_DH_SIZE;
word32 gSz = MAX_DH_SIZE;

ret = wc_DhParamsLoad(dhCert, sizeof(dhCert), p, &pSz, g, &gSz);
if ( ret != 0 ) {
    // 入力の解析エラー
}

function wc_Dh_ffdhe2048_Get

const DhParams * wc_Dh_ffdhe2048_Get(
    void 
)

この関数は...を返し、HAVE_FFDHE_2048が定義されている必要があります。

See:

function wc_Dh_ffdhe3072_Get

const DhParams * wc_Dh_ffdhe3072_Get(
    void 
)

この関数は...を返し、HAVE_FFDHE_3072が定義されている必要があります。

See:

function wc_Dh_ffdhe4096_Get

const DhParams * wc_Dh_ffdhe4096_Get(
    void 
)

この関数は...を返し、HAVE_FFDHE_4096が定義されている必要があります。

See:

function wc_Dh_ffdhe6144_Get

const DhParams * wc_Dh_ffdhe6144_Get(
    void 
)

この関数は...を返し、HAVE_FFDHE_6144が定義されている必要があります。

See:

function wc_Dh_ffdhe8192_Get

const DhParams * wc_Dh_ffdhe8192_Get(
    void 
)

この関数は...を返し、HAVE_FFDHE_8192が定義されている必要があります。

See:

function wc_DhCheckKeyPair

int wc_DhCheckKeyPair(
    DhKey * key,
    const byte * pub,
    word32 pubSz,
    const byte * priv,
    word32 privSz
)

FFCのSP 800-56Ar3、セクション5.6.2.1.4、メソッド(b)のプロセスに従って、DH鍵のペアワイズ整合性をチェックします。

function wc_DhCheckPrivKey

int wc_DhCheckPrivKey(
    DhKey * key,
    const byte * priv,
    word32 pubSz
)

無効な数値についてDH秘密鍵をチェックします

function wc_DhCheckPrivKey_ex

int wc_DhCheckPrivKey_ex(
    DhKey * key,
    const byte * priv,
    word32 pubSz,
    const byte * prime,
    word32 primeSz
)

function wc_DhCheckPubKey

int wc_DhCheckPubKey(
    DhKey * key,
    const byte * pub,
    word32 pubSz
)

function wc_DhCheckPubKey_ex

int wc_DhCheckPubKey_ex(
    DhKey * key,
    const byte * pub,
    word32 pubSz,
    const byte * prime,
    word32 primeSz
)

function wc_DhExportParamsRaw

int wc_DhExportParamsRaw(
    DhKey * dh,
    byte * p,
    word32 * pSz,
    byte * q,
    word32 * qSz,
    byte * g,
    word32 * gSz
)

function wc_DhGenerateParams

int wc_DhGenerateParams(
    WC_RNG * rng,
    int modSz,
    DhKey * dh
)

function wc_DhSetCheckKey

int wc_DhSetCheckKey(
    DhKey * key,
    const byte * p,
    word32 pSz,
    const byte * g,
    word32 gSz,
    const byte * q,
    word32 qSz,
    int trusted,
    WC_RNG * rng
)

function wc_DhSetKey_ex

int wc_DhSetKey_ex(
    DhKey * key,
    const byte * p,
    word32 pSz,
    const byte * g,
    word32 gSz,
    const byte * q,
    word32 qSz
)

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