コンテンツにスキップ

ポータビリティ

抽象化レイヤー

C標準ライブラリ抽象化レイヤー

wolfSSL(以前のCyassl)は、C標準ライブラリなしでビルドして、開発者により高いレベルのポータビリティと柔軟性を提供することができます。ユーザーは、C標準の関数の代わりに使用したい関数をマッピングする必要があります。

メモリ使用

ほとんどのCプログラムは、動的メモリ割り当てにmalloc()およびfree()を使用します。wolfSSLは、代わりにXMALLOC()およびXFREE()を使用します。デフォルトでは、これらはCランタイムバージョンを指します。XMALLOC_USERを定義することにより、ユーザーは独自のフックを提供できます。各メモリ関数は、標準的なものについて2つの追加の引数、ヒープのヒント、および割り当てタイプを使用します。ユーザーは、これらを無視するか、好きな方法で使用できます。wolfSSLメモリ関数はwolfssl/wolfcrypt/types.hで見つけることができます。

wolfSSLは、コンパイル時ではなく実行時にメモリオーバーライド関数を登録する機能も提供します。wolfssl/wolfcrypt/memory.hはこの機能のヘッダーであり、ユーザーは次の関数を呼び出してメモリ関数をセットアップできます。

int wolfSSL_SetAllocators(wolfSSL_Malloc_cb  malloc_function,
                         wolfSSL_Free_cb    free_function,
                         wolfSSL_Realloc_cb realloc_function);

コールバックプロトタイプについては、ヘッダーwolfssl/wolfcrypt/memory.h、実装についてはmemory.cを参照してください。

string.h

wolfSSLは、string.hmemcpy()memset()、およびmemcmp()のように振る舞ういくつかの機能を使用します。それらはそれぞれXMEMCPY()XMEMSET()、およびXMEMCMP()に抽象化されています。デフォルトでは、C標準ライブラリバージョンを指します。STRING_USERを定義することで、ユーザーはtypes.hで独自のフックを提供できます。たとえば、デフォルトではXMEMCPY()は次のとおりです。

#define XMEMCPY(d,s,l)    memcpy((d),(s),(l))

STRING_USERを定義した後は、次のことができます。

#define XMEMCPY(d,s,l)    my_memcpy((d),(s),(l))

またはマクロを避けたい場合:

external void* my_memcpy(void* d, const void* s, size_t n);

あなたのバージョンmy_memcpy()を指すようにwolfsslの抽象化レイヤーを設定する。

Math.H

wolfSSLは、math.hpow() log()のように振る舞う2つの機能を使用しています。Difie-Hellmanのみが必要とするため、ビルドからDHを除外すると、独自のDHを提供する必要はありません。それらはXPOW()およびXLOG()としてwolfcrypt/src/dh.cに定義されます。

ファイルシステムの使用

デフォルトでは、wolfSSLはキーと証明書をロードするためにシステムのファイルシステムを使用します。NO_FILESYSTEMを定義することでオフにすることができます。代わりに項目Vを参照してください。システムがて提供するファイル システムと異なるものを使用したい場合は、ssl.c の XFILE() レイヤーを使用して、ファイル システム呼び出しを使用したいシステムに向けることができます。Micrium Defineによって提供される例を参照してください。

カスタム入力/出力抽象化レイヤー

wolfSSLは、SSL接続のI/Oをより高く制御したい、またはTCP/IP以外の異なるトランスポートメディアの上にSSLを実行したい方のためのカスタムI/O抽象化レイヤを提供します。

ユーザーは2つの機能を定義する必要があります。

  1. ネットワーク送信機能

  2. ネットワーク受信機能

これらの2つの関数は、ssl.hCallbackIOSendおよびCallbackIORecvによってプロトタイプ化されています。

typedef int (*CallbackIORecv)(WOLFSSL *ssl, char *buf, int sz, void *ctx);
typedef int (*CallbackIOSend)(WOLFSSL *ssl, char *buf, int sz, void *ctx);

ユーザーはWOLFSSL_CTXごとにwolfSSL_SetIOSend()およびwolfSSL_SetIORecv()に登録する必要があります。たとえば、デフォルトの場合は、CBIORecv()CBIOSend()io.cの下部に登録されています。

void wolfSSL_SetIORecv(WOLFSSL_CTX *ctx, CallbackIORecv CBIORecv)
{
     ctx->CBIORecv=CBIORecv;
}

void wolfSSL_SetIOSend(WOLFSSL_CTX *ctx, CallbackIOSend CBIOSend)
{
    ctx->CBIOSend=CBIOSend;
}

