securerandom 0.2.0 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6852f43d47cdb9a38bd51e8981b8db11542785bdcc9cb12d99cff489ac09a75c
4
- data.tar.gz: ad104da5f10efc9897ec75e0ea0b84867fdb23c599fe42b914e6b8b68fe35471
3
+ metadata.gz: 5ae0b7af17b7e1ae5e5538a9faf771856d7052e570dd2edb7f3876b44ff73caa
4
+ data.tar.gz: 99bbfb8ac5dfa0f2089e4b8ab18a9dcf3628bb1b2564778b14045056e6473879
5
5
  SHA512:
6
- metadata.gz: '09ffdc8afb40305864b664da22060adfeb63a544a4066f38bbb61641694970da98d260359e3ac1ce88a339637281e8518f5955d819ef5cb2ca675a63d5311b5d'
7
- data.tar.gz: 77991f3b46bcdf3da8c6637f695c72de4a270834c91ad8e1bfc44b61629d324b651051ff059e7c01c02b327459dbb1190afb17d6337f5ea1bd2260581f5f8bf9
6
+ metadata.gz: 5a6b61eecc2cf9681ea54abc84909635dca596e1ff453c5af84e75e87b042345e5d9b55f30a99149c61f7407e9238993dbc836efc9feb03067cb0538770cfa5d
7
+ data.tar.gz: c458cecffdea575d9eea0ec41341520d1465d359dda792b8448149a5c32b6e76ccf8f85074c919a97d916dfe379e41f97d461e5dd242a155708808cf99dc7e07
@@ -0,0 +1,6 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: 'github-actions'
4
+ directory: '/'
5
+ schedule:
6
+ interval: 'weekly'
@@ -11,7 +11,7 @@ jobs:
11
11
  os: [ ubuntu-latest, macos-latest, windows-latest ]
12
12
  runs-on: ${{ matrix.os }}
13
13
  steps:
14
- - uses: actions/checkout@v2
14
+ - uses: actions/checkout@v3
15
15
  - name: Set up Ruby
16
16
  uses: ruby/setup-ruby@v1
17
17
  with:
@@ -1,9 +1,14 @@
1
1
  # -*- coding: us-ascii -*-
2
2
  # frozen_string_literal: true
3
3
 
4
- # == Random number formatter.
4
+ # == \Random number formatter.
5
5
  #
6
- # Formats generated random numbers in many manners.
6
+ # Formats generated random numbers in many manners. When <tt>'random/formatter'</tt>
7
+ # is required, several methods are added to empty core module <tt>Random::Formatter</tt>,
8
+ # making them available as Random's instance and module methods.
9
+ #
10
+ # Standard library SecureRandom is also extended with the module, and the methods
11
+ # described below are available as a module methods in it.
7
12
  #
8
13
  # === Examples
9
14
  #
@@ -11,34 +16,45 @@
11
16
  #
12
17
  # require 'random/formatter'
13
18
  #
19
+ # prng = Random.new
14
20
  # prng.hex(10) #=> "52750b30ffbc7de3b362"
15
21
  # prng.hex(10) #=> "92b15d6c8dc4beb5f559"
16
22
  # prng.hex(13) #=> "39b290146bea6ce975c37cfc23"
23
+ # # or just
24
+ # Random.hex #=> "1aed0c631e41be7f77365415541052ee"
17
25
  #
18
26
  # Generate random base64 strings:
19
27
  #
20
28
  # prng.base64(10) #=> "EcmTPZwWRAozdA=="
21
29
  # prng.base64(10) #=> "KO1nIU+p9DKxGg=="
22
30
  # prng.base64(12) #=> "7kJSM/MzBJI+75j8"
31
+ # Random.base64(4) #=> "bsQ3fQ=="
23
32
  #
24
33
  # Generate random binary strings:
25
34
  #
26
35
  # prng.random_bytes(10) #=> "\016\t{\370g\310pbr\301"
27
36
  # prng.random_bytes(10) #=> "\323U\030TO\234\357\020\a\337"
37
+ # Random.random_bytes(6) #=> "\xA1\xE6Lr\xC43"
28
38
  #
29
39
  # Generate alphanumeric strings:
30
40
  #
31
41
  # prng.alphanumeric(10) #=> "S8baxMJnPl"
32
42
  # prng.alphanumeric(10) #=> "aOxAg8BAJe"
43
+ # Random.alphanumeric #=> "TmP9OsJHJLtaZYhP"
33
44
  #
