rex-random_identifier 0.1.0
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 +7 -0
- checksums.yaml.gz.sig +3 -0
- data.tar.gz.sig +0 -0
- data/.gitignore +9 -0
- data/.rspec +2 -0
- data/.travis.yml +5 -0
- data/CODE_OF_CONDUCT.md +49 -0
- data/Gemfile +5 -0
- data/README.md +47 -0
- data/Rakefile +6 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/lib/rex/random_identifier.rb +7 -0
- data/lib/rex/random_identifier/generator.rb +178 -0
- data/lib/rex/random_identifier/version.rb +5 -0
- data/rex-random_identifier.gemspec +26 -0
- metadata +189 -0
- metadata.gz.sig +1 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 37a540cb858fe522a417016b1f3b3af0ed9603df
|
4
|
+
data.tar.gz: 7c7b3eaf43de9d4e219fb1a258e462680360ad64
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 738e80bda84b8ca1fdb87f4610f31e34c61e6020cd692ba8ff9e02d4a369a31bf7dd1a89bd033c89e93ae12ea149abca36b2dd85e98b3aae270ac6e1d4d3e8af
|
7
|
+
data.tar.gz: c4405411ab21e6f8c7318f30e9565dc609de9512ca1ab4321280c0a9115692972b69797ba06c42a3483f176b74c4a76e134b7e714b90ceaab561da854422cb24
|
checksums.yaml.gz.sig
ADDED
data.tar.gz.sig
ADDED
Binary file
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/.travis.yml
ADDED
data/CODE_OF_CONDUCT.md
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
# Contributor Code of Conduct
|
2
|
+
|
3
|
+
As contributors and maintainers of this project, and in the interest of
|
4
|
+
fostering an open and welcoming community, we pledge to respect all people who
|
5
|
+
contribute through reporting issues, posting feature requests, updating
|
6
|
+
documentation, submitting pull requests or patches, and other activities.
|
7
|
+
|
8
|
+
We are committed to making participation in this project a harassment-free
|
9
|
+
experience for everyone, regardless of level of experience, gender, gender
|
10
|
+
identity and expression, sexual orientation, disability, personal appearance,
|
11
|
+
body size, race, ethnicity, age, religion, or nationality.
|
12
|
+
|
13
|
+
Examples of unacceptable behavior by participants include:
|
14
|
+
|
15
|
+
* The use of sexualized language or imagery
|
16
|
+
* Personal attacks
|
17
|
+
* Trolling or insulting/derogatory comments
|
18
|
+
* Public or private harassment
|
19
|
+
* Publishing other's private information, such as physical or electronic
|
20
|
+
addresses, without explicit permission
|
21
|
+
* Other unethical or unprofessional conduct
|
22
|
+
|
23
|
+
Project maintainers have the right and responsibility to remove, edit, or
|
24
|
+
reject comments, commits, code, wiki edits, issues, and other contributions
|
25
|
+
that are not aligned to this Code of Conduct, or to ban temporarily or
|
26
|
+
permanently any contributor for other behaviors that they deem inappropriate,
|
27
|
+
threatening, offensive, or harmful.
|
28
|
+
|
29
|
+
By adopting this Code of Conduct, project maintainers commit themselves to
|
30
|
+
fairly and consistently applying these principles to every aspect of managing
|
31
|
+
this project. Project maintainers who do not follow or enforce the Code of
|
32
|
+
Conduct may be permanently removed from the project team.
|
33
|
+
|
34
|
+
This code of conduct applies both within project spaces and in public spaces
|
35
|
+
when an individual is representing the project or its community.
|
36
|
+
|
37
|
+
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
38
|
+
reported by contacting a project maintainer at DMaloney@rapid7.com. All
|
39
|
+
complaints will be reviewed and investigated and will result in a response that
|
40
|
+
is deemed necessary and appropriate to the circumstances. Maintainers are
|
41
|
+
obligated to maintain confidentiality with regard to the reporter of an
|
42
|
+
incident.
|
43
|
+
|
44
|
+
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
45
|
+
version 1.3.0, available at
|
46
|
+
[http://contributor-covenant.org/version/1/3/0/][version]
|
47
|
+
|
48
|
+
[homepage]: http://contributor-covenant.org
|
49
|
+
[version]: http://contributor-covenant.org/version/1/3/0/
|
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
# Rex::RandomIdentifier
|
2
|
+
|
3
|
+
Ruby Exploitation(Rex) Library for generating strings that conform to most standards for an identifier, i.e., begin with a letter and contain only alphanumeric characters and underscore.
|
4
|
+
|
5
|
+
|
6
|
+
## Installation
|
7
|
+
|
8
|
+
Add this line to your application's Gemfile:
|
9
|
+
|
10
|
+
```ruby
|
11
|
+
gem 'rex-random_identifier'
|
12
|
+
```
|
13
|
+
|
14
|
+
And then execute:
|
15
|
+
|
16
|
+
$ bundle
|
17
|
+
|
18
|
+
Or install it yourself as:
|
19
|
+
|
20
|
+
$ gem install rex-random_identifier
|
21
|
+
|
22
|
+
## Usage
|
23
|
+
|
24
|
+
Example
|
25
|
+
```ruby
|
26
|
+
vars = Rex::RandomIdentifierGenerator.new
|
27
|
+
asp_code = <<-END_CODE
|
28
|
+
Sub #{vars[:func]}()
|
29
|
+
Dim #{vars[:fso]}
|
30
|
+
Set #{vars[:fso]} = CreateObject("Scripting.FileSystemObject")
|
31
|
+
...
|
32
|
+
End Sub
|
33
|
+
#{vars[:func]}
|
34
|
+
END_CODE
|
35
|
+
#
|
36
|
+
```
|
37
|
+
|
38
|
+
## Development
|
39
|
+
|
40
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
41
|
+
|
42
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
43
|
+
|
44
|
+
## Contributing
|
45
|
+
|
46
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/rapid7/rex-random_identifier. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
|
47
|
+
|
data/Rakefile
ADDED
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "rex/random_identifier"
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
# require "pry"
|
11
|
+
# Pry.start
|
12
|
+
|
13
|
+
require "irb"
|
14
|
+
IRB.start
|
data/bin/setup
ADDED
@@ -0,0 +1,178 @@
|
|
1
|
+
# -*- coding: binary -*-
|
2
|
+
require 'rex/text'
|
3
|
+
|
4
|
+
# A quick way to produce unique random strings that follow the rules of
|
5
|
+
# identifiers, i.e., begin with a letter and contain only alphanumeric
|
6
|
+
# characters and underscore.
|
7
|
+
#
|
8
|
+
# The advantage of using this class over, say, {Rex::Text.rand_text_alpha}
|
9
|
+
# each time you need a new identifier is that it ensures you don't have
|
10
|
+
# collisions.
|
11
|
+
#
|
12
|
+
# @example
|
13
|
+
# vars = Rex::RandomIdentifier::Generator.new
|
14
|
+
# asp_code = <<-END_CODE
|
15
|
+
# Sub #{vars[:func]}()
|
16
|
+
# Dim #{vars[:fso]}
|
17
|
+
# Set #{vars[:fso]} = CreateObject("Scripting.FileSystemObject")
|
18
|
+
# ...
|
19
|
+
# End Sub
|
20
|
+
# #{vars[:func]}
|
21
|
+
# END_CODE
|
22
|
+
#
|
23
|
+
class Rex::RandomIdentifier::Generator
|
24
|
+
|
25
|
+
# Raised when a RandomIdentifierGenerator cannot create any more
|
26
|
+
# identifiers without collisions.
|
27
|
+
class ExhaustedSpaceError < StandardError; end
|
28
|
+
|
29
|
+
# Default options
|
30
|
+
DefaultOpts = {
|
31
|
+
# Arbitrary
|
32
|
+
:max_length => 12,
|
33
|
+
:min_length => 3,
|
34
|
+
# This should be pretty universal for identifier rules
|
35
|
+
:char_set => Rex::Text::AlphaNumeric+"_",
|
36
|
+
:first_char_set => Rex::Text::LowerAlpha
|
37
|
+
}
|
38
|
+
|
39
|
+
# @param opts [Hash] Options, see {DefaultOpts} for default values
|
40
|
+
# @option opts :max_length [Fixnum]
|
41
|
+
# @option opts :min_length [Fixnum]
|
42
|
+
# @option opts :char_set [String]
|
43
|
+
def initialize(opts={})
|
44
|
+
# Holds all identifiers.
|
45
|
+
@value_by_name = {}
|
46
|
+
# Inverse of value_by_name so we can ensure uniqueness without
|
47
|
+
# having to search through the whole list of values
|
48
|
+
@name_by_value = {}
|
49
|
+
|
50
|
+
@opts = DefaultOpts.merge(opts)
|
51
|
+
if @opts[:min_length] < 1 || @opts[:max_length] < 1 || @opts[:max_length] < @opts[:min_length]
|
52
|
+
raise ArgumentError, "Invalid length options"
|
53
|
+
end
|
54
|
+
|
55
|
+
# This is really just the maximum number of shortest names. This
|
56
|
+
# will still be a pretty big number most of the time, so don't
|
57
|
+
# bother calculating the real one, which will potentially be
|
58
|
+
# expensive, since we're talking about a 36-digit decimal number to
|
59
|
+
# represent the total possibilities for the range of 10- to
|
60
|
+
# 20-character identifiers.
|
61
|
+
#
|
62
|
+
# 26 because the first char is lowercase alpha, (min_length - 1) and
|
63
|
+
# not just min_length because it includes that first alpha char.
|
64
|
+
@max_permutations = 26 * (@opts[:char_set].length ** (@opts[:min_length]-1))
|
65
|
+
# The real number of permutations could be calculated thusly:
|
66
|
+
#((@opts[:min_length]-1) .. (@opts[:max_length]-1)).reduce(0) { |a, e|
|
67
|
+
# a + (26 * @opts[:char_set].length ** e)
|
68
|
+
#}
|
69
|
+
end
|
70
|
+
|
71
|
+
# Returns the @value_by_name hash
|
72
|
+
#
|
73
|
+
# @return [Hash]
|
74
|
+
def to_h
|
75
|
+
return @value_by_name
|
76
|
+
end
|
77
|
+
|
78
|
+
# Return a unique random identifier for +name+, generating a new one
|
79
|
+
# if necessary.
|
80
|
+
#
|
81
|
+
# @param name [Symbol] A descriptive, intention-revealing name for an
|
82
|
+
# identifier. This is what you would normally call the variable if
|
83
|
+
# you weren't generating it.
|
84
|
+
# @return [String]
|
85
|
+
def get(name)
|
86
|
+
return @value_by_name[name] if @value_by_name[name]
|
87
|
+
|
88
|
+
@value_by_name[name] = generate
|
89
|
+
@name_by_value[@value_by_name[name]] = name
|
90
|
+
|
91
|
+
@value_by_name[name]
|
92
|
+
end
|
93
|
+
alias [] get
|
94
|
+
alias init_var get
|
95
|
+
|
96
|
+
# Add a new identifier. Its name will be checked for uniqueness among
|
97
|
+
# previously-generated names.
|
98
|
+
#
|
99
|
+
# @note This should be called *before* any calls to {#get} to avoid
|
100
|
+
# potential collisions. If you do hit a collision, this method will
|
101
|
+
# raise.
|
102
|
+
#
|
103
|
+
# @param name (see #get)
|
104
|
+
# @param value [String] The identifier that will be returned by
|
105
|
+
# subsequent calls to {#get} with the sane +name+.
|
106
|
+
# @raise RuntimeError if +value+ already exists
|
107
|
+
# @return [void]
|
108
|
+
def store(name, value)
|
109
|
+
|
110
|
+
case @name_by_value[value]
|
111
|
+
when name
|
112
|
+
# we already have this value and it is associated with this name
|
113
|
+
# nothing to do here
|
114
|
+
when nil
|
115
|
+
# don't have this value yet, so go ahead and just insert
|
116
|
+
@value_by_name[name] = value
|
117
|
+
@name_by_value[value] = name
|
118
|
+
else
|
119
|
+
# then the caller is trying to insert a duplicate
|
120
|
+
raise RuntimeError, "Value is not unique!"
|
121
|
+
end
|
122
|
+
|
123
|
+
self
|
124
|
+
end
|
125
|
+
|
126
|
+
# Create a random string that satisfies most languages' requirements
|
127
|
+
# for identifiers. In particular, with a default configuration, the
|
128
|
+
# first character will always be lowercase alpha (unless modified by a
|
129
|
+
# block), and the whole thing will contain only a-zA-Z0-9_ characters.
|
130
|
+
#
|
131
|
+
# If called with a block, the block will be given the identifier before
|
132
|
+
# uniqueness checks. The block's return value will be the new
|
133
|
+
# identifier. Note that the block may be called multiple times if it
|
134
|
+
# returns a non-unique value.
|
135
|
+
#
|
136
|
+
# @note Calling this method with a block that returns only values that
|
137
|
+
# this generator already contains will result in an infinite loop.
|
138
|
+
#
|
139
|
+
# @example
|
140
|
+
# rig = Rex::RandomIdentifier::Generator.new
|
141
|
+
# const = rig.generate { |val| val.capitalize }
|
142
|
+
# rig.insert(:SOME_CONSTANT, const)
|
143
|
+
# ruby_code = <<-EOC
|
144
|
+
# #{rig[:SOME_CONSTANT]} = %q^generated ruby constant^
|
145
|
+
# def #{rig[:my_method]}; ...; end
|
146
|
+
# EOC
|
147
|
+
#
|
148
|
+
# @param len [Fixnum] Avoid setting this unless a specific size is
|
149
|
+
# necessary. Default is random within range of min .. max
|
150
|
+
# @return [String] A string that matches <tt>[a-z][a-zA-Z0-9_]*</tt>
|
151
|
+
# @yield [String] The identifier before uniqueness checks. This allows
|
152
|
+
# you to modify the value and still avoid collisions.
|
153
|
+
def generate(len=nil)
|
154
|
+
raise ArgumentError, "len must be positive integer" if len && len < 1
|
155
|
+
raise ExhaustedSpaceError if @value_by_name.length >= @max_permutations
|
156
|
+
|
157
|
+
# pick a random length within the limits
|
158
|
+
len ||= rand(@opts[:min_length] .. (@opts[:max_length]))
|
159
|
+
|
160
|
+
ident = ""
|
161
|
+
|
162
|
+
# XXX: Infinite loop if block returns only values we've already
|
163
|
+
# generated.
|
164
|
+
loop do
|
165
|
+
ident = Rex::Text.rand_base(1, "", @opts[:first_char_set])
|
166
|
+
ident << Rex::Text.rand_base(len-1, "", @opts[:char_set])
|
167
|
+
if block_given?
|
168
|
+
ident = yield ident
|
169
|
+
end
|
170
|
+
# Try to make another one if it collides with a previously
|
171
|
+
# generated one.
|
172
|
+
break unless @name_by_value.key?(ident)
|
173
|
+
end
|
174
|
+
|
175
|
+
ident
|
176
|
+
end
|
177
|
+
|
178
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'rex/random_identifier/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "rex-random_identifier"
|
8
|
+
spec.version = Rex::RandomIdentifier::VERSION
|
9
|
+
spec.authors = ["David 'thelightcosine' Maloney"]
|
10
|
+
spec.email = ["DMaloney@rapid7.com"]
|
11
|
+
|
12
|
+
spec.summary = %q{Random Identifier Generator}
|
13
|
+
spec.description = %q{Ruby Exploitation(Rex) library for generating Random identifier strings}
|
14
|
+
spec.homepage = "https://github.com/rapid7/rex-random_identifier"
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
17
|
+
spec.bindir = "exe"
|
18
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_development_dependency "bundler", "~> 1.12"
|
22
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
23
|
+
spec.add_development_dependency "rspec", "~> 3.0"
|
24
|
+
|
25
|
+
spec.add_runtime_dependency "rex-text"
|
26
|
+
end
|
metadata
ADDED
@@ -0,0 +1,189 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rex-random_identifier
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- David 'thelightcosine' Maloney
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain:
|
11
|
+
- |
|
12
|
+
-----BEGIN CERTIFICATE-----
|
13
|
+
MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG
|
14
|
+
A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv
|
15
|
+
b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw
|
16
|
+
MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i
|
17
|
+
YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT
|
18
|
+
aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ
|
19
|
+
jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp
|
20
|
+
xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp
|
21
|
+
1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG
|
22
|
+
snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ
|
23
|
+
U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8
|
24
|
+
9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E
|
25
|
+
BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B
|
26
|
+
AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz
|
27
|
+
yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE
|
28
|
+
38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP
|
29
|
+
AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad
|
30
|
+
DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME
|
31
|
+
HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
|
32
|
+
-----END CERTIFICATE-----
|
33
|
+
- |
|
34
|
+
-----BEGIN CERTIFICATE-----
|
35
|
+
MIIEKDCCAxCgAwIBAgILBAAAAAABL07hNVwwDQYJKoZIhvcNAQEFBQAwVzELMAkG
|
36
|
+
A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv
|
37
|
+
b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw0xMTA0MTMxMDAw
|
38
|
+
MDBaFw0xOTA0MTMxMDAwMDBaMFExCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i
|
39
|
+
YWxTaWduIG52LXNhMScwJQYDVQQDEx5HbG9iYWxTaWduIENvZGVTaWduaW5nIENB
|
40
|
+
IC0gRzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCyTxTnEL7XJnKr
|
41
|
+
NpfvU79ChF5Y0Yoo/ENGb34oRFALdV0A1zwKRJ4gaqT3RUo3YKNuPxL6bfq2RsNq
|
42
|
+
o7gMJygCVyjRUPdhOVW4w+ElhlI8vwUd17Oa+JokMUnVoqni05GrPjxz7/Yp8cg1
|
43
|
+
0DB7f06SpQaPh+LO9cFjZqwYaSrBXrta6G6V/zuAYp2Zx8cvZtX9YhqCVVrG+kB3
|
44
|
+
jskwPBvw8jW4bFmc/enWyrRAHvcEytFnqXTjpQhU2YM1O46MIwx1tt6GSp4aPgpQ
|
45
|
+
STic0qiQv5j6yIwrJxF+KvvO3qmuOJMi+qbs+1xhdsNE1swMfi9tBoCidEC7tx/0
|
46
|
+
O9dzVB/zAgMBAAGjgfowgfcwDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQIMAYB
|
47
|
+
Af8CAQAwHQYDVR0OBBYEFAhu2Lacir/tPtfDdF3MgB+oL1B6MEcGA1UdIARAMD4w
|
48
|
+
PAYEVR0gADA0MDIGCCsGAQUFBwIBFiZodHRwczovL3d3dy5nbG9iYWxzaWduLmNv
|
49
|
+
bS9yZXBvc2l0b3J5LzAzBgNVHR8ELDAqMCigJqAkhiJodHRwOi8vY3JsLmdsb2Jh
|
50
|
+
bHNpZ24ubmV0L3Jvb3QuY3JsMBMGA1UdJQQMMAoGCCsGAQUFBwMDMB8GA1UdIwQY
|
51
|
+
MBaAFGB7ZhpFDZfKiVAvfQTNNKj//P1LMA0GCSqGSIb3DQEBBQUAA4IBAQAiXMXd
|
52
|
+
PfQLcNjj9efFjgkBu7GWNlxaB63HqERJUSV6rg2kGTuSnM+5Qia7O2yX58fOEW1o
|
53
|
+
kdqNbfFTTVQ4jGHzyIJ2ab6BMgsxw2zJniAKWC/wSP5+SAeq10NYlHNUBDGpeA07
|
54
|
+
jLBwwT1+170vKsPi9Y8MkNxrpci+aF5dbfh40r5JlR4VeAiR+zTIvoStvODG3Rjb
|
55
|
+
88rwe8IUPBi4A7qVPiEeP2Bpen9qA56NSvnwKCwwhF7sJnJCsW3LZMMSjNaES2dB
|
56
|
+
fLEDF3gJ462otpYtpH6AA0+I98FrWkYVzSwZi9hwnOUtSYhgcqikGVJwQ17a1kYD
|
57
|
+
sGgOJO9K9gslJO8k
|
58
|
+
-----END CERTIFICATE-----
|
59
|
+
- |
|
60
|
+
-----BEGIN CERTIFICATE-----
|
61
|
+
MIIEyjCCA7KgAwIBAgISESEyE8rNriS4+1dc8jOHEUL8MA0GCSqGSIb3DQEBBQUA
|
62
|
+
MFExCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMScwJQYD
|
63
|
+
VQQDEx5HbG9iYWxTaWduIENvZGVTaWduaW5nIENBIC0gRzIwHhcNMTMxMDExMTUx
|
64
|
+
NTM4WhcNMTYxMDExMTUxNTM4WjBgMQswCQYDVQQGEwJVUzEWMBQGA1UECBMNTWFz
|
65
|
+
c2FjaHVzZXR0czEPMA0GA1UEBxMGQm9zdG9uMRMwEQYDVQQKEwpSYXBpZDcgTExD
|
66
|
+
MRMwEQYDVQQDEwpSYXBpZDcgTExDMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
|
67
|
+
CgKCAQEAhD//7+739c69hssg0mD6CXgf2JkuWTcU81dgD7aKcoEPqU8e1FseBvDW
|
68
|
+
/Q5fNK2H2NgHV/Msn18zXuK0PkaJXqj/vDsuKB3Hq0BiR2AwyDdEw8K5MK5bgQc2
|
69
|
+
tmcVtEAejRoy1Uv5UyfaAYAxG6zsma3buV1fjnEAC3VouRg4+EX/f65H/a6srntK
|
70
|
+
5Etp3D71k2f0oUl8dOqOmSsRJQQ5zSs4ktDvpjAmsvzoA+1svceLYU95mvQsIw2T
|
71
|
+
edpmibGMwGw/HmgV+YWBgF5UGvax6zbC2i6DF2YHnDfkNb8/1MEIaxOTAbJTazTK
|
72
|
+
8laCQOyay6L1BNPQKjZBgOge8LZq1wIDAQABo4IBizCCAYcwDgYDVR0PAQH/BAQD
|
73
|
+
AgeAMEwGA1UdIARFMEMwQQYJKwYBBAGgMgEyMDQwMgYIKwYBBQUHAgEWJmh0dHBz
|
74
|
+
Oi8vd3d3Lmdsb2JhbHNpZ24uY29tL3JlcG9zaXRvcnkvMAkGA1UdEwQCMAAwEwYD
|
75
|
+
VR0lBAwwCgYIKwYBBQUHAwMwPgYDVR0fBDcwNTAzoDGgL4YtaHR0cDovL2NybC5n
|
76
|
+
bG9iYWxzaWduLmNvbS9ncy9nc2NvZGVzaWduZzIuY3JsMIGGBggrBgEFBQcBAQR6
|
77
|
+
MHgwQAYIKwYBBQUHMAKGNGh0dHA6Ly9zZWN1cmUuZ2xvYmFsc2lnbi5jb20vY2Fj
|
78
|
+
ZXJ0L2dzY29kZXNpZ25nMi5jcnQwNAYIKwYBBQUHMAGGKGh0dHA6Ly9vY3NwMi5n
|
79
|
+
bG9iYWxzaWduLmNvbS9nc2NvZGVzaWduZzIwHQYDVR0OBBYEFE536JwFx9SpaEi3
|
80
|
+
w8pcq2GRFA5BMB8GA1UdIwQYMBaAFAhu2Lacir/tPtfDdF3MgB+oL1B6MA0GCSqG
|
81
|
+
SIb3DQEBBQUAA4IBAQAGpGXHtFLjTTivV+xQPwtZhfPuJ7f+VGTMSAAYWmfzyHXM
|
82
|
+
YMFYUWJzSFcuVR2YfxtbS45P7U5Qopd7jBQ0Ygk5h2a+B5nE4+UlhHj665d0zpYM
|
83
|
+
1eWndMaO6WBOYnqtNyi8Dqqc1foKZDNHEDggYhGso7OIBunup+N4sPL9PwQ3eYe6
|
84
|
+
mUu8z0E4GXYViaMPOFkqaYnoYgf2L+7L5zKYT4h/NE/P7kj7EbduHgy/v/aAIrNl
|
85
|
+
2SpuQH+SWteq3NXkAmFEEqvLJQ4sbptZt8OP8ghL3pVAvZNFmww/YVszSkShSzcg
|
86
|
+
QdihYCSEL2drS2cFd50jBeq71sxUtxbv82DUa2b+
|
87
|
+
-----END CERTIFICATE-----
|
88
|
+
date: 2016-06-21 00:00:00.000000000 Z
|
89
|
+
dependencies:
|
90
|
+
- !ruby/object:Gem::Dependency
|
91
|
+
name: bundler
|
92
|
+
requirement: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '1.12'
|
97
|
+
type: :development
|
98
|
+
prerelease: false
|
99
|
+
version_requirements: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '1.12'
|
104
|
+
- !ruby/object:Gem::Dependency
|
105
|
+
name: rake
|
106
|
+
requirement: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '10.0'
|
111
|
+
type: :development
|
112
|
+
prerelease: false
|
113
|
+
version_requirements: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '10.0'
|
118
|
+
- !ruby/object:Gem::Dependency
|
119
|
+
name: rspec
|
120
|
+
requirement: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '3.0'
|
125
|
+
type: :development
|
126
|
+
prerelease: false
|
127
|
+
version_requirements: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '3.0'
|
132
|
+
- !ruby/object:Gem::Dependency
|
133
|
+
name: rex-text
|
134
|
+
requirement: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
type: :runtime
|
140
|
+
prerelease: false
|
141
|
+
version_requirements: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
description: Ruby Exploitation(Rex) library for generating Random identifier strings
|
147
|
+
email:
|
148
|
+
- DMaloney@rapid7.com
|
149
|
+
executables: []
|
150
|
+
extensions: []
|
151
|
+
extra_rdoc_files: []
|
152
|
+
files:
|
153
|
+
- ".gitignore"
|
154
|
+
- ".rspec"
|
155
|
+
- ".travis.yml"
|
156
|
+
- CODE_OF_CONDUCT.md
|
157
|
+
- Gemfile
|
158
|
+
- README.md
|
159
|
+
- Rakefile
|
160
|
+
- bin/console
|
161
|
+
- bin/setup
|
162
|
+
- lib/rex/random_identifier.rb
|
163
|
+
- lib/rex/random_identifier/generator.rb
|
164
|
+
- lib/rex/random_identifier/version.rb
|
165
|
+
- rex-random_identifier.gemspec
|
166
|
+
homepage: https://github.com/rapid7/rex-random_identifier
|
167
|
+
licenses: []
|
168
|
+
metadata: {}
|
169
|
+
post_install_message:
|
170
|
+
rdoc_options: []
|
171
|
+
require_paths:
|
172
|
+
- lib
|
173
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
174
|
+
requirements:
|
175
|
+
- - ">="
|
176
|
+
- !ruby/object:Gem::Version
|
177
|
+
version: '0'
|
178
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
179
|
+
requirements:
|
180
|
+
- - ">="
|
181
|
+
- !ruby/object:Gem::Version
|
182
|
+
version: '0'
|
183
|
+
requirements: []
|
184
|
+
rubyforge_project:
|
185
|
+
rubygems_version: 2.4.8
|
186
|
+
signing_key:
|
187
|
+
specification_version: 4
|
188
|
+
summary: Random Identifier Generator
|
189
|
+
test_files: []
|
metadata.gz.sig
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
h+lg��N�Lh��ח�;�5�@��[�-{[Y�&�#�I����UC��BOaWQ>��O5��]�l8D�zOl�]��?�S�q:�"��lT�i���ʉ�_@$���;֯���;�Jh��33ڌ���k]�k$G�MId�����k�L#�s��u�� �\�!36�%��V~�s9��F��2"T/l��U8�E�sN�&8+���K71�r!�z����>:&� \�C|ƍ)3"����\��o�+w�z
|