dbb34126f6
* Added PK callback context tests for client/server examples (`SetupPkCallbackContexts`). * Added new test define for `TEST_PK_PRIVKEY` to allows simulating hardware based private key. * Added new test.h function for loading PEM key file and converting to DER (`load_key_file`). * Added way to get private key signature size (`GetPrivateKeySigSize`). * Added new ECC API `wc_ecc_sig_size_calc` to return max signature size for a key size. * Added inline comments to help track down handshake message types. * Cleanup of RSS PSS terminating byte (0xbc) to use enum value. * Fixed bug with PK callback for `myEccVerify` public key format. * Fixed bug with PK callback for ED25519 verify key buffer in DoServerKeyExchange.
679 lines
21 KiB
C
679 lines
21 KiB
C
/*!
|
||
\ingroup Curve25519
|
||
|
||
\brief This function generates a curve25519 key using the given random
|
||
number generator, rng, of the size given (keysize), and stores it in
|
||
the given curve25519_key structure. It should be called after the key
|
||
structure has been initialized through wc_curve25519_init.
|
||
|
||
\return 0 Returned on successfully generating the key and and storing
|
||
it in the given curve25519_key structure
|
||
\return ECC_BAD_ARG_E Returned if rng or key evaluate to NULL, or
|
||
the input keysize does not correspond to the keysize for a
|
||
curve25519 key ( 32 bytes)
|
||
\return RNG_FAILURE_E Returned if the rng internal status is not
|
||
DRBG_OK or if there is in generating the next random block with rng
|
||
|
||
\param rng pointer to the RNG object used to generate the ecc key
|
||
\param keysize size of the key to generate. Must be 32 bytes for curve25519
|
||
\param key pointer to the curve25519_key structure in which to
|
||
store the generated key
|
||
|
||
_Example_
|
||
\code
|
||
curve25519_key key;
|
||
wc_curve25519_init(&key); // initialize key
|
||
WC_RNG rng;
|
||
wc_InitRng(&rng); // initialize random number generator
|
||
|
||
if( wc_curve25519_make_key(&rng, 32, &key) != 0) {
|
||
// making 25519 key
|
||
}
|
||
\endcode
|
||
|
||
\sa wc_curve25519_init
|
||
*/
|
||
WOLFSSL_API
|
||
int wc_curve25519_make_key(WC_RNG* rng, int keysize, curve25519_key* key);
|
||
/*!
|
||
\ingroup Curve25519
|
||
|
||
\brief This function computes a shared secret key given a secret private
|
||
key and a received public key. It stores the generated secret key in the
|
||
buffer out and assigns the variable of the secret key to outlen. Only
|
||
supports big endian.
|
||
|
||
\return 0 Returned on successfully computing a shared secret key
|
||
\return BAD_FUNC_ARG Returned if any of the input parameters passed in
|
||
are NULL
|
||
\return ECC_BAD_ARG_E Returned if the first bit of the public key is
|
||
set, to avoid implementation fingerprinting
|
||
|
||
\param private_key pointer to the curve25519_key structure initialized
|
||
with the user’s private key
|
||
\param public_key pointer to the curve25519_key structure containing
|
||
the received public key
|
||
\param out pointer to a buffer in which to store the 32 byte computed
|
||
secret key
|
||
\param outlen pointer in which to store the length written to the
|
||
output buffer
|
||
|
||
_Example_
|
||
\code
|
||
byte sharedKey[32];
|
||
word32 keySz;
|
||
curve25519_key privKey, pubKey;
|
||
// initialize both keys
|
||
|
||
if ( wc_curve25519_shared_secret(&privKey, &pubKey, sharedKey,
|
||
&keySz) != 0 ) {
|
||
// error generating shared key
|
||
}
|
||
\endcode
|
||
|
||
\sa wc_curve25519_init
|
||
\sa wc_curve25519_make_key
|
||
\sa wc_curve25519_shared_secret_ex
|
||
*/
|
||
WOLFSSL_API
|
||
int wc_curve25519_shared_secret(curve25519_key* private_key,
|
||
curve25519_key* public_key,
|
||
byte* out, word32* outlen);
|
||
/*!
|
||
\ingroup Curve25519
|
||
|
||
\brief This function computes a shared secret key given a secret private
|
||
key and a received public key. It stores the generated secret key in the
|
||
buffer out and assigns the variable of the secret key to outlen. Supports
|
||
both big and little endian.
|
||
|
||
\return 0 Returned on successfully computing a shared secret key
|
||
\return BAD_FUNC_ARG Returned if any of the input parameters passed in
|
||
are NULL
|
||
\return ECC_BAD_ARG_E Returned if the first bit of the public key is set,
|
||
to avoid implementation fingerprinting
|
||
|
||
\param private_key pointer to the curve25519_key structure initialized
|
||
with the user’s private key
|
||
\param public_key pointer to the curve25519_key structure containing
|
||
the received public key
|
||
\param out pointer to a buffer in which to store the 32 byte computed
|
||
secret key
|
||
\param outlen pointer in which to store the length written to the output
|
||
buffer
|
||
\param endian EC25519_BIG_ENDIAN or EC25519_LITTLE_ENDIAN to set which
|
||
form to use.
|
||
|
||
_Example_
|
||
\code
|
||
byte sharedKey[32];
|
||
word32 keySz;
|
||
|
||
curve25519_key privKey, pubKey;
|
||
// initialize both keys
|
||
|
||
if ( wc_curve25519_shared_secret_ex(&privKey, &pubKey, sharedKey, &keySz,
|
||
EC25519_BIG_ENDIAN) != 0 ) {
|
||
// error generating shared key
|
||
}
|
||
\endcode
|
||
|
||
\sa wc_curve25519_init
|
||
\sa wc_curve25519_make_key
|
||
\sa wc_curve25519_shared_secret
|
||
*/
|
||
WOLFSSL_API
|
||
int wc_curve25519_shared_secret_ex(curve25519_key* private_key,
|
||
curve25519_key* public_key,
|
||
byte* out, word32* outlen, int endian);
|
||
/*!
|
||
\ingroup Curve25519
|
||
|
||
\brief This function initializes a curve25519 key. It should be called
|
||
before generating a key for the structure with wc_curve25519_init and
|
||
before using the key to encrypt data.
|
||
|
||
\return 0 Returned on successfully initializing the curve25519_key
|
||
structure
|
||
|
||
\param key pointer to the curve25519_key structure to initialize
|
||
|
||
_Example_
|
||
\code
|
||
curve25519_key key;
|
||
wc_curve25519_init(&key); // initialize key
|
||
// make key and proceed to encryption
|
||
\endcode
|
||
|
||
\sa wc_curve25519_make_key
|
||
*/
|
||
WOLFSSL_API
|
||
int wc_curve25519_init(curve25519_key* key);
|
||
/*!
|
||
\ingroup Curve25519
|
||
|
||
\brief This function frees a curve 25519 object.
|
||
|
||
\return none No returns.
|
||
|
||
\param key pointer to the key object to free
|
||
|
||
_Example_
|
||
\code
|
||
curve25519_key privKey;
|
||
// initialize key, use it to generate shared secret key
|
||
wc_curve25519_free(&privKey);
|
||
\endcode
|
||
|
||
\sa wc_curve25519_init
|
||
\sa wc_curve25519_make_key
|
||
*/
|
||
WOLFSSL_API
|
||
void wc_curve25519_free(curve25519_key* key);
|
||
/*!
|
||
\ingroup Curve25519
|
||
|
||
\brief This function imports a curve25519 private key only. (Big endian).
|
||
|
||
\return 0 Success
|
||
\return BAD_FUNC_ARG Returns if key or priv is null.
|
||
\return ECC_BAD_ARG_E Returns if privSz is not equal to
|
||
wc_curve25519_size(key).
|
||
|
||
\param priv Private key buffer
|
||
\param privSz Size of private key buffer.
|
||
\param key The curve25519_key structure to store the private key.
|
||
|
||
_Example_
|
||
\code
|
||
byte priv[] = { Contents of private key };
|
||
curve25519_key key;
|
||
wc_curve25519_init(&key);
|
||
|
||
if(wc_curve25519_import_private(priv, sizeof(priv), &key) != 0)
|
||
{
|
||
// Some error was thrown
|
||
}
|
||
\endcode
|
||
|
||
\sa wc_curve25519_import_private_ex
|
||
\sa wc_curve25519_size
|
||
*/
|
||
WOLFSSL_API
|
||
int wc_curve25519_import_private(const byte* priv, word32 privSz,
|
||
curve25519_key* key);
|
||
/*!
|
||
\ingroup Curve25519
|
||
|
||
\brief curve25519 private key import only. (Big or Little endian).
|
||
|
||
\return 0 Success
|
||
\return Returns if key or priv is null.
|
||
\return ECC_BAD_ARG_E Returns if privSz is not equal to
|
||
wc_curve25519_size(key).
|
||
|
||
\param priv Buffer for private key.
|
||
\param privSz Size of private key buffer.
|
||
\param key The curve25519_key structure to store the private key.
|
||
\param endian EC25519_BIG_ENDIAN or EC25519_LITTLE_ENDIAN to
|
||
set which form to use.
|
||
|
||
_Example_
|
||
\code
|
||
byte priv[] = { // Contents of private key };
|
||
curve25519_key key;
|
||
wc_curve25519_init(&key);
|
||
|
||
if(wc_curve25519_import_private_ex(priv, sizeof(priv), &key,
|
||
EC25519_BIG_ENDIAN) != 0)
|
||
{
|
||
// Some error was thrown
|
||
}
|
||
|
||
\endcode
|
||
|
||
\sa wc_curve25519_import_private
|
||
\sa wc_curbe25519_size
|
||
*/
|
||
WOLFSSL_API
|
||
int wc_curve25519_import_private_ex(const byte* priv, word32 privSz,
|
||
curve25519_key* key, int endian);
|
||
/*!
|
||
\ingroup Curve25519
|
||
|
||
\brief This function imports a public-private key pair into a
|
||
curve25519_key structure. Big endian only.
|
||
|
||
\return 0 Returned on importing into the curve25519_key structure
|
||
\return ECC_BAD_ARG_E Returned if any of the input parameters
|
||
are NULL, or the input key’s key size does not match the public
|
||
or private key sizes
|
||
|
||
\param priv pointer to a buffer containing the private key to import
|
||
\param privSz length of the private key to import
|
||
\param pub pointer to a buffer containing the public key to import
|
||
\param pubSz length of the public key to import
|
||
\param key pointer to the structure in which to store the imported keys
|
||
|
||
_Example_
|
||
\code
|
||
int ret;
|
||
|
||
byte priv[32];
|
||
byte pub[32];
|
||
// initialize with public and private keys
|
||
curve25519_key key;
|
||
|
||
wc_curve25519_init(&key);
|
||
// initialize key
|
||
|
||
ret = wc_curve25519_import_private_raw(&priv, sizeof(priv), pub,
|
||
sizeof(pub),&key);
|
||
if (ret != 0) {
|
||
// error importing keys
|
||
}
|
||
\endcode
|
||
|
||
\sa wc_curve25519_init
|
||
\sa wc_curve25519_make_key
|
||
\sa wc_curve25519_import_public
|
||
\sa wc_curve25519_export_private_raw
|
||
*/
|
||
WOLFSSL_API
|
||
int wc_curve25519_import_private_raw(const byte* priv, word32 privSz,
|
||
const byte* pub, word32 pubSz, curve25519_key* key);
|
||
/*!
|
||
\ingroup Curve25519
|
||
|
||
\brief This function imports a public-private key pair into a curve25519_key structure. Supports both big and little endian.
|
||
|
||
\return 0 Returned on importing into the curve25519_key structure
|
||
\return ECC_BAD_ARG_E Returned if any of the input parameters are NULL,
|
||
or the input key’s key size does not match the public or private key sizes
|
||
|
||
\param priv pointer to a buffer containing the private key to import
|
||
\param privSz length of the private key to import
|
||
\param pub pointer to a buffer containing the public key to import
|
||
\param pubSz length of the public key to import
|
||
\param key pointer to the structure in which to store the imported keys
|
||
\param endian EC25519_BIG_ENDIAN or EC25519_LITTLE_ENDIAN to set
|
||
which form to use.
|
||
|
||
_Example_
|
||
\code
|
||
int ret;
|
||
byte priv[32];
|
||
byte pub[32];
|
||
// initialize with public and private keys
|
||
curve25519_key key;
|
||
|
||
wc_curve25519_init(&key);
|
||
// initialize key
|
||
|
||
ret = wc_curve25519_import_private_raw_ex(&priv, sizeof(priv), pub,
|
||
sizeof(pub),&key, EC25519_BIG_ENDIAN);
|
||
if (ret != 0) {
|
||
// error importing keys
|
||
}
|
||
\endcode
|
||
|
||
\sa wc_curve25519_init
|
||
\sa wc_curve25519_make_key
|
||
\sa wc_curve25519_import_public
|
||
\sa wc_curve25519_export_private_rawm
|
||
\sa wc_curve25519_import_private_raw
|
||
*/
|
||
WOLFSSL_API
|
||
int wc_curve25519_import_private_raw_ex(const byte* priv, word32 privSz,
|
||
const byte* pub, word32 pubSz,
|
||
curve25519_key* key, int endian);
|
||
/*!
|
||
\ingroup Curve25519
|
||
|
||
\brief This function exports a private key from a curve25519_key structure
|
||
and stores it in the given out buffer. It also sets outLen to be the size
|
||
of the exported key. Big Endian only.
|
||
|
||
\return 0 Returned on successfully exporting the private key from the
|
||
curve25519_key structure
|
||
\return BAD_FUNC_ARG Returned if any input parameters are NULL.
|
||
\return ECC_BAD_ARG_E Returned if wc_curve25519_size() is not equal to key.
|
||
|
||
\param key pointer to the structure from which to export the key
|
||
\param out pointer to the buffer in which to store the exported key
|
||
\param outLen will store the bytes written to the output buffer
|
||
|
||
_Example_
|
||
\code
|
||
int ret;
|
||
byte priv[32];
|
||
int privSz;
|
||
|
||
curve25519_key key;
|
||
// initialize and make key
|
||
|
||
ret = wc_curve25519_export_private_raw(&key, priv, &privSz);
|
||
if (ret != 0) {
|
||
// error exporting key
|
||
}
|
||
\endcode
|
||
|
||
\sa wc_curve25519_init
|
||
\sa wc_curve25519_make_key
|
||
\sa wc_curve25519_import_private_raw
|
||
\sa wc_curve25519_export_private_raw_ex
|
||
*/
|
||
WOLFSSL_API
|
||
int wc_curve25519_export_private_raw(curve25519_key* key, byte* out,
|
||
word32* outLen);
|
||
/*!
|
||
\ingroup Curve25519
|
||
|
||
\brief This function exports a private key from a curve25519_key structure
|
||
and stores it in the given out buffer. It also sets outLen to be the size
|
||
of the exported key. Can specify whether it's big or little endian.
|
||
|
||
\return 0 Returned on successfully exporting the private key from the
|
||
curve25519_key structure
|
||
\return BAD_FUNC_ARG Returned if any input parameters are NULL.
|
||
\return ECC_BAD_ARG_E Returned if wc_curve25519_size() is not equal to key.
|
||
|
||
\param key pointer to the structure from which to export the key
|
||
\param out pointer to the buffer in which to store the exported key
|
||
\param outLen will store the bytes written to the output buffer
|
||
\param endian EC25519_BIG_ENDIAN or EC25519_LITTLE_ENDIAN to set which
|
||
form to use.
|
||
|
||
_Example_
|
||
\code
|
||
int ret;
|
||
|
||
byte priv[32];
|
||
int privSz;
|
||
curve25519_key key;
|
||
// initialize and make key
|
||
ret = wc_curve25519_export_private_raw_ex(&key, priv, &privSz,
|
||
EC25519_BIG_ENDIAN);
|
||
if (ret != 0) {
|
||
// error exporting key
|
||
}
|
||
\endcode
|
||
|
||
\sa wc_curve25519_init
|
||
\sa wc_curve25519_make_key
|
||
\sa wc_curve25519_import_private_raw
|
||
\sa wc_curve25519_export_private_raw
|
||
\sa wc_curve25519_size
|
||
*/
|
||
WOLFSSL_API
|
||
int wc_curve25519_export_private_raw_ex(curve25519_key* key, byte* out,
|
||
word32* outLen, int endian);
|
||
/*!
|
||
\ingroup Curve25519
|
||
|
||
\brief This function imports a public key from the given in buffer and
|
||
stores it in the curve25519_key structure.
|
||
|
||
\return 0 Returned on successfully importing the public key into the
|
||
curve25519_key structure
|
||
\return ECC_BAD_ARG_E Returned if any of the input parameters are NULL,
|
||
or if the inLen
|
||
parameter does not match the key size of the key structure.
|
||
\return BAD_FUNC_ARG Returned if any of the input parameters are NULL.
|
||
|
||
\param in pointer to the buffer containing the public key to import
|
||
\param inLen length of the public key to import
|
||
\param key pointer to the curve25519_key structure in which to store
|
||
the key
|
||
|
||
_Example_
|
||
\code
|
||
int ret;
|
||
|
||
byte pub[32];
|
||
// initialize pub with public key
|
||
|
||
curve25519_key key;
|
||
// initialize key
|
||
|
||
ret = wc_curve25519_import_public(pub,sizeof(pub), &key);
|
||
if (ret != 0) {
|
||
// error exporting key
|
||
}
|
||
\endcode
|
||
|
||
\sa wc_curve25519_init
|
||
\sa wc_curve25519_export_public
|
||
\sa wc_curve25519_import_private_raw
|
||
\sa wc_curve25519_public_ex
|
||
*/
|
||
WOLFSSL_API
|
||
int wc_curve25519_import_public(const byte* in, word32 inLen,
|
||
curve25519_key* key);
|
||
/*!
|
||
\ingroup Curve25519
|
||
|
||
\brief This function imports a public key from the given in buffer and
|
||
stores it in the curve25519_key structure.
|
||
|
||
\brief 0 Returned on successfully importing the public key into the
|
||
curve25519_key structure
|
||
\brief ECC_BAD_ARG_E Returned if the inLen parameter does not match the
|
||
key size of the key structure
|
||
\brief BAD_FUNC_ARG Returned if any of the input parameters are NULL.
|
||
|
||
\param in pointer to the buffer containing the public key to import
|
||
\param inLen length of the public key to import
|
||
\param key pointer to the curve25519_key structure in which to store
|
||
the key
|
||
\param endian EC25519_BIG_ENDIAN or EC25519_LITTLE_ENDIAN to set which
|
||
form to use.
|
||
|
||
_Example_
|
||
\code
|
||
int ret;
|
||
byte pub[32];
|
||
// initialize pub with public key
|
||
curve25519_key key;
|
||
// initialize key
|
||
|
||
ret = wc_curve25519_import_public_ex(pub,sizeof(pub), &key,
|
||
EC25519_BIG_ENDIAN);
|
||
if (ret != 0) {
|
||
// error exporting key
|
||
}
|
||
\endcode
|
||
|
||
\sa wc_curve25519_init
|
||
\sa wc_curve25519_export_public
|
||
\sa wc_curve25519_import_private_raw
|
||
\sa wc_curve25519_import_public
|
||
\sa wc_25519_size
|
||
*/
|
||
WOLFSSL_API
|
||
int wc_curve25519_import_public_ex(const byte* in, word32 inLen,
|
||
curve25519_key* key, int endian);
|
||
/*!
|
||
\ingroup Curve25519
|
||
|
||
\brief This function exports a public key from the given key structure and
|
||
stores the result in the out buffer. Big endian only.
|
||
|
||
\return 0 Returned on successfully exporting the public key from the
|
||
curve25519_key structure
|
||
\return ECC_BAD_ARG_E Returned if any of the input parameters are NULL
|
||
|
||
\param key pointer to the curve25519_key structure in from which to
|
||
export the key
|
||
\param out pointer to the buffer in which to store the public key
|
||
\param outLen will store the bytes written to the output buffer
|
||
|
||
_Example_
|
||
\code
|
||
int ret;
|
||
byte pub[32];
|
||
int pubSz;
|
||
curve25519_key key;
|
||
// initialize and make key
|
||
ret = wc_curve25519_export_public(&key,pub, &pubSz);
|
||
if (ret != 0) {
|
||
// error exporting key
|
||
}
|
||
\endcode
|
||
|
||
\sa wc_curve25519_init
|
||
\sa wc_curve25519_export_private_raw
|
||
\sa wc_curve25519_import_public
|
||
*/
|
||
WOLFSSL_API
|
||
int wc_curve25519_export_public(curve25519_key* key, byte* out, word32* outLen);
|
||
/*!
|
||
\ingroup Curve25519
|
||
|
||
\brief This function exports a public key from the given key structure and
|
||
stores the result in the out buffer. Supports both big and little endian.
|
||
|
||
\return 0 Returned on successfully exporting the public key from the
|
||
curve25519_key structure
|
||
\return ECC_BAD_ARG_E Returned if any of the input parameters are NULL
|
||
|
||
\param key pointer to the curve25519_key structure in from which to
|
||
export the key
|
||
\param out pointer to the buffer in which to store the public key
|
||
\param outLen will store the bytes written to the output buffer
|
||
\param endian EC25519_BIG_ENDIAN or EC25519_LITTLE_ENDIAN to set which
|
||
form to use.
|
||
|
||
_Example_
|
||
\code
|
||
int ret;
|
||
|
||
byte pub[32];
|
||
int pubSz;
|
||
curve25519_key key;
|
||
// initialize and make key
|
||
|
||
ret = wc_curve25519_export_public_ex(&key,pub, &pubSz, EC25519_BIG_ENDIAN);
|
||
if (ret != 0) {
|
||
// error exporting key
|
||
}
|
||
\endcode
|
||
|
||
\sa wc_curve25519_init
|
||
\sa wc_curve25519_export_private_raw
|
||
\sa wc_curve25519_import_public
|
||
*/
|
||
WOLFSSL_API
|
||
int wc_curve25519_export_public_ex(curve25519_key* key, byte* out,
|
||
word32* outLen, int endian);
|
||
/*!
|
||
\ingroup Curve25519
|
||
|
||
\brief Export curve25519 key pair. Big endian only.
|
||
|
||
\return 0 Success
|
||
\return BAD_FUNC_ARG Returned if any input parameters are NULL.
|
||
\return ECC_BAD_ARG_E Returned if wc_curve25519_size() is not equal to key.
|
||
|
||
\param key Description
|
||
\param priv Private key buffer.
|
||
\param privSz Size of private key buffer.
|
||
\param pub Public key buffer.
|
||
\param pubSz Size of public key buffer.
|
||
|
||
_Example_
|
||
\code
|
||
int ret;
|
||
byte pub[32];
|
||
byte priv[32];
|
||
int pubSz;
|
||
int privSz;
|
||
|
||
curve25519_key key;
|
||
// initialize and make key
|
||
|
||
ret = wc_curve25519_export_key_raw(&key, priv, &privSz, pub, &pubSz);
|
||
if (ret != 0) {
|
||
// error exporting key
|
||
}
|
||
\endcode
|
||
|
||
\sa wc_curve25519_export_key_raw_ex
|
||
\sa wc_curve25519_export_private_raw
|
||
\sa wc_curve25519_export_public_raw
|
||
*/
|
||
WOLFSSL_API
|
||
int wc_curve25519_export_key_raw(curve25519_key* key,
|
||
byte* priv, word32 *privSz,
|
||
byte* pub, word32 *pubSz);
|
||
/*!
|
||
\ingroup Curve25519
|
||
|
||
\brief Export curve25519 key pair. Big or little endian.
|
||
|
||
\return 0 Success
|
||
\return BAD_FUNC_ARG Returned if any input parameters are NULL.
|
||
\return ECC_BAD_ARG_E Returned if wc_curve25519_size() is not equal to key.
|
||
|
||
\param key Description
|
||
\param priv Private key buffer.
|
||
\param privSz Size of private key buffer.
|
||
\param pub Public key buffer.
|
||
\param pubSz Size of public key buffer.
|
||
\param endian EC25519_BIG_ENDIAN or EC25519_LITTLE_ENDIAN to set which
|
||
form to use.
|
||
|
||
_Example_
|
||
\code
|
||
int ret;
|
||
|
||
byte pub[32];
|
||
byte priv[32];
|
||
int pubSz;
|
||
int privSz;
|
||
|
||
curve25519_key key;
|
||
// initialize and make key
|
||
|
||
ret = wc_curve25519_export_key_raw_ex(&key,priv, &privSz, pub, &pubSz,
|
||
EC25519_BIG_ENDIAN);
|
||
if (ret != 0) {
|
||
// error exporting key
|
||
}
|
||
\endcode
|
||
|
||
\sa wc_curve25519_export_key_raw
|
||
\sa wc_curve25519_export_private_raw_ex
|
||
\sa wc_curve25519_export_public_ex
|
||
*/
|
||
WOLFSSL_API
|
||
int wc_curve25519_export_key_raw_ex(curve25519_key* key,
|
||
byte* priv, word32 *privSz,
|
||
byte* pub, word32 *pubSz,
|
||
int endian);
|
||
/*!
|
||
\ingroup Curve25519
|
||
|
||
\brief This function returns the key size of the given key structure.
|
||
|
||
\return Success Given a valid, initialized curve25519_key structure,
|
||
returns the size of the key.
|
||
\return 0 Returned if key is NULL
|
||
|
||
\param key pointer to the curve25519_key structure in for which to
|
||
determine the key size
|
||
|
||
_Example_
|
||
\code
|
||
curve25519_key key;
|
||
// initialize and make key
|
||
int keySz;
|
||
keySz = wc_curve25519_size(&key);
|
||
\endcode
|
||
|
||
\sa wc_curve25519_init
|
||
\sa wc_curve25519_make_key
|
||
*/
|
||
WOLFSSL_API
|
||
int wc_curve25519_size(curve25519_key* key);
|