Commit graph

287 commits

Author SHA1 Message Date
nobu
ed5b985650 random.c: optimize int_pair_to_real_inclusive
* random.c (int_pair_to_real_inclusive): optimize to multiply
  without Bignum.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54938 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-05-07 07:22:14 +00:00
nobu
091d88ab4b random.c: split random_int32
* random.c (random_int32): split the cases of rb_random_t and
  other objects.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54937 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-05-07 06:21:00 +00:00
nobu
1a696e35c8 random.c: unnecessary declarations
* random.c (random_ulong_limited, random_ulong_limited_big):
  remove unnecessary extern declarations.  rb_num_negative_p is
  declared in internal.h now.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54936 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-05-07 02:59:32 +00:00
nobu
c0f920093e random.c: fill_random_bytes_syscall function
* random.c (fill_random_bytes_syscall): turned into a static
  function, to be inlined probably, so that it is unavailable if
  it is a preprocessor macro.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54932 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-05-06 07:18:34 +00:00
nobu
a331eeb529 random.c: refactor
* random.c (rand_random, rb_f_rand): refactor, split condition
  expressions, and return in the precedence.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54931 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-05-06 07:18:33 +00:00
nobu
3377db6b32 random.c: use rb_check_to_int
* random.c (rand_range, rand_random): use rb_check_to_int instead
  of rb_check_to_integer with the same conversion method.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54930 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-05-06 06:52:37 +00:00
nobu
0e303494d0 random.c: prefer rb_check_arity
* random.c: use rb_check_arity instead of rb_scan_args for simple
  optional arguments.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54929 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-05-06 06:52:36 +00:00
nobu
c92c82184c random.c: sipseed_keys_t
* random.c (sipseed): separate type of keys to reduce use of the
  magic number.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54928 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-05-06 06:52:35 +00:00
nobu
72c4fc7283 random.c: default seed mark
* random.c (Init_Random_default): since seed is marked by
  random_mark, no needs to mark itself as a global variable.
  allocate Random instance before making the seed value, to get
  rid of the potential risk of GC during the allocation.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54927 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-05-06 06:29:56 +00:00
nobu
80c9b6646e random.c: return value is not GCed
* random.c (rand_init): since seed is the return value, no needs
  to be volatile to prevent from GC.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54926 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-05-06 06:29:55 +00:00
nobu
e1ce20cf9b random.c: use uint32_t
* random.c (struct MT, next_state): use uint32_t for the state
  vector.

* random.c (init_by_array, rand_init): ditto for initializing
  keys.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54920 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-05-05 15:00:05 +00:00
nobu
4a066896af random.c: use arc4random_buf
* random.c (fill_random_bytes_syscall): use arc4random_buf if
  available.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54912 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-05-05 01:49:35 +00:00
usa
62b6e90d58 * cont.c, hash.c, random.c, win32/win32.c: cleanup some Win9x/ME/NT4
support leftovers.
  [fix GH-1328] patched by @cremno


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54863 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-05-01 11:42:41 +00:00
akr
169b867fbf * random.c (limited_rand): Add a specialized path for the limit fits in 32 bit.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53914 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-02-24 12:30:20 +00:00
ko1
2f5b8f0529 * *.c (*_memsize): do not check ptr.
NULL checking is finished Before call of memsize functions.
  See r52979.




git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52986 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-12-09 00:38:32 +00:00
nobu
4a1b9786dc random.c: fix filling size
* random.c (fill_random_seed): fix the size to be filled, not the
  size of element, but the whole size of array.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52891 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-12-05 00:23:36 +00:00
nobu
24dcb1285d explicit_bzero.c: needs windows.h
* missing/explicit_bzero.c, random.c (explicit_bzero):
  SecureZeroMemory() needs windows.h.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52827 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-12-01 03:52:20 +00:00
kosaki
86af9bba63 * random.c (InitVM_Random): move Random::DEFAULT initialization
bits to Init_Random_default.
* random.c (Init_Random_default): renamed from Init_Rndom2.
* random.c (Init_RandomSeedCore): renamed from Init_Random.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52816 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-11-30 20:32:42 +00:00
kosaki
99c05fb38e * random.c (Init_RandomSeed): move all Random::DEFAULT
construction bits to Init_RandomSeed2. Random::DEFAULT
  and Ruby internal hashes are no longer shared their seed.
* random.c (Init_RandomSeed2): ditto. And, kill evil
  rb_obj_reveal() stuff.
