123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399 |
- /*!
- \ingroup SRP
- \brief 使用方法のためにSRP構造体を初期化します。
- \return 0 成功しています。
- \return BAD_FUNC_ARG SRPなどの引数がNULLまたはSRPSIDEの問題がある場合は、SRP_CLIENT_SIESまたはSRP_SERVER_SIEDでは問題がある場合に返します。
- \return NOT_COMPILED_IN タイプが引数として渡されたが、WolfCryptビルドに設定されていない場合。
- \return <0 エラー時に。
- \param srp 初期化されるSRP構造。
- \param type 使用するハッシュ型。
- _Example_
- \code
- Srp srp;
- if (wc_SrpInit(&srp, SRP_TYPE_SHA, SRP_CLIENT_SIDE) != 0)
- {
- // Initialization error
- }
- else
- {
- wc_SrpTerm(&srp);
- }
- \endcode
- \sa wc_SrpTerm
- \sa wc_SrpSetUsername
- */
- int wc_SrpInit(Srp* srp, SrpType type, SrpSide side);
- /*!
- \ingroup SRP
- \brief 使用後にSRP構造リソースを解放します。
- \return none いいえ返します。
- _Example_
- \code
- Srp srp;
- wc_SrpInit(&srp, SRP_TYPE_SHA, SRP_CLIENT_SIDE);
- // Use srp
- wc_SrpTerm(&srp)
- \endcode
- \sa wc_SrpInit
- */
- void wc_SrpTerm(Srp* srp);
- /*!
- \ingroup SRP
- \brief ユーザー名を設定します。この関数は、wc_srpinitの後に呼び出す必要があります。
- \return 0 ユーザー名は正常に設定されました。
- \return BAD_FUNC_ARG: srpまたはusernameがnullの場合に返します。
- \return MEMORY_E: SRP->ユーザーにメモリを割り当てる問題がある場合
- \return < 0:エラー。
- \param srp SRP構造
- \param username ユーザー名を含むバッファ。
- _Example_
- \code
- 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);
- \endcode
- \sa wc_SrpInit
- \sa wc_SrpSetParams
- \sa wc_SrpTerm
- */
- int wc_SrpSetUsername(Srp* srp, const byte* username, word32 size);
- /*!
- \ingroup SRP
- \brief ユーザー名に基づいてSRPパラメータを設定します.. wc_srpsetuserNameの後に呼び出す必要があります。
- \return 0 成功
- \return BAD_FUNC_ARG SRP、N、G、またはSALTがNULLの場合、またはNSZ <GSZの場合は返します。
- \return SRP_CALL_ORDER_E wc_srpsetuserNameの前にwc_srpsetparamsが呼び出された場合、返します。
- \return <0 エラー
- \param srp SRP構造
- \param N 弾性率n = 2q + 1、[q、n]はプリムです。
- \param nSz nサイズをバイト単位で。
- \param g ジェネレータモジュロN.
- \param gSz バイト数のGサイズ
- \param salt 小さいランダムな塩。各ユーザー名に特有のものです。
- _Example_
- \code
- 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);
- \endcode
- \sa wc_SrpInit
- \sa wc_SrpSetUsername
- \sa wc_SrpTerm
- */
- int wc_SrpSetParams(Srp* srp, const byte* N, word32 nSz,
- const byte* g, word32 gSz,
- const byte* salt, word32 saltSz);
- /*!
- \ingroup SRP
- \brief パスワードを設定します。パスワードを設定しても、SRP構造内のパスワードデータが消去されません。クライアントは、x = h(salt + h(user:pswd))を計算し、それを認証フィールドに格納します。この関数は、wc_srpsetparamsの後に呼び出されなければならず、クライアント側のみです。
- \return 0 成功
- \return BAD_FUNC_ARG srpまたはpasswordがnullの場合、またはsrp-> sideがsrp_client_sideに設定されていない場合。
- \return SRP_CALL_ORDER_E WC_SRPSETPASSWORDが順不同で呼び出されたときに戻ります。
- \return <0 エラー
- \param srp SRP構造
- \param password パスワードを含むバッファ。
- _Example_
- \code
- 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);
- \endcode
- \sa wc_SrpInit
- \sa wc_SrpSetUsername
- \sa wc_SrpSetParams
- */
- int wc_SrpSetPassword(Srp* srp, const byte* password, word32 size);
- /*!
- \ingroup SRP
- \brief 検証者を設定します。この関数は、wc_srpsetparamsの後に呼び出され、サーバー側のみです。
- \return 0 成功
- \return BAD_FUNC_ARG SRPまたはVerifierがNULLまたはSRP-> ISの場合、SRP_SERVER_SIEDではなく返されます。
- \return <0 エラー
- \param srp SRP構造
- \param verifier 検証者を含む構造体。
- _Example_
- \code
- 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);
- \endcode
- \sa wc_SrpInit
- \sa wc_SrpSetParams
- \sa wc_SrpGetVerifier
- */
- int wc_SrpSetVerifier(Srp* srp, const byte* verifier, word32 size);
- /*!
- \ingroup SRP
- \brief 検証者を取得します。クライアントはV = g ^ x%Nで検証者を計算します。この関数は、wc_srpsetpasswordの後に呼び出され、クライアント側のみです。
- \return 0 成功
- \return BAD_FUNC_ARG SRP、Verifier、またはSizeがNULLの場合、またはSRP-> SIDEがSRP_CLIENT_SIEDではない場合に返されます。
- \return SRP_CALL_ORDER_E WC_SRPGetverifierが順不同で呼び出された場合に返されます。
- \return <0 エラー
- \param srp SRP構造
- \param verifier 検証者を書き込むためのバッファー。
- _Example_
- \code
- 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);
- \endcode
- \sa wc_SrpSetVerifier
- \sa wc_SrpSetPassword
- */
- int wc_SrpGetVerifier(Srp* srp, byte* verifier, word32* size);
- /*!
- \ingroup SRP
- \brief プライベートのエフェラル値を設定します。プライベートの一時的な値は、クライアント側のAとして知られています。サーバー側のand random()b。b = random()この関数は、ユニットテストケース、または開発者が外部ランダムソースを使用してエフェメラル値を設定したい場合は便利です。この関数は、WC_SRPGetPublicの前に呼び出されることがあります。
- \return 0 成功
- \return BAD_FUNC_ARG SRP、Private、またはSizeがNULLの場合に返されます。
- \return SRP_CALL_ORDER_E WC_SRPSetPrivateが順不同で呼び出された場合に返されます。
- \return <0 エラー
- \param srp SRP構造
- \param priv 一時的な値。
- _Example_
- \code
- 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);
- \endcode
- \sa wc_SrpGetPublic
- */
- int wc_SrpSetPrivate(Srp* srp, const byte* priv, word32 size);
- /*!
- \ingroup SRP
- \brief 公共の一時的な値を取得します。公共の一時的な値は、クライアント側のAとして知られています。サーバ側のA = g ^ A%n b。B =(k * v +(g b%n))%n wc_srpsetpasswordまたはwc_srpsetverifierの後に呼び出す必要があります。関数WC_SRPSetPrivateは、WC_SRPGetPublicの前に呼び出されることがあります。
- \return 0 成功
- \return BAD_FUNC_ARG srp、pub、またはsizeがnullの場合に返されます。
- \return SRP_CALL_ORDER_E WC_SRPGetPublicが順不同で呼び出された場合に返されます。
- \return BUFFER_E サイズ<srp.nの場合は返しました。
- \return <0 エラー
- \param srp SRP構造
- \param pub パブリックエフェラル値を書き込むためのバッファ。
- _Example_
- \code
- 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);
- \endcode
- \sa wc_SrpSetPrivate
- \sa wc_SrpSetPassword
- \sa wc_SrpSetVerifier
- */
- int wc_SrpGetPublic(Srp* srp, byte* pub, word32* size);
- /*!
- \ingroup SRP
- \brief セッションキーを計算します。成功後にSRP->キーでキーをアクセスできます。
- \return 0 成功
- \return BAD_FUNC_ARG SRP、ClientPubKey、またはServerPubKeyの場合、またはClientPubkeyszまたはServerPubKeyszが0の場合に返されます。
- \return SRP_CALL_ORDER_E WC_SRPComputeKeyが順不同で呼び出された場合に返されます。
- \return <0 エラー
- \param srp SRP構造
- \param clientPubKey クライアントの公共の一時的な価値。
- \param clientPubKeySz クライアントの公共の一時的な値のサイズ。
- \param serverPubKey サーバーの一般の一時的な値。
- _Example_
- \code
- 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);
- \endcode
- \sa wc_SrpGetPublic
- */
- int wc_SrpComputeKey(Srp* srp,
- byte* clientPubKey, word32 clientPubKeySz,
- byte* serverPubKey, word32 serverPubKeySz);
- /*!
- \ingroup SRP
- \brief 証明を取得します。この関数は、wc_srpcomputekeyの後に呼び出す必要があります。
- \return 0 成功
- \return BAD_FUNC_ARG SRP、PROV、またはSIZEがNULLの場合に返します。
- \return BUFFER_E サイズがSRP-> Typeのハッシュサイズより小さい場合に返します。
- \return <0 エラー
- \param srp SRP構造
- \param proof ピアプルーフ。
- _Example_
- \code
- 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
- }
- \endcode
- \sa wc_SrpComputeKey
- */
- int wc_SrpGetProof(Srp* srp, byte* proof, word32* size);
- /*!
- \ingroup SRP
- \brief ピアプルーフを確認します。この関数は、WC_SRPGetSessionKeyの前に呼び出す必要があります。
- \return 0 成功
- \return <0 エラー
- \param srp SRP構造
- \param proof ピアプルーフ。
- _Example_
- \code
- 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
- }
- \endcode
- \sa wc_SrpGetSessionKey
- \sa wc_SrpGetProof
- \sa wc_SrpTerm
- */
- int wc_SrpVerifyPeersProof(Srp* srp, byte* proof, word32 size);
|