コンテンツにスキップ

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:

Return:

  • 0 成功
  • <0 エラー

Updated on 2024-04-24 at 02:41:03 +0000