コンテンツにスキップ

IoT-Safeモジュール

More...

Functions

Name
int wolfSSL_CTX_iotsafe_enable(WOLFSSL_CTX * ctx)
この関数は、指定されたコンテキストでIoT-Safeサポートを有効にします。
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セッションに接続します。 これはwolfSSL_iotsafe_onと同等ですが、IoT-SAFEスロットのIDを参照渡しでき、IDフィールドの長さをパラメータ"id_size"で指定できる点が異なります。
void wolfIoTSafe_SetCSIM_read_cb(wolfSSL_IOTSafe_CSIM_read_cb rf)
AT+CSIMコマンド用の読み取りコールバックを関連付けます。この入力関数は通常、モデムと通信するUARTチャネルの読み取りイベントに関連付けられます。関連付けられる読み取りコールバックはグローバルで、同時にIoT-safeサポートを使用するすべてのコンテキストに対して変更されます。
void wolfIoTSafe_SetCSIM_write_cb(wolfSSL_IOTSafe_CSIM_write_cb wf)
AT+CSIMコマンド用の書き込みコールバックを関連付けます。この出力関数は通常、モデムと通信するUARTチャネルの書き込みイベントに関連付けられます。関連付けられる書き込みコールバックはグローバルで、同時にIoT-safeサポートを使用するすべてのコンテキストに対して変更されます。
int wolfIoTSafe_GetRandom(unsigned char * out, word32 sz)
IoT-Safe関数GetRandomを使用して、指定されたサイズのランダムバッファを生成します。この関数はwolfCrypt RNGオブジェクトによって自動的に使用されます。
int wolfIoTSafe_GetCert(byte 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アプレット上のファイルに保存されている証明書をインポートし、メモリ内にローカルに保存します。wolfIoTSafe_GetCertと同等ですが、2バイト以上のファイルIDで呼び出すことができます。
int wc_iotsafe_ecc_import_public(ecc_key * key, byte key_id)
IoT-Safeアプレットに保存されているECC 256ビット公開鍵をecc_keyオブジェクトにインポートします。
int wc_iotsafe_ecc_export_public(ecc_key * key, byte key_id)
ECC 256ビット公開鍵をecc_keyオブジェクトからIoT-Safeアプレット内の書き込み可能な公開鍵スロットにエクスポートします。
int wc_iotsafe_ecc_import_public_ex(ecc_key * key, byte * key_id, word16 id_size)
ECC 256ビット公開鍵をecc_keyオブジェクトからIoT_Safeアプレット内の書き込み可能な公開鍵スロットにエクスポートします。 wc_iotsafe_ecc_import_publicと同等ですが、2バイト以上の鍵IDで呼び出すことができます。
int wc_iotsafe_ecc_export_private(ecc_key * key, byte key_id)
ECC 256ビット鍵をecc_keyオブジェクトからIoT-Safeアプレット内の書き込み可能な秘密鍵スロットにエクスポートします。
int wc_iotsafe_ecc_export_private_ex(ecc_key * key, byte * key_id, word16 id_size)
ECC 256ビット鍵をecc_keyオブジェクトからIoT_Safeアプレット内の書き込み可能な秘密鍵スロットにエクスポートします。 wc_iotsafe_ecc_export_privateと同等ですが、2バイト以上の鍵IDで呼び出すことができます。
int wc_iotsafe_ecc_sign_hash(byte * in, word32 inlen, byte * out, word32 * outlen, byte key_id)
IoT-Safeアプレット内に事前に保存または事前プロビジョニングされた秘密鍵を使用して、事前計算されたハッシュに署名します。
int wc_iotsafe_ecc_sign_hash_ex(byte * in, word32 inlen, byte * out, word32 * outlen, byte * key_id, word16 id_size)
IoT_Safeアプレット内に事前に保存または事前プロビジョニングされた秘密鍵を使用して、事前計算されたハッシュに署名します。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)
IoT-Safeアプレット内に事前に保存または事前プロビジョニングされた公開鍵を使用して、事前計算されたハッシュに対するECC署名を検証します。結果は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)
IoT_Safeアプレット内に事前に保存または事前プロビジョニングされた公開鍵を使用して、事前計算されたハッシュに対するECC署名を検証します。結果はresに書き込まれます。1は有効、0は無効です。 注意: 有効性をテストするために戻り値を使用しないでください。resのみを使用してください。 wc_iotsafe_ecc_verify_hashと同等ですが、2バイト以上の鍵IDで呼び出すことができます。
int wc_iotsafe_ecc_gen_k(byte key_id)
ECC 256ビット鍵ペアを生成し、IoT_Safeアプレット内の(書き込み可能な)スロットに保存します。