* random.c (init_hashseed): add MT argument.
* random.c: (init_siphash): ditto.
* test/ruby/test_rand.rb (TestRand#test_default_seed): new
  test for Random::DEFAULT::seed.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52815 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-11-30 20:31:31 +00:00
kosaki
052535be3e * random.c (init_hashseed, init_siphash): extract initialize
functions.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52814 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-11-30 20:31:11 +00:00
kosaki
12e059b18c * random.c (init_randomseed): remove "initial" argument. It never
be used from outside of this function.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52812 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-11-30 20:29:37 +00:00
kosaki
f7bd7d6f1f * random.c: random_raw_seed don't use GRND_NONBLOCK. GRND_NONBLOCK
mean the result might not have an enough cryptic strength and
  easy predictable. That's no good for SecureRandom.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52808 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-11-30 20:27:11 +00:00
kosaki
dea685c783 * missing/explicit_bzero.c: new file. define explicit_bzero.
* common.mk: add a rule for explicit.o.
* configure.in: detect explicit_bzero and memset_s.
* include/ruby/missing.h: add explicit_bzero.
* random.c (init_randomseed): use explicit_bzero() instead of
  memset(). memset could be eliminated by compiler optimization.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52806 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-11-30 20:26:13 +00:00
nobu
503752b14c random.c: comment [ci skip]
* random.c (fill_random_bytes_urandom): fix comment typos.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52183 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-10-18 05:51:44 +00:00
kosaki
0751bc3fad Revert r52180
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52182 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-10-18 05:46:21 +00:00
kosaki
6c060b2b58 * random.c (fill_random_bytes_urandom): add a comment why using
O_NONBLOCK and O_NOCTTY.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52181 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-10-18 05:43:08 +00:00
kosaki
47f0a8f9d0 * random.c (fill_random_bytes_syscall): don't use GRND_NONBLOCK.
It is meaningless. If SYS_getrandom(GRND_NONBLOCK) return
  EAGAIN, we eventually call fill_random_bytes_urandom() and
  it block such as SYS_getrandom() without GRND_NONBLOCK.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52180 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-10-18 05:42:37 +00:00
kosaki
a4c6ad1d19 * random.c (fill_random_bytes_syscall): use ATOMIC_SET() for
updating try_syscall.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52179 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-10-18 05:42:08 +00:00
nobu
e02186f526 random.c: get rid of blocking
* random.c (fill_random_bytes_syscall): get rid of blocking when
  no entropy is available.  based on the patch by mame in
  [ruby-core:70114].  [Bug #11395]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51374 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-25 12:03:50 +00:00
kazu
b091903c5c fix compile error with clang
* random.c (fill_random_bytes_syscall): fix compile error with
  clang. [ruby-core:69931] [Bug #11343]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51240 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-14 15:01:39 +00:00
kazu
4f66d02c97 * random.c (fill_random_bytes_syscall): fix compile error.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51186 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-07 09:21:11 +00:00
normal
50c0a20025 random.c: fix failures on old Linux
This follows the behavior of fill_random_bytes_urandom and fixes
the following failures I encountered on my old machine:

1) Error:
TestSecureRandom#test_s_random_bytes_without_openssl:
NotImplementedError: No random device
    $RUBYDIR/lib/securerandom.rb:66:in `gen_random'
    $RUBYDIR/lib/securerandom.rb:94:in `random_bytes'
    $RUBYDIR/test/test_securerandom.rb:12:in `test_s_random_bytes'
    $RUBYDIR/test/test_securerandom.rb:97:in `block in test_s_random_bytes_without_openssl'
    $RUBYDIR/lib/tmpdir.rb:88:in `mktmpdir'
    $RUBYDIR/test/test_securerandom.rb:85:in `test_s_random_bytes_without_openssl'

  2) Error:
TestSecureRandom#test_s_urlsafe_base64:
NotImplementedError: No random device
    $RUBYDIR/lib/securerandom.rb:66:in `gen_random'
    $RUBYDIR/lib/securerandom.rb:94:in `random_bytes'
    $RUBYDIR/lib/securerandom.rb:164:in `urlsafe_base64'
    $RUBYDIR/test/test_securerandom.rb:131:in `block in test_s_urlsafe_base64'
    $RUBYDIR/test/test_securerandom.rb:130:in `times'
    $RUBYDIR/test/test_securerandom.rb:130:in `test_s_urlsafe_base64'

  3) Error:
TestSecureRandom#test_uuid:
NotImplementedError: No random device
    $RUBYDIR/lib/securerandom.rb:66:in `gen_random'
    $RUBYDIR/lib/securerandom.rb:94:in `random_bytes'
    $RUBYDIR/lib/securerandom.rb:230:in `uuid'
    $RUBYDIR/test/test_securerandom.rb:160:in `test_uuid'

* random.c (fill_random_bytes_syscall): return -1 for error
* random.c (fill_random_bytes): try urandom on syscall failure

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51183 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-07 07:46:29 +00:00
nobu
bcd96d92f3 random.c: try getrandom
* random.c (fill_random_bytes_syscall): try getrandom system call
  on Linux if supported by the kernel.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51182 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-07 06:26:06 +00:00
nobu
e96955e8f6 random.c: separate fill_random_bytes
* random.c (fill_random_bytes): separate into functions by system
  call and by direct read of urandom device.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51181 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-07 06:25:55 +00:00
nobu
f9c2adf310 random.c: refactor
* random.c (fill_random_bytes): separate non-raced and raced
  conditions, on Windows.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51024 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-06-25 06:32:23 +00:00
nobu
5e132260c4 random.c: fix handle to release
* random.c (fill_random_bytes): release the handle in the static
  variable, not a local variable.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50019 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-03-19 01:31:03 +00:00
