Files
wolfssl/doc/dox_comments/header_files-ja/iotsafe.h

353 lines
18 KiB
C
Raw Normal View History

/*!
\ingroup IoTSafe
\brief IoTセーフサポートを有効にします
\param ctx IOTセーフサポートを有効にする必要があるWOLFSSL_CTXオブジェクトへのポインタ
\return 0
_Example_
\code
WOLFSSL_CTX *ctx;
ctx = wolfSSL_CTX_new(wolfTLSv1_2_client_method());
if (!ctx)
return NULL;
wolfSSL_CTX_iotsafe_enable(ctx);
\endcode
\sa wolfSSL_iotsafe_on
\sa wolfIoTSafe_SetCSIM_read_cb
\sa wolfIoTSafe_SetCSIM_write_cb
*/
int wolfSSL_CTX_iotsafe_enable(WOLFSSL_CTX *ctx);
/*!
\ingroup IoTSafe
\brief IOT-SAFE TLSコールバックを特定のSSLセッションに接続します
\brief IDが1バイトの長さの場合SSLセッションをIoT-Safeアプレットに接続するように呼び出す必要がありますIOTセーフスロットのIDが2バイト以上の場合\ REF WOLFSSL_IOTSAFE_ON_EXWOLFSSL_IOTSAFE_ON_EX使
\param ssl WolfSSLオブジェクトへのポインタ
\param privkey_id IOTセーフなアプレットスロットのID
\param ecdh_keypair_slot ECDH鍵ペアを保存するためのIoT安全アプレットスロットのID
\param peer_pubkey_slot ECDH用の他のエンドポイントの公開鍵を保存するためのIOT-SAFEアプレットスロットのID
\param peer_cert_slot IOTセーフなアプレットスロットのID
\return 0
\return NOT_COMPILED_IN habe_pk_callbacksが無効になっている場合
_Example_
\code
// Define key ids for IoT-Safe
#define PRIVKEY_ID 0x02
#define ECDH_KEYPAIR_ID 0x03
#define PEER_PUBKEY_ID 0x04
#define PEER_CERT_ID 0x05
// Create new ssl session
WOLFSSL *ssl;
ssl = wolfSSL_new(ctx);
if (!ssl)
return NULL;
// Enable IoT-Safe and associate key slots
ret = wolfSSL_CTX_iotsafe_enable(ctx);
if (ret == 0) {
ret = wolfSSL_iotsafe_on(ssl, PRIVKEY_ID, ECDH_KEYPAIR_ID, PEER_PUBKEY_ID, PEER_CERT_ID);
}
\endcode
\sa wolfSSL_iotsafe_on_ex
\sa wolfSSL_CTX_iotsafe_enable
*/
int wolfSSL_iotsafe_on(WOLFSSL *ssl, byte privkey_id,
byte ecdh_keypair_slot, byte peer_pubkey_slot, byte peer_cert_slot);
/*!
\ingroup IoTSafe
\brief IOT-SAFE TLSコールバックを特定のSSLセッションに接続しますIOTセーフスロットのIDを参照で渡すことができIDフィールドの長さをパラメータ "id_size"
\param ssl WolfSSLオブジェクトへのポインタ
\param privkey_id IoTセーフアプレットスロットのIDへのポインタ
\param ecdh_keypair_slot ECDH鍵ペアを保存するIOT-SafeアプレットスロットのIDへのポインタ
\param peer_pubkey_slot ECDH用の他のエンドポイントの公開鍵を保存するIOTセーフアプレットスロットのIDへのポインタ
\param peer_cert_slot IOT-SAFEアプレットスロットのIDへのポインタ
\param id_size IDのサイズ
\return 0
\return NOT_COMPILED_IN habe_pk_callbacksが無効になっている場合
_Example_
\code
// Define key ids for IoT-Safe (16 bit, little endian)
#define PRIVKEY_ID 0x0201
#define ECDH_KEYPAIR_ID 0x0301
#define PEER_PUBKEY_ID 0x0401
#define PEER_CERT_ID 0x0501
#define ID_SIZE (sizeof(word16))
word16 privkey = PRIVKEY_ID,
ecdh_keypair = ECDH_KEYPAIR_ID,
peer_pubkey = PEER_PUBKEY_ID,
peer_cert = PEER_CERT_ID;
// Create new ssl session
WOLFSSL *ssl;
ssl = wolfSSL_new(ctx);
if (!ssl)
return NULL;
// Enable IoT-Safe and associate key slots
ret = wolfSSL_CTX_iotsafe_enable(ctx);
if (ret == 0) {
ret = wolfSSL_CTX_iotsafe_on_ex(ssl, &privkey, &ecdh_keypair, &peer_pubkey, &peer_cert, ID_SIZE);
}
\endcode
\sa wolfSSL_iotsafe_on
\sa wolfSSL_CTX_iotsafe_enable
*/
int wolfSSL_iotsafe_on_ex(WOLFSSL *ssl, byte *privkey_id,
byte *ecdh_keypair_slot, byte *peer_pubkey_slot, byte *peer_cert_slot, word16 id_size);
/*!
\ingroup IoTSafe
\brief AT + CSIMコマンドのリードコールバックを関連付けますUARTチャネルの読み取りイベントに関連付けられていますIoT-Safeサポートを使用するすべてのコンテキストのグローバルと変更です
_Example_
\code
// USART read function, defined elsewhere
int usart_read(char *buf, int len);
wolfIoTSafe_SetCSIM_read_cb(usart_read);
\endcode
\sa wolfIoTSafe_SetCSIM_write_cb
*/
void wolfIoTSafe_SetCSIM_read_cb(wolfSSL_IOTSafe_CSIM_read_cb rf);
/*!
\ingroup IoTSafe
\brief AT + CSIMコマンドの書き込みコールバックを関連付けますUARTチャネル上のライトイベントに関連付けられていますWrite Callbackが関連付けられているのはIoT-Safeサポートを使用するすべてのコンテキストのグローバルと変更です
_Example_
\code
// USART write function, defined elsewhere
int usart_write(const char *buf, int len);
wolfIoTSafe_SetCSIM_write_cb(usart_write);
\endcode
\sa wolfIoTSafe_SetCSIM_read_cb
*/
void wolfIoTSafe_SetCSIM_write_cb(wolfSSL_IOTSafe_CSIM_write_cb wf);
/*!
\ingroup IoTSafe
\brief IOTセーフ機能getrandomを使用してWolfCrypt RNGオブジェクトによって自動的に使用されます
\param out
\param sz
*/
int wolfIoTSafe_GetRandom(unsigned char* out, word32 sz);
/*!
\ingroup IoTSafe
\brief IOT-Safeアプレット上のファイルに保存されている証明書をインポートし1IDフィールドで動作します
\param id IOTセーフID
\param output
\param sz 使
\return the
_Example_
\code
#define CRT_CLIENT_FILE_ID 0x03
unsigned char cert_buffer[2048];
// Get the certificate into the buffer
cert_buffer_size = wolfIoTSafe_GetCert(CRT_CLIENT_FILE_ID, cert_buffer, 2048);
if (cert_buffer_size < 1) {
printf("Bad cli cert\n");
return -1;
}
printf("Loaded Client certificate from IoT-Safe, size = %lu\n", cert_buffer_size);
// Use the certificate buffer as identity for the TLS client context
if (wolfSSL_CTX_use_certificate_buffer(cli_ctx, cert_buffer,
cert_buffer_size, SSL_FILETYPE_ASN1) != SSL_SUCCESS) {
printf("Cannot load client cert\n");
return -1;
}
printf("Client certificate successfully imported.\n");
\endcode
*/
int wolfIoTSafe_GetCert(uint8_t id, unsigned char *output, unsigned long sz);
/*!
\ingroup IoTSafe
\brief IOT-Safeアプレット上のファイルに保存されている証明書をインポートし\ ref wolfiotsafe_getcert "wolfiotsafe_getcert"2IDで呼び出すことができます
\param id IOT-SAFEアプレットのファイルIDへのポインタ
\param id_sz IDのサイズ
\param output
\param sz 使
\return the
_Example_
\code
#define CRT_CLIENT_FILE_ID 0x0302
#define ID_SIZE (sizeof(word16))
unsigned char cert_buffer[2048];
word16 client_file_id = CRT_CLIENT_FILE_ID;
// Get the certificate into the buffer
cert_buffer_size = wolfIoTSafe_GetCert_ex(&client_file_id, ID_SIZE, cert_buffer, 2048);
if (cert_buffer_size < 1) {
printf("Bad cli cert\n");
return -1;
}
printf("Loaded Client certificate from IoT-Safe, size = %lu\n", cert_buffer_size);
// Use the certificate buffer as identity for the TLS client context
if (wolfSSL_CTX_use_certificate_buffer(cli_ctx, cert_buffer,
cert_buffer_size, SSL_FILETYPE_ASN1) != SSL_SUCCESS) {
printf("Cannot load client cert\n");
return -1;
}
printf("Client certificate successfully imported.\n");
\endcode
*/
int wolfIoTSafe_GetCert_ex(uint8_t *id, uint16_t id_sz, unsigned char *output, unsigned long sz);
/*!
\ingroup IoTSafe
\brief IOTセーフアプレットに格納されているECC 256ECC_Keyオブジェクトにインポートします
\param key IOT-SAFEアプレットからインポートされたキーを含むECC_KEYオブジェクト
\param id IOTセーフアプレットのキーID
\return 0
\sa wc_iotsafe_ecc_export_public
\sa wc_iotsafe_ecc_export_private
*/
int wc_iotsafe_ecc_import_public(ecc_key *key, byte key_id);
/*!
\ingroup IoTSafe
\brief ECC_KEYオブジェクトからIOT-SAFEアプレットへの書き込み可能なパブリックキースロットにECC 256
\param key ecc_keyオブジェクト
\param id IOTセーフアプレットのキーID
\return 0
\sa wc_iotsafe_ecc_import_public_ex
\sa wc_iotsafe_ecc_export_private
*/
int wc_iotsafe_ecc_export_public(ecc_key *key, byte key_id);
/*!
\ingroup IoTSafe
\brief ECC_KEYオブジェクトからIOT-SAFEアプレットへの書き込み可能なパブリックキースロットにECC 256\ ref WC_IOTSAFE_ECC_IMPORT_PUBLICWC_IOTSAFE_ECC_IMPORT_PUBLIC2IDで呼び出すことができる点を除きます
\param key ecc_keyオブジェクト
\param id IOTセーフアプレットのキーIDへのポインタ
\param id_size IDサイズ
\return 0
\sa wc_iotsafe_ecc_import_public
\sa wc_iotsafe_ecc_export_private
*/
int wc_iotsafe_ecc_import_public_ex(ecc_key *key, byte *key_id, word16 id_size);
/*!
\ingroup IoTSafe
\brief ECC 256ECC_KEYオブジェクトからIOTセーフアプレットに書き込み可能なプライベートキースロットにエクスポートします
\param key ecc_keyオブジェクト
\param id IOTセーフアプレットのキーID
\return 0
\sa wc_iotsafe_ecc_export_private_ex
\sa wc_iotsafe_ecc_import_public
\sa wc_iotsafe_ecc_export_public
*/
int wc_iotsafe_ecc_export_private(ecc_key *key, byte key_id);
/*!
\ingroup IoTSafe
\brief ECC 256ECC_KEYオブジェクトからIOTセーフアプレットに書き込み可能なプライベートキースロットにエクスポートします\ ref WC_IOTSAFE_ECC_EXPORT_PRIVATEWC_IOTSAFE_ECC_EXPORT_PRIVATE2IDを呼び出すことができる点を除き
\param key ecc_keyオブジェクト
\param id IOTセーフアプレットのキーIDへのポインタ
\param id_size IDサイズ
\return 0
\sa wc_iotsafe_ecc_export_private
\sa wc_iotsafe_ecc_import_public
\sa wc_iotsafe_ecc_export_public
*/
int wc_iotsafe_ecc_export_private_ex(ecc_key *key, byte *key_id, word16 id_size);
/*!
\ingroup IoTSafe
\brief 256IOT-SAFEアプレットに
\param in
\param inlen
\param out
\param outlen
\param id IOTセーフアプレットのキーID
\return 0
\sa wc_iotsafe_ecc_sign_hash_ex
\sa wc_iotsafe_ecc_verify_hash
\sa wc_iotsafe_ecc_gen_k
*/
int wc_iotsafe_ecc_sign_hash(byte *in, word32 inlen, byte *out, word32 *outlen, byte key_id);
/*!
\ingroup IoTSafe
\brief 256IOT-SAFEアプレットに\ ref wc_iotsafe_ecc_sign_hash "wc_iotsafe_ecc_sign_hash"2IDで呼び出すことができます
\param in
\param inlen
\param out
\param outlen
\param id IOT-SAFEアプレットのキーIDへのポインタメッセージ署名の生成に成功したときに書き込まれるペイロードに署名する
\param id_size IDサイズ
\return 0
\sa wc_iotsafe_ecc_sign_hash
\sa wc_iotsafe_ecc_verify_hash
\sa wc_iotsafe_ecc_gen_k
*/
int wc_iotsafe_ecc_sign_hash_ex(byte *in, word32 inlen, byte *out, word32 *outlen, byte *key_id, word16 id_size);
/*!
\ingroup IoTSafe
\brief 256ECCシグネチャをIOT-SAFEアプレット内のプリプロビジョニング使RESに書き込まれます10使Resのみを使用してください
\return 0
\return < 0
\param sig
\param hash
\param hashlen
\param res 1 ==0 ==
\sa wc_iotsafe_ecc_verify_hash_ex
\sa wc_iotsafe_ecc_sign_hash
\sa wc_iotsafe_ecc_gen_k
*/
int wc_iotsafe_ecc_verify_hash(byte *sig, word32 siglen, byte *hash, word32 hashlen, int *res, byte key_id);
/*!
\ingroup IoTSafe
\brief 256ECCシグネチャをIOT-SAFEアプレット内のプリプロビジョニング使RESに書き込まれます10使Resのみを使用してください\ ref WC_IOTSAFE_ECC_VERIFY_HASH "WC_IOTSAFE_ECC_VERIFY_HASH"2IDで呼び出すことができる点を除きます
\return 0
\return < 0
\param sig
\param hash
\param hashlen
\param res 1 ==0 ==
\param key_id ECCキーがIOTセーフアプレットに保存されているスロットのID
\sa wc_iotsafe_ecc_verify_hash
\sa wc_iotsafe_ecc_sign_hash
\sa wc_iotsafe_ecc_gen_k
*/
int wc_iotsafe_ecc_verify_hash_ex(byte *sig, word32 siglen, byte *hash, word32 hashlen, int *res, byte *key_id, word16 id_size);
/*!
\ingroup IoTSafe
\brief ECC 256IOTセーフなアプレットに保存します
\param key_id ECCキーペアがIOTセーフアプレットに格納されているスロットのID
\return 0
\sa wc_iotsafe_ecc_gen_k_ex
\sa wc_iotsafe_ecc_sign_hash
\sa wc_iotsafe_ecc_verify_hash
*/
int wc_iotsafe_ecc_gen_k(byte key_id);
/*!
\ingroup IoTSafe
\brief ECC 256IOTセーフなアプレットに保存します\ ref wc_iotsafe_ecc_gen_k "wc_iotsafe_ecc_gen_k"2IDで呼び出すことができます
\param key_id ECCキーペアがIOTセーフアプレットに格納されているスロットのID
\param id_size IDサイズ
\return 0
\sa wc_iotsafe_ecc_gen_k
\sa wc_iotsafe_ecc_sign_hash_ex
\sa wc_iotsafe_ecc_verify_hash_ex
*/
int wc_iotsafe_ecc_gen_k(byte key_id);