34
45
  # Generate UUIDs:
35
46
  #
36
47
  # prng.uuid #=> "2d931510-d99f-494a-8c67-87feb05e1594"
37
48
  # prng.uuid #=> "bad85eb9-0713-4da7-8d36-07a8e4b00eab"
49
+ # Random.uuid #=> "f14e0271-de96-45cc-8911-8910292a42cd"
50
+ #
51
+ # All methods are available in the standard library SecureRandom, too:
52
+ #
53
+ # SecureRandom.hex #=> "05b45376a30c67238eb93b16499e50cf"
38
54
 
39
55
  module Random::Formatter
40
56
 
41
- # Random::Formatter#random_bytes generates a random binary string.
57
+ # Generate a random binary string.
42
58
  #
43
59
  # The argument _n_ specifies the length of the result string.
44
60
  #
@@ -49,14 +65,16 @@ module Random::Formatter
49
65
  #
50
66
  # require 'random/formatter'
51
67
  #
52
- # prng.random_bytes #=> "\xD8\\\xE0\xF4\r\xB2\xFC*WM\xFF\x83\x18\xF45\xB6"
68
+ # Random.random_bytes #=> "\xD8\\\xE0\xF4\r\xB2\xFC*WM\xFF\x83\x18\xF45\xB6"
69
+ # # or
70
+ # prng = Random.new
53
71
  # prng.random_bytes #=> "m\xDC\xFC/\a\x00Uf\xB2\xB2P\xBD\xFF6S\x97"
54
72
  def random_bytes(n=nil)
55
73
  n = n ? n.to_int : 16
56
74
  gen_random(n)
57
75
  end
58
76
 
59
- # Random::Formatter#hex generates a random hexadecimal string.
77
+ # Generate a random hexadecimal string.
60
78
  #
61
79
  # The argument _n_ specifies the length, in bytes, of the random number to be generated.
62
80
  # The length of the resulting hexadecimal string is twice of _n_.
@@ -68,13 +86,15 @@ module Random::Formatter
68
86
  #
69
87
  # require 'random/formatter'
70
88
  #
71
- # prng.hex #=> "eb693ec8252cd630102fd0d0fb7c3485"
89
+ # Random.hex #=> "eb693ec8252cd630102fd0d0fb7c3485"
90
+ # # or
91
+ # prng = Random.new
72
92
  # prng.hex #=> "91dc3bfb4de5b11d029d376634589b61"
73
93
  def hex(n=nil)
74
94
  random_bytes(n).unpack1("H*")
75
95
  end
76
96
 
77
- # Random::Formatter#base64 generates a random base64 string.
97
+ # Generate a random base64 string.
78
98
  #
79
99
  # The argument _n_ specifies the length, in bytes, of the random number
80
100
  # to be generated. The length of the result string is about 4/3 of _n_.
@@ -86,7 +106,9 @@ module Random::Formatter
86
106
  #
87
107
  # require 'random/formatter'
88
108
  #
89
- # prng.base64 #=> "/2BuBuLf3+WfSKyQbRcc/A=="
109
+ # Random.base64 #=> "/2BuBuLf3+WfSKyQbRcc/A=="
110
+ # # or
111
+ # prng = Random.new
90
112
  # prng.base64 #=> "6BbW0pxO0YENxn38HMUbcQ=="
91
113
  #
92
114
  # See RFC 3548 for the definition of base64.
@@ -94,7 +116,7 @@ module Random::Formatter
94
116
  [random_bytes(n)].pack("m0")
95
117
  end
96
118
 
97
- # Random::Formatter#urlsafe_base64 generates a random URL-safe base64 string.
119
+ # Generate a random URL-safe base64 string.
98
120
  #
99
121
  # The argument _n_ specifies the length, in bytes, of the random number
100
122
  # to be generated. The length of the result string is about 4/3 of _n_.
@@ -112,7 +134,9 @@ module Random::Formatter
112
134
  #
113
135
  # require 'random/formatter'
114
136
  #
115
- # prng.urlsafe_base64 #=> "b4GOKm4pOYU_-BOXcrUGDg"
137
+ # Random.urlsafe_base64 #=> "b4GOKm4pOYU_-BOXcrUGDg"
138
+ # # or
139
+ # prng = Random.new
116
140
  # prng.urlsafe_base64 #=> "UZLdOkzop70Ddx-IJR0ABg"
117
141
  #
