コンテンツにスキップ

srp.h

Functions

Name
int wc_SrpInit(Srp * srp, SrpType type, SrpSide side)
使用のためにSrp構造体を初期化します。
void wc_SrpTerm(Srp * srp)
使用後にSrp構造体のリソースを解放します。
int wc_SrpSetUsername(Srp * srp, const byte * username, word32 size)
ユーザー名を設定します。この関数はwc_SrpInitの後に呼び出す必要があります。
int wc_SrpSetParams(Srp * srp, const byte * N, word32 nSz, const byte * g, word32 gSz, const byte * salt, word32 saltSz)
ユーザー名に基づいてsrpパラメータを設定します。wc_SrpSetUsernameの後に呼び出す必要があります。
int wc_SrpSetPassword(Srp * srp, const byte * password, word32 size)
パスワードを設定します。パスワードの設定は、srp構造体にクリアパスワードデータを永続化しません。クライアントはx = H(salt + H(user:pswd))を計算し、authフィールドに格納します。この関数はwc_SrpSetParamsの後に呼び出す必要があり、クライアント側のみです。
int wc_SrpSetVerifier(Srp * srp, const byte * verifier, word32 size)
検証子を設定します。この関数はwc_SrpSetParamsの後に呼び出す必要があり、サーバー側のみです。
int wc_SrpGetVerifier(Srp * srp, byte * verifier, word32 * size)
検証子を取得します。クライアントはv = g ^ x % Nで検証子を計算します。 この関数はwc_SrpSetPasswordの後に呼び出すことができ、クライアント側のみです。
int wc_SrpSetPrivate(Srp * srp, const byte * priv, word32 size)
秘密エフェメラル値を設定します。秘密エフェメラル値は次のように知られています: クライアント側ではa。a = random() サーバー側ではb。b = random() この関数は単体テストケースや、開発者が外部の乱数ソースを使用してエフェメラル値を設定したい場合に便利です。この関数はwc_SrpGetPublicの前に呼び出すことができます。
int wc_SrpGetPublic(Srp * srp, byte * pub, word32 * size)
公開エフェメラル値を取得します。公開エフェメラル値は次のように知られています: クライアント側ではA。A = g ^ a % N サーバー側ではB。B = (k * v + (g ˆ b % N)) % N この関数はwc_SrpSetPasswordまたはwc_SrpSetVerifierの後に呼び出す必要があります。 関数wc_SrpSetPrivateはwc_SrpGetPublicの前に呼び出すことができます。
int wc_SrpComputeKey(Srp * srp, byte * clientPubKey, word32 clientPubKeySz, byte * serverPubKey, word32 serverPubKeySz)
セッション鍵を計算します。鍵は成功後にsrp->keyでアクセスできます。
int wc_SrpGetProof(Srp * srp, byte * proof, word32 * size)
証明を取得します。この関数はwc_SrpComputeKeyの後に呼び出す必要があります。
int wc_SrpVerifyPeersProof(Srp * srp, byte * proof, word32 size)
ピアの証明を検証します。この関数はwc_SrpGetSessionKeyの前に呼び出す必要があります。

Functions Documentation

function wc_SrpInit

int wc_SrpInit(
    Srp * srp,
    SrpType type,
    SrpSide side
)

使用のためにSrp構造体を初期化します。

Parameters:

  • srp 初期化するSrp構造体。
  • type 使用するハッシュタイプ。
  • side 通信の側。

See:

Return:

  • 0 成功時。
  • BAD_FUNC_ARG srpがnullの場合やSrpSideがSRP_CLIENT_SIDEまたはSRP_SERVER_SIDEでない場合など、引数に問題がある場合に返されます。
  • NOT_COMPILED_IN 引数として渡された型がwolfCryptビルドで設定されていない場合に返されます。
  • <0 エラー時。

Example

Srp srp;
if (wc_SrpInit(&srp, SRP_TYPE_SHA, SRP_CLIENT_SIDE) != 0)
{
    // 初期化エラー
}
else
{
    wc_SrpTerm(&srp);
}

function wc_SrpTerm

void wc_SrpTerm(
    Srp * srp
)

使用後にSrp構造体のリソースを解放します。

