crypt3 1.1.6
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
- data/.index +58 -0
- data/.yardopts +9 -0
- data/HISTORY.md +68 -0
- data/LICENSE.txt +22 -0
- data/README.md +68 -0
- data/lib/crypt3.rb +189 -0
- data/lib/crypt3.yml +58 -0
- data/test/test_crypt3.rb +33 -0
- metadata +101 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: a914f5fb4fd97435adf98c380e739b6c6591f288
|
4
|
+
data.tar.gz: 1f5090db3dcec5837d2e1315f0759d5b9b6566d4
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 4a008f9ea380de3d6a46380d5b96c5c2428d2dcaed7f15f37003d127c623b9b15d632c1563623b641b011b2264b40006cf282916880385038087c6bd294b3628
|
7
|
+
data.tar.gz: 0703bf90c417f28e41d6e9af8ae93e74ecb8d3e728a3ed769d250d12d5ba469692d4824b57f0cd9e8c8092bee054faffa48cfabd3d0da04e110c42ad56b18dcb
|
data/.index
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
---
|
2
|
+
revision: 2013
|
3
|
+
type: ruby
|
4
|
+
sources:
|
5
|
+
- var
|
6
|
+
authors:
|
7
|
+
- name: Thomas Sawyer
|
8
|
+
email: transfire@gmail.com
|
9
|
+
- name: Poul-Henning Kamp
|
10
|
+
organizations:
|
11
|
+
- name: Rubyworks
|
12
|
+
requirements:
|
13
|
+
- groups:
|
14
|
+
- build
|
15
|
+
development: true
|
16
|
+
name: rake
|
17
|
+
- groups:
|
18
|
+
- build
|
19
|
+
development: true
|
20
|
+
name: detroit
|
21
|
+
- groups:
|
22
|
+
- test
|
23
|
+
development: true
|
24
|
+
name: minitest
|
25
|
+
conflicts: []
|
26
|
+
alternatives: []
|
27
|
+
resources:
|
28
|
+
- type: home
|
29
|
+
uri: http://rubyworks.github.com/crypt3
|
30
|
+
label: Homepage
|
31
|
+
- type: code
|
32
|
+
uri: http://github.com/rubyworks/crypt3
|
33
|
+
label: Source Code
|
34
|
+
- type: bugs
|
35
|
+
uri: http://github.com/rubyworks/crypt3/issues
|
36
|
+
label: Issue Tracker
|
37
|
+
repositories:
|
38
|
+
- name: upstream
|
39
|
+
scm: git
|
40
|
+
uri: git://github.com/rubyworks/crypt3.git
|
41
|
+
categories: []
|
42
|
+
copyrights:
|
43
|
+
- holder: ''
|
44
|
+
year: '2002'
|
45
|
+
license: c) Poul-Henning Kamp (BSD-2-Clause
|
46
|
+
customs: []
|
47
|
+
paths:
|
48
|
+
lib:
|
49
|
+
- lib
|
50
|
+
name: crypt3
|
51
|
+
title: Crypt3
|
52
|
+
summary: Crypt3 is a ruby version of crypt(3)
|
53
|
+
created: '2002-06-01'
|
54
|
+
description: |-
|
55
|
+
Crypt3 is a ruby version of crypt(3),
|
56
|
+
a salted one-way hashing of a password.
|
57
|
+
version: 1.1.6
|
58
|
+
date: '2013-08-09'
|
data/.yardopts
ADDED
data/HISTORY.md
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
# RELEASE HISTORY
|
2
|
+
|
3
|
+
## 1.1.5 / 2013-01-30
|
4
|
+
|
5
|
+
This release adds TomDoc based documentation.
|
6
|
+
|
7
|
+
Changes:
|
8
|
+
|
9
|
+
* Add TomDoc documentation.
|
10
|
+
|
11
|
+
|
12
|
+
## 1.1.4 / 2011-10-23
|
13
|
+
|
14
|
+
This release fixes VERSION constant. That's it.
|
15
|
+
|
16
|
+
Changes:
|
17
|
+
|
18
|
+
* Fix VERSION constant.
|
19
|
+
|
20
|
+
|
21
|
+
## 1.1.3 / 2011-10-22
|
22
|
+
|
23
|
+
This release is simply an administrative release to modernize the
|
24
|
+
build tools and build configuration used for the project.
|
25
|
+
|
26
|
+
Changes:
|
27
|
+
|
28
|
+
* Modernize build.
|
29
|
+
|
30
|
+
|
31
|
+
## 1.1.2 / 2010-09-03
|
32
|
+
|
33
|
+
Well, it looks as if the String#^ (xor) method from Facets wasn't ever
|
34
|
+
actually needed.
|
35
|
+
|
36
|
+
Changes:
|
37
|
+
|
38
|
+
* Removed String#^ extension.
|
39
|
+
|
40
|
+
|
41
|
+
## 1.1.1 / 2010-09-02
|
42
|
+
|
43
|
+
This release simply removes the dependency on Facets and updates
|
44
|
+
project metadata.
|
45
|
+
|
46
|
+
Changes:
|
47
|
+
|
48
|
+
* Remove dependency on Ruby Facets.
|
49
|
+
|
50
|
+
|
51
|
+
## 1.1.0 / 2009-07-27
|
52
|
+
|
53
|
+
This release renames the Crypt module to Crypt3 --which is really
|
54
|
+
what it should have been from the start.
|
55
|
+
|
56
|
+
Changes:
|
57
|
+
|
58
|
+
* Rename Crypt module to Crypt3.
|
59
|
+
|
60
|
+
|
61
|
+
## 1.0.0 / 2009-07-20
|
62
|
+
|
63
|
+
This is the initial release of Crypt3.
|
64
|
+
|
65
|
+
Changes:
|
66
|
+
|
67
|
+
* Happy Birthday!
|
68
|
+
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
BSD-2-Clause License
|
2
|
+
|
3
|
+
Redistribution and use in source and binary forms, with or without modification, are
|
4
|
+
permitted provided that the following conditions are met:
|
5
|
+
|
6
|
+
1. Redistributions of source code must retain the above copyright notice, this list of
|
7
|
+
conditions and the following disclaimer.
|
8
|
+
|
9
|
+
2. Redistributions in binary form must reproduce the above copyright notice, this list
|
10
|
+
of conditions and the following disclaimer in the documentation and/or other materials
|
11
|
+
provided with the distribution.
|
12
|
+
|
13
|
+
THIS SOFTWARE IS PROVIDED BY <COPYRIGHT HOLDER> ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
14
|
+
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
15
|
+
FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> OR
|
16
|
+
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
17
|
+
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
18
|
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
19
|
+
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
20
|
+
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
21
|
+
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
22
|
+
|
data/README.md
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
# Crypt3
|
2
|
+
|
3
|
+
[Website](http://rubyworks.github.com/crypt3) /
|
4
|
+
[Report Issue](http://github.com/rubyworks/crypt3/issues) /
|
5
|
+
[Source Code](http://github.com/rubyworks/crypt3) /
|
6
|
+
[](http://badge.fury.io/rb/crypt3) /
|
7
|
+
[](http://travis-ci.org/rubyworks/crypt3)
|
8
|
+
|
9
|
+
|
10
|
+
## [About](#about)
|
11
|
+
|
12
|
+
Crypt3 is a pure Ruby version of crypt(3) --a salted one-way
|
13
|
+
hashing of a password.
|
14
|
+
|
15
|
+
Supported hashing algorithms are: md5, sha1, sha256, sha384,
|
16
|
+
sha512, rmd160. Only the md5 hashing algorithm is standard
|
17
|
+
and compatible with crypt(3); the others are non-standard.
|
18
|
+
|
19
|
+
|
20
|
+
## [Features](#features)
|
21
|
+
|
22
|
+
* Standard compliant crypt(3) implementation
|
23
|
+
* Supports alternate hashing algorithms
|
24
|
+
* Written in Ruby (but depends on Ruby's standard digest libraries)
|
25
|
+
|
26
|
+
|
27
|
+
## [Installing](#installing)
|
28
|
+
|
29
|
+
To install with RubyGems simply open a console and type:
|
30
|
+
|
31
|
+
gem install crypt3
|
32
|
+
|
33
|
+
Site installation requires Setup.rb (gem install setup),
|
34
|
+
then download the tarball package and type:
|
35
|
+
|
36
|
+
tar -xvzf crypt3-1.0.0.tar.gz
|
37
|
+
cd crypt3-1.0.0
|
38
|
+
sudo setup.rb all
|
39
|
+
|
40
|
+
Windows users use 'ruby setup.rb all'.
|
41
|
+
|
42
|
+
|
43
|
+
## [Basic Usage](#usage)
|
44
|
+
|
45
|
+
Crypt3 provides a module method call `crypt`.
|
46
|
+
|
47
|
+
Crypt3.crypt('pass')
|
48
|
+
|
49
|
+
It will return an encypted string, something like:
|
50
|
+
|
51
|
+
'$1$YeNsbWdH$wvOF8JdqsoiLix754LTW90'
|
52
|
+
|
53
|
+
The validitly of which can ensured it using `check`:
|
54
|
+
|
55
|
+
Crypt3.check('pass', '$1$YeNsbWdH$wvOF8JdqsoiLix754LTW90')
|
56
|
+
|
57
|
+
See the [API Documentation](http://rubydoc.info/gems/crypt3/frames) for further
|
58
|
+
details and options.
|
59
|
+
|
60
|
+
|
61
|
+
## [Copyrights](#copyright)
|
62
|
+
|
63
|
+
Copyright © 2009 Poul-Henning Kamp
|
64
|
+
|
65
|
+
This program is ditributed under the terms of the [BSD-2-Clause](http://opensource.org/licenses/BSD-2-Clause)
|
66
|
+
license.
|
67
|
+
|
68
|
+
See LICENSE.txt for full text.
|
data/lib/crypt3.rb
ADDED
@@ -0,0 +1,189 @@
|
|
1
|
+
# Crypt3 is a pure ruby version of crypt(3), a salted one-way hashing of a password.
|
2
|
+
#
|
3
|
+
# The Ruby version was written by Poul-Henning Kamp.
|
4
|
+
#
|
5
|
+
# Adapted by guillaume__dot__pierronnet_at__laposte__dot_net based on
|
6
|
+
# * http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/325204/index_txt
|
7
|
+
# which is based on FreeBSD src/lib/libcrypt/crypt.c 1.2
|
8
|
+
# * http://www.freebsd.org/cgi/cvsweb.cgi/~checkout~/src/lib/libcrypt/crypt.c?rev=1.2&content-type=text/plain
|
9
|
+
#
|
10
|
+
# _Original License_
|
11
|
+
#
|
12
|
+
# "THE BEER-WARE LICENSE" (Revision 42):
|
13
|
+
# <phk@login.dknet.dk> wrote this file. As long as you retain this notice you
|
14
|
+
# can do whatever you want with this stuff. If we meet some day, and you think
|
15
|
+
# this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp
|
16
|
+
#
|
17
|
+
# Copyright (c) 2002 Poul-Henning Kamp
|
18
|
+
|
19
|
+
module Crypt3
|
20
|
+
|
21
|
+
# Current version of the library.
|
22
|
+
VERSION = '1.1.5' #:erb: VERSION = '<%= version %>'
|
23
|
+
|
24
|
+
# Base 64 character set.
|
25
|
+
ITOA64 = "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
|
26
|
+
|
27
|
+
# Extends strings in #crypt.
|
28
|
+
module ImpOrd2String
|
29
|
+
def [](*args)
|
30
|
+
self.slice(*args).ord
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
# A pure ruby version of crypt(3), a salted one-way hashing of a password.
|
35
|
+
#
|
36
|
+
# Supported hashing algorithms are: md5, sha1, sha256, sha384, sha512, rmd160.
|
37
|
+
#
|
38
|
+
# Only the md5 hashing algorithm is standard and compatible with crypt(3),
|
39
|
+
# the others are not standard.
|
40
|
+
#
|
41
|
+
# Automatically generates an 8-byte salt if none given.
|
42
|
+
#
|
43
|
+
# Output a length hashed and salted string with size of `magic.size + salt.size + 23`.
|
44
|
+
#
|
45
|
+
# password - The pharse that was encrypted. [String]
|
46
|
+
# algo - The algorithm used. [Symbol]
|
47
|
+
# salt - Cryptographic salt, random if `nil`.
|
48
|
+
#
|
49
|
+
# Retuns the cryptogrphic hash. [String]
|
50
|
+
def self.crypt(password, algo=:md5, salt=nil, magic='$1$')
|
51
|
+
|
52
|
+
salt ||= generate_salt(8)
|
53
|
+
|
54
|
+
case algo
|
55
|
+
when :md5
|
56
|
+
require "digest/md5"
|
57
|
+
when :sha1
|
58
|
+
require "digest/sha1"
|
59
|
+
when :rmd160
|
60
|
+
require "digest/rmd160"
|
61
|
+
when :sha256, :sha384, :sha512
|
62
|
+
require "digest/sha2"
|
63
|
+
else
|
64
|
+
raise(ArgumentError, "unknown algorithm")
|
65
|
+
end
|
66
|
+
digest_class = Digest.const_get(algo.to_s.upcase)
|
67
|
+
|
68
|
+
# The password first, since that is what is most unknown. Then our magic string. Then the raw salt.
|
69
|
+
m = digest_class.new
|
70
|
+
m.update(password + magic + salt)
|
71
|
+
|
72
|
+
# Then just as many characters of the MD5(pw,salt,pw)
|
73
|
+
mixin = digest_class.new.update(password + salt + password).digest
|
74
|
+
password.length.times do |i|
|
75
|
+
m.update(mixin[i % 16].chr)
|
76
|
+
end
|
77
|
+
|
78
|
+
# Then something really weird...
|
79
|
+
# Also really broken, as far as I can tell. -m
|
80
|
+
i = password.length
|
81
|
+
while i != 0
|
82
|
+
if (i & 1) != 0
|
83
|
+
m.update("\x00")
|
84
|
+
else
|
85
|
+
m.update(password[0].chr)
|
86
|
+
end
|
87
|
+
i >>= 1
|
88
|
+
end
|
89
|
+
|
90
|
+
final = m.digest
|
91
|
+
|
92
|
+
# and now, just to make sure things don't run too fast
|
93
|
+
1000.times do |i|
|
94
|
+
m2 = digest_class.new
|
95
|
+
|
96
|
+
if (i & 1) != 0
|
97
|
+
m2.update(password)
|
98
|
+
else
|
99
|
+
m2.update(final)
|
100
|
+
end
|
101
|
+
|
102
|
+
if (i % 3) != 0
|
103
|
+
m2.update(salt)
|
104
|
+
end
|
105
|
+
if (i % 7) != 0
|
106
|
+
m2.update(password)
|
107
|
+
end
|
108
|
+
|
109
|
+
if (i & 1) != 0
|
110
|
+
m2.update(final)
|
111
|
+
else
|
112
|
+
m2.update(password)
|
113
|
+
end
|
114
|
+
|
115
|
+
final = m2.digest
|
116
|
+
end
|
117
|
+
|
118
|
+
# This is the bit that uses to64() in the original code.
|
119
|
+
|
120
|
+
rearranged = ""
|
121
|
+
|
122
|
+
if defined?("has_ord?".ord)
|
123
|
+
final.extend ImpOrd2String
|
124
|
+
end
|
125
|
+
[ [0, 6, 12], [1, 7, 13], [2, 8, 14], [3, 9, 15], [4, 10, 5] ].each do |a, b, c|
|
126
|
+
|
127
|
+
v = final[a] << 16 | final[b] << 8 | final[c]
|
128
|
+
|
129
|
+
4.times do
|
130
|
+
rearranged += ITOA64[v & 0x3f].chr
|
131
|
+
v >>= 6
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
v = final[11]
|
136
|
+
|
137
|
+
2.times do
|
138
|
+
rearranged += ITOA64[v & 0x3f].chr
|
139
|
+
v >>= 6
|
140
|
+
end
|
141
|
+
|
142
|
+
magic + salt + '$' + rearranged
|
143
|
+
end
|
144
|
+
|
145
|
+
# Check the validity of a password against an hashed string.
|
146
|
+
#
|
147
|
+
# password - The pharse that was encrypted. [String]
|
148
|
+
# hash - The cryptogrphic hash. [String]
|
149
|
+
# algo - The algorithm used. [Symbol]
|
150
|
+
#
|
151
|
+
# Returns true if it checks out. [Boolean]
|
152
|
+
def self.check(password, hash, algo = :md5)
|
153
|
+
magic, salt = hash.split('$')[1,2]
|
154
|
+
magic = '$' + magic + '$'
|
155
|
+
self.crypt(password, algo, salt, magic) == hash
|
156
|
+
end
|
157
|
+
|
158
|
+
# Generate a random salt of the given `size`.
|
159
|
+
#
|
160
|
+
# size - The size of the salt. [Integer]
|
161
|
+
#
|
162
|
+
# Returns random salt. [String]
|
163
|
+
def self.generate_salt(size)
|
164
|
+
(1..size).collect { ITOA64[rand(ITOA64.size)].chr }.join("")
|
165
|
+
end
|
166
|
+
|
167
|
+
# # Binary XOR of two strings.
|
168
|
+
# #
|
169
|
+
# # a = xor("\000\000\001\001", "\000\001\000\001")
|
170
|
+
# # b = xor("\003\003\003", "\000\001\002")
|
171
|
+
# #
|
172
|
+
# # a #=> "\000\001\001\000"
|
173
|
+
# # b #=> "\003\002\001"
|
174
|
+
# #
|
175
|
+
# def xor(string1, string2)
|
176
|
+
# a = string1.unpack('C'*(self.length))
|
177
|
+
# b = string2.unpack('C'*(aString.length))
|
178
|
+
# if (b.length < a.length)
|
179
|
+
# (a.length - b.length).times { b << 0 }
|
180
|
+
# end
|
181
|
+
# xor = ""
|
182
|
+
# 0.upto(a.length-1) { |pos|
|
183
|
+
# x = a[pos] ^ b[pos]
|
184
|
+
# xor << x.chr()
|
185
|
+
# }
|
186
|
+
# return(xor)
|
187
|
+
# end
|
188
|
+
end
|
189
|
+
|
data/lib/crypt3.yml
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
---
|
2
|
+
revision: 2013
|
3
|
+
type: ruby
|
4
|
+
sources:
|
5
|
+
- var
|
6
|
+
authors:
|
7
|
+
- name: Thomas Sawyer
|
8
|
+
email: transfire@gmail.com
|
9
|
+
- name: Poul-Henning Kamp
|
10
|
+
organizations:
|
11
|
+
- name: Rubyworks
|
12
|
+
requirements:
|
13
|
+
- groups:
|
14
|
+
- build
|
15
|
+
development: true
|
16
|
+
name: rake
|
17
|
+
- groups:
|
18
|
+
- build
|
19
|
+
development: true
|
20
|
+
name: detroit
|
21
|
+
- groups:
|
22
|
+
- test
|
23
|
+
development: true
|
24
|
+
name: minitest
|
25
|
+
conflicts: []
|
26
|
+
alternatives: []
|
27
|
+
resources:
|
28
|
+
- type: home
|
29
|
+
uri: http://rubyworks.github.com/crypt3
|
30
|
+
label: Homepage
|
31
|
+
- type: code
|
32
|
+
uri: http://github.com/rubyworks/crypt3
|
33
|
+
label: Source Code
|
34
|
+
- type: bugs
|
35
|
+
uri: http://github.com/rubyworks/crypt3/issues
|
36
|
+
label: Issue Tracker
|
37
|
+
repositories:
|
38
|
+
- name: upstream
|
39
|
+
scm: git
|
40
|
+
uri: git://github.com/rubyworks/crypt3.git
|
41
|
+
categories: []
|
42
|
+
copyrights:
|
43
|
+
- holder: ''
|
44
|
+
year: '2002'
|
45
|
+
license: c) Poul-Henning Kamp (BSD-2-Clause
|
46
|
+
customs: []
|
47
|
+
paths:
|
48
|
+
lib:
|
49
|
+
- lib
|
50
|
+
name: crypt3
|
51
|
+
title: Crypt3
|
52
|
+
summary: Crypt3 is a ruby version of crypt(3)
|
53
|
+
created: '2002-06-01'
|
54
|
+
description: |-
|
55
|
+
Crypt3 is a ruby version of crypt(3),
|
56
|
+
a salted one-way hashing of a password.
|
57
|
+
version: 1.1.6
|
58
|
+
date: '2013-08-09'
|
data/test/test_crypt3.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
$:.unshift(File.dirname(__FILE__) + '/../lib')
|
2
|
+
|
3
|
+
require "crypt3.rb"
|
4
|
+
require "minitest/autorun"
|
5
|
+
|
6
|
+
class Crypt3Test < MiniTest::Unit::TestCase
|
7
|
+
|
8
|
+
def array_test(arr, algo)
|
9
|
+
arr.each do |password, hash|
|
10
|
+
assert(Crypt3.check(password, hash, algo))
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_md5
|
15
|
+
a = [
|
16
|
+
[' ', '$1$yiiZbNIH$YiCsHZjcTkYd31wkgW8JF.'],
|
17
|
+
['pass', '$1$YeNsbWdH$wvOF8JdqsoiLix754LTW90'],
|
18
|
+
['____fifteen____', '$1$s9lUWACI$Kk1jtIVVdmT01p0z3b/hw1'],
|
19
|
+
['____sixteen_____', '$1$dL3xbVZI$kkgqhCanLdxODGq14g/tW1'],
|
20
|
+
['____seventeen____', '$1$NaH5na7J$j7y8Iss0hcRbu3kzoJs5V.'],
|
21
|
+
['__________thirty-three___________', '$1$HO7Q6vzJ$yGwp2wbL5D7eOVzOmxpsy.'],
|
22
|
+
['apache', '$apr1$J.w5a/..$IW9y6DR0oO/ADuhlMF5/X1']
|
23
|
+
]
|
24
|
+
array_test(a, :md5)
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_bad_algorithm
|
28
|
+
assert_raises(ArgumentError) do
|
29
|
+
Crypt3.crypt("qsdf", :qsdf)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
metadata
ADDED
@@ -0,0 +1,101 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: crypt3
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.1.6
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Thomas Sawyer
|
8
|
+
- Poul-Henning Kamp
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-08-10 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rake
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - '>='
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '0'
|
21
|
+
type: :development
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - '>='
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: '0'
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: detroit
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - '>='
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '0'
|
35
|
+
type: :development
|
36
|
+
prerelease: false
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - '>='
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '0'
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: minitest
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - '>='
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '0'
|
49
|
+
type: :development
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - '>='
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
56
|
+
description: |-
|
57
|
+
Crypt3 is a ruby version of crypt(3),
|
58
|
+
a salted one-way hashing of a password.
|
59
|
+
email:
|
60
|
+
- transfire@gmail.com
|
61
|
+
executables: []
|
62
|
+
extensions: []
|
63
|
+
extra_rdoc_files:
|
64
|
+
- LICENSE.txt
|
65
|
+
- README.md
|
66
|
+
- HISTORY.md
|
67
|
+
files:
|
68
|
+
- .index
|
69
|
+
- .yardopts
|
70
|
+
- lib/crypt3.rb
|
71
|
+
- lib/crypt3.yml
|
72
|
+
- test/test_crypt3.rb
|
73
|
+
- LICENSE.txt
|
74
|
+
- README.md
|
75
|
+
- HISTORY.md
|
76
|
+
homepage: http://rubyworks.github.com/crypt3
|
77
|
+
licenses:
|
78
|
+
- c) Poul-Henning Kamp (BSD-2-Clause
|
79
|
+
metadata: {}
|
80
|
+
post_install_message:
|
81
|
+
rdoc_options: []
|
82
|
+
require_paths:
|
83
|
+
- lib
|
84
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - '>='
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '0'
|
89
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
90
|
+
requirements:
|
91
|
+
- - '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
requirements: []
|
95
|
+
rubyforge_project:
|
96
|
+
rubygems_version: 2.0.3
|
97
|
+
signing_key:
|
98
|
+
specification_version: 4
|
99
|
+
summary: Crypt3 is a ruby version of crypt(3)
|
100
|
+
test_files:
|
101
|
+
- test/test_crypt3.rb
|