rex-mime 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 5ba17899b1724d5da8d496e381f489ccfdba44e2
4
+ data.tar.gz: ffd3c319bf61793ac9537e9e0995ccc9c5b2e913
5
+ SHA512:
6
+ metadata.gz: 860c91299b75f4e2cfd0a0dd3c77267a6ed0e34ae4d5e936558c32f6505caaad797eb0131446962a4a0ddb7d408cbf335408841b8b1a79a52ef34970ee7633c1
7
+ data.tar.gz: c0832c0bcf8f457647accb1dcda67d46432db2b83de18bb4095726f59028c0f17e58394dd32f9968df07e4284b4c8ef60cc509ce3c9e24f07bd491d507807061
checksums.yaml.gz.sig ADDED
Binary file
data/.gitignore ADDED
@@ -0,0 +1,9 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
data/.travis.yml ADDED
@@ -0,0 +1,5 @@
1
+ sudo: false
2
+ language: ruby
3
+ rvm:
4
+ - 2.1.5
5
+ before_install: gem install bundler -v 1.12.5
@@ -0,0 +1,52 @@
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 the project maintainers at msfdev@metasploit.com. If
39
+ the incident involves a committer, you may report directly to
40
+ egypt@metasploit.com or todb@metasploit.com.
41
+
42
+ All complaints will be reviewed and investigated and will result in a
43
+ response that is deemed necessary and appropriate to the circumstances.
44
+ Maintainers are obligated to maintain confidentiality with regard to the
45
+ reporter of an incident.
46
+
47
+ This Code of Conduct is adapted from the [Contributor Covenant][homepage],
48
+ version 1.3.0, available at
49
+ [http://contributor-covenant.org/version/1/3/0/][version]
50
+
51
+ [homepage]: http://contributor-covenant.org
52
+ [version]: http://contributor-covenant.org/version/1/3/0/
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in rex-mime.gemspec
4
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,27 @@
1
+ Copyright (C) 2012-2013, Rapid7, Inc.
2
+ All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without modification,
5
+ are permitted provided that the following conditions are met:
6
+
7
+ * Redistributions of source code must retain the above copyright notice,
8
+ this list of conditions and the following disclaimer.
9
+
10
+ * Redistributions in binary form must reproduce the above copyright notice,
11
+ this list of conditions and the following disclaimer in the documentation
12
+ and/or other materials provided with the distribution.
13
+
14
+ * Neither the name of Rapid7 LLC nor the names of its contributors
15
+ may be used to endorse or promote products derived from this software
16
+ without specific prior written permission.
17
+
18
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
19
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
22
+ ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
25
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
data/README.md ADDED
@@ -0,0 +1,29 @@
1
+ # Rex::Mime
2
+
3
+ Ruby Exploitation(Rex) Library for creating and/or parsing MIME messages.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ ```ruby
10
+ gem 'rex-mime'
11
+ ```
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install rex-mime
20
+
21
+ ## Development
22
+
23
+ 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.
24
+
25
+ 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).
26
+
27
+ ## Contributing
28
+
29
+ Bug reports and pull requests are welcome on GitHub at https://github.com/rapid7/rex-mime. 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.
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "rex/mime"
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,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,17 @@
1
+ # -*- coding: binary -*-
2
+ module Rex
3
+ module MIME
4
+ # Set of helpers methods to deal with SMTP encoding related topics.
5
+ module Encoding
6
+
7
+ # Enforces CRLF on the input data
8
+ #
9
+ # @param data [String] The data to CRLF enforce.
10
+ # @return [String] CRLF enforced data.
11
+ def force_crlf(data)
12
+ data.gsub("\r", '').gsub("\n", "\r\n")
13
+ end
14
+
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,79 @@
1
+ # -*- coding: binary -*-
2
+ module Rex
3
+ module MIME
4
+ class Header
5
+
6
+ require 'rex/text'
7
+
8
+ attr_accessor :headers
9
+
10
+ def initialize(data='')
11
+ self.headers = []
12
+ parse(data)
13
+ end
14
+
15
+ def parse(data)
16
+ prev = nil
17
+ data.gsub("\r", '').split("\n").each do |line|
18
+
19
+ # Handle header folding
20
+ if (line =~ /^\s+/)
21
+ # Ignore if there is no previous header
22
+ next if not prev
23
+ next if not self.headers[prev]
24
+ self.headers[prev][1] << line.strip
25
+ next
26
+ end
27
+
28
+ var, val = line.split(':', 2)
29
+ next if val.nil?
30
+
31
+ self.headers << [ var.to_s.strip, val.to_s.strip ]
32
+ prev = self.headers.length - 1
33
+ end
34
+ end
35
+
36
+ def to_s
37
+ self.headers.map{ |pair| "#{pair[0]}: #{pair[1]}\r\n" }.join
38
+ end
39
+
40
+ def find(idx)
41
+ if (idx.class == ::Fixnum)
42
+ return self.headers[idx]
43
+ else
44
+ self.headers.each do |pair|
45
+ if (pair[0] == idx.to_s)
46
+ return pair
47
+ end
48
+ end
49
+ end
50
+ nil
51
+ end
52
+
53
+ def set(var, val)
54
+ hdr = self.find(var) || self.add(var, '')
55
+ hdr[1] = val
56
+ end
57
+
58
+ def add(var, val)
59
+ self.headers << [var, val]
60
+ self.headers[-1]
61
+ end
62
+
63
+ def remove(idx)
64
+ if (idx.class == ::Fixnum)
65
+ self.headers.delete_at(idx)
66
+ else
67
+ self.headers.each_index do |i|
68
+ pair = self.headers[i]
69
+ if (pair[0] == idx.to_s)
70
+ self.headers.delete_at(i)
71
+ end
72
+ end
73
+ end
74
+ end
75
+
76
+ end
77
+ end
78
+ end
79
+
@@ -0,0 +1,144 @@
1
+ # -*- coding: binary -*-
2
+ module Rex
3
+ module MIME
4
+ class Message
5
+
6
+ require 'rex/mime/header'
7
+ require 'rex/mime/part'
8
+ require 'rex/mime/encoding'
9
+ require 'rex/text'
10
+
11
+ include Rex::MIME::Encoding
12
+
13
+ attr_accessor :header, :parts, :bound, :content
14
+
15
+
16
+ def initialize(data=nil)
17
+ self.header = Rex::MIME::Header.new
18
+ self.parts = []
19
+ self.bound = "_Part_#{rand(1024)}_#{rand(0xffffffff)}_#{rand(0xffffffff)}"
20
+ self.content = ''
21
+ if data
22
+ head,body = data.split(/\r?\n\r?\n/, 2)
23
+
24
+ self.header.parse(head)
25
+ ctype = self.header.find('Content-Type')
26
+
27
+ if ctype && ctype[1] && ctype[1] =~ /multipart\/mixed;\s*boundary="?([A-Za-z0-9'\(\)\+\_,\-\.\/:=\?^\s]+)"?/
28
+ self.bound = $1
29
+ chunks = body.to_s.split(/--#{self.bound}(--)?\r?\n/)
30
+ self.content = chunks.shift.to_s.gsub(/\s+$/, '')
31
+ self.content << "\r\n" unless self.content.empty?
32
+
33
+ chunks.each do |chunk|
34
+ break if chunk == "--"
35
+ head,body = chunk.split(/\r?\n\r?\n/, 2)
36
+ part = Rex::MIME::Part.new
37
+ part.header.parse(head)
38
+ part.content = body.gsub(/\s+$/, '')
39
+ self.parts << part
40
+ end
41
+ else
42
+ self.content = body.to_s.gsub(/\s+$/, '') + "\r\n"
43
+ end
44
+ end
45
+ end
46
+
47
+ def to
48
+ (self.header.find('To') || [nil, nil])[1]
49
+ end
50
+
51
+ def to=(val)
52
+ self.header.set("To", val)
53
+ end
54
+
55
+ def from=(val)
56
+ self.header.set("From", val)
57
+ end
58
+
59
+ def from
60
+ (self.header.find('From') || [nil, nil])[1]
61
+ end
62
+
63
+ def subject=(val)
64
+ self.header.set("Subject", val)
65
+ end
66
+
67
+ def subject
68
+ (self.header.find('Subject') || [nil, nil])[1]
69
+ end
70
+
71
+ def mime_defaults
72
+ self.header.set("MIME-Version", "1.0")
73
+ self.header.set("Content-Type", "multipart/mixed; boundary=\"#{self.bound}\"")
74
+ self.header.set("Subject", '') # placeholder
75
+ self.header.set("Date", Time.now.strftime("%a,%e %b %Y %H:%M:%S %z"))
76
+ self.header.set("Message-ID",
77
+ "<"+
78
+ Rex::Text.rand_text_alphanumeric(rand(20)+40)+
79
+ "@"+
80
+ Rex::Text.rand_text_alpha(rand(20)+3)+
81
+ ">"
82
+ )
83
+ self.header.set("From", '') # placeholder
84
+ self.header.set("To", '') # placeholder
85
+ end
86
+
87
+
88
+ def add_part(data='', content_type='text/plain', transfer_encoding="8bit", content_disposition=nil)
89
+ part = Rex::MIME::Part.new
90
+
91
+ if content_disposition
92
+ part.header.set("Content-Disposition", content_disposition)
93
+ end
94
+
95
+ part.header.set("Content-Type", content_type) if content_type
96
+
97
+ if transfer_encoding
98
+ part.header.set("Content-Transfer-Encoding", transfer_encoding)
99
+ end
100
+
101
+ part.content = data
102
+ self.parts << part
103
+ part
104
+ end
105
+
106
+ def add_part_attachment(data, name)
107
+ self.add_part(
108
+ Rex::Text.encode_base64(data, "\r\n"),
109
+ "application/octet-stream; name=\"#{name}\"",
110
+ "base64",
111
+ "attachment; filename=\"#{name}\""
112
+ )
113
+ end
114
+
115
+
116
+ def add_part_inline_attachment(data, name)
117
+ self.add_part(
118
+ Rex::Text.encode_base64(data, "\r\n"),
119
+ "application/octet-stream; name=\"#{name}\"",
120
+ "base64",
121
+ "inline; filename=\"#{name}\""
122
+ )
123
+ end
124
+
125
+ def to_s
126
+ header_string = self.header.to_s
127
+
128
+ msg = header_string.empty? ? '' : force_crlf(self.header.to_s + "\r\n")
129
+ msg << force_crlf(self.content + "\r\n") unless self.content.to_s.strip.empty?
130
+
131
+ self.parts.each do |part|
132
+ msg << force_crlf("--" + self.bound + "\r\n")
133
+ msg << part.to_s
134
+ end
135
+
136
+ msg << force_crlf("--" + self.bound + "--\r\n") if self.parts.length > 0
137
+
138
+ msg
139
+ end
140
+
141
+ end
142
+ end
143
+ end
144
+
@@ -0,0 +1,50 @@
1
+ # -*- coding: binary -*-
2
+ module Rex
3
+ module MIME
4
+ class Part
5
+
6
+ require 'rex/mime/header'
7
+ require 'rex/mime/encoding'
8
+
9
+ include Rex::MIME::Encoding
10
+
11
+ attr_accessor :header, :content
12
+
13
+ def initialize
14
+ self.header = Rex::MIME::Header.new
15
+ self.content = ''
16
+ end
17
+
18
+ def to_s
19
+ self.header.to_s + "\r\n" + content_encoded + "\r\n"
20
+ end
21
+
22
+ # Returns the part content with any necessary encoding or transformation
23
+ # applied.
24
+ #
25
+ # @return [String] Content with encoding or transformations applied.
26
+ def content_encoded
27
+ binary_content? ? content : force_crlf(content)
28
+ end
29
+
30
+ # Answers if the part content is binary.
31
+ #
32
+ # @return [Boolean] true if the part content is binary, false otherwise.
33
+ def binary_content?
34
+ transfer_encoding && transfer_encoding == 'binary'
35
+ end
36
+
37
+ # Returns the Content-Transfer-Encoding of the part.
38
+ #
39
+ # @return [nil] if the part hasn't Content-Transfer-Encoding.
40
+ # @return [String] The Content-Transfer-Encoding or the part.
41
+ def transfer_encoding
42
+ h = header.find('Content-Transfer-Encoding')
43
+ return nil if h.nil?
44
+
45
+ h[1]
46
+ end
47
+
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,5 @@
1
+ module Rex
2
+ module Mime
3
+ VERSION = "0.1.1"
4
+ end
5
+ end
data/lib/rex/mime.rb ADDED
@@ -0,0 +1,12 @@
1
+ # -*- coding: binary -*-
2
+ require "rex/mime/version"
3
+
4
+ module Rex
5
+ module MIME
6
+
7
+ require 'rex/mime/header'
8
+ require 'rex/mime/part'
9
+ require 'rex/mime/message'
10
+
11
+ end
12
+ end
data/rex-mime.gemspec ADDED
@@ -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/mime/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "rex-mime"
8
+ spec.version = Rex::Mime::VERSION
9
+ spec.authors = ["dmohanty-r7"]
10
+ spec.email = ["Dev_Mohanty@rapid7.com"]
11
+
12
+ spec.summary = %q{This library is for creating and/or parsing MIME messages.}
13
+ spec.description = %q{This library is for creating and/or parsing MIME messages.}
14
+ spec.homepage = "https://github.com/rapid7/rex-mime"
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
data.tar.gz.sig ADDED
@@ -0,0 +1,3 @@
1
+ \����W�zP�>������J`�E�Y
2
+ � j�eb�S�b�]����c� �k����g�d
3
+ � "F�����!��yI� �i4$��$���3����|S��F�r��;e�5p$j�N��*�/U�����V'*�� ��$+m��jH�Oˆ�pv}
metadata ADDED
@@ -0,0 +1,193 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rex-mime
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - dmohanty-r7
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-09-01 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: This library is for creating and/or parsing MIME messages.
147
+ email:
148
+ - Dev_Mohanty@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
+ - LICENSE
159
+ - README.md
160
+ - Rakefile
161
+ - bin/console
162
+ - bin/setup
163
+ - lib/rex/mime.rb
164
+ - lib/rex/mime/encoding.rb
165
+ - lib/rex/mime/header.rb
166
+ - lib/rex/mime/message.rb
167
+ - lib/rex/mime/part.rb
168
+ - lib/rex/mime/version.rb
169
+ - rex-mime.gemspec
170
+ homepage: https://github.com/rapid7/rex-mime
171
+ licenses: []
172
+ metadata: {}
173
+ post_install_message:
174
+ rdoc_options: []
175
+ require_paths:
176
+ - lib
177
+ required_ruby_version: !ruby/object:Gem::Requirement
178
+ requirements:
179
+ - - ">="
180
+ - !ruby/object:Gem::Version
181
+ version: '0'
182
+ required_rubygems_version: !ruby/object:Gem::Requirement
183
+ requirements:
184
+ - - ">="
185
+ - !ruby/object:Gem::Version
186
+ version: '0'
187
+ requirements: []
188
+ rubyforge_project:
189
+ rubygems_version: 2.4.8
190
+ signing_key:
191
+ specification_version: 4
192
+ summary: This library is for creating and/or parsing MIME messages.
193
+ test_files: []
metadata.gz.sig ADDED
@@ -0,0 +1 @@
1
+ \Ya�=u��x �6���.����H����&!!�X���ʉ�Z���(l�6M�D@s:�:ę#&w]'SFV��|Ⱦ0�����z&$�|H�h����ˡ�3MD��_��>4�QV��<^�>�<j��;y�`hoX��՜ő�4m�J�7)�4�qex6-rLk���]���Q�rT��: ���G�k|]q�F��Ŋ���m��Vbz��S �.4���N��$���dž����XZ��g�u8=��ʉ���<� ��