コンテンツにスキップ

dsa.h

Functions

Name
int wc_InitDsaKey(DsaKey * key)
この関数は、デジタル署名アルゴリズム(DSA)による認証に使用するために、DsaKeyオブジェクトを初期化します。
void wc_FreeDsaKey(DsaKey * key)
この関数は、使用後にDsaKeyオブジェクトを解放します。
int wc_DsaSign(const byte * digest, byte * out, DsaKey * key, WC_RNG * rng)
この関数は、入力ダイジェストに署名し、結果を出力バッファoutに格納します。
int wc_DsaVerify(const byte * digest, const byte * sig, DsaKey * key, int * answer)
この関数は、秘密鍵を使用してダイジェストの署名を検証します。検証が正しく行われたかどうかをanswerパラメータに格納します。1は検証成功、0は検証失敗に対応します。
int wc_DsaPublicKeyDecode(const byte * input, word32 * inOutIdx, DsaKey * key, word32 inSz)
この関数は、DSA公開鍵を含むDERフォーマットの証明書バッファをデコードし、与えられたDsaKey構造体に鍵を格納します。また、読み取られた入力の長さに応じてinOutIdxパラメータを設定します。
int wc_DsaPrivateKeyDecode(const byte * input, word32 * inOutIdx, DsaKey * key, word32 inSz)
この関数は、DSA秘密鍵を含むDERフォーマットの証明書バッファをデコードし、与えられたDsaKey構造体に鍵を格納します。また、読み取られた入力の長さに応じてinOutIdxパラメータを設定します。
int wc_DsaKeyToDer(DsaKey * key, byte * output, word32 inLen)
DsaKey鍵をDERフォーマットに変換し、output(inLen)に書き込み、書き込まれたバイト数を返します。
int wc_MakeDsaKey(WC_RNG * rng, DsaKey * dsa)
DSA鍵を作成します。
int wc_MakeDsaParameters(WC_RNG * rng, int modulus_size, DsaKey * dsa)
FIPS 186_4は、modulus_size値として(1024, 160) (2048, 256) (3072, 256)を有効と定義しています

Functions Documentation

function wc_InitDsaKey

int wc_InitDsaKey(
    DsaKey * key
)

この関数は、デジタル署名アルゴリズム(DSA)による認証に使用するために、DsaKeyオブジェクトを初期化します。

Parameters:

  • key 初期化するDsaKey構造体へのポインタ

See: wc_FreeDsaKey

Return:

  • 0 成功時に返されます。
  • BAD_FUNC_ARG NULLキーが渡された場合に返されます。

Example

DsaKey key;
int ret;
ret = wc_InitDsaKey(&key); // DSA鍵を初期化

function wc_FreeDsaKey

void wc_FreeDsaKey(
    DsaKey * key
)

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

Parameters:

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

See: wc_FreeDsaKey

Return: none 戻り値なし。

Example

DsaKey key;
// 鍵を初期化、認証に使用
...
wc_FreeDsaKey(&key); // DSA鍵を解放

function wc_DsaSign

int wc_DsaSign(
    const byte * digest,
    byte * out,
    DsaKey * key,
    WC_RNG * rng
)

この関数は、入力ダイジェストに署名し、結果を出力バッファoutに格納します。

Parameters:

  • digest 署名するハッシュへのポインタ
  • out 署名を格納するバッファへのポインタ
  • key 署名を生成するために使用する初期化されたDsaKey構造体へのポインタ
  • rng 署名生成で使用する初期化されたRNGへのポインタ

See: wc_DsaVerify

Return:

  • 0 入力ダイジェストへの署名に成功した場合に返されます
  • MP_INIT_E DSA署名の処理中にエラーが発生した場合に返される可能性があります。
  • MP_READ_E DSA署名の処理中にエラーが発生した場合に返される可能性があります。
  • MP_CMP_E DSA署名の処理中にエラーが発生した場合に返される可能性があります。
  • MP_INVMOD_E DSA署名の処理中にエラーが発生した場合に返される可能性があります。
  • MP_EXPTMOD_E DSA署名の処理中にエラーが発生した場合に返される可能性があります。
  • MP_MOD_E DSA署名の処理中にエラーが発生した場合に返される可能性があります。
  • MP_MUL_E DSA署名の処理中にエラーが発生した場合に返される可能性があります。
  • MP_ADD_E DSA署名の処理中にエラーが発生した場合に返される可能性があります。
  • MP_MULMOD_E DSA署名の処理中にエラーが発生した場合に返される可能性があります。
  • MP_TO_E DSA署名の処理中にエラーが発生した場合に返される可能性があります。
  • MP_MEM DSA署名の処理中にエラーが発生した場合に返される可能性があります。

