OpenSSL-C

【OpenSSL-C】X.509 API

X.509 API X509_REQ_new 概要 新規の要求を作成する。 X509_REQ_free 概要 - X509_REQ_set_pubkey 概要 証明書要求オブジェクトに公開鍵を付け加える。 X509_Name_new 概要 subjectName を割り当てる。 X509_NAME_ENTRY_create_by_NID 概要 - X509_NAME_add_…

【OpenSSL-C-sample】ソケットBIOの使用例

BIO_set_connect, BIO_set_conn_hostname, BIO_set_conn_port, BIO_do_connect, BIO_do_accept等の使用例 ソケットBIOの API の形式についてはこちらを参照。 /* * OpenSSL ―暗号・PKI・SSL/TLSライブラリの詳細― * John Viega, Matt Messier,Pravir Chandra…

【OpenSSL-C-sample】フィルタBIO の使用例

BIO_f_buffer, BIO_f_base64, BIO_f_cipher の使用例 フィルタBIO API の形式についてはこちらを参照。 /* * OpenSSL ―暗号・PKI・SSL/TLSライブラリの詳細― * John Viega, Matt Messier,Pravir Chandra 著/齋藤孝道 監訳 */ #include <stdio.h> #include <stdlib.h> #include <openssl/bio.h></openssl/bio.h></stdlib.h></stdio.h>…

【OpenSSL-C-sample】BIGNUM の使用例

BN_init, BN_new, BN_free の使用例 /* * OpenSSL ―暗号・PKI・SSL/TLSライブラリの詳細― * John Viega, Matt Messier,Pravir Chandra 著/齋藤孝道 監訳 */ #include <stdio.h> #include <stdlib.h> #include <openssl/bn.h> void bn_test1( void ) { BIGNUM static_bn; BIGNUM * dynamic_bn </openssl/bn.h></stdlib.h></stdio.h>…

【OpenSSL-C-sample】乱数生成APIの使用例

RAND_load_file, RAND_write_file の使用例 /* * OpenSSL ―暗号・PKI・SSL/TLSライブラリの詳細― * John Viega, Matt Messier,Pravir Chandra 著/齋藤孝道 監訳 */ /* カレントディレクトリに prngseed.dat ファイルが生成される */ #include <stdio.h> #include <openssl/rand.h> ex</openssl/rand.h></stdio.h>…

【OpenSSL-C-sample】ファイルBIOの使用例

BIO_set_fp, BIO_set_fd, BIO_new_file 等の使用例 /* * OpenSSL ―暗号・PKI・SSL/TLSライブラリの詳細― * John Viega, Matt Messier,Pravir Chandra 著/齋藤孝道 監訳 */ #include <stdio.h> #include <openssl/bio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> void file_bio_test( void ) {</fcntl.h></sys/stat.h></sys/types.h></openssl/bio.h></stdio.h>…

【OpenSSL-C-sample】メモリBIOの使用例

/* * OpenSSL ―暗号・PKI・SSL/TLSライブラリの詳細― * John Viega, Matt Messier,Pravir Chandra 著/齋藤孝道 監訳 */ #include <stdio.h> #include <openssl/bio.h> void mem_bio_test( void ) { BIO * bio = NULL; char * buffer = NULL; /* 読み取り・書き込み用のBIOを作成 */ </openssl/bio.h></stdio.h>…

【OpenSSL-C】事前準備(2) エラー情報出力の機構を準備する

OpenSSL にはエラー処理だけを行う ERR というパッケージがある。 エラー情報はキュー状に管理されており、そのキューに対して操作をすることでエラー情報を得て処理をハンドリングすることが出来る。 ここではエラー処理 API を使って、エラー情報を出力機…

【OpenSSL-C】低レベルAPI (任意精度の数値演算)

OpenSSL では BIGNUM パッケージという数値の上限に制限がない機構がサポートされている。これによって、DH 鍵の 512ビット、RSA の 1024ビットや 2048ビットといった巨大な鍵長があり、 それに対する演算をすることが出来るようになる。 素数生成 BN_genera…

