コンテンツにスキップ

Algorithms - ECC

Functions

Name
int wc_ecc_make_key(WC_RNG * rng, int keysize, ecc_key * key)
この関数は新しいECC_KEYを生成し、それをキーに格納します。
int wc_ecc_make_key_ex(WC_RNG * rng, int keysize, ecc_key * key, int curve_id)
この関数は新しいECC_KEYを生成し、それをキーに格納します。
int wc_ecc_check_key(ecc_key * key)
ECCキーの有効性を有効にします。
void wc_ecc_key_free(ecc_key * key)
この関数は、使用された後にECC_KEYキーを解放します。 Example
int wc_ecc_shared_secret(ecc_key * private_key, ecc_key * public_key, byte * out, word32 * outlen)
この関数は、ローカル秘密鍵と受信した公開鍵を使用して新しい秘密鍵を生成します。この共有秘密鍵をバッファアウトに格納し、出力バッファに書き込まれたバイト数を保持するためにoutlentenを更新します。
int wc_ecc_shared_secret_ex(ecc_key * private_key, ecc_point * point, byte * out, word32 * outlen)
秘密鍵とパブリックポイントの間にECC共有秘密を作成します。
int wc_ecc_sign_hash(const byte * in, word32 inlen, byte * out, word32 * outlen, WC_RNG * rng, ecc_key * key)
この関数は、信頼性を保証するためにECC_KEYオブジェクトを使用してメッセージダイジェストに署名します。
int wc_ecc_sign_hash_ex(const byte * in, word32 inlen, WC_RNG * rng, ecc_key * key, mp_int * r, mp_int * s)
メッセージダイジェストに署名します。
int wc_ecc_verify_hash(const byte * sig, word32 siglen, const byte * hash, word32 hashlen, int * stat, ecc_key * key)
この関数は、真正性を確保するためにハッシュのECCシグネチャを検証します。答えを介して、有効な署名に対応する1、無効な署名に対応する0で答えを返します。
int wc_ecc_verify_hash_ex(mp_int * r, mp_int * s, const byte * hash, word32 hashlen, int * stat, ecc_key * key)
ECC署名を確認してください。結果はstatに書き込まれます。1が有効で、0が無効です。注:有効なテストに戻り値を使用しないでください。statのみを使用してください。
int wc_ecc_init(ecc_key * key)
この関数は、メッセージ検証または鍵交渉で将来の使用のためにECC_KEYオブジェクトを初期化します。
int wc_ecc_init_ex(ecc_key * key, void * heap, int devId)
この関数は、メッセージ検証または鍵交渉で将来の使用のためにECC_KEYオブジェクトを初期化します。
ecc_key * wc_ecc_key_new(void * heap)
この関数はユーザー定義ヒープを使用し、キー構造のスペースを割り当てます。
int wc_ecc_free(ecc_key * key)
この関数は、使用後にECC_KEYオブジェクトを解放します。
void wc_ecc_fp_free(void )
この関数は固定小数点キャッシュを解放します。これはECCで使用でき、計算時間を高速化します。この機能を使用するには、FP_ECC(固定小数点ECC)を定義する必要があります。
int wc_ecc_is_valid_idx(int n)
ECC IDXが有効かどうかを確認します。
ecc_point * wc_ecc_new_point(void )
新しいECCポイントを割り当てます。
void wc_ecc_del_point(ecc_point * p)
メモリからECCポイントを解放します。
int wc_ecc_copy_point(ecc_point * p, ecc_point * r)
あるポイントの値を別のポイントにコピーします。
int wc_ecc_cmp_point(ecc_point * a, ecc_point * b)
ポイントの値を別のものと比較してください。
int wc_ecc_point_is_at_infinity(ecc_point * p)
ポイントが無限大にあるかどうかを確認します。返品1が無限大である場合は0、そうでない場合は0、<0エラー時の0
int wc_ecc_mulmod(mp_int * k, ecc_point * G, ecc_point * R, mp_int * a, mp_int * modulus, int map)
ECC固定点乗算を実行します。
int wc_ecc_export_x963(ecc_key * key, byte * out, word32 * outLen)
この関数はECCキーをECC_KEY構造体からエクスポートし、結果をOUTに格納します。キーはANSI X9.63フォーマットに保存されます。outlenの出力バッファに書き込まれたバイトを格納します。
int wc_ecc_export_x963_ex(ecc_key * key, byte * out, word32 * outLen, int compressed)
この関数はECCキーをECC_KEY構造体からエクスポートし、結果をOUTに格納します。キーはANSI X9.63フォーマットに保存されます。outlenの出力バッファに書き込まれたバイトを格納します。この関数は、圧縮されたパラメータを介して証明書を圧縮する追加のオプションを使用する。このパラメータがtrueの場合、キーはANSI X9.63圧縮形式で保存されます。
int wc_ecc_import_x963(const byte * in, word32 inLen, ecc_key * key)
この関数は、ANSI X9.63形式で保存されているキーを含むバッファからパブリックECCキーをインポートします。この関数は、圧縮キーがhand_comp_keyオプションを介してコンパイル時に有効になっている限り、圧縮キーと非圧縮キーの両方を処理します。
int wc_ecc_import_private_key(const byte * priv, word32 privSz, const byte * pub, word32 pubSz, ecc_key * key)
この関数は、生の秘密鍵を含むバッファと、ANSI X9.63フォーマットされた公開鍵を含む2番目のバッファーからパブリック/プライベートECCキーのペアをインポートします。この関数は、圧縮キーがhand_comp_keyオプションを介してコンパイル時に有効になっている限り、圧縮キーと非圧縮キーの両方を処理します。
int wc_ecc_rs_to_sig(const char * r, const char * s, byte * out, word32 * outlen)
この関数は、ECCシグネチャのR部分とS部分をDER符号化ECDSAシグネチャに変換します。この機能は、outlenでは、出力バッファに書き込まれた長さも記憶されています。
int wc_ecc_import_raw(ecc_key * key, const char * qx, const char * qy, const char * d, const char * curveName)
この関数は、ECC署名のRAW成分を持つECC_KEY構造体を埋めます。
int wc_ecc_export_private_only(ecc_key * key, byte * out, word32 * outLen)
この関数は、ECC_KEY構造体から秘密鍵のみをエクスポートします。秘密鍵をバッファアウトに格納し、outlenにこのバッファに書き込まれたバイトを設定します。
int wc_ecc_export_point_der(const int curve_idx, ecc_point * point, byte * out, word32 * outLen)
DERへのエクスポートポイント。
int wc_ecc_import_point_der(byte * in, word32 inLen, const int curve_idx, ecc_point * point)
Derフォーマットからのインポートポイント。
int wc_ecc_size(ecc_key * key)
この関数は、ecc_key構造体のキーサイズをオクテットで返します。
int wc_ecc_sig_size_calc(int sz)
この関数は、次のようにして指定されたECCシグネチャの最悪の場合のサイズを返します。(KEYSZ * 2)+ SIG_HEADER_SZ + ECC_MAX_PAD_SZ。実際のシグネチャサイズは、WC_ECC_SIGN_HASHで計算できます。
int wc_ecc_sig_size(ecc_key * key)
この関数は、次のようにして指定されたECCシグネチャの最悪の場合のサイズを返します。(KEYSZ * 2)+ SIG_HEADER_SZ + ECC_MAX_PAD_SZ。実際のシグネチャサイズは、WC_ECC_SIGN_HASHで計算できます。
ecEncCtx * wc_ecc_ctx_new(int flags, WC_RNG * rng)
この機能は、ECCとの安全なメッセージ交換を可能にするために、新しいECCコンテキストオブジェクトのスペースを割り当て、初期化します。
void wc_ecc_ctx_free(ecEncCtx * )
この関数は、メッセージの暗号化と復号化に使用されるECENCCTXオブジェクトを解放します。
int wc_ecc_ctx_reset(ecEncCtx * ctx, WC_RNG * rng)
この関数はECENCCTX構造をリセットして、新しいコンテキストオブジェクトを解放し、新しいコンテキストオブジェクトを割り当てます。
int wc_ecc_ctx_set_algo(ecEncCtx * ctx, byte encAlgo, byte kdfAlgo, byte macAlgo)
この関数は、wc_ecc_ctx_newの後にオプションで呼び出されることができます。暗号化、KDF、およびMACアルゴリズムをECENCENCCTXオブジェクトに設定します。
const byte * wc_ecc_ctx_get_own_salt(ecEncCtx * )
この関数はECENCENCCTXオブジェクトのソルトを返します。この関数は、ECENCCTXの状態がECSRV_INITまたはECCLI_INITの場合にのみ呼び出す必要があります。
int wc_ecc_ctx_set_peer_salt(ecEncCtx * ctx, const byte * salt)
この関数は、ECENCENCCTXオブジェクトのピアソルトを設定します。
int wc_ecc_ctx_set_info(ecEncCtx * ctx, const byte * info, int sz)
この関数は、wc_ecc_ctx_set_peer_saltの前後にオプションで呼び出されることができます。ECENCCTXオブジェクトのオプションの情報を設定します。
int wc_ecc_encrypt(ecc_key * privKey, ecc_key * pubKey, const byte * msg, word32 msgSz, byte * out, word32 * outSz, ecEncCtx * ctx)
この関数は指定された入力メッセージをMSGからOUTに暗号化します。この関数はパラメータとしてオプションのCTXオブジェクトを取ります。提供されている場合、ECENCCTXのEncalgo、Kdfalgo、およびMacalgoに基づいて暗号化が進みます。CTXが指定されていない場合、処理はデフォルトのアルゴリズム、ECAES_128_CBC、ECHKDF_SHA256、ECHMAC_SHA256で完了します。この機能は、メッセージがCTXで指定された暗号化タイプに従って埋め込まれている必要があります。
int wc_ecc_encrypt_ex(ecc_key * privKey, ecc_key * pubKey, const byte * msg, word32 msgSz, byte * out, word32 * outSz, ecEncCtx * ctx, int compressed)
この関数は指定された入力メッセージをMSGからOUTに暗号化します。この関数はパラメータとしてオプションのCTXオブジェクトを取ります。提供されている場合、ECENCCTXのEncalgo、Kdfalgo、およびMacalgoに基づいて暗号化が進みます。CTXが指定されていない場合、処理はデフォルトのアルゴリズム、ECAES_128_CBC、ECHKDF_SHA256、ECHMAC_SHA256で完了します。この機能は、メッセージがCTXで指定された暗号化タイプに従って埋め込まれている必要があります。
int wc_ecc_decrypt(ecc_key * privKey, ecc_key * pubKey, const byte * msg, word32 msgSz, byte * out, word32 * outSz, ecEncCtx * ctx)
この関数はMSGからOUTへの暗号文を復号化します。この関数はパラメータとしてオプションのCTXオブジェクトを取ります。提供されている場合、ECENCCTXのEncalgo、Kdfalgo、およびMacalgoに基づいて暗号化が進みます。CTXが指定されていない場合、処理はデフォルトのアルゴリズム、ECAES_128_CBC、ECHKDF_SHA256、ECHMAC_SHA256で完了します。この機能は、メッセージがCTXで指定された暗号化タイプに従って埋め込まれている必要があります。
int wc_ecc_set_nonblock(ecc_key * key, ecc_nb_ctx_t * ctx)
非ブロック操作のためのECCサポートを有効にします。次のビルドオプションを使用した単精度(SP)数学でサポートされています.WolfSSL_SP_SP_SMALL WOLFSSL_SP_NO_MALLOC WC_ECC_NONBLOCK

