コンテンツにスキップ

IoT-Safe Module

More...

Functions

Name
int wolfSSL_CTX_iotsafe_enable(WOLFSSL_CTX * ctx)
この関数は与えられたコンテキストでのIoTセーフサポートを有効にします。
int wolfSSL_iotsafe_on(WOLFSSL * ssl, byte privkey_id, byte ecdh_keypair_slot, byte peer_pubkey_slot, byte peer_cert_slot)
この関数は、IOT-SAFE TLSコールバックを特定のSSLセッションに接続します。
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)
この関数は、IOT-SAFE TLSコールバックを特定のSSLセッションに接続します。これは、IOTセーフスロットのIDを参照で渡すことができ、IDフィールドの長さをパラメータ "id_size"で指定できます。
void wolfIoTSafe_SetCSIM_read_cb(wolfSSL_IOTSafe_CSIM_read_cb rf)
AT + CSIMコマンドのリードコールバックを関連付けます。この入力関数は通常、モデムと通信するUARTチャネルの読み取りイベントに関連付けられています。読み取りコールバックが関連付けられているのは、同時にIoT-Safeサポートを使用するすべてのコンテキストのグローバルと変更です。 Example
void wolfIoTSafe_SetCSIM_write_cb(wolfSSL_IOTSafe_CSIM_write_cb wf)
AT + CSIMコマンドの書き込みコールバックを関連付けます。この出力関数は通常、モデムと通信するUARTチャネル上のライトイベントに関連付けられています。Write Callbackが関連付けられているのは、同時にIoT-Safeサポートを使用するすべてのコンテキストのグローバルと変更です。 Example
int wolfIoTSafe_GetRandom(unsigned char * out, word32 sz)
IOTセーフ機能getrandomを使用して、指定されたサイズのランダムなバッファを生成します。この関数は、WolfCrypt RNGオブジェクトによって自動的に使用されます。
int wolfIoTSafe_GetCert(uint8_t id, unsigned char * output, unsigned long sz)
IOT-Safeアプレット上のファイルに保存されている証明書をインポートし、ローカルにメモリに保存します。1バイトのファイルIDフィールドで動作します。
int wolfIoTSafe_GetCert_ex(uint8_t * id, uint16_t id_sz, unsigned char * output, unsigned long sz)
IOT-Safeアプレット上のファイルに保存されている証明書をインポートし、ローカルにメモリに保存します。\ ref wolfiotsafe_getcert "wolfiotsafe_getcert"と同等です。ただし、2バイト以上のファイルIDで呼び出すことができます。
int wc_iotsafe_ecc_import_public(ecc_key * key, byte key_id)
IOTセーフアプレットに格納されているECC 256ビットの公開鍵をECC_Keyオブジェクトにインポートします。
int wc_iotsafe_ecc_export_public(ecc_key * key, byte key_id)
ECC_KEYオブジェクトからIOT-SAFEアプレットへの書き込み可能なパブリックキースロットにECC 256ビット公開鍵をエクスポートします。
int wc_iotsafe_ecc_import_public_ex(ecc_key * key, byte * key_id, word16 id_size)
ECC_KEYオブジェクトからIOT-SAFEアプレットへの書き込み可能なパブリックキースロットにECC 256ビット公開鍵をエクスポートします。\ ref WC_IOTSAFE_ECC_IMPORT_PUBLIC「WC_IOTSAFE_ECC_IMPORT_PUBLIC」と同等のものは、2バイト以上のキーIDで呼び出すことができる点を除きます。
int wc_iotsafe_ecc_export_private(ecc_key * key, byte key_id)
ECC 256ビットキーをECC_KEYオブジェクトからIOTセーフアプレットに書き込み可能なプライベートキースロットにエクスポートします。
int wc_iotsafe_ecc_export_private_ex(ecc_key * key, byte * key_id, word16 id_size)
ECC 256ビットキーをECC_KEYオブジェクトからIOTセーフアプレットに書き込み可能なプライベートキースロットにエクスポートします。\ ref WC_IOTSAFE_ECC_EXPORT_PRIVATE「WC_IOTSAFE_ECC_EXPORT_PRIVATE」を除き、2バイト以上のキーIDを呼び出すことができる点を除き、
int wc_iotsafe_ecc_sign_hash(byte * in, word32 inlen, byte * out, word32 * outlen, byte key_id)
事前計算された256ビットハッシュに署名して、IOT-SAFEアプレットに、以前に保存されたプライベートキー、またはプリプロビジョニングされています。
int wc_iotsafe_ecc_sign_hash_ex(byte * in, word32 inlen, byte * out, word32 * outlen, byte * key_id, word16 id_size)
事前計算された256ビットハッシュに署名して、IOT-SAFEアプレットに、以前に保存されたプライベートキー、またはプリプロビジョニングされています。\ ref wc_iotsafe_ecc_sign_hash "wc_iotsafe_ecc_sign_hash"と同等です。ただし、2バイト以上のキーIDで呼び出すことができます。
int wc_iotsafe_ecc_verify_hash(byte * sig, word32 siglen, byte * hash, word32 hashlen, int * res, byte key_id)
予め計算された256ビットハッシュに対するECCシグネチャを、IOT-SAFEアプレット内のプリプロビジョニング、またはプロビジョニングされたプリプロビジョニングを使用します。結果はRESに書き込まれます。1が有効で、0が無効です。注:有効なテストに戻り値を使用しないでください。Resのみを使用してください。
int wc_iotsafe_ecc_verify_hash_ex(byte * sig, word32 siglen, byte * hash, word32 hashlen, int * res, byte * key_id, word16 id_size)
予め計算された256ビットハッシュに対するECCシグネチャを、IOT-SAFEアプレット内のプリプロビジョニング、またはプロビジョニングされたプリプロビジョニングを使用します。結果はRESに書き込まれます。1が有効で、0が無効です。注:有効なテストに戻り値を使用しないでください。Resのみを使用してください。\ ref WC_IOTSAFE_ECC_VERIFY_HASH "WC_IOTSAFE_ECC_VERIFY_HASH"を除き、2バイト以上のキーIDで呼び出すことができる点を除きます。
int wc_iotsafe_ecc_gen_k(byte key_id)
ECC 256ビットのキーペアを生成し、それを(書き込み可能な)スロットにIOTセーフなアプレットに保存します。