Detailed Description

IoT-Safe(IoT-SIM Applet For Secure End-2-End Communication)は、SIMを堅牢で スケーラブルかつ標準化されたハードウェアRoot of Trustとして活用し、データ通信を保護する技術です。

IoT-Safe SSLセッションは、SIMをハードウェアセキュリティモジュールとして使用し、すべての暗号公開 鍵操作をオフロードし、証明書と鍵へのアクセスをSIMに制限することで攻撃対象領域を削減します。

IoT-Safeサポートは、wolfSSL_CTX_iotsafe_enable()を使用して既存のWOLFSSL_CTXコンテキストで有効にできます。

コンテキスト内で作成されたセッションは、IoT-Safe鍵とファイル使用のパラメータを設定し、 wolfSSL_iotsafe_on()で公開鍵コールバックを有効にできます。

コンパイルされている場合、モジュールはwolfCryptのエントロピーソースとしてIoT-Safe乱数生成器をサポートします。

Functions Documentation

function wolfSSL_CTX_iotsafe_enable

int wolfSSL_CTX_iotsafe_enable(
    WOLFSSL_CTX * ctx
)

この関数は、指定されたコンテキストでIoT-Safeサポートを有効にします。

Parameters:

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

See:

Return:

  • 0 成功時
  • WC_HW_E ハードウェアエラー時

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-safeアプレットスロットのID
  • ecdh_keypair_slot ECDH鍵ペアを格納するiot-safeアプレットスロットのID
  • peer_pubkey_slot ECDH用に他のエンドポイントの公開鍵を格納するiot-safeアプレットスロットのID
  • peer_cert_slot 検証用に他のエンドポイントの公開鍵を格納するiot-safeアプレットスロットのID

See:

Return:

  • 0 成功時
  • NOT_COMPILED_IN HAVE_PK_CALLBACKSが無効な場合
  • BAD_FUNC_ARG sslポインタが無効な場合

これは、スロットのIDが1バイト長の場合にSSLセッションをIoT-Safeアプレットに接続するために呼び出す必要があります。 IoT-SAFEスロットのIDが2バイト以上の場合は、代わりにwolfSSL_iotsafe_on_ex()を使用する必要があります。

Example

// IoT-Safe用の鍵IDを定義
#define PRIVKEY_ID 0x02
#define ECDH_KEYPAIR_ID 0x03
#define PEER_PUBKEY_ID 0x04
#define PEER_CERT_ID 0x05
// 新しいsslセッションを作成
WOLFSSL *ssl;
ssl = wolfSSL_new(ctx);
if (!ssl)
    return NULL;
// IoT-Safeを有効にして鍵スロットを関連付け
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);
}

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セッションに接続します。 これはwolfSSL_iotsafe_onと同等ですが、IoT-SAFEスロットのIDを参照渡しでき、IDフィールドの長さをパラメータ"id_size"で指定できる点が異なります。