Functions Documentation

function wc_ecc_make_key

int wc_ecc_make_key(
    WC_RNG * rng,
    int keysize,
    ecc_key * key
)

この関数は新しいECC_KEYを生成し、それをキーに格納します。

Parameters:

  • rng キーを生成するための初期化されたRNGオブジェクトへのポインタ
  • keysize ECC_KEYの希望の長さ Example
ecc_key key;
wc_ecc_init(&key);
WC_RNG rng;
wc_InitRng(&rng);
wc_ecc_make_key(&rng, 32, &key); // initialize 32 byte ecc key

See:

Return:

  • 0 成功に戻りました。
  • ECC_BAD_ARG_E RNGまたはキーがNULLに評価された場合に返されます
  • BAD_FUNC_ARG 指定されたキーサイズがサポートされているキーの正しい範囲にない場合に返されます。
  • MEMORY_E ECCキーの計算中にメモリの割り当てエラーがある場合に返されます。
  • MP_INIT_E ECCキーの計算中にエラーが発生した場合に返される可能性があります
  • MP_READ_E ECCキーの計算中にエラーが発生した場合に返される可能性があります
  • MP_CMP_E ECCキーの計算中にエラーが発生した場合に返される可能性があります
  • MP_INVMOD_E ECCキーの計算中にエラーが発生した場合に返される可能性があります
  • MP_EXPTMOD_E ECCキーの計算中にエラーが発生した場合に返される可能性があります
  • MP_MOD_E ECCキーの計算中にエラーが発生した場合に返される可能性があります
  • MP_MUL_E ECCキーの計算中にエラーが発生した場合に返される可能性があります
  • MP_ADD_E ECCキーの計算中にエラーが発生した場合に返される可能性があります
  • MP_MULMOD_E ECCキーの計算中にエラーが発生した場合に返される可能性があります
  • MP_TO_E ECCキーの計算中にエラーが発生した場合に返される可能性があります
  • MP_MEM ECCキーの計算中にエラーが発生した場合に返される可能性があります

function wc_ecc_make_key_ex

int wc_ecc_make_key_ex(
    WC_RNG * rng,
    int keysize,
    ecc_key * key,
    int curve_id
)

この関数は新しいECC_KEYを生成し、それをキーに格納します。

Parameters:

  • key 作成したキーを保存するためのポインタ。
  • keysize CavenIDに基づいて設定されたバイト単位で作成するキーのサイズ
  • rng 鍵作成に使用されるRNG Example
ecc_key key;
int ret;
WC_RNG rng;
wc_ecc_init(&key);
wc_InitRng(&rng);
int curveId = ECC_SECP521R1;
int keySize = wc_ecc_get_curve_size_from_id(curveId);
ret = wc_ecc_make_key_ex(&rng, keySize, &key, curveId);
if (ret != MP_OKAY) {
    // error handling
}

See:

Return:

  • 0 成功に戻りました。
  • ECC_BAD_ARG_E RNGまたはキーがNULLに評価された場合に返されます
  • BAD_FUNC_ARG 指定されたキーサイズがサポートされているキーの正しい範囲にない場合に返されます。
  • MEMORY_E ECCキーの計算中にメモリの割り当てエラーがある場合に返されます。
  • MP_INIT_E ECCキーの計算中にエラーが発生した場合に返される可能性があります
  • MP_READ_E ECCキーの計算中にエラーが発生した場合に返される可能性があります
  • MP_CMP_E ECCキーの計算中にエラーが発生した場合に返される可能性があります
  • MP_INVMOD_E ECCキーの計算中にエラーが発生した場合に返される可能性があります
  • MP_EXPTMOD_E ECCキーの計算中にエラーが発生した場合に返される可能性があります
  • MP_MOD_E ECCキーの計算中にエラーが発生した場合に返される可能性があります
  • MP_MUL_E ECCキーの計算中にエラーが発生した場合に返される可能性があります
  • MP_ADD_E ECCキーの計算中にエラーが発生した場合に返される可能性があります
  • MP_MULMOD_E ECCキーの計算中にエラーが発生した場合に返される可能性があります
  • MP_TO_E ECCキーの計算中にエラーが発生した場合に返される可能性があります
  • MP_MEM ECCキーの計算中にエラーが発生した場合に返される可能性があります

function wc_ecc_check_key

int wc_ecc_check_key(
    ecc_key * key
)

ECCキーの有効性を有効にします。

See: wc_ecc_point_is_at_infinity

Return:

  • MP_OKAY 成功、キーは大丈夫です。
  • BAD_FUNC_ARG キーがNULLの場合は返します。
  • ECC_INF_E WC_ECC_POINT_IS_AT_INFINITYが1を返す場合に返します。 Example
ecc_key key;
WC_RNG rng;
int check_result;
wc_ecc_init(&key);
wc_InitRng(&rng);
wc_ecc_make_key(&rng, 32, &key);
check_result = wc_ecc_check_key(&key);

if (check_result == MP_OKAY)
{
    // key check succeeded
}
else
{
    // key check failed
}

function wc_ecc_key_free

void wc_ecc_key_free(
    ecc_key * key
)

この関数は、使用された後にECC_KEYキーを解放します。 Example

See:

// initialize key and perform ECC operations
...
wc_ecc_key_free(&key);

function wc_ecc_shared_secret

int wc_ecc_shared_secret(
    ecc_key * private_key,
    ecc_key * public_key,
    byte * out,
    word32 * outlen
)

この関数は、ローカル秘密鍵と受信した公開鍵を使用して新しい秘密鍵を生成します。この共有秘密鍵をバッファアウトに格納し、出力バッファに書き込まれたバイト数を保持するためにoutlentenを更新します。

Parameters:

  • private_key ローカル秘密鍵を含むECC_KEY構造体へのポインタ
  • public_key 受信した公開鍵を含むECC_Key構造体へのポインタ
  • out 生成された共有秘密鍵を保存する出力バッファへのポインタ Example
ecc_key priv, pub;
WC_RNG rng;
byte secret[1024]; // can hold 1024 byte shared secret key
word32 secretSz = sizeof(secret);
int ret;

wc_InitRng(&rng); // initialize rng
wc_ecc_init(&priv); // initialize key
wc_ecc_make_key(&rng, 32, &priv); // make public/private key pair
// receive public key, and initialise into pub
ret = wc_ecc_shared_secret(&priv, &pub, secret, &secretSz);
// generate secret key
if ( ret != 0 ) {
    // error generating shared secret key
}

See:

