BIGNUM ライブラリ

概要

OpenSSL ライブラリには,RSA や DH などの公開鍵暗号アルゴリズムを実現するために多倍長整数演算のライブラリ関数が用意されている (crypto ライブラリ:OpenSSL bn(3)を参照)

このライブラリでは,データ構造の格納に動的メモリ確保が行われており,扱える数値に上限はない.ただし,メモリ確保エラーが発生した場合に備え,関数の戻り値のチェックは必要である.

このライブラリの基本オブジェクト(構造体) は以下の BIGNUM であり,1 つの多倍長整数を保持するために用いられる.この構造体を直接参照したり,変更してはいけない.

 typedef struct bignum_st {
    int top;	/* Index of last used d. */
    BN_ULONG *d;/* Pointer to an array of 'BITS2' bit chunks. */
    int max;	/* Size of the d array. */
    int neg;
 } BIGNUM;

多倍長整数は,動的に確保された BN_ULONG 型の配列に格納される.BN_ULONG は,16, 32, 64 ビットの何れかである.

ライブラリ関数の幾つかは,実行時にテンポラリな BIGNUM 型の変数を必要とする.この BIGNUM の動的確保のオーバヘッドを避けるために,BN_CTX 個の BIGNUM を含む BN_CTX 構造体が用いられる.

 #define BN_CTX	12
 typedef struct bignum_ctx {
    int tos;             /* top of stack */
    BIGNUM *bn[BN_CTX];  /* The variables */
 } BN_CTX;

なお,BIGNUM ライブラリを用いるときは,"openssl/bn.h" をインクルードする.

関数

関数群は,機能により幾つかのグループに分けられる.各関数に共通的な仕様を示す.

以下,主な関数を示す.

inserted by FC2 system