Algorithms - SRP
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))を計算し、それを認証フィールドに格納します。この関数は、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として知られています。サーバー側のand 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->キーでキーをアクセスできます。 |
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 使用するハッシュ型。 Example
Srp srp;
if (wc_SrpInit(&srp, SRP_TYPE_SHA, SRP_CLIENT_SIDE) != 0)
{
// Initialization error
}
else
{
wc_SrpTerm(&srp);
}
See:
Return:
- 0 成功しています。
- BAD_FUNC_ARG SRPなどの引数がNULLまたはSRPSIDEの問題がある場合は、SRP_CLIENT_SIESまたはSRP_SERVER_SIEDでは問題がある場合に返します。
- NOT_COMPILED_IN タイプが引数として渡されたが、WolfCryptビルドに設定されていない場合。
- <0 エラー時に。
function wc_SrpTerm
void wc_SrpTerm(
Srp * srp
)
使用後にSRP構造リソースを解放します。
See: wc_SrpInit
Return: none いいえ返します。 Example
Srp srp;
wc_SrpInit(&srp, SRP_TYPE_SHA, SRP_CLIENT_SIDE);
// Use srp
wc_SrpTerm(&srp)
function wc_SrpSetUsername
int wc_SrpSetUsername(
Srp * srp,
const byte * username,
word32 size
)
ユーザー名を設定します。この関数は、wc_srpinitの後に呼び出す必要があります。
Parameters:
- srp SRP構造
- username ユーザー名を含むバッファ。 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)
{
// Error occurred setting username.
}
wc_SrpTerm(&srp);
See:
Return:
- 0 ユーザー名は正常に設定されました。
- BAD_FUNC_ARG: srpまたはusernameがnullの場合に返します。
- MEMORY_E: SRP->ユーザーにメモリを割り当てる問題がある場合
- < 0:エラー。
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 小さいランダムなソルト。各ユーザー名に特有のものです。 Example
Srp srp;
byte username[] = "user";
word32 usernameSize = 4;
byte N[] = { }; // Contents of byte array N
byte g[] = { }; // Contents of byte array g
byte salt[] = { }; // Contents of byte array 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)
{
// Error setting params
}
wc_SrpTerm(&srp);
See:
Return:
- 0 成功
- BAD_FUNC_ARG SRP、N、G、またはSALTがNULLの場合、またはNSZ <GSZの場合は返します。
- SRP_CALL_ORDER_E wc_srpsetuserNameの前にwc_srpsetparamsが呼び出された場合、返します。
- <0 エラー
function wc_SrpSetPassword
int wc_SrpSetPassword(
Srp * srp,
const byte * password,
word32 size
)
パスワードを設定します。パスワードを設定しても、SRP構造内のパスワードデータが消去されません。クライアントは、x = h(salt + h(user:pswd))を計算し、それを認証フィールドに格納します。この関数は、wc_srpsetparamsの後に呼び出されなければならず、クライアント側のみです。
Parameters:
- srp SRP構造
- password パスワードを含むバッファ。 Example
Srp srp;
byte username[] = "user";
word32 usernameSize = 4;
byte password[] = "password";
word32 passwordSize = 8;
byte N[] = { }; // Contents of byte array N
byte g[] = { }; // Contents of byte array g
byte salt[] = { }; // Contents of byte array 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)
{
// Error setting password
}
wc_SrpTerm(&srp);
See:
Return:
- 0 成功
- BAD_FUNC_ARG srpまたはpasswordがnullの場合、またはsrp-> sideがsrp_client_sideに設定されていない場合。
- SRP_CALL_ORDER_E WC_SRPSETPASSWORDが順不同で呼び出されたときに戻ります。
- <0 エラー
function wc_SrpSetVerifier
int wc_SrpSetVerifier(
Srp * srp,
const byte * verifier,
word32 size
)
検証者を設定します。この関数は、wc_srpsetparamsの後に呼び出され、サーバー側のみです。
Parameters:
- srp SRP構造
- verifier 検証者を含む構造体。 Example
Srp srp;
byte username[] = "user";
word32 usernameSize = 4;
byte N[] = { }; // Contents of byte array N
byte g[] = { }; // Contents of byte array g
byte salt[] = { }; // Contents of byte array 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[] = { }; // Contents of some verifier
if(wc_SrpSetVerifier(&srp, verifier, sizeof(verifier)) != 0)
{
// Error setting verifier
}
wc_SrpTerm(&srp);
See:
Return:
- 0 成功
- BAD_FUNC_ARG SRPまたはVerifierがNULLまたはSRP-> ISの場合、SRP_SERVER_SIEDではなく返されます。
- <0 エラー
function wc_SrpGetVerifier
int wc_SrpGetVerifier(
Srp * srp,
byte * verifier,
word32 * size
)
検証者を取得します。クライアントはV = g ^ x%Nで検証者を計算します。この関数は、wc_srpsetpasswordの後に呼び出され、クライアント側のみです。
Parameters:
- srp SRP構造
- verifier 検証者を書き込むためのバッファー。 Example
Srp srp;
byte username[] = "user";
word32 usernameSize = 4;
byte password[] = "password";
word32 passwordSize = 8;
byte N[] = { }; // Contents of byte array N
byte g[] = { }; // Contents of byte array g
byte salt[] = { }; // Contents of byte array 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)
{
// Error getting verifier
}
wc_SrpTerm(&srp);
See:
Return:
- 0 成功
- BAD_FUNC_ARG SRP、Verifier、またはSizeがNULLの場合、またはSRP-> SIDEがSRP_CLIENT_SIEDではない場合に返されます。
- SRP_CALL_ORDER_E WC_SRPGetverifierが順不同で呼び出された場合に返されます。
- <0 エラー
function wc_SrpSetPrivate
int wc_SrpSetPrivate(
Srp * srp,
const byte * priv,
word32 size
)
プライベートのエフェラル値を設定します。プライベートの一時的な値は、クライアント側のAとして知られています。サーバー側のand random()b。b = random()この関数は、ユニットテストケース、または開発者が外部ランダムソースを使用してエフェメラル値を設定したい場合は便利です。この関数は、WC_SRPGetPublicの前に呼び出されることがあります。
Parameters:
- srp SRP構造
- priv 一時的な値。 Example
Srp srp;
byte username[] = "user";
word32 usernameSize = 4;
byte N[] = { }; // Contents of byte array N
byte g[] = { }; // Contents of byte array g
byte salt[] = { }; // Contents of byte array salt
byte verifier = { }; // Contents of some 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[] = { }; // Some ephemeral value
if( wc_SrpSetPrivate(&srp, b, sizeof(b)) != 0)
{
// Error setting private ephemeral
}
wc_SrpTerm(&srp);
See: wc_SrpGetPublic
Return:
- 0 成功
- BAD_FUNC_ARG SRP、Private、またはSizeがNULLの場合に返されます。
- SRP_CALL_ORDER_E WC_SRPSetPrivateが順不同で呼び出された場合に返されます。
- <0 エラー
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 パブリックエフェラル値を書き込むためのバッファ。 Example
Srp srp;
byte username[] = "user";
word32 usernameSize = 4;
byte password[] = "password";
word32 passwordSize = 8;
byte N[] = { }; // Contents of byte array N
byte g[] = { }; // Contents of byte array g
byte salt[] = { }; // Contents of byte array 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)
{
// Error getting public ephemeral
}
wc_SrpTerm(&srp);
See:
Return:
- 0 成功
- BAD_FUNC_ARG srp、pub、またはsizeがnullの場合に返されます。
- SRP_CALL_ORDER_E WC_SRPGetPublicが順不同で呼び出された場合に返されます。
- BUFFER_E サイズ<srp.nの場合は返しました。
- <0 エラー
function wc_SrpComputeKey
int wc_SrpComputeKey(
Srp * srp,
byte * clientPubKey,
word32 clientPubKeySz,
byte * serverPubKey,
word32 serverPubKeySz
)
セッションキーを計算します。成功後にSRP->キーでキーをアクセスできます。
Parameters:
- srp SRP構造
- clientPubKey クライアントの公共の一時的な価値。
- clientPubKeySz クライアントの公共の一時的な値のサイズ。
- serverPubKey サーバーの一般の一時的な値。 Example
Srp server;
byte username[] = "user";
word32 usernameSize = 4;
byte password[] = "password";
word32 passwordSize = 8;
byte N[] = { }; // Contents of byte array N
byte g[] = { }; // Contents of byte array g
byte salt[] = { }; // Contents of byte array salt
byte verifier[] = { }; // Contents of some verifier
byte serverPubKey[] = { }; // Contents of server pub key
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);
See: wc_SrpGetPublic
Return:
- 0 成功
- BAD_FUNC_ARG SRP、ClientPubKey、またはServerPubKeyの場合、またはClientPubkeyszまたはServerPubKeyszが0の場合に返されます。
- SRP_CALL_ORDER_E WC_SRPComputeKeyが順不同で呼び出された場合に返されます。
- <0 エラー
function wc_SrpGetProof
int wc_SrpGetProof(
Srp * srp,
byte * proof,
word32 * size
)
証明を取得します。この関数は、wc_srpcomputekeyの後に呼び出す必要があります。
Parameters:
- srp SRP構造
- proof ピアプルーフ。 Example
Srp cli;
byte clientProof[SRP_MAX_DIGEST_SIZE];
word32 clientProofSz = SRP_MAX_DIGEST_SIZE;
// Initialize Srp following steps from previous examples
if (wc_SrpGetProof(&cli, clientProof, &clientProofSz) != 0)
{
// Error getting proof
}
See: wc_SrpComputeKey
Return:
- 0 成功
- BAD_FUNC_ARG SRP、PROV、またはSIZEがNULLの場合に返します。
- BUFFER_E サイズがSRP-> Typeのハッシュサイズより小さい場合に返します。
- <0 エラー
function wc_SrpVerifyPeersProof
int wc_SrpVerifyPeersProof(
Srp * srp,
byte * proof,
word32 size
)
ピアプルーフを確認します。この関数は、WC_SRPGetSessionKeyの前に呼び出す必要があります。
Parameters:
- srp SRP構造
- proof ピアプルーフ。 Example
Srp cli;
Srp srv;
byte clientProof[SRP_MAX_DIGEST_SIZE];
word32 clientProofSz = SRP_MAX_DIGEST_SIZE;
// Initialize Srp following steps from previous examples
// First get the proof
wc_SrpGetProof(&cli, clientProof, &clientProofSz)
if (wc_SrpVerifyPeersProof(&srv, clientProof, clientProofSz) != 0)
{
// Error verifying proof
}
See:
- wc_SrpGetSessionKey
- wc_SrpGetProof
- wc_SrpTerm
Return:
- 0 成功
- <0 エラー
Updated on 2024-11-21 at 02:35:59 +0000