Return:

  • 0 共有秘密鍵の生成に成功したときに返されます
  • BAD_FUNC_ARG 入力パラメータのいずれかがNULLに評価された場合に返されます。
  • ECC_BAD_ARG_E 引数として与えられた秘密鍵の種類がecc_privatekeyではない場合、またはパブリックキータイプ(ECC-> DPによって与えられた)が同等でない場合に返されます。
  • MEMORY_E 新しいECCポイントを生成するエラーが発生した場合
  • BUFFER_E 生成された共有秘密鍵が提供されたバッファーに格納するのに長すぎる場合に返されます
  • MP_INIT_E 共有キーの計算中にエラーが発生した場合は返される可能性があります
  • MP_READ_E 共有キーの計算中にエラーが発生した場合は返される可能性があります
  • MP_CMP_E 共有キーの計算中にエラーが発生した場合は返される可能性があります
  • MP_INVMOD_E 共有キーの計算中にエラーが発生した場合は返される可能性があります
  • MP_EXPTMOD_E 共有キーの計算中にエラーが発生した場合は返される可能性があります
  • MP_MOD_E 共有キーの計算中にエラーが発生した場合は返される可能性があります
  • MP_MUL_E 共有キーの計算中にエラーが発生した場合は返される可能性があります
  • MP_ADD_E 共有キーの計算中にエラーが発生した場合は返される可能性があります
  • MP_MULMOD_E 共有キーの計算中にエラーが発生した場合は返される可能性があります
  • MP_TO_E 共有キーの計算中にエラーが発生した場合は返される可能性があります
  • MP_MEM 共有キーの計算中にエラーが発生した場合は返される可能性があります

function wc_ecc_shared_secret_ex

int wc_ecc_shared_secret_ex(
    ecc_key * private_key,
    ecc_point * point,
    byte * out,
    word32 * outlen
)

秘密鍵とパブリックポイントの間にECC共有秘密を作成します。

Parameters:

  • private_key プライベートECCキー。
  • point 使用するポイント(公開鍵)。
  • out 共有秘密の出力先。ANSI X9.63からEC-DHに準拠しています。 Example
ecc_key key;
ecc_point* point;
byte shared_secret[];
int secret_size;
int result;

point = wc_ecc_new_point();

result = wc_ecc_shared_secret_ex(&key, point,
&shared_secret, &secret_size);

if (result != MP_OKAY)
{
    // Handle error
}

See: wc_ecc_verify_hash_ex

Return:

  • MP_OKAY 成功を示します。
  • BAD_FUNC_ARG 引数がNULLのときにエラーが返されます。
  • ECC_BAD_ARG_E private_key-> typeがecc_privatekeyまたはprivate_key-> idxが検証できない場合に返されました。
  • BUFFER_E outlenが小さすぎるとエラーが発生します。
  • MEMORY_E 新しいポイントを作成するためのエラー。
  • MP_VAL 初期化失敗が発生したときに可能です。
  • MP_MEM 初期化失敗が発生したときに可能です。

function wc_ecc_sign_hash

int wc_ecc_sign_hash(
    const byte * in,
    word32 inlen,
    byte * out,
    word32 * outlen,
    WC_RNG * rng,
    ecc_key * key
)

この関数は、信頼性を保証するためにECC_KEYオブジェクトを使用してメッセージダイジェストに署名します。

Parameters:

  • in サインするメッセージハッシュを含むバッファへのポインタ
  • inlen 署名するメッセージの長さ
  • out 生成された署名を保存するためのバッファ
  • outlen 出力バッファの最大長。メッセージ署名の生成に成功したときに書き込まれたバイトを保存します Example
ecc_key key;
WC_RNG rng;
int ret, sigSz;

