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:
- wc_SrpGetSessionKey
- wc_SrpGetProof
- wc_SrpTerm
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