bcrypt 3.1.12.rc1-java → 3.1.13-java
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 +5 -5
- data/.travis.yml +3 -7
- data/CHANGELOG +7 -1
- data/Gemfile.lock +15 -22
- data/README.md +17 -15
- data/Rakefile +0 -27
- data/appveyor.yml +32 -32
- data/bcrypt.gemspec +1 -3
- data/ext/jruby/bcrypt_jruby/BCrypt.java +524 -351
- data/ext/mri/crypt.h +12 -1
- data/ext/mri/crypt_blowfish.c +265 -144
- data/ext/mri/crypt_blowfish.h +27 -0
- data/ext/mri/crypt_gensalt.c +26 -13
- data/ext/mri/crypt_gensalt.h +30 -0
- data/ext/mri/extconf.rb +6 -0
- data/ext/mri/ow-crypt.h +25 -17
- data/ext/mri/wrapper.c +335 -46
- data/ext/mri/x86.S +203 -0
- data/lib/bcrypt.rb +1 -6
- data/lib/bcrypt/engine.rb +4 -4
- data/lib/bcrypt/password.rb +1 -1
- data/spec/bcrypt/engine_spec.rb +67 -2
- metadata +8 -19
data/ext/mri/x86.S
ADDED
@@ -0,0 +1,203 @@
|
|
1
|
+
/*
|
2
|
+
* Written by Solar Designer <solar at openwall.com> in 1998-2010.
|
3
|
+
* No copyright is claimed, and the software is hereby placed in the public
|
4
|
+
* domain. In case this attempt to disclaim copyright and place the software
|
5
|
+
* in the public domain is deemed null and void, then the software is
|
6
|
+
* Copyright (c) 1998-2010 Solar Designer and it is hereby released to the
|
7
|
+
* general public under the following terms:
|
8
|
+
*
|
9
|
+
* Redistribution and use in source and binary forms, with or without
|
10
|
+
* modification, are permitted.
|
11
|
+
*
|
12
|
+
* There's ABSOLUTELY NO WARRANTY, express or implied.
|
13
|
+
*
|
14
|
+
* See crypt_blowfish.c for more information.
|
15
|
+
*/
|
16
|
+
|
17
|
+
#ifdef __i386__
|
18
|
+
|
19
|
+
#if defined(__OpenBSD__) && !defined(__ELF__)
|
20
|
+
#define UNDERSCORES
|
21
|
+
#define ALIGN_LOG
|
22
|
+
#endif
|
23
|
+
|
24
|
+
#if defined(__CYGWIN32__) || defined(__MINGW32__)
|
25
|
+
#define UNDERSCORES
|
26
|
+
#endif
|
27
|
+
|
28
|
+
#ifdef __DJGPP__
|
29
|
+
#define UNDERSCORES
|
30
|
+
#define ALIGN_LOG
|
31
|
+
#endif
|
32
|
+
|
33
|
+
#ifdef UNDERSCORES
|
34
|
+
#define _BF_body_r __BF_body_r
|
35
|
+
#endif
|
36
|
+
|
37
|
+
#ifdef ALIGN_LOG
|
38
|
+
#define DO_ALIGN(log) .align (log)
|
39
|
+
#elif defined(DUMBAS)
|
40
|
+
#define DO_ALIGN(log) .align 1 << log
|
41
|
+
#else
|
42
|
+
#define DO_ALIGN(log) .align (1 << (log))
|
43
|
+
#endif
|
44
|
+
|
45
|
+
#define BF_FRAME 0x200
|
46
|
+
#define ctx %esp
|
47
|
+
|
48
|
+
#define BF_ptr (ctx)
|
49
|
+
|
50
|
+
#define S(N, r) N+BF_FRAME(ctx,r,4)
|
51
|
+
#ifdef DUMBAS
|
52
|
+
#define P(N) 0x1000+N+N+N+N+BF_FRAME(ctx)
|
53
|
+
#else
|
54
|
+
#define P(N) 0x1000+4*N+BF_FRAME(ctx)
|
55
|
+
#endif
|
56
|
+
|
57
|
+
/*
|
58
|
+
* This version of the assembly code is optimized primarily for the original
|
59
|
+
* Intel Pentium but is also careful to avoid partial register stalls on the
|
60
|
+
* Pentium Pro family of processors (tested up to Pentium III Coppermine).
|
61
|
+
*
|
62
|
+
* It is possible to do 15% faster on the Pentium Pro family and probably on
|
63
|
+
* many non-Intel x86 processors, but, unfortunately, that would make things
|
64
|
+
* twice slower for the original Pentium.
|
65
|
+
*
|
66
|
+
* An additional 2% speedup may be achieved with non-reentrant code.
|
67
|
+
*/
|
68
|
+
|
69
|
+
#define L %esi
|
70
|
+
#define R %edi
|
71
|
+
#define tmp1 %eax
|
72
|
+
#define tmp1_lo %al
|
73
|
+
#define tmp2 %ecx
|
74
|
+
#define tmp2_hi %ch
|
75
|
+
#define tmp3 %edx
|
76
|
+
#define tmp3_lo %dl
|
77
|
+
#define tmp4 %ebx
|
78
|
+
#define tmp4_hi %bh
|
79
|
+
#define tmp5 %ebp
|
80
|
+
|
81
|
+
.text
|
82
|
+
|
83
|
+
#define BF_ROUND(L, R, N) \
|
84
|
+
xorl L,tmp2; \
|
85
|
+
xorl tmp1,tmp1; \
|
86
|
+
movl tmp2,L; \
|
87
|
+
shrl $16,tmp2; \
|
88
|
+
movl L,tmp4; \
|
89
|
+
movb tmp2_hi,tmp1_lo; \
|
90
|
+
andl $0xFF,tmp2; \
|
91
|
+
movb tmp4_hi,tmp3_lo; \
|
92
|
+
andl $0xFF,tmp4; \
|
93
|
+
movl S(0,tmp1),tmp1; \
|
94
|
+
movl S(0x400,tmp2),tmp5; \
|
95
|
+
addl tmp5,tmp1; \
|
96
|
+
movl S(0x800,tmp3),tmp5; \
|
97
|
+
xorl tmp5,tmp1; \
|
98
|
+
movl S(0xC00,tmp4),tmp5; \
|
99
|
+
addl tmp1,tmp5; \
|
100
|
+
movl 4+P(N),tmp2; \
|
101
|
+
xorl tmp5,R
|
102
|
+
|
103
|
+
#define BF_ENCRYPT_START \
|
104
|
+
BF_ROUND(L, R, 0); \
|
105
|
+
BF_ROUND(R, L, 1); \
|
106
|
+
BF_ROUND(L, R, 2); \
|
107
|
+
BF_ROUND(R, L, 3); \
|
108
|
+
BF_ROUND(L, R, 4); \
|
109
|
+
BF_ROUND(R, L, 5); \
|
110
|
+
BF_ROUND(L, R, 6); \
|
111
|
+
BF_ROUND(R, L, 7); \
|
112
|
+
BF_ROUND(L, R, 8); \
|
113
|
+
BF_ROUND(R, L, 9); \
|
114
|
+
BF_ROUND(L, R, 10); \
|
115
|
+
BF_ROUND(R, L, 11); \
|
116
|
+
BF_ROUND(L, R, 12); \
|
117
|
+
BF_ROUND(R, L, 13); \
|
118
|
+
BF_ROUND(L, R, 14); \
|
119
|
+
BF_ROUND(R, L, 15); \
|
120
|
+
movl BF_ptr,tmp5; \
|
121
|
+
xorl L,tmp2; \
|
122
|
+
movl P(17),L
|
123
|
+
|
124
|
+
#define BF_ENCRYPT_END \
|
125
|
+
xorl R,L; \
|
126
|
+
movl tmp2,R
|
127
|
+
|
128
|
+
DO_ALIGN(5)
|
129
|
+
.globl _BF_body_r
|
130
|
+
_BF_body_r:
|
131
|
+
movl 4(%esp),%eax
|
132
|
+
pushl %ebp
|
133
|
+
pushl %ebx
|
134
|
+
pushl %esi
|
135
|
+
pushl %edi
|
136
|
+
subl $BF_FRAME-8,%eax
|
137
|
+
xorl L,L
|
138
|
+
cmpl %esp,%eax
|
139
|
+
ja BF_die
|
140
|
+
xchgl %eax,%esp
|
141
|
+
xorl R,R
|
142
|
+
pushl %eax
|
143
|
+
leal 0x1000+BF_FRAME-4(ctx),%eax
|
144
|
+
movl 0x1000+BF_FRAME-4(ctx),tmp2
|
145
|
+
pushl %eax
|
146
|
+
xorl tmp3,tmp3
|
147
|
+
BF_loop_P:
|
148
|
+
BF_ENCRYPT_START
|
149
|
+
addl $8,tmp5
|
150
|
+
BF_ENCRYPT_END
|
151
|
+
leal 0x1000+18*4+BF_FRAME(ctx),tmp1
|
152
|
+
movl tmp5,BF_ptr
|
153
|
+
cmpl tmp5,tmp1
|
154
|
+
movl L,-8(tmp5)
|
155
|
+
movl R,-4(tmp5)
|
156
|
+
movl P(0),tmp2
|
157
|
+
ja BF_loop_P
|
158
|
+
leal BF_FRAME(ctx),tmp5
|
159
|
+
xorl tmp3,tmp3
|
160
|
+
movl tmp5,BF_ptr
|
161
|
+
BF_loop_S:
|
162
|
+
BF_ENCRYPT_START
|
163
|
+
BF_ENCRYPT_END
|
164
|
+
movl P(0),tmp2
|
165
|
+
movl L,(tmp5)
|
166
|
+
movl R,4(tmp5)
|
167
|
+
BF_ENCRYPT_START
|
168
|
+
BF_ENCRYPT_END
|
169
|
+
movl P(0),tmp2
|
170
|
+
movl L,8(tmp5)
|
171
|
+
movl R,12(tmp5)
|
172
|
+
BF_ENCRYPT_START
|
173
|
+
BF_ENCRYPT_END
|
174
|
+
movl P(0),tmp2
|
175
|
+
movl L,16(tmp5)
|
176
|
+
movl R,20(tmp5)
|
177
|
+
BF_ENCRYPT_START
|
178
|
+
addl $32,tmp5
|
179
|
+
BF_ENCRYPT_END
|
180
|
+
leal 0x1000+BF_FRAME(ctx),tmp1
|
181
|
+
movl tmp5,BF_ptr
|
182
|
+
cmpl tmp5,tmp1
|
183
|
+
movl P(0),tmp2
|
184
|
+
movl L,-8(tmp5)
|
185
|
+
movl R,-4(tmp5)
|
186
|
+
ja BF_loop_S
|
187
|
+
movl 4(%esp),%esp
|
188
|
+
popl %edi
|
189
|
+
popl %esi
|
190
|
+
popl %ebx
|
191
|
+
popl %ebp
|
192
|
+
ret
|
193
|
+
|
194
|
+
BF_die:
|
195
|
+
/* Oops, need to re-compile with a larger BF_FRAME. */
|
196
|
+
hlt
|
197
|
+
jmp BF_die
|
198
|
+
|
199
|
+
#endif
|
200
|
+
|
201
|
+
#if defined(__ELF__) && defined(__linux__)
|
202
|
+
.section .note.GNU-stack,"",@progbits
|
203
|
+
#endif
|
data/lib/bcrypt.rb
CHANGED
data/lib/bcrypt/engine.rb
CHANGED
@@ -2,7 +2,7 @@ module BCrypt
|
|
2
2
|
# A Ruby wrapper for the bcrypt() C extension calls and the Java calls.
|
3
3
|
class Engine
|
4
4
|
# The default computational expense parameter.
|
5
|
-
DEFAULT_COST =
|
5
|
+
DEFAULT_COST = 12
|
6
6
|
# The minimum cost supported by the algorithm.
|
7
7
|
MIN_COST = 4
|
8
8
|
# Maximum possible size of bcrypt() salts.
|
@@ -28,8 +28,8 @@ module BCrypt
|
|
28
28
|
#
|
29
29
|
# Example:
|
30
30
|
#
|
31
|
-
# BCrypt::Engine::DEFAULT_COST #=>
|
32
|
-
# BCrypt::Password.create('secret').cost #=>
|
31
|
+
# BCrypt::Engine::DEFAULT_COST #=> 12
|
32
|
+
# BCrypt::Password.create('secret').cost #=> 12
|
33
33
|
#
|
34
34
|
# BCrypt::Engine.cost = 8
|
35
35
|
# BCrypt::Password.create('secret').cost #=> 8
|
@@ -46,7 +46,7 @@ module BCrypt
|
|
46
46
|
if valid_secret?(secret)
|
47
47
|
if valid_salt?(salt)
|
48
48
|
if RUBY_PLATFORM == "java"
|
49
|
-
Java.bcrypt_jruby.BCrypt.hashpw(secret.to_s, salt.to_s)
|
49
|
+
Java.bcrypt_jruby.BCrypt.hashpw(secret.to_s.to_java_bytes, salt.to_s)
|
50
50
|
else
|
51
51
|
__bc_crypt(secret.to_s, salt)
|
52
52
|
end
|
data/lib/bcrypt/password.rb
CHANGED
@@ -7,7 +7,7 @@ module BCrypt
|
|
7
7
|
#
|
8
8
|
# # hash a user's password
|
9
9
|
# @password = Password.create("my grand secret")
|
10
|
-
# @password #=> "$2a$
|
10
|
+
# @password #=> "$2a$12$C5.FIvVDS9W4AYZ/Ib37YuWd/7ozp1UaMhU28UKrfSxp2oDchbi3K"
|
11
11
|
#
|
12
12
|
# # store it safely
|
13
13
|
# @user.update_attribute(:password, @password)
|
data/spec/bcrypt/engine_spec.rb
CHANGED
@@ -67,13 +67,78 @@ describe "Generating BCrypt hashes" do
|
|
67
67
|
end
|
68
68
|
|
69
69
|
specify "should be interoperable with other implementations" do
|
70
|
-
# test vectors from the OpenWall implementation <http://www.openwall.com/crypt/>
|
71
70
|
test_vectors = [
|
71
|
+
# test vectors from the OpenWall implementation <https://www.openwall.com/crypt/>, found in wrapper.c
|
72
72
|
["U*U", "$2a$05$CCCCCCCCCCCCCCCCCCCCC.", "$2a$05$CCCCCCCCCCCCCCCCCCCCC.E5YPO9kmyuRGyh0XouQYb4YMJKvyOeW"],
|
73
73
|
["U*U*", "$2a$05$CCCCCCCCCCCCCCCCCCCCC.", "$2a$05$CCCCCCCCCCCCCCCCCCCCC.VGOzA784oUp/Z0DY336zx7pLYAy0lwK"],
|
74
74
|
["U*U*U", "$2a$05$XXXXXXXXXXXXXXXXXXXXXO", "$2a$05$XXXXXXXXXXXXXXXXXXXXXOAcXxm9kjPGEMsLznoKqmqw7tc8WCx4a"],
|
75
|
+
["0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789chars after 72 are ignored", "$2a$05$abcdefghijklmnopqrstuu", "$2a$05$abcdefghijklmnopqrstuu5s2v8.iXieOjg/.AySBTTZIIVFJeBui"],
|
76
|
+
["\xa3", "$2x$05$/OK.fbVrR/bpIqNJ5ianF.", "$2x$05$/OK.fbVrR/bpIqNJ5ianF.CE5elHaaO4EbggVDjb8P19RukzXSM3e"],
|
77
|
+
["\xff\xff\xa3", "$2x$05$/OK.fbVrR/bpIqNJ5ianF.", "$2x$05$/OK.fbVrR/bpIqNJ5ianF.CE5elHaaO4EbggVDjb8P19RukzXSM3e"],
|
78
|
+
["\xff\xff\xa3", "$2y$05$/OK.fbVrR/bpIqNJ5ianF.", "$2y$05$/OK.fbVrR/bpIqNJ5ianF.CE5elHaaO4EbggVDjb8P19RukzXSM3e"],
|
79
|
+
["\xff\xff\xa3", "$2a$05$/OK.fbVrR/bpIqNJ5ianF.", "$2a$05$/OK.fbVrR/bpIqNJ5ianF.nqd1wy.pTMdcvrRWxyiGL2eMz.2a85."],
|
80
|
+
["\xff\xff\xa3", "$2b$05$/OK.fbVrR/bpIqNJ5ianF.", "$2b$05$/OK.fbVrR/bpIqNJ5ianF.CE5elHaaO4EbggVDjb8P19RukzXSM3e"],
|
81
|
+
["\xa3", "$2y$05$/OK.fbVrR/bpIqNJ5ianF.", "$2y$05$/OK.fbVrR/bpIqNJ5ianF.Sa7shbm4.OzKpvFnX1pQLmQW96oUlCq"],
|
82
|
+
["\xa3", "$2a$05$/OK.fbVrR/bpIqNJ5ianF.", "$2a$05$/OK.fbVrR/bpIqNJ5ianF.Sa7shbm4.OzKpvFnX1pQLmQW96oUlCq"],
|
83
|
+
["\xa3", "$2b$05$/OK.fbVrR/bpIqNJ5ianF.", "$2b$05$/OK.fbVrR/bpIqNJ5ianF.Sa7shbm4.OzKpvFnX1pQLmQW96oUlCq"],
|
84
|
+
["1\xa3" "345", "$2x$05$/OK.fbVrR/bpIqNJ5ianF.", "$2x$05$/OK.fbVrR/bpIqNJ5ianF.o./n25XVfn6oAPaUvHe.Csk4zRfsYPi"],
|
85
|
+
["\xff\xa3" "345", "$2x$05$/OK.fbVrR/bpIqNJ5ianF.", "$2x$05$/OK.fbVrR/bpIqNJ5ianF.o./n25XVfn6oAPaUvHe.Csk4zRfsYPi"],
|
86
|
+
["\xff\xa3" "34" "\xff\xff\xff\xa3" "345", "$2x$05$/OK.fbVrR/bpIqNJ5ianF.", "$2x$05$/OK.fbVrR/bpIqNJ5ianF.o./n25XVfn6oAPaUvHe.Csk4zRfsYPi"],
|
87
|
+
["\xff\xa3" "34" "\xff\xff\xff\xa3" "345", "$2y$05$/OK.fbVrR/bpIqNJ5ianF.", "$2y$05$/OK.fbVrR/bpIqNJ5ianF.o./n25XVfn6oAPaUvHe.Csk4zRfsYPi"],
|
88
|
+
["\xff\xa3" "34" "\xff\xff\xff\xa3" "345", "$2a$05$/OK.fbVrR/bpIqNJ5ianF.", "$2a$05$/OK.fbVrR/bpIqNJ5ianF.ZC1JEJ8Z4gPfpe1JOr/oyPXTWl9EFd."],
|
89
|
+
["\xff\xa3" "345", "$2y$05$/OK.fbVrR/bpIqNJ5ianF.", "$2y$05$/OK.fbVrR/bpIqNJ5ianF.nRht2l/HRhr6zmCp9vYUvvsqynflf9e"],
|
90
|
+
["\xff\xa3" "345", "$2a$05$/OK.fbVrR/bpIqNJ5ianF.", "$2a$05$/OK.fbVrR/bpIqNJ5ianF.nRht2l/HRhr6zmCp9vYUvvsqynflf9e"],
|
91
|
+
["\xa3" "ab", "$2a$05$/OK.fbVrR/bpIqNJ5ianF.", "$2a$05$/OK.fbVrR/bpIqNJ5ianF.6IflQkJytoRVc1yuaNtHfiuq.FRlSIS"],
|
92
|
+
["\xa3" "ab", "$2x$05$/OK.fbVrR/bpIqNJ5ianF.", "$2x$05$/OK.fbVrR/bpIqNJ5ianF.6IflQkJytoRVc1yuaNtHfiuq.FRlSIS"],
|
93
|
+
["\xa3" "ab", "$2y$05$/OK.fbVrR/bpIqNJ5ianF.", "$2y$05$/OK.fbVrR/bpIqNJ5ianF.6IflQkJytoRVc1yuaNtHfiuq.FRlSIS"],
|
94
|
+
["\xd1\x91", "$2x$05$6bNw2HLQYeqHYyBfLMsv/O", "$2x$05$6bNw2HLQYeqHYyBfLMsv/OiwqTymGIGzFsA4hOTWebfehXHNprcAS"],
|
95
|
+
["\xd0\xc1\xd2\xcf\xcc\xd8", "$2x$05$6bNw2HLQYeqHYyBfLMsv/O", "$2x$05$6bNw2HLQYeqHYyBfLMsv/O9LIGgn8OMzuDoHfof8AQimSGfcSWxnS"],
|
96
|
+
["\xaa"*72+"chars after 72 are ignored as usual", "$2a$05$/OK.fbVrR/bpIqNJ5ianF.", "$2a$05$/OK.fbVrR/bpIqNJ5ianF.swQOIzjOiJ9GHEPuhEkvqrUyvWhEMx6"],
|
97
|
+
["\xaa\x55"*36, "$2a$05$/OK.fbVrR/bpIqNJ5ianF.", "$2a$05$/OK.fbVrR/bpIqNJ5ianF.R9xrDjiycxMbQE2bp.vgqlYpW5wx2yy"],
|
98
|
+
["\x55\xaa\xff"*24, "$2a$05$/OK.fbVrR/bpIqNJ5ianF.", "$2a$05$/OK.fbVrR/bpIqNJ5ianF.9tQZzcJfm3uj2NvJ/n5xkhpqLrMpWCe"],
|
75
99
|
["", "$2a$05$CCCCCCCCCCCCCCCCCCCCC.", "$2a$05$CCCCCCCCCCCCCCCCCCCCC.7uG0VCzI2bS7j6ymqJi9CdcdxiRTWNy"],
|
76
|
-
|
100
|
+
|
101
|
+
# test vectors from the Java implementation, found in https://github.com/spring-projects/spring-security/blob/master/crypto/src/test/java/org/springframework/security/crypto/bcrypt/BCryptTests.java
|
102
|
+
["", "$2a$06$DCq7YPn5Rq63x1Lad4cll.", "$2a$06$DCq7YPn5Rq63x1Lad4cll.TV4S6ytwfsfvkgY8jIucDrjc8deX1s."],
|
103
|
+
["", "$2a$08$HqWuK6/Ng6sg9gQzbLrgb.", "$2a$08$HqWuK6/Ng6sg9gQzbLrgb.Tl.ZHfXLhvt/SgVyWhQqgqcZ7ZuUtye"],
|
104
|
+
["", "$2a$10$k1wbIrmNyFAPwPVPSVa/ze", "$2a$10$k1wbIrmNyFAPwPVPSVa/zecw2BCEnBwVS2GbrmgzxFUOqW9dk4TCW"],
|
105
|
+
["", "$2a$12$k42ZFHFWqBp3vWli.nIn8u", "$2a$12$k42ZFHFWqBp3vWli.nIn8uYyIkbvYRvodzbfbK18SSsY.CsIQPlxO"],
|
106
|
+
["", "$2b$06$8eVN9RiU8Yki430X.wBvN.", "$2b$06$8eVN9RiU8Yki430X.wBvN.LWaqh2962emLVSVXVZIXJvDYLsV0oFu"],
|
107
|
+
["", "$2b$06$NlgfNgpIc6GlHciCkMEW8u", "$2b$06$NlgfNgpIc6GlHciCkMEW8uKOBsyvAp7QwlHpysOlKdtyEw50WQua2"],
|
108
|
+
["", "$2y$06$mFDtkz6UN7B3GZ2qi2hhaO", "$2y$06$mFDtkz6UN7B3GZ2qi2hhaO3OFWzNEdcY84ELw6iHCPruuQfSAXBLK"],
|
109
|
+
["", "$2y$06$88kSqVttBx.e9iXTPCLa5u", "$2y$06$88kSqVttBx.e9iXTPCLa5uFPrVFjfLH4D.KcO6pBiAmvUkvdg0EYy"],
|
110
|
+
["a", "$2a$06$m0CrhHm10qJ3lXRY.5zDGO", "$2a$06$m0CrhHm10qJ3lXRY.5zDGO3rS2KdeeWLuGmsfGlMfOxih58VYVfxe"],
|
111
|
+
["a", "$2a$08$cfcvVd2aQ8CMvoMpP2EBfe", "$2a$08$cfcvVd2aQ8CMvoMpP2EBfeodLEkkFJ9umNEfPD18.hUF62qqlC/V."],
|
112
|
+
["a", "$2a$10$k87L/MF28Q673VKh8/cPi.", "$2a$10$k87L/MF28Q673VKh8/cPi.SUl7MU/rWuSiIDDFayrKk/1tBsSQu4u"],
|
113
|
+
["a", "$2a$12$8NJH3LsPrANStV6XtBakCe", "$2a$12$8NJH3LsPrANStV6XtBakCez0cKHXVxmvxIlcz785vxAIZrihHZpeS"],
|
114
|
+
["a", "$2b$06$ehKGYiS4wt2HAr7KQXS5z.", "$2b$06$ehKGYiS4wt2HAr7KQXS5z.OaRjB4jHO7rBHJKlGXbqEH3QVJfO7iO"],
|
115
|
+
["a", "$2b$06$PWxFFHA3HiCD46TNOZh30e", "$2b$06$PWxFFHA3HiCD46TNOZh30eNto1hg5uM9tHBlI4q/b03SW/gGKUYk6"],
|
116
|
+
["a", "$2y$06$LUdD6/aD0e/UbnxVAVbvGu", "$2y$06$LUdD6/aD0e/UbnxVAVbvGuUmIoJ3l/OK94ThhadpMWwKC34LrGEey"],
|
117
|
+
["a", "$2y$06$eqgY.T2yloESMZxgp76deO", "$2y$06$eqgY.T2yloESMZxgp76deOROa7nzXDxbO0k.PJvuClTa.Vu1AuemG"],
|
118
|
+
["abc", "$2a$06$If6bvum7DFjUnE9p2uDeDu", "$2a$06$If6bvum7DFjUnE9p2uDeDu0YHzrHM6tf.iqN8.yx.jNN1ILEf7h0i"],
|
119
|
+
["abc", "$2a$08$Ro0CUfOqk6cXEKf3dyaM7O", "$2a$08$Ro0CUfOqk6cXEKf3dyaM7OhSCvnwM9s4wIX9JeLapehKK5YdLxKcm"],
|
120
|
+
["abc", "$2a$10$WvvTPHKwdBJ3uk0Z37EMR.", "$2a$10$WvvTPHKwdBJ3uk0Z37EMR.hLA2W6N9AEBhEgrAOljy2Ae5MtaSIUi"],
|
121
|
+
["abc", "$2a$12$EXRkfkdmXn2gzds2SSitu.", "$2a$12$EXRkfkdmXn2gzds2SSitu.MW9.gAVqa9eLS1//RYtYCmB1eLHg.9q"],
|
122
|
+
["abc", "$2b$06$5FyQoicpbox1xSHFfhhdXu", "$2b$06$5FyQoicpbox1xSHFfhhdXuR2oxLpO1rYsQh5RTkI/9.RIjtoF0/ta"],
|
123
|
+
["abc", "$2b$06$1kJyuho8MCVP3HHsjnRMkO", "$2b$06$1kJyuho8MCVP3HHsjnRMkO1nvCOaKTqLnjG2TX1lyMFbXH/aOkgc."],
|
124
|
+
["abc", "$2y$06$ACfku9dT6.H8VjdKb8nhlu", "$2y$06$ACfku9dT6.H8VjdKb8nhluaoBmhJyK7GfoNScEfOfrJffUxoUeCjK"],
|
125
|
+
["abc", "$2y$06$9JujYcoWPmifvFA3RUP90e", "$2y$06$9JujYcoWPmifvFA3RUP90e5rSEHAb5Ye6iv3.G9ikiHNv5cxjNEse"],
|
126
|
+
["abcdefghijklmnopqrstuvwxyz", "$2a$06$.rCVZVOThsIa97pEDOxvGu", "$2a$06$.rCVZVOThsIa97pEDOxvGuRRgzG64bvtJ0938xuqzv18d3ZpQhstC"],
|
127
|
+
["abcdefghijklmnopqrstuvwxyz", "$2a$08$aTsUwsyowQuzRrDqFflhge", "$2a$08$aTsUwsyowQuzRrDqFflhgekJ8d9/7Z3GV3UcgvzQW3J5zMyrTvlz."],
|
128
|
+
["abcdefghijklmnopqrstuvwxyz", "$2a$10$fVH8e28OQRj9tqiDXs1e1u", "$2a$10$fVH8e28OQRj9tqiDXs1e1uxpsjN0c7II7YPKXua2NAKYvM6iQk7dq"],
|
129
|
+
["abcdefghijklmnopqrstuvwxyz", "$2a$12$D4G5f18o7aMMfwasBL7Gpu", "$2a$12$D4G5f18o7aMMfwasBL7GpuQWuP3pkrZrOAnqP.bmezbMng.QwJ/pG"],
|
130
|
+
["abcdefghijklmnopqrstuvwxyz", "$2b$06$O8E89AQPj1zJQA05YvIAU.", "$2b$06$O8E89AQPj1zJQA05YvIAU.hMpj25BXri1bupl/Q7CJMlpLwZDNBoO"],
|
131
|
+
["abcdefghijklmnopqrstuvwxyz", "$2b$06$PDqIWr./o/P3EE/P.Q0A/u", "$2b$06$PDqIWr./o/P3EE/P.Q0A/uFg86WL/PXTbaW267TDALEwDylqk00Z."],
|
132
|
+
["abcdefghijklmnopqrstuvwxyz", "$2y$06$34MG90ZLah8/ZNr3ltlHCu", "$2y$06$34MG90ZLah8/ZNr3ltlHCuz6bachF8/3S5jTuzF1h2qg2cUk11sFW"],
|
133
|
+
["abcdefghijklmnopqrstuvwxyz", "$2y$06$AK.hSLfMyw706iEW24i68u", "$2y$06$AK.hSLfMyw706iEW24i68uKAc2yorPTrB0cimvjJHEBUrPkOq7VvG"],
|
134
|
+
["~!@#$%^&*() ~!@#$%^&*()PNBFRD", "$2a$06$fPIsBO8qRqkjj273rfaOI.", "$2a$06$fPIsBO8qRqkjj273rfaOI.HtSV9jLDpTbZn782DC6/t7qT67P6FfO"],
|
135
|
+
["~!@#$%^&*() ~!@#$%^&*()PNBFRD", "$2a$08$Eq2r4G/76Wv39MzSX262hu", "$2a$08$Eq2r4G/76Wv39MzSX262huzPz612MZiYHVUJe/OcOql2jo4.9UxTW"],
|
136
|
+
["~!@#$%^&*() ~!@#$%^&*()PNBFRD", "$2a$10$LgfYWkbzEvQ4JakH7rOvHe", "$2a$10$LgfYWkbzEvQ4JakH7rOvHe0y8pHKF9OaFgwUZ2q7W2FFZmZzJYlfS"],
|
137
|
+
["~!@#$%^&*() ~!@#$%^&*()PNBFRD", "$2a$12$WApznUOJfkEGSmYRfnkrPO", "$2a$12$WApznUOJfkEGSmYRfnkrPOr466oFDCaj4b6HY3EXGvfxm43seyhgC"],
|
138
|
+
["~!@#$%^&*() ~!@#$%^&*()PNBFRD", "$2b$06$FGWA8OlY6RtQhXBXuCJ8Wu", "$2b$06$FGWA8OlY6RtQhXBXuCJ8WusVipRI15cWOgJK8MYpBHEkktMfbHRIG"],
|
139
|
+
["~!@#$%^&*() ~!@#$%^&*()PNBFRD", "$2b$06$G6aYU7UhUEUDJBdTgq3CRe", "$2b$06$G6aYU7UhUEUDJBdTgq3CRekiopCN4O4sNitFXrf5NUscsVZj3a2r6"],
|
140
|
+
["~!@#$%^&*() ~!@#$%^&*()PNBFRD", "$2y$06$sYDFHqOcXTjBgOsqC0WCKe", "$2y$06$sYDFHqOcXTjBgOsqC0WCKeMd3T1UhHuWQSxncLGtXDLMrcE6vFDti"],
|
141
|
+
["~!@#$%^&*() ~!@#$%^&*()PNBFRD", "$2y$06$6Xm0gCw4g7ZNDCEp4yTise", "$2y$06$6Xm0gCw4g7ZNDCEp4yTisez0kSdpXEl66MvdxGidnmChIe8dFmMnq"]
|
77
142
|
]
|
78
143
|
for secret, salt, test_vector in test_vectors
|
79
144
|
expect(BCrypt::Engine.hash_secret(secret, salt)).to eql(test_vector)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bcrypt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.1.
|
4
|
+
version: 3.1.13
|
5
5
|
platform: java
|
6
6
|
authors:
|
7
7
|
- Coda Hale
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-05-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
@@ -38,20 +38,6 @@ dependencies:
|
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '3'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
requirement: !ruby/object:Gem::Requirement
|
43
|
-
requirements:
|
44
|
-
- - "~>"
|
45
|
-
- !ruby/object:Gem::Version
|
46
|
-
version: '3.12'
|
47
|
-
name: rdoc
|
48
|
-
prerelease: false
|
49
|
-
type: :development
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - "~>"
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '3.12'
|
55
41
|
description: |2
|
56
42
|
bcrypt() is a sophisticated and secure hash algorithm designed by The OpenBSD project
|
57
43
|
for hashing passwords. The bcrypt Ruby gem provides a simple wrapper for safely handling
|
@@ -84,10 +70,13 @@ files:
|
|
84
70
|
- ext/mri/crypt.c
|
85
71
|
- ext/mri/crypt.h
|
86
72
|
- ext/mri/crypt_blowfish.c
|
73
|
+
- ext/mri/crypt_blowfish.h
|
87
74
|
- ext/mri/crypt_gensalt.c
|
75
|
+
- ext/mri/crypt_gensalt.h
|
88
76
|
- ext/mri/extconf.rb
|
89
77
|
- ext/mri/ow-crypt.h
|
90
78
|
- ext/mri/wrapper.c
|
79
|
+
- ext/mri/x86.S
|
91
80
|
- lib/bcrypt.rb
|
92
81
|
- lib/bcrypt/engine.rb
|
93
82
|
- lib/bcrypt/error.rb
|
@@ -119,12 +108,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
119
108
|
version: '0'
|
120
109
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
121
110
|
requirements:
|
122
|
-
- - "
|
111
|
+
- - ">="
|
123
112
|
- !ruby/object:Gem::Version
|
124
|
-
version:
|
113
|
+
version: '0'
|
125
114
|
requirements: []
|
126
115
|
rubyforge_project:
|
127
|
-
rubygems_version: 2.6
|
116
|
+
rubygems_version: 2.7.6
|
128
117
|
signing_key:
|
129
118
|
specification_version: 4
|
130
119
|
summary: OpenBSD's bcrypt() password hashing algorithm.
|