byte sig[512]; // will hold generated signature
sigSz = sizeof(sig);
byte digest[] = { // initialize with message hash };
wc_InitRng(&rng); // initialize rng
wc_ecc_init(&key); // initialize key
wc_ecc_make_key(&rng, 32, &key); // make public/private key pair
ret = wc_ecc_sign_hash(digest, sizeof(digest), sig, &sigSz, &key);
if ( ret != 0 ) {
    // error generating message signature
}

See: wc_ecc_verify_hash

Return:

  • 0 メッセージダイジェストの署名を正常に生成したときに返されました
  • BAD_FUNC_ARG 入力パラメータのいずれかがNULLに評価された場合、または出力バッファが小さすぎて生成された署名を保存する場合は返されます。
  • ECC_BAD_ARG_E 入力キーが秘密鍵ではない場合、またはECC OIDが無効な場合
  • RNG_FAILURE_E RNGが満足のいくキーを正常に生成できない場合に返されます。
  • MP_INIT_E メッセージ署名の計算中にエラーが発生した場合に返される可能性があります。
  • MP_READ_E メッセージ署名の計算中にエラーが発生した場合に返される可能性があります。
  • MP_CMP_E メッセージ署名の計算中にエラーが発生した場合に返される可能性があります。
  • MP_INVMOD_E メッセージ署名の計算中にエラーが発生した場合に返される可能性があります。
  • MP_EXPTMOD_E メッセージ署名の計算中にエラーが発生した場合に返される可能性があります。
  • MP_MOD_E メッセージ署名の計算中にエラーが発生した場合に返される可能性があります。
  • MP_MUL_E メッセージ署名の計算中にエラーが発生した場合に返される可能性があります。
  • MP_ADD_E メッセージ署名の計算中にエラーが発生した場合に返される可能性があります。
  • MP_MULMOD_E メッセージ署名の計算中にエラーが発生した場合に返される可能性があります。
  • MP_TO_E メッセージ署名の計算中にエラーが発生した場合に返される可能性があります。
  • MP_MEM メッセージ署名の計算中にエラーが発生した場合に返される可能性があります。

function wc_ecc_sign_hash_ex

int wc_ecc_sign_hash_ex(
    const byte * in,
    word32 inlen,
    WC_RNG * rng,
    ecc_key * key,
    mp_int * r,
    mp_int * s
)

メッセージダイジェストに署名します。

Parameters:

  • in メッセージがサインにダイジェスト。
  • inlen ダイジェストの長さ。
  • rng WC_RNG構造体へのポインタ。
  • key プライベートECCキー。
  • r 署名のRコンポーネントの宛先。 Example
ecc_key key;
WC_RNG rng;
int ret, sigSz;
mp_int r; // destination for r component of signature.
mp_int s; // destination for s component of signature.

byte sig[512]; // will hold generated signature
sigSz = sizeof(sig);
byte digest[] = { initialize with message hash };
wc_InitRng(&rng); // initialize rng
wc_ecc_init(&key); // initialize key
mp_init(&r); // initialize r component
mp_init(&s); // initialize s component
wc_ecc_make_key(&rng, 32, &key); // make public/private key pair
ret = wc_ecc_sign_hash_ex(digest, sizeof(digest), &rng, &key, &r, &s);

if ( ret != MP_OKAY ) {
    // error generating message signature
}

See: wc_ecc_verify_hash_ex

Return:

  • MP_OKAY メッセージダイジェストの署名を正常に生成したときに返されました
  • ECC_BAD_ARG_E 入力キーが秘密鍵ではない場合、またはECC IDXが無効な場合、またはいずれかの入力パラメータがNULLに評価されている場合、または出力バッファが小さすぎて生成された署名を保存するには小さすぎる場合
  • RNG_FAILURE_E RNGが満足のいくキーを正常に生成できない場合に返されます。
  • MP_INIT_E メッセージ署名の計算中にエラーが発生した場合に返される可能性があります。
  • MP_READ_E メッセージ署名の計算中にエラーが発生した場合に返される可能性があります。
  • MP_CMP_E メッセージ署名の計算中にエラーが発生した場合に返される可能性があります。
  • MP_INVMOD_E メッセージ署名の計算中にエラーが発生した場合に返される可能性があります。
  • MP_EXPTMOD_E メッセージ署名の計算中にエラーが発生した場合に返される可能性があります。
  • MP_MOD_E メッセージ署名の計算中にエラーが発生した場合に返される可能性があります。
  • MP_MUL_E メッセージ署名の計算中にエラーが発生した場合に返される可能性があります。
  • MP_ADD_E メッセージ署名の計算中にエラーが発生した場合に返される可能性があります。
  • MP_MULMOD_E メッセージ署名の計算中にエラーが発生した場合に返される可能性があります。
  • MP_TO_E メッセージ署名の計算中にエラーが発生した場合に返される可能性があります。
  • MP_MEM メッセージ署名の計算中にエラーが発生した場合に返される可能性があります。

function wc_ecc_verify_hash

int wc_ecc_verify_hash(
    const byte * sig,
    word32 siglen,
    const byte * hash,
    word32 hashlen,
    int * stat,
    ecc_key * key
)

この関数は、真正性を確保するためにハッシュのECCシグネチャを検証します。答えを介して、有効な署名に対応する1、無効な署名に対応する0で答えを返します。

Parameters:

  • sig 確認する署名を含むバッファへのポインタ
  • siglen 検証する署名の長さ
  • hash 確認されたメッセージのハッシュを含むバッファへのポインタ
  • hashlen 認証されたメッセージのハッシュの長さ
  • stat 検証の結果へのポインタ。1メッセージが正常に認証されたことを示します Example
ecc_key key;
int ret, verified = 0;

byte sig[1024] { initialize with received signature };
byte digest[] = { initialize with message hash };
// initialize key with received public key
ret = wc_ecc_verify_hash(sig, sizeof(sig), digest,sizeof(digest),
&verified, &key);
if ( ret != 0 ) {
    // error performing verification
} else if ( verified == 0 ) {
    // the signature is invalid
}

See:

Return:

  • 0 署名検証に正常に実行されたときに返されます。注:これは署名が検証されていることを意味するわけではありません。信頼性情報は代わりにSTATで格納されます
  • BAD_FUNC_ARG 返された入力パラメータはNULLに評価されます
  • MEMORY_E メモリの割り当て中にエラーが発生した場合に返されます
  • MP_INIT_E メッセージ署名の計算中にエラーが発生した場合に返される可能性があります。
  • MP_READ_E メッセージ署名の計算中にエラーが発生した場合に返される可能性があります。
  • MP_CMP_E メッセージ署名の計算中にエラーが発生した場合に返される可能性があります。
  • MP_INVMOD_E メッセージ署名の計算中にエラーが発生した場合に返される可能性があります。
  • MP_EXPTMOD_E メッセージ署名の計算中にエラーが発生した場合に返される可能性があります。
  • MP_MOD_E メッセージ署名の計算中にエラーが発生した場合に返される可能性があります。
  • MP_MUL_E メッセージ署名の計算中にエラーが発生した場合に返される可能性があります。
  • MP_ADD_E メッセージ署名の計算中にエラーが発生した場合に返される可能性があります。
  • MP_MULMOD_E メッセージ署名の計算中にエラーが発生した場合に返される可能性があります。
  • MP_TO_E メッセージ署名の計算中にエラーが発生した場合に返される可能性があります。
  • MP_MEM メッセージ署名の計算中にエラーが発生した場合に返される可能性があります。

function wc_ecc_verify_hash_ex

int wc_ecc_verify_hash_ex(
    mp_int * r,
    mp_int * s,
    const byte * hash,
    word32 hashlen,
    int * stat,
    ecc_key * key
)

ECC署名を確認してください。結果はstatに書き込まれます。1が有効で、0が無効です。注:有効なテストに戻り値を使用しないでください。statのみを使用してください。

Parameters:

  • r 検証する署名Rコンポーネント
  • s 検証するシグネチャSコンポーネント
  • hash 署名されたハッシュ(メッセージダイジェスト)
  • hashlen ハッシュの長さ(オクテット)
  • stat 署名の結果、1 ==有効、0 ==無効 Example
mp_int r;
mp_int s;
int stat;
byte hash[] = { Some hash }
ecc_key key;

if(wc_ecc_verify_hash_ex(&r, &s, hash, hashlen, &stat, &key) == MP_OKAY)
{
    // Check stat
}

See: wc_ecc_verify_hash

Return:

  • MP_OKAY 成功した場合(署名が無効であっても)
  • ECC_BAD_ARG_E 引数がNULLの場合、またはkey-idxが無効な場合は返します。
  • MEMORY_E INTまたはポイントの割り当て中にエラーが発生しました。

function wc_ecc_init

int wc_ecc_init(
    ecc_key * key
)

この関数は、メッセージ検証または鍵交渉で将来の使用のためにECC_KEYオブジェクトを初期化します。

See:

Return:

  • 0 ECC_Keyオブジェクトの初期化に成功したときに返されます
  • MEMORY_E メモリの割り当て中にエラーが発生した場合に返されます Example
ecc_key key;
wc_ecc_init(&key);

function wc_ecc_init_ex

int wc_ecc_init_ex(
    ecc_key * key,
    void * heap,
    int devId
)

この関数は、メッセージ検証または鍵交渉で将来の使用のためにECC_KEYオブジェクトを初期化します。

Parameters:

  • key 初期化するECC_Keyオブジェクトへのポインタ
  • devId 非同期ハードウェアで使用するID Example
ecc_key key;
wc_ecc_init_ex(&key, heap, devId);

See:

Return:

  • 0 ECC_Keyオブジェクトの初期化に成功したときに返されます
  • MEMORY_E メモリの割り当て中にエラーが発生した場合に返されます

function wc_ecc_key_new

ecc_key * wc_ecc_key_new(
    void * heap
)

この関数はユーザー定義ヒープを使用し、キー構造のスペースを割り当てます。

See:

Return: 0 ECC_Keyオブジェクトの初期化に成功したときに返されます Example

wc_ecc_key_new(&heap);

function wc_ecc_free

int wc_ecc_free(
    ecc_key * key
)

この関数は、使用後にECC_KEYオブジェクトを解放します。

See: wc_ecc_init

Return: int integerがWolfSSLエラーまたは成功状況を示すことを返しました。 Example

// initialize key and perform secure exchanges
...
wc_ecc_free(&key);

function wc_ecc_fp_free

void wc_ecc_fp_free(
    void 
)

この関数は固定小数点キャッシュを解放します。これはECCで使用でき、計算時間を高速化します。この機能を使用するには、FP_ECC(固定小数点ECC)を定義する必要があります。

See: wc_ecc_free

Return: none いいえ返します。 Example

ecc_key key;
// initialize key and perform secure exchanges
...

wc_ecc_fp_free();

function wc_ecc_is_valid_idx

int wc_ecc_is_valid_idx(
    int n
)

ECC IDXが有効かどうかを確認します。

See: none

Return:

  • 1 有効な場合は返品してください。
  • 0 無効な場合は返します。 Example
ecc_key key;
WC_RNG rng;
int is_valid;
wc_ecc_init(&key);
wc_InitRng(&rng);
wc_ecc_make_key(&rng, 32, &key);
is_valid = wc_ecc_is_valid_idx(key.idx);
if (is_valid == 1)
{
    // idx is valid
}
else if (is_valid == 0)
{
    // idx is not valid
}

function wc_ecc_new_point

ecc_point * wc_ecc_new_point(
    void 
)

新しいECCポイントを割り当てます。

See:

Return:

  • p 新しく割り当てられたポイント。
  • NULL エラー時にNULLを返します。 Example
ecc_point* point;
point = wc_ecc_new_point();
if (point == NULL)
{
    // Handle point creation error
}
// Do stuff with point

function wc_ecc_del_point

void wc_ecc_del_point(
    ecc_point * p
)

メモリからECCポイントを解放します。

See:

Return: none いいえ返します。 Example

ecc_point* point;
point = wc_ecc_new_point();
if (point == NULL)
{
    // Handle point creation error
}
// Do stuff with point
wc_ecc_del_point(point);

function wc_ecc_copy_point

int wc_ecc_copy_point(
    ecc_point * p,
    ecc_point * r
)

あるポイントの値を別のポイントにコピーします。

Parameters:

  • p コピーするポイント。 Example
ecc_point* point;
ecc_point* copied_point;
int copy_return;

point = wc_ecc_new_point();
copy_return = wc_ecc_copy_point(point, copied_point);
if (copy_return != MP_OKAY)
{
    // Handle error
}

See:

Return:

  • ECC_BAD_ARG_E PまたはRがNULLのときにスローされたエラー。
  • MP_OKAY ポイントが正常にコピーされました
  • ret 内部関数からのエラー。になることができます...

function wc_ecc_cmp_point

int wc_ecc_cmp_point(
    ecc_point * a,
    ecc_point * b
)

ポイントの値を別のものと比較してください。

Parameters:

  • a 比較する最初のポイント。 Example
ecc_point* point;
ecc_point* point_to_compare;
int cmp_result;

point = wc_ecc_new_point();
point_to_compare = wc_ecc_new_point();
cmp_result = wc_ecc_cmp_point(point, point_to_compare);
if (cmp_result == BAD_FUNC_ARG)
{
    // arguments are invalid
}
else if (cmp_result == MP_EQ)
{
    // Points are equal
}
else
{
    // Points are not equal
}

See:

Return:

  • BAD_FUNC_ARG 1つまたは両方の引数はnullです。
  • MP_EQ ポイントは同じです。
  • ret mp_ltまたはmp_gtのどちらかで、ポイントが等しくないことを意味します。

function wc_ecc_point_is_at_infinity

int wc_ecc_point_is_at_infinity(
    ecc_point * p
)

ポイントが無限大にあるかどうかを確認します。返品1が無限大である場合は0、そうでない場合は0、<0エラー時の0

See:

Return:

  • 1 Pは無限大です。
  • 0 Pは無限大ではありません。
  • <0 エラー。 Example
ecc_point* point;
int is_infinity;
point = wc_ecc_new_point();

is_infinity = wc_ecc_point_is_at_infinity(point);
if (is_infinity < 0)
{
    // Handle error
}
else if (is_infinity == 0)
{
    // Point is not at infinity
}
else if (is_infinity == 1)
{
    // Point is at infinity
}

function wc_ecc_mulmod

int wc_ecc_mulmod(
    mp_int * k,
    ecc_point * G,
    ecc_point * R,
    mp_int * a,
    mp_int * modulus,
    int map
)

ECC固定点乗算を実行します。

Parameters:

  • k 計量。
  • G 乗算する基点。
  • R 商品の目的地
  • modulus 曲線の弾性率 Example
ecc_point* base;
ecc_point* destination;
// Initialize points
base = wc_ecc_new_point();
destination = wc_ecc_new_point();
// Setup other arguments
mp_int multiplicand;
mp_int modulus;
int map;

See: none

Return:

  • MP_OKAY 成功した操作で返します。
  • MP_INIT_E 複数のPrecision Integer(MP_INT)ライブラリで使用するための整数を初期化するエラーがある場合に返されます。

function wc_ecc_export_x963

int wc_ecc_export_x963(
    ecc_key * key,
    byte * out,
    word32 * outLen
)

この関数はECCキーをECC_KEY構造体からエクスポートし、結果をOUTに格納します。キーはANSI X9.63フォーマットに保存されます。outlenの出力バッファに書き込まれたバイトを格納します。

Parameters:

  • key エクスポートするECC_KEYオブジェクトへのポインタ
  • out ANSI X9.63フォーマット済みキーを保存するバッファへのポインタ Example
int ret;
byte buff[1024];
word32 buffSz = sizeof(buff);

ecc_key key;
// initialize key, make key
ret = wc_ecc_export_x963(&key, buff, &buffSz);
if ( ret != 0) {
    // error exporting key
}

See:

Return:

  • 0 ECC_KEYのエクスポートに正常に返されました
  • LENGTH_ONLY_E 出力バッファがNULLに評価されている場合は返されますが、他の2つの入力パラメータは有効です。関数がキーを保存するのに必要な長さを返すだけであることを示します
  • ECC_BAD_ARG_E 入力パラメータのいずれかがNULLの場合、またはキーがサポートされていない場合(無効なインデックスがあります)
  • BUFFER_E 出力バッファが小さすぎてECCキーを保存する場合は返されます。出力バッファが小さすぎると、必要なサイズはoutlenに返されます。
  • MEMORY_E xmallocでメモリを割り当てるエラーがある場合
  • MP_INIT_E ECC_KEYの処理中にエラーが発生した場合に返される可能性があります
  • MP_READ_E ECC_KEYの処理中にエラーが発生した場合に返される可能性があります
  • MP_CMP_E ECC_KEYの処理中にエラーが発生した場合に返される可能性があります
  • MP_INVMOD_E ECC_KEYの処理中にエラーが発生した場合に返される可能性があります
  • MP_EXPTMOD_E ECC_KEYの処理中にエラーが発生した場合に返される可能性があります
  • MP_MOD_E ECC_KEYの処理中にエラーが発生した場合に返される可能性があります
  • MP_MUL_E ECC_KEYの処理中にエラーが発生した場合に返される可能性があります
  • MP_ADD_E ECC_KEYの処理中にエラーが発生した場合に返される可能性があります
  • MP_MULMOD_E ECC_KEYの処理中にエラーが発生した場合に返される可能性があります
  • MP_TO_E ECC_KEYの処理中にエラーが発生した場合に返される可能性があります
  • MP_MEM ECC_KEYの処理中にエラーが発生した場合に返される可能性があります

function wc_ecc_export_x963_ex

int wc_ecc_export_x963_ex(
    ecc_key * key,
    byte * out,
    word32 * outLen,
    int compressed
)

この関数はECCキーをECC_KEY構造体からエクスポートし、結果をOUTに格納します。キーはANSI X9.63フォーマットに保存されます。outlenの出力バッファに書き込まれたバイトを格納します。この関数は、圧縮されたパラメータを介して証明書を圧縮する追加のオプションを使用する。このパラメータがtrueの場合、キーはANSI X9.63圧縮形式で保存されます。

Parameters:

  • key エクスポートするECC_KEYオブジェクトへのポインタ
  • out ANSI X9.63フォーマット済みキーを保存するバッファへのポインタ
  • outLen 出力バッファのサイズ。キーの保存に成功した場合は、出力バッファに書き込まれたバイトを保持します。 Example
int ret;
byte buff[1024];
word32 buffSz = sizeof(buff);
ecc_key key;
// initialize key, make key
ret = wc_ecc_export_x963_ex(&key, buff, &buffSz, 1);
if ( ret != 0) {
    // error exporting key
}

See:

Return:

  • 0 ECC_KEYのエクスポートに正常に返されました
  • NOT_COMPILED_IN hand_comp_keyがコンパイル時に有効になっていない場合は返されますが、キーは圧縮形式で要求されました
  • LENGTH_ONLY_E 出力バッファがNULLに評価されている場合は返されますが、他の2つの入力パラメータは有効です。関数がキーを保存するのに必要な長さを返すだけであることを示します
  • ECC_BAD_ARG_E 入力パラメータのいずれかがNULLの場合、またはキーがサポートされていない場合(無効なインデックスがあります)
  • BUFFER_E 出力バッファが小さすぎてECCキーを保存する場合は返されます。出力バッファが小さすぎると、必要なサイズはoutlenに返されます。
  • MEMORY_E xmallocでメモリを割り当てるエラーがある場合
  • MP_INIT_E ECC_KEYの処理中にエラーが発生した場合に返される可能性があります
  • MP_READ_E ECC_KEYの処理中にエラーが発生した場合に返される可能性があります
  • MP_CMP_E ECC_KEYの処理中にエラーが発生した場合に返される可能性があります
  • MP_INVMOD_E ECC_KEYの処理中にエラーが発生した場合に返される可能性があります
  • MP_EXPTMOD_E ECC_KEYの処理中にエラーが発生した場合に返される可能性があります
  • MP_MOD_E ECC_KEYの処理中にエラーが発生した場合に返される可能性があります
  • MP_MUL_E ECC_KEYの処理中にエラーが発生した場合に返される可能性があります
  • MP_ADD_E ECC_KEYの処理中にエラーが発生した場合に返される可能性があります
  • MP_MULMOD_E ECC_KEYの処理中にエラーが発生した場合に返される可能性があります
  • MP_TO_E ECC_KEYの処理中にエラーが発生した場合に返される可能性があります
  • MP_MEM ECC_KEYの処理中にエラーが発生した場合に返される可能性があります

function wc_ecc_import_x963

int wc_ecc_import_x963(
    const byte * in,
    word32 inLen,
    ecc_key * key
)

この関数は、ANSI X9.63形式で保存されているキーを含むバッファからパブリックECCキーをインポートします。この関数は、圧縮キーがhand_comp_keyオプションを介してコンパイル時に有効になっている限り、圧縮キーと非圧縮キーの両方を処理します。

Parameters:

  • in ANSI x9.63フォーマットされたECCキーを含むバッファへのポインタ
  • inLen 入力バッファの長さ Example
int ret;
byte buff[] = { initialize with ANSI X9.63 formatted key };

ecc_key pubKey;
wc_ecc_init(&pubKey);

ret = wc_ecc_import_x963(buff, sizeof(buff), &pubKey);
if ( ret != 0) {
    // error importing key
}

See:

Return:

  • 0 ECC_KEYのインポートに成功しました
  • NOT_COMPILED_IN hand_comp_keyがコンパイル時に有効になっていない場合は返されますが、キーは圧縮形式で保存されます。
  • ECC_BAD_ARG_E INまたはKEYがNULLに評価された場合、またはInlenが偶数の場合(X9.63規格によれば、キーは奇数でなければなりません)。
  • MEMORY_E メモリの割り当て中にエラーが発生した場合に返されます
  • ASN_PARSE_E ECCキーの解析中にエラーがある場合は返されます。ECCキーが有効なANSI X9.63フォーマットに格納されていないことを示すことがあります。
  • IS_POINT_E エクスポートされた公開鍵がECC曲線上の点ではない場合に返されます
  • MP_INIT_E ECC_KEYの処理中にエラーが発生した場合に返される可能性があります
  • MP_READ_E ECC_KEYの処理中にエラーが発生した場合に返される可能性があります
  • MP_CMP_E ECC_KEYの処理中にエラーが発生した場合に返される可能性があります
  • MP_INVMOD_E ECC_KEYの処理中にエラーが発生した場合に返される可能性があります
  • MP_EXPTMOD_E ECC_KEYの処理中にエラーが発生した場合に返される可能性があります
  • MP_MOD_E ECC_KEYの処理中にエラーが発生した場合に返される可能性があります
  • MP_MUL_E ECC_KEYの処理中にエラーが発生した場合に返される可能性があります
  • MP_ADD_E ECC_KEYの処理中にエラーが発生した場合に返される可能性があります
  • MP_MULMOD_E ECC_KEYの処理中にエラーが発生した場合に返される可能性があります
  • MP_TO_E ECC_KEYの処理中にエラーが発生した場合に返される可能性があります
  • MP_MEM ECC_KEYの処理中にエラーが発生した場合に返される可能性があります

function wc_ecc_import_private_key

int wc_ecc_import_private_key(
    const byte * priv,
    word32 privSz,
    const byte * pub,
    word32 pubSz,
    ecc_key * key
)

この関数は、生の秘密鍵を含むバッファと、ANSI X9.63フォーマットされた公開鍵を含む2番目のバッファーからパブリック/プライベートECCキーのペアをインポートします。この関数は、圧縮キーがhand_comp_keyオプションを介してコンパイル時に有効になっている限り、圧縮キーと非圧縮キーの両方を処理します。

Parameters:

  • priv RAW秘密鍵を含むバッファへのポインタ
  • privSz 秘密鍵バッファのサイズ
  • pub ANSI x9.63フォーマットされたECC公開鍵を含むバッファへのポインタ
  • pubSz 公開鍵入力バッファの長さ Example
int ret;
byte pub[] = { initialize with ANSI X9.63 formatted key };
byte priv[] = { initialize with the raw private key };

ecc_key key;
wc_ecc_init(&key);
ret = wc_ecc_import_private_key(priv, sizeof(priv), pub, sizeof(pub),
&key);
if ( ret != 0) {
    // error importing key
}

See:

Return:

  • 0 habe_comp_keyがコンパイル時に有効になっていない場合は、ecc_key not_compiled_inを正常にインポートしましたが、キーは圧縮形式で保存されます。
  • ECC_BAD_ARG_E INまたはKEYがNULLに評価された場合、またはInlenが偶数の場合(X9.63規格によれば、キーは奇数でなければなりません)。
  • MEMORY_E メモリの割り当て中にエラーが発生した場合に返されます
  • ASN_PARSE_E ECCキーの解析中にエラーがある場合は返されます。ECCキーが有効なANSI X9.63フォーマットに格納されていないことを示すことがあります。
  • IS_POINT_E エクスポートされた公開鍵がECC曲線上の点ではない場合に返されます
  • MP_INIT_E ECC_KEYの処理中にエラーが発生した場合に返される可能性があります
  • MP_READ_E ECC_KEYの処理中にエラーが発生した場合に返される可能性があります
  • MP_CMP_E ECC_KEYの処理中にエラーが発生した場合に返される可能性があります
  • MP_INVMOD_E ECC_KEYの処理中にエラーが発生した場合に返される可能性があります
  • MP_EXPTMOD_E ECC_KEYの処理中にエラーが発生した場合に返される可能性があります
  • MP_MOD_E ECC_KEYの処理中にエラーが発生した場合に返される可能性があります
  • MP_MUL_E ECC_KEYの処理中にエラーが発生した場合に返される可能性があります
  • MP_ADD_E ECC_KEYの処理中にエラーが発生した場合に返される可能性があります
  • MP_MULMOD_E ECC_KEYの処理中にエラーが発生した場合に返される可能性があります
  • MP_TO_E ECC_KEYの処理中にエラーが発生した場合に返される可能性があります
  • MP_MEM ECC_KEYの処理中にエラーが発生した場合に返される可能性があります

function wc_ecc_rs_to_sig

int wc_ecc_rs_to_sig(
    const char * r,
    const char * s,
    byte * out,
    word32 * outlen
)

この関数は、ECCシグネチャのR部分とS部分をDER符号化ECDSAシグネチャに変換します。この機能は、outlenでは、出力バッファに書き込まれた長さも記憶されています。

Parameters:

  • r 署名のR部分を文字列として含むバッファへのポインタ
  • s シグネチャのS部分を含むバッファへのポインタ文字列としてのポインタ
  • out DERエンコードされたECDSAシグネチャを保存するバッファへのポインタ Example
int ret;
ecc_key key;
// initialize key, generate R and S

char r[] = { initialize with R };
char s[] = { initialize with S };
byte sig[wc_ecc_sig_size(key)];
// signature size will be 2 * ECC key size + ~10 bytes for ASN.1 overhead
word32 sigSz = sizeof(sig);
ret = wc_ecc_rs_to_sig(r, s, sig, &sigSz);
if ( ret != 0) {
    // error converting parameters to signature
}

See:

Return:

  • 0 署名の変換に成功したことに戻りました
  • ECC_BAD_ARG_E いずれかの入力パラメータがNULLに評価された場合、または入力バッファがDERエンコードされたECDSAシグネチャを保持するのに十分な大きさでない場合に返されます。
  • MP_INIT_E ECC_KEYの処理中にエラーが発生した場合に返される可能性があります
  • MP_READ_E ECC_KEYの処理中にエラーが発生した場合に返される可能性があります
  • MP_CMP_E ECC_KEYの処理中にエラーが発生した場合に返される可能性があります
  • MP_INVMOD_E ECC_KEYの処理中にエラーが発生した場合に返される可能性があります
  • MP_EXPTMOD_E ECC_KEYの処理中にエラーが発生した場合に返される可能性があります
  • MP_MOD_E ECC_KEYの処理中にエラーが発生した場合に返される可能性があります
  • MP_MUL_E ECC_KEYの処理中にエラーが発生した場合に返される可能性があります
  • MP_ADD_E ECC_KEYの処理中にエラーが発生した場合に返される可能性があります
  • MP_MULMOD_E ECC_KEYの処理中にエラーが発生した場合に返される可能性があります
  • MP_TO_E ECC_KEYの処理中にエラーが発生した場合に返される可能性があります
  • MP_MEM ECC_KEYの処理中にエラーが発生した場合に返される可能性があります

function wc_ecc_import_raw

int wc_ecc_import_raw(
    ecc_key * key,
    const char * qx,
    const char * qy,
    const char * d,
    const char * curveName
)

この関数は、ECC署名のRAW成分を持つECC_KEY構造体を埋めます。

Parameters:

  • key 塗りつぶすためのECC_KEY構造体へのポインタ
  • qx ASCII六角文字列として基点のXコンポーネントを含むバッファへのポインタ
  • qy ASCII六角文字列として基点のY成分を含むバッファへのポインタ
  • d ASCII hex文字列として秘密鍵を含むバッファへのポインタ Example
int ret;
ecc_key key;
wc_ecc_init(&key);

char qx[] = { initialize with x component of base point };
char qy[] = { initialize with y component of base point };
char d[]  = { initialize with private key };
ret = wc_ecc_import_raw(&key,qx, qy, d, "ECC-256");
if ( ret != 0) {
    // error initializing key with given inputs
}

See: wc_ecc_import_private_key

Return:

  • 0 ECC_Key構造体に正常にインポートされたときに返されます
  • ECC_BAD_ARG_E いずれかの入力値がNULLに評価された場合に返されます。
  • MEMORY_E ECC_Keyのパラメータを格納するためのエラーの初期化スペースがある場合に返されます。
  • ASN_PARSE_E 入力カーベナデがECC_SETSで定義されていない場合
  • MP_INIT_E 入力パラメータの処理中にエラーが発生した場合に返される可能性があります。
  • MP_READ_E 入力パラメータの処理中にエラーが発生した場合に返される可能性があります。
  • MP_CMP_E 入力パラメータの処理中にエラーが発生した場合に返される可能性があります。
  • MP_INVMOD_E 入力パラメータの処理中にエラーが発生した場合に返される可能性があります。
  • MP_EXPTMOD_E 入力パラメータの処理中にエラーが発生した場合に返される可能性があります。
  • MP_MOD_E 入力パラメータの処理中にエラーが発生した場合に返される可能性があります。
  • MP_MUL_E 入力パラメータの処理中にエラーが発生した場合に返される可能性があります。
  • MP_ADD_E 入力パラメータの処理中にエラーが発生した場合に返される可能性があります。
  • MP_MULMOD_E 入力パラメータの処理中にエラーが発生した場合に返される可能性があります。
  • MP_TO_E 入力パラメータの処理中にエラーが発生した場合に返される可能性があります。
  • MP_MEM 入力パラメータの処理中にエラーが発生した場合に返される可能性があります。

function wc_ecc_export_private_only

int wc_ecc_export_private_only(
    ecc_key * key,
    byte * out,
    word32 * outLen
)

この関数は、ECC_KEY構造体から秘密鍵のみをエクスポートします。秘密鍵をバッファアウトに格納し、outlenにこのバッファに書き込まれたバイトを設定します。

Parameters:

  • key 秘密鍵をエクスポートするECC_Key構造体へのポインタ
  • out 秘密鍵を保存するバッファへのポインタ Example
int ret;
ecc_key key;
// initialize key, make key

char priv[ECC_KEY_SIZE];
word32 privSz = sizeof(priv);
ret = wc_ecc_export_private_only(&key, priv, &privSz);
if ( ret != 0) {
    // error exporting private key
}

See: wc_ecc_import_private_key

Return:

  • 0 秘密鍵のエクスポートに成功したときに返されます
  • ECC_BAD_ARG_E いずれかの入力値がNULLに評価された場合に返されます。
  • MEMORY_E ECC_Keyのパラメータを格納するためのエラーの初期化スペースがある場合に返されます。
  • ASN_PARSE_E 入力カーベナデがECC_SETSで定義されていない場合
  • MP_INIT_E 入力パラメータの処理中にエラーが発生した場合に返される可能性があります。
  • MP_READ_E 入力パラメータの処理中にエラーが発生した場合に返される可能性があります。
  • MP_CMP_E 入力パラメータの処理中にエラーが発生した場合に返される可能性があります。
  • MP_INVMOD_E 入力パラメータの処理中にエラーが発生した場合に返される可能性があります。
  • MP_EXPTMOD_E 入力パラメータの処理中にエラーが発生した場合に返される可能性があります。
  • MP_MOD_E 入力パラメータの処理中にエラーが発生した場合に返される可能性があります。
  • MP_MUL_E 入力パラメータの処理中にエラーが発生した場合に返される可能性があります。
  • MP_ADD_E 入力パラメータの処理中にエラーが発生した場合に返される可能性があります。
  • MP_MULMOD_E 入力パラメータの処理中にエラーが発生した場合に返される可能性があります。
  • MP_TO_E 入力パラメータの処理中にエラーが発生した場合に返される可能性があります。
  • MP_MEM 入力パラメータの処理中にエラーが発生した場合に返される可能性があります。

function wc_ecc_export_point_der

int wc_ecc_export_point_der(
    const int curve_idx,
    ecc_point * point,
    byte * out,
    word32 * outLen
)

DERへのエクスポートポイント。

Parameters:

  • curve_idx ECC_SETSから使用される曲線のインデックス。
  • point Derへのエクスポートを指す。
  • out 出力の目的地 Example
int curve_idx;
ecc_point* point;
byte out[];
word32 outLen;
wc_ecc_export_point_der(curve_idx, point, out, &outLen);

See: wc_ecc_import_point_der

Return:

  • 0 成功に戻りました。
  • ECC_BAD_ARG_E curve_idxが0未満または無効である場合は返します。いつ来るのか
  • LENGTH_ONLY_E outlenは設定されていますが、他にはありません。
  • BUFFER_E outlennが1 + 2 *曲線サイズよりも小さい場合は返します。
  • MEMORY_E メモリの割り当てに問題がある場合は返します。

function wc_ecc_import_point_der

int wc_ecc_import_point_der(
    byte * in,
    word32 inLen,
    const int curve_idx,
    ecc_point * point
)

Derフォーマットからのインポートポイント。

Parameters:

  • in からのポイントをインポートするためのDer Buffer。
  • inLen DERバッファの長さ
  • curve_idx 曲線のインデックス Example
byte in[];
word32 inLen;
int curve_idx;
ecc_point* point;
wc_ecc_import_point_der(in, inLen, curve_idx, point);

See: wc_ecc_export_point_der

Return:

  • ECC_BAD_ARG_E 引数がnullの場合、またはInlenが偶数の場合は返します。
  • MEMORY_E エラー初期化がある場合に返します
  • NOT_COMPILED_IN habe_comp_keyが真実でない場合は返され、inは圧縮証明書です
  • MP_OKAY 操作が成功しました。

function wc_ecc_size

int wc_ecc_size(
    ecc_key * key
)

この関数は、ecc_key構造体のキーサイズをオクテットで返します。

See: wc_ecc_make_key

Return:

  • Given 有効なキー、オクテットのキーサイズを返します
  • 0 与えられたキーがNULLの場合に返されます Example
int keySz;
ecc_key key;
// initialize key, make key
keySz = wc_ecc_size(&key);
if ( keySz == 0) {
    // error determining key size
}

function wc_ecc_sig_size_calc

int wc_ecc_sig_size_calc(
    int sz
)

この関数は、次のようにして指定されたECCシグネチャの最悪の場合のサイズを返します。(KEYSZ * 2)+ SIG_HEADER_SZ + ECC_MAX_PAD_SZ。実際のシグネチャサイズは、WC_ECC_SIGN_HASHで計算できます。

See:

Return: returns 最大署名サイズ(オクテット) Example

int sigSz = wc_ecc_sig_size_calc(32);
if ( sigSz == 0) {
    // error determining sig size
}

function wc_ecc_sig_size

int wc_ecc_sig_size(
    ecc_key * key
)

この関数は、次のようにして指定されたECCシグネチャの最悪の場合のサイズを返します。(KEYSZ * 2)+ SIG_HEADER_SZ + ECC_MAX_PAD_SZ。実際のシグネチャサイズは、WC_ECC_SIGN_HASHで計算できます。

See:

Return:

  • Success 有効なキーを考えると、最大署名サイズをオクテットで返します。
  • 0 与えられたキーがNULLの場合に返されます Example
int sigSz;
ecc_key key;
// initialize key, make key

sigSz = wc_ecc_sig_size(&key);
if ( sigSz == 0) {
    // error determining sig size
}

function wc_ecc_ctx_new

ecEncCtx * wc_ecc_ctx_new(
    int flags,
    WC_RNG * rng
)

この機能は、ECCとの安全なメッセージ交換を可能にするために、新しいECCコンテキストオブジェクトのスペースを割り当て、初期化します。

Parameters:

  • flags これがサーバーであるかクライアントのコンテキストオプションがあるかどうかを示します.req_resp_client、およびreq_resp_server Example
ecEncCtx* ctx;
WC_RNG rng;
wc_InitRng(&rng);
ctx = wc_ecc_ctx_new(REQ_RESP_CLIENT, &rng);
if(ctx == NULL) {
    // error generating new ecEncCtx object
}

See:

Return:

  • Success 新しいECENCCTXオブジェクトの生成に成功した場合は、そのオブジェクトへのポインタを返します
  • NULL 関数が新しいECENCCTXオブジェクトを生成できない場合に返されます

function wc_ecc_ctx_free

void wc_ecc_ctx_free(
    ecEncCtx * 
)

この関数は、メッセージの暗号化と復号化に使用されるECENCCTXオブジェクトを解放します。

See: wc_ecc_ctx_new

Return: none 戻り値。 Example

ecEncCtx* ctx;
WC_RNG rng;
wc_InitRng(&rng);
ctx = wc_ecc_ctx_new(REQ_RESP_CLIENT, &rng);
// do secure communication
...
wc_ecc_ctx_free(&ctx);

function wc_ecc_ctx_reset

int wc_ecc_ctx_reset(
    ecEncCtx * ctx,
    WC_RNG * rng
)

この関数はECENCCTX構造をリセットして、新しいコンテキストオブジェクトを解放し、新しいコンテキストオブジェクトを割り当てます。

Parameters:

  • ctx リセットするECENCCTXオブジェクトへのポインタ Example
ecEncCtx* ctx;
WC_RNG rng;
wc_InitRng(&rng);
ctx = wc_ecc_ctx_new(REQ_RESP_CLIENT, &rng);
// do secure communication
...
wc_ecc_ctx_reset(&ctx, &rng);
// do more secure communication

See: wc_ecc_ctx_new

Return:

  • 0 ecencctx構造が正常にリセットされた場合に返されます
  • BAD_FUNC_ARG RNGまたはCTXがNULLの場合に返されます
  • RNG_FAILURE_E ECCオブジェクトに新しいソルトを生成するエラーがある場合

function wc_ecc_ctx_set_algo

int wc_ecc_ctx_set_algo(
    ecEncCtx * ctx,
    byte encAlgo,
    byte kdfAlgo,
    byte macAlgo
)

この関数は、wc_ecc_ctx_newの後にオプションで呼び出されることができます。暗号化、KDF、およびMACアルゴリズムをECENCENCCTXオブジェクトに設定します。

Parameters:

  • ctx 情報を設定するECENCCTXへのポインタ
  • encAlgo 使用する暗号化アルゴリズム
  • kdfAlgo 使用するKDFアルゴリズム Example
ecEncCtx* ctx;
// initialize ctx
if(wc_ecc_ctx_set_algo(&ctx, ecAES_128_CTR, ecHKDF_SHA256, ecHMAC_SHA256))) {
    // error setting info
}