Parameters:

  • srp 終了するSrp構造体へのポインタ。

See: wc_SrpInit

Return: none 戻り値なし。

Example

Srp srp;
wc_SrpInit(&srp, SRP_TYPE_SHA, SRP_CLIENT_SIDE);
// srpを使用
wc_SrpTerm(&srp)

function wc_SrpSetUsername

int wc_SrpSetUsername(
    Srp * srp,
    const byte * username,
    word32 size
)

ユーザー名を設定します。この関数はwc_SrpInitの後に呼び出す必要があります。

Parameters:

  • srp Srp構造体。
  • username ユーザー名を含むバッファ。
  • size ユーザー名のサイズ(バイト単位)

See:

Return:

  • 0 ユーザー名が正常に設定されました。
  • BAD_FUNC_ARG: srpまたはusernameがnullの場合に返されます。
  • MEMORY_E: srp->userのメモリ割り当てに問題がある場合に返されます
  • < 0: エラー。

Example

Srp srp;
byte username[] = "user";
word32 usernameSize = 4;

wc_SrpInit(&srp, SRP_TYPE_SHA, SRP_CLIENT_SIDE);
if(wc_SrpSetUsername(&srp, username, usernameSize) != 0)
{
    // ユーザー名の設定エラーが発生しました。
}
wc_SrpTerm(&srp);

function wc_SrpSetParams

int wc_SrpSetParams(
    Srp * srp,
    const byte * N,
    word32 nSz,
    const byte * g,
    word32 gSz,
    const byte * salt,
    word32 saltSz
)

ユーザー名に基づいてsrpパラメータを設定します。wc_SrpSetUsernameの後に呼び出す必要があります。

Parameters:

  • srp Srp構造体。
  • N モジュラス。N = 2q+1、[q、N]は素数。
  • nSz Nのサイズ(バイト単位)。
  • g Nを法とする生成元。
  • gSz gのサイズ(バイト単位)
  • salt 小さなランダムソルト。各ユーザー名に固有。
  • saltSz ソルトのサイズ(バイト単位)

See:

Return:

  • 0 成功
  • BAD_FUNC_ARG srp、N、g、またはsaltがnullの場合、またはnSz < gSzの場合に返されます。
  • SRP_CALL_ORDER_E wc_SrpSetUsernameの前にwc_SrpSetParamsが呼び出された場合に返されます。
  • <0 エラー

Example

Srp srp;
byte username[] = "user";
word32 usernameSize = 4;

byte N[] = { }; // バイト配列Nの内容
byte g[] = { }; // バイト配列gの内容
byte salt[] = { }; // バイト配列saltの内容

wc_SrpInit(&srp, SRP_TYPE_SHA, SRP_CLIENT_SIDE);
wc_SrpSetUsername(&srp, username, usernameSize);

if(wc_SrpSetParams(&srp, N, sizeof(N), g, sizeof(g), salt,
sizeof(salt)) != 0)
{
    // パラメータ設定エラー
}
wc_SrpTerm(&srp);

function wc_SrpSetPassword

int wc_SrpSetPassword(
    Srp * srp,
    const byte * password,
    word32 size
)

パスワードを設定します。パスワードの設定は、srp構造体にクリアパスワードデータを永続化しません。クライアントはx = H(salt + H(user:pswd))を計算し、authフィールドに格納します。この関数はwc_SrpSetParamsの後に呼び出す必要があり、クライアント側のみです。

Parameters:

  • srp Srp構造体。
  • password パスワードを含むバッファ。
  • size パスワードのサイズ(バイト単位)。

See:

Return:

  • 0 成功
  • BAD_FUNC_ARG srpまたはpasswordがnullの場合、またはsrp->sideがSRP_CLIENT_SIDEに設定されていない場合に返されます。
  • SRP_CALL_ORDER_E wc_SrpSetPasswordが順序外で呼び出された場合に返されます。
  • <0 エラー

Example

Srp srp;
byte username[] = "user";
word32 usernameSize = 4;
byte password[] = "password";
word32 passwordSize = 8;

byte N[] = { }; // バイト配列Nの内容
byte g[] = { }; // バイト配列gの内容
byte salt[] = { }; // バイト配列saltの内容