nobu
c7988fd29d ruby.h: suppress false warnings
* include/ruby/ruby.h (rb_data_object_alloc_warning): enable only
  if __builtin_choose_expr works with __builtin_constant_p so that
  warnings will be suppressed if klass is 0.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49978 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-03-16 07:49:27 +00:00
nobu
5d09df3273 ruby.h: suppress false warnings
* include/ruby/ruby.h (rb_data_object_alloc_warning): enable only
  if __builtin_choose_expr works with __builtin_constant_p so that
  warnings will be suppressed if klass is 0.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49977 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-03-16 07:47:48 +00:00
odaira
270630c628 * random.c (random_raw_seed): Avoid calling fill_random_bytes()
if the requested size is 0. AIX returns -1 for 0-byte read from
/dev/urandom, while other UNIX returns 0. With this change,
Random.raw_seed(0) consistently retuns "" in any UNIX.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49844 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-03-04 23:44:59 +00:00
nobu
3bc9d1d0f4 random.c: suppress a warning
* random.c (fill_random_bytes): use ATOMIC_SIZE_CAS to suppress a
  strict-aliasing warning by gcc 4.9 for mingw.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49601 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-02-15 03:23:36 +00:00
nobu
10a9807030 random.c: ArgumentError for invalid argument
* random.c (rand_random_number): raise ArgumentError for invalid
  argument like as SecureRandom.random_number.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49599 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-02-14 05:40:10 +00:00
nobu
dd09b5bf1d random.c: allow negative argument to random_number
* random.c (rand_random_number): allow negative argument as it is
  allowed by SecureRandom.random_number.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49597 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-02-14 04:11:26 +00:00
nobu
b1adbd14e5 random.c: rand_random_number
* random.c (rand_random_number): add a method to return a random
  number like SecureRandom to Random::Formatter.
* lib/securerandom.rb (random_bytes): move to Random::Formatter,
  the base method of the module.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49596 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-02-14 03:20:04 +00:00
nobu
03af53f559 random.c: use PRIsVALUE
* random.c (rand_random): use PRIsVALUE to format an error
  message.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49594 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-02-14 03:02:05 +00:00
nobu
eeeb7ae8c0 random.c: Random.raw_seed
* random.c (random_raw_seed): extract platform dependent random
  seed initialization function as a new method Random.raw_seed.
* lib/securerandom.rb (SecureRandom): use Random.raw_seed.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49593 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-02-14 03:01:36 +00:00
nobu
e580a631be use 0 for reserved
use 0 for rb_data_type_t::reserved instead of NULL, since its type
may be changed in the future and possibly not a pointer type.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48662 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-12-01 06:38:04 +00:00
akr
7cd76ab0c5 * internal.h: Include ruby.h and ruby/encoding.h to be
includable without prior inclusion.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48447 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-11-15 11:49:06 +00:00
nobu
90173785a8 random.c: fix casts
* random.c (fill_random_seed): fix type to cast.  this may or may
  not suppress warnings by icc.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46769 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-07-09 14:51:26 +00:00
nobu
876bfc6b4e Init functions don't need ID caches
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46663 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-07-03 03:38:10 +00:00
akr
3c99764bcd * internal.h: Rename macro names: RBIGNUM_FOO to BIGNUM_FOO.
(BIGNUM_EMBED_LEN_NUMBITS): Renamed from RBIGNUM_EMBED_LEN_NUMBITS.
  (BIGNUM_EMBED_LEN_MAX): Renamed from RBIGNUM_EMBED_LEN_MAX.
  (BIGNUM_SIGN_BIT): Renamed from RBIGNUM_SIGN_BIT.
  (BIGNUM_SIGN): Renamed from RBIGNUM_SIGN.
  (BIGNUM_SET_SIGN): Renamed from RBIGNUM_SET_SIGN.
  (BIGNUM_POSITIVE_P): Renamed from RBIGNUM_POSITIVE_P.
  (BIGNUM_NEGATIVE_P): Renamed from RBIGNUM_NEGATIVE_P.
  (BIGNUM_EMBED_FLAG): Renamed from RBIGNUM_EMBED_FLAG.
  (BIGNUM_EMBED_LEN_MASK): Renamed from RBIGNUM_EMBED_LEN_MASK.
  (BIGNUM_EMBED_LEN_SHIFT): Renamed from RBIGNUM_EMBED_LEN_SHIFT.
  (BIGNUM_LEN): Renamed from RBIGNUM_LEN.
  (RBIGNUM_DIGITS): Renamed from RBIGNUM_DIGITS.
  (BIGNUM_LENINT): Renamed from RBIGNUM_LENINT.

* bignum.c: Follow the above change.

* gc.c: Ditto.

* marshal.c: Ditto.

* math.c: Ditto.

* numeric.c: Ditto.

* random.c: Ditto.

* rational.c: Ditto.

* sprintf.c: Ditto.

* ext/-test-/bignum/bigzero.c: Ditto.

* ext/-test-/bignum/intpack.c: Ditto.

* ext/bigdecimal/bigdecimal.c: Ditto.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44989 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-02-15 21:17:34 +00:00