See: wc_ecc_ctx_new

Return:

  • 0 ECENCCTXオブジェクトの情報を正常に設定すると返されます。
  • BAD_FUNC_ARG 指定されたecencctxオブジェクトがNULLの場合に返されます。

function wc_ecc_ctx_get_own_salt

const byte * wc_ecc_ctx_get_own_salt(
    ecEncCtx * 
)

この関数はECENCENCCTXオブジェクトのソルトを返します。この関数は、ECENCCTXの状態がECSRV_INITまたはECCLI_INITの場合にのみ呼び出す必要があります。

See:

Return:

  • 成功すると 、ecEncCtx ソルトを返します
  • NULL ecencctxオブジェクトがNULLの場合、またはECENCCTXの状態がECSRV_INITまたはECCLI_INITでない場合に返されます。後者の2つのケースでは、この機能はそれぞれECSRV_BAD_STATEまたはECCLI_BAD_STATEにECENCCTXの状態を設定します。 Example
ecEncCtx* ctx;
WC_RNG rng;
const byte* salt;
wc_InitRng(&rng);
ctx = wc_ecc_ctx_new(REQ_RESP_CLIENT, &rng);
salt = wc_ecc_ctx_get_own_salt(&ctx);
if(salt == NULL) {
    // error getting salt
}

