зеркало из https://github.com/github/ruby.git
* 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:
Родитель
7343f15302
Коммит
07f460829a
|
@ -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'
|
||||
|
|
Загрузка…
Ссылка в новой задаче