Class: OpenSSL::BN
- Inherits:
-
Object
- Object
- OpenSSL::BN
- Includes:
- Comparable
- Defined in:
- lib/openssl/bn.rb,
ossl_bn.c
Class Method Summary collapse
- .generate_prime ⇒ Object
- .pseudo_rand ⇒ Object
- .pseudo_rand_range ⇒ Object
-
.rand ⇒ Object
zero one value_one - DON’T IMPL.
- .rand_range ⇒ Object
Instance Method Summary collapse
- #% ⇒ Object
- #* ⇒ Object
- #** ⇒ Object
-
#+ ⇒ Object
num_bits_word.
- #- ⇒ Object
- #/ ⇒ Object
- #<< ⇒ Object
- #>> ⇒ Object
- #bit_set? ⇒ Boolean
- #clear_bit! ⇒ Object
-
#cmp ⇒ Object
(also: #<=>)
add_word sub_word mul_word div_word mod_word.
- #coerce(other) ⇒ Object
- #copy ⇒ Object
- #eql? ⇒ Boolean (also: #==, #===)
- #gcd ⇒ Object
- #initialize(*args) ⇒ Object constructor
- #lshift! ⇒ Object
- #mask_bits! ⇒ Object
-
#mod_add ⇒ Object
nnmod.
- #mod_exp ⇒ Object
-
#mod_inverse ⇒ Object
TODO: But how to: from_bin, from_mpi? PACK? to_bin to_mpi.
- #mod_mul ⇒ Object
- #mod_sqr ⇒ Object
- #mod_sub ⇒ Object
- #num_bits ⇒ Object
-
#num_bytes ⇒ Object
swap (=coerce?).
-
#odd? ⇒ Boolean
is_word.
- #one? ⇒ Boolean
- #pretty_print(q) ⇒ Object
-
#prime?(*args) ⇒ Boolean
Parameters *
checks
- integer. -
#prime_fasttest?(*args) ⇒ Boolean
Parameters *
checks
- integer *trial_div
- boolean. - #rshift! ⇒ Object
- #set_bit! ⇒ Object
- #sqr ⇒ Object
- #to_bn ⇒ Object
- #to_i ⇒ Integer (also: #to_int)
-
#to_s(*args) ⇒ Object
Parameters *
base
- integer * * Valid values: * * * 0 - MPI * * * 2 - binary * * * 10 - the default * * * 16 - hex. - #ucmp ⇒ Object
- #zero? ⇒ Boolean
Constructor Details
#new ⇒ Object #new(bn) ⇒ Object #new(integer) ⇒ Object #new(string) ⇒ Object #new(string, 0|2|10|16) ⇒ Object
132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 |
# File 'ossl_bn.c', line 132
static VALUE
ossl_bn_initialize(int argc, VALUE *argv, VALUE self)
{
BIGNUM *bn;
VALUE str, bs;
int base = 10;
if (rb_scan_args(argc, argv, "11", &str, &bs) == 2) {
base = NUM2INT(bs);
}
if (RB_TYPE_P(str, T_FIXNUM)) {
long i;
unsigned char bin[sizeof(long)];
long n = FIX2LONG(str);
unsigned long un = labs(n);
for (i = sizeof(long) - 1; 0 <= i; i--) {
bin[i] = un&0xff;
un >>= 8;
}
GetBN(self, bn);
if (!BN_bin2bn(bin, sizeof(bin), bn)) {
ossl_raise(eBNError, NULL);
}
if (n < 0) BN_set_negative(bn, 1);
return self;
}
else if (RB_TYPE_P(str, T_BIGNUM)) {
size_t len = rb_absint_size(str, NULL);
unsigned char *bin;
VALUE buf;
int sign;
if (INT_MAX < len) {
rb_raise(eBNError, "bignum too long");
}
bin = (unsigned char*)ALLOCV_N(unsigned char, buf, len);
sign = rb_integer_pack(str, bin, len, 1, 0, INTEGER_PACK_BIG_ENDIAN);
GetBN(self, bn);
if (!BN_bin2bn(bin, (int)len, bn)) {
ALLOCV_END(buf);
ossl_raise(eBNError, NULL);
}
ALLOCV_END(buf);
if (sign < 0) BN_set_negative(bn, 1);
return self;
}
if (RTEST(rb_obj_is_kind_of(str, cBN))) {
BIGNUM *other;
GetBN(self, bn);
GetBN(str, other); /* Safe - we checked kind_of? above */
if (!BN_copy(bn, other)) {
ossl_raise(eBNError, NULL);
}
return self;
}
StringValue(str);
GetBN(self, bn);
switch (base) {
case 0:
if (!BN_mpi2bn((unsigned char *)RSTRING_PTR(str), RSTRING_LENINT(str), bn)) {
ossl_raise(eBNError, NULL);
}
break;
case 2:
if (!BN_bin2bn((unsigned char *)RSTRING_PTR(str), RSTRING_LENINT(str), bn)) {
ossl_raise(eBNError, NULL);
}
break;
case 10:
if (!BN_dec2bn(&bn, RSTRING_PTR(str))) {
ossl_raise(eBNError, NULL);
}
break;
case 16:
if (!BN_hex2bn(&bn, RSTRING_PTR(str))) {
ossl_raise(eBNError, NULL);
}
break;
default:
ossl_raise(rb_eArgError, "invalid radix %d", base);
}
return self;
}
|
Class Method Details
.generate_prime ⇒ Object
.pseudo_rand ⇒ Object
.pseudo_rand_range ⇒ Object
.rand ⇒ Object
zero one value_one - DON’T IMPL. set_word get_word
.rand_range ⇒ Object
Instance Method Details
#% ⇒ Object
#* ⇒ Object
#** ⇒ Object
#+ ⇒ Object
num_bits_word
#- ⇒ Object
#/ ⇒ Object
#<< ⇒ Object
#>> ⇒ Object
#bit_set? ⇒ Boolean
#clear_bit! ⇒ Object
#cmp ⇒ Object Also known as: <=>
add_word sub_word mul_word div_word mod_word
#coerce(other) ⇒ Object
303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 |
# File 'ossl_bn.c', line 303
static VALUE
ossl_bn_coerce(VALUE self, VALUE other)
{
switch(TYPE(other)) {
case T_STRING:
self = ossl_bn_to_s(0, NULL, self);
break;
case T_FIXNUM:
case T_BIGNUM:
self = ossl_bn_to_i(self);
break;
default:
if (!RTEST(rb_obj_is_kind_of(other, cBN))) {
ossl_raise(rb_eTypeError, "Don't know how to coerce");
}
}
return rb_assoc_new(other, self);
}
|
#copy ⇒ Object
#eql? ⇒ Boolean Also known as: ==, ===
#gcd ⇒ Object
#lshift! ⇒ Object
#mask_bits! ⇒ Object
#mod_add ⇒ Object
nnmod
#mod_exp ⇒ Object
#mod_inverse ⇒ Object
TODO: But how to: from_bin, from_mpi? PACK? to_bin to_mpi
#mod_mul ⇒ Object
#mod_sqr ⇒ Object
#mod_sub ⇒ Object
#num_bits ⇒ Object
#num_bytes ⇒ Object
swap (=coerce?)
#odd? ⇒ Boolean
is_word
#one? ⇒ Boolean
#pretty_print(q) ⇒ Object
25 26 27 28 29 30 |
# File 'lib/openssl/bn.rb', line 25 def pretty_print(q) q.object_group(self) { q.text ' ' q.text to_i.to_s } end |
#prime? ⇒ Boolean #prime?(checks) ⇒ Boolean
Parameters
-
checks
- integer
728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 |
# File 'ossl_bn.c', line 728
static VALUE
ossl_bn_is_prime(int argc, VALUE *argv, VALUE self)
{
BIGNUM *bn;
VALUE vchecks;
int checks = BN_prime_checks;
if (rb_scan_args(argc, argv, "01", &vchecks) == 1) {
checks = NUM2INT(vchecks);
}
GetBN(self, bn);
switch (BN_is_prime(bn, checks, NULL, ossl_bn_ctx, NULL)) {
case 1:
return Qtrue;
case 0:
return Qfalse;
default:
ossl_raise(eBNError, NULL);
}
/* not reachable */
return Qnil;
}
|
#prime_fasttest? ⇒ Boolean #prime_fasttest?(checks) ⇒ Boolean #prime_fasttest?(checks, trial_div) ⇒ Boolean
Parameters
-
checks
- integer -
trial_div
- boolean
761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 |
# File 'ossl_bn.c', line 761
static VALUE
ossl_bn_is_prime_fasttest(int argc, VALUE *argv, VALUE self)
{
BIGNUM *bn;
VALUE vchecks, vtrivdiv;
int checks = BN_prime_checks, do_trial_division = 1;
rb_scan_args(argc, argv, "02", &vchecks, &vtrivdiv);
if (!NIL_P(vchecks)) {
checks = NUM2INT(vchecks);
}
GetBN(self, bn);
/* handle true/false */
if (vtrivdiv == Qfalse) {
do_trial_division = 0;
}
switch (BN_is_prime_fasttest(bn, checks, NULL, ossl_bn_ctx, NULL, do_trial_division)) {
case 1:
return Qtrue;
case 0:
return Qfalse;
default:
ossl_raise(eBNError, NULL);
}
/* not reachable */
return Qnil;
}
|
#rshift! ⇒ Object
#set_bit! ⇒ Object
#sqr ⇒ Object
#to_bn ⇒ Object
297 298 299 300 301 |
# File 'ossl_bn.c', line 297
static VALUE
ossl_bn_to_bn(VALUE self)
{
return self;
}
|
#to_i ⇒ Integer Also known as: to_int
279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 |
# File 'ossl_bn.c', line 279
static VALUE
ossl_bn_to_i(VALUE self)
{
BIGNUM *bn;
char *txt;
VALUE num;
GetBN(self, bn);
if (!(txt = BN_bn2hex(bn))) {
ossl_raise(eBNError, NULL);
}
num = rb_cstr_to_inum(txt, 16, Qtrue);
OPENSSL_free(txt);
return num;
}
|
#to_s ⇒ String #to_s(base) ⇒ String
Parameters
-
base
- integer -
Valid values:
-
-
0 - MPI
-
-
2 - binary
-
-
10 - the default
-
-
16 - hex
-
235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 |
# File 'ossl_bn.c', line 235
static VALUE
ossl_bn_to_s(int argc, VALUE *argv, VALUE self)
{
BIGNUM *bn;
VALUE str, bs;
int base = 10, len;
char *buf;
if (rb_scan_args(argc, argv, "01", &bs) == 1) {
base = NUM2INT(bs);
}
GetBN(self, bn);
switch (base) {
case 0:
len = BN_bn2mpi(bn, NULL);
str = rb_str_new(0, len);
if (BN_bn2mpi(bn, (unsigned char *)RSTRING_PTR(str)) != len)
ossl_raise(eBNError, NULL);
break;
case 2:
len = BN_num_bytes(bn);
str = rb_str_new(0, len);
if (BN_bn2bin(bn, (unsigned char *)RSTRING_PTR(str)) != len)
ossl_raise(eBNError, NULL);
break;
case 10:
if (!(buf = BN_bn2dec(bn))) ossl_raise(eBNError, NULL);
str = ossl_buf2str(buf, rb_long2int(strlen(buf)));
break;
case 16:
if (!(buf = BN_bn2hex(bn))) ossl_raise(eBNError, NULL);
str = ossl_buf2str(buf, rb_long2int(strlen(buf)));
break;
default:
ossl_raise(rb_eArgError, "invalid radix %d", base);
}
return str;
}
|