bcrypt 3.1.17-java → 3.1.19-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 +4 -4
- data/.github/workflows/ruby.yml +4 -2
- data/CHANGELOG +8 -0
- data/README.md +0 -1
- data/Rakefile +2 -2
- data/bcrypt.gemspec +2 -2
- data/ext/mri/bcrypt_ext.c +74 -17
- data/lib/bcrypt/engine.rb +7 -0
- data/lib/bcrypt_ext.jar +0 -0
- data/spec/bcrypt/password_spec.rb +6 -0
- metadata +4 -5
- data/appveyor.yml +0 -50
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 636cc94d86701d3d34c7ba884587e9ff5429d78eb055f15d88104c3b2f006e9a
|
4
|
+
data.tar.gz: 9f67d235f53ea00410bcc0abfec5cb42a6bd22e7c52ae43923e161828d18e43c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4d78ea03482ec52e987617f94a0b5a9108369585961e29746ab8ed65f035b1b40eca0e14137c10dd0a49072312c945e4ecbd91327e21c573d7b7dcd3428e83cf
|
7
|
+
data.tar.gz: f46639b8366442dfbe2ea6db81f56784f4b99443b790392d3e41bd4c6a06f8e16ab26f94fcc9bdca584eee80a1461fcc632eb4ab979a37378808c99a3ce13b47
|
data/.github/workflows/ruby.yml
CHANGED
@@ -30,8 +30,6 @@ jobs:
|
|
30
30
|
- truffleruby-head
|
31
31
|
- mingw
|
32
32
|
exclude:
|
33
|
-
- { os: ubuntu, ruby: jruby }
|
34
|
-
- { os: ubuntu, ruby: jruby-head }
|
35
33
|
- { os: ubuntu, ruby: mingw }
|
36
34
|
- { os: macos, ruby: mingw }
|
37
35
|
- { os: windows, ruby: truffleruby }
|
@@ -46,8 +44,12 @@ jobs:
|
|
46
44
|
with:
|
47
45
|
ruby-version: ${{ matrix.ruby }}
|
48
46
|
bundler-cache: true
|
47
|
+
env:
|
48
|
+
JAVA_OPTS: -Djdk.io.File.enableADS=true
|
49
49
|
- name: Run tests
|
50
50
|
run: bundle exec rake default
|
51
|
+
env:
|
52
|
+
JAVA_OPTS: -Djdk.io.File.enableADS=true
|
51
53
|
|
52
54
|
finish:
|
53
55
|
runs-on: ubuntu-latest
|
data/CHANGELOG
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
3.1.19 June 22 2023
|
2
|
+
- Deprecate passing the third argument to `BCrypt::Engine.hash_secret` [GH #207 by @sergey-alekseev]
|
3
|
+
- Add GC guards so the C compiler won't optimize out references [GH #270]
|
4
|
+
|
5
|
+
3.1.18 May 16 2022
|
6
|
+
- Unlock GVL when calculating hashes and salts [GH #260]
|
7
|
+
- Fix compilation warnings in `ext/mri/bcrypt_ext.c` [GH #261]
|
8
|
+
|
1
9
|
3.1.17 Mar 14 2022
|
2
10
|
- Fix regex in validators to use \A and \z instead of ^ and $ [GH #121]
|
3
11
|
- Truncate secrets greater than 72 bytes in hash_secret [GH #255]
|
data/README.md
CHANGED
@@ -5,7 +5,6 @@ An easy way to keep your users' passwords secure.
|
|
5
5
|
* https://github.com/bcrypt-ruby/bcrypt-ruby/tree/master
|
6
6
|
|
7
7
|
[](https://github.com/bcrypt-ruby/bcrypt-ruby/actions/workflows/ruby.yml)
|
8
|
-
[](https://ci.appveyor.com/project/TJSchuck35975/bcrypt-ruby)
|
9
8
|
|
10
9
|
## Why you should use `bcrypt()`
|
11
10
|
|
data/Rakefile
CHANGED
@@ -50,8 +50,8 @@ end
|
|
50
50
|
if RUBY_PLATFORM =~ /java/
|
51
51
|
Rake::JavaExtensionTask.new('bcrypt_ext', GEMSPEC) do |ext|
|
52
52
|
ext.ext_dir = 'ext/jruby'
|
53
|
-
ext.source_version = "1.
|
54
|
-
ext.target_version = "1.
|
53
|
+
ext.source_version = "1.8"
|
54
|
+
ext.target_version = "1.8"
|
55
55
|
end
|
56
56
|
else
|
57
57
|
Rake::ExtensionTask.new("bcrypt_ext", GEMSPEC) do |ext|
|
data/bcrypt.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'bcrypt'
|
3
|
-
s.version = '3.1.
|
3
|
+
s.version = '3.1.19'
|
4
4
|
|
5
5
|
s.summary = "OpenBSD's bcrypt() password hashing algorithm."
|
6
6
|
s.description = <<-EOF
|
@@ -12,7 +12,7 @@ Gem::Specification.new do |s|
|
|
12
12
|
s.files = `git ls-files`.split("\n")
|
13
13
|
s.require_path = 'lib'
|
14
14
|
|
15
|
-
s.add_development_dependency 'rake-compiler', '~>
|
15
|
+
s.add_development_dependency 'rake-compiler', '~> 1.2.0'
|
16
16
|
s.add_development_dependency 'rspec', '>= 3'
|
17
17
|
|
18
18
|
s.rdoc_options += ['--title', 'bcrypt-ruby', '--line-numbers', '--inline-source', '--main', 'README.md']
|
data/ext/mri/bcrypt_ext.c
CHANGED
@@ -1,53 +1,110 @@
|
|
1
1
|
#include <ruby.h>
|
2
2
|
#include <ow-crypt.h>
|
3
3
|
|
4
|
+
#ifdef HAVE_RUBY_THREAD_H
|
5
|
+
#include <ruby/thread.h>
|
6
|
+
#endif
|
7
|
+
|
4
8
|
static VALUE mBCrypt;
|
5
9
|
static VALUE cBCryptEngine;
|
6
10
|
|
11
|
+
struct bc_salt_args {
|
12
|
+
const char * prefix;
|
13
|
+
unsigned long count;
|
14
|
+
const char * input;
|
15
|
+
int size;
|
16
|
+
};
|
17
|
+
|
18
|
+
static void * bc_salt_nogvl(void * ptr) {
|
19
|
+
struct bc_salt_args * args = ptr;
|
20
|
+
|
21
|
+
return crypt_gensalt_ra(args->prefix, args->count, args->input, args->size);
|
22
|
+
}
|
23
|
+
|
7
24
|
/* Given a logarithmic cost parameter, generates a salt for use with +bc_crypt+.
|
8
25
|
*/
|
9
26
|
static VALUE bc_salt(VALUE self, VALUE prefix, VALUE count, VALUE input) {
|
10
27
|
char * salt;
|
11
28
|
VALUE str_salt;
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
29
|
+
struct bc_salt_args args;
|
30
|
+
|
31
|
+
/* duplicate the parameters for thread safety. If another thread has a
|
32
|
+
* reference to the parameters and mutates them while we are working,
|
33
|
+
* that would be very bad. Duping the strings means that the reference
|
34
|
+
* isn't shared. */
|
35
|
+
prefix = rb_str_new_frozen(prefix);
|
36
|
+
input = rb_str_new_frozen(input);
|
37
|
+
|
38
|
+
args.prefix = StringValueCStr(prefix);
|
39
|
+
args.count = NUM2ULONG(count);
|
40
|
+
args.input = NIL_P(input) ? NULL : StringValuePtr(input);
|
41
|
+
args.size = NIL_P(input) ? 0 : RSTRING_LEN(input);
|
42
|
+
|
43
|
+
#ifdef HAVE_RUBY_THREAD_H
|
44
|
+
salt = rb_thread_call_without_gvl(bc_salt_nogvl, &args, NULL, NULL);
|
45
|
+
#else
|
46
|
+
salt = bc_salt_nogvl((void *)&args);
|
47
|
+
#endif
|
18
48
|
|
19
49
|
if(!salt) return Qnil;
|
20
50
|
|
21
51
|
str_salt = rb_str_new2(salt);
|
52
|
+
|
53
|
+
RB_GC_GUARD(prefix);
|
54
|
+
RB_GC_GUARD(input);
|
22
55
|
free(salt);
|
23
56
|
|
24
57
|
return str_salt;
|
25
58
|
}
|
26
59
|
|
60
|
+
struct bc_crypt_args {
|
61
|
+
const char * key;
|
62
|
+
const char * setting;
|
63
|
+
void * data;
|
64
|
+
int size;
|
65
|
+
};
|
66
|
+
|
67
|
+
static void * bc_crypt_nogvl(void * ptr) {
|
68
|
+
struct bc_crypt_args * args = ptr;
|
69
|
+
|
70
|
+
return crypt_ra(args->key, args->setting, &args->data, &args->size);
|
71
|
+
}
|
72
|
+
|
27
73
|
/* Given a secret and a salt, generates a salted hash (which you can then store safely).
|
28
74
|
*/
|
29
75
|
static VALUE bc_crypt(VALUE self, VALUE key, VALUE setting) {
|
30
76
|
char * value;
|
31
|
-
void * data;
|
32
|
-
int size;
|
33
77
|
VALUE out;
|
34
78
|
|
35
|
-
|
36
|
-
size = 0xDEADBEEF;
|
79
|
+
struct bc_crypt_args args;
|
37
80
|
|
38
81
|
if(NIL_P(key) || NIL_P(setting)) return Qnil;
|
39
82
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
83
|
+
/* duplicate the parameters for thread safety. If another thread has a
|
84
|
+
* reference to the parameters and mutates them while we are working,
|
85
|
+
* that would be very bad. Duping the strings means that the reference
|
86
|
+
* isn't shared. */
|
87
|
+
key = rb_str_new_frozen(key);
|
88
|
+
setting = rb_str_new_frozen(setting);
|
89
|
+
|
90
|
+
args.data = NULL;
|
91
|
+
args.size = 0xDEADBEEF;
|
92
|
+
args.key = NIL_P(key) ? NULL : StringValueCStr(key);
|
93
|
+
args.setting = NIL_P(setting) ? NULL : StringValueCStr(setting);
|
94
|
+
|
95
|
+
#ifdef HAVE_RUBY_THREAD_H
|
96
|
+
value = rb_thread_call_without_gvl(bc_crypt_nogvl, &args, NULL, NULL);
|
97
|
+
#else
|
98
|
+
value = bc_crypt_nogvl((void *)&args);
|
99
|
+
#endif
|
45
100
|
|
46
|
-
if(!value || !data) return Qnil;
|
101
|
+
if(!value || !args.data) return Qnil;
|
47
102
|
|
48
103
|
out = rb_str_new2(value);
|
49
104
|
|
50
|
-
|
105
|
+
RB_GC_GUARD(key);
|
106
|
+
RB_GC_GUARD(setting);
|
107
|
+
free(args.data);
|
51
108
|
|
52
109
|
return out;
|
53
110
|
}
|
data/lib/bcrypt/engine.rb
CHANGED
@@ -53,6 +53,13 @@ module BCrypt
|
|
53
53
|
# Given a secret and a valid salt (see BCrypt::Engine.generate_salt) calculates
|
54
54
|
# a bcrypt() password hash. Secrets longer than 72 bytes are truncated.
|
55
55
|
def self.hash_secret(secret, salt, _ = nil)
|
56
|
+
unless _.nil?
|
57
|
+
warn "[DEPRECATION] Passing the third argument to " \
|
58
|
+
"`BCrypt::Engine.hash_secret` is deprecated. " \
|
59
|
+
"Please do not pass the third argument which " \
|
60
|
+
"is currently not used."
|
61
|
+
end
|
62
|
+
|
56
63
|
if valid_secret?(secret)
|
57
64
|
if valid_salt?(salt)
|
58
65
|
if RUBY_PLATFORM == "java"
|
data/lib/bcrypt_ext.jar
CHANGED
Binary file
|
@@ -31,6 +31,12 @@ describe "Creating a hashed password" do
|
|
31
31
|
specify "should tolerate very long string secrets" do
|
32
32
|
expect { BCrypt::Password.create("abcd"*1024) }.not_to raise_error
|
33
33
|
end
|
34
|
+
|
35
|
+
specify "blows up when null bytes are in the string" do
|
36
|
+
# JRuby can handle the null bytes
|
37
|
+
skip if RUBY_ENGINE == 'jruby'
|
38
|
+
expect { BCrypt::Password.create( "foo\0bar".chop ) }.to raise_error
|
39
|
+
end
|
34
40
|
end
|
35
41
|
|
36
42
|
describe "Reading a hashed password" do
|
metadata
CHANGED
@@ -1,21 +1,21 @@
|
|
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.19
|
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: 2023-06-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
15
15
|
requirements:
|
16
16
|
- - "~>"
|
17
17
|
- !ruby/object:Gem::Version
|
18
|
-
version:
|
18
|
+
version: 1.2.0
|
19
19
|
name: rake-compiler
|
20
20
|
prerelease: false
|
21
21
|
type: :development
|
@@ -23,7 +23,7 @@ dependencies:
|
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 1.2.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
requirement: !ruby/object:Gem::Requirement
|
29
29
|
requirements:
|
@@ -62,7 +62,6 @@ files:
|
|
62
62
|
- Gemfile
|
63
63
|
- README.md
|
64
64
|
- Rakefile
|
65
|
-
- appveyor.yml
|
66
65
|
- bcrypt.gemspec
|
67
66
|
- ext/jruby/bcrypt_jruby/BCrypt.java
|
68
67
|
- ext/mri/bcrypt_ext.c
|
data/appveyor.yml
DELETED
@@ -1,50 +0,0 @@
|
|
1
|
-
version: "{branch}-{build}"
|
2
|
-
build: off
|
3
|
-
clone_depth: 1
|
4
|
-
|
5
|
-
init:
|
6
|
-
# Install Ruby head
|
7
|
-
- if %RUBY_VERSION%==head (
|
8
|
-
appveyor DownloadFile https://github.com/oneclick/rubyinstaller2/releases/download/rubyinstaller-head/rubyinstaller-head-x86.exe -FileName C:\head_x86.exe &
|
9
|
-
C:\head_x86.exe /verysilent /dir=C:\Ruby%RUBY_VERSION%
|
10
|
-
)
|
11
|
-
- if %RUBY_VERSION%==head-x64 (
|
12
|
-
appveyor DownloadFile https://github.com/oneclick/rubyinstaller2/releases/download/rubyinstaller-head/rubyinstaller-head-x64.exe -FileName C:\head_x64.exe &
|
13
|
-
C:\head_x64.exe /verysilent /dir=C:\Ruby%RUBY_VERSION%
|
14
|
-
)
|
15
|
-
|
16
|
-
# Add Ruby to the path
|
17
|
-
- set PATH=C:\Ruby%RUBY_VERSION%\bin;%PATH%
|
18
|
-
|
19
|
-
environment:
|
20
|
-
matrix:
|
21
|
-
- RUBY_VERSION: "head"
|
22
|
-
- RUBY_VERSION: "head-x64"
|
23
|
-
- RUBY_VERSION: "25"
|
24
|
-
- RUBY_VERSION: "25-x64"
|
25
|
-
- RUBY_VERSION: "24"
|
26
|
-
- RUBY_VERSION: "24-x64"
|
27
|
-
- RUBY_VERSION: "23"
|
28
|
-
- RUBY_VERSION: "23-x64"
|
29
|
-
- RUBY_VERSION: "22"
|
30
|
-
- RUBY_VERSION: "22-x64"
|
31
|
-
- RUBY_VERSION: "21"
|
32
|
-
- RUBY_VERSION: "21-x64"
|
33
|
-
- RUBY_VERSION: "200"
|
34
|
-
- RUBY_VERSION: "200-x64"
|
35
|
-
|
36
|
-
install:
|
37
|
-
- ps: "Set-Content -Value 'gem: --no-ri --no-rdoc ' -Path C:\\ProgramData\\gemrc"
|
38
|
-
- if %RUBY_VERSION%==head ( gem install bundler -v'< 2' )
|
39
|
-
- if %RUBY_VERSION%==head-x64 ( gem install bundler -v'< 2' )
|
40
|
-
- bundle install
|
41
|
-
|
42
|
-
before_build:
|
43
|
-
- ruby -v
|
44
|
-
- gem -v
|
45
|
-
|
46
|
-
build_script:
|
47
|
-
- bundle exec rake compile -rdevkit
|
48
|
-
|
49
|
-
test_script:
|
50
|
-
- bundle exec rake spec
|