Detailed Description

IoT-Safe (IoT-SIM Applet For Secure End-2-End Communication) is a technology that leverage the SIM as robust, scalable and standardized hardware Root of Trust to protect data communication.

IoT-Safe SSL sessions use the SIM as Hardware Security Module, offloading all the crypto public key operations and reducing the attack surface by restricting access to certificate and keys to the SIM.

IoT-Safe support can be enabled on an existing WOLFSSL_CTX context, using wolfSSL_CTX_iotsafe_enable().

Session created within the context can set the parameters for IoT-Safe key and files usage, and enable the public keys callback, with wolfSSL_iotsafe_on().

If compiled in, the module supports IoT-Safe random number generator as source of entropy for wolfCrypt.

Functions Documentation

function wolfSSL_CTX_iotsafe_enable

int wolfSSL_CTX_iotsafe_enable(
    WOLFSSL_CTX * ctx
)

この関数は与えられたコンテキストでのIoTセーフサポートを有効にします。

Parameters:

  • ctx IOTセーフサポートを有効にする必要があるWOLFSSL_CTXオブジェクトへのポインタ

See:

Return: 0 成功した Example

WOLFSSL_CTX *ctx;
ctx = wolfSSL_CTX_new(wolfTLSv1_2_client_method());
if (!ctx)
    return NULL;
wolfSSL_CTX_iotsafe_enable(ctx);

function wolfSSL_iotsafe_on

int wolfSSL_iotsafe_on(
    WOLFSSL * ssl,
    byte privkey_id,
    byte ecdh_keypair_slot,
    byte peer_pubkey_slot,
    byte peer_cert_slot
)

この関数は、IOT-SAFE TLSコールバックを特定のSSLセッションに接続します。

Parameters:

  • ssl コールバックが有効になるWolfSSLオブジェクトへのポインタ
  • privkey_id ホストの秘密鍵を含むIOTセーフなアプレットスロットのID
  • ecdh_keypair_slot ECDH鍵ペアを保存するためのIoT安全アプレットスロットのID
  • peer_pubkey_slot ECDH用の他のエンドポイントの公開鍵を保存するためのIOT-SAFEアプレットスロットのID
  • peer_cert_slot 検証のための他のエンドポイントの公開鍵を保存するためのIOTセーフなアプレットスロットのID

