Ruby 1.9.2 リファレンスマニュアル > ライブラリ一覧 > opensslライブラリ > OpenSSL::BNクラス
クラスの継承リスト: OpenSSL::BN < Comparable < Object < Kernel < BasicObject
OpenSSL内で利用される多倍長整数クラスです。
通常多倍長整数を利用するには Bignum を用いてください。
generate_prime(bits, safe=true, add=nil, rem=nil) -> OpenSSL::BN
[permalink][rdoc]ランダム(疑似乱数的)な bits ビットの素数を返します。
暗号的に意味のある素数は十分大きくないといけないので、 bits が小さすぎる場合は期待する結果を返しません。
safe が真であれば、「安全な」素数((p-1)/2が素数である素数p)を 返します。
add に整数を渡すと、 p % add == rem であるような 素数pのみを返します。rem が nil の場合は rem=1と見なします。
new(str, base=10) -> OpenSSL::BN
[permalink][rdoc]文字列を多倍長整数オブジェクト(OpenSSL::BN)を生成します。
base によって変換の基数を決めることができます。 10, 16 が利用可能です。
baseに2を指定すると文字列を big-endian の符号無し整数のバイナリ列とみなして 変換します。
また、base に 0 を指定すると、MPIのフォーマットから変換します。 (最初の4byteはbig-endianでデータ長を表わし、その後にそのデータ長のバイト 列(big-endian)で数値を表す。最上位ビットが立っていると負数)。
例:
OpenSSL::BN.new("-241") # => -241 OpenSSL::BN.new("ff00",16) # => 65280 OpenSSL::BN.new("\x81",2) # => 129 OpenSSL::BN.new("\xff\x81",2) # => 65409 OpenSSL::BN.new("\x00\x00\x00\x02\x00\x81", 0) # => 129 OpenSSL::BN.new("\x00\x00\x00\x02\x80\x81", 0) # => -129
new(bn) -> OpenSSL::BN
[permalink][rdoc]OpenSSL::BN を複製して返します。
pseudo_rand(bits, fill=0, odd=false) -> OpenSSL::BN
[permalink][rdoc]乱数を生成し、返します。
乱数系列に暗号論的な強さはないため、暗号関連でない場合や、 強さが必要でない場合に用いることができます。 鍵生成のような場合には使えません。
bits ビットの長さの正の整数を生成します。
fill が -1 なら、生成させる数の最上位ビットが 0である場合を許容します。fill が 0 なら、 生成させる数の最上位ビットは1にセットされます、 つまり必ず bits ビットの整数となります。 fill が1の場合は、上位2ビットが1にセットされます。
odd が真なら、生成される整数は奇数のみとなります。
[SEE_ALSO] OpenSSL::BN.rand, OpenSSL::BN.pseudo_rand_range
pseudo_rand_range(range) -> OpenSSL::BN
[permalink][rdoc]乱数を 0 から range-1 までの間で生成し、返します。
乱数系列に暗号論的な強さはありません。
[SEE_ALSO] OpenSSL::BN.pseudo_rand, OpenSSL::BN.rand_range
rand(bits, fill=0, odd=false) -> OpenSSL::BN
[permalink][rdoc]暗号論的に強い疑似乱数を生成し、返します。
bits ビットの長さの正の整数を生成します。
fill が -1 なら、生成させる数の最上位ビットが 0である場合を許容します。fill が 0 なら、 生成させる数の最上位ビットは1にセットされます、 つまり必ず bits ビットの整数となります。 fill が1の場合は、上位2ビットが1にセットされます。
odd が真なら、生成される整数は奇数のみとなります。
[SEE_ALSO] OpenSSL::BN.pseudo_rand, OpenSSL::BN.rand_range
rand_range(range) -> OpenSSL::BN
[permalink][rdoc]暗号論的に強い疑似乱数を 0 から range-1 までの間で生成し、返します。
[SEE_ALSO] OpenSSL::BN.rand, OpenSSL::BN.pseudo_rand_range
self % other -> OpenSSL::BN
[permalink][rdoc]自身を other で割り算した余りを返します。
self * other -> OpenSSL::BN
[permalink][rdoc]自身と other の積を返します。
self ** other -> OpenSSL::BN
[permalink][rdoc]自身の other 乗を返します。
self + other -> OpenSSL::BN
[permalink][rdoc]自身と other の和を返します。
self - other -> OpenSSL::BN
[permalink][rdoc]自身から other を引いた値を返します。
self / other -> [OpenSSL::BN, OpenSSL::BN]
[permalink][rdoc]自身を other で割った商と余りを配列で返します。
self << other -> OpenSSL::BN
[permalink][rdoc]自身を other ビット左シフトした値を返します。
self <=> other -> -1 | 0 | 1
[permalink][rdoc]cmp(other) -> -1 | 0 | 1
自身と other を比較し、otherのほうが小さければ-1、 大きければ+1、等しければ 0 を返します。
self == other -> bool
[permalink][rdoc]self === other -> bool
eql?(other) -> bool
自身と other が等しい場合に真を返します。
self >> other -> OpenSSL::BN
[permalink][rdoc]自身を other ビット右シフトした値を返します。
bit_set?(n) -> bool
[permalink][rdoc]自身の n ビット目が立っているなら真を返します。
例:
BN.new("129").bit_set?(0) # => true BN.new("129").bit_set?(1) # => false
clear_bit!(n) -> self
[permalink][rdoc]自身の n ビット目を0にします。
例:
a = BN.new("129") a.clear_bit!(0) a # => 128
coerce(other) -> Array
[permalink][rdoc]自身と other が同じクラスになるよう、自身か other を変換し [other, self] という配列にして返します。
基本的に other が整数のときに、自身を Integer のオブジェクトに 変換して [other, 変換後オブジェクト] にして返します。 それ以外の場合は例外 TypeError を発生させます。
copy(other) -> self
[permalink][rdoc]other の内容を自身にコピーします。
gcd(other) -> OpenSSL::BN
[permalink][rdoc]GCD(最大公約数)を返します。
lshift!(n) -> self
[permalink][rdoc]自身を n ビット左シフトします。
mask_bits!(n) -> self
[permalink][rdoc]自身を下位 n ビットでマスクします。
n が自身のビット数より大きい場合は例外 OpenSSL::BNError が発生します。
mod_add(other, m) -> OpenSSL::BN
[permalink][rdoc](self + other) % m を返します。
例:
BN.new("7").mod_add(BN.new("3"), BN.new("6")) # => 4
mod_exp(other, m) -> OpenSSL::BN
[permalink][rdoc](self ** other) % m を返します。
例:
BN.new("7").mod_exp(BN.new("3"), BN.new("6")) # => 1
mod_inverse(m) -> OpenSSL::BN
[permalink][rdoc]自身の mod m における逆元を返します。
(self * r) % m == 1 となる r を返します。 存在しない場合は例外 OpenSSL::BNError が発生します。
mod_mul(other, m) -> OpenSSL::BN
[permalink][rdoc](self * other) % m を返します。
例:
BN.new("7").mod_mul(BN.new("3"), BN.new("6")) # => 3
mod_sqr(m) -> OpenSSL::BN
[permalink][rdoc](self ** 2) % m を返します。
mod_sub(other, m) -> OpenSSL::BN
[permalink][rdoc](self - other) % m を返します。
例:
BN.new("27").mod_mul(BN.new("3"), BN.new("5")) # => 4
num_bits -> Integer
[permalink][rdoc]自身を表現するのに使っているビット数を返します。
符号は無視されます。
例:
OpenSSL::BN.new("127").num_bits # => 7 OpenSSL::BN.new("-127").num_bits # => 7 OpenSSL::BN.new("128").num_bits # => 8
num_bytes -> Integer
[permalink][rdoc]自身を表現するのに使っているバイト数を返します。
odd? -> bool
[permalink][rdoc]自身が奇数である場合に真を返します。
one? -> bool
[permalink][rdoc]自身が1である場合に真を返します。
prime? -> bool
[permalink][rdoc]prime?(checks) -> bool
自身が素数であるなら真を返します。
Miller-Rabin 法により確率的に判定します。 checkで指定した回数だけ繰り返します。 引数を省略した場合は OpenSSL が適切な 回数を判断します。
[SEE_ALSO] OpenSSL::BN#prime_fasttest?
prime_fasttest?(checks=nil, vtrivdiv=true) -> bool
[permalink][rdoc]自身が素数であるなら真を返します。
vtrivdiv が真である場合には、 Miller-Rabin 法での 判定の前に小さな素数で割ることで素数か否かを 調べます。自身が小さな素数である場合にはこの手順 により素数ではないと誤った返り値を返します。
Miller-Rabin 法により確率的に判定します。 checksで指定した回数だけ繰り返します。 checksがnilである場合は OpenSSL が適切な 回数を判断します。
例:
# 181 は 「小さな素数」である OpenSSL::BN.new("181").prime_fasttest?(nil, true) # => false OpenSSL::BN.new("181").prime_fasttest?(nil, false) # => true
[SEE_ALSO] OpenSSL::BN#prime?
rshift!(n) -> self
[permalink][rdoc]自身を n ビット右シフトします。
set_bit!(n) -> self
[permalink][rdoc]自身の n ビット目を1にします。
例:
a = BN.new("128") a.set_bit!(0) a # => 129
sqr -> OpenSSL::BN
[permalink][rdoc]自身の2乗を計算します。
to_bn -> self
[permalink][rdoc]自分自身を返します。
to_i -> Integer
[permalink][rdoc]to_int -> Integer
自身を Integer のインスタンスに変換します。
to_s(base=10) -> String
[permalink][rdoc]自身を表す文字列を返します。
base で基数を指定します。10,16を指定できます。 2を指定すると自身の絶対値を big-endian の符号無し整数のバイナリ列に 変換します。 0を指定した場合には MPI 形式の文字列(バイト列)に変換します。
[SEE_ALSO] OpenSSL::BN.new
ucmp(other) -> -1 | 0 | 1
[permalink][rdoc]自身と other の絶対値を比較し、other の絶対値のほうが 自身の絶対値より小さければ-1、 大きければ+1、2つの絶対値が等しければ 0 を返します。
zero? -> bool
[permalink][rdoc]自身が0である場合に真を返します。