Example

DsaKey key;
// DSA鍵を初期化、秘密鍵をロード
int ret;
WC_RNG rng;
wc_InitRng(&rng);
byte hash[] = { // ハッシュダイジェストで初期化 };
byte signature[40]; // 署名は40バイト(320ビット)になります

ret = wc_DsaSign(hash, signature, &key, &rng);
if (ret != 0) {
    // DSA署名生成エラー
}

function wc_DsaVerify

int wc_DsaVerify(
    const byte * digest,
    const byte * sig,
    DsaKey * key,
    int * answer
)

この関数は、秘密鍵を使用してダイジェストの署名を検証します。検証が正しく行われたかどうかをanswerパラメータに格納します。1は検証成功、0は検証失敗に対応します。

Parameters:

  • digest 署名の対象を含むダイジェストへのポインタ
  • sig 検証する署名を含むバッファへのポインタ
  • key 署名を検証するために使用する初期化されたDsaKey構造体へのポインタ
  • answer 検証が成功したかどうかを格納する整数へのポインタ

See: wc_DsaSign

Return:

  • 0 検証リクエストの処理に成功した場合に返されます。注意: これは署名が検証されたことを意味するのではなく、関数が成功したことのみを意味します
  • MP_INIT_E DSA署名の処理中にエラーが発生した場合に返される可能性があります。
  • MP_READ_E DSA署名の処理中にエラーが発生した場合に返される可能性があります。
  • MP_CMP_E DSA署名の処理中にエラーが発生した場合に返される可能性があります。
  • MP_INVMOD_E DSA署名の処理中にエラーが発生した場合に返される可能性があります。
  • MP_EXPTMOD_E DSA署名の処理中にエラーが発生した場合に返される可能性があります。
  • MP_MOD_E DSA署名の処理中にエラーが発生した場合に返される可能性があります。
  • MP_MUL_E DSA署名の処理中にエラーが発生した場合に返される可能性があります。
  • MP_ADD_E DSA署名の処理中にエラーが発生した場合に返される可能性があります。
  • MP_MULMOD_E DSA署名の処理中にエラーが発生した場合に返される可能性があります。
  • MP_TO_E DSA署名の処理中にエラーが発生した場合に返される可能性があります。
  • MP_MEM DSA署名の処理中にエラーが発生した場合に返される可能性があります。

Example

DsaKey key;
// DSA鍵を初期化、公開鍵をロード

int ret;
int verified;
byte hash[] = { // ハッシュダイジェストで初期化 };
byte signature[] = { // 検証する署名で初期化 };
ret = wc_DsaVerify(hash, signature, &key, &verified);
if (ret != 0) {
    // 検証リクエストの処理エラー
} else if (answer == 0) {
    // 無効な署名
}

function wc_DsaPublicKeyDecode

int wc_DsaPublicKeyDecode(
    const byte * input,
    word32 * inOutIdx,
    DsaKey * key,
    word32 inSz
)

この関数は、DSA公開鍵を含むDERフォーマットの証明書バッファをデコードし、与えられたDsaKey構造体に鍵を格納します。また、読み取られた入力の長さに応じてinOutIdxパラメータを設定します。

Parameters:

  • input DERフォーマットのDSA公開鍵を含むバッファへのポインタ
  • inOutIdx 読み取られた証明書の最終インデックスを格納する整数へのポインタ
  • key 公開鍵を格納するDsaKey構造体へのポインタ
  • inSz 入力バッファのサイズ

See:

Return:

  • 0 DsaKeyオブジェクトの公開鍵の設定に成功した場合に返されます
  • ASN_PARSE_E 証明書バッファの読み取り中にエンコーディングエラーがある場合に返されます
  • ASN_DH_KEY_E DSAパラメータの1つが正しくフォーマットされていない場合に返されます

Example

int ret, idx=0;

DsaKey key;
wc_InitDsaKey(&key);
byte derBuff[] = { // DSA公開鍵};
ret = wc_DsaPublicKeyDecode(derBuff, &idx, &key, inSz);
if (ret != 0) {
    // 公開鍵の読み取りエラー
}

function wc_DsaPrivateKeyDecode

int wc_DsaPrivateKeyDecode(
    const byte * input,
    word32 * inOutIdx,
    DsaKey * key,
    word32 inSz
)

この関数は、DSA秘密鍵を含むDERフォーマットの証明書バッファをデコードし、与えられたDsaKey構造体に鍵を格納します。また、読み取られた入力の長さに応じてinOutIdxパラメータを設定します。

Parameters:

  • input DERフォーマットのDSA秘密鍵を含むバッファへのポインタ
  • inOutIdx 読み取られた証明書の最終インデックスを格納する整数へのポインタ
  • key 秘密鍵を格納するDsaKey構造体へのポインタ
  • inSz 入力バッファのサイズ

See:

Return:

  • 0 DsaKeyオブジェクトの秘密鍵の設定に成功した場合に返されます
  • ASN_PARSE_E 証明書バッファの読み取り中にエンコーディングエラーがある場合に返されます
  • ASN_DH_KEY_E DSAパラメータの1つが正しくフォーマットされていない場合に返されます

Example

int ret, idx=0;

DsaKey key;
wc_InitDsaKey(&key);
byte derBuff[] = { // DSA秘密鍵 };
ret = wc_DsaPrivateKeyDecode(derBuff, &idx, &key, inSz);
if (ret != 0) {
    // 秘密鍵の読み取りエラー
}

function wc_DsaKeyToDer

int wc_DsaKeyToDer(
    DsaKey * key,
    byte * output,
    word32 inLen
)

DsaKey鍵をDERフォーマットに変換し、output(inLen)に書き込み、書き込まれたバイト数を返します。

Parameters:

  • key 変換するDsaKey構造体へのポインタ。
  • output 変換された鍵用の出力バッファへのポインタ。
  • inLen 鍵入力の長さ。

See:

Return:

  • outLen 成功、書き込まれたバイト数
  • BAD_FUNC_ARG keyまたはoutputがnullまたはkey->typeがDSA_PRIVATEでない場合。
  • MEMORY_E メモリ割り当てエラー。

Example

DsaKey key;
WC_RNG rng;
int derSz;
int bufferSize = // 十分なバッファサイズ;
byte der[bufferSize];

wc_InitDsaKey(&key);
wc_InitRng(&rng);
wc_MakeDsaKey(&rng, &key);
derSz = wc_DsaKeyToDer(&key, der, bufferSize);

function wc_MakeDsaKey

int wc_MakeDsaKey(
    WC_RNG * rng,
    DsaKey * dsa
)

DSA鍵を作成します。

Parameters:

  • rng WC_RNG構造体へのポインタ。
  • dsa DsaKey構造体へのポインタ。

See:

Return:

  • MP_OKAY 成功
  • BAD_FUNC_ARG rngまたはdsaがnullの場合。
  • MEMORY_E バッファ用のメモリを割り当てられませんでした。
  • MP_INIT_E mp_intの初期化エラー

Example

WC_RNG rng;
DsaKey dsa;
wc_InitRng(&rng);
wc_InitDsa(&dsa);
if(wc_MakeDsaKey(&rng, &dsa) != 0)
{
    // 鍵作成エラー
}

function wc_MakeDsaParameters

int wc_MakeDsaParameters(
    WC_RNG * rng,
    int modulus_size,
    DsaKey * dsa
)

FIPS 186-4は、modulus_size値として(1024, 160) (2048, 256) (3072, 256)を有効と定義しています

Parameters:

  • rng wolfCrypt rngへのポインタ。
  • modulus_size 1024、2048、または3072が有効な値です。
  • dsa DsaKey構造体へのポインタ。

See:

Return:

  • 0 成功
  • BAD_FUNC_ARG rngまたはdsaがnullまたはmodulus_sizeが無効な場合。
  • MEMORY_E メモリ割り当て試行エラー。

Example

DsaKey key;
WC_RNG rng;
wc_InitDsaKey(&key);
wc_InitRng(&rng);
if(wc_MakeDsaParameters(&rng, 1024, &genKey) != 0)
{
    // エラーを処理
}

Source code


int wc_InitDsaKey(DsaKey* key);

void wc_FreeDsaKey(DsaKey* key);

int wc_DsaSign(const byte* digest, byte* out,
                           DsaKey* key, WC_RNG* rng);

int wc_DsaVerify(const byte* digest, const byte* sig,
                             DsaKey* key, int* answer);

int wc_DsaPublicKeyDecode(const byte* input, word32* inOutIdx,
                                      DsaKey* key, word32 inSz);

int wc_DsaPrivateKeyDecode(const byte* input, word32* inOutIdx,
                                       DsaKey* key, word32 inSz);

int wc_DsaKeyToDer(DsaKey* key, byte* output, word32 inLen);

int wc_MakeDsaKey(WC_RNG *rng, DsaKey *dsa);

int wc_MakeDsaParameters(WC_RNG *rng, int modulus_size, DsaKey *dsa);

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