function wc_ecc_ctx_set_peer_salt

int wc_ecc_ctx_set_peer_salt(
    ecEncCtx * ctx,
    const byte * salt
)

この関数は、ECENCENCCTXオブジェクトのピアソルトを設定します。

Parameters:

  • ctx ソルトを設定するためのecencctxへのポインタ Example
ecEncCtx* cliCtx, srvCtx;
WC_RNG rng;
const byte* cliSalt, srvSalt;
int ret;

wc_InitRng(&rng);
cliCtx = wc_ecc_ctx_new(REQ_RESP_CLIENT, &rng);
srvCtx = wc_ecc_ctx_new(REQ_RESP_SERVER, &rng);

cliSalt = wc_ecc_ctx_get_own_salt(&cliCtx);
srvSalt = wc_ecc_ctx_get_own_salt(&srvCtx);
ret = wc_ecc_ctx_set_peer_salt(&cliCtx, srvSalt);

See: wc_ecc_ctx_get_own_salt

Return:

  • 0 ECENCCTXオブジェクトのピアソルトの設定に成功したときに返されます。
  • BAD_FUNC_ARG 指定されたecencctxオブジェクトがnullまたは無効なプロトコルがある場合、または指定されたソルトがNULLの場合
  • BAD_ENC_STATE_E ecencctxの状態がECSRV_SALT_GETまたはECCLI_SALT_GETの場合に返されます。後者の2つのケースでは、この機能はそれぞれECSRV_BAD_STATEまたはECCLI_BAD_STATEにECENCCTXの状態を設定します。