See:

Return:

  • 0 成功すると
  • NOT_COMPILED_IN habe_pk_callbacksが無効になっている場合 Example
// 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);
}

スロットのIDが1バイトの長さの場合、SSLセッションをIoT-Safeアプレットに接続するように呼び出す必要があります。IOTセーフスロットのIDが2バイト以上の場合、\ REF WOLFSSL_IOTSAFE_ON_EX「WOLFSSL_IOTSAFE_ON_EX()」を使用する必要があります。

function wolfSSL_iotsafe_on_ex

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
)

この関数は、IOT-SAFE TLSコールバックを特定のSSLセッションに接続します。これは、IOTセーフスロットのIDを参照で渡すことができ、IDフィールドの長さをパラメータ "id_size"で指定できます。

Parameters:

  • ssl コールバックが有効になるWolfSSLオブジェクトへのポインタ
  • privkey_id ホストの秘密鍵を含むIoTセーフアプレットスロットのIDへのポインタ
  • ecdh_keypair_slot ECDH鍵ペアを保存するIOT-SafeアプレットスロットのIDへのポインタ
  • peer_pubkey_slot ECDH用の他のエンドポイントの公開鍵を保存するIOTセーフアプレットスロットのIDへのポインタ
  • peer_cert_slot 検証のために他のエンドポイントの公開鍵を保存するためのIOT-SAFEアプレットスロットのIDへのポインタ
  • id_size 各スロットIDのサイズ

See:

Return:

  • 0 成功すると
  • NOT_COMPILED_IN habe_pk_callbacksが無効になっている場合 Example
// 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);
}

function wolfIoTSafe_SetCSIM_read_cb

void wolfIoTSafe_SetCSIM_read_cb(
    wolfSSL_IOTSafe_CSIM_read_cb rf
)

AT + CSIMコマンドのリードコールバックを関連付けます。この入力関数は通常、モデムと通信するUARTチャネルの読み取りイベントに関連付けられています。読み取りコールバックが関連付けられているのは、同時にIoT-Safeサポートを使用するすべてのコンテキストのグローバルと変更です。 Example

See: wolfIoTSafe_SetCSIM_write_cb

// USART read function, defined elsewhere
int usart_read(char *buf, int len);

wolfIoTSafe_SetCSIM_read_cb(usart_read);

function wolfIoTSafe_SetCSIM_write_cb

void wolfIoTSafe_SetCSIM_write_cb(
    wolfSSL_IOTSafe_CSIM_write_cb wf
)

AT + CSIMコマンドの書き込みコールバックを関連付けます。この出力関数は通常、モデムと通信するUARTチャネル上のライトイベントに関連付けられています。Write Callbackが関連付けられているのは、同時にIoT-Safeサポートを使用するすべてのコンテキストのグローバルと変更です。 Example

See: wolfIoTSafe_SetCSIM_read_cb

// USART write function, defined elsewhere
int usart_write(const char *buf, int len);
wolfIoTSafe_SetCSIM_write_cb(usart_write);

function wolfIoTSafe_GetRandom

int wolfIoTSafe_GetRandom(
    unsigned char * out,
    word32 sz
)

IOTセーフ機能getrandomを使用して、指定されたサイズのランダムなバッファを生成します。この関数は、WolfCrypt RNGオブジェクトによって自動的に使用されます。

Parameters:

  • out ランダムなバイトシーケンスが格納されているバッファ。
  • sz 生成するランダムシーケンスのサイズ(バイト単位)

function wolfIoTSafe_GetCert

int wolfIoTSafe_GetCert(
    uint8_t id,
    unsigned char * output,
    unsigned long sz
)

IOT-Safeアプレット上のファイルに保存されている証明書をインポートし、ローカルにメモリに保存します。1バイトのファイルIDフィールドで動作します。

Parameters:

  • id 証明書が保存されているIOTセーフ・アプレットのファイルID
  • output 証明書がインポートされるバッファー
  • sz バッファ出力で使用可能な最大サイズ

Return: the 輸入された証明書の長さ Example

#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");

function wolfIoTSafe_GetCert_ex

int wolfIoTSafe_GetCert_ex(
    uint8_t * id,
    uint16_t id_sz,
    unsigned char * output,
    unsigned long sz
)