wc_SrpInit(&srp, SRP_TYPE_SHA, SRP_CLIENT_SIDE);
wc_SrpSetUsername(&srp, username, usernameSize);
wc_SrpSetParams(&srp, N, sizeof(N), g, sizeof(g), salt, sizeof(salt));

if(wc_SrpSetPassword(&srp, password, passwordSize) != 0)
{
    // パスワード設定エラー
}

wc_SrpTerm(&srp);

function wc_SrpSetVerifier

int wc_SrpSetVerifier(
    Srp * srp,
    const byte * verifier,
    word32 size
)

検証子を設定します。この関数はwc_SrpSetParamsの後に呼び出す必要があり、サーバー側のみです。

Parameters:

  • srp Srp構造体。
  • verifier 検証子を含む構造体。
  • size 検証子のサイズ(バイト単位)。

See:

Return:

  • 0 成功
  • BAD_FUNC_ARG srpまたはverifierがnullの場合、またはsrp->sideがSRP_SERVER_SIDEでない場合に返されます。
  • <0 エラー

Example

Srp srp;
byte username[] = "user";
word32 usernameSize = 4;

byte N[] = { }; // バイト配列Nの内容
byte g[] = { }; // バイト配列gの内容
byte salt[] = { }; // バイト配列saltの内容
wc_SrpInit(&srp, SRP_TYPE_SHA, SRP_SERVER_SIDE);
wc_SrpSetUsername(&srp, username, usernameSize);
wc_SrpSetParams(&srp, N, sizeof(N), g, sizeof(g), salt, sizeof(salt))
byte verifier[] = { }; // 何らかの検証子の内容

if(wc_SrpSetVerifier(&srp, verifier, sizeof(verifier)) != 0)
{
    // 検証子設定エラー
}

wc_SrpTerm(&srp);

function wc_SrpGetVerifier

int wc_SrpGetVerifier(
    Srp * srp,
    byte * verifier,
    word32 * size
)

検証子を取得します。クライアントはv = g ^ x % Nで検証子を計算します。 この関数はwc_SrpSetPasswordの後に呼び出すことができ、クライアント側のみです。

Parameters:

  • srp Srp構造体。
  • verifier 検証子を書き込むバッファ。
  • size バッファサイズ(バイト単位)。検証子のサイズで更新されます。

See:

Return:

  • 0 成功
  • BAD_FUNC_ARG srp、verifier、またはsizeがnullの場合、またはsrp->sideがSRP_CLIENT_SIDEでない場合に返されます。
  • SRP_CALL_ORDER_E wc_SrpGetVerifierが順序外で呼び出された場合に返されます。
  • <0 エラー

Example

Srp srp;
byte username[] = "user";
word32 usernameSize = 4;
byte password[] = "password";
word32 passwordSize = 8;

byte N[] = { }; // バイト配列Nの内容
byte g[] = { }; // バイト配列gの内容
byte salt[] = { }; // バイト配列saltの内容
byte v[64];
word32 vSz = 0;
vSz = sizeof(v);

wc_SrpInit(&srp, SRP_TYPE_SHA, SRP_CLIENT_SIDE);
wc_SrpSetUsername(&srp, username, usernameSize);
wc_SrpSetParams(&srp, N, sizeof(N), g, sizeof(g), salt, sizeof(salt))
wc_SrpSetPassword(&srp, password, passwordSize)

if( wc_SrpGetVerifier(&srp, v, &vSz ) != 0)
{
    // 検証子取得エラー
}
wc_SrpTerm(&srp);

function wc_SrpSetPrivate

int wc_SrpSetPrivate(
    Srp * srp,
    const byte * priv,
    word32 size
)

秘密エフェメラル値を設定します。秘密エフェメラル値は次のように知られています: クライアント側ではa。a = random() サーバー側ではb。b = random() この関数は単体テストケースや、開発者が外部の乱数ソースを使用してエフェメラル値を設定したい場合に便利です。この関数はwc_SrpGetPublicの前に呼び出すことができます。

Parameters:

  • srp Srp構造体。
  • priv エフェメラル値。
  • size privateのサイズ(バイト単位)。

