OpenSSL 1.1.0 は、OpenSSL 1.0.2系に機能を追加し,脆弱性のある暗号のサポートや古いプラットフォームへの対応を終了したバージョンです.また,OpenSSL 1.1.0 では,OpenSSL 1.0.2系の幾つかの API に仕様変更があるため,1.0.2 以前のコードは 1.1.0 以降では修正が必要になる場合があります.ここでは,暗号関係の仕様変更点を示します.( OpenSSL_1.1.0_Changes 参照)
API 変更の主な目的は,内部データ構造をアプリケーションから不可視にし,データ構造を隠蔽することです.
#if OPENSSL_VERSION_NUMBER < 0x10100000L #define OBJ_get0_data(o) ((o)->data) #define OBJ_length(o) ((o)->length) #endif
OpenSSL 1.0.2 以前のソースコードを 1.1.0 以降に対応させるための必要な変更点を示す
BN_CTX ctx;これは,次のようにポインタを使うように修正する.
BN_CTX *ctx; ctx = BN_CTX_new(); ... BN_CTX_free(ctx);ctx を引数に持つ関数は,"&ctx" から "ctx" に引数を変更する必要がある.
const BIGNUM *n; RSA_get0_key(rsa, &n, NULL, NULL);その他,RSA 構造体関係では以下のような関数が追加されている.DSA など他の暗号アルゴリズムも同様である.
int RSA_set0_key(RSA *r, BIGNUM *n, BIGNUM *e, BIGNUM *d); int RSA_set0_factors(RSA *r, BIGNUM *p, BIGNUM *q); int RSA_set0_crt_params(RSA *r, BIGNUM *dmp1, BIGNUM *dmq1, BIGNUM *iqmp); void RSA_get0_key(const RSA *r, const BIGNUM **n, const BIGNUM **e, const BIGNUM **d); void RSA_get0_factors(const RSA *r, const BIGNUM **p, const BIGNUM **q); void RSA_get0_crt_params(const RSA *r, const BIGNUM **dmp1, const BIGNUM **dmq1, const BIGNUM **iqmp);