IOT-Safeアプレット上のファイルに保存されている証明書をインポートし、ローカルにメモリに保存します。\ ref wolfiotsafe_getcert "wolfiotsafe_getcert"と同等です。ただし、2バイト以上のファイルIDで呼び出すことができます。

Parameters:

  • id 証明書が保存されているIOT-SAFEアプレットのファイルIDへのポインタ
  • id_sz ファイルIDのサイズ:バイト数
  • output 証明書がインポートされるバッファー
  • sz バッファ出力で使用可能な最大サイズ

Return: the 輸入された証明書の長さ Example

#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");

function wc_iotsafe_ecc_import_public

int wc_iotsafe_ecc_import_public(
    ecc_key * key,
    byte key_id
)

IOTセーフアプレットに格納されているECC 256ビットの公開鍵をECC_Keyオブジェクトにインポートします。

Parameters:

  • key IOT-SAFEアプレットからインポートされたキーを含むECC_KEYオブジェクト
  • id 公開鍵が保存されているIOTセーフアプレットのキーID

See:

Return: 0 成功すると

function wc_iotsafe_ecc_export_public

int wc_iotsafe_ecc_export_public(
    ecc_key * key,
    byte key_id
)

ECC_KEYオブジェクトからIOT-SAFEアプレットへの書き込み可能なパブリックキースロットにECC 256ビット公開鍵をエクスポートします。

Parameters:

  • key エクスポートする鍵を含むecc_keyオブジェクト
  • id 公開鍵が保存されているIOTセーフアプレットのキーID

See:

Return: 0 成功すると

function wc_iotsafe_ecc_import_public_ex

int wc_iotsafe_ecc_import_public_ex(
    ecc_key * key,
    byte * key_id,
    word16 id_size
)

ECC_KEYオブジェクトからIOT-SAFEアプレットへの書き込み可能なパブリックキースロットにECC 256ビット公開鍵をエクスポートします。\ ref WC_IOTSAFE_ECC_IMPORT_PUBLIC「WC_IOTSAFE_ECC_IMPORT_PUBLIC」と同等のものは、2バイト以上のキーIDで呼び出すことができる点を除きます。

Parameters:

  • key エクスポートする鍵を含むecc_keyオブジェクト
  • id 公開鍵が保存されるIOTセーフアプレットのキーIDへのポインタ
  • id_size キーIDサイズ

See:

Return: 0 成功すると

function wc_iotsafe_ecc_export_private

int wc_iotsafe_ecc_export_private(
    ecc_key * key,
    byte key_id
)

ECC 256ビットキーをECC_KEYオブジェクトからIOTセーフアプレットに書き込み可能なプライベートキースロットにエクスポートします。

Parameters:

  • key エクスポートする鍵を含むecc_keyオブジェクト
  • id 秘密鍵が保存されるIOTセーフアプレットのキーID

See:

Return: 0 成功すると

function wc_iotsafe_ecc_export_private_ex

int wc_iotsafe_ecc_export_private_ex(
    ecc_key * key,
    byte * key_id,
    word16 id_size
)

ECC 256ビットキーをECC_KEYオブジェクトからIOTセーフアプレットに書き込み可能なプライベートキースロットにエクスポートします。\ ref WC_IOTSAFE_ECC_EXPORT_PRIVATE「WC_IOTSAFE_ECC_EXPORT_PRIVATE」を除き、2バイト以上のキーIDを呼び出すことができる点を除き、

Parameters:

  • key エクスポートする鍵を含むecc_keyオブジェクト
  • id 秘密鍵が保存されるIOTセーフアプレットのキーIDへのポインタ
  • id_size キーIDサイズ

See:

Return: 0 成功すると

function wc_iotsafe_ecc_sign_hash

int wc_iotsafe_ecc_sign_hash(
    byte * in,
    word32 inlen,
    byte * out,
    word32 * outlen,
    byte key_id
)

事前計算された256ビットハッシュに署名して、IOT-SAFEアプレットに、以前に保存されたプライベートキー、またはプリプロビジョニングされています。

Parameters:

  • in サインするメッセージハッシュを含むバッファへのポインタ
  • inlen 署名するメッセージの長さ
  • out 生成された署名を保存するためのバッファ
  • outlen 出力バッファの最大長。バイトを保存します
  • id メッセージ署名の生成に成功したときに書き込まれたペイロードに署名するための秘密鍵を含むスロットのIOTセーフアプレットのキーID

