From: "akira yamada / やまだあきら" Date: 2003-07-15T19:04:40+09:00 Subject: [ruby-dev:20682] Re: add library >>>>> In [ruby-dev : No.20668] >>>>> GOTOU Yuuzou wrote: > 試してみたら、net/https にも修正が必要だったので > 0.1.4 を作りました。 以前に開発者のどなたかにメールを送ったのですが、 Debian環境のOpenSSL 0.9.7(0.9.7b)ではbuildできませんでした。 あまり詳しいことは分かりませんけれど、 以下のような変更があったようです。 * CRYPTOLIBにOpenSSL_add_all_algorithmsがなくなった * BN_CTXの扱い方が変更になった(らしい?) * NID_des_edeとNID_des_ede3がobj_mac.hから削除された * NID_aes128_ecbなどがNID_aes_128_ecbに変更された (* MS_CALLBACKがなくなった) OPENSSL_VERSION_NUMBERか何かで切り分けたほうが よいのだろうとは思ったのですが、 とりあえずそのまま書き換えたパッチを付けます。 diff -ruN ossl.orig/extconf.rb ossl/extconf.rb --- ossl.orig/extconf.rb 2003-07-15 04:29:38.000000000 +0900 +++ ossl/extconf.rb 2003-07-15 12:17:45.000000000 +0900 @@ -29,7 +29,7 @@ if have_header("openssl/ssl.h") have_header("openssl/e_os.h") - if have_library(CRYPTOLIB, "OpenSSL_add_all_algorithms") and have_library(SSLLIB, "SSLv23_method") + if have_library(CRYPTOLIB, "OpenSSL_add_all_ciphers") and have_library(SSLLIB, "SSLv23_method") create_makefile("openssl") end end diff -ruN ossl.orig/ossl_bn.c ossl/ossl_bn.c --- ossl.orig/ossl_bn.c 2002-03-12 02:20:04.000000000 +0900 +++ ossl/ossl_bn.c 2003-07-15 12:19:40.000000000 +0900 @@ -201,7 +201,7 @@ { \ BIGNUM *bn = NULL; \ BIGNUM *result = NULL; \ - BN_CTX ctx; \ + BN_CTX *ctx; \ VALUE obj; \ \ GetBN(self, bn); \ @@ -209,8 +209,9 @@ if (!(result = BN_new())) { \ OSSL_Raise(eBNError, ""); \ } \ - BN_CTX_init(&ctx); \ - if (BN_##func(result, bn, &ctx) != 1) { \ + ctx = BN_CTX_new(); \ + BN_CTX_init(ctx); \ + if (BN_##func(result, bn, ctx) != 1) { \ BN_free(result); \ OSSL_Raise(eBNError, ""); \ } \ @@ -255,7 +256,7 @@ { \ BIGNUM *bn1 = NULL, *bn2 = NULL; \ BIGNUM *result = NULL; \ - BN_CTX ctx; \ + BN_CTX *ctx; \ VALUE obj; \ \ GetBN(self, bn1); \ @@ -266,8 +267,9 @@ if (!(result = BN_new())) { \ OSSL_Raise(eBNError, ""); \ } \ - BN_CTX_init(&ctx); \ - if (BN_##func(result, bn1, bn2, &ctx) != 1) { \ + ctx = BN_CTX_new(); \ + BN_CTX_init(ctx); \ + if (BN_##func(result, bn1, bn2, ctx) != 1) { \ BN_free(result); \ OSSL_Raise(eBNError, ""); \ } \ @@ -286,7 +288,7 @@ { BIGNUM *bn1 = NULL, *bn2 = NULL; BIGNUM *r1 = NULL, *r2 = NULL; - BN_CTX ctx; + BN_CTX *ctx; VALUE obj1, obj2; GetBN(self, bn1); @@ -302,8 +304,9 @@ OSSL_Raise(eBNError, ""); } - BN_CTX_init(&ctx); - if (BN_div(r1, r2, bn1, bn2, &ctx) != 1) { + ctx = BN_CTX_new(); + BN_CTX_init(ctx); + if (BN_div(r1, r2, bn1, bn2, ctx) != 1) { BN_free(r1); BN_free(r2); OSSL_Raise(eBNError, ""); @@ -320,7 +323,7 @@ { BIGNUM *bn1 = NULL, *bn2 = NULL; BIGNUM *result = NULL; - BN_CTX ctx; + BN_CTX *ctx; VALUE obj; GetBN(self, bn1); @@ -331,8 +334,9 @@ if (!(result = BN_new())) { OSSL_Raise(eBNError, ""); } - BN_CTX_init(&ctx); - if (!BN_mod_inverse(result, bn1, bn2, &ctx)) { + ctx = BN_CTX_new(); + BN_CTX_init(ctx); + if (!BN_mod_inverse(result, bn1, bn2, ctx)) { BN_free(result); OSSL_Raise(eBNError, ""); } @@ -348,7 +352,7 @@ { \ BIGNUM *bn1 = NULL, *bn2 = NULL, *bn3 = NULL; \ BIGNUM *result = NULL; \ - BN_CTX ctx; \ + BN_CTX *ctx; \ VALUE obj; \ \ GetBN(self, bn1); \ @@ -361,8 +365,9 @@ if (!(result = BN_new())) { \ OSSL_Raise(eBNError, ""); \ } \ - BN_CTX_init(&ctx); \ - if (BN_##func(result, bn1, bn2, bn3, &ctx) != 1) { \ + ctx = BN_CTX_new(); \ + BN_CTX_init(ctx); \ + if (BN_##func(result, bn1, bn2, bn3, ctx) != 1) { \ BN_free(result); \ OSSL_Raise(eBNError, ""); \ } \ @@ -592,7 +597,7 @@ ossl_bn_is_prime(int argc, VALUE *argv, VALUE self) { BIGNUM *bn = NULL; - BN_CTX ctx; + BN_CTX *ctx; VALUE vchecks; int checks = BN_prime_checks; @@ -603,8 +608,9 @@ if (!NIL_P(vchecks)) checks = NUM2INT(vchecks); - BN_CTX_init(&ctx); - switch (BN_is_prime(bn, checks, NULL, &ctx, NULL)) { + ctx = BN_CTX_new(); + BN_CTX_init(ctx); + switch (BN_is_prime(bn, checks, NULL, ctx, NULL)) { case 1: return Qtrue; case 0: @@ -621,7 +627,7 @@ ossl_bn_is_prime_fasttest(int argc, VALUE *argv, VALUE self) { BIGNUM *bn = NULL; - BN_CTX ctx; + BN_CTX *ctx; VALUE vchecks, vtrivdiv; int checks = BN_prime_checks, do_trial_division = 1; @@ -636,8 +642,9 @@ if (vtrivdiv == Qfalse) do_trial_division = 0; - BN_CTX_init(&ctx); - switch (BN_is_prime_fasttest(bn, checks, NULL, &ctx, NULL, do_trial_division)) { + ctx = BN_CTX_new(); + BN_CTX_init(ctx); + switch (BN_is_prime_fasttest(bn, checks, NULL, ctx, NULL, do_trial_division)) { case 1: return Qtrue; case 0: diff -ruN ossl.orig/ossl_cipher.c ossl/ossl_cipher.c --- ossl.orig/ossl_cipher.c 2002-04-08 01:34:43.000000000 +0900 +++ ossl/ossl_cipher.c 2003-07-15 12:21:20.000000000 +0900 @@ -264,12 +264,14 @@ case ECB: nid = NID_des_ecb; break; +#if 0 case EDE: nid = NID_des_ede; break; case EDE3: nid = NID_des_ede3; break; +#endif case CFB: nid = NID_des_cfb64; break; @@ -541,46 +543,46 @@ switch (spec) { case BIT128+ECB: - nid = NID_aes128_ecb; + nid = NID_aes_128_ecb; break; /* case BIT128+CFB: - nid = NID_aes128_cfb; + nid = NID_aes_128_cfb; break; case BIT128+OFB: - nid = NID_aes128_ofb; + nid = NID_aes_128_ofb; break; */ case BIT128+CBC: - nid = NID_aes128_cbc; + nid = NID_aes_128_cbc; break; case BIT192+ECB: - nid = NID_aes192_ecb; + nid = NID_aes_192_ecb; break; /* case BIT192+CFB: - nid = NID_aes192_cfb; + nid = NID_aes_192_cfb; break; case BIT192+OFB: - nid = NID_aes192_ofb; + nid = NID_aes_192_ofb; break; */ case BIT192+CBC: - nid = NID_aes192_cbc; + nid = NID_aes_192_cbc; break; case BIT256+ECB: - nid = NID_aes256_ecb; + nid = NID_aes_256_ecb; break; /* case BIT256+CFB: - nid = NID_aes256_cfb; + nid = NID_aes_256_cfb; break; case BIT256+OFB: - nid = NID_aes256_ofb; + nid = NID_aes_256_ofb; break; */ case BIT256+CBC: - nid = NID_aes256_cbc; + nid = NID_aes_256_cbc; break; default: rb_raise(rb_eTypeError, "unsupported combination of modes");