See: wc_SrpGetPublic

Return:

  • 0 成功
  • BAD_FUNC_ARG srp、private、またはsizeがnullの場合に返されます。
  • SRP_CALL_ORDER_E wc_SrpSetPrivateが順序外で呼び出された場合に返されます。
  • <0 エラー

Example

Srp srp;
byte username[] = "user";
word32 usernameSize = 4;

byte N[] = { }; // バイト配列Nの内容
byte g[] = { }; // バイト配列gの内容
byte salt[] = { }; // バイト配列saltの内容
byte verifier = { }; // 何らかの検証子の内容
wc_SrpInit(&srp, SRP_TYPE_SHA, SRP_SERVER_SIDE);
wc_SrpSetUsername(&srp, username, usernameSize);
wc_SrpSetParams(&srp, N, sizeof(N), g, sizeof(g), salt, sizeof(salt))
wc_SrpSetVerifier(&srp, verifier, sizeof(verifier))

byte b[] = { }; // 何らかのエフェメラル値
if( wc_SrpSetPrivate(&srp, b, sizeof(b)) != 0)
{
    // 秘密エフェメラル設定エラー
}

wc_SrpTerm(&srp);

function wc_SrpGetPublic

int wc_SrpGetPublic(
    Srp * srp,
    byte * pub,
    word32 * size
)

公開エフェメラル値を取得します。公開エフェメラル値は次のように知られています: クライアント側ではA。A = g ^ a % N サーバー側ではB。B = (k * v + (g ˆ b % N)) % N この関数はwc_SrpSetPasswordまたはwc_SrpSetVerifierの後に呼び出す必要があります。 関数wc_SrpSetPrivateはwc_SrpGetPublicの前に呼び出すことができます。

Parameters:

  • srp Srp構造体。
  • pub 公開エフェメラル値を書き込むバッファ。
  • size バッファサイズ(バイト単位)。エフェメラル値のサイズで更新されます。

See:

Return:

  • 0 成功
  • BAD_FUNC_ARG srp、pub、またはsizeがnullの場合に返されます。
  • SRP_CALL_ORDER_E wc_SrpGetPublicが順序外で呼び出された場合に返されます。
  • BUFFER_E size < srp.Nの場合に返されます。
  • <0 エラー

Example

Srp srp;
byte username[] = "user";
word32 usernameSize = 4;
byte password[] = "password";
word32 passwordSize = 8;

byte N[] = { }; // バイト配列Nの内容
byte g[] = { }; // バイト配列gの内容
byte salt[] = { }; // バイト配列saltの内容
wc_SrpInit(&srp, SRP_TYPE_SHA, SRP_CLIENT_SIDE);
wc_SrpSetUsername(&srp, username, usernameSize);
wc_SrpSetParams(&srp, N, sizeof(N), g, sizeof(g), salt, sizeof(salt));
wc_SrpSetPassword(&srp, password, passwordSize)

byte public[64];
word32 publicSz = 0;

if( wc_SrpGetPublic(&srp, public, &publicSz) != 0)
{
    // 公開エフェメラル取得エラー
}

wc_SrpTerm(&srp);

function wc_SrpComputeKey

int wc_SrpComputeKey(
    Srp * srp,
    byte * clientPubKey,
    word32 clientPubKeySz,
    byte * serverPubKey,
    word32 serverPubKeySz
)

セッション鍵を計算します。鍵は成功後にsrp->keyでアクセスできます。

Parameters:

  • srp Srp構造体。
  • clientPubKey クライアントの公開エフェメラル値。
  • clientPubKeySz クライアントの公開エフェメラル値のサイズ。
  • serverPubKey サーバーの公開エフェメラル値。
  • serverPubKeySz サーバーの公開エフェメラル値のサイズ。

See: wc_SrpGetPublic

Return:

  • 0 成功
  • BAD_FUNC_ARG srp、clientPubKey、またはserverPubKeyがnullの場合、またはclientPubKeySzまたはserverPubKeySzが0の場合に返されます。
  • SRP_CALL_ORDER_E wc_SrpComputeKeyが順序外で呼び出された場合に返されます。
  • <0 エラー

Example

Srp server;

