sirp 2.0.0.pre

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 09ad55f348720fdef0cd77d90bc9f166db80cc59
4
+ data.tar.gz: 0b664333742d32311c3e6a8b3269cdd482fa395f
5
+ SHA512:
6
+ metadata.gz: d89cecbbf3761e596eba3953adcb22af3ca25507068d0186728a6febb3fc72e6549885b04fa202d25eef736eab066eed22cdc59b4f2dfc59193bbd4a29a513c4
7
+ data.tar.gz: 9e0b5e09f86ec07eb5db4ad2c61509749ae7e38c36645b39101fa21ce2dd0ddb6692a984e9a6896ba61e6cbe376172ba0a14beaa698b7c268954d7e82e13c1b4
Binary file
@@ -0,0 +1 @@
1
+ AL��[�o��k��N���V���7"��a*R}*ʶ �5�a�*�̞S���l��,k���È���"6:��v�H��1ۂ<�QC�����ifo�j�7(�A��#�����J�� ~ӂb?��p�B��\r�e� d���yq���)�N��jyMj���c�7#�Ʃ��� 4� a'���n���{>"!g�h������D�[//�I�O�3��~ϋ����׾�.)#gRr
@@ -0,0 +1,7 @@
1
+ :include:
2
+ - lib
3
+ :exclude:
4
+ - spec
5
+ - lib/sirp/version.rb
6
+ :theme: dark
7
+ :show_link_in_terminal: true
@@ -0,0 +1,11 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ /examples/.bundle/
11
+ /examples/Gemfile.lock
@@ -0,0 +1,32 @@
1
+ AllCops:
2
+ # Exclude:
3
+ # - 'spec/**/*'
4
+ UseCache: false
5
+
6
+ Style/VariableName:
7
+ Description: 'Use the configured style when naming variables.'
8
+ StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#snake-case-symbols-methods-vars'
9
+ Enabled: false
10
+
11
+ Metrics/ModuleLength:
12
+ Enabled: false
13
+
14
+ Metrics/ParameterLists:
15
+ Enabled: false
16
+
17
+ Metrics/LineLength:
18
+ Description: 'Limit lines to 80 characters.'
19
+ StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#80-character-limits'
20
+ Enabled: false
21
+
22
+ Style/Documentation:
23
+ Description: 'Document classes and non-namespace modules.'
24
+ Enabled: false
25
+
26
+ Style/FormatString:
27
+ Description: 'Enforce the use of Kernel#sprintf, Kernel#format or String#%.'
28
+ StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#sprintf'
29
+ Enabled: false
30
+
31
+ Style/MethodName:
32
+ Enabled: false
@@ -0,0 +1,6 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.1.0
4
+ - 2.2.4
5
+ - 2.3.1
6
+ before_install: gem install bundler -v 1.12.1
@@ -0,0 +1,7 @@
1
+ # CHANGELOG
2
+
3
+ ## v2.0.0.pre (5/13/2016)
4
+
5
+ This is the initial pre-release of the sirp gem.
6
+
7
+ It is for review only and should not yet be used in production.
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in sirp.gemspec
4
+ gemspec
@@ -0,0 +1,24 @@
1
+ Copyright (c) 2016, Glenn Rempe, Mikael Lammentausta
2
+ All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without
5
+ modification, are permitted provided that the following conditions are met:
6
+ * Redistributions of source code must retain the above copyright
7
+ notice, this list of conditions and the following disclaimer.
8
+ * Redistributions in binary form must reproduce the above copyright
9
+ notice, this list of conditions and the following disclaimer in the
10
+ documentation and/or other materials provided with the distribution.
11
+ * Neither the name of the <organization> nor the
12
+ names of its contributors may be used to endorse or promote products
13
+ derived from this software without specific prior written permission.
14
+
15
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
16
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18
+ DISCLAIMED. IN NO EVENT SHALL Glenn Rempe or Mikael Lammentausta BE LIABLE FOR ANY
19
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
20
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
21
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
22
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
24
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,231 @@
1
+ # SiRP : Secure (interoperable) Remote Password Authentication
2
+
3
+ [![Gem Version](https://badge.fury.io/rb/sirp.svg)](https://badge.fury.io/rb/sirp)
4
+ [![Dependency Status](https://gemnasium.com/badges/github.com/grempe/sirp.svg)](https://gemnasium.com/github.com/grempe/sirp)
5
+ [![Build Status](https://travis-ci.org/grempe/sirp.svg?branch=master)](https://travis-ci.org/grempe/sirp)
6
+ [![Coverage Status](https://coveralls.io/repos/github/grempe/sirp/badge.svg?branch=master)](https://coveralls.io/github/grempe/sirp?branch=master)
7
+ [![Code Climate](https://codeclimate.com/github/grempe/sirp/badges/gpa.svg)](https://codeclimate.com/github/grempe/sirp)
8
+ [![Inline docs](http://inch-ci.org/github/grempe/sirp.svg?branch=master)](http://inch-ci.org/github/grempe/sirp)
9
+
10
+ Ruby Docs : [http://www.rubydoc.info/gems/sirp](http://www.rubydoc.info/gems/sirp)
11
+
12
+
13
+ This is a pure Ruby implementation of the
14
+ [Secure Remote Password](http://srp.stanford.edu/) protocol (SRP-6a),
15
+ which is a 'zero-knowledge' mutual authentication system.
16
+
17
+ SiRP is an authentication method that allows the use of user names and passwords
18
+ over an insecure network connection without revealing the password. If either the
19
+ client lacks the user's password or the server lacks the proper verification
20
+ key, the authentication will fail. This approach is much more secure than the
21
+ vast majority of authentication systems in daily use since the password is
22
+ ***never*** sent over the wire, and is therefore impossible to intercept, and
23
+ impossible to be revealed in a breach unless the verifier can be reversed. This
24
+ attack would be of similar difficulty as deriving a private encryption key from
25
+ its public key.
26
+
27
+ Unlike other common challenge-response authentication protocols, such as
28
+ Kerberos and SSL, SiRP does not rely on an external infrastructure of trusted
29
+ key servers or complex certificate management.
30
+
31
+ ## Documentation
32
+
33
+ There is pretty extensive inline documentation. You can view the latest
34
+ auto-generated docs at [http://www.rubydoc.info/gems/sirp](http://www.rubydoc.info/gems/sirp)
35
+
36
+ You can check my documentation quality score at
37
+ [http://inch-ci.org/github/grempe/sirp](http://inch-ci.org/github/grempe/sirp?branch=master)
38
+
39
+ ## Supported Platforms
40
+
41
+ SiRP is continuously integration tested on the following Ruby VMs:
42
+
43
+ * MRI 2.1, 2.2, 2.3
44
+
45
+ It may work on others as well.
46
+
47
+ ## Installation
48
+
49
+ Add this line to your application's `Gemfile`:
50
+
51
+ ```ruby
52
+ gem 'sirp', '~> 2.0'
53
+ ```
54
+
55
+ And then execute:
56
+ ```sh
57
+ $ bundle
58
+ ```
59
+
60
+ Or install it yourself as:
61
+
62
+ ```sh
63
+ $ gem install sirp
64
+ ```
65
+
66
+ ### Installation Security : Signed Ruby Gem
67
+
68
+ The SiRP gem is cryptographically signed. To be sure the gem you install hasn’t
69
+ been tampered with you can install it using the following method:
70
+
71
+ Add my public key (if you haven’t already) as a trusted certificate
72
+
73
+ ```
74
+ # Caveat: Gem certificates are trusted globally, such that adding a
75
+ # cert.pem for one gem automatically trusts all gems signed by that cert.
76
+ gem cert --add <(curl -Ls https://raw.github.com/grempe/sirp/master/certs/gem-public_cert_grempe.pem)
77
+ ```
78
+
79
+ To install, it is possible to specify either `HighSecurity` or `MediumSecurity`
80
+ mode. Since the `sirp` gem depends on one or more gems that are not cryptographically
81
+ signed you will likely need to use `MediumSecurity`. You should receive a warning
82
+ if any signed gem does not match its signature.
83
+
84
+ ```
85
+ # All dependent gems must be signed and verified.
86
+ gem install sirp -P HighSecurity
87
+ ```
88
+
89
+ ```
90
+ # All signed dependent gems must be verified.
91
+ gem install sirp -P MediumSecurity
92
+ ```
93
+
94
+ ```
95
+ # Same as above, except Bundler only recognizes
96
+ # the long --trust-policy flag, not the short -P
97
+ bundle --trust-policy MediumSecurity
98
+ ```
99
+
100
+ You can [learn more about security and signed Ruby Gems](http://guides.rubygems.org/security/).
101
+
102
+ ### Installation Security : Signed Git Commits
103
+
104
+ Most, if not all, of the commits and tags to the repository for this code are
105
+ signed with my PGP/GPG code signing key. I have uploaded my code signing public
106
+ keys to GitHub and you can now verify those signatures with the GitHub UI.
107
+ See [this list of commits](https://github.com/grempe/sirp/commits/master)
108
+ and look for the `Verified` tag next to each commit. You can click on that tag
109
+ for additional information.
110
+
111
+ You can also clone the repository and verify the signatures locally using your
112
+ own GnuPG installation. You can find my certificates and read about how to conduct
113
+ this verification at [https://www.rempe.us/keys/](https://www.rempe.us/keys/).
114
+
115
+ ## Compatibility
116
+
117
+ This implementation has been tested for compatibility with the following SRP-6a
118
+ compliant third-party libraries:
119
+
120
+ [JSRP / JavaScript](https://github.com/alax/jsrp)
121
+
122
+ ## Usage Example
123
+
124
+ In this example the client and server steps are interleaved for demonstration
125
+ purposes. See the `examples` dir for simple working client and server
126
+ implementations.
127
+
128
+ ``` ruby
129
+ require 'sirp'
130
+
131
+ username = 'user'
132
+ password = 'password'
133
+ prime_length = 2048
134
+
135
+ # The salt and verifier should be stored on the server database.
136
+ @auth = SIRP::Verifier.new(prime_length).generate_userauth(username, password)
137
+ # @auth is a hash containing :username, :verifier and :salt
138
+
139
+ # ~~~ Begin Authentication ~~~
140
+
141
+ client = SIRP::Client.new(prime_length)
142
+ A = client.start_authentication
143
+
144
+ # Client => Server: username, A
145
+
146
+ # Server retrieves user's verifier and salt from the database.
147
+ v = @auth[:verifier]
148
+ salt = @auth[:salt]
149
+
150
+ # Server generates challenge for the client.
151
+ verifier = SIRP::Verifier.new(prime_length)
152
+ session = verifier.get_challenge_and_proof(username, v, salt, A)
153
+
154
+ # Server has to persist proof to authenticate the client response later.
155
+ @proof = session[:proof]
156
+
157
+ # Server sends the challenge containing salt and B to client.
158
+ response = session[:challenge]
159
+
160
+ # Server => Client: salt, B
161
+
162
+ # Client calculates M as a response to the challenge.
163
+ client_M = client.process_challenge(username, password, salt, B)
164
+
165
+ # Client => Server: username, M
166
+
167
+ # Instantiate a new verifier on the server.
168
+ verifier = SIRP::Verifier.new(prime_length)
169
+
170
+ # Verify challenge response M.
171
+ # The Verifier state is passed in @proof.
172
+ server_H_AMK = verifier.verify_session(@proof, client_M)
173
+ # Is false if authentication failed.
174
+
175
+ # At this point, the client and server should have a common session key
176
+ # that is secure (i.e. not known to an outside party). To finish
177
+ # authentication, they must prove to each other that their keys are
178
+ # identical.
179
+
180
+ # Server => Client: H(AMK)
181
+
182
+ client.verify(server_H_AMK) == true
183
+
184
+ ```
185
+
186
+ ## History
187
+
188
+ This gem is a fork of the [lamikae/srp-rb](https://github.com/lamikae/srp-rb)
189
+ repository created by Mikael Lammentausta [@lamikae](https://github.com/lamikae).
190
+ Significant changes were needed for my use-case which demanded breaking changes
191
+ for the sake of greater interoperability. With these factors in mind, a hard
192
+ fork seemed the most appropriate path to take. Much credit is due to Mikael for
193
+ his original implementation.
194
+
195
+ ## Development
196
+
197
+ After checking out the repo, run `bin/setup` to install dependencies. Then,
198
+ run `bundle exec rake test` to run the tests. You can also run `bin/console` for an
199
+ interactive prompt that will allow you to experiment.
200
+
201
+ To install this gem onto your local machine, run `bundle exec rake install`.
202
+
203
+ ### Contributing
204
+
205
+ Bug reports and pull requests are welcome on GitHub
206
+ at [https://github.com/grempe/sirp](https://github.com/grempe/sirp). This
207
+ project is intended to be a safe, welcoming space for collaboration, and
208
+ contributors are expected to adhere to the
209
+ [Contributor Covenant](http://contributor-covenant.org) code of conduct.
210
+
211
+ ## Legal
212
+
213
+ ### Copyright
214
+
215
+ (c) 2016 Glenn Rempe <[glenn@rempe.us](mailto:glenn@rempe.us)> ([https://www.rempe.us/](https://www.rempe.us/))
216
+
217
+ (c) 2012 Mikael Lammentausta
218
+
219
+ ### License
220
+
221
+ The gem is available as open source under the terms of
222
+ the [BSD 3-clause "New" or "Revised" License](https://spdx.org/licenses/BSD-3-Clause.html).
223
+
224
+ ### Warranty
225
+
226
+ Unless required by applicable law or agreed to in writing,
227
+ software distributed under the License is distributed on an
228
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
229
+ either express or implied. See the LICENSE.txt file for the
230
+ specific language governing permissions and limitations under
231
+ the License.
@@ -0,0 +1,101 @@
1
+ # Gem Release Process
2
+
3
+ Don't use the `bundle exec rake release` task. It is more convenient,
4
+ but it skips the process of signing the version release task.
5
+
6
+ ## Run Tests
7
+
8
+ ```sh
9
+ $ bundle exec rake test
10
+ $ bundle exec rake wwtd
11
+ ```
12
+
13
+ ## Git Push
14
+
15
+ ```sh
16
+ $ git push
17
+ ```
18
+
19
+ Check for regressions in automated tests covered by the README badges.
20
+
21
+ ## Bump Version Number and edit CHANGELOG.md
22
+
23
+ ```sh
24
+ $ vi lib/sirp/version.rb
25
+ $ git add lib/sirp/version.rb
26
+ $ vi CHANGELOG.md
27
+ $ git add CHANGELOG.md
28
+ ```
29
+
30
+ ## Local Build and Install w/ Signed Gem
31
+
32
+ The `build` step should ask for PEM passphrase to sign gem. If it does
33
+ not ask it means that the signing cert is not present.
34
+
35
+ Build:
36
+
37
+ ```sh
38
+ $ rake build
39
+ Enter PEM pass phrase:
40
+ sirp x.x.x built to pkg/sirp-x.x.x.gem
41
+ ```
42
+
43
+ Install locally w/ Cert:
44
+
45
+ ```sh
46
+ $ gem uninstall sirp
47
+ $ rbenv rehash
48
+ $ gem install pkg/tss-x.x.x.gem -P MediumSecurity
49
+ Successfully installed sirp-x.x.x
50
+ 1 gem installed
51
+ ```
52
+
53
+ ## Git Commit Version and CHANGELOG Changes, Tag and push to Github
54
+
55
+ ```sh
56
+ $ git add lib/tss/version.rb
57
+ $ git add CHANGELOG.md
58
+ $ git commit -m 'Bump version v2.0.0'
59
+ $ git tag -s v2.0.0 -m "v2.0.0" SHA1_OF_COMMIT
60
+ ```
61
+
62
+ Verify last commit and last tag are GPG signed:
63
+
64
+ ```
65
+ $ git tag -v v2.0.0
66
+ ...
67
+ gpg: Good signature from "Glenn Rempe (Code Signing Key) <glenn@rempe.us>" [ultimate]
68
+ ...
69
+ ```
70
+
71
+ ```
72
+ $ git log --show-signature
73
+ ...
74
+ gpg: Good signature from "Glenn Rempe (Code Signing Key) <glenn@rempe.us>" [ultimate]
75
+ ...
76
+ ```
77
+
78
+ Push code and tags to GitHub:
79
+
80
+ ```
81
+ $ git push
82
+ $ git push --tags
83
+ ```
84
+
85
+ ## Push gem to Rubygems.org
86
+
87
+ ```sh
88
+ $ gem push pkg/sirp-2.0.0.gem
89
+ ```
90
+
91
+ Verify Gem Push at [https://rubygems.org/gems/sirp](https://rubygems.org/gems/sirp)
92
+
93
+ ## Create a GitHub Release
94
+
95
+ Specify the tag we just pushed to attach release to. Copy notes from CHANGELOG.md
96
+
97
+ [https://github.com/grempe/sirp/releases](https://github.com/grempe/sirp/releases)
98
+
99
+ ## Announce Release on Twitter
100
+
101
+ The normal blah, blah, blah.