function wc_ecc_ctx_set_info

int wc_ecc_ctx_set_info(
    ecEncCtx * ctx,
    const byte * info,
    int sz
)

この関数は、wc_ecc_ctx_set_peer_saltの前後にオプションで呼び出されることができます。ECENCCTXオブジェクトのオプションの情報を設定します。

Parameters:

  • ctx 情報を設定するECENCCTXへのポインタ
  • info 設定する情報を含むバッファへのポインタ Example
ecEncCtx* ctx;
byte info[] = { initialize with information };
// initialize ctx, get salt,
if(wc_ecc_ctx_set_info(&ctx, info, sizeof(info))) {
    // error setting info
}

See: wc_ecc_ctx_new

Return:

  • 0 ECENCCTXオブジェクトの情報を正常に設定すると返されます。
  • BAD_FUNC_ARG 与えられたECENCCTXオブジェクトがNULLの場合、入力情報はNULLまたはサイズが無効です。

function wc_ecc_encrypt

int wc_ecc_encrypt(
    ecc_key * privKey,
    ecc_key * pubKey,
    const byte * msg,
    word32 msgSz,
    byte * out,
    word32 * outSz,
    ecEncCtx * ctx
)

この関数は指定された入力メッセージをMSGからOUTに暗号化します。この関数はパラメータとしてオプションのCTXオブジェクトを取ります。提供されている場合、ECENCCTXのEncalgo、Kdfalgo、およびMacalgoに基づいて暗号化が進みます。CTXが指定されていない場合、処理はデフォルトのアルゴリズム、ECAES_128_CBC、ECHKDF_SHA256、ECHMAC_SHA256で完了します。この機能は、メッセージがCTXで指定された暗号化タイプに従って埋め込まれている必要があります。