byte username[] = "user";
    word32 usernameSize = 4;
byte password[] = "password";
word32 passwordSize = 8;
byte N[] = { }; // バイト配列Nの内容
byte g[] = { }; // バイト配列gの内容
byte salt[] = { }; // バイト配列saltの内容
byte verifier[] = { }; // 何らかの検証子の内容
byte serverPubKey[] = { }; // サーバー公開鍵の内容
word32 serverPubKeySize = sizeof(serverPubKey);
byte clientPubKey[64];
word32 clientPubKeySize = 64;

wc_SrpInit(&server, SRP_TYPE_SHA, SRP_SERVER_SIDE);
wc_SrpSetUsername(&server, username, usernameSize);
wc_SrpSetParams(&server, N, sizeof(N), g, sizeof(g), salt, sizeof(salt));
wc_SrpSetVerifier(&server, verifier, sizeof(verifier));
wc_SrpGetPublic(&server, serverPubKey, &serverPubKeySize);

wc_SrpComputeKey(&server, clientPubKey, clientPubKeySz,
                                      serverPubKey, serverPubKeySize)
wc_SrpTerm(&server);

function wc_SrpGetProof

int wc_SrpGetProof(
    Srp * srp,
    byte * proof,
    word32 * size
)

証明を取得します。この関数はwc_SrpComputeKeyの後に呼び出す必要があります。

Parameters:

  • srp Srp構造体。
  • proof ピアの証明。
  • size 証明のサイズ(バイト単位)。

See: wc_SrpComputeKey

Return:

  • 0 成功
  • BAD_FUNC_ARG srp、proof、またはsizeがnullの場合に返されます。
  • BUFFER_E sizeがsrp->typeのハッシュサイズより小さい場合に返されます。
  • <0 エラー

Example

Srp cli;
byte clientProof[SRP_MAX_DIGEST_SIZE];
word32 clientProofSz = SRP_MAX_DIGEST_SIZE;

// 前の例のステップに従ってSrpを初期化

if (wc_SrpGetProof(&cli, clientProof, &clientProofSz) != 0)
{
    // 証明取得エラー
}

function wc_SrpVerifyPeersProof

int wc_SrpVerifyPeersProof(
    Srp * srp,
    byte * proof,
    word32 size
)

ピアの証明を検証します。この関数はwc_SrpGetSessionKeyの前に呼び出す必要があります。

Parameters:

  • srp Srp構造体。
  • proof ピアの証明。
  • size 証明のサイズ(バイト単位)。

See:

Return:

  • 0 成功
  • <0 エラー

Example

Srp cli;
Srp srv;
byte clientProof[SRP_MAX_DIGEST_SIZE];
word32 clientProofSz = SRP_MAX_DIGEST_SIZE;

// 前の例のステップに従ってSrpを初期化
// 最初に証明を取得
wc_SrpGetProof(&cli, clientProof, &clientProofSz)

if (wc_SrpVerifyPeersProof(&srv, clientProof, clientProofSz) != 0)
{
    // 証明検証エラー
}

Source code


int wc_SrpInit(Srp* srp, SrpType type, SrpSide side);

void wc_SrpTerm(Srp* srp);

int wc_SrpSetUsername(Srp* srp, const byte* username, word32 size);

int wc_SrpSetParams(Srp* srp, const byte* N,    word32 nSz,
                                          const byte* g,    word32 gSz,
                                          const byte* salt, word32 saltSz);

int wc_SrpSetPassword(Srp* srp, const byte* password, word32 size);

int wc_SrpSetVerifier(Srp* srp, const byte* verifier, word32 size);

int wc_SrpGetVerifier(Srp* srp, byte* verifier, word32* size);

int wc_SrpSetPrivate(Srp* srp, const byte* priv, word32 size);

int wc_SrpGetPublic(Srp* srp, byte* pub, word32* size);

int wc_SrpComputeKey(Srp* srp,
                                 byte* clientPubKey, word32 clientPubKeySz,
                                 byte* serverPubKey, word32 serverPubKeySz);

int wc_SrpGetProof(Srp* srp, byte* proof, word32* size);

int wc_SrpVerifyPeersProof(Srp* srp, byte* proof, word32 size);

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