【OpenSSL-C】低レベルAPI (乱数生成)

OpenSSL では乱数を生成する RANDOM パッケージが用意されていて、その API を操作することで PRNG から乱数を得ることが出来る。乱数についてはこちらにまとめました。 RAND_add void RAND_add(const void * buf, int num, double entropy); 概要 指定した…

【OpenSSL-C】乱数の生成について

疑似乱数生成器 PRNG とは OpenSSL ライブラリには「セッション鍵の生成」「公開鍵・秘密鍵の生成」といった場面などで 乱数を利用することがあり、乱数を生成するための疑似乱数生成器(PRNG: Pseudo Random Number Genera) が用意されている seed とは 乱数…

【OpenSSL-C】BIOについて

BIO とは OpenSSLで扱う入出力処理をカプセル化したもの。 入出力処理には、メモリIO、ファイルIO、ソケットIO、BIO間でのIO が該当する。 クラス図で表すと以下のようになる。 BIO の種類 BIO は次のように分けられる。 ソースシンクBIO メモリソースシンク…

【OpenSSL-C】低レベルAPI (入出力処理)

OpenSSL では入出力処理を抽象化した BIO というオブジェクトを使用する。 BIO についてはこちらにまとめた。 BIO_new BIO * BIO_new( BIO_METHOD * type ); 概要 新しい BIO を作成する。 引数 type BIO_METHOD オブジェクト 戻り値 非NULL: 成功 NULL: 失…

OpenSSL C言語プログラミング

OpenSSL C言語プログラミング 事前準備(1) マルチスレッドのサポート OpenSSL C言語 API マニュアル 高レベルAPI (EVP関数) 低レベルAPI (内部エラー処理) 低レベルAPI (入出力処理) 低レベルAPI (乱数生成) 低レベルAPI (任意精度の数値演算) OpenSSL C言語…

【OpenSSL-C】低レベルAPI (内部エラー処理)

OpenSSL にはエラー処理だけを行う ERR というパッケージがある。 エラー情報はキュー状に管理されており、そのキューに対して操作をすることでエラー情報を得て処理をハンドリングすることが出来る。 ここではエラー処理 API を挙げている。 エラーキュー操…

【OpenSSL-C】マルチスレッドのサポート [事前準備-1]

OpenSSLでマルチスレッドを使うためには、ユーザが mutex (ミューテクス=バイナリセマフォ)の機構を コールバック関数として提供する必要がある。用意すべきコールバック関数には次の2つがある 静的ロック 動的ロック 静的ロックの使用例 (dyn_lock_func.c)…

Cプログラミング

OpenSSL ブロックチェイン

【C言語】OpenSSL を使って自己証明書=オレオレ証明書を作る

【C言語】OpenSSL を使って公開鍵を作る

http://sehermitage.web.fc2.com/program/openssl_evp_1.html

【C言語】OpenSSL による CFB 暗号化と復号化の実装

以下、OpenSSL による CFB 暗号化と復号化の実装例である。 EVP (The Digital EnVeloPe library) を使うパターンのみを書いてみた。 なお、コンパイル&リンクは「gcc -Wall -g ソースファイル.c -lcrypto」である。 EVP使用版 // 使用しているパラメータは …

【C言語】OpenSSL による AES128-CBC 暗号化

OpenSSL による CBC 暗号化と復号化の実装 以下、OpenSSL による CBC 暗号化と復号化の実装例である。 EVP (The Digital EnVeloPe library) を使うパターンと使わないパターンの2つを書いてみた。 なお、コンパイル&リンクは「gcc -Wall -g ソースファイル.…

【C言語】OpenSSL による AES128-ECB 暗号化

OpenSSL による ECB 暗号化と復号化の実装 以下、OpenSSL による ECB 暗号化と復号化の実装例である。 EVP (The Digital EnVeloPe library) を使うパターンと使わないパターンの2つを書いてみた。 なお、コンパイル&リンクは「gcc -Wall -g ソースファイル.…