rubysl-openssl 2.4.0 → 2.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/ext/rubysl/openssl/deprecation.rb +1 -0
- data/ext/rubysl/openssl/extconf.rb +6 -8
- data/ext/rubysl/openssl/openssl_missing.c +1 -3
- data/ext/rubysl/openssl/openssl_missing.h +1 -3
- data/ext/rubysl/openssl/ossl.c +15 -3
- data/ext/rubysl/openssl/ossl.h +5 -4
- data/ext/rubysl/openssl/ossl_asn1.c +19 -13
- data/ext/rubysl/openssl/ossl_asn1.h +1 -2
- data/ext/rubysl/openssl/ossl_bio.c +1 -2
- data/ext/rubysl/openssl/ossl_bio.h +1 -3
- data/ext/rubysl/openssl/ossl_bn.c +227 -90
- data/ext/rubysl/openssl/ossl_bn.h +1 -3
- data/ext/rubysl/openssl/ossl_cipher.c +5 -11
- data/ext/rubysl/openssl/ossl_cipher.h +1 -3
- data/ext/rubysl/openssl/ossl_config.c +1 -2
- data/ext/rubysl/openssl/ossl_config.h +1 -3
- data/ext/rubysl/openssl/ossl_digest.c +6 -7
- data/ext/rubysl/openssl/ossl_digest.h +1 -3
- data/ext/rubysl/openssl/ossl_engine.c +11 -7
- data/ext/rubysl/openssl/ossl_engine.h +1 -2
- data/ext/rubysl/openssl/ossl_hmac.c +1 -2
- data/ext/rubysl/openssl/ossl_hmac.h +1 -2
- data/ext/rubysl/openssl/ossl_ns_spki.c +7 -6
- data/ext/rubysl/openssl/ossl_ns_spki.h +1 -3
- data/ext/rubysl/openssl/ossl_ocsp.c +39 -25
- data/ext/rubysl/openssl/ossl_ocsp.h +1 -2
- data/ext/rubysl/openssl/ossl_pkcs12.c +10 -6
- data/ext/rubysl/openssl/ossl_pkcs12.h +1 -3
- data/ext/rubysl/openssl/ossl_pkcs5.c +0 -1
- data/ext/rubysl/openssl/ossl_pkcs7.c +29 -16
- data/ext/rubysl/openssl/ossl_pkcs7.h +1 -3
- data/ext/rubysl/openssl/ossl_pkey.c +10 -8
- data/ext/rubysl/openssl/ossl_pkey.h +5 -6
- data/ext/rubysl/openssl/ossl_pkey_dh.c +5 -74
- data/ext/rubysl/openssl/ossl_pkey_dsa.c +7 -6
- data/ext/rubysl/openssl/ossl_pkey_ec.c +4 -2
- data/ext/rubysl/openssl/ossl_pkey_rsa.c +5 -5
- data/ext/rubysl/openssl/ossl_rand.c +13 -5
- data/ext/rubysl/openssl/ossl_rand.h +1 -3
- data/ext/rubysl/openssl/ossl_ssl.c +334 -265
- data/ext/rubysl/openssl/ossl_ssl.h +1 -5
- data/ext/rubysl/openssl/ossl_ssl_session.c +5 -1
- data/ext/rubysl/openssl/ossl_version.h +1 -2
- data/ext/rubysl/openssl/ossl_x509.c +1 -3
- data/ext/rubysl/openssl/ossl_x509.h +1 -2
- data/ext/rubysl/openssl/ossl_x509attr.c +9 -6
- data/ext/rubysl/openssl/ossl_x509cert.c +14 -12
- data/ext/rubysl/openssl/ossl_x509crl.c +15 -13
- data/ext/rubysl/openssl/ossl_x509ext.c +13 -8
- data/ext/rubysl/openssl/ossl_x509name.c +9 -6
- data/ext/rubysl/openssl/ossl_x509req.c +12 -10
- data/ext/rubysl/openssl/ossl_x509revoked.c +12 -10
- data/ext/rubysl/openssl/ossl_x509store.c +17 -10
- data/ext/rubysl/openssl/ruby_missing.h +1 -2
- data/lib/openssl/bn.rb +2 -8
- data/lib/openssl/buffering.rb +3 -7
- data/lib/openssl/cipher.rb +3 -9
- data/lib/openssl/config.rb +2 -1
- data/lib/openssl/digest.rb +3 -10
- data/lib/openssl/pkey.rb +37 -0
- data/lib/openssl/ssl.rb +128 -17
- data/lib/openssl/x509.rb +2 -8
- data/lib/rubysl/openssl.rb +4 -7
- data/lib/rubysl/openssl/version.rb +1 -1
- metadata +12 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b5891637a7b61280d9cf53442718d278f44de04e
|
4
|
+
data.tar.gz: f0144074795d3268b386c773e00a4495cde6759f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ba962b6d3311055b901193dd303e79912bf7097bba7e49ce0dd0e2623c8ddcf1bc699d35d139bfcabc8b2bdae6f26328a1a4f0617cdac54a478abae6ff3a9510
|
7
|
+
data.tar.gz: 132cc0ae45c8e2d3cf13a22f9a77373db4fb2c6dd477b2d65652baf495bb553239ce7f566f001b8d9841433be6d8ab6ef9df33a8b8d73d03b8b6195335221d24
|
@@ -1,18 +1,14 @@
|
|
1
1
|
# -*- coding: us-ascii -*-
|
2
|
+
# frozen_string_literal: false
|
2
3
|
=begin
|
3
|
-
= $RCSfile$ -- Generator for Makefile
|
4
|
-
|
5
4
|
= Info
|
6
5
|
'OpenSSL for Ruby 2' project
|
7
6
|
Copyright (C) 2002 Michal Rokos <m.rokos@sh.cvut.cz>
|
8
7
|
All rights reserved.
|
9
8
|
|
10
9
|
= Licence
|
11
|
-
This program is
|
10
|
+
This program is licensed under the same licence as Ruby.
|
12
11
|
(See the file 'LICENCE'.)
|
13
|
-
|
14
|
-
= Version
|
15
|
-
$Id$
|
16
12
|
=end
|
17
13
|
|
18
14
|
require "mkmf"
|
@@ -59,7 +55,7 @@ unless have_header("openssl/conf_api.h")
|
|
59
55
|
raise "OpenSSL 0.9.6 or later required."
|
60
56
|
end
|
61
57
|
unless OpenSSL.check_func("SSL_library_init()", "openssl/ssl.h")
|
62
|
-
|
58
|
+
raise "Ignore OpenSSL broken by Apple.\nPlease use another openssl. (e.g. using `configure --with-openssl-dir=/path/to/openssl')"
|
63
59
|
end
|
64
60
|
|
65
61
|
Logging::message "=== Checking for OpenSSL features... ===\n"
|
@@ -87,6 +83,7 @@ have_func("HMAC_CTX_init")
|
|
87
83
|
have_func("PEM_def_callback")
|
88
84
|
have_func("PKCS5_PBKDF2_HMAC")
|
89
85
|
have_func("PKCS5_PBKDF2_HMAC_SHA1")
|
86
|
+
have_func("RAND_egd")
|
90
87
|
have_func("X509V3_set_nconf")
|
91
88
|
have_func("X509V3_EXT_nconf_nid")
|
92
89
|
have_func("X509_CRL_add0_revoked")
|
@@ -112,6 +109,7 @@ have_func("TLSv1_1_client_method")
|
|
112
109
|
have_func("TLSv1_2_method")
|
113
110
|
have_func("TLSv1_2_server_method")
|
114
111
|
have_func("TLSv1_2_client_method")
|
112
|
+
have_func("SSL_CTX_set_alpn_select_cb")
|
115
113
|
have_macro("OPENSSL_NPN_NEGOTIATED", ['openssl/ssl.h']) && $defs.push("-DHAVE_OPENSSL_NPN_NEGOTIATED")
|
116
114
|
unless have_func("SSL_set_tlsext_host_name", ['openssl/ssl.h'])
|
117
115
|
have_macro("SSL_set_tlsext_host_name", ['openssl/ssl.h']) && $defs.push("-DHAVE_SSL_SET_TLSEXT_HOST_NAME")
|
@@ -157,7 +155,7 @@ have_macro("EVP_CTRL_GCM_GET_TAG", ['openssl/evp.h']) && $defs.push("-DHAVE_AUTH
|
|
157
155
|
Logging::message "=== Checking done. ===\n"
|
158
156
|
|
159
157
|
create_header
|
160
|
-
create_makefile("openssl
|
158
|
+
create_makefile("openssl") {|conf|
|
161
159
|
conf << "THREAD_MODEL = #{CONFIG["THREAD_MODEL"]}\n"
|
162
160
|
}
|
163
161
|
Logging::message "Done.\n"
|
@@ -1,11 +1,10 @@
|
|
1
1
|
/*
|
2
|
-
* $Id: openssl_missing.c 40625 2013-05-09 12:12:17Z akr $
|
3
2
|
* 'OpenSSL for Ruby' project
|
4
3
|
* Copyright (C) 2001-2002 Michal Rokos <m.rokos@sh.cvut.cz>
|
5
4
|
* All rights reserved.
|
6
5
|
*/
|
7
6
|
/*
|
8
|
-
* This program is
|
7
|
+
* This program is licensed under the same licence as Ruby.
|
9
8
|
* (See the file 'LICENCE'.)
|
10
9
|
*/
|
11
10
|
#include RUBY_EXTCONF_H
|
@@ -353,4 +352,3 @@ ASN1_put_eoc(unsigned char **pp)
|
|
353
352
|
return 2;
|
354
353
|
}
|
355
354
|
#endif
|
356
|
-
|
@@ -1,11 +1,10 @@
|
|
1
1
|
/*
|
2
|
-
* $Id: openssl_missing.h 32230 2011-06-26 01:32:03Z emboss $
|
3
2
|
* 'OpenSSL for Ruby' project
|
4
3
|
* Copyright (C) 2001-2002 Michal Rokos <m.rokos@sh.cvut.cz>
|
5
4
|
* All rights reserved.
|
6
5
|
*/
|
7
6
|
/*
|
8
|
-
* This program is
|
7
|
+
* This program is licensed under the same licence as Ruby.
|
9
8
|
* (See the file 'LICENCE'.)
|
10
9
|
*/
|
11
10
|
#if !defined(_OSSL_OPENSSL_MISSING_H_)
|
@@ -195,4 +194,3 @@ int ASN1_put_eoc(unsigned char **pp);
|
|
195
194
|
|
196
195
|
|
197
196
|
#endif /* _OSSL_OPENSSL_MISSING_H_ */
|
198
|
-
|
data/ext/rubysl/openssl/ossl.c
CHANGED
@@ -1,11 +1,10 @@
|
|
1
1
|
/*
|
2
|
-
* $Id: ossl.c 47744 2014-09-30 05:25:32Z nobu $
|
3
2
|
* 'OpenSSL for Ruby' project
|
4
3
|
* Copyright (C) 2001-2002 Michal Rokos <m.rokos@sh.cvut.cz>
|
5
4
|
* All rights reserved.
|
6
5
|
*/
|
7
6
|
/*
|
8
|
-
* This program is
|
7
|
+
* This program is licensed under the same licence as Ruby.
|
9
8
|
* (See the file 'LICENCE'.)
|
10
9
|
*/
|
11
10
|
#include "ossl.h"
|
@@ -556,6 +555,20 @@ static void Init_ossl_locks(void)
|
|
556
555
|
* OpenSSL provides SSL, TLS and general purpose cryptography. It wraps the
|
557
556
|
* OpenSSL[http://www.openssl.org/] library.
|
558
557
|
*
|
558
|
+
* = Install
|
559
|
+
*
|
560
|
+
* OpenSSL comes bundled with the Standard Library of Ruby.
|
561
|
+
*
|
562
|
+
* This means the OpenSSL extension is compiled with Ruby and packaged on
|
563
|
+
* build. During compile time, Ruby will need to link against the OpenSSL
|
564
|
+
* library on your system. However, you cannot use openssl provided by Apple to
|
565
|
+
* build standard library openssl.
|
566
|
+
*
|
567
|
+
* If you use OSX, you should install another openssl and run ```./configure
|
568
|
+
* --with-openssl-dir=/path/to/another-openssl```. For Homebrew user, run `brew
|
569
|
+
* install openssl` and then ```./configure --with-openssl-dir=`brew --prefix
|
570
|
+
* openssl` ```.
|
571
|
+
*
|
559
572
|
* = Examples
|
560
573
|
*
|
561
574
|
* All examples assume you have loaded OpenSSL with:
|
@@ -1165,4 +1178,3 @@ main(int argc, char *argv[])
|
|
1165
1178
|
return 0;
|
1166
1179
|
}
|
1167
1180
|
#endif /* OSSL_DEBUG */
|
1168
|
-
|
data/ext/rubysl/openssl/ossl.h
CHANGED
@@ -1,11 +1,10 @@
|
|
1
1
|
/*
|
2
|
-
* $Id: ossl.h 44582 2014-01-13 00:57:42Z nobu $
|
3
2
|
* 'OpenSSL for Ruby' project
|
4
3
|
* Copyright (C) 2001-2002 Michal Rokos <m.rokos@sh.cvut.cz>
|
5
4
|
* All rights reserved.
|
6
5
|
*/
|
7
6
|
/*
|
8
|
-
* This program is
|
7
|
+
* This program is licensed under the same licence as Ruby.
|
9
8
|
* (See the file 'LICENCE'.)
|
10
9
|
*/
|
11
10
|
#if !defined(_OSSL_H_)
|
@@ -45,7 +44,7 @@ extern "C" {
|
|
45
44
|
# define assert(condition)
|
46
45
|
#endif
|
47
46
|
|
48
|
-
#if defined(_WIN32)
|
47
|
+
#if defined(_WIN32) && !defined(LIBRESSL_VERSION_NUMBER)
|
49
48
|
# include <openssl/e_os2.h>
|
50
49
|
# define OSSL_NO_CONF_API 1
|
51
50
|
# if !defined(OPENSSL_SYS_WIN32)
|
@@ -64,6 +63,9 @@ extern "C" {
|
|
64
63
|
#include <openssl/rand.h>
|
65
64
|
#include <openssl/conf.h>
|
66
65
|
#include <openssl/conf_api.h>
|
66
|
+
#if !defined(_WIN32)
|
67
|
+
# include <openssl/crypto.h>
|
68
|
+
#endif
|
67
69
|
#undef X509_NAME
|
68
70
|
#undef PKCS7_SIGNER_INFO
|
69
71
|
#if defined(HAVE_OPENSSL_ENGINE_H) && defined(HAVE_EVP_CIPHER_CTX_ENGINE)
|
@@ -244,4 +246,3 @@ void Init_openssl(void);
|
|
244
246
|
#endif
|
245
247
|
|
246
248
|
#endif /* _OSSL_H_ */
|
247
|
-
|
@@ -1,11 +1,10 @@
|
|
1
1
|
/*
|
2
|
-
* $Id: ossl_asn1.c 47744 2014-09-30 05:25:32Z nobu $
|
3
2
|
* 'OpenSSL for Ruby' team members
|
4
3
|
* Copyright (C) 2003
|
5
4
|
* All rights reserved.
|
6
5
|
*/
|
7
6
|
/*
|
8
|
-
* This program is
|
7
|
+
* This program is licensed under the same licence as Ruby.
|
9
8
|
* (See the file 'LICENCE'.)
|
10
9
|
*/
|
11
10
|
#include "ossl.h"
|
@@ -1029,7 +1028,7 @@ static VALUE
|
|
1029
1028
|
ossl_asn1_traverse(VALUE self, VALUE obj)
|
1030
1029
|
{
|
1031
1030
|
unsigned char *p;
|
1032
|
-
|
1031
|
+
VALUE tmp;
|
1033
1032
|
long len, read = 0, offset = 0;
|
1034
1033
|
|
1035
1034
|
obj = ossl_to_der_if_possible(obj);
|
@@ -1037,6 +1036,7 @@ ossl_asn1_traverse(VALUE self, VALUE obj)
|
|
1037
1036
|
p = (unsigned char *)RSTRING_PTR(tmp);
|
1038
1037
|
len = RSTRING_LEN(tmp);
|
1039
1038
|
ossl_asn1_decode0(&p, len, &offset, 0, 1, &read);
|
1039
|
+
RB_GC_GUARD(tmp);
|
1040
1040
|
int_ossl_decode_sanity_check(len, read, offset);
|
1041
1041
|
return Qnil;
|
1042
1042
|
}
|
@@ -1058,7 +1058,7 @@ ossl_asn1_decode(VALUE self, VALUE obj)
|
|
1058
1058
|
{
|
1059
1059
|
VALUE ret;
|
1060
1060
|
unsigned char *p;
|
1061
|
-
|
1061
|
+
VALUE tmp;
|
1062
1062
|
long len, read = 0, offset = 0;
|
1063
1063
|
|
1064
1064
|
obj = ossl_to_der_if_possible(obj);
|
@@ -1066,6 +1066,7 @@ ossl_asn1_decode(VALUE self, VALUE obj)
|
|
1066
1066
|
p = (unsigned char *)RSTRING_PTR(tmp);
|
1067
1067
|
len = RSTRING_LEN(tmp);
|
1068
1068
|
ret = ossl_asn1_decode0(&p, len, &offset, 0, 0, &read);
|
1069
|
+
RB_GC_GUARD(tmp);
|
1069
1070
|
int_ossl_decode_sanity_check(len, read, offset);
|
1070
1071
|
return ret;
|
1071
1072
|
}
|
@@ -1089,7 +1090,7 @@ ossl_asn1_decode_all(VALUE self, VALUE obj)
|
|
1089
1090
|
VALUE ary, val;
|
1090
1091
|
unsigned char *p;
|
1091
1092
|
long len, tmp_len = 0, read = 0, offset = 0;
|
1092
|
-
|
1093
|
+
VALUE tmp;
|
1093
1094
|
|
1094
1095
|
obj = ossl_to_der_if_possible(obj);
|
1095
1096
|
tmp = rb_str_new4(StringValue(obj));
|
@@ -1104,6 +1105,7 @@ ossl_asn1_decode_all(VALUE self, VALUE obj)
|
|
1104
1105
|
read += tmp_read;
|
1105
1106
|
tmp_len -= tmp_read;
|
1106
1107
|
}
|
1108
|
+
RB_GC_GUARD(tmp);
|
1107
1109
|
int_ossl_decode_sanity_check(len, read, offset);
|
1108
1110
|
return ary;
|
1109
1111
|
}
|
@@ -1360,13 +1362,13 @@ ossl_asn1cons_each(VALUE self)
|
|
1360
1362
|
|
1361
1363
|
/*
|
1362
1364
|
* call-seq:
|
1363
|
-
* ObjectId.register(object_id, short_name, long_name)
|
1365
|
+
* OpenSSL::ASN1::ObjectId.register(object_id, short_name, long_name)
|
1364
1366
|
*
|
1365
1367
|
* This adds a new ObjectId to the internal tables. Where +object_id+ is the
|
1366
1368
|
* numerical form, +short_name+ is the short name, and +long_name+ is the long
|
1367
1369
|
* name.
|
1368
1370
|
*
|
1369
|
-
* Returns +true+ if successful. Raises an ASN1Error
|
1371
|
+
* Returns +true+ if successful. Raises an OpenSSL::ASN1::ASN1Error if it fails.
|
1370
1372
|
*
|
1371
1373
|
*/
|
1372
1374
|
static VALUE
|
@@ -1384,11 +1386,11 @@ ossl_asn1obj_s_register(VALUE self, VALUE oid, VALUE sn, VALUE ln)
|
|
1384
1386
|
|
1385
1387
|
/* Document-method: OpenSSL::ASN1::ObjectId#sn
|
1386
1388
|
*
|
1387
|
-
* The short name of the ObjectId, as defined in
|
1389
|
+
* The short name of the ObjectId, as defined in <openssl/objects.h>.
|
1388
1390
|
*/
|
1389
1391
|
/* Document-method: OpenSSL::ASN1::ObjectId#short_name
|
1390
1392
|
*
|
1391
|
-
*
|
1393
|
+
* +short_name+ is an alias to +sn+
|
1392
1394
|
*/
|
1393
1395
|
static VALUE
|
1394
1396
|
ossl_asn1obj_get_sn(VALUE self)
|
@@ -1405,11 +1407,11 @@ ossl_asn1obj_get_sn(VALUE self)
|
|
1405
1407
|
|
1406
1408
|
/* Document-method: OpenSSL::ASN1::ObjectId#ln
|
1407
1409
|
*
|
1408
|
-
* The long name of the ObjectId, as defined in
|
1410
|
+
* The long name of the ObjectId, as defined in <openssl/objects.h>.
|
1409
1411
|
*/
|
1410
|
-
/* Document-method: OpenSSL::ASN1::ObjectId
|
1412
|
+
/* Document-method: OpenSSL::ASN1::ObjectId#long_name
|
1411
1413
|
*
|
1412
|
-
*
|
1414
|
+
* +long_name+ is an alias to +ln+
|
1413
1415
|
*/
|
1414
1416
|
static VALUE
|
1415
1417
|
ossl_asn1obj_get_ln(VALUE self)
|
@@ -1426,7 +1428,7 @@ ossl_asn1obj_get_ln(VALUE self)
|
|
1426
1428
|
|
1427
1429
|
/* Document-method: OpenSSL::ASN1::ObjectId#oid
|
1428
1430
|
*
|
1429
|
-
* The object identifier as a String.
|
1431
|
+
* The object identifier as a +String+, e.g. "1.2.3.4.5"
|
1430
1432
|
*/
|
1431
1433
|
static VALUE
|
1432
1434
|
ossl_asn1obj_get_oid(VALUE self)
|
@@ -1809,6 +1811,10 @@ Init_ossl_asn1(void)
|
|
1809
1811
|
*
|
1810
1812
|
* == OpenSSL::ASN1::ObjectId
|
1811
1813
|
*
|
1814
|
+
* NOTE: While OpenSSL::ASN1::ObjectId.new will allocate a new ObjectId,
|
1815
|
+
* it is not typically allocated this way, but rather that are received from
|
1816
|
+
* parsed ASN1 encodings.
|
1817
|
+
*
|
1812
1818
|
* While OpenSSL::ASN1::ObjectId.new will allocate a new ObjectId, it is
|
1813
1819
|
* not typically allocated this way, but rather that are received from
|
1814
1820
|
* parsed ASN1 encodings.
|
@@ -1,11 +1,10 @@
|
|
1
1
|
/*
|
2
|
-
* $Id: ossl_asn1.h 27437 2010-04-22 08:04:13Z nobu $
|
3
2
|
* 'OpenSSL for Ruby' team members
|
4
3
|
* Copyright (C) 2003
|
5
4
|
* All rights reserved.
|
6
5
|
*/
|
7
6
|
/*
|
8
|
-
* This program is
|
7
|
+
* This program is licensed under the same licence as Ruby.
|
9
8
|
* (See the file 'LICENCE'.)
|
10
9
|
*/
|
11
10
|
#if !defined(_OSSL_ASN1_H_)
|
@@ -1,11 +1,10 @@
|
|
1
1
|
/*
|
2
|
-
* $Id: ossl_bio.c 47042 2014-08-03 01:56:01Z nobu $
|
3
2
|
* 'OpenSSL for Ruby' team members
|
4
3
|
* Copyright (C) 2003
|
5
4
|
* All rights reserved.
|
6
5
|
*/
|
7
6
|
/*
|
8
|
-
* This program is
|
7
|
+
* This program is licensed under the same licence as Ruby.
|
9
8
|
* (See the file 'LICENCE'.)
|
10
9
|
*/
|
11
10
|
#include "ossl.h"
|
@@ -1,11 +1,10 @@
|
|
1
1
|
/*
|
2
|
-
* $Id: ossl_bio.h 25189 2009-10-02 12:04:37Z akr $
|
3
2
|
* 'OpenSSL for Ruby' team members
|
4
3
|
* Copyright (C) 2003
|
5
4
|
* All rights reserved.
|
6
5
|
*/
|
7
6
|
/*
|
8
|
-
* This program is
|
7
|
+
* This program is licensed under the same licence as Ruby.
|
9
8
|
* (See the file 'LICENCE'.)
|
10
9
|
*/
|
11
10
|
#if !defined(_OSSL_BIO_H_)
|
@@ -18,4 +17,3 @@ VALUE ossl_membio2str(BIO*);
|
|
18
17
|
VALUE ossl_protect_membio2str(BIO*,int*);
|
19
18
|
|
20
19
|
#endif
|
21
|
-
|
@@ -1,21 +1,22 @@
|
|
1
1
|
/*
|
2
|
-
* $Id: ossl_bn.c 48662 2014-12-01 06:38:04Z nobu $
|
3
2
|
* 'OpenSSL for Ruby' project
|
4
3
|
* Copyright (C) 2001-2002 Technorama team <oss-ruby@technorama.net>
|
5
4
|
* All rights reserved.
|
6
5
|
*/
|
7
6
|
/*
|
8
|
-
* This program is
|
7
|
+
* This program is licensed under the same licence as Ruby.
|
9
8
|
* (See the file 'LICENCE'.)
|
10
9
|
*/
|
11
10
|
/* modified by Michal Rokos <m.rokos@sh.cvut.cz> */
|
12
11
|
#include "ossl.h"
|
13
12
|
|
14
|
-
#define
|
13
|
+
#define NewBN(klass) \
|
14
|
+
TypedData_Wrap_Struct((klass), &ossl_bn_type, 0)
|
15
|
+
#define SetBN(obj, bn) do { \
|
15
16
|
if (!(bn)) { \
|
16
17
|
ossl_raise(rb_eRuntimeError, "BN wasn't initialized!"); \
|
17
18
|
} \
|
18
|
-
(obj) =
|
19
|
+
RTYPEDDATA_DATA(obj) = (bn); \
|
19
20
|
} while (0)
|
20
21
|
|
21
22
|
#define GetBN(obj, bn) do { \
|
@@ -53,6 +54,13 @@ static const rb_data_type_t ossl_bn_type = {
|
|
53
54
|
* Classes
|
54
55
|
*/
|
55
56
|
VALUE cBN;
|
57
|
+
|
58
|
+
/* Document-class: OpenSSL::BNError
|
59
|
+
*
|
60
|
+
* BNError < OpenSSLError
|
61
|
+
*
|
62
|
+
* Generic Error for all of OpenSSL::BN (big num)
|
63
|
+
*/
|
56
64
|
VALUE eBNError;
|
57
65
|
|
58
66
|
/*
|
@@ -64,11 +72,12 @@ ossl_bn_new(const BIGNUM *bn)
|
|
64
72
|
BIGNUM *newbn;
|
65
73
|
VALUE obj;
|
66
74
|
|
75
|
+
obj = NewBN(cBN);
|
67
76
|
newbn = bn ? BN_dup(bn) : BN_new();
|
68
77
|
if (!newbn) {
|
69
78
|
ossl_raise(eBNError, NULL);
|
70
79
|
}
|
71
|
-
|
80
|
+
SetBN(obj, newbn);
|
72
81
|
|
73
82
|
return obj;
|
74
83
|
}
|
@@ -77,6 +86,7 @@ BIGNUM *
|
|
77
86
|
GetBNPtr(VALUE obj)
|
78
87
|
{
|
79
88
|
BIGNUM *bn = NULL;
|
89
|
+
VALUE newobj;
|
80
90
|
|
81
91
|
if (RTEST(rb_obj_is_kind_of(obj, cBN))) {
|
82
92
|
GetBN(obj, bn);
|
@@ -84,10 +94,11 @@ GetBNPtr(VALUE obj)
|
|
84
94
|
case T_FIXNUM:
|
85
95
|
case T_BIGNUM:
|
86
96
|
obj = rb_String(obj);
|
97
|
+
newobj = NewBN(cBN); /* GC bug */
|
87
98
|
if (!BN_dec2bn(&bn, StringValuePtr(obj))) {
|
88
99
|
ossl_raise(eBNError, NULL);
|
89
100
|
}
|
90
|
-
|
101
|
+
SetBN(newobj, bn); /* Handle potencial mem leaks */
|
91
102
|
break;
|
92
103
|
case T_NIL:
|
93
104
|
break;
|
@@ -111,23 +122,25 @@ static VALUE
|
|
111
122
|
ossl_bn_alloc(VALUE klass)
|
112
123
|
{
|
113
124
|
BIGNUM *bn;
|
114
|
-
VALUE obj;
|
125
|
+
VALUE obj = NewBN(klass);
|
115
126
|
|
116
127
|
if (!(bn = BN_new())) {
|
117
128
|
ossl_raise(eBNError, NULL);
|
118
129
|
}
|
119
|
-
|
130
|
+
SetBN(obj, bn);
|
120
131
|
|
121
132
|
return obj;
|
122
133
|
}
|
123
134
|
|
124
|
-
/*
|
125
|
-
*
|
126
|
-
* BN.new => aBN
|
127
|
-
* BN.new(bn) => aBN
|
128
|
-
* BN.new(integer) => aBN
|
129
|
-
* BN.new(string) => aBN
|
130
|
-
* BN.new(string, 0 | 2 | 10 | 16) => aBN
|
135
|
+
/* Document-method: OpenSSL::BN.new
|
136
|
+
*
|
137
|
+
* OpenSSL::BN.new => aBN
|
138
|
+
* OpenSSL::BN.new(bn) => aBN
|
139
|
+
* OpenSSL::BN.new(integer) => aBN
|
140
|
+
* OpenSSL::BN.new(string) => aBN
|
141
|
+
* OpenSSL::BN.new(string, 0 | 2 | 10 | 16) => aBN
|
142
|
+
*
|
143
|
+
* Construct a new OpenSSL BigNum object.
|
131
144
|
*/
|
132
145
|
static VALUE
|
133
146
|
ossl_bn_initialize(int argc, VALUE *argv, VALUE self)
|
@@ -320,11 +333,6 @@ ossl_bn_coerce(VALUE self, VALUE other)
|
|
320
333
|
}
|
321
334
|
|
322
335
|
#define BIGNUM_BOOL1(func) \
|
323
|
-
/* \
|
324
|
-
* call-seq: \
|
325
|
-
* bn.##func -> true | false \
|
326
|
-
* \
|
327
|
-
*/ \
|
328
336
|
static VALUE \
|
329
337
|
ossl_bn_##func(VALUE self) \
|
330
338
|
{ \
|
@@ -335,22 +343,33 @@ ossl_bn_coerce(VALUE self, VALUE other)
|
|
335
343
|
} \
|
336
344
|
return Qfalse; \
|
337
345
|
}
|
346
|
+
|
347
|
+
/*
|
348
|
+
* Document-method: OpenSSL::BN#zero?
|
349
|
+
* bn.zero? => true | false
|
350
|
+
*/
|
338
351
|
BIGNUM_BOOL1(is_zero)
|
352
|
+
|
353
|
+
/*
|
354
|
+
* Document-method: OpenSSL::BN#one?
|
355
|
+
* bn.one? => true | false
|
356
|
+
*/
|
339
357
|
BIGNUM_BOOL1(is_one)
|
358
|
+
|
359
|
+
/*
|
360
|
+
* Document-method: OpenSSL::BN#odd?
|
361
|
+
* bn.odd? => true | false
|
362
|
+
*/
|
340
363
|
BIGNUM_BOOL1(is_odd)
|
341
364
|
|
342
365
|
#define BIGNUM_1c(func) \
|
343
|
-
/* \
|
344
|
-
* call-seq: \
|
345
|
-
* bn.##func -> aBN \
|
346
|
-
* \
|
347
|
-
*/ \
|
348
366
|
static VALUE \
|
349
367
|
ossl_bn_##func(VALUE self) \
|
350
368
|
{ \
|
351
369
|
BIGNUM *bn, *result; \
|
352
370
|
VALUE obj; \
|
353
371
|
GetBN(self, bn); \
|
372
|
+
obj = NewBN(CLASS_OF(self)); \
|
354
373
|
if (!(result = BN_new())) { \
|
355
374
|
ossl_raise(eBNError, NULL); \
|
356
375
|
} \
|
@@ -358,23 +377,24 @@ BIGNUM_BOOL1(is_odd)
|
|
358
377
|
BN_free(result); \
|
359
378
|
ossl_raise(eBNError, NULL); \
|
360
379
|
} \
|
361
|
-
|
380
|
+
SetBN(obj, result); \
|
362
381
|
return obj; \
|
363
382
|
}
|
383
|
+
|
384
|
+
/*
|
385
|
+
* Document-method: OpenSSL::BN#sqr
|
386
|
+
* bn.sqr => aBN
|
387
|
+
*/
|
364
388
|
BIGNUM_1c(sqr)
|
365
389
|
|
366
390
|
#define BIGNUM_2(func) \
|
367
|
-
/* \
|
368
|
-
* call-seq: \
|
369
|
-
* bn.##func(bn2) -> aBN \
|
370
|
-
* \
|
371
|
-
*/ \
|
372
391
|
static VALUE \
|
373
392
|
ossl_bn_##func(VALUE self, VALUE other) \
|
374
393
|
{ \
|
375
394
|
BIGNUM *bn1, *bn2 = GetBNPtr(other), *result; \
|
376
395
|
VALUE obj; \
|
377
396
|
GetBN(self, bn1); \
|
397
|
+
obj = NewBN(CLASS_OF(self)); \
|
378
398
|
if (!(result = BN_new())) { \
|
379
399
|
ossl_raise(eBNError, NULL); \
|
380
400
|
} \
|
@@ -382,24 +402,30 @@ BIGNUM_1c(sqr)
|
|
382
402
|
BN_free(result); \
|
383
403
|
ossl_raise(eBNError, NULL); \
|
384
404
|
} \
|
385
|
-
|
405
|
+
SetBN(obj, result); \
|
386
406
|
return obj; \
|
387
407
|
}
|
408
|
+
|
409
|
+
/*
|
410
|
+
* Document-method: OpenSSL::BN#+
|
411
|
+
* bn + bn2 => aBN
|
412
|
+
*/
|
388
413
|
BIGNUM_2(add)
|
414
|
+
|
415
|
+
/*
|
416
|
+
* Document-method: OpenSSL::BN#-
|
417
|
+
* bn - bn2 => aBN
|
418
|
+
*/
|
389
419
|
BIGNUM_2(sub)
|
390
420
|
|
391
421
|
#define BIGNUM_2c(func) \
|
392
|
-
/* \
|
393
|
-
* call-seq: \
|
394
|
-
* bn.##func(bn2) -> aBN \
|
395
|
-
* \
|
396
|
-
*/ \
|
397
422
|
static VALUE \
|
398
423
|
ossl_bn_##func(VALUE self, VALUE other) \
|
399
424
|
{ \
|
400
425
|
BIGNUM *bn1, *bn2 = GetBNPtr(other), *result; \
|
401
426
|
VALUE obj; \
|
402
427
|
GetBN(self, bn1); \
|
428
|
+
obj = NewBN(CLASS_OF(self)); \
|
403
429
|
if (!(result = BN_new())) { \
|
404
430
|
ossl_raise(eBNError, NULL); \
|
405
431
|
} \
|
@@ -407,19 +433,51 @@ BIGNUM_2(sub)
|
|
407
433
|
BN_free(result); \
|
408
434
|
ossl_raise(eBNError, NULL); \
|
409
435
|
} \
|
410
|
-
|
436
|
+
SetBN(obj, result); \
|
411
437
|
return obj; \
|
412
438
|
}
|
439
|
+
|
440
|
+
/*
|
441
|
+
* Document-method: OpenSSL::BN#*
|
442
|
+
* bn * bn2 => aBN
|
443
|
+
*/
|
413
444
|
BIGNUM_2c(mul)
|
445
|
+
|
446
|
+
/*
|
447
|
+
* Document-method: OpenSSL::BN#%
|
448
|
+
* bn % bn2 => aBN
|
449
|
+
*/
|
414
450
|
BIGNUM_2c(mod)
|
451
|
+
|
452
|
+
/*
|
453
|
+
* Document-method: OpenSSL::BN#**
|
454
|
+
* bn ** bn2 => aBN
|
455
|
+
*/
|
415
456
|
BIGNUM_2c(exp)
|
457
|
+
|
458
|
+
/*
|
459
|
+
* Document-method: OpenSSL::BN#gcd
|
460
|
+
* bn.gcd(bn2) => aBN
|
461
|
+
*/
|
416
462
|
BIGNUM_2c(gcd)
|
463
|
+
|
464
|
+
/*
|
465
|
+
* Document-method: OpenSSL::BN#mod_sqr
|
466
|
+
* bn.mod_sqr(bn2) => aBN
|
467
|
+
*/
|
417
468
|
BIGNUM_2c(mod_sqr)
|
469
|
+
|
470
|
+
/*
|
471
|
+
* Document-method: OpenSSL::BN#mod_inverse
|
472
|
+
* bn.mod_inverse(bn2) => aBN
|
473
|
+
*/
|
418
474
|
BIGNUM_2c(mod_inverse)
|
419
475
|
|
420
476
|
/*
|
421
|
-
*
|
477
|
+
* Document-method: OpenSSL::BN#/
|
422
478
|
* bn1 / bn2 => [result, remainder]
|
479
|
+
*
|
480
|
+
* Division of OpenSSL::BN instances
|
423
481
|
*/
|
424
482
|
static VALUE
|
425
483
|
ossl_bn_div(VALUE self, VALUE other)
|
@@ -429,6 +487,8 @@ ossl_bn_div(VALUE self, VALUE other)
|
|
429
487
|
|
430
488
|
GetBN(self, bn1);
|
431
489
|
|
490
|
+
obj1 = NewBN(CLASS_OF(self));
|
491
|
+
obj2 = NewBN(CLASS_OF(self));
|
432
492
|
if (!(r1 = BN_new())) {
|
433
493
|
ossl_raise(eBNError, NULL);
|
434
494
|
}
|
@@ -441,18 +501,13 @@ ossl_bn_div(VALUE self, VALUE other)
|
|
441
501
|
BN_free(r2);
|
442
502
|
ossl_raise(eBNError, NULL);
|
443
503
|
}
|
444
|
-
|
445
|
-
|
504
|
+
SetBN(obj1, r1);
|
505
|
+
SetBN(obj2, r2);
|
446
506
|
|
447
507
|
return rb_ary_new3(2, obj1, obj2);
|
448
508
|
}
|
449
509
|
|
450
510
|
#define BIGNUM_3c(func) \
|
451
|
-
/* \
|
452
|
-
* call-seq: \
|
453
|
-
* bn.##func(bn1, bn2) -> aBN \
|
454
|
-
* \
|
455
|
-
*/ \
|
456
511
|
static VALUE \
|
457
512
|
ossl_bn_##func(VALUE self, VALUE other1, VALUE other2) \
|
458
513
|
{ \
|
@@ -460,6 +515,7 @@ ossl_bn_div(VALUE self, VALUE other)
|
|
460
515
|
BIGNUM *bn3 = GetBNPtr(other2), *result; \
|
461
516
|
VALUE obj; \
|
462
517
|
GetBN(self, bn1); \
|
518
|
+
obj = NewBN(CLASS_OF(self)); \
|
463
519
|
if (!(result = BN_new())) { \
|
464
520
|
ossl_raise(eBNError, NULL); \
|
465
521
|
} \
|
@@ -467,20 +523,35 @@ ossl_bn_div(VALUE self, VALUE other)
|
|
467
523
|
BN_free(result); \
|
468
524
|
ossl_raise(eBNError, NULL); \
|
469
525
|
} \
|
470
|
-
|
526
|
+
SetBN(obj, result); \
|
471
527
|
return obj; \
|
472
528
|
}
|
529
|
+
|
530
|
+
/*
|
531
|
+
* Document-method: OpenSSL::BN#mod_add
|
532
|
+
* bn.mod_add(bn1, bn2) -> aBN
|
533
|
+
*/
|
473
534
|
BIGNUM_3c(mod_add)
|
535
|
+
|
536
|
+
/*
|
537
|
+
* Document-method: OpenSSL::BN#mod_sub
|
538
|
+
* bn.mod_sub(bn1, bn2) -> aBN
|
539
|
+
*/
|
474
540
|
BIGNUM_3c(mod_sub)
|
541
|
+
|
542
|
+
/*
|
543
|
+
* Document-method: OpenSSL::BN#mod_mul
|
544
|
+
* bn.mod_mul(bn1, bn2) -> aBN
|
545
|
+
*/
|
475
546
|
BIGNUM_3c(mod_mul)
|
547
|
+
|
548
|
+
/*
|
549
|
+
* Document-method: OpenSSL::BN#mod_exp
|
550
|
+
* bn.mod_exp(bn1, bn2) -> aBN
|
551
|
+
*/
|
476
552
|
BIGNUM_3c(mod_exp)
|
477
553
|
|
478
554
|
#define BIGNUM_BIT(func) \
|
479
|
-
/* \
|
480
|
-
* call-seq: \
|
481
|
-
* bn.##func(bit) -> self \
|
482
|
-
* \
|
483
|
-
*/ \
|
484
555
|
static VALUE \
|
485
556
|
ossl_bn_##func(VALUE self, VALUE bit) \
|
486
557
|
{ \
|
@@ -491,13 +562,32 @@ BIGNUM_3c(mod_exp)
|
|
491
562
|
} \
|
492
563
|
return self; \
|
493
564
|
}
|
565
|
+
|
566
|
+
/*
|
567
|
+
* Document-method: OpenSSL::BN#set_bit!
|
568
|
+
* bn.set_bit!(bit) -> self
|
569
|
+
*/
|
494
570
|
BIGNUM_BIT(set_bit)
|
571
|
+
|
572
|
+
/*
|
573
|
+
* Document-method: OpenSSL::BN#clear_bit!
|
574
|
+
* bn.clear_bit!(bit) -> self
|
575
|
+
*/
|
495
576
|
BIGNUM_BIT(clear_bit)
|
496
|
-
BIGNUM_BIT(mask_bits)
|
497
577
|
|
498
578
|
/*
|
499
|
-
*
|
579
|
+
* Document-method: OpenSSL::BN#mask_bit!
|
580
|
+
* bn.mask_bit!(bit) -> self
|
581
|
+
*/
|
582
|
+
BIGNUM_BIT(mask_bits)
|
583
|
+
|
584
|
+
/* Document-method: OpenSSL::BN#bit_set?
|
585
|
+
*
|
586
|
+
* Returns boolean of whether +bit+ is set.
|
587
|
+
* Bitwise operations for openssl BIGNUMs.
|
588
|
+
*
|
500
589
|
* bn.bit_set?(bit) => true | false
|
590
|
+
*
|
501
591
|
*/
|
502
592
|
static VALUE
|
503
593
|
ossl_bn_is_bit_set(VALUE self, VALUE bit)
|
@@ -514,11 +604,6 @@ ossl_bn_is_bit_set(VALUE self, VALUE bit)
|
|
514
604
|
}
|
515
605
|
|
516
606
|
#define BIGNUM_SHIFT(func) \
|
517
|
-
/* \
|
518
|
-
* call-seq: \
|
519
|
-
* bn.##func(bits) -> aBN \
|
520
|
-
* \
|
521
|
-
*/ \
|
522
607
|
static VALUE \
|
523
608
|
ossl_bn_##func(VALUE self, VALUE bits) \
|
524
609
|
{ \
|
@@ -527,6 +612,7 @@ ossl_bn_is_bit_set(VALUE self, VALUE bit)
|
|
527
612
|
VALUE obj; \
|
528
613
|
b = NUM2INT(bits); \
|
529
614
|
GetBN(self, bn); \
|
615
|
+
obj = NewBN(CLASS_OF(self)); \
|
530
616
|
if (!(result = BN_new())) { \
|
531
617
|
ossl_raise(eBNError, NULL); \
|
532
618
|
} \
|
@@ -534,18 +620,25 @@ ossl_bn_is_bit_set(VALUE self, VALUE bit)
|
|
534
620
|
BN_free(result); \
|
535
621
|
ossl_raise(eBNError, NULL); \
|
536
622
|
} \
|
537
|
-
|
623
|
+
SetBN(obj, result); \
|
538
624
|
return obj; \
|
539
625
|
}
|
626
|
+
|
627
|
+
/*
|
628
|
+
* Document-method: OpenSSL::BN#<<
|
629
|
+
* call-seq:
|
630
|
+
* bn << bits -> aBN
|
631
|
+
*/
|
540
632
|
BIGNUM_SHIFT(lshift)
|
633
|
+
|
634
|
+
/*
|
635
|
+
* Document-method: OpenSSL::BN#>>
|
636
|
+
* call-seq:
|
637
|
+
* bn >> bits -> aBN
|
638
|
+
*/
|
541
639
|
BIGNUM_SHIFT(rshift)
|
542
640
|
|
543
641
|
#define BIGNUM_SELF_SHIFT(func) \
|
544
|
-
/* \
|
545
|
-
* call-seq: \
|
546
|
-
* bn.##func!(bits) -> self \
|
547
|
-
* \
|
548
|
-
*/ \
|
549
642
|
static VALUE \
|
550
643
|
ossl_bn_self_##func(VALUE self, VALUE bits) \
|
551
644
|
{ \
|
@@ -557,15 +650,20 @@ BIGNUM_SHIFT(rshift)
|
|
557
650
|
ossl_raise(eBNError, NULL); \
|
558
651
|
return self; \
|
559
652
|
}
|
653
|
+
|
654
|
+
/*
|
655
|
+
* Document-method: OpenSSL::BN#lshift!
|
656
|
+
* bn.lshift!(bits) -> self
|
657
|
+
*/
|
560
658
|
BIGNUM_SELF_SHIFT(lshift)
|
659
|
+
|
660
|
+
/*
|
661
|
+
* Document-method: OpenSSL::BN#rshift!
|
662
|
+
* bn.rshift!(bits) -> self
|
663
|
+
*/
|
561
664
|
BIGNUM_SELF_SHIFT(rshift)
|
562
665
|
|
563
666
|
#define BIGNUM_RAND(func) \
|
564
|
-
/* \
|
565
|
-
* call-seq: \
|
566
|
-
* BN.##func(bits [, fill [, odd]]) -> aBN \
|
567
|
-
* \
|
568
|
-
*/ \
|
569
667
|
static VALUE \
|
570
668
|
ossl_bn_s_##func(int argc, VALUE *argv, VALUE klass) \
|
571
669
|
{ \
|
@@ -581,6 +679,7 @@ BIGNUM_SELF_SHIFT(rshift)
|
|
581
679
|
top = NUM2INT(fill); \
|
582
680
|
} \
|
583
681
|
b = NUM2INT(bits); \
|
682
|
+
obj = NewBN(klass); \
|
584
683
|
if (!(result = BN_new())) { \
|
585
684
|
ossl_raise(eBNError, NULL); \
|
586
685
|
} \
|
@@ -588,23 +687,28 @@ BIGNUM_SELF_SHIFT(rshift)
|
|
588
687
|
BN_free(result); \
|
589
688
|
ossl_raise(eBNError, NULL); \
|
590
689
|
} \
|
591
|
-
|
690
|
+
SetBN(obj, result); \
|
592
691
|
return obj; \
|
593
692
|
}
|
693
|
+
|
694
|
+
/*
|
695
|
+
* Document-method: OpenSSL::BN.rand
|
696
|
+
* BN.rand(bits [, fill [, odd]]) -> aBN
|
697
|
+
*/
|
594
698
|
BIGNUM_RAND(rand)
|
699
|
+
|
700
|
+
/*
|
701
|
+
* Document-method: OpenSSL::BN.pseudo_rand
|
702
|
+
* BN.pseudo_rand(bits [, fill [, odd]]) -> aBN
|
703
|
+
*/
|
595
704
|
BIGNUM_RAND(pseudo_rand)
|
596
705
|
|
597
706
|
#define BIGNUM_RAND_RANGE(func) \
|
598
|
-
/* \
|
599
|
-
* call-seq: \
|
600
|
-
* BN.##func(range) -> aBN \
|
601
|
-
* \
|
602
|
-
*/ \
|
603
707
|
static VALUE \
|
604
708
|
ossl_bn_s_##func##_range(VALUE klass, VALUE range) \
|
605
709
|
{ \
|
606
710
|
BIGNUM *bn = GetBNPtr(range), *result; \
|
607
|
-
VALUE obj;
|
711
|
+
VALUE obj = NewBN(klass); \
|
608
712
|
if (!(result = BN_new())) { \
|
609
713
|
ossl_raise(eBNError, NULL); \
|
610
714
|
} \
|
@@ -612,10 +716,22 @@ BIGNUM_RAND(pseudo_rand)
|
|
612
716
|
BN_free(result); \
|
613
717
|
ossl_raise(eBNError, NULL); \
|
614
718
|
} \
|
615
|
-
|
719
|
+
SetBN(obj, result); \
|
616
720
|
return obj; \
|
617
721
|
}
|
722
|
+
|
723
|
+
/*
|
724
|
+
* Document-method: OpenSSL::BN.rand_range
|
725
|
+
* BN.rand_range(range) -> aBN
|
726
|
+
*
|
727
|
+
*/
|
618
728
|
BIGNUM_RAND_RANGE(rand)
|
729
|
+
|
730
|
+
/*
|
731
|
+
* Document-method: OpenSSL::BN.pseudo_rand_range
|
732
|
+
* BN.pseudo_rand_range(range) -> aBN
|
733
|
+
*
|
734
|
+
*/
|
619
735
|
BIGNUM_RAND_RANGE(pseudo_rand)
|
620
736
|
|
621
737
|
/*
|
@@ -646,6 +762,7 @@ ossl_bn_s_generate_prime(int argc, VALUE *argv, VALUE klass)
|
|
646
762
|
add = GetBNPtr(vadd);
|
647
763
|
rem = NIL_P(vrem) ? NULL : GetBNPtr(vrem);
|
648
764
|
}
|
765
|
+
obj = NewBN(klass);
|
649
766
|
if (!(result = BN_new())) {
|
650
767
|
ossl_raise(eBNError, NULL);
|
651
768
|
}
|
@@ -653,17 +770,12 @@ ossl_bn_s_generate_prime(int argc, VALUE *argv, VALUE klass)
|
|
653
770
|
BN_free(result);
|
654
771
|
ossl_raise(eBNError, NULL);
|
655
772
|
}
|
656
|
-
|
773
|
+
SetBN(obj, result);
|
657
774
|
|
658
775
|
return obj;
|
659
776
|
}
|
660
777
|
|
661
778
|
#define BIGNUM_NUM(func) \
|
662
|
-
/* \
|
663
|
-
* call-seq: \
|
664
|
-
* bn.##func -> integer \
|
665
|
-
* \
|
666
|
-
*/ \
|
667
779
|
static VALUE \
|
668
780
|
ossl_bn_##func(VALUE self) \
|
669
781
|
{ \
|
@@ -671,7 +783,17 @@ ossl_bn_s_generate_prime(int argc, VALUE *argv, VALUE klass)
|
|
671
783
|
GetBN(self, bn); \
|
672
784
|
return INT2FIX(BN_##func(bn)); \
|
673
785
|
}
|
786
|
+
|
787
|
+
/*
|
788
|
+
* Document-method: OpenSSL::BN#num_bytes
|
789
|
+
* bn.num_bytes => integer
|
790
|
+
*/
|
674
791
|
BIGNUM_NUM(num_bytes)
|
792
|
+
|
793
|
+
/*
|
794
|
+
* Document-method: OpenSSL::BN#num_bits
|
795
|
+
* bn.num_bits => integer
|
796
|
+
*/
|
675
797
|
BIGNUM_NUM(num_bits)
|
676
798
|
|
677
799
|
static VALUE
|
@@ -693,11 +815,6 @@ ossl_bn_copy(VALUE self, VALUE other)
|
|
693
815
|
}
|
694
816
|
|
695
817
|
#define BIGNUM_CMP(func) \
|
696
|
-
/* \
|
697
|
-
* call-seq: \
|
698
|
-
* bn.##func(bn2) -> integer \
|
699
|
-
* \
|
700
|
-
*/ \
|
701
818
|
static VALUE \
|
702
819
|
ossl_bn_##func(VALUE self, VALUE other) \
|
703
820
|
{ \
|
@@ -705,9 +822,30 @@ ossl_bn_copy(VALUE self, VALUE other)
|
|
705
822
|
GetBN(self, bn1); \
|
706
823
|
return INT2FIX(BN_##func(bn1, bn2)); \
|
707
824
|
}
|
825
|
+
|
826
|
+
/*
|
827
|
+
* Document-method: OpenSSL::BN#cmp
|
828
|
+
* bn.cmp(bn2) => integer
|
829
|
+
*/
|
830
|
+
/*
|
831
|
+
* Document-method: OpenSSL::BN#<=>
|
832
|
+
* bn <=> bn2 => integer
|
833
|
+
*/
|
708
834
|
BIGNUM_CMP(cmp)
|
835
|
+
|
836
|
+
/*
|
837
|
+
* Document-method: OpenSSL::BN#ucmp
|
838
|
+
* bn.ucmp(bn2) => integer
|
839
|
+
*/
|
709
840
|
BIGNUM_CMP(ucmp)
|
710
841
|
|
842
|
+
/*
|
843
|
+
* call-seq:
|
844
|
+
* big.eql?(obj) => true or false
|
845
|
+
*
|
846
|
+
* Returns <code>true</code> only if <i>obj</i> is a
|
847
|
+
* <code>Bignum</code> with the same value as <i>big</i>. Contrast this
|
848
|
+
*/
|
711
849
|
static VALUE
|
712
850
|
ossl_bn_eql(VALUE self, VALUE other)
|
713
851
|
{
|
@@ -912,4 +1050,3 @@ Init_ossl_bn(void)
|
|
912
1050
|
*/
|
913
1051
|
rb_define_method(cBN, "prime_fasttest?", ossl_bn_is_prime_fasttest, -1);
|
914
1052
|
}
|
915
|
-
|