Parameters:

  • ssl コールバックが有効になるWOLFSSLオブジェクトへのポインタ
  • privkey_id ホストの秘密鍵を含むiot-safeアプレットスロットのIDへのポインタ
  • ecdh_keypair_slot ECDH鍵ペアを格納するiot-safeアプレットスロットのIDへのポインタ
  • peer_pubkey_slot ECDH用に他のエンドポイントの公開鍵を格納するiot-safeアプレットスロットのIDへのポインタ
  • peer_cert_slot 検証用に他のエンドポイントの公開鍵を格納するiot-safeアプレットスロットのIDへのポインタ
  • id_size 各スロットIDのサイズ

See:

Return:

  • 0 成功時
  • NOT_COMPILED_IN HAVE_PK_CALLBACKSが無効な場合
  • BAD_FUNC_ARG sslポインタが無効な場合

Example

// IoT-Safe用の鍵IDを定義(16ビット、リトルエンディアン)
#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;



// 新しいsslセッションを作成
WOLFSSL *ssl;
ssl = wolfSSL_new(ctx);
if (!ssl)
    return NULL;
// IoT-Safeを有効にして鍵スロットを関連付け
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サポートを使用するすべてのコンテキストに対して変更されます。

Parameters:

  • rf UART読み取りイベントに関連付けられる読み取りコールバック。コールバック関数は2つの引数(buf、len)を受け取り、lenまで読み取られた文字数を返します。改行文字に遭遇すると、コールバックはこれまでに受信した文字数(改行文字を含む)を返す必要があります。

See: wolfIoTSafe_SetCSIM_write_cb

Example

// USART読み取り関数、他の場所で定義
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チャネルの書き込みイベントに関連付けられます。関連付けられる書き込みコールバックはグローバルで、同時にIoT-safeサポートを使用するすべてのコンテキストに対して変更されます。

Parameters:

  • rf UART書き込みイベントに関連付けられる書き込みコールバック。コールバック関数は2つの引数(buf、len)を受け取り、lenまで書き込まれた文字数を返します。

See: wolfIoTSafe_SetCSIM_read_cb

Example

// USART書き込み関数、他の場所で定義
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-Safe関数GetRandomを使用して、指定されたサイズのランダムバッファを生成します。この関数はwolfCrypt RNGオブジェクトによって自動的に使用されます。

Parameters:

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

Return: 0 成功時

function wolfIoTSafe_GetCert

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

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

Parameters:

  • id 証明書が保存されているIoT-Safeアプレット内のファイルID
  • output 証明書がインポートされるバッファ
  • sz バッファoutputで利用可能な最大サイズ

Return:

  • インポートされた証明書の長さ
  • < 0 失敗の場合

Example

#define CRT_CLIENT_FILE_ID 0x03
unsigned char cert_buffer[2048];
// 証明書をバッファに取得
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);

// TLSクライアントコンテキストのアイデンティティとして証明書バッファを使用
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アプレット上のファイルに保存されている証明書をインポートし、メモリ内にローカルに保存します。wolfIoTSafe_GetCertと同等ですが、2バイト以上のファイルIDで呼び出すことができます。

Parameters:

  • id 証明書が保存されているIoT-Safeアプレット内のファイルIDへのポインタ
  • id_sz ファイルIDのサイズ
  • output 証明書がインポートされるバッファ
  • sz バッファoutputで利用可能な最大サイズ

Return:

  • インポートされた証明書の長さ
  • < 0 失敗の場合

Example

function wc_iotsafe_ecc_import_public

int wc_iotsafe_ecc_import_public(
    ecc_key * key,
    byte key_id
)

IoT-Safeアプレットに保存されているECC 256ビット公開鍵をecc_keyオブジェクトにインポートします。

Parameters:

  • key IoT-Safeアプレットからインポートされた鍵を含むecc_keyオブジェクト
  • id 公開鍵が保存されているIoT-Safeアプレット内の鍵ID

See:

Return:

  • 0 成功時
  • < 0 失敗の場合

function wc_iotsafe_ecc_export_public

int wc_iotsafe_ecc_export_public(
    ecc_key * key,
    byte key_id
)