ユーザは、io.cの下部に示されているように、wolfSSL_SetIOWriteCtx()およびwolfSSL_SetIOReadCtx()でwolfSSLオブジェクト(セッション)ごとにコンテキストを設定することができる。例えば、ユーザがメモリバッファを使用している場合、コンテキストはどこで説明を説明する構造へのポインタであり得る。メモリバッファにアクセスします。デフォルトの場合は、ユーザーが上書きしないで、ソケットをコンテキストとして登録します。

CBIORecvおよびCBIOSend関数ポインターは、カスタムI/O関数を指すことができます。io.cにあるデフォルトのSend()およびReceive()関数、EmbedSend()およびEmbedReceive()は、テンプレートとガイドとして使用できます。

WOLFSSL_USER_IOは、デフォルトのI/O関数EmbedSend()およびEmbedReceive()の自動設定を削除するために定義できます。

オペレーティングシステムの抽象化レイヤー

wolfSSL OS抽象化レイヤーは、ユーザーのオペレーティングシステムへのwolfSSLの簡単な移植を容易にするのに役立ちます。wolfssl/wolfcrypt/settings.hファイルには、OSレイヤーをトリガーする設定が含まれています。

OS特有の定義は、WolfCryptおよびWolfsslのwolfssl/internal.hwolfssl/wolfcrypt/types.hにあります。

サポートされているオペレーティングシステム

wolfSSLを定義する1つの要因は、新しいプラットフォームに簡単に移植される能力です。そのため、wolfsslは、out-of-box のオペレーティングシステムの多くをサポートしています。現在サポートされているオペレーティングシステムは次のとおりです。

  • Win32/64

  • Linux.

  • Mac OS X

  • Solaris

  • ThreadX

  • VxWorks

  • FreeBSD

  • NetBSD

  • OpenBSD

  • embedded Linux

  • yocto linux

  • OpenEmbedded

  • WinCE

  • Haiku

  • OpenWRT

  • iPhone(iOS)

  • Android

  • Nintendo Wii と Gamecube through DevKitPro

  • QNX

  • MontaVista

  • NonStop

  • TRON/ITRON/µITRON

  • Micrium's µC/OS-III

  • FreeRTOS

  • SafeRTOS

  • NXP/Freescale MQX

  • Nucleus

  • TinyOS

  • HP/UX

  • AIX

  • ARC MQX

  • TI-RTOS

  • uTasker

  • embOS

  • INtime

  • Mbed

  • µT-Kernel

  • RIOT

  • CMSIS-RTOS

  • FROSTED

  • Green Hills INTEGRITY

  • keil RTX

  • TOPPERS

  • Petalinux

  • Apache Mynewt

サポートされたチップメーカー

wolfSSLは、ARM、Intel、Motorola、MBED、Freescale、Microchip(PIC32)、STMicro(STM32F2/F4)、NXP、Analog Devices、Texas Instruments、AMDなどを含むチップセットをサポートしています。

C#ラッパー

wolfSSLは、制限付きですがC#での使用をサポートしています。ポートを含むビジュアルスタジオプロジェクトは、ディレクトリroot_wolfSSL/wrapper/CSharp/にあります。ビジュアルスタジオプロジェクトを開いた後、ビルド -> 構成マネージャーをクリックして「アクティブソリューション構成」と「アクティブソリューションプラットフォーム」を設定します。」はDLLデバッグとDLLリリースです。サポートされているプラットフォームはWin32およびX64です。

ソリューションとプラットフォームを設定したら、プリプロセッサフラグHAVE_CSHARPを追加する必要があります。これにより、C#ラッパーで使用され、サンプルプログラムで使用されるオプションがオンになります。

その後、ビルドするだけでビルドソリューションを選択します。これにより、wolfssl.dllwolfSSL_CSharp.dllおよび例が作成されます。サンプルプログラムは、それらをエントリポイントとしてターゲットにして、Visual Studioでデバッグを実行することで実行できます。

作成されたC#ラッパーをC#プロジェクトに追加することは、いくつかの方法で実行できます。1つの方法は、作成されたwolfssl.dllおよびwolfSSL_CSharp.dllをディレクトリC:/Windows/System/にインストールすることです。これにより、Wolfssl C#ラッパーの呼び出しが可能になります。

using wolfSSL.CSharp

public some_class {

    public static main(){
    wolfssl.Init()
    ...
}
...

Wolfssl C#ラッパーに電話をかける。別の方法は、Visual Studioプロジェクトを作成し、wolfSSLのバンドルC#ラッパーソリューションを参照することです。