豚吐露@wiki

EVP API

最終更新:

Bot(ページ名リンク)

- view
管理者のみ編集可

EVP API

EVP APIを使用する場合、以下のheader fileのincludeが必要。
openssl/evp.h
<openssl/evp.h>

【Define】

【struct】
EVP_CIPHER_CTX
EVP APIを用いて暗号化を行う場合、暗号化に必要な情報は本構造体へ格納し、APIへ提供する。
本構造体は領域確保後、必ず『EVP_CIPHER_CTX_init()』で初期化を行うこと。

【API】
void EVP_CIPHER_CTX_init(EVP_CIPHER_CTX *a)
■概要
EVP_CIPHER_CTX構造体の初期化API
■引数
a: ( /o)初期化対象の暗号化context
■戻り値
無し
int EVP_EncryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, const unsigned char *key, const unsigned char *iv)}
■概要
EVP_CIPHER_CTX構造体へ暗号化に必要な情報を設定する。
でもこれ古いAPIみたいなので、EVP_EncryptInit_ex()を使った方が良いらしい。
■引数
EVP_CIPHER_CTX *ctx: (i/o)暗号化context
const EVP_CIPHER *cipher: (i/ )暗号化typeを決定するobjectを指定
const unsigned char *key: (i/ )暗号化/復号化に使用する鍵を指定
const unsigned char *iv: (i/ )暗号化/復号化に使用するIVを指定
■戻り値



■概要
■引数
■戻り値


【Example】
参照)http://linux.die.net/man/3/evp_cipherinit
int do_crypt(FILE *in, FILE *out, int do_encrypt)
{
    /* Allow enough space in output buffer for additional block */
    inbuf[1024], outbuf[1024 + EVP_MAX_BLOCK_LENGTH];
    int inlen, outlen;
    /* Bogus key and IV: we'd normally set these from
    * another source.
    */
    unsigned char key[] = "0123456789";
    unsigned char iv[] = "12345678";
    /* Don't set key or IV because we will modify the parameters */
    EVP_CIPHER_CTX_init(&ctx);
    EVP_CipherInit_ex(&ctx, EVP_rc2(), NULL, NULL, NULL, do_encrypt);
    EVP_CIPHER_CTX_set_key_length(&ctx, 10);
    /* We finished modifying parameters so now we can set key and IV */
    EVP_CipherInit_ex(&ctx, NULL, NULL, key, iv, do_encrypt);

    for(;;)
    {
        inlen = fread(inbuf, 1, 1024, in);
        if(inlen <= 0) break;
        if(!EVP_CipherUpdate(&ctx, outbuf, &outlen, inbuf, inlen))
        {
            /* Error */
            EVP_CIPHER_CTX_cleanup(&ctx);
            return 0;
        }
        fwrite(outbuf, 1, outlen, out);
    }
    if(!EVP_CipherFinal_ex(&ctx, outbuf, &outlen))
    {
        /* Error */
        EVP_CIPHER_CTX_cleanup(&ctx);
        return 0;
    }
    fwrite(outbuf, 1, outlen, out);

    EVP_CIPHER_CTX_cleanup(&ctx);
    return 1;
}


更新日: 2010年03月11日 (木) 11時37分26秒

名前:
コメント:

すべてのコメントを見る

タグ:

linux openssl evp
記事メニュー
ウィキ募集バナー