See:

Return: 0 成功すると

function wc_iotsafe_ecc_sign_hash_ex

int wc_iotsafe_ecc_sign_hash_ex(
    byte * in,
    word32 inlen,
    byte * out,
    word32 * outlen,
    byte * key_id,
    word16 id_size
)

事前計算された256ビットハッシュに署名して、IOT-SAFEアプレットに、以前に保存されたプライベートキー、またはプリプロビジョニングされています。\ ref wc_iotsafe_ecc_sign_hash "wc_iotsafe_ecc_sign_hash"と同等です。ただし、2バイト以上のキーIDで呼び出すことができます。

Parameters:

  • in サインするメッセージハッシュを含むバッファへのポインタ
  • inlen 署名するメッセージの長さ
  • out 生成された署名を保存するためのバッファ
  • outlen 出力バッファの最大長。バイトを保存します
  • id 秘密鍵を含むスロットのIOT-SAFEアプレットのキーIDへのポインタメッセージ署名の生成に成功したときに書き込まれるペイロードに署名する
  • id_size キーIDサイズ

See:

Return: 0 成功すると

function wc_iotsafe_ecc_verify_hash

int wc_iotsafe_ecc_verify_hash(
    byte * sig,
    word32 siglen,
    byte * hash,
    word32 hashlen,
    int * res,
    byte key_id
)

予め計算された256ビットハッシュに対するECCシグネチャを、IOT-SAFEアプレット内のプリプロビジョニング、またはプロビジョニングされたプリプロビジョニングを使用します。結果はRESに書き込まれます。1が有効で、0が無効です。注:有効なテストに戻り値を使用しないでください。Resのみを使用してください。

Parameters:

  • sig 検証する署名を含むバッファ
  • hash 署名されたハッシュ(メッセージダイジェスト)
  • hashlen ハッシュの長さ(オクテット)
  • res 署名の結果、1 ==有効、0 ==無効

See:

Return:

  • 0 成功すると(署名が無効であっても)
  • < 故障の場合は0

function wc_iotsafe_ecc_verify_hash_ex

int wc_iotsafe_ecc_verify_hash_ex(
    byte * sig,
    word32 siglen,
    byte * hash,
    word32 hashlen,
    int * res,
    byte * key_id,
    word16 id_size
)

予め計算された256ビットハッシュに対するECCシグネチャを、IOT-SAFEアプレット内のプリプロビジョニング、またはプロビジョニングされたプリプロビジョニングを使用します。結果はRESに書き込まれます。1が有効で、0が無効です。注:有効なテストに戻り値を使用しないでください。Resのみを使用してください。\ ref WC_IOTSAFE_ECC_VERIFY_HASH "WC_IOTSAFE_ECC_VERIFY_HASH"を除き、2バイト以上のキーIDで呼び出すことができる点を除きます。

Parameters:

  • sig 検証する署名を含むバッファ
  • hash 署名されたハッシュ(メッセージダイジェスト)
  • hashlen ハッシュの長さ(オクテット)
  • res 署名の結果、1 ==有効、0 ==無効
  • key_id パブリックECCキーがIOTセーフアプレットに保存されているスロットのID

See:

Return:

  • 0 成功すると(署名が無効であっても)
  • < 故障の場合は0

function wc_iotsafe_ecc_gen_k

int wc_iotsafe_ecc_gen_k(
    byte key_id
)

ECC 256ビットのキーペアを生成し、それを(書き込み可能な)スロットにIOTセーフなアプレットに保存します。

Parameters:

  • key_id ECCキーペアがIOTセーフアプレットに格納されているスロットのID。
  • key_id ECCキーペアがIOTセーフアプレットに格納されているスロットのID。
  • id_size キーIDサイズ

See:

Return:

  • 0 成功すると
  • 0 成功すると

ECC 256ビットのキーペアを生成し、それを(書き込み可能な)スロットにIOTセーフなアプレットに保存します。\ ref wc_iotsafe_ecc_gen_k "wc_iotsafe_ecc_gen_k"と同等です。ただし、2バイト以上のキーIDで呼び出すことができます。


Updated on 2024-04-19 at 02:10:11 +0000