Parameters:

  • privKey 暗号化に使用する秘密鍵を含むECC_KEYオブジェクトへのポインタ
  • pubKey コミュニケーションを希望するピアの公開鍵を含むECC_Keyオブジェクトへのポインタ
  • msg 暗号化するメッセージを保持しているバッファへのポインタ
  • msgSz 暗号化するバッファのサイズ
  • out 暗号化された暗号文を保存するバッファへのポインタ
  • outSz OUTバッファ内の使用可能なサイズを含むWord32オブジェクトへのポインタ。メッセージの暗号化に成功したら、出力バッファに書き込まれたバイト数を保持します。 Example
byte msg[] = { initialize with msg to encrypt. Ensure padded to block size };
byte out[sizeof(msg)];
word32 outSz = sizeof(out);
int ret;
ecc_key cli, serv;
// initialize cli with private key
// initialize serv with received public key

ecEncCtx* cliCtx, servCtx;
// initialize cliCtx and servCtx
// exchange salts
ret = wc_ecc_encrypt(&cli, &serv, msg, sizeof(msg), out, &outSz, cliCtx);
if(ret != 0) {
    // error encrypting message
}

See:

Return:

  • 0 入力メッセージの暗号化に成功したら返されます
  • BAD_FUNC_ARG PRIVKEY、PUBKEY、MSG、MSGSZ、OUT、OUTSZがNULLの場合、またはCTXオブジェクトがサポートされていない暗号化タイプを指定します。
  • BAD_ENC_STATE_E 指定されたCTXオブジェクトが暗号化に適していない状態にある場合に返されます。
  • BUFFER_E 指定された出力バッファが小さすぎて暗号化された暗号文を保存する場合に返されます
  • MEMORY_E 共有秘密鍵のメモリの割り当て中にエラーがある場合に返されます

function wc_ecc_encrypt_ex

int wc_ecc_encrypt_ex(
    ecc_key * privKey,
    ecc_key * pubKey,
    const byte * msg,
    word32 msgSz,
    byte * out,
    word32 * outSz,
    ecEncCtx * ctx,
    int compressed
)

この関数は指定された入力メッセージをMSGからOUTに暗号化します。この関数はパラメータとしてオプションのCTXオブジェクトを取ります。提供されている場合、ECENCCTXのEncalgo、Kdfalgo、およびMacalgoに基づいて暗号化が進みます。CTXが指定されていない場合、処理はデフォルトのアルゴリズム、ECAES_128_CBC、ECHKDF_SHA256、ECHMAC_SHA256で完了します。この機能は、メッセージがCTXで指定された暗号化タイプに従って埋め込まれている必要があります。

Parameters:

  • privKey 暗号化に使用する秘密鍵を含むECC_KEYオブジェクトへのポインタ
  • pubKey コミュニケーションを希望するピアの公開鍵を含むECC_Keyオブジェクトへのポインタ
  • msg 暗号化するメッセージを保持しているバッファへのポインタ
  • msgSz 暗号化するバッファのサイズ
  • out 暗号化された暗号文を保存するバッファへのポインタ
  • outSz OUTバッファ内の使用可能なサイズを含むWord32オブジェクトへのポインタ。メッセージの暗号化に成功したら、出力バッファに書き込まれたバイト数を保持します。
  • ctx オプション:使用するさまざまな暗号化アルゴリズムを指定するECENCCTXオブジェクトへのポインタ Example
byte msg[] = { initialize with msg to encrypt. Ensure padded to block size };
byte out[sizeof(msg)];
word32 outSz = sizeof(out);
int ret;
ecc_key cli, serv;
// initialize cli with private key
// initialize serv with received public key

ecEncCtx* cliCtx, servCtx;
// initialize cliCtx and servCtx
// exchange salts
ret = wc_ecc_encrypt_ex(&cli, &serv, msg, sizeof(msg), out, &outSz, cliCtx,
    1);
if(ret != 0) {
    // error encrypting message
}

See:

Return:

  • 0 入力メッセージの暗号化に成功したら返されます
  • BAD_FUNC_ARG PRIVKEY、PUBKEY、MSG、MSGSZ、OUT、OUTSZがNULLの場合、またはCTXオブジェクトがサポートされていない暗号化タイプを指定します。
  • BAD_ENC_STATE_E 指定されたCTXオブジェクトが暗号化に適していない状態にある場合に返されます。
  • BUFFER_E 指定された出力バッファが小さすぎて暗号化された暗号文を保存する場合に返されます
  • MEMORY_E 共有秘密鍵のメモリの割り当て中にエラーがある場合に返されます

function wc_ecc_decrypt

int wc_ecc_decrypt(
    ecc_key * privKey,
    ecc_key * pubKey,
    const byte * msg,
    word32 msgSz,
    byte * out,
    word32 * outSz,
    ecEncCtx * ctx
)

この関数はMSGからOUTへの暗号文を復号化します。この関数はパラメータとしてオプションのCTXオブジェクトを取ります。提供されている場合、ECENCCTXのEncalgo、Kdfalgo、およびMacalgoに基づいて暗号化が進みます。CTXが指定されていない場合、処理はデフォルトのアルゴリズム、ECAES_128_CBC、ECHKDF_SHA256、ECHMAC_SHA256で完了します。この機能は、メッセージがCTXで指定された暗号化タイプに従って埋め込まれている必要があります。

Parameters:

  • privKey 復号化に使用する秘密鍵を含むECC_Keyオブジェクトへのポインタ
  • pubKey コミュニケーションを希望するピアの公開鍵を含むECC_Keyオブジェクトへのポインタ
  • msg 暗号文を復号化するためのバッファへのポインタ
  • msgSz 復号化するバッファのサイズ
  • out 復号化された平文を保存するバッファへのポインタ
  • outSz OUTバッファ内の使用可能なサイズを含むWord32オブジェクトへのポインタ。暗号文を正常に復号化すると、出力バッファに書き込まれたバイト数を保持します。 Example
byte cipher[] = { initialize with
ciphertext to decrypt. Ensure padded to block size };
byte plain[sizeof(cipher)];
word32 plainSz = sizeof(plain);
int ret;
ecc_key cli, serv;
// initialize cli with private key
// initialize serv with received public key
ecEncCtx* cliCtx, servCtx;
// initialize cliCtx and servCtx
// exchange salts
ret = wc_ecc_decrypt(&cli, &serv, cipher, sizeof(cipher),
plain, &plainSz, cliCtx);

if(ret != 0) {
    // error decrypting message
}

See:

Return:

  • 0 入力メッセージの復号化に成功したときに返されます
  • BAD_FUNC_ARG PRIVKEY、PUBKEY、MSG、MSGSZ、OUT、OUTSZがNULLの場合、またはCTXオブジェクトがサポートされていない暗号化タイプを指定します。
  • BAD_ENC_STATE_E 指定されたCTXオブジェクトが復号化に適していない状態にある場合に返されます。
  • BUFFER_E 供給された出力バッファが小さすぎて復号化された平文を保存する場合は返されます。
  • MEMORY_E 共有秘密鍵のメモリの割り当て中にエラーがある場合に返されます

function wc_ecc_set_nonblock

int wc_ecc_set_nonblock(
    ecc_key * key,
    ecc_nb_ctx_t * ctx
)

非ブロック操作のためのECCサポートを有効にします。次のビルドオプションを使用した単精度(SP)数学でサポートされています.WolfSSL_SP_SP_SMALL WOLFSSL_SP_NO_MALLOC WC_ECC_NONBLOCK

Parameters:

  • key ECC_KEYオブジェクトへのポインタ Example
int ret;
ecc_key ecc;
ecc_nb_ctx_t nb_ctx;

ret = wc_ecc_init(&ecc);
if (ret == 0) {
    ret = wc_ecc_set_nonblock(&ecc, &nb_ctx);
    if (ret == 0) {
        do {
            ret = wc_ecc_verify_hash_ex(
                &r, &s,       // r/s as mp_int
                hash, hashSz, // computed hash digest
                &verify_res,  // verification result 1=success
                &key
            );

            // TODO: Real-time work can be called here
        } while (ret == FP_WOULDBLOCK);
    }
    wc_ecc_free(&key);
}

Return: 0 コールバックコンテキストを入力メッセージに正常に設定すると返されます。


Updated on 2024-11-21 at 02:35:59 +0000