* lib/securerandom.rb (SecureRandom.random_bytes): use fiddle directly

instead of using Win32API.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48269 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
usa 2014-11-04 12:20:59 +00:00
Родитель 7343f15302
Коммит 07f460829a
2 изменённых файлов: 14 добавлений и 4 удалений

Просмотреть файл

@ -1,3 +1,8 @@
Tue Nov 4 21:20:07 2014 NAKAMURA Usaku <usa@ruby-lang.org>
* lib/securerandom.rb (SecureRandom.random_bytes): use fiddle directly
instead of using Win32API.
Tue Nov 4 21:04:30 2014 NAKAMURA Usaku <usa@ruby-lang.org>
* test/rubygems/test_gem_request_set_lockfile.rb

Просмотреть файл

@ -91,16 +91,21 @@ module SecureRandom
unless defined?(@has_win32)
begin
require 'Win32API'
advapi32 = Module.new do
require "fiddle/import"
extend Fiddle::Importer
dlload "advapi32"
extern "int CryptAcquireContext(void*, void*, void*, unsigned long, unsigned long)"
extern "int CryptGenRandom(void*, unsigned long, void*)"
end
crypt_acquire_context = Win32API.new("advapi32", "CryptAcquireContext", 'PPPII', 'L')
@crypt_gen_random = Win32API.new("advapi32", "CryptGenRandom", 'VIP', 'L')
@crypt_gen_random = advapi32.method(:CryptGenRandom)
hProvStr = " " * Fiddle::SIZEOF_VOIDP
prov_rsa_full = 1
crypt_verifycontext = 0xF0000000
if crypt_acquire_context.call(hProvStr, nil, nil, prov_rsa_full, crypt_verifycontext) == 0
if advapi32.CryptAcquireContext(hProvStr, nil, nil, prov_rsa_full, crypt_verifycontext) == 0
raise SystemCallError, "CryptAcquireContext failed: #{lastWin32ErrorMessage}"
end
type = Fiddle::SIZEOF_VOIDP == Fiddle::SIZEOF_LONG_LONG ? 'q' : 'l'