118
142
  # prng.urlsafe_base64(nil, true) #=> "i0XQ-7gglIsHGV2_BNPrdQ=="
@@ -126,12 +150,14 @@ module Random::Formatter
126
150
  s
127
151
  end
128
152
 
129
- # Random::Formatter#uuid generates a random v4 UUID (Universally Unique IDentifier).
153
+ # Generate a random v4 UUID (Universally Unique IDentifier).
130
154
  #
131
155
  # require 'random/formatter'
132
156
  #
133
- # prng.uuid #=> "2d931510-d99f-494a-8c67-87feb05e1594"
134
- # prng.uuid #=> "bad85eb9-0713-4da7-8d36-07a8e4b00eab"
157
+ # Random.uuid #=> "2d931510-d99f-494a-8c67-87feb05e1594"
158
+ # Random.uuid #=> "bad85eb9-0713-4da7-8d36-07a8e4b00eab"
159
+ # # or
160
+ # prng = Random.new
135
161
  # prng.uuid #=> "62936e70-1815-439b-bf89-8492855a7e6b"
136
162
  #
137
163
  # The version 4 UUID is purely random (except the version).
@@ -139,7 +165,7 @@ module Random::Formatter
139
165
  #
140
166
  # The result contains 122 random bits (15.25 random bytes).
141
167
  #
142
- # See RFC 4122 for details of UUID.
168
+ # See RFC4122[https://datatracker.ietf.org/doc/html/rfc4122] for details of UUID.
143
169
  #
144
170
  def uuid
145
171
  ary = random_bytes(16).unpack("NnnnnN")
@@ -152,7 +178,7 @@ module Random::Formatter
152
178
  self.bytes(n)
153
179
  end
154
180
 
155
- # Random::Formatter#choose generates a string that randomly draws from a
181
+ # Generate a string that randomly draws from a
156
182
  # source array of characters.
157
183
  #
158
184
  # The argument _source_ specifies the array of characters from which
@@ -196,7 +222,7 @@ module Random::Formatter
196
222
  end
197
223
 
198
224
  ALPHANUMERIC = [*'A'..'Z', *'a'..'z', *'0'..'9']
199
- # Random::Formatter#alphanumeric generates a random alphanumeric string.
225
+ # Generate a random alphanumeric string.
200
226
  #
201
227
  # The argument _n_ specifies the length, in characters, of the alphanumeric
202
228
  # string to be generated.
@@ -208,7 +234,9 @@ module Random::Formatter
208
234
  #
209
235
  # require 'random/formatter'
210
236
  #
211
- # prng.alphanumeric #=> "2BuBuLf3WfSKyQbR"
237
+ # Random.alphanumeric #=> "2BuBuLf3WfSKyQbR"
238
+ # # or
239
+ # prng = Random.new
212
240
  # prng.alphanumeric(10) #=> "i6K93NdqiH"
213
241
  def alphanumeric(n=nil)
214
242
  n = 16 if n.nil?
data/lib/securerandom.rb CHANGED
@@ -72,8 +72,11 @@ module SecureRandom
72
72
  ret
73
73
  end
74
74
 
75
- ret = Random.urandom(1)
76
- if ret.nil?
75
+ begin
76
+ # Check if Random.urandom is available
77
+ Random.urandom(1)
78
+ alias gen_random gen_random_urandom
79
+ rescue RuntimeError
77
80
  begin
78
81
  require 'openssl'
79
82
  rescue NoMethodError
@@ -81,8 +84,6 @@ module SecureRandom
81
84
  else
82
85
  alias gen_random gen_random_openssl
83
86
  end
84
- else
85
- alias gen_random gen_random_urandom
86
87
  end
87
88
 
88
89
  public :gen_random
data/securerandom.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = "securerandom"
3
- spec.version = "0.2.0"
3
+ spec.version = "0.2.2"
4
4
  spec.authors = ["Tanaka Akira"]
5
5
  spec.email = ["akr@fsij.org"]
6
6
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: securerandom
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tanaka Akira
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-02-28 00:00:00.000000000 Z
11
+ date: 2022-12-14 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Interface for secure random number generator.
14
14
  email:
@@ -17,6 +17,7 @@ executables: []
17
17
  extensions: []
18
18
  extra_rdoc_files: []
19
19
  files:
20
+ - ".github/dependabot.yml"
20
21
  - ".github/workflows/test.yml"
21
22
  - ".gitignore"
22
23
  - Gemfile