ECC 256ビット公開鍵をecc_keyオブジェクトからIoT-Safeアプレット内の書き込み可能な公開鍵スロットにエクスポートします。

Parameters:

  • key エクスポートする鍵を含むecc_keyオブジェクト
  • id 公開鍵が保存されるIoT-Safeアプレット内の鍵ID

See:

Return:

  • 0 成功時
  • < 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 256ビット公開鍵をecc_keyオブジェクトからIoT-Safeアプレット内の書き込み可能な公開鍵スロットにエクスポートします。 wc_iotsafe_ecc_import_publicと同等ですが、2バイト以上の鍵IDで呼び出すことができます。

Parameters:

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

See:

Return:

  • 0 成功時
  • < 0 失敗の場合

function wc_iotsafe_ecc_export_private

int wc_iotsafe_ecc_export_private(
    ecc_key * key,
    byte key_id
)

ECC 256ビット鍵をecc_keyオブジェクトからIoT-Safeアプレット内の書き込み可能な秘密鍵スロットにエクスポートします。

Parameters:

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

See:

Return:

  • 0 成功時
  • < 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-Safeアプレット内の書き込み可能な秘密鍵スロットにエクスポートします。 wc_iotsafe_ecc_export_privateと同等ですが、2バイト以上の鍵IDで呼び出すことができます。

Parameters:

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

See:

Return:

  • 0 成功時
  • < 0 失敗の場合

function wc_iotsafe_ecc_sign_hash

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

IoT-Safeアプレット内に事前に保存または事前プロビジョニングされた秘密鍵を使用して、事前計算されたハッシュに署名します。

Parameters:

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

See:

Return:

  • 0 成功時
  • < 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
)

IoT-Safeアプレット内に事前に保存または事前プロビジョニングされた秘密鍵を使用して、事前計算されたハッシュに署名します。wc_iotsafe_ecc_sign_hashと同等ですが、2バイト以上の鍵IDで呼び出すことができます。

Parameters:

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

See:

Return:

  • 0 成功時
  • < 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
)

IoT-Safeアプレット内に事前に保存または事前プロビジョニングされた公開鍵を使用して、事前計算されたハッシュに対するECC署名を検証します。結果はresに書き込まれます。1は有効、0は無効です。 注意: 有効性をテストするために戻り値を使用しないでください。resのみを使用してください。

Parameters:

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

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
)

IoT-Safeアプレット内に事前に保存または事前プロビジョニングされた公開鍵を使用して、事前計算されたハッシュに対するECC署名を検証します。結果はresに書き込まれます。1は有効、0は無効です。 注意: 有効性をテストするために戻り値を使用しないでください。resのみを使用してください。 wc_iotsafe_ecc_verify_hashと同等ですが、2バイト以上の鍵IDで呼び出すことができます。

Parameters:

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

See:

Return:

  • 0 成功時(署名が有効でない場合でも)
  • < 0 失敗の場合。

function wc_iotsafe_ecc_gen_k

int wc_iotsafe_ecc_gen_k(
    byte key_id
)

ECC 256ビット鍵ペアを生成し、IoT-Safeアプレット内の(書き込み可能な)スロットに保存します。

Parameters:

  • key_id IoT-Safeアプレット内にECC鍵ペアが保存されているスロットのID。
  • key_id IoT-Safeアプレット内にECC鍵ペアが保存されているスロットのID。
  • id_size 鍵IDのサイズ

See:

Return:

  • 0 成功時
  • < 0 失敗の場合。
  • 0 成功時
  • < 0 失敗の場合。

ECC 256ビット鍵ペアを生成し、IoT-Safeアプレット内の(書き込み可能な)スロットに保存します。 wc_iotsafe_ecc_gen_kと同等ですが、2バイト以上の鍵IDで呼び出すことができます。


Updated on 2025-12-12 at 03:08:16 +0000