• 検索結果がありません。

API と wolfSSL OpenSSL 互換レイヤーの間を命名法で区別しています。この区別によっ て、ネイティブ wolfSSL API によって使用される主なSSL/TLS 構造体は名前はopenSSL とは異なっています。wolfSSLでの構造体は以下の通りです。OpenSSL 互換レイヤー(ユ ーザ・マニュアル第 13 章参照)を使用する場合は以前の名前も使用されています。

WOLFSSL (旧 wolfSSL または openSSL 互換ビルド時 SSL)

WOLFSSL_CTX (旧 wolfSSL または openSSL 互換ビルド時 SSL_CTX)

WOLFSSL_METHOD (旧 wolfSSL または openSSL 互換ビルド時

WOLFSSL ポインタを共有するほかに、ユーザーは wolfSSL_new()に構造体を渡す前に WOLFSSL_CTX を完全に初期化する責任があります。同じ WOLFSSL_CTX は複

数の WOLFSSL 構造体を生成することができますが、いったん WOLFSSL オブジェ クトが生成された後は wolfSSL_new()生成と WOLFSSL_CTX に対するその後の(あ るいは同時の)変更は反映されません。

繰り返しになりますが、WOLFSSL_CTX に対する書き込みアクセスはマルチスレッドに対 して同期する必要があり、上記説明の同期とアップデート問題を回避するため に、

WOLFSSL_CTX のシングル・スレッドの初期化をお勧めします。

入力と出力バッファ

wolfSSL は入力と出力のために小さな静的バッファを使用しています。デフォルトでは128 バイト、wolfssl/internal.h の RECORD_SIZE でコントロールされています。受け取る入 力レコードが静的バッファよりサイズ的に大きい場合は、要求を処理するために動 的バッ ファが一時的に使用され、解放されます。静的バッファのサイズは最大

MAX_RECORD_SIZE、2 の 16 乗または 16,384 まで指定することができます。

もし動的メモリを必要としない場合で、wolfSSL の以前の方法、16Kb の静的バッファのほ うの使用を希望する場合、LARGE_STATIC_BUFFER を定義してそのオプションを選択 することができます。

小さな静的バッファが使用され、バッファー・サイズより大きな wolfSSL_write()を要求し た場合、最大 MAX_RECORD_SIZE の動的ブロックが使用されデーターを送信します。現 時点のバッファー・サイズの分のデータだけを送信したい(そして、動的メモリ を避けた い)場合は STATIC_CHUNKS_ONLY を定義して、これを行うことができます。

wolfCrypt 使用方法

wolfCrypt は、wolfSSLから主に使用される暗号化ライブラリです。このライブラリは、実 行速度、フットプリント、そして移植性に最適化されています。wolfSSLは必要に応じて他 の暗号化ライブラリと相互作用します。

以下は、例の中で使用される型:

Types used in the examples:

typedef unsigned char byte;

typedef unsigned int word32;

ハッシュ関数

MD4

注意:MD4は、古く、安全性に問題があると考えられています。可能であれば、別のハッ シュ関数を使用することを検討してください。

MD4を使用するには、MD4ヘッダー “wolfSSL/wolfcrypt/md4.h”を含めます。使用する構 造体は、typedef 済みの Md4 です。使用する前に、ハッシュの初期化を wc_InitMd4() 呼 び出しで行う必要があります。wc_Md4Update() を使用してハッシュを更新し、

wc_Md4Final()を使用して最終ハッシュを取得します。

byte md4sum[MD4_DIGEST_SIZE];

byte buffer[1024];

/* fill buffer with data to hash*/

Md4 md4;

wc_InitMd4(&md4);

wc_Md4Update(&md4, buffer, sizeof(buffer)); /*can be called again and again*/

wc_Md4Final(&md4, md4sum);

md4sumには、bufferに対するハッシュ済みのダイジェストが含まれています。

MD5

注意:MD5は、古く、安全性に問題があると考えられています。可能であれば、別のハッ シュ関数を使用することを検討してください。

MD5 を使用するには、MD5 ヘッダー “wolfSSL/wolfcrypt/md5.h”を含めます。使用する構 造体は、typedef 済みの Md5 です。使用する前に、ハッシュの初期化を wc_InitMd5() 呼 び出しで行う必要があります。wc_Md5Update() を使用してハッシュを更新し、

wc_Md5Final()を使用して最終ハッシュを取得します。

byte md5sum[MD5_DIGEST_SIZE];

byte buffer[1024];

/*fill buffer with data to hash*/

Md5 md5;

wc_InitMd5(&md5);

wc_Md5Update(&md5, buffer, sizeof(buffer)); /*can be called again and again*/

wc_Md5Final(&md5, md5sum);

md5sumには、bufferに対するハッシュ済みのダイジェストが含まれています。

SHA / SHA-224 / SHA-256 / SHA-384 / SHA-512

SHAを使用するには、SHAヘッダー "wolfssl / wolfcrypt / sha.h"を含めます。 使用する構 造体は、typedef済みの Sha です。 使用する前に、ハッシュの初期化を wc_InitSha() 呼び 出しで行う必要があります。 wc_ShaUpdate() を使用してハッシュを更新し、

wc_ShaFinal() を使用して最終的なハッシュを取得します。

byte shaSum[SHA_DIGEST_SIZE];

byte buffer[1024];

/*fill buffer with data to hash*/

Sha sha;

wc_InitSha(&sha);

wc_ShaUpdate(&sha, buffer, sizeof(buffer)); /*can be called again and again*/

wc_ShaFinal(&sha, shaSum);

shaSumには、bufferに対するハッシュ済みのダイジェストが含まれています。

SHA-224、SHA-256、SHA-384、またはSHA-512のいずれかを使用するには、上記の手順

と同じ手順を実行しますが、「wolfssl / wolfcrypt / sha256.h」または「wolfssl / wolfcrypt / sha512.h」 "(SHA-384とSHA-512の両方)。 SHA-256、SHA-384、およびSHA-512関 数の名前は、SHA関数と類似した関数を使用します。

SHA-224の場合、InitSha224()、Sha224Update() 、およびSha224Final() の各関数は Sha224構造体とともに使用されます。

SHA-256の場合、InitSha256() 、Sha256Update() 、Sha256Final() の各関数はSha256構 造体で使用されます。

SHA-384では、構造Sha384で関数InitSha384() 、Sha384Update() 、および Sha384Final() が使用されます。

SHA-512の場合、構造Sha512で関数InitSha512() 、Sha512Update() 、および Sha512Final() が使用されます。

BLAKE2b

BLAKE2b(SHA-3ファイナリスト)を使用するには、BLAKE2b ヘッダー "wolfssl / wolfcrypt / blake2.h"を含めます。 使用する構造体は、typedef済みの Blake2b です。 使用 する前に、ハッシュの初期化を wc_InitBlake2b() 呼び出しで行う必要があります。

wc_Blake2bUpdate() を使用してハッシュを更新し、wc_Blake2bFinal() を使用して最終的 なハッシュを取得します。

byte digest[64];

byte input[64]; /*fill input with data to hash*/

Blake2b b2b;

wc_InitBlake2b(&b2b, 64);

wc_Blake2bUpdate(&b2b, input, sizeof(input));

wc_Blake2bFinal(&b2b, digest, 64);

wc_InitBlake2b() の2番目のパラメータは最終的なダイジェストサイズにする必要がありま す。 ダイジェストには、バッファ内のハッシュされたデータのダイジェストが含まれるよ うになりました。

使用例は、blake2b_test() 関数内のwolfCryptテスト・アプリケーション(wolfcrypt / test / test.c)にあります。

関連したドキュメント